2015/03に読み終えた本

4冊。うち一冊がぞい。さみしい。

shucreamの本棚 - 2015年03月 (4作品)
OpenStackクラウドインテグレーション オープンソースクラウドによるサービス構築入門
日本OpenStackユーザ会
読了日:03月12日
評価4

スクラム実践入門 ── 成果を生み出すアジャイルな開発プロセス (WEB+DB PRESS plus)
貝瀬岳志
読了日:03月19日
評価5

WEB+DB PRESS Vol.85
菅原元気
読了日:03月24日

NEW GAME! (2) (まんがタイムKRコミックス)
得能正太郎
読了日:03月29日
評価5

powered by booklog

今年度もお疲れ様でしたの会(ミーティング現状確認会)でLTをしてきました

ミーティング現状確認会あらため 今年度もお疲れ様でしたの会 on Zusaar で議事録についてLTしてきました。

もしかしたらストロングスタイルの会かもしれないと出発直前にがっと書いたのですが、参加者の皆さんには納得していただけたようでなによりでした。

あとは、フルーティーなベルギー発泡酒がめちゃくちゃおいしかったです。ありがとうございました!

なんとかフラグと履歴データについての雑な考え方

お仕事でも丁度タイムリーな話題だったので、「何とかフラグが欲しい」と言われたときに自分が考えていることをまとめておきます。

私のポジションとしては「DB設計をちゃんとやろうと思っているものの現実に流されてしまうゆるふわRailsエンジニア」あたりです。

Q. 変更される回数はどれくらいか
    - 一方通行で一回だけ
        Q. 付随する状況があるか(e.g. 退会理由)
            - ある -> イベントテーブル作成
            - ない -> 時刻カラム追加
    - 何回もトグルする
        Q. 付随する情報があるか
            - ある -> イベントテーブル作成
            - ない
                Q. 変更される時刻に意味があるか
                  - ある
                    Q. DB上である時点の状態を再現できる必要があるか
                        - ある -> イベントテーブル作成
                        - ない -> ログでがんばる
                  - ない -> booleanカラム追加

このあたりの要件をヒアリングするなり決めてしまうなりして、妥当なところに落しています。

一番しんどいのが「何回もトグルする上に特定の時点をDB上で再現させないといけないケース」なんですが、幸いにもこのケースにはあまり出会ったことがないのはゆるふわだからですかね。

あんちぽ派決起集会

CTOに就任したあんちぽさんを囲んで決起集会が開催された。

今年も1/4が終わってしまう事実を受け止めつつがんばるぞい。

スクラム実践入門を読みました

本日発売された「スクラム実践入門」という本をさっそく買ってざっと目を通しました。

タイトルに違わず、スクラムを実践するための入門書として、とてもよい内容だなと感じました。

ソフトウェア開発の難しさに正面から向き合う

1章では、スクラムやアジャイル開発に限らない「ソフトウェア開発そのものが難しさ」を明かにし、その難しさにどう立ち向かっていくのか、スクラムは何を手助け、解決してくれるのかを簡潔に説明してくれます。

2章から4章では、スクラムガイドで書かれている各要素を詳しく紹介してくれています。ここの説明は、スクラムでなくても実際にアジャイル開発を実践している人からすると、非常に簡潔に、必要十分な量の説明になっていると感じるのではないでしょうか。まさに実践の入門という感じがしました。

新しい発見もあって、本書を読むまではスクラムチームのそれぞれが責任について、私は以下のように考えていました。

  • 何をどういう順番で作るかに責任を持つプロダクトオーナー
  • プロセスの改善に責任をもつスクラムマスター
  • プロダクトをどう作るかに責任をもつ開発チーム

しかし、一つ視点を上げると「プロダクトをどう作るか」というのは「どういうプロセスで作るか」ということになり、そこに責任を持つのはスクラムマスターだと考えられることができるんですね。

一方で、そう考えることで開発チームにあたるスポットライトが(ただでさえチームという表現で弱くなっているところ)さらに弱くなってしまっているように感じるのはちょっと残念だなと思いました。

赤裸々な失敗談

6章から8章では、他のスクラム本では絶対に読めないであろうコンテンツですね。GMOペパボ、mixi、DeNAでのスクラム導入を初期から振り返って、実際におきた問題やそれに対する対応、結果どうなったかというのを著者の方々の視点から書かれています。

3社の中では、DeNAの大規模スクラムの事例が一番興味深かったのですが、業務委託契約の話については前職のこともありいろいろ思うところが(ここで日記は途切れている

パターンとFAQ

5章と9章以降は、スクラムというフレームワークにどういう具をつめるか、その具をどうやってよりよいものにしていくかという、スクラムマスターの入門書というふうに読みました。

スクラムガイドを読んで「どこからどこまでがスクラムなのか」その枠がぼんやりと見えてきた人が、いざ実践するときにそのフレームワークにどういうプラクティスを詰めるのか、そのヒントがたくさんあるように思いました。

一押しは10章の「スクラムチームでよくある問題と解決策」ですね。どれも本当にあるあるですし、一度解決したつもりでも、メンバーやPOの交代など状況の変化で再発しやすい問題が盛り沢山でした。

6章から8章の事例も含めて、こういうFAQのようなものを知ってるだけでも緊急時に落ち着いて行動できるようになるはずなので、これからやってみようという人は必読ですね。

とりあえず読みましょう

タイトルの通り、これからスクラムを実践してみようという人は必読の内容です。 また、スクラムに興味ない人でも、ソフトウェア開発を今よりもう少しうまくやるためのヒントにはなるのではないかと思います。

みなさんだまって読みましょう。

電子書籍は スクラム実践入門 ── 成果を生み出すアジャイルな開発プロセス | Gihyo Digital Publishing からどうぞ。

「30分(くらい)でわかるGit」という勉強会をしました

社内のデザイナーさんから、Gitのmergeとかrebaseがよくわからないという話を聞いて、折角なので資料を作って勉強会を開催しました。

今回も 自分がGitを理解できたなーと思えたきっかけである「全てはコミットである」 という持論を押し付けていく形になっていますが、mergeやrebaseを理解して使っていくためのはやっぱりこれが必要だと思うんですよね。

資料の内容は、なるべく わかりやすさのために正確性を犠牲にしない ように心掛けたつもりですが、無理のある説明になっているところもあるかもしれません。

発表でだいたい30分、質疑や議論含めて45分程度で終われたので、参加者の方々は30分くらいでGitがわかるようになったと信じています!

SUZURIのAPI ClientをHeroicsで生成しました

Ruby Business User Conference で JSON Hyper-Schema についてLT をしたのも半月前のこと、ついにSUZURI Developer CenterでAPIとJSON Schemaが公開されました。

折角なので、interagent/heroicsを使ってクライアントライブラリを生成してみました。

kenchan/suzuri_client

いざ生成してみると、ちょっとおかしいなと思うインタフェースがいくつかあるので原因を調べときます。

あとは、HeroicsはHTTPクライアントライブラリとしてexconを使っているのですが、手元の環境だとうまくSSLの証明書が読み込めないっぽく、exconのREADMEにあるように証明書を自分で設定しないとHTTPSで接続できませんでした。(それかExcon.defaults[:ssl_verify_peer] = falseをする)

そんなこんなでちょっと変なところもあるんですが、これも一つの試みということで。

あわせて読みたい: ワンクリックでインターネットをTシャツにアーカイブれるGoogle chrome拡張作った。 - パルカワ2

通販生活

数日前、たまたまコナミスタイルのポイント失効メールがきたので見に行ったら、IIDX 22のサントラが出るということを知り、特典を確認し、ポスターは不要なのでAmazonで注文しました。もう何年もやってないんですけど、奥さんが現役なのとなんとなく流れで今でも買ってしまうのでした。

konozamaせずに無事発売日に届いたので一安心。

2015/02に読み終えた本

今月は2冊。ひどい。

Ruby Business User Conference で JSON Hyper-Schema についてLTしました

Ruby Business Users Conference 2015 で JSON Hyper-Schema についてLTしてきました。

同じ内容でCFPを出したら落ちてしまったのですが、当日の内容を見るに妥当な結果だったなという感じです。

Ruby Associationのイベントはほぼ初参加だったのですが、いわゆる界隈の人とはまた違った人達が集まっているので、これはこれで面白いなぁと思いながら参加していました。

資料については少し直したいところがあったのですが、.keyファイルが壊れてしまって画像が全て消失したので、発表前にexportしたPDFをそのまま上げました。

補足しておくと、

  • json_schema gem はちょっと微妙なので json-schema を使ってるやつを選んだほうがいいよ
    • そして interpol は json_schema なので…

というくらいです。

IDLからの自動生成は人類の夢なので、もうちょっとこの夢をおいかけようかな、と思っているのでした。

テレビ効果ってすごいなって話

先週から ハンドメイドマーケット minne(ミンネ) のテレビCMがはじまったり、有吉反省会でビリギャルのパッケージの人が本人じゃないことを知り、そのあと事務所のサイトが落ちているのを確認して、テレビ効果ってすごいなーと思った日曜の夜でした。

明日から1週間がんばるぞい。

デブサミ2015にちょっとだけ参加しました

Developers Summit 2015 の Agile TED に同僚のかしめぐさんが登壇するとのことで、応援にいってきました。

身内補正込みだと一番よかったんじゃないかと思いました!掴みも内容もすばらしかった!

後半が社内で練習したときとけっこう変わって、ぐっと良くなっていたのでびっくりしながら聞いていました。

デブサミについての思い出

2012年のWeb日記 で書きましたが、自分にとってはデブサミは思い入れのあるイベントで、参加するたびにあの頃の平鍋さんや角谷さんと今の自分を比べて、もっとがんばろうという気持ちになるのでした。

今年は勝負の年だぞー

フライパンとmagsafe2コンバータを書いました

家のフライパンが痛んできたので、奥さんが気にいっていた北陸アルミのフライパンを買いました。

今使っていたのは結構長いこともったので、これも長く使えるといいなー。

あとは、毎日PCとアダプタを持ってかえっていたのですが、部屋を見まわしたら文鎮化しているMacBookPro(mid2009)があったのでmagsafe2コンバータを購入してQoLを向上させました。荷物が軽くなってめっちゃ快適です。AmazonよりApple Storeのほうが安かったのでこちらで。

MagSafe - MagSafe 2コンバータ - Apple Store(日本)

第6回 コンテナ型仮想化の情報交換会@東京 に参加してきました

昔LXCで遊んでいたことあるんですが、最近Dockerを本格的にいじりはじめてから、このあたりの知識の足りなさを感じていたので、最近のナウいトピックを知りたいと思って参加してきました。

というかんじなので、理解できていない、間違っている部分が多々あるかと思いますので、ここ違うんじゃない?というところがある方はぜひ下のコメント欄でも、ブコメでもいいので教えていただけると喜びます。

資料などは 第6回 コンテナ型仮想化の情報交換会@東京 - connpass からどうぞ。

Cluster Schedulerの紹介

GoogleのOmega(OSSではない)というCluster Schedulerの論文を中心に、Cluster Scheduler の分類と歴史、Googleがなぜ新しいスケジューラを開発しているのか、その問題意識などをまとめたという感じでしょうか。Cluster Schedulerってなんぞ?というところからでしたが、なんとなくわかった気になれる内容でした。

クラスタリングスケジューラが管理するジョブの種類はバッチジョブとサービスジョブがあって、Googleの場合だと

  • 割合からするとバッチジョブが全体の80%
  • リソース面ではサービスジョブが全体の50-80%を利用する

というような状況らしく、これらをより効率よくスケジューリングするために新しいスケジューラを開発しているとのこと。ジョブの特性を考慮してスケジューリンするような仕組みが、既存のものでは実現できないという風に読んだのですがあってますかね…

Debian GNU/kFreeBSDにおけるJail構築を試してみた

Debian/kFreeBSD という FreeBSDカーネルの上で動くDebianでJail環境を構築してみたという話。

debootstrap という最小のディレクトリツリーをダウンロードできる便利コマンドを知れたし、それはDockerでも使ってるんだよーというTwitterを見てんなるほどーという感じでした。

で、Debian/kFreeBSD でJail環境を作るメリットとしては、

  • カーネルがFreeBSDなのでFreeBSDのコンテナが動く
  • もちろんDebianも動く
  • Crossdebootstrapでクロスコンパイル環境を作ることもできる

というあたりらしいです。なるほどー。

今日から触れる Solaris Zones 入門

Solarisと言えば、大学の教授が「サーバと言えばSolarisでしょ」と言い初めてSPARCマシンを突然購入して押し付けられたけど何もできずに、数週間後にLenovoのサーバを買ってもらってDebianを入れていた記憶が思い出されます。

それはそれとして、SolarisにもZoneというコンテナ技術があって、オラクルのサイトからVirtualBoxのVMをダウンロードすればなんと無料で試すことができます。

リソース管理機能を使ってコンテナにも関わらず物理CPUをわりあてたりできるとのこと。

Solarisは、ものすごく古いバージョンでコンパイルしたバイナリも新しいOSでちゃんと動くそうで、そういう古いバイナリの実行環境を隔離するためにZoneが使われたりするらしいです。

OpenVZ Update

個人的なベストトークでした。

https://stats.openvz.org にOpenVZを使っているユーザの統計情報があつまっていて、これは自動で送られるようになってるんですかね?Gentooが4位というのがびっくりしました。

OpenVZはオープンソースだったものの、実際はParalles Clound Serversからのバックポートが多くて、関係者以外はコントリビュートしにくい状況だったそうです。それを一変させようと、OpenVZのソースコードとPCSのソースコード(の一部)をマージして公開するよ宣言があったとのこと。

PCSは3つのモジュールから構成されるんですが、その中のストレージ部分は商用アドオンのまま、他の部分はほぼマージするそうで、大胆な戦略だなーと思いました。

で、マージされる部分にはコンテナとハイパーバイザの両方を透過的に扱うための仕組みも含まれるそうで、数週間前にはOpenVZ上でDockerコンテナが動いたとのこと。

さらにOpenVZのlibctとlibcontainerが統合されることがDockerConで発表されていて、それによってDockerはCRIUが利用できるようになり、OpenVZはDockerコンテナが動くようになるというメリットがあるそうです。(CRUIについてはあとのLTで)

スライドの18枚目が衝撃で、libcontainerがカーネルとコンテナの間を橋渡しするので、lxcもDockerもvzctlもできるようになる、と。

ただ、まだマージは今がんばってやってるところなので乞御期待。

LXC Update

LXC 1.1ではCRUI(まだでた!)よる新機能が入ったのと、initにsystemdが使えるようになったとのこと。

ほかには、LXDというREST APIの受け口ができて、LXCコマンドでリモートのコンテナも操作できるようになったそうです。

LT3本

Amazon ECS

まだプレビュー版なので、申請してしばらく待つと使えるようになるそうです。

試してみた系の記事がいくつかあるから、それをやってみて雰囲気を掴んでみるのよさそうとのこと。

ノートPCにOpenStack

Ubuntu OpenStack Installerを使えばスペックさえあればノートPCでOpenStackが!

プロビジョニングにはJujuとMAASというを使っているそうなのですが、まったく知らなかったのであとで見てみようと思いました。

CRIU

OpenVZでも話に出ていたCRIUですが、コンテナのプロセスをダンプ、リストアする仕組みだそうで、これを利用してライブマイグレーションが実現できるようになるとのこと。

コンテナのライブマイグレーションができるようになると、可用性と集約率が向上するので、DockerコンテナでCRUIが使えるようになると夢が広がる感じでした。

おわりに

正直、なにもわからなかったらどうしようと思いながら参加したのですが、それなりに理解できるところもあり、次に勉強するべきポインタも沢山見付けられたのでよかったです。

スタッフの皆さん、登壇者の方々、会場を提供してくださったIIJさん、ありがとうございました。

Rubyの洋書を読む会「Working with Ruby Threads」

火曜日はRubyの洋書を読む会の日。今年に入ってからは The Pragmatic Bookshelf | Working with Ruby Threads を読んでいます。

今日はGILをもうちょっと詳しくという感じで、別にいじわるをしたくてGILを導入しているわけではなくて、これに私たちのプログラムが安全に実行できて、レースコンディションに関わる複雑なバグが起きないようにしてくれているんだよ、という話でした。

IO待ちになったスレッドはGILを勝手に開放するってのは当たり前なんだろうけどなるほどなーと思いました。

メンテナブルJavaScriptとテスタブルJavaScript

JavaScript関連の積読を2冊ほど消化しました。

どちらも、(少し前の時代の)JavaScriptという言語では、

  • メンテナブル、テスタブルなコードとはどういうことか
  • それらを評価する方法
  • サポートするツール

というあたりがまとまっていて、リーダブルコードやJavaScript:The Good Partsが頭に入っていると、スムーズに理解できそうな内容でした。

ただ、括弧書きにしている通り、特にツール類は一時代前のものが多いので、2015年ならどうだろうと読み替える必要はあるでしょう。

メンテナブルJavaScript

前半はJavaScript:The Good Partsをより実践的にしたような内容で、良いパーツはわかったんだけど、実際に書こうとするとうまく書けないという人には参考になりそうな内容でした。

個人的には10章あたりからが面白かったですね。

JavaScriptにおけるエラーの考え方、テスタブルJavaScriptにも繋がるオブジェクトの結合度、ブラウザ判定を例とした特徴検出と特徴推定など、なかなか興味深い内容でした。

ツールについては、前述の通りちょっと古いので、最近のナウいツールに読み替えたほうがよさそうです。

テスタブルJavaScript

こっちはかなりツールと細かいコードの書き方に寄っていて、時代と個人の趣向に結構依存しそうな内容だと感じました。

今読むなら、それらの詳細から一歩引いて「ソースコードの定量的な評価の方法」として見ると、コードメトリクスからテストカバレッジ、テストコードの分類などきれいにまとまっているのでおすすめです。

特によかったのは「高いカバレッジの値は誤解を招きますが、低い値は明らかに問題を示しています」というカバレッジに対する考え方ですね。

どちらかと言えばメンテナブルJavaScriptがおすすめ

筆者は二人ともYahoo!のフロトンエンドエンジニアとして大規模なライブラリの開発、メンテナンスをしていたということもあり、でてくるコードはYUIの内部のコードだったりとかなり実践的な内容にはなっていますが、いかんせん時代の流れがはやすぎますね。

テスタブルJavaScriptは今読む必要はないかなと思いますが、メンテナブルJavaScriptは今でも参考になるところは多いなーという印象です。

特に、最初に書いたようにJavaScript:The Good Partsやリーダブルコードは読んだけど、実際どうすんのよ、というところに手が届く数少ない本だろうと思いました。

散髪ログ

前回は12月だったのでちょうど2ヶ月くらい。 今回は息子と一緒にいってきた。

いつもは席がけっこう離れるんだけど、空いてたので隣で。トーマスを見ながら静かに切られていた。

バレンタイン

今年も手作りのおかしでした。おいしゅうございました。(この写真とは別に、あまったパイ生地でアップルパイが作られていました)

boot2dockerのIPがVPNのネットワークとかぶってしまった

家に帰ってVPNを繋いでboot2dockerでコンテナを作ろうとしたら、以下のような感じでエラーになってしまっていました。

$ docker build .
Sending build context to Docker daemon
FATA[0032] Post https://192.168.59.103:2376/v1.16/build?rm=1&t=: dial tcp 192.168.59.103:2376: i/o timeout

VPNを繋いだときだけ問題がおきるのと、IPアドレス帯を見てみたところこれはかぶっちゃってるかなーと思い traceroute 192.168.59.103 してみるとビンゴ。VPNのネットワークに吸い込まれていました。

boot2dockerのIPを変える方法は、boot2docker/boot2docker-cli の configration にあるように boot2docker config の結果をファイルに落としてから変更すればよさそうな雰囲気。

実際やってみると、ネットワークの設定は変更してVMの再起動では当然ダメで、VirtualBoxのホストオンリーネットワークを消してから boot2docker delete > boot2docker init として作り直す必要がありました。(自分でホストオンリーネットワークを変更してもいけると思いますが)

IPの設定回りを以下のようにざっくりと変更したところ、VPNを繋いでいても問題なく動くようになりました。めでたしめでたし。

...
HostIP = "172.16.59.3"
DHCPIP = "172.16.59.99"
NetMask = [255, 255, 255, 0]
LowerIP = "172.16.59.103"
UpperIP = "172.16.59.254"
...

幼稚園の発表会を見てきました

息子の幼稚園で発表会があるとのことだったので、今月付与されたばかりの有給を利用して参加してきました。

ダンスや歌、劇など30分ちょっとくらい見てました。

最後に先生も言っていたけど、1年前は入園式で静かに座っていることもできなかった子供達が、これだけできるようになるのは本当に集団生活と先生様々というかんじ。

あと1年、元気に過ごしてくれるといいな。

(運動会ほどは動きがないので写真もそれなりに撮れたような気がします)

SCRUM MASTER’S NIGHT! VOL.7 に参加してきました

午前中は有給をとって息子の発表会を見て、夜はスクラムマスターじゃないけどこれに参加してきました。

テーマ選びでは Regional Scrum Gathering Tokyo 2015: Schedule の 「Scrum or not?」 というパネルディスカッションのテーマを決めるというやつにしました。

ファシリテータは川口さんで、出てきた意見の分類の仕方と流れの作り方はさすがだなーいう感じでした。

肝心のパネルのテーマは(この通りになるかどうかはおいておいて)、各社大規模にスクラムを導入しているけど、最初の導入過程から、レイトマジョリティへの対応、プロセスの効果や評価の方法、そして今後の事へと、特に前半はかなり興味深い内容になりそうでしたので、みなさん Regional Scrum Gathering Tokyo に行きましょう!

結構早めに終わったので、他のテーブルを眺めたり、一緒にいった @kurotaky のお悩み相談テーブルにjoinしたりしてわいわいやっていました。

懇親会ではsushi的なものもあり、DeNA様ありがとうございました!

ハンドメイドマーケット minne でバーンといくぞ!!1

会社の決算説明会でいろいろと発表になったようです。

GMOペパボ、異例の「利益ゼロ」予想 ハンドメイド市場「minne」拡大へ積極投資 - ITmedia ニュース

諸事情でスーツを持っていないために会場には行けなかったのですが、 USTのチャンネル を見ながらTwitterを見たりしていました。

こういう体験は初めてだったので、個人的にはとてもよい経験ができたと思っています。

というわけで、今年は ハンドメイドマーケット | minne(ミンネ) でバーンといくので、ビッグウェーブにのっかりたい人、その裏でしっかり売上利益をあげいかないといけないサービスを支えたいエンジニア、両方とも絶賛募集中なのでぜひご応募ください!

みんなで恵方巻を食べた

オフィスに大量の恵方巻がデプロイされていたのでみんなで食べました。

家に帰ってからは、申し訳程度に息子と豆まきをしたのでした。

幼稚園では鬼役の先生とかがいたのかなーと聞いてみたら「鬼の面が置いてあって、終わったら持っていかれた」という証言をしていた。なるほど。

入門docker - ローカルでビルドしたバイナリが入らないように注意しよう

本日の私の生産性を著しく低下させた件について共有させていただきます。

とあるフロントエンドアプリケーションを動作させるためのDockerコンテナを作っていたのですが、Dockerfileをこんな感じにしていたんです。

FROM dockerfile/nodejs-bower-grunt

...

ADD package.json /app/
RUN npm install

ADD bower.json /app/
RUN bower install --allow-root

ADD . /app/

...

ちょっとこみいった事情があったのでonbuildではないのですが、手元の環境でbuildしたイメージを実行しようとしても grunt imagemin:dist でエラーになってしまう。しかし、リモート(具体的には mookjp/pool の中)だとその部分は動いている。(その先が動かなかったのでデバッグしたかった)

エラーメッセージでググっても npm cache clean しろとか、apt-get で入れてる optipng を消せとか言うので docker run -i -t {imagename} /bin/bash していろいろやっていたら、./node_moduels 内にある optipng の実行ファイルが壊れており、ADD . /app/node_modules がローカルのものに上書かれていることにようやく気付いたのでした…

手元で node_modules を消してbuildしたら無事動くものができあがったのでした。つらい。

みなさんもローカルで docker build するときはバイナリが入らないように注意しましょう…

2015/01に読み終えた本

正月に、2015年1月に読んだ本をブクログでふりかえる - delirious thoughts を真似て書いてみようと思っていたのを月末に思いだしたのでした。

今月は3冊…意識の低さよー。

アジャイルソフトウェア要求を結構読み込んでいたというのあるけど、もうちょい時間を作りたいですね。

shucreamの本棚 (shucream) - ブクログ