hnwの日記

2013-01-01から1年間の記事一覧

ぼくのかんがえたさいきょうのround関数

浮動小数点数の丸めにおいて丸め桁数を指定でき、それでいて精度を失わないようなround関数をCで実装してみました。 https://github.com/hnw/precise-round 実装としては、受け取った浮動小数点数から最短になる10進表記に変換し、浮動小数点をズラすことな…

RubyとPythonとC#のround関数のバグっぽい挙動について

(12/29 20:40追記)「(追記)なぜMySQLのdecimal型を例に使ったかについて」というセクションを追加しました。また、コメントを頂戴したので返信しました。 (12/29 21:30追記)C#について言えば「Math.Round メソッド (Double, Int32)」に内部実装がどうなっ…

hardlink.pyを使ったらディスクの空き容量が劇的に増えた

ノートPCを使っているとディスクの空き容量が不足してくることがありますよね。僕の場合、$HOME/src/php以下にPHP 5.0.0から5.5.5まで88バージョンのPHPのソースコードを展開しているのですが、このサイズが約8.9GiB、約110万ファイルと恐ろしい量であること…

Mavericks上での古いPHPのビルドが苦行だった

PHP

先週、MacBook Air 11inch Late 2010にMacOSX Mavericksをインストールしてみました。まだ時々違和感がありますが、もう1ヶ月もすれば細かい問題点も消えてくるのではないでしょうか。 しかし、Mavericks上でOSSをビルドしようと思うと案外苦労するかもしれ…

PHPのジェネレータはイテレータより速い

PHP

先日の記事「PHPのジェネレータの実装を調べてみた」で僕は次のように書きました。 GeneratorクラスはIteratorインターフェースを実装しており、対応するPHPメソッドを持っています。また、Cで実装した場合のみ指定できるイテレータ関数も実装しています。こ…

PHPのジェネレータの実装を調べてみた

PHP

PHP 5.5で実装されたジェネレータについて、PHPのソースコードを追いかけてみました。ボチボチ追いかけたつもりですが、間違いや説明不足に気づいた方はツッコミをお願いします。 該当箇所のgithub.comへのリンクも作ってみました。カギ括弧で囲った場所がソ…

イテレータを介して見るPHPクラスの内部構造

PHP

PHPにはイテレータの仕組みがあります。イテレータクラスのインスタンスは、配列同様にforeach文でループを作ることができます。たとえば次の例を見てみましょう。

PHPカンファレンス2013でZend OPcacheについて発表しました

PHP

9月14日に開催されたPHPカンファレンス2013で発表してきました。以下が発表資料です。

OpenSSH 6.2p2のAndroid用パッチ書いた

OpenSSH 6.2p2のAndroid用パッチを書きました。ビルドにはOpenSSLとldnsが必要です。 https://gist.github.com/hnw/6265015 記憶が曖昧なのですが、作業内容を書いておきます。 OpenSSH snapshot のAndroid関連の修正を取り込み ldnsの動作にOpenSSLが必要な…

第70回PHP勉強会で浮動小数点数の話をしました

7月22日に開催された第70回PHP勉強会で発表してきました。以下が発表資料です。 浮動小数点数周りのトピックを3点紹介する内容でしたが、思ったより反応が良かったように思います。 ただ、面白おかしく話そうとして、聞いている方々に無駄に恐怖を与えてしま…

PHP extensionとZend extensionの違い

PHP

PHPのextensionにはPHP extensionとZend extensionという2種類があります。これらの違いが何なのか、PHPの実装レベルから調べてみました。 PHPのextensionについて PHPのextensionには2種類が存在します。これらは次のようにphp.iniでロード指定する構文が異…

launchdで複数バージョンのPHP-FPMを自動起動する

PHP

(2016/8/9)PHP7やHomebrewの現状に合わせるため細かい点を修正しました。 MacOSX上で5.3/5.4/5.5の3バージョンのPHP-FPMを自動起動する設定を紹介します。 各バージョンのPHP-FPMを用意する方法については、前回記事「php-buildで複数バージョンのPHP-FPM…

php-buildで複数バージョンのPHP-FPMを用意する

PHP

(2016/8/9)PHP7やHomebrewの現状に合わせるため細かい点を修正しました。 ついにPHP 5.5.0がリリースされましたね!これに関連して、php-buildを使ってPHP 5.3/5.4/5.5の3バージョンのPHP-FPM環境を用意する方法を紹介します。 この記事は「phpenv + php-b…

feof関数でwhileループを回す奴はド素人

(2013-04-07 01:30追記)補足のコードに恥ずかしい間違いがあったのを修正しました。@nonakapさん、id:s-tomoさん、ご指摘ありがとうございます。 (2013-04-07 10:00追記)「補足その2」を書き足しました。 (2017-04-23追記)論旨がわかりにくい部分があ…

第66回PHP勉強会でPHP-FPMの話をしました

PHP

3月27日に開催された第66回PHP勉強会でLT発表してきました。以下が発表資料です。 発表内容は、 PHP-FPMとuWSGI+PHP pluginを試してみた話と、PHP-FPMの面白機能紹介といった内容です。 個人的にPHP-FPMの記事は絶賛記事が多すぎて気持ち悪いと感じていたの…

PHP extension中でvar_dumpデバッグする方法

PHP

誰得な内容ですので簡潔に。 #include "Zend/zend_interfaces.h" // (略) zval *zp; // (中略、この間にzpに意味のある値が入ったとする) // zpの型が何だろうと綺麗に表示! zend_call_method_with_1_params(NULL, NULL, NULL, "var_dump", NULL, zp); Z_…

第四回闇PHP勉強会でTravis CIの話をしました

PHP

3月2日に開催された第四回闇PHP勉強会で発表してきました。以下が発表資料です。 発表内容は、 Travis CIでPHP extensionのCIをする方法についてです。同じことをしている人があまり居ないように思ったので紹介してみましたが、少なくとも一部の人には好評だ…

PHP5.5のジェネレータをSPLのイテレータと組み合わせてみる

PHP

リリースが間近になったPHP5.5ではジェネレータが導入される予定です。これはイテレータを簡単に記述する文法を導入するもので、Pythonのジェネレータに非常に良く似ています。 もう少し詳しく説明しましょう。PHP5.5では、yieldというキーワードが導入され…

Haskellのカッコいいところを紹介してみる

あけましておめでとうございます。本年もよろしくお願いいたします。 唐突ですが、Haskellを少しやってみたので、その感想を書いてみます。 僕は正月休みにHaskellでProject Eulerに挑戦していました。これは、数学っぽい問題をプログラムを書いて解いていく…