SlideShare una empresa de Scribd logo
1 de 43
Descargar para leer sin conexión
詳説ぺちぺち
 闇PHP勉強会 + PHPソースコード
   リーディングワークショップ
               2012/01/28
                   do_aki
do_aki (どぅーあき)
• |所属| > 株式会社もしも
        (ドロップシッピング・アフィリエイトASP)
• |仕事| > インフラ(サーバ管理)兼
         Webアプリケーション開発
• |出現| > 渋谷・山手線沿線
• |特性| > PHPer



                         http://do-aki.net/
あじぇんだ
•   第1章 ぺちぺち
•   第2章 Scanner (字句解析器)
•   第3章 Parser (構文解析器)
•   まとめ
第1章
ぺちぺち
Japanese Programming
      Language




      らきすた風 画像生成 (ジェネレーター) http://raki.st/
闇鍋的
PHP
魔改造
 2011/09/10 PHPカンファレンス2011
                Presented By do_aki
PHPの言語そのものの作りとかよく
 知らないし、内部構造もよく分か
らないけど、オレオレPHPを作って
 みたくてトライ&エラー繰り返し
ていたら気づいたらPHPを基にした
 日本語プログラミング言語ができ
 ちゃってたから発表してみたよ!

       ・・・というもの
<?php
  function HelloPHP() {
    echo "Hello PHP World";
  }
  HelloPHP();                 PHP
ぺちぺち
 関数 はろーぺちぺち() ここから
  「"はろー ぺちぺち わーるど"」と表示;
 ここまで
                              ぺちぺち
  はろーぺちぺち();
条件分岐

もし [条件] ならば
  …
 そうでないならば
  …
条件おわり
繰り返し

繰り返し [条件] の間
ここから
  …
ここまで
変数/条件/演算子

変数:ほげ は 0 です

1 が 2 より小さい (1<2)
1 が 2 より大きい (1>2)

1 足す 2 (1+2)
10 を 3 で割った余り (10%3)
組み合わせると
ぺちぺち
変数:ほげ は 1です;

繰り返し 変数:ほげ が 10 以下 の間
ここから
 もし 変数:ほげ を 3 で割った余り が 0 に等しい
 ならば
    「 “アホn"」と表示;
 そうでないならば
    「 変数:ほげ,"n"」と表示;
 条件おわり
 変数:ほげ に 変数:ほげ 足す 1 を代入;
ここまで
ぺちぺち と PHP の違い

・Zend/zend_language_scanner.l
            add 98 lines & modify 22 lines

・Zend/zend_language_parser.y
              add 65 lines & modify 1 line
第2章
Scanner
スキャナの状態
  zend_language_scanner.l
                               の半分から下あたり

<ST_IN_SCRIPTING>"function" {
  return T_FUNCTION;
}                             この文字列
   このトークンを
       返す                     が来たら
<ST_IN_SCRIPTING>“{“ {
  yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
  return '{';
}
スキャナの状態
  zend_language_scanner.l
                               の半分から下あたり

<ST_IN_SCRIPTING>“def" {
  return T_FUNCTION;
}                            この文字列
  このトークンを
 <?php返す                     が来たら
<ST_IN_SCRIPTING>“{“ { の代わりに def
               function
       def hello() {
              echo “like ruby?”;
  yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
  return '{'; なんちゃって ruby のでき
       }
}                       あがり
ぺちぺちでは
<ST_IN_SCRIPTING>“function“|”関数” {
<ST_IN_SCRIPTING>"function" {
  return T_FUNCTION;
}

<ST_IN_SCRIPTING>“{“ { ここから” {
<ST_IN_SCRIPTING>“{“|”
  yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
  return '{';
}
スキャナの状態
•   INITIAL
•   ST_IN_SCRIPTING
•   ST_LOOKING_FOR_PROPERTY
•   ST_LOOKING_FOR_VARNAME
•   ST_VAR_OFFSET
•   ST_DOUBLE_QUOTES
•   ST_BACKQUOTE
•   ST_HEREDOC
•   ST_NOWDOC
•   ST_END_HEREDOC
ほとんどはこの状態
             スキャナの状態
•   INITIAL                   初期状態
•   ST_IN_SCRIPTING           基本状態
•   ST_LOOKING_FOR_PROPERTY   ->これ
•   ST_LOOKING_FOR_VARNAME    ${ これ}
•   ST_VAR_OFFSET             $xxx[これ]
•   ST_DOUBLE_QUOTES          “これ”
•   ST_BACKQUOTE              `これ`
•   ST_HEREDOC                <<<“DOC” の後
•   ST_NOWDOC                 <<<‘DOC’ の後
•   ST_END_HEREDOC            DOC の終わり
ぺちぺち動かず
ぺちぺち
  echo "petipeti!n";   OK

ぺちぺち                    NG
  echo "petipeti!n";
<INITIAL>"<?php"([ t]|{NEWLINE})

<INITIAL>("<?php"|"ぺちぺち")([ t]|{NEWLINE}) {

<ST_IN_SCRIPTING>
("?>"|"</script"{WHITESPACE}*">"){NEWLINE}? {


<ST_IN_SCRIPTING>
("?>"|"</script"{WHITESPACE}*">"|"ぺちぺちおしまい"){NEWLINE}? {



            これだけじゃ足りない orz
                    <INITIAL>{ANY_CHAR} ???
落とし穴
• “変数”の扱いは少し複雑
 – 3カ所 + 隠し1カ所 (Parser 側からのみ参照)


• 複雑な処理をしているところも
 – HEREDOC , NOWDOC
 – __CLASS__


• 簡単にセグる
<ST_IN_SCRIPTING,ST_DOUBLE_QUOTES
,ST_HEREDOC,ST_BACKQUOTE,ST_VAR_OFFSET>
"$"{LABEL} {
   zend_copy_value(zendlval, (yytext+1), (yyleng-1));
   zendlval->type = IS_STRING;
   return T_VARIABLE;
 }

 <ST_IN_SCRIPTING,ST_DOUBLE_QUOTES
,ST_HEREDOC,ST_BACKQUOTE,ST_VAR_OFFSET>
(“$“|”変数:”){LABEL} {
   zend_copy_value(zendlval, (yytext+1), (yyleng-1));
   zendlval->type = IS_STRING;

 }
   return T_VARIABLE;
                                               NG
<ST_IN_SCRIPTING,ST_DOUBLE_QUOTES
,ST_HEREDOC,ST_BACKQUOTE,ST_VAR_OFFSET>
"$"{LABEL} {
   zend_copy_value(zendlval, (yytext+1), (yyleng-1));
   zendlval->type = IS_STRING;
   return T_VARIABLE;
 }                                変数名をコ
                                ピーして保持
 <ST_IN_SCRIPTING,ST_DOUBLE_QUOTES
,ST_HEREDOC,ST_BACKQUOTE,ST_VAR_OFFSET>
”変数:” {LABEL} {
   zend_copy_value(zendlval, (yytext+7), (yyleng-7));
   zendlval->type = IS_STRING;
   return T_VARIABLE;
 }
第2章 Scanner まとめ
• 元々あるキーワードの変更/追加は簡単

• スキャナの状態もほとんど意識する必要
  はない

• ところどころ Cで無理矢理処理してる部分
  があるので注意
第2章
Scanner
   完
第3章
Parser
Scanner によるトークンへの分解

<?php              T_OPEN_TAG
                   T_VARIABLE
    $x = $a + 1;   ‘=‘
    ++$x;          T_VARIABLE
                   ‘+’
                   T_LNUMBER
                   ‘;’
                   T_INC
                   T_VARIABLE
                   ‘;’
Syntax Error

                 T_LNUMBER
                 ‘=’
1 = $a;          T_VARIABLE
                 ‘;‘


Perser にトークンの並びが定義さ
         れていない
zend_language_parser.y
                                      ルール名
fully_qualified_class_name:
   namespace_name { $$ = $1; }
 | T_NAMESPACE T_NS_SEPARATOR namespace_name {
      $$.op_type = IS_CONST;
      ZVAL_EMPTY_STRING(&$$.u.constant);
     zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC);   }
 | T_NS_SEPARATOR namespace_name {
    char *tmp = estrndup(Z_STRVAL($2.u.constant),
    …(省略) }
;
トークンの                               処理(C言語+α)
 並び
zend_language_parser.y

     拡張するために
    新たにルールを作る

          BAD


 処理をどう書けばいいのか分
    からない orz
似ているルールを真似る
T_VARIABLE
      $a + 1                  ‘+’
                              T_LNUMBER

expr '+' expr { zend_do_binary_op(ZEND_ADD, &$$, &
$1, &$3 TSRMLS_CC); }

                       New!
                              T_VARIABLE
    $a 足す 1                   T_JA_PLUS
                              T_LNUMBER

expr T_JA_PLUS expr { zend_do_binary_op(ZEND_A
DD, &$$, &$1, &$3 TSRMLS_CC); }
IF 文
T_IF '(' expr ')'       { zend_do_if_cond(&$3, &$4); }
statement               { zend_do_if_after_statement(&$4, 1); }
elseif_list else_single { zend_do_if_end(); }

else_single:
        /* empty */
  | T_ELSE statement
                                                        PHP
T_JA_IF expr T_NARABA { zend_do_if_cond(&$2, &$3); }
inner_statement_list   { zend_do_if_after_statement(&$3, 1); }
ja_else_single T_OWARI { zend_do_if_end(); }

ja_else_single:
      /* empty */                                      ぺちぺち
 | T_JA_ELSE inner_statement_list
落とし穴
• 突然現れる ‘$’
 – Scanner で T_VARIABLE として処理されてな
   い!?


• 本気でやるなら opecode / ZendAPI の知識
  が必須

• コンパイルしてみないと分からない
Parser は 複雑なパズル


    解きやすくするツール・方法あったら教えてほしいなー
第3章 Parser
   完
まとめ
Phpをいじり倒す10の方法 (2009) http://www.slideshare.net/moriyoshi/php10
言いたかったこと
• オレオレPHP作るの難しくないよ!
• 拡張作るのも良いけど、言語そのものに
  コミットメントしてもいいんじゃないか
  な

• PHPを楽しむ人が増えて、PHP がより一層
  面白いものになってくれたらいいな
改造のお供に
• GNU GLOBAL
  (http://www.gnu.org/software/global/)
  – 静的にソースコードを解析するのに便利!
  – PHP のソースを展開したディレクトリで
      htags -Ffgnasv
  – CGI 使えれば検索も可能
最後に
• ぺちぺちは github においてあります
• http://git.io/petipeti
ありがとうございました
• 質疑応答?

Más contenido relacionado

La actualidad más candente

Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Joe_noh
 
Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半Joe_noh
 
Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Joe_noh
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bashJun Nogata
 
PCさえあればいい。
PCさえあればいい。PCさえあればいい。
PCさえあればいい。bleis tift
 
php7's ast
php7's astphp7's ast
php7's astdo_aki
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発Shinzo SAITO
 
PHP基本的関数QUIZ
PHP基本的関数QUIZPHP基本的関数QUIZ
PHP基本的関数QUIZWataru Terada
 
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかお前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかKousuke Ebihara
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数Wataru Terada
 
ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】株式会社ランチェスター
 
C++11概要 ライブラリ編
C++11概要 ライブラリ編C++11概要 ライブラリ編
C++11概要 ライブラリ編egtra
 
Swift らしい表現を目指そう #eventdots
Swift らしい表現を目指そう #eventdotsSwift らしい表現を目指そう #eventdots
Swift らしい表現を目指そう #eventdotsTomohiro Kumagai
 
俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。Hishikawa Takuro
 

La actualidad más candente (20)

Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -
 
Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半
 
Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
 
PCさえあればいい。
PCさえあればいい。PCさえあればいい。
PCさえあればいい。
 
php7's ast
php7's astphp7's ast
php7's ast
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
Php s4
Php s4Php s4
Php s4
 
CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発
 
PHP基本的関数QUIZ
PHP基本的関数QUIZPHP基本的関数QUIZ
PHP基本的関数QUIZ
 
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかお前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
 
Php2 s2
Php2 s2Php2 s2
Php2 s2
 
ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】
 
Map
MapMap
Map
 
Php2 s4
Php2 s4Php2 s4
Php2 s4
 
C++11概要 ライブラリ編
C++11概要 ライブラリ編C++11概要 ライブラリ編
C++11概要 ライブラリ編
 
HHVM Hack
HHVM HackHHVM Hack
HHVM Hack
 
Swift らしい表現を目指そう #eventdots
Swift らしい表現を目指そう #eventdotsSwift らしい表現を目指そう #eventdots
Swift らしい表現を目指そう #eventdots
 
俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。
 

Destacado

JavaScript 非同期処理 入門
JavaScript非同期処理 入門JavaScript非同期処理 入門
JavaScript 非同期処理 入門Ishibashi Ryosuke
 
Php radomize
Php radomizePhp radomize
Php radomizedo_aki
 
オレオレPHPのつくり方
オレオレPHPのつくり方オレオレPHPのつくり方
オレオレPHPのつくり方Ryusuke Sekiyama
 
PHPエクステンションの開発tips
PHPエクステンションの開発tipsPHPエクステンションの開発tips
PHPエクステンションの開発tipsYoshio Hanawa
 
Php in ruby
Php in rubyPhp in ruby
Php in rubydo_aki
 
zval をダイエットしてみた
zval をダイエットしてみたzval をダイエットしてみた
zval をダイエットしてみたYoshio Hanawa
 
超初心者向け!Php勉強法とプログラミングの基礎の基礎
超初心者向け!Php勉強法とプログラミングの基礎の基礎超初心者向け!Php勉強法とプログラミングの基礎の基礎
超初心者向け!Php勉強法とプログラミングの基礎の基礎Hiroyuki Sugimoto
 
HashTable と HashDos
HashTable と HashDosHashTable と HashDos
HashTable と HashDosYuya Takeyama
 
SQLite2と3のエスケープ関数の違いとその対策
SQLite2と3のエスケープ関数の違いとその対策SQLite2と3のエスケープ関数の違いとその対策
SQLite2と3のエスケープ関数の違いとその対策Akishige TAKEKOSHI
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみたy-uti
 
zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境Yo Ya
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会Yuji Otani
 
signal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何かsignal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何かdo_aki
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたYoshio Hanawa
 
Zend framework 3 と zend expressive の話
Zend framework 3 と zend expressive の話Zend framework 3 と zend expressive の話
Zend framework 3 と zend expressive の話Satoru Yoshida
 
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)do_aki
 
PHP初心者に贈る、まちがえないPHPの始め方・学び方
PHP初心者に贈る、まちがえないPHPの始め方・学び方PHP初心者に贈る、まちがえないPHPの始め方・学び方
PHP初心者に贈る、まちがえないPHPの始め方・学び方Hiroyuki Sugimoto
 

Destacado (20)

JavaScript 非同期処理 入門
JavaScript非同期処理 入門JavaScript非同期処理 入門
JavaScript 非同期処理 入門
 
Php radomize
Php radomizePhp radomize
Php radomize
 
セキュアな育毛
セキュアな育毛セキュアな育毛
セキュアな育毛
 
オレオレPHPのつくり方
オレオレPHPのつくり方オレオレPHPのつくり方
オレオレPHPのつくり方
 
PHPエクステンションの開発tips
PHPエクステンションの開発tipsPHPエクステンションの開発tips
PHPエクステンションの開発tips
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
 
zval をダイエットしてみた
zval をダイエットしてみたzval をダイエットしてみた
zval をダイエットしてみた
 
超初心者向け!Php勉強法とプログラミングの基礎の基礎
超初心者向け!Php勉強法とプログラミングの基礎の基礎超初心者向け!Php勉強法とプログラミングの基礎の基礎
超初心者向け!Php勉強法とプログラミングの基礎の基礎
 
HashTable と HashDos
HashTable と HashDosHashTable と HashDos
HashTable と HashDos
 
SQLite2と3のエスケープ関数の違いとその対策
SQLite2と3のエスケープ関数の違いとその対策SQLite2と3のエスケープ関数の違いとその対策
SQLite2と3のエスケープ関数の違いとその対策
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみた
 
zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境
 
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyieldPHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会
 
signal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何かsignal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何か
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
 
Zend framework 3 と zend expressive の話
Zend framework 3 と zend expressive の話Zend framework 3 と zend expressive の話
Zend framework 3 と zend expressive の話
 
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)
 
PHP超入門@LL温泉
PHP超入門@LL温泉PHP超入門@LL温泉
PHP超入門@LL温泉
 
PHP初心者に贈る、まちがえないPHPの始め方・学び方
PHP初心者に贈る、まちがえないPHPの始め方・学び方PHP初心者に贈る、まちがえないPHPの始め方・学び方
PHP初心者に贈る、まちがえないPHPの始め方・学び方
 

Similar a 詳説ぺちぺち

Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perlJiro Nishiguchi
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説do_aki
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミングlestrrat
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2Akio Ishida
 
Material
MaterialMaterial
Material_TUNE_
 
Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能hitode909
 
MT meets PHP - PHP conference Kansai 2013
MT meets PHP - PHP conference Kansai 2013MT meets PHP - PHP conference Kansai 2013
MT meets PHP - PHP conference Kansai 2013純生 野田
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~Nobuhisa Koizumi
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia鉄次 尾形
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Ransui Iso
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座bleis tift
 
eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜ericsagnes
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法博文 斉藤
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいcharsbar
 
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~Akabane Hiroyuki
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 

Similar a 詳説ぺちぺち (20)

Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perl
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2
 
Material
MaterialMaterial
Material
 
What is Metasepi?
What is Metasepi?What is Metasepi?
What is Metasepi?
 
Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能
 
MT meets PHP - PHP conference Kansai 2013
MT meets PHP - PHP conference Kansai 2013MT meets PHP - PHP conference Kansai 2013
MT meets PHP - PHP conference Kansai 2013
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
 
eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
MT meets PHP
MT meets PHPMT meets PHP
MT meets PHP
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
 
勉強会課題①
勉強会課題①勉強会課題①
勉強会課題①
 
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 

Más de do_aki

Tritonn から Elasticsearch への移行話
Tritonn から Elasticsearch への移行話Tritonn から Elasticsearch への移行話
Tritonn から Elasticsearch への移行話do_aki
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方do_aki
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とdo_aki
 
PHPとシグナル、その裏側
PHPとシグナル、その裏側PHPとシグナル、その裏側
PHPとシグナル、その裏側do_aki
 
再考:列挙型
再考:列挙型再考:列挙型
再考:列挙型do_aki
 
Writing php extensions in golang
Writing php extensions in golangWriting php extensions in golang
Writing php extensions in golangdo_aki
 
N対1 レプリケーション + Optimizer Hint
N対1 レプリケーション + Optimizer HintN対1 レプリケーション + Optimizer Hint
N対1 レプリケーション + Optimizer Hintdo_aki
 
20150212 プレゼンテーションzen
20150212 プレゼンテーションzen20150212 プレゼンテーションzen
20150212 プレゼンテーションzendo_aki
 
MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」
MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」
MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」do_aki
 
20141017 introduce razor
20141017 introduce razor20141017 introduce razor
20141017 introduce razordo_aki
 
20141011 mastering mysqlnd
20141011 mastering mysqlnd20141011 mastering mysqlnd
20141011 mastering mysqlnddo_aki
 
php in ruby
php in rubyphp in ruby
php in rubydo_aki
 
PHP から Groonga を使うにはこんなコードになるよ!
PHP から Groonga を使うにはこんなコードになるよ!PHP から Groonga を使うにはこんなコードになるよ!
PHP から Groonga を使うにはこんなコードになるよ!do_aki
 
N:1 Replication meets MHA
N:1 Replication meets MHAN:1 Replication meets MHA
N:1 Replication meets MHAdo_aki
 
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...php and sapi and zendengine2 and...
php and sapi and zendengine2 and...do_aki
 
セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor
セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editorセキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor
セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editordo_aki
 
マスタN対スレーブ1レプリケーションの作り方 ~あれから~
マスタN対スレーブ1レプリケーションの作り方 ~あれから~マスタN対スレーブ1レプリケーションの作り方 ~あれから~
マスタN対スレーブ1レプリケーションの作り方 ~あれから~do_aki
 
Immortal
ImmortalImmortal
Immortaldo_aki
 
Excel is image viewer
Excel is image viewerExcel is image viewer
Excel is image viewerdo_aki
 
A bridge between php and ruby
A bridge between php and ruby A bridge between php and ruby
A bridge between php and ruby do_aki
 

Más de do_aki (20)

Tritonn から Elasticsearch への移行話
Tritonn から Elasticsearch への移行話Tritonn から Elasticsearch への移行話
Tritonn から Elasticsearch への移行話
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
 
PHPとシグナル、その裏側
PHPとシグナル、その裏側PHPとシグナル、その裏側
PHPとシグナル、その裏側
 
再考:列挙型
再考:列挙型再考:列挙型
再考:列挙型
 
Writing php extensions in golang
Writing php extensions in golangWriting php extensions in golang
Writing php extensions in golang
 
N対1 レプリケーション + Optimizer Hint
N対1 レプリケーション + Optimizer HintN対1 レプリケーション + Optimizer Hint
N対1 レプリケーション + Optimizer Hint
 
20150212 プレゼンテーションzen
20150212 プレゼンテーションzen20150212 プレゼンテーションzen
20150212 プレゼンテーションzen
 
MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」
MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」
MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」
 
20141017 introduce razor
20141017 introduce razor20141017 introduce razor
20141017 introduce razor
 
20141011 mastering mysqlnd
20141011 mastering mysqlnd20141011 mastering mysqlnd
20141011 mastering mysqlnd
 
php in ruby
php in rubyphp in ruby
php in ruby
 
PHP から Groonga を使うにはこんなコードになるよ!
PHP から Groonga を使うにはこんなコードになるよ!PHP から Groonga を使うにはこんなコードになるよ!
PHP から Groonga を使うにはこんなコードになるよ!
 
N:1 Replication meets MHA
N:1 Replication meets MHAN:1 Replication meets MHA
N:1 Replication meets MHA
 
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...php and sapi and zendengine2 and...
php and sapi and zendengine2 and...
 
セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor
セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editorセキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor
セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor
 
マスタN対スレーブ1レプリケーションの作り方 ~あれから~
マスタN対スレーブ1レプリケーションの作り方 ~あれから~マスタN対スレーブ1レプリケーションの作り方 ~あれから~
マスタN対スレーブ1レプリケーションの作り方 ~あれから~
 
Immortal
ImmortalImmortal
Immortal
 
Excel is image viewer
Excel is image viewerExcel is image viewer
Excel is image viewer
 
A bridge between php and ruby
A bridge between php and ruby A bridge between php and ruby
A bridge between php and ruby
 

Último

2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦Sadao Tokuyama
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 

Último (12)

What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 

詳説ぺちぺち