たいやきブログ

mail to tsuyoshi.ogawa[a]gmail.com if you have some question!

仕事について

直近で、転職が続いたため、ここらで自分はどんな仕事が向いてるのかあらためて整理してみる。

仕事内容 エンジニア職、技術的に新しいことにチャレンジできる。routine workではない
誰と働くか
雰囲気 殺伐としていない、体育会系ではないw
体制 仕事が属人化せずドキュメント等がそれなりに存在する
仕事道具 Macを選べる、モニタは大きい
各種ツール HipChat、Slack等が使える、GitHubでコード管理してる、etc.
勤務体型 極端に残業が多くない、ある程度裁量で働ける、休みが取りやすい、家からでも作業可能
通勤 30分以内で通える、チャリ通勤可
服装 カジュアル可
給料 高いに越したことはないが上記条件が満たせるなら多少低くてもOK

こんなとこかな。

ちなみに、自分はSIerのA社、起業、Messageアプリで有名なL社、Cloudで有名なA社とお世話になってきたが、どこも上記をそれなりに満たしている場所だったと思う。ただ、人間、欲が深いのでやはりすべての条件を満たしたくなる。まあ、文句あるなら自分で社長になって起業するしかないかなと思う。

Heatbeat 脆弱性について

うわさのOpenSSLのHeatbeat脆弱性について調べたので、参考になりそうなリンクをまとめます。
簡単にいうと、サーバに対してデータ(payload)とデータ長(size,
length)を送信するときに、送信するデータ長が実際のデータよりも大きい値を指定すると通信先のプロセス内の全然関係のないmemory領域の内容をレスポンスとして返してしまうバグのようです。で、SSL通信の場合、そのプロセス内にSSL証明書作成時の秘密鍵を保持しているので、秘密鍵が漏れてしまう可能性があることが問題といったところでしょうか。(もちろん、鍵情報以外の任意のデータが漏洩しうる。)

詳しくは、以下のリンクをじっくりみれば理解できると思います。

  • 概要を理解したい場合

http://heartbleed.com/

  • 脆弱性の仕組みを理解したい場合

https://vimeo.com/91425662

  • コードレベルで理解したい場合

http://lewuathe.com/blog/2014/04/08/opensslfalsecui-ruo-xing-wodu-nta/

  • リスクについて理解した場合

http://d.hatena.ne.jp/nekoruri/20140410/heartbleedrisk

(追記)
こちらも詳しいのでペタリ。
http://blog.kazuhooku.com/2014/04/heartbleedweb.html

(追記 @ 2014/4/14)
秘密鍵を入手した場合に、どーやったら通信の中身をのぞき見できるかを解説してる。
http://d.hatena.ne.jp/ozuma/20140413/1397397632

当選した!

Salesforceさん、ありがとうございます。もう、丸の内方面に足を向けて寝れません。

Levenshtein distance レーベンシュタイン距離

アルゴリズム勉強会でDPの問題を解くようになり、ふと思い出したので復習してみた。

レーベンシュタイン距離とは、2つの文字列X,Yの類似度を定量的に表現するための指標である。
dp[i][j] を文字列Xのi文字目と文字列Yのj文字目までのレーベンシュタイン距離とすると、dp[i][j]は帰納的にdp[i-1][j]、dp[i][j-1]、dp[i-1][j-1]から求まる。dp[i-1][j]、dp[i][j-1]はそれぞれ1だけ距離を足してあげればよく、dp[i-1][j-1]に関しては、i,j文字目が等しい場合は距離は変更ないので0,等しくない場合は1距離を足せばdp[i][j]と一致するはずである。これをやっているのが二重ループの箇所である。


DPを最初に考えたRichard Bellmanはまじ天才である。

vagrant x chef-solo

Linuxプログラミングをはじめるにあたり、その環境が必要になったのだが、普段使っているMacBook Proとは別にマシンを用意するのも面倒だ。Dual BootはOS間の移動が不自由で好きではないので、vmwareを考えていたのだが、terminalさえ使えれば問題ないので、以前、ちょっとだけ触ったvagrantに再挑戦してみた。
たった2つのcommand(vagrant init/up)でLinux環境がつくれるのはホントにありがたいのだが、環境を壊す(vagrant destroy)たびにvimの設定やら、zshの設定を書くのは面倒。そこで、環境設定をchef-soloで管理することにしてみた。

https://github.com/t11a/vagrant-cookbooks

至ってシンプルなので、ソースをみれば何をやっているかは把握できると思う。
基礎的な技術は学生だった7年前から特に変わっていないが、その上にのっかる技術は右肩上がりで便利になっているなぁと感心してしまった。

Unix系プログラミング

Advanced Programming in the UNIX Environment (3rd Edition) (Addison-Wesley Professional Computing Series)

Advanced Programming in the UNIX Environment (3rd Edition) (Addison-Wesley Professional Computing Series)

Unix Network Programming, Volume 1: The Sockets Networking API (Addison-Wesley Professional Computing Series)

Unix Network Programming, Volume 1: The Sockets Networking API (Addison-Wesley Professional Computing Series)

  • 作者: W. Richard Fenner, Bill Rudoff, Andrew M. Stevens
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2003/10/22
  • メディア: ハードカバー
  • 購入: 1人 クリック: 46回
  • この商品を含むブログ (4件) を見る

立て続けに購入してみた。正直、このへんの本は学生の頃に読んどくべきだったと後悔。どれも基本(といっても簡単という意味ではない)を扱っており、それだけに汎用性があり、応用力がつくものばかり。コツコツやるしかない。

TopCoder SRM596 Div2 Level 2 ColorfulRoad

DPの問題。

dp[i]をi+1文字目までの最小値と定義する。あとは、今の文字と次の文字をそれぞれi,j番目として二重ループでdpの内容を更新していけばよい。

dp[j] = min(dp[j], dp[i]+(j-i)*(j-i)); // j > i

ただし、更新できる条件はRGBの順序である必要があるので

colorid(road[j]) == (colorid(road[i]) + 1) % 3

を満たす必要がある。R,G,Bをそれぞれ0,1,2で表すことでプログラムがすっきりする。