本日のカレー

カレー
カレー

肉の下味

  • 煮干し風出汁調味料
  • カレー粉

スープ

  • 玉ねぎ1玉
  • ホールトマト1缶
  • ナス3本
  • 綿実油
  • 煮干し風出汁調味料
  • タマリンドペースト
  • 花椒

付け合せ

  • トマト
  • 玉ねぎ(水にさらす)
  • きゅうり
  • 白ワインビネガー
  • ディル

多めの油を使う。トマトは煮詰めない。花椒テンパリングする

はてなインターンに参加しました

楽しかったです。

hatenacorp.jp

体験記

選考課題はdocker runするだけだったので楽だった。面接はES締切後にメールをいただき、そこで調整して日付を決めた。 Google Meetで面談するのは初めてだったがSkypeやZoomに比べて使いやすかった。 流れとしては人事の方との日程等諸確認のあと、エンジニアの方と志望動機やスキルについて話すものだった。 自分はまだどのような業界でどのようなエンジニアとして働くかを考えている途中で、 そこについて若干突っ込まれる事はあったものの全体としては和やかに進んだと思う。

最初の一日目は講義で、他の参加者の方も書かれているようにかなり良かった。 かなり完成度が高くコストを割いて準備していただいた事が分かる。 gRPCやKubernetesに触れるのは初めてだったので勉強になった。

本体の開発はDiscordとScrapboxでメンターの方1人に対しインターン生2人の体制。 1030出社の1900終業なので弱点属性が朝な自分でも参加がそこまでキツくなかった。 テキストチャットを使わずScrapboxに情報を集約すると後からかなり見返しやすくなり便利だし、 Dsicordは画面共有が出来るのでオンラインでもペアプロが出来るので、今後オンラインで開発することがあれば積極的に導入したい。 一日目は残業なしで済ませたが、2日目はDockerでハマって残業をしてしまった。結局OpenSSLを自前ビルドしてmusl ABIを使うのが一番早い。 その点Goはデフォルトでシングルバイナリに収まるので便利ですね。

最終日の発表資料は日付上の当日にGoogle Slidesでエイヤッと作ったので時間等不安だったが制限時間の5分ほぼきっかりで終わったので良かった。 自分は実装でいっぱいいっぱいだったので文字の多いスライドになってしまったが、 他のインターン生はグラフィカルで分かりやすいスライドを作っていた。すごい。

実装したもの

虹色に輝くテキスト
実装したもの
* 既にある記法変換サービス(Go)にgoldmarkを使ったマークダウン変換機構を実装 * ☝に独自記法(テキストの背景色が1650万色に変化するゲーミング記法) * 与えられたURLのタイトルを取得するサービス(Rust) * ☝これにキャッシュを実装 * ☝同じドメインへのアクセス制限(DDoS踏み台対策)を実装 * 上記サービスを使い生URLを文字列に置換する機能を記法変換サービスに実装 * ☝これの並列化

時間があればrobots.txtのパースやUAの設定をやりたかった(すべきだった)。昔自分でマークダウンもどきパーサをRustで書いたことがあるので、その実装をサルベージしても良かった気はするが、Goに触れられたのは良かった。

ここに書いておらず時間を使ったのはDocker。先の章で書いたように、Rustのバイナリをmuslにしようとしたり諦めたりで色々と時間を使った。 あとminikubeとskaffoldでRustを使うときはminikubeの方でCPUのリミットを外しておかないと死ぬ。自分はこれで死にました。 Rustのビルドはめちゃくちゃ遅いので2コアとかだとビルドに5億年かかる。

あとやっぱりテストは難しい。副作用を扱う部分はtraitに切り出してテストするようするべきですね。 普段はやっていますが、今回はサボってしまった。

こういう既存のライブラリを活用しつつ、それなりに高い品質のコードを素早く書いていくのは結構難しく、周りのペースについていくのが大変だった。RustはGoに比べるとハマりどころは多そうだし、ネットワーク関連のライブラリがまだ枯れてない印象はあるもののメモリ競合が起きない事はかなり強力で、最初から適切にエラーハンドリングを行えばほとんどサービスが死なないのは嬉しい。メモリリークもOOM Killされるので大丈夫(大丈夫ではない)。

感想

非常にモダンな環境での開発が出来て楽しかった。あと他のインターン生の実装速度が速くてすごい。同室のid:slashnephy さんとか…… メンターの方とも細かく進捗共有が出来ていてコミュニケーション上の問題も感じなかったです。 オンラインなので出費がほとんど発生しないのは助かりましたが、京都での長期インターンもやってみたかったですね。 就活で京都に行くのが楽しみです。

メンターの方はじめはてなの皆様、インターン生の皆さんありがとうございました。

筑波大学編入体験記

namachan10777.hatenablog.com

筑波大学編入し、春学期がほぼ終わったのでここで体験記を書いていく。 その前に

f:id:namachan10777:20200809160200j:plain
点数黙示録カイジ

意外と取れてた。自分の自己採だとどうやっても240が上限だと思ったのだけど、この点数を見る限り多分魔法の力が働いたんだと思う。

入学まで手続き

まず試験後の関門は事務手続きにある。 今年のような例外的なスケジュールだと話は別だが、筑波大学東北大学の併願を行うような場合は書類提出がギリギリになるのでなるべく早く書類を書かないと後々困る。 ただやることはそこまで多くはないし、大抵の場合は高専と往復するだけで必要な書類は揃うのであまり難しくはない。

入学後手続き

宿舎入居とか大変そう(今年はスケジュールが狂っていますが)。とにかく入居に加えて履修、単位変換、奨学金と手続き祭りになるので狂う。 高専から卒業証明書と成績証明書をもらう際に5組くらい一気に申請しておくと狂いにくくなる。余ったら捨てればええ。 単位変換は編入の先輩に見ていただき、次に担任の教員のチェックを受けて事務に提出する運びとなるが、 この担任の教員のチェックが人によって結構変わる。 自分はほぼノーチェックで通ったが、中には非常に厳しく何度も突き返される場合がある。 単位変換は事務の作業なのでここでの担任の評価は(多分)単位変換とは関係しないので、本来の事務の基準より厳しい担任を引かないように祈りましょう。 このときにあとひとつでも情報に関連する単位を取っておけばと後悔するので、高専の講義はしっかり取っておいたほうが良い。 自分は後悔しました。

つくば市について

自転車か車がないと生きていけない典型的な地方です。地方ではあるが、地方特有の異常にデカイショッピングモールが1駅先にあるので自転車があれば生活はそこまで困らない。 東京都民などは「街が死んでいる」などと評するが、多分四国出身者などからすると住みやすい街だと思う。

筑波大学について

筑波大学では学類によらず他学類の講義を自由に取れる。(多分)全ての学類で自由単扱いなので8単位以上取っても卒業要件には関係ないが、 面白そうな講義を自由に取れるという利点はかなり大きい。 総合大学でかつキャンパスが(事実上)単一であることの利点であると思う。2外もおよそ他大で2外として取りうるものは履修可能であるし、人文の講義としてラテン語サンスクリットアッカド語なんてのもある。

高専と比べると講義のレベルも高いものが多く(高くないものもある)、かなり充実感はあると思う。 実験の内容を見ても、学生も教員も多い分だけハードなテーマの物が多くある。 ちなみに編入生が優秀というのは本当のようで、自分はいろいろあってBを生やしまわっているが周りの編入生はGPA4位を取っている。こわすぎ。 今年は土曜にも講義が入ったのもあるが、何かしら時間を食う労働をやっていると簡単にスケジュールが崩壊するので奨学金と(可能であれば)仕送りで食いつないだ方が良い。 アルバイトを親等から要求される場合があると思いますが、頑張ってモラトリアムしましょう。

NixOSをデスクトップで運用する

使い始めて数週間経ったので、NixOSiが何者かなどは置いておいて、今の所の運用について。 システムの部分については/etc/nixos/configuration.nix/etc/nixos/hardware-configuration.nixに書く。 これに関してはインストール時にテンプレートが置かれているので特に苦労も無いと思う。 ハードウェア毎に設定をまとめたものが公開されているのでThinkpadの設定も一発で使える。 Archだと自分でWiki読んで設定するべきところがNixOSだとテンプレートをちょっと改変するだけで使えるのは(NixOSのチームによって十分サポートされていることについては)楽。 最新の定義使いたいときは/etc/nixpkgs/とかにクローンしておいてnixos-rebuild switch -I nixpkgs=/etc/nixpkgs/とすればいい。 github.com

Vimの設定やシェルの設定ファイルの管理にはhome-managerを使うと便利。 $XDG_CONFIG_HOME/nixpkgs/home.nixにコンフィグを書いて管理する。 github.com

ここに設定を置いていますが、多分他の方の設定ファイルを参考にしたほうが良いです。

辛さ

  • ldすら普通の位置に無い(それはそう)ので、ldが普通の位置にあることを仮定しているソフトウェアは動かない(それはそう)。Rustのcrossとか動かないです。
  • fcitxがgtk上で動かない。GTK_IM_MODULE_FILE辺りの設定の問題らしい。issueで報告あるので自分の環境だけではないっぽい。 alacritty上で書いてクリップボードにコピーしているけどこれは直したい。ただIMはそもそもうまく動かないものなのでNixOS特有の辛さではない。
  • pkg-configもそのままでは動かない。なので外部のライブラリに依存するRustのクレートとかビルドできない。$PKG_CONFIG_HOMEを手動で設定すれば動きます。

RustのcrossはNixOSで動かない

以上です。だと味気ないので原因を簡単に。 crossとはdockerコマンドをラップしてRustでのクロスコンパイルを簡単に実現できるツールなのだけど、 現行のcrossの実装ではライブラリ、ツールチェーンをホストの環境からイメージ内にマウントすることで実現しているのだが、これが問題になる。

ご存知のようにNixOSではldすらハッシュ付きで/nix/store/xxxxxx-みたいなパスに配置されており、 NixOSのrustupでもツールチェーンのインストール時にバイナリパッチで利用するldを書き換えてインストールするようにしてある。 なので存在しないldを読みに行こうとしてsh: 1: cargo: not foundなんて言われることになる。

幸いdocker in dockerはサポートされてあるのでdocker in dockerで使いましょう。 ホスト環境に依存しないdockerイメージにしてくれれば楽なんだけど……