2011年3月27日日曜日

AlertDialogで二重クリック

androidのAlertDialogは、ボタンが一回押されたら閉じてしまう。だから、ボタンは一回しか押されない。そう思っている時期が私にもありました。
でも、違いました。AlertDialogは、二度押しを防ぐ仕様にはなっていません。

最近、AlertDialogのボタンが二度押しされていると思わせるような事があったので、簡単なサンプルを書いてエミュレーターで試してみました。
new AlertDialog.Builder(DialogTestActivity.this)
.setTitle("Dialog Test")
.setMessage("Are you OK?")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
 @Override
 public void onClick(DialogInterface dialog, int which) {
  Log.d(TAG, "Clicked OK.");
 }
})
.setNegativeButton("Cancel", null).show();
こんなコードを書いて、表示されたダイアログのOKボタンをダブルクリックすると、二重押しを示すログが残ります。
03-27 10:02:27.576: DEBUG/DialogTest(317): Clicked OK.
03-27 10:02:27.629: DEBUG/DialogTest(317): Clicked OK.
OnClickListener()の中に多重実行を想定していない処理が書いてあると、問題が起きるかも知れません。

2011年3月22日火曜日

今日の停電は何時から?

停電前に家鯖をshutdownするのを忘れないように、停電時刻を表示するシェルスクリプトを書いてみました。使い方は、usageを見ればだいたいわかるでしょう。第一引数がグループ、第2引数が日のオフセットです。引数は省略可で、省略時には私の家の属する第4グループの予定を表示します。オフセットを与えることで、翌日以降のスケジュールもわかります。

しかし、ここで問題が。3月26日以降は各グループがさらに5分割されるので、正確さを期すためには、より細かい判定が必要になります。今のスクリプトでも使るでしょうが、停電対象から外れる空振りが多いはずです。

#!/bin/sh

# arg1 or default(4) as blackout group
grp=${1:-4}
# args or default(0) as day of year offset
offset=${2:-0}
if [ $grp -lt 1 -o $grp -gt 5 -o $offset -lt 0 ]
then
  echo usage $0 [1-5] [offset]
  exit 1
fi
echo Group $grp

doy=`date +%_j`
doy=`expr $doy + $offset`
pattern=`expr $doy - $grp`
pattern=`expr $pattern % 5`

case $pattern in
0) echo 9:20-13:00, 16:50-20:30 ;;
1) echo 6:20-10:00, 13:50-17:30 ;;
2) echo 18:20-22:00 ;;
3) echo 15:20-19:00 ;;
4) echo 12:20-16:00 ;;
esac
exit 0

実際にUbuntu Linuxの上で動かしているのは、こんなスクリプトです。

#!/bin/sh

# arg1 or default(4) as blackout group
grp=${1:-4}
if [ $grp -lt 1 -o $grp -gt 5 ]
then
  echo usage $0 [1-5]
  exit 1
fi

doy=`date +%_j`
hour=`date +%k`
pattern=`expr $doy - $grp`
pattern=`expr $pattern % 5`

if [ $pattern -eq 0 -a $hour -eq 9 ]
then
  # 9:20
  shutdown -P now
elif [ $pattern -eq 1 -a $hour -eq 6 ]
then
  # 6:20
  shutdown -P now
elif [ $pattern -eq 2 -a $hour -eq 18 ]
then
  # 18:20
  shutdown -P now
elif [ $pattern -eq 3 -a $hour -eq 15 ]
then
  # 15:20
  shutdown -P now
elif [ $pattern -eq 4 -a $hour -eq 12 ]
then
  # 12:20
  shutdown -P now
fi
exit 0


これを、cronを使って毎日6,9,12,15,18時台の早い時刻に実行して、停電前であればshutdownを実行するようにしています。

13  6,9,12,15,18        * * *   root    /usr/local/bin/scheduledshutdown.sh

追記
実は我が家のあるエリアは計画停電の実施対象外である事が判明。道理で、今日まで一度も停電してません。

2011年3月10日木曜日

Shuttle XS35

 先週末にLOOX T70HからShuttle XS35へおうちサーバーを引っ越しました。
http://www.shuttle-japan.jp/barebone/XS35/
なかなかいい感じです。冷却ファンが爆音なくせにメモリ付近に熱がこもるT70Hと比べると、XS35は静かです。内蔵した5400rpmのHDDも思いのほか静かで、これならリビングに置いても問題になりません。
性能的には、PentiumM 1.1GHzのクロックを落として使っていたT70Hより向上していると思います。MRTGの負荷グラフは以前より低くなりました。

XS35はなかなかいいのですが、、惜しい所が2点かあります。

  • 2台目のHDDを固定する金具が1台分しか無い。接続キットはオプションとして販売されていないので、HDD2台内蔵は無理。
  • 無線LANカードが内蔵されているが、。現在公開されているファームウェアでは使えない。初期状態では使えず、Windowsで起動して有効化する必要がある

どちらも、我が家の用途では問題になっていませんが、あてにしている人は要注意です。Linuxでも無線LANは使えますが、Linuxだけで完結できないのが残念。

2011年3月6日日曜日

おうちサーバが昇天間近

おうちサーバとしてUbuntu Linuxを動かしているLOOX T70Hがいよいよ駄目らしい。

カーネルアップデートのために再起動しようとしたら、冷却ファンエラーが発生するようになった。掃除で復帰するかと思ってやってみたら、かえって異音が増す始末。

引越しを決意して、AmazonでファンレスのCPU付きベアボーンとHDD、メモリ、キーボードを注文した。ちょうどプライム無料お試しの勧誘があったので、登録してお急ぎ便していした。1ヶ月経つ前に、プライム解約するのを忘れないようにしなくては。

引越しはMondoRescueを使うことになると思う、ATAからSATAへの引越し。ヒントになりそうなキーワードで検索したら、結局自分のblogにたどり着いた。またVMware Playerのお世話になりそうだ。