2009-01-01から1年間の記事一覧

when-required マクロ

Emacs の設定を複数のマシンの共有するときに面倒なのが、require しているパッケージがあったりなかったりすること。例えば、slime を require している .emacs をマシン A とマシン B で共有しているとする。マシン A には slime があり、マシン B には sl…

Java で Erlang 風プロセスを作ってみる

Erlang を使ったことはないから、Erlang 風かどうかは実際のところ分からないんだけど…。他の人が作ってるのを見た感じ、まぁ大体あってるんじゃないかなーという希望を持ちつつ。メッセージボックス付きのスレッドってな感じで作った。 import java.util.*;…

NetBSD と Java

NetBSD で Linux エミュレーション版 JDK6 を使ってるんだけど、とにかく不安定。はじめは Swing 絡みだけかなーと思ってたけど、他にもいろいろあるくさい。 Swing で画面表示してたらコアダンプ。 Jython のインストーラ (Swing) 立ち上げてたらコアダンプ…

文字列エンコードとデコード

EUC-JP な文字列を UTF-8 や Unicode な文字列へ。 f = open('eucjptext.txt') x = f.read() ux = unicode(x, 'euc-jp') print 'utf8:' print ux.encode('utf8') print 'unicode:' print ux Trac の ticketimport プラグインで日本語が化ける (らしい) 不具…

昨日のマクロ

謎が解けた。というか会社の人に教えてもらった。 (defmacro when* (test &rest body) (if test `(progn ,@body))) こんな感じのが昨日のマクロ。これの何が悪かったのかというと、test がフォームのまま評価されていたということ。つまり (when* (equal 1 2…

昨日のマクロその 2

これで何をやりたかったかというと、Emacs Lisp のコンパイル警告を抑止したかっただけ。無視しても大したことはないんだろうけども。例えば howm をバイトコンパイルすると、以下のようなコンパイル警告が出る。 In riffle-summary-mode: riffle.el:191:4:W…

マクロで条件つきコンパイルみたいなことがやりたい

C の #if みたいなことを、Lisp のマクロでやりたい。が、うまくいかず。xyzzy と Emacs で想定した動きにならなかったので、なんか自分の凡ミスだとは思ってるんだけど。 (defmacro when* (pred &rest body) (when pred `(progn ,@body))) で、以下のように…

anything.el から emacs-w3m を起動しようとすると core dump する

M-x w3m では大丈夫。なんでだろう。どうやって原因を調べればいいんだろう。

Google Bookmark のエクスポート HTML からリンクのリストを作る

sed

Google Bookmark でエクスポートした HTML は、DL/DT/DD を使った定義リストになっている。DT 要素に A 要素とブックマークタイトルが入っているので、これを LI に変換する。ついでに、DT タグには終わりタグが入れられていないので、これもちゃんと閉じタ…

セルエディタと型

JTable がデフォルトで用意するセルエディタは, 実は入力チェックつきだった. デフォルトで対応しているのは, String/Integer/Boolean の 3 つ.TableModel の getClumnClass(int) で String/Integer/Boolean のいずれかの型を返すと, その型に応じた入力チェ…

メソッド最初の引数のインデント位置

cc-mode デフォルトの, メソッド最初の引数のインデント位置が気に入らない. void longLongNameMethod( Object hoge, Object fuga) { } 2 つ目以降はこんな感じでいいんだけど, 1 つ目は Eclipse っぽい感じになってほしい. void longLongNameMethod( Object…

pkgsrc で emacs アプリのインストールに失敗する

emacs アプリと呼ぶのが正しいかどうかはさておき. inputmethod/skk とか, devel/flim とかのインストールが, ことごとく失敗していた. エラーメッセージを見るに, ロードパス絡みっぽい.どうやら editors/emacs の modules.mk に問題があるらしく, ちょこち…

バイナリクロック

http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_179 のお題。時刻の扱いかたを把握するのに時間がかかった。 import Data.Bits (testBit, shiftR) import Data.Time (localTimeOfDay, utcToLocalTime, getCurrentTime, todHour, todMin, getCurren…

Apache Ivy を試す - その2

Ivy

ライブラリプロジェクトに対して、そのテストプロジェクトが依存するという関係を Ivy で解決する。独自のロガーライブラリを例にとる。logging が本体プロジェクト、logging-test がテストプロジェクト。 logging の build.xml <project name="logger" basedir="." default="compile" xmlns:ivy="antlib:org.apache.ivy.ant"> </project>

Apache Ivy を試す

Ivy

使うたびに最初のコマンドを忘れる Maven2 にどうしてもなじめないので, Home | Apache Ivy ™ を試す.今回やろうとしたのは, 高齢者でも効果ある? への依存関係を Ivy で解決する (ひらたく言えば fest の jar を Ivy で落としてくる) ということ. 結局うま…

再帰的にディレクトリをたどる - その2

遅延評価をどうこうしようと思ったけど挫折。どっかを seq すりゃいいと思うんだけどなー。FilePath のリストを返さず、find 内で出力までやっちゃうようにすればすぐできそうなんだけど、それじゃ関数的じゃないよいなぁということで。普通の find と比較し…

再帰的にディレクトリをたどる

いわゆる find。forM ははじめて使った。ただこの実装だと、遅延評価の影響でメモリを馬鹿食いする。次回はこれの改善かな。しかし例外 API をはじめてまともに使ったけども、とても使いやすいとは言えないな。\e を \_ として評価しないようにしても、型が…

エラーモナドを使ったエラー処理

ほとんど http://www.haskell.org/ghc/docs/latest/html/libraries/mtl/Control-Monad-Error.html#1 を写経しただけ。Error クラスのインスタンスにするのにどうすりゃいいかという話さえ分かってしまえば、あとは予想可能な例外として扱えばいいだけ。どう…

条件つき alias

extags を ctags に alias するといった、元々存在するコマンドに alias するということは、頻繁とはいかなくともぼちぼちある。vim と vi とか。こんなとき .bashrc をいくつかのマシンで共有していると、 "ctags がある状態で ctags を extags の alias に…

hGetContents と hClose

hGetContents に渡したハンドラを hClose すると、hGetContents の結果が空文字列になる。 import IO (openFile, IOMode(ReadMode), hGetContents, hClose, bracket) f1 = do h <- openFile "hoge.txt" ReadMode s <- hGetContents h return s f2 = bracket …

一般的な例外処理

なんか書こうと思った (というか一回書いたんだけど) けど、よくまとまってる記事があった。2006-06-13 - syd_sydの日記 - haskell紹介されてるのは今でいう古い例外モジュールだけど、例外の型を明らかにしないといけないこと以外はあんまり変わってないん…

バックグラウンドで実行したアクションの結果を受けとる

Java の Future みたいなものを Haskell で。 import Control.Concurrent (forkIO, newChan, writeChan, readChan) type Future a = IO a onBackground :: IO a -> IO (Future a) onBackground act = do ch <- newChan forkIO (act' ch) return (readChan ch…

IO エラー処理

Haskell のエラー処理と言うと、ErrorT だかなんだかで「たかがエラー処理で、なんでこんなにややこしいことを覚えねばならんのだ」と投げ出したくなるのだけど、IO エラーに限ればけっこう簡単。Either でラップして結果を受けとる try と、エラーハンドラ…

Haddock で日本語が出ない原因を調べる

Haddock では non-ASCII な文字は全て &#xddd; 形式で出力するという仕様となっている。乱暴だとは思うが、とりあえずこうしておけばブラウザからはちゃんと見えるし、仕様については、まぁいいんでないかなと思う。しかし実際にやってみると、これすらも出…

Haddock を使ってみる

Haskell 界のデファクトスタンダードなドキュメント生成ツール Haddock を使ってみる。とりあえず関数の説明とか、引数の説明とか、データ型の説明あたりの、当たり前のことができるようになれれば満足。Haddock User Guide を参照した。 module Main where …

UNIX Domain Socket を使う (クライアント編)

UNIX Domain Socket に対して echo チックなことをやるアプリケーション。本家 echo と同様、引数をそのまま出力する。複数の引数がある場合には、これらを空白で区切る。 本家 echo と違うのは、ソケットファイルのパスを受け取らなければならないというこ…

UNIX Domain Socket を使う (サーバ編)

Haskell で UNIX Domain Socket を使ってみる。クライアントによってソケットに書き込まれた情報を、そのまま標準出力に出力するというアプリケーションを作ってみる。とりあえずサーバ。 import IO (try, hPutStrLn, stdout, hFlush, stderr) import Contro…

Hello World

main = putStrLn "hello"