君は心理学者なのか?

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

2019年ふりかえり〜失敗したことリスト〜(前半)

概要

去年は大量に失敗をした。

こんなにたくさん失敗したことって人生でないかもしれない。

自分だけでは気づけない失敗もたくさんあった。

フィードバックをくれた方、本当にありがとうございます。

今回はエモ度低めでお送りします。

前編

1月

失敗したこと

要件定義の際は利害関係者を巻き込むことが大事なのに、巻き込みが遅れた。

エンジニアサイドで要件をある程度つめて、biz側にレビューをもらったが、

認識がずれまくっていた。

当時の僕は広告業界ドメイン知識がほぼなかったので、当然だった。

その時、「要件定義は巻き込み力」と上司がいっていた。

これをきっかけに、上司の進めでDDDを始めることになった。

biz・エンジニア側とほぼ毎日顔を突き合わせ、モデリングを始めた。

その他

買ってよかったもの

調味料ラック www.amazon.co.jp

2月

失敗したこと

自分の作業しか見えてなかった。

プロジェクトを進めるための準備(要件定義・モデリング・設計)がおざなりになり、

実装する人のタスクが枯渇してプロジェクトがほぼ停止してしまった。

買ってよかったもの

洗濯洗剤(固形) www.amazon.co.jp

3月

失敗したこと

ドメインモデリングが永遠に終わらず、実装する人のタスクが枯渇してプロジェクトがほぼ停止してしまった。

ドメインが複雑な場合、ドメイン全体をモデリングすると時間がいくらあっても足りなくなる。

そこで、

事業にもっとも価値をもたらすドメイン

通称「コアドメイン」に当たるドメインを先にモデリングし、

いったんコアドメイン以外のモデリングはあとで行うことにした。

買ってよかったもの

左利きのエレン www.amazon.co.jp

4月

失敗したこと

SSHなのに、エモい。を書く時にスケジューリングをミスした。

SSHなのに、エモい。は執筆開始してから2回くらい内容がピボットした。

そしたら執筆にかける時間がほぼなくなり、何日も繰り返しながら書いた。

結果体調が死んだ。

執筆する前に「それは本当に自分が描きたいものなのか?」を吟味する必要があった。

買ってよかったもの

イリヤの空、UFOの夏 www.amazon.co.jp

5月

失敗したこと

コアドメインの実装が終わり、あたらしいドメイン領域の実装が始まったが、

手戻りが増えてきた。原因は、モデリング時にしっかりモデリングができていなかったこと。

一つユースケースを増やした時に、モデル全体で整合性がとれるかどうか確認しないといけない。

なんだか設計が複雑になっている気がする → モデリングがちゃんとできていない、

これを感じた時はモデリングに立ち返って考えないといけない。

買ってよかったもの

こめびつ www.amazon.co.jp

6月

失敗したこと

マイクロサービス間で通信するのに、マイクロサービス間のtransaction管理について当初考えていなかったこと。

データ整合性を意識した設計は大事。

リアルタイムで整合性が取れている必要がない場合は、結果整合性も検討する。

買ってよかったもの

パピルス www.amazon.co.jp

Qiitadon忘年会まとめ 2019

序章

予告

qiitadon.com

qiitadon.com

わからない、流れ

qiitadon.com

迎えにいきます

qiitadon.com

qiitadon.com

挫折

qiitadon.com

なのやつへの期待

qiitadon.com

届く、カーテン

qiitadon.com

qiitadon.com

ももせさんのカーテン

qiitadon.com

すぐに名札に反映

f:id:karoten512:20191222213914j:plain

ベランダで花火

qiitadon.com

qiitadon.com

混在する夏と冬

qiitadon.com

ごちゃまぜ四季

qiitadon.com

使い古されたコピペ

qiitadon.com

名札

qiitadon.com

起こる、火事

qiitadon.com

家がない

qiitadon.com

慌てるかろてん氏

qiitadon.com

qiitadon.com

qiitadon.com

qiitadon.com

もよりにたつなのやつ

qiitadon.com

続々とあつまる人たち

qiitadon.com

qiitadon.com

qiitadon.com

おいしそう(おいしかった)

qiitadon.com

qiitadon.com

合流の章

障害発生

qiitadon.com

合流直前に発生。

合流

qiitadon.com

家に到着

qiitadon.com

ぼくはすぐ障害対応に入りました。

みなさんには談笑して待ってもらっていました。

長い5分

qiitadon.com

かろ「5分でおわります!」

お わ ら な か っ た

対応終了

qiitadon.com

先に始めるリモート勢

qiitadon.com

qiitadon.com

買い出し&2陣目合流

qiitadon.com

開始

qiitadon.com

かろ「みなさん、忘年会がんばっていきましょう」

うたげの章

会話に集中すぎてて今回は実況少なめ...

ただ、なんとひだおさんが14時間にわたってログを書きとめてくれてました!

うたげの章ログ

19:30~

  • いちやさんのノートPCが大きすぎて鈍器になってる話
  • Xamarin するには人脈が必要
    • ちょまどと誕生日ケーキの話し
  • SIer怖い
  • m3は医療系Yahoo
  • リンク&モ○ベーションという会社は名前がブラックっぽいよねという話

20:34~

  • いなばさんのかばんから握力計を発見
    • なんで?
    • みんなで測定開始
    • いちやさんが90kgを叩き出す
    • 狂気の6人
    • のちに単位が間違っていることが判明
  • ももせ「お米洗うね」かろ「無洗米だよ」
  • ダークサイドに落ちた歌麿が美味しい鍋を食べて一言「あ~もう宝石」
  • みんなで不倫マッチングアプリについて調べる
    • その流れでかろてん氏がそのアプリに登録
  • いなば「足立区と荒川区の中学生が決闘(デュエル)して決闘罪に抵触した」
    • いなば「決闘罪、明治からあるらしいけどもういらないやろ、流石にって思う」
    • かろ「さっき足立区と荒川区の話ししてたじゃん」
  • momosetkn さんがコーヒーを何杯も入れ始める

    • あらゆる入れ方で入れるので、味が毎回違う。全部おいしかった
    • いなばさんがコーヒーを飲みまくる
    • いなば「コーヒーうめー」
  • いなばさんが「はなとゆめ」の出版会社にまんがをもちこんだ話

    • 編集さん「下品すぎます。読者のことを考えて下さい」
  • 筒井康隆 ラノベ [検索]

22:51~

23:44~

  • 進撃の巨人のネタバレを避けつつ情報を引き出す心理戦
  • Qiitadon では技術系、サブカル系の話はしづらい…
  • 曲がるディスプレイの懸念点「嫁が曲がる」
  • 辛いものトーク
    • しびれる辛さについて。コンビニのやつは邪道
    • キムチとキムチ風(キムチ味)の違いを語る
  • いちやさんの去年の電気工事伝説
  • いちやさんが漫画に詳しすぎるので実家が満喫疑惑
  • 稲葉さん泥酔
  • 椎名林檎とmiwaがすきな人はメンヘラでは?大激論
  • 世相を反映した福山雅治星野源
  • かろ「大学の講義で朝からスーパードライを飲んでるひまわりさんという女性がいた」 →漫画化希望
  • 跡部様「おもしれえ女だな」
    • 面白い女とは何か?
      • 旋盤加工できる彼女
  • 漫画談義
    • 大蛇丸様(youtuber?)のキャラ立ち…
    • ボルトのおぼろげな記憶をたどる…
    • BLEACH の記憶をたどる…
    • ミスチルの記憶をたどる…
  • よみがえるイナバさん
  • DMM動画の仕組みを暴く → PayPal対応の闇

25:30(01:30)~

  • Uber の闇
  • RPAってどうよ?
  • 進路相談
  • 破られにくい認証方法を考える会
  • いちやさんとももせさん就寝です

26:54(02:54)~

  • ウォーターサーバーの説明を始めるかろてん氏
  • オモコロについて
    • ARuFa氏のYoutube投稿について…(オモコロチャンネルより)
    • 「言葉のプロが川柳で賞金5万円ゲットに挑戦!?」(オモコロチャンネルより)視聴中…
    • youtube動画のオーディオコメンタリーとして感想戦をするかろてん氏
    • エンターテイメント方向に人生を振りたいかろてん氏
  • カス動画祭に言及するイナバさん
  • 会社に物理アバターが存在するかろてん氏
  • かろてん「Qiita は簡単にバズる」
  • 女の子の分報チャンネルに粘着するオジサン伝説

28:36(04:36)~

  • Qiitadon 忘年会 in 関西の機運
  • なのやつの身辺調査を始めるかろてん氏
  • 人によって見方・感じ方が違うことを確認する5人
  • 生姜
    • 「生姜の可能性は無限大だなぁ」
    • ガリを消費するために、会社の売上が下がる」
    • 「酒は美味しいと思って飲んでねーから!」
  • 真面目な勉強会の記事がかけないかろてん氏
    • かろてん氏+勉強会記事 =スリル・ショック・サスペンス
  • なのやつ「ちかんで終わる」
  • デッドロック → 死
  • リアルにんにく、チューブにんにく、顆粒にんにく
  • だれか「おい、ペペロンチーノ作れや」
    • 朝食にペペロンチーノを作り始める男たち

29:52(05:52)~

  • なのやつシェフ、再臨
  • 初詣飲み会の機運
  • なのやつ茶話会
  • 「詳細が見える人は存在しない」仮説
  • ペペロンチーノの完成とともに炊飯完了 →炭水化物による絶望の始まり
  • 迫りくる睡魔
  • 皿が足りない
  • なの「土曜日の昼、ペペロンチーノ率9割を超えている」
    • 主人不在のうちに米を調理する男

うたげの章ハイライト

作詞作曲稲葉さん

qiitadon.com

qiitadon.com

土鍋でたかれるご飯

qiitadon.com

稲葉さん轟沈

qiitadon.com

qiitadon.com

いなばさん復活

qiitadon.com

qiitadon.com

qiitadon.com

驚異の全員宿泊

qiitadon.com

朝6時のペペロンチーノ

qiitadon.com

勝手に使われた米

qiitadon.com

きっと雑炊したんだと思います。ぼくは寝てました。

qiitadon.com

ペペロンチーノ食べた後に雑炊食べたのかな。

すごいな。

あぶれた人たち

qiitadon.com

解散

qiitadon.com

帰宅

qiitadon.com

qiitadon.com

qiitadon.com

伏線

qiitadon.com

【nginx】status codeが400系/500系の時に限り、CORSエラー(Origin http://xxxxxx is not allowed by Access-Control-Allow-Origin)が出る

f:id:karoten512:20190829214411p:plain

背景

静的サイト(originサーバがドメインA)からAPIドメインB)へアクセスする、

いわゆるCORSの仕組みを使ったAPI通信をしていた。

CORSを実現するため、nginxの設定ファイルには以下のように記述をしていた。

    location / {
      add_header Access-Control-Allow-Origin "domain A";

      # OPTIONS(priflight request)用の設定
      if ($request_method = OPTIONS ) {
        add_header Access-Control-Allow-Origin "domain A";
        return 200;
      }
    }

※ めっちゃ略してます

現象

POST, PUTの成功時(status code 200)の時は特に問題ないが、

失敗時(status code 400, 500系)のときに

Origin http://domainA is not allowed by Access-Control-Allow-Origin

とコンソールに表示され、ブラウザがresponseの結果を受け取ってくれない。

curlで叩いた時のresponse headerを見ると、

確かにAccess-Control-Allow-Origin headerが付与されていない。

調査結果

    location / {
      add_header Access-Control-Allow-Origin "domain A";
    }

上記の記述だと、

status codeが200系、300系のときしかheaderが追加されないことがわかった。

Adds the specified field to a response header provided
that the response code equals 
200, 201 (1.3.10), 204, 206, 301, 302, 303, 304, 307 (1.1.16, 1.0.13), or 308 (1.13.0).
Parameter value can contain variables.

nginx公式ページより

よって400, 500系の結果がかえってきた時、

responseにAccess-Control-Allow-Origin headerが付与されていないため、

ブラウザはそのresponseを取得してくれない。

解決策

    location / {
      add_header Access-Control-Allow-Origin "domain A" always;
    }

上記のように、alwaysを追記する。

そうすることにより、status codeによらずheaderが追加される。

If the always parameter is specified (1.7.5),
the header field will be added regardless of the response code.

nginx公式ページより

結果

400, 500系でもCORSエラーが起きなくなった。

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

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鹿使ったことないから他はわからない。