2011-01-29
■[FreeBSD][ypserv] FreeBSD-8.1-RELEASEのypservの-Pオプション

ypservの-Pオプション(バインドするポート番号を明示的に指定するやつ)を付けて起動したらNISが使えなくなった,と思ったらypservのtcp側だけが腐っていた.
# rpcinfo localhost | grep ypserv
100004 1 udp 0.0.0.0.128.0 ypserv superuser
100004 2 udp 0.0.0.0.128.0 ypserv superuser
100004 1 tcp 0.0.0.0.128.0 ypserv superuser
100004 2 tcp 0.0.0.0.128.0 ypserv superuser
# rpcinfo -T tcp localhost ypserv
rpcinfo: RPC: Remote system error - Connection refused
# rpcinfo -T udp localhost ypserv
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting
ソースコードを見ると明らかにダメダメだったのでパッチ.…を書いたんだが,書いた後でCURRENTではすでに修正されていることに気づいた(rev 1.31).しかも1年くらい前に.8.1のソースツリーのうちyp_main.cだけ1.31に差し替えてコンパイルし直したら解決したっぽいので,まあこれでいいかなー,という感じ.
でもせっかくだから書いたパッチも貼っておこう.
--- src/usr.sbin/ypserv/yp_main.c.orig 2010-06-14 11:09:06.000000000 +0900 +++ src/usr.sbin/ypserv/yp_main.c 2011-01-29 21:27:14.000000000 +0900 @@ -308,7 +308,7 @@ for (st = stlist; st->st_name != NULL; st++) { /* Do not bind the socket if the user didn't specify a port */ if (yp_port == 0) - break; + { sock = socket(AF_INET, st->st_type, 0); if (sock == -1) { @@ -329,26 +329,38 @@ exit(1); } errstr = NULL; - } + } - if ((_rpcfdtype == 0) || (_rpcfdtype == SOCK_DGRAM)) { - transp = svcudp_create(sock); + if ((_rpcfdtype == 0) || (_rpcfdtype == st->st_type)) { + if (st->st_type == SOCK_DGRAM) + transp = svcudp_create(sock); + else + transp = svctcp_create(sock, 0, 0); if (transp == NULL) { _msgout("cannot create udp service"); exit(1); } if (!_rpcpmstart) - proto = IPPROTO_UDP; + proto = (st->st_type == SOCK_DGRAM) + ? IPPROTO_UDP : IPPROTO_TCP; if (!svc_register(transp, YPPROG, YPOLDVERS, ypprog_1, proto)) { - _msgout("unable to register (YPPROG, YPOLDVERS, udp)"); + if ((asprintf(&errstr, "unable to register (YPPROG, YPOLDVERS, %s)", + st->st_name)) == -1) + err(1, "unexpected failure in asprintf()"); + _msgout(errstr); exit(1); } if (!svc_register(transp, YPPROG, YPVERS, ypprog_2, proto)) { - _msgout("unable to register (YPPROG, YPVERS, udp)"); + if ((asprintf(&errstr, "unable to register (YPPROG, YPVERS, %s)", + st->st_name)) == -1) + err(1, "unexpected failure in asprintf()"); + _msgout(errstr); exit(1); } + } } +#if 0 if ((_rpcfdtype == 0) || (_rpcfdtype == SOCK_STREAM)) { transp = svctcp_create(sock, 0, 0); if (transp == NULL) { @@ -366,6 +378,7 @@ exit(1); } } +#endif if (transp == (SVCXPRT *)NULL) { _msgout("could not create a handle");
2010-12-28
■[Patch][fink][ghostscript-esp] finkのghostscript-esp-7.07.1の64bit対応

64 bit onlyのfinkでghostscript-espパッケージをビルドしてインストールしたら動かなかったのでパッチ.
--- sw/fink/10.4/unstable/main/finkinfo/text/ghostscript-esp.info.orig 2009-11-15 23:15:09.000000000 +0900 +++ sw/fink/10.4/unstable/main/finkinfo/text/ghostscript-esp.info 2010-12-28 08:40:40.000000000 +0900 @@ -65,7 +65,7 @@ Source3ExtractDir: Resource Source4ExtractDir: Resource PatchFile: %n.patch -PatchFile-MD5: f0054b61269abeaa2152cd6200610b39 +PatchFile-MD5: b350b5775287513b26de3456f9925065 PatchScript: << # apply tagoh-san's patch series, required for NeverEmbed patch -p1 < ../ghostscript-7.07-bigposttable.patch --- sw/fink/10.4/unstable/main/finkinfo/text/ghostscript-esp.patch.orig 2007-10-10 06:15:48.000000000 +0900 +++ sw/fink/10.4/unstable/main/finkinfo/text/ghostscript-esp.patch 2010-12-28 08:40:11.000000000 +0900 @@ -769,3 +769,15 @@ + *) + ${show} "usage: ${0##*/} {add|remove}" ;; +esac +diff -u espgs-7.07.1-orig/src/gxobj.h espgs-7.07.1/src/gxobj.h +--- espgs-7.07.1-orig/src/gxobj.h 2003-08-20 00:32:25.000000000 +0900 ++++ espgs-7.07.1/src/gxobj.h 2010-12-28 08:31:46.000000000 +0900 +@@ -117,7 +117,7 @@ + #endif + #define obj_align_mask (obj_align_mod-1) + #define obj_align_round(siz)\ +- (uint)(((siz) + obj_align_mask) & -obj_align_mod) ++ (uintptr_t)(((siz) + obj_align_mask) & -obj_align_mod) + #define obj_size_round(siz)\ + obj_align_round((siz) + sizeof(obj_header_t)) +
ghostscriptのバージョンが古いとか,この手の対策はすでに誰かがやってそうな気がするとか,いろいろ思うところはあるけれど,この程度の問題ならその辺の事情を調べるよりパッチを書いた方が早い.
2008-06-09
■[Grass]世界で最初のGrassプログラム

GrassでHelloWorld(こことかこことか)繋がりで.
世界で最初のGrassプログラムはHelloworldでした*1.せっかくなので晒しておきます.
wwWwwvwwwwWWWwwWwwWWWWWWwwwwWwwvwwwWWwWWWWwvwwWWwWWWwvwwWWwWWWwWWWWwvw WWWWWWwwwWwwwwWWWWWWwwwwWwwwwwwWWWWWWWWWwwwWwwwwwwwWWWWWWWWWWWwWwwwwww WWWWWWWWWWWWWwWwwwwwwwwwwwwWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwWWWWWWWWWWWW WWWWWwWwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWwwwwwwwWwwwwwwwwwwwwwwwwwwWWWWWWW WWWWWWWWWWWWWWwWwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwww wwwwwWwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwWwwwwwwwwwwwwww wwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWW WWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwWWWWWWWWWWWWwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWW WWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWww WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWW WWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW WWWWWWWWWWWWWwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW WWwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwWWWWWWWWWWW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwWWWWWWWW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwww WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwww wwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwww wWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwww wwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwww wwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW WWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW WWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
某若手の会の飛び込みセッションで発表したときに,実装のデモのために作ったサンプルプログラムです*2.Grass発表の次の年の夜に再発表してたら速攻で写真撮られてtwitterに晒されたヤツです.
2085文字あります.それが今では738文字まで縮んだってんだから隔世の感がありますw
アナゴルとかでGrass使えるようにならないかなあ(ぉ
*1:作った本人が言うんだから間違いないwww
*2:ちなみに,Grassの最初のバージョンは"v"の代わりに"."を使っていました.このサンプルは現在のGrassに合わせてy/./v/してます."v"を導入したきっかけは若手の会でのどなたかの提案なんですが…どなたでしたっけ?acknowledgement書きますので名乗り出て頂ければ幸いです.
2008-01-07
■[Patch][Wine][VOCALOID] 初音ミクパッチ for Wine-0.9.52

CrossOverで初音ミクが動くらしいので,当然Wineでも動くはず,と思ってここ数日初音ミクを動かすためのWine環境をIntel Mac上に構築してたんですが,せっかく頑張ってもコントロールトラックが表示されないようでは面白くないのですよ.というわけでパッチ.
--- wine-0.9.52/dlls/winex11.drv/xrender.c.orig 2007-12-29 00:26:23.000000000 +0900 +++ wine-0.9.52/dlls/winex11.drv/xrender.c 2008-01-07 11:19:19.000000000 +0900 @@ -1522,6 +1522,7 @@ Picture dst_pict, src_pict; Pixmap xpm; DIBSECTION dib; + HBITMAP hbitmap = NULL; XImage *image; GC gc; XGCValues gcv; @@ -1569,8 +1570,36 @@ if (!devSrc->bitmap || GetObjectW( devSrc->bitmap->hbitmap, sizeof(dib), &dib ) != sizeof(dib)) { - FIXME("not a dibsection\n"); - return FALSE; + if (devSrc->bitmap && GetObjectW( devSrc->bitmap->hbitmap, sizeof(dib.dsBm), &dib.dsBm ) == sizeof(dib.dsBm)) + { + void *bits; + + /* FIXME: I don't know whether this way is correct or not. */ + TRACE("forcely convert bitmap to dib\n"); + dib.dsBmih.biSize = sizeof(BITMAPINFOHEADER); + dib.dsBmih.biWidth = dib.dsBm.bmWidth; + dib.dsBmih.biHeight = -dib.dsBm.bmHeight; + dib.dsBmih.biPlanes = dib.dsBm.bmPlanes; + dib.dsBmih.biBitCount = dib.dsBm.bmBitsPixel; + dib.dsBmih.biCompression = BI_RGB; + dib.dsBmih.biSizeImage = 0; + dib.dsBmih.biXPelsPerMeter = 0; + dib.dsBmih.biYPelsPerMeter = 0; + dib.dsBmih.biClrUsed = 0; + dib.dsBmih.biClrImportant = 0; + hbitmap = CreateDIBSection(NULL, (BITMAPINFO*)&dib.dsBmih, DIB_RGB_COLORS, &bits, NULL, 0); + if (!hbitmap) { + FIXME("Failed to convert bitmap to dib"); + return FALSE; + } + GetObjectW(hbitmap, sizeof(dib), &dib); + GetBitmapBits(devSrc->bitmap->hbitmap, dib.dsBmih.biSizeImage, bits); + } + else + { + FIXME("neighter a dibsection nor a bitmap\n"); + return FALSE; + } } if (xSrc < 0 || ySrc < 0 || widthSrc < 0 || heightSrc < 0 || xSrc + widthSrc > dib.dsBmih.biWidth @@ -1578,6 +1607,7 @@ { WARN("Invalid src coords: (%d,%d), size %dx%d\n", xSrc, ySrc, widthSrc, heightSrc); SetLastError(ERROR_INVALID_PARAMETER); + if (hbitmap) DeleteObject(hbitmap); return FALSE; } @@ -1586,6 +1616,7 @@ if(dib.dsBm.bmBitsPixel != 32) { FIXME("not a 32 bpp dibsection\n"); + if (hbitmap) DeleteObject(hbitmap); return FALSE; } dstbits = data = HeapAlloc(GetProcessHeap(), 0, heightSrc * widthSrc * 4); @@ -1702,6 +1733,7 @@ wine_tsx11_unlock(); HeapFree(GetProcessHeap(), 0, data); + if (hbitmap) DeleteObject(hbitmap); return TRUE; }
コントロールトラックが出ないのは,DDBのアルファブレンディングがWineにまだ実装されていないからのようです*1.このパッチはDDBを無理矢理DIBに変換してアルファブレンディングできるようにします.ただし,
- x11drvのレベルではDIBもDDBも内部表現はほとんど同じはずなのにCreateDIBSectionなんて呼んでるのはどうみても無駄です.きっと偉い人がもっとマシな実装をしてくれるに違いない.
- このパッチの汎用性は分かりません.とりあえずVOCALOID2 Editorには効く.
しかし,パラダイムの異なるモノを整然としたコードで書き下すWine開発チームは凄いと思います.
おごちゃん
ぶはっ。もう対応コードが!
言ってみるもんだなぁ。
新茶
このパッチは本家に送っているのですか?
0.9.53以降も当てる必要あるのでしょうか。。
uenoB
反応遅くて申し訳ありません.
すみません,パッチはまだ送ってないです.ちょっと時間が取れなくて…(git formatとかめんどすぎってのもある
53以降も普通に当たると思うので,当ててください.
MGdeisgner
Hello,I opened the data in wineHQ: http://appdb.winehq.org/objectManager.php?sClass=application&iId=7554
Please help to report back to wineHQ. Let’s the wine team pay attention to miku.
babasaki
VineでWINEをパッケージしている者ですが、なかなかWINE本家で取り込まれてないようなんで、これを WINE-1.0.1 とWINE-1.1.10 に当てたパッケージを作っています。(※現在テスト中なのでまだ非公開ですが)
半透明が出てなかなか快適です。ありがとうございます。
(ちなみにxrender.cがバージョン毎に微妙に違うのでそのままではパッチが当たりません。そこで手動でパッチを再作成しております、すみません)
2007-09-25
■ちょっと草植えときますね型言語 Grass

去年のネタですが.
Grass the grass-planting programming language
今年の情報科学若手の会の夜のセッション(a.k.a. 飲み会)で話題に上がったので,この機会に資料を整理して公開することにしました.
Grassは,昨年の若手の会に参加したとき,セッションの合間に企画・設計・実装し,2日目の飛び込みセッションでビールを飲みながら発表したプログラミング言語です.ネタに突っ走った見た目とは裏腹に,割とまともな文法と操作的意味論を持たせています…といってもSECD機械のもろパクりですがwwww.一応,Grassを作った当初の目的は形式的な言語仕様の記述に重点を置いた(変態)言語の作り方をデモすることだったので,言語自体はしっかり設計したつもりです.
ドキュメントは何となく英語で書きました.今は反省している.英語で書いたところで非日本語圏の人にはこんなネタ分かんねーよwwwwww
http://www11.atwiki.jp/s-irie/pages/20.html
ついでに Hello, world! も作りました(551文字)。
これは凄い!!Grassのページからリンクを張りました!
LL Futureでも紹介させて頂きたいと思います.たぶん.