お腹.ヘッタ。

関数型とかセキュリティとか勉強したい。進捗つらぽよ

CodeBlueTokyo2018とAVTokyo2018に参加した

CodeBlueTokyo2018とAVTokyo2018に参加してきました。 これはちょっとしたメモ代わりの記事です

CODE BLUE

情報セキュリティの国際会議であるCODE BLUEに参加してきました.

codeblue.jp

昨年度CODE BLUEには学生スタッフとして応募させていただきましたが落ちてしまい、今回は無事受かることが出来ました。 さて、今回のCODE BLUEはday1はフリーでカンファレンス観覧とCTF、day2は学生スタッフ業務に追われてドタバタとしておりました.

day1に関しては, キーノートからiosへの脆弱性に対する話を聞いたあと残りは無限にCTFに時間を溶かしてました。つらい・・・

まぁ勉強になったということが多いのでどこにどうみたいな話はおいておくとして、line CTFではラッキーなことに得点したの(?)で特典のワンちゃんが書いてるTシャツを得ました。:star:

f:id:taketarou2:20181107054126j:plain

AVTOKYO

CODE BLUEの翌日はAVTOKYOに参加しました. 昨年の会場は六本木でしたが、今年は例年通り渋谷に。細かい話は去年の僕に任せます。

takeio.hatenablog.com

僕は何してたかというと、ききエナジードリンクとCTFのリベンジをしてました。これも概要先程の記事に書いてるのですが、昨年は12位でした。

しかしこんかいはなんと3位。やったぜ!!!有名なyu yagihashiやうめちーに一足先に得点されてしまいましたが、なんとか入賞できてラッキーでした。 f:id:taketarou2:20181107054154j:plain

まとめ

とりあえずレアそうなエナドリが大量に手に入った

情報科学若手の会に参加した

これは何

情報科学若手の会に参加したと言う話です.

wakate.org

情報科学若手の会とは

情報科学若手の会は次の3つを目的とした、情報科学に携わる学生、若手研究者、社会人のディスカッションと交流の会です。
- 活発な討論の中から若手研究者ならではの斬新な発想を生み出し、情報科学・情報工学の新しい可能性を考え、将来の夢を語り合う。
- 専門分野だけでなく情報科学のさまざまな分野で活躍する若手どうしの討論を通して視野を広げる。
- 専門分野にこだわらず、情報科学の全般に渡る若手研究者の横の繋がりを広げる。

1968年7月から続く由緒正しきイベントで、2017年に50回目の開催を迎えます。 学会や研究会を基本的なスタンスとしており、情報科学に関する幅広い話題に関する議論を通して新たな発想が生まれることを目指して、次のコンセプトを掲げて運営しています。

とても良い会です!!まぁ学生の財布から参加費+旅費を出すのは辛いのですが,幾らか補助も出ます.

サイコー!来年はスポンサーを増やして学生発表者は全額無料キャンペーンとかして欲しい(違

僕がこれを知ったのは僕の高校の先輩が幹事をやっていたと言う経緯があり,高校の時から誘われてたイベントで去年初参加で今年も参加という形でした.

何をした

「Segment Routingの利用例と未来」という発表をして来ました. speakerdeck.com

なんでSRについて話したのかというと今年はネットワークについて頑張ってみるかなというロールを程よくしていて,それのアウトプットということで何かしたいなと言うのがきっかけでした.

僕はInteropTokyoのSTMを今年度やらせていただいたのですがそこで見たSRの相互接続実証にはとても未来を感じたのでこれは若手らしいのでは!?!?!?と言う安直な理由で決定したものでした.

もともと興味があってやっていたのですが最新の日本語資料が少ないものなので少しでもoutputが意味がある形になれば幸いですね.

ブログ書き忘れてたのですが...ちなみに去年は様々な型推論ということでRegion inferやHMやDatabese Recordとか言語処理系にまつわるサーベイをナイトセッションというLTぐらいのサイズのところでして来ました.まる.

感想

今年から会場が変わり,熱海の山喜旅館から軽井沢の軽井沢研修所というところになりました. 場所としては大変大変交通の便が悪いのですが,中身は山喜は布団が湿ってたり辛い時があるのでそれがないというところを見るとどっちも五分五分でした.(ほんまか?)ですが幹事の人たちの努力を新会場といい素晴らしい奮闘や良いディスカッションができて最高でした.次の機会があったら意味論の話をしたいですね.... 最後に写真で振り返る三連休をします f:id:taketarou2:20181012044027j:plain 新幹線が最高に辛い情報です. f:id:taketarou2:20181012044648p:plain 敗北を知りたい(敗北した)

f:id:taketarou2:20181012044759j:plain 軽井沢自体は自然がやはり多く花も咲いていて最高.

f:id:taketarou2:20181012044840j:plain 交流イベントコラボ情報です.

f:id:taketarou2:20181012044917j:plain 若手なので古いものが大好きです.これはモトローラとintel8086.すぎょい

f:id:taketarou2:20181012045055j:plain 優勝した.最の高ですよ.

f:id:taketarou2:20181012045144j:plain f:id:taketarou2:20181012045153j:plain 信州蕎麦を食べて来た.

f:id:taketarou2:20181012045231j:plain 噂の遠目だとしなの鉄道のロゴがpythonに見える問題の画像です

f:id:taketarou2:20181012045327j:plain 温泉で優勝した

f:id:taketarou2:20181012045346j:plain酒で優勝した (1日ぶり二度目)

まとめ

情報科学若手の会に参加し,そこでは発表をしました.なお反省点はスライドは当日の3時に作り上げないことです.みなさんぜひ参加してみてください.

追記(10/12)

あの「Segment Routingの利用例と未来」発表後かなりの反響があり,一部のところから良い資料ですね!とお褒めのお言葉をいただくようになりました. 最終的にはなんと紹介させていただいたLine株式会社様やIETFでの仕様策定をしているSRv6の中の人やp4SRv6の中の人にまで伝わってしまったというのがありめっちゃ驚いてます笑

それとただこの場を借りて訂正で,公式実装と言っていましたが確かにあのドラフトでは参照されていてリンクも存在するのですが,あくまで公式ではないようでした.訂正いたします.

こういうこともあるのでぜひ若手各位は若手の会で話してみましょう!

git challengeに参加しました

こんばんは.takemioIOです!先日 git challengeというものに参加したのでそのレポートをしますー

Git Challengeとは?

大元が消えてたのでNAVERまとめを参照します.

matome.naver.jp

平たく言えばこのコンテストは

gitリポジトリに設けた難題をチームワークで解決していく競技型技術イベント

ということです.これは抽選で選ばれた人のみが参加できるイベントでした.

参加以前

  • このイベントは前々から知っていたのですがGit力に自信がないので放置してた.
  • この夏色々あって結局インターンとか行かないでしまったので企業色があるイベントにいきたいなぁーと思って行くことにした.
  • 参加する前には,応募要項として,過去の開発経験とか聞かれたはずだが完全に忘れた.結構適当に書いてそもそも応募と言いながら抽選なんてないだろと思っていた(すんません)
  • 抽選に見事に当たり,参加が確定する.ツイッター見てたら落ちた人もいると聞いてなんかすいませんねとなった記憶がある.

当日

  • 遅刻した
    • というのも開始が11時(アイスブレイキング)からなのですがまぁ仙台から来てるのでちょっと辛いわけですよ.参加者で一番遠い場所から来たわけですよ.事実上の宇宙よりも遠い場所です

  • mixiさんに初めて行った.ビルデカイ.
  • 事前勉強などは全くしてない
  • インターネッツ有名人がいることを聞いた
  • 隣の人が知り合いの知り合いだった

競技前

  • 相方氏(@_fumihumi)とコミュニケーションが取れずどっちもpushをしただろと思い込む回(実はフラグで後述話に繋がる)

  • ごはんが美味しかった.

競技開始!

  • 難易度が★ ~ ★×5 まであり,チーム戦だったのでとりあえずウォームアップがてら星1の問題から解いていった
  • 方針としてはhackmdにメモを取りながら粘っても無理そうだったらこうやったけど無理だったみたいなアサインをしてお互いにお願いする駆動をしてた.
  • 結構協力プレイしてた気がする.
  • こんなことできるんだ!みたいな気付きが多い問題があり知見になることが多かった.
  • master に push -f をしながら

競技終了!

17つ星を集めて結果は3位.もう30分あれば・・・星4つが解ければ・・・・ だいたい@_fumihumi氏と半分づつぐらい解いてたのでまぁチームとしてはバランスがよかった.

総評中の私

これはどういうことかというと初めのチュートリアルでやってることを考えずに適当にマージしたから死んだという話があり,それを潰してれば2位でした・・・(前述した通りフラグだった)

やはり感想としては結構言われてあ〜〜〜ってなってたり,過去にやったことあるはそれ(白目)だったり. 以下過去にやったファイルを使わないでcommit したという話.

takeio.hatenablog.com

あと30分あれば・・・みたいなのがあったり.正直1位を狙える位置にいたので頑張っていきたかった....精進

懇親会

  • ごはんが美味しかった (2回目)
  • 同率三位のチームが実はあって,そのチームの人たちと仲良くなれて嬉しかった.
  • LTでGSoCの話が出て来て来年は応募するぞと思った.今年某Cookpadのko1さんと面談までして推してあげるよと言われたのに大学の方でやれなくなってしまったのでリベンジするぞ!!!

まとめ

  • 一応三位になった!
  • gitそれなりに知識あったと思い込んでいた僕が恥ずかしい.勉強します!
  • 後日アルバイト先でPRのサイズデカイんだけどってキレられた(辛い)
  • 参加者の皆さん!運営の皆さん!皆さんありがとうございました💪 git力もっと上げます✍️✍️

SecHack365を修了しました。

SecHack365を修了しました。

今年度はSecHack365という通年hackathonに参加してきました。 去年の5月初旬ごろに参加決定の連絡が入り、先日3/24に成果発表会&修了式だったので、1年を通してどんな活動をしてきたかを振り返りたいと思います。
きっと来年度以降参加する人になればいいなぁというのと自分に対しての戒めてきなのもある。ちょっと後半辛めです。すいません。

SecHackとは

SecHack365 は高度な技術力を持つセキュリティ研究者や開発者を育成することで、我が国のセキュリティ技術力、産業競争力を高めることを目的としています。

年間プログラムの中ではhackathon、遠隔研究・開発実習、コンテスト演習、座学講座、全国の一流研究者・技術者等との交流、先端企業の見学等のイベントを通じて、各参加者の志望に沿った能力開発を行います。

訂正4/9 すいません.自分が委員の方から聞いた言葉の解釈間違いのようでした。完全に確認不足です.:bow: あくまでセキュリティに関連していることを目指さなくてはいけないようです ですがセキュリティというのは多岐にわたるので基本的にはやりたいことがやれるはずです!

もう少し具体的に話させていただくと.... セキュリティキャンプのような座学・実習形式ではなく、あくまで開発がメインになります。

参加者の多くは最終的にバイナリ解析や悪性web対策と言ったセキュリティ関連の物を開発していましたが、全員が思いっきりセキュリティというとそうでもなく、割と自由に作りたいものを作れるのびのびした環境です。

よくあるハッカソンと何が違うのかというと、

  1. 1年間を通して開発できる
  2. 実装や発表に関して困ったことがあればプロに相談できる。
  3. NICT保有するデータを活用できる
  4. ほんのり成果が求められる

と言った感じだと思います。 3に関しては別に使わなくても良いですし、4はメンター制度があるので相談すればそれなりに身の丈になったものを一緒に考えてくれるはずです。

今年度の参加者と応募について

全国から358件の応募があり、NICTの審査によって47名(うち未成年者17名)の若手が選抜された。
https://media.dglab.com/2018/01/05-sechack365-01/ より

結構な倍率ですねぇ。小学生から社会人まで参加していて、20〜22歳あたりの参加者が一番多かったと存じます。

実はなのですが唯一僕は参加者の中で学部一年相当で同じ学年の人が居なかったのでそれが残念でした。正直お陰で自分の実力値が他の人と図る機会がなかったり交流で同輩がいなかったりが寂しかったなぁと思いました。残念すぎるし、そのくせ私のことをみんな修士一年の間違えとか呼び始めるのまちがってるのでは?

ちなみに女性比率は今回は割りと一般的な情報系イベント並かなぁと感じました。

たぶんなんですが、割と技術ではあまり人を見てない気がします。自分はあまりできる側ではなかったでまぁラッキーぐらいのお気持ちでした。

ちなみにですが学生は参加費無料です。オフラインハッカソンでの宿泊費、交通費全て支給していただけます。やったぜ!

応募前の自分ときっかけ

応募前はまぁ色々多趣味でコードを書いていてセキュリティはそんな強くないけど適当に用語ぐらいはわかるけど、エクスプロイトかけるかと言われると困りますねぇみたいな感じ。むしろこの時のマイブームはコンパイラでした。

実は締め切りギリギリの12時間前とかに見つけて適当に出したって感じです。申し訳ないのですがホントそんな感じ。

選考課題については口外してはいけないことになっているので詳しくは言えませんが、深夜テンションだろうが強い気持ちを書いていけば自ずと受かるような気がします。

何をやっていたのか

私はチームでIoTデバイス管理システムの開発をしていて、それのプロダクトオーナー的なこと。つまりリーダーぽいことをしていました。 技術的な文脈で言うと最終的にはアーキテクチャの提案と設計、パケットキャプチャと配信、FWなど基盤部分の担当をメインでしていました。 https://github.com/Team-IoTSystem/Vortoj

1年間のイベントについて

ホント一年何も書かないでいたので書いていこうと思います。 これはもしかしたら呼んでるあなたを不快にする可能性があるので、もしものときはブラウザバックしてどうぞ。てかブラウザバックって今の人知ってるのかなぁ。

5月<東京・NICT見学会、説明会>

受かってしまったあとはマジか~って全国から来る人達にビビりまくりながら小金井にGo.

印象にあるのがHarekazeにいる@ak1t0くんにあれ?@takemioIOさんですか?って聞かれてコレオフ会になってるやんけってなったのは良い記憶。あとは@felme_neinさんとひたすら自然言語処理関連の技術の話をしていた記憶がある。

というかまわりが割りと知り合い同士らしいなか地方民はマジで浮くのであれちょっとつらかったですが強い気持ちで行きましょう。

6月<東京・蒲田>

富士通のなんかあれなところでスタート。

二回目になると流石に慣れてきて、@りねあくんとラーメンを食べてふつーに仲良く遅刻してきた記憶がある。すいません手遅れてます。いや手遅れたラーメンはうまい。 f:id:taketarou2:20180408064046j:plain

ここまでは強い気持ちでリージョン推論を用いた僕が考えた最強のコンパイラ書いてやるぞとか思っていたんですが色んな人の話を聞く中であーって思うようになって、その中の一つの選択肢として組み込みもいいかなぁということでIoTやネットワークも選択肢になった。

そんなこんなで一人ブレインストーミングをしながらマッピングをしていてぼっち検討をココでもしていたような気がします。(てか班の人がみんな居なくなるんだもん)

というわけでなんだかんだでチームの外形が決まってきました。

8月<福岡回>

前半はLINE FUKUOKAにお邪魔させていただいて、愛甲さんに講演していただいたり、各自考えて来たアイディアを発表したり、「縁日」と称したトレーナーの方によるハンズオンが開催されたりと盛りだくさんでした。後半は海が綺麗なホテルでハッカソンを行いました。これが最高のハッカソンですよ f:id:taketarou2:20180408064120j:plain が、弊チームは人はいるけど進み具合も担当もバラバラで結局可視化の自分が福岡に入る前にフィジビリ実装したものしか発表ができなかったという話があります。マジでつらい。 しかしこれがケツに火がついたのかチームや開発テーマも固まって来て、ここからが本番といった感じです。

10月<北海道回>

チーム開発は遠隔で行いながらなのですがやはり突然の音信不通の多発などがいっぱいでしんどかったです。そんな中メンターさんと5時間ミーティング&討論するとか相当な追い込まれがありました。(コレ2,3回ぐらいあった)突然の進捗どうですかがあってツラい。

f:id:taketarou2:20180408064211j:plain これは周りが迷走してる図です

大体の感想としては飯がうまい。って回でした.

内情をちょっとくわしく話すと

チーム開発は炎上してるし、みんなやはり突然の音信不通の多発などがいっぱいで、工数見積をしてくれといったのにみんなしないしてかガチガチに開発手法入れなくても良いんじゃないとかメンターが言ったせいで崩れた要因の一つだと思ってるのでそこはモニョッてる、僕の手には負えないので辛すぎるんでメンターさんにPMしてほしい言ったけど「そこは自分たちでやるべきだよ(意訳)」って言われるしほんとにつれぇってお気持ちです。 (申し訳ないのですが承知しましたが影響力がある方が開発内容に良かれと思ってだろうと口出すならば一緒に手も動かしてほしいみたいなことを議論していたりしました。)

この頃はパケット配信のAPIを作ってRest部分を用意して発表に組み込みました。

ちなみにその他として石狩サーバーも見てきました! f:id:taketarou2:20180408064247j:plain

12月<大阪回>

やはりチーム開発は炎上してる(進捗的に) この頃私はRest以外にもストリーミングAPIを用意して置くということ、@abas_onの位置推定を組み込むということをしてました。

ここでは最終発表に向けて私は音頭を取りながら2月までのワークフローを立てていった。全体のチームの人達が動くことを書き出せたのでまぁ良かった。

北海道以降では@ancoさんがinstallerを作りながらブリッジ設定など諸々を頑張っていた。ありがてぇ。。。

2月<沖縄回>

f:id:taketarou2:20180408064400j:plain やはりチーム開発は炎上してる(進捗的にも、人的にも)

自分はFWのフィジビリ実装を行い、ancoさんが実機検証をやってみたいなことを基盤サイドでやっていたことまで落とし込んだ。他の人はちょっと覚えてないが

内輪の成果発表会だったのですが発表前夜、とても背の高いトレーナーの方に手厳しいアドバイスを頂き、夜遅くまで(AM1:00すぎ)発表練習とスライドの修正を繰り返していました。うまく伝わったか不安でしたが、あとからトレーナーからの評価を聞き、言いたい事は伝わっていたのでまぁよかったなぁーってなりました。

アメリカにいった

takeio.hatenablog.com

こちらを参照してください。

3月<最終発表>

やはりチーム開発は炎上してる(進捗的にも、人的にも) 多くは語りませんが、せめて早めにできないときは連絡をしましょう。とても他の人が無駄な消耗をします。結局できないとか普通に信じらんないし(10月頃にデータ形式の相談をしたのに結局ほしいパターンではないとか言うのは流石に駄目ですよ!)優しいから怒らないだけです。

で、中身としては対外向けの成果発表会でした。デモをするにあたり、チームメンバーがそれぞれ作成したものを結合させる作業が必要でしたが、発表直前になってAPIを叩いてアプリが組み込むことが結局できなかったり、ラズパイが処理落ち頻発したりして大変でした。当日もネットワーク関係でトラブルがあり、あまりうまくいかずに厳しいなぁとなりました。

本番不具合が起こった際でもイメージを見せられるようにように準備はしていたというかそれを覚悟していていたので対応はできたのが救いでした。 f:id:taketarou2:20180408064441j:plain

まとめとお気持ち

結構楽しませてもらったなぁと思います。なんだかんだ言いましたがココまでこれたのはチームとメンターと委員の方々のおかげだと思っております。本当に感謝です。いろんなことを学ばせていただいたなぁと思います。

ですが、僕は後悔があってチームの人の持っている知識バックエンドを活かせませんでした。バックエンドに合わせた構成に無理矢理でも落とすべきなのかとかは未だに苦悩です。今回は本人のやりたい希望に合わせて議論上でこうしましょうとなった(なお僕は希望通りではない)のですが、しかし結局それが幸せなのかというとわからないし、そもそもチームの人のレベル差、得意不得意、予定の把握にもっと良いソリューションがあったのでは?とか思う。そもそも無駄な忖度をしたせいでやりたいことが出来ないとかがあったしチームでやるなら誰かが情に流されずに僕も含めて使えないor動けないコマはアサインさせたところからガンガン変えていったり、なんならMVPを活かすためならばそのやろうとしてることごと切り捨てる必要があるなぁと思いました。

正直言ってイマ何言っても仕方ないのでアレですが、メンターの方とうまくマッチングしてないと感じたら新しいメンターの方新たに相談するべきだし、人数が多すぎるときは誰かがリーダーとしてPO or PMになりきる必要があるけどそれはちゃんと責任分界を決めてやらないとリーダーがコードを書いたりすることは出来ないし、権限の移譲を心がけてうまくやらないと行けない。ある種の気づきが多くあったと思います。 そういう意味では後半は最適化されてきたせいでオンサイト開催をうまくスプリントとして自然に使うことが出来たなぁと思います。

割と悔いが残る形で終わりましたが、逆に悔いなく出来た部分もあります。それもまぁ充実なのかなと思うことしました。初年度なので手探りなので結構辛かったですね。 ですが来年度はこの辛さがフィードバックされまくるはずなので、コース制になったのでそんなことなく楽しめるはずです。

ぜひ皆さんも最高の体験をしに応募しましょう!

SXSWに行ってきた話

SecHack海外について

事の発端は1月末。沖縄回に向けて準備したりとか忙しい時期の話です。SecHack365で海外派遣参加者募集の案内がアナウンスされました。 海外派遣先はテキサス・オースティン。そこでは世界最大級の技術と音楽と芸術のイベントSXSWに参加できるとの事で思い切って応募、2月にはSlack上で派遣メンバーになったことが伝えられました。今回はその参加したSXSWのレポートです。

僕にとってはどれも初めてで濃い期間だったので無駄なことも盛り込んでる気がしますがタイムラインで書いていきます。

これは一生忘れないだろうなっていう日々をありがとうございました。~帰りの飛行機にて~

ざっくりとアジェンダ

  • sechack海外視察について
  • timeline

sechack海外視察について

sechackトレーニーの中から希望者を募って応募するという方式でした。大体2.x倍とかなんとだったらしい。 これについては口外して良い悪いを言われてないので私が応募用紙に書いた動機の原文ママを載せます

私は3つの理由からサウス・バイ・サウスウエストに行くことを希望します。
1つ目の理由はカンファレンスで自分の知見を広げることです。
コーディングはもちろんですがサウス・バイ・サウスウエストではプログラミング技術の側面だけではなく使うというところについて主観が置かれているように感じました。”技術と人の未来を俯瞰して理解する”そんなことばがぴったりだと感じました。
特に私が注目してるはDesignのトラックで、「Scaling Design Systems: Pixels to People」などが気になっています。Designのトラックのすごいところは、Designの持つ意味が、日本では一般的に描くことやUI的な部分が多いように感じます。ですがここでは意味どおりの設計という意味として表現していて様々な意味で表現してくれると期待ができます。そしてこれは自分の今回携わっているIoTの管理システムにもつながってくるのではと強く確信しております。システム設計(Design)、UI/UXとしてのDesignなど自分の大きな学びとなり、挑戦しているoutputに大きな影響を与えれると考えています。

2つ目の理由はhackathonです。
このhackathonは
“Questions our hackers can/will address within or across each category”
つまりhackathonでは行いたいことを持ち込んで挑戦することができる。私はぜひこの機会をうまく使い議論をしたいのです。IoTセキュリティにおいてどんな技術が必要なのかという点は見えつつあるが、IoTセキュリティの見せ方という点はこれから発展していくのではないかと思う。どうやって従来のネットワークの可視化を住み分けるのか。どんなニーズが有るのか。そういうoutputができるんじゃないかと思っています。
 
3つ目は世界一のBBQを食べたい!!ってことです。
何を言ってるんだお前はと思うかもしれませんが、いやいや。これはアメリカに渡航する重要なバイタリティになるはずです!
オースティンにはどうやらFranklin BarbecueというめっちゃうまそうなBBQがあるみたいで、日本人レポートをみたところ3時間でも並んでも食べたいとかなんとか。ぜひ食べに行きましょう!

以上より英語力無いのを棚に上げて、私はサウス・バイ・サウスウエストに行くことを強く希望します。

ちなみにですが今回、希望理由のこれのとおりに出来たのかというとそんなことはなくて。 しかし、この応募用紙に書いたコアの理由である「知見を広げる」「世界の人と議論をする」「世界一のBBQ」これらは結果として全く違う形で達成されました。 以下に書くタイムラインから感じ取ってもらえたら幸いです。

timeline

3/8

インターンで東京に下宿してるので夜に実家のある仙台へと一度発行したクレジットカードや服などを取りに戻った。とても忙しい。。。

3/9

仙台から戻ってきて成田EXで成田に前乗りした。いわゆるsechack的に言えばここまでがday0ってやつだとおもう。 ちょっと疲れていて脳死していたので即決で成田エクスプレスに乗りました(自腹) f:id:taketarou2:20180408015114j:plain かなり見晴らし位がいいホテルであったが、大変残念だったがあいにくの天気。晴れていれば飛行機が見えてワクワクが止まらないっていうのだったんじゃないかなぁ少し残念に思う。 f:id:taketarou2:20180408015156j:plain その日は期待と不安とちょっとの嬉しさを感じながら就寝した。

3/10・11

成田空港に8:50に集合だった。心配の一つだった集合時間チャレンジを成功させて無事手遅れなかった。なお@りねあが遅刻して案内人の佐藤さんに笑われていた。

チェックインを行っているときにもう一人の案内人とcodeblueの佳奈さんと顔合わせ。以前みんなSecHackを通してお会いしたことがあるはずだが改めてみんなでご挨拶をした。

飛行機出発までの間各自見て回ることにした。僕は初めての海外ということでなんとなく佳奈さんについていって必要なものなどを見聞きしながらブラブラしていたり、カフェで自分の技術バックエンドの話や佳奈さんが技術バックエンドの話をしていた。ちなみにその時、佳奈さんから呼び名が決定して「たけちゃん」になってしまった()

飛行機ではコードを書いて眺めながら、slackで委員の人たちが時々流す有益情報を確認して、映画を見て、sxswのサイトを見て、美味しい機内食を食べて、更には隣の日本人とアメリカ人と話すといった具合でなかなかに初めての国際線を楽しめたと思う。 f:id:taketarou2:20180408015341j:plain

しかしながら機内の回線が良いと思っていたらかなり激遅いので、最終成果発表会に向けてのコードの修正のタスクが降ってきたけど全くやることができなかった。機内の回線の投げてうまく通ったかを見極めるライフハックとしてwiresharkを立ち上げて、tcpがうまくいったときに緑色が流れてくるの見て作業をすると言った感じだった。完全に何もできん。

隣のアメリカ人のおばあちゃんは長野で合掌造り集落を見てきたと言っていた。この旅初めての英会話だったがほんと文面とは違うことを早速痛感したて何もわからんって気持ちになりました。

それにしても事務局の浅生さんがすごく行きたそうにしていて来年は行けたら良いですねと思った。

さて。アメリカ・シカゴに着いた。入国審査の行列がすごくてトランジットに遅れそうになったのがとても印象的だった。並んでいたところ前には高校生たちがホームステイをしに行くらしく、どうやら前述した隣の日本人が引率の先生らしく第一声「また会いましたね!」。

どうやら海外だと日本人同士だと仲間意識が少し生まれるような気がした。入国審査自体はタジタジだったがなんとかクリア。何を持ち込んだ?っていわれて米っていったら俺は酢飯を食いたいと言われて少し面白かった。

そんなこんなでトランジットは無事成功。シカゴからAuteinへの飛行機に飛び乗り、テキサスぽい何かを見て、タクシーのおばちゃんが話してるのを聞きながらホテルへのチェックインをした。なかなかホテルは広くてこんなのところに止まってええんか???ってなるところでした。

f:id:taketarou2:20180408015428j:plain

そこからすぐに折り返してチケットを発行するためにSXSWの会場へ移動。そこでは今回のアテンドしてくれるWIREDの中村さんたちと顔合わせをして、チケットを発行しました。なおすっごく訛がひどくてageが聞こえなくて佳奈さんに答えてもらうみたいな恥ずかしいことがあった()

そこからは屋台でご飯を食べた。そこではハンバーグを食べたのだが初めてのロブスターでしたがなかなかに最高だった。ほんと最の高です。

f:id:taketarou2:20180408022020j:plain

つぎにsonyブースで色んな体験をした。例えばインタラクティブなホッケーとかVRでサッカーとか。参加者がみんな楽しそうで素敵だなぁ感じ、これがSXSWかと思った....(語彙力)

さて。そんなこんなで夜ご飯に行くことになった。

交流を深めるということでeyes japanの人たちとBBQを食べに行った。ここでの食事はまさにアメリカン。日本の三倍の大きさぐらいですべてがいきなりデカい。僕らが普段日本で食べてた「いきなりステーキ」は実は「計画的ステーキ」なのではと言うように思うぐらいだった。

f:id:taketarou2:20180408022133j:plainf:id:taketarou2:20180408022142j:plain

eyes japanの人たちにhackathonについて優勝だよな?ってめっちゃ煽られたので僕らも危機感が徐々に出始めて下調べなどをした。(が、即寝たので議論などはまだ出来てなかった。。。悲しい)

こうしてとても異常に濃い一日が終わった。

ちなみにですが後日私と@さわだはお腹を下して辛かった(食べ過ぎ?)

3/12

この日はSXSWを見て回ることをした。どうやら早朝からイーロン・マスクの公園を見れるチケットが配られるということで@さわだと並んでいた。どうやら公演は12:00かららしくその間はまたウロウロタイムになってしまった。

私は待ち時間の間programmingのphysical fights backというのを聞いてきた。IoTデバイスがどういう風に振る舞っていくべきかなどの議論が複数の講演者たちがしていたもので、面白かったのがどういうアーキテクチャであるべきかを考えたほうが良いということに対して技術側の話を持ち出すタイプとユーザーストーリーを持ち出すタイプと社会的インパクトを持ち出すタイプ。みんなバックエンドが違う人がいるんだなぁと感じた瞬間だった。

f:id:taketarou2:20180408022257j:plain

ちなみにだが結構日本人が多くて、隣りにいた博報堂のお兄さんと仲良くなってFB交換をした。

イーロン・マスクの公演についてはイーロンが来た質問に対して返答をしていくというもの。これはなかなか破天荒ぶりがよくわかった回だったと思う。たとえば「Q.やることの優先度付は何か」「A.うーんとりあえず全部」みたいな。うーん。なんか強いなぁ....

その後は仲良くなった博報堂の人たちとエキシビションの展示を見に行った。

エキシビションでは多くの企業が参加していて例えばwolfuramやfacebookといった世界の名だたる企業が展示を行っていた。企業だけではなくペンシルバニア大学のラボや日本からは東大生たちのチームなど学生もちらほら。

結構日本企業がゴロゴロいてYAMAHAとかPARCOとか。個人的にはYAMAHAの出していてものとかは特に興味深くて「協調演奏」というAIが人間と連弾しているという技術について展示していた。自動演奏などはよく聞くがAIが人間と連弾するなんてすごい技術だと感じた。ただ使ってる技術としてはNNにカルマンフィルタとからしいので枯れた技術といえば枯れた技術らしいがそれでもすごい。

海外ので面白かったものとしては技術の面ではあまり印象はないのだがベンチャーがロケットを作るって話があってそれの展示、3Dプリンターでチョコレートを印刷などちょっと日本では見ない粒度のものが多くて感動した。

f:id:taketarou2:20180408022426j:plainf:id:taketarou2:20180408022430j:plain

この日も夕飯はBBQ。WIRED REAL WORLD TOURのメンバーの方とご一緒させて頂いた。 f:id:taketarou2:20180408022534j:plain まぁここでも「hackathonは優勝するしかないですよねぇ。」とみんなに煽りを受けながら交流をしていました。なかでも印象的なのが電通の廣田さんにどうやったらプレゼンで勝てるのかというアツい話をしていただいたことです。分量が多いので詳しくは書きませんが。

廣田さんの斜め向かいで話を聞いていたのですが眼の前の@さわだはプレッシャーで胃が痛いとか言ってるし、他に座った@りねあと@たきはhackathonなんて半分忘却して楽しんでるし、僕は話せば話すほど煽られ続けるしとてもつらいって感じでした。(ほんと廣田さん煽っていただいてありがとうございます)

というわけでホテルに急いで帰ってhackathonの戦略をこねこねするはずだったが!寝ました(みんな)

3/13

この日はSXSWからはすこしはなれて、朝からSparkCognition™というベンチャー企業見学に行きました。 f:id:taketarou2:20180408033240j:plain 社名どおり人工知能システムを活用した「認知」に力を入れている会社でAIの産業応用をしている会社です。 セキュリティも含めて様々なプロダクトの紹介があったのですが中でもシグネチャフリーの機械学習によるマルウェア検索エンジンDEEPARMORというモノが面白いなぁと思いました。 訓練データの更新もかなり頻繁にしているようで、アルゴリズムも興味深いなぁとは思っていたのですが残念ながら社外秘。ひとつ気になったこととしては他社製品と比較しててこっちが優れてると言っていたがそれに関する検証環境を示していないのが残念に思えました。。。

僕ら学生には,AIを学ぼうと考えているなら熱意をもって取り組む事.他者との違いを大切にして何かしらの専門分野を確保しておく事とのお言葉を頂いた。どれにも共通するような気もしながらも往々にしてAIは応用分野になりがちなので主戦場がどこにしなくてはいけないのかと言うのが難しいのかもしれません。

その後,再び会場へ戻りご飯を食べました(めっちゃチーズがすごい) f:id:taketarou2:20180408033422j:plain

またその後はhackthonのmeetupということをしてきました。 ここではhackathonでのアイディア交換やチーム募集をする場でした。全く英語話せないので「ぐぬぬ。。。」ってなっていたら周りに煽られて、しょうがなく話しかけに行きました。 格好としては右手にはグーグル翻訳、左手には図で伝えるための紙とペン。とてもひどい格好ですね。。。。。で気合で自分のアイディアを伝えて追加でアイディアをもらうみたいなことを繰り返してました。ほんと抽象な言葉は咄嗟になかなか出てこないですね。 (それにしても結構アメリカ人グーグル翻訳で話しながらでも待っててくれる。。。優しい。。。)

アイディアは恥ずかしいので言いませんが、面白いこととしてあっちの方でビールの種類として「sapporo」というのがあるらしい。いや残念ながら未成年なので酒詳しくないんですけどね。(俺コレが好きなんだよ的なことを相手の人はめっちゃ言ってた)

大体アイディア交換も終わり、この大会のスポンサーたちがどういう意図を狙ってるのかなぁとかがわかってきた頃終わり。とても疲れた。

その後は自由時間でエキシビションで回れなかったところを見に行きました。ちなみにですが何か発表を見てきたはずなのですが完全に疲れてメモって聞きながら寝てました(マジで何も覚えてない) f:id:taketarou2:20180408033626j:plain f:id:taketarou2:20180408033637j:plain さて、ホテルに戻ったあとは作戦会議。とりあえず各自の課題として案を一個考えるを宿題にして再び寝てしまった。(気力体力0)

3/14・15

楽しいhackathonの始まり

さて今日がhackathonの当日。チームはsechackの参加者四人で結局行うことになった。スタートは午後からなので午前中は作戦会議。

僭越ながら僕がファシリテーターをしながら自分たちの宿題にしていた案をもとにブラッシュアップ。ユーザーストーリーマッピングをして案におけるユーザーペルソナを彫り込みながら、「案の批判」と「案のサポート」、「案の提案者」という役を作ってアイディアの煮詰めていくという作業をした。役という概念については電通の廣田さんの話をヒントに行ったものでした。割りとこの流れでやったところ短時間で引っかかりがなくブレストの良さみたいなものが出てきたので出だし的には良かった。

アイディアの雛形としては「言葉にできない瞬間を音楽で表現」というテーマをつけて「動画に音楽をつけてシェア&リコメンド」というSNSチックなものを打ち出した。

ココまでで午前はタイムアップで午後は僕らはhackathonに向かった。 f:id:taketarou2:20180408033732j:plain f:id:taketarou2:20180408033912j:plain hackathonのスタートもなかなかすごくてBeatboxをオープニングにAmazonのCTOが壇上で話したり,CloudnayというCDNの会社のエバンジェリストが登壇したり。FacebookからはFacebookAPIの開発者やVRReactの開発者が登壇したり。すごい人々が壇上で話していて国際hackathonというだけはあるなぁと思いました。

僕としてはfacebookの人に御社のflowtypedを使ってるんですっていったら同僚が作ってるのに携わってるんだよ!って話が帰ってきて嬉しかったです。

会場の様子はアメリカ人らしく歯ブラシや歯磨き粉がただで配っていたり。飲み物(全部ジュース)だったりとか結構充実した感じでした。 f:id:taketarou2:20180408033840j:plain

そんなこんなでhackathonはスタートしました。僕ら四人のお仕事の割り振りとしては

  • @私:フロントエンド
  • @たき:サブでフロントエンド、同時並行でAPIの下調べ
  • @りねあ: サーバーバックエンド
  • @さわだ:発表資料作成・発表

といった感じでした。(ドコが担当できるか的な消去法で決まった)

使うライブラリやAPIAWS, React, Cloudnaryの3つでした。

初手としては

  • 僕がwebpackの設定やeslint,flowtypedなどを詰め込みながら@りねあとAPIエンドポイントの設計相談
  • @たきがAPIの下調べ
  • @さわだが資料作成と発表シナリオの作成

というのが15:00ぐらいから始まって行きました。

大体18:30ぐらいまで会場で行っていて(晩飯が出て来る時間まで待ってた)

この辺ですでに消耗しはじめたオタクが悪態をついてるのがわかりますね。僕言ってないですよ...?(悪い顔)

残りはホテルで作業。 コレは知見なのですが久しぶりにReactを触ったらwebpackのバージョンは上がってるわ,使うライブラリはバージョンミスって死んでるとかで少しリハビリしてからhackathonに行けばよかったなぁと思いました。まる。

消耗するオタクたち

死屍累々という感じになりながら翌日の5時を迎えたのですが以下に示すのは消耗するオタクたちです。

画像で見てみるとこんな感じです。 f:id:taketarou2:20180408041353j:plain f:id:taketarou2:20180408041404j:plain ちなみにですがこの状態ではまだAPIの結合をしていません。さぁどうなってしまうんでしょう.....

弊チームバグを踏み抜きまくる

朝8:00ごろ,会場へ向かいました。 そこでついにAPIの結合作業をしてたのですがここで問題が発覚します。

API叩けねぇ!!!」

なんでかというとlambdaで自前のAPIを用意していたときCROSがEnableにならないという話で、色々やっていたのですが自分たちでは手に負えずその場に来ていたAWSの開発者に投げます。で、なんと僕らは「AWSのバグ」を踏み抜いたのです。...とてもツラい。結局解決としてはヘッターにallowを手書きという人力感ある方法でした()

しかし同時並行で「Cloudinaryの方もバグ」を踏み抜いていてどうやら想定ではサーバーからAPIを投げる想定だったようだが僕らは面倒なのでフロントエンドから投げたところ動かないということになりました。。。いやあくまで想定なので動かないはずはないのですが。。。。 困り果てたのでCloudinary社のエバンジェリストに相談したのですがずーっとトラブルシューティングしていたけども何もわからんと言ったの流石に草も生えない。

発表フェイズ

と、そんなこんなでモノは完全に作りきれぬまま時間切れでした。事前に運営に状態を見せに行くのですが「出さないほうが良いのでは?(意訳)」と言われて完全にチームの雰囲気はお通夜でした。

@さわだにいたっては質問のときにじゃあ竹くん答えようかとか丸投げしたので完全にクソ最悪でした。全くコード書いてないんだからやってくれよ!!!頼む!!!

そんなこんなで@さわだが発表をして質問に関しては結局英語が一番できる@りねあがcodeblueの佳奈さんの助けを借りながらAmazonのCTOからの質問に答えていました。ありがとうりねあ....ありがとう手遅れ(様々な理由からこの旅ではりねあのあだ名が手遅れになった)

結果

で、思いの外ですが、結果としては「最もクリエイティブであった」という言葉とともにCloudinary Prizeという企業賞を頂きました!これはどうやら日本人初出場で初受賞らしい。

自分たちが世界でも十分に通用したということがとてもモチベになりました。本当チームと支えてくれた方々に感謝ですね。ありがとう。

このあとは自分はテキサス大学を少し見学してきました。大学生協とかで本とか売ってないかなぁとか思っていったけど全く理工書とかありませんでした。。。 ちょっと面白いのがあっちにも学生に向けてPCを売りつけるアレがあって笑いましたw

f:id:taketarou2:20180408040239j:plain

その後はこのままヘトヘトになりながらもお祝いディナーをしてきました。一応オースティンで10番以内に入るお店らしい。ランクとしてはカップルが記念日に来るような感じのところ。

もうこの日はぐっすり寝ました。

4/16

今日は最終日。VR関連の展示やセッションを見て,この日から始まったGame Expoをぐるぐる見てきました。 ゲームなどが盛んでeSportsなどゲーマーが山ほどいて子供の数が多いなぁと感じました。治安がいいですね

その後は地元のインキュベーションセンターへ行きました。良い印象だなぁと思ったのが人のためになるものを選んでいると明言しているところがとても好感度upって感じでした。 f:id:taketarou2:20180408040126j:plain しかしながらまぁ何を基準で選んでいるのか全くわからず。りねあが聞いときは「勘」みたいなことを言われてるし謎。ですが日本からでもオースティンでやるなら受け入れると言うのは胸熱ですねそれってなりました。

というわけであんなことやこんなことをしてこの日はまたBBQで締めました。ちなみにココが一番うまかった(BBQ3回目) f:id:taketarou2:20180408040631j:plain f:id:taketarou2:20180408040643j:plain

4/17

余り言うことはありませんが、朝六時の起床はまじでツラい。カバンに荷物は入らねぇしホント次行く人は前々からものの整理はちょくちょくしておいたほうが良いと思います。

と、そんなこんなで色々略しますが帰国。

まとめ

楽しかった!!!!が、英語ができないつらい。。。。

古来から「成田決議」という英語を絶対やろうなという伝統芸能が日本にはあるわけですが例外にもれず自分もやりました。はい。

なかなか日本は味わえないエキサイティングなことが出来たかなぁと思います。同時並行でインターンもしていたので帰ってきて次の日は出社したら出社時間に寝てました(怒られがあった) まぁですが、知見を広げる」「世界の人と議論をする」「世界一のBBQ」これは違った形でしたが達成できました(ほんまか?)

ぜひ皆さんも行きましょう!

2018にやりたいこと

「2017年にやりたいこと」 - お腹.ヘッタ。

恒例のアレです。

反省点

  • 勉学面はぶっちゃけダメでした。具体的は英語がなんだかんだ言い訳してやってしまったのがダメだったと思います。厳しい....
  • 生活面も自力目覚ましできませんでした....サボった1限目は数知らず....
  • 趣味、ダーツはしばらくお休みしました。ダメかどうかはさておきこの時間を情報科学に割くことが出来たのは良い話
  • 情報技術・情報科学について。去年はセキュリティをやりたいと書いてますけどぶっちゃけ全然出来ないです。お前何なら出来たんだよって話ですがブラインドSQLiとかは見ながらなら書けてるので許してください()あといまだにDPは全然書けないです...orz
  • 計算論理は全然出来てないですが、代わりに意味論と型システムが出来てて良かった。もうちょい頑張れ私。
  • イベントについては思ったようにいかなかったけどもくもく会とかひらけてある程度サーベイになったので良かったと思います。

総評としては50点。ぶっちゃけ甘めにつけたけど目標にしてたこと達成できたかというと怪し過ぎる。目標外でアジャイルとかgitとか意味論勉強してたし10点色をつけた。大学なら赤点。

来年やりたいこと

  • 英語 どうやったら英語できるようになるのか。それは英語を読むしかないんだよなぁ。。。。英語の時間毎日取るようにするぞ!!!
  • コンパイラを作る。関数型ってロマンだよね。僕はコンピュテーション式が好きです。そこにロマンはあるかしらではなくてあるんだよ
  • 関数型を用いて一個プロダクトを立てる。あくまで趣味から出れてないからね。
  • 意味論を勉強する。出来ればもう少し検証論の知識をつけたい。俺がCoqだ。
  • バイナリを読む。去年できてないheep問できるようになろうなーという感じ
  • CFPを出す。出したいところは定まってるんですけど通ったら嬉しいぐらいの話。
  • 編入する。絶対だからな。

締め

今年も至らない点あると思いますがご指導ご鞭撻を賜りますようよろしくお願い申し上げます。

Git Objectの話

これは Harekaze Advent Calendar 2017 23日目の記事です。

git objectを皆さんはご存知ですか。そもそもとしてgitをご存知であるか問題があるわけですが、まぁ親の顔よりgitのdiffをみた人もいるんと思うので知ってることにして話を進めます。

で、git objectって何よって話をすると皆さんがgit initをしてホゲホゲすると生まれる.git/objectsを指しており、gitのコアの部分のデータストアのことを指します。

さて、このオブジェクトは大きく分けて三つの構成がされています。

  • blob
    • ファイルデータを表現する
  • tree
    • フォルダ構造を表現する
  • commit
    • treeへの参照、コミットしたユーザーやタイムスタンプなどのスナップショットの表現

それをラップしているのが僕らが普段扱うコマンドたち。

そのコマンドも大きく分けると二つで、

  • 磁器コマンド(Porcelain command)
    • 僕らが普段使うようなbranchとかユーザーフレンドリーなコマンドたち
  • 配管コマンド(plumbing command)
    • 普段のgitフロー開発では普通全く使う必要がないgit objectを直接触るようなhash-objectなどのコマンド

後者の方はあまり聞きませんが、今回はこれも用いて行なっていきます。

何が何だかわからんって人もいるかもしれませんが、git使ったことあるならばなんとなく分かるんじゃないかなと思うのでつらつらと書いて行きます。

ではサックっと見ていきましょう

.git/objects

gitのデータは前述の通り、gitオブジェクトという形で.git/objectsの中に格納される。 実際にコピってやってみよう。(以下よ#〜は結果)

git init
echo "hello" > piyo.txt
git add piyo.txt
git commit -m "init commit"

find .git/objects -type f
#.git/objects/73/0c1bf1546ce745073e50572b64d951427b868c
#.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
#.git/objects/2e/1206f177f168e9654bd0f803c3b79100308516

中身を見てみると.git/objectsフォルダの中にファイルが3つできているのがわかると思う。 この不規則に見えるgit objectの名前は40文字のhashがつけられていて、先頭の2文字がサブフォルダ名、残りの38文字をファイル名として1つのオブジェクトにつき一つのファイルに保存される。ちなみにこのobjectの名前はsha1で生成される。

さて、これではそれぞれどんなオブジェクトなのかわからない。そこでgit cat-fileというコマンドを用いる

git cat-file -t 2e12
#tree
git cat-file -t 730c
#commit
git cat-file -t ce01
#blob

よって以上のobjectはtree,commit,blobと言うことがわかった

blob object

-pオプションでオブジェクトの中身を表示ができる。

git cat-file -p ce01
#hello
cat piyo.txt
#hello

blob objectはファイルデータのスナップショットで、ファイル名などのメタ情報は含まれてない。

tree object

git cat-file -p 2e12
#100644 blob ce013625030ba8dba906f756967f9e9ca394464a    piyo.txt
ls 
# piyo.txt

tree objectはfile構造を指していて、file属性やblob objectへの参照、filenameを記録している。 なお、サブフォルダの場合はtree objectへの参照になる。

commit object

git cat-file -p 730c
#tree 2e1206f177f168e9654bd0f803c3b79100308516
#author take <****@gmail.com> 1513838255 +0900
#committer take <****@gmail.com> 1513838255 +0900

#init commit

//流石にメールはぼかしましたw

commit objectには、トップレベルのtreeへの参照、commitしたユーザー情報、タイムスタンプ、commitメッセージが含まれる。

ちなみに最初のcommitなので親commitがないが、2回目以降のコミットでは親commitへの参照も含まれる。 ほんまか?って思うかもしれないので試しに見てみる。

ではまずは新しいファイルで新たにオブジェクトが生成されるか確認する。

echo "world" > fuga.txt
git add fuga.txt
git commit -m "second commit"
ls
#fuga.txt piyo.txt

find .git/objects -type f
#.git/objects/da/22367adec08f45e1f4c368361f7582159c9012
#.git/objects/b4/7b491cb488426c0ea4c0b04bc0ac9609fb6cc0
#.git/objects/73/0c1bf1546ce745073e50572b64d951427b868c
#.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
#.git/objects/83/c7a922210527a3543ce0cfa9f1f63d9dce921b
#.git/objects/2e/1206f177f168e9654bd0f803c3b79100308516

確かに、以下のobjectが増えていることがわかる。

.git/objects/da/22367adec08f45e1f4c368361f7582159c9012
.git/objects/b4/7b491cb488426c0ea4c0b04bc0ac9609fb6cc0
.git/objects/83/c7a922210527a3543ce0cfa9f1f63d9dce921b

ではcommit objectをgit cat-fileをする。

git cat-file -p 83c7
#tree da22367adec08f45e1f4c368361f7582159c9012
#parent 730c1bf1546ce745073e50572b64d951427b868c
#author take <hayatake396@gmail.com> 1513954425 +0900
#committer take <hayatake396@gmail.com> 1513954425 +0900

#second commit

この場合、確かにparentと言う親commitが出来ていることがわかる。

折角なので、他に増えたobjectたちも確認してみよう。

git cat-file -p da22
#100644 blob b47b491cb488426c0ea4c0b04bc0ac9609fb6cc0    fuga.txt
#100644 blob ce013625030ba8dba906f756967f9e9ca394464a    piyo.txt

treeなのでファイル自体がやはり増えている。

git cat-file -p b47b
#world

blobなのでファイルの中身が確かに出てきている。素晴らしい。とりあえずgitobjectが頑張ってることはわかった。

ここで思うだが、git objectを配管コマンドから直接いじって見たい気持ちになったりするわけである。

と言うわけでこれってもしかして全くファイル作らずにgit commitができるのではと言うことが容易に思えるので検証していく

配管コマンドを用いたファイルを一度も作らずに行うcommit

初めはまずはgit initをして確かに初めにはないもないことを確認する。

mkdir fugafuga
cd fugafuga
git init
#Initialized empty Git repository in /Users/Home/Desktop/fugafuga/.git/
find .git/objects
#.git/objects/
#.git/objects/pack
#.git/objects/info

さて、使うコマンドはgit hash-objectと言う物を使う。これはobjectIDを計算してファイルからblobを作成するコマンドである。 オプションがいくつか設定する必要があって、今回使うのは-w,--stdinと言う実際にobjectデータベースに書き込むオプションと標準入力からobjectを読み込むと言うものを指定する。 ちなみに-wをつけないとただ単にIDを吐くだけになる。blobは出来ない。

echo 'create data' | git hash-object -w --stdin
#070f3bd01632c945394b3aac7187a9d91ca4816a
ls
#(何もない)
git cat-file -p 070f
#create data

これで確かにblob objectだけができた。

次にこれを格納するtree objectを作る。

さて、下準備をする必要がある。 まず、使うコマンドはgit update-indexと言うコマンドを使う。これはworking treeのファイル内容をindexに登録するコマンドである。

これにもオプションをつける必要があり、Stageingしてるファイルに対してこれは実行されるので(と言うかファイルがないのでStageingする場所もない)--addオプションをつけて追加すること必要ある。

また、このindexに追加するものはファイルではなくてobjectデータベースにあるので--cacheinfoオプションをつけて指定された情報をindexに直接挿入してやることになります。このオプションは引数を3つ取ることになって--cacheinfo <mode> <object> <path>と記述する必要がある。

ちなみにだがこのmodeとはchmodなどと同じパーミッションの数値の値を指しています。今回の100644chmod 644と同じですので通常の一般的な権限のファイルであることを意味します。逆に実行可能ファイルとかならば100755になります。

git update-index --add --cacheinfo 100644 8b137891791fe96927ad78e64b0aad7bded08bdc test.txt

さて、これ無事indexにぶち込んだのでStageingエリアをtree objectに書き出すことができるようなった。 これをどう書き出すかと言うとgit write-treeコマンドで行う。これはまだtreeがないときに自動でindexからtree objectを作る。

git write-tree
#c47b19c8b7a3b7724138f73e4cd53efa0f1e9595
git cat-file -p c47b
#100644 blob 070f3bd01632c945394b3aac7187a9d91ca4816a    test.txt

これによって作ることができた。

さて、次はcommit objectです。ここまでやれば簡単で、

echo 'first commit' | git commit-tree c47b
#5cb61261e3c4d2d15d09583c107577564cc6335e
git cat-file -p 5cb6
#tree c47b19c8b7a3b7724138f73e4cd53efa0f1e9595
#author take <*****@gmail.com> 1514031034 +0900
#committer take <****@gmail.com> 1514031034 +0900

#first commit

確かにcommitが出来ました。やったぜ!

終わりに

私は今回NICT主催のSecHack365というのに参加しているんですが、計画性のなさが露呈して、開催期間中に記事を書く羽目になりました。ツライ....

次は@Knom10さんです。お楽しみに!

参考