PHP

PHPのカンマ演算子について

PHP

カンマ演算子って何? 使い方によって正しく動く時とPHP Parse errorが出る時とあるんだけどなんで? …って話をFacebookで友人の友人が話題にしていたのだけどコメント権限がなかったようで。 とりあえずここにでも書いておこうかと思った次第。 PHP: 演算子…

Complement Naive BayesをPHPで実装した

アルゴリズムの理解を深める為、Rubyで書かれた実装をそのままPHPに移植してみた。 Complement Naive Bayes らしきものをRubyで書いた - 記録用 http://d.hatena.ne.jp/laughing/20101114/1289698415 frequency_of_word_by_class = array(); $this->number_o…

RubyからPHPをネイティブ連携させるRuby extension「php_vm」を作った

RubyからPHPのクラスとかをネイティブに呼び出すRuby extension「php_vm」を作った。 百聞は一見に如かず。 なんということでしょう、PHPで定義したクラスがRubyのクラスのようにインスタンス化したりメソッドを呼んだり出来るではありませんか。 Source #!/…

PHPのジェネレータ(yield)について調べた

PHP

PHP5.5で追加されるyieldについて調べた。 とりあえずインストール。 cd /tmp git clone https://git.php.net/repository/php-src.git cd php-src/ ./buildconf ./configure --prefix=/tmp --disable-all make make install ジェネレータオブジェクトとは ぱ…

PHPでtry-catch-finallyする綺麗な書き方思いついた

PHP

これ結構いい気がする…! finallyで後処理だけして、発生した例外を握り潰さず呼び出し元に投げる時に便利。 何もすごい事はしていないけど、割りと見やすくてなんとなくtry-catch-finallyっぽい。 見様によっては再throwを書く場所が違うだけに見えなくもな…

RubyのIPAddrをPHPに移植した

何か必要に駆られて作ったと思ったんだけど、何に使おうとしたんだっけ。 今回、PHPUnit + Phing + JenkinsでCI環境を整えた。 カバレッジ解析もしたかったけど、Xdebugが必須らしく、面倒だったからやらなかった。 64bitを超える数値を扱う為にPear/Math_Bi…

ReflectionMethod::invoke()が自由じゃない

PHP

ReflectionMethodクラスに定義されている、invokeメソッドとinvokeArgsメソッドについて。 第1引数は必ず$method->classのインスタンスでなければならない 第1引数は、$method->classもしくは$method->classを継承したクラスのインスタンスじゃなきゃ駄目。 …

PHPで無名クラスっぽいもの定義するAnonymousClassを作った

JavaScriptのfunctionにインスパイアされたようなようなものになった。 AnonymousClass \ パッケージ \ Openpear http://openpear.org/package/AnonymousClass AnonymousClassの特徴・制限 ・メソッドは全てClosure Objectで、インスタンス変数として格納す…

PHP Extensionのスタブ生成ツール「PHPH」を作った

PHP

PHPファイルからPHP Extensionの雛形を生成するツール「PHPH」を作った。 CodeGen_PECLは、 ・実装するクラスのプロトタイプを、CodeGen_PECLの形式に沿ったXMLで作成。 ・メソッドの中身をXMLファイル内で実装。 ・PHP Extensionソースに変換。 PHPHは、 ・…

JavaのGenericsっぽいのをPHPで作ってみた

PHP

JavaのGenericsっぽいのをPHPでも使いたいなーと思って作ってみた。 PHPでは配列のKeyにObjectを指定出来ないから、とりあえずValueだけにした。 32bitで表現出来る数値と64bit必要な数値を共存させるならfloatに合わせる必要あり。 PHPの配列、使いづらい。…

地震のエネルギー量を計算する

PHP

マグニチュード(M)と別単位を相互変換をしてみた。 あと、強い地震を複数の弱い地震に分散した場合に何回地震を発生する必要があるか計算してみた。 これだけの莫大なエネルギー、どうにか有効活用出来ないのかな…。 マグニチュードと地震のエネルギー 地…

HipHop for PHPをインストールしてみた

PHP

Facebookが開発したPHPからC++に変換するツール「HipHop for PHP」をインストールしてみた。 インストール 極力yumで入れる。 # install php 5.2 yum -y install apr apr-util gmp yum -y install --enablerepo=c5-testing --disablerepo=base,updates php p…

ソートアルゴリズムについて調べてみた

結構な量のソートアルゴリズムをやってみた。 ここら辺を参考に。 ソート - Wikipedia http://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%BC%E3%83%88 ヒープソートは、かなり短くした。 可読性は酷いもんだ。 気が向いたら他のアルゴリズムも追記するかも知れ…

PHPで二分探索木やってみた

二分木構造で二分探索を行う。 多分こんな感じ。 削除が面倒臭いなぁ。 ソース data = $data; $this->left = null; $this->right = null; } } class BinaryTree { private $_root; // コンストラクタ public function __construct() { $this->_root…

PHPのMath関数を再発明してみた

言うまでもなくdankogai氏の1ヶ月位前のブログに触発されて。 普段から使うMath系の関数もあるけど、中で何をやってるのか知らなかったから再発明してみた。 乱数とX進数からX進数へ変換以外の関数は全て。 四角い車輪。 極力よく見かける公式とかに合わせた…

PHPでハッシュ探索やってみた

PHPでハッシュ探索(ハッシュ法)やってみた。 配列と連想配列の区別がないPHPでやっても意味ない気がするけど、とりあえずアルゴリズムが知りたかった。 ハッシュ関数はsha1を使用。 数字がでか過ぎたからgmp使った。 オープンアドレス法で、初期状態と削除済…

Pearにパッケージ提案のドラフトを作成してみた

Openpearで登録してあったHTTP_OAuthProviderをPearにパッケージの提案をしてみようかと。 今回は、とりあえずドラフトの作成まで。 HTTP_OAuthProvider - Openpear http://openpear.org/package/HTTP_OAuthProvider アカウント発行 待たされた。 Your accou…

HTTP_OAuthProviderにSAP用のSignature検証機能を追加してみた

コンシューマのライブラリに追加した方が自然なのかなと思ったけど、機能的にはプロバイダだから、HTTP_OAuthProviderに追加。 mixiではSAPという呼び方をしてるけど、この用語はOpenSocial共通の言葉なんだろうか…? Social Application Providerの略らしい…

Dropboxの仕様を調べてみた

セキュリティ部分について調べるつもりが、何か別の所まで調べてしまった気がする。 C:\Documents and Settings\USERNAME\Application Data\Dropbox\host.db 1行目 16進数表記の文字列。 16進数表記で40バイト。 バイナリ表記で20バイト。 2行目 Base64エン…

HTTP_OAuthProviderのトークン保持にMemcachedとMemcacheを追加した

HTTP_OAuthProviderのトークン保持は今までCache_Liteしか使えなかった。 流石にそれだけじゃあ寂しかったので追加。 Pecl::MemcachedとPecl::Memcacheを追加。 世の中の流れとしては、Pecl::Memcached推奨らしい…。 トークンの保持するクラスは、ストアドラ…

HTTP_OAuthConsumerに3Legged系のメソッドを追加した

以下メソッドを追加した。 ・getRequestToken ・getAuthorizeURL ・getAccessToken メソッド名は、HTTP_OAuth_Consumerと同じにした。 ただ、引数はちょっと違う。 example 前回と同じく、以下ソースを修正。 HTTP_OAuthを利用してTwitterのOAuth認証を行う …

OpenpearでHTTP_OAuthProviderを公開してみた

公開した。 Openpearでパッケージを公開するとメールアドレスも公開されるという事をさっき知った。 もういいやと思って、文中のPear準拠のコメント部分で本名も晒した。 プログラムは去年書いたものをベースにしたんだけど、結構書き方も変わった。 なかな…

OpenpearでHTTP_OAuthConsumerを公開してみた

公開した。 HTTP_OAuthConsumer - Openpear http://openpear.org/package/HTTP_OAuthConsumer Revision 1978: /HTTP_OAuthConsumer/trunk http://svn.openpear.org/HTTP_OAuthConsumer/trunk/ 機能 HTTP_OAuthとの主な違いは、シグネチャ方式に、HMAC-SHA1だ…

Net_Curl2ってパッケージをOpenpearで公開してみた

PHP

Openpearってどんなモンかなと思って、とりあえず当たり障りのなさそうなものを公開してみた。 コミットしたら、勝手にパッケージ化してくれた。 OAuthのコンシューマ用ライブラリと、OAuthのサービスプロバイダ用のライブラリ、両方とも公開してみようかと…

OpenIDのRP側Assertion出来てOP側も作り始めた

RP側のAssertion出来た。 OP側も作り出してみた。 RP 取れたのはいいんだけど、OAuthを調べた後だと、どこの馬の骨とも知れないRPに安々とデータを渡していいものか…と思ってしまう。 前回調べたYadisは「XRDSファイルの場所を辿る」って部分も含めてYadisプ…

Pythonの型をPHPに移植してみた

文字列とか配列とかのスライスって使い易い! 辞書って使い易い! って所から始まって、ついやりすぎてしまった。 とりあえず名前はPHPyとしておいた。 多分Strは日本語非対応。 意外と時間かかった…。 移植した型 ・Tuple ・List ・Dict ・Frozenset ・Set …

OpenIDについて調べてみた

OAuthは調べ尽くし、OAuthを拡張した独自プロトコルも考案して、OAuthには満足した。 だから今度はOpenIDについて調べてみた。 OpenID Enabledとかいう所のライブラリを使うのが主流らしい。 しかしそのライブラリ、めちゃくちゃ汚い。 ・とあるクラスを環境…

PHP FUSEでG-Storageをマウント出来るようにしてみた

Google App Engineでストレージサービス作ってみた - yoshida_eth0の日記で作ったRESTful APIを、ファイルシステムとしてマウントする。 Flexでファイラも作ったし、知識がなくても簡単に使える、っていう点はクリアしてるけど、ブラウザを立ち上げなきゃい…

G-StorageにOAuth認証(RSA-SHA1方式)をつけてみた

前回出来なかったって書いたけど、tlslite使って出来た。 これでWSSE、OAuth(RSA-SHA1)、OAuth(HMAC-SHA1)の認証が出来るようになった。 G-Storage http://g-storage.appspot.com/ スクリーンショット 公開鍵登録の部分。 RSA 普段何気なく使ってるRSAだけど…

PHPでFlex風のアクセサを作ってみる

PHP

個人的にはFlex(ActionScript3)のアクセサメソッドは、作る側にとっても使う側にとっても一番使い易いと思う。 こんな感じのアクセサをPHPでも使えたらきっと幸せになれるはず。 普通のpublicな変数だと見せかけて実はアクセサだった!っていう動き。 ここが…