monolog

monora log #=> ものろーぐ

Infrastructure カテゴリのアーカイブ

ブログをGitHub Pagesに移行した

雑記

WordPress + MySQL on Kubernetes on 謎の仮想化基盤 on 自宅サーバー、あまりにも放置しすぎて全然メンテナンスできていなかったので、一回爆破することにした。

趣味コーディングも長らくしていなかったのだけれど、OpenCodeというLLMのcoding agent(ハーネス)およびプロバイダーが安く使えそう(執筆時点で10USD/月)だったので、試しに契約してまとめてやらせてみた。

当初はCloudflareがリリースしたEmDashにしようかと思ったのだけれど、Cloudflare Workers の Paidプランでしか使えないようだったので思い切って静的サイトに方針転換して、11tyなる静的サイトジェネレータでビルドしてGitHub Pagesでホスティングすることにした。編集画面はDecapというOSS?を試しに使うことにして、画像はひとまずCloudflare R2 (free tier)という雑構成。ここまで紆余曲折しつつMeta Muse Spark 1.3 (Contributor) で $2.31 と言われているがマジでしょうか……

一旦自宅サーバーをクリーンインストールしてやり直したい気持ちに駆られることはや数年。いつ手を付けるのか……

read more »

WordPress + MySQL on Kubernetes on 謎の仮想化基盤 on 自宅サーバー、あま[…]

2025年12月あたりの今日このごろ

生活 雑記

X(旧Twitter)への書き込みが激減したけど生きてます。

実家のサーバーの面倒をほぼ見ていないせいでブログにアクセスできない。そろそろなんとかしたいなんとかした 意味も無くJetKVMを買ったのでリモート操作ライフが捗るかもしれない。

read more »

X(旧Twitter)への書き込みが激減したけど生きてます。 実家のサーバーの面倒をほぼ見ていないせいでブログ[…]

ヨーロッパに行ってきた

雑記

こんにちは。なぜかアメリカはラスベガスよりこの記事をお届けしています。 whywaita Advent Calendar 2024の4日目の記事です。 タイムゾーンはPST(UTC-8)だから2024-12-04T23:59:59-08:00までに書けば許されるよね! ハム太郎

3日目はマブダチであるmolyさんの企業内セキュリティリサーチャー(R&D寄り)としての生活 - GeT_Pwn3d! でした。元気そうでなによりです。

最近はポーカーにドハマリしているらしいwhywaitaさんは今後海外で活躍される場が増えるでしょうし、ヨーロッパにもぜひ行ってほしいですね。 というわけでwhywaita Advent Calendarに書く理由もこじつけられたところですし、今年の夏 (2024-07-27 から 2024-08-19 にかけて) に行ったヨーロッパ旅行の思い出を振り返ります。

read more »

こんにちは。なぜかアメリカはラスベガスよりこの記事をお届けしています。 whywaita Advent Cal[…]

2023年12月あたりの今日このごろ

雑記

意外としていない近況報告

無事今年も生き延びることができそうでホッとしています。

でもこれを書いているのは2023-12-29で、なぜか明日/明後日と2日連続でC103に行くことになってしまったのでまだ休むには早いらしい。 最後にコミケに行ったのはコロナ禍前だったので、2019-08のC97でしょうか?

今年は起伏があり、良くも悪くも変化に満ちた1年だったと思いますが、なんとなく振り返ってみようと思います。

read more »

意外としていない近況報告 無事今年も生き延びることができそうでホッとしています。 でもこれを書いているのは20[…]

わいた

雑記

こんにちは。kyontanです。

この記事はwhywaita Advent Calendar 2023の22日目の記事です。 21日目はyucchiyさんによるUnityアプリでwhywaitaのアイコンを回す | Yucchiy's Noteでした。IWhywaitaAnimationWhywaitaAnimationPlayer のような文字列が飛び交っており、ゲラゲラ笑いながら読ませていただきました。

ところで今回もwhywaitaさんは僕にだけ当たりが強い気がするのは気のせいでしょうか。

read more »

こんにちは。kyontanです。 この記事はwhywaita Advent Calendar 2023の22日[…]

ロードスターを買って1年9ヶ月

生活

走行距離は? 燃費はどのくらい? 自動車税は? 修理費は? 調べてみました。

この記事はwhywaita Advent Calendar 2022の12日目の記事です。 昨日は nersonu さんによる 「Poetry 1.3.0 がリリースされたよ - そぬばこ」でした。言語ランタイムとパッケージは面倒くさいですね。

前回は ロードスターを買って9ヶ月 でしたが、あれから1年経ってどうだったのか、いくら掛かったのか、問題は見つかったのかなどをお届けしようと思います。

去年のあらすじ

色々あった。ダイジェストでお送りします

  • 納車1ヶ月と少しで後ろから突っ込まれる

  • 夏になったらエアコンから冷たい風がでない

  • ディーラーから返ってきた車から変な音がする

  • ディーラーから帰ってきた車にトランクを開けるレバーがない

今年のあらすじ

色々あった。ダイジェストでお送りします

  • 後ろから突っ込まれる (2)

  • ミッションを交換したらミッションの調子が悪くなる

  • タイヤを変えたら色々ハッピー

  • ミッションを交換したらミッションの調子が良くなる

今の走行距離

194,000kmを超えました。前回の時点で182,000kmだったようなので、1年で12,000km、つまり1ヶ月1,000kmぐらいのペースで走っているようです。このくらいが気軽でいいですね。

今年の高速代

ETC利用ベースで132,020円でした。首都高も値上がりしたし、大変ですね。

今年のガソリン代

今雑にクレカの明細を1年分みたら122,958円でした。リッター150円としても820L弱しか入れてない計算になるので多分もっと使ってますね。

おおよそ燃費は 11km/L ほど出るので、12,000km乗ったとすると16万円ほど入れてそうですね。

今年の修理代

486,996円でした。

去年の記事で書いていた修理(トランスミッション(ギア)やその周辺一式を載せ替え)を行った結果こちらの額となりました。しかし、この修理がうまくいかなかったことがこの半年の一番の後悔でしょうか。 1速や2速の入りが悪いという事象で実施したものの、あまり改善した感じがなく、有耶無耶になったまま数ヶ月が経過。距離を乗ってみたものの改善しないので保証を使って再度交換の流れとなりました。

つい先日2度目のミッション交換が終わりましたが、あまりのシフトフィールの良さに涙が出そうになったことはクラスのみんなには内緒です。

それとは全く関係なく1年前のデジャブのような流れで突っ込まれたりしましたが、板金7万円コース(自腹ではない)で済みました。

今年の思い出を雑に振り返る

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

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

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

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

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

今後の展望

今度はショック (サスペンション) からオイルが漏れたらしいです。まあバネは消耗品なので…… とりあえず年明けにブッシュ (ゴム) の打ち替えが予定されています。乗り心地が良くなりそうで期待が高まりますね。

なんやかんや言ってはいますが、一粒でn度美味しい楽しい車ということで、今後も引き続き壊れるまで乗っていけたらと思っています。

whywaita さんへ

来年はどこに行きますか?

走行距離は? 燃費はどのくらい? 自動車税は? 修理費は? 調べてみました。 この記事はwhywaita Ad[…]

ISUCON12 予選に参加しました (最終スコア15532点)

Infrastructure Programming

2022年7月23日 (土) に開催された ISUCON12 の予選に「DJ起床失敗とMC布団 w/o MC布団」として id:h-otter と参加しました。

言語は Go、最終スコアは15532点参考スコアを上から数えると45位だったようです。悔しい。 具体的な取り組みは下の方で述べますが、MySQL移行はバグなく完遂し、さてここからチューニングしていくぞ!という感じのところで終わりました。エンジンが掛かるまでの速度が足りなかった。

毎回、運営の皆様にはいくら感謝しても足りませんが、今回も取り組みがいのある問題で楽しかったです。ベンチマーカーも最後まで待ち時間がほぼなく、スコアも安定していたのでとてもストレスフリーでした。ありがとうございました。

マルチテナントで大量の SQLite3 データベースがあることが分かったとき、ISUCON本を読んだだけの人間には解かせないってことね!と思いながらニコニコしました。

ところで知り合いがたくさん著者に名を連ねているISUCON本ですが、予選の2週間前に購入し、予選開始1時間前に部屋から発掘されました。 30分ぐらいで流し読みしたのですが、大変実利的な内容に溢れているなあと感じました。nginx の upstream で keep-alive を有効にする方法は知らなかった……

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

read more »

2022年7月23日 (土) に開催された ISUCON12 の予選に「DJ起床失敗とMC布団 w/o MC布[…]

2021年12月あたりの今日このごろ

雑記

近況、10月に書いたばかりだけど今日も書きます。なぜならこの記事はwhywaita Advent Calendar 2021の19日目の記事だからです。

18日目はkyontanさんのロードスターを買って9ヶ月でした。自作自演。

read more »

近況、10月に書いたばかりだけど今日も書きます。なぜならこの記事はwhywaita Advent Calend[…]

ロードスターを買って9ヶ月

雑記

走行距離は? 燃費はどのくらい? 自動車税は? 修理費は? 調べてみました。

この記事はwhywaita Advent Calendar 2021の18日目の記事です。

昨日は twismikoさんの whywaita Advent Calendar 2021 17日目:人はなぜ飛行機に乗るのか - Coyote vs Loadbalancer でした。今年もたくさん飛行機に乗っていて楽しそうですね。スイートラウンジには今度連れて行ってほしいですね。

kyontanは今年7回しか飛行機に乗っていませんが、マイルではなくお金を払って乗るようになったので多少は成長しました。なんとガソリン代や高速代を払うとマイルが貯まるんですよね。どこかにマイルで使おうと思います。

さて、2020年は36回も飛行機に乗っていたkyontanですが、今年は空ルートから陸ルートに変更したので延々と地上を移動し続けていました。 その代表的な手段がそう、自動車です。

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

read more »

走行距離は? 燃費はどのくらい? 自動車税は? 修理費は? 調べてみました。 この記事はwhywaita Ad[…]

2021年10月あたりの今日このごろ

雑記

今日このごろシリーズ、しばらく書いていなかったのでたまには振り返ってみる。前回は修論執筆だいありーでした。

修論は無事提出され、無のような3月を過ごしていたらすぐに4月。

一般企業への就職を選んだので会社員になりました。就活については就活の技法 / 統括 2020に書いた通り。

後述しますが、最近は Site Reliability Engineer を生業としています。

以下、最近のあらすじ。

read more »

今日このごろシリーズ、しばらく書いていなかったのでたまには振り返ってみる。前回は修論執筆だいありーでした。 と[…]

そろそろ Kubernetes 入門する (1)

Cloud Native

いい加減クラウドネイティブっぽいことをやりたいと言い出して早数年、世の中の流れには完全に乗り遅れた感がありますが、今更入門することにしました。

この記事を書いている時点で、すでにこのブログが構築したクラスタ上で動いているところまでは来ていますが、ゆっくり備忘録がてらまとめていくことにします。

ただkubeadmでシングルノードで立てても面白くないよね、ということで、色々と試してみることにしました。

  1. 実験のしやすさを考慮してVMの上に建てる

  2. VM基盤は n0stack を使う

  3. 可能な範囲でちゃんと冗長化する

  4. ちゃんとアプリケーションを乗っける

  5. 完全なお遊び用のクラスタは別に作る

あたりを基本方針にしました。

ホストについて

さて、まずサーバはどうするかという問題がありました。現代なので冗長化するなら3台欲しいので、お手軽かつ高速なマシンが3台必要でした。

また、過去にも同じことをやろうとして、秋葉原で安く売っていたサーバ(通称赤鯖)を3台買ってはいましたが、CPUもRAMも足りない && ファンの音がうるさいということで放置されて早3年が経過したので、次は静かなマシンが良かったわけです。

というわけで安くて速くて静かでRAMが積めるマシンを検討した結果、 Lenovo の M75q Tiny Gen2 を購入しました。定番ですね。Ryzen 7はコアが多くて速い。 ただ、予算の都合でまだ2台しか買えてません。

購入後の感想ですが、静かで小さいので自室の足元に置いても気にならずかなり満足しています。CPU使うと流石にファン回って気になりますけどね。

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

一方で、色々構築をすすめるにつれ、ストレージが256GBだと足りないか? と思うことがあり、SATAのSSDを追加することを検討しています。 ストレージ足すなら別に小さい必要はなかったのでは……という気持ちがあり、 V55t Mini-Tower とかでも良かったのでは……という気持ちに。計画性がない。

ストレージをどうするか問題は常に付きまといますね。後述するかもしれませんが、現在は、このクラスタとは別に以前から運用していた FreeBSDサーバに刺さっている雑なディスクをミラーリングしてNFS共有しています。RDBMSとかやろうとするとiSCSIの方が良いかもしれない……

OSは雑に Ubuntu 20.04 Server を選択。

n0stack

今回のVM基盤です。別にlibvirtでもOpenStackでもなんでも良いのですが、構築が楽 & 動作が軽くて、コードはなんとなく分かるので気になったら自分で直せるし、ぐらいの気持ちで選択しました。

n0tsack は 友人の @h-otter が主となって開発していて、過去には ICTトラブルシューティングという大会で数百VM規模で動いた実績があります。紹介記事は本人が書いてるので読んでください。

n0stackの紹介 - h-otterの備忘録

https://github.com//n0stack/n0stack を眺めて、 n0core と n0cli があれば動くことが分かったので適当にやります。

VMを起動する/管理する本体である n0core は、全体の管理をする api とQEMU等を制御する agent からなります。 データストアは api にいて、デフォルトでは設定不要の LevelDB を使用します。LevelDB は特にデーモン等が不要のDBで、api が動くホストの /var/lib/n0core あたりに勝手に保存されます。 冗長化したければ etcd も使えます、が構築時点では etcd or LevelDB を使っていて、デフォルトだと LevelDB を使うので、特にDBの設定は不要です。雑に GitHub の README を見てデプロイします。

VMのセットアップはあまり考えずにドキュメントを参照すれば良い、と思いきやハマりました。QEMUの仕様が変わったらしい? https://github.com/n0stack/n0stack/pull/239 で解決。そのうちマージします。

適当な Ubuntu が起動することを確認したところで一旦ここまで。(ホスト名は k8s-0X だが別に Kubernetes は動いていない)

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

いい加減クラウドネイティブっぽいことをやりたいと言い出して早数年、世の中の流れには完全に乗り遅れた感があります[…]

修論執筆だいありー

お役立ち情報 生活

2021年初ブログ投稿. 就活をしたら次に何が来るか,そう,(卒業|修士|博士)論文です. 今回は修士論文を選択しましたので,クリアまでのチャートを公開します.

時間がないときにはついつい焦ってファイル名をtempやらhogeやらaaaやらにしてしまいがちですが,1週間以上の戦いでそれをやると4日目あたりで死にます.ちゃんとツールを活用しつつ継続的かつコンティニュアスな方法で解決しましょう.

今回は2週間で実験をやって論文を書かないといけなくなった私みたいな読者の方のために,研究を加速させた手法をダイジェストでお届けします.

Tl; DR

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

read more »

2021年初ブログ投稿. 就活をしたら次に何が来るか,そう,(卒業|修士|博士)論文です. 今回は修士論文を選[…]

就活の技法 / 統括 2020

お役立ち情報

この記事は whywaita Advent Calendar 2020 24日目の記事です。無事今年の木曜日シリーズも終えることができてホッとしています。去年のことは忘れましょう。

タイトルが偉そうですね。そんなことより KMNZ LIZ の声を聞いてください。声が良い。ズのクリスマスボイスを買い忘れて号泣してます。

現代では就活は戦に例えられることも少なくありませんが、そんな私の就活 2021の陣は、他人はおろか自分の想像すら遥かに振り切る不毛な延長っぷりを見せ、冬の陣だったはずが気がつけば夏の陣になり、不毛な「朝X時はどうにかなりませんか?」「無理です」という押し問答も飽きてきて、結果として自分探しの旅へ何度も離島へ行き、その甲斐あってか無事に終わりを迎えました。 関係各位の皆様には、改めて振り回してしまったことをお詫びします。

本編

就活に関する諸々は後述するとして、今回の就活で得た知見を自分なりにまとめたスライドを、今後就活に挑む方々の参考になればと思い供養します。クリスマスプレゼントです。

このスライドは、2020年10月にあるキャリア系企業の依頼で実施したセミナーで使ったものを大幅に改変したものです。こんな就活自分語りに押し寄せた学生の数、なんと50人です。びっくりですね。(募集ページの1つ)

https://speakerdeck.com/kyontan/jobhunting-technique

イベント後に、同期にスライドを見せたら「偉そうなこと言ってるけど本筋は良いこと言ってる(意訳)」みたいな反応を頂いたので、そんなもんかと思っています。

基本的に就活はケースバイケースだと思っていて、自分が受ける業界・企業や時流・自分の個性・特性に応じて色々なやり方があると思うので、そこらへんにうまく折り合いを付けてやってください、という感じです。

以下は延々とおまけ(蛇足)です。

read more »

この記事は whywaita Advent Calendar 2020 24日目の記事です。無事今年の木曜日シ[…]

資産管理術について 2020

生活

この記事は whywaita Advent Calendar 2020 17日目の記事 その2かつ、過去に下にリンクした記事で書いた事柄の現状確認でもあります。

https://blog.monora.me/2017/12/how-to-manage-property-as-of-2017/

皆さんお金は好きですか? 僕は好きです。たくさんあると嬉しい気がします。ただ、今の立ち回りとしては、仕事に求める要件は給与が高いことではなく朝遅いことです。

そういえば、その記事ではこんなこと書いていました。 あれから3年、あなたの承諾した内定の決め手には確かに「朝遅い」が入っていました。喜んでください。

その1はこちら:

これは@whywaita Advent Calendar 2020の17日目の記事です(多分)Railsとフロントエンドの相性についての主観: 僕も現代的なFEとRailsは相性悪いと思うしAPIモードも大概デカイからSinatra+AR(~=Padrino)とかHanami とか流行ればいいのにって思います。いやRails使いたい気持ちは察しますが……

連投形式で何ツイートか書いたので、Railsと現代的なフロントエンドの相性に興味がある方はぜひ目を通してみてください。

Dr.Wallet の銀行口座連携機能、死す

さて、当時はDr.Walletで全ての入出金を管理していた私ですが、ある日 (2020-02-28)、Dr.Walletから届いた一通のお知らせメールが状況を一変させました。

一昨年、銀行法が改正され、銀行口座の参照について新たな規定が設けられました。

各銀行の残高を自動的に取得し家計簿に反映させる「銀行口座連携機能」ですが、 上記の法改正に伴い、今後のご提供を中止させて頂くことになりました。

(略)

今後のご利用については、2020年4月末を以て口座自動取得の停止を予定しております。

そう、銀行口座の連携機能が廃止されたのです。ATMの入出金やクレジットカードの支払い、給与等が反映されなくなったことで、Dr.Walletを使った私の資産管理は終わりを迎えました。残念ですが、開発リソースとか色々ありますから、仕方ないですね。

相変わらずレシートの撮影/送信は続けていますが、口座残高や現金がどんどん現実と乖離していくので、今は総資産が-100万円を突破しています。

それはそれとして銀行口座連携は欲しいので、MoneyForwardにも登録しましたが、こちらは現金記録が壊滅しています。たまにポケットからレシートをガサッと取り出してパシャパシャやるぐらいが限界です。

キャッシュレス革命と資産管理の崩壊

現実ではこちらの問題の方が深刻かもしれません。そう、キャッシュレスです。

様々な送金/決済サービスの登場で、現金以外にも資産が存在する状況が当たり前になってきました。 現金以外の資産はこれまでにも交通系ICカードやクレジットカードなどがありましたが、今では私が使っているものだけで Kyash / PayPay / LINE Pay / メルペイ d払い / Revolut / 6gram に残高が分散しています。そのほとんどがモバイルファーストのアプリで、スクレイピング等による連携が難しいものです。

現代では、3人での飲み代をPayPay で5000円支払ったときに、1人からはRevolutで、もう1人からはKyashで、僕は1000円をPayPay残高で支払い、残りは3000円を口座からチャージしてそこから支払うこともあり得ます。 このとき、僕がこの一連のやりとりを当時の文脈を思い出しつつ辿るためには何が記録されているべきでしょうか? 何も分かりません……何も……

とにかくKyashが全てのクレジットカード利用明細を破壊してくるので終わっています。Kyashの利用履歴、アプリでしか見られないしページネーション遅いし検索機能はないし辛いですね。キャッシュレスを肌で感じていきましょう。

現状

そうして管理を諦めたのが現状です。そのうち色々と成熟して、家計簿サービスとも連携していい感じになりそうですが、その世界はまだ来年には実現しなさそうです。

その他

マイルなど

JAL派なのでJALカードnaviを使っています。基本的に利用可能枠は10万円しかないのですが、比較的柔軟に一時引き上げに応じてくれるのでかなり助かっています。

そんなJALのマイレージ、今年はカードマイル(たくさん), フライトマイル(そこそこ)、JALカード系のボーナス(ちょっと)、その他(少し)で、トータル60000マイル強貯めることができました。これまで貯めていた分も合わせれば10万マイルを超えていましたね。さっき計算して自分でも引きました。学生JGC修行ブログ書いてるオタクじゃないんだぞ。 国際線減額マイルを使って卒業旅行にヨーロッパ旅行へ、と夢を抱いてコツコツ貯めてきたマイル、気が付いたら卒業を目前にヨーロッパ4往復できるマイルが溜まってしまったのでドン引きしています。しかし、それでいて結果的に COVID-19 でそれどころではなくなったので世界が憎い。

そうして腹いせにGo To トラベル問わずあちこち飛び回った結果、国内線特典航空券が23枚生え、69000マイル飛んでいったので今年は収支マイナスです。ありがとうございました。 今年の whywaita Advent Calendar の参加者には毎週沖縄に行く人間が複数名存在したようですが([1], [2])、行った離島の数なら勝てるかもしれません。

個人事業主として

生活に使っている口座と個人事業主としての事業用口座を分けていないので、帳簿に「ペイペイ 事業主貸 400円 銀行口座 400円」みたいな仕分が無限に発生して破滅しています。売上なんて月1, 2ぐらいしか生じないんですけどね。 契約書とか請求書の管理、面倒だけれど Misoca とかの SaaS に月500円払うほど心に余裕はない。どうしましょうね。

投資について

過去に仮想通貨バブルに最悪のタイミングで便乗して数万損して懲りたことがありました。 その後、変動が比較的少ない投資信託に数万だけ突っ込んでみて傍観することにしたのですが、最近の日経平均爆上げで結構増えて笑顔になりました。ここで意識を失うか悩みましたが、直近の状況を鑑みるに国内経済は再び落ち込む予感もなんとなくしたので、比較的リスクの低い銘柄以外は利確して終わりにしました。仮想通貨で大損した分ぐらいは取り返せたので良かったですね。

この記事は whywaita Advent Calendar 2020 17日目の記事 その2かつ、過去に下に[…]

ICTSCのコンテストサイトを支えた技術

Programming

この記事は whywaita Advent Calendar 2020 の10日目の記事です。2週目です。来週何を書くか考えるだけで気が遠くなります。

昨日は @icchy さんで 「whywaitaであいうえお作文する」でした。タイトルだけでだいたい想像できますね。

https://twitter.com/icchyr/status/1336325587929976834

なるほど。

@icchy さんのおすすめインターネットコンテンツは飲酒日記です。

https://alcoholog.hatenablog.jp/entry/2020/12/01/015540

閑話休題。 アドベントカレンダー、書くネタはあれど頭を使うものばかりで泣きそうになったので、とりあえず過去の下書きを漁っていたらタイトルだけ書かれたこの記事の下書きを見つけました。 最近思うこともあったので、すでに忘れ去られ、誰もが忘れたままでいたいと思っていたICTSCのコンテストサイトの歴史を紐解いてみたいと思います。 whyawitaさんとの関わりもあるし、whywaita Advent Calendar的には100点満点のネタですね。よろしくお願いします。

read more »

この記事は whywaita Advent Calendar 2020 の10日目の記事です。2週目です。来週[…]

移動が好きなオタクの話

生活 雑記

こんにちは。この記事は whywaita Advent Calendar 2020 の3日目の記事です。今日から4週連続で何らかの記事をお届けする予定です。

本日の記事を書くにあたっては、まず執筆背景を説明する必要があります。記事執筆日の日付が変わった直後の状況は次の画像で説明されます。

地図にあるように、私は今陸上ではないところにいます。

陸地でも密を回避すべく主要3(+1)キャリアの回線が入らないところに行きがちな最近の私ではありますが、陸地でないところでのインターネット通信には更に困難が伴います。これではワーケーションどころではありません。

記事を公開するまで、インターネットへの到達性が維持されることを祈りながら書きたいと思います。

さて、前置きが長くなりましたが、今回は移動が好きという話をしたいと思います。

read more »

こんにちは。この記事は whywaita Advent Calendar 2020 の3日目の記事です。今日か[…]

ISUCON10 予選の参加ログ (チーム: 再起動非対応, 最終スコア1997, 40位ぐらい)

未分類

こんばんは、kyontanです。

前々回再起動試験で落ちたのでチーム「再起動非対応」で参加しました。チーム名は前日まで考えていましたが変えるのを忘れました。 言語はGo, ベストスコアは2101, 最終スコアは1997で、多分40位ぐらいでした。悔しい〜〜

本チーム「再起動非対応」は同期3人 (自分 @kyontan, @hogashi, @h-otter) です。このメンバーで4回目の参加です。学生はうち2人なので、一般チームです。

read more »

こんばんは、kyontanです。 前々回再起動試験で落ちたのでチーム「再起動非対応」で参加しました。チーム名は[…]

生活に投資する話

雑記

今日はタイトルの通りの話です。いつもタイトルと違う話はしてないけれど。

ここ数年、毎年少し高くても良いものを買うように心がけています。 理由は一つではなくて、これまで安物買いの銭失いを大量にしてきたからというのもあるし、単にバイト等で収入がある程度増えたからというのもあります。

キーボードやマウスは個人の好みなのでなんとも言えないけれど、例えばPC本体やマイク、Webカメラ、音響関係(スピーカー, マイク, ヘッドフォン)は、それぞれ一定のラインまで金をかけると明らかに機能や性能、信頼性が上がるのが体感できる。

とはいえ、別に生活に投資するというのは電化製品だけの話ではない、というのが今回のお話。

気が付いたら超長文になってしまったので、飛ばし飛ばし読んでください。

read more »

今日はタイトルの通りの話です。いつもタイトルと違う話はしてないけれど。 ここ数年、毎年少し高くても良いものを買[…]

Cisco IOS で tftp を使ったアップロードが Permission denied で怒られる件

Infrastructure

家の回線をv6プラスにしたところ、外側から特定のポートへアクセスさせたいような用途、つまりこのブログを自宅サーバーから提供することができないことに変更してから気が付いた。 しばらくは FreeBSD で PPPoE を終端して遊んでいたが、うっかりご家庭用のルータであるところの Cisco C891FJを買ってしまった。

とりあえずIOSのバックアップをすべく copy コマンドで自宅のサーバへ IOS をアップロードしようとした。しかし、Permission denied と怒られてアップロードに成功しなかった。

tftp (具体的には tftpd-hpa) サーバでの tftp 127.0.0.1 によるアップロード/ダウンロードはできる。何かがおかしい……

状況を整理

tftpd は 0.0.0.0:69/udp で listen している。 (systemctl start で動かない問題もあったが、それはまた別の問題)

# sudo lsof -i:69
COMMAND    PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
in.tftpd 29780 root    4u  IPv4 xxxxxxx      0t0  UDP *:tftp
in.tftpd 29780 root    5u  IPv6 xxxxxxx      0t0  UDP *:tftp

tftpd root は /srv/tftpboot。こういう挙動をする。

# tftp 127.0.0.1
tftp> get something
Error code 2: Only absolute filenames allowed
tftp> get /something
Error code 2: Forbidden directory
tftp> get /srv/tftpboot/something
Received 7 bytes in 0.0 seconds

IOSでのエラーメッセージはこんな感じ。tftpd は verbose フラグを付けてもだんまり。

#copy flash:c800-universalk9-mz.SPA.153-3.M3.bin tftp://10.0.0.1/srv/tftpboot/ios/
Address or name of remote host [10.0.0.1]?
Destination filename [srv/tftpboot/ios/c800-universalk9-mz.SPA.153-3.M3.bin]?
%Error opening tftp://10.0.0.1/srv/tftpboot/ios/c800-universalk9-mz.SPA.153-3.M3.bin (Permission denied)

なるほど……?

解決方法

ホスト名とパスの間にもう1つ / を足せばよい。つまり tftp://[ホスト名]//パス とすればよい。

#copy flash:c800-universalk9-mz.SPA.153-3.M3.bin tftp://10.0.0.1//srv/tftpboot/ios/
Address or name of remote host [10.0.0.1]?
Destination filename [/srv/tftpboot/ios/c800-universalk9-mz.SPA.153-3.M3.bin]?
!!!!!!!!!!!!!!(snip)!!
68176296 bytes copied in 129.832 secs (525112 bytes/sec)

気付いたきっかけは Destination filename の確認プロンプトだが、まさかこんなところでハマるとは思わなかった。 自宅インフラはトラブルシューティングが99%

read more »

家の回線をv6プラスにしたところ、外側から特定のポートへアクセスさせたいような用途、つまりこのブログを自宅サー[…]

macOS で Windows 10 のインストーラをUSBメモリに作る

Software 雑記

2020年にもなってこんなことで微妙に苦しんだので備忘録。

EFIなら何も考えなくてもいいのかもしれないが、レガシーPC向けにMBRでやろうとすると微妙にはまったので

  1. Windows 10 の ISO をダウンロードしてくる https://www.microsoft.com/ja-jp/software-download/windows10ISO

  2. これに従う https://alexlubbock.com/bootable-windows-usb-on-mac

  3. ブートローダーを書く このリンクの Step 3 以降に従う

  4. https://www.oueta.com/macos/create-windows-7-8-10-bootable-usb-drive-in-macos-with-command-line-mbr-partitioning-scheme/

ざっくりコマンドの流れを書くとこんな感じ。ディスクは /dev/disk2 とします。ツール等のリンクは参照した記事ママなので、リンク切れしていたら別のところから探してきてください。

$ brew install wimlib
$ hdiutil mount Win10_1909_Japanese_x64.iso
$ sudo diskutil eraseDisk MS-DOS "WIN10" MBR /dev/disk2

$ rsync -vha --exclude=sources/install.wim /Volumes/[isoのマウント先]/ /Volumes/WIN10
$ wimlib-imagex split /Volumes/[isoのマウント先]/sources/install.wim /Volumes/WIN10/sources/install.swm 4000

$ curl https://www.oueta.com/wp-content/uploads/2018/10/syslinux-4.03.tar.gz -o syslinux-4.03.tar.gz
$ tar -zxvf syslinux-4.03.tar.gz

$ curl https://www.oueta.com/wp-content/uploads/2018/10/syslinux-mac.tar.gz -o syslinux-mac.tar.gz
$ tar -zxvf syslinux-mac.tar.gz

$ sudo dd if=syslinux-4.03/mbr/mbr.bin of=/dev/disk2 bs=440 count=1
$ sudo ./syslinux -i /dev/disk2s1

$ mkdir /Volumes/WIN10/syslinux
$ cp syslinux-4.03/com32/modules/*.c32 /Volumes/WIN10/syslinux
$ $EDITOR /Volumes/WIN10/syslinux/syslinux.cfg

$ sudo diskutil unmountDisk disk2

$ sudo fdisk -e /dev/disk2
fdisk: 1> flag 1
Partition 1 marked active.
fdisk:*1> write
Writing MBR at offset 0.
fdisk: 1> exit
$ diskutil eject disk2
2020年にもなってこんなことで微妙に苦しんだので備忘録。 EFIなら何も考えなくてもいいのかもしれないが、レ[…]

朝起きられなくても就職がしたい!

雑記

こんばんは。この記事は whywaita Advent Calendar 2019 の21日目の記事、になる予定です!!! タイトルの通りのことを数日内をめどに書きます!! 遅刻してしまい申し訳ございません……

20日目は nersonu さんによる「剣盾新ポケモンの受けループ/サイクルへの導入を考える - そぬばこ」でした。ポケモン久しくやってない。

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

何を書くかアジェンダ

  • 就活の話を書きます

  • 2019年新卒 (学部卒) と 2021年新卒 (修士卒) それぞれの就活メモから面白そうな文章を適当に持ってきます 最強の ガクチカ を持ってバトル

  • 「ぜひ来てほしいって言われて行ったら落とされた」

  • 「うちはインターンの方が倍率高いから、インターンで落ちても本選考はぜひ受けてほしくて」

  • 「このオファー額に見込み残業って入ってますか?」「ん〜〜いい質問ですね!」

  • 「ごりごりにコードがかけなくても大丈夫です!!研究成果が思わしくなくても大丈夫です!!大切なのはxx様の熱意とやる気☆」

  • 「再来年入社でもこの時期にエントリーして大丈夫ですか?」「うちは通年採用なので大丈夫です」

  • 「飯を食っても弊社の志望度変わらないでしょ」

  • 「XXXはあなたにとって良い職場ではないかもしれません」

  • 「社会人になったら朝早く起きられるもんだよ」 「執行役員としての発言としては絶対にあってはならないことであり」

    逆求人サービスの完全主観レビューをします 面白そうな会社を紹介してください

  • あ、いや、決め方を教えてほしい気がしてきた……

追記

whywaita Advent Calendar 2020 でこの記事で書く予定だった内容をカバーすることにしました。1年経ったけどようやく書いたよwhywaita...

https://blog.monora.me/2020/12/jobhunting-technique/  

 

こんばんは。この記事は whywaita Advent Calendar 2019 の21日目の記事、になる予[…]

ISUCON9 予選の参加ログ (チーム: 再起動非対応)

Infrastructure Programming

こんばんは、kyontanです。

前回再起動試験で落ちたのでチーム「再起動非対応」で参加しました。ベストスコアは4410点でした。再起動試験までたどり着けなかった……悔しい……

チーム「再起動非対応」は同期3人 (自分 @kyontan, @hogashi, @h-otter) での参加でした。学生は2人いたはずですがエントリーをミスったので学生は1人ということになっています。

使用した言語

私はRubyが一番得意だと思っていますが、非同期処理が書きやすいとか型が着いていると嬉しい、みたいなことはあり今回もGo言語です。 でも今回はN+1潰すときの型マッピングで無駄に時間を溶かしてしまったので、Rubyの方が良かったかもしれない……つらい……

開始前の準備

Prometheus/Grafana等のサーバの設定を @h-otter にお願いしました。前回のコードを読み返しつつ、何をしたかを思い出すなどした。

時間がなくて完全に忘れてしまいましたが、せめて練習はやっておくべきでしたね…

あと、 Alibaba Cloud の UI が色々不思議な感じで良かったですね。

本番

完全に正解していますが、今回はマイクロサービス問だということに気が付いたのは開始してからだいぶ経ってからでした。

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

今回できたことが異常に少ない気がする。kataribeのログを眺めつつ、チームでやったことは以下のことです。比較的時系列だけどそうでない部分もあるかも。

  • 開始スコアは 2310

  • 10:30 メモリ多いな〜って思っていたら2, 3台目のインスタンスタイプを間違えていたことに気がつく。インスタンス立て直し コードは既にリポジトリへ追加していたのでチームメイトはルール/コードリーディングを進める

    10:50ごろ: 作業開始 11:30ごろ?: MySQL 5.7 を 8.0 へ (@h-otter)

  • スコア変化なし

    11:45 DBにインデックスを張る(@kyontan)

  • 多分間違えていて、これらにインデックスを貼りましたがあまり効いていなかったようにみえました

  • BigQuery の触りすぎでRDBのインデックスの挙動をほぼ忘れたのも敗北ポイント

config (name)
items (created_at, id)
items (id)
items (buyer_id)
items (seller_id)
shippings (transaction_evidence_id)
transaction_evidences (id)
transaction_evidences (item_id)
users (account_name)
users (id)

  • 12:20: カテゴリをオンメモリへ (@hogas, @h-otter) 2510点ぐらい

    12:30: http2 対応, 静的ファイルをキャッシュ, アップロードされた画像を nginx で返すなど

  • スコア変化なし

    13:30: config もキャッシュするように 14:00: 新着商品には発売中の商品だけを返すようにする (@hogas) 14:45  - 16:00: GET /users/transactions.json の N+1 を潰す (@kyontan)

  • 3500点ぐらい

  • なぜか色々ハマって2時間半ぐらい溶かしていた。これは敗北ポイント

  • 多分ここらへんでMySQLがサチらなくなっていた気がする CPUがサチっていたことに気が付いていたが原因が分からず (pprofをなぜ見なかったのか……)

    15:30: UserSimple が持つ情報は全てオンメモリでキャッシュする

  • ユーザの存在チェックだけするような部分 (権限チェック) も基本的にこれで対応できるのでそうした

  • 4210点 ここからスコア上がらず……

    16:00: 同じクエリを何度か叩いているエンドポイントがあったので潰す (@hogas, @kyontan) 16:00ごろ: transactions 以外詰まってないしCPUに余裕があるので campaign (負荷レベル)を弄ったところ外部APIで 403エラー  {"error":"IP address is not allowed"} が連発しだす

  • 主にGET /users/transactions.json での外部 shipment  サービスへのリクエストで連発

  • 外部APIへの403はアプリケーション的には500を返す仕様だったので、これが連発してベンチマーカが途中終了し完走しない

  • ここらへんで手詰まりに

    17:00: 明らかに不要な SELECT FOR UPDATE を削除 (4箇所+ぐらい)

  • これかこれの次辺りで4410点。これがベストスコア

    17:10: 外部APIを叩く部分で exponential backoff を実装 (@h-otter)

  • 変化なし / 403 が連発する

    17:30: 外部APIをリクエストするエンドポイントだけ2台へ分散する

  • 403 の連発は解決せず、なぜ……

    18:10: 最終スコア0点 (failed) で終了 色々施策を打つもスコアの変化要因が今ひとつ分からず頭が回っていなかったですね。 特に外部API が undocumented な 403 を返す (しかもメッセージは 「許可されていないIPアドレス」) というのは全然分かりませんでした。 マイクロサービス問題なら単一IPから連続でアクセスすると弾くようになっているのかな、などと思い、後半で外部APIへリクエストをするエンドポイントだけ複数台へ分散するなどしていましたが全く解決せず泥沼へ。

これベンチマーカと外部API側に問題あるのでは? みたいな気持ちになりつつ、マイクロサービス問だしちゃんとbackoffとか実行すればいけるでしょ! と思っていましたが、意図したエラーだったのかは未だに分からず……

他の方の感想を見た限りでは、ポータルサイトへ登録されていないIPからのアクセスは弾かれるみたいですが、これについてはUI上で正しく登録されていることを確認したので問題なさそうでした。 11:00 ごろにインスタンスを立ち上げ直してIPを再登録したのがポータルサイトの何らかのエッジケースを踏んだのでは? などと勝手に邪推しています。謎ですね。

そのほか、 campaign の値を変えると何が変わるのか (POST系アクセスが増える?)、みたいなことも終了後にログを分析してようやくなんとなく傾向がわかり悔しい気持ちに。

感想

終わってみれば途中重大な気付き (「外部APIのレスポンスキャッシュできるじゃん」「ユーザの嗜好に合わせて商品出し分けたら?」など) があり、見逃しの多い回でした。 bcrypt の件は全く気づいておらず。前回は初手でやった(があまり意味がなかった) pprof を今回なぜ見なかったのか……

短い時間で追い詰められている環境の中でどれだけ集中できる / 気付けるか、というのが重要になると改めて感じました。

コンテストとしては今回も設定が面白く、運営の手の込みようが分かり、かつ短期間で取り組みがいのあるとても良い問題でした。 運営の皆様、大変お疲れさまでした。

こんばんは、kyontanです。 前回再起動試験で落ちたのでチーム「再起動非対応」で参加しました。ベストスコア[…]

コストを掛けずにBigQueryを使い倒す会

Software

BigQueryを使い倒す会代表のkyontanです.今回は実用性低めな分野で BigQuery を1万倍有効活用する方法……ではなく延々とBigQueryがお得だという話をします.

今回ご紹介するテクニックを意味不明に活用することで,18.2GBのスキャン(10円程度)で2301億行の一時テーブルを作って集計することが可能です.便利ですね.ちなみに私は12桁の数字を突然見て混乱しました.

COUNT(*)の結果が2301億

ちなみに上のクエリは37.5秒で帰ってきましたが,内部では4時間52分のCPU時間を使用したようです.つまり,単純に計算すると約500スレッドが並列して走っていたようです.すごいですね……

(注: この記事は実用性皆無です.ごく一部を除き,一般の分析用途でBigQueryを使用するユーザにはなんの利もありません)

 

他にも,1TB超えのデータをシャッフルすることもあり…… (シャッフルという概念は一般的なRDBMSにはなく,後述するMapReduceが持つ特徴の一つです) 1TBのデータをシャッフルできるの異常じゃないですか? DC内ネットワークすごいですね.

並列度が高いクエリだと1週間どころか2週間を超えるCPU時間を1発のクエリで使うこともあります.

さて,BigQueryのコストはスキャンするデータ量に依存します.そのため,一般的なログ分析基盤でコスト削減のためにスキャンする列を減らしたり,時系列でパーティショニングして必要な分だけスキャンする手法が取られますが,こういった話はありふれているので割愛します.

ここでの目的はスキャン量を増やすこと無くスロット時間(CPU時間)を増やすことであり,これにより同じコストでより多くのCPUを使いたいということです.とにかく多くのリソースを使うことが快楽に繋がります.

実際,上の図では31日と5時間のCPU時間をわずか66.6GBのスキャンで消費することに成功しています. BigQueryは執筆時点で1TBスキャンするコストが$5ですから,66.6GBのスキャンはわずか30円程度です.30円でGCPのサーバを1ヶ月分動かせると考えるとお得な気がしませんか?

コストパフォーマンスを突き詰めていくと,1.6MBのデータから2時間41分のCPU時間を消費することもできます. BigQueryは10MB以下しかスキャンしなかった場合には,10MBへ切り上げた上で課金の計算がなされますが,10MBスキャンしたところで掛かるコストは$0.00005 ですから,これは実質無料です.

一方で,複雑なクエリを叩くと実際長い時間がかかることがあります.このとき,BigQueryではクエリのタイムアウトが6時間と定められているため,これを超えるとクエリが強制終了させられます.

他にも雑に PARTITION BYを使ってパーティションを切りつつ内部でソートを掛けているとメモリを食いすぎて死んでしまったり

(意訳ですが)予想された時間を大幅に超えたのでとりあえず止めました,みたいなエラーが出たりします. これは未だに納得がいってない.6時間動かしてから言って欲しい.

 

さて,我々は賢いので(?) BigQueryの内部アーキテクチャを攻略することで可能な限りこういった中断系エラーを避けつつ安価にクエリする方法を試すことができます.

BigQueryはSQLが使える分析特化のDBではありますが,中身はMapReduceだと推測され,実際クエリプランを見るとそれっぽい様子を垣間見ることができます. MapReduceといえばHadoopやSparkが有名ですが僕は触ったことがありません.安易に解釈すると大量のマシンにデータをバラ撒いてジョインして適当に集計する,みたいな感じでしょうか.そのうち原論文をちゃんと読みたいですね.

BigQuery公式でも述べられていますが,クエリを高速に実行するためのキモはいかにうまく分散させるかに掛かっています.CPU時間を稼ぎつつ実時間を抑えるためにはこの並列数を上げるためのクエリ書換が重要になります.

今回私が実行したかったクエリは約1万行のテーブルを2重に自己結合するクエリでした.イメージとしては下のようなクエリになります. 単純にINNER JOINを2回書けばよいのですが,計算量は単純計算で1万の3乗,1兆回のループが発生します.終わりません.

SELECT *
FROM some_table src
INNER JOIN some_table a
  ON ...
INNER JOIN some_table b
  ON ...

実際にはON句での絞り込みがあるので結果セットは数分の一(それでも数千億ありますが)になるのですが,こんなクエリを素直に書いても全然スケールしません.

これは,行数が少ないテーブルのINNER JOINはあまり並列数を上げて実行してくれない現在のBigQueryのクエリ計画エンジン(?)の特性に思えます.

ちなみに BigQuery だと WITH句を使って一時テーブルの見た目をした何かを作ることができますが,これは実行プランには影響がありません.

WITH some_table_joined AS (
  SELECT *
  FROM some_table src
  INNER JOIN some_table a
    ON ...
)
SELECT *
FROM some_table_joined
INNER JOIN some_table b
  ON ...

対策として,まず自己結合を1回した一時テーブルを作り(数千万行)クエリをし,その結果テーブルに対して再度自己結合を掛けるクエリを書いたところ500スロット並列で動くことを確認しました.具体的にはクエリを次の2つに分割することになります.

-- create some_table_joined
SELECT *
FROM some_table src
INNER JOIN some_table a
  ON ...

-- join some_table_joined and some_table
SELECT *
FROM some_table_joined
INNER JOIN some_table b
  ON ...

元の1万行のデータは高々数MBしかないため,これを2重結合するクエリが動けば実質無料になるのですが,これはうまく行かず,結局自己結合した一時テーブルのスキャンに数十円程度掛かりました.それでも安いのですが……

ちなみにここで注意すべきこととして,ストレージ課金があります.BigQueryのストレージは安価とはいえ,3ヶ月以内に変更されたデータに掛かる料金,つまりActive Storageは $0.020/GB です.中間テーブルを作ってクエリが終わり,使いみちがなくなったら不要なテーブルを削除しましょう. (実際には BigQuery でクエリしたときに勝手に作られる結果用の一時テーブル(数時間しか有効期限がない)は課金されないような気がします.僕は実験が日をまたぐこともありますし,とりあえず名前を付けてテーブルに保存していたので消す必要がありました)

他にも,やはり数千万行を超えるデータのソートは苦手なようで,なかなか苦労しました.結局PARTITION BYの中でソートをして成功したことは数えるほどしかありません.今回のケースでは諦めてMIN, MAX関数に逃げてしまいましたが,本来は一時テーブルをもう一度作らないとタイムアウト内に終わらない気がしますね.

このように,BigQueryでログデータ以外の集計をする人は実質存在しないかと思いますが,今回のケースではうまくMapReduceの特性を利用することができ,無事高速かつ安価に数千億の組み合わせを試行することができました.

read more »

BigQueryを使い倒す会代表のkyontanです.今回は実用性低めな分野で BigQuery を1万倍有効[…]

YubiKey 5C を買ったので ECDSA鍵で ssh した

Infrastructure Software

こんにちは。唐突に YubiKey が欲しくなったので買いました。こんなことをやっている場合ではない……

正確には、Amazon.co.jp を見たら異常に高くてそりゃ転売したら儲かるな、という気持ちになったので、適当に人を募って Amazon.com (US) で共同購入しました。 関税や送料を足した結果、YubiKey 5 NFC が5500円, YubiKey 5C が6100円ぐらいで買えました。良かったですね。

YubiKey といえばそもそも OTP が出てくるキーボードとして認識されるデバイスですが、最近だと WebAuthn で使えたりしますね。あとは PKCS#11 の署名用や適当な鍵を登録できたりします。

雑に手元の macOS でssh するぞ、と思ったら地味にハマってしまったのでいろいろやった結果動くようになったのでメモ

手順だけ分かればおっけー!という方は Gist にパッチ等まとめたので、そちらを参照してください: [https://gist.github.com/kyontan/763952e7be68a2e96d5c3f0ad0d3bce8

](https://gist.github.com/kyontan/763952e7be68a2e96d5c3f0ad0d3bce8)検証環境のバージョンは macOS Mojave 10.14.4 で、OpenSSH は 7.9p1, LibreSSL 2.7.3 が入っていました。 ただ、今回は最終的に OpenSSH と OpenSSL は自前でビルドしたのであまり関係ありません。 より重要そうな Homebrew でインストールしたパッケージのバージョンは、 OpenSSH 7.9p1, OpenSSL 1.0.2r (26 Feb 2019), OpenSC 0.19.0 です。

まず、下記の記事などを参考に鍵の生成を試みます。

Putty CAC で SSH に YubiKey を使う(OpenSC編) - enjoy struggling https://blog.haniyama.com/2018/02/02/yubikey-ssh-opensc/

GUI のツール (YubiKey PIV Manager) の場合は PIN を設定すると自動的に Authentication と Key Management 用の鍵を生成してくれます。現代だとデフォルトで ecdsa-sha2-nistp256 の鍵が生成されるんですね。便利。

公開鍵を取り出そうとした

YubiKey へのアクセスや署名(でよいのでしょうか?) にはスマートカード等で使う OpenSC を使用するようです。今回は Homebrew でインストールしました。 (brew install opensc)

早速試してみます。まずは上の

# ssh-keygen -D /usr/local/Cellar/opensc/0.19.0/lib/opensc-pkcs11.so
C_GetAttributeValue failed: 18
C_GetAttributeValue failed: 18
cannot read public key from pkcs11

うまく行きませんね。(上手く行った場合はこの記事を読む必要はありません。最後のステップまで飛ばしてください。

パッチを当てる

エラー文でググると偉大な先達の記事が出てきます。今回この記事がなかったら即死していたでしょう。

ssh with yubikey ECDSA keys - lithium03の物置 https://lithium03.info/yubikey/index.html

この記事を読むと、「RSA鍵なら問題なくいける」「OpenSSH が OpenSC を使うときに (具体的には PKCS#11 の署名等で) ECDSA鍵に対応できてない」ということが分かります。

親切にパッチや、そのパッチの元になったチケットまでリンクがあります。

2474 – Enabling ECDSA in PKCS#11 support for ssh-agent https://bugzilla.mindrot.org/show_bug.cgi?id=2474

このチケットを見ると、Fedora 28 では既にこのパッチがバックポートされていること、upstream には OpenSSH 8.0 でマージされる予定であることが分かります。

ちなみにパッチは OpenSSH 7.6p1 用で、上の記事では 7.8p1 用に書き換えられたものが公開されていますが、現時点の Homebrew でインストール可能なのは 7.9p1 ということで、パッチを修正しました。

というわけでパッチです: https://gist.github.com/kyontan/763952e7be68a2e96d5c3f0ad0d3bce8

ビルドする

Homebrew でパッチとかどうやるんだ……と思いましたが、どうやら brew edit openssh で行けるみたいです。こんなに簡単に当てられるなんて……便利だ……

Homebrew: Patching an existing package https://www.ralfebert.de/snippets/brew-apply-patch-to-package-formula/

というわけで雑に既に書かれている patch の下に、以下のように追記してやるとパッチが当たります。

# Add support ECDSA for PKCS11, ref: https://bugzilla.mindrot.org/show_bug.cgi?id=2474
patch do
  url "https://gist.githubusercontent.com/kyontan/763952e7be68a2e96d5c3f0ad0d3bce8/raw/2ad5f854eba7704fbb7af2182ac57ee82b9a8f61/openssh-7.9p1-pkcs11-ecdsa.patch"
  sha256 "93b4e48321db94d785833a9414b12467a4741156cec90fa3052a4092acec8938"
end

 

インストールは brew install --build-from-source openssh です。既にインストールしてあるものがある人は installreinstall に読み替えてください。

ビルドできたら、ビルドした ssh や ssh-keygen のパスをよしなに通してやります。勝手に通ってるかもしれません。(rehash なりしてから ssh -V の結果を見るとかすれば分かると思います)

うおおおおお!!!!

# ssh-keygen -D /usr/local/Cellar/opensc/{version}/lib/opensc-pkcs11.so
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDnIbZ4ANu...
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBv0e8HKnx...

というわけで公開鍵が見られました。2つ見えたのは、上で自動的に作られると行っていた Authentication と Key Management 用の鍵がどちらも見えてるからだと思います。普通は上の方を使えば良いはずです。

鍵を登録して、ssh していきます。 ssh -I /usr/local/Cellar/opensc/{version}/lib/opensc-pkcs11.so host です。

# ssh -v -I /usr/local/Cellar/opensc/0.19.0/lib/opensc-pkcs11.so user@xxx.monora.me
OpenSSH_7.9p1, OpenSSL 1.0.2r  26 Feb 2019
...
debug1: Connection established.
debug1: provider /.../opensc-pkcs11.so: manufacturerID <OpenSC Project> cryptokiVersion 2.20 libraryDescription <OpenSC smartcard framework> libraryVersion 0.19
debug1: provider /.../opensc-pkcs11.so slot 0: label <Yubico PIV Authentication> manufacturerID <piv_II> model <PKCS#15 emulate> serial <...> flags 0x40d
debug1: have 1 keys
debug1: have 2 keys
...
debug1: Will attempt key: /.../opensc-pkcs11.so ECDSA SHA256:nr/MvmFI6cYmChV97dMVIBeE2Uq5UmhVvoIdIuayLvg token
debug1: Will attempt key: /.../opensc-pkcs11.so ECDSA SHA256:Z7dluZC4FCEsUAC0HYiITr5+I83bLtHUxOwdla81Rtc token
...
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /.../opensc-pkcs11.so ECDSA SHA256:nr/MvmFI6cYmChV97dMVIBeE2Uq5UmhVvoIdIuayLvg token
debug1: Server accepts key: /.../opensc-pkcs11.so ECDSA SHA256:nr/MvmFI6cYmChV97dMVIBeE2Uq5UmhVvoIdIuayLvg token
Enter PIN for 'Yubico PIV Authentication':
debug1: Authentication succeeded (publickey).
Authenticated to xxx.monora.me ([xxx.yyy.zzz.www]:22).
...
# sl
...

というわけで ssh 出来ました。嬉しいですね。

パッチを見て当ててみたらエラーが出た瞬間にやる気をなくして、うだうだやっていたら3時間ぐらい掛かってしまいましたが、なんとか動いてよかったです。

それでは皆さまもハッピーYubiKeyライフをお過ごしください!

こんにちは。唐突に YubiKey が欲しくなったので買いました。こんなことをやっている場合ではない…… 正確[…]

2019年3月あたりの今日このごろ

雑記

こんにちは。最近名乗るときに自分はkyontanなのかきょんたんなのか@sukukyonなのか分かりません。 インターネットありがちネームは Twitter や任意の ID を自由に設定できるサービスで人権がない。

3/7は名取さなさんの誕生日でしたが、皆様いかがお過ごしでしょうか。私は先日、宮城県は名取市に行ってきました。

私は昨年開業届を出してしまったがばっかりに確定申告に脳内のリソースの8割を吸いつくされながら3週間を過ごし、実際の帳簿作成/決算はわずか6時間強で終了しました。やらないならやらないで頭の隅っこからも追い出せということですね。

前回の記事では東京に引っ越したという話をしましたが、無事平穏に特に何もない生活を送っています。今日も生きててえらい。

寝られるだけ寝る、というか起きることができないのでどうしようもないですね。これからも朝が遅い仕事を探し続けます。

最近もまっとうに1日3食食べるような生活はしていないですが、周囲の人間が病んでいる割合が平均よりだいぶ高いと推測する自分が今日もぐっすり寝られるのはとりあえず良いことだと思っています。

read more »

こんにちは。最近名乗るときに自分はkyontanなのかきょんたんなのか@sukukyonなのか分かりません。 […]

東京に引っ越しました

雑記

2ヶ月前はまさか引っ越すとは思っていなかったんですが、あれよこれよとやっていたら東京で駅チカの2DKに引っ越すことになりました。

4月から社会人ということで早めに東京に出た。つまりはそういうことです (ウソです 残りは散文です。

この記事は新居ではなく、たまたま実家にいるので実家で書いています。実家って言い方もまだ慣れないですが区別ができないので使わないといけない。

そもそもの動機として、今通っている大学が遠い、ということがありました。 片道ドアツードアで1時間50分〜2時間というのはなかなかに辛いもので、1日に4時間が通学で溶けるというのは実感するとつらいものがありました。 小学校, 中学, 高校も1時間程度掛かっていたので大丈夫かと思っていたのですが、倍になると流石に色々と勝手が違いますね。毎日座れれば良いのですが……

時は流れ、今は4年目も終わろうかというところですが、幸いにして進学先も決まり(同じ場所ですが)あと2年は東京の中心部から離れたところに通うことになることが決まりました。 自分は自宅大好き人間なので実家を出るつもりはさらさらなく、社会人になったら東京に引っ越すどころかリモートワークしたいなと思う程度に今住んでいる所が気に入っています。家から出たくない。

とはいえ大学へ通わないといけないのは事実であり、研究室は比較的対面でのコミュニケーションを重視する文化が根強いため、成果さえ出せば来なくていいとはいえできる限りの時間を研究室で過ごしたいと思うようになりました。

ということで、お試しではありますが東京に住むことにしました。

read more »

2ヶ月前はまさか引っ越すとは思っていなかったんですが、あれよこれよとやっていたら東京で駅チカの2DKに引っ越す[…]

macOS Mojave へ VirtualBox をインストールする

Software 雑記

月末金曜日なので研究から逃げようとしたところハマってしまった。タイトルからしてmacOS初心者感がつよい。

環境は macOS Mojave (10.14.1), Oracle VM VirtualBox のバージョンは 6.0.0 (5.2.22 でも再現)

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

macOS へ VirtualBox のインストールを試行してエラーになっている様子[/caption]

以下、解決方法

結論から言うと「システム環境設定」-「セキュリティとプライバシー」-「一般」-「ダウンロードしたアプリケーションの実行許可」 で Oracle America, Inc かそれっぽいのを許可する。既に許可してしまったのでボタンが消えているが下の図の枠で囲った位置にボタンが出てくる。

それっぽいエラーを何もユーザーへ提示せずに死ぬのでハマった。ちなみに macOS のインストーラはエラーログとかを /var/log/install.log に吐くのでそれを見ると何で落ちたのかは分かる。

installd[400]: PackageKit: ----- Begin install -----
...
installd[400]: ./postflight: /Library/Application Support/VirtualBox/VBoxDrv.kext failed to load - (libkern/kext) system policy prevents loading; check the system/kernel logs for errors or try kextutil(8).
...
Installer[9779]: Install failed: エラーによってインストールできませんでした。ソフトウェアの製造元に問い合わせてください。

ところで結局これでWindowsを起動したところで目的は達成できずに負けました。完全敗北

月末金曜日なので研究から逃げようとしたところハマってしまった。タイトルからしてmacOS初心者感がつよい。 環[…]

研究室に配属される前に知りたかった研究の流れ

雑記

こんにちは。名取さなさん10万FANS+おめでとうございます。大学まで片道2時間掛かる生活に嫌気が差したので、家に籠もってはたまに大学に行く生活をしています。睡眠が取れているのが何よりの救いです。

さて、大学は研究機関だと言われていますが、研究って具体的になにやるの? と思っていた3年間が終わり、4年目に突入して半年が経ちました。

半年も経つと秋になり、未来の後輩が研究室を決めるために見学や面談に来ているのを観測しています。

自分がその立場にいたとき、自分は研究をどういった流れで何をやるものなのか全く分かっていませんでした。 今もそんなに理解していない気はしますが、少なくとも今ぐらいの認識を研究室配属前に知りたかったな、というのは思っているので、転生したときのためのマニュアルとして少しまとめてみます。

そもそも研究のやり方とか認識とか、研究成果の扱いみたいなのは学問によってどうやら違うらしいのでとりあえず情報科学、とりわけコンピュータサイエンスの近くをやっている人間として書いています。 ちなみに成果は今のところほぼ無で、はじめての学会だね、と言われながら国際学会だし九州だしでよくわからない緊張に押しつぶされて寝込みつつもなんとか学生研究発表で入賞して、あと自腹で別府温泉に入りました。別府八湯温泉道初段程度の実力です。

read more »

こんにちは。名取さなさん10万FANS+おめでとうございます。大学まで片道2時間掛かる生活に嫌気が差したので、[…]

tmux でも Touch ID で sudo を使う

Software お役立ち情報

Touch ID が搭載された MacBook Air を買いました。MacBook Air に欲しかった機能の8つ中8つが実現されたので買いました。1つ10点としたら10^8 で1億点だね、という話をしたら首を傾げられました。

Touch ID が sudo でもパスワードを入力する代わりに使えそうだな、と思ったので調べてみたらどうやら pam_tid.so という PAMモジュールが用意されており、コンフィグを弄ることで使えるようです。具体的には /etc/pam.d/sudoauth sufficient pam_tid.so を追記するだけです。簡単ですね。

しかし、tmux のようなターミナルマルチプレクサを使用している場合にはこれだけではうまく動作せず、sudoコマンドを用いても普通にパスワードを求められてしまいます。 (これは各ユーザごとに存在する bootstrap namespace に tmux が存在しないこと? が原因のようです。詳しくは当該リポジトリに説明と詳細へのリンクがあります。)

これに対処するために pam_reattach という PAMモジュールを書いた人がいて、これが使えます。

fabianishere/pam_reattach: A pluggable authentication module that reattaches to the user's GUI (Aqua) session on macOS

参考にした元の記事やこのリポジトリの README.md には何事もなく以下のようにやれば入ると書いてありますが、これは失敗します。

$ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ``$ make ``$ sudo make install これは最近の macOS の保護機能の1つである System Integrity Protection が有効になっているためで、rootであっても / 配下のほとんどが書き込み不可能になっています。つまり /usr/lib/pam にビルドされた pam_reattach.so をコピーすることができず失敗します。 多分これを開発するような人は無効にしてるんじゃないでしょうか……

実は/usr/lib/pam/usr/local/lib/pamで代替できます。というわけでそうします。具体的には以下のように PREFIX を変えるだけです。

$ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr/local$ make ``$ sudo make install それではよい tmux life をお過ごしください。

Touch ID が搭載された MacBook Air を買いました。MacBook Air に欲しかった機能[…]

2018年10月あたりの今日このごろ

未分類 雑記

こんばんは。もうすぐ冬ですね。10月あたり、というタイトルで10月31日の深夜にこの記事を書いてますが10月が終わるのとこの記事を公開するのはどちらが早いでしょうか。

最近は時間的割合では主に研究をやっているのですが、それ以外でも色々あり、ちょっと精神面で弱っているなと思っていて、方々にご迷惑を掛けてしまっているなと思っています。 この記事を書いている時点で実際なんらかのしきい値を超えたのでは、と自分で思っていますが、どうでしょうね。

read more »

こんばんは。もうすぐ冬ですね。10月あたり、というタイトルで10月31日の深夜にこの記事を書いてますが10月が[…]

第51回 情報科学若手の会に参加しました

雑記

こんにちは。きょんたんです。最近は「いいえ」というのが流行っています。いいえ。

情報科学若手の会という情報科学オールジャンル若手オンリーイベントに参加しました。でも最近は若手オンリーじゃないみたいです。 前回が初参加で、初参加なのに突然肩を叩かれて幹事になったので今回は幹事としての初参加になります。

ちなみに幹事ってなんだよみたいな話とか私が気になるお金とかの話とかもろもろは代表幹事のkurochanさんが書いていますので興味がある方はご参照ください

発表のテーマとしては毎回様々あるのですが、なぜか近いテーマを複数人が発表するという事象があり、前回はブロックチェーンで今回は機械学習とかプログラミング言語といったテーマがそれに当てはまっていた気がします。

個人的に一番分かりが多かったのは Segment Routing の話で、なるほど経由地を含めた経路のルーティングとかができて便利そうみたいな気持ちになりました。OpenFlow とかでもできそうですが、ラベルスタックで表現するとハードウェア実装のスイッチとかで高速に実装できて良さそうだなって思いました。

コンテナデータセンターの話は個人的に一番聞きたかった話で、法的な側面でどういった解釈をしてどのように実現するのか、という話やコンテナの魅力が延々と伝わって来て面白いなと思って聞いていました。狭い部屋が好きなのでコンテナを自宅に改造して住みつつ隣のコンテナをデータセンターにしたいですね。

生物から学ぶ深層学習という話は深層学習概論みたいなところがあり、どういった歴史背景でどのように深層学習というものが生まれ、アカデミアとしてはその研究がどのように進んでいて、進んでいくのかというところの傾向が分かって面白かったです。 その次のPFNでの深層学習の話は色々なネットワークの紹介なんかがあり、例えばGANに関する説明なんかは腑に落ちるところがありました。 GANで作られた画像とかはTwitterとかで見ることがしばしばあったのでGはGenarativeのGかな〜ぐらいの認識をしていたのですが、あれは敵対的ネットワークというものでノイズを基になんらかの解釈ができるような(それらしさを持つよう)に延々と学習するんだな、みたいな説明があってとても納得しました。分かってきた。

どの発表も難易度がそこそこ高かったなと思いつつ割と個人的には適度な難しさだったなとは思うんですが、それはたまたま自分が知っている知識がそのあたりに偏在していたからだと思っていて、一般的にみるとそこそこ難易度が高めな発表が多かったのでは、と思っています。 前回は割とテーマ的に自分が知っているところと被らないテーマが多かった気がした(うろ覚え)ので、このあたりは難しいですね。

会場的な話としては、前回は伊東の山喜旅館だったのですが今回の会場は軽井沢の軽井沢研修所というところでした。軽井沢研修所、温泉がない以外は個人的には一万点みたいなところがあり、過ごしやすくて良かったです。ちなみに散歩したところ裏で温泉を掘っていたので来年も軽井沢だったら温泉に入れると良いなって思ってます。 温泉の問題は個人的にはあまり問題視していなくて、それはなぜなら帰りに温泉に行ったからです。軽井沢はそれ自体が温泉地で例えば星野リゾートの発祥地である星野温泉(トンボの湯)というのがありますが、そこから山を越えると草津温泉や万座温泉、鹿沢温泉などがあり、最強の温泉地帯が広がっているわけです。このエントリで書く内容ではないので割愛しますが万座温泉は青白色のにごり湯で最高でした。 幹事として何をしていたかというと概ね無なので来年はもう少しがんばります。 :innocent:

こんにちは。きょんたんです。最近は「いいえ」というのが流行っています。いいえ。 情報科学若手の会という情報科学[…]

ISUCON8 予選に参加して再起動試験に落ちました

Infrastructure Programming

おはようございます。名取さなにハマっている kyontan です。

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

最終スコア[/caption]

チーム「hhkb」で同期3人 (自分 @kyontan, @hogashi, @h-otter) 2回目の参加で2日目で Go 実装でした。学生枠突破ならずでした、悔しい。というよりは 55,982点で全体4位の点数で落ちました。ちなみに hhkb は h-otter, hogashi, kyontan, :boom: ???? の略です。 スキルセット的には、 @h-otter がインフラ(ミドルウェア含)なんでもできる+Goの経験が一番あるマンで、 @hogashi がアプリケーションなんでもできるマンで、 @kyontan はアプリとインフラとDBを一通り見られるマンみたいな感じでした。

今回の参加に向けて、取り組んだことをつらつらと書きます。

今回は真面目に本戦に行きたかったので前々日に ConoHa で ISUCON7 の予選を解き直して練習しました。具体的には ConoHa の練習用イメージを使って 1GBプラン x3台で予選環境を再現しました。結果、10時間程度で 5,204点から509,190点まで持っていけることが分かり、計測と試行の反復を効率的に行えば ISUCON の予選は突破できるという確信を深めていました。 また、前回は最後の最後でベンチマーカを走行させた結果点数が下がって落ちたので、前回の直後に「泣きの1回はやらない」というスローガンを掲げ、1年越しでそれを達成しました。

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

ベンチマークの初回走行の結果しばらく1位になった[/caption]

事前に準備したのは Prometheus のサーバ (@h-otter がいい感じにやってくれた)と、やること/できることチェックリストぐらいでしょうか。だいたい大会では開始した瞬間にテンパってそのまま撃沈するのが常なので、思考停止状態でもコピペで動くようなコード片とかを用意しておくと便利ですね。あとは思考が無になったときに確認するべき事項とかを作っておくと良いのではないでしょうか? 頻繁に無になって帰りたくなりました。メンタルは大事。

例えば下のような感じです。

当日は3人がローカルで開発し、本番環境のVMへバイナリを転送して検証する、という進め方でやっていました。Go はクロスプラットフォームでのビルドがしやすいのが便利ですね。

具体的にやったことを羅列します。というか @h-otter が書いていたのを未承諾引用します。順番は適当

  • SELECT * する系のクエリを必要な列しか取らないようにした

  • /api/usersuser_idreservations を全部とってきて、アプリ側で処理してやったらめっちゃ速くなった ここでベンチマーカが重いと言ってくるエンドポイントが /users/:id から /api/events/:id/actions/reserve になった

    getEventgetEventWithoutDetail と分けた getEventgetEvents を2クエリに sheets へのクエリを消す

  • 効果があったのかは良くわからない

    MariaDB のチューニング Prometheus と Grafana で可視化 ログインのクエリを1つに パスワードを平文で突っ込むようにした DB にインデックス張った (けどあまり良い結果がでなくてもんにょりした)

  • 最初に mysql コマンドでインデックス張ったけど結果が全く変わらなくて、なぜ? と思ったら毎回 /initialize でテーブルを作り直していることに気がついた。

    IN句を使いたかったので DBにアクセスするライブラリを sqlx に切り替えた トランザクションの開始がおかしいところがあったので直したり デッドロック時にエラーを返さずリトライするようにした 最後は予約時のシート決定を高速化するコードが安定化しなくて入らなかったり、Redisでいい感じにやろうぜみたいなことを思うだけ思ってやらなかったりしました。多分ここができると数万点上がったはず。

あとはスコアに関係ないけど作業便利になる系として、 エラーログでソースコードの行番号を吐くようにしたり、 Makefile 弄って1コマンドでデプロイできるようにしました。 開発は3台のサーバでバラバラにやっていましたがDBは1台だけを参照するようにしました。これはDBのチューニングとかがあって、1台でやった変更を他に反映したりするのが面倒くさかったので。こうすると、やりたい人間が適当にベンチマーク対象のサーバを変更して実行してやればいいので楽でした。

ソースコードは GitHub で管理し、いい感じにやりました。コミットログは下の通りです。

数字がタグに付いていることがありますが、これはいいスコアが出た時にバイナリごとコミットしてタグつけておこうぜ、みたいな感じにした結果でした。

今回の僕の活躍はよく分からなくて、いい感じデバッグ担当だった気がします。PRを見るなりとりあえずマージしてベンチマーカを落としたりバグ探しをしていたりしました。とにかく @h-otter がぶち壊しつつ @hogashi がいい感じに安定化するコードを書いてくれてよかった感がある。

Webサーバはh2oで十分高速だし、画像のトラフィック詰まりもないしで、とにかくアプリケーションコードの改善に注力した/するしかなかった8時間でした。

最終的に残り30分でベンチマーカを叩いたところ3万点前後のスコアが5万点に若干跳ねてそこで打ち止め。一度再起動をしてブラウザからアクセスできることを確認し天命を待ったところ、無事再起動試験で落ち失格となりました。天命……

(追記: スコアが跳ねたのは、最後に実行先サーバを変えた時に インデックスを張る処理を init.sh に書いたサーバで実行したからかもしれないことを思い出した。)

なぜ失格になったのかは分かっていなくて、おそらく /admin/api/reports/events/:id/sales の処理が遅くて不整合が起きて落ちたのかなあなどと思っていますが、2回連続で落ちるのは運が悪かったなと……

なんやかんやでやることがなくならない8時間で、やることが見つからない8時間よりは良かったのではないかと思います。

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

イキっているなどと言われてもこれは事実だと信じていて、典型的な N+1 を潰すなどすれば予選は通過できるはずなことは分かりましたね。くぅ〜〜

来年はちゃんと本選に行けたらいいですね。頑張りましょう。

そして、参加会場を提供していただいた mixi 様、惜敗の悔しさを教えてくれる最高のコンテストを運営をしていただいたISUCONの運営の皆様、お疲れ様でした、ありがとうございました!

以下は画像です

おはようございます。名取さなにハマっている kyontan です。 [caption id=&quot;att[…]

リクルートのインターンに参加しました

雑記

こんにちは、kyontanです。最高のインターンに行ってきました。

.+のインターンに(参加(し(まし)?た)|行った)シリーズも気が付いたら3本目です。タイトルに統一感がない。

インターンの正式名称は 「WINTER INTERNSHIP 2018 -ENGINEER-」です。

ちなみに過去のエンジニアインターン参加記事は以下にあります。よければご参照ください。

多分この記事を参照する人の7割ぐらいは、そもそもこのインターン (業務委託契約なので実際にはインターンではない) の概要に興味があると思います。これは探すと若干数ヒットするので、こちらの偉大なる先達の記事をご参照ください。

Recruit Summer Internshipに参加しました. - 未来永劫 http://shopetan.hatenablog.com/entry/2016/10/13/133031 cormoran's note - Recruit Winter Internship 2017 参加記 https://blog.cormoran-web.com/blog/2017/03/rhd-winter-internship-2017/ DeNAのサマーインターンシップに参加してきました - たいむかぷせる2 http://studio-graph.hateblo.jp/entry/2017/09/16/211335> リクルートホールディングスのインターンに参加していたので,それはまた書きます。

リクルートのエンジニアインターンはランチがすごいという前印象があり、それを印象づけた記事があったと記憶しているのですが、ググっても引っかからなかった。 ぜひご連絡ください。ちなみに、実際ランチは感動しました。記事の下の方をご確認ください。

インターンの感想にありがちな NDA (秘密保持契約)でほとんど書けない状況なので、それ以外のことを少しだけ書きます。

選考

記憶にありません。 というのは建前として、実際にはコードテストや人事面談、エンジニア面接等のステップからなります。(追記: 2019年ごろ?にコードテストのシステムが変わったとか変わってないとか)

事前面談でメンターから超魅力的な提案をされて、「それは最高ですね、やっていきましょう」みたいな雑な返しをした気がします。振り返ればこの時点で優勝(注: 別に優勝という概念はない)していましたね。

やったこと

配属は RTC (リクルートテクノロジーズ) で、あの事業の分析基盤をフルマネージドクラウドで作り直すようなことをしていました。

データ(分析)基盤や、パイプライン/ワークフローみたいなものに興味があったこと、クラウドに知見がなかったのでそのあたりも吸収できるみたいな感じで、最高のテーママッチングだったと思います。

メンターは、あのデータ基盤の分野では日本で第一人者といっても過言ではない @yuzutas0 大先生で、とにかく最高のやっていきがあるチームでやっていってました。とりあえずブログを見ると知見が一杯あって便利です。なんでもできるのかこの方は……?

インターン参加記によくある困難とそれを乗り越えた系の話

パイプライン、結構色々なツールが絡んでくることが多く、そのあたりをいかに上手く結合させるかみたいなところでアーキテクト力が養われたと思います。

また、インターン感想記事では、「○○を検証しました!」「こういうの作って便利にしました!」みたいなのは比較的よく見かけますが、実際にプロダクションに載るところまではいかないことが多いと思っていて、今回はそういうの無しでちゃんと載せるぞみたいな意志でやっていました。

ただ、スケジュール感は破滅していて、当初やるぞって言っていたことの下準備に日程の9割が費やされてしまいました。しかし本題は2日で終わりなんとか間に合った。流石に見積もりが甘すぎた。とはいえ単純作業は少なく、終始創造的なことをやっていた気がする。Toil (学びのない繰り返しタスク) じゃなくて最高。

あと、やっぱりインフラをやった上での感想として、オンプレ系の知見はかなり活きました。その他に基礎的な知識はどこでも使えて便利。(例: シェル芸)

読み書きした言語は (J)Ruby, Python (2/3), Groovy, Java, SQL, Shell Script, node.js とかではちゃめちゃマルチスタックな感じです。無駄に手を広げておくと何かと役に立つことが分かりました。 特に個人的には Python はクソだと思っていて触りたくなかったんですが、逃れられずにやっていたらいつの間にかアレルギー症状が収まっていたので最後の2日に役に立ちました、でもクソだと思う。実用的だとは思いますが……

結果として、だいたい全部をゴリゴリやったらなんかだいたい全部できました。 惜しいことに実運用に乗せて切り替えまではいかなかったんですが、並行運用までいったので多分近いうちにいい感じになると思います。(よろしくお願いします。) (追記: 切り替わったらしい)

環境

最高の一言に尽きます。

これは面白イベントなのですが、インターン前日にメンターからメッセージが来て、メンター「MacBook ProがUS配列なんだけど」私「じゃあJISキーボード持ってきます」メンター「(本体とキーボードが分離しているのは)疎結合でいいですね????」みたいな会話がありました。既にこの時点でコミュニケーションが雑になっていて、疎結合は最高ということが分かる。(???)

そして、やはり有名なインターンに来る学生はやはり優秀な学生が多い。ここでもまた知り合いに会ってしまい、世界は狭いなと思いました。インターン生交流イベントもあって、特に参加を強制されて面倒、という感じではなく普通に楽しい。良かったですね。

ところで社員証のストラップをこれにしたらモチベーションが主観で3割ぐらい上がりました。ぜひblessing softwareの一員としての意識を持って仕事をしましょう。

[amazon_link asins='B01NAIDKN5' template='ProductAdMonora' store='monora09-22' marketplace='JP' link_id='eef6befd-3348-11e8-b166-018151754d97']

コミュニケーション

これは心理的安全性が確保されていました、の一言で済む話です。伝われ。

メンター (@yuzutas0) が最高なのは上にも書いたんですけど、上手く文脈の疎通ができて良い意味で雑なコミュニケーションが取れるというのはとてもいい環境です。 とくにオンボーディングはよく整理されていて、上司力の高い上司でした。多分僕も部下力を発揮したと思う。

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

ところで Slack のアイコンを普段使っているもの (凪のあすからの汐留美海)に変えたところ、メンターに「版権アイコンじゃん(笑)」と煽られたのはまだ根に持っています。

マジでほぼ1~2日に1回の頻度で1on1をして、予想される不安から取り除けるものは取り除いたり、設計についてアドバイスをもらったり、レビューで突っ込まれたりdisられたりしてとにかくコミュニケーションの密度は高かったです。

Slack は雑に #times_kyontan に延々と思考を書き連ねていたら割と色々な人が絡んでくれて議論もできて技術的雑談ができる環境最高だなって思いました。 流石RTC 、噂に聞く色々な人がいるなと……

やっていきがある環境って多分こういうことなんだなって思います。

生活

明日から毎日11時にくるぞ

12:25出社予定です、すみません……

14:55出社予定です

14:30ごろ出社予定です

流石に最後に「もっと早く来られると良かったね」とか煽られるかなとドキドキしてたんですけど、特に何も言われませんでした……

(そういえば事前面談で「朝弱いんですけど、遅くてもいいですか」「日が昇っている時間に出社していれば」「なるほどね」みたいな会話をした気がする。)

結果的に、毎日座れる時間に通勤して、いい感じにやって、座って帰って寝る、みたいな最高の生活をしていました。 東京駅直結(ホーム→自席が5分)は最高でしたね。

ちなみに最終日はグリーン車で通勤しました。これはその様子です。

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

その他、なんかバランスボールが転がっていたので1週間ぐらいその上でふよふよしながら仕事してました。 さすがにふよふよしすぎて怒られるかなって思ったけど最後まで怒られは発生しませんでした。

夜に、疲れたのでルートビアを買ってきて飲んでいたらメンターに酒を飲んでると思われていが特に突っ込まれなかったというイベントもありました。それは流石に突っ込んで欲しかったですね。

あと、転がっていた Thunderbolt Display を使ったところ、遅延が少なくて割と最高なんですけど、グレアでかつ画面の位置が高く首が疲れたので、結局 MacBook Pro の解像度を 2560x1600 とかにしてやってました。

飯の話が既存のブログ記事でされているからと言って飯の話をしないとは言っていない。

ランチは毎回色々な部署のすごい人と話すことができたのですが、私がインターンで一番上手く使えなかったのはこれに尽きると思います。人から話を引き出すのが下手すぎるので今後なんとかしたい。

画像を並べ立てても品がないのでもっと品がない感じで行きます。

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

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

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

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

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

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

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

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

あとは最終成果発表スライドから1枚引用します。

最終成果発表で飯の自慢をする時間がなかったので、上のスライドみたく全部のスライドの背景に飯やらなんやらを積めたんですけどあまり気付いてもらえなかったらしい。

 

まとめ

最終成果発表ですが、あまりにも話したい内容が多すぎてスライドが163枚になりました。3分ぐらいオーバーしました。ダメです。 とりあえず一番ウケた(と主観的には認識している)ので良かったとします。

(注: 優勝という概念はない)

今回は全能感を持ってやっていくというのを意識して立ち振る舞っていて、とにかく現状の構造だったり、社内ドキュメントだったり、場合によってはソースコードまで片っ端から目を通すようにして1ヶ月を楽しみました。

個人的には全能感があると、不安が減ったり精神的なハードルが下がってストレスも減ったりで良いことづくめなので、良い振舞いだったなと。

これは簡単なようでいて、そもそもそういったものが当たり前のように文書化されて構造化されている環境というのがそもそも恵まれていて、そういうところも含め最高でした。

統括

最高のインターンで最高にやっていきを発揮して最高の成果を出しました。でも色々惜しいのでやっていくことにします。

そういえば今回のインターンの報酬で Sublime Text 3 のライセンス買うわwwって開始時に言ったの思い出したので買いました。 日頃お世話になっているし今回も生産性が100倍ぐらいになりました。

お世話になったメンターやチームの皆様、関連部署の皆様、人事の皆様ありがとうございました!!

 

read more »

こんにちは、kyontanです。最高のインターンに行ってきました。 .+のインターンに(参加(し(まし)?た)[…]

2018年3月あたりの今日このごろ

雑記

こんばんは。

まさか2018年最初の記事が確定申告の記事になるとは思いもしませんでしたが、なんか生きてます。

最近は人生の楽しみを増やすみたいなことを考えていて、幸福とは……みたいな抽象的な問題を具体的に解きたい。 これは就職活動をしていて「将来何がやりたいの?」とか聞かれるからというのももちろんありますが、大学が春休みになり、インターンに行ったりすると環境が変わったり生活が変わるわけで、そうなると考える対象や思考の対象もがらっと変わり、その時に何を幸せに思ってるんだろうなあ、みたいな感じのことをふと思ったからです。

とりあえず諸事の進捗状況について

就職活動

まだやってる。まだやってるのか……と自分でも思いつつあり、最近は5月ぐらいまで続くんだろうなと思い始めた。続くのか……? 逆求人は飽きたのでやめました。というか数を追う気はないです。

単純にどこまでいけるんだろうみたいな感じでスコアアタックを始めたみたいな感覚が近いです。企業をスコアで計るなという意見には同意します。

ただ、どの企業に行ったら良いのか全く分かっていない。

多分どこでも死にはしないけどそれは果たして自分にとってアドであり幸福ですか……? みたいな気持ちになってしまう。 多分どこでも幸せにやれるしアドもあるんだよな……とは思っている。

方向性が近い企業ばかりなのであまり差異が出ないのかもしれない。

ソフトウェアエンジニアがやりたくて、インフラも好きだけど別にインフラだけがやりたいわけではない。とはいえインフラってやること広くて割となんでもできるのでそれでいいな、とは思っている。(グロースハックみたいなのはインフラの領域ではないと思うけど)

英語が流暢に喋れたらな、と今更後悔し始めた。なんとか読み書きリスニングができるのと思ったように議論ができるのは程度が違いすぎる…… なんか考えます。

アルバイト

やらなさすぎてそろそろ怒られそうだなって思っている。やります????

アルバイト先で作っている Arukas という Docker ホスティングのサービスがあり、ようやく正式サービスのリリースが出ました。

ここまで長かった……

インターン

やっている。

某所でインターンとして6週間いる予定。 尊敬できる人がめちゃくちゃいてはちゃめちゃにいい環境だと思っている。心理的安全性を爆速で獲得した。

朝の時間が縛られないのでとにかく最高しか言うことがない。とにかく朝が遅いと幸福な気持ちになる。

しかし時間は圧倒的に足りておらず、あと4営業日しかない。とにかく成果を出すぞという気持ちでやっています。

ところでこのインターン終わったら次のインターンがあるのですが、果たして……

エンジニアリング

やってる

最近はクラウド?っていうのを色々さわっていて、べんりですごい。

とりあえず GCP 色々触ってるんですけどやっぱり便利ですね。とはいえ僕はその中身に関心がある……

とにかく無限にスケールするお気持ちを感じるが無限にスケールされると一瞬で課金死してしまうのでやめて頂きたい。

オタク

あまりやっていない。

とにかく今期アニメ面白いはずなのに全然見られていない。家に帰って即座に寝る生活を繰り返している。

CD とかは買っていて、三ツ星カラーズのOPが最高。

あとは久々に続刊の溜まっている漫画を買った。超電磁砲とのんのんびより。 超電磁砲はとにかく良くて、可愛い女の子が俺TUEEE な感じで最高。

薄い本はちょこちょこ買ってる。スク水の薄い本は増え続けていますが置き場所がない。

箱はひとつ屋根の、ツバサの下でを買った。1ルートやったけど世界観とCGと音楽とキャラクターは良くてシナリオは雑でした。寮の部屋がブッキングして同居したいな…… あおかなを再インストールした。スタート画面で感動してまだ進められていない。 とりあえず体験版をオートプレイする動画が公式にあってリピートし放題で便利です。最後まで用意されて欲しい。

明日は深崎暮人展でいっぱい散財します。ところで初日に出海ちゃんのタペストリーが完売したらしくてとてもつらい。

いっぱいやった気がする。

手違いで合コンみたいなやつに連れて行かれてHPがマイナスになったこともあった気がする。

美味しいお酒を気心の知れた人間と飲むみたいなのが好きです。毎日それだとアレかなとも思わずともないけどそれは将来の不安みたいなやつです。

3月の最初の週に大阪に行きました。主な目的は恋×シンアイ彼女の聖地巡礼です。星奏ちゃんの抱き枕も出ますからね。 ところで上の Twitter Moments を oEmbed 展開したら長くてビビりました。こんなものを展開するな。

来週は北東方面に行きます。その次は北に行く予定です。

西の温泉地にも行きたいので頑張って検討している。

その他

同期がたくさん留年や休学や留学をしていて自由な世代だなと思っている。

 

とりとめのない感じになってしまった。近況報告だしこんな感じで良いでしょう。

こんばんは。 まさか2018年最初の記事が確定申告の記事になるとは思いもしませんでしたが、なんか生きてます。 […]

主に学生やアルバイト向けの確定申告一問一答

お役立ち情報

こんばんは。確定申告は終わりましたか?

とりあえずこの記事のヘッダにでも書いておきたい情報なんですが、「103万行ってないのに所得税取られたけど確定申告の期間過ぎたからいいやって思ってる人はまだ間に合うからやってないならやってみてくれ!!」です。

一介の学生であったはずなのですが、掛け持ちをしていること、そして業務委託契約の名ばかりインターンシップの報酬により年末調整を断られ、泣く泣く確定申告をすることになった kyontan です。

そんな確定申告初心者な自分向けの情報をまとめました。おそらく、似たような境遇の学生の方や、その他の103万円という数字に震える方が気になるであろう情報になっているかと思います。

(正しい情報になるよう努めてはいますが、自分自身、専門家ではないため誤った情報を含んでいる可能性があります。間違いがありましたら、ご指摘いただけますと幸いです。)

記事中の税率や税額のソースはできるかぎり示していますが、税制は毎年何らかが変わっています。この記事の内容は記事の更新日時点での情報とお考えください。 (ちなみに150万になるとか色々言われてますがあれは配偶者控除の話で扶養者は関係ないと思っています。)

また、個人事業主として開業届を出している場合については今回の記事ではスコープ外としています。業務委託契約の収入等と書いた場合、雑収入としての業務委託による報酬とお考えください。

以下、一問一答形式です。

2018-04-09追記: 2017/3/31 の国税庁サイトのリニューアルに伴いURLを修正しました。

read more »

こんばんは。確定申告は終わりましたか? とりあえずこの記事のヘッダにでも書いておきたい情報なんですが、「103[…]

2017年まとめ

雑記

こんばんは。この記事は生放送ではありません。

2017年もコミケで終わります。多分2010年ぐらいからコミケで終わっている気がします。 気になったのでコミケ遍歴を†封印の書†から過去を掘り返してみました。 初参加は忘れもしない2010年の冬コミ、C79でした。この時は1日目のみの参加だったようで、アニプレックスに並んで俺妹の桐乃セットを買ったのを覚えています。今もたまにTシャツ着てますね。

その次がなかなか記憶になくて、漁った所どうやら2012年の冬コミ(C83)らしい。夏コミとか行ってそうだったんですけど行ってなかったんですね。 そこからは毎回行っていて、C84に一度始発で行って轟沈してからは二度と始発では行かないぞと誓っています。

そこからは毎回ほぼ3日間参加していて、今回のC93で11回目の参加になるようです。

C90ではコミケにサークル参加したこともありますが、毎度スペースや誘導の変化を見ていると時代を感じたり感じなかったりします。 最初の頃は企業は西34だけでしたが、C90の前後では企業が2日間だけになり、3日目は西34がサークルになったりしました。そのときに自分のサークルが西34だったからです。

コミケは複数人で行くときのコミュニケーションが難しいなとしばしば思います。ファンネルとか言うらしいですね。僕はそういう規模で参加したことはないです。欲しいものは欲しいですが…… どうでもいいことを書くと、東1-3は外周が"A"で島が"B"~"サ", 東4-6は外周が"シ"で島が"ス"~"レ"、なんか多分前々回ぐらいからある東7は外周が"あ"で島が"い"~”の", 東8は壁が"も"で島が"ま"~"め"です。西34はなんかアルファベットでした。難しい。特に東78のひらがなは難しくて、音声コミュニケーションを破壊しに来ます。そもそも"シ"と"C"とか難しいんですが。それを言うと西もアルファベットで破壊しているんですが、西とか東とかをプレフィックスで言うので破滅しないことが多いです。 とにかく良いツールで解決していきたいがSlackはコネクションが貼れないことがしばしばあります。僕はこの3日間は大半がメールでした。偉大なそりゅーしょん。

さてどうでもいいことを書いていたら23:55らしく、爆速で統括をします。

今年の変化点は3月にシリコンバレーに行ったことで、とにかくそこで思考が変わって面白いなと思ったり、人間重視になりました。 あとは12月に就活の真似っ子をして破滅しました。もう何も信じたくないという気持ちがあります。

全然統括できていないですね、来年も色々動きがあると思うのでやっていきましょう。

皆様1年間お世話になりました。来年もどうかよろしくお願いいたします。

 

これは2017年最後のツイートです

http://twitter.com/sukukyon/status/947482473742528515

こんばんは。この記事は生放送ではありません。 2017年もコミケで終わります。多分2010年ぐらいからコミケで[…]

就職活動中? / 逆求人の感想 2017

雑記

こんばんは。kyontan (就職活動中)です。 括弧書きをするとそれっぽいですね。

この記事は 12月24日 に公開される予定ですが、とりあえず色々思うところもありこの部分は 12/11 に書いています。多分どんどん加筆するので長くなるでしょう。 もし24日にこの記事が公開されていたら、それは、 whywaita Advent Calendar 2017 が24日目であり、25日目には whywaita が記事を書くということです。 おそらく誰も遅刻しておらず、無事にクリスマスが迎えられるのでしょう。多分 WHITE ALBUM2 をプレイするといい感じに心が折れていいと思います。僕は多分まだクリアしていません。

さて、記事のURLにもありますが絶賛就活中です。本当に?

自分史上最も性格の悪い文章だという自負があります。途中で奢っていたりマウンティングがあったりします。しかもそんな文章が10000文字以上あります。 気持ち悪いと思ったらすぐにブラウザバックを推奨します。ブラウザバックって最近見ないですがご存知ですか? (→出口)

キーワードは「承認欲求」です。企業よりは人に承認されたいですね。とりあえず Just Because! の10話を見てください。

ちなみにこの記事で述べている過程については全部具体名含めて色々とメモを取っており、このページ (関係者向け) に色々書いてあります。見たい人は入部してください。ところでこの記事は UEC Advent Calendar とは関係ありません。

最後までお読みいただければ大して真面目にやってないな / お前クソだな、ということは伝わると思います。 真面目に就活をしているかは怪しいですが、とはいえ雑にインターンをしてそのまま就職したり、いわゆるTwitter就職/VR転職なんかをする能力/気持ちもないのでそれっぽいフローを実行してみています。そんな話です。

つまるところ、逆求人を一度やってみたかった人間が逆求人をやったので各サービスの雑感を書いただけです。 どのように振る舞ったかというロールプレイングの一例があることにより、これを誰かが読んで活かして頂けたら面白いかなとも思うので書いています。

 

read more »

こんばんは。kyontan (就職活動中)です。 括弧書きをするとそれっぽいですね。 この記事は 12月24日[…]

時給の上げ方 2017

雑記

こんばんは、kyontanです。お金を溜めて早く温泉付き一戸建てで暮らしたい。

この記事は whywaita Advent Calendar 2017 の17日目の記事です。枠が埋まっていてめでたそう。whywaita 先輩、元気ですか?

why「お疲れのところ恐縮ですが早く書け」

お元気そうでなによりです。

16日目は jackaleさんの 最後にwhywaitaと会ったのいつだっけ... - That Can でした。TUATでは最近Crystalが流行っている気がします? (N=2) 僕もやっていきたいですね。

今は完全に頭が回っていないので雑な文章を書きます。@whywaita が時給の上げ方について話して、と言っていた気がするのでそういう話をします。

過去にもこんな記事がありましたし、もしかしたら @whywaita とお金は切っても切り離せない関係なのかもしれません。

私は現在技術系のアルバイトをしています。技術系のアルバイトの良いところは何でしょうか? そう、好きなことをして勉強ができる上に、お金ももらえるというところですね。接客業をやったことがないので偏見があります。郵便の仕分けは最適化していたら楽しかったですが今思うとディープラーニングでなんとかしてほしい気がします。

@whywaita 先輩がどこで働いているのかは定かではないのですが、私は今はインターネットの会社とインターネットの会社でアルバイトしています。掛け持ちです。インターネットってすごいですね。

その他にも退職エントリが2件あることから、今の会社がそれぞれ3社目と4社目になると推測できます。(この夏のインターンを足すと5社になります)

最近インターネットを眺めていた所、とある知り合いがある会社へ就職する、というインタビュー記事を見かけました。就職するというだけでインタビュー記事になるのはすごいなと思いますが、記事中では "4社でインターン/アルバイトをしていた**「ジョブホッパー」**"として紹介されていました。そう考えると、私もジョブホッパーなのかもしれません。個人的にはあまり良い言葉だとは思っていないですが……

時給の上げ方は自分でも良く分かっていないのですが、皆さんも思う所があると思うので、とりあえず晒します。

この図を見ると、色々やった形跡がありますね。しかも掛け持ちしていることが良く分かります。 (なんと凡例にない色のプロットがあり感動しますがよしなに読み取ってください。)上がる会社もあれば上がらない会社もあります。最近は1年以上額が上がっておらずちょっとつらいです。ちょっとだけ。

もちろん会社によって評価体系も様々ですが、アルバイトだとそもそも給与交渉の機会もなく、突然「契約書の更新だからサインしといてね」と言われることもしばしばです。

「上げてほしいな〜」という文脈の話を一言話しただけで上がったこともあります。そんな話を上司にするのは強気ですって? ええ、当時は立場的に強気でしたね。そりゃ突然辞めたら案件進まなくなるような仕事をバイトがやっていたんですから……

概して、時給を上げる(下げる)には、大きく「転職をする」と「給与交渉をする(上長に評価される)」の2つがあると思いますが、そのどちらもを経験した身としては、おそらくアルバイトでは転職した方が上がりやすいです。 特に、エンジニア職のアルバイトは東京では比較的募集している所も多く、引く手はあまただと思うので、うまくやるとトントン拍子に上がるのかもしれません。うまくやるのがポイントで、うまくやらないと上がりません。図からも明らかですね。

転職では人間関係をうまくやりましょう。僕は下手なので遺恨を残してしまいがちです。そんなのどうでもいいという考えもありますが、平和であることに越したことはありません。僕は最近どうにか和解しました。本当かな……

ちなみに筆者は今のところ転職する気はないです。書いておかないと深読みされそうで怖いですね。 お金も大事だけど本当に好きな働き方ができる上に恵まれている環境はなかなかないです……

また、今思うと、「言い値でいいよ」と言われたとある会社でもっと言っておくべきだったのかもしれません。そんな後悔もなきにしもあらずですが、当時は逆にあの額にプレッシャーを感じてしまい色々あったので、やはり難しいですね。正当に評価されていきたい。

ちなみに、周囲の話を聞く限りでは1500円/時以上の額はなかなか耳にしないのですが、それは月給換算すると分かりやすいですね。バリューを出している人たちがもっと貰っているのも聞いているので、バリューを出せると良いですね。

短くなってしまいましたが、僕は自分で作った図を眺めて心が荒んでしまったので許してください。

@whywaita 先輩はどんなお考えをお持ちですか? また機会があったらお話してくださいね。

明日は @yu_ki_kun_1 さんです。あれ、毎回 @yu_ki_kun_1 さんでは……?

 

こんばんは、kyontanです。お金を溜めて早く温泉付き一戸建てで暮らしたい。 この記事は whywaita […]

CoreOS で Docker Swarm クラスタを作ってみた

Infrastructure

こんばんは。kyontanです。JobHunting 活動は順調ではないので頭を抱えています。

寒いです。12月10日です。10日ということは、 whywaita Advent Calendar 2017 の10日目ということです。なんとあと1枠らしいです。

9日目は @kadokusei (~= @hyr3k) さんで 体重 - /var/log/ でした。

ところで文脈もなにもないですが Just Because! が良いです。小宮恵那さん……

さて先日、 Twitter を眺めていたところ 「真っ赤な“1/4Uサイズ”のブレードサーバーが税込4,980円で大量販売中」  という記事が流れていました。 Core i5-2520M@2.5GHz / RAM2G / Diskless という構成ですが、Intel の GbE NIC x4 があるなかなか変態なマシンです。5000円だったのでつい3台買いました。IPMI もあります。ちなみに1台当たりで RAM が 4GB でした。

kamijin_fanta さんという方がこれに VyOS on Hyper-V をやっている記事があるので、こちらもご参照ください。

赤鯖にVyos入れて最高のインターネッツを手に入れた

これは A.T.WORKS というメーカーの国産サーバで、謎です。とりあえずドキュメントとかファームウェアの更新は公式ストアのダウンロードページに転がっています。

何故かシャーシも付いてきたので適当に突っ込みます。10台入るので、あと7台追加できますね。とはいえ部屋の室温で冷却するにはこの程度の密度が限界かと……

画像の左下にある赤いやつがそれです。雑ですね。周りも汚いですね……

さて、ディスクレスとはいえ開けてみると SATAポートもディスクベイもあるので、2.5インチのHDDを買えば普通に使えるでしょう。 しかし先立つものがなく、しかし他のサーバは余っているのでネットワークブートさせて遊んでみることにしました。

PXE とは

PXE とは…… ざっくりと説明するとネットワークブートのための仕組みの1つです。 NIC に書き込まれたPXEブートローダが、ネットワーク上のサーバから OS のカーネルを取得して起動する方法です。

基本的には起動時に DHCP でIPアドレスを取得する際に、サーバが IPアドレス等の情報と一緒にカーネル等が置かれているサーバ(TFTPサーバ)のアドレスを返すことで実現されます。 いわゆる大量のPCを管理する手間を減らしたい(~ シンクライアント化したい) 大学なんかでよく見かけますね。MMA部室の端末でも同様の仕組みを採用しています。 もちろん一般的な誤家庭でも、DHCPサーバとTFTPサーバ等を立てれば実現できます。近年では PXE を発展させた iPXE などもあります。こちらだと例えばカーネルを通常の HTTPサーバから取得するようにできたりします。便利ですね。 実際の実現にあたっては、 「PXE 構築」なんかでググって頂ければ山のように日本語の資料がヒットしますので割愛します。

Container Linux

今回はこれを用いて CoreOS Container Linux を起動させ、自動的に Docker Swarm クラスタを構築したいという話をします。

Container Linux は CoreOS 社が開発している、コンテナ基盤のための軽量Linuxディストリビューションです。docker や etcd と言ったコンテナで用いるソフトウェアがデフォルトで入っているほか、fleet というクラスタマネージャ (というか分散 systemd) なんかがデフォルトで入っています。 CoreOS 社は他にも Docker Registry の Quay やコンテナランタイムである rkt や cloud-config の代替を狙っている Ignition, エンタープライズ向け Kubernetes こと Tectonic の開発なんかもしていますね。

もうお察しかと思いますが、 Container Linux には fleet というクラスタマネージャがあり、更に Tectonic があります。つまり、 Docker Swarm の文脈にはかすりもしません。イケイケな皆さんは Kubernetes を構築すると便利だと思います。 (実は Kubernetes クラスタを構築しようとしたらオンメモリファイルシステムでは容量が足りなかったので Docker Swarm でお茶を濁しています) CoreOS は今回のよう物理ホスト(ベアメタル)に対して直接プロビジョニングをするためのプロダクトも用意しています。 Matchbox です。使ってください。 今回は使いません。

起動してみる

CoreOS はもちろん PXE での起動に対応しており、簡潔なドキュメントがあります。 これに従えば簡単に起動までは行なえます。やってみましょう。

最終的なディレクトリ構造としては以下のようになります。 /tftpboot は適宜 tftp のルートディレクトリに読み替えてください。また、 pxelinux.cfg/default の内容は下に書いてあります。

/tftpboot
├── coreos
│   ├── coreos_production_pxe_image.cpio.gz
│   └── coreos_production_pxe.vmlinuz
├── pxelinux.0
└── pxelinux.cfg
    └── default

default coreos
prompt 1
timeout 15

display boot.msg

label coreos
menu default
kernel coreos/coreos_production_pxe.vmlinuz
initrd coreos/coreos_production_pxe_image.cpio.gz
append coreos.first_boot=1

さて、対象のマシンは起動したでしょうか? 手元では30秒ほど OS の読み込みに掛かったあと、OS本体が約4秒で起動してくるのが観測できました。速いです。

ただ、おそらくログインもできず、ssh もできないでしょう。直接本体に接続されている端末にログインしたい場合は、ドキュメントにある通り、 coreos.autologin を設定すれば可能です。

実際にもうこれで fleet で遊んだりできます。この状況では、 /(rootfs) がメモリ上にあるので、メモリの空き容量分しか書き込むことができませんが、メモリが潤沢にあればこの上に Tectonic や kubeadm を用いて Kubernetes を構築したりもできるでしょう。ちなみに 4GB では足りませんでした。

Docker Swarm

Docker swarm というのは Docker 本体に取り込まれたクラスタリングの機能です。複数のノードでサービスという単位でコンテナの管理が行えます。 Docker 本体に統合されているので、Container Linux に docker がデフォルトで入っているということはそのまま docker swarm mode で既存のクラスタに join させればそのままクラスタの一員となります。 クラスタにはマネージャとワーカの区別があり、マネージャは Raft アルゴリズムで分散合意を行うため、本来であれば耐障害性のためにも3以上の奇数台を用意することが望ましいですが、今回は DHCP/TFTPにしたサーバをそのまま使います。

# docker swarm init
Swarm initialized: current node (hogefuga) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-... 10.0.xxx.yyy:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

上で表示されているコマンドを起動時に入力させればそのまま docker swarm のクラスタにジョインしてくれるでしょう。やっていきましょう。 (ちなみに、デフォルトでは docker swarm のマネージャ自信もコンテナが起動するホストの1つとなります。次のコマンドを打てばそのノードではコンテナが起動しなくなります。 docker node update --availability drain)

Ignition Config

起動時に任意のコマンド等を実行する方法といえば、あの cloud-config がありますね…… Container Linux では最近 Ignition というものに置き換えられました。直接書いてもいいですが、 cloud-config の記法で書いたものは ct (config-transpiler) というコマンドを用いて変換することができます。 ちなみにオンラインのバリデータがあって、 どちらの記法でもここでバリデーションができます。

では用意しましょう。ついでに ssh できるように authorized_keys なんかも追加できます。 ssh したくない? 確かに。 ともかく systemd unit を2つ書くだけです。ところで docker-swarm-leave.service がちゃんと動いてない気がするのでどなたか教えてください。

passwd:
  users:
    - name: core
      ssh_authorized_keys:
        - ecdsa-sha2-nistp256 ...
systemd:
  units:
    - name: docker-swarm-join.service
      enabled: true
      contents: |
        [Unit]
        Description=Docker swarm join script
        Requires=docker.service
        After=docker.service

        [Service]
        Type=oneshot
        ExecStart=/usr/bin/docker swarm join --tokenSWMTKN-1-... 10.0.xxx.yyy:2377

        [Install]
        WantedBy=multi-user.target
    - name: docker-swarm-leave.service
      enabled: true
      contents: |
        [Unit]
        Description=Docker swarm leave script
        Before=shutdown.target reboot.target halt.target

        [Service]
        Type=oneshot
        RemainAfterExit=yes
        ExecStart=/bin/true
        ExecStop=/usr/bin/docker swarm leave

        [Install]
        WantedBy=multi-user.target

 

さて、このファイルを実際に起動時に渡すためには ct で変換したり、 newc 形式のアーカイブにしたりする必要があるのでやります。

$ mkdir usr/share/oem
$ ct < container-linux.config > usr/share/oem/raw.ign
$ find usr | cpio -o -H newc -O oem.cpio
$ gzip oem.cpio

結果的にでてきた oem.cpio.gz を以下のような感じに配置します。

/tftpboot
├── coreos
│   ├── coreos_production_pxe_image.cpio.gz
│   ├── coreos_production_pxe.vmlinuz
│   └── oem.cpio.gz
├── pxelinux.0
└── pxelinux.cfg
    └── default

 

また、 pxelinux.cfg/default も修正します。は以下のようになります。 oem.cpio.gz を読ませているのと、実際にそれを参照させている部分の2箇所です。

 
default coreos
prompt 1
timeout 15

display boot.msg

label coreos
menu default
kernel coreos/coreos_production_pxe.vmlinuz
initrd coreos/coreos_production_pxe_image.cpio.gz,coreos/oem.cpio.gz
# append console=tty0 console=ttyS1 coreos.autologin=tty0
append coreos.first_boot=1 coreos.config.url=oem:///raw.ign

さて、起動させて見ましょう。マネージャ側で docker node ls とか叩けば分かると思います。 いい感じになりましたでしょうか?

あとは docker service コマンドでよしなにサービスを作ってやると、いい感じにロードバランスされたりヘルスチェックしたりライブアップデートできたりすると思います。 ポートの公開をすると、マネージャを含む全てのノードでそのポートが共有され、自動的にロードバランスされます。つまり、そのサービスのコンテナが動いていないノードにアクセスしても、内部のトンネル(VXLANです)を通ってコンテナへの疎通性が確保されます。

そのあたりは「docker swarm」とかでググると出ると思います。 nginx とかでも簡単にできますね。

ところでボリュームのマウントは癖があって、 bind なんかは各ノードのローカルファイルシステムを参照します。なので、そういったことをしたい時はよしなにやりましょう。 nfs とかを検証できると良いですね。

ちなみに再起動したりするとどんどん死んでるノードが一覧に増えますが気にしないでください。気になる時は docker node rm で消しましょう。以下がワンライナーです。

 
docker node ls | tail -n+2 | grep Down | cut -d' ' -f1 | xargs -r docker node rm"

さて、今回は簡単に Docker Swarm を用いたクラスタの構築をしてみましたが、実際により大きい規模でやろうとすると Kubernetes や DC/OS (Mesos, Marathon) なども候補に入るかと思います。 そちらについてもやっていきましょう。

ところで Docker / CoreOS をプロダクションでバリバリ使うサービスに興味のある方向けに、 こんな求人こんな募集があります。もしご興味ありましたら Twitter 等でも良いのでお声掛けください。

では皆様、よいコンテナライフを!

こんばんは。kyontanです。JobHunting 活動は順調ではないので頭を抱えています。 寒いです。12[…]

資産管理術について 2017

生活

こんにちは、kyontanです。執筆時点での現金資産は 38558円 です。

今年も12月がやってきました。この記事は whywaita Advent Calendar 2017 の3日目の記事です。まだ10枠空いていますが、 whywaita 先輩、元気ですか?

kyontan / whywaita (@whywaita) って誰? という方もおられるかもしれません。彼と私は単なる大学の先輩後輩というだけで、それ以上の関係はありません。 それ以上の関係はないと明記すると怪しくて良いですね。ありません。 2日目は村山直紀さんの 自然気胸の話とか(その2) でした。 自然気胸、周りに発症している人が何人かいて、割とよくあるのかなと思っています。僕自身は入院したことは1度しかありませんが、なるべく健康であるに越したことはありませんね。  

皆さんお金は好きですか? 僕は好きです。たくさんあると嬉しい気がします。ただ、今の立ち回りとしては、仕事に求める要件は給与が高いことではなく朝遅いことです。あと早く温泉が家から湧出してほしいです。

将来はウン千万プレイヤーでバリキャリでイケイケになるであろう、尊敬すべき whywaita 先輩に必須のスキルはなんでしょうか? そう、資産管理術ですね。 バリキャリという表現からはまどかのお母さんである詢子さんを想起させるものがありますね。 彼は資産管理をしているのでしょうか。確か MoneyForward を使っていた気がします Dr.Wallet を使っているみたいです! (2017-12-03 13:45 追記)。貯蓄の額は知りません。とにかく寿司をごちそうしてください。

僕は詳しくないのですが、とくに最近はフィンテックとかブロックチェイン(これもフィンテックの文脈に入りますが)とかお金周りの技術進歩の話を目にすることも多いですね。家計簿サービスもその1つだと僕は思います。

私は資産管理に Dr.Wallet を使っています。家計簿アプリとしては他にも MoneyForward や Zaim がありますが、このアプリのイケているところはレシートをスマホで撮影して送信すると、店舗名やジャンル、額などを自動的に判定して登録してくれるところです。アプリもイケてて最高です。使いましょう。 (ただしディープラーニングでイケイケとかではなく、人力OCRみたいです…… 素直な解決方法デスネ)

read more »

こんにちは、kyontanです。執筆時点での現金資産は 38558円 です。 今年も12月がやってきました。こ[…]

2017年11月あたりの今日このごろ

雑記

こんばんは。さっきサーバーの boot パーティションが飛びました。復旧したのでテストがてら、リハビリがてら。

去年もこの時期に 2016年11月あたりの今日このごろ | monolog なんて記事を書いていたので、Advent Calendar へ向けてリハビリをしていたのか、単純に人恋しい季節なのかどちらでしょうね。読み返してみて、こんなに駄文を錬成できるのはよっぽど暇だったんだな……と思っていますが、そういうこともあります。

手が滑って whywaita Advent Calendar 2017 - Adventar に4記事も書くことになりました。そもそも日頃からアウトプットをしていきたいところですが、こうやって自分を追い詰めていくことも大事ですね。頑張ります。

ここ9ヶ月ぐらいは安定した生活を送っている気がしますが、安定というのはつまり怠惰のきっかけでもあり、ちゃんとやっていかないと人がダメになります。なりました。

もう書くことが思い浮かばなかったので 2016年11月の〜 にあった小見出しを引っ張ってきました。これは行き過ぎると 100の質問になります。

その後

近況をあまりブログに書いていませんが、 Twitter で延々書いています。先週今週のタイムリーな話としては就活をしつつ研究室をしており、まだまだ再来年の4月以降どうなるかということについては予断を許さない状況にあります。

就活をしているのかと言われるとそれも怪しく、前々より単純に興味があった逆求人に登録して様子を見ています。お肉は食べられていないです。どうやら早い人だと今年の4月とかからもう登録して色々行っていたみたいですね。出遅れた……

まだ参加はしていないですが、いわゆる 1on1 形式のイベントに3回参加させて頂くことになっており、、正直それでお腹いっぱいになるでしょう。シークレットイベントが無限にあったり、テンプレ勧誘文と足元を見るような交通費サポート設定に既に若干疲弊しました。12月ごろにまとめて書きます。ただ、1つだけ言わせてもらうと、同い年の平均的な大学生というのは平日の昼間は暇なんですか???みたいな気持ちになり、無限に???となります。

特にITベンチャーに絞ってるわけでもなく、経団連非参加企業に絞っているわけでもないので、いつ終わるのかは分からないし無限に疲弊できてコスパがいいですね。

 

スクールライフでは、そろそろ研究室配属だということに先週気付かされました。研究室は今まで全く見ていなかったので、色々あるなと思いはじめています。

選ぶ条件は興味のある分野であったり、短い間でもレベルが高いことができるかであったり、教員とのマッチングであったり様々あると思います。一方で、自分はここに行くのかなと半ば決めつけかけていたところがあり、その他の選択肢も改めてみたところ色々あるなと思い出し、視野の狭さをあらためて再自覚しています。 スクールライフという表現をしても明るくなったり希望が満ちた感じにならないですね。 とはいえ、スクールライフにしろアルバイトにしろ将来にしろ、様々な選択肢があるというのは本当に恵まれているなと思っていますし、それを無碍にしないためにも精進しないとと思いつつ……

 

人間関係はダメです。どうやるの

アニメ

2017年夏季は NEW GAME!! しか見ていた記憶がありません。ありがとう動画工房、ありがとう……

2017年秋季は Just Because!, 少女終末旅行, 食戟のソーマ3期, お酒は夫婦になってから, ラブライブ!サンシャイン!!, 妹さえいればいい をひとまず見ています。必修みたいなアニメが多い。

特筆すべきはやはり Just Because! で、完全に地元なので見ながら頭を抱えたり目頭を押さえたりしています。そんな甘酸っぱい物語はなかった。

妹さえいればいい、妹です。

漫画雑誌

1年前に比べると、百合姫やコミックキューンを読まなくなりました。百合姫は月刊化してライト化しましたね。そして終わるだろうという予想はしていましたが、まんがタイムきららミラクが終わってしまいました。桜Trick 最終話は号泣しました。ありがとう桜Trick……

篤見唯子先生のスロウスタートが来年1月からアニメ化しますね。2016年11月の記事でも一押しと書いていましたが、今年5月にアニメ化が発表されました。最高です。各位見ましょう。どのキャラも最高で、イベントスチルが盛りだくさんです。最近は十倉栄子さんを見るたびに頭を抱えています。各位読んでください

すわっぷ⇔すわっぷ も盛り上がって来ており威力の強まりを感じていて最高です。ストーリーはこちらも最高なので読んで欲しい。夏子ちゃんが好き。結構カラー率が高くてすごいなと思っており、ごちうさもそうですが単行本ではなく雑誌を読むモチベーションになります。

先日は ご注文はうさぎですか? の OVAを観てきました。ごちうさに関しては原作至上主義ですが、アニメもよく、OVAも良かったです。アニメは特に音楽と声が好きで、水瀬いのりさん、カフェラテカフェモカカプチーノ、はい。 原作は輝きがどんどん増していてなんだこれは……状態ですが、ストーリーやそれを取り囲む世界観はもはや比肩するものはない良さがあります。まんがタイムきららMAXを買ってくださいというほかない。もふもふ天国。

技術周り

死んでいます。最近は頭の回らない Issue comment を書いてめっちゃ突っ込まれて土下座する日々を繰り返していて完全に無能感が出ている。同期にも怒られが発生していてしんどい。やるしかない。

とにかくなんでもできる同期含む周囲に囲まれて無能感が出ていてしんどい。自分にしかできないのはなんなんだというのがあり、まあそんなものは無いのですが優位性を微塵も見いだせないのでつらい。

あと突然データが飛ぶのが怖くなり突然HDDを3本購入して RAID-Z にして全部移動しました。冒頭で書いた boot パーティションが壊れたという話はこれにちょっと関連していますがデータ被害はないです。今まで何の冗長化もしないまま3TB近いHDDを4本ほど運用していたということからは目を逸らして生きていきたい。精神的安寧が訪れた。

上の話に続きますが、 RAID-Z はソフトウェアにしては意外とパフォーマンスは出ている印象があります。とはいえHDDの本来のピークの半分ぐらいです。あとは ZFS というとメモリバカ食いみたいな印象がありますが、 dedup を有効にしなければ大して消費していない気がします。 dedup は入れたらバカ食いした/書き込み速度が激落ちしたので切りました。もろもろまとめてそのうち記事にしたい。

あとはなぜかサーバが3台増えたのでやりました。Advent Calendar で書きます。

その他

Nintendo Switch を入手し、スプラトゥーン2を買い、ゼルダを買い、マリオオデッセイを買いましたが全くプレイできていません。直近30日でのプレイ時間は10時間以下です。なんのために買ったんだ。年が明けたらあおかなSwitchを買います。

あおかなEXTRA1、優勝です。ハッピーエンドを真白ちゃんと迎えに行きたい。迎えました。

また、もうすぐ WHITE ALBUM の季節がやってきます。

とにかく最近は逆求人というもので疲弊しているという印象を各所に与えていますが、実際そうなので各位疲弊しましょう。良いこともある、多分。 正直なところこの会社でこれをやりたいというのはないのでアレだなと思うし、技術指向と主張するには技術ができないので頭を抱えている。人の生活が幸せになればいいと思います。

お酒は飲んでないし、最近は飲む暇がない。少し前に馬肉を食べました、良かったです。

 

とにかく消費も生産も追いつかず、心休まらない秋の夜です。秋の夜ぐらい月の明かりで読書をしたい。明日は温泉に行こうと思います。

 

♪ ハッピートゥモロー - 蒼の彼方のフォーリズム EXTRA1 VOCAL&SOUND COLLECTION - (有坂真白 (瀬良みと)) #NowPlaying

こんばんは。さっきサーバーの boot パーティションが飛びました。復旧したのでテストがてら、リハビリがてら。[…]

Wantedly のインターンに参加した

雑記

こんばんは。 最近色々あり、またあったのですが文章にしていなかったために物に残るものがない。

残していきたい/おきたいシリーズです。

Wantedly のサービス自体は比較的前(4年前?)から使っていましたが、まさかインターンに来ることになるとは当時は思ってもいませんでした。 やはり学部3年になると就活の時期ということになるわけで、スカウトを何件か頂いていたうちの1件で実際に人事の方と話させて頂いた上で決めました。

働き方、というよりはそのモチベーションを変えるというところで社会を変えようとしているというのが会社の考え(であると僕は認識しています)で、それは自分の考えとも一致するところがあり、技術的にもそこそこイケているのでは、というところが選択した理由になります。

参加したのは 9/5-22 の平日で、所用の休みを除いた12日でした。(業務委託契約なので実際にはインターンではない)

今夏はフロント/バックエンド/モバイル/機械学習みたいなコース分けがあり、とはいえ別に同じコースだからといって同じ日程であったり同じ人の下であるとは限らないという感じでした。日程も内容もある程度メンターと話し合って決めることができます。

面談で、最近のフロントエンド技術(React使ったSPAみたいなこと)には興味があるみたいな話をしたところ、なぜかバックエンドチームになり Rails を書いていた気がします。ずっとRubyばかり書いてますし、最近のアルバイトでは Rails でアプリケーションを書いていたので、そのあたりが考慮されたのでしょう。ちなみにこの話を当日したところ様々なアレがあり、最終的には最後の週にReact漬けになりました。React難しいね!

雑感

バックエンドというのはいわゆるサーバサイドのアプリケーションですが、私は Wantedly Visit という Wantedly の一番最初からある企業への訪問であったり、そのスカウトであったりというところの改善作業をしていました。 詳細は多分あまり書けないのですが、技術サイドでは BigQuery を初めて触ってクエリが実行されるごとに課金される様子を楽しんだり、そこから集計したデータを使ってごにょごにょしたりしていました。

ただ、やはり大規模 Rails というのはなかなか凄みがあって、様々な趣があり読んでいて面白いなと思いました。 そしてやはり社員の方の地力が強く、様々な点の技術判断というのはなかなかイケていると思っていました。僕が今回実装した部分についても、しっかりとデータに基づいた議論がありとても良かったです。あとは Ruby が好きなのが伝わってくるコードベースで個人的には良さみが深かったのも良かった。

最終週には前述したフロントエンドチームでも少しコードを書かせて頂き、本番へマージされたのはごく一部でしたがアイデアの PoC みたいなことをしていました。UX を良くするためにブラウザのレンダリングパフォーマンスと格闘する経験はなかったので、面白いなと思ったり。

その他

白金台MGビル、始めてきた時に強い既視感があり、Cookpad が昔ここにあったなあという気持ちになった。(フロアは違うらしい) 土地柄、やはり飯が高く1000円スタートみたいなところがあった。様々ある。

インターン期間中に上場があり、パーティーなどがありエモい雰囲気であった。

最近色々な記事がありましたが、残業しているインターンは確かに多いが別に定時に帰ろうが、それより早く帰っても何も言われない感じでした。そもそも業務委託契約なので業務時間も明記されていないし、ちゃんとやることをやればよい。そもそも残業しないと終わらないようなタスクを抱えるのはコミュニケーション/マネジメントの欠落では。 まあ、周りを見ているとこの内容でこの報酬かという気持ちにはなったりした。色々ありましたね。(ネガティブにもポジティブにも / 人事とも話した)

インターン生が多かったので色々話したりした。やはり2, 3社目としてこのインターンに来る人が多いのだなと再認識したりした。そしてやはり世界は狭い。

人事面談が毎週あったのも個人的に良かったポイントで、色々話したり聞いたりできたので、会社についてや、働くということについても色々聞けたのかな、と思う。

総括

新しい技術に触れるというよりは、どちらかというとアイデアで勝負したり、サービスを成長させるためにちゃんと数値を見ながらやる、みたいなところへ注力したインターンでした。 しかし、技術的にもある程度のレベルはしっかりと求められており、それに基づいたやっていきがありとても良かったなと言うのが感想です。 普段使っているサービスの裏側が見られるというのはやはり楽しいですね。

メンターの方との分かりややっていきもとてもあり、タイムリーなところではISUCON7 の予選も突破していたのを観測して、やはり強いなとあらためて思うなどした。

そんなこんなであっという間に過ぎた3週間でした。改めて、Visit のとある組織の皆様、メンターの方、人事の方、ありがとうございました!!!

こんばんは。 最近色々あり、またあったのですが文章にしていなかったために物に残るものがない。 残していきたい/[…]

ISUCON7 予選に参加しました

Infrastructure Programming

チーム「まだチーム名で消耗してるの?」で同期3人 (自分 @kyontan, @hogas, @h-otter) 初参加で2日目でした。学生枠突破ならずでした。

Ruby実装で挑み、最終スコア 38605点@2017-10-22 20:59:30, ベストスコア: 67792点@2017-10-22 20:44:59 でした。 ベストスコアでは予選ラインは超えていたんだなあと思いますが、最終的には伸び悩んだチームも多いようで、結局落ち着くところに落ち着いたのかなと思います。

ソースコードは kyontan/isucon7_qual です。踏み台でやっていた影響でコミッタが僕に見えますが、だいたい僕ではない。

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

ISUCON7 予選での Score / LoadLevel の変化[/caption]

次回も参加したいなという気持ちになってきたので、ひとまずはやったことを記していきます。

実は僕と @hogas は ISUCON6 の夏期講習に出たことがありましたが、そのときには日程等もあり参加しておらずということで、今回が初参加に。 @h-otter というインフラにとても強い同期がいたことや、周囲でも参加する人間が何故か多く、とにかくやっていくしかないという流れに。

チーム名を決めるところで消耗/摩耗し、本番前日までSlackはほとんど流れておらず。前日夜になって僕とか @h-otter がぽちぽち参加記やチューニングできそうなところを貼っていく感じに。

最近、正午より前に起きると早起きしたと言い出す僕が時間に間に合っていたあたりで色々とミスっていたんですが、東京都内の某所で3人で集まってやっていました。

事前にやった

とりあえずグローバルIPを持つ作業用サーバを用意しておいた。Rubyは事前に入れておいて、開始後に MySQL  も入れてスタンドアロンで動くようにした。あとあと @hogas はここでずっと作業してたり、 @h-otter が Prometheus のサーバを立てたりしていた。便利

コードについては GitHub リポジトリを立てて、普通にブランチ切ってやっていた。便利

情報共有は対面だったので、コードスニペット貼れるしリアルタイムで最高な HackMD を例のごとく使っていた。ベンチマーカの結果を全部ペタペタ貼っていたら容量制限に引っかかり、2スレ目、3スレ目が誕生した。HackMDのタイトルは**「ISUCON7 まだチーム名で消耗してるの? 2スレ目」**でした。

やったこと

ミドルウェアより下は正直 @h-otter に丸投げしていたので、アプリケーションより上をぽちぽち見ていました。 インフラについては正直何をしたのかは全容を把握していないですが、初手で nginx や MySQL に基本のチューニングを突っ込み、Prometheus で延々と監視しながらPDCAを回していたっぽい。正しいインフラチューニングや……

言語は僕と @hogas が使い慣れている Ruby を選択しました。正直クエリ弄るぐらいでいいなら Go でもいいよねーって言っていましたが、慣れてるほうが便利でした。Sinatra の文字列には幼馴染のような安心感がある。

僕と @hogas はよしなにアプリケーションコードを読みながら色々した。以下は色々

erb を haml に置き換える / hamlit gem の導入

気持ち+2000点ぐらい

初期実装が erb で、erubis に置き換えるというのも一案ありましたが、行きの車内で「erubis hamlit 速度」などで検索した結果やっぱり hamlit かとなっており、ノータイムで haml に書き換えることを決断しました。 erb2haml とかあったね〜と @hogas と話しながらやってもらった。

以下様子です

http://twitter.com/sukukyon/status/922121692440182785 http://twitter.com/hogextend/status/922125423697305600

(erb2haml はコマンドラインツールとかではなく、Rails に追加する rake タスク群ということに気が付いた様子)

nginx <-> Puma を UNIXドメインソケットに

気持ち +2000点

定番です。HTTP 5000/tcp から UNIXドメインに変えた。

SQL のクエリ改善

気持ち+10000点ぐらい

これは定番ですね。SELECT のカラムを絞ったり (@hogas)、 LIMIT を付けたり (@hogas)、インデックスを張ったりした。N+1 は手を付けていましたが、コード変更に集中できなくて最終的に投げてしまった。悔しい

終了直前にソースコード眺めてたら statement.close を意図的に忘れていそうなコードが見つかり慌てて修正した。スコア上の変化は分からず。

画像を静的ファイルに書き出す

気持ち+15000点ぐらい

ユーザーのアバター画像が DB に blob で入っていたので、雑に Ruby のワンライナーで書き出して (ここまで @kyontan)、 nginx に try_files で食わせる (@h-otter) みたいなことをした。 既に話題になっていますが、最終的には Cache-control 的な問題でキャッシュヒット率が悪かったらしい。むむむ。

SHA1 を殺す (パスワード, アバター画像)

気持ち+2000点

パスワードのソルトを生成している random_string を見たときに、これは要らないのではと思ってしまったのが始まり。初期データのパスワードはハッシュ化されていたので、 id が1000より大きい user は全て平文パスワードを DB に突っ込んだりした。 (by @hogas) アバター画像は、ファイルの内容を SHA1 したものをファイル名に使用する実装になっていましたが、もしかしていけるのではと言いながらユーザIDをそのままファイル名にしたら通ってしまったのでそのままに。

Redis (最終的に入れず)

気持ち+2000点ぐらい(?)

画像をバイナリで入れるのはまあそうだね〜〜と言いながら、Redis に載せようとしていた。正直コードの変更は大したことがないのは分かっていたので実装はシュッとできたけれど、実際に動かしてみると意外とスコアに有意な差が出なかった。その後も永続化周りで少し足踏みしていたり、他の変更を見ていたために最終的に入れられなかった。残念

アプリケーションサーバ3台化

気持ち +3000点ぐらい

@h-otter がラスト30分でイケると言い出してやってた。ここで Puma (アプリケーションサーバ) のスレッド数を調整していた (10 -> 18スレッド)時に出したのがベストスコアです。

その他

  • 再起動試験は何の問題もなかった???? 過去の参加記なんかを見てるとここが関門かなというのはあったので絶対やっておきたかった (やりました)

  • Redis に手を出してなかったのでここで不安はあまりなかった

    MySQL の Too Many Connections が割りと頻発した

  • ここは statement.close 忘れも影響してるかなと思うけれど、500が途中で出たり安定しないことがあった。最終的には安定しました

    日ごろは頭痛の頭の字もないのに、とにかく頭痛が酷かった。緊張にはやはり弱い。 JSONシリアライザが遅いのは分かっていて、 Oj を入れるぞと言いながら入れるのを忘れた。あれを入れただけでシリアライズについては数倍速くなるというのは分かっていたので、ただただつらい。 ICTトラブルシューティングコンテストでスコアサーバを延々とやっていたことが知見として生きたとは思う。DB設計なりアプリケーション設計なりチューニングなり。

  • 当時のオーバーキルなチューニングしたときの操作が生きることになるとは思ってなかった

    最後のベンチマークの結果を見て全員で嘘やんって言ってた

  • ルールを読んでなかった。次回は読みます

  • にゃーん

そういえば30分ほどですがスコアボードの上位に乗っていました。学生トップなのは分かっていたので、これは予選突破できるんじゃない? とか言いながら笑っていたのを覚えています。このあたりが後々ボーダーになるんだろうな〜という話をしていて、実際そうなったのである程度読みは正しかったのかなと思いつつ。

総括/最高

監視に強い人(@h-otter)強い。常に横で IOバウンドかネットワークバウンドか、みたいなことを見ながらアドバイスしてもらえる環境は最高。

限られた時間の大会という環境でもくもくとコードいじれる人(@hogas)強い。とにかく僕が頭が回ってなくてコードをまともに書けない状況にあったので、そんな中でちゃんと改善する変更を入れ続けてくれて最高。

基本的にどこに手を入れればいいか、この変更はコスパ的にどうかみたいなことを常に考えながら立ち振る舞えてはいたと思うので、そういった点ではなかなか善戦はできたかなと思いつつ。 しかし、できたことは山のように残っているなという感想。、途中で集中力が切れてしまったこともあり、こういう結果になったのは悔しいなと思う。

ただ、これだけ言えるというのはつまりバランスが最高だということに他ならなくて、こういった駆け引きができるバランスのゲームを作るのはとにかく難しいなと思っているだけに最高だな!!!という気持ちです。 こんな最高のコンテストを生み出してくれた運営の皆様、ありがとうございました。そしてお疲れ様でした!

本選に行かれる皆様はぜひとも頑張ってほしいなと思うところです。

 

次回は最高の♨️から最高の心構えでやっていきたい。

 

 

チーム「まだチーム名で消耗してるの?」で同期3人 (自分 @kyontan, @hogas, @h-otter[…]

ICTSC8 の運営委員を務めました

雑記

こんばんは。

に引き続きのエントリになります。ちなみに記事はないですが第5回でも運営委員を努めさせて頂いていたので、これで4回目になります。 後述しますが5回目はないので運営委員シリーズはこれで最後です。(そもそもシリーズものではないですが……)

偉そうになんやかんや語っているところだらけですが、あくまで主観だし間違いも色々あると思います。ただの記録や雑感として受け取って頂ければ幸いです。

read more »

こんばんは。 第6回 ICTトラブルシューティングコンテストの運営委員をしていました ICTSC7 の運営委員[…]

第50回 情報科学若手の会に参加しました

雑記

こんばんは。現地時刻はJST 3:15ぐらいですが、最近はUTCで生きている気がします。そういえば21歳になりました。

さて、第50回 情報科学若手の会 (...) | 情報科学若手の会 というものがあります。 詳細はリンク先の説明に譲ります。

毎年この時期にやっていることは以前より知っていましたが、秋の花火を打ち上げる諸用と被っていたことが理由で参加できずにいました。 今年はかぶらないという事で、参加させて頂きました。

雑感

カジュアルではありながらも、少しでもアカデミックに若干寄ったイベントというのは初めてで、質疑応答の時間も長く、新鮮なイベントでした。

特に登壇者層は若手から若手(ではないが夢がある者)へと幅広く、話題もノンジャンルといって良いほどに幅広いものでした。ブロックチェーンやAIといった最近流行っているテーマから、人生戦略、ECMAScript, 研究支援, 地政学, 量子プログラミング, 考古学, オフィスを建てる, ... 様々ありました。

交流の時間も非常に長く、また幹事の方々が考えられた交流イベント(QRコードへ付箋を貼りつつ戦っていく、往年のバーコードバトラーのような何か)もとても盛り上がりました。ありがとうございました!!

また、ナイトセッションでは酒とエモい話が並び、大変にNSFWな感じで良かったです。

登壇した

そして、やはりイベントに出るからには登壇する必要があるようで、気がついたらショートセッションの枠へ登壇登録をしていました。しかも実際にはショートセッションを2つマージし @h-otter と合同で登壇するという暴挙にでていました。 内容としては、ICTトラブルシューティングコンテストの紹介と称してざっくり歴史をまとめつつ、自分たちが参加した会でのやったこと、辛かったこと、上手く行ったことなどを順に追っていく成長記録のような感じでした。2年間ですが、色々あったのかなあと思いつつ、やはりマネジメントは難しい。 ロングトークのマネジメントも難しいですね、精進します。

スライドはこちらです。HackMD (Reveal.js) なので一覧性が低く申し訳ないです :bow:

雑感その2

会場の Wi-Fi も非常に快適で、やはり Aironet は最高という気持ち。そのまま勢いで自宅の Aironet をギガビット対応させるべく電源を購入しました。

やはりこういう少し変わったイベントには少し変わった人が多く来るという(主観的な)偏見があり、実際そのように様々な人と話すことができました。しかしコミュニケーションは難しい、やっていきたい……

その他、次年度の幹事になるなどのイベントが発生しました。マネジメントつらいという話をするとマネジメントをする側になるのだなあとしみじみ思う次第です。どちらかというとオーガナイズよりな気がしますが、楽しんだもの勝ちなので全員で楽しんでいけるような会にしたい……!

やっていくぞ。

 

私信になりますが、もうすぐ就職か院進かというところで色々な悩みが発生したりしなかったりしています。 フィーリングでやっていきますが、もし何かお話等ありましたらご連絡いたしましたら幸いです。

こんばんは。現地時刻はJST 3:15ぐらいですが、最近はUTCで生きている気がします。そういえば21歳になり[…]

Zabbix で収集したデータを Datadog へ投げる

Infrastructure Programming

こんにちは。これを書いているのは JST 4:30 ですが、最近は JST+0900で生きているので、昼間です。そろそろ夕方でしょうか。 最近の仕事の成果は Zabbix に投げ込む XML をエイヤで自動生成するような何か、もしくは SQL を生成する何かです。

成果物は kyontan/datadog-zabbix-history です。

長い前置き

ところで皆様は Datadog を使われていますでしょうか? インフラ監視系の SaaS やソフトウェアというと、今挙げた Datadog を始め, Mackerel や Zabbix, Nagios, AWS Cloudwatch 等々、現状では様々なプロダクトが存在しています。最近だと Datadog や Prometheus の名前をよく見かける気がします。

そんな中最近、自分のバイト先では使われているのが Datadog です。サーバの監視なんかだと、 Integration の種類も多く、デフォルトで様々なメトリックが取れることや、ダッシュボードの見やすさなどがイケているかなと。 特に SaaS だと、バッファリングがあるにしてもメトリクスの抜け落ちや一時アクセスできなくなる問題などはあり、クリティカルなものを全部載せるわけにもいかず、ただ SaaS の恩恵は受けたいというのが正直なところでしょう。 (mackerel-agent のログを眺めているとたまに何故か 404 が返ってきていて笑います)

ただ、設定が複雑化したり、そもそも設定数が多くて移行がダルいというのが正直なところです。エイヤでやる体力があれば良いですが、ホスト数が増え、監視項目が万の単位であるとそれはそれは……

おそらく皆さんは Zabbix のアイテムやらなんやらを XML で書き出してごにょごにょしたり、それを Prometheus の設定にいい感じに変換する何かを書いたりされているかと存じます。そしてそんなコードは短いから/特定のドメインに特化しているからと公開せず、誰もが誰かは書いているだろうと思いながら書いていることでしょう。そうですよね?

今回ご紹介するのはそんなあるあるプロダクトです。やることは記事のタイトルに書いてありますね。

本編

最初にも書きましたがこれ (kyontan/datadog-zabbix-history) です。実装としては、Zabbix の DB からメトリクス (Zabbix でいうアイテムのヒストリ) を勝手に拾ってきます。 いい感じに動きます。良かったですね。

現状イケてないところが1つあって、 dd-agent は独自の組み込み python を使うので pip で入れたパッケージを読んでくれません。インポートパスを弄ります。良くないですね。

まだ、とりあえず動くというところなので、様子を見ていきたいですね。

こんにちは。これを書いているのは JST 4:30 ですが、最近は JST+0900で生きているので、昼間です[…]

総資産を Dr.Wallet から Slack へポストするようにした

Programming

こんにちは。JST+11で生きているので昼です。 ところで最近は世界から10年遅れて Rails に入門したり、それとは関係なく Sinatra のアプリケーションに RSpec を書いてテストの重要性を感じながら七夕に笹の葉ラプソディを見たりしています。10年前って単語がよく聞かれる今日このごろです。

皆さんはおそらく何らかのチームでのコミュニケーションに Slack を使っていて、総資産を Dr.Wallet で管理されていて (ここで読者の8割が脱落)、その総資産を逐次仲間に共有したいですよね! (残存者0)

で、やっぱり皆さんも共有したいでしょう、というわけで作りました。

(実は1年ぐらい前に作ってあったのですが、環境依存が辛かったので Docker に押し込む作業をしました) GitHub kyontan/assets2slack 雑に docker-compose run --rm crawler とかやると共有できて便利です。

assets2slack demo

おそらく最近のアプリケーションなので docker-compose.yml が置いてあります。ポジショントーク?じゃないですが、こういう環境作りが面倒くさいアプリケーションの共有には向いていると思います。 1コンテナにまとめたかったのですが、少し面倒くさそうだったので投げました。PRお待ちしています。

実装は至極簡単に、 Ruby あるあるな capybara + selenium-webdriver で雑にクロールして Webhook で投げているだけです。技術に新規性はありません。

話が逸れますが、 Dr.Wallet のレシート人力OCRは精度も良いしおすすめです。あと、どうやら iOS より Android アプリの方が3倍ぐらい機能が充実していて便利です。NFC で Suica も読めるし。

皆さんもこれを使って総資産で殴り合っていきましょう。僕の総資産はたまにマイナスになります。

こんにちは。JST+11で生きているので昼です。 ところで最近は世界から10年遅れて Rails に入門したり[…]

文脈と情報の伝え方、そしてWikiの雑感

雑記

TL; DR

(某アドベントカレンダー120日目?の記事です。自己紹介を端的にするとインフラをやっているおそらく部署内で唯一の非内定者アルバイトです。)とにかく情報共有というのは難しくて、特に文脈を伝えるのが難しい。 現状自分はなんとかやっているが、アルバイトとかリモートとかそういう立場だと特に難しいなと感じているので思っていることを書いた。 大きく階層化Wikiと非階層化Wiki に分けられると思っていて、僕は階層化Wikiが好きだけれど、最終的には非階層化Wikiが勝つと思っている。

結論は出ていなくて、これは問題提起です。

以上

本文

こんにちは。記事を書いている今は2時です。

インターンでも内定者アルバイトでも正社員でも契約社員でもなく、自分の立場についても考えつつの kyontan です。

最近、コンテストの運営であったりバイトであったりと、何かと複数人で情報共有をする機会が多いです。 これが必要になるのは自明で、なぜなら1人でできることの幅が限られているからですね。 1人であればちょっとしたメモで事足りるようなことでも、複数人で共有するとなるとコンテキストが共有できなくなったりします。 (1人だからといって雑なメモで済ませると、それはそれで後々読み返した時にわからない問題が考えられますが、今回は考えません。関連はしていますが……)

このコンテキストの共有、というのが目下の自分が直面している最大の課題です。多くの情報にはコンテキストがついて回るのですが、なかなか重要性が理解されていないものでもあります。 コンテキスト、日本語で言うならば"文脈"であり、言うならば文章のバックグラウンドとでも言えばいいのでしょうか。事前に知っておくべき情報や、それを知るにあたり知っておくべき情報、というのがこれにあたるかと思います。

これらをどのように表現するか、というのが目下の大きな課題です。例えばプロダクトの開発であれば、ある実装に対して、たまたま開発者のスキルレベルが不足していてその実装になったのか、はたまた何らかの事情がありそのような実装になったのか、そしてその実装をする必要が"今"はあるのかどうか、などというのは実装上には現れない情報として表現されます。 プログラムであればこういったことはコメントやアノテーションで表現すべきですね。最近であれば正しくTDDが回っているような開発では、テストが通る限りどのようにリファクタリングをしても問題がないかもしれません。

しかし、それがプログラムの外の情報だったらどうでしょうか? たとえばビジネスやお金の話、コードでは書けないような交渉など、なんらかの事情があり今の形になっているにも関わらず、その理由が明文化されてないことが多いのではないでしょうか。 こういった状況で、かつ何も背景情報が伝わっていない人がその背景を理解している人に代わってその状況に対処することは難しいといえるでしょう。 もちろん、対面のコミュニケーションによってもしばしばこの問題は生じます。特に自分のような週に1, 2度しか業務に関われない立場では、タスクを割り振られるたびに、そのタスクの必要性を聞く必要が生じます。

チーム開発において、このようなことは多々存在し、これを上手く伝える方法を僕は模索し続けています。 そこで必要なのがドキュメントです。しかし、プログラムのソースのように何らかの書くべき場所が指定されていない、というのが大きな問題でもあります。

一般的にこのような状況で使われるツールは情報共有ツール(そのままですね)や、コラボレーションツールと呼ばれることが多いでしょう。領域によってはグループウェアと呼ばれることもありますね。 Wiki というのはドキュメントの1つの形態であり、どのような形であるべき、というのは定義されていない(と私は認識しています)が、それに関わる複数の人間が編集できる情報の保存場所として有用であると考えています。

Wiki を作るソフトウェアとして、日本では PukiwikiMediawiki  (これは Wikipedia で使われていますね) などが有名かと存じます。最近では Crowi なんかがあり、自分はとても気に入っていて、冒頭で書いたコンテストの情報共有にはこれを導入して3回に渡り使い続けています。 他にも、あまり Wiki という呼び方はされていない気がしますが、 esa なんかはこの部類に入るでしょうか。 これらの Wiki の共通点として挙げられるのが、「情報に階層があることを前提としている」ということです。

これの共通点に着目し、対抗(?)として作られたのが Scrapbox でしょうか。実は使ったことがほとんどなくて、まだ言及するに至らないレベルなので明言は控えさせて頂きたいのですが、非階層型Wiki として出てきた印象があります。(参照: 階層整理型WiKiはスケールしない - 橋本商会 - Scrapbox) 似たような特徴を持っているものとしては Qiita (or Qiita:Team) なんかも近いでしょうか。 また、Kibela のような、Wiki(集団として共有すること) と Blog(個人の備忘録, ポエム) を分けて記録できるサービスも存在しますね。

では非階層型Wikiはどのように情報を結びつけるのか、という話になりますが、基本的にタグを元にしたページ間の N:N の結びつけをすることが多いです。 階層型であると、どうしても親ページ(ディレクトリ)に対する 1:N の結びつけになってしまうので、そういった点においてタグという仕組みが有利なのではないかと考えています。

人間の記憶自体は後者に近い有機的な繋がり方をしているとされていますが、実際にそれを情報として書き出す時に、どちらの方がやりやすいでしょうか。 私は Crowi を使っていると書いている通り、(個人的に)書き出しやすい、情報の見通しが効く(ツリーで構造を可視化でき、親情報を見通しやすい)という点で勝っていると考えています。 非階層化Wikiは、たしかにタグ付けをすることにより階層化Wikiに比べ有機的な情報の繋がりが作れると考えていますが、適切なタグ付け、および関連ページの表現方法においてまだまだ難があるのではないでしょうか、どうなのでしょうか…… ただ、最終的には人間の思考に近い形の保存形態が残っていくのでは、と思っています。こういった非階層型Wikiの動向にも目を離さず追っていけたらと思う次第です。

話が飛んでしまいましたが、結局、どのようにして我々はコンテキストを共有すべきでしょうか。 階層型Wikiの利点として、正しく階層化されたWikiであれば、該当のページに至るまでの階層にそのコンテキストが埋め込まれていると期待することができる点が挙げられます。 では、果たして非階層化Wikiではどのようになるのでしょうか? 実際に自分が体験をしたことがないのですが、適切なタグ付けがされていれば、関連したタグのページを数ページ辿ることにより、階層化Wikiと同様の情報が得られるでしょう。 また、関連したページから関連したページにもジャンプすることができるでしょう。 ここで難しいのは、階層化Wikiにおける適切な階層化と、非階層化Wikiにおける適切なタグ付けがどちらも属人化した能力であることです。 これは何もWikiに限った問題ではありません。SlackChatworkといったチャットツールにおいても同様の問題があります。皆さんは適切な粒度でチャンネルを分けることができているでしょうか? その適切なチャンネル以外でそれに関連した情報は流れていないでしょうか? リモートワークにてもしばしばこのような問題は生じます。最近は特に一部のメンバーがリモートな場合にどうやって情報を共有するか、テンションや気持ちを共有するか、という点に注目したブログ記事が多く散見されます。

この問題が解決しない限り、情報共有が難しいという認識を私は崩すことができませんし、解決すべきテーマであると感じています。 これらが技術の進歩によるアシスト、ないし人間のこれらの問題に対する理解によってより良い方向になることを願います。(もちろん願うだけではダメなので、やっていくしかないんですが。)

途中で日本酒を3合ほど入れた結果文体が崩れ、主語が大きくなり問題も大きくなりました。実際問題は大きいので、各自認識してやっていきましょう。

TL; DR (某アドベントカレンダー120日目?の記事です。自己紹介を端的にするとインフラをやっているおそら[…]

ICTSC7 の運営委員を務めました

雑記

こんにちは。

ICTトラブルシューティングコンテスト という学生が主体となってインフラやサーバに関するトラブルを起こして、学生が解決する(雑) な大会がありまして、その第7回、通称 ICTSC7 の運営側として参加してきました。

ちなみに、この前説は以前書いた記事からコピーしたものを数字だけ変えただけです。

実際に大会の本選が行われたのが 2017/3/4, 5 (土日) でしたから、もう2週間が経ったわけです。忘れないうちに書き残して置こうと思います。

今回もフォトレポートを始め、参加者や運営委員の方々がレポートを上げてくださっているので、そちらもご参照ください。

NTT東日本杯 ICTSC7 レポートまとめ

さて、改善点が多かったかと思えば最終的には反省点の山になり、上でリンクした記事を読み返したところ陰鬱な気持ちになった前回という大会がありました。それを元にして、今回はどうやって動いたんだお前という話です。

ちなみに活動期間ですが、2016/10/1 に運営委員結成開始, 2016/10/29, 30 にキックオフ合宿, 2017/2/18 より HotStage開始, 2017/3/4, 5 が本選でした。キックオフから数えて、4ヶ月に渡り活動していたことになります。

役割

今回、私はインフラリーダーとして、リーダー, 副リーダーの下にいる3つのリーダー職 (インフラリーダー, 問題リーダー, イベントサポート) の1つを勤めさせて頂きました。 改めてこれらの役割をまとめてみます。

リーダー, 副リーダー: 全運営委員 (今回は22名, ちなみに前回は16名) の指揮をする。また、機材折衝であったりイベント全体に関わる様々な部分において、実行委員(大人側)と調整を行う。 問題リーダー: 運営委員によって作問された問題の品質を保証するのが目的。スケジュール管理や問題のバランス調整が主な役割ですが、今回はシナリオ作成も行ってくれました。 イベントサポート: おそらく機能したのは今回が初。リーダーが今まで全てを担っていた機材折衝や管理の大部分を受け持ち、その他会場側との調整や、当日の段取りなど、実行委員側にお任せしていた内容を学生側でできる限り受け持つという目的のもと、それを主導する立場。 インフラリーダー: 問題を出題する基盤となる、会場ネットワークの L1 ~ L7 を設計/実装し運営委員および参加者に提供する、インフラ担当の運営委員のトップ。

各役割は確か運営委員が結成して1, 2週間ぐらいで立候補形式で決定した記憶があります。 あと、副リーダーが役職上しか存在していなかったという噂を聞きました。そういうこともあります。 忙しさの順序で言うと、問題リーダー>イベントサポート>=リーダー>=インフラリーダー ぐらいになるんじゃないでしょうか。あくまで今回の僕からみた主観的な感想です。ピーク値で言うと本選直前のイベントサポートが一番忙しそう。

やったこと

そんな中、自分が今回何をしたかを書いていきいます。 端的にいうと、前回は副リーダーとして色々やり、やらかしましたが、それでも僕は前回の基本的な方針は間違えていないという信念を持ち、できる限り近い方針で運用をしつつ、それでいて自分でほとんどタスクを持たないようにしました。

情報のやりとり

インフラリーダーがやることなのか分からないですが、やりました。 前回は Slack, Crowi (Wiki), Trello (ToDo管理), Google Drive (ドキュメント管理) の4つを主に使用していたはずですが、Trello を結局うまく使えず最新の情報が抜けまくってたのでやめました。 つまり、Slack, Crowi (Wiki), Google Drive の 3つで運用しました。

ICTSC7 Slack チャンネルの一部

例のごとく Slack は最高のチャットツールですが、ちゃんとチャンネル戦略を練らないと一瞬で破綻するのでちゃんとやります。 具体的には左にあるはずの画像のような感じです。プレフィックスを良い感じにつけて、適度にサブチャンネルを付けると良い感じになります。(例: #infra 単体にしてしまうとサーバやネットワークといった異なる話題がごちゃ混ぜになってしまうので、 #infra-server, #infra-network を作るなど) 今回は問題のチャンネル #problem-xxx を作り、その中で各自が検証の進捗を書くようにしたのが新しかったでしょうか。あと、前回は HotStage (本選2週間から東京へ運営委員が集まり、インフラやらなんやらの直前準備を行う機関) に #hotstage-XXX チャンネルを色々作っていたのですが、既存のチャンネルとの差別化ができなくて混乱したのでやめました。 最終的なチャンネル数は 73チャンネル (うち分報15チャンネル, 問題個別21チャンネル) でした。メッセージ数は約47100メッセージ, うち59%が Public Channel でした。(前回は約48900メッセージ, 67%)

ICTSC7 Wiki Portal

Crowi は最高の Wiki だと思います。ちょうど ICTSC7 が始まる前に 階層化 or 非階層化論争が再び起こり、Scrapbox も最近流行っているのかな、という感じはします。ただ、前回運用した知見があることに加え、前回の100ページを超える知見が溜まっていることは大きな利点だと感じ、前回の Wiki を継続して使用しました。 Wiki 自体は前回の運営委員がアクセスするものとは異なるものを同じデータをクローンして作り、 /ictsc7 という階層を切っただけです。 今回だけで新たに 144ページが作成されました。これは個人的にはとても驚いていて、前回は全体の147ページの半分以上を自分が書いていたはずですが、今回は自分が書いたのはたかが10ページ程度だったので、そこまでページがあったとは思わなかったからで。 今回は大人も含め積極的に Wiki にまとめるということをしてくれていた気がします。 ただ、まだまだこの運用, Wikiには改善すべき点があると思っているので、どうにか模索したいところです。 (例えば各ディレクトリ以下の情報をうまく収集して表にできたりすると、一々2つのページを手で更新しなくてよくて便利、など)

Google Drive は言わずもがなですね。基本的に Docs, Slides は使用しないので、 Sheets ばかりを乱用します。 IPアドレス一覧であったりネットワークの管理はやはりスキーマがある方が圧倒的に便利ですし、Markdown の表はめっちゃ使いづらいので、やはりリアルタイム同期ができて実質 Excel な Sheets は最高です。Conditional Format を使うと割りと楽に綺麗にできるのも評価すべきところ。 今回は1つのドキュメントにIPアドレスからVLAN設計からなにまで全部を詰め込みました。(今回は使っていませんが)シート間参照ができることと、別の内容を開きたい時にドキュメントを開き直さなくて良いのがメリットですね。ドキュメントを開き直さなくていいの、自明でしょという感じはしますが、Google Sheets の読み込みは結構重くてなんだかんだ10秒ぐらい奪われるのでシート切り替え1秒なんかで済むのは結構大きい気がします。逆にまとめることによるデメリットも今回だとないのかなと。

あとは、恒常的には使っていませんが HackMD はそこそこ使っていました。ミーティングの議事録なんかはこれで取るとリアルタイム同期されるのもあって便利です。

ちなみに、情報のやりとりがスムーズにできるとだいたいのことは良い感じに行く気がします。でもモチベーションの維持が大変ですが……

インフラ

インフラリーダーとして何をやったかというと、基本的になにもしていません。 インフラリーダーがそれでいいのか良く分からないんですが、今回の運営委員はインフラに強そうな人がたくさん居たので、多分任せたら良い感じにいくんだろうなって思いました。 おそらく僕がすべきだったのは進捗確認だったので、進捗確認と次にやるタスクの明確化だけは常に行いました。ミーティングについても、全体でのミーティングが月1程度だったのに対し、インフラ担当の中ではその倍の頻度である2週に1度の頻度で行いました。(週1開催という目標は達成できませんでしたが……) あとは一部機材折衝をしましたが、実際僕がやったのはここまでなので、実際にどういうことを運営委員全体としてしたのかをつらつら書きます。

ちなみに大会ネットワークというのは結構自由なもので、スター型であろうがフルメッシュであろうがリング型であろうが、気合さえあればやることができます。コンテストのルールすら自由に変えられますからね。

ちなみに前回 (ICTSC6) の HotStage 末期には、テンションが壊れた運営委員が「次回はオールSDN, オールIPv6, オールBGPでやるぞ」などと叫びこんなホワイトボードを書き残していましたが、知られていません。消したら消えました。当たり前ですね。

夢 (ICTSC6)

さて、今回は SDN やってみようぜ! というテンションの元、いくつかの SDN 技術の検証なんかを最初の2ヶ月ほどを使ってやっていました。具体的には Midonet, OpenFlow, QinQ (これはSDNではない) なんかを検証し、どうにか取り入れられないかと試していました。結局色々な制約があってだいたいなくなったんですが、実は OpenFlow は競技ネットワークの片隅で動いていたりしました。参加者の皆さん、ご存知でしたか? ラックの上部にハードウェア OpenFlow スイッチがマウントされていたことに気が付いた方は何名いたのでしょうか。でも実際に OpenFlow が動いていたのはそれではなく、下から3番目にマウントされていたラックサーバです。すみません。

競技ネットワークには、プロビジョニングを簡単にするという目的のため、各チームのVMがそれぞれ同じIPアドレス, ネットワークアドレスを持つ設計になっていました。つまり、同じネットワークアドレスを持つネットワークが15個 (=チーム数) 存在していました。運営ネットワークからこれらのVMを区別してアクセスするため、VLAN ID を利用してIPアドレスを書き換える不思議なNATが前回に引き続き今回も存在しました。前回はこのNATの実装として、Linux の netfilter に適用するカーネルモジュールが書かれていましたが、今回はこれを OpenFlow を使った Open vSwitch での実装に置き換えました。コントローラーは Python の ryu でした。

話が飛びましたが、ネットワークの設計について、最終的には ICTSC6 の基本設計を踏襲しつつ、実装する技術の選定からはゼロベースで行う方針になりました。基本設計は基本的に毎回ゼロベースでやっても同じ結論に帰結することが多いので、そこの手間を省き実装に時間を割いたということになります。

実装がどう違うかというと、例えば前回使っていた Apache CloudStack が OpenStack Newton に変わる程度の変化がありました。これは大きな変化で、途中 Horizon というコンポーネントがなかったことにされる程度の些事はありましたが、期間全体を通して安定動作し、再構築も容易な OpenStack はやはり良かった気がします。(前々回も OpenStack でしたね。ちなみに前々回使ったときは諸事情あり Neutron が使えませんでしたが、今回は使えました。時代の進化を感じます) その他、過去2回に渡りインフラの都合で出題できていなかった IPv6 にまつわる問題を出題するため、コアネットワークに IPv6 を割り当てました。OpenStack の VM には必要性がなかった(+やはり不安があった)ため割り当てませんでしたが、Ocata では IPv6 Full Support らしいので、次回こそはあるかもしれませんね。また、これに伴い、対外接続を提供頂いた Home NOC Operator 様には グローバルIPv6 アドレスの割当を頂きました。ありがとうございました。

ICTSC7 無線LAN

また、会場で提供している無線LANから問題VMの提供されているネットワークへの疎通性を持たせたりもしました。少なくとも僕の知るICTSCである限りの直近3回でこれができたのは今回だけです。それに伴い、802.1X で良い感じに認証してそれぞれのチーム, 運営のVLANへ繋がるようになっていました。 802.1X にすることで、参加者がLinux マシンを持ってきたら繋がらないのでは? という懸念がありましたが、幸い Linux マシンを持ち込んだ参加者は Network Manager で無事接続できたようです。ちなみに FreeBSD なノートPCでも繋がったらしいです。 ただ、残念ながら、Network Manager の入っていない Arch Linux を使っているとある運営委員の ThinkPad では繋がらなかったらしいです。

そういえば DNS の構築は僕がやりました。今回は NSD をコンテンツサーバとして、Unbound をキャッシュサーバにしてやったみたいです。ゾーンファイルなんかは自動生成で適当にやるようにしたりもしました。ドメインがあるのは結構便利で、作業効率が若干上がった気がしますし早めに導入しておくと良さそうですね。 え、Unbound + NSD は TAB問題だって? そりゃ DNS構築したときにハマったものを問題にしたんだからそりゃそうです。HotStage にねじ込んだらどこかの会社の1問目になっていてびっくりしました。 ちなみに解答としては、SELinux を無効にする (or 有効にした状態で 10053/UDP を NSD が Listen できるようにする)、iptables で 53/TCP, UDP を許可する、 unbound.conf へ insecure-domain を追加する、nsd.conf172.16.0.0/16 がミスタイプであることに気が付き、 172.16.0.0/12 に直すで満点です。文脈がわからないと何も分からないですね。 ちなみに半分ぐらいのチームが解いたみたいで、半分のチームは2問目以降へ進めなかったということになりますが、上の通り初歩的なミスを連続でやらかしているだけなので、頑張りましょう。

問題といえば、KYF問題は面白かったですね。これは僕がキックオフで酒を飲んでした発言を本当に実現されたもので、WoLパケットを送るとVMが起動するっていう、何が起きてるのか分からない問題です。実際にはネットワーク上に隠しVMが居てパケットをキャプチャしていて、WoLパケットを拾うと OpenStack Nova API を叩いて VM を起動しているんですが、ここまで説明しても凄いのか良くわからないですね。でもその実装力はすごいと思います。

また話が逸れましたが、競技用ネットワーク全体でBGPルーティングされたりもしたみたいですよ。

ところで、ここまでを振り返ってみて、何かに気が付かないでしょうか。

夢 (ICTSC6)

今回のネットワークにおいて、IPv6 はコアネットワークと参加者の手元に到達性があり、OpenFlow が組み込まれ、BGPが周り、そしてRadius認証のある無線LANが提供されました。つまり、夢はだいたい叶ったということです。 実際、前回こんなことを言っていたときには、こんなの叶うわけがないというニュアンスで笑いながら言っていましたし、そもそもこの話は今回の運営ではしていないので、本当に偶然なのですが。

結局、大会のインフラというのは合理性を取ると本当に何もなくなってしまうので、できる限り参加者に楽しんでもらえるように面白い要素を詰め込みつつ、いかに無駄な作業を省き、いかに面白い技術を取り入れ、そして安定したネットワークを参加者へ提供するかというところに向かっていくのが理想だと思います。そういった意味で、今回のコンテストはルールの面を始めとして参加者へ面白いものを提供し、インフラは結構面白いことができ、そこそこ自動化され、ちゃんと安定していたので良かったのではないかと。

次回はどうなるのか楽しみですね

コンテストサイト

今回もやりました

ICTSC7 コンテストサイト

アンケートを見る限り概ね好評だったようで、良かったです。初日の朝のミスは頭が真っ白になりましたが、git push してなかっただけでした。 基本的に前回起きたパフォーマンス系の問題 (真面目にRESTしすぎてDoSになった問題) を解決しつつ、今回のルール変更へ対応し……というのを真面目にやりました。具体的にはスコアボードを実装したり、問題の公開条件を変更(時間による条件を廃止し、問題を解く度に次の問題が公開されるようになった)、みたいなところを修正しています。 その他、真面目に SQL を勉強して ActiveRecord に泣かされたり、前回参加者に怒られたのがトラウマになったのでパフォーマンスチューニングをそこそこ真面目にやって5台の物理サーバを使い60物理コア, 120スレッドの環境で分散させたりした結果、Sinatra アプリケーションにもかかわらずエンドポイントによっては 1000req/s を優に超えたり (30~10000req/s) しましたが、実際には20req/s を超えることはほとんどありませんでした。ちゃんと負荷を見据えてエンドポイントを設計しなおしたのが功を奏したので、良かったです。 あとちゃんとリクエストやら負荷やらを Zabbix + Grafana 可視化したりしてくれてました。

ICTSC7 コンテストサイトの負荷の推移

懺悔になりますが、前回に引き続いてデザインとフロントエンドを実行委員の方へ丸投げお願いする形になりました。また直前で負荷を掛けさせてしまい、すみませんでした……。フロントエンドが Angular2 から Vue2 に変わったのは何かの陰謀です。

ドキュメンテーションとリファクタリングとテストコードはこれからやります……。

まとめ

こんな感じで、僕は前回と同じでコンテストサイトの開発に没頭していたICTSCでした。 全体としてもトラブルなく終わったと思っていますし、成功に終わったと言って良いでしょう。

まだまだやるべきこと、改善すべきことはありますが、ひとまずここまで。

ここに来るまでご尽力くださった、ICTSC7 のスポンサーの皆様、実行委員の皆様、そして支えて下さった運営委員の皆様へ感謝します。ありがとうございました。

こんにちは。 ICTトラブルシューティングコンテスト という学生が主体となってインフラやサーバに関するトラブル[…]

バイトを辞めました (その2)

雑記

10月にも似たような記事を書いた気がしましたが、似たような話です。

記事の間隔を見ると3ヶ月で辞めたように見えますが、今回やめた会社の方が圧倒的に居た期間は長かったです。(約2年) 掛け持ちをしていると、「弊社」という発言の真意が取りづらくなってややこしいですね。

スケジュール感

2016/秋頃: 辞めたくなる (後述) 2016/12/12: 直属の上司に辞める旨を伝える 2016/12/xx: 取締役に辞める旨を伝える 2016/1/30: 最終出社日 2016/1/31: 退職

前提

ちなみにどういう会社かというと、都内にあって、受託メインで、ゲームやアプリ開発なんかもやっている、至って普通(?)のIT企業です。研究所系の案件が多かったのが特徴的でしょうか。(Webサイトに書いてあるので公開情報) 社員数は20名程度で、毎年、原則として社員の平均年齢がインクリメントされます。 n次請け案件はあまりなくて、基本的に1次, 2次程度の案件が多数, フレックスタイムが 12:00 - 15:00 なところは珍しいでしょうか。

働き始めたのは、高校3年生の春 (3月) でした。3月というのはつまり卒業直前ですね。そこまでスキルがなかった自分を雇ってくれるところは他になかったでしょうから、ありがたいと思っています。

入ってからは、どこぞの iOSアプリをコードベースで0から書いたり、OpenGL ES でシェーダーをごりごりしながら OpenGL 1.0 のソフトウェアを iOS へ移植したり、Java の炎上案件の火消しを手伝ったり、CUDA のコード書いたり、C++ x OpenGL なソフトウェア開発やら高速化やら、2万行の jQuery と格闘しながらフロントエンドの改修・機能追加なんかをしたりしました。 退職直前の作業PCは Xeon E5 x2CPU でRAMが 64GB で GeForce GTX1080 の 2枚刺しでした。はやかったです。 設計はあまりしていないので、純粋にプログラマーだった気がします。しかし自分が書いたコードがそのまま仕様になったことは数知れず、うーん…… あと、受託とはいえ、2年間の業務の9割近くは 1つの iOS アプリの開発・改修をしていました。なので辞めた理由もこれに大きく影響しています。Now Available on App Store for Freeですので是非ダウンロードしてください。何とは言いませんが。

辞めた理由

自分の仕事に対して、貰える額が見合っていないと感じるようになったからというのが最大の理由です。

自分は開発経験もほとんどありませんでしたし、その勉強時間は業務時間内に頂けました。 しかし、勉強をして、その結果としてコードを書いたとして、それがどんなに稚拙であっても動いていればよく、レビューされることは全くと言っていいほど無いわけです。 これは受託ならではの特性だと思っていて、瑕疵責任はあるにせよ、見た感じバグなく動いていれば、中身はどうでもよく、納品すればそれっきりだからというのが大きいのではないかと思います。

特に、 iOS なんかは社員の人ですら経験者がほぼ0でしたので、むしろ社員の人が自分の書いたコードを元にコードを書くようなことがありました。 結局、数万行(これが多いのか少ないのかは判断に困るところですが)のコードをほぼ1人で書いて、しかも納品してそれっきりではなく、その後の退職直前までの改修をほぼ1人でこなしました。 (ちなみに愚痴を言うと Objective-C で iOS 7 サポート, 著作者表記必須ライブラリ使用禁止縛りです。つらかった……) もちろん自分が書いたコードが完璧だとは全く思わないわけで、むしろ自分のような初心者が書いたコードなんてクソですから、ちゃんとレビューをされたいし、効率の良い書き方を知りたいわけですが、そのような機会に恵まれることはついぞなく、延々と master へ svn push し続ける日々が続いていました。 まあでも、当時はそんなものかと思っていました。

危機感を持ち始めたのは昨夏。 自分が試験期間なのでバイトを休み、1ヶ月後に再び来たある日、リポジトリには iOS ができる派遣の人が来て実装がされた形跡がありました。社員の人はコード書かないんかい……ちなみにその方が書かれたコードは命名規則がシステムハンガリアンで、最上位階層の ViewController にガンガンクラスメソッドが追加されていました。感動して涙が出ました。~~結局あとでだいたい消した。

~~きっかけは、そのときの派遣の人月単価と、案件の人月単価を知ってしまったとき。

自分の月50時間に満たない作業分が、n人月 = x万円、なるほど。それと同程度の工数見積の機能実装に関する派遣の方の人月がx万円? なるほどなるほど。 もちろん設計や保守の工数、会社の利益があるとはいえ、分かりが芽生えた瞬間でした。

決め手になったのは、辞めるという話をする少し前。

次の改修の納期も近いし、流石に人が足りなさそうだから人を足そう、ということで新人の方がプロジェクトに加わりました。もちろん iOS ができる人はいないので、僕が教えることに。 1年半以上 iOS をやっているとは言え、完全に独学で、バイトで、教育係(?) うんうん、教えるのもバイトの役割ですね! え、アプリの画像素材を複数倍率でPSDから切り出せるのは僕しかいない? 引き継ぎ用の手順を動画に? なるほど!! (ただの Photoshop CC の Generator ですね。イケてる機能だと思います。あと、僕はこれが普通だと思っていたんですが、通常の案件では切り出された状態の png で送られてくるということを知ったのは最終出社日でした。)  

後のことはいいから、辞めようと思いました。

 

時給を上げる交渉をする、という手がなかったわけではありません。実際、過去に一度実行しました(その日のうちに100円上がった)し、それ以外でもある程度は評価されていて、数ヶ月に一度時給の見直しはありました。 おそらく、一度に100円時給が上がるバイトなんて他業種ではそうないでしょうし、最終的にもらっていた時給も僕の知る範囲では高い部類でした。 (そもそも学生のエンジニアバイトの時給が安い問題はありますが、そこまで踏み込む気はありません。あくまで個人の主観としてです。)

それでも、僕は学生の時間を削ってバイトするからには学びが多くあって欲しいと願っていました。 2017年にもなって iOS 7 をサポートするのはわずか数%残存しているユーザーのためです。(使い続けるのはクソだと思っていますが) ただ、それを僕がやる必要があるのか、今やるべきことなのか、という点において大きな疑問がありました。 (もちろん、iOS 7 の話は色々ある話の1つに過ぎませんし、iOS 7 については、冗談抜きで10回以上はデータ込みでもうサポートやめましょうよ、と説得を試みました。受託なのでやめられませんでした。◯◯◯許さん)

自分が投資の対象ではなく人月として見られてしまうのは自分の落ち度でもあります。ただ、そうでなくても今の環境でそれを改善するのは難しいと考えました。

~~そんなこんなで精神がつらくなったので、労基法ギリギリの2週間前 (納期x週間前) に伝えてやめようかとも少し思いました。~~ただ、流石にそこまでのうらみつらみは無かったので、その後すぐに上記のような理由をまろやかにしたものと共に退職のお気持ちを表明し、1/31 をもって退職しました。 ちなみに退職のお気持ちを表明した後の1ヶ月間、主業務が新人社員の方への引き継ぎになりました。不思議ですね。

エンジニアバイト四方山話は色々あって、残業代が出るのでうちはすごい! みたいな話はたまに聞きますが、有給がもらえて普通に使えたり、賞与が出る会社はそうそうないんじゃないかと思いました。上に挙げたような話を除けば、労働環境としては申し分ありませんでした。 今回は、たまたま僕が関わっていた案件周りがつらかったというだけです。他に携わった案件には面白いものもありましたし、そういったものに関わることができたのはいい経験でした。もちろん iOS 開発についても、誰にも頼らず0から独学で学ぶ機会があり良かったです。ともかく学びは多かったということです。

ちなみに時給倍くれたら残りますよという話をしたら本気で検討されたので丁重にお断りしました。良かったですね。ちょっと後悔しています。 ただ、まあ仕事してアウトプットしてるならそれに見合った評価はされたかったなという気持ちです。残念ですね。

 

機会、環境、考え、金など、茫漠とした概念が世の中にはあり、我々はその中で最適な解を求めてやっていく必要があるということでした。

 

read more »

10月にも似たような記事を書いた気がしましたが、似たような話です。 記事の間隔を見ると3ヶ月で辞めたように見え[…]

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[…]

学生エンジニア?についての私の考え

雑記

これを読んで思ったことがあったので、適当に呟きやらなんやらをメモるだけです。

つまり学生として技術に興味があって、僕はどう考えてどうやっていくかという話です。

(最初、 「学生がエンジニアになるためにどうやっていくかみたいな話 」 みたいなタイトルで公開したんですが、主語が大きすぎたので変えました。)

 

そもそも、僕はあまり具体的なアイデアとかを持って物を作る人ではない。 なんかこうビジョンを持って作りたい物とかがそんなになくて、でもプログラム書いたり勉強するのは好き、という感じだった。端的に言えば技術寄りとでも言えばいいのでしょうか。

なので、早々に (高校卒業前) そういった技術系のアルバイトを見つけられたのは良かったと思っています。 (蛇足ですが、この会社は最近辞めたエントリを書いた会社とは違う会社です。) で、そもそもそういった技術系のアルバイトをしたい場合に、どうやって会社を探すのかというのが最初に問題として上がってきます。 Wantedly のようなサービスもあるにはありますが、即戦力であったり、学生であっても技術力の高い層を狙っているという感じがあって、企業での開発経験がないような人間が突然入って、1から(もしくは0から)成長できる会社というのはやはり少ないのでは、という印象があります。 もちろんそういう会社もありますし、そうである実例も、そうでない実例も知っています。

で、個人的な結論としては、やはり知り合いの伝手を頼るのが良さそうな気がしています。少なくとも僕自身はそうです。

で、そういった知り合いを作るためにどうするべきか、というと結局コミュニティに入るのが手っ取り早いのだろうか、というところがまずハードルだと思います。

とにかく一人でそういう輪に入っていくのは難しくて、誰かに手を引いてもらいたいという気持ちがある。 そりゃそうで、人見知りはともかくとして、そうでないとしても知らない人しか居ない場所に突然飛び込んでやっていけるなら、それはもうある種の才能みたいなものなので、それで良いと思います。

僕は大学でそういうサークルに入ったり、そこからとある大会の運営をしたり、Twitterでどうでもいい呟きをしたりしています。

きょんたん (@sukukyon) 今僕がいるコミュニティってなんなんだろうなあ 2:03 AM - 20 Nov 2016

xxxxx

オタクコミュニティ 2:03 AM - 20 Nov 2016

きょんたん (@sukukyon) つぶす 2:03 AM - 20 Nov 2016

で、これは一部の業界の話だと思うのですが、Webなんかだと、最近の流行りは大規模開発にシフトしている気がしていて、一介の学生が趣味で作るようなものがそんなものを必要とするか? というのは疑問だったりします。 なので、そういったものを個人的な活動をやっていて触る必要があるのかとは思っていて、いくらOSSで自由に触れるからと言って、別に必要ないものは触らないよな、とは思いますね。(技術に興味があるなら触ってるんだろうし、そりゃそうなんだけれど……)

なので、結局そういうものに振れつつ、実際に役に立つものをどうやって作るかと考えると、自分で何かそういうビッグな物を考えるか、OSSの活動に貢献するか、バイトをするか、みたいな感じになります。短絡的な思考ですね。

 

結局人が作ったものを読んだりするのが自分の骨となり、肉となるので、だからみんなOSSのコミュニティに入れって言うのはまあ結論から逆算すると合っているんだけど、そんなのいきなり飛び込めるかみたいなのがあって

http://twitter.com/sukukyon/status/800025067983732738

なので、結局みんな「やるだけ」という話になります。

 

http://twitter.com/MysticDoll/status/800028076839051264

結局、この話はいくら遠回りをしようとこういう結論になるし、僕としても分かってきたので、これはもはや自明として扱うしか無い気がする。

そういう環境へ手を引いてくれる人が身近にいるならそれは恵まれているし、そうでない人は広大な海に突然放り込まれることになり、それがいわゆる「環境のギャップ」になるわけです。

これを読んで思ったことがあったので、適当に呟きやらなんやらをメモるだけです。 つまり学生として技術に興味があっ[…]

夜の合同説明会 #cdgh

雑記

つまりはインターネット同窓会

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

クラブ的な場所で、ここがギロッポンかという気持ちだった。

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

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

酒と飯を頂きつつ、いい話を聞いて「よい」「良すぎる」「いい話」と合いの手を入れていた気がする。

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

ちゃんと各社のことが分かったのは良くて、将来を考える上でプラスにはなったという感じがある。

明日になったら多分忘れます。いっついんたーねっと。

来週もあるみたいなので行きます。

つまりはインターネット同窓会 https://twitter.com/sukukyon/status/7995[…]

駄文を書くこと、文章をかくことについて

雑記

先ほどの記事でもあったように、僕は駄文を書くのが好きで、このようにダラダラと近況であったり、何か一つの物事についてとりとめもない、結論もない文章を書くのが好きです

というのはつまり「僕はポエムが好きです」と表明するようなものなのですが、ポエムみたいなふわふわしたものではないと思いたいし、思っています。つまりポエムという単語の語感が嫌いです。

多分この先も延々と取り留めのない話になるので、読んでいて眠くなるであろうことを先にお断りします。

なんで好きなのか、というのは単純に自分の性格に由来するものなので、あまり具体的にこう、と説明することができない。

ただ、単純に自分が思っていることを共有したくて、逆に共有もされたいのでやっている。

僕は基本的に人に何かを説明する時にそれに付随した色々なものを一緒に説明してしまいがちだというのがあります。 それはこれまでの記事でもある通りで、ひたすら「そういえば」「ふと」が続いたり、括弧による注釈が多かったりするのはそういうことです。 これは、僕が何かを伝える時に、「バックグラウンドとしてはこんなことがあって、こうだから、いま説明してるのがこうなっています。」ということを表現するための手段です。

僕が基本的に物事を結びつけて考えているので、それを相手にも伝えたいというのはあるし、そうした方が理解の助けになるのでは、と思ってやっているだけです。

ただ、これをすると往々にして、結論を見失ってしまいがちで、「で、だから?」となってしまいガチなのが難点。まだまだ修行が足りてないですね。

聞く側の経験としては、色々な知識が入れどもやっとしたまま終わるよりかは、情報量は少ないが結論がスパッと手に入る方が望ましい場合もあって、そこはケースバイケースなわけですが。 ただ、前者の方が圧倒的に重要だと僕が思っているのでそうしているというだけです。エゴです。

で、このようにして情報量を増やして会話したり文章を書いていると、自然と「この人はこういう考えで書いているのだから、これはこうなんだろう。」「前に言っていたこれがこれと結びつくので〜」みたいなようにして、こちらの考えを汲んでもらえて良い感じになるのでは、というのがあります。

これは言うなればレコメンデーションエンジンみたいなもので、好きな本、フェチなんかを共有することによって、他人からどんどん情報が入ってきて幸せになるというあれを一般の会話に応用したようなものでは? と思っています。

あとは単純に物を書く練習です。日頃 Twitter 以外で何もアウトプットしないので、たまには文章を書いていたほうがまだ頭が回って良いです。

ここまでが僕が書く理由です。

で、上の理由の裏返しで、僕は他人が何かを話し/書いたときに、そこに至ったバックグラウンドを知りたくて、なのでこのように駄文を書いて欲しいと思っています。それだけです。

ちなみにここで、「趣味は人間観察です」、というと途端に胡散臭くなることが知られています。

先ほどの記事でもあったように、僕は駄文を書くのが好きで、このようにダラダラと近況であったり、何か一つの物事につ[…]

2016年11月あたりの今日このごろ

雑記

こんばんは。

そういえば、僕は遠視のようで、5年以上前に作った眼鏡を気まぐれで月に1日ほど掛けています。 近視用の眼鏡を掛けるよりは遠視用の方が見えるので、まあそういうことなんでしょう。 日頃から画面へかじりつくようにPCを触り、暗い部屋で読書をする20代の人間が遠視になるんですね……

20代といえば、先日の9/19 に20歳になりました。誕生日プレゼントが沢山届いて幸せを噛み締めています。ありがとうございました。 人生で初めて飲むお酒が美味しくて、梅酒やら杏露酒やら柚子酒やらの果実酒やらカルーアミルクやらクラフトビールやらウイスキーやら日本酒やら飲んでいてとても美味しいので良いです。 お前は絶対に酒に弱いはずだ、と周り言われていたにも関わらず、何故かお酒がそこそこ飲める体質のようで、嬉しいような、飲んでもそんなに酔わないので微妙なような、なんとも言い難い気持ちです。

近況については以下の記事にもずらずらずら〜と書いたので、こちらも併せて参照して頂ければと思います。

CloudStack の VM を cs コマンドでデプロイしようとしてハマった Dentoo.LT #15 に登壇した 第6回 ICTトラブルシューティングコンテストの運営委員をしていました サイバーエージェントのインターンに行った バイトを辞めました

その後

で、その後の近況ですが、バイトを辞めて暇になった時間が、睡眠 / 積ん読を崩す / 紙芝居を眺める 時間に充てられました。

人から借りた漫画雑誌 (まんがタイムきらら系列誌 / まんが4コマぱれっと / コミック百合姫 / コミックキューン) および漫画が100冊以上積まれている状態でした。これが自室の貴重な4畳半スペースを占領していたため、とにかく読んでは週末にまとめて返すということが起こります。

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

少なからずとも生産的であった行為をやめて、消費主体的な生活に突然シフトしたわけです。すると、周囲からどうこうの前にまず、本人にこんな自堕落な生活をしていいのかという罪悪感が芽生えるわけです。

ただ、最近は本を買ってばかりでろくに読んでいなかったというのも事実なので、とにかくバランスを取れるまでは消費主体でいきたい所存です。

ただ、一番体積を食ってるのはなぜか増えるサーバーであったり、中にDVD1枚しか入っていないPC向けゲームだったり、薄いのにちりつも理論で増えていく同人誌だったりします。ゲームの箱が小さくならないのには色々大人の事情がありそうですが、一消費者としては小さくなってほしいなあ、と切に望みます。

断捨離というキーワードはキラキラ女子みたいなのが連想されて反吐が出るほど嫌いです。 がしかし、流石にこのペースでものが増え続けると数年後はどうなるんだ、ということもあり、ぼちぼち物を捨てていかないといけないのかなとも思いつつ。ただ所有欲は満たされるのですよね。 根底にあるのは、電子書籍より物理本という考えで、これは端的にいうと現在販売されているDRM付き電子書籍/音楽がいつまで読めるのか分からないという不安が根底にあります。

アニメ

秋アニメもそろそろ折り返し地点です。夏アニメの頃から急激に忙しくなったのもあり、録画しているけれど見ていないアニメが山のように増えてきました。 夏アニメですが、NEW GAME! / ラブライブ!サンシャイン!! /クロムクロ / 食戟のソーマ 弐ノ皿 は全部見ました。NEW GAME! が2年越しの期待を1話アバンからのOPで軽く越えて来たので、森羅万象がどうでもよくなったみたいなところがあります。良かったですね。 #動画工房ありがとう

動画工房といえば未確認の進行形ですが、新作の抱き枕カバーがでるみたいでこれもすごいです。原作も破壊力が上がってきていて、尊さが高いです。

変わって秋アニメは15本近く撮っていますが見られていなくて、響け!ユーフォニアム2, ガーリッシュナンバー, ステラのまほう, おくさまが生徒会長!+!, 舟を編む だけは観るぞという気持ちがあります。 個人的に一番期待してたのはステラのまほうですが、一端の原作派としてはキャラデザの違いが気になってしまう、というかくろば・U先生の絵柄が好きすぎる問題があります。

響け! ユーフォニアム2 はとにかく引力が働いていてすごい。最近ICTSC6の運営の後に宇治観光したのもあってとにかく思考が終わりながら脳にダイレクトインプットされています。終わっていますね。

漫画雑誌

ところでまんがタイムきらら系列誌を読んでいて思う最近の一押しは、

です。 (リンクは 1巻の Amazon)

どちらも連載最初から読んでいるのですが、良いです。スロウスタートはイベントスチル的良さがあって良いですし、すわっぷ⇔すわっぷはすわっぷしていて良いです。読んでください。

あと、まんがきららミラクはどんどん面白いものが連載終了していて残念という感じがあります。

技術周り

とくに何もやっていないので書くことがありません。 というのは多分嘘だと思いたくて、最近は4000行の jQuery を殺せなかったり、Visual Studio と和解して C++ をちょっと書いたり、 Objective-C と距離を保ったまま Swift に浮気して幸せになったりしています。 Swift 、すごいですね。Swift 2 → 3 でまた人が死んだらしいですが、これからはあまり破壊的変更はないらしいです。 とにかく Objective-C でもやっとしていた部分をすっきり書けるのが嬉しいのと、異常なほどに補完が賢くて、これが LLVM の力か……! と感動します。あとたまにコンパイル中にコンパイラが死んで気持ちになります。あと個人的には予約語や記号の使い方が好きで、コードの見た目が良いのがプラスポイント。 iOS 7 は殺せない。絶対にお前だけは殺すという気持ちがありますが、その前に◯◯◯を殺さないといけないのでは? という気持ちになり、あの権力は殺すとかいうと自分が消される気がしました。大人の事情は面倒くさいですね。

見えるところでは、 monora の profile をトップページみたく SVG やらなんやらで書き直しました。スクロールしたときの動きが完全に僕の自己満足になっています。

SVG はなんというか自由で救われた気持ちになるのですが、いかんせんWebページを全部それで書くかと言われると微妙で、まあこんな感じで組み合わせるとデザインの自由度が上がって面白いかなと思います。SVG のデザインも CSS で書けるんですが、これが結構気持ち良くて、これが Web です。書いている人を他に見たことがないので先を行っているという気持ちになれて自己満足。しかしレガシーブラウザでのサポートはお察し。

そういえば今日公開された Firefox 50 で NodeListforEach が乗ったみたいですね。JavaScript (ECMA...) を書いているとこういう問題に無限にぶち当たって不幸になるので、各位はちゃんと実装してください。

CSS といえば、僕は CSS Selectors Level 4 (W3C CSS WG の Draft) でついに関係上の擬似クラス :has が乗るっぽくてワクワクしています。これはつまり、CSSセレクタで今まで表現できなかった、特定要素 (や、特定セレクタ)を持つ親要素を選択できるということです。

とにかくこれは最高なので各位は今すぐに Microsoft Edge でこの機能を実装するよう下のリンクから投票してください。

:has() – Welcome to the Windows developer feedback site! https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/8977591--has

あとは、前から練っていた memora をそろそろ開発したい。 これは名前の通り、いわゆるメモ書きプラットフォーム的のようなあれで、つまり僕が文章を書きたいときのプラットフォームになってほしいやつです。 実は monora のサイドメニューには項目だけ存在していますが、まあ少なくとも半年はできないのではという気がしています。 そもそもサービスの全容がわかりません。 考えれば考えるだけそれ WordPress で良くない? とか、その機能プラグインで作った方が良くない? となるので、車輪の再発明はつらい。でもしたいので仕方がない。エゴです。

そういえばAdvent Calendar の時期なので Adventar::List を復活させないと行けない気もしています。というかなんで死んでいるんでしょうね。殺した覚えはないです。 (しかし最近サーバーのバックエンドをごっそり書き換えたりしたので心当たりは無限にある。)

あと、前回、前々回に引き続いて ICTSC7 の運営委員も務めさせて頂いております。今回はインフラリーダーだそうです。 そろそろインフラに知見がないとかいうと怒られますね。 人をまとめるのは苦手なので、とにかく自由にやってくれという気持ちになってそのようにしています。 近況としては、「これL2?」「これL3?」「これは??」「よくわかんないけど良い感じにやってくれ!!」という感じです。 前回の運営でようやくL2 と L3 を区別してまともにトポロジが書けるようになった気がするのですが、 OSI is dead みたいな風潮もあり、レイヤーで考えると人は思考停止して死ぬということが示されつつあります。そのようにやりましょう。

その他

生産をしないでひたすら消費をしたり、Suica で無限オートチャージ! みたいなことをしていると恐ろしい勢いで貯蓄が減っていくわけですね。 そんなことを行っていたら知り合いがこのようなことになったりするわけで

とにかく現金が欲しそうなのに、何故か記事末尾に Amazon の欲しいものリストへのリンクがあるのがオチという感じがしますね。

というわけでまだアルバイトを始めたいです。 つまり面接があったり、履歴書を持参したりするわけです。そういえば今まで履歴書って書いたことなかったですね。 学歴上の学校名が以上に長いのであまり書きたくないです。

個人的には、本当になぜかたまに企業の方からお声掛け頂くことがあって、マジか、と驚くことがあります。 目立つ活動をしている自覚は全く無いのですが、やはり色々見られているのでしょうか…… それにしても、自分を必要として頂けるのはありがたい限りです。承認欲求が満たされますね。

承認欲求を満たしたいという話はここ数年ずっとしているのですが、安定して満たされるただひとつの解決法がいまだに達成できていません。

あと、後輩が、事あるごとに自決と連呼していて、もしかしたらこの世界はディストピアなのでは? と思いつつあります。

とにかく幸せになりたい。やっていきます。

♪お菓子な夢をおひとつどうぞ♪ - チノ (水瀬いのり) : ご注文はうさぎですか?? キャラクターソングシリーズ06 #NowPlaying

こんばんは。 そういえば、僕は遠視のようで、5年以上前に作った眼鏡を気まぐれで月に1日ほど掛けています。 近視[…]

バイトを辞めました

雑記

溜まっているタイトルしか書かれていない下書きを消化するシリーズです。

ただの事後報告で、自省です。

僕が当初この記事を書こうとしたタイミングで、他の方から激しい退職エントリが流れてきたので、そういったものを求められている方はそちらをご参照下さい。

ベンチャー企業のアルバイトを辞めた - 人権喪失メンヘラワンダーランド

結局のところは自分の技術力が見合っていなかったというところに帰結する話です。

10ヶ月ほど、ベンチャー企業のアルバイトとして、インフラ関連の開発をしていたわけですが、僕が辞めたのは特に上記の記事で述べられているようなことがあったからではなく、ただ単に環境に馴染めなかったからというのと、大学周りの活動が忙しくなったからです。

別の会社でのアルバイトと掛け持ちで始めた本職でしたが、忙しくて行けない日が続き、環境に馴染めず、目標がハッキリとしないうちに時間だけが過ぎていきました。

僕が関わっていたのは、当時はまだ社外へ公開もされず、社内でも関わっていた人はごく少数のプロジェクトで、なんか良い感じに新しいプラットフォームでした。(公開情報です) CTO がアーキテクチャ設計を先導して、コードもほとんどが CTO のお手製という状況に放り込まれたのが自分でした。 アーキテクチャも採用した技術もイケていて、パワーのあるプロダクトでした。(と今でも思っています)

ただ、いかんせんベンチャー企業というのは勢いがあるもので、プロダクトのコードはあっという間に書き換えられ、毎週出社する度に操作方法が変わっているような状況でした。 その度にどうやって動かすのかを尋ね、コードを追い、そして僅かに自分の作業を行うといった日々が続きました。

結果として、自分の生産性は恐ろしく低く、これで給料を頂いていいのかと自問するほどでした。(時給が前職に比べて良かったのもありプレッシャーにもなっていた) そしてしばらく、「辞めたいな、でもここで辞めても何も生み出せてないし、ここで辞めるのもな……」と焦燥感だけが募る日々が続きました。 結果として、10/3 夜に退職の意志を表明して、翌々日の 10/5 に退職しました。実時間でいうと40時間ほどしか掛かっていなくて勢いしかなかったですね。

結局、昨年の12月に働き始めてから、100時間も労働していなかったみたいです。 決めるには時期尚早だった感じもありますが、単に周りの環境に自分が馴染めなかったことも後押しする結果となりました。

(これは個人的な意見ですが、エンジニアと営業を同じフロアに詰めるのは幸せになれないと思っています。ただ、ベンチャー企業として社員の気持ちを共有するという目的のためには良いのかもしれないですが、これが最適解だとは思っていません。) 会社の方々はとても良い方々で、技術力があってパッションがあって、サービスを良くしていこうという気持ちの感じられる社風でした。 学生のバイトも多く、自分とは比べ物にならないような方々にも沢山出会いました。

本当に短い間ではありましたが、お世話になりました。

そんなこんなしていたら貯蓄が尽きまして、良い感じにやっていけるバイトをふらふらと探しています。 結局のところ、アプリもフロントもサーバも書くしインフラもやっていて、自分が何をやりたいんだろう、ということが最近見いだせていない気がする。

溜まっているタイトルしか書かれていない下書きを消化するシリーズです。 ただの事後報告で、自省です。 僕が当初こ[…]

サイバーエージェントのインターンに行った

雑記

1ヶ月近く経ってしまいましたが、書くぞという気持ちがあるので書きます。

2018年新卒ではないですが、 2016/9/6 〜 2016/9/26 まで、2018年新卒向けの CyberAgent の夏季長期インターンであるところの WORKインターン (インフラ) に参加して、アドテク本部というところでなんやかんやしていました。

2018年新卒向けとはいっても、特に制約があるわけでもなく普通に応募できます。まあ、インターンに行くのは普通は学部3年 or 院生なので、必然的にそうなるんでしょうか。

ICTSC 関連の知り合いの方に誘われて、大規模なインフラに触れてみたいという気持ちもあり応募したことから始まったインターンでしたが、今までに無い濃密な日々でした。

まず、面接が2回ある。これは本当に驚きで、まず人事面接があって、その後に部門面接がありました。 ただの職業体験的なインターンだと思っていたそれまでの観念が書き換えられて、1ヶ月間共に仕事をする人という扱いをされているんだなあという気持ちになりました。

人事面接の後、人事の方から「kyontan君のやってみたいことからすると、ここ(アドテク本部)のインフラとかどうかな〜」といったサジェストを頂き、インフラができればどこでも! ということでレスポンスをしたところ、そこの方と部門面接をすることになりました。 CyberAgent のインターンは内部的には100箇所以上の配属先があるらしくて、それぞれの学生に一番マッチするところへ、ということでマッチングにとても気を遣われている印象がありました。

部門面接で興味のある技術やなんやかんやという話をしていましたが、やはりそこでも印象的だったのは、「もしやりたいことが変わったり気が変わったらいつでも連絡してね!」と言われたことでした。なるほどなるほど……

そんなこんなでインターンでは、OpenStack Mitaka と Midonet という SDN のプロダクトの運用検証や、ストレージ(SAN)の性能検証みたいなことをしていました。 「とにかく今までやったことがないことがやりたくて、やりたい、SDNとか興味あります!」みたいな意味合いのとにかく具体性のないことをメンターの方に伝えたのですが、実際にそんな感じになってとにかく感動しました。 ICTSC6 では CloudStack を使用していて、ICTSC5 では OpenStack を使っていた、みたいなことはあったのですが、自分で構築したことは一度もなかったし、この機会に1からやってみるのも良いな、というのもありました。 ついでにプロビジョニングも1からやってみたいという感じで、Ruby で書ける Itamae を使って、OpenStack Mitaka と Midonet を一発構築するレシピを書いた。

kyontan/itamae-recipe-openstack-with-midonet: Itamae recipe for installing Openstack Mitaka + Midonet

ちょっと最近私用で使ってみたら壊れてたので直します、ゆるしてください。

Midonet 、セールスポイントとしては ovs のカーネルモジュールを使っていて信頼性があって SPOF のない SDN オーバレイネットワークを構築できて OpenStack Neutron と密接に連携してくれるというところなんだけれど、結構イケてるプロダクトだと思う。 アーキテクチャの筋はめっちゃ良いと思っていて、おもしろプロダクトなので、これからも詳しく見ていきたい気持ちがあります。

で、主にそのあたりの検証をしたりした。

ストレージの検証は難しくてあまり成果が出せなかったのでしんどいという気持ち。

実質15日しかなくて、その中でいかにして結果を出すかみたいなことをメンターの方とも相談して方向性を決めたりした。 結果として、15日で目に見える成果物も出せて、濃密な感じにできたのは良かったと思っています。

最終的にできたのは以下のようなもの。(公開の許可は頂いています / 検証環境です)

Midonet Traffic Monitor on Zabbix

Midonet はトラフィックを可視化する機能が Enterprise (有償) にしかなくて、標準だと CLI で謎UUIDと紐付けられた値が取得できるだけなのだけれど、それを色々してちゃんとVMやらホスト間のトラフィックを可視化して Zabbix で表示するようにした。 これは結構イケていると思っていて、実際動くのでイケています。よかったですね。 技術系のネタはまた別の記事で書きたい気持ちもあるので端的にこんな感じで。

 

とにかくインターンを通して、メンターの方や社員の方々には良くしてもらって、気にかけて頂いていた気持ちが強い。本当に一言で表せないぐらいなのですが、お世話になりました、ありがとうございました。 配属された組織がとにかく強い人の集まりで、僕のふわっとした要領を得ない質問に対して簡潔で的確で正確な応えが返ってくるのは学びになりました。

 

他にも、インターン同士の交流会があってどこぞの大会でお会いした人に再会したり、インターネットの有名人(と個人的に認識している人)にお会いしたり、社内の施設も社員と同様に使えたりして感動した。(使う機会がなかったのが残念) 社内のリラクゼーションスペースがちょうど工事中で、インターン期間に行けなかったのが悔やまれる。

他にも、椅子がエンボディチェアで、これがハーマンミラーか……! と感動したり、無限に甘ったるいドリンクが出てくるベンディングマシン(普通のコーヒーやコーラももちろん出てくる) があって、無限にアイスチョコバナナとかいう不健康飲料を摂取したりしていた。アイスチョコバナナは最高。

(2016/10/25 22:12 補足: 記事の公開時にアーロンチェアと表記していましたが、エンボディチェアだという指摘を頂きました。調べてみたら最上位……なるほど……)

他のインターンの方の話を聞いていると、やはり配属される部署でこの辺りは結構差があって、営業と同一フロアでノイジーな環境だったりすることもあるみたいですが、とにかくありとあらゆる手法で解決することが可能なのでやっていきましょう。 ちなみに僕の環境はオールエンジニアのフロアで静かでした。キラキラしてる印象はそんなになかったです。(他のフロアに行ったらキラキラしてたので驚いた)

そんなこんなであっという間に過ぎた3週間でした。改めて、アドテク本部のとある組織の皆様、メンターの方、人事の方、ありがとうございました!!!

 

1ヶ月近く経ってしまいましたが、書くぞという気持ちがあるので書きます。 2018年新卒ではないですが、 201[…]

第6回 ICTトラブルシューティングコンテストの運営委員をしていました

雑記

ICTトラブルシューティングコンテスト という学生が主体となってインフラやサーバに関するトラブルを起こして、学生が解決する(雑) な大会がありまして、その第6回、通称 ICTSC6 の運営側として参加してきました、ということです。

大会自体は8/27, 28 (土日) が本番でしたが、運営委員は 4/24 のキックオフMTGから活動が始まっていて、実に4ヶ月近くの期間があったことになります。

写真とかは公式のレポートにたくさんあるのでご参照下さい。

NTT西日本杯 ICTSC6 準備期間 レポート – ICTSC | ICT トラブルシューティングコンテスト NTT西日本杯 ICTSC6 DAY1 レポート – ICTSC | ICT トラブルシューティングコンテスト NTT西日本杯 ICTSC6 DAY2 レポート – ICTSC | ICT トラブルシューティングコンテスト  

ICTSC には運営委員として、第5回 (ICTSC5) から関わっていて、ICTSC6 では運営委員の副リーダーなるものを務めさせて頂きました。 (ICTSC6 は16人の運営委員と大人の方々による実行委員とスポンサーの方々によって成り立っており、その学生側ということです。)

ICTSC5 の反省を活かして、ICTSC6 のために自分が行ったことはとにかく1つに集約されていて、「とにかく見える化、情報の集約化を徹底して、何かをしたいときにすぐに行動できるようにする」というもの。

結局この記事は僕の自己満足ですし完全に主観で書いていて、最終的にはここに書いていない範囲、色々とよくないこともあったし、そもそも未だ僕が把握してない範囲で色々揉めたというのもあるのですが、結果としてそれを全部汲み取って解決できなかったのは本当に自分が悪いと思っています。未だももやもやとする気持ちもあります。 責任転嫁するつもりはないし、頼むから直接言ってくれという気持ちです。

 

以下、雑多に何をしたのか書いていきます。

 

ICTSC5 は、自分が初参加で周りが見えていなかったということもあるのだけれど、とにかく情報がブラックボックス化されていて誰が知っているのかすら良く分からないみたいな情報でつらかったという印象があった。 そのためにやったことは大きく2つあって、以下をしました。

  • Wiki を作る

  • Slack で Public チャンネルを大量に立てて話題を分ける / 見える化する (Private チャンネルを減らす)

Wiki は色々と模索した結果、 Crowi という国産の WIki が一番イケている印象があったので選択しました。半年間運用しましたけど本当に安定していて、ちゃんと動いて階層化ができて MarkDown がシュッと書けて良かったと思っています。 開発も精力的に行われていて、大会運営の後半では Elasticsearch と連携して検索機能も実装されて更に便利になった。開発者の人とも Gitter でコミュニケーションが取れて良いプロダクト。

とにかくありとあらゆる情報はこの Wiki から参照できるようにして、他サービスとして利用していた Google Drive やら Trello やらも全部参照できる情報をここに載っけるようにした。 合宿みたいなほぼ全員で集まる機会もあったので、Wikiの使い方をレクチャーしたり、みたいなこともした気がする。(あまりうまく行かなかったな、とは思っています)

結果としては、4ヶ月間で 147ページ ものページが作成されて Wiki で常に参照できる状態になった。 僕は文書化をほぼほぼ機械的にしていて、Slack で議論された事柄を片っ端から Wiki にまとめるみたいなことをした。 懸念していたのは、情報が錯綜することと古くなって参照されなくなることだったので、とにかくそこに気を使って更新を止めないようにした。

Crowi には Slack 連携機能があったので、#wiki-update みたいなチャンネルを作って通知を飛ばすようにした。 基本的に人が寝ている時間に作業する人間なので、4時とか5時とかにバンバン通知を飛ばしていた気がする。

Slack については完全に議論と雑談をするためのフリースペースでいいという認識で、1万件問題についてはログを取って参照できるようにすればいいし、そもそも確定した重要事項については Wiki に書くのが大前提なんだから、いくら流れてもいいのでとにかく書いてくれというスタンスで運用した(つもり)。

分報 (#times_{username})を導入したのもそういう意図があるし、運営委員そのものが日本中に散らばっているので、そのコミュニケーションの要となる Slack はとにかくコミュニケーションでツーでカーな感じにしたかった。

とにかく議論が混乱しないよう、分野ごとにチャンネルを大量に作成して、分けて議論がそれたらすぐに該当するチャンネルへ誘導するといったスタンス。 具体的には、 #infra やそのサブチャンネルとなる #infra-dc, #infra-network, #infra-server 問題作成に関連する #problem, 大会運営に関する #event-support などなど。times 含め59チャンネルが作成された (うち分報13チャンネル)

概ねこの方針は正しかったと思っていて、一部分けすぎて混乱したみたいなのはあったのですが、それでも全部が #random に書き込まれる世界よりはよっぽど健全だったと思っています……

そんな感じでやっていきました。

最後に、副リーダーとしてはリーダーの仕事を常に奪い続けるスタンスで行動していて、リーダーは常に手が空いてる状態を維持するように善処したつもりです。結局どうだったのかは人により意見が別れると思いますが、どうだったんだろう……

その他にも、無限に人にタスクを投げ続けるように立ち回ったつもりではあるのですが、結果としては僕がタスクを抱えすぎたり口を滑らせたりで本番直前で周りに大迷惑を掛けてしまったということが一番の反省点です。

結局、大会の運営というのは最終的にはどうやって人をマネジメントするかということに帰結していて、していますということです。

 

改めまして、この大会にご尽力くださった運営委員、実行委員、スポンサーの皆様、そして参加して頂いた皆様には厚く御礼申し上げます。ありがとうございました。

 

ICTトラブルシューティングコンテスト という学生が主体となってインフラやサーバに関するトラブルを起こして、学[…]

Dentoo.LT #15 に登壇した

雑記

世にも不思議な電気通信大学MMAという団体が主催している Dentoo.LT #15 というイベントがあって、登壇しました。あと寝坊しました。ゆるしてください

資格の話といいながら今年のネスペの午後II 問題を眺めたりしたのですが、案外普通に解ける感じだったし難易度が意外と高く無さそうだった。ちゃんと問題文を読みましょう。

** 資格の話 #3.2 @Dentoo.LT #15 ** from kyontan

最近は150枚ぐらいスライドを作って100枚ぐらいで時間切れになっていることが多い気がするので反省したい。次回は最後まで話します。

余談ですがスライドのテンプレート作ってたらまたCSSとSVGを延々と書くオタクに戻りたくなった。

世にも不思議な電気通信大学MMAという団体が主催している Dentoo.LT #15 というイベントがあって、[…]

CloudStack の VM を cs コマンドでデプロイしようとしてハマった

Infrastructure

こんばんは。タイトルだけ書いた下書きが溜まっているので書いていきますということです。

ICTSC6 で CloudStack を使用していた話はまだ書いていなし多分書かないですが、使用していました。

その中で、API を叩いてくれる薄っぺらいラッパーコマンドであるところの exoscale/cs を叩いてデプロイなりVMの起動停止なりボリュームのアタッチなどをやっていたわけですが、デプロイ関連で少しハマったので解決策を紹介。

ちなみにこれ: https://github.com/exoscale/cs。 exoscale 、 CloudStack なんですかね……

~~CloudStack の API はあまりにも愚直なのでパラメータが無限に多くてしんどいという話はさておき ~~APIの一覧は http://cloudstack.apache.org/api/apidocs-4.9/ にあります。 (4.9 の場合) VM を作成する場合は、 deployVirtualMachine 書いてある通りですが、必須なパラメータは以下の3つです。

  • serviceofferingid

  • templateid

  • zoneid

それとは別に、IPアドレスを固定したり複数のネットワークにVMを接続するときは iptonetworklist パラメータを指定するわけですが、このパラメータの設定がなんもわからんという感じです。

iptonetworklist[0].ip=10.10.10.11&iptonetworklist[0].ipv6=fc00:1234:5678::abcd&iptonetworklist[0].networkid=uuid

難しすぎる。なんで突然配列の演算子が出てきて & で繋ぐ必要があるんだ……

実際に直に API を叩いたことはないのですが、 cs ではこの通りにパラメータを書いても上手く動いてくれません。 なので、以下のようにする必要があります

cs deployVirtualMachine ... iptonetworklist[0].ip=192.168.15.3 iptonetworklist[0].networkid=4bbc38e5-3e36-4a11-9c93-5a5261911120

ただ & で繋げずにスペースで区切るだけです。どういう挙動なんだろう…… どこにも仕様が載っていないので試行錯誤せざるを得ないわけですが、やっていきましょう

結局 cs コマンドの引数はこんな感じになってしまうので非常に読みづらい。各位 Ansible のパワーに頼っていきましょう。僕は Ruby でラッパーを書きました。

cs deployVirtualMachine displayname='vm1-p15-t7' name='vm-x-hoge' serviceofferingid='3ebb38bf-dbb6-42b1-b301-041d3546b5dc' templateid='cec5838f-1bae-442f-9009-9e27dcf33941' zoneid='57305097-d51a-467b-bbec-862ab20850d1' hostid='3edc5cc0-5375-462d-8a38-b2e4920791f4' account='xxx' domainid='1d43bf7b-b00c-41ba-959a-e422c4649547' startvm='false' iptonetworklist[0].ip=192.168.15.3 iptonetworklist[0].networkid=4bbc38e5-3e36-4a11-9c93-5a5261911120
こんばんは。タイトルだけ書いた下書きが溜まっているので書いていきますということです。 ICTSC6 で Clo[…]

shotgun じゃなくて rerun を使おうという話

Programming

Ruby で Rack アプリケーションを書いているときに、コード変更したら自動的にサーバー再起動したいという話。

今までは shotgun でやっていたのだけれど、これは毎回リクエストする度に変更の有無に関係なくサーバーを立ち上げ直すので、遅いという欠点があった。 副次的な問題として、better_errors で REPL が無効になるという欠点があった。(レスポンスを返すとそのコンテキストを捨ててしまうから?)

ずっと前からどうにかならないかなーと思っていたのでググったら rerun というものを見つけた。 Rack とか関係なくもっと汎用的なやつで、ファイル変更検知してサーバー上げ直すぞ! みたいなプロダクトらしい。

入れたら下のような感じで使える。便利。

`RACK_ENV=development rerun -- rackup -o 127.0.0.1

`調子に乗って通知有効化するぞ! というノリで terminal-notifier を入れてみたらサーバーが上がらなくなった。何事かと思ったら tmux 上で使おうとすると一癖あるらしく、こういうIssue が立っていたので適当に読んだら解決した。

要するに、brew なりなんなりで、reattach-to-user-namespace をインストールして、.tmux.conf に下を書き加えるという話。


set -g default-command "which reattach-to-user-namespace > /dev/null && reattach-to-user-namespace -l $SHELL || $SHELL -l"

再起動に掛かる時間が体感で倍ぐらいになったけれど、better_errors使えることで圧倒的効率アップみたいなところがあるので、トータルで幸福度が向上した気がする。

Ruby で Rack アプリケーションを書いているときに、コード変更したら自動的にサーバー再起動したいという[…]

Sinatra Modular-Application で configure が上書きされる問題の対処

Programming

Ruby の Siantra で、Modular-Application を書いていたら良く分からない挙動にぶち当たって気が付いたら朝になっていたのでメモ。

app.rb

require_relative "hoge"

class App < Sinatra::Base
  configure do
    disable :protection
  end

  use HogeRoutes
end

hoge.rb

class HogeRoutes < Sinatra::Base
  get "/" do
     ...
  end
end

みたいな事をしていた。 disable :protection をしているのにどうしても Rack::Protection が有効になるので、どうしてこうなるんだとあちこちのコードを追いかけたりした結果、HogeRoutesApp とは別にもう一度 session, protections 等のセットアップが行われるので、以下のように、 use HogeRoutesconfigure より上に持ってくる必要があった。

app.rb

require_relative "hoge"

class App < Sinatra::Base
  use HogeRoutes

  configure do
    disable :protection
  end
end

HogeRoutes 内の configuredisable :protection とやってもいいが、こうするとクラスが増えた際にその分だけ書かないといけなくて大変。セッションみたいなアプリケーション全体で統一的な設定を持つ部分は親の App でやって良いんじゃないかと思う。

Ruby の Siantra で、Modular-Application を書いていたら良く分からない挙動にぶ[…]

2016年3月あたりの今日このごろ

雑記

春休みになった。大学生の春休みはきっと長いのだろうなと思っていたが、やりたいことは積もり積もっていて、中々暇にならない。でもここ数日はこんな時間まで起きて12時まで寝るような生活をしていて大学生の春休みっぽい。暇なら仕事でもなんでもしろという感じである。

まず、春休みに入って初っ端に ICTSC5 という大会があった。正式名称は「cloudpack杯 第5回ICTトラブルシューティングコンテスト」といって、ネットワークやサーバーといった所謂インフラに属する部分のトラブルを学生が作って学生が解決する大会である。 今回、僕は学生の運営委員としてこの大会に参加していて、2月の中旬から東京ミッドタウンにあるシスコの東京本社に篭って、問題を作ったり、ネットワーク設計をみてフンフン言ったり、DMM.comラボ様からお借りしたGaffGun で光ファイバーやらなんやらを養生したり、ラッキング (画像左)したり、パトライト光らせたり、パトライトを Webhook するような API サーバーをサクっと書いたり、ansible の praybook を書いて200台以上のVMに対して🙏 pray 🙏 したり、突然秋葉原の愛三に行って1000A測定可能なクランプメーターを買ったり、受付したり、Redmine で参加者から続々と立てられる質問のチケットを100件以上クローズして指揮官の気持ちになったりということをしていた。日頃中々得られない大規模な大会運営に携われたというのは本当に良い経験で、それだけでなくてネットワークであったり、大量VMへの展開であったり、技術な学生との会話であったり、本当に得られたものは大きかったと思うし、それが終わって2週間経った今でさえ、心にぽっかり穴が空いたような気分だ。 次回の ICTSC6 は大阪開催のようだし、おそらくまた運営委員としてひたすら祈り続ける日々が始まるのもそう遠くないと思っている。楽しみだ。

それが終わったあとは、割とバイトに行く日々を繰り返している気がする。 週2, 3程度でバイトに行っているので、決まった曜日がないとはいえ、2週間もあけるとそれなりにタスクも溜まるようで (実際緊急の案件で呼び出されて ICTSC5 中にも一度出社して徹夜で勤務していた)、ひたすら溜まったタスクをこなしつつ、iOS アプリの画面を組んだりコード書いたりといったことをしていた。そういえば最近は Photoshop 使った画像切り出しやらリサイズやらも定常タスクに入ってる気がする。まあ自動化してるからサクっと終わるんだけど、まさか今までこれを手で切り出してたなんて言わないよね……? まあ、このあたりの話題は秘密保持のこともあるのであまり語れなくて、強いて言うなら学生を使うと安く済むんだなぁという事実から目を背けられなくて、やっぱり給料上げてほしいなあみたいな気持ちになった。粘り強く交渉していきたい。あと iOS 7 は絶対に潰す。絶対にだ。

このあたりはもう一つ書いておきたいことがあって、最近別の会社でもバイトを始めたということを書いたのだけれど、未だに全然仕事できていない。というか時間を割けていない以前にどこから手を付ければ良いのか分からなくてつらい。頑張りたい。

あと、先週はサークルの先輩としまなみ海道を自転車で渡る旅行に行った。しまなみ海道に行くのは2回目なのだけれど、今回は尾道から今治へ渡った。前回とは逆向きで、行きは新幹線で福山経由で行って、帰りは高松からサンライズに乗って帰った。この辺の話はTwitterで書いたとおり。やはりしまなみ海道は走りやすくて良い。ついでに自分の体力の無さが身にしみたので頑張っていきたい。もうちょっと乗ろうな……。ついでに香川のうどん屋は異様に閉まるのが速い。またリベンジするぞ。

今週はまた旅行に行きます。旅行といっても突発的なバイトついでという感じで、敦賀へ1泊2日の作業をしに行く。そのまま名古屋で1泊して、凪のあすからの聖地巡礼をしに紀伊半島、紀勢本線の波田須の方へ行こうと思う。紀伊半島は鉄道の僻地という感じで、こんな時間までジョルダンの18きっぷ検索と格闘していた。週末にスケジュールが入っているということもあってなんやかんやと5時間ぐらい悩んで、帰りは高速バスに乗って帰ることにした。朝が厳しい。

本当に朝に弱いので普通に早起きしようとして起きたら12時とかあるのだけれど、多分旅行のときぐらいは7時とかに起きれるんじゃないかと自分に淡い期待を抱いている。

とかこんなことを書いている暇があったら寝たほうが良さそう。寝る。(2016/3/15 執筆)

 

春休みになった。大学生の春休みはきっと長いのだろうなと思っていたが、やりたいことは積もり積もっていて、中々暇に[…]

こたつを買って最高の環境を構築した

雑記

成人式は成人の日に行われる鎌倉に住んでいます。きょんたんです。

前々からこたつが欲しいというのは叫んでいて、バイトも初めて余裕もあるしそろそろ導入したいなあと思っていたので、思い切って導入した。

どのこたつを買うかとか、大きさについては結構悩んだ。そもそも部屋が狭い (四畳半+α程度) し空きスペースもほとんど無いので、悩む選択肢は 60cm 四方 or 75cm 四方の2択だった。 60cm四方については、単純に数字から小さいのではないかと危惧していたのだけど、メジャーを当ててみたら意外とそうでもないということが判明。 たまたま機会があったので、祖父母宅のこたつの大きさも測ってみたが、75cmというのはそれなりに大きさがあって、1人で入るにはかなり余裕があるようだった。

でもなぜか購入したのは 75cm四方のもの。なんでかって? 大は小を兼ねるからだよ。

メーカーについては、大きく外れを引くことはなさそうだと確信を持ってニトリを選択、それにしても同じ大きさでも10種類ぐらいあって悩んだ。 最近のは人感センサーがあったりリバーシブルだったりと、色々工夫が凝らされている、特に人感センサーは火事を防げたりで良さそう。流行るべき。 人感センサーは悩んだがコスト面の問題で (ないものに比べ6000円近く高い)却下。後は個人的な趣向で樹脂ではなく木材のものが良いなど色々悩んで以下のこたつを選択。

https://www.nitori-net.jp/store/ja/ec/0710432 後は掛け布団も買う必要があったので以下のものを。値段も大差なかったので模様で決めた。

https://www.nitori-net.jp/store/ja/ec/7600762 購入の様子は以下のとおり。

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

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

3コマ目もあるけれど、特に注文確定画面っぽさが伝わらないので割愛。

 

後日、掛け布団より先にこたつ単体が届いたので導入。組み立ては足を付けるだけなので割愛。

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

75cm 四方はやはり大きかった。そして気付かされるのは、掛け布団がないこたつは極めて寒いということ。熱があっという間に外に漏れていく。その場にあった毛布を掛けるが、しかし全体を覆うことは叶わず、熱は外に漏れていく。

その後、掛け布団が届くまでの3日強はなんとか有り合わせの毛布で凌ぐも、こんなものはこたつとは認められない状況であった。

掛け布団が届く。早速インストールする。 余談: 掛け布団の配送日は最速でも 1/9 とニトリの注文ページにあったので最速指定にしたのだけれど、何故か1/6には既に発送されて最寄りの配送所まで来ていて、1/9まで保管されていたらしい。なんだったんだろう。 https://twitter.com/sukukyon/status/685719503494225920

掛け布団を掛けたこたつに入って、これが、これこそが私の知るこたつだと。

こたつの大きさに合わせた掛け布団なので、全体をしっかり覆える上に、今回購入したものは、内部にアルミシートが入っていて保温性も高いらしい。 本当に冷えなくて、中に入るといつでもぬくぬくできる。最高。

 

導入してからの気付きとしては、こたつは案外作業領域が広いということがある。 75cm 四方というのはそれなりに大きい。色々置いて作業が捗る。 後は掛け布団の質感がもふもふでふかふかで個人的にとても好みなのは予想外の収穫。

今は全体の4割近くがスチールラックの下にあるのだけれど、代わりにスチールラック上にスピーカーを置いたり、そこからモニターアームが生えていたりする。これはこれで1人の人生がダメになる程度の快適性がある。

こたつを持っていない各位は是非検討されてはいかがでしょうか。 これから冷えますし。

成人式は成人の日に行われる鎌倉に住んでいます。きょんたんです。 前々からこたつが欲しいというのは叫んでいて、バ[…]

2016年1月あたりの今日このごろ

Programming 雑記

こんばんは。 面白そうな事にどんどん手を出し続けた結果、日々忙しい生活を送っています。

ふと、季報的な物を書きたくなったので書きます。

10/27: monora rebuild

12/7: Adventar::List release

12/11: 某社に見学に行く / バイトを始める

12/14: monora improve

12/16: ネットワークスペシャリスト試験合格

monora rebuild / improve

12月に一番力を入れたのがここ。

新デザインの構想は結構前からあって、ずっと laboの方 にはデザイン案が置いてあった。ファイル名を見るに 2014/5/18 に作ったっぽい。

[caption id="attachment_947" align="alignnone" width="1920"]

monora-feature_140518-1417

2014/5/18 時点でのデザイン構想[/caption]

確か Adobe Creative Cloud の学生プランに入って Illustrator が使い放題になったので、使い方を学ぶべく作ったというところ。 ただ、この時はまだWebでこの見た目を HTML / CSS で再現するのは無理だと割りきっていて、いつかこのデザインが日の目を見ると良いな、という感じだった。

そこから1年半が経過して、ふと思い出したのが SVG 。 HTML 5 もそろそろ普及してきて良い感じに使えるんじゃない? と思いつつ、ものは試しで Illustrator で SVG出力してみた。 **「うん、普通に表示できるね」 **というのがその時の率直な感想。実はこれ、1年前の時点でできたんじゃない? とか思うけれど気にしない。 Illustrator は優秀で、それなりに読める SVG を吐いてくる。これは結構驚きだった。(コードジェネレータがまともなコードを吐いてくるとはあまり思っていない)

ただ、パスの部分は合成操作を多くしたせいか、結構長くてごちゃごちゃとしたパスが出力されていたので、その辺りも含めて一度全部書き直した。

もう1つ面白い発見があって、SVG の見た目の部分を html ファイル内に書くのがダサい!! と思っていたら、なんと CSS で書けることが発覚した。

http://www.w3.org/TR/SVG/styling.html#StylingWithCSS

6.6 Styling with CSS に書いてあって

svg circle {
  fill: #3C241A;
  fill-opacity: 0.64;
  stroke: #3C241A;
  stroke-opacity: 0.64;
}

というように SVG の属性 を CSS で書ける。とても便利。 問題はエディタがこういった仕様を知らないことで、手元の Sublime Text 3 では全く色が付かない……

そうして、これが

monora-v1

 

こうなりました

monora-160107

自分でも感動した。めっちゃ良い。現代って感じがする。

元より v1 の時点でも corner-radius が正式に出る前から使っていたし、丸っこいデザインが好きで、そういうデザインをしたかったというのがあっただけに実際にブラウザに表示された時は感動した。まだまだWebで丸を全面的に使ったサイトというのは中々見ないし、文字の配置なんかもイケてると思う。

ただ、SVG による難点もいくつかある。例えば <foreignObject> を使ってHTMLの要素 (<p> とか) を使わないと幅を固定して複数行表示ができない。けれど、<foreignObject> は現状でサポートされていないブラウザもそれなりにあるので、<text><tspan>を併用して地道に座標を当てる対処も必要。 ただ、今回は TypeSquare という、無料で和文のWebフォントが使えるサービス (リュウミンや新ゴのようなすごいフォントがタダで使えるすごいサービス ) を使っているので、どの環境でも同じフォントでほぼほぼ同じに見える……はず……

12/14 には improve と題して無駄な機能を付けた。

[video src="https://monora-monolog-media.1line.dev/ecdce6eba666ffe33ce9ec576a9aed5e.mp4" height="622" width="684"][/video]

カーソルを乗っけると色が変わったりブラーが掛かったりする。モダンな感じに動くし良いんじゃないかなみたいなノリ。 Material っぽく、カーソルを乗っけたところから色が変わると面白いかなと思ったけれど、結構実装がつらそうなので後回し。

今でも正しかったのか悩んでて、そのうち外すかも。 (この記事を書きながら Firefox で検証しようとしたら、この変更のせいでまともに文字が描画されていないことに気が付いたのでブラーは無効化しました……)

背景はデザインを変更して少ししてから変えたもので、上の画像のものは大学に一眼レフをふらっと持っていって撮ったもの。 背景にも地味ながらこだわっていて、もっとバリエーションを増やしていきたいなと思う。そして年も開けたしそろそろ差し替えたい。この辺りの話はまたいつか。

そんなこんなで結構良い感じのデザインをしたと勝手に思っている。コンテンツを増やしていきたいと切実に思う今日このごろ。

Adventar::List release

この記事が公開されているときには既にアドベントカレンダーは終わっているんですけど…… 2014年12月にリリースして、その後しばらく動いていたんですが最近またサーバー環境のあれこれでぶっ壊しまして、ほぼほぼ1から作り直しみたいなことをしました。 ただ、今回はなんやかんやでクローラが上手く動かないし直そうにも忙しいしで困った。 (今確認したら何故か今日の日付が表示されているし困った。後で直します。)

某社へ見学に行った / バイトを始めた

書いてある通りで、何の変哲もないです。 見学に行ったつもりが仕事してました。何か前のバイトでも同じことをした気がする。学習してないですね。

業種としては自社開発のWebサービスの運営企業で、Wantedly にも載ってるような、いわゆるスタートアップというところです。僕は Wantedly 経由じゃないですけれど。

前からインフラに興味があって、たまたま中の人からお話を伺う機会があったというタイミングの良さもあり、インフラ関連の開発をさせて頂くことになった。 これを書いてる時点ではDockerとかAWSとかそのあたりを弄っています。

いい椅子があって、壁で仕切られて無くて明るくて美味しいコーヒーが飲み放題でうんぬんかんぬんという、自分の想像するベンチャー像をまさに具現化したような存在でとても良い開発環境で作業をさせて頂いています。

近況は以下のとおりです。

http://twitter.com/sukukyon/status/683996193932746752

http://twitter.com/whywaita/status/684060812017729536

http://twitter.com/whywaita/status/684061949378727936

思いつきで名前を付けるのは良くないですね。意味のある名前を付けるよう心がけましょう。

ところで、前のバイトを退職したという事実は一切なくて、、むしろ新しく始めたこっちの方が勤務日数としても結果的な給料としても少なくなるはずです。(現状では)

気になるお給料については前の会社と同じ時給という感じにしてもらった。半年後、1年後となった時にどっちの方が高くなっているのかは個人的に興味深いところ。(今の時給は1000円台前半です。まさかこの歳でこんなに貰えるとは……)

前からいた会社の方では、最近はもっぱら iOS 開発を主にやっています。社外秘と書かれた紙を見るだけでワクワクするし、Objective-C という言語は知れば知る程賢い設計だなあと感動する。Swift にもそういうワクワクはあるのかな。

12/16: ネットワークスペシャリスト試験合格

ネスペに合格しました。これで、IPAの情報処理技術者試験は AP/ES/SC/NW を取ったことになります。

テクノロジ系だと、あと DB は取れると思いますが、今ひとつ興味が…… マネジメント / ストラテジ に関しては全く歯が立たないですし、ひとまず IPA に関してはこのあたりで卒業したいかなというところ。 NW は興味がある分野といえど勉強期間が短く詰め込み学習になったのもあって一番つらかった。

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

また3週間後に資格試験が控えている気がしますし、これを取ったらしばらく資格を取るのはやめたい。

 

ではまた。

こんばんは。 面白そうな事にどんどん手を出し続けた結果、日々忙しい生活を送っています。 ふと、季報的な物を書き[…]

高専カンファレンス100 in 東京 に参加してLTした話

雑記

連日ブログを書いている気がします。きょんたんです。

既に年も明け、とても遅くなってしまいましたが、先日の 2015/12/19, 20 と2日連続で高専カンファレンスに行ってきました。

http://kosenconf.jp/?100tokyo 何故かタイムテーブルに僕の名前が乗ってます。 はい、LTしました。工業高校卒の僕が、高専カンファで。何故か。

5分の発表時間に対し、150枚のスライドを用意していたので、都合2枚/秒のペースで話す必要があったのですが無理でした。そりゃそうだ。 それどころか、しどろもどろになってしまって内容の1割もまともに喋れなかったので、あの場を用意してくださった方々に申し訳ないという気持ちでいっぱいです……

** 資格の話 #3 @高専カンファレンス100 in 東京 LT ** from kyontan

そもそもどうして高専卒でない僕が高専カンファで話すことになったのか? ということですね。

物事の発端は Dentoo.LT #11 で とある方 が高専カンファの宣伝LT をしていたことに依ります。 その とある方 こそが 100カンファの運営委員長の なっちゃんさん な訳ですが。 その後も、すれ違えば LT出てよ! と背中を押され、気が付いたら申し込んでいて通っていて…… みたいな感じでした。

そんな広告戦略については、なっちゃんさん の100カンファ後のブログ記事を見て納得するなど。

http://marin72.hatenablog.com/entry/2015/12/23/202842 僕は私用により1日目の夢これ、アイスブレーク等に参加できず (とても悔しい!!) 、懇親会の途中からの参加となったのですが、会場について驚いたのが、高専生ってこんなにたくさんいるんだ!! ということ。 身の回りに高専に行った人もいなく (神奈川県には高専がない) 、高専生ってどのくらいいるんだろうなあという実感もないままに参加したイベントだったがために、余計に感動しました。 しかも、会場が東京だというのに、北海道から沖縄まで、全国津津浦浦からの参加者がいるのには本当に驚くばかり。

発表者といい参加者といい、自分より若い方もいれば、卒業生の方もいてなんだなんだこの巡るめく高専ワールドは…… とただひたすらに。

特に感動したのは、でなりさん (@denari01) 率いるデザインチームの力でした。 会場の案内から、チラシから名札からなんやら、果てはスライドのテンプレートまで、一貫したデザインがあるということはここまで強いことなのだなと実感せざるを得ない場所でした。 デザインは趣味程度にかじる人間でしかないですが、ここまで一貫したブランドイメージを感じる機会というのはなかなか記憶にないところで、最初から最後まで感動が止まらず。あと、でなりさん本当にイケメンだったのでイケメンしか言えなくてとても残念だった。ぐぬぬ

会場ではたくさんの人と話しましたが、本当にいろんな人がいて、高専というのは不思議な場所であるなあと。 こんな(いい意味で)変な人がたくさんいる場所は高校以来だったので、不思議な感覚でした。あの工業高校にも変な人がたくさんいた……

LTについては精進しますとしか言えない……!

参加者、運営の皆様、本当にありがとうございました! 最高のイベントでした!!

 

連日ブログを書いている気がします。きょんたんです。 既に年も明け、とても遅くなってしまいましたが、先日の 20[…]

明けました

雑記

12月の季報?の下書きがまだ残っていますが、書き上げる前に年が明けました。 今年も1年、どうかよろしくお願いします。

気が付けば2016年なんですね。今年は天覧山に初日の出を見に行きました。

天覧山 初日の出号 に乗って、自宅(鎌倉) から乗り換え1回で行ける世の中。便利ですね。 元より、池袋まで湘南新宿ラインで行けば1回なのですが…… http://www.tokyometro.jp/news/2015/780.html 飯能、改札出たらヤマノススメで、ふもとにヤマノススメの絵があり、山を登ったらヤマノススメのグッズが売られているしすごいところでした。 (本当は飯能駅で元旦限定の音声案内が聞けるはずだったのだけど聞き逃してしまいました、残念。)

天覧山山頂から拝む初日の出もとても良くて、首都圏が一望できる立地にあるので、自然に包まれた天覧山から、都会のビル街に昇る日というものは趣があるなあと。スカイツリーも良く見えました。

その後、近くにあったからという理由で観音寺に初詣に行きました。 ヤマノススメで見覚えのある白い象がいて、なるほど、なるほど……! となった。良い街。

今年は激動の1年になる予感がするぞい!

以下、言えるだけ言っとけコーナー

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

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

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

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

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

12月の季報?の下書きがまだ残っていますが、書き上げる前に年が明けました。 今年も1年、どうかよろしくお願いし[…]

Google 日本語入力 で和英変換ができる辞書を公開しました

雑記

作ったというか既存のものを3行書き換えただけなのですが……。

https://github.com/kyontan/edict-for-google-ime たまに、ちょっと単語を英訳したいとなることがあって、そういった時に重宝する辞書です。

元々は以下のものを使っていたのですが、これの(2) 以降がダウンロードできなくなってしまい、新しい環境に導入することができず…… (完成してから、 google-ime-user-dictionary-ja-en の上部によく見たら *付きの辞書が公開されているのを見つけましたが、それは見なかったことにしました。)

google-ime-user-dictionary-ja-en Google日本語入力の和英辞書作成プロジェクトです。主に「カタカナ語英語辞書」の代替辞書作成を目的としています。(EDICT使用) - Google Project Hosting

 

調べてみると、これの MS-IME 版の辞書を公開しているところを見つけました。

IME和英辞書 - EDICT for MS-IME 2 IME和英辞書 EDICT for MS-IME 2は、豪モナシュ大学によるEDICTプロジェクトの日英辞書をMS-IME用に変換したものです。 「@日本語」と入力することで、英語に変換することができます。

MS-IME 用の辞書 は Google 日本語入力の辞書ツールで読めそう! と思って取り込もうとしたらなんでか失敗してしまう……。 試しに、nkf で文字コードを Shift-JIS から UTF-8 に変換して、ファイル先頭にあるコメント3行を消してみたら取り込むことに成功してとてもよい感じになりました。

というわけで公開します。(記事最初のものの再掲になりますが)

https://github.com/kyontan/edict-for-google-ime もしよければ使ってやってください。

 

作ったというか既存のものを3行書き換えただけなのですが……。 https://github.com/kyont[…]

金の金でwhywaita

雑記

この記事は whywaita Advent Calendar 2015 の 23日目の記事です。 昨日は @twismiko 先輩の ぼくの行きつけのお店とwhywaita - Coyote vs Loadbalancer でした。 恋カケ はまだ終わっていませんが星奏ちゃんって子は良い子だと思うんですよね。

記事タイトルは  whywaitaの金でピザ で生成しました。?

whywaita-gold-gold

さて、この記事ではそんな whywaita 先輩について雑多に書いていこうと思います。

1.知りあったのは……

とりあえず章立てを書いたは良いのですが、そもそもどういう経緯で知り合ったんでしたっけ……? 初めて会ったのは 2013年6月の Twitter で、互いに共通の知り合いである方と電通大の話をしていたときに、そこに興味を持って突然フォローしてきたのが始まりなんじゃないかと思います。 ログなんかを漁って見ると、おそらく 2013/6/19 20:51:24 - 20:52:14 の間にフォローされたのかな、と推測されます。 2013/6 というと、まだ先輩が 1年で入学直後(なはず)で、めっちゃ若いな〜〜みたいな気持ちになります。実験つらそう。

2.突然の出会い

そんな whywaita 先輩と初めて会ったのは、2013年8月に行われた プログラミング生放送勉強会第25回@品川 だったと思います(うろ覚え) あの時は完全に大学3年とか4年とかなんじゃないかと思っていた記憶がうっすらありますが、まだ学部1年だったんですね。

このころの @whywaita の呟きはこんな感じでした。

http://twitter.com/whywaita/status/355492517686415361

http://twitter.com/whywaita/status/357498171284389889

http://twitter.com/whywaita/status/357498194885738496

http://twitter.com/whywaita/status/357498253555662850

http://twitter.com/whywaita/status/359529932101136385

なんか今より若干若い感じですね。なるほど。

その後も Dentoo.LT #5 に参加して会った気がしなくもないような。 ( なんやかんやで電通大に入るきっかけになったのはこのイベントな訳ですがそこは割愛 )

3.そして先輩へ

そして突然月日は流れ、2015/4 に僕は電気通信大学に入学を果たすことになります。 入学翌日あたりの新歓で MMA に顔を出した時の whywaita 先輩の驚きっぷりは今でも覚えてます。 そしてめでたく??? whywaita先輩の後輩になったわけです。分からなくなってきた。

4.せーんぱいっ

{ ここに Twilog から whywaita 先輩の若き頃のツイートをたくさん貼る }

(2016/1/11 追記: 見ていたらこっちが恥ずかしくなったので各位好きに見てください。)

5.にゃ〜ん

http://twilog.org/whywaita/search?word=%E3%81%AB%E3%82%83 https://twitter.com/whywaita/status/6758050269

若い

---2016/1/11:ここより下の文章/節を追記 ---

ぼーっとしながらタイムラインを眺めていたところ、新しいパターンを目にしました。

https://twitter.com/whywaita/status/685885850501033984

https://twitter.com/whywaita/status/685886001223368704

とのことです。

6.先輩のつらそうなところ/つらいところ

いつも知り合いの姿を見つける度に「見つけて!!」「ゎぃゎぃただよ!!!」と言わんばかりに手を振ってくるわいわいた先輩ですが、影ではいろいろと苦労もしているようです。たまに、後輩の僕にもつらそうな顔をして「○○がつらい、つらくない?」「もう○○が○○でつらい〜〜」「にゃーん」「にゃー」「なー」等のつらい話を聞かせてくれます。先輩はいろいろな所のつらい所を知っています。すごいです。

でも、よくよく考えたら先輩はつらいつらいダンス競技協会アジア支部のアジア支部支部長でした。つらいことを集めてきてつらいつらいダンスをしないといけない身ならつらそうなのも納得がいきますね。

https://twitter.com/whywaita/status/681889353841311744

こんなことも書いていましたが、先輩は過去に寝取られた経験があるのでしょうか? 気になります。

7.そして未来へ

 

https://twitter.com/benevolent0505/status/683857986196914176

そう、次の whywaita は僕かもしれないし、あなたかもしれないのです。

おわり。

 

12/24 の記事は @masawada 先輩でした。全文は以下のとおりです

https://twitter.com/masawada/status/680020530464866304

記事のリンクを貼ろうとしたら oEmbed によって記事がまるごと引用される形となりました。なるほどにゃぁ……

この記事は whywaita Advent Calendar 2015 の 23日目の記事です。 昨日は @t[…]

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

Programming

CTF 完全初心者なのになぜか SECCON 2015 九州大会「Attack & Defense」 というオンサイトCTFへ参加し、 -163125 点を獲得した kyontan です。 その節は本当に申し訳ありませんでした。関係各位へお詫び申し上げます。

15:57:20 MMA(kyontan) got -163215 points from ....

http://pastebin.com/KTqNZ4Jf

さて、今回は人生2回目のCTF大会である、SECCON  2015 Online CTF へ、学校の同級生である h-otter / @hogextend と共にチーム overflow として参加しました。

最終順位は 1200点 147位 でした。初心者なりには良くできたのではないでしょうか…… (http://score.quals.seccon.jp)

seccon2015-ranking

自分が解いたのは、以下の通りです

  • SECCON WARS 2015 (100) 何かQRコードが見えるなという感じだったので、良く分からないままにとりあえず動画をダウンロードし、適当にQRが見えている部分のスクリーンショットをVLCで17枚ほど取って、ImageMagick で比較(明) 合成してみたら解けた。 (参考: http://d-poppo.nazo.cc/blog/2014/04/imagemagick/)

  • Unzip the file (100) 既知ファイル2個を h-otter が見つけたものの、既知ファイルを圧縮したものを引数に与えるのを忘れていたっぽいので渡してみたら解けた。

  • Reverse-Engineering Android APK 1 (100) 一番苦戦しました。 apk を逆アセンブルしてソースを除いたら native で libcalc.so の calc() を呼んでいるところまでは分かったものの、どうやって呼ぶかと…… x86 やら armeabi-v7a の so があったので、Raspberry Pi でビルドしてみたりするものの上手くいかず、結局 Android Studio を入れてアプリケーションを1から作って解くというかなりつらい解き方をした。 他の人の Write-up を見た感じだと、calc() のバイナリを読めば 7 を返すことが一瞬で分かったらしい。なるほどつらい

  • Exec dmesg (300) 問題の zip を展開したら iso があったのでとりあえず VirtualBox で起動。 Tiny Core Linux なるものが起動するも、 dmesg コマンドがなくて怒られる。調べてみたら busybox 使ってることが分かったので、フルバイナリ落とせば行けるやろ! と busybox のバイナリを wget で落としてきて dmesg を叩いて終わり。 300点……? という感じのさっくり感でした。うーん……

  • Last Challenge (50) 換字式暗号です!! 1問目でハッシュのキーとバリューを逆向きに作るとかいう凡ミスをやらかしている間に h-otter に解かれましたが、今度はちゃんと解けました。

QR puzzle (Nonogram) についてはソルバを持って来たりパーサでごにょごにょしたりして数時間粘るものの ソルバの精度が低い && QRコードの認識精度が低い という二重苦に苦しめられ、最終的に全操作を自動化して寝て数時間放置するも、2000回 問題を試行して最大正解数が 22/30 とかいうことになっていたので完全に敗北しました。つらい

その他の感想としては、 h-otter が割と色々やってくれて強いな―って思ったみたいなのがあります。 あと、@hogextend が QR puzzle (Windows) を手動で300問 9パズルを解いてフラグを得ていたのが印象的でした。お疲れ様でした。

初めてにしては頑張ったと思っていますが、同じサークルの先輩方のチームには完全敗北を喫したので頑張っていきたい。最強のQRソルバがあるんだよ〜〜などと言われまして、それは何処に……という感じです。

CTF 完全初心者なのになぜか SECCON 2015 九州大会「Attack &amp; Defense」 […]

sinatra-activerecord で seed_fu を使ってみた

Programming

Sinatra で、sinatra-activerecord を使っているときに、$ rake db:seed すると、既に存在するレコードが重複登録される。

これ、とても一般的な問題で、 Rails だと、seed_fu というのを使って解決したりするらしい。

Rails (ActiveRecord 4.x) で動くなら Sinatra (sinatra-activerecord) でも問題なく動くとおもいきや、$ rake -T しても db:seed_fu が表示されない……

ソースやらなんやら見ながら唸っていたら、どうも Rake のタスク追加を、 Railtie を使ってやろうとしているところを発見した。 どうやら Rails だと、初期化時にここのコードが走るらしいのだけれど、Sinatra にそんなものはないので当然タスクは追加されない。

というわけで、Rakefile にベタ書きしてみる。 メインのアプリケーションソースが ./app.rb にあるということになっています。(適宜書き換えてください) あと、なぜか <<< < に置き換えられたので修正してください。

namespace :db do
  desc < <-EOS Loads seed data for the current environment. It will look for ruby seed files in (settings.root)/db/fixtures/ and (settings.root)/db/fixtures/(settings.environment)/. By default it will load any ruby files found. You can filter the files loaded by passing in the FILTER environment variable with a comma-delimited list of patterns to include. Any files not matching the pattern will not be loaded. You can also change the directory where seed files are looked for with the FIXTURE_PATH environment variable. Examples: # default, to load all seed files for the current environment rake db:seed_fu # to load seed files matching orders or customers rake db:seed_fu FILTER=orders,customers # to load files from settings.root/features/fixtures rake db:seed_fu FIXTURE_PATH=features/fixtures EOS task :seed_fu => :environment do

    if ENV["FILTER"]
      filter = /#{ENV["FILTER"].gsub(/,/, "|")}/
    end

    if ENV["FIXTURE_PATH"]
      fixture_paths = [ENV["FIXTURE_PATH"], ENV["FIXTURE_PATH"] + "/" + settings.environment.to_s]
    end

    SeedFu.seed(fixture_paths, filter)
  end

  task :load_config do
    require "./app"
  end
end

Rake::Task["db:seed_fu"].enhance(["db:load_config"])

SeedFu.fixture_paths = [
  Pathname(settings.root).join("db/fixtures").to_s,
  Pathname(settings.root).join("db/fixtures/#{settings.environment}").to_s
]

コードとしては、seed_fu の rakeファイル を元に、sinatra-activerecord から、データベースの接続設定を拾ってくる部分を参考にしたりした。

Rake::Task["db:seed_fu"].enhance(["db:load_config"])

の部分がミソで、これでアプリケーションを通してデータベースに接続する必要がある。ここで2時間ぐらいハマった。

Sinatra で、sinatra-activerecord を使っているときに、$ rake db:seed[…]

non-root な環境で UTF-8 対応の nano をビルドする

Programming

Ubuntu なレンタルサーバーで、 GNU nano を使おうとしたらそもそも nano が入ってなくて、適当にソースを拾ってきて野良ビルドしたら日本語が打てなくてつらくなった。 つらくなったので、--with-utf8 を付けてビルドしようとしたら、 configure で以下のエラーが出てつらくなって結構ハマったので備忘録。

*** UTF-8 support was requested, but insufficient UTF-8 support was
*** detected in your curses and/or C libraries. Please verify that your
*** slang was built with UTF-8 support or your curses was built with
*** wide character support, and that your C library was built with wide
*** character support.

これを non-root な環境で以下の方法にて解決した。 とてもシンプルではあるんだけど、 --enable-widec とか忘れるねん……

バージョンは執筆時点のものです。

$ wget http://www.nano-editor.org/dist/v2.4/nano-2.4.2.tar.gz
$ rm nano-2.4.2.tar.gz
$ cd nano-2.4.2
$ apt-get source libncursesw5
$ cd ncurses-5.9-20140118
$ ./configure --enable-widec --prefix=$HOME --with-shared
$ make
$ make install
$ cd ../nano-2.4.2
$ ./configure --prefix=$HOME --enable-color --enable-multibuffer --enable-nanorc --enable-utf8
$ make
$ make install

追記 (2015/10/14)

http://twitter.com/yosida95/status/653926613772447745

とのことなので、Gehirn RS2 では non-root でも何もしなくても nano が使えるようになるらしい。ありがたい……。

Ubuntu なレンタルサーバーで、 GNU nano を使おうとしたらそもそも nano が入ってなくて、適[…]

Gehirn DNS を DDNS っぽく使えるようにする gddns2 を作った

Programming

皆さん Gehirn DNS 使ってますか? 僕は使ってます!

Gehirn DNS というのは、エイリアスやらマイグレーションやら機能が充実している DNSサービスです。 Web インターフェースもモダンで結構使いやすいのですが、もちろん API も叩けるので CLI でアップデートできて便利。 ステマっぽいですが、使ったところで僕には1円も入りません…… そんな Gehirn DNS を、gddns を使って DDNS っぽく使っていたのですが、Gehirn Infrastructure Service の開始に伴い API体型もガラッと変わりました。

新しい Gehirn DNS でも DDNS っぽく使いたいですよね。 というわけで gddns2 を作りました。

gddns2、複数ゾーン/複数ドメイン使えて便利になった! みたいなのがあります。 そのうち IPv6 対応もしたいところですね。

ちなみに、新しい Gehirin DNS ではリクエスト元の グローバルIP が取得できなくなったので、ipinfo.io を使って取得しています。

Gehirn DNS、2円/日でとても安価なのですが、執筆時点(2015/10/13) ではプレビュー期間なので無料です。ぜひ使ってみてください。

皆さん Gehirn DNS 使ってますか? 僕は使ってます! Gehirn DNS というのは、エイリアスや[…]

iPhone 6s に乗り換えた

雑記

iPhone 3GS → 4s → 5 → 6 と iPhone を使ってきたので、今度も Android に乗り換えることはせず、6s に機種変更した。 色はローズゴールドにしてみた。実物を見てみたら結構落ち着いた色で、男性が使っていてもあまり違和感がない感じだと思う。 キャリアは iPhone 5 から使っている au で、とにかく安定していて速いし最高という感じがする。

肝心の iPhone 6s なんですが、Touch ID が速くなって押した瞬間にロック解除されたり、3D Touch でカーソル移動ができたりして便利になったという感じがする。 3D Touch、結構面白いのだけれど、何に使えるのかまだ良く分からない。そもそも対応アプリが Apple 公式ですら数えるぐらいしか無かったりするので、待つしかない。

あとは、バイブレーションが Apple Watch の Taptic Engine 的な物になった。これは 3D Touch だけでなく、普通の通知のバイブレーションもこれになった。これが結構良くて、小気味よい感じというのがピッタリな表現だと思う。

不満点はやはりソフトの方にあって、Apple Music に入ると付いてくる iCloud ミュージックライブラリ で曲の同期に盛大にコケるというのがある。とりあえず1000曲ぐらい同期しようとする(オフラインで聴けるようにする)と、追加している途中にぽんぽんとエラーが出る。つらい。どうにかしてほしい。 現状では、一旦 iCloud ミュージックライブラリを無効化してオフラインで同期した上で、iCloud ミュージックライブラリと結合/置き換えするのが良い気がする。

あと、最近流行りのデレステ(アイドルマスター シンデレラガールズ スターライトステージ) は、iPhone 6s でもそれなりに処理落ちする。iPhone 6 でプレイしているときと同じぐらい処理落ちしている気がする。

2015/9/26 21:36 追記: iPhone 6s に乗り換えて初めてのプラチナガシャを回したら一発でSSRみくにゃんが出たので最高の端末だと思う。

まだ使い始めて数時間なのでなんとも言えないけれど、ハードウェアとしては結構面白い気がする。 最近は iOS 系の開発にも手を出したので、よしなにやっていきたい。

iPhone 3GS → 4s → 5 → 6 と iPhone を使ってきたので、今度も Android に[…]

人をダメにするソファでダメになった

雑記

1年以上前からほしかった、無印良品 の 体にフィットするソファ を買った。 座ったらダメになったので、ダメになりながら記事を書いています。

Amazon にも似たようなものがヒットしてそっちのほうが3000円ぐらい安いし評価も悪く無いけれど、同じものなのかは確証が持てないし、どうせならと思って無印良品で購入した。 ネット通販で注文したらカバーが別発送になって送料が1500円ぐらい掛かったけれど、届いて納得するレベルの大きさと重さだった。店頭で買わなくてよかった…… 65cm x 65cm x 43cm という大きさなのだけれど、数字以上に大きい気がする。

まだ座り始めて30分ぐらいですが、既に立てる見込みが無くなってしまった。まず立とうとする姿勢に移行することすらままならない。

夏休みはまだまだ半分も過ぎていないので、このままダメになろうと思う。

1年以上前からほしかった、無印良品 の 体にフィットするソファ を買った。 座ったらダメになったので、ダメにな[…]

小型特殊自動車運転免許を取得した

雑記

「運転免許証」「資格」というキーワードを見ると、即座に「フルビット」という単語が思い浮かんでしまうのが資格好きの困ったところです。 フルビットというのは、簡単に言えば運転免許証の種類欄を全て埋める(取得する)ことで、言葉の由来は、昔の免許証が取得/未取得を0/1で表記したことからくるんだとか。

そんなフルビット免許をいつか目指すべく、とりあえずその伏線ぐらいは張ってやろうと挑んでみた結果が以下の有様です。

前説

兎にも角にも資格を全て取れば良いのであるわけですが、運転免許証には制約があり、既に取得した免許より下位の免許を取得することはできません。 その中で、普通自動車免許より下位の免許である、「小型特殊自動車」「原動機付自転車」の2つは持っている人が比較的少なく、特に「小型特殊自動車」なんて、自動車学校以外で聞いたことがある人はほんの僅かしかおられないのではないかと…… 詳しい説明は他所に詳しく書いてあるのですが、ざっくり申しますと、トラクターをはじめとする農業用の特殊車両を公道で運転するために必要な免許です。 また、ふらりと築地に行った時に気が付いたのですが、場内を走り回るターレットトラックも小型特殊自動車に含まれるようですね。特殊自動車の許可証が貼ってありました。欲しい乗りたい……

そんな小型特殊自動車運転免許、資料 (PDF: 運転免許統計(平成25年版) - 警察庁) によれば平成25年末時点で47,7296人しかいないとのこと。

かのエンベデッドシステムスペシャリストよりは多いようです………

本題

自分の住んでいる都道府県の運転免許試験場に行きましょう。写真とお金と住民票の写し(本籍が記載されたもの)があれば、おそらく全国どこでも大丈夫なはず。 お代は意外と安くて、受験料が1500円。合格した場合はそれに加え交付手数料が2050円掛かります。計3550円。

僕は神奈川県在住なので、今回は二俣川運転免許試験場に行きました。相模鉄道(相鉄)、初めて乗りましたが横浜から急行で一駅なんですね。 二俣川運転免許試験場、ホームページなんかを見るとバスによっていく方法が推奨されています。しかし、僕が行った時は年末で、しかも朝だったということもあるのか、道も渋滞しており、後日歩いて行った時とほとんど変わりませんでした。歩いて行く人も多く見かけますし、近道もあるようです。(手作りっぽい看板で近道と書いてある。)

年末に行くと、繁忙期だそうで「原付の方はGの窓口へ...」という案内がありました。小型特殊もきっと同じだろうと思いつつ行ってみたところ、どうやら正しかったようです。

二俣川の場合、年末などの繁忙期は門からまっすぐ進んだつきあたりの建物にある、Gの窓口ですが、平常時は左側のメインの建物入ってすぐの受付で運転免許申請書をもらえます(原付と同じ扱い) **僕「小型特殊を受けたいんですが……」運転免許試験場の方「え、小特(ことく)?!小特?!」 **僕も小型特殊の受験談をいくつか読んだことはありますが、まさか最初からこんな扱いをされるとは思わなかったので、早速胸が踊る踊る。

扱いとしては原付に近いようで、運転免許申請書の「受けようとする免許の種類」の小特の欄に丸をつけるだけ。

適性検査でもお姉さんに「小特受けるの?」と聞かれる。「はい」と答えると、これでもかという感じ(下図)に小特と書かれまくり。おまけに付箋まで付けてくれました。

小型特殊運転自動車免許 申請書

適性検査が終わると、続いて筆記試験です。もちろん小型特殊の受験者は1人しかいないのですが、流石に1人の為に部屋を分けるのも馬鹿馬鹿しいのか、原付と同じ部屋で受験をすることになります。だがしかし、扱いは同じく少数派である日本語以外を用いた試験をする外国人と同じようで、僕の列には日本人は僕しかいないというまたも不思議な状況になった。 ここでも、「本日小型特殊自動車の運転免許試験を受験される方は居ますかー?」などと、200人近くいる試験室で羞恥プレイが。

さて試験。小型特殊自動車は筆記試験だけですが、原付や普通自動車の筆記試験は本が出ているのを見たことがあるが小型特殊に関しては見たことがないどころか出版されているのかも分からない……。というわけで、出題範囲も良くわかりません。 ただ、後日受けた原付と比べると、自動車専用道路に関する記述があったり、わだちに関する問題が出たりと、微妙に原付よりは出題範囲が広く難しい気が……? ただ、原付の試験範囲を抑えておけば合格点(45/50)は取れるのではないかと思われます。 だがしかし、なぜ60km/hで走っている状況のイラスト問題が出たのかは永遠の謎。(小型特殊自動車は最高速度が15km/h)

合格発表です。小型特殊自動車の合格発表は原付と同時に行われます。 無事、自分の受験番号が見つかり、ホッとしている間に、「原付の合格者はこちらです」などと案内が行われていました、が、小型特殊自動車の試験合格者が呼ばれる気配は一向になく、その場(合格発表の電光掲示板前)で放置プレイを喰らいます。 まあ立ち尽くしていてもどうしようもないので受付の人に聞いてみるわけです。ここが小特らしいところで、受付の人が「小特の人ってどうするんでしたっけ……?」などと内線でどこかに尋ねはじめるわけです。どれだけ普段受験者が少ないんだ…… 余談ですが、初回の受験では落ちました。敗因は試験範囲が第一段階だけだと思い込んでいたことです……。本当につらかった……

どうやら、小特の試験合格者は原付とは違い交付手続きを受ければ良いらしい。 ただ、交付手続きの窓口は午後1時(うろ覚え)ぐらいまで開かないため、2時間以上待たされるなどする。 原付では、原付講習なるものを受けて、2時間の間、原付が如何に事故りやすい乗り物であるかということについて洗脳される必要がある。

その後交付手続き。待遇についてはお察しの通り。外国人免許と同じ扱いでした。 書類貰って発行手数料分の収入印紙を貼って、顔写真を取って再度交付窓口で待たされたら発行されたのがこちら。

小型特殊自動車運転免許証

個人情報だらけなのでボケボケですが、輝かしい「小特」の2文字のために僕(ら)は頑張ってきたんだという気持ちになれます。有効期限の背景が黄緑色なのも若葉っぽさがあって良いですね。 初回の交付は黄緑色で、2回目以降は青色、条件によりゴールドになる。 こうして、小型特殊自動車運転免許を取得することに成功したのでした。

後日談

その後、原付と普通自動車の免許も受験しまして、次に乗るのはいつになるのだろうかという気分になりながら原付講習で原付に乗り、「あなたもライダー」という小冊子を貰いました。 下が現在(2015/8/4)の僕の免許証です。

普通自動車運転免許 運転免許証

雑感としては、普通自動車免許取り立てで若葉マークを付けているのにも関わらず、免許証が青色というのはやはりミスマッチ感があって良いという感じです。

また、最近ですが運転免許の勧誘を受けたので、「けん引が取りたい」と言ったところ「生意気な」と言われたことを挙げておきます。取りたかったのに…… そこまで悪意を感じる言い方ではなかったことを付記しておきます。 というわけで次は 大型特殊 か けん引 が取りたい。特に Euro Truck Simulator 2 (link: Steam) にドハマリした身としては、けん引免許がとてもが取りたい。

「運転免許証」「資格」というキーワードを見ると、即座に「フルビット」という単語が思い浮かんでしまうのが資格好き[…]

2015年5月あたりの今日このごろ

雑記

しばらくブログ書いてないなー書かないとなー。でもネタがないなーとかやっていたら半年ぐらい経ったらしい。 半年間何をしていたか書きだそうとして、本当に何も書くことがなくて絶望しつつ雑記。

とりあえず学生から無職になるかと思われていたし、自分でもそう思っていた。 やりたいことの方針はざっくりありつつ、将来像は未だ浮かばず。 けれども、なんとかあと数年は 「職業: 学生 」と書けそうだ。良かった。

僕は自分のことを、「変な人間と言えるほど尖った何かを持っていなくて、だからといって一般人の中には居られない(居たくない)人間」として認識している。 結果として、進学先が決まり4ヶ月、進学して早1ヶ月。ふわふわと漂っていただけだということを自覚して、焦りつつ。

なんでこんな記事を書いているかと言えば、とある集いにて、他人の自己紹介やら夢やらなんやらを読んで心に刺さったからでして。 自分の自己紹介を書いていて、過去に何か大きなものを作ったわけでもなく、これから何か作りたいかと言われると具体的なアイデアもなく、ただひたすらに資格やら触ったものやらを書くことしかできないなぁ……とか。 (そういえば小型特殊自動車運転免許を取ったので今度取得談でも書こうかと思う。)

read more »

しばらくブログ書いてないなー書かないとなー。でもネタがないなーとかやっていたら半年ぐらい経ったらしい。 半年間[…]

sigma.js に送った Pull Request が マージされた

Programming

sigma.js という便利なグラフ(グラフ理論の方)の描画ライブラリがあって、研究のGUI部分で使っていたらバグを踏んだという話。

グラフの描画領域をスクロールした時に、ノードをドラッグしようとすると座標がぶっ飛ぶという割りと深刻なバグなのだけれど、sigma.js のサンプルは全てページに全画面で描画されていたので今まで気が付かなかったんだと思う。

原因はブラウザの座標系の違い (pageX/Y と clientX/Y のズレ) だった。JavaScriptでブラウザの座標系なんて今まで意識したこともなかったせいで、原因を突き止めるのにかなり手間取ってしまった……

結果として、修正は以下の2行の変更で済んだ。

-  x = event.pageX - offset.left,
-  y = event.pageY - offset.top,
+  x = event.clientX - offset.left,
+  y = event.clientY - offset.top,

僕はこのコードが存在するもう一箇所(タッチデバイス向けのコードだった)にも修正をして、PR(Pull Request) を送ったのだけれど、これが問題だった。

送ってから数週間反応が無かったので、いつ Merge されるのかなと楽しみにしていたら、昨日 Issue に返信があって、「そのPRはタッチデバイスのピンチイン/アウト操作を破壊している」と突っ込まれ、………?! とびっくりしつつ、返信の検証コードを試したら確かにバグっていて、急いで元々の修正点1箇所だけを修正したPRを送信。

昨夜未明に無事 Merge されました。よかったよかった。

OSS、こうして人のプロダクトに貢献出来るの良いな〜と思いますし、承認欲求も満たせて一石二鳥な感じがありますね。 今後も貢献していきたい

なんとなくこの記事を書きながら、Issue の英語間違ってて恥ずかしいなこれーとかなっていた。恥ずかしい恥ずかしい

sigma.js という便利なグラフ(グラフ理論の方)の描画ライブラリがあって、研究のGUI部分で使っていたら[…]

lldbの使い方備忘録

Programming

メモリ管理周りで色々ハマってたのだけど、普通にデバッガを使えばよかった。 Mac OSX だと、gdb より lldb を使う方が環境的に整ってて楽っぽい。LLVMさまさまだ。

LLDBの使い方(チュートリアル日本語訳) | こん

とりあえずここを読めばいいと思います。

以下は、上を読みながら実際にどのようにして作業を行ったかという流れのメモ。

まず、コンパイル時に -g オプションをつけてコンパイルすること (これによって変数名や関数名のようなデバッグ情報が埋め込まれる)

$ pgrep a.out

なんかでプロセスのpidを取得して、

 

$ lldb -p [pid]

で対象プロセスにアタッチ

 

(lldb) breakpoint set -n malloc_error_break

とすると、mallocにまつわるエラーにブレークポイントがセットできる (その他のブレークポイント等は元記事を参照)

これを叩いた時に、メインプロセスの実行が止まったら

(lldb) c

で再開出来る。(c は continue の省略コマンド) で、実行すると、ブレークポイントで自動的に lldb がスタックトレースを吐いて止めてくれる。

 

(lldb) bt

でスタックトレースが表示できる (bt = thread backtrace)

 

(lldb) frame select [n]

で、n番目のフレームに移動出来る (btで表示した #n にあたるもの)

 

(lldb) frame variable

とすると、そのフレームから見える変数が表示できる。

 

(lldb) p [variable]

とかすると、 valiable の値が表示できる。 また、*, &, ->, [] みたいな演算子も使用可能

 

(lldb) expr (int)printf("hoge")

みたいにすると、 printf("hoge") の返り値を取得できる。 ただし、返り値のキャストが必須のよう (普通にhogeと表示出来るらしいけれど、こちらの環境では上手くいかなかった)

メモリ管理周りで色々ハマってたのだけど、普通にデバッガを使えばよかった。 Mac OSX だと、gdb より […]

.yokohamaドメインを取った

雑記

昨日の昼ごろ、友人から .yokohama が今日らしいという話を聞いてついやってしまった散財事案。

[http://pref.yokohama

](http://pref.yokohama)ドメインの通り、「横浜県」のサイトで、もはや何も言うまいという感じにネタでしかない気がします…… 一応弁明をすると、実際には横浜県ではなくて神奈川県横浜市であるわけで、僕は鎌倉市民です。

まだ1文字の日本語ドメインなんかも取れるようなので(昨日20時ごろ確認)、色々とネタに出来る気もする。 920円/年というのもお手軽で良いですね。(お名前.com)

新gTLDで、日本の地名がTLDになるものは、調べた感じ以下の9つぐらいだそうで、 .sendai とか一体どういうこっちゃという感じですが、まだまだ面白くなりそうです。

  • .tokyo

  • .kyoto

  • .nagoya

  • .yokohama

  • .okinawa

  • .osaka

  • .ryukyu

  • .wakayama

  • .sendai

地理的名称トップレベルドメイン ‐ 通信用語の基礎知識 「.yokohama」横浜のための新ドメイン | GMOドメインレジストリ株式会社

昨日の昼ごろ、友人から .yokohama が今日らしいという話を聞いてついやってしまった散財事案。 [htt[…]

Ubuntu 14.04 LTSでCUDA環境を整える

Programming

最近組んだPCで環境構築をしていて、何故か物凄くハマったので記録。

以下、気を付けた方が良いと思った点です。

  • そもそもFreeBSDでCUDAをネイティブに扱うことは出来ないので辞めたほうが良さげ。(ハマった

  • GUI環境だと何度もコケたので、GUI環境は避ける方が良い (Ubuntu Server をおすすめします。

  • apt-get でドライバ, CUDA Toolkitを入れるのはハマることが多いので、NVIDIAのサイトから**.run**ファイルを落とすのがおすすめです。

  • nvidia-smi コマンドでグラボが認識しているか確認出来る。

参考リンク

最近組んだPCで環境構築をしていて、何故か物凄くハマったので記録。 以下、気を付けた方が良いと思った点です。 […]

たまこラブストーリーを観た

雑記

昨年春に放送された、たまこマーケットの続編のつもりで観たら、一言で言い表せない何かを感じたので感想がてら

ほんわかした女の子、そんな幼馴染が好きな男の子、その2人が付き合うまでの、照れと恥ずかしさの混ざった幸せな物語が見たい方には是非観て欲しい作品だ、というのが率直な感想です。

「たまこまーけっと」を見ていない方でも楽しめるだろうな、と思える作品です。 そして、上記の文章にワクワクした方ならきっと楽しめます…!

ここからは余談です。

劇場版の放映が決定したというTwitterの呟きを最初に見た時、本当かな?と半信半疑で投稿者のアカウントを見たら、アイコンもユーザー名も劇場版仕様になったアカウントが呟いていて、「たまこまーけっと」公式アカウントの面影が殆どなかったために、このアカウントが本物なのかもはっきりと分からず、何とも言えない気持ちになったのを覚えていますw

それはともかくとして、名前も「たまこマーケット」ではなく、初めて公開されたたまこの絵から伝わってくる雰囲気が、アニメのそれとは正反対と言えるほど違うこともあって、どんな作品になるのかな、と、わくわく半分、不安半分の気持ちでした。 事実、興行が始まった3日前も、まだどうしようか悩んでいて、このまま観ないで終わるのかなと、そこまで観ようという意欲は湧いていませんでした。

しかし、昨日ふと目に入った、とある記事を読んで、これは観るしかないと思い立ち、今朝一番の上映を観てきました。

「たまこラブストーリー」が、傑作だと確信できたのはなぜか - たまごまごごはん

そしていま、とても満足した気分に浸りながら、この文章を書いていたりします。

タイトル通り、この作品はラブストーリーで、話の流れも最初から予想がつきますし、それだけに入り込みやすい作品になっていると思います。....

ってことが書きたかったわけではなくて………!

もう何といっても、作中の様々な所に散りばめられた演出が素晴らしいのです… 「たまこまーけっと」も「たまこラブストーリー」も、この世界観が好きで、のめり込んでしまいそうになります。

BGMを中心とした音楽にも、作品との繋がりを感じさせる所が多くありました。 特にマーチングで使われた「上を向いて歩こう」は、実の父親が好きで良く聴いていたようなこともあり、この世界にすっと溶けこんでいくような感覚がありました。

幼馴染の女の子と付き合うということの良さを改めて実感でき、そして可愛いあんこちゃんを再び劇場で観ることができた、それだけで最高なのです…

 

昨年春に放送された、たまこマーケットの続編のつもりで観たら、一言で言い表せない何かを感じたので感想がてら ほん[…]

NURO 光になった

雑記

最近TVのCMでも見かける、NURO 光という2Gbps(ベストエフォート)な回線になった。 とは言え現状、コンシューマ向けで10GbEのNICなんて殆ど無くて、ルーターに3つある1000BASE-Tなポートで分配する仕組みらしい。 これ、GbE NICx2でボンディングしたら面白そうじゃね? などと考えたので、そのうちやってみたい。

IPv6もネイティブ対応してて、ついでにDNSの方も設定を更新して、このブログもついにIPv6でアクセスできるようになった。素晴らしい

問題は、IPv4が不安定だということで、回線が通って2日で10回ぐらい切れた。ルーターの設定ページからWANへ再接続すると繋がるのだけど、たまにルーターの設定ページにすら繋がらなくなる。 ルーターでエラーログ見れないかなーと思って、ログレベルをERRORに下げたところ、以下の様なログが出てきた

**追記 (2015/10/13) ルーターの交換により解決しました。記事の末尾を参照ください。 **

ルーター システムログ

wan0(ipv4)がダウンしてる……?! 訳がわからない…… 条件が分からないので対処のしようもないし、ググるも似たような症状な人がいなくて困る。 ただ、なんとなくIPv6とIPv4のトランスレートあたりが原因な気はする。なんとなく

NURO 光で貸与されるルーターにはHuawei製の HG8045j とZTE製の ZXHN F660Tの2種類があるようで、今回貸与されたのはHuawei HG8045jだった。 ただ、ネットの評判を見る限り特にどちらが外れという訳でもなさそう。一応参考情報までに。

不安定なのはIPv4だけなので、IPv6オンリーにすれば問題なく使える。GoogleFacebookなんかはIPv6対応しているので問題なく使える。嬉しい 逆にTwitterniconico, pixivなんかは対応してなくて、アクセスできない。対応してくれ~。

今までIPv4で問題なく暮らせていた身としては、IPv6対応とかまだいいだろ~と思っていたのですが、こういった状況に陥るとIPv6へ移行することの重要性を痛感しますね…

追記 (2014/5/9)

1週間ぐらい経過すると、IPv4が切れるという問題はすっぱり無くなり、その後1ヶ月近く経ちましたが、IPv4が繋がらないということは無くなりました。 原因は不明なのが気になりますね…

追記 (2015/10/13)

最近、また不安定になってきたのと、風のうわさで「So-net (プロバイダ)に問い合わせると最新のルーターに交換してくれるよ。」という話を聞きつけたので、問い合わせて交換してもらいました。 交換後のルーターは、Huawei HG8045D というものでした。 どうやら新しいルーターは2種類あるようで、どうやら片方は 802.11ac にも対応している様子。(今回交換してもらったものは非対応でした。)交換後は不安定になることもなく、また無線LAN (802.11n) も 250Mbps ほど出て非常に安定しています。 もし困っている方の参考になれば。

最近TVのCMでも見かける、NURO 光という2Gbps(ベストエフォート)な回線になった。 とは言え現状、コ[…]

2014年です。

雑記

あけましておめでとうございます。

どうやら今年は受験生にならないといけないようで、進級するべきか悩みますね…

ともあれ、今年もよろしくお願いします。

 

恒例のお年玉はこちらからです。お待ちしております。

あけましておめでとうございます。 どうやら今年は受験生にならないといけないようで、進級するべきか悩みますね… […]

2013年が終わる

雑記

どうやらTwitterのTLを見てる感じだと、今年を振り返る記事を書くのが流行っているようなので

もう振り返ってた: Twitterと僕の2013年 もう一つ値を追加してみます。

購入した薄い本: **66冊 **数字で見ると、意外にもあまり大きくない感じでした

 

Amazonで購入した商品の合計金額: **64079円 ****えっ…… **(購入した金額を合計するスクリプト、ギフト券で決済すると0円になって正しい値が出なくて素直に電卓で数えてたら時間が23:58

 

では良いお年をお迎えください。

どうやらTwitterのTLを見てる感じだと、今年を振り返る記事を書くのが流行っているようなので もう振り返っ[…]

情報科の授業は教養に過ぎないという話 - 別の視点から

雑記

この記事は、 yosida95 先輩の「情報科の授業は教養に過ぎないという話 - 東京工業大学附属科学技術高校編」という記事に触発されたものです。 同じ学校で現在学んでいる者として、補足ではないですが別の視点から何か書けないかな、と思って書いたものです。

後輩という通り、私も東京工業大学附属科学技術高等学校 情報・コンピュータサイエンス分野 に所属している学生であり、現在2年生です。

同じ分野で同じカリキュラムを受けている以上、上述の記事の内容やそれに至る経緯は分かりますし、自分も同じような事を考えたことはあります。 入学前は、どんなすごい人がいるのだろうと思って期待に胸を膨らませていましたし、とても高等的な技術を学ぶことが出来ると思っていました。

ただ、卑屈な言い方をすれば、私はそこまで頭が良いわけでもなく(中学の平均評定が3以下みたいな)、この学校に入ってからは、それはすごい方が沢山いて、1年の間はこの学校に入って本当に良かったと思っていました。情報だけに興味があったわけではありませんし、色々な分野の事を知る良いきっかけになったと思っています。自分は一般受験なので、入学時に分野が決まっているということはなく、1年次の様々な授業を通して1年次の最後での分野選択で2, 3年の分野が決まるという形でした。

その後、私は情報・コンピュータサイエンス分野へ進級しまして、現在に至るわけですが、進級してから今現在までの8ヶ月弱で、この学校の専門教育と、生徒の意識の乖離がかなり気になってきました。 というのも、この学校には5つの分野があり、ほとんどの生徒(一般受験)は1年間で分野を選び、進級するわけですが、各クラスに均等にわかれるということはなく、各学期の試験の累計点で上位から振り分けられ、志望分野に入れなかった生徒は他の分野へと振り分けられることとなります。情報分野はどちらかと言えば人気がなく、そのようにして第2, 第3志望で入って来て、卒業さえ出来ればどうでも良い、専門教科なんて単位さえ取れれば良いといった生徒も少なからず居ます。 問題は、授業がそういった意識の低い生徒に合わせようとレベルが下がっているということでして、例えばC言語のプログラミング技術の授業では、**gets()**で読み取った値を構造体に代入するプログラムを書くだけで30分も時間を割いたりということが少なからずあり、そもそも私語だらけ、授業中に席をたつような人ばかりで形としてすら成立しているのか怪しい授業も特に専門教科に目立ちます。

後は、今挙げたプログラミング技術のような授業において、カリキュラムが古く、流石に無いだろ…みたいな状況を生み出しているということです。**gets() **の問題点を一切指摘せず使用しているような授業です。(指摘してもスルーされたということも挙げておきます。)

ただ、ある意味救いとなっているのは、授業内容を聞いていなくても、出来る人はどんどん先に進んで良いといったスタイルがどの教科でも認められているということです。これは専門教科だけに限らず、数学でも、入学時に数123ABの教科書を全て購入し、授業中であれ好きに進めていって良いということが認められているというような事からも挙げられます(進学校ならどこでもそうなのかもしれませんが…)。

そういったこともあり、また自分の場合は同級生に技術力高い人が何人もいることもあり、現時点で高校辞めたいとは思ってなかったりと、そこが先輩と異なるところなのかな…とも思っています。ただ、週3つのレポートとか真面目にやってると辛くなったり、彼女が出来なかったり、たまに退学したくなったりしますが。

だんだん何を書いているか分からなくなってきましたね… 駄目な感じです。 もちろん僕の学校に対する不満はこれに限らないのですが、これ以上は個人の #闇 に触れ兼ねないので割愛させて頂きます。

結論: 人とか環境とかそういったものによる

今年最後のエントリっぽいです。

read more »

この記事は、 yosida95 先輩の「情報科の授業は教養に過ぎないという話 - 東京工業大学附属科学技術高校[…]

Twitterと僕の2013年

雑記

Twitterにおいての一年を振り返る Advent Calendar 2013

珍しくブログに記事を書いたと思ったら1年の振り返りです。最近書いた気がします。

4日目です。12/4日です。クリスマスイブまで20日, クリスマスまで21日です。やったぁ……

でも、よく考えたら僕、このアドベントカレンダーに参加していながら、TwitterのアカウントをProtectedにしたばっかりでした。

とりあえず2013年にTwitterをどう使ってきたか振り返ります。 Twilogを見ながら思い出していきましょう。 ……と思ったら、どうやら5月まではまた他のアカウントを使っていたようです アカウントは規制用と身内用を合わせて5つあるのですが、メインの3つがごっちゃになって良く分からなくなって、最終的に、 @sukukyon に落ち着いた感じです。これ以外では身内用しか使ってません。 で、Twilogを見ながら確認したところ、今年は46428回呟いたようです。ただ、最近は減る傾向にあって100tweets/day前後になってますね。

気になった単語の出現回数を幾つか調べてみました

  • /[^@].おはよ./ : 113回

  • /[^@].おやす./ : 137回

  • /スク水|スクール水着/ : 342回

  • 幼女 : 35回

  • おっぱい : 8回

  • 女の子: 217回

  • 彼女: 94回

  • /買った|戦利品/: 98回

  • ふえぇ: 179回

個人の基準でやるのあれだなーと思ってMeCab + ipadicで品詞分解して頻出語を出してみたのですが、Twitterの短文ツイートなんてそのままipadicで品詞分解してもまともな結果が得られるわけがありませんでした…… というわけで、色々と調べてWikipediaの日本語版の記事タイトルと、はてなキーワードから取得した単語をMeCabの辞書に追加して、再びやってみたところ、ようやく結果っぽい結果が得られましたのでまとめ

  • pro:100

  • サイト:100

  • 終わっ:107

  • den:111

  • そもそも:116

  • おやすみなさい:132

  • (中略)

  • ですよ:213

  • レポート:257

  • スク水:273

  • ですか:316

  • なかった:318

"pro"はMacBook Pro欲しいみたいな発言から推測出来ますが、"den"が何を意味してるのかよくわからないです… dentoo.ltでしょうか? また、レポートに追われていたりとか、それよりもスク水が大事だとかよく分かりますね…。 改善の余地あり。です

さて、まとめるネタもなくなってきたので、ひたすらに全件ログを目で追っかけながら面白そうなのを拾ってみました。

1月 : たまこマーケットが素晴らしいです ****「スク水が届きました。フットマークの132105です。 http://yfrog.com/esf5xtxwj

女の子に膝枕をお願いするのがセクハラに入るのか考えつつ寝よう

2月** : ぷちます!も面白かったです。 **「File:///

マックスコーヒーで甘さちょうどいいなー。でももっと甘くてもいいなーとか思っちゃう

女の子の二の腕ふにふにしたい

3月** : まおゆうを途中で見逃してしまいました…… **「神社の巫女さんの後輩……とは

そうだ、京都行こう を行動に移すべく

I'm at 京都駅 (Kyoto Sta.) (京都市下京区, 京都府) w/ 10 others http://4sq.com/XgoA0q

**4月 - ゆゆ式が始まりました! **「そうだ信玄餅買いに行こう

幼なじみな女子と温泉に来ている #別にリア充ではない

5月 - ゆゆ式が面白いです 七分丈のシャツ(?)を着てる女の子の二の腕ふにふにしたい

**6月 **** - ゆゆ式が面白いです **「スク水少女とイチャイチャ出来ればそれで良い

エネミーメイカーとかいう称号を手にした

**7月-9月: きんいろモザイクが最高でした…… (綾ちゃんが好きです

**10月-12月: のんのんびよりのこまちゃん**が可愛いです。にゃんぱすー ****1月- : 桜Trickが始まる予定です。よろしくお願いします。 **疲れました。

たまには見返すとその時に何を考えていたかを思い出したりして、なかなか面白いものですねー それにしても彼女欲しいというツイートが目立ちますし、彼女が出来ない理由がわかった気がします

まとめも何も無いですが、Twitterで2013年を振り返った感想: 「3年前のツイートよりはまともな気がするけどやっぱり痛い」 よく考えたら今日は試験前日でした。Twitterの1年を振り返っていたら試験前の1日が失われてしまいました…

明日は誰が書くのでしょうか…… 楽しみですね。

Twitterにおいての一年を振り返る Advent Calendar 2013 珍しくブログに記事を書いたと[…]

Adventar::Listを作った

Programming

12月になりました。アドベントカレンダーの季節ですね。 アドベントカレンダーといえば、去年はATNDを中心に行われているものが多かった気がするのですが、今年はAdventarというサイトが使われているものを多く見かけます。 Adventarというのは、その名の通り、アドベントカレンダーの作成, 記事の公開に特化したサービスで、TwitterやGithubアカウントを用いて簡単にアドベントカレンダーへの参加, 作成が出来ます。

ただ、このサービス、1つ気になったことがあります。

なんでアドベントカレンダー作るのはそんなに簡単なのに今日の記事一覧が見れないんだ!!

……何故でしょうか…… 今日公開された記事を5つ観ようとしたら、5つそれぞれのアドベントカレンダーのページを開き、そこから今日の日付のところまでスクロールし、リンクをクリックしないといけないのです……

これはまとめを作るしか無いなーと思いまして、作りました。

Adventar::List

※ちょこちょこ稼働させながらコード書き換えてるので500返りますがご愛嬌

超シンプルです。めいどいんSinatraです。 最初はCGIで作っていて(何)、1ファイルで動いてミニマム感溢れていたのですが、あまりにも遅すぎたので途中でPassengerに変更しました。 データはAdventarから持ってきたものをNokogiriでスクレイピングして、redis_ormを使ってRedisに投げています。 ただ、redis_ormの実装がアレなのか良く分かりませんが、異様にバグります。なんでや!! 例えば、id=1なオブジェクトを検索したらid=2なものが返ってくるとか、find(:all, ...)で取得したデータが何故か最後に突っ込んだデータだけとか… あまりにも残念すぎたので素直にDataMapperを使うべきだったと反省。

最後に: クリスマスプレゼントお待ちしております!

12月になりました。アドベントカレンダーの季節ですね。 アドベントカレンダーといえば、去年はATNDを中心に行[…]

年齢++

雑記

そういえば、9月19日が僕の誕生日だったわけです。ゆかりんと同い年になったのです。

そんなこともあって、9月1日からこんなことを呟いていたりしたわけです。

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

そんなこんなでウィッシュリストを晒して、何かのネタになればなー。あわよくば誕生日プレゼントを……などと期待を膨らませていたら、@KOBA789 先輩(?)から、早速こんなものが届いた。

MAXコーヒー(箱)

……正直びっくりしました……。わーお……

マックスコーヒーが本当に好きで、見つけ次第買っていたりはしますが、まさか箱で来るとは思っていませんでした。

しかも一緒にリストに入れてた缶ではなくペットボトルで来るとは…いやはや本当にありがとうございます。

1日1本飲んで健康増進に努めております。

話はそれますが、学校の生協で、「マックスコーヒー入れてください」と夏前に要望を出して見たところ、先週からいきなりペットボトルの販売を始めたそうです。まさか入荷するとは…

毎日、販売分は完売しているようです。物好きはいるものですね

これだけで終わるのかなーと思っていたら、そんなことはなかった訳でして。

ある日、MAXコーヒーが届いたなどと学校で話していたら、友人氏に、「リストから濃いものを送っておいたよ」などと言われ、恐れ半分に楽しみにしていたら

サドンデスソース

サドンデスソース。骸骨のキーホルダーが付いてます。

……? リスト入れてないよ……? ……

まあ、何となく想像はついていたものの、Amazonのウィッシュリストの「ウィッシュリスト内の物と一緒に他のものを送れる」という仕様を利用されたわけです。

天狗ビーフジャーキー

リストに入れてたのはこれ。天狗ビーフジャーキー(HOT)

撮ったのが食べた後なので空っぽです。レポートの肴に頂きました。美味しかったです、ご馳走様でした。

アイマス2, G4U Vol.2

そして一緒にアイマス2(右側)も送られてきたという! これは嬉しいですね。

左、パッケージの真美が可愛いG4Uは、本人から直接渡され、お借りした物です。(友人氏「真美のスク水とか好きでしょ??」「……」)

20130922-005547.jpg

さすがに開けた時に真顔になったのはこれっきりですね。

いや、確かに真ん中の本はちょっと面白そうだからウィッシュリストに入れてたのだけど、まさか右のような漫画とか、左のような何でR指定じゃないんだこれみたいな物が一緒に来るとは……(左の本は気になったら作者名でググると良いです)

20130922-012430.jpg

キムワイプとチェリーコークです。缶で12本だとこうやって横に長いパッケージになるんですね。

缶ビールで6本パックは見たこと有りますが、横に長いのは初めて見ました。

キムワイプって…… 卓球に使うやつですよね?

ところでこれ、誰が送ってきたのかなーとふと気になったのですが、後日、同級生である @hu__hu 氏からの物であると判明。

@hu__hu 「キムワイプ入れたから分かると思ってた」 分かるかぇ……

ちなみに以前、彼の誕生日に砂利を送ったことがあります。

抹茶そば, 宇治抹茶、 茶筅

茶そばと宇治抹茶, 茶筅(茶せん)です。 @nullpogemuta さんより頂きましたっ

抹茶大好きです。茶そば食べたさに青春18きっぷを買って宇治の伊藤久右衛門に行くぐらいには。(当時のツイート)

宇治抹茶も大好きなので、点てて頂きたいと思います。ありがとうございます。

以上になりますが、まさかこんなに届くとは… いや、そもそも何か届くとすら思ってはいなかったので正直驚いてます。

そして、ウィッシュリストに入れてないものが半分を占めているという事も驚きですが…。

そういえば、ウィッシュリストの住所は"きょんたん"名義で入れてあったのですが、住所の最後に"〇〇方"(〇〇: 苗字)にしておくと届く! みたいなライフハックを見たことがあり実践したみたところ、しっかり届くことが判明しました。

受け取り時に、ヤマトのお兄さんに「ワンちゃんのきょんたんさんにお荷物ですー!」とか言われる事案が発生したのはまた別の話、わんわん。

 

送ってくださった方々、本当にありがとうございました。大切にさせて頂きたいと思います。

ちなみにウィッシュリストは、年中公開しております… お待ちしております。

誕生日プレゼントとして届いたもの。

そういえば、9月19日が僕の誕生日だったわけです。ゆかりんと同い年になったのです。 そんなこともあって、9月1[…]

開いているタブ数をツイートする Chrome Extension を作ってみた。

Programming

ふとした思いつきで作ってみた。

https://twitter.com/sukukyon/status/381401707759935489 [https://twitter.com/sukukyon/status/381401849338683394

]()Chrome Extension 、作るの面倒くさそうだなーという思い込みがあったのだけど、実際に試してみたらかなり簡単でした。

情報も充実してて、分からないことはググったら一発で解決したので、ふとした思いつきという微妙なモチベーションでも詰まらずに完成したわけですっ。

今更、作り方を説明などしても無駄な感じなので、参考になったサイトを2つだけ。

Chrome Extensions API リファレンス

ただのリファレンスと言っては何だけれど、困ったことは大体ここを見れば良いと思う。

What are extensions? - Google Chrome

公式の解説ページ。リファレンスにもなっているけれど、チュートリアルだったり、各機能のサンプルが豊富にあったり。

単に自分が使えればいいやー程度の、そもそも公開する気なんてさらっさら無い拡張機能なので、セキュリティ周りとかを何も考えずに作ったら1時間で出来た。

それにしてもお手軽だなーと。

JavaScript やら HTML やらの基本知識さえあれば、そこそこの物は簡単に作れる気がする。ただ、既存の物は結構多いのでやはり新規性が…

とりあえず出来上がったものを置いておきますね。

http://dev.monora.me/test/TabCount.crx Chromeでそのままインストールしようとするとエラーが出るので、一旦ダウンロードしてから、設定->拡張機能 のところに ドラッグすればインストール出来る気がします。

ふとした思いつきで作ってみた。 https://twitter.com/sukukyon/status/381[…]

愚痴

雑記

ちょっと色々つらみが溜まってきて、Twitterで愚痴るにも文字数的に微妙な感じだったので、帰り際にiPhoneで書きためてたら割りと微妙な量になった。

以下、ただの愚痴です。

なんというか、こうやればいいのにっていう解決案に対して、「こうすると良いよ」みたいなのは言えても、どうしても真意が伝わらなくてぐぬぬってなる 強く言えない理由はいくつかあって、

  • 後輩(相手)に悪く言われたくない

  • 相手の努力を否定しにくい

  • そもそも自分が相手ほど頑張っていない

っていうのが大きいなぁ…

そもそもの価値観?が共有できないのは辛いし、そう簡単に言葉に表せるものでもないから大変だなーって

ただ、プログラミングに対する憧れ、みたいなのも悪いとは思わない、っていうか僕がそういうのを持ってるから否定できないのよね。 そんな僕みたいな人が仮にも上にいるのが諸悪の根元な気もする…

1年前の自分なんて、ただただ雑談ばっかりしてたり、Vita で DIVA f なんぞをやって過ごしていたわけですし、本当に他人のことをとやかく言えないのがなぁ…………

幻想を捨てろって言われて捨てられたら良いよねって思うけど、それは思考の転換の問題であって、結構大変な訳です。 変えなくちゃっていう切迫感ばかりが残ってるときは、結局何も出来なくて、自分の考えって言うのは自覚してない間に変わっていて、ふとそれに気がつくっていうのが良くあるので。 考えって言うか価値観かなぁ、まあ似たような物だと僕は思ってるけど

これを書いていて、自意識過剰っていう単語が脳内に貼りついているわけですが、そういうことなのかなぁ?

まあ結局、過去にも似たようなことは何度も起こってるし、何度も同じようなことを思ってるので、今回もその例に漏れず、寝て忘れるのが一番ですよね…

こうやって帰りの電車で文章化してたら割とすっきりしたので、やっぱり考えを整理するのって大事だなーと思った次第です。 あまりにもやり方が普通すぎて面白くないとは思うけれどw

ちょっと色々つらみが溜まってきて、Twitterで愚痴るにも文字数的に微妙な感じだったので、帰り際にiPhon[…]

Apple Storeに行ったらMBAが5時間で修理された話

雑記

Apple Storeに行く前に 言っておくッ! おれは今 やつの早さを ほんのちょっぴりだが 体験した い…いや… 体験したというよりは まったく理解を 超えていたのだが……

あ…ありのまま 今 起こった事を話すぜ! 「おれは Apple StoreでMBAを修理に出したと 思っていたら いつの間にか修理が終わっていた」 な… 何を言っているのか わからねーと思うが(ry

とどのつまりは、MacBook Air(Mid 2012)を修理に出したということです。

症状は下記の画像の通り

[caption id="attachment_308" align="alignnone" width="320"]

MBA ディスプレイ交換前

MacBook Airのディスプレイを交換する前[/caption]

ディスプレイの中央に、背面のリンゴが透けています。というよりか、元から透けるものだと思っていた…… 先日のプロ生で、「これって透けるものなんですか?」「んなわけねーよwww」というやり取りで知りました。びっくり 要するに圧迫痕な訳です。

というわけで先日、Apple Store GinzaのGenius Barに持ち込んで見て頂いたところ、あっさりと無償修理をして頂けることに。 バックアップを済ませて、今日の12時ごろに再びApple Storeへ行きMacBook Airを預けました。 「大体どのくらい掛かりますか?」「3日から、最長で1週間ですね。」

同日(今日)の17時12分: 「修理が終わりましたのでいつ取りに来てくださっても大丈夫です。」「は、はい…」

な、何を言っているのか(ry どうやら5時間で修理が終わるらしいです。唖然 偶然、身内が銀座周辺にいたので直後にMBAを引き取り。修理に出してから7時間で手元に戻って来ました。

修理後は下記の画像の通り。真っ白ですね。 ちなみにMacBook Airはパーツの密度が高い影響か、液晶パネル単体の交換は出来なくて、本体の上半分をまるごと交換する形になります。

[caption id="attachment_309" align="alignnone" width="320"]

MBA ディスプレイ交換前

MacBook Airのディスプレイを交換した後[/caption]

そんなこんなで修理に出したらその日に修理されて手元に戻って来ました。

以前もキーボードにコーヒー牛乳をぶっかけて修理に出したことがあったのですが(水没: 有償修理)、その時にも1日で修理終了の連絡がありました。 Apple Store、すごいです。すごすぎます…… Genius Barは対応するスタッフ(Genius)によって対処が異なるという印象があるので、これは当たりでしょうか?

今回の対応の早さは本当にあっという間で、素晴らしい対応をして頂いたApple Storeの方に改めて感謝を。

Apple Storeに行く前に 言っておくッ! おれは今 やつの早さを ほんのちょっぴりだが 体験した い…[…]

mod_mruby on FreeBSD

FreeBSD Programming

mod_mrubyをFreeBSDで動かそうとして詰まるの修正点が変わってしまったのと、mod_mrubyが更新されてEvent MPMとWorker MPMでも動くようになったようなので再チャレンジしてみました。

FreeBSDでのmakeのやり方がまた変わってしまったので後述します。 とりあえずベンチマークの結果から。


$ cat test.txt
Hello!

$ cat test.rb
#!/usr/local/bin/ruby

print "Content-type: text/plainnn"
print "Hello"

$ cat test.mrb
Apache.rputs("Hello")
Apache.return(Apache::OK)

検証機のスペック: IBM ThinkCentre A55 (9636-A16) CPU: Core2 duo E6300@1.86GHz RAM: DDR2-SDRAM 1GB LAN: Broadcom Gigabit Ethernet Apache/2.2.23 (FreeBSD), mod_fcgid/2.3.6

Varnish(3.0.3)がリバースプロキシとして動いているので参考値であることをご了承ください。

abの条件は前回と同じく下記の通りで、3回計測して平均を取っています。


$ ab -n 100000 -c 100

Typereq/sPlain Text6318.693Ruby 1.9.3p194(mod_fcgid)5159.423mod_mruby****6700.153 ~~4626.193


> 2013/2/17 21:15追記:
> mod_mrubyの作者である @matsumotory さんが[こんな事](https://twitter.com/matsumotory/status/303099603451015168)を仰っていたので最新版をビルドし直して再測定しました。は、速い…

mod_mrubyはApacheのモジュールとかを書くのに面白く使えそうなので、そちらの道を模索してみたいなぁ……と

FreeBSDでmod_mrubyを使うためには、またちょこっと弄る必要があるみたいです。

```

$ git submodule init && git submodule update
$ cd mruby

```

mruby本体のビルド設定に**-fPIC**を付ける。

```

$ nano tasks/toolchains/gcc.rake
4: cc.flags = [ENV['CFLAGS'] || %w(-g -O3 -Wall -Werror-implicit-function-declaration -fPIC)]

```

makeではなく**gmake**を使う。

```

$ rake
$ cd ..
$ ./configure
$ gmake && gmake install

```

この2点だけです。エラーが読めない人間には辛い……
もう httpd.conf が mod_mruby を読み込むよう設定されているはずなので、 Apache を再起動させれば終わりです。

```

$ httpd -k restart

```
mod_mrubyをFreeBSDで動かそうとして詰まるの修正点が変わってしまったのと、mod_mrubyが更[…]

意識高いたかーい

雑記

明けました。 2ヶ月ぐらい続いた5月病が、ようやく収まりつつあるのと共にちょっと思いついたりしたので雑記。 全くもって生産性がない内容です。

ふと思ったのだけど、何かを作ったり、何かをしたりするのってやる気(=意識)を削ってすることなんじゃないかなーと。 つまり、意識高い状態から、意識を落とすことで何かが出来るんじゃない? とふと思ったり。

意識を上げる方法っていうのが本当に人それぞれではあるのだけど、生産性が高い, 仕事の効率が良い人っていうのはその意識を上げる方法を知っていたり、意識をあまり下げることなく結果に結び付けられるんじゃないかなー。と

明けました。 2ヶ月ぐらい続いた5月病が、ようやく収まりつつあるのと共にちょっと思いついたりしたので雑記。 全[…]

年末です。

雑記

いつの間にか2012年終わるらしいです。まだ元旦の様子を鮮明に思い出せますが……

今年あった内容が多すぎてまとめる気も起きないのでだらだらと箇条書きします。

  • JCと初日の出を見に行く

  • 不登校脱却っぽい何か

  • 受験勉強頑張った

  • 10年ぐらい前から行きたかった志望校に受かりました

  • JCをもふった

  • 入学してJKをもふった

  • 朝投稿したら机の上にロウきゅーぶ!のポスターが広げられていた

  • 次の日には智花のフィギュアが置いてあった

  • 次の日にはry

  • Supercon行きたいな〜と思って先輩達にお願いしてチームを組んでもらう

  • 予選をゴリ押しで解く

  • 初RedBull

  • 予選通って本選行きが決定

  • 色々とあってタイに行く

  • タイから帰ってきた次の日からSuperconで5日ぐらい計算機室に閉じ込められる

  • ふえぇ……が流行りだす

  • 本選のサンプルプログラムを読むのに期間の8割を使う→挫折

  • 文化祭でRedBull4本ぐらい飲んだ→学内の自販機が売り切れに

  • レポートの提出期限に追われる

  • レポートの提出期限に追われる

  • レポートの提出期限に追われる

  • レポートの提出期限に追われる

  • JKをもふもふした

  • プログラミング生放送勉強会 第19回@品川に参加する

  • CombConfに参加した

  • 発表をやった→壁紙のスク水が写っているところがが写真に収められる

  • LTすべった

  • ㍆㌋㌉㌏㌉㌸㌾㌋㌞㌹㌅

  • レポートが年内再提出なのにまだ手を付けてない←イマココ

  • 妹に身長を抜かされているかもしれない事実が[要出典]

この記事、誰得なのかわからないですね…… なんだかんだ言って、僕は今年かなり充実した1年を送ったと感じているので全て良しですね。

では良いお年を

いつの間にか2012年終わるらしいです。まだ元旦の様子を鮮明に思い出せますが…… 今年あった内容が多すぎてまと[…]

プログラミング生放送 第19回@品川とCombConfに参加しました。

雑記

昨日今日と2日続けてプログラミング関係の勉強会に参加して来ました。

内部の様子については多分他の方がまとめていらっしゃると思うので個人的な短い感想です。

今回、この2つの勉強会で色々な方と話すことが出来て、すごいな〜と思うことがとても多かったです。 年齢に関係なく、色々な人と交流出来て、自分が今まで知らなかったような分野のことを新しく知ったりとか、これ使う必要性あるのかなぁ……と思っていたものの活用法という新しく学ぶことというのがとても多かったです。

CombConfでは「Ajaxで暗号化通信とかいろいろ」というタイトルで発表をしました。 発表でデモに失敗したり、頑張って直してLTで見せようと思ったらまた失敗したりしてます。⇒動きました発表やLTのデモが失敗するのは何かジンクスとかなんですか……?(Wikipedia参照)

夏のSuperconではあまり他の方と交流することが出来なかったので、自分にとっては初めての経験でしたが、またこういった機会があったら参加してみたいと思います。

数回ブログ記事書いて思ったけど筆不精すぎてやばい。

昨日今日と2日続けてプログラミング関係の勉強会に参加して来ました。 内部の様子については多分他の方がまとめてい[…]

mod_mrubyをFreeBSDで動かそうとして詰まる

FreeBSD Programming

CombConfの発表が2日後に迫っているにも関わらず他の技術に手がでます。

組み込み向けのRubyであるmrubyをApacheに組み込めるようにした、mod_mrubyというものをFreeBSDで動かしてみようかと思って手を出したら大苦戦しました。

とりあえず動いたには動いたという状況ですが、簡単なメモとベンチマークを取ってみました。

2013/2/17追記mod_mrubyの更新によって手順が変わりました⇒ mod_mruby on FreeBSD

導入はmod_mrubyのページと同じようにやればいいのかと思いきや、makeでエラーを吐いてしまいます。


$ make
make: illegal option -- -
usage: make [-BPSXeiknpqrstv] [-C directory] [-D variable]
        [-d flags] [-E variable] [-f makefile] [-I directory]
        [-j max_jobs] [-m directory] [-V variable]
        [variable=value] [target ...]
rake aborted!
Command failed with status (2): [make -C src --no-print-directory CC='gcc' ...]

Tasks: TOP => default => all
(See full trace by running task with --trace)
*** [libmruby.a] Error code 1

Stop in /root/mod_mruby.

どうもmrubyのRakefileがLinux向けのようで、makeをgmakeに書き換える必要があるようです。


$ nano tmp/mruby/Rakefile
#MAKE = ENV['MAKE'] || 'make'
MAKE = ENV['MAKE'] || 'gmake'

mrubyは1回mod_mrubyをmakeをしないとRakefileが存在しないので注意です。

あとはWarningが出ますがとりあえずスルーして、make installすればApacheにモジュールが登録されます。 あとはhttpd.confに、


AddHandler mruby-script .mrb

と書き加えれば普通にmrubyファイルが動くはずなのですが……

自分の環境(Freebsd 9.1-BETA1 amd64, Apache/2.2.23 Event MPM)な環境では、httpdを起動した直後からCPUをバカ食いする上、リクエストに全く応答しなくなるという状況に陥ってしまい、解決策が分からなくなりました。 そんなことをTwitterで呟いたら、mod_mrubyの作者である、matsumoto-rさんから

http://twitter.com/matsumotory/status/282046980342022144

という指摘を頂きました。試しに(FreeBSD 9.0 i386, Apache/2.2.22 Prefork MPM)な旧サーバーで試したところ、何も問題がないかのように動きました。 どうもApache 2.2でEvent MPMをやるのはだめみたい……?

試しにどのくらい速いのか、mruby, FastCGIのRuby(mod_fcgid, 1.9.3p125), 静的ファイルの3つで比較してみました。


$ cat test.mrb
Apache.rputs("Hello")
Apache.return(Apache::OK)
#!/usr/local/bin/ruby

$ cat test.rb
print "Content-type: text/plainnn"
print "Hello!"

$ cat test.txt
Hello!

検証機のスペック: IBM ThinkCentre 8086-AGJCPU: Celeron D 330 2.66GHz RAM: DDR-SDRAM 1GB LAN: Gigabit Ethernet(Intel chip)

abの条件は下記の通り


$ ab -n 100000 -c 100

結果:

  • mruby

Time taken for tests: 108.551 seconds Requests per second: 921.23 [#/sec] (mean) Time per request: 108.551 [ms] (mean) Time per request: 1.086 [ms] (mean, across all concurrent requests)

  • Ruby(FastCGI)

Time taken for tests: 362.996 seconds Failed requests: 109Requests per second: 275.48 [#/sec] (mean) Time per request: 362.996 [ms] (mean) Time per request: 3.630 [ms] (mean, across all concurrent requests)

  • txt

Time taken for tests: 98.767 seconds Requests per second: 1012.48 [#/sec] (mean) Time per request: 98.767 [ms] (mean) Time per request: 0.988 [ms] (mean, across all concurrent requests)

なんとmrubyが静的ファイルに迫る速度を出してました。すごい……

ちなみにmrubyが動かなかった方のメインサーバー(Core2 duo E6300@1.86Ghz, RAM512MB)ではRuby(FastCGI: mod_fcgid)で1857.93 [#/sec]とかいう値を叩きだしてました。後日メインのサーバーの方もPreforkにして検証してみようかと思います。 いつになったらFreeBSD PortsにApache 2.4が来るのだろう……

そういえば、もう明後日に迫っていますが、CombConfに参加します! 内容は、「HTTPSを使わずに暗号化通信をしよう」でやる予定です。 出来るの………?(まだ検証してない

CombConfの発表が2日後に迫っているにも関わらず他の技術に手がでます。 組み込み向けのRubyであるmr[…]

田町アドベントカレンダー 14日目: 港区立三田図書館

雑記

半分以上が @mactkg によって成り立っている田町アドベントカレンダー の14日目です。 昨日(13日目)は かんみさん(@kanm_in)のあゝ我が青春の田町よ 或いは田町アドベントカレンダー13日目でした。 校内無線LANの実情など、なかなか知る事のできない話はとても興味深かったです。

さて自分ですが、プログラミング関連の技術書はなかなか高いということもあり、最近いくつか図書館を巡っています。 そこで、田町駅から近く、今後お世話になるであろう港区立三田図書館を紹介します。

三田図書館

田町駅から三田口(西口)方面のデッキを進むと徒歩3分丁度でした。素晴らしい。

自分は港区民ではないですが、もちろん港区内に通学, 通勤していればカードが作れます。 身分の証明出来るものさえあれば、用紙1枚を書くだけでものの5分程度でカードが作れてしまいました。

港区図書館カード

カードのラッコ?がちょっと可愛い

中を色々周っていて驚いたのが、週刊アスキーとかの普通の週刊誌が結構あったということ。 雑誌の購読数がとても多く、190誌ほどの雑誌がありました。すごい!

三田図書館自体にはあまり専門書がありませんでしたが、港区内で検索してみると色々とお目当ての本が見つかったので、予約などで活用してみてはどうでしょう。

そういえば、田町アドベントカレンダー10日目:三田製麺所を見て美味しそうだなーと思い、自分もつけ麺を食べに行って来ました。 平日の昼間に行きましたが、1分も待たずに入れました。中は3階まであるようで、かなり賑わっているようです。

三田製麺所のつけ麺大盛り(400g) 700円

例に漏れず端が切れました。自分も大盛りを食べたのですが、400gはかなり量があると感じました。中(300g)や並(200g)でも全然足りるんじゃないでしょうかっ

内容が薄くなってしまいましたが、田町アドベントカレンダー14日目は @kyonfueeがお送りしました。

明日は多分 @mactkg 先輩です。@altcolonyさんの田町アドベントカレンダー15日目:東京チカラめし in 田町でした!残り10日強、頑張ってください!ではではっ

半分以上が @mactkg によって成り立っている田町アドベントカレンダー の14日目です。 昨日(13日目)[…]

Raspberry Piを買ったり

雑記

最近、巷で話題のRaspberry Piというものを買いました。 簡単にいえば約3000円のクレジットカードサイズのPCだそうです。

日本からだと下のリンクから買えるそうです。

http://jp.rs-online.com/web/p/products/7568308/? 今回は @mactkg 先輩が送料無料にするべく購入者を集めていたので便乗させて頂きました。

CPUがARMアーキテクチャなのでどんなOSでも動くわけではないですが、公式ではDebianとArchが公開されてました。 他にもFreeBSDや、Androidも動くらしい! とりあえず幾つかのサイトを参考にして(友人のステマが激しい)Arch Linuxを導入してみました。 Raspberry Pi | Arch Linux ARMArchLinux Install Guide - eLinux.org

ケーブルを接続してみた。画面出力はHDMIとコンポジットがありますが、HDMIが使えるモニタがなかったのでコンポジットに。 コンポジットが使えるモニタもないのですが、何故かGV-USBがあったのでそれでPCに取り込むことに。SSHでもいいみたい。

電源はMicroUSB端子です。700mAらしいので普通のPCだと足りないかも……?ACアダプタを買った方がいいかもしれません。 僕はMacBook AirのUSB端子で試しましたが、確かMBAは1A出せたはずなので普通に使えました。 電源ケーブルを差し込むと勝手に電源が入ります。

Arch Linuxでは初期状態でID:root, PASS:rootらしいのでログインして、キーボード配列を日本語配列に。


$ loadkeys jp106

次回起動時に自動的に読み込まれるよう/etc/rc.confにこんな感じで(なかったら作成する KEYMAP="jp106" あとはパーティションの設定をして、普通に使うのみ?(本当はスワップとか設定するべきところなんだろうけども…… Arc Linux で SD Card の余り領域を使えるようにする - Debian GNU/Linux 3.1 on PowerMac G4  

とりあえずここまでです。Rubyが普通に動いたので何か出来たら面白いなぁ……と

最近、巷で話題のRaspberry Piというものを買いました。 簡単にいえば約3000円のクレジットカードサ[…]

DigitalArts プログラミングコンテスト2012に参加しました!

Programming

タイトルの通りです。 DigitalArts Programming Contest 2012 なんとかA, B問題を解くことが出来ました。流れはこんな感じ。

http://twitter.com/kyonfuee/status/272311520388591616

長いでんがな…… C問題は解けなかったです。時間足らず。

今回は初のRubyで挑戦してみました。getsとsplitとchompでどうにかなりそう?とか思いつつ、ARCで他人のRuby解答を見よう見まねでやってました。

提出コード

A - C-Filter見た瞬間に正規表現で解けそうだと思ったのでそのまんま。 /aaa/だと"aaaa"にマッチしてしまうので、/^aaa$/にするようにして解決

#!/usr/bin/ruby -Ku
input = gets.split

ng = []
num = gets.to_i
num.times { ng < < gets.chomp }

ng.map!{|v| v = Regexp.new("^" + v.gsub("*", ".") + "$")}
ng.each{|n| input.map!{|i| i =~ n ? i = "*" * i.length : i}}

input.length.times.each {|n| print input[n]; print " " if n != input.length}
puts

298Bytes(提出時から若干変更あり)

B - Password 最初は簡潔なコードにして書いていたつもりが、前述の通りひたすらにA問題に提出してWAを返されていたので焦りながら修正していたらこんなありさまに… でも最後のこのコードしか通らなかったり。本当に良く分からないミラクル。 Rubyではchar ⇒ intは "a".ord, int => charは 96.chr みたいにやるらしい。へえ というのを利用して、後は普通のC言語でやるような感じで解いた。

後半のif out == input 以降が若干キモ?のようです。 入力が"b"の時に"aa"を返したり、"zz"のときに"yza"を返すようにしてます。

#!/usr/bin/ruby -Ku

hash = 0
input = gets.chomp
input.each_char {|s| hash += s.ord - 96}

if hash == 520 || hash == 1 #a, zzzzzzzzzzzzzzzzzzzz
  puts "NO"
  exit
end

out = ""
out += "z" * (hash / 26)
out += ((hash % 26) + 96).chr unless (hash % 26) == 0

if out == input
  if hash < 26
    out = "a"
    out += (hash - 1 + 96).chr
  else
    out = "y"
    hash -= 25
    out += "z" * (hash / 26)
    out += ((hash % 26) + 96).chr unless (hash % 26) == 0
  end
end

puts out

484Bytes

総評

もう少し落ち着いたほうがいいと思う(4度の提出ミスに対して 後はC言語みたいなコンパイラ言語が書けなくなってるくさいので、またそっちも書かないといけないような…… そういえばJOI予選も控えてますし…(PCKはあと1問が5分という所で予選落ち)

そして結構謎なのが、表彰式(1問以上解いたら参加出来る)の開始が12/3(月)の16時からということ。 平日の16時とか参加出来る人が限られそうです……

かくいう僕も地理的には近いけれども時間的に無理ゲなので遅刻の旨を伝えた上で良さげなら参加します。

(どうでも)いいこと

12/22 プログラミング生放送勉強会 第19回@品川 参加受付中! #pronama « プログラミング生放送参加するよ! 第12回 日本情報オリンピック予選参加しますよ!

以上

タイトルの通りです。 DigitalArts Programming Contest 2012 なんとかA, […]

雑記(Superconとかタイとか)

雑記

タイに行ってきたり、Supercon本選で心が折れたりと充実した日々を送っております。

本当に少しだけですがメモ程度に。

タイ 国際交流

タイは凄かったですね。今までの自分の価値観がすっ飛んだような気分です。流石ほほ笑みの国タイ。(帰国してから知った) 色々な人に助けられて、色々な場所で色々な事が学べたなあ……と。 色々書けたら良いのだけど、色々研究施設の見学などもさせて頂いたのでどうなのだろう……?

1週間がとても短く感じたとともに、もっと長く居たいと思いましたね。交換なのでまたすぐに会えるのが楽しみです。

Supercon2012

酷かった……ふえぇ…… タイとは打って変わってなかなかに厳しい毎日でした。 大会前から嫌な予感はしていましたが、やはりCUDAプログラムは事前に実践して学んでおくべきでした。 (1位チームはGPU使ってませんでした。何かおかしい) アルゴリズムについては、ほとんど無勉で挑んだのが非常に惜しい。

あまり複数人のチームというところを生かせなかったのと、全体的な事前の練習不足が惜しいところです。 せっかく本選に出れたのだから、もう少し頑張れたらなあと……

そういえば上位4チームが使ってた最小費用流アルゴリズム、そういえば大会初日の夜に、プログラミングコンテストチャレンジブックをパラパラとめくっていて目に入ってた気がします。そこで気が付くべきだった…!

まあ直近にパソコン甲子園の予選も控えてますし頑張りたいです。

まあざっとまとめるとこんな感じになります。もう少し書けたらいいなあ…

タイに行ってきたり、Supercon本選で心が折れたりと充実した日々を送っております。 本当に少しだけですがメ[…]

Kuinでエラトステネスのふるい

Programming

Kuin0.02が公開されたのでエラトステネスのふるいを使って素数を計算してみた。

Kuin0.02でコンパイル, 動作確認してます。

まだKuin用のシンタックスハイライトがない………

constに関するコンパイルエラー、Kuin0.021で修正されました。くいなちゃんに感謝です。 (2012/8/27 22:55)

{
  エラトステネスのふるい

  Author: きょんたん (@kyonline)
}

func Main()
  const N : int :: 10000000

  var isPrime : []bool :: @new [N]bool
  var Prime : []int :: @new [N]int
  var numPrime : int :: 0

  for i(0, N - 1)
    do isPrime[i] :: true
  end for

  do Prime[0] :: 2
  do numPrime :+ 1

  for i(3, N - 1, 2)
    if (!isPrime[(i - 1) / 2 - 1])
      continue i
    end if

    do isPrime[(i - 1) / 2 - 1] :: false
    do Prime[numPrime] :: i
    do numPrime :+ 1

    do Kuin@Dbg(i.ToStr())

    var j : int :: (i - 1) / 2 - 1 + i
    while (j < N)
      do isPrime[j] :: false
      do j :+ i
    end while

  end for

  do Kuin@Stop()
end func

Kuin0.02が公開されたのでエラトステネスのふるいを使って素数を計算してみた。 Kuin0.02でコンパイ[…]

タイに行ってきます

雑記

特にお知らせでもなんでもないです。タイトルのまんまです。

本当に最近決まったばかりではあるのですが、学校の国際交流の一貫としてタイの高校に行って来ます。

1週間という短い期間ですが、色々学べたらいいなと思ってます。

 

準備で色々手こずっていたり、明確な目標がなかったりして不安たっぷり。

とりあえず行くっきゃ無い?

 

写真とかこっちに貼れたらいいのだけど、あちらでインターネット環境が使えるのかどうか……。

 

帰って来たら翌日から Supercon 2012 なので多分初日は突っ伏して寝てるはずですよろしくお願いします。

というか今日旅行で北海道から帰ってきたばかりだったりします。眠い〜

特にお知らせでもなんでもないです。タイトルのまんまです。 本当に最近決まったばかりではあるのですが、学校の国際[…]

TARI TARI スタンプラリー行って来ました!

雑記

TARI TARIというアニメ、今期絶賛放送中ですが、近所(江ノ島や鎌倉など)が舞台になっていて、ちょうどスタンプラリーを行なっているということで行って来ました!

[caption id="attachment_151" align="alignnone" width="600"]

今回のスタンプラリーでもらったものとか買ったものとかその他諸々。[/caption]

応援ショップが色々あったりして、中にはこの店にしかない限定ポストカード!みたいなものもあったのでついついクリアファイルと買ってしまったり。

あまり写真を撮っていなかったわけですが、応援ショップが沢山あってついつい目移りしたり、運営の裏をかきすぎて逆に遠回りになったりと苦労しました。

スタンプの場所はネタバレになってしまうので控えますが、いくつかヒントを…?

(知りたい方はこの記事の下の方を参照にどうぞ: もちぶろぐ: TARI TARI × 江の島!コラボスタンプラリーに行ってきた!)

  • 江ノ島へは湘南モノレールでも江ノ電でも。近場の方は島の中に無料の駐輪スペースがあります。

(TARI TARIの聖地を尋ねるならば江ノ電または自転車がおすすめ!

  • 最初は片瀬江ノ島観光案内所、または藤沢市観光センター案内所でスタンプ帳をもらいますが、片瀬江ノ島観光案内所は島の入り口にあり近いので、そちらでスタンプ帳をもらうことをオススメします。

  • 島の入り口から順番に番号が大きくなっていきます。

(1番は藤沢市観光センター案内所です。

  • 基本的に大通りだけ歩いていればあっという間に集まりますのでご安心を。

(全て道沿いにあり、ノボリがあるので直ぐに見つかります!

  • 階段が多く、 暑いので飲み物はあると良いですねっ。

(江ノ島サイダーを買うとTARI TARIのポストカードがもらえるお店も多いです。

  • 時間は1〜2時間といったところ?(ゆっくりと歩いても2時間掛かるかどうかと思われます。

やっぱり、地元が舞台だったりするとどこなのか探してみたくなったりしたり。

皆さんも夏は是非どうぞ!

以下写真とか

[caption id="attachment_146" align="alignleft" width="600"]

スタンプ帳

スタンプ帳をもらっていざ![/caption]

[caption id="attachment_143" align="alignnone" width="600"]

江ノ島

Let's 江の島![/caption]

[caption id="attachment_147" align="alignnone" width="450"]

遠回りをしてこんなところを…[/caption]

[caption id="attachment_144" align="alignnone" width="449"]

江ノ島駅

スタンプラリーでもらえるクリアファイルにもなっている、江の電の江ノ島駅。[/caption]

TARI TARIというアニメ、今期絶賛放送中ですが、近所(江ノ島や鎌倉など)が舞台になっていて、ちょうどスタ[…]

FreeBSD 9.1-BETA1 セットアップメモ(仮)

FreeBSD

Mac向けに公開されたKobitoが意外と使いやすかったので、マークアップの練習も兼ねてFreeBSDのセットアップメモを作ってみたりした。 Kobitoというのは、プログラムの説明やメモなどを、Gistのように書けたりするソフトという解釈でいいのかな。

 

FreeBSD 9.1-BETA1 セットアップメモ(仮)

まだ仮だったりするので多分誤植やら間違ったことやら色々してる可能性が…

Mac向けに公開されたKobitoが意外と使いやすかったので、マークアップの練習も兼ねてFreeBSDのセット[…]

セキュリティ・キャンプ2012に応募しました…?

雑記

(昨日夜)TLがセキュキャン一色だなー。そういえばあれってどんな感じなんだろう?

⇒へええ面白そうだなぁ…… ちょっと応募してみようかな?いつ締め切りだっけ……

⇒明日の17時か!ちょっとやってみよう!

⇒Same Origin Poricyって何?分からないよ……

⇒とりあえず終わらせた!落ちてもいいや!送ろう!

⇒どうやって送るの……?紙に書いたけどFAX?メール?

⇒メールで送る⇒@sora_hにFAXで送ったほうが良いのでは?と突っ込まれる。

⇒念のためにFAXで送る⇒ごにょごにょ……

何か疲れてるみたいです。関係各位の皆様にはご迷惑をお掛けしました。

という夢のような出来事。報告終わり。

(昨日夜)TLがセキュキャン一色だなー。そういえばあれってどんな感じなんだろう? ⇒へええ面白そうだなぁ…… […]

Supercon2012に参加します!

Programming

今日になってまさかの衝撃。

公式サイトには日付しか書かれていなかったりしてメールでの発表なのかな?とか思いながら12時になるもメールなし。

なるほど落ちたのかーと思ったころ、まさかの予選通過通知。 https://twitter.com/kyonline/status/218623559478689792

とりあえず前の記事にも書いてあるとおり、何でバグあるはずなのに通ったのかとか色々謎は残りますが…

https://twitter.com/kyonline/status/218666506878320640

でも出場できるからには全力で頑張ります!

自分と先輩方2人で参加します。チーム名は後ほど…?

チーム名はhogeになりました。よろしくお願いします。(2012.7.2 2:38追記)

今日になってまさかの衝撃。 公式サイトには日付しか書かれていなかったりしてメールでの発表なのかな?とか思いなが[…]

Supercon2012予選問題を解いてみた

Programming

以前から、Superconの存在自体は知っていて、ずっと参加したいと思っていたのですが、ついに参加する機会を得ることが出来たので予選問題解きました。 、まさかの応募する際の添付ファイルミスという目も当てられないミスを…… もしこれで本選通っていたら奇跡ですね。

追記(2012/6/25):詳細の説明は私事により2週間ほど先になるかも……? コードが長いのは仕様です。期限日の午前4時に書いていたらこうなります。 動的計画法とかそんな時間短縮を使う暇も知識もなかったのですし… 全てが同じ文字のパターンに対しては一応関数を作って対処してます。 ただ、|W|が短い場合の対策がほぼ皆無。 添付ファイルミスとは: 寝ぼけて**< < =**を間違えたプログラムを送信した。

というわけでとりあえず修正したソースだけ置いておきます。~~詳細は後ほど? ~~多分書かない。というか書けない…… (2012.7.8追記)


/* SuperCon 2012 予選問題C用テンプレート(問C,スーパーコン予選問題 兼 1級認定問題 2012版)
・解答プログラムはこのテンプレートに従って作成すること.
・解答プログラムは1つのファイルで,チーム名.c という名前にすること.
・入力の方式は,あらかじめ入力ファイル(例:input_sample.txt)を作っ
ておき,実行時にファイル名を指定する方式です.
*/

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>

/* ↓以下の範囲は変更可能 */
#define TIME_LIMIT 59.5
#define MAX_LEN 10
#define MAX_V 100000

#define max(a,b) ( a > b ? a : b )
#define min(a,b) ( a > b ? b : a )

int isFront(char input[]);

void searchTree(int flag, int answerTemp, char inputStr[]);

void searchB (void);

int isTypeB(void);

int Sum(int flag);

int N_G = 0;
int v_G[1000];
char w_G[1000][10 + 1];
char W_G[10000 + 1];
clock_t start_G;

int answerTemp_G = 0,strLenTemp_G = 0;
/* ↑上記の範囲は変更可能 */

int main(int argc, char** argv){
int answer = -1; /* この変数に答(Vの最大値)を代入してください */
int N;
static int v[1000];
static char w[1000][10+1];
static char W[10000+1];
char* problem_file;
clock_t start, end;
FILE* fp;

int i;
char buf[0xffff];
char* p;

if(argc <= 1){
fprintf(stderr, "Enter the input file.¥n");
exit(EXIT_FAILURE);
}

problem_file = argv[1];
fp = fopen(problem_file, "r");
if(fp == NULL){
fprintf(stderr, "Cannot open %s.¥n", problem_file);
exit(EXIT_FAILURE);
}

p = fgets(buf, 0xffff, fp);
assert(p != 0);

N = atoi(strtok(buf, " ¥n"));
assert(1 <= N && N <= 1000);

p = fgets(buf, 0xffff, fp);
assert(p != 0);
p = strtok(buf, " ¥n");
strcpy(W, p);
assert(1 <= strlen(W) && strlen(W) <= 10000);
for(p = W; *p; ++p){
assert(islower(*p));
}

for(i = 0; i < N; ++i){
p = fgets(buf, 0xffff, fp);
assert(p != 0);
v[i] = atoi(strtok(buf, " "));
assert(-1000000 <= v[i] && v[i] <= 1000000);
p = strtok(NULL, " ¥n");
strcpy(w[i], p);
assert(1 <= strlen(w[i]) && strlen(w[i]) <= 10);
for(p = w[i]; *p; ++p){
assert(islower(*p));
}
}

fclose(fp);

start = clock();

/* ↓以下の範囲は変更可能 */

N_G = N;
strcpy(W_G, W);
for (i = 0; i < N; i++) {
memcpy(w_G[i], w[i], sizeof(w[i]));
v_G[i] = v[i];
}
start_G = start;

if (isTypeB() == 0) {
searchB();
} else {
searchTree(0, 0, "");
}

answer = max(0, answerTemp_G);

/* ↑上記の範囲は変更可能 */

end = clock();
printf("%s, %f, %d¥n", problem_file, (double)(end - start) / CLOCKS_PER_SEC, answer);

printf("%s, %d¥n", problem_file, answer);
return 0;
}

/* ↓以下の範囲は変更可能 */

int isFront(char input[]) {

int ret = strncmp(input, W_G, strlen(input));

if (ret == 0) return 0;
if (ret < 0) return 1;

return -1;
}
void searchTree(int flag, int answerTemp, char inputStr[]) {
int quit = 0, len, i;

char *tempStr;
tempStr = (char *)calloc(10000 + 1, sizeof(char));
strcpy(tempStr, inputStr);
len = strlen(tempStr);

for (i = flag; i < N_G; i++) {

if(((double)(clock() - start_G) / CLOCKS_PER_SEC) >= TIME_LIMIT) {
answerTemp_G = max(answerTemp_G,answerTemp); break;
}
memset(tempStr + len, 0, sizeof(char) * (10001 - len));

strcat(tempStr, w_G[i]);

switch (isFront(tempStr)) {
case -1: continue;
case 0:
answerTemp += v_G[i];

answerTemp_G = max(answerTemp, answerTemp_G);

flag = i + 1;
searchTree(flag, answerTemp, tempStr);
answerTemp -= v_G[i];

if (quit == 1) continue;
break;
case 1:
answerTemp += v_G[i];
flag = i;

answerTemp_G = max(answerTemp_G,Sum(flag + 1) + answerTemp);

quit = 1;
continue;
}
}
RET:
free(tempStr);
tempStr = NULL;
return;
}

void searchB (void) {
int AnsS = Sum(0), AnsL = AnsS, WLen = strlen(W_G);
int strLenS = strLenTemp_G, strLenL = strLenTemp_G;
int a = 0, b = MAX_LEN, c, d = MAX_V, e = MAX_V;

if (strLenTemp_G <= WLen) { answerTemp_G = Sum(0); } else {
int i;
while (strLenS > WLen && strLenL > WLen) {

for (i = 0; i < N_G; i++) {
if (v_G[i] > 0) {
c = strlen(w_G[i]);
a = max(a, c);
b = min(b, c);
}
}

for (i = 0; i < N_G; i++) {
if (v_G[i] > 0) {
c = strlen(w_G[i]);
if (a == c) d = min(v_G[i], d);
if (b == c) e = min(v_G[i], e);
}
}

strLenL -= a; AnsL -= d;
strLenS -= b; AnsS -= e;

}
if (strLenL <= WLen) answerTemp_G = AnsL;
if (strLenS <= WLen) answerTemp_G = max(answerTemp_G, AnsS);
}
return;
}

int isTypeB(void) {
char isSame = w_G[0][0];
int i,j = 0;

do {
for (i = 0; i < strlen(w_G[j]) ; i++) if (w_G[j][i] != isSame) { return 1; }
} while ( ++j < N_G );

return 0;
}

int Sum(int flag) {
int i, ret = 0;
for (i = flag; i <= N_G; i++) if(v_G[i] > 0) {
ret += v_G[i];
strLenTemp_G += strlen(w_G[i]);
}

return ret;
}
/* ↑上記の範囲は変更可能 */

まさか初投稿がこんな残念な記事になるとは…

以前から、Superconの存在自体は知っていて、ずっと参加したいと思っていたのですが、ついに参加する機会を得[…]