日々のメモ書き
Debian Developerが綴るメモ
JavaScriptにはブロックスコープがない
そうですかそうですか。
本格的にAjaxの関係でJavaScriptを最近よく書くようになった。ごりごり書いていると変数の参照に関してトリッキーな、というか手抜きというか、やばい臭いがプンプンするコードが書けてしまうなあということに気付く。今までJavaScriptは入門書もロクに読まずに書いていたのでわかっていなかったが、それは単純な話だった。
JavaScriptにはブロックスコープがない。
おそろしい話だ。
Haskell SKK ServerがEmacsで動かない
自作のHaskell SKK ServerがEmacsで動かない。
uim-skkだと動いたのだが、Emacs-SKKだと駄目。変換されずにそのまま固まる。なんだろう…。他のskkservの挙動を見ても変なことしてないのになあと。パケットキャプチャをしてみたら…あれ?Emacs-SKKがLFを最後に送ってない。どーなってんだろう。これが原因か?
IO.getLineを使うと改行されるまで待つのがまずいらしい。IO.getCharで一文字ずつ読んでスペースが来たら一区切りで返すという処理を書いたら、Emacsでも動くようになった。dbskkd-cdbの附属の文書にはLFで終わるって書いてあったけど…。SKK serverの正しいプロトコルって何だろう…。
tcpdumpが動かん
tcpdumpが動かん。wiresharkも動かん。
パケットキャプチャしようとしたらtcpdumpもなにもかもが動かない。
# tcpdumplibpcap(Bug#517098)が原因らしい。linux-image-2.6.26-1-amd64だと駄目だとさ。686-bigmemでやったら動いた。む。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
01:22:26.123874 7d:c0:00:00:00:00 (oui Unknown) > yy:zz:00:xx:xx:xx
(oui Unknown) Null Information, send seq 0, rcv seq 0, Flags [Command],
length 4294967282
01:22:26.123874 01:80:c2:00:00:00 (oui Unknown) Unknown SSAP 0x92 >
00:00:00:00:00:00 (oui Ethernet) STP Supervisory, Receiver Ready, rcv
seq 69, Flags [Final], length 4294967282
tcpdump: pcap_loop: corrupted frame on kernel ring mac offset 94 + caplen 168 > frame len 160
2 packets captured
3 packets received by filter
0 packets dropped by kernel
#
ISS観測
ISS(国際宇宙ステーション)が名古屋から見えるとのことで待っていた。
この前つけた太陽電池パネルのおかげで金星よりも明るくなったISS。JAXAのサイトを参考にすると4/1の19:25頃に見えるということで待っていた。さてさて、どっちかなーと思って空を見回してみたら間違いなくあれだね、異様に明るい高速で移動する輝点が。ああ、これは間違いない。この明るさと移動の早さはおかしな感覚。あれが数百kmもの上を飛んでいるとは思えない。
しばらく見ていたら沈む前に見えなくなった。地球の陰に入ったということかな?4/3にも見えるということなので楽しみにしていよう。
Haskell SKK Server
Haskellでなんか実用的なものを作るぞ。
Haskellで実用的なものをつくりたい、ということでSKKサーバを作ってみた。プロトコルは簡単なのでちょこちょこっと応答部分を作って辞書はSKK-JISYO.LをHashTableで格納して。50行ぐらいで書けた。大体動くようになったので入れ替えてテストしてみるか。
ただ、起動するたびにHashTableを再生成では大変なのでそこはなんかDBを使うようにしなればならない。それは別のお話。
metacity + firefox3 がひどい件(まだ続き)
相変わらず駄目だね。2.24.0-2でも。
fireforx-remoteで呼ぶと今のworkspaceにウィンドウが飛んでくる件。
バグレポートは上がっていたはずなんだけど。うーん、なんで放置されているんだろう。
しゃーないのでUbuntuからパッチを持ってきて自分でbuildしたら直った。そのまま持ってくるにはHardyとsidでパッケージ名が変更されているので無理でした。どのパッチが正解なのかまだわからないけど。
CentOS 5.2 netinst
CentOS 5.2 をnetinst をやった。
ミラーの選択ができずに手動でホストとパスを打ち込むのが面倒。
stoneって便利だな
ファイアウォールの内側からproxyでごにょごにょするのが楽。
何が楽ってコンパイルが楽。ファイルが2つしかない。適当にやってもなんとかなる。サーバにsshで入れない状況のときにサーバー側から
ssh -R sport:127.0.0.1:dport host
とかやれば転送が効くので stone proxy sport とやる。
tailor
migrate changesets between version control systems
いろんなSCMを互いに変換するソフト。汎用的に色々対応しているのが利点か。
例
tailor --verbose -s git -R /home/takaki/src/haskell --subdir oth > o.tailorgitからdarcsに変換した。
tailor --verbose -s svn -R http://svn.plone.org/collective --module Products.Quills --subdir Productsvnからdarcsに変換。
オセロのプログラムを書いたときのメモ
オセロのプログラムをHaskellで作成。こんな修正したよというメモ。
なかなか作法がわからないからね。
if を使わずガードで表記
- rowCheck x y cb =
- if x < 0 then
- True
- else
+ rowCheck x y cb
+ | x == -1 = True
+ | otherwise =
こっちのほうがきれいにかけますね。
List関係いろいろ
リファレンスをながめていて色々できることに気がついた。- if and [getPiece x y ob == Empty, length revPos > 0] then単純な話だけどライブラリは使おう。
+ if and [getPiece x y ob == Empty, not $ null revPos ] then
- foldl (++) "" [ob2Line (7-y) ob | y <- [0..7]]foldlでやっているのが変だった。
- ++ "/01234567\n"
+ concat ([ob2Line (7-y) ob | y <- [0..7]] ++ ["/01234567\n"])
+ doReverse piece ob pos =自分で再帰で書いていたのを工夫したらfoldlでできるようになった。
+ foldl (\ob p -> (putOnPiece (fst p) (snd p) piece ob)) ob pos
- doReverse piece ob [] = ob
- doReverse piece ob (p:pos) =
- doReverse piece (putOnPiece (fst p) (snd p) piece ob) pos
- concatMap (\y -> ob2Line (7-y) ob) [0..7] ++ "/01234567\n"これもライブラリを使ったほうが自然ですよと。
+ concatMap (ob2Line ob) (reverse [0..7]) ++ "/01234567\n"
- initBoard =これはちょっと迷うところではあるけれど。
- Map.fromList [( (p2int 3 4), White), ((p2int 4 4), Black),
- ((p2int 3 3), Black), ((p2int 4 3), White)
- ]
-
+ initBoard =
+ let ob = Map.empty in
+ foldl (\ob p -> putOnPiece (fst (fst p)) (snd (fst p)) (snd p) ob)
+ ob [((3,4), White), ((4,4), Black),
+ ((3,3), Black), ((4,3), White)]
do記法の意味がちょっとわかった
catch (readIO line :: IO (Int,Int))syntax sugar という話。>> がずらずら並ぶときには do を使えば消える
- (\e -> return (e::SomeException) >>
- putStr "Input again!: " >>
- hFlush stdout >>
- readPos)
+ (\e -> do
+ return (e::SomeException)
+ putStr "Input again!: "
+ hFlush stdout
+ readPos)