November 23, 2013

PHPMDの設定(XML)メモ

PHPMD
http://phpmd.org/

PHPMDは使用するルールをxmlで設定できます。
$ phpmd app/ text phpmd.xml
以下のxmlだと cleancode, codesize, controversial, design, naming, unusedcode と、一通りのルールが適用されます。
<?xml version="1.0" encoding="UTF-8"?>
<ruleset>
    <rule ref="rulesets/cleancode.xml">
    </rule>

    <rule ref="rulesets/codesize.xml">
    </rule>

    <rule ref="rulesets/controversial.xml">
    </rule>

    <rule ref="rulesets/design.xml">
    </rule>

    <rule ref="rulesets/naming.xml">
    </rule>

    <rule ref="rulesets/unusedcode.xml">
    </rule>
</ruleset>
"exclude"で各ルールのチェックを一部除外する事ができます。
<rule ref="rulesets/naming.xml">
    <exclude name="ShortVariable" />
    <exclude name="ShortMethodName" />
</rule>
各ルールのチェックの設定値を変更する場合はとりあえず"exclude"して、別途指定するのが良いでしょうか。
<rule ref="rulesets/codesize.xml">
    <exclude name="TooManyMethods" />
</rule>
<rule ref="rulesets/codesize.xml/TooManyMethods">
    <properties>
        <property name="maxmethods" value="15" />
    </properties>
</rule>
といった感じのメモでした。

PHPの開発に便利なツールの一括インストールツール

最近ブログを放置気味だったので、大したものではないですが、紹介です。

以前、phingとかphpmdとかその他いろいろ調べていたんですが、インストールにpearを使っていました。今はそれら全てcomposerでインストールできるようだったので、一括してインストールするツールを作ってみました。(結構前に。。。)

レポジトリは https://github.com/mp-php/phpdev-tools です。

以下の方法でインストールできます。
$ git clone https://github.com/mp-php/phpdev-tools.git
$ cd phpdev-tools/
$ php composer.phar install
以下の各ファイルに対して /usr/local/bin とかからリンクを貼るのが楽かなと思います。
$ ls vendor/bin/
apigen.php phing  phpcpd  phpdcd  phpmd
pdepend  php-cs-fixer phpcs  phploc  phpunit

November 7, 2013

Android StudioでAndroidライブラリプロジェクトを読み込むメモ

メモです。

1. Androidライブラリプロジェクトを読み込む
file > Project Structure > Modules > +ボタンで"Import Module"を選択 > Androidライブラリプロジェクトのディレクトリを選択

2. 依存関係を設定する
メインプロジェクトのDependenciesで左下の+ボタンで"Module Dependency"を選択 > 先ほどのAndroidライブラリプロジェクトを選択


November 2, 2013

gearmanのキューをクリアするコマンドメモ

メモです。
$ gearman  -t 1000 -n -w -f [job_name] > /dev/null
みたいな感じで、gearmanのキューをクリア出来ました。

Ubuntu13.04にPECLのgearmanパッケージをインストールして簡単なサンプルを実行してみる

Gearman公式
http://gearman.org/

PECL :: Package :: gearman
http://pecl.php.net/package/gearman

PHP: Gearman - Manual
http://us3.php.net/gearman

1. 必要なパッケージをインストールします。
# Gearman Job Serverがリモートならlibgearman-devのみで良いかもしれません。
$ sudo apt-get -y install gearman libgearman-dev

$ sudo pecl install gearman-1.0.3
PECLのgearmanパッケージを最新バージョン(今日現在で1.1.2)でインストールしようとすると、libgearmanのバージョンとの関係で以下のエラーが出ました。
configure: error: libgearman version 1.1.0 or later required
このエラーはgearman-1.1.0をインストールすれば解決出来ましたが、更に以下のエラーが出たのでgearman-1.0.3にしています。
http://www.phamviet.net/2012/10/10/ubuntu-php-5-4-x-and-gearman-troubleshooting/
(ホントは頑張って最新にすべきなのかもしれませんが、とりあえず。。。)

コマンドから使用されるphp.iniに以下を追記します。
extension=gearman.so
Gearman Job Serverを起動してステータスを確認してみます。
$ sudo gearmand -d
$ gearadmin --status
.
何のジョブもないので、ドットが一つ表示されるだけです。



2. ジョブを実行するworker.phpを作成します。
<?php

// GearmanWorkerのインスタンスを作成します。
$worker = new GearmanWorker();

// 第一引数はホスト(デフォルト127.0.0.1)、第二引数はポート(デフォルト4730)です。
$worker->addServer();

// ジョブ名とコールバック関数を対にして登録します。
// $countは動作確認のために渡しています。
$count = 0;
$worker->addFunction('my_first_job', 'callback_function', $count);

// 無限ループで常駐させます。
while ($worker->work());

// "my_first_job"に対するコールバック関数です。
function callback_function(GearmanJob $job, &$count)
{
    $data = json_decode($job->workload());
    $count++;
    return "Hello {$data->name}! You have visited {$count} times.";
}
起動します。
$ php worker.php
別のコンソールでGearman Job Serverのステータスを確認すると、"my_first_job"に対する1つのワーカー(右端の数値)が確認できます。
$ gearadmin --status
my_first_job 0 0 1
.
各数値は左から順に"未実行タスク"、"実行中タスク"、"ワーカー数"。らしいです。

尚、ワーカーを永続化するには、Supervisorあたりが良いでしょうか。
http://supervisord.org/



3. ジョブを登録するclient.phpを作成します。
<?php

// GearmanClientのインスタンスを作成します。
$client = new GearmanClient();

// 第一引数はホスト(デフォルト127.0.0.1)、第二引数はポート(デフォルト4730)です。
$client->addServer();

// ジョブ名とパラメータを対にして登録します。
$result = $client->do('my_first_job', '{"name":"mamor"}');

// 結果をコンソールに出力します。
echo $result.PHP_EOL;
3回ほど実行してみます。
$ php client.php
Hello mamor! You have visited 1 times.
$ php client.php
Hello mamor! You have visited 2 times.
$ php client.php
Hello mamor! You have visited 3 times.
尚、結果を待つ必要がないジョブの場合、GearmanClientのdo()ではなくdoBackground()でバックグラウンド実行ができるっぽいです。
http://www.php.net/manual/en/gearmanclient.dobackground.php