SlideShare a Scribd company logo
PHP、おまえだったのか。
いつもHTTPメッセージを
運んでくれたのは。
PHPカンファレンス福岡2016
HTTPメッセージ – PHPであつかう場合の再入門
@sasezaki
●
※ PHPカンファレンス福岡2016にて利用したスライド
です。http://psr7.net/sasezaki/phpconfuk2016/ も
参照ください
●
概要
PHPがWebのために開発され利用され20年。直観的な
ものであったPHPのAPIも複雑性を生み出す一因となっ
てしまいました。抽象化の理解とその導入が煩雑さを
避けるために必要となります。HTTPメッセージ利用に
ついて、PHP自体の機能とPHPプロジェクトでのアー
キテクチャの変遷を踏まえつつ、開発者が意識してお
きたい点を話したいと思います。SAPI・ストリーム・
出力バッファリング・Middlewareについて考えていき
ます。
4.0 よりちょっと前の頃の話
(~2000年)
CGI
Common Gateway Interface
use CGI qw(:standard);
print header;
print start_html('Form Example'),
h1('My Example Form'),
start_form,
"Name:", textfield('name'),
p,
"Age:", textfield('age'),
p,
submit,
end_form;
if (param()) {
print "Hi ", em(param('name')),
"You are ", em(param('age')),
"years old ";
}
print end_html;
HTMLフォーム (Perl CGI.pm利用)
『例解PHP』(2001年)
序文より
(Rasmus Lerdorf)
『当時筆者が感じたことと言えば、Perlインター
プリタを毎回起動するオーバーヘッドが馬鹿に
ならないことと、CGIプログラムをCで書くのは
とても退屈な作業だということでした。しか
し、それでもいろいろなプログラムをCで書いて
るうちに、同じコードを何度も繰り返し書いて
いることに気付きました。つまり、CGIスクリプ
トのHTML部分とCコードを分離する簡単なラッ
パーさえあれば、HTMLを変更してもCコードを
再コンパイルしなくて済む悟ったわけです。』
『例解PHP』(2001年)
序文より
(Rasmus Lerdorf)
<HTML><header><title>Form Example</title></header>
<body><h1>My Example Form</h1>
<form action="<?echo $PHP_SELF?>" method="POST">
Name : <input type="text" name="name">
Age : <input type="text" name="age">
<input type="submit">
</form>
<?if ($name):?>
Hi <?echo $name?>, you are <?echo $age?> years old
<?endif?>
</body></html>
HTMLフォーム (PHP)
『例解PHP』(2001年)
序文より
(Rasmus Lerdorf)
<HTML><header><title>Form Example</title></header>
<body><h1>My Example Form</h1>
<form action="<?echo $PHP_SELF?>" method="POST">
Name : <input type="text" name="name">
Age : <input type="text" name="age">
<input type="submit">
</form>
<?if ($name):?>
Hi <?echo $name?>, you are <?echo $age?> years old
<?endif?>
</body></html>
HTMLフォーム (PHP)
『例解PHP』(2001年)
序文より
(Rasmus Lerdorf)
XSS!
PHPにはその昔、
リクエスト値をとことん楽に
扱える機能に
register globalsや
マジッククオートといった
ものがありました。。
忘れろ!
HTTPメッセージを平文で
渡してやってもええんやで。
サーバーリクエスト (Incoming Request )
Webサーバ
HTTPリクエスト
PHP
スクリプトコード
・ $_SERVER,$_GET,$_POST,$_COOKIE,$_FILES
・ apache_request_headers()
・ php://input
サーバーリクエスト
Webサーバ
HTTPリクエスト
PHP
スクリプトコード
・ $_SERVER,$_GET,$_POST,$_COOKIE,$_FILES
・ apache_request_headers()
・ php://input
request startup
php_output_activate
sapi activate
zend_compile
zend_activate
zend_activate_modules
かくして、PHPはHTTPリクエ
ストと末永く暮らしていきま
したとさ。
めでたし。めでた.....
Warning: POST Content-Length
of ... bytes exceeds the limit
of
ヒー
PHP、おまえだったのか。
いつもpost_max_sizeから
かばってくれていたのは
HTTPリクエスト
Webサーバ
HTTPリクエスト
PHP
スクリプトコード
・ $_SERVER,$_GET,$_POST,$_COOKIE,$_FILES
・ apache_request_headers()
・ php://input
スクリプト実行前に、ini値の
post_max_sizeを
チェックし、最大値をこえる場合
は、$_POST・$_FILESの値は空
sapi activate
最大サイズ・最大長などの制限を設けてる
●
HashDosで知られるmax_input_varsの導入はPHP 5.3.9から
●
もちろん、サーバソフト側でも制限設定項目はあり
●
ApacheのLimitRequestBody ディレクティブなど
POSTメソッドでの場合の$_POSTへの変換
●
sapi_activateでのsapi_read_post_dataのコールにて取得
php-src/main/SAPI.c 参照
●
php.ini のenable_post_data_reading にて$_POST や $_FILESへ
の格納を無効化可能 (PHP 5.4より)
$_SERVERとリクエストヘッダー
●
ヘッダーが"HTTP_”プリフィクスなどはCGIの環境変数由来
●
Just In Timeでの利用時でのグローバル変数としての評価
http://php.net/ini.core#ini.auto-globals-jit
“有効にした場合、SERVER および ENV 変数はスクリプトの開始時ではなく、 最
初に使用された時 (Just In Time)に作成される。”( php_variables.cのphp_startup_auto_globals
など参照)
サーバーリクエストとスーパーグローバル
PHPのひょうじゅんAPI
つらぽよ
E_WARNING: Cannot modify
header information - headers
already sent by (output
started at ...
スーパーグローバルを直に触るのはつらい
header()を先に呼ばなきゃいけないのがつらい
ファイル配列操作がつらい
リクエストURIの操作がつらい
『PSR-7: HTTP Message Meta Document』から意訳&抜粋
アプリケーション実装者が行いたいことは、
リクエストを受け取って、レスポンスを生成する
function dispatch($request,$response);
HTTP
リクエスト
ディスパッチャ ( index.php )
ブートストラップ
コントローラ
ルーティング
リクエスト
レスポンス
View /
テンプレート
リクエストルーター利用でのプロジェクト構成(例)
かくして、PHP開発者はHTTP
メッセージと末永く暮らしていき
ましたとさ。
めでたし。めでた.....
Fatal error: Allowed memory
size of 6291456 bytes
exhausted (tried to allocate
2097153 bytes)
ぶー
PHP、おまえだったのか。
出力バッファリング制御をお
こなってくれてたのは
メッセージボディは、
文字列で決定やな。
*
* @return string
*/
public function getContent()
{
HTTPメッセージコンポーネント設計者
・・・なんや問題あるんか?
何が問題?
 
メモリを制限なく消費する可能性
→ ヘッダやボディに最大長についてRFC規定あっただろうか?
例えばApacheの場合、LimitRequestBodyにて許可バイト数設定
開発者は諦めてアクションでecho
→ getContent()にてコールバックを許容した場合、
 戻り値の方が一致しない
Streamリソース利用の発想が抜けている
→ HTTPクライアントとして、ストリームは利用しているのに...
SAPIでの出力データの流れ(概略イメージ)
request_shut_down
php_output_end_all
php_output_stack_pop
php_output_write
レスポンスボディの出力・フラッシュ
標準の設定では、echoがあれば直ちに送信や文字列すべてを出力
はしない
パフォーマンスのためにデフォルトのphp.iniでは
output_buffering = 4096に設定されている。※ CLIは除く
ob_start() コールバック関数
ob_start() での引数、またはphp.iniでのoutput_handlerの指定
により、出力バッファの内容を操作できる。
ob_gzhandler()関数など
テンプレートエンジン / Viewレンダラーでの応用
出力内容を文字列として取得するために、ob_start()
ob_get_contents()を行っている。
ここでもメモリ使用量増大の可能性
出力出力バッファリング制御制御
せや、streamや!
*
* @return stream
*/
public function getContent()
{
HTTPメッセージコンポーネント設計者
抽象化 I/O
PHP 4.3から登場したresourceオブジェクト
普段のファイルシステムやhttpなどのスキーマは、デフォルトの
ラッパーにすぎない
入出力ストリーム
php://temp により、メモリならびにテンポラリファイルへの読
み書きが行える
ストリームフィルタ
ストリームはカスタムフィルタを作成し、登録できる
PHPPHPにおにおけるStreamStream
レスポンス作成時の例外・エラー処理レスポンス作成時の例外・エラー処理
 ストリームや出力バッファリング制御 の利用によ
り、メモリ利用量を抑えレスポンス出力時に処理を
実行することは可能でしょう。
 ただし、レスポンスボディ作成時の例外(DBコネク
ションエラーなど)などを考慮すると一度テンポラリーに
書き出しておき、そのストリームリソースを再度渡
すなどの対応も考慮すべきでは。
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
HTTPメッセージ
コンポーネントが
おおすぎる
• CakeNetwork{Request,Response}
• CI_Input, CI_Output
• NetteHttp{Request,Response}
• PHPixieHTTP{Request,Responses}
• SymfonyComponentHttpFoundation{Request,Response}
• yiiweb{Request,Response}
• ZendHttp{Request,Response}
Rob Allen 『HTTP, PSR-7 and Middleware』から
依存を抑え、
リクエスト・レスポンスを扱う処理
を相互運用するには?
HTTP
レスポンス
ディスパッチャ
ブートストラップ
コントローラ
ルーティング
リクエスト
レスポンス
View /
テンプレート
セッション(独自の)
Authentication
ミドルウェア・
ランナー
MiddlewareMiddleware
Middleware
Middleware
ミドルウェア利用でのプロジェクト構成例
while (! $stream->eof()) {
echo $stream->read(8192);
}
リクエストを受け取って、レスポンスを合成し、
次の処理へ渡す
function __invoke(
ServerRequestInterface $request,
ResponseInterface $response,
callable $next);
psr-7はHTTPメッセージの値についてのinterfaceを定
義している
従来のレスポンスクラスでは、send()メソッドなんて用意していた
サーバーリクエストには、アプリケーションでの相互
運用のために attributesプロパティが用意されている
ミドルウェアシグネチャでの議論・検討の余地
従来のEventManagerを利用したプラグインとの使い分けは?
HTTPクライアントでのミドルウェアはどうあるべきか?
インターフェイスなどにて別途psrを定義すべきでは?
PSR-7 とミドルウェア
PSR-7PSR-7 に対する批判に対する批判
最後に
●
HTTPリクエストに対し、どうHTTPレスポンスを返す
か?データの流れはどのような工夫が必要だったか?
PHP内部と周辺プロジェクトの状況を簡単に俯瞰して
みました。
●
普段のコーディングでは内部の動作についてはあまり
意識していないかも知れません。しかし、現実的な問
題(アプリケーションロジック)に専念するためにも、再
度振り返っていただければと思います。
おわりです
ご清聴ありがとうございました
イラスト素材
●
http://www.wanpug.com/
●
http://www.irasutoya.com/
●
http://hiyokoyarou.com/
参考文献
●
php と sapi と zendengine2 と..
http://www.slideshare.net/do_aki/php-and-sapi-and-zendengine2-and
●
PHP による hello world入門
http://tech.respect-pal.jp/php-helloworld/
●
PHP output buffer in deep
http://jpauli.github.io/2014/12/19/php-output-buffer-in-deep.html
●
PSR-7: HTTP message interfaces
http://www.php-fig.org/psr/psr-7/
●
PSR-7: HTTP Message Meta Document
http://www.php-fig.org/psr/psr-7/meta/
●
A Case for Higher Level PHP Streams in PSR-7
http://mtdowling.com/blog/2014/07/03/a-case-for-higher-level-php-streams/
For Further Reading
- HTTP -
●
『ハイパフォーマンス ブラウザネットワーキング――ネットワーク
アプリケーションのためのパフォーマンス最適化』
https://www.oreilly.co.jp/books/9784873116761/
●
HTTP/2 Frequently AskedQuestions
http://http2.info/faq.html
●
なぜH2Oを作るのか 〜HTTP/2の未踏性〜
https://www.youtube.com/watch?v=ykp0fZigChs
●
新しいHTTPの話をしよう (HTTP/1.1 RFCs)
http://blog.hmm.jp/entry/new-http1.1-rfcs
●
メタ変数群 HTTP_* (CGI)
https://wiki.suikawiki.org/n/HTTP_$1022
For Further Reading
- PHP -
●
The Php Life Cycle
http://www.slideshare.net/laruence/the-php-life-cycle
●
Phpをいじり倒す10の方法
http://www.slideshare.net/moriyoshi/php10
●
php.ini-recommendedで、variables_orderがGPCSである理由
と、PHP5のauto_globals_jit
http://d.hatena.ne.jp/i_ogi/20071217/1197912203
For Further Reading
- PHPのストリーム -
●
ZF-6736: Allow writing the response body into a stream
http://framework.zend.com/issues/browse/ZF-6736
●
PHP Iterators and Streams are awesome
http://fabien.potencier.org/php-iterators-and-streams-are-awesome.html
●
Writing and using php streams and sockets
http://www.slideshare.net/auroraeosrose/writing-and-using-php-streams-and-
sockets-zendcon-2011
●
PHP stream for beginners
http://hnw.jp/pdf/phpcon-20100925.pdf
●
Good Parts of PHP and theUNIX Philosophys
http://www.slideshare.net/taketyan/good-parts-of-php-and-the-unix-philosophy
●
Prototype for an object oriented streams API in PHP
https://github.com/DaveRandom/php-streams
For Further Reading
- ミドルウェア -
●
次世代の Rack や WSGI を考えてみる
http://qiita.com/kwatch/items/67657fef43666479bb99
●
HttpKernel middlewares
https://igor.io/2013/02/02/http-kernel-middlewares.html
●
beberlei/http-client-middleware
https://github.com/beberlei/http-client-middleware
●
Overview and Features - Expressive
https://zendframework.github.io/zend-expressive/getting-started/features/

More Related Content

What's hot (20)

PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
 
KEY
やはりお前らのMVCは間違っている
Koichi Tanaka
 
PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
NTT DATA OSS Professional Services
 
PDF
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
 
PDF
例外設計における大罪
Takuto Wada
 
PPTX
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
 
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
JustSystems Corporation
 
PPTX
分散システムについて語らせてくれ
Kumazaki Hiroki
 
PDF
分散システムの限界について知ろう
Shingo Omura
 
PDF
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
Ryota Watabe
 
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
 
PDF
Javaのログ出力: 道具と考え方
Taku Miyakawa
 
PDF
DockerとPodmanの比較
Akihiro Suda
 
PDF
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
 
PPTX
トランザクションの設計と進化
Kumazaki Hiroki
 
PDF
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
 
PPTX
PHPとシグナル、その裏側
do_aki
 
PDF
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
 
PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
NTT DATA Technology & Innovation
 
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
 
やはりお前らのMVCは間違っている
Koichi Tanaka
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
NTT DATA OSS Professional Services
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
 
例外設計における大罪
Takuto Wada
 
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
JustSystems Corporation
 
分散システムについて語らせてくれ
Kumazaki Hiroki
 
分散システムの限界について知ろう
Shingo Omura
 
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
Ryota Watabe
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
 
Javaのログ出力: 道具と考え方
Taku Miyakawa
 
DockerとPodmanの比較
Akihiro Suda
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
 
トランザクションの設計と進化
Kumazaki Hiroki
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
 
PHPとシグナル、その裏側
do_aki
 
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
NTT DATA Technology & Innovation
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
 

Viewers also liked (10)

PDF
PHP実践 ~外部APIを使って情報を取得する~
schoowebcampus
 
PDF
営業・運用を支える "気付ける" 管理画面
Masao Maeda
 
PPTX
知ってるようで意外と知らないPHPの便利関数
Wataru Terada
 
PDF
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
sasezaki
 
PDF
PHP の GC の話
y-uti
 
PPTX
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
 
PDF
みんなそろそろ707やめようぜ (;´Д`)
Yasutaka Hamada
 
PDF
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
ichikaway
 
PDF
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
 
PDF
PHPの今とこれから2015
Rui Hirokawa
 
PHP実践 ~外部APIを使って情報を取得する~
schoowebcampus
 
営業・運用を支える "気付ける" 管理画面
Masao Maeda
 
知ってるようで意外と知らないPHPの便利関数
Wataru Terada
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
sasezaki
 
PHP の GC の話
y-uti
 
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
 
みんなそろそろ707やめようぜ (;´Д`)
Yasutaka Hamada
 
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
ichikaway
 
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
 
PHPの今とこれから2015
Rui Hirokawa
 
Ad

Similar to PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。 (20)

PDF
PHPの今とこれから2018
Rui Hirokawa
 
PPT
2009 PHP初心者
Hideo Kashioka
 
PDF
PHPの今とこれから2020
Rui Hirokawa
 
PDF
スクリプト言語PHP攻略法
Rui Hirokawa
 
PDF
FuelPHP活用事例
Yusuke Naka
 
PDF
FukuokaPHP 3
ichikaway
 
PDF
PHPの今とこれから2016
Rui Hirokawa
 
PPTX
20171005 告白に学ぶ http status code
Shinichi Takahashi
 
PDF
02 はじめてのメール送信
文樹 高橋
 
PDF
PHPの今とこれから2007
Rui Hirokawa
 
PPT
Cakephp勉強会@tokyo #4
ichikaway
 
PDF
Yet Another Plugins
Kenichirou Oyama
 
PDF
Goji とレイヤ化アーキテクチャ
Shiroyagi Corporation
 
PPTX
App Engine と いまどきのPHP
sokamo1975
 
PDF
Apache EventMesh を使ってみた
Yoshiyasu SAEKI
 
PPTX
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
諒一 上野
 
PDF
WebAPIではじめるphp入門
Hiroaki Murayama
 
PPTX
サーバーを作ろう (毎週のハンズオン勉強会の資料)
ひとし あまの
 
PDF
RFC: "var" Deprecation
y-uti
 
PPTX
勉強会資料①
真亮 坂口
 
PHPの今とこれから2018
Rui Hirokawa
 
2009 PHP初心者
Hideo Kashioka
 
PHPの今とこれから2020
Rui Hirokawa
 
スクリプト言語PHP攻略法
Rui Hirokawa
 
FuelPHP活用事例
Yusuke Naka
 
FukuokaPHP 3
ichikaway
 
PHPの今とこれから2016
Rui Hirokawa
 
20171005 告白に学ぶ http status code
Shinichi Takahashi
 
02 はじめてのメール送信
文樹 高橋
 
PHPの今とこれから2007
Rui Hirokawa
 
Cakephp勉強会@tokyo #4
ichikaway
 
Yet Another Plugins
Kenichirou Oyama
 
Goji とレイヤ化アーキテクチャ
Shiroyagi Corporation
 
App Engine と いまどきのPHP
sokamo1975
 
Apache EventMesh を使ってみた
Yoshiyasu SAEKI
 
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
諒一 上野
 
WebAPIではじめるphp入門
Hiroaki Murayama
 
サーバーを作ろう (毎週のハンズオン勉強会の資料)
ひとし あまの
 
RFC: "var" Deprecation
y-uti
 
勉強会資料①
真亮 坂口
 
Ad

More from sasezaki (11)

PPTX
このPHP QAツールがすごい!2019
sasezaki
 
PDF
このPHP拡張がすごい!2017
sasezaki
 
PDF
HTTPメッセージ、PHPの 事情ば分かっとっと?
sasezaki
 
PDF
phpcon2013_zf
sasezaki
 
PDF
Awesome PHP extensions! Top 50!
sasezaki
 
PPTX
PHP 触れてはいけないほうの闇の話
sasezaki
 
PPTX
これからのPHPライブラリとパッケージマネージメントの話をしよう
sasezaki
 
ODP
PHP Conference Japan 2010 : Zend Framewrok
sasezaki
 
PDF
"More" Introduction to Zend Tool
sasezaki
 
PDF
PHP & Queue
sasezaki
 
PDF
Phpstudy44 Zend Frameworkが抱えている問題は多い。
sasezaki
 
このPHP QAツールがすごい!2019
sasezaki
 
このPHP拡張がすごい!2017
sasezaki
 
HTTPメッセージ、PHPの 事情ば分かっとっと?
sasezaki
 
phpcon2013_zf
sasezaki
 
Awesome PHP extensions! Top 50!
sasezaki
 
PHP 触れてはいけないほうの闇の話
sasezaki
 
これからのPHPライブラリとパッケージマネージメントの話をしよう
sasezaki
 
PHP Conference Japan 2010 : Zend Framewrok
sasezaki
 
"More" Introduction to Zend Tool
sasezaki
 
PHP & Queue
sasezaki
 
Phpstudy44 Zend Frameworkが抱えている問題は多い。
sasezaki
 

Recently uploaded (10)

PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PDF
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
PDF
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
PDF
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PDF
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 

PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。