雑文発散

追記
過去の日記

2015-07-03 [長年日記]

[] 「10年戦えるデータ分析入門」は、やけに SQL を書きたくなる良書だった(しかも PostgreSQL 推し)

10年戦えるデータ分析入門 SQLを武器にデータ活用時代を生き抜く」を読み終えた。

10年戦えるデータ分析入門 SQLを武器にデータ活用時代を生き抜く (Informatics &IDEA)(青木 峰郎)

この本のことはしばらく前から気になっていたんだけど、調べ物をしていたら「巨大なバッチを分割して構成する 〜SQLバッチフレームワークBricolage〜」という記事にたどり着いて、「ふむふむなるほど参考になるな」と読んでいたら、最後にこの本が紹介されてたので、そのまま Kindle 版をポチった。ちなみに固定レイアウト本だったので、最初にサンプル版を iPad mini へ送信して読めそうかどうか判断してから買った。

Amazon の内容紹介には一切触れられてないけど、この本は PostgreSQL 推し。もともと PostgreSQL が好きなオレにはそれだけでも嬉しくなってしまうのに、「そんなこと知らなかった!」という内容もところどころに出てきて、大変ためになった。

特に「第8章 遅れて来た分析SQL最強の武器――ウィンドウ関数」のあたりとか、どうもイマイチ理解しきれてなかったところがスッキリ理解できた。

これまでも「Window関数 — Let's Postgres」などの記事で、その存在に触れてきていたので多少は知識があったのだけど、利用方法のイメージが見えきれずにいた。でも、この本で、もっと具体的なデータとクエリを使っての解説を読み、「なるほど、そういう場面で使うのか!」というイメージがわいた。

その他にも「第9章 縦と横は難しい」は、そうそう、これ難しいよなと思いながら読んでいて、pivot テーブルを使った手法を見て、こんな方法があったのかと目からウロコ。それから「第10章 アクセスログのセッション分析をする」は、少し前に似たようなことをやっていたので「この考え方は同じだった!」とか思ったりも。

また、第二部で触れらている「分析システムの構築」も非常に参考になった。

いわゆるビッグデータから必要なデータを抽出・集計して、それを閲覧・利用するシステムにデータを引き渡していく流れについて、ここまでリアルに書かれている本は貴重だと思う。

特に先ほどの「巨大なバッチを分割して構成する」というエンジニアブログを読んでいたので、筆者がそういうシステムの構築・運用を行なっている人であるということが分かっていたので信頼感があった。

そういう信頼感の中で「わたしのお勧めは、1ジョブをできるだけ小さくすることです」などの言葉は響いてくるし、「13.3 SQL ジョブのテスト」でテストパターンの作り方を丁寧に解説されているところなど「さすが」と思わせてくれる。とても勉強になる。

この本は「ビジネスに役立つ分析を行いたいマーケターも、ビッグデータをどうにかしたいエンジニアも、みんなまとめて面倒みましょう」という立ち位置なのだけど、少なくともこっち方面に興味があるエンジニアであれば「いま」読んでおく本だと思う。

なんで「いま」かと言うと、本を読みながら「10年戦える」というのは「2015年から」という接頭辞が付くのかもしれないなぁという印象を得たから。でも、10年くらいじゃ SQL は無くならない気もするので、まぁ、大丈夫かな(笑)

それにしても、この本を読んだ後に「オレはデータ分析できるぞ!!」という気になったのがすごい。たぶん実際にやってみると、そう簡単には行かないんだろうけど、そういう気分にさせてくれるほど分かりやすいので、オススメだよ。


2015-07-02 [長年日記]

[Pebble] Pebble のウォッチフェイス「Fujisan」をリリースしてから1日が経過したところでダッシュボードを見てみると

昨日リリースした「Fujisan watchface」をデベロッパ用のダッシュボードで見てみる。

Pebble Developer Dashboard

なんとすでにハートを 8 つ獲得して、前作の「BEAVER Typeface」を超えていた(やったね!)

一方で、ロッカー(Locker)に追加された数は 29 回とあるのだが、現在のインストール数は 1 のまま。ロッカーというのは、スマートフォン用の Pebble アプリでいうところの「MY PEBBLE」のところ。

Pebble Locker

つまり、現在のこの数字だけみると「ユーザーが 29 回追加してくれたものの、28回削除された」ってことになる。残りのひとつは、いまインストールしているオレだけってことになってしまう。。。計測タイミングの違いだと思いたい。。。

ところで、Pebble Time 用のファームウェアの新バージョン(3.1)が出ていた。

これをさっそく Pebble Time へインストールして、2つのウォチフェイスが正しく動くことは確認済み。ファームウェアのアップデートをすると、日本語言語パックも再インストールが必要になるかな?と思っていたんだけど、その必要は無かった。言語パックの保存領域は、ファームウェアの保存領域とは別に用意されているってことなのかな。

本体のファームウェアのバージョンアップに合わせてか、SDK のバージョンも上がっていた。

オレは Homebrew で SDK をインストールしていたので、昨日 brew update && brew upgrade を実行したら、新しいバージョンがインストールされて気が付いた。手元でウォッチフェイスの build をしてみたけど、特に問題なさそう。機能に変更を加えたわけではないので、リリースはしないけど。

【追記】

その後、インストール数が更新されていた。この追記を書いている段階で 38 になっていた。わーい。

Pebble Developer portal


2015-07-01 [長年日記]

[Pebble] Pebble のウォッチフェイス「Fujisan watchface」をリリースしました!

ここのところ毎日の朝活で作っていた Pebble Time 用のウォッチフェイスアプリ「Fujisan watchface」をリリースした!

Pebble watchface app

iOS / Android 用の Pebble Time アプリを使っている人は、こっちのリンクから直接ウォッチフェイスのインストールができるはず(いわゆるディープリンク)。

たいしたグラフィックじゃないんだけど、Pebble Time で拡張された描画手法を使っているので、Pebble Time 専用になっている。

見た目からうまく伝わるかはわからないんだけど、オレのなかのイメージとしては丸窓から観た富士山を表している。窓から見えるので、日の出と日の入りの時刻に合わせて、空の色がちょこっと変わったりする遊びを加えてみた。

Pebble では、コネクトしているスマホのロケーションデータを使えるので、その位置に合わせた日の出・日の入りの時刻を使っている。それらの時刻は、Sunrise Sunset というサイトの API を利用させてもらった。

We offer a free API that provides sunset and sunrise times for a given latitude and longitude.

上記のように利用は自由とのこと。特にアカウント登録も不要だった。ありがたい。

これで Pebble 用のアプリは2個めのリリース。少しずつノウハウも溜まってきて面白くなってきたので、次もなんか作ろう。まだ試していない機能もあるので、その辺りも触りながら考えてみようっと。


2015-06-30 [長年日記]

[Symfony2] Symfony2 のコントリビューターのリストに名前が載った

Synfony のサイトにはコントリビューターのリストページがあるのだけど、そこにはコードだけでなく、ドキュメントのコントリビューターについても掲載されている。

このなかの Symfony Documentation Contributors に名前が載った! 先日投げた pull request がマージされたからだ。ここに載ることはドキュメントのコントリビュートの説明ページ「Contributing to the Documentation」に次のように書かれていたので、ちょっと楽しみにしていたのだ。

Step 10. After your pull request is eventually accepted and merged in the Symfony documentation, you will be included in the Symfony Documentation Contributors list. Moreover, if you happen to have a SensioLabsConnect profile, you will get a cool Symfony Documentation Badge.

この文にも書かれているけど、SensioLabs のアカウントを持っていると、Symfony Documentation Contributor Badge が貰える。オレもアカウントを持っているので、このように表示されている。
SensioLabs

ちなみにアカウント名は suzuki である。suzuki アカウントが取れた Web サービスはまじめに使う気になるので、SensioLabs / Symfony2 は今後もまともに使うことにしようと思っている。

話がそれた。

ドキュメントのコントリビューターに対しても、コードのコントリビューターと同じ扱いをしているのは、次の一文に表れているんじゃないかと思う。これも Contributing to the Documentation より。

One of the essential principles of the Symfony project is that documentation is as important as code.

ドキュメントに貢献したのはほんの少しだけど、こういった扱いをされると、ちょっと嬉しい。最初の一歩でこういうことが起きると、次に何か見つけたときも頑張っちゃおうかなとか思う。

オレは承認欲求が強めだから特にそう思うのかも知れないけど、こういう取り組みは素晴らしいね。


2015-06-29 [長年日記]

[PHP] ちょっとダミーデータが欲しくて Fixture の仕組みを使ったら swap しまくりで終わらなかった

手元に AliceBundle がセットアップ済みの Symfony2 環境があったので、これを使ってダミーデータを作ろうと思いついた。

複数のテーブルでそれぞれ関連性のあるデータが欲しかったので、そういう用途には AliceBundle (というか AliceFaker)は最適だろうと思ったので、Google Spreadsheet でダミーデータを設計しつつ YAML 化して実験してた。

ちなみに「AliceBundleで自動テストのfixtureをyml化しよう」という記事は大変参考になったので、みんな読むと良いと思うよ。

で、まぁ、だいたい思い通りにいけそうだったので、そろそろ本気出すか!と10万件ほど生成しようとしたら、メモリ食いまくりで、最後には swap しまくりで一向に終わる気配がない。

コードの内部は見てないけど、10万件分のデータを全件投入するまで flush しない作りなんだな、これ。コマンド実行中には、データベース側に1件も投入されていなかったのし。

終わりそうで終わらない、ちょっと終わりそうなプロセスの状態(そこそこの時間を動き続けた状態)になったので、もしかしたらこのままなんとか終わるかな!?と思って、放置して帰ることに。まぁ、こういうのはだいたい swap も食いつぶして終了するオチなんだけど。