最新記事
PHPのmktime()で取得したタイムスタンプが8ヶ月前になる事象について
PHPのmktime()関数を使ったカスタマイズで躓いたので情報展開しておきます... [ all ]
PHPのmktime()関数を使ったカスタマイズで躓いたので情報展開しておきます。動作確認したPHPのバージョンは5.2.13です。
1.問題
次のコードは、指定した日付のエポック秒(1970年1月1日0時0分0秒から、指定した時刻までの通算秒)を取得し、それを年月日時分秒に変換して表示する簡単なサンプルです。
<?php
$date = mktime(01,23,45,08,01,2010);
echo date('Y.m.d A H:i.s',$date);
?>
mktimeの引数は左から順番に、「時・分・秒・月・日・年」となります。このコードを実行すると、
2010.08.01 AM 01:23.45
という結果になるはずですが、実行すると、
2009.12.01 AM 01:23.45
となり、指定したタイムスタンプよりも8ヶ月前になってしまいます。
2.原因と対処
PHPでは、整数に「0」を付与すると8進数として扱われ、「08」は「0」として扱われることが原因です。つまり、指定した値「08月」をmktimeで評価すると「0月」となり、さらに「0月」は前年の12月として評価されるため、1項に記した動作となります。
月の「08」を1桁の「8」に変更することで、この問題は解消します。
<?php
$date = mktime(01,23,45,8,01,2010);
echo date('Y.m.d A H:i.s',$date);
?>
この事象は、月に「08」と「09」を設定した場合に発生します。
3.その他
この事象をみつけた経緯は、Movable Typeのテンプレートタグと組み合わせて、
$entry_date = mktime(<mt:EntryDate format="%H,%M,%S,%m,%d,%Y" />);
ということを行ったためです。この場合、「%m」を「%B」にすることで解消します。
$entry_date = mktime(<mt:EntryDate format="%H,%M,%S,%B,%d,%Y" />);
2010.09.02
をかもとさんからのコメントを受けて、2項を修正しました。
画像を鮮明に拡大するフリーソフト「SmillaEnlarger」の使い方
画像を鮮明に拡大するように見せてくれるフリーソフト、「SmillaEnlarger」と、その使い方を紹介します。
拡大画像(処理前)

拡大画像(処理後)

SmillaEnlargerは、1年前の2009年8月頃にライフハッカーで話題になったのですが、2010年4月にバージョンアップされて0.9.0になり、画面の構成や操作方法が旧バージョンよりかなり変わったようなので、改めて紹介したいと思います。
ここではWindows Vista を利用した方法が解説しますが、Macやlinuxでも利用可能です。
1.ダウンロード
SourceForge.JPのSmillaEnlargerのページにある「ダウンロード」をクリック。

ダウンロードページに進むので、Windows用のダウンロードリンクをクリック。

なお、SourceForgeの本家のダウンロードページは以下です。
2.インストールと実行
Windowsの場合、ダウンロードしたアーカイブを展開すれば完了です。
展開したフォルダの中にある、SmillaEnlarger.exe(拡張子を表示していない場合はSmillaEnlarger)をダブルクリック。
これで起動します。起動時は冒頭に示した犬の画像がサンプルで表示されるようです。
3.基本操作
拡大する画像を指定するには、メニューバーの「File」→「Open」で指定します。

ここでは当サイトの猫の画像を使ってみます。画像を開いた直後は次のような状態になります。右上のタブは「Cropping」を選択しておいてください。
右の画像上でマウスをドラッグすれば、拡大したい範囲を選択できます。ここでは猫の顔の部分を選択します。選択範囲は太い罫線で区切られ、未選択部分と区別しやすくなっています。さらに、
- 罫線の上でマウスをポイントして左クリックすれば選択範囲を変更可能
- 選択範囲上で左クリックすれば、選択した矩形の移動が可能
という機能があります。
矩形のスタイルは、右画面の下にある「Cropping Format:」のプルダウンメニューで変更できます。「free」を選択すれば、選択範囲を自由に変更できます。

選択範囲は左側の「Thumbnail Preview:」にサムネイルとして反映されます(実サイズでのプレビューについては後述)。

選択範囲が決まったら、右上の「Parameter」タブをクリックします。これで選択範囲の実サイズでのプレビューが表示されます。プレビュー画面に選択範囲がすべて表示されていない場合は、右クリックで表示内容をスライドすることができます。
ウィンドウ左にある「Enlarger Parameter」、または「Parameter」タブ右下にあるプルダウンメニューで、拡大する際のおおざっぱなスタイルを決めることができます。

スタイルを変更すれば、「Parameter」タブの右下の各パラメータが自動的に変わります。
defaultの場合

sharp & noisy の場合

さらにパラメータをカスタマイズしたい場合は、「Allow Changes」をチェックします。

出力するファイルサイズはウィンドウ左上の「Output Dimensions:」で設定します。まず、値を設定する対象(画像の幅・高さなど)をプルダウンで選択します。

選択した後、値を設定します。

値を変更すると、プレビュー画面に表示されている画像のサイズも変更されます。
ウィンドウの左にある「Parameter!」、または「Parameter」タブ右下にある「Preview」をクリックすれば、拡大画像のプレビューが行なえます。ちなみに、キャプチャ画像の元画像サイズは122px × 128px で、その一部分を350pxに拡大しているので、結構なめらかになっていると思います。
パラメータを変更して「Preview」をクリックすれば何度でもやり直しが可能です。
ファイルに保存するには、ウィンドウ左下にある「Enlarge & Save」をクリックします。

ファイル名は「Write Result to:」に表示されます。

デフォルトの設定では、開いた画像ファイルと同じフォルダに出力します。フォルダを変更する場合は、「Use Source Folder」のチェックをはずして、「Change Folder」をクリックして任意のフォルダを選択します。

出力状況は、「Enlarge & Save」の左側にある緑色のプログレスバーなどで表示されます。

それぞれの実行は「キュー」として登録されます。キューが完了すれば出力完了です。「Jobs:」タブをクリックすればキューの実行状況が分かります。キューに「finished」が表示されていれば出力完了です。右側の「clear queue」をクリックすればキューをクリアできます。

右下にある「remove Job」や「clean up」も、同様の操作が行なえます。

4.その他
「File」→「Preferences...」でオプションを表示します。0.90では、出力ファイル形式の選択とファイル品質の選択のみです。

「File」→「Mini Mode」を選択すれば、ウィンドウを縮小表示します。

環境変数EntriesPerRebuildでMovable Typeの再構築時間を短縮する
Movable Typeのスタティックパブリッシング(静的生成)の再構築時間は、環境変数EntriesPerRebuildを設定することで短縮できる場合があります。
移転先のサーバで実験してみましたので、報告します。ただし、共有型のレンタルサーバでは500エラーになる可能性もありますのでご注意ください。
1.EntriesPerRebuildについて
環境変数EntriesPerRebuildは、1回のプロセスでブログ記事アーカイブを再構築するブログ記事数を設定します。デフォルトは「40」です。
この値を変更するには、mt-config.cgiにEntriesPerRebuildを設定します。「100」にする場合は次のように記述します。
EntriesPerRebuild 100
2.EntriesPerRebuildと月別アーカイブの関係
環境変数EntriesPerRebuildは、ブログ記事アーカイブだけでなく、月別アーカイブ(月別ブログ記事リスト)にも関係します。具体的には、指定した値のブログ記事に対応する月別アーカイブページを生成します。
この件については、小川さんの以下のページが参考になるでしょう。
3.再構築時間測定
EntriesPerRebuildの値を振って、ブログ記事アーカイブと月別アーカイブの再構築時間を測定しました。占有型のマネージドサーバなので、ブレのない値がとれていると思います。再構築対象データの条件は次の通りです。
- ブログ記事数:約3000件
- 月数:82ヶ月
ブログ記事アーカイブの再構築時間は次の通りです。100あたりで頭打ちになっています。

月別アーカイブの再構築時間は次の通りです。再構築時間の単位は秒です。

こちらは400~500あたりで頭打ちになっています。
ということで、月別アーカイブの再構築時間を考えると、EntriesPerRebuildには400~500を設定すると良いようです。
