タグ

ブックマーク / hnw.hatenablog.com (19)

  • MacOSX上で.NET環境向けPHPコンパイラPhalangerを動かしてみた - hnwの日記

    (1/7 追記)ベンチマークテスト結果が不正確だったので、再測定して書き直しました。以前の記事よりもPHPの結果が良くなっています。 あけましておめでとうございます。このたび、gihyo.jpの新春特別企画として記事「PHP処理系の未来」を寄稿いたしました。HHVMとPHP7を絡めて最近のPHPの動向を紹介するような内容になっていますので、是非ご覧くださいませ。 この記事を書くにあたり、HHVM以外にも有望なPHP処理系があるかどうかを調べていました。その結果、HHVMほどではないにせよ実用レベルに近いPHP処理系が複数あることがわかりました。 そうした実装のうち、今回は.NET FrameworkおよびMono環境で動くPHPコンパイラPhalangerを紹介します。PhalangerはC#で書かれており、PHPソースコードから.NETアセンブリを出力します。Windows上では家PH

    MacOSX上で.NET環境向けPHPコンパイラPhalangerを動かしてみた - hnwの日記
    hilde
    hilde 2015/01/02
  • PHPでHTTPの並行ダウンロードを実現する(Guzzle編) - hnwの日記

    PHPで最近注目のHTTPクライアントライブラリにGuzzleがあります。日での知名度はまだまだという印象ですが、かなり高機能かつ真面目にメンテナンスされている印象で、今後のデファクトスタンダードになりうるライブラリと言えるでしょう。 稿ではこのGuzzleを使ってWebサーバから並行にダウンロードする方法を紹介します。Webブラウザのように同時に複数コネクションを管理しながらKeep-Aliveでコネクションを使い回しますので、下手なコードで実現するより接続先Webサーバにも優しいはずです。 Guzzleの特徴 まずは、Guzzleについて僕が特徴的だと思う点を紹介します。 パッと見でわかりやすいインターフェース cURLは必須ではないがデフォルトでcURLを使う cURLの無い環境がありうるので、cURL無しでも動くのは嬉しい cURLのわかりにくいインターフェースを隠してくれるの

    PHPでHTTPの並行ダウンロードを実現する(Guzzle編) - hnwの日記
    hilde
    hilde 2014/10/12
  • hardlink.pyを使ったらディスクの空き容量が劇的に増えた - hnwの日記

    ノートPCを使っているとディスクの空き容量が不足してくることがありますよね。僕の場合、$HOME/src/php以下にPHP 5.0.0から5.5.5まで88バージョンのPHPのソースコードを展開しているのですが、このサイズが約8.9GiB、約110万ファイルと恐ろしい量であることがわかりました。 そこで、この全ファイルに対してhardlink.pyを適用してみたところ、7.7GiBほど空き容量が増えました。稿ではこのhardlink.pyについて紹介します。 hardlink.pyとは hardlink.pyは、同じファイルを見つけてhardlinkにしてくれるPythonスクリプトです。同じファイルが多ければ多いほどディスクの空き容量を節約できるというわけです。 同じファイルと見なす条件はオプション指定で変更できますが、僕は「ファイルの中身とオーナーとパーミッションが完全一致、ただし

    hardlink.pyを使ったらディスクの空き容量が劇的に増えた - hnwの日記
    hilde
    hilde 2013/11/17
  • 第70回PHP勉強会で浮動小数点数の話をしました - hnwの日記

    7月22日に開催された第70回PHP勉強会で発表してきました。以下が発表資料です。 浮動小数点数周りのトピックを3点紹介する内容でしたが、思ったより反応が良かったように思います。 ただ、面白おかしく話そうとして、聞いている方々に無駄に恐怖を与えてしまったかもしれません。冷静に読み返していただければ、怖いように見える内容もレアケースの話題が多いことがわかるかと思います。 また、PDOの挙動については誤解を与えてしまったかと思いますので、プレゼン資料の25ページ目を大幅に差し替えてアップロードしました。 この点についてもう少し説明します。PDOでプリペアードクエリを利用する際、プレースホルダに値を埋め込むのにPDOStatement::bindValueメソッドを利用することができます。この際、bindValueメソッドの第3引数で利用でPDO::PARAM_INT定数を指定しても、第2引数の

    第70回PHP勉強会で浮動小数点数の話をしました - hnwの日記
  • php-buildで複数バージョンのPHP-FPMを用意する - hnwの日記

    (2016/8/9)PHP7やHomebrewの現状に合わせるため細かい点を修正しました。 ついにPHP 5.5.0がリリースされましたね!これに関連して、php-buildを使ってPHP 5.3/5.4/5.5の3バージョンのPHP-FPM環境を用意する方法を紹介します。 この記事は「phpenv + php-build を使って 5.3 と 5.4 を共存させつつ php-fpm を使う - 肉とご飯と甘いもの @ sotarok」のアップデートのような内容になっています。ありがとうsotarok! PHP-FPMとは PHP-FPMPHPのSAPI実装の一つで、単体で動作するアプリケーションサーバです。Apacheなしで動くので、気軽に扱えたりします。あまりうまく説明できないので、詳しくはPHP-FPM家サイトあたりを見てください。 phpenv+php-buildのセットアップ

    php-buildで複数バージョンのPHP-FPMを用意する - hnwの日記
    hilde
    hilde 2013/06/27
  • feof関数でwhileループを回す奴はド素人 - hnwの日記

    (2013-04-07 01:30追記)補足のコードに恥ずかしい間違いがあったのを修正しました。@nonakapさん、id:s-tomoさん、ご指摘ありがとうございます。 (2013-04-07 10:00追記)「補足その2」を書き足しました。 (2017-04-23追記)論旨がわかりにくい部分があったので、整理しました stackoverflowの記事「“while( !feof( file ) )” is always wrong」をざっくり翻訳してみます。これはWilliam Pursellさんによる自作自演スレ(回答者も人)で、Cでwhile( !feof( file ) )というループを作るのが悪い理由を説明するものです。 ちなみにPHPについてもほぼ同じことが言えますので、PHPプログラマの方にも一読をお勧めします(PHPの主要なファイル操作関数はCとほぼ同じインターフェース

    feof関数でwhileループを回す奴はド素人 - hnwの日記
    hilde
    hilde 2013/04/27
  • .gitignoreを作ってくれるgiboが便利すぎる - hnwの日記

    gitignore-boilerplates(長いので以後giboと呼びます)という便利なツールを紹介します。これは.gitignoreのひな形を作ってくれるものです。 https://github.com/simonwhitaker/gitignore-boilerplates もう少し詳しく説明すると、giboは様々なOS・エディタ・言語・フレームワークなどに特化したファイルの情報を利用して、複数環境を考慮した.gitignoreを作ってくれます。 .gitignoreに入れたいファイルは環境ごとに変わってくるわけですが、各人がcommitしたくないファイルの存在に気づくたびにチマチマ.gitignoreに追記していくのって当に無駄だと思うんですよね。giboはそれを自動化してくれるというわけです。 例えば、WindowsMacOSXの2環境、Emacsとvimの2エディタを使う人

    .gitignoreを作ってくれるgiboが便利すぎる - hnwの日記
    hilde
    hilde 2012/12/30
  • phpenv+php-build環境の構築と運用 - hnwの日記

    (2013-03-25追記)下記PHPのビルドにはgcc、autoconf、automake、libtool、bison、re2c、libmcrypt、jpeg、libpng、flex(PHP 5.2.17のみ)などのインストールが必要です。 PHPのバージョンを色々揃えたいというニーズは多くの人がお持ちだと思います。これを解決する方法の一つにphp-buildがあります。このツールとphpenvを組み合わせて使うことで、様々なバージョンのPHPを楽に扱うことができます。 これら2つのツールについては既に他の方も紹介されていますが、両ツールの最新バージョンに追随したい場合など、少々わかりにくい点がある気がします。また、インストール方法も何種類か流儀があり、どうするのがベストか悩んでいる人もいるのではないでしょうか。 稿ではphpenv+php-buildを僕がどう使っているかを紹介します

    phpenv+php-build環境の構築と運用 - hnwの日記
    hilde
    hilde 2012/09/23
  • HerokuのBuildpackを利用してmbstringが有効なPHPサーバを立ててみた - hnwの日記

    HerokuといえばRubyのPaaSという印象が強いのは僕だけでしょうか。しかし、Herokuの現在の最新環境であるCedarでは下記の7つのプラットフォームをサポートしているんだそうです。(出典:The Celadon Cedar Stack | Heroku Dev Center) Clojure Facebook Java, Spring or Play Node.js Python or Django Ruby or Rails Scala このうちFacebookだけが異彩を放っているんですが、説明を読んでみるとFacebookアプリに特化したもののようで、バックエンドの言語としてはRuby, Node.js, Python, PHPが使えるらしいです。(出典:Getting Started with Your Facebook App on Heroku | Heroku D

    HerokuのBuildpackを利用してmbstringが有効なPHPサーバを立ててみた - hnwの日記
  • PHPのロケールに関するまとめ - hnwの日記

    5/3 17:45追記:t_komuraさんに指摘いただいた関数と、さらに僕が調べ直したものを含め、「ロケール設定に従う関数一覧」に25個ほど追加しました。かなり見落としがありましたね…。 PHPのロケール*1まわりについて調査したので、これをまとめてみます。 この記事は「ロケールの影響を受ける関数 - Sarabande.jp」を掘り下げたものです。masakielasticさん、ナイスな記事をありがとうございます。 PHPの文字列型と文字エンコーディング 他のモダンなLL言語と異なり、PHPは文字列の文字エンコーディングに関して何も仮定せず、単なるバイト列として管理しています。つまり、文字エンコーディングの取り扱いは各関数の実装に委ねられています。 下記の通り、これはマニュアルにも記述があるのですが、実に残念なことです。 残念ながら、PHP の各関数が文字列のエンコーディングを判断する

    PHPのロケールに関するまとめ - hnwの日記
    hilde
    hilde 2012/05/05
  • WebスクレイピングライブラリGoutteで遊んでみる - hnwの日記

    新年あけましておめでとうございます。今年もボチボチやっていきます。 稿ではPHP製のWebスクレイピングライブラリGoutteを紹介します。 Goutte(グット)とは Goutteは必要十分な機能を持ったWebスクレイピングライブラリです。そもそもWebスクレイピングというのは、外部Webページから必要なデータを取ってくるくらいの意味です。つまり、GoutteはWebスクレイピングを簡単に行う道具だと考えればいいでしょう。 具体的には、GoutteはWebクローラとHTMLパーサを組み合わせたようなものです。Cookieやフォームの扱いなどWebブラウザとしての機能は一通り揃っていますし、CSS風の要素指定もできるなど、機能面では他のライブラリと遜色ないように感じます。 さらに僕個人がGoutteに期待している点は、安定性とロングサポートです。Goutteは主要機能をSymfony2お

    WebスクレイピングライブラリGoutteで遊んでみる - hnwの日記
    hilde
    hilde 2012/01/22
  • PHPの日付文字列の解釈ルールがドキュメント化されました - hnwの日記

    PHPのstrtotime関数やDateTimeクラスは、様々なフォーマットの日付文字列を解釈し、時刻として取り扱うことができます。たとえば次のような文字列を解釈することができます。 "Wednesday July 23rd, 2008"(=2008年7月23日) "first Wednesday July 23rd, 2008"(=2008年7月30日、PHP5.1.0以降) "first Wednesday of July 23rd, 2008"(=2008年7月2日、PHP5.3.0以降) こうした日付の解釈はPHP独自の実装です*1。当初はGNUの日付記法に準拠していたようですが*2、今や別物といっていいでしょう。にもかかわらず、これまで解釈ルールの詳細を説明するドキュメントが存在しない状態が続いていました。 そのため、仕様を推測する根拠はstrtotime関数のサンプルコードとP

    PHPの日付文字列の解釈ルールがドキュメント化されました - hnwの日記
    hilde
    hilde 2011/02/12
  • 日付と時刻の豆知識 (4)tz databaseと日本のサマータイム - hnwの日記

    tz database(zoneinfo database、Olson Databaseとも)とは、世界のタイムゾーン名と、時差およびサマータイムの運用情報をまとめたファイル、もしくはそれをまとめるプロジェクト名のことです。プログラミング言語およびOSでの利用を想定して作られたもので、BSD由来のシステム(FreeBSD、NetBSD、OpenBSD、MacOSXなど)、glibc利用のシステム(Linuxなど)、その他の各種商用UNIXで利用されています。Linuxのディストリビューションであればtzdataというパッケージ名でインストールされていますので、見覚えがある人も多いでしょう。 プログラミング言語での利用例を見ると、PHPでは標準のタイムゾーンの枠組みとして組み込まれていますし、JREにも含まれているようです。また、Perlの DateTime::TimeZone モジュールや

    日付と時刻の豆知識 (4)tz databaseと日本のサマータイム - hnwの日記
    hilde
    hilde 2011/01/22
  • PHPのcopy関数がファイルサイズ分のメモリを消費する件の対策 - hnwの日記

    補足(2010/08/24 15:00):rename関数について言えば、同一ファイルシステム上であればrenameシステムコールを利用するのでこの問題は起こりません。さらに蛇足ですが、ファイルシステムをまたがってrename関数を利用するとコピーしてから削除することになり、アトミック性を保証できないため、障害の原因にならないかどうかの検討が必要だと思います。 「AKIBA de: PHPのrename()関数はファイルシステム間で使うとメモリをバカいする」で指摘されている通り、PHPのcopy関数やファイルシステムをまたがってrename関数を使う場合に、PHPがファイルサイズと同じ大きさのメモリを消費してしまいます。環境によっては再現しないかもしれませんが、僕の手元のMacOSX 10.5+PHP5.3.3環境では再現しました。 <?php // 「dd if=/dev/urando

    PHPのcopy関数がファイルサイズ分のメモリを消費する件の対策 - hnwの日記
    hilde
    hilde 2010/08/24
  • MacOSXのインストール直後にシステム環境設定でやるべきことリスト - hnwの日記

    先日、古いMacBookにSnow Leopardをクリーンインストールしました。その際、以前Leopardをインストールする時にメモしておいた「システム環境設定」の作業リストが役に立ったので公開します。 ややマニアックな設定も含まれていますので、取捨選択してお使いください。他に「これもオススメ!」という設定があれば教えてください。 「共有」「コンピュータ名」のマシン名を変更 「山田太郎のMacBook」みたいなキモい名前になっているので、ホスト名っぽい名前に変更しましょう。 何台かマシンを所有している場合は植物や鉱石といった無生物の名前で統一するのが個人的にはオススメです。 「共有」「コンピュータ名」「編集」でローカルホスト名を変更 「yamada-taro-no-macbook.local」みたいなキモい名前になっているので「ホスト名.local」に変更しましょう。 あまり知られていま

    MacOSXのインストール直後にシステム環境設定でやるべきことリスト - hnwの日記
    hilde
    hilde 2010/07/27
  • モダンにGmailからメール送信 - hnwの日記

    補足:Email::MIMEについては「モダンPerlの世界へようこそ:第20回 Email::Sender:メールを送信する|gihyo.jp … 技術評論社」の内容とかぶってました…。この記事によればEmail::Senderも既に安定してるみたいなので、Email::Sendを使っている記事の内容はあまり意味がない気がします。 久々にPerlの話題です。「メールの送信 - モダンなPerl入門」にある通り、最近はEmail::MIME+Email::Sendでメールを送るのが流儀なんだそうです。*1 しかし、まだまだPerl使いの中でもモダンすぎるせいか、ネットを探しても利用例が少ない気がしました。特に、Gmailからメール送信したい場合にはEmail::Send::SMTPでSSLまたはTLS認証を利用することになるんですが、その実例となると皆無に近い気がしましたので、そのあたり

    モダンにGmailからメール送信 - hnwの日記
  • Symfony Event Dispatcherで遊んでみた - hnwの日記

    Symfony Event Dispatcher とは Symfony Event DispatcherというのはPHPフレームワークであるsymfonyに含まれるライブラリで、GoF*1のObserverパターンの変種です。 このクラスは現在Symfony Event Dispatcherという名前で単体公開されていますので、symfony以外のプロジェクトでも気軽に利用できると思います。全部で300行程度の小さいライブラリで、テストコードが29件書かれています。 また、ガイドとAPIリファレンスが書かれています。レシピ集を見ればsymfonyでどう利用されているかを垣間見ることが出来ます。テストカバレッジ率100%なんてことも書いてありますね。 稿では、PHP5に対応したObserverパターンの実装としてのSymfony Event Dispatcherについて紹介します。 Obs

    Symfony Event Dispatcherで遊んでみた - hnwの日記
    hilde
    hilde 2009/08/07
  • round関数その6:啓蒙とお詫び - hnwの日記

    Referer一覧の存在に気づいたので、リンクして下さっている方々の文章を今更読んでいます。ただ、おそらく浮動小数点数の扱いが拙いのをround関数のせいにしているような文章を見つけました。もしそういう誤解があれば非常に残念だと思うと同時に、これだけ注目を集めたからには浮動小数点数一般の罠について簡単に紹介してみても良いかな、と思いつきました。浮動小数点数まわりでハマった人がここに検索でやってくることがあるかもしれません。 そんなわけで、今回のテーマは啓蒙です。浮動小数点数の不思議さについて簡単な紹介記事を書いてみました。また、第1回記事中の誤っている点について、1点訂正をします。今回はイメージ先行で書いてみましたが、伝えていないことはあっても嘘は書いていないつもりです。正確な内容が知りたくなった方はWikipediaの記事「浮動小数点数」を読むと良いでしょう。または、そこからリンクされて

    round関数その6:啓蒙とお詫び - hnwの日記
  • PHPのround関数の謎が少し解けた - hnwの日記

    2週間以上前の記事「PHPの奇妙なround関数」がすごいことになっていますね。最近書き始めたばかりの日記にこんなに人が来るなんて、有名人の集客力は流石だなあ、などと感心しています。 その集客力のおかげかもしれませんが、FreeBSDとMac OS Xだと挙動が違うよ、というコメントを頂きました。実際にFreeBSDで試してみたところ、確かにLinuxと異なる、いわばマトモな挙動です。その原因がわかりました、というのが稿の概要です。僕がモタモタ記事を書いている間に理由がわかっちゃった人も居るかとは思いますし、より詳細なところまで把握した人も居そうですが、僕なりに現時点でわかったことを書いてみます。 前回の記事で、PHP_ROUND_FUZZという定数が「少なくとも僕の手元の環境では」0.50000000001と定義されている、と書きました。この詳細を説明すると、configureスクリプ

    PHPのround関数の謎が少し解けた - hnwの日記
    hilde
    hilde 2007/06/05
  • 1