つれづれ日記 2016年2月

予定

毎日


2016年2月25日 (木曜日)

06:46:14 # Life x86のシステムコール。 久しぶりにarch/x86/entry/syscalls/syscall_32.tblを眺めてたらごっそりとシステムコールの数が増えててなんだろとおもったら昨年夏ころ x86/entry/syscalls: Wire up 32-bit direct socket calls でsocketcallが各々のシステムコールに分割されていた。ぱっとみてrecvmsgとかが追加されててこれ新機能でも何でも無いだろうとおもったらそういう意味だったのか。 seccompで処理したいときには便利かもしれないけどほんまかいな。

2016年2月22日 (月曜日)

17:05:34 # Life sha1の計算速度。 手元にあるいくつかの実装を比較してみた。openssl, gpg で使っている libgcrypt、そしてGitで他の実装がないときに使われれる block-sha1。 openssl の libcryptが corei7 でも raspberry pi でも一番高速で、block-sha1が一番低速だったけど一割くらいしか差がないので誤差範囲だなぁという印象。もっと倍速くらいかわるかと期待していたのだけど。 SHA1は順序に依存関係があるので、並列アルゴリズムとかはないっぽいので、大きなファイルのSHA1を計算するのは問題になる。よくあるのはブロックに分割してブロック単位でSHA1を取れば済むように設計するという手法みたい。Gitはその点ファイル全体のハッシュが高速にとれることに依存してしまっているので微妙だなぁ。 Raspberry Pi で 25MB/s くらい出て、Corei7では300MB/sくらい出てる気がする。

2016年2月19日 (金曜日)

09:58:32 # Life screenrc. 最近いろいろなホストにつながることが多いのでホスト名がほしいなぁとおもったので%Hを追加。 hardstatus alwayslastline "[%H] %`%-w%{=b bw}%n %t%{-}%+w"

2016年2月17日 (水曜日)

06:44:37 # Life chroot jailからの脱出。 以前も試したような気もしていたのだけど実際に手を動かしてchroot からの脱出方法を調べてみた。 chdirのなかで適当なディレクトリにchdirせずにchrootするとCWDが新しいchroot外部のディレクトリになり、そうするとchdir("..")で上のディレクトリに 移動できる。十分上のディレクトリに移動したらchroot(".")でそのディレクトリに移動できる。 chrootが/の..を.に変更しているハックであるとか、chrootが複数レイヤーを用意する再帰的な感じに適用されるわけではないという実装面とかにふと気づくわけでなんか味わいがある。 どこで実装されてるんだろう。 namei.cのfollow_dotdot_rcuあたりかな。

18:11:54 # Life emacs tramp の接続。 suspendから復活してネットワークが再接続したらtramp-cleanup-all-connectionsでSSHの接続を再開させたいのだけれどもそれはどうにか実装できるものだろうか。 ユーザ権限でサスペンドから復帰したときにスクリプトを実行したりとかできるのかな?

2016年2月10日 (水曜日)

17:26:15 # Life ディレクトリの再帰的な走査をC++からしたいとおもったんだけどどの標準関数でできるのかなと調べてみた。 nftw(コールバックにパラメータを渡すことができないのでグローバル変数が必要となる)、 fts-D_FILE_OFFSET_BITS=64 でコンパイルするとエラーになる) と微妙なAPIが用意されていてC++にもっとよいものなかったかなと調べたらC++17をめがけて std::filesystem::recursive_directory_iteratorなるものが提案されているらしい。 しかし手元のコンパイラではちゃんと実装されていないっぽかったのでそれを提案している人が以前実装していた boost::filesystem::recursive_directory_iteratorを使ってみた。 Range Forに突っこんでみようとしたらRange ForにはIterator自体は突っ込めなくて begin(), end() のあるものしか突っ込めないのに気づいたけど、その問題は 提案しているものでは解決しているがBoostの版は対応していないようだった。 プロポーザルは2012年のn3399 が最新なのかな。

2016年2月6日 (土曜日)

17:36:20 # Life ふともうちょっと新しい環境で試してみようとUbuntuをいじってみた。GCEでインスタンスを起動するのはすぐなのですごく楽。 Ubuntu 15.10にしてG++5.0にしてみたらいろいろとコンパイルが通らない。デフォルトで返り値のチェックしてないwrite(2)とかsystem(2)とかがコンパイルエラーになっててあとどうもas-neededで共有ライブラリがリンクされているっぽくて共有ライブラリをコマンドラインに指定する順番が重要になってしまってる。 clangよりゆるいものだと思って修正してなかったことをなんとかしないと。 ちょっとためしてノード稼働している時間だけで課金しているので10円とかで、月100円くらいディスク容量に課金している気がする。ディスクを維持しなければもっと安くできる気もするけどする必要をあまり感じない。

2016年2月1日 (月曜日)

10:28:13 # Life 最近手元でUser namespacesをつかっていろいろいじってるんだけどドキュメント通りにうごかないというかあまりドキュメントがない。


Junichi Uekawa