<< 7月 2008 | Home | 9月 2008 >>
PR: 転職    葬式    マンスリーマンション 神戸    北海道    環境    FX    不動産担保融資    桐ヶ谷斎場    海外旅行    専門学校   

gantに-findオプションが欲しい。

antの-findオプションに相当するものが、なぜかgantには無いので、Emacsからコンパイルする時に不便だ。とりあえず、こんなのを書いてみた。

#!/bin/sh
while [ ! -f "build.gant" ]; do
  cur=`pwd`
  cd ..
  if [ ${cur} = `pwd` ]; then
    echo "Can't find build.gant"
    exit 1
  fi
done
gant $*

正直、bashのシェルスクリプトは素人同然なんで、もっとうまい方法があるかもしれない。

s2ramで、高速サスペンド

Userspace Software Suspend

ダウンロードして、普通にconfigure/make/make installでインストールできた。/usr/local/sbin/s2ramに入るんで、/etc/acpi/sleepbtn.shに、単に/usr/local/sbin/s2ramと記述。X61で試したところ、WindowsXP並みの速度でサスペンド/復帰ができる。

ただ無線は復帰後に、うまく動かなくなっていた。まぁこれは、

sudo modprobe -r iwl4965
sudo modprobe iwl4965

で、復帰できるので問題ない。

P.S. これだとフタを閉めてあけた時に、復帰にもたつく。sleepbtn.shは元に戻して、/usr/lib/hal/scripts/linux/hal-system-power-suspend-linuxを変更するのが良いようだ。バックアップをとってから、

#!/bin/sh
/usr/local/sbin/s2ram --force

という中身にすることで、うまくいっている。

サスペンドでビープが鳴るのは、

Intelさんのせいではなくて、この電源設定のせいだった。

一番下のチェックを外せばいいみたい。

Ubuntu、サスペンドからの復帰が遅い。

ThinkPad R61も、X61も、Ubuntuのサスペンドからの復帰が遅い。ひどいと2分くらいかかる上に、なんだかハウリングのような音まで鳴りひびく。

なんとなく、Intelの無線LANドライバの出来が悪いんだろうなとは思っていた。そこで今日、サスペンド移行前に、ドライバを外すようにしてみた。R61では、/etc/acpi/sleepbtn.shが実行されるようなので、

#!/bin/bash
modprobe -r iwl3945       この行を追加。
. /usr/share/acpi-support/key-constants
acpi_fakekey $KEY_SLEEP 

として、サスペンド前にiwl3945を外すようにしてみた。予感は的中で、スタンバイ復帰が5-6秒でできるようになった。まだまだWindowsXPとくらべると遅いけど、これなら、全くの許容範囲だ。無線を使いたくなったら、

gksudo "modprobe iwl3945"

で、いつでも復帰できる。

P.S. と思ったら、効果があったのはR61の方だけで、X61は相変わらずだ。ドライバが違うのかなぁ。

Scalaのantタスクでobject scala not found.

taskdefでクラスパスに指定する、scala-compiler.jarとscala-library.jarを、scalacのタスク実行時にもクラスパスに指定してやれば良いみたいだ。

Programming in ScalaのPrePrint v4が出た。

PrePrint v4が出たので、さっそくダウンロード。

プロとしてのOracleアーキテクチャ入門

プロとしてのOracleアーキテクチャ入門

献本いただきました。こういう内部動作を解説した書籍ってほとんど無いんだよね。貴重な一冊。これから読ませていただきます。

ledit

ledit、便利だ。Java系の対話プログラムって、行編集機能がしょぼいので、使いにくいのが多いけど、ledit付けるとGNU Readlineリンクしたみたいに便利になる。ledit scalaとか、ledit jdbとか。頭にledit付けるだけでok。

X61のリカバリディスク作成って、

ウルトラベースとか無いと作成できないんだろうか。リカバリディスク作成メニュー選んでも、書き込み先にハードディスクってのが無い。ISOイメージ書き出してくれてもいいと思うんだけどなぁ。仕方無いので、ddで、フルセクタコピーすることにする。USB経由でつないで、fdiskで見てみると、/dev/sddとして認識されていた。

shanai@shanai-desktop:~$ sudo fdisk -u -l
[sudo] password for shanai: 

Disk /dev/sda: 320.0 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = セクタ数 of 1 * 512 = 512 bytes
Disk identifier: 0x00076d08

デバイス Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63   599738579   299869258+  83  Linux
/dev/sda2       599738580   625137344    12699382+   5  拡張領域
/dev/sda5       599738643   625137344    12699351   82  Linux swap / Solaris

Disk /dev/sdd: 80.0 GB, 80026361856 bytes
240 heads, 63 sectors/track, 10337 cylinders, total 156301488 sectors
Units = セクタ数 of 1 * 512 = 512 bytes
Disk identifier: 0x9bdbf079

デバイス Boot      Start         End      Blocks   Id  System
/dev/sdd1   *          63   146497679    73248808+   7  HPFS/NTFS
/dev/sdd2       146497680   156295439     4898880   12  Compaq 診断

なんか、リカバリ用の領域が「Compaq 診断」になっているのが笑える。というわけで、

shanai@shanai-desktop:~$ sudo dd if=/dev/sdd of=x61.img

さて、どのくらい時間がかかるんだろうか。

40分ほどで終了。思ったよりも速いな。SUMSUNGの500GBにつなぎかえて、書き込み。今度は書き込みだから、長いかな。

sudo dd if=x61.img of=/dev/sdd

やはり書き込みは、読み出しの4倍くらいの時間がかかった。あとはsudo gpartedで、Gpartedを立ち上げて、サービス区画を、ディスクの最後尾に移動。

Ubuntuを導入しようとすると、パーティション設定は自動だとエラーが出てうまくいかないので、手動でext3を/にマウント、あとSwapを作成して、導入。ちゃんとブートセレクタも導入されたので、Windowsとのデュアルブートも自動でできるようになった。

IE上のJavaScriptで、関数の呼び出し元を取得する。

デバッグで割と役に立ったのでメモ。

var currentFunction = arguments.callee.caller;
while (currentFunction) {
  alert(currentFunction.toString();
  currentFunction = currentFunction.caller;
}

猫ページ

猫ページ更新完了。

バッグ修理

TUMIのバッグの取っ手部分が壊れたので、東京駅の大丸に行ってきた。修理はアメリカ送りなんで1か月くらいかかる模様。ついでにキャスタも交換してもらうことに。

帰りに千疋屋で桃を。ちょっと駅から遠いところにあるので、すいていて結構、穴場かも。920Tで撮って、Silkypixで色温度調整してノイズ除去。けっこう綺麗に写るもんだね。

初めてUbuntuでBluetooth通信してみたんだけど、gnome-bluetoothというのをSynaptpicで入れるだけ、Windowsのように簡単にファイル受信できた。

gnuplot

20年振りくらいにgnuplotを使う。Rubyでバブルソートを書いて、実行時間を測定。プロットしてみたら、結構きれいに2次曲線の上に乗ってくれた。

X61衝動買い

なんか9万切っているので買ってしまった。X61sも安いけど、CPUが遅くなるんでX61にした。

X61はPenryn対応のようなので、昔買ったT8300が使えそうだ。今日は秋葉原に行って、HDDとメモリを買ってきた。初めてSUMSUNGの2.5 inch HDDを購入。なんと2.5 inch も500GBの時代だ。メモリはトランセンドの2GBを2枚購入。これでB5フルスペックPCにする予定。

光学ドライブが無いんで、今デスクトップで使っているATAPIのDVDドライブを外して、USB-IDE変換経由で使用予定。そのかわりにデスクトップ用に、LGのS-ATA DVDドライブを買って来た。黒ベゼルもあったんで、本体ケースの黒とも良く合う。うちではCD-RWの使用が一番多いんだけど、32倍速に対応しているのがうれしい。とはいえなかなかメディアが売ってないんだけどね。

ものすごい雨だったんで、ヨドバシの中のレストランで昼食。家内とひつまぶし屋さんに入ったんだけど、とてもおいしくて満足。デスクトップで使っているドライブは、確か15k円くらいになった時に、喜びいさんで買ったんだけど、今日買ったのは、ソフト付きで3k円強だった。なんなんだろうね、この安さは。金銭感覚がおかしくなるよ。昼メシ代の方が高いんだもんな。

P.S. 保守マニュアル見ると、X61は、CPU直付けのようだ。

Scalaのenumは直列化できない?

Valueがインナークラスだというのが、かなりつらいな。Value自体は直列化可能じゃないから、デフォルトコンストラクタが必要だけど、Valueはインナークラスだから、エンクロージングクラスを引数とした、コンストラクタしか用意されていない。う〜む、とりあえずenumは、Javaで用意かなぁ。

Scalaのenum

Scalaでは、enumはどうするんだろうと思っていたんだけど、ちゃんとscala.Enumerationというクラスが用意されていた。いや名前から、java.util.Enumerationみたいなもんだと思って見落としていたんだけど。Scalaなんだから、そんな後方互換性は不要だよな。

Enumerationは、Valueというインナクラスで、メンバを表現する。つまりenum自体と、その中に定義される定数とは、別のクラスになっている。

object Const extends Enumeration {
  def ONE, TWO = Value
}

みたいにして使う。このValueは、インナクラスのValueなのではなくて、Enumeration内に定義されたメソッドだ。

  protected final def Value: Value =
    new Val(nextId, if (nextName.hasNext) nextName.next else null)

で、戻り型は、インナクラスのValueだ。あぁややこしい。で、このValueクラスを見てみると、

  abstract class Value extends Ordered[Value] {
    /** the id and bit location of this enumeration value */
    def id: Int
    override def compare(that: Value): Int = this.id - that.id
    override def equals(other : Any) : Boolean = 
      other match { case that : Value => compare(that) == 0
                    case _ => false } 
    override def hashCode : Int = id.hashCode
...

idが一致すればokなのか。ってそれじゃ、無関係のenum同士がequalになってしまうのでは?

object Const1 extends Enumeration {
  val ONE, TWO = Value
}

object Const2 extends Enumeration {
  val ONE, TWO = Value
}

object Main {
  def main(args: Array[String]) {
    System.out.println(Const1.ONE == Const2.ONE)
  }
}
shanai@shanai-desktop:/tmp$ scala -cp . Main
false

あれ? 平気だ。こんなコードを試しに作ってみると、

class Base {
  class Value {
    def c(v: Value) {}
  }
}

class Foo1 extends Base {
  val ONE = new Value
}

class Foo2 extends Base {
  val ONE = new Value
}

object Main {
  def main(args: Array[String]) {
    val foo1 = new Foo1
    val foo2 = new Foo2

    System.out.println(foo1.ONE.c(foo2.ONE))
  }
}
shanai@shanai-desktop:/tmp$ fsc test2.scala
/tmp/test2.scala:20: error: type mismatch;
 found   : foo2.Value
 required: foo1.Value
    System.out.println(foo1.ONE.c(foo2.ONE))
                                       ^
one error found

あぁ、これがパス依存型というやつか。ValueはBaseクラスにしかないけど、インスタンスによって、別のクラスだと認識されるんだね。このあたりは、Javaから来ると、かなり混乱するな。でもインナクラスのインスタンスってエンクロージングクラスのインスタンスを含んでるわけだから、むしろ、こっちの方が自然な気もしてきた。

Windowsのmdって、mkdir -p相当なのか。

ディレクトリaaaが無くても、md aaa\bbbとすると、aaaを作ってから、bbbも作ってくれる。

確認してみたら、Windows2000でも使えたから、かなり昔から使えていたんだな。さすがにWindowsNTが入ったマシンは無いんで、いつから使えるようになったかは不明だ。

mpio MG200雑感

8ボタンのUIは、独特。まぁ慣れの問題かな。

電源を入れたままだと、1日で電池が無くなるので、自動電源offで、オフにするんだけど、電源切れると、次に電源を入れて、ミュージックモードに入るのに30秒くらいかかる(16GB SDHCにフルにデータを入れた場合)。幸いなのは電源切れても、全曲リピートで、前に演奏していた場所を覚えていてくれること。

動画再生とか、録音とか、イメージ表示は試してない。というのも、これらをやるにはメインメニューに戻らなきゃならなくて、戻っちゃうと、またミュージックモードに入るのに30秒かかるからだ。こんな機能よりも曲リストをキャッシュする機能の方が256倍、欲しかった。売り文句にならんから、仕方が無いのか。

iPhone月額料金

こんなに下がるとはね。あんまり売れていないんだろうか。それとも安い、と思って買ってみたら、結局みんな上限額まで使っちゃうって罠なんだろうか。

猫ページ

猫ページ更新完了。

mp3プレーヤ

ケータイのミュージックプレーヤが使いにくいので、mpioのMG200を購入。

余計な転送ツール無しで、単なるUSBメモリとして見えるものを探したら、ほとんど選択肢がなかったけど、安いし、非保証だけどSDHC 16GBまで使えるんで、これにした。上位機種のMG300はflacなんかにも対応していて、心ひかれたけど、なぜか上位機種のくせに、SDHCに対応していないし、価格comでの評価も散々なので、やめておいた。

さっそく手持ちの音楽をmp3 320kbps vbrでエンコード。さすがに32GBあまりあって、全部は入らない。曲の演奏順は、コピーした順になるようだ。うん、これはこれで、特にツールなしで演奏順を任意に設定できるわけだから、いいんじゃないかな。

日本のサイトにあるファームウェアのアップデートツールは、FACDLL.DLLのエラーとかいうダイアログが出て動かなかった。USのサイトから落としたところ、こちらはちゃんとアップデートできた。なんなんだ。

sl

良くlsをslと打ち間違えるんだけど、

shanai@shanai-desktop:~$ sl
プログラム 'sl' はまだインストールされていません。  次のように入力することでインストールできます:
sudo apt-get install sl
bash: sl: command not found

なんだろう。気になるなぁ。でもわざわざインストールするのもなぁ。と思ったら、「すぱいだー日記。」で紹介されていた。こりゃ明らかにタイプミスを狙った一発芸だね。脱帽。そういえばX68000には、diって名前のファイラがあったっけ。

P.S. 単にAAが表示されて終わりかと思ったら、アニメーションするよ(< 結局インストールしてみたやつ)。作者は豊田さん。日本人だ。manを見て爆笑。

SL(6)                                                                    SL(6)

名称
       sl - キータイプを矯正します。

形式
       sl [ -alFe ]

解説
       sl は、高度に発展した、キータイプ矯正を目的とするアニメーションプログラ
       ムです。SLは蒸気機関車のことです。

       次のようなオプションがあります。

       -a     なにかアクシデントがあったようですね。助けを求める人々が悲痛です
              。

       -l     小さくなります。

       -F     飛びます。

       -e     Ctrl+C で途中で止めることを許します。

関連事項
       ls(1)

バグ
       カレントディレクトリの内容が表示されることがあります。

(作者フルネームとメールアドレスは省略。知りたい人はインストールしてみて)

4.2 Berkeley Distribution        Jan 24, 2001                            SL(6)

-a, -l, -Fはlsで頻繁に指定するオプションだからなんだろうけど、この-eの存在の矛盾が、なかなか笑える。いや、もしかして、BSD系だとlsに-eってオプションがあるんだろうか。

このサイトの掲載内容は私自身の見解であり、必ずしもIBMの立場、戦略、意見を代表するものではありません。
日本アイ・ビー・エム 花井 志生 Since 1997.6.8