2015-06-14 Hachioji.pm #51 に行ってきた


本日 6/13 は Hachioji.pm #51でした。

餃子とか野菜とかを食べつつ、いろんな話をしていた気がします。

僕のスライドはこちら。

最近考えている事と、それに付随する悩ましい話です。リファクタリングのいい指標や、それを測るツールがあれば是非是非教えていただきたいところです。



2015-05-27 こういうふうに、書きたい、と思う


あなたの目前にクソコードが広がっているとする。

実力のないプログラマであれば、それがクソなのかそうでないのか判断はできない。そこそこ実力があって、良識のあるプログラマであれば、クソコードを嘆くであろう。

で、問題はここから。

目の前にクソコードがある。しかしそのクソコードはそこそこ実績のあるサービスで、そこそこ収益をあげている、としよう。

そうすると、単純にクソだからといってサービスを捨てたり機能を減らしたりはできない。「リファクタリングしよう!」というのは簡単だけど、クソコードが相手だとテストも不十分だったりするから、それは必要ではあるけれど、やっぱり怖い。「そういう職場はマジやばいので、全力で逃げるべき」っていうのは場合によっては真ではあるけれど、IT も Web も、もうそれなりに歴史のあるものだから、まったくレガシーがない環境はたぶんありえないし、完全新規なベンチャーであれば、未来のレガシーをつくるのは多分そこから逃げたあなた、だ。

で、こういうとき、どうするべきか、僕も答えはないのだけれど、現状に対して、「こういう風に書きたい、直したい」っていう思いが大事なのかな、って思っている。現状がどれだけクソだったとしても、それをどうしたいか、どう直したいか、自分は今のプロダクトを本当はどういう風に書きたいか、ってのを示すことができなかったら、多分それは現状より悪い。

現状がクソであることに文句を言う人、どう悪いか、まで言語化できる人は数多くいるけれども、どう直したいか、どう書きたいか、ってところまで踏み込める人はあまりいないし、そこまで踏み込んでくれる人が増えてくれたら世界はもうちょっと良くなるのかもしれないなぁ、ってちょっと思ったりした。



2015-04-25 今更 screen に入門してみた


プロローグ

screen/tmux を長いこと使っていなかった。

  1. 使ってみようと思ってネットの記事とか調べ始める
  2. 分割とか別にわりとどうでもよくね?と思う
  3. とりあえず、screen を入れる
  4. Ctrl-a を封印されて死ぬ(emacs ユーザなので)
  5. もう二度と使うか!と思ってアンインストール

みたいなループを2年毎に繰り返していた。

僕はおじさんなので、端末は基本的に 80x24 でないと気持ち悪いし、だから分割とかしない。 (emacs はホスト側のやつ最大化して使うけど、こっちも分割使ってないので、分割のメリットが全くわからない。 何か見ながら作業する場合はふつうにバッファ切り替えればいいでしょ?くらいに思っている)

今回、某所で話していたら、「便利な nohup くらいでしか使ってない」みたいな話を聞いて、「逆にそれくらいならいいかも、いけるかも」と思って、 最終的に screen 導入に至ったので、その経緯なんかを書いてみようと思う。

インストール

会社の Linux 開発機に screen が入ってた(tmuxは入ってなかった)ので、とりあえずそれを使ってみることにする。 mac はパッケージ(homebrew)で入れた(気がする。最初から入ってたかも)。

プレフィックスキーについて悩む

デフォルトのプレフィックスキーが Ctrl-a なのがまじで理解できない。これに決めたやつは死んだほうがいいとマジで思う。たくさんの emacs 使いを 惑わせた罪は重い。(ってのは言い過ぎにしても、emacs ユーザじゃなくても、bash とか使ってる人はふつう Ctrl-a 使うでしょ?まじ意味がわからない)

で、キーバインド変えようと思うのだけど、この設定方法がマジで意味がわからない。Ctrl-s とか使わないから、振ろうかとおもったら、うまくいかないし (シェルだか端末だかが先に横取りしちゃうのかもな。そっち直せばいけるのかも)、「Ctrl-; とか、いいんじゃね?」と思ったのだけど、どうやって .screenrc 書くと 設定できるのかマジでわからない(^;^;だとうまくいかなかった)

ぐぐると、Ctrl-z と Ctrl-t の事例ばかりひっかかり、マニュアルを見ても、いまいち設定の方法がわからない。

そのへんの試行錯誤

Ctrl-r 使わないし、そこそこ押しやすそうだから、使おうかと思ったら、今まで使っていないだけで、ふつうに便利機能だった。勉強になった。

最終的に Ctrl-u にした。bash の文字削除は Ctrl-d/Ctrl-k/Ctrl-h くらいしか使わないので、潰してもいいや、と思った。vi の操作にも影響なさそうだし。

シェルの設定をする

とりあえず、プロンプトに、ウインドウの番号をいれるか、と思って、こんな感じの bash 関数を定義した。

__screen_window ()
{
    if [ -n "$WINDOW" ] ; then
        printf "$WINDOW:"
    else
        printf ""
    fi
}

で、PS1$(__screen_window) みたいにして呼び出せば良い。詳細は以前書いた。

今のプロンプトはこんな感じになっている。

ウインドウ名が bash なのがイマイチだと思って、いろいろ調べると、カレントディレクトリにするのが定番っぽいので、その設定を入れる。

# screen の場合のみ。ウィンドウ名をカレントディレクトリにする
if [ $TERM == 'screen' ]; then
  PS1=${PS1}'\[\033k\W\033\\\]'
fi

ホイールマウスの挙動がおかしくて悩む

ホイールでは端末がスクロールして欲しいのに、screen を有効にすると、ヒストリをなぜかたどるようになる(矢印の上キーと同じ動作になるっぽい?)。

これはめっちゃ使いにくい、というか、挙動を勝手に変えるなクソが、と思うので元の挙動と同じになるようにする。

使っている機能

基本的には新しいウィンドウを作るのと、そのウインドウへの移動、ウインドウの名称変更(リモートサーバに繋いだ時とか、reply 起動した時とか)くらいしか使っていない。 全然たいしたことやってないけど、これだけでも十分便利だった。

使ってみて

  • 普通にタブとして便利だった。
    • 端末のタブを使わなくなってしまったので、Ctrl-t に割り当てもアリなのかも
  • リモートサーバにつなぐときのベストプラクティスがまだよくわからん
    • 回線切断とか考えると、リモート側でも screen 起動しておく方がいいのかな
    • ローカル側はあくまでもただのタブ、みたいな感じ
  • detach するのはいいのか悪いのか今の所わからない
    • 幸か不幸か、回線切断を食らっていないため
    • どうせ attach し直しとか無理でしょ?という意見もあるけど、どうなんだろ?

と、いうわけで、設定はまだまだ見直しが必要だし、もう少し使い方も覚えていかなくてはダメだけど、 とりあえず軌道に乗った感じなので、ゆるゆると使っていこうかなぁ、と思っている次第。

追記

なるほどー。Ctrl-z 2連打すれば通常の Ctrl-z と同じ動作になるわけだから、それを使えば良い、と。Ctrl-z の使用頻度を考えるとそれはそれでアリなのかもしれないです。



2015-04-21 本を読んでいない


割と読書が好きで、技術書もそれ以外のも結構読む方で、Booklogで見ると、 だいたい年間で30〜50冊くらい本を読んでいるらしい。漫画とかラノベとかも含めてね。

で、2015年の読書状況を見てみると、4カ月弱で5冊しか読んでなくて、これ明らかにやばいペースなのだけど、 なんでこういう状況なのかな?とか考えてみたら、1月から「探偵歌劇ミルキィホームズTD」やってたせいだ。どう考えても。

余暇時間はほぼすべて、ミルキィの伏線チェックや謎解きに使われていたし、元ネタの調査の一貫で「時計仕掛けのオレンジ」を見たりとか、 そんなことしていたので、そりゃまあそうなるよな、という感じ。

僕の探偵業はまだ終わっていないのですが、1〜3月に比べたらだいぶ頻度は下がってきたので、そろそろちゃんと読書したほうが良さそうである。



2015-04-18 Hachioji.pm #49 に行ってきた


本日 4/18 は Hachioji.pm #49でした。

昨日 Kichijoji.pm に参加したら「久しぶり」って言われて、「あれ?そうだっけ?」って思ったけど、 たしかに、はちぴー久しぶりだし、その前の技術系のイベントははてなのセミナー行ったくらいだから、たしかに久しぶりであった。

タイ料理を食べつつ、いろんな話をしていた気がします。

僕のスライドはこちら。

一つ補足しておくと、基本的には O/R Mapper の処理だけで足りているのだけど、たまにめっちゃ難しい処理を 書かないといけないことがあって、そういうときに継承ができなくてまじつらい、みたいなのを解消したくて いろいろ考えていた。あと、これは僕一人の成果ではなくて、僕のチーム成果であることも補足しておかねばならない。

あとそのあと、いろいろフィードバックをもらった結果、これは「データマッパーなんじゃね?」という結論になった。 フルスタックなデータマッパーとは多分ちょっと違うのだけど、たしかに機能的にはデータマッパーとしておくのがいいのかな。 こういうの難しいし、あんまり変なこと書くと燃えそうだから怖いな、と思う今日このごろです。

毎度書いている気がしますが、はちぴーはゆるふわな話からアニメの話から、ちゃんとした技術の話まで色々できて楽しくていいですね。 今後も参加したいです。



2015-04-11 プラスティック・メモリーズがやばい


こんばんは、ミルキィ難民のおじさんです。

難民ではありますが、今期のプラスティック・メモリーズがやばいです。1話だとニーナが健気で可愛くて、 おじさんの涙腺はマジで限界だ。

この作品も、結構色々伏線を張っているっぽくて、とりあえず1話を見ていて気になったのは下記あたり。

  • 回収されたギフティアの様子がまるで死体のように扱われてるのなんで?
  • アイラは寿命が近い?あるいは、一度記憶を消してる?
  • アイラ人間よりもやたら人間っぽいのはそういう演出なのか、何かあるのか
  • 最後、アイラはニーナに何をしゃべったのだろうか?

んでね、思うところが色々あるのだけど。僕が生きている間に実現できるかどうか分からないけど、ギフティアみたいな、 人間的な感情を持った機械ってのはいつか出てくる、と思う。そういう時代が来た時、機械に対して、人間と同じように接することができるか、 あるいは人間と同じように接して良いのか、みたいな問題が絶対に起こる。

で、僕がもしその時代に立ち会ったら、どう思うのだろう、って考えたのだけど、僕はニーナの覚悟とか最後のシーンとか見て泣いてたので、 多分機械も人間も関係ないんだろうな、って思った。少なくとも嫌いな人間より、好きな機械を大切にするんじゃないか、そもそもそういう区別 すら無いのかもしれない、とか、そんなことをアレコレ考えたりしていた。



2015-04-01 探偵歌劇ミルキィホームズTD がとても良かった件


例によって例のごとく、探偵歌劇ミルキィホームズTDのお話です。

Perl とか DB の話を期待してた人は閉じるボタンとか戻るボタンとか、クリッククリック!若干ネタばれっぽい話もあるかもなので、 そういうの嫌な方も閉じるボタンとか戻るボタンとか、クリッククリック!

探偵歌劇ミルキィホームズTD、 みなさん、ご覧になりましたでしょうか?

11話では twitter を見ていても、「いい最終回だった」という感想を多く見ました。実際に、これまでの疑問点などのなんやかんや、 たとえば、僕が前回書いてた疑問点とか、とても綺麗に解消されていて、 ある意味 TD の最終回といっても過言ではない話だったのかもしれません。

今回のシリーズは茉莉音の側から見ると、失ったもの(エレメントとそれが象徴する自分自身の大切なもの)を取り返す話であり、 メインテーマの一つは「自分さがし」であったのだろうな、と思います。

11話が終わり、メインテーマの1つが綺麗に回収されたことで、僕の中では実は一抹の不安がありました。今回のTDの主題歌「ミルキィ A GO GO」では

大団円もどんでん返し あるよね

とか

クライマックスは どーなるの?
どーなるの? 注目だ!見逃せなーい!

という歌詞があります。この歌が「ミルキィホームズから見た、探偵歌劇ミルキィホームズ TD の世界観を描いたもの」であるのは自明だと思うので、「おいおいまじかよ」 と僕は思っていたのです。11話が大団円だとすると、最終回どうなるんだ???と、

最終回では、ミルキィホームズと怪盗帝国の対決が描かれています。怪盗帝国との対決はゲームや1期2期でも描かれている、ある意味宿命の対決、とも言えるものです。 ただ、2期の途中で、アルセーヌ(=アンリエット生徒会長)は落ちぶれていくミルキィホームズを見かねて学院を破壊し、去ります。

2期のメインテーマは(おそらく)「破壊と再生」であり、ラストはホームズ探偵学院の再建の兆しが見えるシーンで終わります。しかしながら校舎はすべて破壊され、野ざらしの 、青空のもと授業が行われている学院の姿でありました。

3期のふたミルでは、ミルキィも怪盗帝国もほとんど姿を表していない事が明らかにされます。また、学院はいつの間にやら再建されていました。ミルキィホームズはトイズを取り戻しつつも、 期待されている姿と現実のギャップに苦しんでいるようにも見えました。

今回の TD では、ミルキィホームズはいつも通りのミルキィホームズに見えました。一見ダメダメのように見えますが、推理は実は大体あっていたし、トイズは1期2期の終盤に見られたチート的な ものは無くなっていたけど、普通に復活して、普通に活用されていました。できる範囲で頑張っている、そんな風に見えました。

最終回の怪盗帝国との対決では、ミルキィホームズは(1期終盤で見られたような)チート的なトイズを使うことなく、手持ちの(ゲーム版設定程度の、決して強いとは言えない)トイズを駆使して 怪盗帝国を退けました。また、アルセーヌはそれに対して、「見たいものが見られた」と満足気でありました。

1期終盤で見られたチート的なものを除外すると、ミルキィホームズのトイズは決して強いものではありません。実際、ゲームやAlternativeシリーズでは、自分のトイズを卑下しているような シャロの描写も見られたりします。そんな中で、チームワークと創意工夫でなんとかしている、というのが本来のミルキィホームズであり、また、それが唯一怪盗帝国と互角に渡り合うチームでも あります。

チート的な能力に頼ることなく、アルセーヌを退けるだけの力を見せた事、またそれに対してアルセーヌも満足できたこと。これはミルキィホームズとアルセーヌの成長であり、2期で破壊されて、 (兆しはあったけど)再生しきっていなかったところを補完できた、とてもいいエピソードだったのではないかな、と思います。

これで、これまでのミルキィホームズシリーズにあった様々な伏線は、森アーティ以外は大体全部解消されたのではないか、と思います。今回のシリーズは綺麗に終了したので、次はどこにでも進める、 そういう状態にあると思います。1期2期のようなマジキチカオスアニメにもできるし、森アーティと対決するようなガチ的なやつもできるし、普通に推理モノにしたっていいし、たぶんどこにでも進む事ができます。

そういう状態にあるってのもそうだし、今回のシリーズがとても面白かったから、是非是非次のシリーズも作って欲しいなぁ、と僕は思います。いやはや、幸せな3ヶ月でした。



2015-03-21 探偵歌劇ミルキィホームズTD 第10話がとても良かった、という話


例によって例のごとく、探偵歌劇ミルキィホームズTDのお話です。

Perl とか DB の話を期待してた人は閉じるボタンとか戻るボタンとか、クリッククリック!若干ネタばれっぽい話もあるかもなので、 そういうの嫌な方も閉じるボタンとか戻るボタンとか、クリッククリック!

探偵歌劇ミルキィホームズTD の第10話、みなさん、ご覧になりましたでしょうか?

年取ったせいか、おじさんは涙腺がだいぶ緩くなっているんだけど、それにしてもミルキィで泣かされるとは思わなかったよ!(1期11話にも泣かされてますけど..)

というわけで、ちょっと野暮かもしれない解説とか感想です。

シャーロックについて

時々腹黒っぽい言動や行動もあったりするシャロですが、基本的には友達思いのいい子です。

それは 1期6話で、仲間のため、除湿機のために奔走するところであったり、11話で一度バラバラになってしまったミルキィホームズを復活させるところであったり、 他にもそういったシーンがたくさんあります。(1期はメインテーマの一つが友情だから、1期にそういうシーンがたくさんあります)

そもそも、ミルキィホームズのメンバーがまとまるきっかけになったのが、シャロの行動であり、それは前回にも紹介した(↓)の小説に描かれています。

終盤、天空島のホールから地上に戻るシーン、シャロは涙とヨダレを飛ばしながら帰ってきますが、コレ、シャロは別れを悲しんで泣いてたんですよ、気がつきましたか?

上記のシャロの性格と、地上から天空島に行く時は、景色の綺麗さに感動してた。それなのに、帰りは泣いていた意味を考えると、そうとしか考えられないのです。 一見ギャグっぽいシーンなのに、完全に持って行かれてしまって、ラストシーンとの合わせ技で号泣ですよ。。。

黒幕、もしくは美樹について

今回のシリーズの黒幕、つまり茉莉音のエレメントを奪った張本人ですが、これは今だに謎です。

10話では、美樹のトイズがエレメントとの関係を遮断するものであることが明らかにされました。また、美樹のトイズの発動音が怪盗のものであることも。

1話冒頭で、エレメントを盗んでいる、美樹と思われる怪盗は、文字通りエレメントを盗んでいました。一方で、茉莉音に対して行われたのはエレメントとトイズの 関係遮断であり、それゆえ僕は最初は「これは別のトイズで、犯人は美樹とは別の誰か」と思っていました。

美樹が茉莉音のことを心配しているのは本心っぽくも見えていて、これは二重人格的なものなのか、闇っぽい感情を秘めているのか、あるいはやっぱり真犯人は別の誰か なのか、今日放送される11話で明らかになるんでしょうか?楽しみであります。

今回の対決について

これまでは、エレメントが茉莉音に呼びかけることで謎空間が発動し、対決が終われば必ずエレメントは戻ってきました。今回は、茉莉音に呼びかけることなく、空間が発動し 対決の終了後もエレメントは戻ってきませんでした。これが何を意味するのか、とても気になります。

まとまってないけど、結論

と、いうわけで、探偵歌劇ミルキィホームズTD、色々知っていると、それはそれで楽しめるし、何も知らなくても ギャグ物として面白い作品でもあるので、(過去のシリーズ知らなくても、たぶんギャグ物としてなら十分楽しめるはず!)みなさんも見てみるといいと思います!

あと、1巻のBD/DVD が発売されたので、皆様も購入してミルマークを集めると良いと思います!

ミルマークは半分冗談、半分本気でして、ミルキィは作画もしっかりしてるので、MX の放送とかだと物足りないところがある(OPとか顕著ですよね)けど、BD だとその心配 ないですし、コメンタリーもみもみこの、有意義な感じの解説(と雑談)でいい感じですので、ミルキィ好きならマストバイな感じです。

ということで、残り2話とても楽しみですね!



2015-03-04 探偵歌劇ミルキィホームズTD 第8話がとても良かった、という話


例によって例のごとく、探偵歌劇ミルキィホームズTDのお話です。

Perl とか DB の話を期待してた人は閉じるボタンとか戻るボタンとか、クリッククリック!若干ネタばれっぽい話もあるかもなので、 そういうの嫌な方も閉じるボタンとか戻るボタンとか、クリッククリック!

探偵歌劇ミルキィホームズTD の第8話、みなさん、ご覧になりましたでしょうか?

この話、今作や今までのシリーズの疑問点をいくつか解決しているとても重要な話だったのではないかなぁ、と思います。重要なファクターがいくつかあるのですが、 僕の中でもまだちゃんと消化しきれてないから、とりとめなく書いていきます。

重要なファクターじゃなくても、良かったこともチョイチョイ書いていきます。

エレメント実体化のトイズについて

茉莉音のエレメントを実体化するトイズですが、このトイズは「後天的なもので、母親から引き継いだものなのではないか」という説があります。(僕もどこで見たのか忘れたけど)。 確かに茉莉音のトイズは、トイズの発動音と目が光るエフェクトなしにエレメントが実体化していて、シャロ達のトイズとは一線を画すものであることは明らかです。

エンディングで、茉莉音の母親と思われる人物が亡くなっている描写がありますが、これを機に茉莉音がトイズを引き継いだのではないか、ということです。

今回、オスカーが茉莉音と同系統のトイズの保持者として登場しましたが、「このトイズは先祖代々受け継いだもの」ということが明言されています。茉莉音のトイズも同じである 可能性が非常に高いのではないか、と思われるわけです。

トイズの消失について

1期ではアルセーヌとの対決の際の落雷がきっかけで、ミルキィホームズはトイズを失います。一方で今回の第8話では、落雷をきっかけにオスカーはエレメントとの関連性を失いました。 トイズとエレメントは密接な関連があるのではないか、という気がしています。つまり、1期でミルキィがトイズを失ったのは、トイズを失ったわけではなく、トイズとエレメントの関連性が 落雷のショック(?)によって切断されてしまって、トイズが使えなくなったのではないか、ということです。

落雷のショックかどうか、というところは実はまだ謎が残っていて、先祖のホームズは怪盗のトイズを封印していたりしていたので、シャロは他人のトイズをある程度コントロールすることが可能で、 無意識のうちにミルキィ全員のトイズを封印していた可能性もあったりします。(トイズが戻ったきっかけもシャロのトイズの復活と同時だったし)

ミルキィホームズの推理について

ミルキィホームズというと、ダメダメ探偵のイメージが異常に強くて、今回もニコ生とかで見てると、ちょいちょい「※農家です」とか出てたりしてて、まー実際ダメダメなところも多々ありますが、 今回のシリーズを客観的に見ていると、「ミルキィホームズの推理は大体正しい」という不文律があるように思えます。

今回の話では、コーデリアの推理は犯人を正しく当てることはできませんでしたが、「車椅子の人物は実は歩ける」というところは正しかったし、ある意味今回の事件の黒幕は小林オペラだったとも言えるので、 大体あっていた、とも言えなくもありません。TDの過去の話を見ていても、ミルキィの推理は大体こんな感じで、ちゃんと当たってはいないのだけど、大体あっています。

小林オペラについて

今回の事件の黒幕(?)として、小林オペラが登場しましたが、短編ではない、シリーズ物では初登場だったりします。これは地味に嬉しい。ミルキアンは小林先生が大好きなのです。

ちなみに、この(↓) Febri のインタビューを見ると、ふでやすさんが男性を描くと必ず変態になるらしく、1期2期の登場人物や、夜のヤッターマンとか見てると、まーそうだよねー、という感じはします。 プリパラでは全力でストッパーがかかっているのでしょう。小林先生はふでやすさんの脚本で登場したことが一度もないため、幸か不幸か変態ではない、いつもの小林先生が保たれています。

小林オペラが変装の名人でもあるのは、下の「探偵オペラミルキィホームズ Overture」(ミルキィホームズシリーズの前日譚の小説)で出ていたりして、今回はその設定も地味に活用されていたりします。

小林先生、変装は完璧のように見えるのですが、ミルキィさん達だけ実は呼び捨てにしていて、凝ってるなーって思いました。(小林先生はエリーのことは本来、「エルキュール」と呼ぶはずなんだけどね。。。TVシリーズでエリーがエルキュールって呼ばれることは多分なかったはずなので、致し方ない気もする。)

エレメントが象徴するもの、について

今回登場するエレメントは、何か重要なことを象徴する存在なのではないか、というのが現時点での僕の仮説です。以前にも書きましたが、 たとえば3話に出てくるハーモニーは「信じる心」を象徴するエレメントです。(多分)

今回のノブレスは「才能とそこから生じる義務とか責任」を象徴するエレメントです(多分)。「ノブレス・オブリージュ」なんて言葉もありますしね。

今回茉莉音のエレメントじゃないエレメントが出てきて、象徴するものがわりと明確だったので、2話のエレメントだけどエレメントじゃないカプリッツィオにも象徴する何かがあるのではないか、と思い直して、確認し直しだよコンチクショー。。。

今回の対決について

小林先生がヘルプしていたり、最後の最後でゴールテープを切ったのは茉莉音のエレメントのメロディアで、これが象徴するのは(多分)「諦めない心」なので、よくできてるなー、と思いました。

結論

とかまぁ、だいたいこんな感じです。前にも書きましたが、ミルキィホームズのシリーズは結構凝っていて、一見カオスっぽいのに、ちゃんと整合性が取れていたりして、今回のシリーズは特にそれが顕著ですね。

あとまぁ、こんな感じのめんどくさい考察をしなくても、全く問題なく楽しめるように作ってあるのがミルキィホームズシリーズの良いところなので、みなさんも見てみるといいと思いますよ!

追記

小林先生、ふたりはミルキィホームズの最終回にちょこっと出演していたことが発覚。初登場ではなかった、とのことでした。。。

@echizen_tmさん、どうもです!



2015-02-09 Hatena Engineer Seminar #4 に行ってきました


2/7 に開催された、Hatena Engineer Seminar #4というイベントに 参加してきました。

Go からインフラっぽい話からモバイルっぽい話から、フロントまで、幅広くいろいろな話が聞けてよかったと思います。 その話も、割と現場寄りな、泥臭い話が多くて、とても面白かった。

astj さんの、レガシーな環境に CPAN モジュールを入れるためにほげほげ、とか僕も最近悩んでたやつで、はてなさんでも 決して完全に解決しているとは思えないけど、参考になるし、何より勇気がもらえる。

と、言うわけでとても楽しいイベントでした。懇親会も楽しかった。また(無事当選できたら)是非参加したいです。

以下は雑なメモ。(聴講中にメモってたやつ) だいたいスライドは公開されているっぽいので、そっち見た方がいいと思います。

Goで書かれたmackerel-agentのOSS化や自動化にまつわるあれこれ(songmuさん)

  • サーバサイドは Scala、エージェントは Golang
  • エージェントはユーザが使うものだから、ソースを公開。エンジニア的にも嬉しいし
  • ソースをオープンにするだけじゃだめで、p-r をちゃんと取り込んでいける体制になっていないといけない
  • CI があると公平になるし、パッチのクオリティが担保できる
    • travis 慣れているのと、tag にフックできるのがよい
    • コードフォーマットの検査(go vet golint)
  • Windows 対応もやってる (AppVeyor。インストーラとかも作れるらしい)
  • レビュー体制はこれから(今は気付いた時にやってる)
  • mackerel-agent-plugins(Nginx の接続数をとるとか)
  • リリースプロセスがオープンに(リリース用のp-rを作るmake, travis でビルドしてリリースタグを打ってリリース)
  • どこでも入っていて、テストも書けるので、better shellscript としての Perl は良い
  • tag は github token でやると権限のコントロールが大変なので travis にしている
  • 社内で検証できないプラグインはどうするか

はてなのサービスの開発環境(astjさん)

  • ブログ、ブックマークなどいろいろなサービスやってた
  • 開発者やデザイナーの手元で環境が使えるとよい
  • ブクマはレガシーな環境やミドルウェアの構築とかが面倒なので、仮想マシン使う(Vagrant)
  • ブログはそうでもないので、仮想マシンを使わず環境構築(plenv/Carton)
  • 5.8.8/Ridge/Moco/mod_perl/TS(部分的)/gulp/LESS(部分的)いろいろあったけど今はgulp
  • apache+nginex/MySQL/memd/Elasticsearch(2014/06から)
  • Cent/chef/rpm(社内ビルド)/CPANも
  • サービスはProcletであげてる
  • cpanm だと昔のモジュールとかをうまく管理できない
  • Vagrant + Chef でやる。秘伝のタレ化を防止
  • うまくインストールできないCPANモジュールはChefのクックブックで頑張る
  • サーバ(DBなど)は一部別の開発環境を共有。テスト時は手元に建てたものを使う
  • apt がobsoluteになったり、CPANが非互換になったりして、困る
  • 管理コストを減らすためにUbuntu->Cent(本番と同じ)にしたい
  • bento(chef official な Base Box)
  • B!KUMA は最初はエンドポイントを手で叩いていたが、つらいので、Nginxたてて reproxyするようにした
  • Hatena Blogの開発環境は Solr 以外は全部立つように

はてなブックマークの新機能における自然言語処理の活用(skozawaさん)

  • 10周年
  • トピックページ2/5リリース
  • クラスタリングの精度の問題とタイトル生成
  • クラスタリングは重要語抽出ベース(Elasticsearch)
  • タイトル生成は自然言語処理
  • Elasticsearch の Significant Terms Aggregation(重要語を取得できる機能)
  • 普段現れないような単語を取れる => 盛り上がってる話題
    • スコア計算はいろいろあるが、jlh scoreというのを使っている
    • 最近の単語のスコアが高くなる計算方法
  • トピックのどれかが含まれるだと、関係のないエントリも取れてしまう
  • スコアの合計8割以上になるようなエントリをとっている
  • トピックのタイトルは、記事のタイトルと本文1行目
  • キーワードの羅列では厳しい => どれかの記事を使うとうまくいきそう => どれでもいいわけではないので、重要文を取る
  • 媒体名が入ると困るが、辞書を作るのはコストが高い => 重要な部分をとれば自然と媒体名はなくなるはず
  • 重要語抽出 Elasticsearch -> TopicSum
  • 重要語のスコアが最大の記事のタイトルを抽出
  • かかり受け解析(Cabocha&ipadic)
  • 重要語を含む戦闘文節から末尾の文節まで。非文にならないように、品詞関係をみるヒューリスティックルールを一部採用
  • タイトルは全角スペースが文境界になっていたりするので、前処理をかける

はてなのiOSアプリとSwift(yashiganiさん)

  • はてなブックマークShare Extension で使用
  • ほぼ全てSwift(実験プロジェクト的位置付け)
  • アプリの規模として小さいので、試すのにちょうど良かった
  • 今後は標準的に Swift を採用
  • 同じコードが Objective-C->Swiftに書き換えるとシンプルになる
    • Generics のおかげで、安全なコードが楽にかける
    • 関数型っぽい記述(map, filter, sort etc.)
    • Closure Objective-C の Blocks だとつらい(慣れれば読める、慣れても書けない)
  • 言語は良いが過去の資産が使えない
    • Cで書かれたものの一部が使えない
    • C++
  • 最適化で壊れることがある
    • β配布まで気づかないことが多い
    • デバッグ実行時でも最適化レベルを上げれば再現する
    • 一時変数を使ったり、Swiftの機能を排除する(structを使わない、NSObjectを継承)
  • 型推論が微妙なのとリフレクションがまだない
  • JSON はOptional と相性が悪い Mantle 使うと良い
  • スマート会。チームを横断で技術共有

TypeScriptで実現するMVPアーキテクチャパターン(nanto_viさん)

  • 動的な部分は少ないが、投稿ツールやビューワでJSを使用
  • TSを使っている。Angular などのフレームワークは使わず、外部ライブラリは JQuery のみ
  • 型が使えて、型推論もある。関数の引数と戻り値の型を指定しておけば、追加の指定はほぼ不要
  • gulp-typescript でコンパイル
  • 開発環境はコンパイルしたJSをそのまま使用。本番はminifyや 結合したもの(CI環境を使用)
  • テストは QUnit/Sinon.js(モック)
  • ローカルではブラウザ、CIでは gulp-qunit
  • 最初は JS を書いていたが規模が大きくなると辛いので TS に移行
  • 移行は5行書き換えただけだった(外部宣言の追加、any型へのキャスト、typoの修正)
  • 徐々にTSのクラス、モジュールを使って書き直し(8000行のうちの半分くらいがTSらしいコードに)
  • AngularJS は学習コストが高いのと、チューニングが辛そうなので見送り
  • Vue.js は Android 2.3 で動かないので見送り
  • Alux/React.js 当時は情報が少なかったので見送り
  • プレゼンテーション層をテスタブルにしたいけど、フレームワークは上記の理由で厳しいし、データバインディングを自作するのは嫌
    • MVP アーキテクチャパターン(Model-View-Presenter)
  • MVVM と違って、View のIFを知っていて、自身の変更をViewに反映される(自前でやる)
  • DOM の変化する部分を View の Interface に定義(例: 場所、可視性、ページ番号)
  • Presenter は DOM の処理に依存しない形でロジックを実装
  • アニメーションは JQuery の animate を使用。Presenter の値が変わるたびに View に通知して表示を更新
  • テストは空のView(モック)を作って、Presenter のみテストしている(View は DOM を触るのでテストできていない)