hnwの日記

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

日付と時刻の豆知識 (4)tz databaseと日本のサマータイム

tz database(zoneinfo database、Olson Databaseとも)とは、世界のタイムゾーン名と、時差およびサマータイムの運用情報をまとめたファイル、もしくはそれをまとめるプロジェクト名のことです。プログラミング言語およびOSでの利用を想定して作られたもの…

日付と時刻の豆知識 (3)民法によるNヶ月間の定義

電車の定期券など、当日または指定日から何ヵ月かの契約というのは一般的によく見られます。Web上でも同様で、一定額を支払うことで一定期間(たとえば1ヶ月315円など)、何らかの情報が得られるようなサービスは珍しくありません。 ところで、こうした場合…

日付と時刻の豆知識 (2)うるう秒とコンピュータ

うるう秒とは、地球の自転と時刻とのずれを補正するために、特定の日を1秒だけ長くしたり短くしたりして調整するものです。私たちが日常的に利用している時刻は原子時計を基準にしていますが、地球の自転する速度は僅かながら変化し続けているので、観測に基…

日付と時刻の豆知識 (1)暦と地球の運行

WEB+DB PRESSに連載中の「PHP転ばぬ先の杖」も次で5回目です。表紙にも載せて頂きましたが、次号Vol.60では「日付と時刻」をテーマに書きました。12月23日発売予定だそうですので、よろしくお願いします。 ところで、今回の原稿のために調べたものの、雑誌記…

細かすぎてChangeLogにも載らないバグフィックス選手権

PHP

本日付でPHP 5.3.4がリリースされました。ChangLogを眺めたところではそれほど大きなツッコミどころは無さそうです。 ところで、このPHP 5.3.4からChangeLogにも載っていないバグ #52826 が修正されています。これは僕が報告したバグで、php -iすると嘘のス…

WEB+DB Pressで「PHP転ばぬ先の杖」連載中です!

『WEB+DB PressでPHPの連載をはじめました』でも紹介しましたが、「WEB+DB Press」Vol.56より「PHP転ばぬ先の杖」の連載を担当しています。その後も作者急病や打ち切りもなく、何とか連載は続いています。 これまで発売されている4回の連載タイトルは次のよ…

PHPMatsuriに参加してきました

10月2日から3日にかけて、PHPMatsuriに参加してきました。1日目の午前中は大部屋でセッション、午後からは部屋を区切ってセッション+ワークショップの2並列、1日目の夜から2日目の昼まで各自ハック、2日目の午後からハックしたものについてのLT大会、という…

PSR-0 を和訳してみた

PHP

先週の土日にPHPMatsuriに行ってきました。ナイスなイベントでしたね。その感想はまた改めて書きますが、Nate Abeleによるセッション「Practical PHP 5.3」で触れられていたPSR-0を適当に訳してみました。これはPHP5.3の名前空間とクラス名に関する標準化の…

PHPカンファレンス2010で発表&パネル発表してきました

PHP

9月24日、25日の両日、PHPカンファレンス2010が開催されました。僕は25日のテックデイで、PHPのストリームについて発表してきました。また、最初のPHPを作った開発者であり今もPHPのコアデベロッパーであるRasmusとHipHop for PHPの開発者Scottを招いての発…

PHPのcopy関数がファイルサイズ分のメモリを消費する件の対策

PHP

補足(2010/08/24 15:00):rename関数について言えば、同一ファイルシステム上であればrenameシステムコールを利用するのでこの問題は起こりません。さらに蛇足ですが、ファイルシステムをまたがってrename関数を利用するとコピーしてから削除することになり…

例えばPHPのpreg_replace関数でe修飾子を避ける

PHP

(2015/04/19追記)e修飾子はPHP 5.5からdeprecatedになっています。また、PHP7からは廃止されます。PHPのpreg_replace関数では、e修飾子が利用できます。これはPerlから輸入された機能で、置換後パターンの文字列をPHP文法に従って評価する(evalする)とい…

PHPのPCRE関数での\Q,\EはPerlと同一ではない

PHP

Perl正規表現で利用できる便利なエスケープシーケンスとして、\Qと\Eがあります。これはメタ文字の解釈を止めたり、その解釈を再開したりするものです。「man perlre」には次のような例が出てきます。 /$unquoted\Q$quoted\E$unquoted/ この正規表現は変数$u…

PHPの文字列型は2GB以上の文字列を処理できない

PHP

(2015/6/12追記)PHP7から、64bit環境であれば2GB以上の長さの文字列が扱えるようになります。やったね! PHPの文字列型は、一般には文字列長の制限が無いとされています。PHPマニュアルにも次のように書いてあります。 注意: 文字列が非常に大きくなっても…

Snow Leopardで少し古いPHPをビルドする方法

PHP

PHP bugs #49332で指摘されているのですが、PHP5.2.10以前およびPHP5.3.0をSnow Leopard(MacOSX 10.6)でビルドしようとすると、リンク時に下記のようなエラーが出てビルドに失敗します。 Undefined symbols: "_res_9_search", referenced from: _zif_dns_get…

MacOSXのインストール直後にシステム環境設定でやるべきことリスト

先日、古いMacBookにSnow Leopardをクリーンインストールしました。その際、以前Leopardをインストールする時にメモしておいた「システム環境設定」の作業リストが役に立ったので公開します。 ややマニアックな設定も含まれていますので、取捨選択してお使い…

WEB+DB PressでPHPの連載をはじめました

PHP

非常に今更ですが、「WEB+DB Press」でPHPの連載記事を書きはじめました。連載タイトルは「PHP転ばぬ先の杖」ということで、PHP初心者から中級者をターゲットに、PHPではまりやすい落とし穴や便利なtipsなどを紹介していきたいと思っています。 Vol.56掲載の…

PHPで1599年以前の曜日計算がおかしい

PHP

(2010-04-24 17:40)内容を補足する意味で「グレゴリオ暦が採用された時期とプログラミング言語の対応」「ユリウス暦を扱いたい場合」を追記しました。 PHPの日付まわりの処理にバグを見つけました。1599年以前の日付の75%程度の曜日を誤判定するバグがPHP …

PHPで整数の範囲を超えたときの挙動について

PHP

(4/17追記)twitter経由でタレコミがありまして、恥ずかしいミスをコッソリ直しました(32bit整数の範囲について)。どなたかわかりませんが、ありがとうございます! PHPの整数(integer型)はCのlong型をそのまま利用しています。つまり、32bit環境であれ…

64bit環境とPHP

PHP

先週のPHP勉強会の僕のプレゼン「64bit PHPの罠」に間違いがありました(参照:「第51回PHP勉強会@関東に参加してきました」)。全体の主張はそれほど変わりませんが、下記の通り訂正いたします。 誤:「PHPのinteger型はCのint型」「64bit環境ではPHPのinte…

Unknown曜日

PHP

(2016/04/01追記) 本バグはPHP 5.5.20以降、およびPHP 5.6.4以降で修正されています。 64bit環境のPHPで過去の曜日を調べてみたら「知らんよ」って言われました。

第51回PHP勉強会@関東に参加してきました

PHP

追記(2010-04-04):ごめんなさい、プレゼン内容に一部嘘が混ざってました。「64bit環境とPHP」も併せてご覧下さい。 第51回PHP勉強会@関東に参加して、15分ほどのプレゼンをしました。勉強会の会場は、毎度おなじみトライコーン株式会社さんでした。suzukiさ…

ctype_digit関数の罠

PHP

PHPにはctype_digitやctype_lowerなど、ctype_XXXXという関数が多数あります。本記事の話題はこれらctype関数の挙動と注意点についてです。ctype関数のマニュアルには下記のような記述があります。 これは、256 より小さな整数が指定された場合、指定した範…

PHPのY10K問題

PHP

PHPは他の言語と同様に、時刻を扱う際にunix epochからの経過秒数(いわゆるunix time)を利用しています。PHP5.2.6以降では、64bit環境であればunix timeも64bitに拡張されています。これで2038年問題も過去のものになるというわけです。 一方、unix timeが…

sort関数と全順序集合

PHP

大仰なタイトルですが、約1年前の記事「PHPのsort関数は相当おかしい」の補足記事です。僕が何を根拠にPHPのsort関数(の第二引数のデフォルト値)がおかしいと思ったかを説明します。一言でいうと、PHPの全ての値とSORT_REGULAR(言い換えるとPHPの)の組み…