ログ日記

作業ログと日記とメモ

PHP

PHP5用のORM作った その2

PHP

昨日 *1 の続き。 https://github.com/nishimura/Tsukiyo Joinの条件指定が欲しい、or検索が欲しい、テーブル名指定のjoinが欲しい、ということで機能追加。ほぼS2JDBC。 段々コードが見づらくなってきたかも。 OR検索 orやandが予約後なので、苦肉の策で変…

PHP5用のORM作った

PHP

O/Rマッピングライブラリを自作した。 ずっと前から自作ORMを作り替えたいと思っていて *1 、S2JDBCのようなものが作りたいからどうせならJavaやるかと思ってJavaをやり始め、やっぱりJavaよりPHPがいいと思ってPHPに戻ってきて、そうしたらまたORMに不満が…

PHPの小規模用テンプレートエンジンを作った

今までPHPで何かを作るときはLaizを使っていたわけだけれども、レンタルサーバー的な構成だと使いづらい。 数ページのフォームとかだとPATH_INFOに対応するためにApache設定ファイルにAliasMatchを書いたりフレームワーク設定ファイルを書いたりするのが面倒…

いろんなPHP Webフレームワークで同じ画面を作ってみる (Laiz編)

PHP

元ネタはJavaなのでGWTでやろうと思ったけど画面遷移がないのでRPCを使ったとしてもうまく仕様に合わせられない。MVPで途中まで書いたがイマイチに終わり…代わりにPHPで。 仕様はこれ。 足し算プログラム 計算結果は、別画面に遷移し出力する。 submit時にリ…

バリデーターあれこれ

今更ながら。 バリデーターを書く場所について悩んでいる。 バリデーター(or フィルター) アクション ビジネスロジック という階層があるとき、ビジネスロジックで何らかのエラーがあった場合はエラー画面を出したい。 具体的には、 +----------+ |ユーザ…

サブドメインをまたいだセッション管理ができなくて長時間ハマった

PHP

サブドメインをまたいだらセッションがクリアされて、色々試していた。 どうも異なるホストだとクッキーを共有できないような動きになっていた。 原因はsuhosinパッチ?extension?だった。 入れたつもりはないけれどaptで自動で入っていたみたい。 オプショ…

ハッシュ関数がよくわからない

PHP

cryptはdesがどうのこうのでダメだという話がよくあるが、cryptとmd5やsha1やhashの違いがよくわからない。

テストコード

PHP

http://d.hatena.ne.jp/shimooka/20100422/1271905286これ凄いな。 今のプロジェクトで測ってみると、20000:4000だった。0.2倍…。 バグを出せない数値計算系しかテストしてないからなんだけど、、普通は何倍もテストコード書いてるのかな。普通ってアレだが…

タイプヒンティングからオブジェクトの配列をインジェクションするためにネームスペースを使って動的にクラスを生成する

オートロード関数を登録する。 動的にネームスペースを生成してクラスを定義してオブジェクトを生成する。

オレオレフレームワークのメモ

Maple再起動で振り返る国内PHPフレームワーク戦争の歴史 – この先生きのこるには ここにフレームワークの歴史が。 今もここの第3世代のまま進んでる感じなんだろうか。もう何年も前の記事だけれども。 xFrameworkPX コアの開発は一人だったような…たしか。 h…

xcacheを入れてみる

PHP

キャッシュ機構が欲しいけれどmemcachedまでは要らないかな、と思ってaptitude searchを眺めているとxcacheというのがあることに気付いた。 aptitude install php5-xcache使い方は検索しても全然出てこない。どこもインストールと速度調査の記事ばかり。 apt…

PHP5.3をインストールしたついでにlithiumのコードを読む

lennyにパッケージでインストールするには、sources.listに以下の行を追加すればいいらしい。 deb http://php53.dotdeb.org lenny all deb-src http://php53.dotdeb.org lenny all それから、PHP5.3の新機能を使ってコードを書くにはマニュアルや解説記事を…

BazaarからGitに移行した

少しだけ使っていたLaunchpadはやめてGithubに変更。 Launchpadってmixiみたいに段々見にくくなってるような…。 http://github.com/nishimura/laiz 取り敢えずローカルのリポジトリとLANのリポジトリとgithubとこんがらがりながら使ってみている。 もともと…

yasnippetのphp-modeでクラス名を自動的に挿入するようにした

class ${1:`(replace-regexp-in-string "^_+" "" (mapconcat #'identity (split-string ((lambda (a) (substring a (let ((case-fold-search nil)) (string-match "\\\\(/[A-Z][a-zA-Z0-9]+\\\\)+$" a ) )) ) (file-name-sans-extension (buffer-file-name))…

個人仕様のsnippet

(require 'yasnippet) ;; yasnippetのsnippetを置いてあるディレクトリ (setq yas/root-directory (expand-file-name "~/dev/yasnippet/snippets")) ;; 自分用スニペットディレクトリ(リストで複数指定可) (defvar my-snippet-directories (list (expand-fil…

yasnippetのphp-modeを書いた

http://d.hatena.ne.jp/n314/20091113/1258119022 これの続き。 個人仕様だけどGitの練習のために上げてみる。 http://github.com/nishimura/minimal-yasnippet-php-mode 見よう見まねなのでフォーマットには自信ない。 11ファイルだけなので、個人的にはhg…

PHPのクラスをextensionで構造体に変換してHaskellで操作する

http://d.hatena.ne.jp/n314/20090919/1253353885 の続き。 動作確認まで point/ /point2.xml /hs/ /point2/ point2.xmlを書いてひな形生成。 <extension name="point2" version="1.1.2"> <function role="internal" name="MINIT"> <code> </code> </function> </extension>

CodeGen_PECLとHaskellを使ってクラスを操作するExtensionを作る

http://d.hatena.ne.jp/n314/20090918/1253256703 の続き。 CodeGen_PECLをインストール。 pear install -a CodeGen_PECL作業ディレクトリ作成。 mkdir point cd point mkdir hs Haskellのコードを書いてコンパイル。 cd hs emacs point.hsmodule PhpPoint w…

PHPのextensionでHaskellを呼び出す

ソースをダウンロード。 apt-get source php5 cd php5-5.2.0+dfsg/ext ./ext_skel --extname=haskelltest cd haskelltest/comfig.m4 のコメント解除。 PHP_ARG_ENABLE(haskelltest, whether to enable haskelltest support, Make sure that the comment is a…

PHP Naive Bayesian Filter メモ

PHP

PHPでベイジアン。ソースを見ながら動作をメモ。参考:http://castor.s26.xrea.com/blog/2008/02/18 パターンの登録 train: 文章から分類用のデータを登録する。文章をトークンに分割してupdateWord、その後saveReference。 updateWord: {カテゴリ、単語}…

SPLのIteratorIteratorを使う

PHP

foreachで少しだけ表示を変えたい、イテレータのcurrentを表示のために少しだけ変えたい、という場合。 単純にイテレータを継承すると関係がややこしくなるので外部から書き換えたい。 というときのためのクラス。 callback = $callback; } pu…

途中でreturn

PHP

何度かネットで調べてるんだけれども迷う。 ソースを見る機会はC言語が多かったので途中returnが普通な感覚になってる。 でも例外があるんだから例外を使った方が分かりやすいのか…とか。 色々読んでたらPHPで考えることじゃない気がしてきたのでやめる。 HT…

例外とかインターフェースとか

PHP

最近、ディレクトリを役割別で分けたりインターフェースを使ってみたりしていて思ったこと。コードを書く速度が極端に落ちる。 かと言って品質が上がっているかは微妙。 前は一つのディレクトリに大量にファイルを置いていて、それを今回は分けるようにして…

引数を問わずにメソッド名だけをチェックするインターフェースがあればいいと思った

PHP

アクションクラスとかその他諸々のクラスで、引数のタイプヒンティングを見てインスタンスを自動生成するようにしている。 こうすると

FlexyのtemplateDirは複数指定できる

templateDirを複数指定したい場合はどうすればいいのか…独自にfile_existsで調べていってファイルが存在したディレクトリをtemplateDirに指定すればいいのか…とか色々考えてたけど、ソースを見たら元々複数指定できるようになっていることに気付いた。なんて…

エラー制御演算子 @ を使うことにした

PHP

随分前に速度とかissetとかの絡みで話題になってた。 include_pathを考慮しない読み込み系の関数(っていうかfile_exists)のために自分でinclude_pathを調べてたけどやめることにする。 includeやrequireで使うのはよくないっぽい記憶があったので、それはf…

sqliteでテーブル情報を取得する

PHP

http://php.net/ref.sqlite のコメント。 pragma table_info(tablename); を使うらしい。 tablenameは select name from sqlite_master; で。

PHPのフレームワーク作りたい熱がまた出てきた

Laizを軽く修正したらいけるかなーと思ったけど既存システムがそのまま動くように変更するのは無理だった。それならいっそのことゼロから作り変えてしまおうかと…。 最近のフレームワーク事情はさっぱり分からなくなってしまった。symfonyが流行ってるのかね…

autoloadをrequire_onceと同じように動かすためにはdebug_backtraceを使わないといけない?

PHP

読み込むファイルはまずカレントのワーキングディレクトリからの相対パスとしてinclude_path で探され、それから、カレントのスクリプトのディレクトリからの相対パスとしてinclude_path で探されます。 例えば、include_pathが librariesで、カレントの ワ…

PHPでTracのようなプラグインの仕組みを作る

PHP

Pythonを知らずにTracを触ってたので気付かなかったけど、Tracのソースに書いてあるInterfaceとかimplementsっていう仕組みはTrac独自なんだね。 だから自由にInterfaceの挙動を操作できる。 Interfaceが組み込みでも、リフレクションを使えば似たものが作れ…