ウノウラボの最後の記事を書いた人

本人いやがる気がするが、あえて書いちゃう。

数年、誰も更新してなかったラボブログに再び火をいれた記事。

フォト蔵、そしてウノウラボ
http://labs.unoh.net/2012/07/photozou-with-unoh-labs.html

に続いて、僕が書いた公開終了の記事。
「ラボブログの更新停止について 」
http://labs.unoh.net/2012/07/crying-out-love-in-the-center-of-the-internet-world.html

id:perezvonがいろいろ動いてくれて僕に依頼してくれたからこそ書けた記事。

彼は間違いなくウノウ時代からZynga Japanまで先頭を切って会社の技術を高めていった人。
たぶん彼と仕事したことある人は全員が納得してくれると思う。

で、まぁそれは、あれなんだけど、僕はすでに退職してててBlogのアップは彼にお願いしたわけなんだけど。
BlogのURLに注目、「crying-out-love-in-the-center-of-the-internet-world.html」
うん、やってくれた。

「ラボブログの更新停止について 」なんかよりもインパクトのあるURL。
これが僕の中でラボブログ最後の記事だと思えるようになった。だから、僕の中で最後にラボブログ記事を書いたのはid:perezvon

退職日記

6月末をもって、Zynga Japanを退職します。28日が最終日になります。

いろいろ私事で立て込んでいるため、本来個別にご連絡したい方にも、ご連絡できてないですが、取り急ぎこちらでご報告させていただきます。

ウノウ時代から足掛け6年いかないくらいだったとおもいますが、たぶん、ウノウに入っていなかったら体験できなかったことを、たくさん経験できたと思います。

個人的にはモバイルのOpenSocialのゲームの走りだと個人的にはおもっているまちつく!に関って数週間にわたってユーザが10万人ずつ増え続ける体験と対応をしたのは誇りに思えますし、今ではだれでも知るところのWikipedia創始者ジミー・ウェールズ氏と同じイベントに登壇したというのも奇妙なことでした。(なぜあの時俺は写真とらなかったのだ)

ウノウ買収が噂になった時に、Zyngaならぬ、Tengaのグッツが当選して、Tenga Japanがバズるという事例に代表されるsuaddの強運と(もちろん、強運に見合う努力はなされてます)、わりと無茶なことを支えるというか、なんとかしてきた優秀で責任感の強い人たちがいたそんな会社でないとこういう体験はできなかったのではないかとおもいます。

退職理由ですが、もろもろ、事情がありますが個人的には会社にネガティブな理由があったわけではなく、今も昔も、面白い人のそろっているZynga Japanを離れるのは大変残念におもってます。

ただ、誰だったか(僕、komagataさんだとさっきまでおもってたんですがエントリが見つからないのですね)が、1年前の自分を見て成長したかを自問するという話を見て、そのフレーズはずっと自分の中でテーマなのですが、この2年間ずっと自分のなかで「これが自分の望む成長の形か?」という形で、引っかかっていました、そういった意味で退職のこのタイミングが良かったと思っています。

今後についてですが、専業主夫として生きて行こうとおもいます。
・・・嘘です、働きます。お金ないのでがんばります。まだ決定してないため決まったらお知らせいたします。

最近の仕事の仕方は失敗しない・させないということ自分のバランスを振ってきましたが、サービスを作ることに自分のバランスをふっていければと思います。

これからも、皆様よろしくお願いいたします。

まだ、古いメンバーもたくさんいますし、別に創設メンバーでもなんでもないんですが、ウノウという会社があったことを少しだけ思い出してくれるとうれしいです。

 効率的なWebアプリケーションの作り方

効率的なWebアプリケーションの作り方 ~PHPによるモダン開発入門

効率的なWebアプリケーションの作り方 ~PHPによるモダン開発入門

小川さんというか高橋さんというか、@fivestr さんの描いた「効率的なWebアプリケーションの作り方」をいただいた。
まだ3章くらいまでしか、読み終えてないのだけどいまのところ感想

パーフェクトPHPと同じように教科書的に読むといいと思う

パーフェクトPHPは、日本のPHPエンジニアが読むべき本でしたが、あの本の作者うちの1人が書いた本のためか、「効率的なWebアプリケーションの作り方」も非常に近い印象を受けました。

その印象は、アーキテクチャに対して深い洞察を持った人によって書かれているので「PHPはこうなってるから仕方がない」的な内容ではなく、「PHPはこうなってるからこうしよう」というPHPを使いこなすための指針が書かれていることです。

基本的にはこの本を読んでいれば、会社のPHPアーキテクチャはほぼ構築できるようになるんじゃないかなとおもいます。

Symfony2の本って実は日本だとこれが初めてじゃない?

ついにSymfony2を使うための本が出た。Symfony2ユーザはこれは買うしかない。

Smyonfy2使ってなくても参考になると思う

単純にSymfony2以外についてTestやGitなどにいろいろ書いてあるということありますが、ファビアンをはじめとする、Symfony2の開発者たちは、非常に高いレベルのPHPのアーキテクトでもあるので、彼らの思考をなぞるようにして書かれている(という印象を僕はこの本にもっています)この本は、Symfony2以外のフレームワークを使う人たちにも、彼らの先進的な考え方を学ぶという意味で、参考になる本だと思います。

個人的に気に入らないところ

Linuxのインストールの方法について、aptコマンドを使ってインストールしてて、「で、でびあんだと」と思い出しました。たまにはCentOSのことも思い出してあげてください。(Vineだったらなーだったらなー)

最後に

総じて中級者向けの本かなと思いました。PHPを使う側〜PHPを使わせる側くらいの人間が内容を理解するべき内容が書かれていると思います。本人から話を聞いた時ににもパーフェクトPHPの次の本といったのですが、パーフェクトPHPを読んでその次に読んだら中級者以上の知識をもったPHPエンジニアになっているのではないでしょうか。

PHP5.4 Advent Calendar 2011 18日目

この記事は 17 日目の@rskyさんに続いて、PHP5.4 Advent Calendar 2011 18日目エントリです。彼の朝はいつ開けるのでしょうか。

さて、このAdvent Calenderではそーだいさんの記事に続き2回目になるhtmlspecialcharsネタ。 そもそもそんな一つの関数に 2回も同じネタやる意味あるのかと悩んだのですが、突撃してみたいとおもいます。言いたいことは大体、先の記事に書いてあるので僕からは、もう少し別の角度からいってみたいと思います。

きっかけ

そもそもこの記事を書こうとおもったきっかけなんですが、久しぶりに、PHPマニュアルの htmlspecialchars のページ開いたときでした。。

string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $charset [, bool $double_encode = true ]]] )

第 3 引数を指定するか否かと議論になってますが、double_encodeという引数が、もうずいぶん前に追加されていることに気がつきました。
え、なにそれこわいと、該当ページ下部の変更履歴を見てみると PHP5.2.3 の時代の変更でした。えれぇ昔のものなので僕が気がついてなかっただけのようです。

ちなみにこのオプションの意味は、

double_encode をオフにすると、PHP は既存の html エンティティをエンコードしません。 デフォルトでは、既存のエンティティも含めてすべてを変換します。

とのことで、一度このオプションをoffにしたらhtmlspecialchars_decodeをかけてもほぼほぼ戻せないテキストデータが一丁あがりなオプションがついてました。そもそも可逆が保障されているようなものではないので、まぁそういうものかもしれません。
個人的には、「やつはまだ第2形態だ、第3,第4形態を残しているぞ」という気分になりました。

そういったことがあり、この記事を書いてみようかなと思いました。

PHP5.4の話

あ、そうだ、PHP5.4でしたね。さて、このPHP5.4から$flagsに下記のオプションが追加されています。

定数 ENT_SUBSTITUTE、ENT_DISALLOWED、 ENT_HTML401、ENT_XML1、 ENT_XHTML および ENT_HTML5 が追加されました。

これ結構さくっといってますが、結構気になる箇所です。

ENT_SUBSTITUTE

無効な符号単位シーケンスを含む文字列を渡したときに、 空の文字列を返すのではなく Unicode の置換文字に置き換えます。 UTF-8 の場合は U+FFFD、それ以外の場合は &#FFFD; となります。

ENT_DISALLOWED

指定した文書型において無効な符号単位シーケンスを含む文字列を渡したときに、 Unicode の置換文字に置き換えます。 UTF-8 の場合は U+FFFD、それ以外の場合は &#FFFD; となります。

ちょっと悩んだのですが、t_komuraさんの記事を読んで、なんとなくわかった気になりなおかつ、コミットログソースコードをあさったでは以下のよいうな感じではなかろうかという結論に達しました。

不正なバイト列があったときに、ENT_IGNOREというオプションは削除なのですが新しくできた二つは別の文字列に置き換えます。。
ENT_SUBSTITUTEは指定した文章型によらず不正な文字列を特定のコードに置換します、ENT_DISALLOWEDは指定した文書型(つまり、ENT_HTML401、ENT_XML1、 ENT_XHTML、ENT_HTML5)のオプションに従って処理をします。(ここがちょっとあやしい)ENT_DISALLOWEDは、double_encodeがfalseのとき参照時に推奨されていない数値参照についても同様の処理を行うようになっているようにも見えます。

とりあえずコミットログの下記あたりと参考になると思いますのでこちらを参考にしてください。(だいたい同じこといってます)

Added the flag ENT_SUBSTITUTE, which makes htmlentities()/htmlspecialchars()
replace the invalid multibyte sequences with U+FFFD (UTF-8) or &#FFFD;
(other encodings).

Added the flag ENT_DISALLOWED. Implements FR #52860. Characters that cannot
appear literally are replaced by U+FFFD (UTF-8) or &#FFFD; (otherwise).
An alternative implementation would be to encode those characters into
numerical entities, but that would only work in HTML 4.01 due to limitations
on the values of numerical entities in other document types. See also the
effects on htmlentities()/htmlspecialchars() with !double_encode above.

おそらくここらへんちょっとまだ、全体的に英語からして、(otherwise)の処理が書いてなかったりするあたりから類推するに、完全に文書化されてないところがあるようにみえるので、正式版を見てから考えたいです。*1

こう、解説なのに結論めいたことがかけないですが

  • double_encodeは、falseにしないほうがいいと思う。
  • いままでの挙動変えたくないなら、htmlspecialchars($str, ENT_QUOTES, 'utf-8');という書き方でいいと思う。
  • 新しいルールに従いなおかつENT_SUBSTITUTEと ENT_DISALLOWEDを使わないのであれば、PHP htmlspecialchars($str, ENT_QUOTES | ENT_HTML5, 'utf-8');(HTML5の場合)で書いておけばいいとおもう。

という感じでが今の僕のなかの結論です。
まぁ結論からいって何も変わらないとおもっていただいて結構です。

そういうわけで

個人的には、htmlspecialchars を書く箇所というのはフレームワーク内で数か所なので修正はそんなに大変ではないだろうし、正しい使い方さえ認識があればそんなに修正箇所が多いものだとはおもっていません。また、いままでは動作を指定していたものが、新しいオプションにより、HTML5等の仕様側を関数が面倒みてくれるところまで踏み込んできたのはいいことのように思えます。
ただ、ちょっと追加されたオプションについては、もうちょっと識者の意見がお伺いしたいところだったりします。

まぁとはいえ、PHP のマニュアルを見るだけでこれだけいろいろ思うことがでてくるといのはいいことでもあり、悪いことでもあると思うのですが、PHPマニュアルの読み方とかPHPマニュアルの面白さが少しでも伝われば幸いです。

最後にここいちは、クリスマスイブ一緒に飲んだくれてくれる女の子を募集中です!
htmlspecialcharsの件、クリスマスの件フィードバックをお待ちしております。

さて、次回はco3kさんです!!

*1:もしくはもう少し追試したいです

ランチ

サンドイッチおいしいです。(一人でくってます・・・)
ちなみにサンドイッチは配られたものです。

午後の部ですが当初予定されてた発表者のビザがおりず当初の予定とは違う方が話しています。

Contributing with Git : Reducing the frictions of Open Source collaboration with the Git VCS(Scott Chacon)

Gitについての説明でgitはSnapshotって話だった気がする。

Doctrine in the Real World(Jonathan H. Wage)

http://www.slideshare.net/jwage/doctrine-intherealworldsf-live2011sanfran
Doctrineの作者であるJonathan H. Wageの発表、彼は1年以上はMongoDBにがっつり始まってるような気がしますがDoctrineの発表と、Symfony2のconsole+supervisord(http://supervisord.org/
)を使ったDaemon化とMongoDBのMongoCursor::tailableを使ったキュー処理の実装についての発表でした。

phpBB4: Building end-user applications with Symfony2(Nils Adermann)

http://prezi.com/gxrdwsplwplf/phpbb4-building-end-user-applications-with-symfony2/
phpBBの歴史と今後についてとSymfony2をどう使うといった話。
実践的なアプリケーションの話はこれくらいだったので感覚的に同意できるところが多かったです。

Keynote: Symfony2 (Fabien Potencier)

Symfonyともにメインの開発者であるところのFabian氏によるライブコーディングでのSymfony2の説明会。
「あぁこれ今うごくね」とかそいう会話してた

Apostrophe: a Symfony-powered CMS your clients will love(Tom Boutell)

http://window.punkave.com/2011/02/08/liveblogging-symfony-live/

symfony1.xベースのCMS(というか、symfony plugin)Apostropheの紹介、ジェネレータでテンプレートとか作るタイプのものに見える。
Symfony2.x系だとほぼすべての部分が作り直しになるはずでそういう検討もしてはいるみたい
終わった後に今晩、Apostropheについてかたろうぜみたいな呼びかけがあって盛り上がっていた。

Unit-testing a guide to writing clean, testable code that will be easy to maintain and extend(Bulat Shakirzyanov)

http://joind.in/2593
http://www.slideshare.net/avalanche123/clean-code-5609451
流行りのUnitTestなどについてよいコードの指針とかの話があった。Jenkinsについても(このほかの発表でも文言でてきた)語られていた。