chikuchikugonzalezの雑記帳

趣味とか日記とかメモとか(∩゚д゚)

varsunをGitHubに引っ越した

ついこの間、初のRust用ライブラリ (Crate) を作たんですが、
chiku2gonzalez.hatenablog.com

crates.io の仕様とかでやっぱ Bitbucket に置いておくのは悲しいこと*1が起きるので、GitHubに引っ越しました*2
github.com

*1:Ownerのアイコンをクリックして移動する先がGitHubなので、そこにcrateのソースがなくて怪しまれる感がある

*2:引っ越しついでにバージョンが 0.1.1 になりました。Cargo.tomlの中身が変わったので区別のために分けただけですが。

続きを読む

Rust用の文字列展開ライブラリ varsun を作りました

ヴァルサンとか読みます *1
crates.ioで公開してます → https://crates.io/crates/varsun

どういうライブラリか

やりたかったことは単純に、文字列に埋め込まれた環境変数を展開したかったのです。
具体的にはGo言語の os.ExpandEnv 相当のができればよかった。

使い方
extern crate varsun;

let homedir = varsun::substitute("${HOME}", |name: &str| -> Option<String> {
    match ::std::env::var(name) {
        Ok(val) => Some(val),
        Err(_)  => None,
    }
});

環境変数に限ればヘルパー関数があって、こうなります。

extern crate varsun;

let homedir = varsun::substenvar("${HOME}");
// これは以下と同じだったりします。
// let homedir = varsun::substitute("${HOME}", varsun::envar);
特徴

地味な特徴として、Windows形式での展開が可能です *2
むしろこっちが本命かもしれない。

extern crate varsun;

let homedir = varsun::mswin::substenvar("%USERPROFILE%");

// 実は、varsun::{substitute, substenvar} は cfg!(windows) の結果がtrueの場合とそうじゃない場合で処理が違います。
// 具体的には
// if cfg!(windows) {
//     return varsun::mswin::substitute(src, fn);
// } else {
//     return varsun::posix::substitute(src, fn);
// }
// のようになってます。
TODOとか

検索が適当実装すぎるので、ちゃんとパフォーマンスが出るであろう実装にしたい*3

メモ

標準ライブラリで環境変数展開ができれば要らなくなるはずなんですけどねー

*1:VARiable SUbstitioN の略

*2:既存ライブラリはあったけど$HOGE 形式しかだめだったんよ

*3:そのためにはまずベンチマークをとれるようにならないといけないんですが、cargo benchを動かすにはNightlyが必要らしくて、ちょっと面倒だなーっと

スマホを新調しました✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

二年半ほど付き合ったAQUOS PHONE (SHL22) に別れを告げて、AQUOS PHONE SERIE (SHV34) に乗り換えました。
そしてとりあえず手帳型カバーを二つほど確保して、休みの間に試してたりしてました。

一つ目

エレコム製のこれ。これといって特殊な機能もなくて、とりあえずってことで装着してた。
弱めの磁石で蓋がずれたりしないのは👍

二つ目

ラスタバナナ  AQUOS ZETA/SERIE/Xx3 窓付き手帳型ケース ネイビー 2407AQUO

ラスタバナナ AQUOS ZETA/SERIE/Xx3 窓付き手帳型ケース ネイビー 2407AQUO

小窓に惹かれて投入したやつ。蓋開けるだけでロックまで外れるようになったりして、すぐに使えるのは便利なんだけど、蓋を固定するフラップとかがないのでわりとさくっとズレたりしそう。
ただズレるだけならいいんだけど、ズレると蓋が開いた扱いになって本体が反応しちゃうのでちゃんとロックしておかないと誤操作しそうだった。

なお、小窓には時計とカメラ起動ショートカットが置かれてました。小窓サイズで写真撮るのはちっちゃくてつらいかもしれない。

手帳型について

今回初の手帳型カバーだったので、慣れるまではヒーヒー言ってそうだなーという印象。電話はかける分には問題ないけど、受けるときはすぐに取れなかったりはした。
そしてスマホ本体に搭載されている特殊機能 *1 が使えなくなってるのでそのうち別のカバーを探してるかもしれない。

*1:持つだけで反応するグリップマジックのこと

Rustでserde_codegenを使わずにシリアライズしたかった

RustでJSON/YAMLとかにシリアライズしたい場合、たぶん今なら serde を使えばいいんじゃないかと思ってるんだけど、
serde-rs.github.io

ちょっと不便だなーって思うところがあって。それは

  • serde_codegen だとビルドスクリプトに書くことになるので、複数バイナリとか cargo test とかに対応しきれない
  • かといってマクロを使うと Nightly ビルドじゃないと動かない

といったところ。なので、ふと

serde_codegenが生成しているのと同じことするの書けばいいんじゃね?

などと考えたのが失敗だった _("_´ω`)_

続きを読む

続・ssh-keygenを使わずにOpenSSHキーペアを作りたかった

前略

先日作った makey さんですが、フィンガープリントの出力に対応しました。MD5/hexとSHA256/Base64の両対応です。
bitbucket.org

ところで

ssh-keygen の Randomart Image ってどうやって出してるんですかね (ろくに情報がない)。
これはソースを読み行くしかないのか…_("_´ω`)_ペショ

そして

DSA対応は諦めようかな…

ssh-keygenを使わずにOpenSSHキーペアを作りたかった

結果

Goで作りました。
bitbucket.org

目的とか

もともとはWindowsでOpenSSHキーを作るのに、わざわざPuTTYGenを使うのはちょっとなー、でもCygwin入れたくないしなー、みたいなことを考えてました。*1
そんなときに、Goの非標準パッケージに golang.org/x/crypto/ssh があるのに気がついてしまいまして。

そうだ、Goで作ればWindowsでも動くぞ…!

とか考えて作りました。

使い方

  1. go get する*2
  2. makey
  3. ✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
C:>go get bitbucket.org/chiku2gonzalez/makey
C:>makey -output hello
C:>dir
2016/05/26  23:08             1,766 hello
2016/05/26  23:08               380 hello.pub

makey -h とかするとオプション出てきます。-outputでファイル名を指定ない場合は id_rsa になるので注意してください。
というのも、保存処理は上書き (確認なし) なので。

やり残し

  • フィンガープリントしたい
  • Randomart imageとか出したい
  • DSAって対応するべきだろか
  • ssh-keygenにある以下の機能はあったほうがいいよね
    • ファイル名が指定されなかった場合に対話式で聞く
    • 上書き確認
    • ログ出さなくていいよモード (-quiet)

*1:特にMercurialSSH接続するときに、ssh-keygenがなくて困ったというのが発端。Gitの場合はGit Bash経由でssh-keygenが使えるから問題にならないはず

*2:ロスコンパイル環境がないのでバイナリは用意してないです

( ´¬`)つ Zun Doko KFM置いておきますね

世間はエイプリルフールらしいので、オフ会に持ち込んだキャラ*1を置いておきますね。

www.mediafire.com

*1:製作合計時間=6時間