SlideShare a Scribd company logo
1 of 44
Download to read offline
ある戦いの記憶から探る
 PHPの闇と戦うコツ


     FAL
ある戦いの記憶から探る
 PHPの闇と戦うコツ
  タイトル変えました…すみません




       FAL
自己紹介

●   HN:FAL
●   Twitter:@fal_aqua04
●   PHPは仕事で2年、趣味ではもっと前から。
●   最近は、スマホ向けサイト構築がメイン。
●   PHPの前はWeb系Java屋でした。
●   Objective-C, Python等も触ったり。
●   見た目は真っ黒!中身はおっさん!
ある戦いってなーに?



          Imagick

というPECL拡張モジュールと私との戦いです。
PECL::Imagickってなんぞや?

●   PHPで画像処理をするライブラリ
●   公式Manualの「画像処理および作成」参照
●   GDより高機能&高画質。ただし重い。
●   実際は、ImageMagickAPIのWrapper
PECL::Imagickってなんぞや?

●   PHPで画像処理をするライブラリ
●   公式Manualの「画像処理および作成」参照
●   GDより高機能&高画質。ただし重い。
●   実際は、ImageMagickAPIのWrapper

アニメGIFの編集という案件のため、利用開始
大変でした。

● メソッド多すぎ
大変でした。

● メソッド多すぎ
大変でした。

● メソッド多すぎ




            まだまだあります…
大変でした。

● 癖が強い
大変でした。

● 癖が強い(特にアニメGIF関係)
  ○ イテレータの概念とか。
  ○ 画像出力の方法の差とか。
  ○ 画像処理前に各コマをバラして、合成後に最適化する、
   とか。
大変でした。

● 癖が強い(特にアニメGIF関係)
  ○ イテレータの概念とか。
  ○ 画像出力の方法の差とか。
  ○ 画像処理前に各コマをバラして、合成後に最適化する、
   とか。

正直、PHPを書いているというより、
PHPでフォトレタッチソフトを触ってるイメージですね。
大変でした。

● ImageMagickのバージョンの罠
大変でした。

● ImageMagickのバージョンの罠
大変でした。

● サンプルソースで使ってないメソッドの重要性
  ○ パフォーマンスが出ないので調査。
大変でした。

● サンプルソースで使ってないメソッドの重要性
  ○ パフォーマンスが出ないので調査。
  ○ 参考に見ていたサイト上のソースにて
  destroy()
  という怪しいメソッドを発見。
大変でした。

● サンプルソースで使ってないメソッドの重要性
  ○ パフォーマンスが出ないので調査。
  ○ 参考に見ていたサイト上のソースにて
     destroy()
     という怪しいメソッドを発見。
 ○   ドキュメントの「基本的な使用法」に乗ってる
     サンプルソースにはそんなメソッド使われてないよ。
大変でした。

● サンプルソースで使ってないメソッドの重要性
  ○ パフォーマンスが出ないので調査。
  ○ 参考に見ていたサイト上のソースにて
     destroy()
     という怪しいメソッドを発見。
 ○   ドキュメントの「基本的な使用法」に乗ってる
     サンプルソースにはそんなメソッド使われてないよ。
 ○   でも、開いた画像っていつ解放してるんだ?
     もしかして、明示的に解放しないとダメなんじゃね?
大変でした。

● サンプルソースで使ってないメソッドの重要性
  ○ パフォーマンスが出ないので調査。
  ○ 参考に見ていたサイト上のソースにて
     destroy()
     という怪しいメソッドを発見。
 ○   ドキュメントの「基本的な使用法」に乗ってる
     サンプルソースにはそんなメソッド使われてないよ。
 ○   でも、開いた画像っていつ解放してるんだ?
     もしかして、明示的に解放しないとダメなんじゃね?
 ○   ビンゴ!
大変でした。

● 同時アクセスを捌けない
  ○ 単体アクセスは何とかなったけど、10程度の同時アクセ
   スに耐えられない。
大変でした。

● 同時アクセスを捌けない
  ○ 単体アクセスは何とかなったけど、10程度の同時アクセ
     スに耐えられない。
 ○   多重アクセス時の状況を想像してみる。
     →それって、PhotoShopで大量の画像を開いてるような
     モンじゃね?
大変でした。

● 同時アクセスを捌けない
  ○ 単体アクセスは何とかなったけど、10程度の同時アクセ
     スに耐えられない。
 ○   多重アクセス時の状況を想像してみる。
     →それって、PhotoShopで大量の画像を開いてるような
     モンじゃね?
 ○   無理じゃん。
大変でした。

● 同時アクセスを捌けない
  ○ 単体アクセスは何とかなったけど、10程度の同時アクセ
     スに耐えられない。
 ○   多重アクセス時の状況を想像してみる。
     →それって、PhotoShopで大量の画像を開いてるような
     モンじゃね?
 ○   無理じゃん。
 ○   対策:簡易キュー的なもので、同時実行数を減らす。
戦いに勝つために必要だったのは?
戦いに勝つために必要だったのは?

1. 状況解析!
 ログ見たりプロファイラ見たりソース見たり…。
戦いに勝つために必要だったのは?

1. 状況解析!
 ログ見たりプロファイラ見たりソース見たり…。
2. 公式ドキュメントを見直す!
 見落としがあったり、コメントに重要な例があったり。
戦いに勝つために必要だったのは?

1. 状況解析!
 ログ見たりプロファイラ見たりソース見たり…。
2. 公式ドキュメントを見直す!
 見落としがあったり、コメントに重要な例があったり。
3. ソースを読む!
 Webに転がってる例を片っ端から見比べたり、
 PECLのソースを読んだり。
戦いに勝つために必要だったのは?

1. 状況解析!
 ログ見たりプロファイラ見たりソース見たり…。
2. 公式ドキュメントを見直す!
 見落としがあったり、コメントに重要な例があったり。
3. ソースを読む!
 Webに転がってる例を片っ端から見比べたり、
 PECLのソースを読んだり。

   でも、それだけではありませんでした。
正攻法でダメな時もある。
正攻法でダメな時もある。

● 色々やっても、原因がわからない時がある
  ○ 自分の知識不足
  ○ 開示されていないソースコード
正攻法でダメな時もある。

● 色々やっても、原因がわからない時がある
  ○ 自分の知識不足
  ○ 開示されていないソースコード
● 原因はわかっても、対策が判らない事も
  ○ 「これこれこういう不具合がでたよ!」
  というサイトは引っかかるが、解決が乗ってない
正攻法でダメな時もある。

● 色々やっても、原因がわからない時がある
  ○ 自分の知識不足
  ○ 開示されていないソースコード
● 原因はわかっても、対策が判らない事も
  ○ 「これこれこういう不具合がでたよ!」
  というサイトは引っかかるが、解決が乗ってない


そんな時、解決のヒントになったのは…
正攻法でダメな時もある。

● 色々やっても、原因がわからない時がある
  ○ 自分の知識不足
  ○ 開示されていないソースコード
● 原因はわかっても、対策が判らない事も
  ○ 「これこれこういう不具合がでたよ!」
  というサイトは引っかかるが、解決が乗ってない


そんな時、解決のヒントになったのは…
        PHP以外の知識
今回の場合…

● Objective-Cのリソース管理
● GIFアニメを遊びで作った経験
● 個人サイト用の素材を自力で作った経験
● Linuxの操作経験
● 既存ゲームの描画方法
…etc
今回の場合…

● Objective-Cのリソース管理
● GIFアニメを遊びで作った経験
● 個人サイト用の素材を自力で作った経験
● Linuxの操作経験
● 既存ゲームの描画方法
…etc

PHPと関係の低い知識でもヒントに!
PHP、よくdisられるけど…

「また○○istaとか××istにdisられた!
 もう○○や××の言語なんて触んねー!」
PHP、よくdisられるけど…

「また○○istaとか××istにdisられた!
 もう○○や××の言語なんて触んねー!」

ああ、勿体無い…。
インフラとか、興味ない?

「インフラなんて勉強する必要無いですよ?
 僕たち、インフラ担当じゃないんですから。
 インフラはインフラの人に任せればいいんですっ
て。」
インフラとか、興味ない?

「インフラなんて勉強する必要無いですよ?
 僕たち、インフラ担当じゃないんですから。
 インフラはインフラの人に任せればいいんですっ
て。」

ああ、勿体無い…。
エンジニアの装備は知識です

● 一つの武器(言語)だけを鍛えていても、
  いつか限界が来ます。
エンジニアの装備は知識です

● 一つの武器(言語)だけを鍛えていても、
  いつか限界が来ます。
● たくさんの武器を持っていても、
  防具無しでは即死の危険性があります。
エンジニアの装備は知識です

● 一つの武器(言語)だけを鍛えていても、
  いつか限界が来ます。
● たくさんの武器を持っていても、
  防具無しでは即死の危険性があります。
● まったく関係の無いような道具が
  思わぬところで役に立ったりします。
エンジニアの装備は知識です

● 一つの武器(言語)だけを鍛えていても、
  いつか限界が来ます。
● たくさんの武器を持っていても、
  防具無しでは即死の危険性があります。
● まったく関係の無いような道具が
  思わぬところで役に立ったりします。

      たくさんの知識をそろえて、
  PHPの抱える闇に立ち向かいましょう!
ご清聴ありがとうございました!

More Related Content

What's hot

VimとRubyのアツい関係
VimとRubyのアツい関係VimとRubyのアツい関係
VimとRubyのアツい関係Misao X
 
非同期系統の基礎
非同期系統の基礎非同期系統の基礎
非同期系統の基礎segayuu
 
我が evil-mode を嫌いな理由 〜evil-mode の闇〜
我が evil-mode を嫌いな理由 〜evil-mode の闇〜我が evil-mode を嫌いな理由 〜evil-mode の闇〜
我が evil-mode を嫌いな理由 〜evil-mode の闇〜Shougo
 
かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014Sugoi Kanari
 
Java初心者がJava8のラムダ式をやってみた
Java初心者がJava8のラムダ式をやってみたJava初心者がJava8のラムダ式をやってみた
Java初心者がJava8のラムダ式をやってみたAya Ebata
 
2021 01-25 lt sho kato
2021 01-25 lt sho kato2021 01-25 lt sho kato
2021 01-25 lt sho katokatosho1
 
5回目Java script構文
5回目Java script構文5回目Java script構文
5回目Java script構文Takuya Shishido
 
mrubyで作るマイコンボード
mrubyで作るマイコンボードmrubyで作るマイコンボード
mrubyで作るマイコンボードkishima7
 
Introducing hhvm hack-async
Introducing hhvm hack-asyncIntroducing hhvm hack-async
Introducing hhvm hack-asyncKenjiro Kubota
 
負荷テストについて
負荷テストについて負荷テストについて
負荷テストについてTakahiro Ishida
 

What's hot (13)

VimとRubyのアツい関係
VimとRubyのアツい関係VimとRubyのアツい関係
VimとRubyのアツい関係
 
非同期系統の基礎
非同期系統の基礎非同期系統の基礎
非同期系統の基礎
 
我が evil-mode を嫌いな理由 〜evil-mode の闇〜
我が evil-mode を嫌いな理由 〜evil-mode の闇〜我が evil-mode を嫌いな理由 〜evil-mode の闇〜
我が evil-mode を嫌いな理由 〜evil-mode の闇〜
 
かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014
 
Webページで学ぶJavaScript2013 第7回
Webページで学ぶJavaScript2013 第7回Webページで学ぶJavaScript2013 第7回
Webページで学ぶJavaScript2013 第7回
 
Java初心者がJava8のラムダ式をやってみた
Java初心者がJava8のラムダ式をやってみたJava初心者がJava8のラムダ式をやってみた
Java初心者がJava8のラムダ式をやってみた
 
Vimはこわくない
VimはこわくないVimはこわくない
Vimはこわくない
 
2021 01-25 lt sho kato
2021 01-25 lt sho kato2021 01-25 lt sho kato
2021 01-25 lt sho kato
 
5回目Java script構文
5回目Java script構文5回目Java script構文
5回目Java script構文
 
mrubyで作るマイコンボード
mrubyで作るマイコンボードmrubyで作るマイコンボード
mrubyで作るマイコンボード
 
Introducing hhvm hack-async
Introducing hhvm hack-asyncIntroducing hhvm hack-async
Introducing hhvm hack-async
 
Botと対話する
Botと対話するBotと対話する
Botと対話する
 
負荷テストについて
負荷テストについて負荷テストについて
負荷テストについて
 

Recently uploaded

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 

Recently uploaded (9)

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 

ある戦いの記憶から探るPHPの闇と戦うコツ