GitHub緑化運動のすゝめ

この記事は、kstmアドベントカレンダー二日目の記事として書かれました。

qiita.com

 

とりあえずまずはこれを見てくれ。

f:id:Goryudyuma:20161201182707p:plain

Goryudyuma (Goryudyuma) · GitHub

 

緑化運動してるとなんか凄そう(に見える)!

 

やり方

  1. GitHubのアカウントを用意します。
  2. 毎日contributeします。
  3. できた!

ルール

自分なりのルールを定めます。できるだけ(自分が納得できる範囲で)低めに設定しとくと長続きします。

例えば僕は、競技プログラミングで簡単な問題を一問だけ解いてcommitってのはありにしてますが、条件として言語はC++以外ってのを定めています。なぜならC++競技プログラミングは慣れてて、簡単な問題だとあまり意味が無いからです。最近はJavaで書いてますが、その前はGolangOcamlで出してた時期もありました。いろんな言語の標準入出力や、簡単なデータ構造の書き方を学ぶことができます。

メリット

・毎日何かしらのコードを書く必要ができる

「継続は力なりぃぃぃ!」を地で行く感じです。

あと、どーしても進捗出したい物があるときに、毎日コードを書く習慣が付いていると一気に楽になります(個人差あり)。

・三日坊主の克服

何を隠そう僕は三日坊主どころか、一日坊主です。「やるぞ!」って思ったら一気に始めて、やる気なくなるまでやって、燃え尽きて終わるってパターンをずっとやってきました。ですが、継続して何かをするということを覚えないと、この先やっていけないと思いました。

今一年半弱緑化運動が続いているこれを見て、僕が三日坊主だと思う人はいないでしょう。完全に克服したとは言えないと思いますけど、ある程度克服したとは言えると思います。

・アピールできる

 他人に自分のGitHubを晒すのに抵抗が全くなくなりました。以前は「大したものを公開していない僕のアカウントなんて・・・」って感じで、あんまり晒したくなかったのですが、今は大したものを公開していないことは変わっていないのに普通に晒せるようになりました。

デメリット

・ダレる。

しょーもないコミットが増えます。同じ緑化運動をしてる人で、毎日ちゃんとした内容で出してる人もいますが、僕にはそんな能力はないので、簡単な競技プログラミングの問題一問だけみたいな日が結構あります。

これだとそんなに意味がないので、なんとかしたいのですが、それ以上にハードル上げて一日でも緑化できない日を作っちゃうと、その後も怠けるのが目に見えてるので、ハードルは低めに設定しています。

・毎日githubにアクセスする必要がある。

ユニコーン出てたりすると辛くなったりします。

あと、旅行などにもパソコンを置いていくっていう選択肢は無くなりました。一泊二日の旅行で、一日目の早朝と二日目帰ってきてから夜にやるってのを一度やりましたけど、二日目何かの事故で帰れなかったら詰むと判明した(それはそう)ので、日帰り旅行以外は持って行くことに・・・。

終わりに

僕がここまでやれてるのは、緑化運動している先輩の存在が大きいです。自分と同じような時間割で動いているような人ができてたなら自分もできるだろうって考えてます。少なくとも院卒業までは。社会人になったら、どこまで忙しくなるかわからないので、とりあえず学生のうちは続けようと思っています。

kstmメンバーなら誰でもできると思うので、誰か同志になってくれないかなー?

codefestival2016 参戦記

予選Cでぎっりぎりで通ったので、Finalにいってきた。去年に引き続き二回目。

 


11/26朝。
起きる予定時刻から40分寝坊。
僕「まあ時間余裕を持ってるしね、ちゃんと間に合う新幹線あるの知ってる。」

 

駅につく。
僕「指定席満席・・・?かがやきやから自由席もない・・・?一本あとだと間に合わない・・・?」

 

よし。
僕「グリーン車課金・・・しかたない・・・」

 

というわけで、行きは仕方なく、贅沢にもグリーン車で東京まで行きました。
車内はめっちゃ静かに感じた。椅子も電動で倒れるし、ああこれが上流階級の人たちが味わってる世界か~って思いながら、ウトウトしてた。
新橋ついて、会場まで徒歩。電通本社ビル前通って、ここが例の・・・!ってなった。

会場ついて、交通費精算で、グリーン車の旨伝えると、指定席分は出してもらえるとのこと。差額は自腹。まあ仕方ない、けどよかった。


Final開始。
パーカー取るためには、A~Dまでを完答とEかHの部分点を取れば良いことが配点からわかっていたので、まずはEを読む。
わからん。
全然頭のなかに問題が入ってこなくていたずらに時間だけが過ぎた。
仕方ないのでパーカー諦めてAから開始。
Aはやるだけ。
Bは適当にやったらWAで、もう無理~ってなった。飛ばしてCへ。
CはN+M要素を持つUnionFindして、N人が同じグループに属するかどうかだけを判定すればいいってことがすぐにわかったので実装、AC。
Dは問題はすぐに理解できたけど、よくわからなかった。適当に書いてWA。無駄にかけ2わる2してるところがあって、そこが悪さしてそうだったので考察し直したらAC。
E問題に戻って神のお告げ、「DPを使うのじゃ」ってのに閃いて、実装すれば部分点獲得。パーカー確保。

 

目標達成によりやる気は0に。gdgdタイムライン見て過ごす。

 

いろはちゃんに「観戦してばっかじゃだめ!」って言われたので、

 

B問題通してきた。

 


2000点取ってフィニッシュ。

そのあとの表彰式も、touristすげーってなりながら聞いてた。

午後は適当に回ってた。chokudai先生の解説聞いて、ご飯食べて、秋葉先生のトークライブ聞いて、エキシビジョン。
海外勢がめっちゃタイピング早くてびっくりしながら見ていた。

ってな感じで一日目終わり。今回はホテルみんなばらばらで、僕に割り当てられたホテルは少し遠目のところだった。ここだけは今回のコドフェス、去年との比較で唯一の改悪かな~。まあ200人以上を同じホテルにとか、普通は無理なんだけど、交流を増やすという意味で近いほうが良かったな~と。
スタンプラリーなくしたことにより、いっぱい回らなきゃって脅迫概念みたいなのがなくなって、まったりゆっくりコンテンツ見れたし、海外勢入れたこともすごく良かったと思う。

 

ホテルついてからぼーっとテレビ見てた。「とげ」ってドラマやってて、最終回だったんだけど、めっちゃ超展開な気がした。最初から見てるとフラグとかちゃんとあったのかなー。
ひさびさにドラマ見た気がする。それで寝た。

二日目(11/27)、8時集合だと思って6時半に起きて準備してついたのが7時45分、ついてから開場が8時だと知る。
しばらく待って会場入りして、トーナメント戦開始。

round1、A問題全然わからなかった。でも適当に書いた。案の定WA。
時間も短くてめっちゃ焦ってた。仕方なくB開けてみて、「これ全探索で出せば部分点貰えそう」って思った。
この手の問題はPHPで書くほうが楽そうだったのでPHPで書いた。提出は終了20秒前。
そこからひたすらテストケースTLEになってたので、結果が出るのが終了して他のグループの通過者の発表が終わったあとだった。
200点部分点もらって3位通過。まさか通るとは思ってなかった。

round2、round1で早解きが有利とわかったので、ひたすら早解きする。
Aは1足して2で割るだけで200点。2分弱で通す。
Bはとりあえず回せば200点。400点確保で2位通過。

round3、さすがにもう残るのは無理そうって思いながらとりあえずやってみる。
A、とりあえずDPで行けそうとわかるものの、まずCEが消えず。
あとから見ると、size_tの扱いがVC++gccで違うんだねーって話だった。ちくしょう。
そのあとWAが続く。考察何回かし直して、100点を取る。
B行く時間はなかった。
というわけで、round3は5位でした。残念。

そのあとはご飯食べてLT聞いてた。山の話ときゅうり先生の話とchokudai先生の話、どれもおもしろかった。

UFOキャッチャーでセンスのなさを周りに見せて、お情けで手ぬぐいをもらった。

そして最後のイベント、チーム対抗リレー。去年と同様、レッドブルが配られるので、開始前に飲んで気合い入れた。僕はF問題を担当した。
最初に嘘考察して、 @ki6o4 さんに反例だされて、それ含めて考察、書いたら一発で通った。
自分の担当問題通したあとは他の人の考察手伝う(見てるだけ)みたいなことしてた。みなさん頭良すぎでは・・・ってずっと思ってた。

結果発表と表彰式があって、終わって、自宅に帰った。
新幹線の指定席が何故か26日で取られてて(多分伝達ミス。確認する間がなかったから確認怠ってしまった・・・)、指定席書い直す羽目になったり、新幹線が珍しく遅れたりと、無駄に不幸が続いたけど、なんとか帰宅。

家に帰ってからエキシビジョンのB問題通した。一個だけ通らなくて辛かったけど、よくわからない不正っぽいことして通した。

 

基本はTLに流れてた考察通りやれば行けた。プロ各位に感謝。

 

これで終わり。めっちゃ楽しかった!


来年もがんばって、Finalいっくぞ~~!!

ISUCON6で学生一位取ってきた

2016/10/28 10:37 追記

ふぉのさんが上げてくれたのでリンク 

ISUCON6で学生枠1位取れた時の話.md · GitHub

2016/10/28 10:50 追記

あーちゃんも上げてくれてたものの気づかなかった・・・

リンク。

bgpat.hateblo.jp

 

※やったら長文なので、最後まで読まなくても大丈夫、暇な人だけ読んでね。書いてるうちに長文になっちゃったテヘ

去年と同じく予選の様子から書きまーす。

一応去年の貼っとくね。

 

goryudyuma.hatenablog.jp

 

さて、今年も去年と同じくチーム名はkstm、チームメンバーは去年と変わらず僕とあーちゃん(@bgpat_)とふぉのさん(@fono09)の三人で出た。事前に決めたチーム構成は僕がDB、あーちゃんがアプリケーション、ふぉのさんがインフラって感じ。かなりバランスの良いチームだと僕は思っている。

言語は去年に引き続きGolang。何もしなくても速いってのと、去年予選突破した言語だし、使いやすくて速くて、並列も書きやすくてなにより速いってことが特徴の言語だ。クロスコンパイルとか他にも特徴があるけど、ISUCONではあまり関係ないので割愛。Golangはいいぞ。

チャットにはSlackを、タスク管理にはTrelloを使った。チームメンバー全員が所属するものづくりサークルkstmでの今の主な手段がこのSlackで、使い慣れている事が大きい。主に参考ページのURL共有とかに使う。Trelloはとても使いやすい。普通はタグ付けとかして使っていくんだろうけど、僕たちは「umaの仕事」「bgpatの仕事」「fonoの仕事」ってリストを作って、そこにぽんぽん仕事を入れていく感じで使った。Slackと連携していて、Trelloでなにかアクションすると、Slackにも通知が行くので、Trelloを常に見ている必要はないようにした。

 

 

ああ、重要なこと忘れてた、エディタはVimです。

 

予選までにしたことは、主にpixivISUCONで遊んだ練習したことです。INDEX貼ってないテーブルがあって点数伸びて楽しかった。

 

予選はまず、ふぉのさんの遅刻から始まった。彼のマイクロソフトアカウントで登録していたので、彼が来ないことには始まらない。まあよくあることだ・・・とは言え、どーしようもないので緊急事態としてアカウントのユーザー名とパスワードを送ってもらう。もらったあーちゃんがインスタンス建ててスタート。

コード読んでるあいだにふぉのさん到着。大体読み終わったら方針を考える。あーちゃんが一言。「DB消しましょう」・・・僕の仕事が無くなった瞬間だった。

DBを消すって、起動すらしないって方針もあるけど、僕たちはデータベースは一応動かすが、必要なデータはメモリから取って、ユーザーから送られてきたデータはメモリとDBに格納、それで再起動時はデータベースからデータを全部読み込んでメモリに格納する方針。INDEX貼ったような貼ってないようなって感じだけで、それ以外は特にいじらず、あーちゃんが実装していく横で効率的なデータ構造(基本的にはmapだけど、何をキーとするかで効率がだいぶ変わる)考えて口出してた。

あとISUDAとISTARの統合はほぼ僕がやった。無駄に通信してたので、消すに限る。仕事無くなったので恵んでもらった感じだ。ありがたや。

で、今回のターニングポイント、htmlifyをどーするかだけど、とりあえずGolang正規表現は超絶遅いってことは有名な事実なので消す方針、replaceだけでなんとかやるって感じにしようとした。だけどただreplaceを順番に適応させていくと、一度変換したものに対してさらにリンクを貼ろうとするので全然ダメ。というわけで、@はあらかじめ@@に変えた上で、一つの単語を@(id)という風に変換して、あとでリンクに変換するようにした。この辺はほぼあーちゃん考案・実装。これが決め手となった。

ふぉのさんはnginxの設定書いたり色んなとこ見て回ったあとは白ご飯炊いてお茶淹れて鯖缶あけてくれてみんなで食べた。インフラ班はこの辺の面倒までみて大変だなと思いました(小並感)。

再起動試験をしっかりとやって終了。ちょっと不安ではあったものの、これ以上どうしようもない。

 ああ、今年は落ちたかなーと話しながら終わった。

 で、ちょっと経ってから合格通知。予選学生10位(社会人枠に一枠食い込んでくれたので、9位だけど10位)でギリギリ。今年も渋谷行ける~~って喜んだ。

 アルゴリズム、競プロでいろんなものに触れてきたつもりだったけど、アホコラは知らなかった。知ってても使えたかどうかは不明だけど、ちょっと悔しい。strings.Replacerは一度使ったことあったのに、本番中思い出せなくてこっちはマジで悔しい。

 

さて、続いて本戦。

まずは前日(今年も前日かよ!?って全く反省していない感じ)に、ISUCON5Finalの練習をした。あーちゃんがDocker-ComposeFileを作ってくれたので、それで(あーちゃんとんでもなく優秀)。

github.com

いつも使ってる鯖がトラブルで動かなくて、僕のwindowsにDocker建てて動かして見たけど、外からつながらなくて、仕方なくファイアーウォール切って(!!)やると繋がったので、三人でやっていました。この練習でもDocker-Compose使ったくらいには、僕たちはDockerに慣れていたので、本戦に活かせた感じです。

 

本戦当日。

 長野駅行ったらいたあーちゃんと一緒に蕎麦食った。予定時間に来ないふぉのさん。相変わらずだなーと思いながらも、僕はスーツケース持ってて、東京で電車乗り換えダッシュできない(したくない)状態だったので、とりあえず予定の電車で僕だけ先行、ふぉのさんとあーちゃんは次の新幹線で行くことになりました。で、渋谷。渋谷駅やたら広くなっててびっくりした。ああ、またヒカリエ来れた~~って喜んで会場入りした。ちょっと待って会場にてあーちゃんとふぉのさんと無事合流。レッドブル飲んでコンテスト開始!

最初の動画から「は?10万ユーザー同時接続?」ってなって、「これどーすんだ」ってなってました。予選の問題ははてなにちなんだ問題だったので、本戦はpixivかなーと大雑把には話してましたけど、まさかこんな形とは・・・って感じでした。コンテストが始まって、最初1時間位はデプロイできない問題にハマってました。会場全体が。運営大変だなーって話ながら、レギュレーション何回も読んでました。コア数を20から10に落としてつなげるようになったとのアナウンスがあり、もう一度デプロイ。これも失敗したけど、その次のデプロイで成功。まずとりあえずベンチ動かして、次にGolangに変えてまたベンチ。DBのインデックス確認とかしてみるも、どうにもおそそうなところが分からない。

静的ファイルあるので、とりあえずNginx入れようという話になったのと、Reactレンダリングを行うNode鯖もあるねって話、あと画像を予め生成しておいて静的ファイルとして配信したいなって話になりました。あーちゃんはJS大好きマンなので、Node鯖見たいと言い出し、ふぉのさんはいつも通りNginxを入れてイジる、じゃあ僕はというと、DBはいじれるところなさそうだしアプリケーションいじるかーってなりました。と言ってもほとんどいじれるところはなく、Strokeをメモリに載せる作業をしただけでした。あんまり劇的な効果があったようには見えなかったけど。それから静的ファイル生成するはいいんだけど、どのくらいの時間なら大丈夫か確かめようとしてSleep入れてみたけど、めっちゃ小さくしても、ベンチでタイムアウトしちゃってダメだなー、これ静的ファイル吐き出してる間にタイムアウトしそうだなーってなりました。あとはコード読んでる間に気づいたDBのインデックス、一個貼りました。それからMySQLが立ち上がっていなくてもGolangのアプリケーションは、MySQLが立ち上がるのを待つ設定を書いときました。再起動試験が重要なISUCONでは必須ですね。

他にチームとしてやったことは、Node鯖でTLS処理してたのが重そうだって、Nginxに処理させて、Node側からは抜いたりしました。それから、Golangのアプリケーションにインスタンス一つ、Nodeの処理にインスタンス一つ、MySQLの処理にインスタンス一つ、Nginxの処理にインスタンス一つ、一つのインスタンスは何もしない構成にしました。この2つが点数を伸ばした要因となったようです。あと、終了二時間前くらいから再起動試験を開始しました。その時点で学生一位取ってたのと、このあと急に点数伸ばせるとは思えなかったこと、去年みたいにFailしてしまうのはなんとしても避けたかったことが理由です。最初にrebootコマンド叩いていって、systemctl enable忘れで立ち上がってこないアプリケーションがあった(気づけてよかった・・・)ものの、二回目はちゃんとベンチ通りました。「再起動試験ってrebootコマンドじゃなくてAzureのダッシュボードからやるんじゃね?」って話になり、Azureのダッシュボードからも再起動試験をやり、「インスタンス1,2,3,4,5の順番に再起動試験やったけど、5,4,3,2,1の順番でやると落ちるかもしれなくね?」って話になってその順番でもためしたり、「MySQLが立ち上がる前にGolang立ち上がったらまずくね?」ってなって前述のMySQL立ち上がるまで待つコードを入れてる話したりしました。ここは本当に念入りにしました。

最後30分であーちゃんが「いま第五鯖何も動かしてないけど、この鯖もNode鯖にすればもうちょい捌けそう」とか言い出しましたけど、全力で止めました。点数上げるためにはたしかに必要だし、あーちゃんなら時間内に作業を終わらせられることはほぼ確実でしたが、ここはISUCON本戦、なんとしてでもFailしたくなかったので。そのあとはベンチの点数のうち最後にしたものが扱われるとの記述により、ガチャしてました。二万点超えたところでもう触らないって決めてフィニッシュ・・・ちょっとしたミスで、結局二万点を少し下回ってのフィニッシュでした。来年はこのミス、なんとしてでもなくします(強い決意)。

どうだろうなー、何位かなー。潜っててスコア表示が止まる17時からガンガン点数伸ばしてきそうだなーって話は結構初めの方からしてました。途中社会人枠含めて一位だったときは特に、「あのチームとあのチームは絶対隠れてスコア伸ばしてくる!!」って話を。学生一位、社会人合わせた全体で5位に入ってて本当に良かったです。

ちょっと大きめの金額をもらっちゃったので、ノートPC買い替えたいと思ってます。まだどれにするか迷い中です。

運営の皆さんありがとうございました!来年もこのチームで頑張りたいと思っています。チームメイトに見捨てられないように精進して、来年も本戦行ってなんかしら賞とるぞ!!!

 

 

 

ここから下はただのチラシ裏の落書き。

 

最近ブログ更新してないナーと思った。セキュキャンの3日目まではギリギリ更新できてたけど、グループワークも忙しくなって4日目から先は書けなかった・・・。で、実家帰ってもやる気でなくて、ICTSC6ってコンテストでサークルで出て3位に入るものの、僕は知ってることを手順通りにやった(MySQLの見たことあるエラー文を、その通りに直した)ってだけで特に書くことなし。IBMメインフレームコンテストも名前載るまで(パート2まで)やったけど、それまでもメインフレーム特有の普段と違う手順でいろいろやらないといけなくて、更に問題文も英語になって、更に更に忙しくて、もう無理ぃ・・・ってなってやめた。あとこれ書いてるとき(3日くらい費やしてる。道理で長文になるわけだ)にCODEFESTIVAL本戦出場キメた。けどこれも、やれることやったらなんかギリギリ通ったって感じだ。というわけで、なんだかんだいろいろやってはいたものの、書くのがめんどくさいっていうので書いてこなかったけど、言い訳はここまでにして、今回のは特段衝撃的だったので書こうと思った。

 

僕は今まで生きてきて、一位と言うものが取れた試しがない。仮に取れていたとしても、それはかなり限られた環境での一位で、全国、全世界にはもっともっとすごい人達がいるとわかってて取った一位だ。そんなの一時的には嬉しいけど、ああもっと上には上がいるんだなってなって終わる。運動できるわけでもなく、頭も特段いいわけではない。何か特別な特技も持っていないし、落ちこぼれの一学生だった。今してるサークル長も、みんなどう思ってるかしらないけど、消去法で選んでも僕になる気がするし、勝ち取ったって感じはまったくない。大学の成績も、めっちゃいいってわけではなく落ちこぼれない程度のものだ。そんな僕が、今回学生枠とは言え、全国で一位のチームに名を連ねる事ができたことが、本当に衝撃的だった。一生無理だと思っていた。もう自分でも何書いてるのか分からなくなって来てるけど、とんでもない喜びだったことを察してほしい。(でも社会人枠の人たち倒さないと本当の一位とは言えないよなーってちょっと思ってる・・・無理・・・)。

 

次もがんばるぞ!

セキュリティ・キャンプ全国大会2016参加記 その二

三日目

3-A【Webアプリケーションの脆弱性の評価と発見】

もう使われていない古いバージョンのサイボウズオフィスの脆弱性を探す会

ひたすら「これは見ていいものなのか・・・?」と思ってた・・・ので、詳しくは書けません・・・

CVSSv3なる方法で、脆弱性の分類をして、重要度をきめるらしい。

・・・が、意外とあてにならないものもあるらしく、重要度は低いけど早急にやらないといけないものも多いらしい。

.htmlの中にif文があって驚いたが、10年以上前のものも含まれてるそうなので、闇が深い。

4-A【クラウドセキュリティ基礎】

クラウドでなにができるようになったか?

-> サーバーをポンポン産んだり殺したりすることが可能となった。

-> サーバーはペットから家畜へ。

ここでもCVSS。やはり重要らしい。

AWSでサーバー立てて遊んだりハンズオンしたりした。

5-A【サーバ運用におけるパスワード管理】

100台サーバーがあって、4人管理者がいたら、理想は400個のパスワードがあるべきだが、実際にそんなこと出来るの?って話。

まあ無理なので、じゃあどうしようか。

とある会社で使われているシステムの説明などをしてくださり、とても面白いと思った。

企業プレゼン

なんか正直良くわからなかった・・・

データを分散して、全部合わさらなければ元データは取り出せないので安全ってのはわかった。

これを用いると、仮にPCをなくしたとか言ったトラブルでも、データをとられることはない。

でも、復元できなくなるので、重要な情報はどうすればいいのか。質問してる人もいたが、回答がなんというか、理解できなかった。

グループワーク

順調・・・なのか?

デスマしそう・・・?

ハニーポットハンズオン

お話聞けてよかった、あんな世界もあるんだ。

ちょっと立ててみたいと思ってしまった。

三日目終わって

ああもう折り返しか、楽しいなあ、もっとやりたいなあ!

goryudyuma.hatenablog.jp

セキュリティ・キャンプ全国大会2016参加記

メモ代わりに残していたものを、ちょっと時間あるので公開。

時間あるときに追記します。

セキュキャン参加記

1日目

特別講義1

サイバーディフェンス研究所

トレンドマイクロ」、「カスペルスキー」などと一緒に、インターポールに協力している会社。

どのようにして入りこんだか?

->事例を効果的に見せることで、印象をあげた

印象大事!

人とのつながり大事!!

特別講義2

警察の人

犯罪とは?バレなきゃいい?

グループワーク

チーム名

三対一

読み方

イーマックスのかち

Vim負けちゃったよ・・・

題目

子供の倫理観をどうやって育てるか?

一日目終わって

twitter.com

twitter.com

もしかしてこのキャンプ、最高では?

二日目

1-A【HTTPプロキシ発展】

burp楽しい!Javaはめんどくさいけど、通信の中身を読みやすくしたり自動書き換えしたりできる!

最後の課題、分かったのにPCが不調で・・・。答えはあってたっぽい。また解いておく。

2-C【人工知能とセキュリティ】

人工知能というより機械学習という印象。

(どう違うのかというとうまく説明できないけど、機械学習はめちゃくちゃ頑張れば手がぎりぎり届きそうだけど、人工知能はどうがんばってもまだ無理って感じ。)

1

データから特徴を抽出することは機械学習で可能だが、その抽出した結果を見て判断する、しきい値を決めるのは人間である。

しきい値そのものを機械学習しようとしたところで、その先もまた人間の手が必要となる。(この結果はいい結果か悪い結果か?など)

よって機械学習は果たして本当に銀の弾丸となれるのだろうか?

2

機械学習ハンズオン

TensorFlowを用いた画像分類の学習。コードも短く、簡単にできそうな印象。

3

学習した結果、暴言を吐きまくるbotができてしまった。

-> 悪いデータに汚染されないように、どうすればよいか?

  • 人間が判断して間引けば良い

  • 悪意を持って学習させる人は少数派という仮定のもと、学習させるのは全データの内から幾つか抽出して学習させる。

  • 事前学習の重み付けを大きくして、自由な学習の重みを下げる

CTF

辛さしかなかった。

RasPi二台持ってて、どちらもRaspbianで、パスワードも朧気ながら覚えてたのに「まさかそれはないだろ~ww」なんて思うのはホント駄目。

CTFと自分、相性めっちゃ悪いなーと。なにもかもエスパー問題に見えてもう無理という感想しかない。

一対三(ヴィムのかち)に負けたのは、三体一(イーマックスの勝ち)の一の方のVim派の自分としては嬉しいやら悲しいやら複雑。

二日目終わって

速攻で部屋帰って寝た。もうここに住みたい。

ICPC2016国内予選参戦記

チームUSAで出場、AとBとCの三問といて61位でした。チーム名の由来はチームメンバー(うま,ゼレ(selee),あーちゃん)の三人の頭文字。

 

予選開始前

練習問題のJ,K,Lをあーちゃんが通してた。その後別チームのわにさんが「Mの解法思いついた」とか言い出して通してた。で、なんか僕に伝えてきたので僕も通しといた。自分で思いついた訳ではないが4完。

 

予選開始

作戦としては、僕とあーちゃんで速攻でAとBを通し、その間にCをゼレ氏に読んでもらう。で、AとBを通した頃にはゼレ氏がCの問題を把握していて、解法も思いついてたらいいなーって感じで。このチーム、考察力がかなり低めなので、D以降は解ける問題があれば解く的な感じでした。あと、一番コードを書くのがうまいあーちゃんが基本キーボードを触り、僕とゼレ氏は見て間違いを指摘するようなチーム編成です。そのため、使ったPCはゼレ氏のものだったが、.vimrcの設定などは全部あーちゃんのもの。

 

A

sortして差を見ていって最小値を選ぶだけ。なんか解法というよりコードをそのまま口で言ってた。それをあーちゃんに打ってもらってた。

 

B

投票する、sortする、残りの票が二位の人に入った場合、1位の人を抜けるかどうか判定、抜けなくなった時点で確定。そこそこスムーズに通せた。

 

C

愚直解を回した。ゼレ氏が問題読んでくれて把握まではしてくれていたので、問題本文をしっかり読んだのは予選終わってからだった。解法はいいアルゴリズムがぱっと思いつかなかったので、「とりあえず回そうか」的な。最初書いたものは毎回mをループの初期値にするというコードでめちゃくちゃ遅かったが、前回埋めた数字より小さいことはないので、その埋めた数字を初期値とするというコードにしたら結構早く終わって、AC。

 

D

解けず。奇数番目と偶数番目が同時に抜けていくので、二部マッチングっぽいなーって話をしていた。区間DPで解くのが正攻法だったっぽい?来年までに要復習。

 

E

解けず。模擬国内BのC問題で出た座圧+imosを三次元でやるのかなー、でもこれだとくっついた物体が2つ以上ある時どうやって分割すればいいのかな、わからんな、とか考えてた。

 

F

解けず。UnionFindでグループ作っていくのはいいけど、その後どーすりゃいいのかわからなかった。

 

G,H

一応目を通しはしたが、ぱっと思いつきそうではもちろんなかったのでパス。

 

 

以上です。大学内1位は取ったけど、それだけでした。来年頑張ります。

今乗っている路線をなめらかに表示させる

作ったもの

Near Station

ソース

GitHub - Goryudyuma/location2

動機

前に同じようなの作ってて、でも満足はしてなくて、その後某駅○モにも前作と似たような実装で表示されるようなやつができたとの話を聞いたので、じゃあ僕はもっとなめらかなすごいやつ作ってやるぞ!ってなって今作を作った。(たぶんn番煎じ)

使った技術

ubuntu+さくらVPS+NGINX+PHP7+MySQL5.7+React.js+bootstrap

ubuntu

雑魚なのでまともに触れるのubuntuだけ・・・

さくらVPS

前に使ってたVPSより性能高くて反応もよくて非常に満足。ただし高い。

NGINX

配信用。Let's Encryptも使ってHTTPSとHTTP2の対応。ついでにIPv6も対応させた。

letsencrypt.org

qiita.com

PHP7

APIスクリプト。適当に書くだけで動くから好き。PHP5でもたぶん動くけどPHP7にしたのは趣味。

MySQL5.7

位置情報とか駅情報などを入れてるDB。MySQL5.6から導入されたgeolocation型や、MySQL5.7から導入されたJSON関数などを使用している。

React.js

JSの先生に勧められるがまま勉強したフレームワーク。時々詰まることもあったけど、日本語資料が多く調べやすかった(たまに英語資料だがわかりやすい)。画面更新処理などがとても書きやすい(、けどJSのフレームワークこれくらいしかしらないので、もっと書きやすいやつは探せばあるのかも?)。日本語チュートリアルや、koba04氏の一人React.js Advent Calendarがとても参考になった。

qiita.com

bootstrap

Viewを整えるやつ。React-Bootstrapを使った。

React-Bootstrap

データ

国土交通省国土政策局国土情報課国土数値情報ダウンロードサービスの国土数値情報鉄道時系列データから取ってきた。国交省(と気象庁)は手軽にデータ数が増えないそこそこ多めのデータが手に入り、データベースの勉強に最適だと思う。(Twitterなどはリアルタイムにデータが変わるので、初学者にはつらい可能性?)

国土数値情報 鉄道時系列データの詳細

今後

気が向いたらPHPAPIを書き直すかもしれません。(現状の実装がとても汚いことは自覚している・・・)

あと、もっと機能付け加えた方がいいのかな。シンプルイズベストで、今の感じが結構気に入ってるけど、やる気が起きてアイデア浮かべば実装するかも。

感想

ひとりISUCON、つらいけど楽しかったです() ISUCON6も決勝頑張っていきたいと思います!

謝辞

協力してくれたものづくりサークルkstmのメンバー達、様々な情報を提供している先人達、データを公開している国交省の人達、その他何かしらで関わってる人達、感謝です!

供養

この作品は前作の全面改修でもあります。もう使われることは無いと思うので、ここに残しときます。

前作ったやつ

位置情報から路線を取得するテスト。

それのソース

GitHub - Goryudyuma/location

ひどさ

JSがわからなくて、PHPでJSのコード生成してたりする。と聞くだけで想像する方法とはたぶん違う方の生成。どうしても詳細が知りたかったらソースみて。うんコードが大量にある。見ない方が幸せ。

動機

電車に乗っているときに、今乗っている路線の情報とか取得できたらおもしろそうって思った。ただしこの前作では、新幹線など駅間が長いところに乗っていると、横の在来線に乗っている判定がされることが多々ある。(今どの路線に乗っているかの判定が再近隣駅から判定しているため。)

さらば

まともに書いた初めてのwebアプリよ、さらば。