CDをファイルに変換するには、ddを使うのが常道なのだけど、
# dd if=/dev/cd0c of=image.iso
としてしまうと、読み込みが止まらなくなってしまうので、次のようにするとよい。
#!/bin/sh
cdd=/dev/rcd0c
s=`/sbin/disklabel $cdd | /usr/bin/grep "bytes/sector:" | /usr/bin/sed 's/.* //'`
sc=`/sbin/disklabel $cdd | /usr/bin/grep "sectors/cylinder:" | /usr/bin/sed 's/.* //'`
c=`/sbin/disklabel $cdd | /usr/bin/grep "cylinders:" | /usr/bin/sed 's/.* //'`
echo "$s bytes/sector $sc sectors/cylinder $c cylinders"
dd if="$cdd" of=image.iso bs="$sc"x"$s" count="$c"
ねた元
うっはー。これは美しい。
さっそく頂き。Lispのカテゴリアイコンにさせてもらおう。感謝!
カテゴリ管理のリーダーマクロをでっちあげた。
いままで何かが足りないなあと思っていたが忘れていたのがこれ。
以前使っていたblosxomにはpluginとして存在していたのだけど、
なかなか便利なのでWiLiKi用に適当に書いてみた。所要時間10分。
メニューのCategory覧もWiLiKi/Blogのように展開するようになった。
詳細はWiLiKi/Hack/categoryまで。
Haskellでfps。カコイイ。
ソースをみてみると、md3形式のオブジェクトが読めるっぽいので、
Quakeのキャラクタとかがそのまま動きそう。
さっそくコンパイルしてみようとしたんだけど、
ghcがHOpenGLを有効にしてビルドされてなかった(OpenBSDのportは--enable-hopenglされてないのね)。うーむ。
OpenBSDのmallocはmmapまわりをいじってあるのだけど、
いじって以来動かなくなっていたいくつかのソフトのうちのひとつ、
OpenBSD-cvs:ports/lang/clispを再び動くようにする方法。
って、mallocを迂回して自前のメモリアロケータを使っているだけのような。
まあ本質的な解決じゃないよな。作者も直す気がないっぽいし(c.l.l)、どうすべ。
とはいえUnCommon Webもclispで動くようになったらしいので、この方法をちょっと試してみる。
clisp-2.33.2だとバージョンが古すぎて動かないので、ちょっといじってclisp-2.35にすると(今度はmaximaがコンパイルできなくなるが)、とりあえずucw_devの起動まではいけた。さて……。
なんとかghciがOpenBSD上で動くようになった。
どのようにすればghciが動くかといった話は、
http://www.ruby-talk.org/cgi-bin/vframe.rb/haskell/haskell-jp/627?599-748
にあったのだが、実際の作業が面倒。
$ objdump -r /usr/local/lib/ghc-6.2.2/*.o
を見ながらリストの作成。
とりあえず上のパッチを当てれば、デフォルトのpackage.confに入っている分が動作可能に。
ghc/rts/Linker.cのコード自体がad-hoc過ぎて涙がでる。
しかもこれのやりかたでは、
Cで書かれた新しいパッケージを追加すればとたんに動かなくなるような気がするのだが。
真面目にHaskellを勉強しようと思ったので、ghciを起動。
$ ghci
___ ___ _
/ _ \ /\ /\/ __(_)
/ /_\// /_/ / / | | GHC Interactive, version 6.2.2, for Haskell 98.
/ /_\\/ __ / /___| | http://www.haskell.org/ghc/
\____/\/ /_/\____/|_| Type :? for help.
Loading package base ... linking ... /usr/local/lib/ghc-6.2.2/HSbase_cbits.o: unknown symbol `__errno'
ghc-6.2.2: unable to load package `base'
$
うえーん。ghcのビルド時間1時間30分を返せー(いま測った)。
てか変だね。これ。ghcの方はきちんと動いてるからdlfcnまわりの問題かなあ。
OpenBSD-cvs:src/sys/sys/errno.hの
#ifndef _KERNEL
extern int errno; /* global error number */
#if !defined(errno) && !defined(_STANDALONE)
#include <sys/cdefs.h>
__BEGIN_DECLS
int *__errno(void);
int *___errno(void);
__END_DECLS
#define errno (*__errno())
#endif /* errno */
#endif /* _KERNEL */
あたりがあやしいのだが、どうすっかね。
ghc-6.2.2/libraries/base/include/HsBase.hの
/* Ultra-ugly: OpenBSD uses broken macros for sigemptyset and sigfillset (missing casts) */
#if __OpenBSD__
#undef sigemptyset
#undef sigfillset
#endif
が気になるので、
OpenBSD-cvs:src/include/signal.hを読む。
sigemptyset, sigfillset, sigaddset, sigdelset, sigismemberがぜんぶインライン関数になってる。
とりあえず、HsBase.hに
#undef sigaddset
#undef sigdelset
#undef sigismember
を追加してビルドしてみるか。
ううむ。違うか。
このページのGaucheも更新。
というか、変更点てんこもりやね。
foreign pointer objectの導入で、Scheme/Gauche/Gauche-lazy-ffiはもう無用かもしれず。
Beta4から更新されたので、早速入れ替えてみたのだが、oggencのオプション-qを0より小さくするとセグる。
lib/psy.c:_vp_offset_and_mix()の
for(i=0;i<n;i++){
...
if((logmdct[i]-lastmdct[i]) > 20){
で-q=-1等のときnが256になって、
lastmdct[i]がオーバーランしているようだ。
lastmdctはlib/mapping0.cにて、
b->nblock+i*128;
となっていて(iはchannel数)、
nblockのサイズはlib/block.cにて128*channel数と決め打ちになっている。
しかたがないから、むりやりバッファを増やしてみた。
--- lib/block.c.orig Sun Nov 6 10:28:03 2005
+++ lib/block.c Sun Nov 6 10:28:16 2005
@@ -288,8 +288,8 @@
b->psy_g_look=_vp_global_look(vi);
/* added by aoyumi */
- b->nblock = _ogg_calloc((128*vi->channels), sizeof(*b->nblock));
- b->tblock = _ogg_calloc((128*vi->channels), sizeof(*b->tblock));
+ b->nblock = _ogg_calloc((128*vi->channels)*2, sizeof(*b->nblock));
+ b->tblock = _ogg_calloc((128*vi->channels)*2, sizeof(*b->tblock));
b->lownoise_compand_level = _ogg_calloc(vi->channels, sizeof(*b->lownoise_compand_level));
/* Initialize the envelope state storage */
これが期待されたエンコード結果を生成しているのかまったく自信がない(糞耳)。
とかなんとかいいながら、
-q=-2などとやって遊んでいるのだが(平均ビットレートは30〜40kb/sくらい)、
変な歪みもなくてよい。
blog.scmとrss.scmに「もっと読む」機能を追加してみた。
Read more: WiLiKi/2005/11/03/see-more