strtotimeとtimestampの素敵な関係

基本的には関数型言語推しですが、業務では諸事情でPHPを使っています。
色々と罠の多い言語であることは知っていたんですが、先日「これはあんまりだろ…」という挙動を踏み抜きました。
軽くググった限りでは同様の事例紹介が見当たらなかったのと、あまりにも衝撃的だったため記事として残しておきます。

前置き:MySQL DATETIMEとstrtotime

PHPerな諸氏におかれましては、strtotimeが色々と頑張りすぎるせいでハマったことは1度や2度ではないのではないでしょう。
例えばMySQLのDATETIMEで未定義を表す 0000-00-00 00:00:00を32bit環境でstrtotimeに渡すとfalseになります。
ドキュメントを見ると

返り値 ¶
成功時はタイムスタンプ、そうでなければ FALSE を返します。 PHP 5.1.0 以前ではこの関数は失敗時に -1 を返します。

と書かれており、「そうか、日付として不正だから解釈に失敗してfalseを返したんだな。0月とか存在しないし」と思ってしまいそうになるんですが、同じコードを64bit環境で実行すると以下のようになります。

$ php -r 'var_dump(strtotime("0000-00-00 00:00:00"));'
int(-62170016400)

謎の数値が出てきました。
これが一体いつを表しているのか、さらにdate関数を掛けて確認してみます。

$ php -r 'var_dump(date("Y-m-d H:i:s", strtotime("0000-00-00 00:00:00")));'
string(20) "-0001-11-30 00:00:00"

つまり、PHPはMySQLのDATETIMEの未定義値を「マイナス1年11月30日の0時0分0秒」とみなしていることがわかります。
実はPHPでは0月が「前年の12月」を、0日が「前月の最終日」を、それぞれ表すと解釈されるので、0年の1ヶ月前の更に1日前で-1年11月30日という日付が導かれるんですね。
32bit環境でfalseが返っていたのは、日付として不正だからでも何でもなく、単に「表現できる整数値の範囲を超えていたから」という理由だったわけです。

この挙動の違いは公式ドキュメントのコメント欄にさんざん書かれているので知っている人も多いと思います。
一方、今回踏んだ挙動は発生条件がかなり限られていることと、そもそも普通はそんなことしないだろう、という辺りであまり知られていないだろう挙動です。
あ、ここまでが前振りです。長くてすみません。

Continue reading

【速報】ARIAのBlu-ray BOXが予約開始したよ!

2015-06-05 アニメ

先日の記事に引き続き、速報ばっかですが。

ARIA好きの皆さんなら、ARIA10週年を記念して新作アニメーション「ARIA the AVVENIRE」の制作が発表されたことは記憶に新しいのではないかと思います。
何、ARIAを知らない? まずは原作を読むんだ!

Aqua 1 (BLADE COMICS)
Aqua 1 (BLADE COMICS) 天野 こずえ

マッグガ-デン 2003-10-03
売り上げランキング : 2373

ARIA (1) (BLADE COMICS)
ARIA (1) (BLADE COMICS) 天野 こずえ

マッグガーデン 2002-10
売り上げランキング : 29361

で、制作発表と同時に全アニメシリーズがBlu-ray BOX化することが発表されていたわけですが、いつの間にか詳細が発表されていたようです。
またAmazonでも予約が開始していました。

【Amazon.co.jp 限定】ARIA The ANIMATION Blu-ray BOX(特製フレーム付き描き下ろしイラスト付)
【Amazon.co.jp 限定】ARIA The ANIMATION Blu-ray BOX(特製フレーム付き描き下ろしイラスト付)
松竹 2015-12-24
売り上げランキング : 3

【Amazon.co.jp限定】ARIA The NATURAL Blu-ray BOX (特製フレーム付き描き下ろしイラスト付)
【Amazon.co.jp限定】ARIA The NATURAL Blu-ray BOX (特製フレーム付き描き下ろしイラスト付)
KADOKAWA メディアファクトリー 2016-03-23
売り上げランキング : 6

【Amazon.co.jp限定】ARIA The ORIGINATION Blu-ray BOX (特製フレーム付き描き下ろしイラスト付)
【Amazon.co.jp限定】ARIA The ORIGINATION Blu-ray BOX (特製フレーム付き描き下ろしイラスト付)
KADOKAWA メディアファクトリー 2016-06-24
売り上げランキング : 5

以下、公式ページから情報を引用します。

Continue reading

【速報】ほとんどのKindle本が半額ポイント還元されている件(※終了済み)

2015-05-30 電子書籍

※2015/06/01 12:13追記
ポイントつかなくなったのでセールは終了したみたいです。
次のセールに期待しましょう。

朝からこんな投稿を見かけてマジかよと思ったところ、コミックどころか小説も含めてほとんどのKindle本が半額ポイント還元されているようです。
どうもツイートの話の流れを見たところ、イーブックジャパン15周年への対抗セールなのではという説が有力なようです。
その場合6月1日までのセールになるのではないか、とのことですが、特に告知などもなくいつ終わるかよくわからないので欲しいものは早めに確保したほうが良さそうな気がします。

とりあえずざっと見かけた、半額になっててオトクそうなオススメ書籍を色々貼っておきます。
リンクは物理本の方になっている場合もあるので、「Kindle版」の方を選んでから買う必要があるかもしれません。
(このリンクから買ってくれると、それはとっても嬉しいなって…)
※5/31 16:00追記 現時点ではまだセールが続いているようです。ちょっとオススメ書籍も追記しておきました。

Continue reading

pplog.netがすばらしいサービスな件

2015-01-28 サービス

ポエムを綴るためのサイト、pplogが最近気に入っています。
なお、pplogは2013年にベータリリースされたサービスなのでとても今更感がありますが、自分が知ってハマったのが最近なので気にせず推し記事を書きます。

pplogがどんなサイトか、公式の「このサイトについて」から引用すると

pplogは最新の1件しか公開されたネット上に残せないブログのような何かです。記事は「ポエム」と呼ばれています。
各ポエムにはパーマリンクがありません。いっときの高まりなどで書いたポエムも、次のポエムを書けば他人からは見えなくなります。心おきなくポエムを綴りましょう。

と書かれています。

この時点で「お前は何を言っているんだ」感がありますが、その下のキャッチコピーがまたインパクト絶大です。
こちらは文章だけでは伝わらないので、画像で引用します。
f7967e74-fdff-44f7-8daf-c41f1a39ec65

「pplogではいろんなことができません
Twitter BootStrapでよくあるフォーマットに乗せて、堂々と「できない」ことをアピールする。
こんなサービスが未だかつてあったでしょうか。

大抵のサイトはこのフォーマットで「できる」ことをアピールしますが、pplogでは逆に「できない」ことをアピールしている。
この時点で、なんだか面白そうだなぁという気がしてきます。
そして実際に使ってみて気づくのが、まさに「できない」ことがpplogの良さであり、同時に良く考えられているということです。

Continue reading

すごいHaskell本の演習問題を公開しました(5章まで)

最近、会社で「すごいHaskellたのしく学ぼう!」の勉強会を主催しています。



内容としては週1回、1時間かけて本を読み進めつつ、例を実際に動かしたり、分かりづらい部分を自分が補足したり、気になる部分をお互い教え合ったり、といった形で進めています。
前回主催した型システム入門の勉強会はあっという間に参加者が減って頓挫したものの、今回は8回目時点で参加者がほとんど減っておらず、よい感じに続いています。

ところで、すごいHaskell本は説明順序も適切ですし、例も豊富にある良い本なのですが、勉強会を進めて不満に思うことが出てきました。
それは、自分で考えて手を動かすための演習問題が一切ないという点です。
例が豊富にあるとはいえ、プログラミングの醍醐味は「どうやって解くかを考えて、それをプログラムに落としこむ」ところにあると自分は思っています。
また、そうやって問題を解くことで記憶も定着しますし、必要な知識が身についているかの理解度チェックにもなります。

そういうわけで、社内勉強会では章が終わるごとに演習問題を解いて理解を確認してもらう、ということを行っています。(宿題というわけではなく、任意で解きたい人だけ解いてもらうような感じです)
この演習問題、もともとは社内Githubにまとめていたのですが、社外から見れないと不便であることと、特に社外秘の情報というわけでもないことから、Githubに公開することにしました。
現在勉強会が5章までしか進んでいないので、5章分までの公開です。

すごいHaskell楽しく演習!

すごいHaskell本を自習している方や勉強会をしている方、もしくは単にHaskellの問題を解いてみたい方など、ご自由に利用していただければと思います。
なお、問題作成にあたり自分で解けることは確認していますが、記述に間違いがあったり分かりづらい部分があるかもしれません。
そういった場合はメールかTwitterで@kokuyouwind宛てにリプライをいただければと思います。

問題を作るにあたり、なるべく作業的にならないよう、面白い題材を選んだつもりです。
以下では章ごとの問題について、どんな題材をテーマに何を狙って問題を作ったかの解説を書いていきたいと思います。

Continue reading

関数型プログラミングとは結局何なのか

この記事はドワンゴ Advent Calendar 2014の14日目です。
ちなみに前日は@erukitiさんでした。
他の方は「こんなもの作ってみた!」系の記事が多いのですが、技術系の話題であれば特に縛りはないようなので、今回はひたすら文章をつらつらと綴っていきたいと思います。

ここ数年、「マルチコア時代の主流は関数型だ」とか「Javaはもう古い! 時代は関数型!」といった記事をよく見かけるようになった気がします。
大学でOCamlを学んできた自分としては嬉しい限りなのですが、なんだか関数型という言葉がバズワード的な使われ方をしている気がして、まるで「現在起こっている全ての問題を解決する銀の矢だ!」といわんばかりの雰囲気を感じるのが気になっています。
最近うちの部署でもにわかに「関数型っぽく書こう」みたいな機運が高まってることもあるので、この機に関数型プログラミングとはなにか、どのような特徴があって何に向いているのか、みたいなことをまとめてみたいと思います。

Continue reading

初心者のための関数型λカ娘入門

2014-12-09 技術書

お前たち! 今日も元気にβ簡約してるでゲソか!?
今日は参照透明な海を守る会さんの「簡約! λカ娘」シリーズについて、初めて読む際に読みやすいオススメ記事を挙げていくでゲソ。

「簡約! λカ娘」はHaskellをメインにした関数型の話題のオムニバス本で、基礎的な解説からぶっ飛んだネタ記事まで、カオスに詰めあわされているのが特徴の同人誌でゲソ。
章立てになってはいるもののオムニバスなので相互の関連はあまりなく、興味のあるところから読み進められるようになっているでゲソ。
ちなみに総集編は薄い本だけど分厚くて、500円玉の直径より分厚いでゲソ。

そんな関数型λカ娘でゲソが、章ごとにテーマや難易度がまちまちで、なおかつどこからでも読めてしまうせいで、逆にHaskell力が低いとどこから読めばいいのかわからなくなってしまう魔性の本でもあるのでゲソ。
そこで今回、とりあえずざっくり通読して「初学者が読みやすい」と感じた記事を上げて、λカ娘信者を増やしていきたい所存でゲソ。

”>ちなみに現時点で1~6巻までをまとめた簡約!? λカ娘 – 始まりの総集編は在庫切れで手に入らず、最新刊の簡約 λカ娘 巻の七はそもそも委託販売がないようでゲソ。
総集編在庫復活したみたいでゲソ!
また巻の七も委託されたでゲソ!
簡単に手に入るようになって素晴らしいじゃなイカ!

じゃあこの記事は役立たずなんじゃなイカ!?
と思われそうでゲソが、実はうちの会社の本棚にはこの2冊が我が物顔で鎮座しているのでゲソ!
そう、本棚をλカ娘本が侵略しているのでゲソ! すごくなイカ?

そんなわけで、ぶっちゃけこの記事は社内のHaskell勉強会で興味を持って「せっかくだしλカ娘本もちょっと読んでみようかー」と思った同僚向けでゲソ。
あと、もしかしたら既に購入したものの頭から読んで挫折して積ん読になってる人とかいるかもしれないし、そのうち再販されるかもしれないので、そんな時のために記事として残しておくことにするでゲソ。

本記事ではHaskellの文法事項をある程度知っているが、Haskellを使い込んではおらず、また圏論やモナドなどの理論的基礎までは踏み込んでいないような読者を想定しているでゲソ。
よって取り上げる記事も理論的な基礎固めや簡単な応用に絞っていることに留意して欲しいでゲソ。
もちろんイカで取り上げる以外にも面白いトピックが多いので、慣れてきたら色々読んでみると良いのでゲソ。
それでは、順番に挙げていくでゲソ。
あ、ちなみに巻数を指定していない場合は「始まりの総集編」の章番号を差すでゲソ。

Continue reading
Older posts Newer posts