狠狠撸

狠狠撸Share a Scribd company logo
php.js
うさみけんた@ぞ
2014-06-08 天下一altJS武闘会
お前誰よ
? うさみけんた a.k.a Zonu.EXE(ぞ)
? 2012年秋に自宅警備職を廃業いたしました
? 仕事ではPHPとかPHPとかPHPを書いてます
? 情弱いのでIDEとかよくわからなくて、?
EmacsとVimで開発してます
         /              /
       ,イ               /
      //                    |
      /         ,?介i      |   う  ぶ  き
      {. |l     ,?  ///||     |   ち   っ え
     ,-.?Vl      / | /// | |    ?  に  と  ろ
      lこ!l ! ?   ト.l | !i  | ヽ??<   な  ば
      |  l Vヽ  ?jヽ\!l   ,>‐_ニヽ     さ
     |  |   \ ! く__??jiLノ?_?フ .||   れ
     | | __   ヽ} -‐   -─‐  ??.   ん
   _r‐j   >イ fヽ  l   ?  __    ,?-?
  / ′?   i   {ノ-? ヽ  `t_/  /| /?ヽ
 〈 ヽ    l   |  }   \    -' j  |   \
  ヽ          /     |  ̄     L
  ヽ       / -─ フ′          `ヽ─- ?
   ヽ     ヽ  /`?-?   ,. -─ '/    ー- ?
    f‐--── 'ヽ {     ~    /  /, -──‐-\
  /|         | ヽ         / ///        ヽ
最強言語の話をします
笔贬笔とは何か
<?php $n = 100;	
for ($i = 1; $i <= $n; $i++) {	
if ($i % 3 === 0) { ?>Fizz<?php }	
if ($i % 5 === 0) { ?>Buzz<?php }	
elseif ($i % 3 !== 0) echo $i;	
?>	
	
<?php	
}
人気のテンプレートエンジン
php.js
会場に来るまで
気がつかなかったんだけど
_人人人人人人人_
> 二種類ある <
 ̄Y^Y^Y^Y^Y^Y ̄
php.js implements PHP
functions in JavaScript
(kvz/phpjs, phpjs.org)
kvz/phpjs 2008年3月?
PHPの函数を
たくさん移植してる
date("Y-m-d H:i:s", strtotime("1 week ago”))	
// => "2014-06-01 15:04:19"
PHPのべんり機能がJSから!
% cat myphp.js	
require('phpjs').registerGlobals();	
console.log(array_merge([1,2,3], [1,2,3]));	
!
% node myphp.js	
[ 1, 2, 3, 1, 2, 3 ]	
!
% php -r 'var_dump(array_merge([1,2,3],
[1,2,3]));'	
Array	
( [0] => 1 [1] => 2 [2] => 3	
[3] => 1 [4] => 2 [5] => 3)
array_mergeもあるよ
PHP to JavaScript converter
and VM written in JavaScript
(niklasvh/phpjs,
phpjs.hertzen.com)
niklasvh/phpjs 2012年1月?
JS上にPHPのVMを構築してる
php.js console
<?php $n = 100;	
for ($i = 1; $i <= $n; $i++) {	
if ($i % 3 === 0) { ?>Fizz<?php }	
if ($i % 5 === 0) { ?>Buzz<?php }	
elseif ($i % 3 !== 0) echo $i;	
?>	
	
<?php	
}
PHPのテンプレート
$("n")._($$(100));	
LABEL0: for( $("i")._($$(1)); ($("i").
$S_Equal($("n"))).$Bool.$; $("i").$PostInc().$
) { ENV.$Timer();	
if ( ($("i").$Mod($$(3)).$Identical($$(0))).
$Bool.$) { ENV.$ob(“Fizz"); };	
if ( ($("i").$Mod($$(5)).$Identical($$(0))).
$Bool.$) { ENV.$ob(“Buzz"); } else if ( ($
("i").$Mod($$(3)).$NIdentical($$(0))).$Bool.$)
{ ENV.echo( $("i") ); };	
ENV.$ob(" n”); };
JavaScriptの式に変換
1 	
2 	
Fizz 	
4 	
Buzz 	
Fizz 	
7 	
8 	
Fizz 	
Buzz 	
11 	
実行出力
Real World php.js<!DOCTYPE html>	
<title>php.js</title>	
<script src=/tadsan/php-35614329/"PHP.min.js"></script>	
<script src="adapters/filesystem/xhr.js"></script>	
<script type="application/x-httpd-php" id="init">	
<?php $n = 100;	
for ($i = 1; $i <= $n; $i++) {	
if ($i % 3 === 0) { ?>Fizz<?php }	
if ($i % 5 === 0) { ?>Buzz<?php }	
elseif ($i % 3 !== 0) echo $i;	
?>	
!
<?php	
}	
</script>	
<script>	
var init_code = document.getElementById(“init").innerHTML,	
path = window.location.pathname,	
opts = {SERVER:{SCRIPT_FILENAME: path.substring(0, path.length - 1)}};opts.filesystem = new
PHP.Adapters.XHRFileSystem();	
engine = new PHP( init_code.replace(/n/g,"rn"), opts),	
result = engine.vm.OUTPUT_BUFFER.replace(/</g,”&lt;").replace(/>/g,"&gt;").replace(/n/g,"<br
/>”);	
document.write(result);	
</script>
php.jsのどこが
最強だったか
TIOBE Index for May 2014
私からは以上です
          ?v'Z -‐z__?!_
        . ,.'?.V _,-─ ,==??く`
      ,. /ァ'┴' ゞ !,.-`?ヽ?トl?:. ,
    r?. .:{_ '' ヾ ?_?-‐'¨ ̄?ヽ`'|:::  ,.、
    ?  ,?r<`iァ'^? 〃 lヽ   ? ∧!::: .?
      ゞ'-''?. ゛=?、、? " _/ノf::::  ~
    r_;.   ::Y ''/_, ゝ?ナ=?? ??::: ` ;.
       _  ::\,!?'TV =?-?_メ::::  r?
       ? ::,?l l. ??,? _/L `ヽ:::  ._?
       ;.   :ゞL?':: \ `?’,??ト.::  ,.
       ~ ,.  ,:?. `ヽ?j/l |/::
          _  .. ,? :l !?'::: ,. "
              `’ `?   ~
ご静聴ありがたうございました
発表后の追记
php.js
/(镑辞镑)\

More Related Content

php.js

  • 2. お前誰よ ? うさみけんた a.k.a Zonu.EXE(ぞ) ? 2012年秋に自宅警備職を廃業いたしました ? 仕事ではPHPとかPHPとかPHPを書いてます ? 情弱いのでIDEとかよくわからなくて、? EmacsとVimで開発してます
  • 3.          /              /        ,イ               /       //                    |       /         ,?介i      |   う  ぶ  き       {. |l     ,?  ///||     |   ち   っ え      ,-.?Vl      / | /// | |    ?  に  と  ろ       lこ!l ! ?   ト.l | !i  | ヽ??<   な  ば       |  l Vヽ  ?jヽ\!l   ,>‐_ニヽ     さ      |  |   \ ! く__??jiLノ?_?フ .||   れ      | | __   ヽ} -‐   -─‐  ??.   ん    _r‐j   >イ fヽ  l   ?  __    ,?-?   / ′?   i   {ノ-? ヽ  `t_/  /| /?ヽ  〈 ヽ    l   |  }   \    -' j  |   \   ヽ          /     |  ̄     L   ヽ       / -─ フ′          `ヽ─- ?    ヽ     ヽ  /`?-?   ,. -─ '/    ー- ?     f‐--── 'ヽ {     ~    /  /, -──‐-\   /|         | ヽ         / ///        ヽ 最強言語の話をします
  • 5. <?php $n = 100; for ($i = 1; $i <= $n; $i++) { if ($i % 3 === 0) { ?>Fizz<?php } if ($i % 5 === 0) { ?>Buzz<?php } elseif ($i % 3 !== 0) echo $i; ?> <?php } 人気のテンプレートエンジン
  • 9. php.js implements PHP functions in JavaScript (kvz/phpjs, phpjs.org)
  • 11. date("Y-m-d H:i:s", strtotime("1 week ago”)) // => "2014-06-01 15:04:19" PHPのべんり機能がJSから!
  • 12. % cat myphp.js require('phpjs').registerGlobals(); console.log(array_merge([1,2,3], [1,2,3])); ! % node myphp.js [ 1, 2, 3, 1, 2, 3 ] ! % php -r 'var_dump(array_merge([1,2,3], [1,2,3]));' Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 1 [4] => 2 [5] => 3) array_mergeもあるよ
  • 13. PHP to JavaScript converter and VM written in JavaScript (niklasvh/phpjs, phpjs.hertzen.com)
  • 16. <?php $n = 100; for ($i = 1; $i <= $n; $i++) { if ($i % 3 === 0) { ?>Fizz<?php } if ($i % 5 === 0) { ?>Buzz<?php } elseif ($i % 3 !== 0) echo $i; ?> <?php } PHPのテンプレート
  • 17. $("n")._($$(100)); LABEL0: for( $("i")._($$(1)); ($("i"). $S_Equal($("n"))).$Bool.$; $("i").$PostInc().$ ) { ENV.$Timer(); if ( ($("i").$Mod($$(3)).$Identical($$(0))). $Bool.$) { ENV.$ob(“Fizz"); }; if ( ($("i").$Mod($$(5)).$Identical($$(0))). $Bool.$) { ENV.$ob(“Buzz"); } else if ( ($ ("i").$Mod($$(3)).$NIdentical($$(0))).$Bool.$) { ENV.echo( $("i") ); }; ENV.$ob(" n”); }; JavaScriptの式に変換
  • 18. 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 実行出力
  • 19. Real World php.js<!DOCTYPE html> <title>php.js</title> <script src=/tadsan/php-35614329/"PHP.min.js"></script> <script src="adapters/filesystem/xhr.js"></script> <script type="application/x-httpd-php" id="init"> <?php $n = 100; for ($i = 1; $i <= $n; $i++) { if ($i % 3 === 0) { ?>Fizz<?php } if ($i % 5 === 0) { ?>Buzz<?php } elseif ($i % 3 !== 0) echo $i; ?> ! <?php } </script> <script> var init_code = document.getElementById(“init").innerHTML, path = window.location.pathname, opts = {SERVER:{SCRIPT_FILENAME: path.substring(0, path.length - 1)}};opts.filesystem = new PHP.Adapters.XHRFileSystem(); engine = new PHP( init_code.replace(/n/g,"rn"), opts), result = engine.vm.OUTPUT_BUFFER.replace(/</g,”&lt;").replace(/>/g,"&gt;").replace(/n/g,"<br />”); document.write(result); </script>
  • 21. TIOBE Index for May 2014
  • 23.           ?v'Z -‐z__?!_         . ,.'?.V _,-─ ,==??く`       ,. /ァ'┴' ゞ !,.-`?ヽ?トl?:. ,     r?. .:{_ '' ヾ ?_?-‐'¨ ̄?ヽ`'|:::  ,.、     ?  ,?r<`iァ'^? 〃 lヽ   ? ∧!::: .?       ゞ'-''?. ゛=?、、? " _/ノf::::  ~     r_;.   ::Y ''/_, ゝ?ナ=?? ??::: ` ;.        _  ::\,!?'TV =?-?_メ::::  r?        ? ::,?l l. ??,? _/L `ヽ:::  ._?        ;.   :ゞL?':: \ `?’,??ト.::  ,.        ~ ,.  ,:?. `ヽ?j/l |/::           _  .. ,? :l !?'::: ,. "               `’ `?   ~ ご静聴ありがたうございました