Web Fontsサービスの「デコもじ」を使ってみた。
という風に設定している。
Tumblrでフォントのオーバーライドをするのは少々面倒くさかった。
<?php echo "Hello, Tumblr!";
関西で初のPHPカンファレンス!これは参加せねばなるまい!ということで、PHPカンファレンス関西に参加してきました。
このところ仕事が忙しかったこともありLTの準備もできていなかったのですが、 id:cocoiti のウノウラボ記事にインスパイアされて「Brainf*ckで犬語」を実装→発表と相成った次第であります。
BFのPHP実装としては既にBrainPhackがあります。
しかし、それを使うだけではネタとして弱いのでフルスクラッチで実装です。
車輪の再発明が悪とはよく言われますし、そのとおりだと思います。
しかし車輪を自分で作ることで得られる知見があることもまた真実・・・かと思いきや、そんなことはなかったw
余談はさておき、ソースコードはGitHubにリポジトリを作ったので下記リンクよりご覧ください。
https://github.com/rsky/phpkansai-party-lt
これを用いて昨日のエントリの内容を実行してみましょう。
<?php $dog = new BrainDog(); $dog->bow('わんわん(中略)ばう');
PHPCon関西さいこう!
PHPカンファレンス関西実行委員会のみなさま、お疲れ様でした!
とても楽しかったです!
ドラ娘かわいかったです!
元ネタは ウノウラボ by Zynga Japan: わんわん
わんわん
わんわんわうわおんわんわんわんわんわーんきゃんきゅーんわおんわうわおんわんわんわんわんわんわーん
きゃんきゅーんわおんばうきゃんきゃんきゃんきゃんきゃん
きゃんきゃんきゃんばうわんわんわんわんわん
わんわんわん
ばうきゃんきゃんきゃんきゃんきゃんきゃんきゃんきゃんきゃんきゃんきゃんきゃんきゃんばうわーんわんわんわん
わんわうわおんわんわんわんわんわんわんわんわんわんわんわん
わーんきゃんきゅーんわおんばうきゃんばうわーんわんわんわんわうわおんきゃん
きゃんきゃん
きゃんきゃんきゃんきゃんきゃんきゃんきゃんわーんきゃんきゅーんわおんきゃんきゃんわうわーんわんわんわん
わーんわんわんわおんわおんきゃんきゅーんわーんきゃんばうわーんきゃんきゃんきゃんきゃんきゃん
きゃんばうわんわんわん
わんわんわんわんわんわんわんわんわんばうわおんきゃんばう
わーんわんわんわん
ばうわおんわおんわんわんわんわんわんわんわうわーんわーん
わんわんわんわんわおんわおんきゃんきゅーん
わーん
わーんわんわんばうわおんきゃんきゃんきゃんきゃんきゃんばうわおんきゃんきゃんきゃんきゃんきゃんきゃんきゃんきゃん
わうわーんわーんきゃんきゃんきゃんきゃんきゃんきゃんきゃんきゃんわおんわおんわんきゅーんわーんわーん
わんわんばうわおん
わおんわんわんわんわんわうわーんわーんわんわんわんわんわんわおんわおんきゃんきゅーんわーんわーん
ばうわおんばうわおんわんわんわんわんわうわーんわーんきゃんきゃん
きゃんきゃんきゃんわおんわおんきゃんきゅーんわーんわーんばうわんわんわん
ばうわおんばうわーん
きゃんきゃんきゃんばうわおんわおんわんわんわんわんわうわーんわーんわんわんわん
わんわんわおんわおんきゃんきゅーんわーんわーん
きゃんきゃんばうわおんばうわおんわん
わんわんわんわうわーんわーんきゃんきゃんきゃんきゃんきゃんわおんわおんきゃんきゅーんわーん
わーんわんわんばうわんわんわんわんわんばうわうきゃんきゅーん
わんわんわんわんわんわうわおんわおんわんわんわんわんわんわんわーんわーんきゃんきゅーんわおんわおん
わん
わんわんばうわーんわーんわん
わんわんわんわんわうわおんわおんきゃんきゃんきゃんきゃん
わーんわーんきゃんきゅーんわおん
わおんきゃんきゃん
きゃんばう
ネタバレは明日
1月2日ということでブログの書き初めをする。
9月末-10月頭にかけて東京でPHPのイベントに参加した。
PHPの「いま」に触れることができたのはもちろん、東京近郊だけでなく、地方から来られている方とも知り合いになれて良かった。
PHPカンファレンスの懇親会ではPHPの生みの親であるRasmus氏とお話しする機会があったのに上手く伝えたいことが言えず、もっと英語力をつけないといけないなと思った。
両イベントの間の1週間は東京観光・・・は、ほとんどせず、家を探したり会社訪問をしたりしていた。
その後、特に紆余曲折もなくジンガジャパン株式会社に入社した。
なにげに齢30にして初の会社勤めなので内心は不安だったのだけど、意外なほどチームにもすぐ馴染め、元気にやっている。
入社以前から面識のあった id:cocoiti や、はてな・Twitterでやり取りがあった id:hiro_y がいてくれたおかげで気持ちに余裕があったのだと思う。
フラット。そしてスピードが速い。
僕が入った時には100人近くの規模になっていたはずだけど、CEOから新人まで全員がパーティションのないオフィスにいる。必要とあらば誰にでもすぐ質問できる環境。
会社としてはウノウのやり方とジンガのやり方が混在している状況らしい。これから熟成されてジンガジャパンのやり方になっていくのだろう。とても楽しみだ。
Zynga USAから出向している人が何人かいて、彼らとコミュニケーションするために通訳さんが数人いたり無料で英語レッスンが受けられたりする。
社内公用語は普通に日本語だけど、USの人たちと交流するために英語は上達したい。しかし彼らの日本語習得スピードには驚かされる。
あとIT系ベンチャー企業としては女性比率が高いらしい。僕は比較対象となる他社の実態をあまり知らないので本当かどうかよく分からない。
ついでに言うとリア充が多い。確かめた訳ではないが、みんな公私共に充実しているような雰囲気。ちゃんと休める会社だからかな。
長らく中断していたgihyo.jpの連載を再開させていただいた。
PHPエクステンションを書く人たちのためになる、いい記事を書いていきたい。
全く経験のなかったモバイル・ソーシャルゲームの会社に入ったわけだけど、プラットフォームや端末の作法さえ理解してしまえば、プログラムを書くこと自体は難しくない、と感じている。
難しいのは多くの人に遊んでもらえる、楽しいゲームを作ること。そしてそれが利益を生み出すこと。
道楽でやっている訳ではないので収益にはこだわる必要がある。いちばんこだわるのはアクティブユーザー数だけど。
無料でも十分に楽しく遊べて、かつ課金で得られる満足もある、その最適なバランスを求めていきたい。
ジンガのFacebookアプリ、特に最新のCityVilleはそのあたりが素晴らしいと思う。
日本市場で、(少なくとも今は)FlashLiteで、どこまでのものができるか。今年は挑戦の一年になる。
さくらのVPSクローズドベータを再募集していたので、応募しました。
デフォルトのOSはCentOS 5.5の64bit版ですが、さくらのVPSを Debian GNU/Linux にする を参考に、Ubuntu 10.04 LTSがインストールできたので、その方法を記しておきます。
・・・といっても、上記リンク先とはインストーラーのダウンロードURLが違うぐらいなので、要点だけ。
Ubuntuをインストールする前に、予めネットワークの設定をメモっておきます。
IPアドレスとネットマスクは ifconfig eth0、ゲートウェイは route、ネームサーバーは cat /etc/resolv.confで、それぞれ確認します。
Ubuntu 10.04 LTS (Lucid Lynx) の64bit版をダウンロードし、/boot 以下に展開します。
cd /tmp curl -O http://archive.ubuntu.com/ubuntu/dists/lucid/main/installer-amd64/current/images/netboot/netboot.tar.gz mkdir /boot/ubuntu-netboot tar xfzv netboot.tar.gz -C /boot/ubuntu-netboot
/boot/grub/grub.conf に以下の内容を追記します。
title Ubuntu 10.04 LTS install root (hd0,0) kernel /ubuntu-netboot/ubuntu-installer/linux ro root=LABEL=/ console=tty0 console=ttyS0,115200n8r initrd /ubuntu-netboot/ubuntu-installer/initrd.gz
ここまでの作業はsshでもできますし、sshでしたほうがコピペもできて楽だと思います。
が、インストールはVPSコントロールパネルのリモートコンソールから行わないといけません。
リモートコンソールでrootログイン後、reboot、「Press any key to continue.」とメッセージが出たらエンターキーでも押して、もう一回「あとn秒でCentOSが起動」的なメッセージが出るのでもう一回エンター、カーソルキーで「Ubuntu 10.04 LTS install」を選んでエンターでインストールが始まります。
(以下うろ覚え)
あとは案内に従えばインストールできると思いますが、ネットワークの設定をミスっていると「Bar archive mirror error」となり、ダウンロードに失敗します。
また、インストールの最後の方で「Basic Ubuntu server」「LAMP server」等を選ぶ項目が出てきます。僕はとりあえず最小限の「Basic Ubuntu server」だけ選びましたが、リモートコンソールでログインして sudo aptitude install openssh-server する手間を考えると、「OpenSSH server」も選んでおいたほうが良かったと思いました。(Webベースのリモートコンソールは使いづらいので)
先日から公開を始めたPEAR(PECL)チャンネルでは、チャンネルサーバーの管理にPirumを使っています。
元々はChiara_PEAR_Serverを使おうとしていたのですが、インストール後のスクリプトがうまく動かずにコードを追っかけていたところ、@iteman 先生に「PHPUnitが移行したやつを使ってみてはどうか」と勧められたのがPirumを知ったきっかけでした。
“Pirum”はラテン語で“梨の実”という意味らしく、“PEAR”そのまんまですね。公式サイトの画像がなぜナスなのかは定かではありません。
以下に公式サイトの紹介文を和訳してみました。
Pirum is a simple and nice looking PEAR channel server manager that lets you setup PEAR channel servers in a matter of minutes. Pirum is best suited when you want to create small PEAR channels for a few packages written by a few developers.
Pirumはわずか数分でPEARチャンネルサーバーをセットアップできる、シンプルで見た目の良いPEARチャンネルサーバー・マネージャーです。Pirumは少数のパッケージ・少数の開発者のためのPEARチャンネルを作るのに最適です。
Pirum consists of just one file, a command line tool, written in PHP. There is no external dependencies, no not need for a database, no need to setup credentials, and nothing need to be installed or configured.
Pirumの構成物はPHPで書かれたコマンドラインツールたったひとつです。外部依存、データベース、セットアップ証明書 (訳注: ここは訳が怪しいです。権限とした方が良い?)認証情報のセットアップ (意訳: ユーザー管理)*1、インストール・設定が必要なものは何もありません。
インストールはpearコマンドで行います。
$ pear channel-discover pear.pirum-project.org $ pear install pirum/Pirum-beta
pirumコマンドはPEARのbin_dir*2にインストールされるので、bin_dirにパスを通すか、$(pear config-get bin_dir)/pirum を直接指定して使います。*3
引数無しでpirumを実行すると、使い方が表示されます。
$ pirum Pirum 0.9.9 by Fabien Potencier Available commands: pirum build target_dir pirum add target_dir Pirum-1.0.0.tgz
サブコマンドはチャンネルサーバーを(再)構築する build と、パッケージを追加する add の2つだけと、非常にシンプルです。
まずはチャンネルサーバー用のディレクトリとチャンネル定義のXMLを用意します。
$ mkdir pear $ touch pear/pirum.xml (pirum.xml を編集する) $ cat pear/pirum.xml <?xml version="1.0" encoding="UTF-8" ?> <server> <name>pear.localhost</name> <!--チャンネル名。pear channel-discover 等で使われる --> <summary>Local PEAR channel</summary> <!-- チャンネル概要 --> <alias>local</alias> <!-- name の別名 --> <url>http://pear.localhost/</url> <!-- チャンネルサーバーのルートURI --> </server>
次にbuildでチャンネルサーバーを構築します。
$ pirum build pear Pirum 0.9.9 by Fabien Potencier Available commands: pirum build target_dir pirum add target_dir Pirum-1.0.0.tgz Running the build command: INFO Building channel INFO Building maintainers INFO Building categories INFO Building packages INFO Building releases INFO Building index INFO Building feed INFO Updating PEAR server files INFO Command build run successfully
これでチャンネルサーバーの用意ができました。この例ではローカルにチャンネルを立てるようにしたので、httpdにバーチャルホストの設定をして再起動後、 http://pear.localhost/index.html の案内どおりにチャンネルを登録します。
$ pear channel-discover pear.localhost Adding Channel "pear.localhost" succeeded Discovery of channel "pear.localhost" succeeded
先にチャンネルを登録しておかないと、このチャンネル向けのパッケージが作成できないので注意してください。
$ pear package package.xml Error: Unknown channel "pear.localhost" Parsing of package.xml from file "package.xml" failed Cannot package, errors in package file
詳細なパッケージの作り方は長くなるので、ここではPirumをローカルチャンネルに登録してみましょう。
まずはPirumのpackage.xmlを改変してパッケージを作ります。
$ pear download pirum/PIrum-beta downloading Pirum-0.9.9.tgz ... Starting to download Pirum-0.9.9.tgz (11,622 bytes) .....done: 11,622 bytes File /../Pirum-0.9.9.tgz downloaded $ tar xfz Pirum-0.9.9.tgz $ sed 's/pear.pirum-project.org/pear.localhost/g' package.xml > Pirum-0.9.9/package.xml $ pear package Pirum-0.9.9/package.xml Warning: Channel validator warning: field "date" - Release Date "2010-05-12" is not today Package Pirum-0.9.9.tgz done
次にaddでパッケージを登録します。
$ pirum add pear Pirum-0.9.9.tgz Pirum 0.9.9 by Fabien Potencier Available commands: pirum build target_dir pirum add target_dir Pirum-1.0.0.tgz Running the add command: INFO Parsing package 0.9.9 for Pirum INFO Building channel INFO Building maintainers INFO Building categories INFO Building packages INFO Building package Pirum INFO Building releases INFO Building releases for Pirum INFO Building release 0.9.9 for Pirum INFO Building index INFO Building feed INFO Updating PEAR server files INFO Command add run successfully
確認。
$ pear pear remote-list -c local Channel local Available packages: ================================= Package Version Pirum 0.9.9
マジ簡単。それに尽きます。
チャンネルの管理をするマシンとチャンネルを公開するサーバーが異なる場合でも、FTPやrsync等でディレクトリを丸ごと同期するだけです。データベースを使わないPirumのメリットと言えます。
その反面、リストや削除などのコマンドが実装されていない、パッケージの数に比例して再構築にかかる時間が増える設計になっている等、公式PEARチャンネルのような大規模なものには向いていません。あくまで小規模なチャンネル向きです。もっとも、ほとんどの場合はPirumで必要十分だとは思いますが。
公式サイトの説明にも<url>要素の中身は <url> http://pear.pirum-project.org/ </url> とスラッシュで終わっていますが、これだと書き出されるHTMLで http://pear.pirum-project.org//feed.xml のようにスラッシュが重複してしまいます。
これを避けるために僕のチャンネルやPHPUnitのチャンネルではURLの最後にスラッシュを付けないようにしています。
Pirumの現在のバージョンではこれで問題ないようですが、今後どうなるかは分かりません。
パッケージを削除するサブコマンドは実装されていませんが、パッケージファイルを手で削除したあとbuildすれば、パッケージを削除することができます。
$ rm -v pear/get/Pirum-0.9.9.t* pear/get/Pirum-0.9.9.tar pear/get/Pirum-0.9.9.tgz $ pirum build pear Pirum 0.9.9 by Fabien Potencier Available commands: pirum build target_dir pirum add target_dir Pirum-1.0.0.tgz Running the build command: INFO Building channel INFO Building maintainers INFO Building categories INFO Building packages INFO Building releases INFO Building index INFO Building feed INFO Updating PEAR server files INFO Command build run successfully $ pear clear-cache reading directory /../pear/cache 123 cache entries cleared $ pear pear remote-list -c local No packages in channel