僕とaviciiとk8sの1年ちょっと

1

これは余談だけど、aviciiのWithout Youの曲は自分にしか聞こえない音が聞こえる。

これは2016年6月5日にあった千葉 QVCマリンフィールドLiveの最初の曲だ

Liveでavicii本人が登場するとすっと静かになって、イントロが流れ始めると同時に周りから湧くように上がった歓声が、

いまだにこの曲を聴くたび頭に流れる。

www.youtube.com

2

今の仕事でk8sをやり始めて1年半ぐらいになろうとしている。

もともと今のプロダクトがマイクロサービスよりに作っていたのでコンテナオーケストレーションをしたかったのもあるし、

マルチインスタンスにおけるコンテナ間通信がやれた方が便利だと思ったのでk8sを研究し始めた。

いや、それは若干語弊があって正直に言うとdocker swarmから始めた。ちょうどaws向けのdocker swarmのclosed betaに申し込んでいて試せる環境はあったので。

確か限定公開されたaws cloud formationで立ち上がる感じで立ち上がって、手元で動くdockerと使い勝手が変わらない感じで便利と言う代物に思えた。

もう昔になるのであまり覚えてないけれど、機能面の不安や障害時へ対応の不安、そしてそもそもdocker swarm projectの先行きへの不安、一旦やめましたね。

確か一旦そのころにclosed betaでその時作っていたのものをデプロイする必要があったのでECSでとりあえずデプロイした記憶がある。

とはいえECSは昔から使って慣れてはいたけれど不満はあったのでk8sを研究し始めた。

3

ぼんやり何ができるとか、ぼんやり仕組みがどうなって、は理解していたが実際に何が動いてどういう理屈で動くのか理解を深めたかったので、

最初はterraformでaws上にkubernetesを立てることを目標にcodeを読み始めた。

これに関して今思うと時期の悪さに笑ってしまうのだが、

当時k8sのversionが1.4とか1.5で、多くのk8sを立ち上げる系のプロジェクトのやり方がバラバラだった。

例えばflannelやkubeletがコンテナで動いてなかったり、etcdのversionや管理方法が違ったり、master nodeの構成とか。

その中で自分の望む構成に近いプロジェクトが以下だったのでcodeを読んでスクラッチで立てようとした

https://github.com/xuwang/kube-aws-terraform

結果的には理解不足からmaster nodeが再起動時にうまくbootstrapできなかったので一旦はやめることにしたが、このトライによって理解が深まった。

4

次に試したのはcoreosのtectonicで、これはterraformで全て管理できることができたのもアドだった。

coreos.com

今はredhatによる買収もあって別プロジェクトに統合されたみたいだけど。

確かこの時のクラスタ名がdeadmau5になる。

しかしこのdeadmau5には不運なことに2週間でクラスタが死んでしまう問題を抱えていた。

k8sを動かすために必須のpodが立ち上がらずにclusterが応答しなくなるというものだった。

kube-dns, kube-controller-manager,kube-scheduler status become pending · Issue #2945 · coreos/tectonic-installer · GitHub

2週間ごとのclusterのbackupが走った際にぶっ壊れてしまうのだがいまだによくわかっていない。

5

流石に安定させなやばいな、ということでkopsを使うことにした。

僕はcoreosが好きというのもあって、kopsはubuntuを使うために避けていたが実はcoreosが使えた。

最初のうちはkopsのterraform生成機能を試したが、これはカスタマイズが効きにくいのが微妙でterraform生成はやめて 自分で書いたterraform + kops.yamlで行くことにした。

この時 masterはt2.medium * 3の3az構成にした、この3az構成は正解でメンテナンス時のトラブルが回避できたのでよかった。

この時のステージング環境のクラスタ名がskrillexで、

本番環境のクラスタ名が、そう、avicii だった。

最終的にmaster nodeが無駄になるのでskrillexはすぐにaviciiに統合されたが、大きな事件が起きた。

6

2018年4月20日、avicii本人が死んでしまった。

正直kopsはaws eksが出るまでのつなぎで使うつもりだったので本人がクラスタより先に死んでしまうのはあまりに衝撃だった。

そして昨年11月にeksが発表され、先月我々のaviciiクラスタは役目を終え、EKSに変わった。

EKSのクラスタ名を何にするかはかなり迷った。

もともとの次のクラスタ名はaphex twinsquarepusherを考えていたが、我々(僕個人)の思いとしてaviciiを忘れたくないためにavciiの本名であるところの

tim berglingクラスタ名にした。

7

インフラエンジニア募集してます。

www.wantedly.com

2018年サブスクリプション課金まとめ

2018年に使ったサービスなどまとめ

aws

4000¥/year? ドメインとかおいてあるだけなので、一旦解約するかも

PLAYSTATION NETWORK

5,200¥/year

PSN+オンラインゲームに必要なやつ かなりゲームしてるのでペイしている。

netflix

1,296¥/month = 15000¥/year 途中で値上がりしたの辛いね 年額にするとちょっと高く感じるけどだいぶ使っているのでよし

kindle unlimited

980¥/month = 11760 ¥/year

月3〜4冊は少なくとも読んでいそうだけど、prime readingと被っている範囲はありそう 解約を迷い中

apple music

9800¥/year

年間一括払いでお得 ペイしてんじゃないかなぁ〜

GITHUB INC

7$/monthで使っていたけど、個人のprivate repoへのcommitがなくなったので10月ごろ解約

ダーツライブ

324¥/month

使ってなかったので10月ごろ解約

ドメイン

7000¥/yearぐらい

使ってないのに払ってるドメイン多すぎでは???

Webの自治

1

Webやってる人います?僕はやってます。というかWebが好きなので。

ブラウザ上で動く何かって難しい、とは言え自分もわかんない。

この難しさってなかなか表現しづらくて今まで言葉にすることを躊躇ってきた感じがする。

でも個別のことに対しては文句は言ってきた。例えば、古いのだと右クリックを禁止しているサイトとか、最近だといきなり通知の許可/非許可を出してくるサイトとか。

だけど、全体を通したルールのようなものってなかなか自分の中で明確に持ててない。

結局Webは自由だからなーみたいなのも真ではあるから、これは全員絶対禁止みたいなルールってダサいし。

だけど自分でWeb作ってる時ぐらいは持ちたい。

書いている今現在あるわけではないけど。

2

表示する上で何を満たしていたらいいかって難しい。

Webがどう表示されるかって多様なので全て満たすのは難しいにしても、いろんな人にWebして欲しいから気持ちとしては対応したくなっちゃう。

PCとかスマフォのブラウザなんか序の口で、たとえばプリンターで紙にプリントされたものとかブラウザが乗ったTVとかPS4とかKindleとかApple TVとか音声ブラウザとか

”ビジネス”Webは主要ブラウザ対応でオッケーみたいな世界観で語って悲しくない??

どういう人がどう使うかという点を議論せずにブラウザシェアで語っちゃうのってヤバくない??

3

まぁ全部盛りって無理だけどね。

多くの企業向けSaaSでAppleTV対応って意味がなく思える。流石にAppleTVで仕事している人見たことないから

開発しててもChromeだけ対応の方が楽すぎるし、IEに対応してくれって言われるだけでその場で血を吐いて死ぬ発作が出るかもしれない。

それでもアクセスする人全員に向き合ってなんとか使いやすいようにしてあげたい。

だからこそヌルい実装とか仕様を見ると辛い気持ちになる、けどルールがない

4

何を求めているのかわからないけど、 AndroidiOSのデザインガイドラインという言葉は多分近い、けどUXという言葉からは遠い。

いや、"UX"っていう言葉が企業からすると「どれぐらい儲かりそうか」でユーザーからすると「使っていて腹たった」みたいな意味で使われているせいかもしれないけど。

相貌失認

1

インターネットがもうちょっと昔にあったら便利だったので自分の事例を共有するシリーズ

今日は相貌失認

相貌失認 - Wikipedia

ざっくり言うと人の顔がわからなくなる障害

自分は明確に相貌失認の感じと言う訳ではなないと思う。酷い症状ではないなので本当にそうか自信がない。

人間の脳に人の顔を認知する機能があるのだろうがこの機能がおそらく弱い。

弱いと言っても、どの程度人の顔が認識できないかと言う点は数値化しにくいように感じる。

自分の場合いくつか例があって

  • その場にいない人間の顔を比べることができないようで、誰と似ているとか言う感覚を共有できない
  • 人を間違える、他の人からすると似てない人を似ていると言ってしまう。
  • すれ違った人が知人かどうかわからない
  • 親の顔やよく知っている人の顔を思い浮かべても出てこない

ただ上記の症状があっても、男女の区別はつきやすいし表情がわからないこともない(と信じている)

他に上記の症状に含めることを迷うとではあるが、

顔の可愛さがあまり共感できないことが多く橋本環奈も結局どれかわからない。

今さっき調べて見たが、よくいる人ぐらいにしか認識できないのでおそらく明日には忘れてしまう。

おそらく細かいパーツまでは認識できているが、そこから統合できないの原因と思う。人種の違いはまだわかると思うので。

こういうことを言うと怒られが発生するが、野球選手の清原に似ていると思った。そう思って清原を画像検索で調べて見比べると確かに違うことはわかる。

2

なので自分の知っている人が街とか普段会わないような場所であった際になるべく誰なのか言ってくれると助かります。

いつも同じ服を着ている人や髪型が特殊、もしくは体形が標準から外れている人は大丈夫です。

あと、DAIGOとJOYの違いがガチでわからないで教えてください。

南青山

1

焼けた栗を素手で拾うようなテーマになってしまうけど。

反対派とか賛成派とかそういう話でもなく、どちらかといえば自分の話。

2

田舎の公立の小学校と公立の中学校で育った。

地域の中ではまだ平和の方の中学だったけど、東京に出てから聞いた感じではそんなに治安が良くなさそうな感じ

親は“公立の中の雑菌の環境”(と表現された)で育てたいという気持ちからそうなったらしい

とはいえ、僕の地域で私立の中学に入れようとするのは相当な教育家庭だが

僕は真面目なほうだったのであまり居心地が良くはなかった

もし自分に子供がいたら私立に通わせると思う

でも自分が急な引っ越しとかでいい感じの育ちの所に行って適応できるのかな不安な気持ちもある

実際カルチャーが違いすぎる気がするし、向こうから見たら僕からみて不良と違いがつくのだろうか

荒い環境にいたから暴力とかもあまりに慣れてしまっているし、言葉も向こうからしたら違う

そういうのも“育ちのいい”人はカバーできるんですかね?

松嶋尚美のコメントを見て「あっ体罰とかない前提の話なんだ」って思った

VSCodeでOCaml周りの設定をしていた話

1

以前はAtomとNuclidを使っていたんだけどこの前の初期化の際にVSCodeにしてから設定していなかったのでしようとした

今の設定は以下のようになっていて

github.com

使おうとしているpluginは reasonml-editor/vscode-reasonm

github.com

nix-darwinで諸々の依存を入れたので、

    "reason.diagnostics.tools": [
        "bsb"
    ],
    "reason.path.ocamlmerlin": "/run/current-system/sw/bin/ocamlmerlin",
    "reason.path.ocamlfind": "/run/current-system/sw/bin/ocamlfind",
    "reason.path.ocpindent": "/run/current-system/sw/bin/ocp-indent",
    "reason.codelens.enabled": true

という感じの設定にした。

2

しかしBuckleScript周りが悲しいことに以下のようになる

f:id:hiroqn:20181222233641p:plain

これはIssueに上がっているみたいだった

github.com

最初merlinの設定がおかしいのかと思ったが、

Merlin doesn't provide syntax highlighting nor indentation.

どうやら非対応らしい

自分の認識ではBuckleScript中のjsとの間をいい感じにしてくれる [@@bs.deriving abstract]などはppxの構文の範囲だと認識しているのでいい感じにやって欲しい

ここら辺Atom+Nuclidでは問題がなかったように記憶しているので少し悲しい。

BuckleScriptのweb上でのPlaygroundはbsc.exeをjs_of_ocamlコンパイルしたものが使われていたはずで、同じようなノリでbsc中のparser部分だけどpluginに持ってくることは可能に思えるがかなりめんどくさそうだ。

ていうかreasonだと問題起きなさそうなのが悲しい。

3

実はまだファイルをまたいだ依存関係がうまく設定できていない。

Module A中でModule Bに飛びたい時に同一ファイルでは飛べるのにファイルをまたいでは飛べない。

ハイライトがぶっ壊れているのは関係はなさそう

f:id:hiroqn:20181222235245p:plain

####{BSB GENERATED: NO EDIT
FLG -ppx /Users/hiroqn/.dev/bs-winston/node_modules/bs-platform/lib/bsppx.exe
S /Users/hiroqn/.dev/bs-winston/node_modules/bs-platform/lib/ocaml
B /Users/hiroqn/.dev/bs-winston/node_modules/bs-platform/lib/ocaml
FLG -nostdlib -color always
FLG -w -30-40+6+7+27+32..39+44+45+101
S src
B lib/bs/src
####BSB GENERATED: NO EDIT}

merlinの設定がおかしい可能性もあるがatom時に問題が起きたことはなかったのと .merlin自体が自動生成なのでその可能性は低そうである。

4

という感じでいまいち設定がうまくいかなかったのでAtomに戻ることになってしまいそう。

5 追記

今さっき.merlinがどのコンパイラを使うか指定がないことに気づき、急いでmerlinなどをbucklescriptにあるocamlでビルドし直したところ動きましたわ〜

{
  "reason.path.ocamlfind": "/nix/store/jgd4fwcg1d58kghgmfdfdck5fqn0mwi0-ocaml-findlib-1.8.0/bin/ocamlfind",
  "reason.path.ocpindent": "/nix/store/hg8rvg4x6hd2058wcfnwprs9d379gdv3-ocaml4.02.3-ocp-indent-1.6.1/bin/ocp-indent",
  "reason.path.ocamlmerlin": "/nix/store/bz5qmz0d8gqlvhv7m9x8yi5c7dr94bfk-ocaml4.02.3-merlin-3.2.2/bin/ocamlmerlin"
}

こんな感じね

まだハイライトぶっ壊れたままだけど

fp-tsの続き

1

昨日の続きです。

hiroqn.hatenablog.com

昨日のShowはあくまで標準主力にOutputされることを意識したインターフェースでした。

これです。

export class Show<A> {
    public readonly _tag: 'Show' = 'Show';
    public readonly _A!: A;
    public readonly _URI!: FsFURI;
    constructor(readonly message: string, readonly more: A) {}
}

これをWriterのようにあとですべてのmessageを取得するように変えたい時にどうすれば良いでしょうか。

実はinterpretTaskEitherTaskEither<string, A>というMonadになっているのは、Free型を解いていく際にMonadのchainを使って継続させているためのなのです。

昨日のfoldFreeの第一引数がMonadになっているのはそう言った理由です。

一旦


function tell(message: string) {
    return function<A>(x: A) {
        return free.liftF(new Show(message,  x));
    }
}

const program = read('./package.json').chain(content => tell(content)(content)).chain(content => write('./package2.json', content)));

と書き換えてみます。

今回のShow型のmessageがstring[]というMonoidに足されていくように解釈して欲しいので

TaskEither型にWriterTを使って TaskWriterEither<string, string[], A>のような型とMonadにするためのchain関数があればいいのですが

すみません!!!時間不足でできませんでした!!!