第50回 PHP勉強会に参加するなど

放置ブログですが、記事を書く雰囲気なのでとりあえず記事を作るのである。

昨日、記念すべき第50回PHP勉強会@関東が開催されました!
大学が春休み・興味のある話・完全なるノリってことで
勢いで参加して、ついでにLTなどやってみることにしました。

会場を用意してくださった、コンテンツワンさまに感謝であります。

超簡素ですが、まとめ

mixiアプリについて(Weboo!)

Ustで配信をしていなかったし、mixiとパートナーなやつを結ばないと
見れない情報が出ていたりした(?)っぽいので何処までが、
セフセフでどっからがアウアウ!なのか良く解らん!ってことで
とりあえず保留。

個人的にmixiアプリは、とりあえずPC版にて小物(なアレアプリを)作るつもり。
(もちろんOpenPNEでもすぐ使えるようなアプリを作るつもりである)

PHPでWEB開発を行うようにしてオープンソーシャルアプリを作る(KuniTsuji)

モバイル版は従来のWebサイトのような感じでおk!ってことだが、
PC版はそういかんってこと。PC版はJavaScriptが唸ってdivにどーん!

運用した気になるモバイルオープンソーシャル (個々一番)

大変濃厚な内容で、不勉強な部分はUstを見直したりしてなんとかしたいと思ったところ。
特に負荷分散周りのスキルが自分には足りてないなーっと思ったわけです。

まちつく!の事例。mixiみたいにたくさん人がいるSNSでやるとすれば、
いかに臨機応変に出来るかが重要な予感。

OpenSocialはトラッフィック対策で甘えが許されない」

あと、「愛され系ゆるふわコーディング」という言葉を覚えた。
許されるのならば、明日から使わせていただくことにします。

懇親会・LTなど

懇親会、LT出ました!

なんというか、50回記念な人の多さ?ほんぎゃ〜といったことろでした。
刺激的な話などもできてなかなか楽しかったです。

あとLTでちょっとお話をさせていただきあました。
ちょっと、手直ししてスライドはアップするつもりです。
内容は私がリードメンテナーをつとめているopOpenSocialPluginの話。

もっと軽い内容にすればよかったかもしれないと思いつつも、
みなさんの脳みその片隅に、ちょこっとだけでもオープンソースSNSプラットフォームの
「OpenPNE3」と、それでOpenSocialを対応するための「opOpenSocialPlugin」があるよ〜
っていうのがちょっとでも残ってくれれば嬉しいかもしれない。

まだまだヒヨッコなので、今後もLTかなにかを積極的にやろうと思いますよ。
次回以降は、symfonyソースコード探検あわわ噺とか、
PHPShindigのウヒヒ噺とか、PHP自体のソースコードでグヘヘ噺とかできれば
いいかな〜と思ってます。

話を聞いてくれた人は本当にありがとうございました。
そして、お疲れ様でした!

今日は開発者ではなく、大学生をやりますw
その他
今日は1日中、腹が痛かった。前日スーパーの半額な肉を焼いて食べたせいかもしれない。
早く映画のタイトルの一部をコマンドーに置き換えて台無しにするTwitterボット作りたい。

BaseFormで確認画面用メソッドを作る妄想

たとえば、確認画面を必要とするAFormがあったとする。確認画面では、入力画面のポストの内容をinput (type=hidden)として埋め込むとする。

いろいろ方法はありそうだけど、せっかくなので確認画面のテンプレートで <?php echo $form ?> とかで手短に済ましてしまいたいと思ったわけですよ。

だからBaseFormつかうお!!

BaseFormはsymfony1.3/1.4からの新機能です。今までFormクラスの親にするものといえばsfFormでしたが、今はプロジェクト独自の親Formクラスが用意されていて、そいつがBaseFormです。さらに、こいつの親はsfSymfonyFormといって、イベント処理などをやっているっぽいですよ。

ここに何だかメソッド書いて、BaseFormを親とするクラスつくれば、使い回し放題なわけですよ。

んで、とりあえずウィジェットを全部sfWidgetFromInputHiddenにするメソッドなど書いてみた

BaseForm.class.php

class BaseForm extends sfFormSymfony
{
  public function configureConfirmForm()
  {
    foreach ($this as $name => $formField)
    {   
      $this->widgetSchema[$name] = new sfWidgetFormInputHidden();
    }   
  }
}

使うときは、こんな雰囲気。
(アクション内)

  public function executeなんやらかんやら(sfWebRequest $request)
  {
    $this->form = new なんやらかんやらForm();

    if ($request->isMethod(sfWebRequest::POST))
    {   
      $this->form->bind($request->getParameter('値'));
      if ($this->form->isValid())
      {   
        if ($request->getParameter('confirm'))
        {   
          // 確認画面では confirm=1 などにしておくとか・・・
          reutrn sfView::SUCCESS;
        }   
        else
        {   
          $this->form->configureConfirmForm();
          return 'Confirm';
        }   
      }   
    }
    return sfView::INPUT;

う〜ぬ。どうだろう。一応、フォームウィジェットが全部hiddenになってくれた。
ただ、画像とかの保存は、これでは対応できないか。

とりえあず、BaseFormいいね。

Macにした

MacBookProにしたんだよ。

ということで、開発に必要な環境などをそろえていった訳ですが
今起きている問題などをまとめている。

解決策があれば、教えてください集でもあったりする。

Mac OS X Version 10.6.2のようです。

  • F8でSpacesが動かないことがある
    • 不具合らしい。killall Dockで治るらしいけど、超めんどい。
  • Firefox3.5.5上のFlash Player上でクリックするとメニューがでてきてクリックできない場合がある。
    • 謎。大変不便。同じような問題に陥っている人が探しても見つからない。アドオン全部切っても再現する。
  • ATOKでは、iChatの入力ができない場合がある。

これ以外は、今のところ不便していることはない。

あえて言えば、僕はhttp://www.geocities.jp/teamhasebe/download/software/tvclock/index.htmを愛用していたので、これはクローン作っちゃうか!という気分になっている。

PHPで日本語形態素解析をがんばる

ども〜

なんか、いろいろ実験してみたくなったのでインストールの手順まとめ。

Debianでやってます。

日本語形態素解析につかうエンジンは、案の定MeCabを使います。ちなみに、食べ物としての和布蕪はあまり得意ではないよ。

とりあえず、上記サイトからブツを落としてきて展開後

$ ./configure --with-charset=utf8
$ make
# make install

エンコーディングについてゴニョゴニョやるのをお忘れ無く

さらに、同じく上記においてあるIPAの辞書ファイルをダウンロードしてインストールします。

SourceForgemecab-ipadicっていう階層の中にいらっしゃいますよ。

$ ./configure --with-charaset=utf8
$ make
# make install

やっぱり、エンコーディングのオプション指定はいるようだよ。

んでもって、ちゃんとインスコできたかテストだよ。

$ mecab
肉まんが食べたい
肉まん  名詞,一般,*,*,*,*,肉まん,ニクマン,ニクマン
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
食べ    動詞,自立,*,*,一段,連用形,食べる,タベ,タベ
たい    助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ
EOS

おぉ。最高のショーだとはおもわんかね?

ここまできたが実は、perlrubypythonJavaやらはこのすばらしいエンジンを使うためのモノが公式(?)で用意されているのだが、PHPにはナーイ。
でも、必要があれば自然発生するのか、やっぱりPHPに対応させるヤツがありますよ。

http://d.hatena.ne.jp/rsky/20071228/1198841049

すばらしい!

ってことで、インストール

の前に、開発パッケージがいるってさ。

$ sudo apt-get install php5-dev

んで、落としてきて解凍後

$ phpize
$ ./configure --with-php-config=/usr/bin/php-config --with-mecab=/usr/local/bin/mecab-config
$ make
# make install

そして、/etc/php5/conf.d/mecab.ini を作成して

extension=mecab.so

と一言。

これで、

<?php
$t = new MeCab_Tagger();
echo $t->parse('そこではきものをぬいでください');

な、スクリプトを走らせると

そこ    名詞,代名詞,一般,*,*,*,そこ,ソコ,ソコ
で      助詞,格助詞,一般,*,*,*,で,デ,デ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
きもの  名詞,一般,*,*,*,*,きもの,キモノ,キモノ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
ぬい    動詞,自立,*,*,五段・ガ行,連用タ接続,ぬぐ,ヌイ,ヌイ
で      助詞,接続助詞,*,*,*,*,で,デ,デ
ください        動詞,非自立,*,*,五段・ラ行特殊,命令i,くださる,クダサイ,クダサイ

なんとも、アレな感じに出力されれば大成功のようです。

単に日本語の単語分割がしたかっただけなので

var_dump(mecab_split("ここではきものをぬいでください"));

こんな感じで、

array(8) {
  [0]=>
  string(6) "そこ"
  [1]=>
  string(3) "で"
  [2]=>
  string(3) "は"
  [3]=>
  string(9) "きもの"
  [4]=>
  string(3) "を"
  [5]=>
  string(6) "ぬい"
  [6]=>
  string(3) "で"
  [7]=>
  string(12) "ください"
}

こうなるよ。

sfDoctrineBaseTaskでちょっと気をつけること

sfDoctrineBaseTask継承により、データベースを操作するタスクを作れるけど、
特に configure() メソッドに何も書かないと
テスト環境のDBを設定している場合、テスト環境上のDBを操作してしまう。

理由は、sfBaseTaskでは、特に何もしない限り環境を test としている。
アプリケーションも同様で、特に何も指定しないと null となる。

これでは、タスク実行中に

new sfDatabaseManager($this->configuration);

としても、テスト環境のほうのDBを見に行ってしまうようだ。
そこで、configure() に

$this->addOption('application', null, sfCommandOption::PARAMETER_OPTIONAL, 'The application', true);
$this->addOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev');

とすることで、アプリケーションや環境を別の物にしたり、
デフォルトを変更することができるようだ。

OpenPNE3のリポジトリがSubversionからgithubへお引っ越ししたようです

OpenPNE3(現在のところ正確には3.1.x)のリポジトリ
OpenPNE Project運営側が用意しているSubversionサーバから、githubへお引っ越ししました。

理由はOpenPNEのMLなどを見ていただけるとよいかもです。

Google グループ
Google グループ

というわけで、今までSubversionでしか開発したことないです><とか、
ひとまず、最新の状態見たいんだけど!!

って人のために、解説してみるです。

開発環境はDebianで解説しています。

git-coreインストール

$ sudo apt-get install git-core

これだけっぽいです。

githubに登録〜gitの設定

開発をお手伝いしたい!というときはこの動作を行う必要があります。

Pricing and Signupというリンクが上の方にあるかと思いますので、
そこから登録しちゃいます。

そうすると、いろいろなプランが提示されると思います。

もし、github上で、外部公開しないリポジトリを借りたーいとか、
俺は300MB以上使うんだ!!!とか、思わなければ、
Freeなやつでかまいません。

登録時に、SSH Public Keyを求められるのは、変更をリポジトリにアップするときに、
パスワードを使うのではなく公開鍵を使うからです。
Connecting to GitHub with SSH - GitHub Help

ここを参考にして鍵をつくり、id_rsa.pubの中身をそのままコピペします。

そして、ちょい基本設定

$ git config --global user.name 'Shogo Kawahara'
$ git config --global user.email '登録したやつ@example.com'

フォーク

Subversionの考えかたと、大きく異なるのは、ここだとおもいます。
今までは、1つの本線を、いろんな人が直接いじっている状態でした。
gitは分散型なので、自分専用のコピーを作って
それをいじって、バグ直しましたよ〜適用してよ〜っていうリクエストを本家のほうに出します。

githubでは、それをめちゃくちゃ簡単にできちゃいます。感激ものです。

GitHub - openpne/OpenPNE3: OpenPNE is a social network platform

このページが本線のページなのですが、ここにforkというボタンがあります。

思い切って押します。そうすると、githubのホームの右側のYour Repositoriesってことろに
自分専用のOpenPNEリポジトリーができあがります!

クローン

できあがったのは良いとして、それの作業コピーがほしくなってきました。
自分のリポジトリのページに行きます。

なにやら、Public Clone URL と Private Clone URLがありますね。
Public Clone URLは、そのリポジトリを更新することができない作業コピーURLです。
そして、Private Clone URLはリポジトリを更新することができます。

この画面で、urlをクリックするとコマンドごと出てくれます。ありがたいですね。

$ git clone git@github.com:○○○/OpenPNE3.git

これで、OpenPNE3というディレクトリが自分の作業コピーになります。

svn checkoutのように、指定ディレクトリに作業コピーをクローンしたい場合は

$ git clone git@github.com:○○○/OpenPNE3.git OpenPNE_git

のようにします。

ちなみに、本家を追いたいだけならば、GitHub - openpne/OpenPNE3: OpenPNE is a social network platformのPublic Clone URLでクローンすればいいわけです。

自分のリポジトリで本家を追う

OpenPNE Projectの本家としているレポジトリと、自分のレポジトリは枝分かれはしたものの別物なので、更新しないと、どんとん置いてけぼりになってしまいます。

本家リポジトリからpullする必要があるわけです。

まずは、事前準備。(ここからの作業は作業ディレクトリ内で)

$ git remote add openpne git://github.com/openpne/OpenPNE3.git

と、本家側をリモートリポジトリとして追加します。

本家側の変更を引っ張ってきます。

$ git pull openpne master

これで、更新が完了。

その内容を、自分のリポジトリに適用します。

$ git push

ぬるぽ

きっとgitの共同開発まわりは、http://www8.atwiki.jp/git_jp/や、http://at-aka.blogspot.com/2008/09/git.htmlのほうが、わかりやすいかもです。

間違いがあったら全力でご

次の投稿で自分のリポジトリでバグ修正をして、本家側に取り込みを要求するまでやってみます。