iPhone/iPadのホーム画面コンテスト開催中!賞品は iTunes カード!

Category ArchiveCakePHP



CakePHP & Web+DB & iScreenShot & service & twitter 2010/08/06 11:33

iPhone/iPadのスクリーンショットを共有する「iScreenShot」をリリースしました

iPhone(iPod touch)、iPadのスクリーンショットを投稿して、みんなで見て楽しむサービス「iScreenShot」をリリースしました。

iScreenShot

=> iPhone/iPadのスクリーショットを共有 | iScreenShot

機能の詳細は、実際にサイトにアクセスして頂くのが分かりやすいので(ヘルプもありますし)、ここではサイトを作る経緯までや公開してからについて、ざくっと書いてみます。

構築した経緯

iPhone 3GSを昨年(2009年)の夏に購入したのですが、アプリを入れてカスタムし出した頃から、他人のホーム画面にとても興味が出てきました。どうにかして色々な人のホーム画面が見れないかな、ということでこのサービスを考えました。

ただ、アイデアとしてはあったのですが、なかなか手が付けられずに結局そのまま放置されることになりました。

そして今年の春、iPadが発売され、さらにiPhone4(iOS4)が発表されました。デバイスがというよりOSのバージョンアップにより、当時よりホーム画面のカスタマイズの自由度が広がりました。つまりこれまで以上に多様なホーム画面が見られるわけです。

これは作るしかないでしょ、ということで公開にするにいたりました。

公開して

まだβ版ということで、8/1夜と翌日昼にこっそりTwitterにだけお知らせをpostしました。

TwitterでのRTやblog等でのご紹介で、少しづつですがスクリーンショットが投稿されはじめました。実際に投稿されたスクリーンショットを見ると、それぞれに個性があって面白いですね。知人がiPhoneを持っていてもホーム画面をじっくり見る機会はあまり無いので、こうやって色々なホーム画面が見られるのは想定していたより楽しいですね:D

使った方、見た方のコメントでも「面白そう」「人のホーム見たいよね」という話があって、作って良かったなーと思っています。

早速、iPhone/iPadのblogでお馴染みのtobu iPhoneさんととはてブニュースさんにも取り上げて頂けました!はじめは知っている人でボチボチ投稿してもらえれば良いかなと思っていたのですが、一気に色々な方に投稿して頂けるようになりました。ありがとうございます。やっぱり、すごい。

お気に入りのホーム画面

どんなスクリーンショットがあるかは見るのが一番なので、投稿されたスクリーンショットの中で自分のお気に入りのものをご紹介します。

=> お気に入り | iScreenShot

まずは公開早々に投稿頂いたitayanさんのホーム画面。

青系の背景とアイコンできれいにまとまっていますね。色合いを合わせるように意識してアイコンを並べているとのこと。なるほど。

ご自慢のホーム画面をキャプチャーしてみました。 | iScreenShot

次にユニークなホーム画面を投稿されているfool4rootさんのホーム画面。

アイコンを全面に置かずにあえて背景を見せるのがポイントですね。しかしFlashって:D

Flash 対応しました :-P | iScreenShot

そして今のいちおしがこれ!

Kzh_09Jpさんのホーム画面です。

はじめて見た時に驚いて、さっそくコメント入れました:D iOS4のホームボタン2度押しによるアイコングレーアウトを上手く利用して背景を浮かせています。これはすごい。ぜひ実機で次元が現れるところを見てみたいです。

ホームボタンを連続二度押したときに現れるこのショットが何気に気に入っ... | iScreenShot

あとおまけで、自分が投稿したものを。

文字アイコンを並べて作ってみました。この画面を2ページ以降に用意しておいて、相手に「ほら、スライドさせて」といって、見せると効果ありそうです:D

@crema おたんじょうび、おめでとうございます! | iScreenShot

ホーム画面ではなく、ロック中の画面です。iPhone使っている人ならいつも見るバッテリ表示の電池から液漏れです:D これは実際に人に見せると反応が良いです。

バッテリーから液漏れ | iScreenShot

ほかにもいろいろなスクリーンショットがあるのでサイトで見てみて下さい。

ホーム画面は楽しい!

投稿されたスクリーンショットを見て、あらためて思うのはやっぱりiPhone/iPadは画面が美しいですね。並べてみると惚れ惚れします。また、その美しい画面をそのままスクリーンショットで保存できる機能を標準で用意しているのは、さすがAppleだなーと思います。

これまで、それほどホーム画面の体裁を意識していなかったのですが、色々な人のホーム画面を見ると俄然やる気がでて来ますね。

見て楽しい、投稿して楽しい、というようにiPhone/iPadユーザ(+気になる人)が楽しめるサービスになればなあ、と思っています。ホーム画面コンテストとかやると楽しそうなので、企画も色々とやっていきますね。

どうですか?あなたのご自慢のスクリーンショットも投稿したくなってきましたか?

=> iPhone/iPadのスクリーショットを共有 | iScreenShot

CakePHP & Webサービス 2010/07/14 10:33

書籍名に年齢が入っている本を探す

「35歳からの○○」「40歳までに身につける××」といった書籍名に年齢が含まれる本が数多くあります。

こういった書籍にはどういうものがあるだろう、ということで調べてみました。

日頃、電車の広告や日経の広告などに掲載されているビジネス書などで年齢が書籍名に含まれる本を良く見ます。

年齢は万人に必ずあるものですし、自分に合致する年齢であれば興味を引くので良く利用されているのかもしれません。

実際にどのような本が出版されているのかを楽天ブックス書籍検索APIを使って調べてみました。

調査対象

楽天ブックス書籍検索APIで取得できる書籍から書籍名に年齢が含まれている本を抽出しています。

「0歳児・1歳児・2歳児のための乳児保育」といった複数の年齢が書籍名に含まれる場合はそれぞれの年齢として加算しています。

「 1歳から100歳の夢」といった年齢を範囲で含めている書籍に関しては加算していません。

年齢別書籍数グラフ

集計結果のグラフは以下。

=> 年齢別書籍数グラフ

最も多く含まれている年齢は3歳

最も書籍名に多く含まれている年齢は3歳でした。続いて5歳、2歳、4歳、0歳、1歳と乳幼児向けが並ぶ結果となりました。

ビジネス書系が並ぶのかと思いきやこれは意外な結果ですね。

「3歳のお気に入りえほん集」「ディズニーの読み聞かせえほん(どきどき3歳)」「 3歳までこそ大切な子育て10則」など子育て本、知育系の本が並んでいました。このあたりは1年齢の本も多いですが、「3・4・5才のおりがみ」のようにいくつかの年齢をまたいでいるのも特徴ですね。

たしかに実体験としても幼児向け本は何冊も買っているので、言われてみれば納得です。

=> 3歳の本を見る

やはり多いのは10区切り

次に多いのが10区切りで、100、50、60歳と続きます。

他にも40、10、20、15、35歳が上位に来るのでキリの良い年齢は、その付記の年齢の人も含めて対象となりやすいようです。

ここでも意外なのが、100、50、60歳というやや諸先輩向けの本が多いということです。日頃、目にする30/40歳代の本よりも多いというのは本に親しみを持つ年齢が故なのでしょうか。

面白いことに、100歳が含まれる本には「100歳まで」という表現が多いのに対し、50、60歳が含まれる本では「50歳から」「60歳から」という本が多いです。50、60歳はまだまだこれからですね。

=> 100歳の本を見る
=> 50歳の本を見る
=> 60歳の本を見る

意外にビジネス書は少ない?

広告の印象ではビジネス書や自己啓発系の本が溢れているのかと思っていたのですが、上位の年齢層を見てみると必ずしもそうではありませんでした。

本のジャンルとしてはビジネス系を除くと、教育書や小説、あと闘病記的な本が目に付きました。

年齢が含まれる本から見るとある女性の20代

20歳(はたち)でお店を立ち上げる!
21歳アタシ的寂しさ
綾。ホステス、22歳。新装版
23歳のディールメーカー
24才・時給750円の私がベンチャー経営で劇的成長できた理由(わけ)
迷い続ける25歳の退職届
26歳のレクイエム
27歳からの就職術
28歳からのぶっつけ留学成功法
29歳までに“その他大勢”から脱けだす習慣
30歳からの安産

私はアゲ子。20歳で店を起ち上げたけど、寂しくなって、ホステスになったの。23歳でディールメーカーになったけど、24歳の時給は750円。25歳で迷ったあげく退職した。。。
26歳の時は無職でどん底ね。でも27歳に奮起して就職活動をしたけど、気が変わって28歳で留学。29歳に「私はその他大勢とは違うのよ!」と一歩抜け出す習慣を身につけた結果、30歳で無事に安産。今は幸せよ。

といった20代人生が思い浮かびますね:D

年齢が含まれる本を探すサービス「アゲ本」

こういった年齢が含まれる本を探すサービスを作ってみました。

「アゲ本」
http://agebook.in/

年齢を入力すると書籍名にマッチした書籍をランダムで表示します。こちらでは「1から100歳」といった年齢範囲の書籍にもマッチするようになっています。

自分の年齢を入力するもの良し、どなたかの誕生日プレゼントとして本を探すのも良し、一度遊んでみて下さい。

CakePHP & PHP & Web+DB 2010/04/07 11:04

CakePHPとnginx+memcachedで手軽にキャッシュを活用する

nginx+memcachedがめちゃ気になったので試してみました。

元ネタは下記です。

A 53,900% speedup: Nginx, Drupal, and Memcache bring concurrency up and page load time way down | TechnoSophos

nginxをリバースプロキシに利用した構成で、バックエンドの出力をmemcachedにキャッシュしておけば、次回リクエストではnginxがそのキャッシュを読み取ってそのまま出力してくれます。

つまりバックエンドにリクエストを経由させずにnginxから即出力するのでかなりの高速化が見込めるという優れものです。

リンク先ではバックエンドにDrupalを利用していたのですが、ここではCakePHPを利用してみます。

1. 全体構成

リバースプロキシにnginx(Port: 80)を使い、バックエンドにはapache+mod_php(Port: 8080)を使います。

nginxはリクエストが来るとURLをキーとしたキャッシュがmemcachedにあるかを調べます。キャッシュがあればそれをレスポンスとしてそのまま返します。

キャッシュが無い場合はバックエンドにリクエストが飛びます。バックエンドではページ生成処理を行い、出力内容をmemachedURLにキャッシュします。

これにより次回リクエストからはこのキャッシュがnginxから出力されます。

試したバージョンは以下。

  • nginx 0.7.65
  • memcahed 1.2.8
  • apache 2.2.14
  • PHP 5.2.10
  • CakePHP 1.2.6

2. nginx+memcached設定

nginxのmemcached連携を行うためにNginxHttpMemcachedModuleを利用します。NginxHttpMemcachedModuleはnginxをデフォルトでインストールすれば含まれています。

nginx.confを以下のように設定します。

# バックエンド
upstream backends {
    server 127.0.0.1:8080;
}

http {
    #(snip)

    server {
        #(snip)

        location / {
            # POSTはそのままバックエンドへ
            if ($request_method = POST) {
                proxy_pass http://backend;
                break;
            }

            # memcachedにキャッシュがあればキャッシュを
            # 無ければバックエンドへ
            set $memcached_key $uri;
            memcached_pass     127.0.0.1:11211;
            default_type       text/html;
            error_page         404 502 = @fallback;
        }

        location @fallback {
            proxy_pass         http://backend;
        }
    }
}

ここで注意が必要なのが「error_page 404 502 = @fallback;」の箇所。

memcachedにキャッシュが無い場合はバックエンドへリクエストを投げるのですが、この箇所を[=]抜きにすると404(キャッシュが無い)や502(memcachedが繋がらない)がステータスコードとして出力されてしまいます。

つまりキャッシュが無い場合だとページ自体はバックエンドが生成した内容が出力されるのですが、ステータスコードが404となってしまいます。

[=] を付けるとバックエンドで出力されたステータスコードがそのままレスポンスとして出力されるので、[=]を忘れないようにしましょう。(はまりました。。。)

3. バックエンドでキャッシュ処理

次にバックエンドで生成した内容をmemcachedにキャッシュします。

まずPHPからMemcacheにアクセスするために、pecl::memcacheをインストールします。

$ sudo pecl install memcache

ここではCakePHPでの処理を想定しており、MemcacheViewHelperというヘルパを作成してキャッシュを行います。

MemcacheViewHelperはafterLayoutメソッドでビューからの出力全体をmemcachedにキャッシュします。

ちなみにHelper#afterLayout()はフレームワークから呼ばれるフックメソッドで、下記のように出力全体に対して処理を行うことが出来ます。例えば文字エンコーディングを変換する時などなかなか便利なメソッドです。

[app/views/helpers/memcache_view.php]

PHP:
  1. <?php
  2. class MemcacheViewHelper extends AppHelper {
  3.   public function afterLayout() {
  4.     if (!empty($this->params['memcache_view']['is_cache'])) {
  5.       $view = ClassRegistry::getObject('view');
  6.  
  7.       $memcache = new Memcache();
  8.       $memcache->addServer('localhost', 11211);
  9.       $memcache->set(Router::url(), $view->output, false, 3600);
  10.     }   
  11.   }
  12. }

コントローラでMemcacheViewHelperを読み込みます。キャッシュを有効にするアクションでは$this->params['memcache_view']['is_cache']にtrueをセットします。

下のUsersControllerの場合、indexアクションはキャッシュされますが、viewアクションはキャッシュされません。

[app/controllers/users_controller.php]

PHP:
  1. <?php
  2. class UsersController extends AppController {
  3.   public $name = 'Users';
  4.   public $helpers = array('MemcacheView');
  5.  
  6.   public function index() {
  7.     $this->User->recursive = 0;
  8.     $this->set('users', $this->paginate());
  9.     // キャッシュする
  10.     $this->params['memcache_view']['is_cache'] = true;
  11.   }
  12.  
  13.   public function view($id = null) {
  14.     if (!$id) {
  15.       $this->Session->setFlash(__('Invalid User', true));
  16.       $this->redirect(array('action' => 'index'));
  17.     }   
  18.     $this->set('user', $this->User->read(null, $id));
  19.   }
  20. }

これでブラウザからnginx(ex. http://localhost/users/index)にアクセスすると 1 回目はバックエンドにリクエストが飛びますが、2回目以降はmemcachedのキャッシュが出力されます。

4. パフォーマンス

キャッシュの効果を見るために、nginx+memachedを使ったパターンとバックエンドに直接接続した場合とでパフォーマンスを計測してみました。

計測はabで行っています。(-c 100 -n 1000)数値はRequests per secondで、5回行った平均値です。

参考にキャッシュをファイルに出力してnginxから出力するパターンも計測しました。

構成 Requests per second
apache+mod_php+CakePHP
(ダイレクト)
13.814 100%
nginx+memcached 2034.262 14726%
nginx+ファイル(参考) 5806.798 42037%

やはりapache+mod_php+CakePHPよりnginx+memcachedが圧倒的に早いですね:D ここまで大きな差があると使ってみたくなります。

5. memcached or ファイル

上記パフォーマンスを見るとmemcachedよりfileの方がより多くのリクエストを捌いています。

パフォーマンスだけを見るとファイルが有利ですが、memcachedの方はnginxサーバやWebサーバが複数台になった場合にキャッシュの取り扱いが簡単(複数台で共有しやすい)という利点があります。また、memcachedなら有効期限が簡単に付けられるというのもあります。

どちらを使うのが良いかはケースバイケースですが、キャッシュの取り扱いを考えると個人的にはmemcachedが良いバランスかなと思っています。更新頻度が少ないがアクセス数が多いページだけはファイルに出力してしまうという方法もあります。

いかに遅い箇所を経由させずにレスポンスを返すかという視点で見るとnginx+memcachedはまさに願ったり叶ったりの構成です。ここではバックエンドにCakePHPを使いましたが、他のフレームワークでも他のシステムでも他の言語でも何でも理屈は同じです。

多くの環境から操作できるmemcachedをキャッシュエンジンに使うということは、バックエンドを選ばずにキャッシュ機構が使えるということで、これはよく考えられていますね。

CakePHP & event 2009/11/23 23:25

PostgreSQL Conference 2009 Japanで発表してきました。

JPUG10周年記念イベント「PostgreSQL Conference 2009 Japan」で発表してきました。

oregon

コアな内容や大規模向けな内容のセッションが多い中、明らかに場違い感満載な内容だったわけですが、とりあえず無事に発表できてホッとしています。

この場を借りて発表の機会を頂いたPostgreSQL Conference 2009 実行委員会の皆さんにお礼を言いたいと思います。ありがとうございました。

今回は自身では実に反省点の多い発表でして、発表のあとは一人へこんでいたのですが、そんな発表にも関わらず聞いて頂いた皆さんありがとうございました。

冒頭の写真は、発表の後にオレゴン州出身の方から頂いたシールです。ちょうどへこんでいたところだったので、とても勇気づけられました!ありがとうございます:-D
# www.heartinoregon.comのシールのようです。

以下、雑感をつらつらと。

雰囲気

普段参加しているLL系のイベントとは雰囲気が異なり、特に初日のビジネスDayは堅めでしたね。初日は仕事の関係で午後から参加したのですが、セッション中の堅めな雰囲気に翌日の自分の発表が不安になったりしました。

ただこの雰囲気はセッション後の懇親会では一変し、わいわいがやがやと良く知る賑やかな雰囲気となりました。これはかなり安心しました:-D

あと発表者、参加者ともに年齢層はWeb系に比べると若干高めだった気がします。

Twitter

公式ハッシュタグが用意されていたのですが、発言している人は少なめでしたね。スタッフの方を除くとポツポツという感じで、さらに発言されているのは海外の方の方が多かったように思います。

あと発表のスライドにTwitterのIDを書いている人がすごく少なかったです。これは個人での発表というより組織の代表者として発表している人が多かったのもあるかもしれません。

プレゼン

自分で発表するようになってから、他の人の発表を見ると、内容もさることながら、話し方やテンポ、仕草などを見るのが楽しいです。

今回は特に自分の発表でへこんだ後に聞いたDavid Wheelerさんの発表が素敵すぎました。英語はほとんど分かってないのですが、この発表では(他に比べると)理解することができました。スライド・言葉だけでなく、表情や仕草などで何かが伝わってくるこのプレゼンは良い勉強になりました。

他の方のプレゼンも色々と学ぶところがあり、そういったプレゼン手法を見ているだけでも楽しいイベントでした。

やはり上手い人のプレゼンにはおもてなしの心があるんだなーと感じましたね。

国際的なイベント

2日目のクロージングにてスタッフの方のお話に「国際的なイベント」という言葉がありましたが、まさにそういったイベントになっていたと思います。

海外のイベントには参加したことは無いので、ここまで海外の方の比率が多いイベントに参加したのは初でした。

印象的だったのは、発表の途中で突っ込みが入ったり(しかもその突っ込みにさらっと回答する)、質疑応答が白熱したりする光景でした。こういったものは日本と海外との違いということで語られていたり、動画などで見たりはしていたのですが、直に見るのは初めてだったので新鮮でした:-D

こういったプレゼンは是非自分たちでもやっていみたいです。

そういえば参加したセッションもほとんどが英語のセッションで、海外に行ったらこんな感じかなと想像しながら聞いてました。国内からの参加者でも英語を話す人が多かったです。やっぱり英語勉強したいです。

あと初日の同時通訳もすごかったです。よく国際会議とかで見てるイヤホンで聞いているアレですが、ホントに発表者が話して少しのタイムラグでどんどん訳が聞こえてきます。いやあすごい。

運営について

こういった素晴らしいイベントを運営されたスタッフの皆さんには頭が下がるばかりです。自分もつい先月にCakeMatsuriを運営していただけに、とにかくお疲れ様でしたという気持ちで一杯です。

素晴らしい運営の中で、気になった点を。

思うに発表者へのサポートがもう少しあると良かったように思います。PCとプロジェクタとの接続やピンマイクの使い方・調整など、手すきのスタッフの方が発表前に横についてサポートして上げれば、もっと安心して発表することができたと思います。

海外からの発表者についてはもちろんサポートされている方がおられたのですが、国内からの発表者はわりと放任主義な感じがしました。

自分が運営に関わるイベントでもできているわけではないので、自戒も込めて。

とにかく濃いイベント!

発表内容はどれも濃く興味深い内容が満載でした。特に監視を含めた「見える化」系の話やSE-PostgreSQLの考え方、破損データからレコードを取り出す方法などが面白かったです。

あとライトニングトークがどれも内容がしっかりしていて、5分で聞くにはもったい無い内容ばかりでした:-D

DBのイベントということで色々なバックエンドを持つ人が集まっていたため、色々な話を聞くことができたのが収穫でした。できればもっと色々な人とお話したかったです:-D

最後に、実行委員会の皆さん、参加された皆さん、お疲れ様でした&ありがとうございました!

CakePHP & Webサービス 2009/11/20 09:42

携帯サービス「おでかけくん」をリリースしました

ちょっと便利な携帯サービス「おでかけくん」をリリースしました。

odkk

お出かけ先を登録することで、天気予報やグルメ情報、ニュースといった情報を携帯で見ることができます。またアラートメール機能を使うと設定した時間に帰宅時間を知らせるメールが送信されます。これでうっかり終電を逃すことも避けられますね:-D

サービスの内容はサイトを見て頂くのが早いと思うので、ここでは制作について。

女性向け

デザインを見て頂ければお分かりだと思うですが、女性を意識したサイトになっています。

Webサービスは数あるのですが、特に個人で作れるような小規模なものとなると、どちらかと言うと「Webに詳しい人のためのサービス」というのが多くて、もっと普通の人が使えるサービスを作りたいという想いがありました。

なかでも女性向けのWebサービスは少ないので、この企画を考えました。

技術志向のサービスはもちろん素晴らしいのですが、それだけではなく技術的にはありきたりのものでも、誰かの役に立つサービスがもっと増えれば良いですね。

Mashup Award 5

マッシュアップサイトのコンテストであるMashup Award 5に応募しています。

作品#220 おでかけくん

目標があった方が開発も進むだろうということで応募することを決めたのですが、開発開始から応募締め切りまであまり時間が無かったので、最後はバタバタでした。。。

賞は、、、どうなるか分かりませんが、このイベントのおかげで目標設定ができ、おでかけくんを構築することができました。

技術構成

構成は1×1では定番の PHP + CakePHP + PostgreSQL です。CakePHPには社内標準ライブラリをまとめたプラグインがあるのでそれを活用しています。

技術的にはそれほど特筆すべき点は無いのですが、マッシュアップサイトならではの苦労というか悩みがありました。

いくつかの外部WebAPIを利用させて頂いているのですが、目的は合致していても欲しい項目が足りなかったり、制限があったりで、WebAPIにコンテンツ内容を合わせざるを得ないところがありました。

チーム開発

これまで幾つか自社(自分)運営のWebサービスを作ってきたのですが、それらはどれも私が一人で構築していました。

「おでかけくん」はここがこれまでとの大きな違いで、今回は1×1としてチームで構築を行いました。私自身は意識的にコードは書かないようにして、企画やディレクションといった「口を出す側」に徹しました。

結果として無事にサービスをリリースすることができ、これはとても良い方向に向かったと感じています。

開発スキルとしては社内で十二分に構築できるのは分かっていたのですが、意識の面で主体的にアイデアを出して実装を考えて構築するというのが経験できたのが収穫でした。

また口うるさいクライアント(私)が近くにいるというのも一つの経験になったかと:-D

締め切り直前に

10月入った段階ではまだ真っ白な状態でそこから本業もやりつつの開発だったので、とにかく時間が足りませんでした。

とくに締め切り直前にCakeMatsuriがあって、さらに私が新型インフルエンザで床に伏すという事態になり、どうなるかと思ったのですが、前途したチーム開発のおかげで無事にリリースすることができました。

リリース時は、布団の中で携帯でサイトを見て、にやにやしていました:-D

しっかりとサービスを構築してくれたスタッフには感謝の気持ちで一杯です。ありがとう!

それほど派手な機能は無いですが、ちょっと便利なWebサービスになっています。登録も簡単なので是非使ってみて下さい。

おでかけくん

CakePHP & PHP & twitter 2009/11/17 10:06

CakePHP日本語情報をつぶやくTwitter botを作りました

TwitterでCakePHP日本語情報をつぶやくbot「@cakephp_jp」を作りました。

cakephp_jp

なんとなく息抜きにTwitter botが作りたいなというのと、そういえばフォーラムへの投稿をTwitterで知りたいな、ということでさくっと作りました。

いまのところ以下のフィードを読んでpostしています。

良かったらfollowして下さい

@cakephp_jpをfollowする。

技術話

大したことは何もしてないのですが、参考に。

PHP

今回はCakePHPは使わずに素のPHPで作っています。後述するTokyoTyrant+TokyoCabinetを使ってますが、他のRDBMSは使ってません。

パパッと作れるのがPHPの利点ですね。

Yahoo! pipes

各フィードを寄せ集めるにはYahoo! pipesを使ってます。今後フィードを追加する際はここにガシガシ追加していくだけでokです。

出力をPHPのシリアライズデータで受け取れるので、unserialize()するだけですぐに連想配列として使えて便利です。

サンプル:$arrayにfeedが連想配列で入る

PHP:
  1. $data = file_get_contents('http://path/to/pipes');
  2. if (!empty($data)) {
  3.   $array = unserialize($data);
  4. }

Pipes: CakePHP-jp

TokyoTyrant + TokyoCabinet + Net_TokyoTyrant

Twitterへのpostがこけた時のリトライ処理用にTokyoTyrant + TokyoCabinetを使ってます。この組み合わせを使った理由は単に使いたかっただけです:-D

PHPからの接続にはPEARライブラリのNet_TokyoTyrantを利用しています。

TokyoCabinet
TokyoTyrant
Net_TokyoTyrant - Openpear

bit.ly

リンク先のURL短縮にはbit.lyを使っています。

QUERY_STRINGで元URLを渡すとJSON or XMLで結果を返してくれるので楽チンです。

bitly-api - Project Hosting on Google Code

CakePHP & event 2009/11/13 15:40

PostgreSQL Conference 2009 Japanで発表してきます

PostgreSQLのイベント「PostgreSQL Conference 2009 Japan」で発表してきます。

イベントは11/20,21の2日間開催されますが、2日目のCommunity Dayで話してきます。

発表時間が「12:05~12:45」という昼ど真ん中な時間帯で、どういうことなんだろ?と思っていたのですが、どうやらランチセッションということで会場内で昼食を取りながら発表を聞くスタイルのようです。

昼食中は食べることと周りにいる人と話すことに夢中で、発表なんか誰も聞いていない気もしたりするのですが、まあそれはそれでなかなか無い機会なので頑張ります:-D
(食べながら発表すれば良いのか!)

技術系の濃い話が多い中、わりと軽めの話なので、お昼を食べながら聞くにはちょうど良いかもしれませんね。

今回は、JPUG 10周年のイベントということで海外からも多くのスピーカーの方が集まっているようですし、国内からも興味深いセッションが目白押しです。長年PostgreSQLを使っていながら、イベントに参加するのは初めてなので、1参加者としてもとても楽しみにしています。

日曜日まで参加申し込みできるようなので、まだの方は下記公式サイトからどうぞ。

PostgreSQL Conference 2009 Japan - JPUG 10th Anniversary Conference -

CakePHP & event 2009/11/06 23:11

CakeMatsuriが盛況のままに終了しました!

2009年国内最大のCakePHPイベント「CakeMatsuri」が盛況のままに終了しました。


photo by iogi

なにはともあれ無事に2日間のイベントが終了したのは、一重に参加してくださった皆さん、協賛頂いた企業様、スピーカーの皆さん、そして海外からお越し頂いたコアデベロッパーのお二人のおかげです。本当にありがとうございました。

そして幾多の困難を共に乗り切ったCakeMatsuri青年団のみんな、本当にお疲れ様でした!

開催から一週間が経ち、ようやく日常に戻ってきた今、運営側の一人として感じたことを5個のキーワードで振り返ってみたいと思います。

交流

今回のテーマは会場でも説明しましたが「交流」でした。これは単に参加者同士の交流だけにとどまらず、スピーカー、スタッフを含めた全員で交流しようということで色々な仕掛けを考えました。

例えば、ワークショップの班。同じテーブルに座った人同士はその日一日ずっと同じ班。だから席替えはナシ。これを発表したのは(そんなことを知らずに)全員が席に座った後のオリエンテーションでのことだったので、戸惑う人もいるかと心配しましたが、その直後の自己紹介からその一日わいわいと盛り上がって、とても良い雰囲気でした。

ワークショップ最後のグループワークでも「班があったから話しやすかった」「教えあえて良かった」といった意見が幾つもあって、これは本当にやってよかったと思います。朝一の見ず知らずの人同士がシーンとしている状況から、班であることを伝えたあとの自己紹介でわいわいとした雰囲気に変わった時は鳥肌が立ちました。素晴らしい:-D

カンファレンスでもランチの時に班にすれば?という意見も頂いたので、これは次回以降に生かしたいと思います。

ワークショップで勢いがついた人が多かったからなのか、カンファレンスランチ、懇親会では積極的に交流している人が目に付きましたね。あとコアデベロッパーのお二人にも色々な人が話をしていて、これも良かったです。

このテーマについては今回は成功と言えると思います。

準備

準備は、、、まあ大変でした:-D

青年団スタッフ全員ロケーションがバラバラだったので、日頃の連絡はMLとSkypeで行いました。リアルで会って相談ができないため、CakeMatsuri準備用にMLで流れていたメールは合計900通(!)となかなか壮絶な日々でした。

準備していて一番大変だったのがリソース不足でした。今回はとにかく色々なリソース(特に人と時間)が不足していたため、結果、参加した皆さんに無理を強いる場面がありました。中でもワークショップで良く聞かれた「環境構築をもっと事前に教えて貰えれば」というのは、全くもってそのとおりでこれは大いに反省すべき点だと痛感しています。

タスク担当は何となく得意というかやりたい箇所をやるという感じでゆるやかに決まっていき、自分はわりとプログラム構成とinfoのメール対応をやることが多かったです。ただ、なにせ人が足りていない状況だったので、気が付いた人がやる、アラートを出す、といった風にお互いに補完し合いながら進めて来ました。

スタッフには、PHPカンファレンスやRuby会議のような幾つもの大型イベントに関わっている者がいたのが大きかったですし、何よりお互いに気が知れているメンツだったので信頼して進めることが出来たのが、少ない人数でなんとか上手くイベントを回せた要因かなと感じています。

ただ次回も同じ規模のイベントを同じスタッフ人数でやると確実に誰か倒れそうなんで、誰か助けて下さい:-D

プログラム

色々な準備がありつつ、今回個人的に力を入れていたプログラム構成について。

まず、ワークショップ。

入門者コースは講師の二人にお任せで。実務者コースはアウトラインだけ考えて、あとは講師の人にお任せでした。入門者コースは一からCakePHPを使うための系統立った内容、実務者コースは実際に開発現場で使うであろう項目を盛り込んだバラエティに富んだ内容というと感じで上手く色分けが出来きました。

ワークショップは特に苦もなくスムーズにはまりました。

次は、カンファレンス。

こちらは色々と予想外な出来事があったりで結構二転三転しました。皆で相談しつつ、結果としては盛りだくさんな内容となりました。ただ午後に一回長めの休憩を入れるなど工夫の余地はまだありましたね。

各セッションの中で私が一押しだったのが、パネルディスカッションでした。実はパネルディスカッションをやるにしても他のテーマで、というアイデアもあったりしたのですが、私が(結構)強引に推して今回のテーマになりました。これはせっかく全国から(海外からも!)CakePHPユーザが集まるのですから、東京以外の地域にもユーザがいて、コミュニティがあるということを知って貰いたいということで企画しました。

登壇頂いたパネラーの皆さん、ありがとうございました。

あとLT希望者が前日、当日で一気に増えたのはとってもとっても嬉しい出来事でしたね!

祭の後

CakeMatsuri後は参加した皆が刺激を受け合ったとあって、Twitterやらguthubやらで賑わいをみせています。

私は、直後に新型インフルエンザにかかってしまい豪快にくじけましたが、回復してきた今、何かをやりたいとメラメラと燃えているところです:-D

さてそんな中でも既に行動されている方がいらっしゃるのでご報告を。

最近CakePHPユーザ界隈で話題の「Croogo」の日本語化に、パネルディスカッションで北海道代表として登壇頂いた@makiesさんが取りかかってらっしゃいます。

Croogoを簡単に説明すると、CakePHPで書かれたオープンソースCMSで、バングラディシュの@fahad19さんが作られているものです。ざっと画面を見ただけなのですが、WordPressに似た操作感で結構良くできています。これがCakePHPで出来ているということで中々興味深いシステムです。

そんな日本語化Croogoはmakiesさんのgithubにて公開されています。これは要チェックですね。

感謝!

最後はこれに尽きますね。

関わった全ての皆さんに感謝感謝です。本当にありがとうございました。

次回は、、、正直まだあまり考えられないのですが、私個人としてはそろそろ関西で何かやりたいなーと思ってます。また皆さんで楽しいイベントをやりましょう!

# blogを書いたので、これでようやく祭が終わりました:-D

CakePHP & event 2009/10/20 15:10

ぼくとわたしのCakePHP

CakeMatsuri応援企画として展開しているリレーブログ「ぼくとわたしのCakePHP」。

きしださんからバトンを受け取ったので、つらつらと。

CakePHPとの出会い

出会いはたしか2006年頃。当時自作PHPフレームワークで開発をしていたのですが、メンテや教育を考えてオープンソースのフレームワークを探していました。

ちょうどRailsブームの頃でRailsライクなフレームワークがボコボコと登場した頃なのですが、当時はPHP4対応が必要だったのであれこれ考えて辿り着いたのがCakePHPでした。正直その頃はCakePHPがここまではやるとは思って無くて、もしCakePHPがダメになってもそのノウハウを持ってRailsに移れば良いかと、いう計算もありました:-D

CakePHPとblog

またタイミングを同じくして、このblogを書き出しました。当時はblogの記事も暗中模索で、日記風なものを書いたり、ニュースサイトネタに反応したり、会社のことを書いたりしてましたね。

そんな中ちょろちょろと反応が貰えるようになったのが、PHPやCakePHPの記事でした。反応が嬉しくてCakePHPを調べて記事を書くー>反応が貰えるー>さらに調べて書く。という循環でCakePHPにも詳しくなり、blogエントリも増えていきました。

その頃はCakePHP1.1.Xの頃で、日本語情報自体が少なかったですし、Cake自体もまだ未完成だったのでネタが書きやすかったのもありましたね。

CakePHPと人

パラパラとblogにアクセスが増えてきたおかげで多くの人と出会いがありました。特にPHP関連ではshimookaさん、そしてCakePHP関連では堂園さん安藤さんとの出会いは今振り返ってみてもとても大きなものでした。

人との縁がさらに多くの人の縁を生んで、さらに大きな縁になっていく。こういった経験は仕事外では初めて経験するもので、オープンソースコミュニティならではのものだなと感じています。こうしてあらためて振り返ると、とても不思議なそして温かい気持ちが湧いてきます。

CakePHPと本

こうした人との出会いは本の執筆という想像もしなかった経験をもたらします。それが「CakePHPガイドブック」です。堂園さん、安藤さんとこの書籍が出せたことは大きな自信になりましたし、同時にblogとは違う「執筆に対する責任」を生の感覚として感じることにもなりました。

その後、計3冊の執筆に携わるわけですが、これも読んで頂いた皆さんがいるおかげで、とても感謝しています。ありがとうございます。

CakePHPと勉強会

CakePHPガイドブックが登場後、CakePHP勉強会が開始します。ここからコミュニティ活動により深く関わっていきます。それまでは、勉強会に参加するだけで精一杯で、発表なんてとんでもないという状態だった自分が、発表をして、司会として、運営をしてとなっていくわけです。

今となれば、どれも一部の特別な人だけができるというものではなく、やる気さえあれば普通の人が普通にできることだと思っています(準備は大変ですけどね><)。ただ自分が関わっていない時の、あの別世界な人を見るような想いも覚えているので、当時の自分が数年後こうなっているというのは想像できなかったでしょうね。

CakeMatsuri

さてそんなわけで10/30、31にはCakeMatsuriが開催されます。

今年のテーマは一言で言うと「交流」です。誤解を恐れずに言うとワークショップもカンファレンスも全てここに繋がるための仕掛けだと考えています。

自分が経験したように人との出会いを通じて、何かが繋がっていく、何かを伝えられる、自己実現ができるというような事が、多くの人に起これば良いなと思い、日々準備を進めているところです。

10/30のワークショップは残念ながら受付終了となっていますが、10/31のカンファレンスは参加者募集中です。カンファレンスはこの「交流」をより意識した内容なので、まだの方は是非ご参加下さい。(ランチと懇親会がセットになっているのはこういった理由です。)

CakeMatsuriでの出会いによって、どのような変化が起こるか私自身も楽しみにしています。みんなで盛り上げていきましょう!

明日のリレーブログはcakephperさんです。お楽しみに:-D

matsurigreen

CakePHP & event 2009/10/08 12:22

CakeMatsuriにまつわる7つの疑問

昨年のCakePHPカンファレンスに続いて今年もCakePHPの一大イベントが開催されます。

matsurigreen

国内では2回目のCakePHPカンファレンスとなるのですが、今年は装いを一新してイベント名が「CakeMatsuri」(Cake祭)となりました。

今年の特徴は何と言っても2日開催となったことでしょうか。

ハンズオン形式でCakePHPについて学ぶワークショップ(10/30)と昨年同様、従来型の発表を聞くカンファレンス(10/31)の2日開催です。両日共に濃い内容になるべくスタッフみんなで準備を進めているところです。

そんなCakeMatsuriなのですが、ちょっと変わった名前のせいか疑問を持たれる方も多いかと思います。そこで、私見ながらざっくりと疑問にお答えしましょう。

Q1. CakeMatsuriって何?

A. PHPフレームワークCakePHPのイベントだよ。

10/30,31の2日開催で、会場は東京だよ。詳細は公式サイトで確認してみてね。

ホイップクリームかき回すようなスイーツなイベントじゃないから注意してね:-D

Q2. 何をするの?

A. CakePHPをテーマにみんなで楽しむイベントだよ。

1日目はワークショップ。講義形式でCakePHPのスキルアップを目指す内容になってる。講師は、CakePHPをバリバリ実務でつかっていたり、blogを書いていたり、勉強会で発表していたり、本を書いてたりしてる面々。とにかくCakePHPが好きな人たちだから、きっとあなたの役に立つ内容になると思う。

コースも入門者用、実務者用、英語用と3コースがあるから、自分のレベルに合わせて参加するコースを選ぶことができるよ。

2日目はカンファレンス。PHPカンファレンスみたいな感じで色々なスピーカーからの発表を聞けるよ。目玉はやっぱりCakePHPコアデベロッパーからの発表!他にも豪華なスピーカーの方々からの発表はもちろん、事例紹介やパネルディスカッション、LTと盛りだくさんな内容になってる。

CakePHPに興味あるなら来るしかないでしょ:-D

Q3. なんで「祭」なの?

A. 祭みたいにみんなで盛り上がりたい!

海外で行われているCakePHPのイベントがCakeFestという名前だから、日本風にアレンジしたら「祭」かな、というのが出発点。

もともと開催側、発表者、参加者といった垣根を越えて、その場にいるみんなで盛り上がりたい、という想いを皆が持っていたから、「祭」はまさにピッタリなわけ。

だから運営する僕らも運営事務局じゃなくて「青年団」なんだよ。

祭だから皆で神輿担いで「わっしょい、わっしょい」だね。

Q4. なんで有料なの?

A. もっと良いイベントにしたいから!

参加費はワークショップが10,500円、カンファレンスが8,925円(二日通し券で19,425円)。実はこれほとんどが会場費や飲食費、機材等々の経費なんだよ。

カンファレンスの費用が分かりやすいと思うんだけど、8,925円にはランチ(1,000円相当)と懇親会費用(5,250円)が含まれていて、カンファレンス自体は実は2,625 円だけ。ここから会場費やら機材費、あと海外からのスピーカーがいるので通訳さんを手配したり等々となると実は結構ギリギリな感じで、準備してる僕らは中々スリリングな毎日なんだけど、それはまあ別の話で:-D

祭なのでカンファレンスを行った会場でそのままランチを食べて、懇親会もやりたい。ほら、祭の日って神輿担いだ後、みんなでお酒飲んだりご飯食べたりして盛り上がるじゃない。せっかくCakePHPをテーマにみんなが全国各地(海外からも)集まるんだから、あの雰囲気でみんなで楽しみたいなーと。

ワークショップもほとんどが経費。カンファレンスより高いのは単純に人数が少ないからだよ。(場所とか機材とかは人数関係無いので。。。)実は講師陣はみんな手弁当だったり。

と、あんまり内幕を書くと怒られそうだからこのへんで。とにかく参加費以上のものは持って帰られると思うから大丈夫:-D

Q5. 祭なんだったら僕(私)も話したい!

A. もちろん大歓迎!

カンファレンスではライトニングトークコーナーがあるよ。テーマはCakePHPに関するものなら何でもok。技術ネタはもちろん、事例紹介で良いし、デザインでもビジネスでもCakePHPが絡んでいれば問題無し!

CakeMatsuriサイトで募集中だから、どんどん申し込んでね。

Q6. 参加したいんだけど、どうすれば良いの?

A. CakeMatsuriサイトから申し込みしてね。

申し込む時はまずCakeMatsuriサイトでユーザ登録が必要だから注意してね。あと参加費用の支払いにはpaypalを使ってるから、paypalユーザの人はログイン情報を用意しておいてね。(paypalユーザじゃなくても支払いはokだよ)

もし申し込みで分からないことがあれば、ドンドン青年団に聞いてみてね。

Q7. どうやって聞けば良いの?

A. メールかTwitterでどうぞ。

もし何か聞きたいことがあれば、メールなら info [at] matsuri.cakephp.jp、Twitterなら#cakematsuriのハッシュタグを付けてつぶやいてみてね。

というわけで

青年団一同絶賛準備中で大わらわな感じですが、CakePHPユーザが一同に会するこの場がより良いものになるようにと頑張っているところです。ぜひ皆さんのご参加をお待ちしています。

10/30,31は、シダックスホールに集まりましょー。

次ページへ »