タグ

ブックマーク / anatoo.hatenablog.com (5)

  • JavaScriptでパーサコンビネータのコンセプトを理解する(「正規表現だけに頼ってはいけない」の続き) - id:anatooのブログ

    前回の記事の続き。前回は、正規表現が使えない時はパーサコンビネータを使ってみると良いということを書いた。 パーサコンビネータのためのライブラリは、以下のように各言語ごとにいくつかある。 JavaScript - Parsimmon Ruby - rparsec treetop Python - parsy PHP - PHPPEG 各言語でいくつかあるのだが、正規表現と違ってパーサコンビネータには統一的な書き方があるわけではないし、ライブラリによって使い方も様々である。なので、今まで正規表現だけ使ってきた開発者がちょっと使ってみようと思っても、使い方がよくわからずに面らってしまうことがある。 パーサコンビネータはテキストをパースするための非常に強力な仕組みだが、その背後にある考え方を理解しなければこれらのパーサコンビネータのライブラリを使う際の障害になるだろう。逆に言うと、それさえ理解で

    JavaScriptでパーサコンビネータのコンセプトを理解する(「正規表現だけに頼ってはいけない」の続き) - id:anatooのブログ
  • github社製ボットフレームワーク、hubotをIRCボットとして導入した話

    修正: 2/10 node-cronを使ったコードの例が間違っていたので修正。 github社製のボットフレームワーク、hubotをIRCボットとして導入する話。 インストール hubotはnode.jsとcoffescriptで書かれたgithub社製のボットフレームワーク。IRCに限らず、campfireやtwitterなどいくつかのアダプタに対応しているが、ここではIRCで利用するための導入手順を記す。 あらかじめnode.jsとnpmをインストールしておいて、hubotをインストールする。 $ git clone git://github.com/github/hubot.git $ cd hubot $ npm installhubotは、ボットが扱うデータを永続化するためにredisというKVSを利用する。redisが入っていない時はエラーになるので動かす前にインストールする。

    github社製ボットフレームワーク、hubotをIRCボットとして導入した話
  • PHPで現在のスコープやオブジェクト内部の状態を対話的に確認する - id:anatooのブログ

    PHPプログラミングの際にコードをデバッグするのに最も手軽なのは、var_dumpやロガーで変数の中身を見る方法だと思う。例えば何やらおかしな動きをするメソッドがあった時に、その中のコードにvar_dumpを差し込んでコマンドラインで実行する。そして来とるべき値から外れている変数や値を見つけることで、バグの原因を見つけるのに有用な情報を得ることができる。 このやり方は簡単だが問題がある。おかしな動きをするメソッドの中に、var_dump($a);というコードを挿入して、コマンドラインで実行して、$aという変数の中身を確認する。が、特に何もおかしなところがない。コードを書き換えて次は$bという変数の中身を見るが問題はない。次にコードを書き換えて$cという変数の中身を…という風に、おかしな値がなかなか見つからない時に var_dump等のコードを挿入する コマンドラインで実行する 表示された

    PHPで現在のスコープやオブジェクト内部の状態を対話的に確認する - id:anatooのブログ
  • 最小のDIコンテナ in PHP - id:anatooのブログ

    DIコンテナがなにやら大仰なものとして勘違いされているような気がしたので、機能を極限まで削ぎ落とした最小のDIコンテナを書いた。 これにはAOPは当然ないし、設定ファイルなどもない。 <?php // DIContainer.php class DIContainer { protected $componentFactory; function __construct(ComponentFactory $c) { $this->componentFactory = $c; $c->accept($this); } function get($name) { $name = strtolower($name); if (!isset($this->objects[$name])) { $this->objects[$name] = $this->componentFactory->get(

    最小のDIコンテナ in PHP - id:anatooのブログ
    tksthdnr
    tksthdnr 2009/05/11
    DIコンテナ
  • PHPでコンストラクタからメソッドチェーンする方法 - id:anatooのブログ

    PHPでは他の言語のようにコンストラクタからメソッドチェーンできない。例えば"new Hoge->doSomething();"というようなことができない(やってみるとパーサエラーになる)。 オブジェクトを生成して何かひとつメソッドを呼び出して終わり、という例の時に <?php $obj = new Hoge; $obj->doSomething(); とやるのは変数に何か名前をつけるコストやタイプ数などの観点から見てめんどうくさい。 そこで以下のような関数を定義する。 <?php function ref($obj) { return $obj; } この関数はみたとおり渡された値をそのまま返す関数だが、これを使うことで以下のようにメソッドチェーンできるようになる。 <?php ref(new Hoge)->doSomething(); というバッドノウハウっぽい話。

    PHPでコンストラクタからメソッドチェーンする方法 - id:anatooのブログ
  • 1