野菜が何故か辛いことがある
昔はキャベツをよく食べていたが、たまにメチャクチャ辛いキャベツ、というのがある。 唐辛子ほどではないけど、普通に苦しいくらいに辛い。
最近辛い小松菜に当たってしまった。
何かの残留農薬なのか、それとも害虫などが毒を植え付けたのか。 はたまた放射能の影響か、私の命を狙う秘密組織の陰謀か。
妄想はさらなる妄想を掻き立てた。 怖くなったので調べてみた。
イソチアシアネートという辛味成分が生産時期によっては含まれるらしい。
なんとこのイソチアシアネート(変換できねーぞコラ) 強力な強酸化作用があるので、がん予防に効果的なんだとか。
とりあえず水溶性らしいので、水につけて様子を見てみたところ、辛味はほとんどなくなった。*1
からい野菜に遭遇したらお試しあれ。
*1:がん予防とはなんだったのか。
誰もズルしないことの重要性
「君の名は」のインタビューの記事です*1
ズルという言葉の意味ですが、一般的な意味よりとても厳しいです。 盗作を納品するとかそういう意味ではなく、真剣に作品と向かってない、くらいの意味で語られています。
今までのルーチンでやって、そこそこのパフォーマンスを発揮して仕事を終えるということを一人もしなかったんです。
ここに「ズルをしない」という言葉の意味が集約されています。
レガシーと関わると自分のせいじゃないからとどうしても考えがちですが ただ個々の責任範囲に忠実に作業してるだけじゃダメですね
もっとドメインやユーザーと向き合って 本当にあるべき姿を探る姿勢を持たないといけません
真剣にモノづくりに取り組んで「君の名は」みたいなシステムを作りたいですね。*2
時間がないときの機能追加(スプラウト/ラップ)
時間がないときは既存のソースにリファクタリングを行わずに機能追加をする。
その時に以下の二点を気をつける
- 既存ソースにテストを書けなくても新しいコードにはテストを書く
- 既存のソースの変更は最小限にとどめる
後述の方法で実現する
スプラウトメソッド
変更箇所を丸々メソッドとして作成し、既存箇所からはメソッド呼び出しのみにし、 既存箇所に入れる変更を最小にする。
テストコードのない既存箇所にロジックを入れてしまうと、変更箇所のテストが難しい。 ひとまず新しく作る箇所だけはテストで保護する。
これ以上レガシーコード(=テストのないコード)を増やさない工夫ともいえる。
ラップメソッド
変更箇所の前後に処理を入れないといけない場合、 新規のメソッドで既存処理をラップし、新規のメソッド内、かつ既存のメソッド外に処理を書く。 既存の処理の中身は極力触らない。
臭いものには蓋、という工夫ともいえる。
スプラウトクラス/ラップクラス
メソッドでやったことを同じようにクラスでも行う。
- スプラウトクラス:変更箇所を新規クラスとして用意し、既存クラスからは呼び出し箇所だけを変更することにより、変更箇所を最小にする。
- ラップクラス:既存のクラスを拡張したサブクラス上スーパークラスのインスタンスをもたせた上で新規処理を書く
ちなみにラップクラスはデザインパターンのDecoreterと同一である。
デメリット
両者とも自体を悪化させることはなくても 既存コードの質は一切よくならない。 今は時間がないから仕方ないのだろうが、 既存コードのリファクタリングはどこかで時間を用意して計画的にやるべきだ。
所感
これ以上悪くしない。少しでも前進する
〜メソッドの方は普通にプログラミングをやっていれば思いつくと思う。(同じようなソースを何度か実装したことがある) クラスの方は微妙。私にオブジェクト指向のセンスがないのかもしれない。 デザインパターンだけではなく、リファクタリングパターン的なものを極める世界もありそうだ。
接合部と許容点
接合部
接合部(seam)とは、その場所を直接編集しなくても、プログラムの振る舞いを買えることのできる場所である。
許容点
どの接合部も許容点(enabling point)を持つ。許容店では、どの振る舞いを使うかを決定できる
プリプロセッサ接合部
プロプロセッサ指令をサポートしている言語では コンパイル時にプログラムの振舞を買えることが出来る。
例:includeしたファイルの先のプリプロセッサ指令の中で、プログラム中の処理を再定義する
この場合、接合部はincludeしたファイルの中身になる。
リンク接合部
コンパイラが出力した中間表現の参照関係を変える。 Javaの場合、CLASSPATH環境変数を使ってリンカがクラスを探す場所をスタブ関数を持つライブラリ等に変える
オブジェクト接合部
オブジェクト指向を駆使して振る舞いを変える。
例:インスタンスメソッドの振る舞いを買えたい。 →インスタンスの型を抽象化し(interfaceを利用)引数等で外部から具象クラスを与えるようにする。
この場合、接合部は具象クラスを受け取る引数になる。
※他にもサブクラスで振る舞いを変える方法などもある。
注意事項
プロプロセッサ接合部とリンク接合部は強力だが保守が困難。 できるだけオブジェクト接合部を使う前提で考えたい。
参考:例レガシーコード改善ガイド第4章
【映画】マニシストに思うこと
マニシストという映画がある。
「マニシスト」不眠症の男が見た恐怖…。なぜ彼は寝ることができないのか…。クリスチャン・ベイル主演映画【感想】【川柳】 : とにかく映画が好きなんです
いや、そんな映画はない。正しくはマシニスト(The Machinist)だ。 機械工、的な意味だと思うが「マニシスト」という書き間違えが非常に多く、 検索結果にも「もしかして」が出ない。
https://www.google.co.jp/?gws_rd=ssl#safe=off&q=マニシスト
googleがミススペルと判定する閾値より勘違いが多いのか?
ただ、映画の中に流れている不気味な空気には 「マニシスト」という意味不明なタイトルがぴったりだと思う。
私も最初はマニシストだと思っていました。
データベーススペシャリストに落ちました
午前1免除
午前2:84点
午後1:53点
で落ちました。
試験はデータベース関係の本をたくさん読んで、実力を高める作戦で受けました。
諸事情により過去問を1度も解けていませんが、午前2の84点、っていうのは勉強した成果が出ていると思います。
落ちちゃったけど午後1・午後2は説いていてなかなか手応えがありました。高度試験は基本情報・応用情報より謎解き要素が多く楽しかったです。
資格はやはり、資格のための勉強、を少しはしないと受からないですね。
時間配分だったり、王道の回答パターンだったりが上手くつかめず、練度不足を感じた次第です。