7.08.2011

Aozora Kindle

青空キンドル

青空文庫+青空キンドルを使い、Kindle で著作権の切れた小説を表示。
日本語も全くストレスなく読めるのは素晴らしい。

これ程のクオリティのPDFが無料で入手できるのは、本当に頭の下がる思い。

・夏目漱石「こころ」
image

・青空文庫
http://www.aozora.gr.jp/

・青空キンドル
http://a2k.aill.org/

My first Kindle

Kindle との邂逅

Kindle DX が海を渡ってやってきた。

・箱を開ける
image

まず、電源を入れずとも表示されている電子インク(フィルムに印字されている訳ではない!)に感動。
表示だけでは電力を消費しないらしい。

・別売のケースに装着したところ
image

・USBケーブルを繋げて電源ON
image

・New York Times を試読
image

とにかく目に優しい。画面の大きさも丁度よい。少し思ったより重い。

Kinect ハックも活発である。
数年後は世界的にシェアを拡大し、きっと飛躍的な進化を遂げているだろう。

7.07.2011

How to get full timestamp of old files in Solaris

Solaris: 半年以上経ったファイルのタイムスタンプの時刻を調べる

「ls –l」コマンドを行った場合、半年以上経過したファイルは変更年月日が表示されるため、
時刻が表示されない。

   1: $ ls -l ./foo.txt
   2: -rw-r--r--   1 root     root         616 12月 25日 2010年 ./foo.txt

タイムスタンプの「時刻」を表示するには、以下のようなやり方がある。

・ls コマンドの「-e」「-E」オプション ⇒ これらのオプションが使えれば、非常に簡単
 (Linux であれば「–-full-time」オプションが使える)

   1: $ ls -e ./foo.txt
   2: -rw-r--r--   1 root     root         616 12月 25日 10:51:18 2010年 ./foo.txt
   3: $ ls -E ./foo.txt
   4: -rw-r--r--   1 root     root         616 2010-12-25 10:51:18.235541000 +0900 ./foo.txt

・pr コマンドによる方法 ⇒ 印刷用ページを出力し、そのヘッダ情報を読み取る

   1: $ pr ./foo.txt |sed -n 3p
   2: 12月 25 10:51 2010  ./foo.txt Page 1

・tar コマンドによる方法 ⇒ 標準出力にアーカイブを出力し、そのまま内容を読み取る

   1: $ tar cf - ./foo.txt |tar tvf -
   2: tar: ブロックサイズ = 5
   3: -rw-r--r--   0/0      616 12月 25日 10:51 2010年 ./foo.txt

補足:LANG=C の場合

   1: $ ls -l ./foo.txt
   2: -rw-r--r--   1 root     root         616 Dec 25  2010 ./foo.txt
   3: $ ls -e ./foo.txt
   4: -rw-r--r--   1 root     root         616 Dec 25 10:51:18 2010 ./foo.txt
   5: $ ls -E ./foo.txt
   6: -rw-r--r--   1 root     root         616 2010-12-25 10:51:18.235541000 +0900 ./foo.txt
   7: $ pr ./foo.txt |sed -n 3p
   8: Dec 25 10:51 2010  ./foo.txt Page 1
   9: $ tar cf - ./foo.txt |tar tvf -
  10: tar: blocksize = 5
  11: -rw-r--r--   0/0      616 Dec 25 10:51 2010 ./foo.txt

参考:
http://www.rep1.co.jp/manager/2011/02/solaris.htm

Bit counting in Python

Python: ビットの数え上げ、そして実行時間計測のTips

integer または long integer 型の値のビットを数える方法。(Python らしいアプローチ)

・ビットの数え上げ => bin(x).count('1') イディオムを使う

>>> bin(0).count('1')
0
>>> bin(10).count('1')
2
>>> bin(2**81).count('1')
1
>>> bin(2**81-1).count('1')
81

・最左の'1'のビットの位置 => len(bin(x)) – 3  ※x>0 を前提とする

>>> len(bin(10)) - 3
3
>>> len(bin(2**81)) - 3
81
>>> len(bin(2**81-1)) - 3
80
・時間計測
>>> import timeit
>>> min(timeit.Timer("len(bin(2**81))-3").repeat(3))
0.7450731866756541
>>> min(timeit.Timer("len(bin(2**81-1))-3").repeat(3))
0.7362237379329599

参考:
http://jutememo.blogspot.com/2008/10/python_07.html

7.05.2011

PyDev: Unresolved import

PyDev: Unresolved import

Eclipse + PyDev でコーディング中。

from bitarray import bitarray
の行でエディタにエラーが通知されている。

「Unresolved import」とあるが、パスは通っているはず。
試行錯誤のすえ、PyDev のアップデートをしたところ解決した。(Help –> Check for updates)

しかし、まだ PyLint のエラーが出ている。こちらは未解決。
E1101: ... : Instance of 'bitarray' has no 'setall' member

参考:
http://todayspython.blogspot.com/2011/06/web2py-eclipse-unresolved-import.html

7.04.2011

Put Windows in standby mode from command line

コマンドラインによる Windows のスタンバイ

コマンド(スクリプト)から Windows をスタンバイ状態にしたい。
しかしこれが意外と難しいようだ。

電源絡みの外部コマンドとしては「shutdown.exe」 「logoff.exe」などがあるが、スタンバイは実現できず。
行き着くところは「powrprof.dll」であるが、ネットに跳梁している「rundll32.exe powrprof.dll,SetSuspendState」
ではどうだろうか?

これは休止モードが無効であればスタンバイ状態となり要件を満たすが、
休止モードが有効だと休止モード(ハイバネーション)になってしまう。惜しい。
ちなみに、「rundll32.exe powrprof.dll,SetSuspendState 0,0,0」のようにパラメータを増やしたところで
rundll32 が正しく解釈してくれないので全く意味が無い。

「powercfg.exe」で休止モードを無効化することもできるが、スタンバイ状態にするためだけに
グローバルな設定を変えてしまうのはスマートな方法とは言い難い。

結局、今のところ直接DLLを叩くくらいしか有効な手段がなさそうなのである。
VBA(VBScript は直接DLLを利用できないので不可)でも可能と思われるが、今回はC++で作ってみる。

VC++ なら、以下のようなコードである。

   1: // Put in standby mode
   2: #include <windows.h>
   3: #include <powrprof.h>
   4: #pragma comment(lib, "powrprof")
   5:  
   6: void main() {
   7:   SetSuspendState(0, 0, 0);
   8: }

gcc では、「#pragma comment」が解釈できないため、リンカーに直接DLLを指定する必要がでてくる。
Eclipse CDT ならプロジェクトの Properties から、「C/C++ Build」-「Settings」-「Tool Settings」を開き
「MinGW C++ Linker」-「Libraries」-「Libraries (-l)」に「powrprof」を追加すればよい。

参考:
http://d.hatena.ne.jp/naga_sawa/20080930/1222741442
http://msdn.microsoft.com/en-us/library/Aa373201

Buying Kindle DX

Kindle DX の購入

amazon.com で キンドルDX を購入してみた。(まだ amazon.co.jp から買うことはできない)
本体 $379.00 + カバー $54.99 + 送料 $15.97 = 総額 $449.96。

購入方法はこちらを参照
http://www.yoshodego.com/amazoncomkindle2dx.html