1月 30

phpでtwitterにつぶやく。(”Services/Twitter.php”)


今日はphpでtwitterに呟く方法を書く。
twitterはapiで呟けるが、phpにはpearに(Services/Twitter.php)という便利なモジュールがあるので、
今回はそれを使う。細かい使い方はココが詳しい。
まずは.pearの"Services/Twitter.php"が無いと話にならない。インストール。

  pear install --alldeps -f http://labs.transrain.net/files/Services_Twitter-0.4.0.tgz

以下は呟くときのサンプルソース。ID,Password,呟きたい内容を引数に渡せば勝手に呟いてくれる関数だ。
140文字を超えている場合は135文字に切って「...」をつけてくれる。
*phpインストール時に"--enable-mbstring"オプションがないと、140文字の部分が動かないかも。

  public static function tweet($id = null , $pass = null ,  $tweet )
  {
    //ServicesTwitterの読み込み。
    require_once "Services/Twitter.php";

    //140文字を超えていたら、135文字で切って...をつける。
    if(mb_strlen($tweet)> 140 )
    {
      $tweet = mb_substr( $tweet , 0 , 135 );
      $tweet .= "... ";
    }

    $st =& new Services_Twitter( $id , $pass );
    $st->setUpdate($tweet);
  }

あとは、呼び出し側で、

self::tweet("morinoyume" , "morinoyume" , "森の夢だよーん")

とでもやれば、morinoyumeアカウントに呟かれるだろう。
twitterのAPI簡単だね。もっと勉強していきます!

written by YSU \\ tags: , ,

1月 26

symfony1.0はバッチファイルを作って、symfonyをイニシャライズして、コマンドを実行するというものであった。
symfony1.2からはバッチ処理はsymfonyのタスクで行うことになっている。
1.0ユーザーの私は困惑したので、記事にしておく。

今回はターミナルに「Hello World」を表示する簡単なタスクを作ってみることにする。

まずは、ベースとなるタスクの作成。

symfony generate:task helloworld

すると、lib/task/helloworldTask.class.php
というファイルができるので、

$this->namespace        = 'batch';
$this->name             = 'helloworld';

と適当にnamespaceとnameをふっておく。

// add your code here
echo "Hello World!!";

そして、add youre code hereの部分に上記のように記述。
あとは、タスクで実行するだけ。

symfony batch:helloworld
>Hello World!!

symfonyコマンドでバッチ処理ができている。
なんか素敵♪

written by YSU \\ tags: ,

1月 20

今日はエラー系の投稿。
phpでバッチを作成していた際にコマンドラインの引数が渡らないというお話。
phpのコマンドライン引数についてはこちらを参照。

test.php

<?php
echo $argv[1];
?>

例えば、上記スクリプトの場合

php test.php "Hello World!"

と入力すれば、「Hello World!」とターミナルに出力されるはずである。
しかし、

PHP Notice: Undefined variable: argv

となってしまい、argvそのものが定義されていないようだ・・・。
原因はphp.ini。

register_argc_argv = Off

となっていたら

register_argc_argv = On

としよう。これで解決。
以外と日本語のドキュメントがなかったので、残しておく。

written by YSU \\ tags:

1月 18

基本的に私はPHPで開発するときはSymfonyだが、今回Ethnaを入れてみた。
今回はそのEthnaについて思いのまま書いてみる。
基本的にはココを見れば一通りのドキュメントがそろっているので、
そちらを見たほうがよいだろう。

Ethnaとは

Ethna(えすな)とは、Greeが開発した和製のPHPフレームワークである。
日本でPHPフレームワークといったら、Cake , Symfony , Zendなんかがポピュラーだが、Ethnaはそれに続く立ち位置だと思う。
和製PHPフレームワークとしては、一番使われていると思われる。もちろんGREEもEthnaを使ってできている。

Ethnaをインストール

インストールはPearでサクッと入る。

pear channel-discover pear.ethna.jp
pear update-channels
pear install -a ethna/ethna

上記コマンドで打ったら

/usr/share/pear

以下にEthnaのソースが展開されたので、ここにphpのパスを通しておく必要がある。
php.iniに以下を追加。

include_path=".:/usr/share/pear"

ethnaが入っているか確認

ethna -v
Ethna 2.5.0 (using PHP 5.2.9)

Ethnaを使ってみて思った全体感

まず思ったことは、フレームワークはやりのMVCがしっかりしている。
公式ドキュメントを見ても分かるが、
コントローラーやアクションに余計なものは書かないように推奨されている。(アクションに200行以上書いちゃだめとか)
逆に言うと、MVCって何?的な人がEthnaを使えばMVCってのが何となく理解できるのではないだろうか。

Ethnaのテンプレートエンジン Smarty

Ethnaの特徴の一つは、テンプレートエンジンとしてsmartyを採用している。
また、バリデート時のエラーメッセージやformのデフォルト値、viewオブジェクトでセットした値が非常にアクセスしやすくなっている。
さらに、ユーザーが入力したform値に関してはデフォルトでエスケープ処理がされているという便利設計。
しかし、ヘッダー、フッターを都度かからなければならずsymfonyのlayout.phpみたいな便利な機能がない。
ヘッダー、フッターのインクルードファイルを作るほかないだろう。

Ethnaの文字コード

当初はEUC-JPがデフォルトだったが、最新版ではUTF-8がデフォルト。
やはりUTF-8がよい。

EthnaのDB接続

メインはPEAR::DBを継承したEthna_DB_PEARを使っている。
whileでresultセットを回して、1件、1件fetchする感じ。
直感的にSQLをかけるのは良い。
便利なことに、マスター用の接続、スレーブ用の接続(複数セットした場合は自動で振分け機能付き)など色々な接続を簡単に設定できる。

一応、O/Rマッパーも独自で実装されている。
ぱっと見は使いやすそうだが、やはりSymfonyのマッパー等にくらべると少々弱い感じがする・・・。
オブジェクトの配列を一気に取得して、がんがん回して、がんがんセットしていきたい。見た目、一つずつしか取得できない?
ただ、webのform値を一気にimport(set)できるのは便利そう!スクリプトが綺麗になる。

コレは便利formについて

チュートリアルをサクッと見ると、すごく便利に見えたのはformについて。
formのバリデートはそれ専用に書くところがあるし、エラーハンドリングやエラーメッセージもテンプレート側でsmartyを使ってアクセスしやすい。またエラー時にvalue値としてformの値をセットするが、デフォルトでエスケープされている。
また、バリーデート済みのform値はO/Rマッパーを使用してそのままオブジェクトにset->updateできる。

symfonyにも同様の機能があるが、こちらの方がテンプレートも自由にかける等少しライトに実装されており、つかいやすそう。

Ethnaのパフォーマンス

symfonyとethnaで「Hello World」を出力するアプリを作ってみて、各10回計測し、それの平均値をもとめてみた。

  • Ethna : 0.0724179
  • Symfony : 0.0970384

すくなくともsymfonyより早いので問題ないでしょう。symfonyが重すぎ・・・。
あとはDB接続周りに依存するでしょうね。

まとめ

とりあえず思ったことは、EthnaはライトなWebアプリケーションを作るのにはすごく向いているなと思う。
また、全体的に分かりやすいので習得コストもそれほどかからないだろう。
ただし、Symfonyなどと比べるとやはり機能が少ない(symfonyが多すぎ)。
もし、大規模なアプリケーションを開発するのであれば、EthnaではなくSymfonyなどを検討してみても良いと思う。

written by YSU \\ tags: ,

1月 17

新年明けましておめでとうございます!(遅っ)
今年も、森の夢ブログがんばっていきます。

新年一発目のブログは今年の目標!!
(読み物的にはまったくつまらないものだけど、公言することに意味があるとおもってます・・・)

目標1:事業のリーダーになる。

まず、第一に掲げたいのが仕事面で達成したいこの目標。
エンジニアとしてもまだまだ成長しないといけない部分があるが、ビジネスができるエンジニアになりたい。
どんなに小さなプロジェクトでもいい。
自分が主体となって、ビジネスをする経験がなければこの時代生きていけないと思う。

目標2:何かサイトをつくる

これは去年できなかった目標。今年は仕事とは別に何かサイトを作りたい!
まだ、アィディアがあるわけでは無いが、自分自身で自由に企画・運営のできるサービスを立ち上げたい。
儲かるかどうか、人が集まるかどうかはともかく自分1人の力で世の中にサービスが提供できることに意味がある。
かといって、考えることを放棄してはだめ。少しでも人が集まってくるようなサービスを作る。

目標3:IT勉強会への出席

私もそろそろ25歳・・・。社会人になってから2年半くらいたつが、
まだまだエンジニアとしても成長しなければならない、さらなる高みを目指すためにはできるだけ多くのエンジニアに出会って、色々な刺激を受ける必要がある。
先輩だけに色々教えてもらうのは卒業し、自分自身で成長のフィールドを広げなければならない時期だと思う。

目標4:英語

  • 異文化交流を活発化する
  • 技術のドキュメントもできるだけ英語で読む
  • TOEIC800点を目指す!

上記3点!がんばるぞー

目標5:投資

今年も1銘柄買う。まだ買い時。

目標6:ジギングを極める

今年の釣りのメインはジギングです。
絶対にワラサを釣ってやります!

目標7:あとまわしにしない。めんどくさがらない

最近、あとまわしにしたり、めんどくさがることが多い・・・
あとまわしにしない2010年。
めんどくさがらない2010年。

まとめ

仕事面の①、技術面の②・③、その他スキルの面④、プライベートの⑤・⑥、行動規範の⑦
今年もやりごたえのある目標がたった。
2010年もがんばります!!

written by YSU \\ tags: ,