Hatena::ブログ(Diary)

(ひ)メモ このページをアンテナに追加 RSSフィード

2010-09-16 (Thu)

前月を知る - sh編

shっていうかdateコマンドですけど。

安直に「1 month ago」でいいじゃん!と思った人は負けです(ぼくもですけど><)。

これはいいんだけど、
$ date '+%Y-%m-%d %T.%N'; date '+%Y-%m-%d %T.%N' -d '1 month ago'
2010-09-16 18:05:00.342008278
2010-08-16 18:05:00.344293593

このケースだと前月になってない
# date 053100002010 >/dev/null; date '+%Y-%m-%d %T.%N'; date '+%Y-%m-%d %T.%N' -d '1 month ago'
2010-05-31 00:00:00.000000000
2010-05-01 00:00:00.004000016
set $(date '+%Y %m')
y=$1
m=$((${2#0}-1))
mが0だったらyから1引いて...

とかやるのはめんどいなーと思ったら、info にちゃんと書いてありました><

# date 053100002010 >/dev/null; date '+%Y-%m-%d %T.%N'; date '+%Y-%m' -d "$(date '+%Y-%m-15') -1 month"
2010-05-31 00:00:00.000000000
2010-04

なるほど!!!

安易に<IfModule>を使うとハマるよという話

「いろんな環境にこのhttpd.conf唯一つで対応するのだ!!」と<IfModule>バリバリなhttpd.conf書くとハマるかもというお話です。

具体的事例としては、Allow fromとかの、通信元IPアドレスを見る設定が思うように効かないなー効かないなーと悩んでたら、こいつはreverse proxyの後ろにいるhttpdなんで、mod_extract_forwardedをロードしないといけなかったんだけどロードするのを忘れてて、<IfModule extract_forwarded_module> でくるんだ設定は有効にならず、エラーにもならず気がつかなかったというオチ。

httpdの起動オプションで、httpd -Denable_extract_forwarded -Denable_ya_feature とし、

<IfDefine enable_extract_forwarded>
  LoadModule extract_forwarded_module  modules/mod_extract_forwarded.so
</IfDefine>

<IfModule extract_forwarded_module>
  MEForder  refuse,accept
  MEFrefuse all
  MEFaccept 127.0.0.1 10.6.25.19
  MEFdebug  off
</IfModule>

<IfDefine enable_ya_feature>
...

な感じにすれば、httpd.confは書き換えなくともモジュールの取捨選択はできるわけですが、そこまでやらないのならどのみちhttpd.confの編集(LoadModuleのコメントイン/アウト)が必要なので、編集が必要ならついでにモジュール固有の設定のコメントイン/アウトするのもそんな手間じゃないし、IfModuleでくるまなければ、むしろ先の例のようにうっかりロードし忘れてもエラー停止するので気づけていいなーと。

PHP 5.3.2でPECLのhashがコケる件

乗るしかない、このPHPウェーブに!

$ uname -a
Linux goa 2.6.32.8 #1 SMP Tue Feb 23 11:39:02 JST 2010 x86_64 GNU/Linux

$ php -v
PHP 5.3.2 (cli) (built: Jul 30 2010 16:58:59)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
$ pecl download hash
$ tar zxf hash-1.5.tgz
$ cd hash-1.5/
$ phpize
$ ./configure
$ make
(snip)
/var/tmp/m/hash-1.5/hash.c:785: error: duplicate 'static'
/var/tmp/m/hash-1.5/hash.c:792: error: duplicate 'static'
/var/tmp/m/hash-1.5/hash.c:799: error: duplicate 'static'
/var/tmp/m/hash-1.5/hash.c:807: error: duplicate 'static'
/var/tmp/m/hash-1.5/hash.c:815: error: duplicate 'static'
/var/tmp/m/hash-1.5/hash.c:822: error: duplicate 'static'
/var/tmp/m/hash-1.5/hash.c:828: error: duplicate 'static'
/var/tmp/m/hash-1.5/hash.c:835: error: duplicate 'static'
/var/tmp/m/hash-1.5/hash.c:842: error: duplicate 'static'
/var/tmp/m/hash-1.5/hash.c:848: error: duplicate 'static'
make: *** [hash.lo] Error 1

$ echo 'ぐぬぬ'

$ sed -i.orig -e 's/^static$//g' hash.c
$ make
(snip)
Build complete.
Don't forget to run 'make test'.

$ echo '\(´u`)/'

$ make test
(snip)
=====================================================================
TIME START 2010-09-16 03:17:43
=====================================================================
PASS ADLER32 [tests/adler32.phpt]
PASS CRC32 [tests/crc32.phpt]
PASS gost [tests/gost.phpt]
PASS haval algorithm (multi-vector, multi-pass, multi-width) [tests/haval.phpt]
PASS hmac-md5 algorithm [tests/hmac-md5.phpt]
PASS md2 algorithm [tests/md2.phpt]
FAIL md4 algorithm [tests/md4.phpt]
PASS md5 algorithm [tests/md5.phpt]
PASS ripemd128 algorithm [tests/ripemd128.phpt]
PASS ripemd160 algorithm [tests/ripemd160.phpt]
PASS ripemd256 algorithm [tests/ripemd256.phpt]
PASS ripemd320 algorithm [tests/ripemd320.phpt]
PASS sha1 algorithm [tests/sha1.phpt]
PASS sha256 algorithm [tests/sha256.phpt]
PASS sha384 algorithm [tests/sha384.phpt]
PASS sha512 algorithm [tests/sha512.phpt]
PASS snefru [tests/snefru.phpt]
PASS tiger [tests/tiger.phpt]
PASS whirlpool [tests/whirlpool.phpt]
=====================================================================
TIME END 2010-09-16 03:17:44

=====================================================================
TEST RESULT SUMMARY
---------------------------------------------------------------------
Exts skipped    :    0
Exts tested     :   23
---------------------------------------------------------------------

Number of tests :   19                19
Tests skipped   :    0 (  0.0%) --------
Tests warned    :    0 (  0.0%) (  0.0%)
Tests failed    :    1 (  5.3%) (  5.3%)
Expected fail   :    0 (  0.0%) (  0.0%)
Tests passed    :   18 ( 94.7%) ( 94.7%)
---------------------------------------------------------------------
Time taken      :    1 seconds
=====================================================================

=====================================================================
FAILED TEST SUMMARY
---------------------------------------------------------------------
md4 algorithm [tests/md4.phpt]
=====================================================================
(snip)
Do you want to send this report now? [Yns]: Y<RET>
(snip)

$ cat tests/md4.log

---- EXPECTED OUTPUT
31d6cfe0d16ae931b73c59d7e0c089c0
bde52cb31de33e46245e05fbdbd6fb24
a448017aaf21d8525fc10ae87aa6729d
d9130a8164549fe818874806e1c7014b
d79e1c308aa5bbcdeea8ed63df412da9
043f8582f241db351ce627e153e7f0e4
e33b4ddc9c38f2199c3e7b164fcc0536
---- ACTUAL OUTPUT
886492db0d2abc5af2721d2281504dea
b840dc68104037934148a3bad26d0a12
329def589299d5bdac2624873bc4bee4
c56e47c0e6fb0cfeacfcccf7439fa41a
ab865e28d5ab83541450ffe3ed6af853
035bb952618b7d58f9333621baace53c
ab97ad5f74f168a923205f9302ebc1c4
---- FAILED

$ echo '(゚д゚;)'

$ grep "hash('md4" tests/md4.php | awk -F"'" '{print$ 4}'

a
abc
message digest
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
12345678901234567890123456789012345678901234567890123456789012345678901234567890

$ grep "hash('md4" tests/md4.php | awk -F"'" '{print $4}' | \
  perl -MDigest::MD4=md4_hex -nle 'print md4_hex($_)'
31d6cfe0d16ae931b73c59d7e0c089c0
bde52cb31de33e46245e05fbdbd6fb24
a448017aaf21d8525fc10ae87aa6729d
d9130a8164549fe818874806e1c7014b
d79e1c308aa5bbcdeea8ed63df412da9
043f8582f241db351ce627e153e7f0e4
e33b4ddc9c38f2199c3e7b164fcc0536

echo '(; Д ) ゜ ゜'

MacBookのディスクを交換したのでそのメモ

2008年に買ったMacBook (13" Aluminum, Late 2008 (MB467J/A))の250GBのディスクが手狭になってきたので交換しました。そんときに買ったものの備忘録です。

ハードディスク

WESTERN DIGITAL 2.5インチ内蔵HDD Serial-ATA 5400rpm 500GB 8MB WD5000BEVT

WESTERN DIGITAL 2.5インチ内蔵HDD Serial-ATA 5400rpm 500GB 8MB WD5000BEVT

先人たちの交換実績のあったWD5000BEVT (500GB)にしました。

2.5"だともっと大きいサイズのがあるんですが、WD6400BPVT (640GB)はセクタサイズが512じゃなくて4096のAdvanced Format Technologyというのを採用している製品で、512にエミュレーションする分パフォーマンスが悪い(らしい)とか、WD10TPVT (1TB)は12.5mm厚なのでMacBookには入らないとか、落とし穴があるので無難にバイト単価が安くて実績が豊富なWD5000BEVTにしました。

トルクスドライバー

PROMATE 精密ヘクスローブレンチ8p SHL-8

PROMATE 精密ヘクスローブレンチ8p SHL-8

ディスクを固定するための部品を外すのには普通のドライバーでOKなんですが、ディスクの側面に生えているネジを外すのにはT-6のトルクスドライバーが必要。近所の百均には売ってなかったんで、これもアマゾンで購入。

SATA-USB変換器

GREEN HOUSE SATA/IDE-USB2.0変換アダプター 2.5インチHD対応 GH-USHD-IDESA

GREEN HOUSE SATA/IDE-USB2.0変換アダプター 2.5インチHD対応 GH-USHD-IDESA

データ移行を楽に行うために購入。

サーバーの壊れたディスクを返送する前にshredするときにも便利だなー、保管してる昔のディスクの中身を確認するときにも便利だなーということで、SATAだけじゃなくてIDEにも対応した製品を購入。3.5"も2.5"もOK

交換作業

を参考にしました。交換自体はそんなに難易度高くはないんじゃないかなーと思います。

データ移行

今まで移行アシスタントで乗り継いできて、Library/Application Support/ 下とかが秘伝のタレみたいになっていたので、今回はクリーンインストールしました。

  1. 新しいディスクを変換器でUSBに繋ぐ
  2. MacBook付属のOSインストールDVDでブート
  3. 新ディスクにOSインストール
  4. OSインストール完了後、確認のため新ディスクでブートしてみる
  5. 旧ディスクの自分のホームディレクトリを、Finderでドラッグ&ドロップしてとりあえず丸ごと新ディスクの~/migrate/の下にコピー
  6. 再インストールが面倒そうなアプリケーションは、旧ディスクの/Application/下から新ディスクの/Application/下にドラッグ&ドロップでコピー
  7. ディスク交換作業
  8. さっきまるっとコピーしたホームディレクトリで、必要そうなのをしかるべき場所に移動
  9. MacBook付属のアプリケーションインストールDVDでiPhotoとかをインストール
  10. keynoteとかのiWorkをインストール
  11. その他アプリケーションをインストール、必要なら旧ディスクの~/Library/Application Support/や~/Library/Preferences/から当該アプリの初期設定ファイルを探して新ディスクのしかるべき場所にコピー
  12. ちょいちょい環境を調整
  13. おしまい

ちょっとハマったところ

以前やってるはずなんだけど、すっかり忘れてたよ系。

環境設定「ユニバーサルアクセス」の「補助装置にアクセスできるようにする」をチェック

昼間は外部モニタアリ、夜はナシなので、今現在の画面解像度をみて、メインで使うアプリケーションの配置位置、サイズをビシっといつものポジションにするAppleScriptを書いて使ってたのですが、なぜかさっぱり移動してくれない。

と思ったら、環境設定「ユニバーサルアクセス」の「補助装置にアクセスできるようにする」をチェックしないといけないのをすっかり忘れてました。

X11.app起動時にナゾのxtermが開く

X11.app起動時になぜか呼んでないxtermがひとつ開く。~/.xinitrcにはそんなxterm起動しろなんて書いてないのに。

これは~/.xinitrcや/usr/X11/lib/X11/xinit/*とは別の箇所で起動するように設定されていたためでした。

  1. open ~/Library/Preferences/org.x.X11.plist
  2. ap_to_runを/usr/bin/trueに変える
  3. 保存して閉じる

ミソは、ap_to_runのアイテムを消しちゃうと、またxterm起動指示のアイテムが自動復活しちゃうので、消さないで当たり障りのないコマンドを実行する設定を残しています。

ディスク領域が倍に増えてちょー快適♥

起動時間が早くなった気がするんですが、実測してないので思い込みかもしれないです。

2010-09-14 (Tue)

ライブドアからカレーが届いたでござるの巻

モバゲーのニックネームを「サバカレー」にしようとしたらNGワードに引っかかった今日この頃、皆様いかがお過ごしでしょうか。


「インドなう!」を期待させつつも、渡印以来、音信不通の@からカレーがっ!届いた!!のでフォトレポートしますッッッ! (これ http://blog.livedoor.com/nacchan/ に当たりました^q^)


ずん

ずん - ひろせ31 Ficia Photo


ずん!

ずん! - ひろせ31 Ficia Photo


ずずーん!

ずずーん!! - ひろせ31 Ficia Photo


この続きはコチラから!↓↓↓


パソコンにメモリカードを差すだけで、撮った写真を「全部上げ」。大切な写真を保管・管理するのにうってつけのサービス、「Ficia (フィシア)」は2GBまでなら無料です。是非、お試しくださーい!

2003 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 12 |
2012 | 01 | 02 | 03 | 06 | 08 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 |
2015 | 01 | 02 | 07 | 10 |
2016 | 01 | 05 | 10 | 12 |
2017 | 07 |
2018 | 05 |