hnwの日記

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

.gitignoreを作ってくれるgiboが便利すぎる

gitignore-boilerplates(長いので以後giboと呼びます)という便利なツールを紹介します。これは.gitignoreのひな形を作ってくれるものです。 https://github.com/simonwhitaker/gitignore-boilerplates もう少し詳しく説明すると、giboは様々なOS・エディタ…

PHP 5.3.4以降ではヌルバイト攻撃が成立しにくくなった

PHP

今回はWebセキュリティの話題です。実はid:t_komuraさんの記事で既報なんですが、案外知られていない気がしたので改めて紹介します。 PHPアプリケーションに特化した攻撃手法として、ヌルバイト攻撃というものがあります。PHPの大半の関数がヌル文字\0(0x00…

PHPカンファレンス2012でphp-timecopについてLT発表しました

PHP

9月15日に開催されたPHPカンファレンス2012でLT発表してきました。以下が発表資料です。 発表資料:「php-timecopを実戦投入してみた」(slideshare版)(PDF版) ただ、利用シーンがイマイチわからないという声を何件か頂戴しましたので、本稿で改めて補足しま…

第三回闇PHP勉強会でPHPエクステンションの話題を発表しました

PHP

9月1日に開催された第三回闇PHP勉強会で発表してきました。以下が発表資料です。 発表資料:「PHPエクステンションの開発tips」(slideshare版)(PDF版) 闇PHP勉強会というのは@anatooさんが開催している謎の集まりで、他のPHPの勉強会ではウケが悪そうなネタ…

phpenv+php-build環境の構築と運用

PHP

(2013-03-25追記)下記PHPのビルドにはgcc、autoconf、automake、libtool、bison、re2c、libmcrypt、jpeg、libpng、flex(PHP 5.2.17のみ)などのインストールが必要です。PHPのバージョンを色々揃えたいというニーズは多くの人がお持ちだと思います。これを…

.emacsでCarbon EmacsとCocoa Emacsを判別する方法

僕は今までCarbon EmacsとCocoa Emacsを判別するのに次のような分岐を使っていました。 ;;;フォント設定 (when (and (eq system-type 'darwin) window-system) (cond ((eq emacs-major-version 22) ;; Carbon Emacs ) ((>= emacs-major-version 23) ;; Cocoa…

HerokuのBuildpackを利用してmbstringが有効なPHPサーバを立ててみた

PHP

HerokuといえばRubyのPaaSという印象が強いのは僕だけでしょうか。しかし、Herokuの現在の最新環境であるCedarでは下記の7つのプラットフォームをサポートしているんだそうです。(出典:The Celadon Cedar Stack | Heroku Dev Center) Clojure Facebook Ja…

gitが無くてもgit cloneするコマンドfakegitを作りました

最近は一段とGitHubが流行してきたように思います。多くのオープンソースプロジェクトがGitHubに移転するなど、いまやOSS開発者にとっては無くてはならない存在ですね。 ところで、GitHubにホストされているプロジェクトの中には、インストール方法として「g…

第59回PHP勉強会でPHPのマルチバイト処理の分類について発表しました

PHP

去る25日の金曜日に第59回PHP勉強会@東京で発表してきました。以下が発表資料(少し修正しました)です。 発表資料:「PHPのマルチバイト処理 ― 分類と落とし穴」(slideshare版)(PDF版) 久々のPHP勉強会だったので張り切って発表しに行ったのですが、他の人…

Lionでwebfilterproxydが暴走する件の解決

僕の手元のMacOSX 10.7 Lionでは、Webブラウザからネット接続ができなくなることがあります。頻度としては月に1回くらいでしょうか。再起動せずに解決する方法を見つけたので、書き記しておきます。 これは、Webブラウザだけがネット接続できなくなり、同時…

PHPの対話モードでuseしたら1行後には忘れられてた

PHP

PHPの対話モードに関する小ネタです。PHPコマンドは-aオプションつきで起動すると対話モードになります。libreadlineかlibeditを有効にしてビルドしたPHPであれば、下記のようにプロンプトが表示されて入力を促されます。 $ php -a Interactive shell php > …

PHPのロケールに関するまとめ

PHP

5/3 17:45追記:t_komuraさんに指摘いただいた関数と、さらに僕が調べ直したものを含め、「ロケール設定に従う関数一覧」に25個ほど追加しました。かなり見落としがありましたね…。 PHPのロケール*1まわりについて調査したので、これをまとめてみます。 この…

MySQLの自前strtod実装がタコすぎる

MySQL5.1のソースコードを確認していたところ、浮動小数点数の10進表記から浮動小数点数への変換処理に実装上の問題点を見つけました。浮動小数点数処理の典型的な落とし穴にはまっていて、計算の途中で精度を落としてしまっています。 これは古くから知られ…

MySQLの文字列型から数値型への自動型変換が意味不明すぎる

SQLでは違う型同士の演算で暗黙の型変換が起こります。この挙動はDBMSごとにバラバラであるため、混乱の元になることがあります。これについては徳丸さんが「SQLの暗黙の型変換はワナがいっぱい - 徳丸浩の日記」などで指摘されているので、一読をお勧めしま…

MySQLには1足せない数値リテラルがある

MySQLの数値リテラルに+1すると怒られたり、オーバーフローしたりすることがあります。下記は僕の手元のMySQL5.5.22での実行結果です。 mysql> select 9223372036854775807+1; ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807 +…

MySQL5.1以降の小数の扱いがキモい

穏やかな昼下がりにMySQLで小数の足し算をしていたところ、不思議な現象を見つけました。 mysql> select 0.8=0.7+0.1; +-------------+ | 0.8=0.7+0.1 | +-------------+ | 1 | +-------------+ 1 row in set (0.00 sec) mysql> select 0.8=0.7+0.1e0; +----…

WebスクレイピングライブラリGoutteで遊んでみる

PHP

新年あけましておめでとうございます。今年もボチボチやっていきます。本稿ではPHP製のWebスクレイピングライブラリGoutteを紹介します。 Goutte(グット)とは Goutteは必要十分な機能を持ったWebスクレイピングライブラリです。そもそもWebスクレイピング…