2012年02月23日 [長年日記] 編集
# [joke][music]替え歌: セマンティックあげるよ
もっと愛をこめたいです。。。
おいでC言語好きさC++君の素直さ隠さないで 意味付けしたくて型付けしたくて誰もみんなウズウズしてる 職業プログラマのフリしてあきらめちゃ 設計の謎など 解けないよ もっとワイルドにもっとたくましく生きてごらん セマンティックあげるよセマンティックあげるよ ホントの意図見せてくれたら セマンティックあげるよセマンティックあげるよ トキメクバイナリに キラキラ光った Foreign.Storableをあげるよ
参考: Foreign.Storable
2012年01月30日 [長年日記] 編集
# [notepc][pc][windows]ThinkPadのOS代金は返金できませんよ、というお話
ひょっとするとやる人がいるかもしれないのでメモ。
IBM製時代から愛用しているThinkPadユーザです。 現在ThinkPad X220iの購入を検討しているのですが、 Windowsを含めたプリインストールソフトウェアをもはや全く使用していません。 プリインストールソフトウェアのみの返金お願いすることはできますでしょうか。 http://www.microsoft.com/About/Legal/EN/US/IntellectualProperty/UseTerms/Default.aspx にあるWindows 7_Home Premium_Japanese_d895bfea-9150-45cd-9872-fa26bcd52452.pdf によると、、、 > 本ソフトウェアを使用することにより、お客様は本ライセンス条項に同意されたものとします。本ライ > センス条項に同意されない場合、本ソフトウェアを使用することはできません。この場合、お支払いい > ただいた金額の払戻しに関する方針については、製造業者またはインストール業者にお問い合わせくだ > さい。お客様は、この方針に従う必要があります。 と記載があります。 LenovoとしてこのWindowsのEULAについての見解をいただけると大変助かります。 よろしくお願いいたします。
というメールをレノボさんに送ったところ、結局以下の理由で返金できないみたいです。
購入時に同意いただいた販売規約に記載がございます。 4、返品についての中の4,1から4.3を御確認ください。 ご面倒をおかけいたしますが、何卒宜しくお願い申し上げます。 販売規約 http://shopap.lenovo.com/SEUILibrary/controller/e/jpweb/LenovoPortal/ja_JP/\ special-offers.workflow:ShowPromo?LandingPage=/All/Japan/PUBLIC/Selling_agreement/public
ハードと一緒に返金ってことになっちゃいますね。 やっぱりUbuntuかなんかのプリインストールモデルが欲しくなります。。。
2011年12月21日 [長年日記] 編集
# [haskell]Haskell Advent Calendar 2011: 「簡約!? λカ娘(二期)」とHaskell製OSの紹介
突然でゲソが、コミックマーケット81に関数型の本が出るでゲソ。 みんな買ってほしいでゲソ。
第0章 クラスタリングしなイカ? 第1章 Copilot への希望と絶望の相転移 # <= コレ書いた 第2章 加速しなイカ?! 第3章 Java VM 上で tail call しなイカ? 第4章 関数型イカガール第 3 話 第5章 映画けいさん!
がもくじで、@master_qは第1章を書いたらしいでゲソ。 この章は Copilot というHaskellのDSLを使ったプログラミングの話でゲソ。 Copilotを使うとHaskellの中でDSLを使って作った設計が ライブラリ依存の少ないC言語ソースコードに変換できるでゲソ。
今日はどうして↑のような記事を書きたくなったのか、 という話をしようと思うでゲソ。
みんなこの日記記事をどんなOSの上で見ているでゲソ? Windows,Mac,Linux,FreeBSD,iPad,Android,BeOS,超漢字、そんなところじゃなイカ? そのOSはどんな言語で書かれているかもちろん知っていると思うでゲソ。 おそらくはC言語、良くてC++でゲソ。 (Java OSやLispマシンで見ている人はたぶんいないと思うでゲソ。) 設計者の願望としては、 できればもっと安全な言語でkernelや基盤ライブラリを設計したいところでゲソ。 よく考えてみて欲しいでゲソ。 アプリケーションはメモリ破壊を起こすとSEGVや動作不良を起こすだけでゲソ。 しかしkernelがメモリ破壊を起こしたらシステム全体が停止してしまうでゲソ! アプリケーションではなく、むしろkernelにこそ型安全が必要なんじゃなイカ。
じゃぁコンパイルも持っている関数型言語で作られたOSはないのでゲソ? その試みはあるんでゲソ。 今日はその中からHouse というプロジェクトを紹介するでゲソ。
まずはHouseがどんなものか見てみるでゲソ。http://web.cecs.pdx.edu/~kennyg/house/House.iso からcdromイメージをダウンロードして起動してみるでゲソ。
$ ls -l House.iso -rw-r--r-- 1 kiwamu kiwamu 3311616 1月 23 2009 House.iso $ qemu-system-i386 -cdrom House.iso
grubが起動したでゲソ。 。。。なんかgraphics modeとかいきなり書いたるでゲソ。 気になるからgraphics modeで起動するでゲソ。
うぼぁー!なんかウィンドウシステムが起動したでゲソ!すごいでゲソ! qemuのネットワークデバイスには対応してないみたいでゲソが、 telnetコマンドもあるでゲソ。
ところでこのHouseはいったいどこからどこまでがHaskellで書かれているんでゲソ? ソースコードのREADMEからひろう限りだと
------- C land
start.S | Load static, flat-memory GDT (segment descriptors)
| Initialize the memory to 0xCC (IA32 breakpoint instruction)
| Initialize the C stack
| Jump to c_start
c_start.c | Initialize PIC (IRQs 0-15 mapped to interrupts 0x20-0x2F)
| Initialize IDT (interrupt vectors)
| Initialize Haskell block allocator (MBlock_init)
| Pass control to the RTS
------- Haskell land
Main.hs | Start a console driver which handles a basic x86 text console
| Start a keyboard controller
| Start an idle thread
| Bind the keyboard and console driver to a simple Readline clone
| which allows shell-like interaction with the system
すごいじゃなイカ。 初期化以外はHaskellで書かれているでゲソ。
さっきのウィンドウシステム上でのプログラムはkernel/Gadgets にありそうでゲソ。 そしてkernel/userにはユーザ空間で動作するプログラムがC言語で書かれているでゲソ。。。
来年のお正月にはA Principled Approach to Operating System Construction in Haskellを読みながらHouseのソースコードをゆっくり読むのがいいかもでゲソー。
[2011/12/22追記] LighthouseとHouseの2つのプロジェクトについて文章の中でごちゃまぜに使っていたが、 @shelarcyさんから 「House をLightweight Concurrency Primitives for GHCを使って OS のスケジューラーを実装するよう改良したのが Lighthouse です。」 との指摘をもらって、"Lighthouse"という単語を全て"House"に置き換えた。
2011年12月07日 [長年日記] 編集
# [netbsd]カーネル/VM Advent Calendar 7日目: NetBSD bootloaderのカスタマイズとテスト手順
みなさんNetBSD使ってるでゲソ? NetBSDの海は美しいでゲソ。泳いでいるだけで幸せな気分になるでゲソ。 NetBSDにはlibsaのようなkernelのない場所でも使えるライブラリもそろっていて bootloaderでもallocなどが使えて楽チンでゲソ。 今日はNetBSD bootloaderのコンパイルとそのテスト手順について解説するでゲソ。 なにはともあれNetBSDのソースコードを入手するでゲソ。
$ pwd /home/kiwamu/src/netbsd/5.1 $ cvs -d :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot login $ cvs -d :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot co -r netbsd-5-1-RELEASE src $ cd src/
次にツールチェーンだけコンパイルしてPATHを通すでゲソ。
$ pwd /home/kiwamu/src/netbsd/5.1/src $ ./build.sh -m i386 tools $ ln -sf ~/src/netbsd/5.1/src/tooldir.Linux-3.1.0-1-amd64-x86_64/bin ~/tooldir_netbsd5.1 $ echo $PATH /home/kiwamu/tooldir_netbsd5.1:/home/kiwamu/bin:... $ which nbmake-i386 /home/kiwamu/tooldir_netbsd5.1/nbmake-i386
bootxxとbootをコンパイルするでゲソ。
$ pwd /home/kiwamu/src/netbsd/5.1/src/sys/arch/i386/stand/bootxx/bootxx_cd9660 $ nbmake-i386 $ cd ../../boot/ $ pwd /home/kiwamu/src/netbsd/5.1/src/sys/arch/i386/stand/boot $ nbmake-i386
これでNetBSD bootloaderのコンパイルが完了したでゲソ。 とりあえずqemu上で実行してみるでゲッソ!
$ pwd
/home/kiwamu/src/netbsd/5.1/src/sys/arch/i386/stand/boot
$ vi qemu.sh
#!/bin/sh
rm -rf cdrom bootxx_cd9660 boot.iso
mkdir -p cdrom
cp biosboot/boot cdrom/
cp ../bootxx/bootxx_cd9660/bootxx_cd9660 ./
qemu-img create boot.iso 16M
nbmakefs -t cd9660 -o 'bootimage=i386;bootxx_cd9660,no-emul-boot' boot.iso cdrom
qemu-system-i386 -curses -cdrom boot.iso
$ chmod +x qemu.sh
$ ./qemu.sh
>> NetBSD/x86 BIOS Boot, Revision 5.2 (from NetBSD 5.1)
>> Memory: 637/130048 k
Press return to boot now, any other key for boot menu
booting cd0a:netbsd - starting in 0 seconds.
> help
commands are:
boot [xdNx:][filename] [-12acdqsvxz]
(ex. "hd0a:netbsd.old -s"
ls [path]
dev xd[N[x]]:
consdev {pc|com[0123]|com[0123]kbd|auto}
modules {enabled|disabled}
load {path_to_module}
multiboot [xdNx:][filename] [<args>]
help|?
quit
>
うん。ちゃんと起動したでゲソ。qemuは偉大でゲソ! せっかくなのでなんかコマンドを追加してみなイカ?
$ pwd
/home/kiwamu/src/netbsd/5.1/src/sys/arch/i386/stand/boot
$ cvs diff -u
Index: boot2.c
===================================================================
RCS file: /home/kiwamu/cvs_mirror/NetBSD-CVSROOT/src/sys/arch/i386/stand/boot/boot2.c,v
retrieving revision 1.38.4.2
diff -c -u -r1.38.4.2 boot2.c
--- boot2.c 14 Feb 2010 14:01:08 -0000 1.38.4.2
+++ boot2.c 7 Dec 2011 06:00:35 -0000
@@ -134,6 +134,8 @@
void command_modules(char *);
void command_load(char *);
void command_multiboot(char *);
+void command_fib(char *);
+void fib(int, int, int);
const struct bootblk_command commands[] = {
{ "help", command_help },
@@ -146,6 +148,7 @@
{ "modules", command_modules },
{ "load", command_load },
{ "multiboot", command_multiboot },
+ { "fib", command_fib },
{ NULL, NULL },
};
@@ -860,3 +863,36 @@
printf("boot returned\n");
}
+void
+fib(int n, int f1, int f2)
+{
+ int f3;
+
+ if (n <= 0) {
+ return;
+ }
+ n--;
+
+ f3 = f1 + f2;
+ printf("%d\n", f3);
+
+ fib(n, f2, f3);
+}
+
+void
+command_fib(char *arg)
+{
+ int num;
+
+ num = atoi(arg);
+ switch (num) {
+ case 0:
+ return;
+ case 1:
+ printf("0\n");
+ return;
+ }
+ printf("0\n1\n");
+
+ fib(num - 2, 0, 1);
+}
$ nbmake-i386
$ ./qemu.sh
>> NetBSD/x86 BIOS Boot, Revision 5.2 (from NetBSD 5.1)
>> Memory: 637/130048 k
Press return to boot now, any other key for boot menu
booting cd0a:netbsd - starting in 0 seconds.
> fib 10
0
1
1
2
3
5
8
13
21
34
>
ちゃんとコマンド追加されてるでゲッソ。 NetBSDの海は楽しいじゃなイカー。
[修正: 2011/12/08]
* @h_kenkenさんから「libsa に malloc は無い気が。。。alloc はありますが。」 との指摘を受けて、s/malloc/alloc/
2011年11月14日 [長年日記] 編集
# [haskell]第4回 スタートHaskellに参加してきました
Programming Haskell Chapter8 (@ruiccさん) と 対話プログラム (@Lost_dog_さん) に今回の資料が置いてあるみたいです。 また、今回の演習問題のソースコードやテストコードは yuzutechnology/Community-StartHaskell2011 - GitHub にあるので、いつでも参照できます。
今回、特に参考になったのが@ruiccさんの資料です。 プログラミングHaskell という本で急激に難しくなる8章について、非常にわかりやすい解説が聞けました。 なかなかあそこまで図示によって解説できる人はいないのではないかと思います。 頭の中がすっきりした気分になりました。
今回の生放送はjustin.tvで配信しました。 やはりustreamよりも圧倒的に楽です。 録画は スタートHaskell#4-1 から#4-4まで撮りました。 写真はいつも通り Flickr: start_haskell にまとめてあります。
2011年11月02日 [長年日記] 編集
# [haskell][gui][carettah]下北沢オープンソースCafeでCarettahの使い方を発表してきました
Haskellのライトユーザを増やしたいなーと思って、 下北沢オープンソースCafe - Haskell Jelly! #30 に参加してきました。
オープンソースCafeでは毎週水曜日にフリーランスの方々があつまって、 おのおのの仕事を同じカフェでやってるみたいです。 お洒落空間です! 土曜日にはハッカソンをやってるみたいなので、 やる気を注入したい方は行ってみると面白いと思います。
ぼくは自作プレゼンツールの Carettah の使い方の説明と、Haskellでのプログラミングについて素人なりにアピールしてきました。楽しさが伝わったらよいのですが。。。
あと、フリーランスで仕事をされている方はtwitterよりもfacebookに多く出没するんだなーという実感も収穫でした。
2011年10月23日 [長年日記] 編集
# [haskell][debian]筑波大でHaskellとDebianについて発表してきたよ
第81回 東京エリア Debian 勉強会@筑波大学 にて、以下の内容で発表してみました。 ちょっと詰め込みすぎたかもしれないです。。。
* Haskellの紹介 * cabalの使い方 * cabalの問題 * HackageのDebianパッケージ化手法 * DebianパッケージをDebianプロジェクトに登録する手順
プレゼン資料はこちら。
2011年09月14日 [長年日記] 編集
# [ustream][justintv][ffmpeg]ffmpegを使った動画配信について(もしくはjustin.tvのすすめ)
最近勉強会に参加することがあり、その度にustream動画配信をやってきました。 手持ちの環境はDebianなのと貧乏なのでwebcamで配信していたこともあり、 動画の画質が低く、ご迷惑をかけていました。
どうもffmpegを使えばwebcamでも高画質配信できるらしいという話があって、ずーっと気になってました。
のようなスクリプトを書くことで/dev/video1に見えるwebcamをH.264形式で動画配信できるみたいです。(ustream対応版はURLが違うだけなので割愛)
しかし IEEE1394カメラとたった一行でUstream.tv高画質配信できた での指摘の通り2分ぐらい動画配信しているとffmpegが落ちます。 調べてみるとav_interleaved_write_frame()関数を呼んだ後にSIGBUS終了しているようです。 ffmpegの中でSIGBUS起きた場合の復帰処理は入ってなくて、 仮にSIGBUSを無視してもエラーメッセージを表示してexitしてしまいます。 (それでいいのかな。。。)
念のためwiresharkしてみると、、、
はい、見事にFIN,ACKパンチをサーバ側からくらってます。
ffmpegがずーとcloseされちゃってるポートにwriteしまくって、しまいにはRSTパンチがサーバから連続して来ます。
念のためFIN,ACKパケットをフィルタしてみました。
で、これは「貧乏人はustream動画配信とかモテなことはするな」ということなのかなーと思っていたら Broadcasting using x11grabr and ffmpeg on Justin.tv or Ustream のような記事を見つけました。justin.tvでも同様にffmpegで配信できて、しかもffmpegを起動するだけでwebブラウザからスタートボタン押下なしに配信開始するみたいです。 で、ffmpegでjustin.tv動画配信してみたら、FIN,ACKされないじゃないですか!
以上「ustreamはクソ。justin.tv最高」などと中二病っぽい記事をお送りしました。





_ masterq [JoachimからメールがあってDDやDMでなくても "> [Q2] Can the person as not ..]
_ masterq [JoachimからメールがあってDDやDMでなくてもpkg-haskellチームになれるそうです!]