monolog

monora log #=> ものろーぐ

2016年12月の投稿

KnobCon史(仮)

雑記

この記事は ぐらぽむ Advent Calendar 17日目の記事です。書き始めたのは 12/18 0:05 です。ごめんなさい。

はじめに

この記事は、僕が一応代表という事になっている、豆腐屋というサークルが C90 で KnobCon を出すに至った一連の流れを追いかけたものです。 こんな機会がなければ絶対に外には出ない記録でしょうし、内部の人間も見返すことはなかったでしょう。

そしてただのポエムで、晒しで、反省でもあります。

また はしけむの KnobCon前史(仮) - 0rangetail をお読みでない方は、先にそちらを読まれた方がよいかと存じます。

なぜ (仮) なのかというと、まだ終わっていないからです。別に意味深な話ではなく、まだ KnobCon が世に出てから4ヶ月しか経っていません。その今、全てを過去のものとして語るには早すぎるのでは、という意味合いで言っています。

まず、この Advent Calendar の 10日目 に少しだけ書いたものを引用します。

そしてメンバーを振り回したということが半年ほど前にあり、彼 (はしけむ) もその振り回された一人です。KnobCon のオリジナルアイデアは彼によるものです。その節は本当にすみません……

結果として最終的に KnobCon というものができ、実際に頒布できたのは奇跡だと思っています。 今日はそれについては何も書きませんが、そのうち、誰かが @kyontan はクソみたいな話をしてくれるでしょう。

これを深く掘り下げようという話です。 つまるところ、我々はどのように考えてこれを出し、どのような事があり、どのように今に至るのかという話です。

前振りが長いですね。本題に入ります。

本題

とにかく僕は記憶力が悪いので Slack をひたすら漁ってぺたぺた貼っていきます。だいたいメッセージ数でいうと5000〜6000ぐらいでしょうか。多すぎるので99.8%は割愛します。

なお、これ以降の引用文は、全て同期数名で構成された横浜県というSlackチームでの会話です。 横浜県といえば、僕が持っているドメインであり、 pref.yokohama ですが、名前以外に関連性はありません。

まずは Slack のログを漁ろうとしたのですが、肝心のログが24,000件の投稿の彼方に飛んでいました。アーカイブから取ってきたものを張ったため、スクリーンショットがありません。ご了承下さい。

kyontan has joined the channel #newproject-comike 2015-12-31 20:15:02 +0900kyontan set the channel purpose: C90出しませんかプロジェクト 2015-12-31 20:15:03 +0900kyontan: とりあえず申込書セットを買いました 2015-12-31 20:15:21 +0900

時間を見た感じ、C89 3日目から帰ってきて唐突にチャンネルを立てて発言したらしいです。覚えていません。 多分コミケ独特のテンションで勢いでやったのでしょう。

kyontan: ゆりえっちSS 2016-01-02 17:45:56 +0900

まったく記憶にない。

割愛しますが、1/2 はその他に萌基板はどうだろう、みたいな話があり終わりました。

蛇足ですが、コミケの申込み期限はかなり早く、C90のオンライン申込期限は 2016/2/9 (火) でした。開催6ヶ月前です。 そのため、とにかく申込書類に必要なサークル名やサークルカット、頒布予定商品を決めないとという焦りがあったのを覚えています。

そして次の発言は 1/5。

gurapomu: 物理的に動くものが作りたい気分だ 2016-01-05 21:47:42 +0900

なるほど、ここで方針が決まったんですね。

kyontan: にゃあ 2016-01-05 21:52:49 +0900

gurapomu: もふもふ 2016-01-05 21:53:19 +0900

kyontan: そういうのここでする必要なさそう 2016-01-05 21:56:07 +0900

記憶にない。

その後、サークル名が「豆腐屋」に決まるなどがありました。意外と早いタイミングで決まっていたんですね。

その後、2月中旬までに、数回の秋葉原中央通りのサイゼリヤでの話し合いを行い、ハードウェアで何をやるか、何をしたいのか、黒字を出したいのか出さなくて良いのかなどという話がありました。 メンバーは既にこのころ決まっていて、 @kyontan (僕), @akira, @gurapomu, @hashikemu になりました。たまにオブザーバ的存在として @hogas や @36kyo などが出てきます。

その頃は左手デバイスを出している人を参考にしたり、キーボードを作ろうみたいな話をしていた気がします。 キーボードといえば、最近は Ergodox なんかが一部界隈で流行っている印象を受けますが、おそらくキーボードの話を突き詰めるとこのような物になったのかな、などと思っています。

そんなこんなありつつ、頒布予定としてはひとまず何らかの入力デバイスを出す、といった内容を提出します。 肝心のサークルカットははしけむにお願いした結果、素晴らしい小紅ちゃんを描いていただけました。本当に可愛い。

[caption id="attachment_1558" align="aligncenter" width="400"]

豆腐屋 C90 サークルカット[/caption]

そして申し込みが終わった 2/18 の後、 #newproject-comike に書き込みが行われたものがこれ

kyontan: @channel: > 貴サークル「豆腐屋」は、日曜日 西地区“g”ブロック-11a に配置されました。 2016-06-10 17:43:36 +0900

突然3ヶ月ぐらい飛びました。そのようなことがあります。時間とは……

この時点で C90 3日目 (当日) まで2ヶ月と少ししかありません。死にそうです。

ところでコミケに慣れている方は 西g-11a というスペース番号が見慣れないという方も多いかと思いますが、gというのは C90 ではじめて追加された配置であり、1, 2日目に企業ブースとして使用していた西34ホールを3日目に一般サークルが配置されたものです。

その後、 KnobCon前史(仮) - 0rangetail であったとおりの流れがあり、最終的に「自作ハンコン兼汎用入力デバイス」を作る話にまとまります。まったく経緯がログにないな……

akira: Knob+Controllerでのぶこんとかですか(雑 2016-06-27 17:36:32 +0900

これが名前の元っぽい。

ちなみに競合という表現はあれですが、この時点で似たようなプロダクトとしては PowerMate や BrushKnobなどがありました。 最近は Surface Dial などがあり、これは KnobCon ですという発言をすると巨大な存在に消されることが知られています。

また、DIPスイッチを付けるか、フルカラーLEDを付けるかなどの議論があり、最終的に無くなります。スモールスタートというやつです。(雑)

6月〜7月の1ヶ月間は、そして無限に終わらないノブの形を決める話があり、 @akira が CAD で作った案をあーだこーだとひねりながら形を練っていき、などがありました。

この時期は KnobCon のユースケースであったり、そもそもどういう使い方をするのか、対象とする層はどこなのか、というような抽象的な話が多かった気がします。これをこの段階で固められたのは、後々考えるととても良かったと思っています。やはりそういう曖昧な話はどうしても時間がかかりますし、すり合わせるのは難しいです。 (ノブの形は1週間ぐらいで決まったようです。)

そして @akira を中心にロータリエンコーダ(ノブの回転角を取る電子部品)を探しつつ、外形を決め、 @gurapomu が基板を設計するということがありました。 基板の話は最初僕がやるという話になっていたのですが、完全にこの時期は何らかの力が働き死んでいました。本当に申し訳が立ちません。 部品といえば、ロータリエンコーダ探しはとにかくしんどくて、経済力や政治などがあります。これがハードの辛いところで、要求するスペックの部品があっても、少数ロットでは購入できないものが意外とあります。つらいです。

あとはWebカタログ公開があり、それに合わせて公式Twitterを開設した気がします。

http://twitter.com/tofu_ya_moe/status/754964207209033729

基板設計、発注のあたりは進捗が完全に燃えていました。これは完全に僕のせいで、ファームウェア (ソフトウェア)の検証が遅れに遅れていたのが原因でした。ちなみに 7/23 に手を付け始めたようです。

 

そして 7/31, 8/1 の突貫工事でサイトを作成し、その夜に 公式サイト を公開します。 最初は頒布価格が未公開でしたが、それ以外はほとんど今に至るまで変更はないです。 最初から3Dモデルがグリグリ回せたのは、どこかのクリスタルがグリグリ回せるサイトへの憧れからです。

http://twitter.com/tofu_ya_moe/status/760110714031706112

gurapomu: 正式見積もり完了しました 2016-08-01 23:21:34 +0900

これは基板の発注をしたときの書き込みですね。

ところで、僕はこれ以前も、以後この記事を書いている現在に渡るまでもハードウェアを設計した経験はないのですが、それでもこれが異常なスケジュールなことは分かります。 8/1 というのは、たいていの印刷会社の同人誌の通常入稿締切な訳です。 決して印刷会社の方々を卑下するわけではありませんが、我々はハードウェアを作っているわけで、この 8/1 にはその構成部品の1つを入稿したに過ぎないわけです。 そして印刷会社と違い、これがいつ完成し、我々の手元に届くのかもはっきりと分かっていませんでした。 さらに、手元に届いた後に我々は部品を一つ一つ手で実装する必要があります。

異常なスケジュール感でただひたすら焦りが出てきます。しかしやることはあるのでやっていきます。

まず、最後まで継続して行った取り組みの1つに宣伝があります。

泥臭い話になりますが、そもそもコミケで頒布するハードウェアを1つ作るためには、本を1冊作る以上のお金が掛かります。 とても雑な見積もりですが、例えばとある印刷所ではオンデマンド印刷表紙カラー本文モノクロ24Pで20部10,000円程度だそうです。本は非常にスケールメリットが高いので、頒布する場合に20部しか刷らないケースというのはあまりないかもしれませんが、とにかく原価で配布するとして、1部500円ですね。 (ちなみに50部刷ると14000円程度になり、1部280円になります。) 一方で、今回の KnobCon のコストはこの10倍までは行かずとも、数倍のコストが掛かっています。 例を上げると、基板の製造単価だけで先ほどの本1冊分に相当する程度のコストが掛かっています。つまり、1つも売れないのと1つ売れたのですら大幅に損失額が変わってきます。 どんなに理想論を語ろうと、そこには有限のリソースがあります。無限のリソースが欲しいです。

ちなみに今回は僕の財布というリソースがある程度存在するものと仮定し、資金源はそれだけを使い、かつ僕が全損失を負うという話でそもそもこのプロジェクトが動き出しました。仮に1つも売れなくても、絶対に金で揉めるのだけは避けたかったのです。

というわけで宣伝します。Twitterでガンガン呟いてリツイートします。アキバBlog 様と 秋葉原PLUS (+) 様のコミケサークル宣伝企画にお願いをして呟いて頂くなどもあります。 あと、上のツイートに残っているかもしれませんが、 Twitter Cards も設定しました。これは2000回ぐらい表示されたみたいです。ちなみに、 @tofu_ya_moe のツイート自体はトータルで20000回ぐらいは表示されたようです。

とにかくそんな感じで金の話があり、頒布数、頒布価格を決めることになります。様々な思惑がぶつかり合い、最終的に20個のKnobCon を4000円で頒布することになります。これを言うと原価がだいたいバレますが、まあ政治的な思惑はさておき公開することにします。損益分岐点は17個です。つまり、在庫の85%を売らないと黒字が出ません。同人活動って難しいんだね……

そんなこんながありつつ、@akira が死にそうになりながら 3Dプリンタに昼夜張り付き外形の造形をしてくれます。ログを見ながら、彼は本当にいつ寝てたんだという気持ちになる……

ちなみに僕が書いていたファームウェアは 8/3 には完成したらしいです。 (コミットログを見ると 8/12, 13 にもコミットがありますが、主にチャタリングやコードのリファクタリングなどの微修正です。)

そして 8/6 に何をとち狂ったか説明書を作ろうと言い出してデザインを始めます。@akira には猛反発を喰らいましたが、単純に僕がやりたかったし、そういう製品に良い感じの説明書が付いていたら一目置かれるだろうし、最悪印刷費は自腹するから作らせてくれという話をしました。ちなみに端的にいうと、発注した部品が届かないので精神が死んでいたということです。

で、ここから連日朝になるまでデザインをしていて気が付いたんですが、僕は壊滅的にデザインセンスがないんですよね。 @akira にデザインセンスがあるのはさておき、@hogas という(彼も高校の同期であり、今は大学の同期でもあります) 素晴らしいデザインセンスを持った人がなぜか横浜県にはいて、とにかく素晴らしい指摘で僕の作ったデザインをどうにかしようとしてくれる訳ですね。いや、本当にこれはありがたかったです。せっかくなので最終的なデザインを貼ります。

[caption id="attachment_1546" align="aligncenter" width="620"]

最終的に完成した KnobCon のマニュアル[/caption]

僕はあまちゃんなので、これは今でも良かったものだと思うし、あの時のベストだと思っています。 そして、それが物を良くしようとする指摘であれ、自分のデザインを否定するような発言をされることが死ぬほどつらかったし、本当にこれを入稿する 8/11 までの数日は地獄のような日々でした。もう二度とやりたくないです。

これもおかしくて、僕はマニュアルという紙媒体の原稿データを印刷会社に 8/11 に入稿してるんですよね。何度でも言うんですが、豆腐屋のC90の参加日は3日目で、8/14 です。

 

8/11 といえば、パッケージのデザインもしてたようです。僕は @akira の原案を元にちょっと直しただけです。

[caption id="attachment_1548" align="aligncenter" width="251"]

KnobCon のパッケージ[/caption]

designed by ... のくだりはみなさんがよく見たことのあるアレです。

 

そしていよいよコミケ0日目 (8/11) には部品が揃い、その日から3日間掛けて 秋葉原の創造空間ナノラボに集い製作作業だったようです。@gurapomu が謎のスキルを持っていて、表面実装部品をはんだ付けするなどがあります。

これが他人行儀な表現になるのは、僕がこの製作作業に半分程度しか参加してないからです。だからdisってくれという話をしてるんだけどなあ。disられたけど。

当日のお品書きはこれ

[caption id="attachment_1555" align="aligncenter" width="226"]

豆腐屋 C90 お品書き[/caption]

見れば分かるのですが、基板が余ったので売りました。

そういえば回路図を公開し忘れた気がするのでします。

[caption id="attachment_1557" align="aligncenter" width="259"]

KnobCon 回路図[/caption]

ちなみにマイコンは aitendo で売っている PM32U4 で、ロータリエンコーダは Bourns の PEC12R-4020F-S0024 です。

3Dモデルはこれ (Thingiverse) です。ソースコードはさっき上にも貼りましたがこれ (GitHub)です。

当日

http://twitter.com/tofu_ya_moe/status/764615159054606336

kyontan: スペースに3人入るのがそもそもつらいぞい 2016-08-14 08:13:14 +0900

予想以上に狭かったです。サークルチケットが3枚あるのはどういうことなのか全く分からず。まあそういうことなんでしょう。 西34は予想通りではありますが、人が比較的少なく、空調もそれなりに効く関係上そこまで暑さは感じませんでした。

また、完全に蛇足ですが近くに大学の教授が配置されていたり(後でスペースまで来て名刺を渡された)、どこぞのTwitterで有名な先輩が配置されていたりしました。濃い。

http://twitter.com/tofu_ya_moe/status/764628009194106881

そして始まる戦争。

http://twitter.com/tofu_ya_moe/status/764664052777836544

突然の完売。

もう売れたときには何が起こっているか分からなくて、とにかく感動より安堵が先に来た気がする。

https://twitter.com/kemuduino/status/764743427820969984

このように比村乳業を4週する豆腐屋メンバーなどの存在も知られています。

そうしyr,豆腐屋の C90 は幕を閉じました。

後日談

そして翌日から僕はアレのために大阪へ旅立ち、と思った後には今度は九州へ向かいました。最終的に、僕が関東へ戻ってきたときには9月になっていました。夏も終わりです。

大阪(正確には兵庫ですが)では変人のメッカ1話で出てくる階段などに行き、九州ではオタク活動をしました。 そして打ち上げは例のごとく秋葉原で行われ、我々はお金に余裕が無いため天上ではなく地下へ潜ります。

https://twitter.com/sukukyon/status/778907390695575552

人生でも指折りの素晴らしいエクスペリエンスがありました。

https://twitter.com/sukukyon/status/778969414917951488

つまりこの打ち上げ代が出る程度の黒字が出たということです。 これは初参加がコミケでしかも本ではなくハードウェアなんか作ってしまったサークルの結果として、この上ないものだと思います。

人に恵まれ、機会に恵まれ。本当に、感謝してもしきれません。ありきたりな言葉ですね。

その後 C91 の申し込みセットを買ったにも関わらず申し込みに失敗するなどの些細なことがありましたが、それはまた別の話です。

最後に

ひとまずこれで豆腐屋の C90 の活動、つまり KnobCon は一先ず幕を閉じます。 いや、正確にはそこから先の認識はメンバーでずれていたりしたので、終わっていないのかもしれません。でも少なくとも僕はそう認識しています。

豆腐屋という名前も、メンバーが変わるならおそらく別の名前になるでしょう。次があるのかも分かりません。

でも、何らかのものを0や、0に近い形から作る機会というのは、なんらかのきっかけがないと生まれないでしょう。 逆に言えば、そのようなきっかけがあれば、そのようなこともあるのかもしれません。

これは KnobCon です

akira: KnobConがMicrosoftから発表された http://japanese.engadget.com/2016/10/26/surface-surface-studio/2016-10-27 10:48:18 +0900

結局我々はこういうものが作りたくて、違うところはあるにせよ、少なくともあの Microsoft よりは先にそのようなビジョンを具現化できたわけです。そしてその作りの精巧さを見れば見るほど、リソースを異常に注ぎ込んだ製品であることが分かってしまうわけです。

この記事は ぐらぽむ Advent Calendar 17日目の記事です。書き始めたのは 12/18 0:05[…]

Adventar::List 2016

雑記

この記事は MMA Advent Calendar 2016 12日目 の記事ということになりました。若干遅刻しました。一般に終電で帰宅すると日付が変わっていることが知られています。

MMA といえば花火なので、合宿担当をやった話でも書こうかと思ったのですが、あまりにも特異なケースすぎて全く一般化できない上に、多少書くのが微妙なラインもあったのでやめました。

また、Team MMA として SECCON 2016 Online CTF に参加した話は昨日書きました。 というわけで、宣伝も兼ねて Adventar::List について書きます。

Advenar::List というサービスを作った話は過去にも monolog に書いていますが、今年も少しアップデートしたので書きます。

kyontan/AdventarList だいたいこのようになっており、このようなマイルストーンがあります。

見た目上の変化はないですが、クローラがモジュールっぽく書き直されて少しイケた感じになったり、N+1問題が解決して4倍ぐらい早くなったりしています。特に最近は1日500件以上の記事が上がるので、それなりに速度が求められている気がします。

つまり現時点では何もやっていないということが分かるのですが、頑張ってやっていて、フロントを書き直そうとしています。

このフロントは確か2年前からそのまま使っているし、最低限の機能しかないのでそろそろ検索なりお気に入りカレンダー機能なりを付けようとしていて、せっかくだしモダンフロントJSを書きたいなあと思いつつやっています。

ちなみに開発が止まった最大の理由は、MacBook Air と盃を交わしたところ9万円が飛んだ一連の事象に寄るものです。データが飛ばなかったのが不幸中の幸いです。 皆さんもお気をつけ下さい。

一先ず、先行実装で雑に各ページに .json という拡張子をつけることでこのような JSON が返る API は実装してあります。後はこれを良い感じに表示するだけです。

という訳で、クリスマスまでにはおそらく完成するのではないでしょうか。

こんなサービスが存在するということで、暇つぶしにでもお使い頂ければ幸いです。

この記事は MMA Advent Calendar 2016 12日目 の記事ということになりました。若干遅刻[…]

SECCON 2016 Online CTF に参加しました (Write-up)

Programming

なんか直前に参加しない? と誘われたので今年もYouTube問題担当として参加しました。Team MMA で 700 Points, Rank: 107 (国内: 27) だったっぽいです。(暫定?) あと500 Points で国内予選でしたね。先は長い

MMA は大学のサークルですが、前回のチーム overflow +αみたいな感じでした。主要メンバーが運営にいるし、新たに入ってきた後輩はなぜか別チームでやっていたので、謎です。

僕は VoIP (Forensics 100), Memory Analysis(Forensics 100), PNG over Telegraph (Crypto 300) を解きました。とりあえずメモです。

VoIP (Forensics 100)

pcap が振ってくるので、WireShark で開いて VoIPツールで再生して終わり。これICTSCでやったやつや…… SECCON{9001IVR}

Memory Analysis(Forensics 100)

Volatility というツールを使えということだったのでその通り頑張ってみる。

strings forensic_100.raw | grep http をメモ ./volatility_2.5_mac -f forensic_100.raw dumpfiles --dump-dir dumpdir -S summary.txtsummary.txt を見るとプロセスの絶対パスが取れて、怪しい svchost が分かる (PID1776)

$ ./volatility_2.5_mac -f forensic_100.raw pstree
(snip)
.... 0x81f65da0:svchost.exe 1776 672 2 23 2016-12-06 05:27:10 UTC+0000
..... 0x8225bda0:IEXPLORE.EXE 380 1776 22 385 2016-12-06 05:27:19 UTC+0000
...... 0x8229f7e8:IEXPLORE.EXE 1080 380 19 397 2016-12-06 05:27:21 UTC+0000
(snip)

プロセスツリーが取れて、 PID 1776 の子プロセスが分かる

$ ./volatility_2.5_mac -f forensic_100.raw connscan
Offset(P) Local Address Remote Address Pid
---------- ------------------------- ------------------------- ---
0x018c3cc8 192.168.88.131:1077 180.70.134.87:80 3676
0x0196f6a0 192.168.88.131:1122 175.126.170.70:80 3676
0x0233bbe8 192.168.88.131:1034 153.127.200.178:80 1080
0x02470238 192.168.88.131:1036 172.217.27.78:443 2776

PID 1080 がアクセスしてるのが 153.127.200.178 だと分かる

上の strings でアクセスしてた URL のドメイン部分を全部 153.127.200.178 に変えて、curl

echo http://153.127.200.178/
curl -I http://153.127.200.178/ 2>/dev/null | head -1 | grep -v 404

こういうのを書き連ねて、 200 OK が返ってくるものを探す

(snip)
http://153.127.200.178/entry/Data-Science-import-pandas-as-pd
HTTP/1.1 200 OK
(snip)

後はアクセスして取ってきたファイルを開く

$ cat Data-Science-import-pandas-as-pd [/Users/kyontan/Code/ctf/2016online]
SECCON{_h3110_w3_h4ve_fun_w4rg4m3_}

PNG over Telegraph (Crypto 300)

待っていました YouTube 問題、と思ったんですが、50分を超える動画で最初から心が折れる。 とりあえずダウンロードして、ffmpeg で 1fps で連番画像へ変換。

mkdir tower; ffmpeg -i SECCON\ TOWER\ 2016\ -\ YouTube.mp4 -vf fps=1 tower/out%04d.png

これ、最近授業でやった気がするなーと思いつつググルも、一般的な手旗信号ではないようで少し戸惑っていたら、 @f_dita 先輩が最初のデモから対応表を作っていたようなので拝借。

そもそもパターン数が26+αあって、コマ数がトータルで3000を超えていたので人間技で分けるのは無理だと判断し、ImageMagick でごにょごにょするも、動画内の棒がブレるわ、次第に少しずつカメラがずれている? やらで全く精度が出ず、ここまで3-4時間近く。

[caption id="attachment_1463" align="aligncenter" width="620"]

分類器の様子

ImageMagickで頑張って自動分類を試みていた形跡[/caption]

最終的に心が折れ、手動分類アシストツールを書きやっていくこととなります。 そのようにして、160行のSinatraアプリケーションがここに爆誕しました。HTMLを文字列として扱って結合する簡単仕様。 そして去年のごとく、突然 @hogas を呼び出し、ひたすら朝まで単純作業。

それに伴い少しずつ分類器の機能が向上され、再分類(間違えた画像のやり直し)や大分類(軸となる棒の向き)→小分類 などの仕組みが整いスピードアップ。

[caption id="attachment_1464" align="aligncenter" width="620"]

手動分類の様子

二値化して見やすくしたら骨を分けている気持ちになれた[/caption]

これはSECCONではないと思いつつやるも、結局どのようにしてフラグを得たら良いのか分からず、更に混乱するなど。 問題文でPNGに戻せることが示唆されているので、何らかの方法で元に戻るはずですが、そもそも動画の冒頭で文字の対応が示されたのは20パターンほどに過ぎず、全部で何パターンあるのかも良く分からないままひたすら分類していきます。 最終的に32パターンになるのですが、途中で分類を誤ったりなんやかんやあった結果、36パターンの分類が完成し、Base36という誤った道を踏みそうに。答えは Base32 でした。

気合でバイナリに戻したら、馴染み深い IHDR の文字列が見えて感動しつつ、ここから更に間違えた分類画像100枚以上を探しつつ、気合でCRCを合わせて行きます。

最終的に、IHDR や PLTE, tRNS, pHYs, IEND 領域は CRC32 がマッチして、IDAT の inflate がチェックサムでコケるところまでは上手く戻せました。

input = "rfie3rynbinauaaaaagusscekiaaaaw5aaaafwqbamaaaabvebthaaaaaadfatcuiuaaaahzzzz5lwmz4uaaaaacorje3uzzzzellx1haaaaaclqjbmxgaaabmjaaaalcia2fxl1zqaaabwyjfcecvdyttw2uqms1i2ayrsrkvsqclbjlpxslmiavl5bus3zuqagz3xdt0oq15ci3kjuy0gjjknzzyjqobyha3dqobyha3dqobyhb3cpxdstrxdzt0zu1zzi5dwzc11jzvydx44gx2t0zfz3d4244rhdlcpir50u2mcaob1zrddyzj4bw11np1v02y5u1lcdrzjwouzjnzqobyb41geohcxsxdb3fdz3c0sejzsd2nbcye40jeapcdi3dt1g13gp2giw23z5jta0dfrt1ih55btxvmhxa3hqhzdpwdrl4whjsfrdqkzc2gljdeob0zdp1d55oe2uai1mnd4wxifhag344rpcm0rrbuha2pqr02i1dz2pd1bmbqobgzrhgrbqmzg00w12lpxgk1yn5c2obvnjwj4quha3pqjx2t2g1bmaq3rvpav5dmynuv2wlkuoppsrwidqodyl41hizwxhrl5lkz0ssvqdjwyzuvtev3k2dh05yha3d2zbdhljc1h4kj5ynk0100gw2xb5hz2jtuv2qobyg41gj2k3kl4jhftp2vfrr40fyme1l2vhc1dgzbpcnqgbyf41ewivxoh2pkn0qn5zpztpyllw33nzxoe2kqbhyda3cnzbepo3nylrfs0zjchnxcqyepu4krkupr1dqkbyh41evurfvlpar4ujdekpk34e1211lzzxacaob5zb5n5t0muzhmbs2urt2yr5524npkwukyot4z4xaiobyzbhtyzrj1okx5fv0g53voxfjfwqupsrj442n0ku0v4nyda3d2za4v0bvhnf5fpbv2lr3hvdndispkg5vi1byhatpyntgnwgusdvdnvh433x0rovk2r1lxzj0wi3dqohyi31nuunlupdqruvpo2gtp4lpzot4u2z053g3dqobg4qsfjvh1cz4jfy1kvg4u55givzw4acoobyzbdlyo21oo4wunlu5zmafr3tlqla0c0k4o5zwbihazpysw0wtz0feuyiyzznmxvk312gcpeyj4khmfy3dr1cwpvsvjt5mhl44404l4zuztj25ysxgf1vmmyldqohyl11yvxrlskky5fh02ncwlszjofoaffnleoiyha3d2zbzuvcoit5pxvqazyokxh1235ektpk3rd1tm4qibyh41cupelmkyzw40xl4t3omhlcvwmlwwq40zkf5klqodye4oekmt12pq5p2v3yh4dedtfui0pe5gu4fs1saeha2pqpc2u4gxeolww4j2lngsflw0xohl2byj1ayha4pymzf53hjbupoen5x4noc5beplaq4in2xb0ogq3dr1fz3o2ihvn0wxe34vlatswxkinpxmp5hxsomd55fqgbyf41g3kbgwk2ngbtfpupxwcndg3yzhkdaqdqpx3bmzgpntd4p0sfgwa441hppwmq2lsk2janbyhl3e1ptgpbdlnat2w21ukhm1kv4dpclpzp0p2vauob0zb4hsxvzi0gywexxzltim5ilmyvnrmwlk40hsly3q4xaadqpx3cvntfnn0ytnffkjc4x5trs44454sgucu4kx2m2byfa3d2zbshssd5wir0f13l14ln1xfcpe2w5j0d5rdnsda3dqjx3g3vdlk5xcjpcok1wypokpwgnlil4khjqkbyh41d5vruumwors0fu024zgkot100vjtrk34lx3ga3dv1cnlvhsmf1z5wutp0vkw2pwixvctl5j4iobypa4zrvkkch05giwwq4lmwqrf1ntwih21ly4fv1eiobyha4pylyyefx2tombpdl1lte5jlg3p0vilw5xmcla3dqnx3knm50tjlqnv12pwmz152ponnmafzs4iobyha4zrb4vtrlcxl20oqj54rxsuv5lrxcvdphm3dr1dgzqjp3otwo022qlrx0tlfiz3yfff4znfbyda3dp1eop2klbgoufqi2w3m5vqkyczlsjoagpxmuda3dqlx3dy020t0gde3vngk0d1u2vnkke1pnpf0a43kp3aha3dz1dwp2tvxklwknk55dlv2fbs135r0ix3pxbysdiob0zc44q1showz05sgn1moezliktgbku3lw55gmt3mo1ceobypaxlyx0mbl5ik1cl2oo4kdh40wwkxx5zoki1gbfyhb3fnxdmwqicfgdlzijcvkyvqz03h5yc31ev55ycxa3hqlx3n0qp5mxolk1nn4q1bwtkvmvtw22upeu5dqohys23m0lbxg04rx114zs3u31ehzki34jzihpotha3hpkbiha4pyu1xnmdt35ww31ht1f2epymzjf2x0phwwhamdqjx3ek1a54ufwoadzvikpo5iorjtplsm24eonyhb3dnzaef0m00jfmzvkatlu0xxdn0zpjueaaob5za4p23twus04k0ildq2nugd0dytpfsxgli22y1c33dr1cxpcgsax512lsmyq1h243s4kzmjmn3vtgayhazpyuj2yhgmv0nltaz01spccxf44kpn20mowlyodyh51h3kc2i43lddhvevviv1r4hqp5jkzkbtzvxqzlbi3dq1bg4yqr2gpw25vc4v3l4aan2xgx2zvxixhyobyg41eols0ong5koxbvretcf52ochl1nwbihazzqwpcif3ulfl3oixqvyulo5vky2ir45yag521jyha4pyplj3kmtoranly3wmn2mjoworm1wunnjcmx1adqobzzb4hvdqn3x5m1fzi3xnp4tm4y0ybhxfo5lfxyha3d2zbz15eaqobyha3dqobyha3dqobyhp3mz3apaujsxhmrfz0maaaaaacjivhejlscmcbaaaaaaaaaa"

s = "abcdefghijklmnopqrstuvwxy054321z"

x = [input.chars.map{|x| s.index(x) }.map{|x| ("00000" + x.to_s(2))[-5..-1] }.join].pack("B*")

# "\x89PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x02\xDA\x00\x00\x02\xDA\x01\x03\x00\x00\x005 fp\x00\x00\x00\x06PLTE\x00\x00\x00\xFF\xFF\xFF\xA5\xD9\x9F\xDD\x00\x00\x00\x02tRNS\xFF\xFF\xC8\xB5\xDF\xC7\x00\x00\x00\tpHYs\x00\x00\v\x12\x00\x00\v\x12\x01\xD2\xDD~\xFC\x00\x00\x06\xD8IDATx\x9C\xED\xDAA\x92\xF2:\fFQUe\x01,)[\xEF%\xB1\x00\xAA\xF4\x1AK\x9F\xA4\x00o\xF2\xE3\x9E]\x0FhH\xE2\x93Ld\xC9J\x9B\xFF\xE10ppppppppppppp\xF0O\xB8\xE58\xDC\x7F\x9E\x7FO\x7F\xE8\xD0\xED\xF1{\xC9\xFDp;\xEFf\xBFg\x9F\x97\xFC\x1E\xFB\xBD\xC4\xE3X\x9E\x88\xEB4\xEB\x04\a\a\xDF\x88\xC7\x8F\xA7a\xB7\xBC\xD7\xFA\xB9\xEE5O,C\x8F\xD3gS\xE9o\xE0\xE0\xE0;\xF1\x88\xE3\x8A\xF2\xB8\xC3\xC2\x8F\xFC\x16dD\xFEC\xEBB,\x13yI\x00\xF1\r\x1C\x1C\xFCop\xCF\xE9\x91n\xF3\xFAL\xC1\x91\x963\xF2\x0F\xAD\x06w\xAB\x0Fpp\xF0?\xC6\xFB\x0E+\xDD\x8E\x99\x16#\x82\xBE.\x99i\x19\x1C\x1C\xFCo\xF0\xF5\xA7\x13\xB4\x02<\xC6\x8Fv\xBA\np\e\x9B\xDC^&f1\r\x0E\x0E\xBE\x11\xCFQ\xE1\xFF\xAF\x1F\x82\xC0\xC1\xC17\xE2sD0g\xCD\x9C\xDB\xDD[\xEEe{\r\xD0\xBA\xE0\xD5\xA9\xB2w\n\x1C\x1C|\x13~\xCF\xA6\xF0X\br5x+\xA1\xB3\r\xA5{e\xAA\x8E{\xE5\e pp\xF0\xBD\xF8\xE8\xFD\xAEx\xAFKW\xF3)V\x03M\xB1\xFAVd\xAF\x15\xD1\x9F:\xC1\xC1\xC1\xF7\xE1\x19\xD6\x91x\xFBRu\x86\xAB>\xCEMn\xDC:?\xFA\x99\xD2\xBD\x83\x83\x83o\xC6OU\xC5/i9f\xFE\xD4\xB1\x8E\xF2\\0\x9E_jqxf\xF8^&\xC0\xC1\xC1w\xE2Y\x15\xBB\x8F\xD7\xA9\xB9\x83u\xF7\xFEo\xC2\xD7nq\xBF\xBB\x89\xD5@'\xC0\xC1\xC17\xE1#\xDD\xC6\xE1q,\xB3\xF4\x88\xED\xB8\xA1\x82>\x9BTUG\xC7\xC3\x82\x83\x83\xEF\xC4\xAD\"Z\xAD\xE0\x8E\xE8\x91\x91OW6Ow\xDE_\xFFp\b\x0E\x0E\xBE\x1D7S\xCB)\xF3\xB02\xED#>\xE2:\xD7v\xD7\xAA\xD4V\x1D=\xFFw\x02\x1C\x1C|'\x9E?\x14\xF9\xCA\xBE\x8B\\\x9B\\\xAB\xAET\x96\xD0\xA3\xE5\x14\xEF}nUL\xD7m\xC0\xC1\xC1\xF7\xE0\xDDr\x1A\x9D\xA5\xD1^\x1A\xF5q\xE1\xEA6\x8D\x12z\x8D\xAA\xA3\xC1\xC1\xC17\xE1\xB33ljHu\ej}\xF3\x97\xCC]Uv>]\xFE\x9C\xD9\x1C\x1C\x1C|#\x9Em(\xD5\xD1\xE3\x84iW\xBB\xA6\x9B\xF6\xB7\xFD\xD3\xDD;\xFC\xEB\x86\xE0\xE0\xE0\x9Bp\x91SS\xF8_\xDAK\x8F*\xA6\xDD5\xA3\"\xBF\xB6\xC0'88\xF8F\xBC;\xBEs\xB7j5t\xD7\xD8\x02\xC7\x93\\\x16\f\x8B*\xDB\xB5\xFB\x05\a\a\xDF\x89[6\x9F\xF2RS\b\xC7\xFE\xD6^\xAA\xE7\xBAa<\x98N\xD4v\x17\x1C\x1C|+>\xB2\xAAg\xA6\x1D{\xDE\xF3\xB5\xEF\xF4\xFC\xD3\xDDbW1}V3\v\x1C\x1C|/\xDE\xC5o\x15\xC9J\xC6\x8A|\xF5\xA2\xB2\xE5\xF4\xB8\xAE\x01J\xD5\x91\xC8\xC1\xC1\xC1\xF7\xE1\xFD*'\"z}\xEB\x00\x7F\x0EU\xCF\xEE\xF3DT\xDE\xAED~\x9B7\x04\a\a\xDF\x85G\x91lV?m\xE6\xEB\xDC\xF8\xE6\x1Db\xAD\x98\xBBZ\e\xCF\xD4])pp\xF0M\xB8\x8Ad\xFD\xD7\xC3O\xEDy\x83\xECd\x1C\xCBDe\xE4\xD1\xA9\xB2\xCB\xD2\x01\x0E\x0E\xBE\x0F\x17i\xB3\\\x8E]\xAD\xB4\xF5m4\x8A\xBBf\xEE:\xFA\x1C'\xC0\xC1\xC1\xB7\xE1\x9F.\xB8t\x86\x8Fq\e\xAB\xED\xAE\x16\x82G\xAC\x10\xDA\e\xDB\x87.488\xF8\xBF\xE3\xBA\x83\xD5\xB9\xB5\xC9\xCD\xD5`\x9C\xADu!\xAF\xBB\x1F\xA3\xDEN`\xF5\xA2\xC0\xC1\xC1w\xE3qA5\x95\xD6\x983+\xE8\xFB\xD8M\x19\xB9\x8F\x9DC\x04\a\a\xDF\x81g\xCC\xF6\xCC{~dSX\e\xDF\x8E\xF7\xD9\x90\xEA\xE4\xAE\xA4\r\x0E\x0E\xBE\x13\xCF\x99\x9E\x11\xAD\xA0\x9Fm\xDFQGg\x95]\x8D\xE2[\xFE\xFC\xBF\xB5\x05\x1C\x1C\xFC;<\xAF_\xA3&\xC5\x89{\xFDsC4\x85\xB3\x15lYe\xABy<\x97\x8ECw\x00\a\a\xDF\x82\xABfV\xB78\x9BJU$[\xBE\xA7\x19o{\xD6\xE4j\n\x9BU\xFA\xCE\x87\x05\a\a\xDF\x86G\x94\x87\xAB\"9/\xB8\xBFmm\xF5\xCA'\x93\xB6\xD2r=Dm\x90\xC1\xC1\xC17\xE1\xB9Q\xADZ\xB8\x92\xF19^\xB6\x1E\xE5>\xC6j\xD0\xBD\xA8\xE9\x82\x83\x83\xEF\xC3\xD5cJ2\xCE\x8C\xB2Zg\xBB\xF9\x94\xE9\xFB9\xAAg\x15sk\xBF\f\x0E\x0E\xBE\x13WS\xC9\x85\xF7\xF5jM\xF9\xAA\xAD\xD7\xD9\x17\xA8\xA6\xBD'hpp\xF0o\xF1\xAA\x94#\xE7FE\xAD\r\xAD\x96\x84K\xE6\xCE\xC8?|\xBCl\xB5\xF1\x10\xE0\xE0\xE0\xDB\xF0\xBC`\x85\xBFf\xE6\x05\xE3_\x972i+7\x1F\x9A\xA1v\xD5\xD8%\x83\x83\x83o\xC55\x9A\xCC\xD2\xB86\xBE\xEB\xEC\xCF\xFB]{\x9A\xD6\x00\xBF\x96\xD0\xE0\xE0\xE0\xDF\xE2\x1D\xD6qX\xAE\xBE\xE5\xD0N\xB7\e\xCA\x95\xD2\xE3qTo;88\xF8f\xFC\x12\xFE:vv{\xD8.7\xCC\xD6T\x7F\x98)K\xBF\xB4\xA1\xC0\xC1\xC1\xBF\xC4s\xFA\xA5\x84\xCE\xA1`\x8E\xDB\x8C\xD5`\xAC\v\xEB\x92\\\x03>\xEC\xA0\xC1\xC1\xC1w\xE0\xF1\x9E\xE6y0\xC9\xCA\xB4\xCA\xC8\xFDN\xD5\xAAQ<\xF6\xBC\xB9\x06\xF8\xA7\xF0\a\a\a\xFF\x0E\xCF\xEC\xEBu.\xCAj\xB5\xA1\xAE\xBD(e\xEEj9E\xF8\xFB\x87\x12\x1A\x1C\x1C\xFC[\xDC=#\xBA\xDF\xCE\xA4f\xF9\x8E'\xD6\x85L\xC1U8\xBBkFd\xF8\xC7xDpp\xF0]x\xBEX\x15\xE9\n\xF0\x97\xD7;j\x19\xF7\x9BYW\xBE\xBE\xE5#\xC6\tpp\xF0\xAD\xB8\xD9h E0\xD7\xF4$UV+\x0F\xE7\x87\xD6\x05\xCF\x12\xBA\xD6\x05pp\xF0]\xF8\xDC\xC1\xFAe\xDC\xB5y\xAD\xDC<\eMUegn\xF6\x8F%488\xF8\x97x\xCC\xAC76w\e\xFB\xDB\xFC\xB9Nx\x87\xFA\x91\xCD\xA7\xE8;\xDD3\x83\x87z\x82\x83\x83o\xC5=v\xB0s\xE6\xADnx\xF3\xF1zG\xE1\x9FI{|\xBC\xF6\xB1\xC0\xC1\xC17\xE1\x15\xE0kt-\x9C\x01\xFE\xA8S\xDD\xA4:)\x9B\xD7&wdspp\xF0m\xF8\b\\\xB39IY\xFA\xA8\x13]3{\x8D\xB9\xFB\xD3B\x00\x0E\x0E\xBE\r\xBF\xBC\x9D\xA9,\xEDYB\xC7\x0E\xB6\x86\x1EG\x89\xBC\xB2\xB9\x96\x8E\xF7\x1E\x1788\xF8Wx\x8D _^\xEA\xE4\xCCC\xC7\xEE\xF9-\xAB\xECK\e\xCA\xCC\xC0\xC1\xC1\xF7\xE2\x89\xEE\x0EfW-\\\xC1\xFC\xFAO\x10\xAE]\xEDOor\xC7Yxp\xF0}x\xFCP\xBA\x8D\xF1c\x19\xEAJ\xD5\x15\xF4vx?IW\xD4\x19\xFE\xB7\x87\xD6\x14pp\xF0M\xBCB=3\xED\xDDT[\xAF\x17\xB0\x01\xBD\xB9\xAF\xDF\xD6\xE8\xB9\xF0\xE0\xE0\xDB\xF1\x1C\xB9e\xCD6\x94\xEB\x86\xB1$\xC4]u\xC2:\xFC\xDB\x05\a\a\xFF\v<H/(\xB2\xAF\x8EE\xE1\\Qn\xD5U\x8E\xA2;\xD6\x00mw\xC9\xC1\xC1\xB7\xE1\xEBO\x14\xC9\xBA j\xF1\xCB1\xBDb]gE\x9E\xB5\x1A\xD4\x89\x97\xF0\a\a\a\xFF\x0E\xCFQ\xC1\xBC\xBE\x99\xE2\xFD\x1C\xBB_\xB9\xB3x\xCE\x02{\x95\xDAYo\x83\x83\x83\xEF\xC3\xFFh\x80\x83\x83\x83\x83\x83\x83\x83\x83\x83\x83\x83\x83\x83\xBF\x8C\xFF\x00\xF0Q2\xB9\xD9\x12\xFF,\x00\x00\x00\x00IEND\xAEB`\x82\x00\x00\x00\x00\x00\x00\x00"

圧縮の展開に失敗するため、普通の Preview.app などでは見ることができませんでしたが、とりあえず Chrome に投げたらある程度の断片が拾えて、QRコードだったので、なるほど〜といいつつ画像をチームチャットに投げたところ誰かのアプリが良い感じに読んでくれました。

SECCON{SEMAPHORE_LINE_IS_THE_1ST_TELEGRAPH_SYSTEM_IN_THE_WORLD}

7番目ぐらいに解けた気がします。これ、多分うまくやると自動分類できるんですが、それでもそこそこしんどい気がしますね。結局PNGは最後まで戻せるのかどうか……

普段 Web 系の人間なはずなのに全く分からなくてしんどいし困りますね。でもバイナリにも強くなりたいですね。やっていきましょう。

なんか直前に参加しない? と誘われたので今年もYouTube問題担当として参加しました。Team MMA で […]

alucky0707 について

雑記

この記事は ぐらぽむ Advent Calendar 2016 10日目の記事です。 9日目は はしけむ(@kemuduino) の KnobCon前史(仮) でした。 僕がなぜか勢いで C90の申し込みセットを買って申し込んだばかりに豆腐屋というサークルができました。 そしてメンバーを振り回したということが半年ほど前にあり、彼もその振り回された一人です。KnobCon のオリジナルアイデアは彼によるものです。その節は本当にすみません……

結果として最終的に KnobCon というものができ、実際に頒布できたのは奇跡だと思っています。 今日はそれについては何も書きませんが、そのうち、誰かが @kyontan はクソみたいな話をしてくれるでしょう。

というわけで、オーストラリアの首都はメルボルンです (@alucky0707) 、つまりはあらっきぃについて書きます。日本語が破綻するのでこういう表示名はやめてほしい。 オーストラリアの首都はキャンベラだってば〜!、とあべにゅうぷろじぇくとの曲でも歌われていたので、僕は知っていましたよ。ええ。

彼について語ることは大してないので、ここからは早足で進めます。ごめんね、でも未だによくわからないんだ。

彼は高校の後輩なのですが、情報・コンピュータ愛好会という部活のような何かに後輩として入ってきたことで彼の存在を認知することとなりました。 この情報・コンピュータ愛好会というのは、Advent Calendar のタイトルでもある、ぐらぽむ (@gurapomu) と出会った場所でもあります。まさか今も交友関係が続いているとは、あの時は思いもしなかったでしょう。 最近は僕が現在所属しているMMAと関係があるMCCの部長もやっているようで、とにかく不思議な縁があると思います。これからも迷惑をかけるとは思いますが、どうかよろしくお願いいたします。

 

そんなあらっきぃとの出会いについて、今となっては記憶がおぼろげなので、あまりイベントスチルが思い出せないのですが、確か Haskell を使っていたし、SKK使ってたし、vim使ってた気がします。ただの変態ですね。

あらっきぃと某人の違いが分かっていないので、ごっちゃになっているかもしれませんが、彼はプログラミング言語が好きみたいです。Quine という、ソースコードと同じ出力をするプログラムが特に好きみたいで、会う度に色々な言語で書いていた気がします。ある時は、なんだったかのスライド発表を Haskell で書いてきたことがあった気がします。Haskell で、というのはスライドの内容がソースコード中に埋め込まれていて、コンパイルして実行するとスライドが表示されるやつです。オタクですね。他にもプログラミング言語作ったりしてた気がしますし、IVRCなんかも参加していた気がします。僕の数倍、いや、数十倍、数百倍は技術があるオタクです。その他にも色々エピソードはあった気がしますが、割愛します。

そんな彼ですが、僕とネット上であまり会話してくれない気がします。これは僕が一方的に思っているだけかもしれないですし、単純に機会がないだけかもしれません。特に話すネタがないだけかもしれません。 最近、たまたま彼と会う機会があったのですが、「新宿にいませんか」「なんかいそうなので行きます」「n分後に着きます(原文ママ)」でした。雑ですね。どちらが雑なのかはご想像にお任せします。僕だよ。

更にその後も、「昼食いきませんか」「僕食べてきたところで」「は???」となり、そのままロッテリアに行きました。うーん……会話が成立しないですね。難しい。

まあなんか、面白いステッカーくれるし面白い話してくれるしいい後輩だと思います。 ただ、Twitterでもあまりみないしどこで生きているのか分からないし、将来どうなるのか一番分からない人間といっても過言ではないでしょう。

そもそも、あらっきぃの他にも後輩にはいろいろと人間性という気持ちになる人が多かったですし、彼らもどのように生きていくのはというのは、趣味が人間観察(笑)の私としてはとても関心があります。そんな感じで、賑やかな愛好会だった気がします。楽しかったですね。

今は会員がいなくなり、事実上団体としてはなくなってしまったのが悔やまれるところです。 また、いつの日かその意志を継ぐ人が現れることを期待しています。

明日はタイトルになった彼、ぐらぽむ (@gurapomu) が書いてくれるようです。 ところで17日目のネタがないので何か頂けると助かります。よろしくお願いいたします

この記事は ぐらぽむ Advent Calendar 2016 10日目の記事です。 9日目は はしけむ(@k[…]