2015/08/27

低レイヤな就活記 16卒版

僕自身の今年の一大イベントといえば、今年で大学の博士前期課程(修士)を卒業するので、どうしても避けられない就活というイベントがありました。

過去形で示している辺りから察して欲しいのですが、まあ戦いは終わって、行く先も決まって、ひとまずはそれ以外のことに集中できる環境にあります。

僕の行く先なんて気になる人はいないと思うのですが、同じ過ちを繰り返して同じような事になる人を増やさないためにも、体験談を書いておきたいと思います。

ただし、個人の見解を多分に含んでいます、これを参考にしても、僕は何も保証しません。

2015/06/28

セキュリティ・キャンプ 2015 応募用紙 選択問題5 のまとめ


みなさん、セキュリティ・キャンプ 2015応募しましたか?

え?年齢制限に達してて応募できない?なんて人も、今年の応募用紙は結構興味があるのではないでしょうか。
http://www.ipa.go.jp/jinzai/camp/2015/zenkoku2015_sheet.html

ところで、僕も今年はセキュリティ・キャンプの講師をやらせて頂くことになったので、実は応募用紙の問題に少し関わっていたりしました。

セキュリティキャンプでは、自作 CPU の開発と、その開発環境 (コンパイラ、アセンブラ) の移植開発に関する講義をやらせて頂きます。
全部話していると時間が足りないので、基本的なところを凝縮して限られた時間の中で伝えることが出来るような講義と開発時間にしようと思っています。

選択問題5はみんな解いてくれましたか?
まあ見たらなんとなくわかるかも知れませんが、これは僕が作問しました。

他の手を動かす系の問題から比べるとかなり簡単だった?と思いますが、解いてくれた人も結構多くて興味深く見させて頂きました。
初めてバイナリやアセンブラに触れた人もいたみたいで、それでこの問題を解いてくれるのかと、驚きでした。ぜひこれからも続けてバイナリ読めるようになって下さい!

ところで、問題の意味や答えが知りたい方もいると思いますし、自由記述の任意選択問題は面白い回答も結構あったので、少し個人的に問題の振り返りを書いてみたいと思います。

ちなみに、完全に正しい答えというのはありませんし、少なくとも僕は皆さんの応募用紙を問題が合っているか合っていないかだけでは評価していませんので、間違っていても安心して下さいね。

なんだかんだで、めちゃくちゃ長いです。
書いている途中で、ちょっとだけ書き始めたことに後悔しました。

もし問題を全部解いてくれたけど、全部見るの大変だ!!という方は、最後の設問5のフィードバックだけ目を通してみて下さい!!

2015/06/11

Nexus 5 の Wi-Fi が ON にならない現象 (未解決)



僕は、スマートフォンはずっと Android を使っていて、Nexus One を2010年の3月にシンガポール旅行のついでに購入して以来、Nexus シリーズを使い続け、Nexus 5 も発売直後に買って愛用しているのですが...

ある日突然 Nexus 5 の Wi-Fi が使えなくなってしまった。

上記の画像のような状態で、Wi-Fi を ON にしています... な状態でスタックしてしまっています。

Bluetooth も同様に使えなくなってしまっていて、こちらは ON にしても、すぐに勝手に OFF になってしまう状況です。

症状としてはまさにここに乗っている状態な感じ。結構報告があることからして、マイナーな症状ではなさそうですね。
[Q]Wifi stuck on 'turning on' | Google Nexus 5 | XDA Forums

たぶん、Wi-Fi と Bluetooth が同じチップに乗っていて、そのチップが死んだのだかハンダクラックかなんかでおかしくなっているのかわかりませんが、そういう感じな気がします。

ちなみに、dmesg もみてみました。

<6>[    1.434253] bcm_wifi_set_power: wifi power successed to pull up
<4>[    1.634505] wifi_set_carddetect = 1
<6>[    1.634547] wcf_status: wifi_detect = 1
<6>[    1.634619] mmc0: Slot status change detected (0 -> 1)
<6>[    1.635259] platform fe12f000.slim: Driver ngd_msm_ctrl requests probe deferral
<6>[    2.306387] msm-dwc3 msm_dwc3: DWC3 in low power mode
<4>[    3.634506] 
<4>[    3.634508] failed to power up wifi chip, retry again (4 left) **
<4>[    3.634510] 
<4>[    3.634684] ## wifi_remove
<4>[    3.634724] wifi_set_power = 0
<6>[    3.734831] bcm_wifi_set_power: wifi power successed to pull down
<4>[    3.734873] wifi_set_carddetect = 0
<6>[    3.734912] wcf_status: wifi_detect = 0
<6>[    3.734983] mmc0: Slot status change detected (1 -> 0)
<4>[    3.735470] wifi_set_power = 1
<6>[    3.885567] bcm_wifi_set_power: wifi power successed to pull up
<4>[    4.094520] wifi_set_carddetect = 1
<6>[    4.094564] wcf_status: wifi_detect = 1
<6>[    4.094637] mmc0: Slot status change detected (0 -> 1)
<6>[    4.095258] platform fe12f000.slim: Driver ngd_msm_ctrl requests probe deferral
<4>[    6.094519] 
<4>[    6.094520] failed to power up wifi chip, retry again (3 left) **
<4>[    6.094522] 
<4>[    6.094692] ## wifi_remove
<6>[    6.194770] bcm_wifi_set_power: wifi power successed to pull down
<6>[    6.194812] wcf_status: wifi_detect = 0

こんな感じのが続いていて、Wi-Fi チップの電源 ON に失敗しているようです。

リセットをかけたり、ファームウェアをいろいろ書き込んでみたり、分解してみたり、いろいろ手を売ってみましたが、全くダメそうです。

諦めて、最近は Xperia Z1f を使ってます。解決策ないかな...

2015/03/31

個人的 2014 年度まとめ

こんにちは。2014 年度も今日で終わりですね。
明日は、楽しい一日になりそうです。

ということで、今年度を少し振り返ってみました。
まあ、主に 僕の Facebook を眺めて上からまとめただけなんですが...

4月
  • 筑波大学大学院へ入学した。研究室は変わらずここ
  • 国際会議のポスター発表をした。場所は国内。
    (口頭発表は査読落ちた、ポスター通算2本目)
5月

6月
8月
9月
10月
11月
  • ISUCON 4 本戦に学生枠で出場した。(予選はいろいろあったが...) 
12月
  • ワークショップでポスター発表をした。アカデミックなイベントが楽しいという実感があった。(日本語) 
  • SECCON 2014 のオンライン予選に参加したが、海外ガチ勢だらけで歯が立たなかった。3年連続の全国出場という訳には行かなかった。
  • このあたりからぼちぼち就活っぽいものが始まった。
  • インフルエンザにかかって年末年始が終了のお知らせ。
2月
3月
  • 就活が本格的に始まった。しかし...
  • 国際会議の口頭発表の論文を投稿した。(通算2本目、査読待ち)
  • 同期で大学に入学した人々が、大学院を卒業していなくなってしまった。

とまあこんな感じで一年が終わってしまいました。
なんかだらけてしまって、あまり研究の進捗もなく、個人的な開発案件の進捗もなく...

来年度は7年間の大学 + 大学院学生生活が多分最後なので、進捗を生み出したい。
すでに、楽しそうな予定やお誘いが入っているので、頑張りたい。

2015/02/16

セキュリティキャンプフォーラム 2015 でローレイヤーな話をした


セキュリティキャンプフォーラム 2015 に行ってきました。

セキュリティ・プログラミングキャンプ界隈は、最近老害かなと思いつつ参加を自粛していたのだが、久しぶりに発表のお誘いをもらったので参加してきた。

今年のキャンプフォーラムは2部構成で、後半のテクニカルセッションのうち愛甲先生が主催のローレイヤー勉強会で発表する機会を頂いた。

話す内容は、ローレイヤーな話だったら何でも良いということなので、最近自分がやっている研究の OS の話でも良いのだが、せっかく若い人が大量にいるのでローレイヤーの層を厚くする活動をしようと思い、Open Design Computer Project に絡めてこちら側に引き込む系の話をした。


時間がなかなか足りなくて、話したいことをちゃんと伝えられたかどうかはわからない。
ちなみに、これに興味を持ったならぜひこちらのスライドも読んでみて欲しい。

そろそろ、自作 CPU 関連のネタは賞味期限も尽きてきた感があるし、どうしても万人受けする内容を作るとすごい薄い話になってしまうのが辛い。発表が下手くそなだけなのだが。

久しぶりにいろいろな人に会えて、とても良かった。研究もなかなか停滞していて、クズっている場合ではない。

今年は、SECCON も最後のオンライン予選一発にかけていたのだが撃沈して本戦出れなかったし、学生最後の年なのでやれること存分をやっていきたい。

2014/09/28

ISUCON4 で "BIG丼 (学生枠)" が1日目予選トップを取れた理由


ISUCON4 予選に参加されたみなさん、お疲れ様ですー。
"BIG丼" というチーム名で学生枠で参加していた @hktechno です。

チームメンバーは
の3人で参加しました。
全員筑波の入院生活民で、全員 SECCON CTF とかも出てるメンバーです。

全員 ISUCON 初挑戦です。準備も、何もしていませんでした。

まずは結果から...

僕達は、1日目の予選に参加したのですが、結果は以下のとおりです。
なんと、一般枠のチームを破り予選トップ!!

ISUCON という競技の性質上、そんなことがあっていいのか!
どうした現役インフラエンジニア!

と思うかもしれませんが、嘘を付いてもしょうがないので懺悔します。

正統派の方法で勝ち取った成績ではありません!!

1日目に提供されていたベンチマークプログラムにバグがあって、意図しない時間ベンチマークプログラムを流すことが出来る状態でした。

ベンチマークプログラムに与える workload のパラメーターの数値を極端に大きくすると、過負荷状態になって (load avg 100 とか) 本来想定していた時間に終了しないでベンチマークが流れてしまい、得点が上がるというバグを突いて驚異的な成績を叩き出しました。

これに気づいたのは、終了1時間ぐらい前でした。
少しつづ workload の数値を上げていくと、僅かながらベンチマークの数値が向上する現象を確認したので、頭打ちになる数値を確認していたのですが、上げれば上げるほど向上していくし、100を超えても上がり続けるんです...

そこで、あれ?なんか、おかしくね?なんかベンチマーク終わるの遅くね?って気づいたのですが、もしかしたらそういうゲームなのかもしれない...  あるはずないだろ!
と思いながら少しづつ観察していたのですが、300 とか 400 に上げたあたりで5分以上ベンチマークにかかる状態になり...

流石におかしいと思って、残り15分でサポートチャットで、この現象が意図したものか、違反ではないかということを確認しました。
この時点では、workload の数がいくつかとか、どうやったら発生するかとかは隠したままです。

あえてギリギリに報告したわけではないですが、この時間ではこれに気づいた他のチームも、たぶん同じことは出来なかったでしょう。
でも、既にこの問題に気づいていた他のチームもあったみたいです。

結果的に、今のところは最終的な結果は認められているようですが、2日目にはこの問題の修正が入ったようです。

出場枠の扱いについてもいろいろ変更があるようです。
詳しくは、運営の皆さんからのアナウンスを待ちましょう。
僕達の本戦出場も、AMI 検査もありますし、結果が正当なものではないのでどうなるかはわかりません。

いろいろあると思いますが、こういう事態はコンテストにはつきものですね...
それがひとつの醍醐味でもありますし?

それと、全員 SECCON CTF の全国大会出場メンバーだからって、別に  benchmarker を逆アセかけて解読したりはしてないですからね...

運営の皆さんは、お疲れ様でした。

正統派な方法でどこまでやったか...

チートの話を聞いてもしょうがないので、少しちゃんとした話もしましょう。

僕達のチームの最終的な提出結果は --workload=350 で 
tag:benchmarker type:score success:401684 fail:166 score:86974
でした。 

--workload=16 ぐらいにすると、大体 20000 点台でしたね。
なので、本来は全然本戦出場枠に届いていないです。

基本的には、DB に Index をつけて、MySQL と Unicorn を TCP ではなく Unix Domain Socket を使うようにして、static なファイルを nginx から配信するようにして、TCP TIME_WAIT 対策をして... ぐらいで昼前に 20000 点超えた気がします。

午後からは、Ruby 2.1 にしてみたり、DB のスキーマとコードに手を入れていたのですが、どちらも完全に逆効果だったので、元に戻しました。
/ が、ほぼ静的なページなのでどうにかしようと思ってましたが、うまくいかなさそうなのでやめました。
なので、ほぼコードには手に入れてない状態です。

チートな方法では、ファイルディスクリプタの制限にかかり始めたので、limits.conf や ulimit をいじって上げたりもしました。

ISUCON は、コードから手を入れるのは沼にはまっていくのはわかっていたので、午前はいじらずに行けるところまでいって調子良かったのですが、午後からつまりましたね...
結果的に、午後からはほぼスコアが向上しなかったです。

>> 追記
その後、延長戦を勝手にやっていたのですが Sinatra が development モードで動いてる事がわかり、production モードで動くように設定したら一気にスコアが向上しました。
さらに、MySQL のパラメータをちょこっとチューニングしたら、38000 ぐらいまでスコアが上がりました。

うまく改善した効果が出なかったのはこんなボトルネックがあったとは...
これはひどい。
>> 追記ここまで

敗因は、何が原因で詰まってるかを解析する方法がちゃんと用意出来ていなかったので、完全に手探りだったところですかね...
次出るときは、その辺りをちゃんと固めたいと思います。

まとめ

なにがさすがだ。実際はゴミクズ以下だった僕を慰めてくれ。

2014/09/17

PyCon JP 2014 で Micro Python の話をした #pyconjp


9月13,14,15 の3連休は PyCon JP 2014 に参加してました。
参加してました、というか僕は今年もスタッフ側です... (これとか)

スタッフ話は別のエントリで書くとして、今年はスピーカーとしても参加しました。
Micro Python の話をしてきました。