UNIXタイムスタンプからユーザフレンドリーな日時


http://www.tymy.net/~matsu/timestamp_to_date.php

今までありそうでなかったサービス。
ただのUNIXタイムスタンプを見やすい形式に変換するだけ。

qmail-date-localtime.patch

あちらこちらでリンク切れになっているのでコピーしておきます。

qmail-date-localtime.patch

こんな風にすれば適応できます。

% wget ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz
% wget http://www.tymy.net/%7Ematsu/blog/wp-content/uploads/2008/03/qmail-date-localtime.patch
% tar zxf qmail-1.03.tar.gz
% cd qmail-1.03
% patch < ../qmail-date-localtime.patch

シェルスクリプトで排他処理

運用サーバで、2分おきにsubversionのupdateを行うシェルスクリプトを動かしています。
今までは、1回のupdateが50秒程度で終了するので、同時実行を防ぐための排他処理をしていませんでした。しかし、サーバの負荷が高かったときは2分以内で終わらない場合があるためスクリプト実行の排他処理をしなければなりません。

Webを調べているとシェルスクリプトでロック用のディレクトリを作ってます。しかし、かっこわるい。。。そこで見つけたのがlockfileというコマンド。このコマンドを使った方がロック取得を失敗したときの挙動を変えられるから便利そうです。(今回の場合は意味無いけど)

以下にコード書いておきます。

#!/bin/sh

LOCKFILE=/tmp/subversion.locked

# try to get lock. With no retry.
lockfile -r 0 $LOCKFILE

# evaluate return code
if [ $? -ne 0 ]; then
  echo "Command aborted"
  exit 1
fi

# do something exclusive command
echo "important command"

# unlock
rm $LOCKFILE

PHPの日時に関連する関数の制限

■問題意識
PHPが表現できる日付に制限があり、1800年といった表記をdate関数から
出力できないため、1800年から2500年程度の時間表現を行う方法を導く。

■実験内容
まず、制限値の詳細を知るために
1.date関数の第2引数に与えられるタイムスタンプの範囲を調べる。
2.strtotime関数の引数に指定できる時間の範囲を調べる。

■実験結果
1.date関数の第2引数にタイムスタンプとして指定した場合:
最小値:-2147483648(1901-12-14 05:45:52)
最大値: 2147483647 (2038-01-19 12:14:07)

2.strtotime関数の引数に時間を指定した場合
最小値: 1901-12-14 05:45:52
最大値: 2038-01-19 12:14:07

■まとめ
32ビット環境において、
PHPで整数を扱う場合は-2^31から2^31-1しか扱えない。

■次の問題意識
pearのDateクラスは有効か調査する。

■実験内容
2.1 コンストラクタに2147483647を指定し、
秒を追加してゆき、getDateを表示してみて
想定する結果との差異を検証。

2.2
コンストラクタに-2147483648を指定し、
秒を減らしてゆき、getDateを表示してみて
想定する結果との差異を検証。

■実験結果
2.1
9999-12-31 23:59:59 まで表示可能その後に1秒を足すと現在時刻に初期化される。

Date.phpのソースコードを追ってみると、年・月・日や時・分・秒はそれぞれ変数になっている。
なぜ、999年までしかいけないかというと、addSpanメソッドで無理矢理4桁に処理されているため。

2.2
999-12-31 23:59:59 まで表示可能。その後に1秒を引くと9909-12-31 23:59:58となる

■まとめ
西暦が4桁ならば正常に動作。

■次の問題意識
3.1 mktimeのサポートする範囲

■実験結果
3.1
年の入力に制限がある。
年の入力範囲:0-38,70-110,1903-2038

■まとめ
mktimeは1903年から2038年まで。

■次の問題意識
4.checkdateのサポートする範囲

■実験結果
4.西暦1年1月1日から、西暦32767年12月31日

■まとめ
西暦は16ビット分。チェックには利用可能。

■次の問題意識
mktime,strtotimeが表現できる日時に制限があるため、目的の範囲を
サポートする日時のvalidation方法はあるのか。

■調査
・symphonyはmktime,strtotimeを利用してチェック。
・zend frameworkはcheckdateにて日付をチェック。
・Mapleはcheckdateにて日付のみチェック。

■結論
PHPのネイティブ関数でサポートする日時表記の積集合部分は
1901-12-14 05:45:52から2038-01-19 12:14:07である。

日付のチェックはcheckdateを使えば実用に問題はない。

時間のチェックは自分で書く。

ネイティブでサポートされていない日時表記のためにはPearのDateクラスを利用すれば
1000年から9999年まで表現できる。

もっと詳しく >>

phpideのファイルオープン時の文字コード

phpideを使い始めた。

まず、ファイルをすべてUTF-8で扱ってしまって、たいへん。。。。

扱う文字コードを買えるには以下の設定をする。
Window > Preference > General > Appearance > Content Types > Text > PHP
右下に表示される文字コードに「SJIS」と入力して「Update」ボタンを押す。

ペコちゃんやばいな。

シュークリームの細菌数「無限」 不二家札幌工場に記録
2007年01月19日13時50分

http://www.asahi.com/national/update/0119/TKY200701190177.html?ref=rss

subversionがNFS越しで止まる。。。

こんな問題が起こった:
========
cronで2分おきに
% svn update
するように設定していたのだが、すぐ止まる。1,2時間で止まる。

% svn cleanup
しても、 /path/to/somewhere/.svn/tmp が存在しないと言われて、cleanupが途中で止まる。

復旧する方法は、checkoutし直すしかない。
========

いろいろ試した結果、
NFS越しにsvn updateするとおかしくなる。
ってことがわかった。

おそらく、subversionがupdateの際にファイルのロックをしているのだけれど、レポジトリのからupdateする速度が遅くて、ロックが途中でタイムアウトしているのだと思う。
まったく、困ったものだ。

NP_MyNewsletter 日本語対応化

PHPで書かれたCMSであるNucleusのプラグイン、NP_MyNewsletterは、blogの新着記事をメール配信するプラグインです。

しかし、このプラグインでは
・日本語を含んだFrom
・日本語を含んだSubject
・日本語を含んだBody
では使えません。

不便なので、日本語を使えるように編集しました。

動作条件として、PHPのPEARからNet_SMTPをインストールしてください
# pear install Net_SMTP

ソースコードは以下に貼り付けます。NP_MyNewsletter.phpに置き換えてください。文字コードはUTF-8です。
もっと詳しく >>

Funny

間違ったことは,どうでもいいんだけど,その後の行動がうける...

捜査員らは、その後も店を訪ねてきた客に旅券の提示を求め、一部に不携帯の客がいたことから、約30分間、店内で客の身元確認などを続けたという。

引くに引けず...ってか.

隣の店と間違え家宅捜索 警視庁綾瀬署が謝罪
http://www.asahi.com/national/update/0129/TKY200601280323.html

ANYWAY, I’ll go back to Japan next March and I’ll work for company from April in Tokyo.

Thinkpad T43 memo

To install official T43 Trackpoint driver, download the driver from here.
http://www-06.ibm.com/jp/domino05/pc/download/download.nsf/jtechinfo/SYD0-0260D32
Then, install by manual installation wizard.

If you don’t install by manual, your windows OS would download from windows update site. The driver of windows update is poor. It can’t adjust sensibility of trackpoint.

12»
 

リンク