2013 年目標

技術をあえて狭める年になりそうです。

課題

  • Erlang/OTP
    • 本家へのコミットを少しでも増やす
    • NIF を少しずつでもいいので書けるようにする
  • Python
    • Python らしい書き方を無意識で出来るようにする
    • PySide 使った GUI を学ぶ
  • 英語
    • ヒアリング向上
    • ボキャブラリー増やす

やること

  • ブログを独自ドメインに移行する
    • Sphinx と S3 ベースで動かすつもりです、さよならはてなぶろぐの予定
  • Raspberry Pi を使って何かする
    • 小さな PC に手を出してみる
  • 技術書以外を読む
    • もう少しいろいろな本を読むようにる

2012 年を振り返る

  • 英語
  • 仮想化
  • 自動化
  • Clojure

年の初めはこの辺を想定してたみたいです。

英語

英語はまぁ色々な場面で使いました。英語のメールとか人生で一番書いた気がします。

話す機会も増えました。へったくそですがとりあえず勢いで話してます。ただヒアリングが辛いですね。
今後はこの辺か。

仮想化

結局 XenServer 以上の事はやりませんでした。あまりにもコストが大きすぎて手を付ける余裕が無かったです。

自動化

自分は全然やりませんでしたが、やらせることには成功した歳だったなと。

Clojure

最初は色々調べてみていたんですが結局、Clojure のライブラリ群を追いかける気力が無くなって、
やめてしまいました。ただ学んだことは損じゃなかったかなと。

まとめ

「やること」と「やらせること」を分けるべきだなと。あとはやっぱり新しい言語を学ぶ場合は「仕事」をベースに考えないと難しい事が明確になってきました。

これをもとに来年の目標を立てたいと思います。来年はまぁ色々やることがわかってるので大丈夫かな。

AES の CTR モード

[crypto][erlang]AES の CTR モードのストリームタイプ

暗号データにランダムアクセスが可能になる (IVec が固定) ため、並列処理が可能となる AES の Counter Mode を試してみました。

ストリーム暗号なので、パディングがいらないのがいいですね。

まずは基本的なところで

Erlang R15B02 (erts-5.9.2) [source] [64-bit] [smp:4:4] [async-threads:0] [kernel-poll:false] [dtrace]

Eshell V5.9.2  (abort with ^G)
1> Key = crypto:strong_rand_bytes(32).
<<195,208,93,158,92,153,199,116,175,237,136,222,99,112,
  132,235,113,181,239,230,36,227,75,166,220,44,94,0,152,
  ...>>
2> IV = crypto:strong_rand_bytes(16).
<<103,24,128,108,59,235,30,41,208,236,122,47,44,216,200,2>>
3> Cipher = crypto:aes_ctr_encrypt(Key, IV, <<"spam">>). 
<<145,208,153,142>>
4> crypto:aes_ctr_decrypt(Key, IV, Cipher).
<<"spam">>

Erlang の crypto には aes_ctr_stream_init/2 があるのでそれを使ってみます

Erlang R15B02 (erts-5.9.2) [source] [64-bit] [smp:4:4] [async-threads:0] [kernel-poll:false] [dtrace]

Eshell V5.9.2  (abort with ^G)
1> Key = crypto:strong_rand_bytes(32).
<<91,111,86,156,1,12,23,244,91,25,153,159,25,139,115,205,
  228,100,158,61,9,64,165,14,185,43,243,39,33,...>>
2> IV = crypto:strong_rand_bytes(16).
<<154,49,236,153,246,155,109,146,212,65,155,56,184,226,
  142,215>>
3> State = crypto:aes_ctr_stream_init(Key, IV).
{<<91,111,86,156,1,12,23,244,91,25,153,159,25,139,115,205,
   228,100,158,61,9,64,165,14,185,43,243,39,...>>,
 <<154,49,236,153,246,155,109,146,212,65,155,56,184,226,
   142,215>>,
 <<0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>,
 0}
4> {NewState, Cipher} = crypto:aes_ctr_stream_encrypt(State, <<"spam">>).
{{<<91,111,86,156,1,12,23,244,91,25,153,159,25,139,115,
    205,228,100,158,61,9,64,165,14,185,43,243,...>>,
  <<154,49,236,153,246,155,109,146,212,65,155,56,184,226,
    142,216>>,
  <<255,161,127,123,51,205,69,22,77,219,85,251,253,52,200,
    200>>,
  4},
 <<140,209,30,22>>}
5> crypto:aes_ctr_stream_decrypt(State, Cipher).   
{{<<91,111,86,156,1,12,23,244,91,25,153,159,25,139,115,
    205,228,100,158,61,9,64,165,14,185,43,243,...>>,
  <<154,49,236,153,246,155,109,146,212,65,155,56,184,226,
    142,216>>,
  <<255,161,127,123,51,205,69,22,77,219,85,251,253,52,200,
    200>>,
  4},
 <<"spam">>}

参考

PySide を Mac 10.7.5 で使う

PyQt をちまちまと試していたのですが @nobonobo から PySide も Python3.3 に対応したのが MacPorts にあるよという事を教えて頂いたので試してみました。

そもそも PyQt や PySide はインストールが色々めんどくさいというイメージがあり、手を付けるのがめんどくさいなぁと思っていました。

とりあえず試すだけ試してみました。

sudo port install py33-pyside

特にはまることも無くインストールが完了し、あとはサンプルコードを書いて実行したところ問題なく動作しました。

# encoding=utf8

import sys

from PySide import QtGui

class MainForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainForm, self).__init__(parent)

        hello_button = QtGui.QPushButton("はろーぱいさいど")
        self.setCentralWidget(hello_button)

def main():
    app = QtGui.QApplication(sys.argv)

    form = MainForm()
    form.show()

    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

インストールコストがとても低くなっていることにびっくりしました。

難しい事は全然知らないのでまだ PyQt と PySide の違いにぶつかっておりません。 とりあえずは PyQt ではなく PySide で勉強を続ける予定です。

とにかくちまちま手を動かすことから始めるしかないですね。

参考

TODO 2012-11

もうあと 2 ヶ月ありませんが、今年中にやることメモ

  • Erlang

    • ldap (eldap)

      • 環境構築から始まってもう少し使ってみる
    • syslog (erlang-syslog)

      • 環境構築から始まってもう少し使ってみる
  • Python

    • PyQt / PySide

      • まずは GUI の使い方を覚える
    • Boto

      • Glacier と S3 あたりの連携、さらには PyQt での GUI
  • LXC

    • 検証環境には XenServer より良さそうなので、触っていく