タグ

ブックマーク / keens.github.io (28)

  • YubiKeyをLinuxの「鍵」にする | κeenのHappy Hacκing Blog

    κeenです。最近YubiKeyを買ったので色々試しています。今回はそのうちのLinuxログイン回です。 YubiKeyについて YubiKeyは米瑞企業のYubico社が販売している認証デバイスです。FIDOやらWebAuthnやらの文脈で耳にした方も多いんじゃないしょうか。YubiKeyは日ではソフト技研社が販売代理店をしています。 YubiKeyはラインナップがいくつかありますが私が買ったのはYubiKey 5 NFCです。 YubiKeyでできることは色々あります。 FIDO U2F FIDO2 / WebAuthn Challenge and Response OATH-TOTP / OATH-HOTP Yubico OTP PIV OpenPGP 静的パスワード 参考:Yubikey 5をArchLinuxで使う - Qiita このうち今回はFIDO U2F、Challen

    YubiKeyをLinuxの「鍵」にする | κeenのHappy Hacκing Blog
    michael26
    michael26 2021/10/16
  • シャドイングの嬉しさ | κeenのHappy Hacκing Blog

    κeenです。 Rustに限った話ではないのですが、よくRustを触ってみた人がシャドイングが気持ち悪いという反応をしているのを見かけるのでシャドイングがどういう機能かを解説します。 Rustのシャドイング まずは「気持ち悪い」と言われることもあるRustのシャドイングについて。 Rustでは以下のコードが合法です。 let input = "42"; let input = input.parse::<i32>().unwrap(); // 以後、i32 型のinputが見える let result = input * 2; input という名前の変数を2回導入しています。 最初の input は &str 型で、2つ目の input は i32 型です。 このコード以降では後に定義した i32 型の方の input が有効になっています。 後から導入した変数が先にあった変数を覆い隠す

    シャドイングの嬉しさ | κeenのHappy Hacκing Blog
    michael26
    michael26 2020/06/24
  • 安全なシステムプログラミング言語Rustへの招待 | κeenのHappy Hacκing Blog

    # 安全なシステムプログラミング言語Rustへの招待 ---------------------- [IIJ Labセミナー](https://iijlab-seminars.connpass.com/event/152079/) === # About Me --------- ![κeenのアイコン](/images/kappa.png) * κeen * [@blackenedgold](https://twitter.com/blackenedgold) * Github: [KeenS](https://github.com/KeenS) * GitLab: [blackenedgold](https://gitlab.com/blackenedgold) * [Idein Inc.](https://idein.jp/)のエンジニア + 2年半くらい仕事Rustを書いている

    michael26
    michael26 2019/11/19
  • RustのErrorとFailureのベンチマーク見たことある? | κeenのHappy Hacκing Blog

    κeenです。最近ちょくちょく標準ライブラリの Error とfailureライブラリの Fail が比べられる(というより Fail を推奨する)のが増えてきたようです。 個人的にちょっと気になってる点があって、みんなそれを抜きに議論してるようなので少しお話します。 タイトルにあるとおり、ベンチマークの話なのでいきなりですがベンチマークを使いましょう。 Box<dyn Error> を作るコストと failureライブラリの Error を作るコストを比べます。 何故 Fail ではなくfailureの Error かというと Fail は少し込み入ったベストプラクティスがあり、コードが長くなるからです。 ベンチマーク的にはベストプラクティスを使った Fail とfailureの Error は変わらないと思います。ベストプラクティスについては以下を参照して下さい。 rust のエラーラ

    RustのErrorとFailureのベンチマーク見たことある? | κeenのHappy Hacκing Blog
    michael26
    michael26 2019/07/22
  • RustのFutureとそのRunnerを作ってみた | κeenのHappy Hacκing Blog

    κeenです。Rust 1.36.0がリリースされましたね。 ここで標準ライブラリにFutureが入ったので試しに実装してみます。 Rust 1.36.0ではFutureとそれに関連したいくつかのアイテムが安定化されました。 これは今までcrates.ioにあったfuturesのAPIとは異なるもので、 1.38.0 で安定化される予定の async / await 導入の布石になるものです。futuresと標準ライブラリのFutureの関係や async / await についてはここでは詳しく触れないので別の記事を参照して下さい。 参考: Rustの未来いわゆるFuture - OPTiM TECH BLOG Rustのasync/awaitの特徴4つ - Qiita 何もしないFutureの実装 ひとまず Future のAPIを確認するために何もしない、ただ値を返すだけのFutur

    RustのFutureとそのRunnerを作ってみた | κeenのHappy Hacκing Blog
    michael26
    michael26 2019/07/16
  • 誰がUTF-32が使われてないなんて言ったんだ | κeenのHappy Hacκing Blog

    最近ではUTF-8でソースコードを書いてUTF-8で出入力をする。それ以外のエンコーディングは使われていない。…だと?誰がそんなこと言ったんだ ASCIIと古いUnicodeと新しいUnicode 少し長くなるが文字コードの話から始まる。ASCIIはお馴染み最低7bitあればASCIIの定義する文字集合を表せる。 古いUnicodeは16bitで全ての文字を表わすことを目標に作られた。 新しいUnicodeは文字(主に漢字)が多過ぎて16bitでは表せなかったので21bitに拡張された。 文字コードとエンコーディング 文字コードをどういう形式で表すかがエンコーディングだ。文字コードが7bit、16bit、21bitだからといってそのままのサイズで表わす訳ではない。ASCIIは普通8bitの型で表わすし21bitの型を用意するよりは32bitの型に格納した方が扱い易そうだ。あるいは8bit

    誰がUTF-32が使われてないなんて言ったんだ | κeenのHappy Hacκing Blog
    michael26
    michael26 2019/06/17
  • Rustのゼロコスト抽象化 | κeenのHappy Hacκing Blog

    κeenです。今日Twitter上でのやりとりから少し面白いことが分かったのでそれについて。 最近1.0が出たKotlinについて、水島さんがツイートしてました。 nullableに対してはmapとかの高階関数を一切使えないのが痛い。 ?. でカバーできるケースは一部だけだ。zero-overhead null-safetyと唄っとるが、代わりにnullチェックお化けになるわけで、どこがzero-overheadだ #kotlin_dis — 水島 宏太(Klassic作成中) (@kmizu) 2016年2月29日 それについて私が無関係なツイートを。 全く無関係だけどRustはOptionみたいな0-1の型をnull or valueに最適化するそうな。これこそがゼロコスト抽象かな https://t.co/5Y7cBEyrMe — κeen (@blackenedgold) 2016

    Rustのゼロコスト抽象化 | κeenのHappy Hacκing Blog
    michael26
    michael26 2019/05/26
  • Rustのマクロでネストした呼び出しを実現するために | κeenのHappy Hacκing Blog

    このエントリは Rustその2 Advent Calendar 2018の19日目のの記事です。時空を遡って書いています。 κeenです。 マクロのためのユーティリティマクロを書いていると呼び出しをネストしたくなりますが、簡単には実現できないのでそれについて。 あるいは過去記事の前半と後半のギャップについて。 TL;DR: CPSする 例えば構造体定義をラップしてそれをJSON風に出力するメソッドを生やすマクロを考えてみましょう。 こんなのです。 macro_rules! json { (struct $name: ident { $($field: ident : $ty: ty,)* }) => { struct $name { $($field: $ty),+ } impl $name { fn print_json(&self) { println!("{{"); $( print

    Rustのマクロでネストした呼び出しを実現するために | κeenのHappy Hacκing Blog
    michael26
    michael26 2019/04/30
  • 分散VCSのモデル、あるいはPijulについて | κeenのHappy Hacκing Blog

    先日、Pijulという分散VCSについて知って、それについて調べてみたら少し面白かったのでメモ。 DVCSで一番有名なのは間違いなくGitだろう。あれは分散グラフ理論木モデルに基いているらしい。ベースになったモデルがあることに驚いたが、調べても出てこなかった。 Gitは高速で信頼性が高い一方、コミット同士をチェーンのように繋げてしまうので柔軟性を欠き、例えばCherry Pickなんかがやりづらい。 あるいはリモートのmasterを取り込まずにローカルのmasterにコミットすると互いに独立した変更であっても一旦remote masterをマージしないとプッシュ出来ず、コミットグラフが汚れてしまう。 また、CUIが直感的でなく、理解しづらいという声もある。それはこういう皮肉にも現れている まあ、言われてみれば私もこのスライドを見てようやく理解した。 他のVCSにも色々特色はあって、歴史は神

    分散VCSのモデル、あるいはPijulについて | κeenのHappy Hacκing Blog
    michael26
    michael26 2018/10/14
  • 自然言語のアウトプットを継続的に出すためには | κeenのHappy Hacκing Blog

    κeenです。ミスってコーヒーと濃いめの緑茶を喫してしまって眠れないのて一筆執ります。 ふとソフトウェア界を見渡すにブログやドキュメントなどを継続的に書いてる人って意外と少ないのかなと思ったので自分なりに続く方法を書いてみます。 下記が統計コマンドと結果です。2018年はまだ3ヶ月弱残ってる上にアドベントカレンダーがまだなのでもう少し伸びる可能性がありますがまあ、+10程度でしょう。 $ find content/post -type f | xargs grep -h date: | grep -o -E '[0-9]{4}-[0-9]{2}-[0-9]{2}' | grep -o -E '[0-9]{4}' | sort | uniq -c 24 2013 39 2014 52 2015 48 2016 32 2017 25 2018 $ find content/slide -typ

    自然言語のアウトプットを継続的に出すためには | κeenのHappy Hacκing Blog
    michael26
    michael26 2018/10/11
  • 情報科学若手の会 #51 に参加してきた | κeenのHappy Hacκing Blog

    michael26
    michael26 2018/10/09
  • Futureとその周辺 | κeenのHappy Hacκing Blog

    # Futureとその周辺 ---------------------- [情報科学若手の会 #51](https://wakate.org/2018/07/28/51th-general/) === # About Me --------- ![κeenのアイコン](/images/kappa.png) * κeen * [@blackenedgold](https://twitter.com/blackenedgold) * Github: [KeenS](https://github.com/KeenS) * [Idein Inc.](https://idein.jp/)のエンジニア * Lisp, ML, Rust, Shell Scriptあたりを書きます * 言語処理系と継続が好き * 科学っぽい話はできないです >< === # 背景 ------- * 非同期計算を上手く扱

    michael26
    michael26 2018/10/08
  • Rust around you | κeenのHappy Hacκing Blog

    # Rust around you ---------------------- [第51回 情報科学若手の会](https://wakate.org/2018/07/28/51th-general/) === # About Me --------- ![κeenのアイコン](/images/kappa.png) * κeen * [@blackenedgold](https://twitter.com/blackenedgold) * Github: [KeenS](https://github.com/KeenS) * [Idein Inc.](https://idein.jp/)のエンジニア * Lisp, ML, Rust, Shell Scriptあたりを書きます === # Rust ------ * 安全なC++ * ML/Haskellみたいな機能 + タプル + 代数的

    michael26
    michael26 2018/10/07
  • Rustでstructのmutableなfieldあれこれ | κeenのHappy Hacκing Blog

    κeenです。人々にRustを薦めておきながら人は昨日ようやく入門しました。その時に困ったことをメモ。タイトルがルー語になってますが気にしない。 因みにこれはRust 1.0の情報です。 導入 Rustを知らない人のために説明すると、Rustの値はデフォルトでイミュータブルです。デフォルトで、というのはもちろんミュータブルにすることも出来ます。 標準ライブラリにも値がイミュータブルであることを要求するものもあります。 そしてミュータビリティはmutとして型にも現れます。厳密に同じかは知りませんがconstの逆、と思えばいいでしょう。 struct Point { x: isize, y: isize } fn double(p: &mut Point) { p.x = p.x * 2; p.y = p.y * 2; } fn main(){ let mut p1 = Point{x: 1

    Rustでstructのmutableなfieldあれこれ | κeenのHappy Hacκing Blog
    michael26
    michael26 2018/08/15
  • Rustに何が欲しいだろう | κeenのHappy Hacκing Blog

    κeenです。New Year’s Rust: A Call for Community Blogpostsの一環のつもりです。 恐らく英語の記事が望まれてるんだろうなと思いつつも試しに日から声を上げてみます。 私はRustは1.0前後の頃から触っていて、ドキュメントの翻訳をしたりここ1年くらいはIdein Inc.での業務でも使っています。 1年ほど使ってみて何が足りないか考えてみます。 言語 Associated HKT 当は一般のHKTがあると便利ですがひとまずはAssociatedなものが欲しいです。RFCでいうとこれです Generic associated types (associated type constructors) 。 欲しい状況は1つにはRFCと似たようなものなので割愛します。 GeneralなHigher Kinded Typesが欲しいのはtransac

    Rustに何が欲しいだろう | κeenのHappy Hacκing Blog
    michael26
    michael26 2018/08/06
  • isucon にCommon Lispチームで出た | κeenのHappy Hacκing Blog

    κeenです。 isucon に@nitro_idiot(深町さん)と@Rudolph_MillerのCommon Lispチームで出てきました。チーム名clfreaks。勿論Common Lispで再実装しました。 因みに深町さんは今回使ったWebサーバーのwooを含めCommon Lispのライブラリを多数公開している世界一のCommon Lisper、ルドルフさんは元Common Lispの会社のCTO。 前日 κeen 「あとはwooがunixソケット使えたら嬉しいんですがまあ、いいでしょう。」 fukamachi 「今からやれば明日には間に合うな」 fukamachi 「ローカルでは一応動いた。間に合いそうである」 fukamachi 「5倍ちょっとくらい速いかな」 この間1時間半足らず。 κeen 「練習してて気付いたんですけどデプロイツールってどうしましょう。」 fukama

    isucon にCommon Lispチームで出た | κeenのHappy Hacκing Blog
    michael26
    michael26 2018/08/01
  • rust初心者へのガイド | κeenのHappy Hacκing Blog

    シルバーウィークの進捗が芳しくなかったので雑な記事書いてお茶を濁しとく。rustをそれなりに(といっても1000行くらい)書いて溜まった知見をとりあえず出す。rust1.3時点。 最初の方で熱く語ってるが多くの人にとって欲しい情報は下の方にあると思う。 どんな言語 公式から持ってくるとこんな感じ。 zero-cost abstractions C++くらいの性能と思えばいい。 move semantics 他にはない難しい概念。しかしこれのおかげで様々な機能を教授出来る。 guaranteed memory safety move semanticsにより安全でない操作はコンパイル時に弾ける。 threads without data races move semanticsその他により安全でない操作は(ry trait-based generics 継承ベースとは違って開いている。型を定

    rust初心者へのガイド | κeenのHappy Hacκing Blog
    michael26
    michael26 2018/07/31
  • 関数型プログラマからみたRust | κeenのHappy Hacκing Blog

    C++からRustに入った人あたりから「関数型言語から来た人のRustの感想を知りたい」とたまに言われるのでいつかブログ書こうか。 — κeen (@blackenedgold) 2017年4月3日 イントロ 私はRustをやる前にはCommon LispやSMLを主に使っていましたが、仕事ではScalaを使っていましたし他にもOCamlやSchemeやClojureやATS2やHaskellなどを書くこともありました。 私を含めた多くの関数型言語経験者人が一度は Rust for functional programmers を読んだことがあるかと思います。 このように関数型言語と比較して書かれるといかにも似た言語に見えるので私は興味を持ちました。そこで私は実際にRustに触れ始めたのです。 構文 let があるのでおよそOCamlなどに似ているという印象を受けました。 デフォルトでイミ

    関数型プログラマからみたRust | κeenのHappy Hacκing Blog
    michael26
    michael26 2018/07/16
  • 非同期とノンブロッキングとあと何か | κeenのHappy Hacκing Blog

    κeenです。最近同期/非同期、ブロッキング/ノンブロッキング、直接形式/継続渡し形式あたりが混乱してきたので個人的に整理します。 あくまで私個人の理解を纏めただけなので誤謬などに注意して下さい。 追記: @tanaka_akrさんから指摘されたのですが、用語の説明が間違っていそうだったので書き直しました。 diffはこちら 非同期とノンブロッキングはよく混同されます。また、非同期処理の記述形式として直接形式や継続渡し形式などがあります。 私自身違う言葉だなとは思いつつも混同したり違いを忘れたりしています。 非同期もノンブロッキングもナイーブなIOに比べると速い方式だな程度の理解でいてそんなに困らないと思ってますし混同や誤用に目くじらを立てるつもりもありません。 しかしながら3者を区別しないと意味を成さない文脈で3者を混同している技術を何度か見掛けたので(自分の中で)整理しようと思ったのが

    非同期とノンブロッキングとあと何か | κeenのHappy Hacκing Blog
    michael26
    michael26 2017/05/21
  • メモリとスタックとヒープとプログラミング言語 | κeenのHappy Hacκing Blog

    κeenです。 今回の話は別にRustに限ったものではないのですが、よくRustを始めたばかりの人がスタックとヒープが分からないと言っているのをみかけるので少しメモリの話をしますね。 厳密な話というよりは雰囲気を掴んで欲しいという感じです。 メモリは配列 プログラム(プロセス)のメモリには実行するプログラム(機械語)やグローバル変数/定数、関数の引数やローカル変数、その他プログラムで使うデータ領域などを置きます。 プロセスに割り当てられるメモリというのは、1つの巨大なのっぺらな配列みたいなものです。サイズも決まってます。64bit OSなら2^64 byteです。 0 2^64 +--------------- ----+ | | | | | ~~ | | +--------------- ----+ これは仮想的なメモリなので実際の物理メモリに2^64 byteの配列がドンと確保される訳

    メモリとスタックとヒープとプログラミング言語 | κeenのHappy Hacκing Blog