外部キーNightに行ってきた #fk_night
外部キーNightという勉強会に参加してきた。Validation Night、テンプレートエンジンNight、ページャNightでおなじみのなんとかNightシリーズで、今回はDBの外部キーがテーマだった。
実況
外部キー制約はパーティションを使えない・リレーションの親テーブルをロックしてしまうので規模によってはよくない。けどデータの組み合わせで安心を得られるので、規模の問題が解決しているのなら使いたい #fk_night
— かとりょー the 新卒 (@katryo) February 13, 2015
「MySQL国の人はCHECK制約を知らない」 #fk_night
— かとりょー the 新卒 (@katryo) February 13, 2015
MySQLは即時制約チェックしか対応していないが、他のRDBMSは遅延制約チェックにすることができる。たとえばトランザクションコミット時に制約チェックが入る。MySQLの不便さよ…… #fk_night
— かとりょー the 新卒 (@katryo) February 13, 2015
まずいとわかってはいるけれど、着任したら ON DELETE CASCADEのときもある #fk_night
— かとりょー the 新卒 (@katryo) February 13, 2015
カタストロフィに仕様変更で立ち向かう勇者の話だ #fk_night
— かとりょー the 新卒 (@katryo) February 13, 2015
主キーとは別にUNIQUE制約をかけることで、ORマッパーを使いにくい問題とJOIN地獄問題を解決した話だった #fk_night
— かとりょー the 新卒 (@katryo) February 13, 2015
まとめ
自分なりのまとめです。
外部キーは大いに使うべきだ。外部キーは、暗黙のルールを制約として明文化し、かつDBの中身もそのルールに沿わせるもの。ルールの遵守により誤解、ミスを減らせる。
ただし、注意点もある。デッドロックやON DELETE CASCADEといった挙動により、予想外の損害が発生しうる。制約から得られる利益は十分に大きいため、外部キー制約に対する各RDBMSの仕様を理解することで、これらの問題に対応すべき。
理想的にはDBに触れる人すべてが外部キーの仕様に馴染んでいてほしいが、そうでないときも詳しい人が一人いると全然違う。ミドルウェアに精通したRDBMSおじさんを理解するととても頼れる力となる。RDBMSを使うときは(もしおじさんがいるなら)外部キー制約についてよく話しあってルールを決めてから設計すると、一貫性がありメンテナンスしやすいDBになる。
コンピュテーションをアンダースタンディングした
アンダースタンディング・コンピュテーションを読了した。本文中のコードを書き写し、本文と見比べながらじっくり進めて、年末から一ヶ月をかけてようやく終わらせられた。
この本、相当によい本なので、ぜひ読んでほしい。
本書は、Rubyでコンピュータサイエンスを学ぶ本だ。
どうしてRubyか
なぜRubyか? というと、たぶん現在もっとも人口に膾炙した言語だからだろう。Ruby人口とLisp人口、どちらが多いかと問われたら、Rubyに軍配を上げざるを得ない。Schemeのほうが直接的だけど、わざわざコンピュータサイエンスのために、苦労してまで学ぶべきではない。
Rubyの美しいところは、ノイズが少ない点だ。セミコロンも、変数の前に妙な記号も(たいていの場合は)つけない。これがPerlだったら大変だったろうな、と思いながら、僕は -> を繰り返しタイプしていた。
PythonもRuby同様に人気だけど、ラムダを記述するときにRubyより面倒な書き方をせねばならない。その点、RubyはMatz Lispと呼ばれるだけあって、ぽいぽい気軽にラムダが書けて気軽だ。
計算というものを抽象化していく過程で、リストや配列、連想配列といったデータ構造とは別れを告げねばならない。このとき、シンプルな構造体をシンプルなコードのまま表現できるという特徴は、このうえない美点になる。たとえ言語仕様で規定された専用のリテラルを使えなくても、Rubyで作られた構造体はとてもきれいに書ける。
そういうわけで、Rubyが選ばれたのだと僕は思う。
読み進め方
本書は、学部で学ぶような計算機科学の基礎を、Rubyのコードで表現しながら理解してゆくスタイルをとっている。
つまり、実装することで、理解しやすい形に切り分けているのだ。
大学でオートマトンやチューリングマシンの講義を受けたとしても、すぐに理解はできない。処理をひとつずつ追っていって、詰まったところは繰り返し考えて、ようやくひとつの節を進められる。
実装で概念を掴んでいくやりかたは、科学的なアイディアをすぐには飲み込めない僕みたいな普通の人間にとって相当に効率がいい。説明を読むだけではわからない論理展開も、コードになれば体感しやすい。
この本を手に取ったら、Rubyのコードを実際に書きながら、じっくり進めていってほしい。思った以上にあっさり最後まで読み終えられるはずだ。
おすすめ読者層
これからコンピュータサイエンスの講義を受ける、学部一・二年生くらいの大学生に、特に本書を薦めたい。
実際のところ、コンピュータサイエンスとプログラミングの間には断絶がある。コードを書くことはコンピュータサイエンスではない。科学の一端が言語にあるにせよ、それは結果であって、プログラミングのためにコンピュータサイエンスがあるわけではない。
大学でコンピュータサイエンスの授業が始まると、その違いに戸惑ってしまって、学習が嫌になるかもしれない。そうなるまえに、本書に触れて、断絶をつなぐ練習をしてほしい。
コンピュータサイエンスを学ぶ道のひとつに、プログラミングがあると僕は思っている。実用的な言語で最初の数歩を踏み出しておくことで、その先に進みやすくなると思う。
あ、Lispをdisってるわけじゃないです、はい。
ルートダブル -Before Crime * After Days- Xtend edition のレビューと感想
ルートダブル -Before Crime * After Days- Xtend edition のPSVita版をクリアした。
正直に言うとおすすめ。Ever17が好きな人はプレイすべき。
しかし、だめなところもかなりあって、コレは傑作だー! と言い切れない歯がゆさもある。
でもノベルゲーム好きならやっといて損はないよ。
面白いところ
このゲームの物語は一直線には進まない。時系列が組み変わりながら、視点を交代しつつ、事件の側面と背景を複数の位置から語ってゆく。事件そのものや人間関係の謎がどんどん積み上げられてゆきながらも、前半まではほとんど解明されない。ルートA、Bをクリアすれば、事件そのものの全体像がようやくわかってくるのだが、その裏にある秘密までは到達しきれないのだ。
後半のCルートで状況が一変する。
筋が通った答えが解き明かされ、それまでの思い込みを反転し、謎だったものが一気に繋がってゆく。これが面白い。
さらにつけ加えると、数字に象徴的な意味を持たせる演出、現実の理論に架空の設定を入れ込んでくる攻め口などは中澤工のゲームおなじみのもので、プレイしたことがある人ならちょっと楽しくなるはずだ。自分も「あっこれEver17で見たやつや……」と思った。
だめなところ
長い。
ルートBが特に長い。緊張感のないキャラクターのセリフを眺めながらぽちぽちボタンを押す作業は結構つらぽよだった。たとえばFate/stay night に比べたら物量的には短いけれど、ルートダブルの日常シーンはほんとプレイ時間が長く感じる。
なんで長く感じるかというと、キャラクターが好きになれないのが一番の原因かなーと思う。
主人公の夏彦はルルーシュみたいなポーズでドヤるのがなんだかなーだし、渡瀬とかいうおっさんは「俺は男なんだ」とかめんどい発言するし、ましろとかサリュとか悠里とかとってつけたような性格だし。
問題は、キャラクターが役割に沿った安易な言動を選んでいることにあると思う。「ここで正気を失うことになってるんで、気が狂ったようなセリフを言います」と、筋の決まった演劇のように、ストーリーの都合にあわせてキャラクターが動いている。だから不自然に感じるし、キャラクターを好きになれない。
そうそう、悠里がメインヒロインのはずなんだけど、一番なじめない存在だった。こういう儚いキャラ、好きじゃないです。もっとこう、予想外の活躍してほしいです。
まとめ
欠点もあるけど面白いのはたしかなので、Ever17が好きならプレイしよう!
スノーボード体験
一月と二月の頭に、都合二回、会社の同僚とスノーボードに行ってきた。
スノーボードに挑戦するのは初めてだったわけだけど、よくあんな不安定な遊びを楽しめたなと振り返って思う。
ゲレンデで、いかにも上手そうな人があっさり転ぶのを何度も目にしてきた。スノボはスキーに比べると明らかに転びやすいスポーツで、転倒に対する意識というか価値観を変えないと楽しめない。
楽しくはあったけど、スキーのほうがよかったかなー転ばなくても進めるしなー、と後悔せざるを得なかった。
あと、滑った翌日は筋肉痛に苦しんだ。足じゃなくて、肩と背中と腹筋が痛くなった。どうしてそうなるかというと、起き上がるのに上半身の筋肉を使ったからだ。五十回くらい転んだから、全身をかなり鍛えられた。
ちなみに、男だけで行ってきた。
夕食のあとに酒とお菓子を買い込んで宴会をしたのだけど、夜が深まるにつれノリがどんどん男子校になってきていた。具体的な内容は書けないのだが、あの場に集った面々は中学生並みの知能指数になっていた。
社会人とはなんだったのか。
サイコパス劇場版を観にいった。
サイコパス、字幕が戸田奈津子だった。何が起こったのか俺にもわからん
— かとりょー the 新卒 (@katryo) January 17, 2015
東南アジアで傭兵に拉致されたときに学があるなと褒められたいので思想書読むことにしますね
— かとりょー the 新卒 (@katryo) January 17, 2015
サイコパス、二期とちがってちゃんとサイコパスしてたのが満足度高い理由ですね。思想書からの引用とか官僚組織とか国家情勢とか語りが始まると「あー俺はサイコパスを観てるなー」と実感が湧いてきます
— かとりょー the 新卒 (@katryo) January 17, 2015
あと、常守さんが、すっごく、かわいかったです。はい。ええ。ほんとに。
— かとりょー the 新卒 (@katryo) January 17, 2015
常守さん主人公の乙女ゲー公開が待たれる
— かとりょー the 新卒 (@katryo) January 17, 2015
なお鹿矛囲桐斗の事件とはまったく関係のないエピソードだった。二期とはなんだったのか。
続編がいくらでも作れるシステムになってたので、次のTVシリーズは月村了衛さんとかがシリーズ構成をすればいいんじゃないですかね……。
年末年始で読んだ本まとめ
年末年始で読み終えた本の感想を端的に書く。☆は5点満点での評価。
読んだ本
のうりん
☆☆☆☆
本気で笑えた。
最初から最後までパロディ尽くしだった。自分はだいぶわかるけど、これ、元ネタ知らない人は面白いんだろうか。
当然ながら、自分でも気づかなかったパロディが多数ある。元ネタが気になった人はのうりん元ネタwikiで確認しよう。
ケモノガリ 2
☆☆☆☆☆
楽しい。
とにかく、速い。不自然さや強引さにつっこむ暇を与えず、とてつもない勢いで物語が展開される。
1作目は映画「ホステル」のノリだったけど、本作では拷問も少なめで暴力描写が苦手な人にもおすすめできる。うそ。できない。
丘ルトロジック
☆☆☆
ちょっと退屈。
高校の部活で、オカルトと殺人鬼に挑む話。予想以上にテンプレ構成のチームだった。
もうちょいびっくりしたかったな。
USJのジェットコースターはなぜ後ろ向きに走ったのか?
☆☆☆☆
関数プログラミング実践入門
☆☆☆
俺、この連休が終わったらHaskellを始めるんだ……。
臨機巧緻のディープ・ブルー
☆☆☆
こんだけ設定を積み上げておいて、続編なしですか!?
小川一水さんに直接サインをもらった本なので、思い入れはあるのだけど……。1巻だけでは、浸りきれなかった。
感想を書いての感想
これらのほとんどは、読みかけのまま、実家に置いていたものだ。せっかく帰ってきたのだからと、まとめてこうして読み終えた。
本は、読みかけのまま放置するとよくない。内容を忘れて、読み直したときに続きを楽しみにくくなる。読み切っていない本の記憶が、なんというか、自分の人生におけるノイズになっていると感じる。
今年は、読みかけの本みたいに、これまでやり残したことを整理していく年にしたい。
それと。ひとつまえの記事でやり忘れていたけれど。
明けましておめでとうございます!
「USJのコースターはジェットコースターはなぜ後ろ向きに走ったのか?」感想
「USJのコースターはジェットコースターはなぜ後ろ向きに走ったのか?」を読んだ(どうでもいいことだけど、業績悪化した遊園地を立て直す話なので甘城ブリリアントパークを思い出して脳内でAKINOの歌声が流れ続けていた)。
新書でおなじみの「なぜ」タイトルでウッと身構えてしまうが、内容はだいぶよかった。実例を、しかも実際にうまくいったケースを見せてくれるので、机上の空論かもという不安なしに読み進んでいける。
本の内容
簡単にまとめる。
USJで実現したアイディアの、作成の中心にあるのがイノベーション・フレームワークだ。ドヤ感ある命名だけど、著者がそう書いてるので受け入れよう。
イノベーション・フレームワークとは
- フレームワーク
- リアプライ
- ストック
- コミットメント
1のフレームワークが核にあると考えていい。フレームワークのなかにフレームワークがあるのは気持ち悪いけど受け入れよう。
アイディアを練る際に重要なのは、以下の二つをしっかり考えて決めることだ。
- どんな条件を満たしているべきかを決める
- どこに着眼点をおくかを決める
これはTDD(テスト駆動開発)のようなものだ。マーケターは、まずspecを考えねばならない。最終的な目的を達成するために、成り立たねばならない条件(spec)を定める。
着眼点を決めるのは、必要条件を決めてからだ。条件をきちんと定め、的を射たものと確信できていないと、アイディアを練るときに見当違いの領域に立ち入ってしまい、無駄に時間を費やしかねない。
条件と着眼点を決める際の手法には複数あるが、戦略的フレームワークが最も汎用的に使える。
戦略的フレームワークとは
まず、何を目的にして、どんな条件を満たせばよいかをはっきりさせる。で、その条件を満たすためにどんな戦略をとるかを決める。そして、その戦略で進めたとき、必要な条件を満たすための戦術を考える。
目的のspec => 戦略のspec => 具体的なアイディアと、トップダウンにspecを考える。
このように、段階的にブレイクダウンしていくことで、何をすべきかを決めていく。
あとはすごい頑張れば勝つ確率が高められる。
「すごい頑張る」の部分についても本書では書かれているがそのへんは省略する。
感想
「フレームワークを使っても、あくまで確率が高められるだけで、確実に勝てるわけではない」と率直に告げている点に好印象を抱いた。
エンジニア的に問題に取り組むと、どう解決するかにいきなりフォーカスしてしまいがちだ。最初の目的設定と、specへの落とし込みが、特に怠りやすい点だと思う。細部にフォーカスして行動する際に迷いを持たないためにも、満たすべき必要条件をきちんと決められるようにしたい。