Quicklinks 6
June 15, 2013 at 11:20 PM | categories: quicklinks |
最近道端の植物を観察するのがマイブームです。 写真は六本木ヒルズにあるミニ庭園っぽいとこに植えてあった草。名前はわからない。 おもしろい植物があってもなかなか名前を同定するところまで到達できないのがつらいところ。
Go
- http://ukai-go-talks.appspot.com/2013/gocon.slide
- http://blogger.ukai.org/2013/04/go-conference-2013-spring.html
- http://talks.golang.org/2012/splash.article
- http://golang.jp/
- http://d.hatena.ne.jp/Jxck/20130530/1369928762
最近まわりで評判がよくて久々試してみたら思いの外よかったので真面目にやってみようかという気になりました。 勝手なイメージでは、ErlangとCとJavascriptのいいとこ取りしてる感じ。
Race Detectorなんてものもあるらしい。すごい。
TRICK 2013
これに入賞するにはプログラミングスキルだけじゃなくてセンスと教養と変態性が必要だと感じました。
電王戦
人同士が対戦してるのを見るのは別のおもしろさがあるので人間が負けたからといってどうということもないとは思いますが、 実際コンピュータが勝ってしまうとちょっと寂しくも感じてしまいますね。
ちなみに将棋の探索木データは一部公開されているようです。 今のところ使い道は特に思いうかびませんが、こういうものの存在を覚えておくとAIとかを書きたくなったときとかに参考にできるかも。
ternjs
IDEでのJavaやC#みたいなインテリジェントなエディタサポートをJavascriptでもできるようにするためのものです。普通に便利ですね。
Xbox One, PS4
- http://www.xbox.com/en-US/xboxone/meet-xbox-one
- http://www.jp.playstation.com/ps4/
- http://youtu.be/pGQXdEHc3LY
- http://youtu.be/njfj6KwEAfg
もはやぱっと見では実写と見分けがつかないです。
Haswell
- http://www.intel.com/content/www/us/en/processors/core/4th-gen-core-family-desktop-vol-1-datasheet.html
- http://ascii.jp/elem/000/000/726/726151/
何やらおもしろそうな新機能が導入されたようです。
NSAのリークの話
一個人が天下のアンクル・サムさんに喧嘩を売るという映画のような展開で野次馬せずにはいられません。
暗号利用モードについて
June 12, 2013 at 08:36 AM | categories: security |AESを使おうと思ったけどどの暗号利用モードをつかえばいいかわからなかったので調べたことをまとめておきます。
暗号利用モードとは
暗号利用モード(あんごうりようモード、Block cipher modes of operation)とは、ブロック暗号を利用して、ブロック長よりも長いメッセージを暗号化するメカニズムのことである。
ECBモード(単純なブロック暗号の利用法)では、ある鍵で同一の平文を暗号化すると、同一の暗号文になる。したがって、長いメッセージ(画像データなど)のある部分が他の部分と同じであるかどうかが、暗号文の比較によって判断できてしまうので、他のモードが必要となった。
暗号利用モードには、秘匿用の利用モードと、認証用の利用モードとがある。
秘匿用利用モード
Wikipediaの図 も参考にするとわかりやすい。 以下は概要だけ。
ECB
各ブロックを単純に一つずつ処理するだけ。暗号が一致したブロックは復号した平文も一致する。 1つ以上のブロックを単一のパスワードで暗号化するのであれば使うべきではない。
CBC
直前の暗号テキストブロックを次の平文テキストブロックにXORしてからブロック暗号処理することを繰り返す。 最初のブロックはIV(Initialization Vector)をつかって暗号化する。
暗号化は前から順番にする必要があるが、複合は1つ前のブロック前が分かればできるので並列化が可能。
CFB
CBCと似ているが、直前の暗号テキストブロックを再度ブロック暗号処理したものに次の平文テキストブロックをXORしたものを暗号テキストとする。 最初のブロックはIVだけブロック暗号処理してXORする。 CBCとはXORのタイミングが違うだけ。
特徴もCBCと同じで、暗号化処理は並列化できないが複合は可能。
OFB
IVを繰り返しブロック暗号処理したものにそれぞれ平文ブロックをXORしていったものを暗号テキストとする。 すべての操作で直前のものが必要となるので暗号化・復号の両方とも並列化はできないが、IVのブロック暗号処理は事前に計算することができる。
CTR (ICM, SIC)
OFBに似ているが、IVではなくカウンターの値をインクリメントしつつブロック暗号処理したものに平文ブロックをXORする。 カウンターは十分に長い間繰り返しが発生しない一意な値を出力する任意の関数であれば何でもよいが、単に1ずつ増やすカウンターを使うことが多い。
暗号・復号いずれも並列化が可能だが、入力に決定的な値を使うことについては議論の余地がある。
ディスク用のもの
ディスクを暗号化するには特別な考慮が必要になるため専用のものがいくつか存在する。
- LRW
- XEX
- XTS
- CMC
参考
- http://en.wikipedia.org/wiki/Disk_encryption_theory
- http://csrc.nist.gov/publications/nistpubs/800-38E/nist-sp-800-38E.pdf
- http://axelkenzo.ru/downloads/1619-2007-NIST-Submission.pdf
認証用の利用モード
秘匿化とあわせて認証とデータの完全性を保証するためのモード。 通常はMAC(Massage Authentication Code, authentication tag)を組みあわせることで実現する。
その他
- 上記では触れなかったが、並列化できるかどうかの他にもエラー検出が可能かどうかや組み合わせて使用するブロック暗号化方式の特徴なども考慮して選択する必要がある
- 特許になっているものも多いので使用する際は要確認
- mysqlのaes_encrypt()ではECBをつかっているのでセキュリティ強度的にはあまりよろしくない
参考
- http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
- http://en.wikipedia.org/wiki/Authenticated_encryption
- http://en.wikipedia.org/wiki/Message_authentication_code
- http://en.wikipedia.org/wiki/OCB_mode
- http://www.heliontech.com/aes_modes_basic.htm
- http://www.triplefalcon.com/Lexicon/Encryption-Block-Mode-1.htm
- http://www.schneier.com/blog/archives/2009/07/another_new_aes.html
- http://stackoverflow.com/questions/1220751/how-to-choose-an-aes-encryption-mode-cbc-ecb-ctr-ocb-cfb
- http://stackoverflow.com/questions/2797692/whats-the-best-way-to-store-sensitive-data-in-mysql
- http://www.cs.ucdavis.edu/~rogaway/ocb/license.htm
Mach-Oバイナリのライブラリロードパスをカスタマイズする方法
May 17, 2013 at 07:46 PM | categories: osx, unix, elf, mach-o |ライブラリの単体テストをするときとかに、実行プログラムがロードする共有ライブラリのパスを任意のディレクトリで上書きしたいときがある。
例えば以下のようなディレクトリ構成で、project/t/mytest
というバイナリをビルドするときにproject/src/libmy.so
をリンクするようにしておけば作業しやすい。
└── project ├── src │ ├── libmy.a │ ├── libmy.so -> libmy.so.1 │ ├── libmy.so.1 │ ├── Makefile │ ├── mylib.c │ ├── mylib.h │ └── mylib.o └── t ├── Makefile ├── mytest ├── mytest.c └── mytest.o
こういうときは、mytest
をビルドするときに以下のようにしてrpathを相対パスで追加していた。
$ cc -I../src -L../src -Wl,-rpath=../src *.c -lmy -o mytest $ readelf -d mytest Dynamic section at offset 0xe30 contains 22 entries: Tag Type Name/Value 0x0000000000000001 (NEEDED) Shared library: [libmy.so.1] 0x0000000000000001 (NEEDED) Shared library: [libc.so.6] 0x000000000000000f (RPATH) Library rpath: [../src] 0x000000000000000c (INIT) 0x4004c8 0x000000000000000d (FINI) 0x4006f8 0x000000006ffffef5 (GNU_HASH) 0x400298 0x0000000000000005 (STRTAB) 0x4003c0 0x0000000000000006 (SYMTAB) 0x4002d0 0x000000000000000a (STRSZ) 134 (bytes) 0x000000000000000b (SYMENT) 24 (bytes) 0x0000000000000015 (DEBUG) 0x0 0x0000000000000003 (PLTGOT) 0x600fe8 0x0000000000000002 (PLTRELSZ) 48 (bytes) 0x0000000000000014 (PLTREL) RELA 0x0000000000000017 (JMPREL) 0x400498 0x0000000000000007 (RELA) 0x400480 0x0000000000000008 (RELASZ) 24 (bytes) 0x0000000000000009 (RELAENT) 24 (bytes) 0x000000006ffffffe (VERNEED) 0x400460 0x000000006fffffff (VERNEEDNUM) 1 0x000000006ffffff0 (VERSYM) 0x400446 0x0000000000000000 (NULL) 0x0
しかし、OSXの場合は上記のように単に実行バイナリ側にrpathを追加しただけだと、ローダがrpathを設定するコマンドより先にライブラリをロードするコマンドを実行しようとして該当ファイルがみつけられなくて以下のようなエラーになってしまう.
dyld: Library not loaded: libmy.1.dylib Referenced from: /Users/path/to/project/t/./mytest Reason: image not found zsh: trace trap ./mytest
otool -l <executable file>
でロードコマンドの詳細をみると以下のようなエントリがみつかるが、ここのnameの値はライブラリ側のinstall_path
が設定される。
-- 中略 Load command 11 cmd LC_LOAD_DYLIB cmdsize 40 name libmy.1.dylib (offset 24) time stamp 2 Thu Jan 1 09:00:02 1970 current version 1.0.0 compatibility version 0.0.0
install_path
はsoname
のかわりのようなもので、なにも指定しなければ出力ファイル名になる。
ここに@executable_path
や@rpath
をつかうことによって、このダイナミックライブラリをリンクする側のバイナリに応じて挙動をかえることができる。
これらの変数(?)の詳細は参考リンクに解説がある。
要は、ELFのrpathとおなじような挙動にしたければ、 -Wl,-install_name,@rpath/libmy.1.dylib
というようなオプション付きでライブラリをビルドすればよい。
また、-Wl,-install_name,@executable_path/../src/libmy.1.dylib
のようにすると実行ファイルからの相対パスにすることができる。
この情報はリンクされる側のライブラリに埋めこまれている点に注意。
ELFに比べると柔軟にロードパスを制御することができると思われるが、うまく活用するのはちょっと難しそう。
参考リンク
ワイヤレスなRaspberry Pi環境をつくる
April 28, 2013 at 01:54 AM | categories: raspberry pi |Raspberry Pi遊ぶからにはその小ささを生かしたことがしたいですよね。 というわけで手始めにワイヤレス化しました。手順は非常に簡単で、ほぼAmazonで買ったパーツを差すだけで達成できました。
Raspberry Piを標準的な構成でうごかすとLANケーブル、電源、 キーボード、ディスプレイの4本コードがのびることになりますが、sshで接続できればディスプレイもキーボードも不要なのであと必要なのはネットワーク環境と電源だけです。
電源は 5V 700mA なので、普通のスマートフォン用バッテリーがそのまま使えます。 5V 700mAを越えていれば何でもいいと思いますが、今回は以下をつかいました。
ネットワークはUSBの無線LAN受信機を使います。 これも何でもいいと思いますが、あまり最新のモデルだとドライバが対応してないかもしれないのでちょっと古めのもののほうが無難です。以下の商品は問題なく動きました。
wifiの設定はX Windowの設定画面からしました。startx
でデスクトップを起動するとWiFi Config
というアイコンがあるのでそこから設定できます。
ターミナルでifconfig
を実行してwlan0にinet addrが割り当てられていることを確認できればOKです。
pi@raspberrypi ~ $ /sbin/ifconfig eth0 Link encap:Ethernet HWaddr b8:27:eb:90:32:15 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1104 (1.0 KiB) TX bytes:1104 (1.0 KiB) wlan0 Link encap:Ethernet HWaddr 10:6f:3f:ec:5f:b8 inet addr:192.168.1.13 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:4285 errors:0 dropped:0 overruns:0 frame:0 TX packets:673 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:937903 (915.9 KiB) TX bytes:81630 (79.7 KiB)
ここで確認したIPアドレスにsshしてつながれば完了です。
Raspberry Pi はじめました
April 28, 2013 at 01:30 AM | categories: raspberry pi |前々から気になってたRaspberry Piを手に入れました。
最終的にはセンサーとかいろいろつけてインタラクティブなおもちゃをつくりたいですが、当面の目標は秋月電子で調達してきたLCDディスプレイに文字を表示させるためのドライバを書くことにしようと思います。
Raspberry Piのセットアップ手順はぐぐればすぐでてくるので割愛しますが、そのままだとsdcardの空き領域がつかえないので起動時にマウントできるようにするまでの手順だけメモしときます。
pi@raspberrypi ~ $ sudo fdisk /dev/mmcblk0 Command (m for help): p Disk /dev/mmcblk0: 31.7 GB, 31674335232 bytes 4 heads, 16 sectors/track, 966624 cylinders, total 61863936 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00014d34 Device Boot Start End Blocks Id System /dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA) /dev/mmcblk0p2 122880 3788799 1832960 83 Linux Command (m for help): n Partition type: p primary (2 primary, 0 extended, 2 free) e extended Select (default p): Using default response p Partition number (1-4, default 3): Using default value 3 First sector (2048-61863935, default 2048): 3788800 Last sector, +sectors or +size{K,M,G} (3788800-61863935, default 61863935): Using default value 61863935 Command (m for help): p Disk /dev/mmcblk0: 31.7 GB, 31674335232 bytes 4 heads, 16 sectors/track, 966624 cylinders, total 61863936 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00014d34 Device Boot Start End Blocks Id System /dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA) /dev/mmcblk0p2 122880 3788799 1832960 83 Linux /dev/mmcblk0p3 3788800 61863935 29037568 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. pi@raspberrypi ~ $ sudo mkfs.ext4 /dev/mmcblk0p3 mke2fs 1.42.5 (29-Jul-2012) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 1815072 inodes, 7259392 blocks 362969 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=0 222 block groups 32768 blocks per group, 32768 fragments per group 8176 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
上記のように、fdisk
でパーティションをきってrebootしたあと、mkfs.ext4
でフォーマットします。
最後に/etc/fstab
に以下を追記してもう一度再起動して完了です。 マウントするディレクトリ(以下だと/home
)は適当にかえてください。/homeにマウントする場合はpiユーザのホームディレクトリをコピーしておくといいと思います。
/dev/mmcblk0p3 /home ext4 defaults,noatime 0 2
pi@raspberrypi ~ $ df -h Filesystem Size Used Avail Use% Mounted on rootfs 1.8G 1.4G 246M 86% / /dev/root 1.8G 1.4G 246M 86% / devtmpfs 212M 0 212M 0% /dev tmpfs 44M 276K 44M 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 88M 0 88M 0% /run/shm /dev/mmcblk0p1 56M 19M 38M 34% /boot /dev/mmcblk0p3 28G 172M 26G 1% /home
About Me
mojavy |
Recent posts
95/5 Mbps とは
(August 30, 2015 at 04:22 PM)組み込み用プログラミング言語のパフォーマンス比較
(April 21, 2015 at 01:10 AM)最近読んだ本
(April 05, 2015 at 01:23 PM)Phabricatorを使ったワークフローについて
(March 02, 2015 at 08:55 PM)dnsimpleでダイナミックDNSをつかう
(December 23, 2014 at 08:02 PM)www2014のアドテク関連のResearch Trackメモ
(October 06, 2014 at 09:05 PM)flappymacs がMELPAに登録されました
(July 16, 2014 at 01:07 AM)EmacsでFlappy Birdっぽいもの書きました
(July 10, 2014 at 08:01 PM)
Recent Popular posts
Popular posts
Categories
- C (rss) (3)
- R (rss) (1)
- adtech (rss) (1)
- advent calendar (rss) (2)
- algorithms (rss) (2)
- android (rss) (2)
- aws (rss) (1)
- blog (rss) (2)
- blogofile (rss) (3)
- books (rss) (1)
- c++ (rss) (1)
- chef (rss) (4)
- common lisp (rss) (10)
- debian (rss) (2)
- dns (rss) (1)
- elasticsearch (rss) (1)
- elf (rss) (1)
- elisp (rss) (1)
- emacs (rss) (5)
- english (rss) (1)
- game (rss) (2)
- gearman (rss) (1)
- git (rss) (1)
- github (rss) (1)
- gitlab (rss) (1)
- golang (rss) (2)
- history (rss) (1)
- impress.js (rss) (1)
- internet (rss) (1)
- ios (rss) (3)
- jekyll (rss) (1)
- jenkins (rss) (1)
- linux (rss) (4)
- lisp (rss) (2)
- ltsv (rss) (1)
- lua (rss) (1)
- mac (rss) (3)
- mach-o (rss) (1)
- memo (rss) (2)
- mustache (rss) (1)
- note (rss) (1)
- objective-c (rss) (4)
- os (rss) (1)
- osx (rss) (2)
- others (rss) (1)
- paco (rss) (1)
- pdf (rss) (1)
- php (rss) (2)
- postfix (rss) (1)
- programming (rss) (12)
- project management (rss) (1)
- python (rss) (5)
- quicklinks (rss) (6)
- raspberry pi (rss) (2)
- redmine (rss) (1)
- reveal.js (rss) (1)
- ruby (rss) (10)
- sbcl (rss) (2)
- security (rss) (1)
- shell (rss) (2)
- smtp (rss) (1)
- solr (rss) (1)
- statistics (rss) (2)
- tips (rss) (10)
- tmux (rss) (3)
- toml (rss) (1)
- tools (rss) (1)
- twitter (rss) (1)
- ubuntu (rss) (1)
- unix (rss) (5)
- v8 (rss) (1)
- web (rss) (7)
- xcode (rss) (1)
- zeromq (rss) (2)
Archives
- August 2015 (1)
- April 2015 (2)
- March 2015 (1)
- December 2014 (1)
- October 2014 (1)
- July 2014 (3)
- March 2014 (6)
- February 2014 (4)
- November 2013 (3)
- October 2013 (4)
- September 2013 (2)
- July 2013 (2)
- June 2013 (2)
- May 2013 (1)
- April 2013 (6)
- March 2013 (3)
- February 2013 (8)
- January 2013 (5)
- December 2012 (1)
- November 2012 (6)
- October 2012 (7)
- August 2012 (1)
- July 2012 (9)
- June 2012 (1)
- April 2012 (1)
- December 2011 (2)
- November 2011 (2)