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で、高速サスペンド
ダウンロードして、普通に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
という中身にすることで、うまくいっている。
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のタスク実行時にもクラスパスに指定してやれば良いみたいだ。
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のように簡単にファイル受信できた。
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倍、欲しかった。売り文句にならんから、仕方が無いのか。
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ってオプションがあるんだろうか。








