トップページを多少変更しました。OPMLに対応。ついでにJ2のサポーターのRSSをチーム別に仕込んでみました。現在、はてなのRSSはなぜか取れないので、OPMLの中をコメントアウトしてあります。なんかではねられてるのかな。 川崎フロンターレだけ妙に多いです。理由は…あえて言うほどのことじゃありません(笑)。RSSは仕入れたらなるべく早く反映します。ただ、管理人(私)が定期的に内容をチェックするのは川崎のサイトだけです。その他は仮にチームを裏切ったとしても(…)場所を移すまでに時間がかかるかもしれません。 表示されていないチームもありますが、サイトがまだ見つかってないだけです。川崎以外のチームについてはさきほどざっと検索して出てきたサイトだけですので、ご容赦下さい。これからシーズンが進んで、だんだん対戦するごとに(というか勝つごとに?)増やしてこうかと思います。今はスカスカですが。 公式サイトのニュースをRSSに変換するスクリプトなんかも作っていかないといかんですな。 (追記) 2004-04-16 23:22 はてなのRSSが取れないのはタイムアウトでした。タイムアウトを3秒に設定して取りに行ってますが、だいたい10秒くらいはかかるようです。ローカルなキャッシュに入れるようにしてみました。
ウェブより古いネット情報検索システム『ゴーファー』、今も続く開発(hotwired.co.jp)だって。なつかしー。
一時期、ゴーファーはインターネットを技術に疎い一般の人々へと開放し、オンライン通信の新時代の幕を開けるかに思われた。そうなる可能性は十分にあったが、実際にはワールド・ワイド・ウェブ(WWW)が登場して、代わりにその役目を果たした。
私が初めてインターネットに触れたのは大学1年のときで、しばらくはメールとftp、telnet、rloginだけだった。メールもサーバでmhを使ったりしてたな。すぐにマシンが強化されてサーバでnemacs+mhという時代になったが。gopherを知ったのはだいぶ経ってから。IRCとかNetNewsを一瞬触ったりしつつ、そしてNCSA Mosaicでhttpがきて、netscapeをhomeに展開する開拓者のバイナリをみんなで使わしてもらう時代になり、そしてマシンにnetscapeがインストールされているのが普通な環境になり、そしてだいぶ略して、今に至るというわけで。これが、この10年のできごとだ(『北の国から』風)。まさに10年だ。 かように、私にとってはgopherの天下は短かかった。だいたい、gopherで日本語のページ(「ページ」と表現していたかどうかは覚えていない)を見たことがなかったような気がする。 しかしですね、WiredNewsに言いたいのは、gopherの話をするときはリンクもgopher://なものにしようよということだ。gopher://gopher.quux.org/1/(quux.org)みたいな。
改行を含んだ文字列の扱いが変わったみたい。 gcc-3.2.xでは
printf("test
this is a
TEST\n");
で問題なかったが、gcc-3.3とかgcc-3.4では
printf("test"
this is a
TEST\n");
に変換されて(最初の行に余計な**"**がついてしまうので文の意味を成さなくなる)しまう。余計なことを! と私は思うけども、Cの標準がそうなのかなぁ。よくわかんないけど、けっこう迷惑。
printf("test\n"
"this is a\n"
"TEST\n");
と書けと? (追記) 2004-04-15 23:42 gccというよりも、cppの段階で変換されてしまうのだ。
どうしてくれるんだ。ピクミン2(nintendo.co.jp)、今月末に発売ですよ。前作のときにGC買うか買わないかでけっこう悩んだ。結局シングルCDだけ買った(笑)。 GCを買わなかったのは当時の部屋で置く場所に困ったからだが、今回は幸か不幸かそれほど困難でもない。やばい。幸かもしれない。 (追記) 2004-04-15 22:44 本体(amazon.co.jp)が¥14,000、ゲーム(amazon.co.jp)が¥4,930かー。税込だろー? 注文するだろこれは。メモリカードが同梱されてないみたいなので¥2,000くらいでそのへんで買うとして…しめて2万か。やっすー! (追記) 2004-04-15 22:53 あー、Amazonで注文しちゃった。一括配送。
Apache HTTP Serverに、mod_ext_filter.soというのがある。まだexperimentalということでパッケージ化のときに収録していないことも多いだろう。ソースからmod_ext_filter.cをもってきて、apxs -c mod_ext_filter.c -o mod_ext_filter.so -sharedでコンパイル、apxs -i mod_ext_filter.soでインストールできる。
この拡張モジュールは何をするかというと、外部プログラムのフィルタを使えるのだ。sedもawkもperlも、なんでもアリだ(いいの?)。httpd.confでいろいろ設定すると何でもかますことができる。今のところはOutputFilterのみ。
これを見て思ったのは、むかしあったよなー、大阪弁フィルタ(yorosiku.net)、ということだ。これを噛ましてみようではないか。
LoadModule ext_filter_module modules/mod_ext_filter.so
<IfModule mod_ext_filter.c>
ExtFilterDefine osaka-text mode=output cmd="/some/path/to/osaka"
</IfModule>
で、.htaccessやブロック等で
<IfModule mod_ext_filter.c>
AddOutputFilter osaka-text .html .htm .php
</IfModule>
などのようにする。ApacheのAddOutputFilterというのはすでにあるフィルタに追加するように見えて上書きしてしまうようで、PHPやCGIやSSIなどをOutputFilterで設定して使っている場合は、AddOutputFilter PHP;osaka-text .phpなどといちいち書かなければならない(Fedora Core 1のはAddType application/x-httpd-php .phpとなっていてSetOutputFilterではない)。
で、VirtualHostを使って大阪弁フィルタをかましてみた(現在はやっておりません)。
くだらん。
experimentalということもあって、けっこうセキュリティ上の問題があるのかもしれないし、検索にosaka側がひっかかって見に来た人が激怒したらどうすんの、とかいろいろあるよね(笑)。
携帯電話でSuica、2005年度後半に JR東日本(itmedia.co.jp)。カードだけではICつけた甲斐がない、という。
JR東日本は4月13日、非接触型ICカード「Suica」の機能を搭載した携帯電話サービス「モバイルSuica」を、2005年度後半に開始すると発表した。
電車、買い物、脱カード型。そして次は何であるべきか。 ここは一発、Suicaで等々力のスタジアムに入れるようになって欲しいところだ。ピッ! でも前売りのほうが安かったりするわけだし、後援会の会員かどうかの情報(やっぱ割引のため)をSuicaごときに入れるのは抵抗がある。シーズンチケットの場合は定期みたくなるのかな。 定期のシステムはいいね。買い物Suicaはジュース定期やパン定期にもなります、みたいな。おれはたぶん、リカルデントガム定期にするけど。 ところで私のはいまだにペンギンSuicaに変身できない。メニューに交換が出てこないってことはすでにペンギンの機能は入ってるってことかな。窓口で聞いてみないといかんのだが、いつも並んでるので。
ブルボンのルマンドに限らず、お菓子というのはどうも果てしない。 マクドナルドを訴えるデブの気持ちがもう少しでわかってしまいそうだ。
Linux/IA32のmallocは一度に2GB弱まで。2GB「弱」というのは、2GBは取れないからだ。2GB制限の理由はずいぶん前にも見たことがあるこのへん(sse.co.jp)を参照のこと。これはファイルサイズの2GB制限と違って時代錯誤的なことではなく、現実に起きて納得の現象だ。そんな制限を承服するかどうかは考え方次第だ。 ではmallocではなくstaticな配列なら2GB以上取れるのか? 同じくらいのサイズまでしか取れないのです。
char mem[1024*1024*1024*2];
int main(int argc, char **argv){}
gcc曰く、「警告: 式の整数がオーバーフローしました」「配列 mem' の大きさが負です」…そうかintだから駄目なのか、と思ってunsignedにキャストすると正しい警告が出る。曰く、「配列 mem’ の大きさが大きすぎます」「`mem’ の領域サイズがわかりません」。
しかしgccが配列のサイズで文句を言うのは気に食わん!
1GBで配列を取ってコンパイルし、アセンブラコードを直して
.comm mem,1073741824,32
.section .note.GNU-stack,"",@progbits
↓
.comm mem,1073741824*2,32
.section .note.GNU-stack,"",@progbits
これでコンパイル、リンクは成功する。で、できたバイナリを実行するとsegmentation fault。デバッガからも起動できない…そんなのはあたりまえだ(笑)。 じゃmmap(2)は? /dev/zeroへのmmap(2)を使えばメモリを確保できる。やはりこれも2GB制限があるのだ。MAP_FAILEDが返ってきて、Cannot allocate memoryと言われる。 スタックの場合は実はアセンブラコードを直すと2GBを越えられる。どっかでオーバーフローしてマイナスになっちゃってるのかもしれないし、たぶん動作はしないだろう。ただ、確保する(したつもり)だけでは落ちない。 …我ながら意味のないことばかりやってるな。
# python -c 'from distutils.sysconfig import *;print get_python_inc()'
# python -c 'from distutils.sysconfig import *;print get_python_lib()'
まあ、そんだけなんだけど、書いとかないと覚えてらんないでしょ。
swigメモ。いつか問題が解決するだろうと信じている。 ライブラリって、swigでPythonからも使えるようにするじゃん。このとき、小さいライブラリだと、「ライブラリの名前=モジュールの名前=唯一の構造体の名前」っていうことも珍しくない。例えば"name"だとすると、C側の関数名もname_func1()にするでしょ。こうしたときに、ややこしいから整理すると、
typedef struct name{
int member;
}name;
name *name_init(int id);
void name_exit(name *arg);
int name_func1(name *arg);
int name_func2(name *arg, int arg2);
がname.hで定義されているとする。これをswigのソースname.iで
// swig -python name.i
// gcc -c name_wrap.c -I/usr/include/python2.2 -I.
// gcc -shared name_wrap.o -lname -L. -o _name.so
%module name
%{
#include "name.h"
%}
%include "name.h"
とするとする。使っている側のココロとしては、
if a=name.init(100):
a.func1()
a.func2(1)
だと思う。しかし実際できあがってみると、
if a=name.name_init(100):
name.name_func1(a)
name.name_func2(a, 1)
という悲しい状況になる。これを回避するための方法は%renameを使う方法である。name.iで
%rename(init) name_init;
%rename(func1) name_func1;
などとしておくと、
if a=name.init(100):
name.func1(a)
name.func2(a, 1)
まではとりあえずあっさりスッキリシャッキリするわけだ。しかしaというオブジェクト、おまえはどういうつもりなのか。C struct以上の機能はないのか。そこで、name.iにこう書き加える(name構造体がPythonのクラスになったものにメンバを追加する)。