タグ

ブックマーク / blog.r-sky.jp (21)

  • 第4回 闇PHP勉強会レポート | チラシのうら

    スライドだけでなくて壁にマーカーで書いたり、ソースコードを参照しながら発表させてもらいました。 ミックスイン今回の発表の目玉(?)でもあったミックスイン記法は既存のPHPコード/ユーザーが自然にステップアップできる記法にできたなと自負しているので、是非とも次の次のPHP、おそらくPHP 5.6に入れるべく提案する計画です。(自負とか言ってもScalaの真似ですが) ミックスイン記法とは別に拡張モジュールとしてAOPサポートを入れようと目論んでおり、それがやりやすいようにAPIを整えるという末転倒な事も企んでいたり。 Zend Engineのcompilerからexecutorあたりの読みづらさは特筆に値するものがあり、これを改造してちゃんと動くものにするのは多少の慣れが必要ですが、まだまだ改善の余地のある子なので良くしていく手助けができればと思います。 しかしながら、長いことZend E

    第4回 闇PHP勉強会レポート | チラシのうら
  • ウノウの縁 | チラシのうら

    文を書く前に言っておくッ! おれは今やつのスタンドをほんのちょっぴりだが体験した い…いや…体験したというよりはまったく理解を超えていたのだが…… あ…ありのまま あのとき 起こった事を話すぜ! 『おれはウノウを受けていたと 思ったらいつのまにかジンガジャパンに勤めていた』 な… 何を言ってるのか わからねーと思うが おれも何をされたのかわからなかった… 頭がどうにかなりそうだった… ベンチャーだとかスタートアップだとか そんなチャチなもんじゃあ 断じてねえ もっと恐ろしいものの片鱗を味わったぜ… …さて、1ヶ月以上遅れてのウノウアドベントカレンダー記事です。(ごめんなさいごめんなさい) 僕がウノウに入ろうと思ったきっかけは、やはりウノウラボの存在が大きかった。 2000年代後半のPHP界ではあのブログを読んでなかったらモグリと断定できるぐらいあのブログはエッジが効いていた。 拙作のMe

    ウノウの縁 | チラシのうら
  • よみがえるQIQ | チラシのうら

    別エントリで実装等について書く前に、これまでの経緯のまとめ。 以前のエントリ で↓のように書いていたのだが、 Scalaライクなミックスイン はエイプリルフールネタです。申し訳ない。 気で取り組みたいですが、なかなか難しいですね。 求む、フルタイムでやらせてくれるお大尽。 プログラミングをしない人にPHPを少しわかりやすくする関数 “not” #phpadvent2012 に触発されて よーし、おじさんnot演算子をZend Engineに追加しちゃうぞー / “プログラミングをしない人にPHPを少しわかりやすくする関数 “not” #phpadvent2012 - 頭ん中” htn.to/HaqbQq 12月 14, 2012と言ってしまい、その流れでphp-srcをforkしてnot演算子を実装したり、until文/unless文を実装したりしているうちに気分がノってきて、Synfo

    よみがえるQIQ | チラシのうら
    shimooka
    shimooka 2012/12/21
    『構想8ヶ月半! 実装4時間半!』すばらしい!
  • PHP Memcached Extension をより軽量高速にしてみるテスト | チラシのうら

    php-memcached-dev/php-memcachedをforkしたmsgpack-and-snappyブランチで、シリアライズ方式にMessagePackを、圧縮方式にSnappyを選べるようにした。→GitHub MessagePackを使うにはPECL msgpackをインストールした上で、configureのオプションに --enable-memcached-msgpack を、Snappyを使うにはSnappyをインストールした上で --with-snappy-dir を付ければよい。 MacPortsでライブラリを入れている場合の例: phpize ./configure \ --enable-memcached \ --enable-memcached-msgpack \ --with-libmemcached-dir=/opt/local \ --with-snap

    PHP Memcached Extension をより軽量高速にしてみるテスト | チラシのうら
  • PHP 5.4.1の新機能: Scalaライクなミックスイン | チラシのうら

    2012年4月1日にリリースされたPHP 5.4.1では、マイナーバージョンアップにも関わらず言語仕様が拡張されるという、PHPクォリティ全開の変更があったので紹介しよう。 実体化時ミックスイン (Mix-in instantiation)クラスをインスタンス化する際にuse文でトレイトを追加できるようになった。トレイトは実行時に解決されるので、クラス宣言より後にトレイトを宣言することも可能。 例1<?php class JoJo {} trait HermitPurple { public function sayStand() { echo '隠者の紫'; } } trait StarPlatinum { public function sayStand() { echo '星の白金'; } } $joseph = new JoJo use HermitPurple; $jotaro

    PHP 5.4.1の新機能: Scalaライクなミックスイン | チラシのうら
    shimooka
    shimooka 2012/06/18
    rskyならやりかねんところが。。。
  • PHPカンファレンス関西の懇親会でLTしてきました - 讃容日記

    関西で初のPHPカンファレンス!これは参加せねばなるまい!ということで、PHPカンファレンス関西に参加してきました。 このところ仕事が忙しかったこともありLTの準備もできていなかったのですが、 id:cocoiti のウノウラボ記事にインスパイアされて「Brainf*ckで犬語」を実装→発表と相成った次第であります。 BFのPHP実装としては既にBrainPhackがあります。 しかし、それを使うだけではネタとして弱いのでフルスクラッチで実装です。 車輪の再発明が悪とはよく言われますし、そのとおりだと思います。 しかし車輪を自分で作ることで得られる知見があることもまた真実・・・かと思いきや、そんなことはなかったw 余談はさておき、ソースコードはGitHubにリポジトリを作ったので下記リンクよりご覧ください。 https://github.com/rsky/phpkansai-party-l

    PHPカンファレンス関西の懇親会でLTしてきました - 讃容日記
  • 書き初め - 讃容日記

    1月2日ということでブログの書き初めをする。 昨年後半を振り返って PHPカンファレンス2010とPHPMatsuriに参加した 9月末-10月頭にかけて東京でPHPのイベントに参加した。 PHPの「いま」に触れることができたのはもちろん、東京近郊だけでなく、地方から来られている方とも知り合いになれて良かった。 PHPカンファレンスの懇親会ではPHPの生みの親であるRasmus氏とお話しする機会があったのに上手く伝えたいことが言えず、もっと英語力をつけないといけないなと思った。 両イベントの間の1週間は東京観光・・・は、ほとんどせず、家を探したり会社訪問をしたりしていた。 ジンガジャパンに入社した その後、特に紆余曲折もなくジンガジャパン株式会社に入社した。 なにげに齢30にして初の会社勤めなので内心は不安だったのだけど、意外なほどチームにもすぐ馴染め、元気にやっている。 入社以前から面識

    書き初め - 讃容日記
  • Pirumを使ってみた - 讃容日記

    先日から公開を始めたPEAR(PECL)チャンネルでは、チャンネルサーバーの管理にPirumを使っています。 元々はChiara_PEAR_Serverを使おうとしていたのですが、インストール後のスクリプトがうまく動かずにコードを追っかけていたところ、@iteman 先生に「PHPUnitが移行したやつを使ってみてはどうか」と勧められたのがPirumを知ったきっかけでした。 “Pirum”はラテン語で“梨の実”という意味らしく、“PEAR”そのまんまですね。公式サイトの画像がなぜナスなのかは定かではありません。 以下に公式サイトの紹介文を和訳してみました。 Pirum is a simple and nice looking PEAR channel server manager that lets you setup PEAR channel servers in a matter of

    Pirumを使ってみた - 讃容日記
  • PHPエクステンションのリポジトリ始めました - 讃容日記

    長らく放置しておりましたブログとPHP拡張のメンテをぼちぼち再開します。 で、復活第一弾のエントリはPiece Network 3のテーマとして、PHP 5.3のサポートとGitHub/PEARチャンネルの公開をしましたので、そのご報告をば。 現時点ではよく使われているっぽいMeCabエクステンションと Tokyo Cabinetエクステンションを公開しています。他のものも需要がありそうなものから順次追加していきます。 PHP 5.3対応 PHP 5.3から ZEND_BEGIN_ARG_INFO_EX() マクロにstatic修飾子が含まれるようになったため、static ZEND_BEGIN_ARG_INFO_EX(...) としていた箇所が軒並みエラーになっていたので、これを修正しました。 また、php_set_error_handling(), php_std_error_hand

    PHPエクステンションのリポジトリ始めました - 讃容日記
    shimooka
    shimooka 2010/06/20
    復活エントリ
  • QIQの設計と実装 - 讃容日記

    QIQエクステンションがやっていることについて。 PHPというかZend Engineでは、コンパイラとエクゼキュータが関数ポインタになっており、それぞれファイルの内容から実行コードを生成するzend_comiple_file、文字列から実行コードを生成するzend_compile_string、実行コードに対応するハンドラを呼び出すzend_executeが定義されています。また、それらのデフォルト実装としてcompile_file()、compile_string()、execute()があります。 言語としては良いか悪いかは別にして、堅くも柔らかくもない独自のポジションにあるPHPですが、コアのZend Engineはコンパイラやエグゼキュータが差し換えられたり、実行時のフックが追加できたりと、実は拡張性に富んでいるのです。でもマルチスレッドと演算子オーバーローディングだけは勘弁な!

    QIQの設計と実装 - 讃容日記
  • 続々・Zend Engine Hack (クロージャもあるよ) (拡張モジュールもあるよ) - 讃容日記

    php_qiq-0.5.0.tgz (PHP 5.2用拡張モジュール) php-5.2.5-rsky-080228.patch (PHP 5.2.5用パッチ) php-5.2.5-rsky-080228-win32.zip (Windows用バイナリ) 拡張モジュール版もできました。普通のPHP extensionとしても使えますし、Zend extensionとしてAPCやeAccelerator等より先にロードすればキャッシュも効きます。ただし、ZEND_APIで修飾されていない (dllexportされていない) 関数を多用しているため、Windows向けにはビルドできません。 モジュール名のQIQは「PHPの次」を意味します。読み方はたぶん「くいっく」。「きゅーあいきゅー」でもおk。小文字でPHPと並べると字面が対照的なのが気に入っています。 dvd btb qiq php Win

    続々・Zend Engine Hack (クロージャもあるよ) (拡張モジュールもあるよ) - 讃容日記
    shimooka
    shimooka 2008/02/28
    何でもありになってきた
  • ムラムラして作った。反省はしていない - 讃容日記

    我が家から直線距離にして約500km離れたサイボウズ・ラボでPHP拡張勉強会が行われている最中、Twitterとかid:shimookaさんの実況中継とか尾藤さんのUstream(主に音声)だけでは飽き足らず、自分も書いた。 PHPの配列操作関数は破壊的なものばかりなので、非破壊的な関数群を実装。やってることはcall_user_function_ex()でarray_shift()やらsort()やらshuffle()を呼んでるだけ。 実装した関数: array_poped, array_pushed, array_shifted, array_unshifted, sorted, ksorted, asorted, rsorted, krsorted, arsorted, usorted, uksorted, uasorted, natsorted, natcasesorted, sh

    ムラムラして作った。反省はしていない - 讃容日記
  • Zend Engineをハックしてみた - 讃容日記

    勢いに任せてVM・構文解析器・コア関数をハックして以下の機能を実装してみました。 無名関数リテラル (PHPの仕様上、実際は自動で名前が割り振られ、リクエスト終了まで関数は生き続ける) 角括弧による配列リテラル Callable Object php-5.2.5-rsky-071126.patch 最初のリリース。(PHP 5.2.5用パッチ) php-5.2.5-rsky-071126-2.patch 角括弧の連想配列リテラルでは => でなくコロンを使うように変更。 php-5.2.5-rsky-071127.patch 無名関数内で無名関数を定義できなかったのを修正。 php-5.2.5-rsky-071127-2.patch メモリリークを修正。 php-5.2.5-rsky-071127-3.patch ReflectionFunction::exportで落ちるのを修正。 Ze

    Zend Engineをハックしてみた - 讃容日記
    shimooka
    shimooka 2007/11/27
    かなりきてます
  • Speedy HTML Template Utilities 0.1.0 - 讃容日記

    php_speedy-0.1.0.tgz 瓢箪から出た駒というかなんというか、Speedyエクステンション正式リリース。 speedy関数はstdClass以外のオブジェクトもコンテキストとして受け付けるようになり、また、speedy関数の実行によってコンテキストが汚染されなくなりました。ただし、コンテキストが内包するオブジェクトの状態や参照として登録されている変数に関してはその限りではありません。 Speedyとは Speedyは、テンプレートエンジンではなくHTMLを出力するPHPスクリプトのためのユーティリティです。前に "37 lines of ~" と書いていたのは無かったことにしてください。 htmlspecialcharsなどの非常によく使う関数と等価で名前が短い (タイプ量が少なくなる) 関数、XML宣言を出力する関数、配列またはオブジェクトでローカル変数のシンボルテーブル

    Speedy HTML Template Utilities 0.1.0 - 讃容日記
  • speedy: 37 lines of the fastest PHP template engine (joke) - 讃容日記

    唐突に、PHP用のテンプレートエンジンを4+1行で実装してみる。 方針: ふつうのPHPファイルをテンプレートとして使う。 <?php echo $var; ?> は面倒なので <?=$var ?> と書けるようにする。 <?php echo htmlspecialchars($var); ?> はもっと面倒なので <?=h($var)?> と書けるようにする。 ついでにXML宣言も <?xml?>.... とかけるようにする。 4+1行で作るPHP用テンプレートエンジン - 絶品ゆどうふのタレ を参考に、PHP用のテンプレートエンジンをCで実装してみる。 まかり間違って海外から人がやってきたときのためにタイトルに (joke) と入れているあたりチキンである。 方針: 打倒、Blitz。(ネタなのでベンチマークはしない。たぶん負ける) ふつうのPHPファイルをテンプレートとして使う。 <

    speedy: 37 lines of the fastest PHP template engine (joke) - 讃容日記
  • calias: クラスのエイリアスを登録するエクステンション - 讃容日記

    php_calias-0.0.1.tgz この前のKOF2007の打ち上げ兼Piece Network 1の打ち合わせで出た話を元に、PHP 5.3/6.0の名前空間とは異なる、既存クラスのエイリアスを登録するエクステンションを書いてみました。PHP 5.2以降対応です。 Application Sever SAPIもしくはPersister Extensionについても計画中。企画倒れになるかもしれませんが。 使用例 基的な使い方は、calias_register()でエイリアスを登録するだけです。calias_unregister()でエイリアスを解除、calias_clear()で一括解除もできます。 <?php class Foo_Bar_Baz_Qux { /* ... */ } var_dump(calias_register('BBQ', 'Foo_Bar_Baz_Qux'

    calias: クラスのエイリアスを登録するエクステンション - 讃容日記
  • エクステンションでforeachを簡単に書くには - 讃容日記

    PHPCon2007でも少し話したことですが、PHPエクステンションを書くとき、PHPのforeachに相当することをしようと思うとちょっと面倒です。 そこで、IoのLIST_FOREACH/PHASH_FOREACHを真似してforeachを簡単に書けるマクロを作ってみました。 aにハッシュテーブルのポインタ、kにキー(zval *)が代入される変数名、vに値(zval *)が代入される変数名、codeに処理内容を記述します。 #define HASH_FOREACH(a, k, v, code) \ { \ zval **_entry = NULL; \ \ zend_hash_internal_pointer_reset(a); \ \ while (zend_hash_get_current_data(a, (void **)&_entry) == SUCCESS) { \ cha

    エクステンションでforeachを簡単に書くには - 讃容日記
  • オレオレパッチふたたび - 讃容日記

    CLIで常用でない (php.iniで読み込むようにしていない) エクステンションをちょっと使ってみるのに便利なパッチ。 コマンドラインオプションで --dl foo とすることで -d extension=foo.so や dl("foo.so"); の代用ができます。 僕以外にこれで嬉しい人がいるかどうかは定かではありません。 余談ですが以前のバージョンのPHPではMac OS XにおいてPHP_SHLIB_SUFFIXがdylibとなっており、実際の拡張子(so)と異なっていましたが、いまはちゃんと#define PHP_SHLIB_SUFFIX "so"になっています。 ちなみにMac OS XではPHPエクステンションはMach-O bundle (MH_BUNDLE)としてビルドされるので、厳密にはbundleが正しい拡張子となります。dylibはMach-O dynamica

    オレオレパッチふたたび - 讃容日記
    shimooka
    shimooka 2007/09/18
  • PHPカンファレンス2007プチレポート - 讃容日記

    もうあれから6日が経過しようというところですが、遅ればせながら。 PHPカンファレンス2007に参加、「今日からはじめるPHPエクステンション」という演題で喋ってきました。 久々のプレゼンということもあり、すごく緊張していました。もっと滑舌よく、手際よく進められないといけませんね。 定員60名の小会場で立ち見が出るほど来てもらえたのは正直嬉しかったです。 懇親会でも「これなら作れそうだと思った」という感想をいただき、行ってよかったなと思いました。 東京方面の方々と知己を得られたことも大きな収穫です。 ところでプレゼンではCodeGen_PECLのspecファイル(XML)に関数の実装まで記述していましたが、これは限られた時間でCodeGen_PECLとZend API両方の説明をするための策で、実際のPHPエクステンション制作ではspecファイルにはコードは一切書かず関数プロトタイプの記述

    PHPカンファレンス2007プチレポート - 讃容日記
  • pecl_http の隠し機能? - 讃容日記

    今回は HttpRequest クラスのドキュメント化されていない (っぽい) 機能を紹介します。 なんと、サブクラスのメソッドとして onfinish が定義されている場合、リクエスト終了時に自動でコールされるのです。 onfinish メソッドは引数としてリクエストが成功したか (valid な HTTP Response が返ってきたか) を boolean として受け取ります。 利用例としてはこのようなクラスが考えられます。 <?php class UrlRetrieve extends HttpRequest { private $savepath; public function __construct($url, $savepath, $method = HttpRequest::METH_GET, $options = array()) { parent::__constr

    pecl_http の隠し機能? - 讃容日記