僕自身の今年の一大イベントといえば、今年で大学の博士前期課程(修士)を卒業するので、どうしても避けられない就活というイベントがありました。
過去形で示している辺りから察して欲しいのですが、まあ戦いは終わって、行く先も決まって、ひとまずはそれ以外のことに集中できる環境にあります。
僕の行く先なんて気になる人はいないと思うのですが、同じ過ちを繰り返して同じような事になる人を増やさないためにも、体験談を書いておきたいと思います。
ただし、個人の見解を多分に含んでいます、これを参考にしても、僕は何も保証しません。
2015/08/27
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 6>6>4>4>4>4>6>6>6>4>6>4>6>6>4>6>4>4>4>4>4>6>6>6>6>4>6>
こんな感じのが続いていて、Wi-Fi チップの電源 ON に失敗しているようです。
リセットをかけたり、ファームウェアをいろいろ書き込んでみたり、分解してみたり、いろいろ手を売ってみましたが、全くダメそうです。
諦めて、最近は Xperia Z1f を使ってます。解決策ないかな...
2015/03/31
個人的 2014 年度まとめ
こんにちは。2014 年度も今日で終わりですね。
明日は、楽しい一日になりそうです。
ということで、今年度を少し振り返ってみました。
まあ、主に 僕の Facebook を眺めて上からまとめただけなんですが...
4月
6月
9月
3月
とまあこんな感じで一年が終わってしまいました。
なんかだらけてしまって、あまり研究の進捗もなく、個人的な開発案件の進捗もなく...
来年度は7年間の大学 + 大学院学生生活が多分最後なので、進捗を生み出したい。
すでに、楽しそうな予定やお誘いが入っているので、頑張りたい。
明日は、楽しい一日になりそうです。
ということで、今年度を少し振り返ってみました。
まあ、主に 僕の Facebook を眺めて上からまとめただけなんですが...
4月
- 筑波大学大学院へ入学した。研究室は変わらずここ。
- 国際会議のポスター発表をした。場所は国内。
(口頭発表は査読落ちた、ポスター通算2本目)
- カーネル/VM 探検隊 #10 で発表した。 (常連になりつつある、ておくれてはいない)
6月
- PyCon Singapore 2014 に参加した。英語で LT をした。(4年ぶり?のシンガポール)
9月
- 初めての国際会議口頭発表をした。もちろん英語。場所は国内。
- PyCon JP 2014 で発表した。
- プログラムチームのスタッフもした。以下書いた記事など。
- http://pyconjp.blogspot.jp/2014/07/pycon-jp-2014.html
- http://codezine.jp/article/detail/8006
- 某看護専門学校で、情報科学の非常勤講師として2月まで授業を担当した。先生になった。
- 熱血アセンブラ入門という、僕達が作っている MIST32 プロセッサの話が少し乗っている本が出版された。(ありがとう、坂井さん)
- ISUCON 4 本戦に学生枠で出場した。(予選はいろいろあったが...)
- ワークショップでポスター発表をした。アカデミックなイベントが楽しいという実感があった。(日本語)
- SECCON 2014 のオンライン予選に参加したが、海外ガチ勢だらけで歯が立たなかった。3年連続の全国出場という訳には行かなかった。
- このあたりからぼちぼち就活っぽいものが始まった。
- インフルエンザにかかって年末年始が終了のお知らせ。
3月
- 就活が本格的に始まった。しかし...
- 国際会議の口頭発表の論文を投稿した。(通算2本目、査読待ち)
- 同期で大学に入学した人々が、大学院を卒業していなくなってしまった。
とまあこんな感じで一年が終わってしまいました。
なんかだらけてしまって、あまり研究の進捗もなく、個人的な開発案件の進捗もなく...
来年度は7年間の大学 + 大学院学生生活が多分最後なので、進捗を生み出したい。
すでに、楽しそうな予定やお誘いが入っているので、頑張りたい。
2015/02/16
セキュリティキャンプフォーラム 2015 でローレイヤーな話をした
ローレイヤー勉強会は、、、、CPUを自作するとかレイヤーが低すぎる内容です!w #spcamp #seccamp pic.twitter.com/sIwqkDTTzc
— security_camp (@security_camp) February 14, 2015
セキュリティキャンプフォーラム 2015 に行ってきました。
セキュリティ・プログラミングキャンプ界隈は、最近老害かなと思いつつ参加を自粛していたのだが、久しぶりに発表のお誘いをもらったので参加してきた。
今年のキャンプフォーラムは2部構成で、後半のテクニカルセッションのうち愛甲先生が主催のローレイヤー勉強会で発表する機会を頂いた。
話す内容は、ローレイヤーな話だったら何でも良いということなので、最近自分がやっている研究の OS の話でも良いのだが、せっかく若い人が大量にいるのでローレイヤーの層を厚くする活動をしようと思い、Open Design Computer Project に絡めてこちら側に引き込む系の話をした。
時間がなかなか足りなくて、話したいことをちゃんと伝えられたかどうかはわからない。
ちなみに、これに興味を持ったならぜひこちらのスライドも読んでみて欲しい。
そろそろ、自作 CPU 関連のネタは賞味期限も尽きてきた感があるし、どうしても万人受けする内容を作るとすごい薄い話になってしまうのが辛い。発表が下手くそなだけなのだが。
久しぶりにいろいろな人に会えて、とても良かった。研究もなかなか停滞していて、クズっている場合ではない。
今年は、SECCON も最後のオンライン予選一発にかけていたのだが撃沈して本戦出れなかったし、学生最後の年なのでやれること存分をやっていきたい。
2014/09/28
ISUCON4 で "BIG丼 (学生枠)" が1日目予選トップを取れた理由
ISUCON4 予選に参加されたみなさん、お疲れ様ですー。
"BIG丼" というチーム名で学生枠で参加していた @hktechno です。
チームメンバーは
の3人で参加しました。
全員筑波の入院生活民で、全員 SECCON CTF とかも出てるメンバーです。
全員 ISUCON 初挑戦です。準備も、何もしていませんでした。
全員 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 の話をしてきました。
2014/08/31
LINE のインターンシップに参加してきた
8月中はずっと LINE 株式会社でインターンシップをしていました。
はい、噂のアレです。
お前も40万円に釣られたのか!!って思うかもしれませんが、なかなか答えづらい質問ですね。
とはいえ、LINE ってよく考えたらインターンに行くにはすごく魅力的な会社じゃないですか?
- 登録ユーザー数 x 億人のアプリ
- 出来てからまだ3年しか経ってない
- サービスの質もよく出来ているように見える
- なのに、日本ベースの会社
- いい噂も、悪い噂も沢山
- サービスの仕組みやプロトコル、バックエンドの規模が割と謎
実際の所を言うと、他のインターンシップに申し込んでいてのですが落ちて、丁度その後申し込むのにいい期間に募集を行っていて、かつ8月中の1ヶ月間というのが僕にとってすごく予定的に都合が良かったので、他と吟味した結果申し込んだ感じです。
また、40万円という重さが逆に良い面もあって、それだけ重さのある業務に携われるし、結果も求められる、という意味では悪くないかと。
IT 企業のインターンシップというと、よくあるのがインターンシップ参加者でグループを組んで... とか、新しいサービスを... とか、弊社社員が講義を... とか、そういうところも多いと思います。
今回の LINE のインターンシップは、個人の能力にあった部署に配属されて、そこで個別に課題をこなしていくという感じで、実際に会社の業務が体験できるような形式でした。(僕はこっちが好き)
ただ、この方式だと、人によってやったことも満足度も違うと思うので、このエントリはあくまで僕の感想ということで。
せっかくなので、参加してきて思ったことを書ける範囲で書こうと思います。
インターン期間中の課題
僕は、LINE サーバー開発室という、LINE のメッセージアプリケーション本体のサーバー開発・運用を行っている部署に配属されました。
その中でも、HBase を管理しているチームのチューターさんにお世話になって、HBase 関連の仕事をインターンシップでやりました。
LINE のメッセージアプリケーションのストレージはメインとして、今現在は HBase が使われています。
LINE のインフラでオープンになっている情報は以下にまとまっています。
- http://www.atmarkit.co.jp/ait/articles/1404/23/news034.html
- http://developers.linecorp.com/blog/?p=3041
- http://developers.linecorp.com/blog/?p=1420
僕が扱っていたのは、上の記事に書いてある通りの以下のようなものです
メインストレージとして利用されているHBASEの総容量は1PBに上っている。また、ログ解析、統計に活用されているHadoopの総容量は7PBで、そのうち約42%が使用されている。そうです、LINE の PB 級のストレージが目の前にある状況に1ヶ月間居ました。インフラ好きにとっては堪らないインターンシップでした。
実際にインターンの課題としてやっていたことは、HBase や HDFS のサーバーが大量にあるので、だんだん管理とメンテナンスが大変になってきているようで、それをまとめて管理できるようなツールの開発です。
特に、HBase, HDFS の metrics の監視、RegionServer, DataNode の起動・終了、Region の移動などを Web から操作出来るような監視ツールを作っていました。
Hadoop や HBase の経験もほとんどなかったのですが、なんとなく知っている知識とチューターさんからのアドバイスを得て、HBase や HDFS についてちょっとだけ知識を得た気がします。
開発言語は特に指定はなくて、やりやすいものを使ってくれという感じでしたが、Hadoop 周りの環境はすべて Java で書かれていますし、その他諸々の理由で Java + Play Framework 2 を選択しました。
個人的には、Java を開発した経験はそれまで殆どなかったのですが、それなりにうまく馴染めたので、Java と Scala (view だけ) を使った良い開発経験になりました。
LINE インターンシップでよかった所
LINE の裏側がわかった気分になった
やっぱり、LINE のインフラを知ることが出来た事が個人的には大きな経験になったと思います。特に、インターンの人たちには隠される情報などなく、むしろサーバーアーキテクチャの解説を時間を取って説明してくれたり、いろいろな質問に答えてくれたり、社内のコードも見放題でしたし、運用中のサーバーを触らせてくれるなど、とても自由でした。
実際の開発会議にも何回か参加させてもらいました。
LINE は日本の会社ではありますが、元々 NAVER だったこともあって、今では韓国の人がすごく開発に関わっています。
なので、会議も韓国とビデオ会議でやりますし、出張も多い感じで、アジアの中とはいえ非常に国際的な会社ですね。悪い意味の日本文化はあまり無くてよかったです。
また、韓国の人もみんな日本語しゃべれるのでコミュニケーションも問題なかったですし、仲良くなれて楽しかったです。
それ以外にも、日本と韓国、更にそれ以外が結構混じりあっているので、開発系の文章などは英語のやりとりが多い感じでした。
ちなみに僕は行きませんでしたが、インターンシップ生で韓国に出張に連れて行ってもらってた人も居ました。(ちょっと驚き)
コードレビュー
また、開発した成果は GitHub Enterprise 上で Pull request を投げる方式で開発していったのですが、書いたコードに対して丁寧にコードレビューをして頂きました。実際の業務と同じように、Pull request とレビューコメント、そのレスポンスは全て英語でやりとりしました。
チューターの方には "これでも実際の業務よりは甘い" と言われてしまったのですが、僕にとっては自分のコードを人にレビューされる機会はそんなになかったですし、とてもよい経験です。
自分の癖や気づけない所が結構あって、自分も結構適当なコード書いてるな... と反省する機会になりましたし、視点が変わりましたね。
英語 Pull request 力が少し高まったので、これからも精進していきたいです。
会社の雰囲気
会社の中は、とても過ごしやすいですし、かなりいい感じです。
カフェもあって、気軽にコーヒーが飲めます。LINE キャラクターをラテアートしてくれます。
LINE のキャラクターが至る所に書かれていたり、社員の人がみんな机にグッズをおいていたり、オフィスの雰囲気がすごい楽しいです。
椅子は、アーロンチェアです。全く背中も腰も痛くなりません。
LINE インターンシップに参加した仲間
今回のインターンシップは、合計10名が参加していました。他の人の課題は、スタンプの解析や、ボット作成、ショップの機能追加、fluentd の何か (実際に upstream にパッチ投げてた)、アプリの作成、などでした。
LINE は CTO が女性の方なのですが、そのおかげもあって?かこの手のインターンシップでは珍しく、参加者に女の子も3人居て diversity を感じましたね。
しかも、そのうち2人はインフラ寄りの部隊で、がっつりコード書いてました。
特に同じセンターだった、自称 Python アイドルとか、突然数学について目をキラキラさせて話し始める氏とか、Python 書いてた毎日ごはんに誘ってくる氏にはお世話になりました。
他のセンターの人も、皆さんお疲れ様でした。
他の参加者のブログも載せておきますね (随時追加)
- http://cocodrips.hateblo.jp/entry/2014/08/30/224335
- http://onedd.net/2014/09/internship-line/ (タイ語)
- http://iridium77.hatenablog.com/entry/2014/09/07/161511
さいごに
今成長中のアツい会社で、有意義な1ヶ月が過ごせたと思います。
このタイミングでこんな会社にインターンシップにいけたのは、自分にとってはとても良い経験になりましたし、とても満足しました。
1ヶ月という期間は、短いようでしたが、調度よかったようにも感じます。(実際これ以上長かったら参加を躊躇していたかも?)
ちなみに、超個人的見解ですが、LINE はいろいろな噂がありますが、安心して使えてよく出来ているメッセージングアプリだと、このインターンシップに来て思いました。(これ以上はいろいろあるので言えませんが)
僕も、インターンシップに来る前までは半信半疑でしたし、余り使っていなかったのですが、インターンシップに来てから LINE をもっと使っていこうと思いましたね。
大学院生最初で最後の楽しい夏が終わってしまった気分です...
40 万円は... 趣味の車や電子工作に使いたいところですが、そんなに遊んでる暇もないので、QoL の向上 (?) に使いたいと思います。
でも、旅行とかいけたらいいですね。
2014/05/30
FreeRXduino で GR-SAKURA のローカルビルド環境を整えてみた
最近、GR-SAKURA の Web コンパイラのバックエンドライブラリとして使われていた、RXduino が自由にダウンロードできるようになり、FreeRXduino として公開されたようです。
http://rx.tokudenkairo.co.jp/freesoft.html
今まで、GR-SAKURA の開発環境は、Web コンパイラがあったわけですが、そのプロジェクトをローカルにダウンロードして、手元でビルドすることはライセンス的に不可能でした。
(詳細: http://rx.tokudenkairo.co.jp/license_gr.html)
しかし、FreeRXduino が公開されたことで、手元のローカルマシンでビルドすることが、ライセンス違反なく、自由にできるようになります。
ただし、オープンソースではないので、ビルド環境ごと再配布したり、RXduino を改変した物を公開したり、 GPL のソースコードとともにコンパイルしたバイナリを再配布したりすることも不可能です (LGPL なら問題ないはずです)。
# ちなみに、最近 Web コンパイラに、GR-SAKURA ライブラリ v2.00 が追加されました。こちらはオープンソースとなるようですが。つまり、RXduino は終焉の方向?
そこで、久しぶりに GR-SAKURA を持ちだして、少しいじってみました。
(とはいえ、実は目的があってのことなのですが、それは後日)
http://rx.tokudenkairo.co.jp/freesoft.html
今まで、GR-SAKURA の開発環境は、Web コンパイラがあったわけですが、そのプロジェクトをローカルにダウンロードして、手元でビルドすることはライセンス的に不可能でした。
(詳細: http://rx.tokudenkairo.co.jp/license_gr.html)
しかし、FreeRXduino が公開されたことで、手元のローカルマシンでビルドすることが、ライセンス違反なく、自由にできるようになります。
ただし、オープンソースではないので、ビルド環境ごと再配布したり、RXduino を改変した物を公開したり、 GPL のソースコードとともにコンパイルしたバイナリを再配布したりすることも不可能です (LGPL なら問題ないはずです)。
# ちなみに、最近 Web コンパイラに、GR-SAKURA ライブラリ v2.00 が追加されました。こちらはオープンソースとなるようですが。つまり、RXduino は終焉の方向?
そこで、久しぶりに GR-SAKURA を持ちだして、少しいじってみました。
(とはいえ、実は目的があってのことなのですが、それは後日)
2014/05/27
xv6 を自作 CPU に移植して mruby を動かした話をした #kernelvm
先日の日曜日、第十回 カーネル/VM探検隊&懇親会 (#kernelvm) に参加してきました。
相変わらず、カーネルVMは濃かった。僕の低レイヤー欲が非常に満たされる感じでした。
何故か、PDP-11 が熱かったです。勿論、美しいアーキテクチャですが、かと言って今の時代に PDP-11 というのも変な話ですが。
その前の週に LinuxCon Japan 2014 も学生無料枠 (first50) 参加したのでで、非常に濃い1週間でしたね。各所で話題になっていた、"ワタシハリナックスチョットデキル" Tシャツも頂きました、大切に使います。
ところで、僕はどんな LT をしたかというと、卒論ネタに少し絡めて発表しました。
卒論は主に SSDAlloc という、ハイブリッドメモリアーキテクチャ?を元に mist32 プロセッサの MMU を改造してフラッシュメモリをメモリの一部のように利用できる MMU を提案してみる、みたいな研究でした。
そこで、mist32 プロセッサ向けに OS を何か移植する必要があって、更に何かアプリケーションも動かす必要があったので、その時の話をちょっと。
具体的には、xv6 という UNIX V6 を参考に作られた x86 向けの MIT で使われている教育用 OS を、mist32 に移植して、更にその上で mruby を走らせられるようにポートしました。
xv6 移植については少し wiki の方にまとめました。
http://open-arch.org/software/porting_xv6
スライドは以下に乗せておきます。
もっと詳しく書きたいのですが、時間もないので聞きたいことがあったら気軽に @hktechno に聞いてください。
# しかし、自作プロセッサを作って OS を移植した程度では、#kernelvm 的には何の驚きも提供出来ないことがわかったので、さらなる高みを目指す必要がある。
相変わらず、カーネルVMは濃かった。僕の低レイヤー欲が非常に満たされる感じでした。
何故か、PDP-11 が熱かったです。勿論、美しいアーキテクチャですが、かと言って今の時代に PDP-11 というのも変な話ですが。
その前の週に LinuxCon Japan 2014 も学生無料枠 (first50) 参加したのでで、非常に濃い1週間でしたね。各所で話題になっていた、"ワタシハリナックスチョットデキル" Tシャツも頂きました、大切に使います。
ところで、僕はどんな LT をしたかというと、卒論ネタに少し絡めて発表しました。
卒論は主に SSDAlloc という、ハイブリッドメモリアーキテクチャ?を元に mist32 プロセッサの MMU を改造してフラッシュメモリをメモリの一部のように利用できる MMU を提案してみる、みたいな研究でした。
そこで、mist32 プロセッサ向けに OS を何か移植する必要があって、更に何かアプリケーションも動かす必要があったので、その時の話をちょっと。
具体的には、xv6 という UNIX V6 を参考に作られた x86 向けの MIT で使われている教育用 OS を、mist32 に移植して、更にその上で mruby を走らせられるようにポートしました。
xv6 移植については少し wiki の方にまとめました。
http://open-arch.org/software/porting_xv6
スライドは以下に乗せておきます。
もっと詳しく書きたいのですが、時間もないので聞きたいことがあったら気軽に @hktechno に聞いてください。
# しかし、自作プロセッサを作って OS を移植した程度では、#kernelvm 的には何の驚きも提供出来ないことがわかったので、さらなる高みを目指す必要がある。
2014/03/06
SECCON 2013 全国大会に参加してきた
今年も、SECCON 2013 の全国大会に AC な ifconfig チームとして、参加してきました。
メンバーは、@x86_64, @KIM_TPDN, @rkmathi, @hktechno という AC な感じです。
結果はというと、20チーム中5位でした。(たぶん)
まずまずといったところでしょうか。去年は6位だったし。
持ち帰れる問題が少なかったので、結局夜はしっかり寝れて今までの SECCON のなかでは、体力的に楽な感じでした。
(本当はあったのけど、ダウンロードが完了しなかったので、諦め。)
普段から CTF に参加している人達を集めたわけでなく、セキュリティ専門系の人はくりす (@x86_64) だけでしたし、僕を含め SECCON 以外の CTF に殆ど出たことない人で ifconfig チームは構成されています。
なので、地方大会ならまだ良いのですが、全国大会レベルになると、やはりくりすに頼りきりな感じでした。
筑波からは、もう1チーム出ていて、後輩ですが urandom チームが3位になっていました。
個人的な感想としては、Metasploit などのツールやシェルコードの構築の仕方、突けそうな場所の探し方など、普段専門的なことをやっていない事もあって、慣れてないと負けますね...
時間をかけて解くことはできるのですが、調べてる時間に追い越されますし、難しい。
特に、今回の SECCON は、いち早くフラグを立てて、他チームを防衛することで点数を大きく稼げる点数方式だったので、単純に解けることより、素早くコントロールを奪える事が重要でした。
それぞれのサーバーを進んでいくと出てくるキーワードのポイントが1個 100 点であるのに対して、フラグは立てておくだけで5分おきに数十ポイント入ってくる(山分け)ので、独占してフラグを立て続けることが大事です。
防衛方法も、徹底して自動化することで、他を寄せ付けないことも重要な気がしました。
実際、僕達は1日目の後半に某チームと ssh セッションを殺しあう肉弾戦になりましたが、残念ながら2日目は対策をされて手が出ませんでした。
結局、キーワードは結構見つけてそれなりにポイント確保したのですが、全くフラグをまともに建てられず、みるみる差を付けられていった感じですね。特に2日目。
今年も参加してみて思ったけど、CTF はいろいろな知識を網羅していないと解けないし、自分の知識や技術を向上する機会になるので、楽しいし見直す機会になってとても良い。
こんなものに、政府が支援しても良いのかという話があるらしいけど、攻撃だけではなくて、防御もしなければいけないし、攻撃しなければ防御する方法も学べないし、セキュリティの分野は、近年は綺麗事言ってる所ではないぐらいヤバいので、それについてちゃんと世間の理解が浸透して欲しいところ。
防御側として攻撃手法について理解があるのは当たり前であるので、それを手っ取り早く学べるのは、CTF だったりすると思うし、攻撃手法を学ばせてはいけないというのは、何かおかしい。
まあ、グダグダ言ってないで、自分でセキュリティ知識の理解を深めてから発言してほしいものだと思う。
セキュリティの専門家で、CTF 反対の人がいたら、またその意見も聞いてみたい。
ところで、今年はニコニコ生放送があったり、NICT の NIRVANA 改 という可視化システムが運用されていたり、去年よりなかなか面白かったです。
まあ、目の前の画面に集中して、それどころではなかったですが、可視化システムはたまに各チームから噴水が発射されてて興味深かったですね。
2013/12/14
はぐれ学生の例 その1 - はぐれ学生 Advent Calendar 2013
はぐれ学生 Advent Calendar 2013 14日目の投稿です
はぐれ学生の概要はこちらを参照してください。
こんにちは。はぐれ学生の @hktechno です。
現在、筑波大学 情報科学類 在籍5年目で4年生です。
僕が、はぐれるに至った経緯と、はぐれてみた感想を書いてみたい思います。
長いです。読むの大変です。
はぐれ学生の概要はこちらを参照してください。
こんにちは。はぐれ学生の @hktechno です。
現在、筑波大学 情報科学類 在籍5年目で4年生です。
僕が、はぐれるに至った経緯と、はぐれてみた感想を書いてみたい思います。
長いです。読むの大変です。
2013/11/17
SECCON 東北大会に参加した
もう1週間経ってしまいましたが、先週は SECCON 東北大会に参加しました。
SECCON といえば、去年は ifconfig というチームでつくば大会に参加して優勝し、全国大会はあえなく撃沈と言った感じでした。
今年は、福島県会津地方で行われた、東北大会に参加しました。宿泊込の、セキュリティトライアスロンです。普通の CTF とは違って、とても面白かったです。ちなみに、上の写真は、猪苗代湖上で遊覧船かめ丸の上で行われた、早押しクイズ大会開催前の様子です...
僕は、開催前日になって熱がでて大変だったのですが、当日は熱も下がったのでアンチウイルスを施して参加しました。あまり体調は万全ではありませんでしたが、いつもの通りエナジードリンク漬けで頑張りました。
結果的には、まあ優勝というわけだったのですが、僕自身よりチーム全員がそれぞれ取り組んだポイントを確実に取っていったところが、結果につながったと思います。とはいえ、いつもどおりくりすの貢献が大きかった気がする。
初めて、アセンブラかるたとバイナリかるたにも挑戦しました。アセンブラかるたはよかったですが、バイナリかるたは僕には無理ゲーでした。
2013/09/20
PyCon APAC 2013 に参加した
参加した、といっても去年までとは違って今年はスタッフ参加です。去年までは、日本の PyCon は JP として開催してましたが、今年は APAC (Asia-Pacific) としての開催でした。
来年は Taiwan が APAC になって、日本では JP を開催します。
なんで、スタッフ参加しようかと思ったかというと、Python 好きだし使ってるし、何か協力できることがあったら手伝ってもいいと思ったからです。
あと、他のカンファレンスに参加して、なんか PyCon はイケてない感じ(かなり個人的な感想)があったので、なにか変わるかなとか。
ちなみに、この記事はいま YAPC::Asia に参加しながら書いてますけど、これは興味のある話が幾つかあったので参加してる感じです。
来年は Taiwan が APAC になって、日本では JP を開催します。
なんで、スタッフ参加しようかと思ったかというと、Python 好きだし使ってるし、何か協力できることがあったら手伝ってもいいと思ったからです。
あと、他のカンファレンスに参加して、なんか PyCon はイケてない感じ(かなり個人的な感想)があったので、なにか変わるかなとか。
ちなみに、この記事はいま YAPC::Asia に参加しながら書いてますけど、これは興味のある話が幾つかあったので参加してる感じです。
2013/07/27
png のファイルサイズを最適化するコマンド
png ファイルって、便利ですけど可逆のはずなのに、なぜか出力するソフトによってファイルサイズが違ったりしますよね。
更に、前回のエントリと同様に、PageSpeed Insights にかけてみると、こんなことを言われるわけです。
ひとつ注意として、pngnq だけ他とちょっと違います。pngnq は、32-bit RGBA な PNG ファイルを 8bit RGBA に変換するファイルです。つまり、強制的に小さくなりますし、(通常は)非可逆です。GIF みたいなものです。
それぞれ使ってみます。変換するファイルは、256x256 の GIMP で生成したファイルです。(ODCP のロゴ)
pngnq は 8bit に変換するだけあって、さすがに減ってます。グラデーションとかな png だとがっつり劣化するので、用途によりますかね。
optipng と pngcrush は同じ結果でした。好きな方を使えばいいと思います。
更に、前回のエントリと同様に、PageSpeed Insights にかけてみると、こんなことを言われるわけです。
以下の画像を最適化すると、サイズを 15.7 KB(7%)削減できます。そこで、コマンド一発通したら png ファイルを小さくしてくれるコマンドがあったら便利ですよね。探して見ました。
http://example.com/.../image_thumb.png を可逆圧縮すると 8.5 KB(7%)削減できます。
- optipng - 進化した PNG (Portable Network Graphics) オプティマイザ
- pngnq - PNG (Portable Network Graphics) 画像最適化ツール
- pngcrush - PNG (Portable Network Graphics) ファイルを最適化
ひとつ注意として、pngnq だけ他とちょっと違います。pngnq は、32-bit RGBA な PNG ファイルを 8bit RGBA に変換するファイルです。つまり、強制的に小さくなりますし、(通常は)非可逆です。GIF みたいなものです。
それぞれ使ってみます。変換するファイルは、256x256 の GIMP で生成したファイルです。(ODCP のロゴ)
- Original
- 37652 byte
- `convert in.png out.png` (参考)
- 38654 byte
- `optipng in.png` => in.png
- 24482 byte
- `pngcrush in.png out.png`
- 24482 byte
- `pngnq in.png` => out-nq8.png
- 13853 byte
pngnq は 8bit に変換するだけあって、さすがに減ってます。グラデーションとかな png だとがっつり劣化するので、用途によりますかね。
optipng と pngcrush は同じ結果でした。好きな方を使えばいいと思います。
Debian の Apache では Javascript の gzip 圧縮は有効になってない?
Google の PageSpeed Insights って知ってますか?
最近は、このあたりを最適化してるかしてないかで Google の表示順位も変わってくるらしいので、暇なときに簡単にできそうな問題は修正しておくと良いです。
ところで、僕のある Dokuwiki のサイトを PageSpeed Insights にかけてみたらこんな結果が出てきました。
- https://developers.google.com/speed/pagespeed/insights
最近は、このあたりを最適化してるかしてないかで Google の表示順位も変わってくるらしいので、暇なときに簡単にできそうな問題は修正しておくと良いです。
ところで、僕のある Dokuwiki のサイトを PageSpeed Insights にかけてみたらこんな結果が出てきました。
以下のリソースを gzip で圧縮すると転送サイズを 294.4 KB(71%)削減できます。ん?という感じです。Apache の gzip 圧縮は mod_deflate で有効になっているはずなのですが、確かに HTTP ヘッダを観測してみると、gzip でも deflate でも圧縮されてません。
http://example.com/lib/exe/js.php?tseed=1373562644 を圧縮すると 294.4 KB(71%)削減できます。
2013/07/22
glibc の関数の引数の数について調べてみた
Open Design Computer Project で作っている mist32 プロセッサの、関数呼び出し規則と割り込みについて考えてる間に、あるひとつの疑問が...
平均と言うよりは、最大でどれぐらいまでの引数が使われることが普通なのか。
何故こんなデータが欲しいかというと、関数呼び出し規則 (Calling conventions) でレジスタに引数を乗せることは確定だが、どの程度引数レジスタを用意すればいいのか、という事を決めたい。
関数呼び出し規則では、レジスタに呼び出し元か呼び出し先か、どちらで保存するかを定義しなければならない。基本的には、呼び出し先保存 (caller-saved) なレジスタの方が、効率が良いのである。実際に使われたレジスタしか退避することがないから。
全部引数に載せればいいじゃん?って思うかもしれないけど、レジスタが許す限り全部引数をレジスタに乗せることに決めた場合、すべてのレジスタが呼び出し元保存 (callee saved) なレジスタになるので、問題が起きる。呼び出した先の関数がどのレジスタを使ってるのかなどわからないので、呼び出し元の関数で使ってる変数レジスタをすべて退避する必要がある。その先の関数でそれを使っていないかもしれないのに。また、割り込みの際にも、呼び出し元保存のレジスタは、基本的に割り込みハンドラで保存しなければいけないし、多すぎるといいことはない。
つまり、どの程度の数の引数が一般的に使われるかがわかれば、ほとんどの数の引数をレジスタ渡しで実現しつつ、無駄なレジスタ退避を少なくすることができる、理想の引数レジスタの個数をなんとなく予測することができる。
ふつうの関数は、どれぐらいの引数を使うのか
平均と言うよりは、最大でどれぐらいまでの引数が使われることが普通なのか。
何故こんなデータが欲しいかというと、関数呼び出し規則 (Calling conventions) でレジスタに引数を乗せることは確定だが、どの程度引数レジスタを用意すればいいのか、という事を決めたい。
関数呼び出し規則では、レジスタに呼び出し元か呼び出し先か、どちらで保存するかを定義しなければならない。基本的には、呼び出し先保存 (caller-saved) なレジスタの方が、効率が良いのである。実際に使われたレジスタしか退避することがないから。
全部引数に載せればいいじゃん?って思うかもしれないけど、レジスタが許す限り全部引数をレジスタに乗せることに決めた場合、すべてのレジスタが呼び出し元保存 (callee saved) なレジスタになるので、問題が起きる。呼び出した先の関数がどのレジスタを使ってるのかなどわからないので、呼び出し元の関数で使ってる変数レジスタをすべて退避する必要がある。その先の関数でそれを使っていないかもしれないのに。また、割り込みの際にも、呼び出し元保存のレジスタは、基本的に割り込みハンドラで保存しなければいけないし、多すぎるといいことはない。
つまり、どの程度の数の引数が一般的に使われるかがわかれば、ほとんどの数の引数をレジスタ渡しで実現しつつ、無駄なレジスタ退避を少なくすることができる、理想の引数レジスタの個数をなんとなく予測することができる。
2013/07/18
エンディアン変換とバイトアクセス
最近、Open Design Computer Project で mist32 プロセッサのシミュレーターを作っています。I/O のエミュレーションにもある程度対応してます。
https://github.com/techno/mist32-simulator
そこで気づいたことをひとつ書こうかなと。あたりまえのことなのですが。
上記が、ビッグエンディアンとリトルエンディアンの概要です。ビッグエンディアンの方が人間には自然に見えますが、コンピューター的にはそうでない面もあり、一長一短です。一般的に使われている x86 はリトルエンディアンを使っています。
ファイルシステムや、ネットワークプロトコルなどによって、エンディアンは普通は規定されています。(FAT はリトルエンディアン、ネットワークはビッグエンディアン) しかしながら、ELF のようなメモリイメージのようなフォーマットは、そう簡単に行きません。
https://github.com/techno/mist32-simulator
そこで気づいたことをひとつ書こうかなと。あたりまえのことなのですが。
ビッグエンディアンとリトルエンディアン
ご存知の通り、この世のコンピューターは内部的にエンディアンやバイトオーダーと言われるような、1ワードのバイト列をどのようにメモリ上に配置するか、という手法が大きく分けると2つあります。Data: 0x1234ABCD
0 1 2 3
Big Endian: 12 34 AB CD
Little Endian: CD AB 34 12
上記が、ビッグエンディアンとリトルエンディアンの概要です。ビッグエンディアンの方が人間には自然に見えますが、コンピューター的にはそうでない面もあり、一長一短です。一般的に使われている x86 はリトルエンディアンを使っています。
ファイルシステムや、ネットワークプロトコルなどによって、エンディアンは普通は規定されています。(FAT はリトルエンディアン、ネットワークはビッグエンディアン) しかしながら、ELF のようなメモリイメージのようなフォーマットは、そう簡単に行きません。
2013/07/16
Debian で起動時に NFS マウントが詰まる問題
某所で運用しているシステムで、Debian squeeze で HA 化されたストレージに対して、起動時に NFS マウントしています。
/etc/fstab の記述はこんなかんじです。
ところが、起動時に "Waiting for /var/www..." で詰まって、タイムアウトするまでブートシーケンスが止まる、しかも結局マウントされない、という問題が起きてました。しかしながら、起動した後 mount -a すると正常にマウントされます...
/var/www がマウントされないと、その後の apache の起動もコケるので、非常に良くない状況です。再起動するたびに、手動でマウントするようなことはしていられません...
原因を探ってみたところ、起動時に nfs のマウントを司っているのは、/etc/init.d/mountnfs.sh だという事がわかりました。このファイルを辿って行くと、"$ASYNCMOUNTNFS" という変数を見て、do_wait_async_mount に飛ぶか飛ばないかを見ているようです。どうもこいつが怪しそうです。
結局以下のコマンドを打ったら、現象は再現しなくなりました。根本的な原因はよくわかりませんが、まあいいかなと...
/etc/fstab の記述はこんなかんじです。
192.168.0.xxx:/nfs/var/www /var/www nfs rw,hard,intr,rsize=8192,wsize=8192 0 0
ところが、起動時に "Waiting for /var/www..." で詰まって、タイムアウトするまでブートシーケンスが止まる、しかも結局マウントされない、という問題が起きてました。しかしながら、起動した後 mount -a すると正常にマウントされます...
/var/www がマウントされないと、その後の apache の起動もコケるので、非常に良くない状況です。再起動するたびに、手動でマウントするようなことはしていられません...
原因を探ってみたところ、起動時に nfs のマウントを司っているのは、/etc/init.d/mountnfs.sh だという事がわかりました。このファイルを辿って行くと、"$ASYNCMOUNTNFS" という変数を見て、do_wait_async_mount に飛ぶか飛ばないかを見ているようです。どうもこいつが怪しそうです。
結局以下のコマンドを打ったら、現象は再現しなくなりました。根本的な原因はよくわかりませんが、まあいいかなと...
`echo "ASYNCMOUNTNFS=no" >> /etc/default/rcS`
2013/06/04
LinuxCon Japan 2013 へ行ってきた
今年も LinuxCon Japan へ行って来ました。Student であれば first50 が参加費免除という、去年と同じパターンです。こういうカンファレンスに、学生であれば優遇して参加できるというのはいいことですね。
去年は、割と軽い気持ちで参加したのですが、今年は研究室でカーネルをいじったりストレージやメモリ周りの話をしているので、割と本格的に話を聞きに行きました。
プレゼンテーションはこちらにアップロードされてるみたいです
Cloud Open が併設ということで、Keynote も公演も、仮想化・クラウドの話が多かったですね。あと、リアル Linus の話を初めて聞くことができました、いつもの調子で結構ぶっちゃけてました。
ストレージとかメモリ周りの話を重点的に、Intel の CPU hotplug の話とか、Google の RedHat から Debian にダイナミック移行の話だとか、少し KVM の話も聞いたりしてました。英語ついていくの大変でしたけど、とても面白かったので、来年も行けたらいいな、とか。というか、毎年 Student Presentation があるので、来年こそはなんか成果を発表できたりしたらいいですね...
最後に、会場が椿山荘という場所だったのですが、庭園が綺麗でした。昼休みに、庭園と神田川沿いを散歩したりしてました。去年のみなとみらいもそうでしたが、休み時間にそとをぶらぶらして楽しめる立地というのは、時間が無駄にならないですし、海外から来てる人にとっても、嬉しいだろうなーという。よく考えられてますね、偶然かもしれないけど。
去年は、割と軽い気持ちで参加したのですが、今年は研究室でカーネルをいじったりストレージやメモリ周りの話をしているので、割と本格的に話を聞きに行きました。
プレゼンテーションはこちらにアップロードされてるみたいです
Cloud Open が併設ということで、Keynote も公演も、仮想化・クラウドの話が多かったですね。あと、リアル Linus の話を初めて聞くことができました、いつもの調子で結構ぶっちゃけてました。
ストレージとかメモリ周りの話を重点的に、Intel の CPU hotplug の話とか、Google の RedHat から Debian にダイナミック移行の話だとか、少し KVM の話も聞いたりしてました。英語ついていくの大変でしたけど、とても面白かったので、来年も行けたらいいな、とか。というか、毎年 Student Presentation があるので、来年こそはなんか成果を発表できたりしたらいいですね...
最後に、会場が椿山荘という場所だったのですが、庭園が綺麗でした。昼休みに、庭園と神田川沿いを散歩したりしてました。去年のみなとみらいもそうでしたが、休み時間にそとをぶらぶらして楽しめる立地というのは、時間が無駄にならないですし、海外から来てる人にとっても、嬉しいだろうなーという。よく考えられてますね、偶然かもしれないけど。
登録:
投稿 (Atom)







