タグ

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

  • Mavericks上での古いPHPのビルドが苦行だった - hnwの日記

    先週、MacBook Air 11inch Late 2010にMacOSX Mavericksをインストールしてみました。まだ時々違和感がありますが、もう1ヶ月もすれば細かい問題点も消えてくるのではないでしょうか。 しかし、Mavericks上でOSSをビルドしようと思うと案外苦労するかもしれません。僕は古いPHPをビルドする趣味を持っているのですが、かなり骨が折れました。折角なのでハマったポイントを紹介します。 gccって名前のバイナリがgccじゃない 最初の罠ですが、MavericksからCコンパイラが変わりました。Xcodeをインストールするとgccという名前のバイナリが/usr/binにできますが、コイツはgccじゃありません。 $ /usr/bin/gcc --version Configured with: --prefix=/Applications/Xcode.app/C

    Mavericks上での古いPHPのビルドが苦行だった - hnwの日記
  • PHPのジェネレータの実装を調べてみた - hnwの日記

    PHP 5.5で実装されたジェネレータについて、PHPのソースコードを追いかけてみました。ボチボチ追いかけたつもりですが、間違いや説明不足に気づいた方はツッコミをお願いします。 該当箇所のgithub.comへのリンクも作ってみました。カギ括弧で囲った場所がソースコード断片へのリンクになっていますので、PHPソースコードリーディングに興味がある方はリンク先も参照してください。なぜか5.5.5のタグが切られていなかったので5.5.4が対象です。 ジェネレータ関数の返す値 yield文を含む関数をジェネレータ関数と呼びます。PHPのparse時にyield文が見つかると、「その関数がジェネレータ関数であるというフラグが立てられます」。 ジェネレータ関数は普通の関数と異なり、呼ばれたタイミングでは関数の実行を行いません。代わりに、「ジェネレータ関数に紐付いたGeneratorクラスのインスタンス

    PHPのジェネレータの実装を調べてみた - hnwの日記
  • イテレータを介して見るPHPクラスの内部構造 - hnwの日記

    PHPにはイテレータの仕組みがあります。イテレータクラスのインスタンスは、配列同様にforeach文でループを作ることができます。たとえば次の例を見てみましょう。 <?php $iter = new SplQueue(); $iter[] = 1; $iter[] = 2; $iter[] = 3; $sum = 0; foreach ($iter as $v) { $sum += $v; } var_dump($sum); // int(6) SplQueueというのはキューを実現するイテレータで、ArrayAccessも実装しているので配列のように要素を追加することができます。この場合、3つの要素を持っているのでイテレーションも3回になります。 SplQueueによるイテレーションをネストしてみる ところで、同じイテレータをネストした場合どうなるでしょうか?次のようなコードを考えてみま

    イテレータを介して見るPHPクラスの内部構造 - hnwの日記
  • 第70回PHP勉強会で浮動小数点数の話をしました - hnwの日記

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

    第70回PHP勉強会で浮動小数点数の話をしました - hnwの日記
  • 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の日記
  • 第4回Symfony2勉強会でLT発表してきました - hnwの日記

    去る6月4日、第4回Symfony2勉強会でLT発表してきました。以下が発表資料です。 発表資料:「PHPUnitのMockObjectの紹介」(slideshare版)(PDF版) 僕だけSymfony2と何の関係があるの?という感じのタイトルでしたが、案外好評だったように思います。懇親会でも何人かに声をかけて頂いて、このあたりの話題は結構ニーズがあるんだなーと感じました。 スタブとモックの違いについては伝えるのが難しいかと思っていたのですが、伝わったよ、と言ってくれた人がいて、安心しました。ちなみに文中で触れているMatrin Fowlerのブログ記事は下記です。 「Mocks Aren't Stubs」 発表中、Martin Fowlerはモックによるテストに懐疑的なようだ、という話を紹介しました。もう少し詳しく紹介すると、モックで「ふるまい」のテストを書くためには、どう実装するか

    第4回Symfony2勉強会でLT発表してきました - hnwの日記
  • GitHubへpull requestする際のベストプラクティス - hnwの日記

    みなさん、Git使ってますか?僕はまだメインのVCSがSubversionなのもあって、なかなか慣れません。せっかくGitを使っているのに、ちょっと不便なSubversionくらいの位置づけです。でも、同じような理解度の人って多いんじゃないでしょうか。 一方で、最近はGitHub管理のオープンソースプロジェクトが増えてきました。バグレポートを送るにしてもpull request*1が前提のような空気があり、Git初心者には少し敷居が高い印象があります。 そんな僕も先日初pull requestをしてみたんですが、色々な失敗の積み重ねで残念なpull requestになってしまいました。その反省を元に、稿ではpull requestする際のベストプラクティスを紹介します。これは「Git Workflow」をベースにコマンド例などを加筆したものです。 概要 pull requestする際は、

    GitHubへpull requestする際のベストプラクティス - hnwの日記
  • PHPMatsuriに参加してきました - hnwの日記

    10月2日から3日にかけて、PHPMatsuriに参加してきました。1日目の午前中は大部屋でセッション、午後からは部屋を区切ってセッション+ワークショップの2並列、1日目の夜から2日目の昼まで各自ハック、2日目の午後からハックしたものについてのLT大会、というような流れでした。 事前情報をほとんどチェックできておらず、宿つきのハック大会+ごく小規模なセッションというくらいの認識で行ったのですが、とんでもない勘違いでした。セッションだけでも非常に充実していて、裏側のワークショップも非常に楽しそうで、それだけでヘロヘロなのに深夜までハックする人が多数という、ひょっとしたら通常の4日分くらいが詰めこまれた2日間でした。 僕はずっとセッションを聞いていたのですが、Nate Abeleの「Practical PHP 5.3」とJoel Perras&Nate Abeleの「フレームワーク嫌いの人の為

    PHPMatsuriに参加してきました - hnwの日記
  • 見直されるべきPHP5の組み込みイテレータ - hnwの日記

    PHPには5.0.0以降SPL (Standard PHP Libray)という枠組みが導入されています。これにより、Iteratorインターフェースを実装したクラスのインスタンスであれば、foreach文で配列と同じように取り扱えます。自分でクラスを作るときもIteratorを実装すれば使うのが楽ですし、コードも読みやすくなると思います。 また、PHPに標準で組み込まれているクラスにはIteratorを実装しているものが多数あります。たとえば僕の手元のPHP5.2.9には24個のイテレータがあり、そのうちいくつかは十分に実用的なクラスです。ただ、日語の資料が少ないせいか、かなり知名度は低いように思います。記事では4つの便利な組み込みイテレータを紹介します。 SPLのクラスにはデザインパターンの考えが多く含まれています。特に、イテレータを元にイテレータを作るような使い方は、保守性の高い

    見直されるべきPHP5の組み込みイテレータ - hnwの日記
    innx_hidenori
    innx_hidenori 2009/05/24
    リンク先のPDFもあわせて。/PDOStatementもTraversable→http://jp.php.net/manual/en/class.pdostatement.php
  • PHPのround関数の謎が少し解けた - hnwの日記

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

    PHPのround関数の謎が少し解けた - hnwの日記
    innx_hidenori
    innx_hidenori 2008/08/22
    round関数
  • 1