cookies.txt      .scr

ただのテキストファイルのようだ

駒場祭企画 TSG LIVE! 2 CTF DAY1の問題

※この記事は TSG Advent Calendar 2018 2日目のエントリです。
昨日は(?)博多市さんの知的ゲーム「たほいや」のすすめでした。
adventar.org

先月の23-25、駒場祭がありました。サークルTSGは五月祭に引き続いてライブ放送をインターネットに投げつけました。
ライブの細かい話は同アドベントカレンダーで15日に博多市さんがまとめてくれるんだと思います。

僕は1日目CTFの出題・放送と、3日目CTFのプレイヤーをしました。
僕が出題した分はまだ遊べます→TSG Live CTF Day1
今日問題の中身を公開した後、1週間後、来週の日曜日24:00以降の適当なタイミングで閉じようかと思います。

登録していただいたチームは、放送時に内部プレイヤーとして参加したチームを除き、現在のところ20チーム。そのうち4チームが得点をしてくれました。
CTFdをadmin権限で眺めると、41 IP addressからアクセスがあったそうです。
参加していただいたチームおよび放送を眺めてくださった方々はありがとうございました。

5問作りましたが、1問はまだだれも解いてくれていません。
TSGの1チームがそれを除く4問を解いてくれました。
が、あとは2問しか解いてくれてない...悲しい。
[追記] moratoriumさんがcruel dd解いてくれました!!!やった!!!


そんなところですが、問題の中身を公開しようと思います。
これくらいのちまっとしたCTFを開催するときに参考にできるようならしてください。
github.com

アドベントカレンダー、明日は早速、taiyoslimeさんの「駒場祭CTF day1 Writeup」の予定です。彼はさっき書いた4問解いてくれたチームです。


以下は記念です。
f:id:cookie-s:20181202023157p:plain

SECCON 2018 Quals write-up (classic, kindvm, gacha lv.1/2, shooter last part)

TSGで出ました。2位です!わいわい!
本戦は僕は出れません。

チームのひとびとの記事

hakatashi.hatenadiary.com
moraprogramming.hateblo.jp
qiita.com



自分がflag submitした問題は、タイトルの5つのようです。
うち、shooterは最後の段階しかやっていません。

続きを読む

ISUCON8予選で全体2位をした

moratorium08akouryy と 僕 kcz の3人でISUCON 8の予選に出場しました。
FetchDecodeExecWriteってチーム名です。3人ともチーム名とか決めるの苦手なので、かなり雑に決まりました。
結果、全体で2位がとれました。わいわい。
isucon.net

練習

練習は、一昨日やりました。ISUCON 7 Qualsをやりました。去年僕は出たはずなんですがすべて忘れていました。

当日

言語は、事前から実質golang一択でした。3人とも経験は無ではないです。


始まってバックアップを適当にとったり、ローカルに同期したりしたあと、HTTPサーバがh2oであることを見つけました。
nginxのつもりで臨んでいたので、まあ悩んだんですが、moratoriumくんの割と軽く強いinsistにより、nginxへの置換を決めました。終わってみれば英断だった気がします。
httpリクエストを直接受けられるのは1stインスタンスだけっぽいので、これでnginxを動かして、加えて1st, 2ndでapp、3rdでmariadbを動かしました。
一応3rdでもappは動いていますが、来るリクエストはinitializeだけです。


某所でやったので、ディスプレイが潤沢に得られて、外部ディスプレイの方でdstatとかtop、mysql slow query log、nginx access logとかをずっと流してました。
競技中はdstatは3rd=dbインスタンスだけidleが0になり、mysql slow query logがやばい感じになっているのがほぼほぼ常だったので、クエリ改善してました。
加えて、ベンチのエラー(減点/fatal)もたびたび出てくるので、journalctlでapp logを眺めて、golang特有のどこで発生したかよくわからなくなったエラーを直したりしました。


akouryyくんがNを1にするやつたくさんやってました。Nを1にすることを2回繰り返すことでN^2が1になったりもするっぽいです。
moratoriumくんが、初期実装でtransaction&retryすべきっぽいのにしてないところを直したりしてました。500が減ったり、期待とstatusが違うことに起因する減点が減ったりしてたっぽいです。*1
ほかにもいろいろやってました。いろいろやってました。


最終的には、sql queryがまあまあ改善された結果、1st, 2ndインスタンスでCPU idleが60、3rdインスタンスでCPU idleが20くらいをウロウロしていた気がします。



僕の超大事な役目は、だれかがgit push origin masterしたあとに、

for i in `seq 1 3`; do ssh isu$i -- 'bash -c "source ~/.bash_profile; source ~/torb/webapp/go/waiwai.sh"'&; done

を実行して、終わったら掛け声をかけることです。
waiwai.shは以下です。

cd /home/isucon/torb/webapp/go
git pull origin master
make
sudo systemctl restart torb.go

そうするとmoratoriumくんがbenchmark enqueueボタンを押してくれます。
そしてdstatを眺め、終了の様子が見られたらベンチマークの結果を眺めます。これがルーチンでした。思い出したようにlogの削除も行いました。

意気込み

Finalがんばるぞい

*1:moransactionとmoratoransaction、どっちのほうがおもしろいとおもいますか

GitHubのcommitをverifyする

github.com

1. PGP鍵が必要です。作ります。
2. Gitの、いつもSSH鍵をアップロードしている画面の下のほうに、PGP鍵アップロードするとこがあるので、します。
3. https://help.github.com/articles/signing-commits-using-gpg/を読みます
4. commitしてpushします
5. unverifiedを受けます。どうやらPGP鍵のemailと、git configのemailが一致している必要があるようです。
6. 今のnoreply github emailを使うのを通したいので、noreply email用にPGP鍵を作ることにしました。
7. 鍵をアップロードします。
8. commitします。pushします。
9. verified !!

f:id:cookie-s:20180420210430p:plain