君は心理学者なのか?

大学時代に心理学を専攻しなぜかプログラマになった、サイコ(心理学)プログラマかろてんの雑記。

もし、蓮舫が我が家の事業仕分けをしたら

f:id:karoten512:20190310153440p:plain

蓮舫「先月と比べて、我が家の財政状況はきわめて悪いと言わざるを得ません」
蓮舫「今日は徹底的に仕分けをしたいと思います」


蓮舫「ここに先月の家計簿があります」
蓮舫「〇月△日、この一日に用途不明な50,000円もの出費が記録されています」
蓮舫「こちらについて説明おねがいいたします」


私「はい。その日私は、仕事を終えて会社から出、
       このまま帰るにはどことなく芸がない、と感じたのであります。
       そこで適当な串カツ屋を見つけ、一人で入店、
       プレミアムモルツと串揚げの盛り合わせを頼み、
       一人至福の時間を過ごしたのであります」


蓮舫「総理。その日、まっすぐ帰って家で金麦を飲む、ではいけなかったのでしょうか?」

私「金麦で得られる幸福感と、店で飲むプレミアムモルツの幸福感には雲泥の差があると言わざるを得ない、というのが正直なところでございます」
野党「国民は金麦で我慢してるんだぞ!」
野党「別にアルコールが入っていればなんだっていいだろうが!」


蓮舫「続けます。国勢調査によると、大衆的な串揚げ屋に一人で行った場合の平均予算2,856円と出てきます。総理はどれだけ使いましたか?」


私「2,600円でした」
蓮舫「...わかりました。100歩譲っていいとしましょう。残り47,400円についてはどう釈明を?」

私「串揚げ屋を出た時、なんかこう、春の訪れのような心地よい夜風が私を包み込んだのであります。その瞬間、ここのところあくせく働いていた私に2年前の記憶が蘇ってまいりました」
野党「国会でポエムやめろ!!」


私「...2年前、私は足繁く近所にあるバーに通っておりました。
      そこには気の置けない常連たちがいて、毎回行くたびにくだらない話をしておりました。職業も身分も違う皆が、いっぱいのカクテルを前では皆何も飾らず、自由に語り合っていたのであります」


私「皆、どうしてるんだろう。そう私は思ったのであります。
       次の瞬間、私の足は自然と家と逆方向に向かう路線へ向かっていたのであります」
野党「なんでその時もう少し考えなかったんだ!」


私「懐かしい電車にゆられ、改札を出て、ついに私は懐かしの店にたどり着いたのであります」
私「そこには馴染みの常連2人がおりました。
       私は、彼らに、熱烈に歓迎された、のであります。
  そして何杯か飲んでいい感じに酩酊をしてきた私は、
  誰もが一度言ってみたい、あのセリフを言ってしまった、のであります」


蓮舫「まさか...!」
野党「やめろ!あのセリフだけは...!」

 

私「『今日は俺のおごりだ』であります」


野党「なんてことを...!」
野党「ばら撒き政策じゃないか!!」

 

私「その瞬間から、店になぜかどんどん人が増え始めたのであります。
  おそらく誰かが常連に拡散したのでありましょう。
  私は引くに引けなくなっていた、というのがその時の状況であります」

私「普段ならそれなりに飲んでも3,000円の店なのであります。その時の会計は30,000円を超えたのであります」
野党「クソ...!」
野党「ハイエナどもめ...!」

 
私「以上、その日に起こった事の、顛末、であります」

蓮舫「...総理。計算が合いません。残りは17,000円ほど残っています」
野党「誤魔化すな!」
野党「正直もう恥ずかしいことなんて何もないだろ!」


私「た、」
私「タクシー代、なのであります」(はずかしそうに)


蓮舫「なんてことを!!」
野党「おいまて!嘘をつくな!」
野党「タクシーでそんなにいくわけないだろ!」


私「高速に乗った、のであります」
野党「ダメだこいつ...」
野党「救いようがない...」


蓮舫「総理。この日あったことは我が家の経済を圧迫し、
   今後の生活に多大な影響を与えることは間違いないでしょう。
   なぜ、こんなことを、してしまったのか。
   言い訳せず、端的にお伝え願えますか?」

 

私「...国民には、最低限の文化的生活をする権利がある」(と、苦しげに)

 

蓮舫「〆のラーメンはそこに入るとでも?!」(と、議席にレシートを叩きつけながら)
野党「野郎、まだ誤魔化してたのか!」
野党「なんてやつだ!!」


蓮舫「...総理には財政改革への意識が著しく欠けている、と言わざるを得ません」
蓮舫「よって3ヶ月間の断酒を言い渡します」

 

私(膝から崩れ落ちる)

 

ECSのコンテナヘルスチェックが数分おきに落ちてしまうときにみたいログ

現象

ECS > クラスター > サービス > イベントを確認した時に、

service *** task **** failed container health checks.

が数分おきに起きている。

調査

1. コンテナインスタンスにログインします

2. /var/log/dockerをみる

tail /var/log/docker

3. そこに原因が書いてある、はず

time="2019-01-29T04:40:19.702116466Z" level=warning msg="Health check for container *** error: OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused \"exec: \\\"CMD-SHELL curl -f http://localhost/check || exit 1\\\": stat CMD-SHELL curl -f http://localhost/check || exit 1: no such file or directory\": unknown"

今回は、ヘルスチェックコマンドが間違っていたことが原因。

対処

タスクに定義されているコンテナのhealth check設定を、

CMD-SHELL,curl -f http://localhost/check || exit 1

とする。

CMD-SHELL curl -f http://localhost/check || exit 1

ではない。

(確認UIではカンマが消えてしまう謎仕様なので注意...)

ELBまとめ(メモ)

ELBとは

AWSのロードバランシングサービス。

webサーバやアプリケーションサーバのスケールアウトに使用する。

ELB自身のスケールアウトは勝手にやってくれる。

特徴

ELB自体の安全性の確保

セキュリティグループの設定ができる。

ELBの名前解決

ELBへの接続ポイントへのアクセスはDNSを使用する

ELBにはそれぞれにユニークなDNS名が割り当てられる。

EC2インスタンスへのヘルスチェック

負荷分散対象となるEC2インスタンスの状態を監視できる。

ELBからのヘルスチェックに失敗したEC2インスタンスは、

設定に応じて負荷分散対象から除外することもできる。

ヘルスチェック設定項目

補足

ELBは以下の3つに分けられる。

  • Classic Load Blancer(CLB) ... 旧型(以前のELB)
  • Application Load Blancer(ALB) ... ターゲットグループが指定できるなど、旧ELBに比べて様々な追加機能がある beyondjapan.com
  • Network Load Blancer(NLB)... 2017年9月に大量トラフィック向け

ALB鹿使ったことないから他はわからない。

逃げるんだ。2019年から、全速力で。

紅白が、そろそろ終わる。

狭い狭い学生寮の一室。

真ん中に年代物のこたつが一つ。

元の模様がなんだったのか、

まったくわからなくなってしまうほど擦り切れてしまったこたつぶとんを肩まで引っ張り、

白石はぬくぬくと2018年最後の夜を過ごしていた。

こんなに安らかな気持ちで迎える大晦日は久しぶりだ。

大学に入ってから12年が経つ。

学部4年がすぎ、休学を4回、留年を4回最大限活用して、

伸ばせるだけ伸ばしたモラトリアムを満喫しながら、

結論をできるだけ先延ばしにしながら迎えたツーアウト満塁、

ついに白石は卒業まであと2単位のところまできたのだ。

キャンパスは目をつぶっていたって歩けるようになった。

シラバスだって鼻で言えるようになった。

終わってしまえばなんでもいい思い出になるものである。

これから先はどうしようか。

白石は考えた。

卒業はできるが、就職先は考えていなかった。

もとより就活はしていなかった。

もちろんいずれは選択しなくてはならないことはわかっていた。

しかし確定していない未来は、暖かくて柔らかくて、肌触りがよかった。

ずっと包まれていたい。

こたつの布団につつまれながら白石はそう思っていた。

ーーカサリ

ふと、こたつの中に何かの感触を感じた。

何も考えず、白石は足でそれを掴んで手に取った。

レポート提出

こたつの熱でとろけて停止していた脳が、ずりずりと回り出した。

期限
12月31日 23:59:59 まで

全身の血液が逆流するのを感じる。 先ほどまで暖かかった手先と足先が、急速に熱を失っていく。

※ このレポートを出さないと、単位はあげません

こたつの上のデジタル時計をみる。

12月31日 23:46:28

みたことないほど足がガクガクしだした。

思い出した。

この論文、途中までしかかけていなかった。

いつもの悪い癖だ。

白石は結論を先延ばしにするのを得意とした。

そして、今回も、結論だけをまだ書いていなかった。

そして結論を書くのが、白石は恐ろしく苦手だった。

どう見積もってもあと15分じゃ終わらない。

留年。

大きな二文字が頭上に浮かんだ。

いや。今回は違う。

除籍だ。

これまでの苦労が、走馬灯のように浮かぶ。

1回生の授業に混じって12回生の白石が参加した中国語の授業。

就職してキャリアアップしていく同級生。

親からの冷たい目線。

白石は、12年目の卒業に全てをかけていた。

この一発逆転を失うわけには、いかなかった。

「あと、、、あと1時間あれば、、、!」
「2018年が、あと1時間あれば、、、!」

白石が除夜にむかって咆哮する。

己を呪うしかなかった。

うずくまる白石。

そこに。

「話は聞かせてもらったぞ」

頭上から声が聞こえた。

頭をあげる。

振り向くと、金ピカボタンを付けた学ランの先輩がいた。

「話はきかせてもらったぞ」

その先輩は、

大学からすでに除籍されてしまったのに、

まだ寮にしがみついている有名な人だった。

「あと1時間。2018年を延長したいんだろう?」

「ほら立て。時間がない」

「レポートが入ってるノートPCだけは忘れるな」

そういって先輩は、僕が立つ前に首根っこをつかんだ。

力なくぶら下がった白石は、かろうじてノートPCを脇に抱え、ぼうっと先輩の声を聞いていた。

「こんな話を聞いたことはないか?」

まっすぐ前を向き、白石を引きずりながら先輩は廊下を静かに歩く。

先輩は勝手に話しつづける。

「西に進む飛行機の中では、夕日がなかなか沈まないんだ」

続ける。

「その話を聞いた時、俺は信じられなかった」

「だから俺は、なけなしの金を航空チケットに替えて関西国際空港から博多まで飛んだ」

「日没時間は17:10。事前に調べてあった」

「ついに俺の乗った飛行機の窓から、沈みゆく夕日をとらえたんだ」

寮の裏にある、駐輪場に出た。

空には三日月がでていた。

先輩は続ける。

「その時、まさに水平線に太陽が差し掛かっていた」

「日没はいつも一瞬だ。そのはずだった。でも」

「そのとき、日没が60分にわたって続いたんだ」

「まるで太陽が水平線に張り付いてるみたいだった」

「水平線全体が金色に輝き続ける。そんな一瞬が60分も続いたんだ」

「17:10で時が止まっているみたいだった」

「あの美しい光景を、今でも忘れられない」

なるほど、と白石は思う。太陽は東から登り、西へ沈む。

水平線の向こう側へ沈みゆく太陽を追いかければ、

太陽はなかなか沈まないようにみえるだろう。

でも、なんで今そんな話を?

「乗れ」

そこには、バカみたいに大きなマフラーをつけたバイクがあった。

そしてそれには、アホみたいに真っ赤な色のサイドカーがついていた。

「いやです」

「乗れ。あと1時間欲しいんだろう?」

手段を選んでいられなかった。

仕方なくサイドカーに乗る。大晦日の冷気に冷やされたシートが尻に触れビクッとする。

「よろしい」

そう言って先輩がバイクにキーを入れた。

「飛行機の上で時がとまり沈まなくなった夕日をみて、俺は思った」

エンジンをかけた。

「超高速で西に進み続ければ、時間を止めることだってできるんじゃないか?ってな」

顔は大真面目だった。

「無茶です!」

「大丈夫だ。理論上、京都、北緯40度付近の自転速度は時速1200km」

「この速度で自転と逆向き、つまりマッハ1で西へ進めば」

「理論上は時が止まる」

「絶対無理ですよ!死にたいんですか!」

「まあ見てろって。1秒が永遠につづく瞬間を」

先輩がいきなりアクセルをふむ。突然のGに白石の体はシートに押し付けられた。

改造バイク特有の、無駄にでかい音が深夜の寮の敷地内に響きわたった。

ものすごいスリップをしてバイクが国道に出る。

駐輪場には土煙が上がり、

それを大晦日の三日月が照らしたので白煙のように見えた。

先輩が言った。

「逃げるぞ。2019年から、全速力で」

時刻は、12月31日 23:50:56。

アインシュタインが聞いたら爆笑するようなガバガバ理論を引っ提げて、

2018年最後の逃避行が幕を開けたのだった。


「そこの改造バイク、止まりなさい!!!」

ものすごい勢いで深夜の京都市内を駆け抜けたバイクは、高速に入っていた。

そして、周りにはいくつもの白バイを護衛のように引き連れていた。

「先輩無茶ですって!」

「大丈夫だ」

ヘルメットだけは真面目にかぶった先輩が、法定速度を完全に無視しながら言う。

「何もやましいことはしていない。我々は2019年から逃げてるだけなんだから」

めちゃくちゃだ、と白石は思う。

「それよりその時計みとけ」

サイドカー正面に、デジタル時計があった。

「普通の時計じゃない」

「日本標準時を無視して、

 現在の緯度経度・往年の月の動きから正確な時刻を割り出してくれる時計だ」

 23:59:12

「もうだめですよ!あと48秒で年が明けます!」

「まぁそんな焦るなって」

「そこの改造バイク!いい加減止まりなさい!!!」

「年明け前に高速で飛ばすバカがいるか!!止まれ!」

先輩は叫んだ。

「バカじゃない!!年が明けそうだから、飛ばしてるんだ!!!」

警察は面食らったようだった。

「何を言ってるんだ!止まりなさい!!」

もう、すぐ近くで声がした。

後ろを見る。白バイのヘルメットの奥の警察官と目があった。

ニヤリと笑う警察官。

追いつかれる!

「先輩!」

白石が叫んだ。

そのとき、先輩が右手で何かを操作した。

ーー途端。

空間が、ぐにゃりと歪んだ。

先ほどまで目の前にいた白バイが、白い靄となってすぐに消えた。

先ほどまで感じていたエンジンの振動が、完全になくなった。

エンジンの低い音も消え、かすかに可聴閾ギリギリの高音だけが聞こえていた。

キーン、という耳がいたくなるような音だけが聞こえている。

先輩が白石をみた。

「時計を、みろ」

時計を、みた。

23時59分36秒

時計は、そこで完全に止まっていた。

白石は気づく。

先ほど先輩が押したボタンの下に、安っぽいガムテープが貼ってあることに。

そこには文字が書いてあった。

 コンコルド

それは昔、音速<マッハ>を超えて人々を運んだ、旅客機の名前だった。

そう。

彼らが乗っているバイクは、音速を超えたのだった。


「さぁ、存分に論文を書きたまえ」

何事もなかったかのように先輩が続ける。

「ここから先は、2018年のボーナスステージだ」

あっけにとられていた白石は、

ありえないスピードで走るサイドカーの上で、

ノートPCを広げてレポートの続きを書き始めた。

書きながら言った。

「どうして僕を助けてくれたのですか?」

「オレにもあったんだよ。ゆく年を追いかけ、来る年から逃げ続けたことがな」

その結末はどうなったのだろう。

聞きかけたが、白石にはその勇気がなかった。

音速を超えたサイドカー

周りの景色は輪郭が死んでいた。

すべての物体の輪郭が曖昧になり、灰色になっていた。

先輩が乗るバイクのテールランプだけが、どこまでもどこまでも暗闇に伸びてみえる。

そんな異空間の上で、白石はレポートの結論に取り掛かる。

「ダメだ...」

白石はすぐに頭を抱えた。

間違っていた。

時間がありさえすれば、結論が出ると思ってた。

でもそれは、完全に間違っていた。

白石には、

今までありとあらゆる結論を先延ばしにし続けていた白石には、

このレポートの結論がどうしてもかけなかったのだ。

「先輩...」

ここまでやってくれたのに。

ここまで無茶してくれたのに。

今の白石は、レポートの結論すら満足に出せないのだ。

自分で自分が情けなくなった。

謝ろう。

謝るしかない。

「先輩、あの」

ーー突然、

ものすごい衝撃と、白色の閃光が走った。

みるみるうちに輪郭を取り戻す周りの景色。

先ほどまで鳴りを潜めていたバイクの音が蘇る。

エンジンの不気味な振動がサイドカーまで伝わってきた。

何かにぶつかった。白石はそう思った。

一気に減速したバイクから「何か」を見る。

「何か」は白い色をしていた。

それはバイクの形をしていて。

宙を舞っていた。

宙を舞う白バイヘルメットと目が合い、

ーーその目は、いやらしく笑っていたーー

そのままそのバイクは吹っ飛ばされ、高速道路の外の闇に消えていった。

「連中、同僚を切り捨てやがった」

先輩が低い声で言う。

動きを読んだ警察が体当たり攻撃を仕掛けたらしい。

23時59分37秒

再び時計が、進み出したーー!

「先輩!」

「もうダメだ。コンコルドは1回しか使えない!!」

エンジンの音がうるさい。

白バイが照らすランプがまぶしい。

「先輩!まだ、結論が」

「馬鹿野郎!レポートまで面倒なんて見切れねえぞ、自分のことは自分で決めたまえ!」

今度こそ、本当の本当に時間がなかった。

23時59分47秒

「もう新年だぞ!何やってんだお前ら!」

叫ぶ白バイ。

「まだ、2018年は終わっちゃいねえ!」

叫ぶ先輩。

違う。

白石は思った。2018年はとっくの前に終わっていた。

除夜の鐘の音があちこちから聞こえる。

ドップラー効果によって何音階も甲高い音になったそれは、

新年の空にどこまでもどこまでも響き渡った。

初めからわかっていた。馬鹿げた理論だって。

高速で走るバイクの上でいくら年が明けなくたって、

日本は標準時で動いているのだから、新年はくる。

結局、2019年からは逃げられなかったのだ。

アホみたいな理論をこねくり回して、

何度も、

何度も、

何度も、結論を引き伸ばしつづけた僕の末路がこれか。

白石は自嘲する。

ーーそれでも。

このまま終わらせるわけにはいかなかった。

少なくとも、このバイクの上までは新年はきていなかった。

ーーレポートの結論が出ない理由はもうわかっていた。

時間が足りないから結論が出ないんじゃない。

きっかけがないから結論が出ないんじゃない。

必要なのは、

「覚悟だったんだ」

23時59分52秒

これまでの遅筆が嘘だったかのように手が動く。

流れる水のように導き出される結論。

なんで今までかけなかったのだろうか。

白石は文字列がどんどん増える己がレポートをみて思う。

23時59分56秒

秒で書き終える。

謝辞。その二文字が目に入る。

謝辞なんて常套句しか使わない。だからこんなのはコピペで済ませていた。

でも。

コピペされたその文字列の最後に、僕は一言付け加えた。

23時59分58秒

光の速さで保存し、光の速さで添付する。

あとは。

あとは、送信ボタンを押すだけだった。

23時59分59秒

2018年大晦日、どこまでも真っ暗な寒空の下。

「いっけぇえええええええええええええ!」

白石は叫び、

先輩がニヤリと笑った。

ーー送信しました

画面にそっけない文字列が表示される。

00時00分00秒

先輩が叫ぶ。

白石は泣き叫ぶ。

「「ハッピーニューイヤー!!!!!」」

インターチェンジのガードレールにバイクがぶつかり、ぶっちぎった。

バイクはバラバラになり、そのまま彼らは投げ出された。

散りゆくバイクの陰に、あのガムテープに書かれた文字が、

三日月の明かりに照らされて見えた。

 コンコルド

それは昔、音速<マッハ>を超えて人々を運んだ、旅客機の名前だった。

そしてそれは、機体がバラバラになる大事故をきっかけに、

以降空を飛ぶことがなくなった幻の旅客機の名前でもあった。

localStorageをwrapしてくれるnpmパッケージ、store.jsについて調べた

いきさつ

localStrageを使う機会があった。

今までは普通にlocalStrageを使っていたが、

npmにlocalStrageのwrapperがあるのを職場の人が見つけてくれた。

github.com

気になったので少し調べてみた。

概要

ブラウザやそのバージョンによってlocalStrageの扱いが異なり、

要件によっては対応が必要になることがある。

store.jsはその差異を吸収してくれる。

(ただ、localStrageはIE8以上なら搭載されているのでだいたい大丈夫)

また、pluginを導入することにより、

通常のlocalStrageにない機能を追加できたりする。

標準との違い

chrome標準

localStorage.setItem('myCat', 'Tom'); // undefined

store.js

import store from 'store'
store.set('myCat', 'Tom'); // Tom

undefinedが帰ってくるよりははるかに便利。

実装

set

    set: function(key, value) {
        if (value === undefined) {
            return this.remove(key)
        }
        this.storage.write(this._namespacePrefix + key, this._serialize(value))
        return value
    },

たしかにsetする値が帰ってくる。

仕組みについて

ブラウザやそのバージョンによってlocalStrageの扱いが異なるが、

store.jsはその差異を吸収してくれる。

ここについて少し気になったのでもう少し読んでみることにした。

ざっくりした構成要素

f:id:karoten512:20181229164540p:plain

図のような構成のおかげで、storeオブジェクトを使用する側はlocalStrageなのかcookieStorageなんか

memoryStrageを使っているのか気にせず書くことができる。

ただし実際に使うstorageは1つなので、

初期化した時にどのstorageを使うかを決めているはず。

どのstorageを使用するかを、どうやって判断しているか

storeオブジェクトが初期化されときに、

addStorargeというmethodが呼ばれる。

各storage候補を引数に与えて、そのstorageに対してtestが行われ、

ちゃんと動いたstorageを使用storageとして採用しているみたい。

       _addStorage: function(storage) {
            if (this.enabled) { return }
            if (this._testStorage(storage)) { // この部分
                this.storage = storage
                this.enabled = true
            }
        },

localStorage, globalStorage, userDataStorage, cookieStorage, sessionStorage, memoryStorage

の順でtestが行われる。動くstorageがあったら以降のstorageはtestされない。

pullreq出したらコンフリクトが起きて、githubのweb上から解消できなくなった時にやること

前提

  • プロジェクトのリポジトリを、個人のリポジトリにforkして開発している

  • プロジェクトのリポジトリをupstream、個人のリポジトリをoriginとする

  • originできったfeatureブランチをupstreamのdevelopブランチに対してプルリクを出した

  • コンフリクトし、GithubのWeb上から解消できなかった

解消法

1 upstreamのdevelopブランチを最新のものにする

git pull upstream develop:develop

2 pullreqを出したブランチにcheckoutする

git checkout feature/branch

3 featureブランチに対してdevelopブランチをrebase

git rebase develop

以降、addとcontinueを繰り返してconflictを解消していく。

4 おわったら新しいブランチとしてpush

git push origin feauture/branch2

5 pushしたbranchで再度pullreqを投げる

参考図

f:id:karoten512:20181031175558j:plain