[トップ][一覧][最近の更新]

archives/2005/11

OpenBSD/Memo/dump-cd-image

Category of OpenBSD

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"

ねた元


  • /dev/rcdでないといけない。訂正。

Lisp/logos

Category of Lisp

うっはー。これは美しい。 さっそく頂き。Lispのカテゴリアイコンにさせてもらおう。感謝!

WiLiKi/category

カテゴリ管理のリーダーマクロをでっちあげた。

いままで何かが足りないなあと思っていたが忘れていたのがこれ。 以前使っていたblosxomにはpluginとして存在していたのだけど、 なかなか便利なのでWiLiKi用に適当に書いてみた。所要時間10分。

メニューのCategory覧もWiLiKi/Blogのように展開するようになった。

詳細はWiLiKi/Hack/categoryまで。

Haskell/frag

Category of Haskell

Haskellでfps。カコイイ。

ソースをみてみると、md3形式のオブジェクトが読めるっぽいので、 Quakeのキャラクタとかがそのまま動きそう。

さっそくコンパイルしてみようとしたんだけど、 ghcがHOpenGLを有効にしてビルドされてなかった(OpenBSDのportは--enable-hopenglされてないのね)。うーむ。

Lisp/OpenBSD/clisp

Category of Lisp
Category of OpenBSD

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の起動まではいけた。さて……。

Haskell/__errno

Category of Haskell

なんとか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/__errno

Category of Haskell

真面目に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

を追加してビルドしてみるか。

ううむ。違うか。

Scheme/Gauche/gauche-0.8.6

Category of Scheme

このページのGaucheも更新。

というか、変更点てんこもりやね。

foreign pointer objectの導入で、Scheme/Gauche/Gauche-lazy-ffiはもう無用かもしれず。

Audio/aotuv-beta4.5

Category of Audio

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くらい)、 変な歪みもなくてよい。

WiLiKi/see-more

blog.scmとrss.scmに「もっと読む」機能を追加してみた。

Read more: WiLiKi/2005/11/03/see-more