雑記帳

日常を綴っていきます

世俗から離れることの必要性

一泊二日でスマホと小説と着替えとヘッドホンだけを持ち、極力ネットにアクセスしないという縛りを設けた上で箱根に行った。箱根で何をしたのかと言うと、言ってしまえば「何もしない」をした 。温泉に浸かったり、酒を飲みながら「ゆるキャン△」を視聴したり、湯本や仙石原をぶらぶら散歩したり。

ネット環境を断ったことによる効果は覿面であり、そのことに思考のリソースが割かれることがなくなった分、頭脳のキャパシティが上がったわけであり、その余剰分を読書といった文化的な活動に充てることが出来るようになったのである。

とても良かったので月一くらいでこれをやりたい人生である。

yurucamp.jp

Fixstarsのインターンに行ってた話

書けることはほぼないのですが、一応参加記だけは残しておきます。詳しいことは以下のリンクを見てもらえれば。

www.fixstars.com

何をやったのか

ここは本当に書けることがないのですが、量子コンピューティング関連のなにかをやっていました。量子コンピューティングに関連したプロジェクトに関わることが出来るインターンは国内ではここ以外にほとんどないと思うのでとても貴重な体験が出来たのではないかと思っています。

www.fixstars.com

感想

期間は1ヶ月という短い間だったのですが、就業型インターンシップなので、フルタイムで業務に関わることが出来ました。週5で出勤するのはとても大変でした。時間の流れがとても早く感じられて、1ヶ月とは思えないくらい濃密だったのではないかと思います。また、社員さん達や他のインターン生達はとても技術力が高い人達ばかりで非常に刺激的でした。AtCoderJobsにも求人があったり、社内プロコンが定期的に開催されていることから分かる通り、競技プログラミングに精通している人が多いという印象を受けました。(私は競プロとても弱いですが....) 職場環境もかなり良くて、貸与マシンのスペックは十分だったし、10円でコーヒー等のドリンクが飲めるのがとても有り難かったです。面白そうな技術書がたくさんあったのも魅力的でした。総合的に見てとても充実したものだったのではないかと思います。ありがとうございました!

これから

2018年は色々ありました。振り返ってみると本当に密度の濃い一年だったんじゃないかと思っています。 今までは主に情報工学的な知識とか技術力を身に付けるとかその辺りを目標に掲げて行動しておりましたが、それは学生という枷に甘んじていたからこそ、これを行動原理として動いても問題はありませんでした。何故なら、学生という立場は自分の内面的な欲求を満たす事を幇助するラベルでしかないからです。修士課程への進学を考えていたとしても、学生という立場に甘んじていられるのはもう三年しかなく、四年後には社会の一員として行きていくことになるわけです。我々は就活の話はすることはあっても、就職のその後の話をする事はあまりありません。社会人になっている自分を漠然と想像出来る人はそこそこいるのではないかと思いますが、具体的に想像出来る人は少ないんじゃないでしょうか。少なくとも僕はそうです。何故なら、就職してから死ぬでの60年余りの、あまりにも長い時間が暗澹として広がっているからで、自身の20年の時間を過ごして得てきた情報は残りの人生を遺漏ない形で設計するにはあまりにも少なすぎるからです。

これは当たり前の事なんですが、結局自分が持っている情報だけで今後を想定し、計算通りに動くことは不可能なわけで、そのような漠然とした自身の不安に流されて今を無駄にするのは勿体無い。それなら、「今」自分が何をやりたいかということを重要視する他ないと思います。今を最も最適な形で生きるのに必要なのは、自身が蓄積している情報です。探索アルゴリズムで考えると、より最適なヒューリスティック関数のパラメータです。その知識というものは学術的な知識ではなく、世界に対する見識です。2019年の目標は世界に対する見識を深め、「今」を最適に生きる訓練をする事です。

それでは今年もよろしくおねがいします。

サイバーエージェント アドテクコンペ2018に参加した

サイバーエージェントのアドテクコンペに参加してきました。

www.cyberagent.co.jp

参加した動機

サポーターズという組織主催の逆求人イベントで知り合った人事さんに勧められて、アドテクコンペは結構高負荷なインフラを体験出来ると聞いたので興味を持ったのがきっかけです。

内容

データ分析チームとサーバーサイドチームでチームを作って、三日間でDSPを開発するって感じの内容でした。自分はサーバーサイドでインフラの方をやりました。GCPが無尽蔵に使えるとのことでアツかった。

成果物

インフラ自体はGoogle Kubernetes Engineをガッツリ使って組みました。また、継続的インテグレーションを使ってイメージをGithubにプッシュしてDocker Imageをいい感じにビルドしてほぼダウンタイムゼロでシュッとKubernetesクラスタにデプロイ出来る環境とかも作りました。私は使い慣れているという理由も合ってCircle CIを使ったのですが、無料枠で使ってたのもあってかビルドからデプロイまでめっちゃ時間かかっていたのが難点でした。GCPGoogle Cloud Buildを使ったほうが良かった。あとはリソースの可視化とかもやりました。折角なのでNodeにexpoter仕込んでPrometheus+Grafanaでかっこよく可視化とかしたかったのですが、結局DatadogというSaaSを使いました。Datadogを使ったのは初めてだったのですが、かなりkubernetes環境に最適化されている感じで良かったです。出してくれるグラフも結構それっぽくてかっこいい。

f:id:shikugawa:20180924123302p:plain

全体としてはこんな感じになりました。GKEを触ったのは初めてだったのですが、これがかなりよく出来ていて、特にServiceをapplyすると自動でTCPロードバランサを作ってくれるとことかすごいなあと思いました。(小並感)

f:id:shikugawa:20180924123409p:plain

反省点としては、データ分析チームに作っていただいた予測モデルが予想以上に計算時間がかかるというところを考えないで設計してしまったところかなあと思います。予測用のAPIとアプリケーションとの通信がボトルネックになると想定して同一Pod内で動かしていたのが失敗でした。予測APIに関してはGAEに切り出すとか、別のkubernetesクラスタで回すとか(これだとアプリと一緒にGCR経由でシュッとデプロイ出来そう)、Cloud FunctionsにAPI本体を乗せるというのもありだったかもしれない。あとはStackDriverを完全に理解しておらず、レスポンスタイム等の詳細なメトリクスを取る方法が分からなかったのがつらい。

感想

GCPを触ったことがなかったのでAWSと比較してどうなんだろうとかずっと思ってたんですが、AWSにひけをとらないくらい使いやすかったです。GCPでは無料枠として$300/Yearのクレジットが付与されるので個人的にも使いたいと思いました。kubernetesも実際にクラスタ組んで使ったことはなかったのでいろいろ触れて良かったです。最近よく聞くようになったService Meshという奴も結構Control Planeがkubernetesに優しいという印象があるのでkubernetesを使えるようになりたいと思っていたのでかなり勉強になりました。参加してよかったです。

ISUCON8 予選参加記

ISUCON8の予選に出ました。チームメンバーは僕だけです。一人でやるのはめちゃつらかったです。

やったこととしては、足りなそうな所にインデックス貼ったりクエリキャッシュ挟んだり無駄にリバースプロキシをnginxに差し替えたり(予選で使われていたリバースプロキシはh2oだった)、冗長化構成を試みたりといったところで(サーバーが3台与えられたのでこれは冗長化するしかないのでは)、アプリ本体には手をつけませんでした。(明らかにN+1クエリが流れている箇所があったのでここに手を入れていればもう少し点数伸びたかもしれない......)

後から見てムーヴが明らかに洗練されておらず、alpでプロファイリングするためにltsv形式のログを吐かせるのに無駄に用意していたnginx.conf食わせたnginxに差し替えたり、冗長化構成しようとしてタイムアウトで困ってしまったりしていました。(原因が結局よく分からなかった。firewalldのせいかと思ったけど設定上は問題なさげな感じだった。initializeがそもそも通っていなかったんですかね.....)

ちなみにnginxよりh2oの方が速くてすげえってなってました。今度趣味で使ってみたい。

あとはアプリ本体に手を入れるのを後回しにしすぎたのがダメでした。冗長化周りに注力しすぎてハマって完全に椅子に座るだけコンテストになっていました。来年はちゃんといい感じにスピードアップコンテストにしたい。

Cookpad summer internship 2018 参加記

クックパッドさんのサマーインターンに参加してきました。忘れないうちに書きます。参加記書くまでがインターンらしいです。

internship.cookpad.com

説明にもある通りですが、期間は二週間で、前半は講義パート、後半はOJTコースかPBLコースのどちらかに配属されてやっていく感じのものでした。

応募からインターン参加決定まで

応募→コーディングテスト→面接→参加決定 みたいな感じの流れだったと思います。 参加したきっかけとしては、過去に参加記を読んで良さそうと思ったのと、最近PythonとかJSしか書いてないので久々にRuby書きたいなあと思ったのがあります。

前半パート

一日目

一日目は環境構築とか講義で使用するプログラミング言語の基礎についての導入みたいな感じでした。

二日目

二日目はサービス開発についての講義でした。サービス開発といってもプログラムを書くわけではなく、実際にペルソナが与えられ、それを基に仮説を設定し、仮説を基にプロトタイピングツールを使ってアプリのプロトタイプを作成するといった感じの内容でした。実際にユーザーインタビューを行ったり、普段エンジニアリングをしているとなかなか携われないような事が出来て新鮮でした。グループワークでしたが、初対面から一日しか経っていない人達と実際に話してプロダクトを作成するのはかなりコミュ力が要求され、比較的他人とのコミュニケーションを避けていた人間としては非常に疲れました.....多分インターンの二週間全体で見ても一番疲れた一日だったんじゃないかなと思います。

三日目

三日目はRoRを使ったサーバーサイドプログラミングの講義でした。RoRRubyも久しぶりだったので楽しかったです。

四日目

四日目はReact Nativeでフロントエンド開発でした。フロントエンドにあんまり興味ないのと普段触らないのもあってついていけるか不安でしたが意外と行けました。

五日目

五日目はインフラでした。一番楽しみにしていたパートだったのでウキウキでした。普段触ることが多いのもあって講義の内容は結構知ってることが多かったのですが、チューニングの話に関しては知らないことが多かったのでめっちゃ勉強になりました。実習はISUCONっぽい感じでチューニングしていく感じでしたが難しかったです。

後半パート

私はOJTコースに配属されました。OJTコースは実際に業務に関わっていくって感じです。配属部署は技術部でした。基盤やりたかったので希望していた事が出来そうな部署で良かったです。Rubyのコミッタが席を並べているのがすごかったです。ちなみにメンターさんは id:hogelog さんでした。

やったことに関してはどこまで話していいか分からないのでざっくりと書きます。

一日目

環境構築や諸々。

二日目

配属部署のメインプロジェクトの作業の一連の流れを体感していくという感じだったのですが、その作業がかなりつらいものだったので、それを補助するツールがあればいいなあってふと思ってメンターさんに聞いてみたら作ってみてもいいと言って頂いたのでそれを作っていく感じになりました。

三日目

ツールの開発開始。雰囲気でこういうのがあればいいなあと思っていただけなので、作成するツールの概要が自分の中でも雰囲気でしたつかめていなかったので迷走していましたが、この日にツールの主要な機能は出来上がりました。

四日目

ツールを改善していくという形でメンターさんに提案された機能を実装しました。

五日目

フロントエンドを整えていく作業を主にやりました。まだまだつけたい機能はあったのですがもう時間がなかったので諦めました。最後の発表会でService Meshをごにょごにょしている人がいたのを見てこれも面白そうとか思いました。

総括

普段から意識していくべきとこを指摘して頂いたり、RoRの知らない機能を教えていただいたり勉強になったと思います。ツール自体はRails API mode + React(SPA)で開発していたのですが、これは普通のRailsで作ったほうがいいって言われました。Assets Pipelineはクソとか言いながら中指を立てていた頃を思い出して出来ればViewはRailsから切り出して開発していきという感じだったのですが、Rails5.1ではAssets Pipeline使わないって選択肢もあるらしい。自分がRails使ってた頃はRails4.x~5.0だったので知らない新機能も多いみたいでいろいろ学べて楽しかったです。

全体の感想

会社全体の雰囲気も良くて、料理したり出来るのも魅力的でした。私は普段全く料理しないのですが、料理をしてみて、楽しいし美味しいし最高って感じでした。ゴーヤチャンプルと唐揚げならこれからも作れそうです。これからは料理をしていきたいという気持ちです。技術的にもいろいろ挑戦していたりするところも面白いなあと思いました。最近は比較的低レイヤっぽいところに興味があるのですが、そういったところにも手をいれていたりしてすごいです。また、前半は昼食が出るのですが、全部美味しかったです。昼食が美味しいところもこのインターンの魅力なのかなと思いました。前半と後半の最終日には懇親会みたいなものがあったのですが、そこで出る料理も本当に美味しかったです。流石クックパッドだなと思いました。クックパッドのオフィスは恵比寿ガーデンプレイスにあるのですが、恵比寿ガーデンプレイスからの夜景はすごかったです。流石日本有数のリア充スポットですね。また、一緒にインターンに参加した同期達も最高に楽しくてマジ卍って感じでした。二週間ありがとうございました!

食べたもの

f:id:shikugawa:20180908105832j:plainf:id:shikugawa:20180908105841j:plainf:id:shikugawa:20180908105850j:plainf:id:shikugawa:20180908105857j:plainf:id:shikugawa:20180908105907j:plainf:id:shikugawa:20180908105918j:plainf:id:shikugawa:20180908105926j:plainf:id:shikugawa:20180908105936j:plainf:id:shikugawa:20180908105946j:plainf:id:shikugawa:20180908105955j:plain

Cookpad Ruby Hack Challenge に参加した話

8/30~31にクックパッド本社で開催されたRuby Hack Challengeとやらに参加してきました。僕は普段Rubyを一番使っており、馴染みの言語の裏側を知りたいという想いで臨みました。

一日目

Rubyコミッターの笹田さんの作成した講義資料を読みつつ、MRIの実装についての理解を深めていくという内容でした。中身はもちろんガッツリC言語だけど、大学の講義でC言語を使っているので分かるのか....と思いきや、MRIのC APIリファレンスがあまりなくて理解するのに結構苦労しました。

二日目

一日目に学んだことを活かしつつ、自分で決めた課題をこなすという内容でした。僕は、実行中のメソッドの可視化機能の実装をしようと試みていたのですが、Rubyの標準ライブラリとしてTracePointという実行中のメソッドを表示する機能が提供されていたので僕の出番はありせんでした。恐るべしMRI、ってことで仕方ないので僕はTracePointのラッパーgemを書きました。

Easytrace

実行メソッドをグラフにして可視化出来たりしたら面白そうなので今後の機能追加項目として検討します。

二日目はRuby開発者のまつもとゆきひろさんがいらっしゃってRubyの設計思想について話して頂いたり、Rubyのコミッターの方々が大勢いらっしゃって、Rubyの実装について壇上で白熱した議論を交わしたりしていました。名だたるプログラマー達がは議論を戦わせる様は圧巻で、感動物でしたね。

総括

いままで中身を気にせずにRubyを書いており、中身を弄るのは怖いと思っていたのですが、このイベントを通して中身を見ることに対するハードルがが下がったように想います。とても充実した二日間でした。クックパッド社は雰囲気がとても良く、来年はインターンに参加してみたいと想いました。