トップ 最新 追記

じじぃの日記、ツッコミ可

Twitter: @jijixi_org
Xbox Live: jijixi

初心者が書いた OCaml 入門
Spotlight tips サイト内リンク集
1970|01|02|
2003|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|11|
2011|05|
2012|01|

2004-11-01 欝追い撃ち [長年日記]

% [雑談] 魂の叫び

今さらそりゃないよ〜〜。誰が悪いってんでもないんだろうけど…欝入るなあ……


2004-11-02 一度緩んだテンションを張り直すのは難しい [長年日記]

% [雑談][WideStudio] しつこく宣伝

何度も宣伝している WideStudio徹底ガイドブックですが、Amazon.co.jp でも買えるようになってるようですので、是非。

% [PC] 5.3-RELEASE to 5.3-RC2 ???

なんだこりゃ?結局 vim やその他の問題が解決できないんで、念のためもう一度 RELENG_5_3 で cvsup して buildworld したんだが、前回 uname -r が 5.3-RELEASE だったのに、今回 5.3-RC2 になってるぞ。

・・・もしかして、アナウンス出る前にアップグレードしたのは勇み足だったかな。でも、RELEASE で問題が直らないなら諦めるしかないかと思ってたが、今が RC なら、RELEASE までに直る可能性も無いとは言えない…かも。そうだと良いなあ……マジで。


2004-11-03 なんかこう・・・アレだな [長年日記]

% [PC] 5.3R → 5.3RC2 の謎

なんか、5.3RELEASE のタグ打った後にバグが発覚して、RC1 に差し戻されたらしいね。んで、その後 RC2 に上がったと。

どこにどういうバグが在ったかってのまでは、めんどくさくて調べてないけど、例の vim の問題とかはそのせいなんだろうなあ……多分。

まあ、ともあれ、バグ在りのまま放置すると不便なんで、思い切って 5.2.1R にバージョンダウンした。/etc の中身が 5.3 用に mergemaster したまんまなのが微妙だけど、今のところ特に問題は出ていない模様。もちろん vim 他の不具合の方は直ってるので安心。いくつか、またビルドし直さなきゃならない port もあるが……ちまちまやろう。


2004-11-04 だめだ、眠い…… [長年日記]

% [雑談] 敢えてぼかし気味にしたつぶやき

んー…今までのものは全員の名前が出てたのに、なぜ今回は一人分しか名前が出てないんだ?なんかこう…いろいろと微妙だろ、アレは。

% [雑談] 人の心なんて、そんなもの

ひと頃よりアクセス数が減ったようで、照れ屋のわしとしては、ほっと胸をなでおろしていたりしなくもないわけだが、なんだかちょっとさみしいなあ…とか思ってしまうのもまた事実。ま、そんなもんですわな(笑

% [雑談] 可逆圧縮、非可逆圧縮

アルゴリズムの話とかじゃありませんで、整理整頓の話。

スペースを確保するために整理整頓するというのは、結局のところ物品が占めるスペースを圧縮することに他ならないと思うわけです。そして、それには可逆圧縮と非可逆圧縮があるだろうと。

非可逆圧縮はわりと簡単だ。とにかく何も考えずに物をどっかに詰め込めば良い。それこそ、いらない物をガンガン捨ててしまって良いわけだ。

でも、本当の意味での整理整頓をするんであれば、可逆圧縮でなければいけない。つまり、整理した物が後で必要になったときに、ある程度容易に取り出せなくてはいけない。少なくとも、わしはそう思う。その場合大事なのは、それぞれの物へのアクセス性であって、なるべく多くの物にアクセスしやすくなっていて欲しいわけだ。単純なモデルで書けばこうだ…

■■■■   ■■■■
■ □□   □□ ■
■□       □■
■□ □□□□□ □■
■□       □■
■□ □□□□□ □■
■□       □■
■□ □□□□□ □■
■□       □■
■ □□□□□□□ ■
■■■■■■■■■■■

% ■ が壁で、□ が物だと思ってくれたまい。なんか倉庫番みたいだが。まあ、倉庫番のセオリーと同じと言えば同じだな。全ての物に対してアクセスしやすいように通路を確保しているわけ。

ところが、世の中にはこれを『整頓されている状態』だと思えない人というのがいる。経験上、女性に多いような気がしてるんだが、ともかく、そういう人は上図のような状態を…

■■■■   ■■■■
■□□       ■
■□□       ■
■□□       ■
■□□       ■
■□□       ■
■□□□      ■
■□□□□□□□□□■
■□□□□□□□□□■
■□□□□□□□□□■
■■■■■■■■■■■

% 例えばこんな風にしたがるわけだ。たしかに『スペース』に関して言えば、この方が広くとれて気持ちが良いのはわかる…わかるが、やっぱりわしとしてはノーサンキューなわけだ。左下の角っこにあるものが必要になったときなんて、考えたくもないわいな(苦笑

ちなみに、滅多に使わない物を奥に、よく使う物は手前に…って手法もあるが、自分の部屋ならまだしも、そうじゃない場合には、そんなのほとんど不可能だ。コンピュータ上のファイルみたいにタイムスタンプが付いてるわけじゃないしね。

んで、結局何が言いたいのかと言うと……何が言いたいんだろ?まあ、なんつーか、こういうようなことを考えながらやってると、退屈な作業もなかなか楽しいもんだなーとか、そういうことですわ。たぶん…(苦笑


2004-11-05 男心は複雑なんです(意味不明) [長年日記]

% [雑談] 良かった…んだとは思うが

お金が絡まない方が気が楽ではあったよなぁ……などと思ったりもしてしまう小心者のわし。まあ、贅沢と安定を捨てて自由を採った人間ですからね…

もう少しぶっちゃけて言うと、ガキなんだよね、精神構造が。いわゆるピーターパン症候群のようなもんでして。んで、分別も付いてるくせに敢えてそういう方向性を選んでしまうのが困ったところなんだろうと思ったりもしたりしなかったり。何言ってんだろ、わし(苦笑

% [雑談] 本屋巡り

初めて本を出した人は必ずやるという伝説の (ほんとかよ) 本屋巡りを敢行してまいりました。ヨドバに言ったらなんと平積み (と言っても5冊だけど) されてて、ちょっと嬉しくなったので、お礼に無駄遣いしてあげましたよ。つっても、興味はあるけど買う予定が無かったゲームを、急遽買うことにしただけだけどもな(苦笑

いや、他にも無駄遣い候補としては、リナザウ SL-750 の展示処分品 (50,000 円ぽっきり) とか、危険な誘いもあったんだが、さすがにそこはぐっとガマンしましたよ。

しかし、次のリナザウはハードディスク内蔵かよ…まあ、予想はしてたけど、バッテリーとかはだいじょぶなんかねえ……


2004-11-08 どないせっちゅーねん [長年日記]

% [PC] 再度 5.3RELEASE

やれやれ、やっとリリースか……って直ってないじゃん!!

……本気でもうどうしたものやら(泣)。いや、とりあえずは 5.2.1R に戻すけど……これからどうしよう。原因が判れば良いんだけど、そこまで調べる気力が出ないなあ……

% [PC] 5.2.1R に戻す前に…

とりあえず、vim の問題については wchar 周りが怪しいので、他は 5.3R のままで /lib/libc.so.5 だけを 5.2.1R のものに替えてみた。

ちなみに、この作業はシングルユーザモードで PATH に /rescue を追加してから行なった方がよろしいですよ。そうしないとわりと泣けますからね。

で、結果として、これで vim の不具合 (特定の文字が化ける) は直ります。少なくとも、libc に問題があるのは間違い無さそう。ただ、ssh 経由で Linux の Eclipse を動かすと落ちる問題は直らないので、問題はそれだけではないようだ。

Eclipse の問題は、X 絡みの問題で落ちてるみたいなんだが、X のエラーなんて現実の問題箇所がどこなのかさっぱりわからんしなあ。X のライブラリそのものじゃなく、ssh が悪いって可能性もあるし。

% [PC] vim と libc

うーん、5.2.1R と 5.3R の /usr/src/lib/libc で diff 採ってみたけど……わかんないや。でも、wide character 関係に結構修正が入ってるのは確かだし、それが vim の挙動に影響してるのは間違いなさそうだけど。

ただ、一概に libc だけが悪いとは言えないかもなあ。どちらかと言うと、libc の wchar 絡みの挙動が微妙に変わって、そのせいで今まで顕在化していなかった vim の (あるいは依存するライブラリの) バグが表面化したって可能性も。

C 言語って、暗黙のキャストのおかげで、『間違ってても、何となく動いてしまう』からなあ。んで、いざ問題が表面化したときに原因を探るのが一苦労だったりするわけで。

……さて、どうしたもんか。


2004-11-10 もうスタンドはいいよ、と言いたい(謎 [長年日記]

% [本日のリンク元] google 検索 (ぷよぷよ widestudio)

・・・きわめて謎。WideStudio で作ったぶよぶよがやりたいってことですか?いかんいかん、ちょっと『よし作るか』って思ってしまった。そんな暇は無いはずだ。たぶん。

うーん、ギャラクシアンもどきなら作ってみようかと思ったこともあったりするんだがなあ。でも敵のアルゴリズム作るのがめんどくさそうなんで止めたけど(軟弱)。xgalaga みたいなショボっちい (失礼かな) 動きなら、それほど難しそうでもないけど、本物のギャラクシアンみたいな味のある動きは、なかなか難しいと思ったりするぞ。

% [雑談] 長年日記っておもしろい

うん、おもしろい。去年の今ごろって、遊んでばっかりいたんだなぁ(苦笑

たしかに、去年の夏ころから今年の春ころまで、あんまり仕事無かったんだよ。今年はそれなりに忙しそうだけど、年末のスパロボはプレイできるかなあ……いや、無理にでもするけどね、きっと(笑

% [雑談] 天敵の必要性

そろそろ人類にとっての天敵が必要なんじゃないかと思う。寄生獣でも、ヘドロから生まれた怪獣でも、トカゲ面の宇宙人でも、とにかく人類全体を脅かすほどの脅威が現れないものか。

人間ってやつは、どうして『敵』がいないと生きていけないのか。人間は敵と戦うことによって繁栄してきた。他の獣達と戦い、自然と戦い、勝ち続け、戦う相手がいなくなったら今度は仲間同士で戦うようになった。食物連鎖の掟はもはや人間を脅かさない。

今考えてみると、実は冷戦時代の方が平和だったんじゃないかと思える。一人生き残ったウサの国は結局『敵』を求めて拳を振り上げる。もうそんな必要は無いはずなのに。

もうウサ君を止める体力のある国はどこにも無い。徒党を組んで対抗しようにも、そもそもその組むべき相手と仲が悪い。

そうしてウサ君は好きなように『敵』を捏造し続ける。9.11 にしたってさすがに自作自演とまでは言わないが、あれは『防げなかった』んではなくて『防がなかった』んだろうさ。その方が『敵』を作るのに都合が良いからね。

人間は『敵と戦う』という本能を仮想的に満たす方法をいくつも発明してきた。スポーツ、格闘技、その他もろもろ。極端な話をすれば、資本主義というものもそうだと言えるかもしれない。でも結局満たされずに、もっと直接的な行為で満足しようとしている。

人間は『敵と戦う』ことでアイデンティティを保っている。敵とは何も実際に存在するものである必要はない。例えば何らかの目標に向かって努力する…それは怠けたいという自分の心と戦うことだと言える。そして、『戦う』ことの、その一番短絡的な方法が暴力…戦争なんだろう。

……そんなことを考える、今日この頃。人間てのはそういうもんだから、本当の意味での平和が訪れることは無いんでしょう。どこぞの神様がご用意くださる楽園とやらは、争いの無い世界なんだそうだが、そこに住む者たちっていうのは、もうそれは『人間』ではないんだろうな。そりゃそうか、終末戦争で『人間』は滅びて、『神の子ら』が生き残るんだそうだから。ん?滅びるのは悪しき者だけだって?うん、だからそれが『人間』でしょ?*1

*1 別に特定の宗教を貶めようとしているわけではありませんので、あしからず


2004-11-11 OpenOffice.org のエキスパートになってしまいそうだ [長年日記]

% [雑談] 全米シェア第3位!最後の大物ゲートウェイがついに日本上陸!

ツクモのメールニュースに書かれた文句である。まるで『初めて』のことのような言い様に、苦笑を隠せないわしであった。じゃあ、今わしの足元に鎮座まします牛マーク入りの Pentium2/400MHz なマシンは一体何なのかと(笑

% [雑談] 小改造中

つか、ただプラグインを有効にしてみたりしてるだけだけど。

% [雑談] もしかしたら関連するかもしれないページ

random_google.rb というプラグイン。ほんとは何らかの形態素解析ライブラリを通してキーワードを拾わせるものみたいだが、あえてそれを使わないデフォルトの動作をさせてます。なので、『もしかしたら』も何も、『ほとんど関連しない』ページを検索されることでしょう(笑

ま、それが楽しいってことで。

% [雑談] あれ…思ったより多い……

まあ、あんまり裕福じゃないんで、多くもらえるに越したことないんだけど……良いのかなあ、これで。そういや、この前つぶやいた件はいつの間にか直ってたなあ。

・・・全然わけわかんないよね(苦笑)。良いのよ、わしの日記なんだから、わしさえわかれば。

本日のツッコミ(全2件) [ツッコミを入れる]

% ああああ [誰か日本ゲートウェイのカスタマーセンターの電話番号教えてつながらへん(T_T)]

% jijixi [だからって、こんなところでそれを訴えられてもなあ(苦笑 とりあえず、この辺↓じゃダメ?ダメなら、あとは知らんですよ。..]


2004-11-12 一言で…ってのは案外難しいものだ [長年日記]

% [雑談] 性戦説

さすが umz 氏。モノが違う。わしがこの前長々と書いたことを、すでにたった一言で言い表わしていた。感服。

% [PC] kterm と uim-xim での検索から referer が付くが…

わしは kterm で uim-xim を使えるようにする方法は知りません。って言うか、もう kterm にこだわる必要なんて無いんじゃないかと思うんだけど、どうなんですか。mlterm 使っておきゃあオーケーでしょ。FreeBSD なら ja-aterm も結構おすすめだけど (Debian では XIM パッチがあたってないからイマイチ)。

% [PC][FreeBSD] 5.3R の不具合、その後

結局どうにもならんので、メインマシンの環境は 5.2.1R-p11 に戻してあるんだけど、もしかしてもしかするとこのマシンが吐き出すバイナリが腐ってるのかも…ってことで、iso イメージをゲットして VPC にインストールして試してみた。…結果はやっぱり同じ。

ちなみに現在確認している不具合は、

・vim で特定の文字の表示が化ける
  どうもカラム数を取得する部分がおかしいんじゃないかと思うんだが、
  vim のソースでかすぎてちょっとやそっとじゃ追い切れない。
・ssh でログインしたリモートマシン上で Eclipse を動かすと落ちる
  BadWindow とかなんとかの X のエラーが出て死ぬ。
  でも、X のバージョンが変わったわけじゃないし、メインマシンでは XFree86 4.4.0 で
  VPC では (新規インストールしたんで) X.org 6.7.0 なのに症状は同じだしってことで
  X の問題というより ssh の問題である可能性が高いような気も…
  ほんとは ssh を通さない方法でもテストできれば良いんだが、
  設定すんのがめんどい……

% …の二つ。どちらもわしの用途的にはわりと致命的でして。やっぱしばらく 5.2.1 のまま様子見かぁ。

不具合報告くらいしておいた方が良いのかもねしれないが、どっちも問題の箇所が特定できてないし……誰かが見付けてくれるのを待とう(軟弱)。

ssh はともかく、vim のソースは一度ちゃんと読みたいと思ってはいたから、良い機会だと思うんだが、今はどうにも気力が……


2004-11-15 雪降らねえなあ… [長年日記]

% [PC] そろそろ PRIME にも飽きてきた…

…と言うか、予測変換が悪い方に働いて、知らないうちに誤植ってるのがウザくなってきた(苦笑

それに uim が gtk2 を使ってるせいで、負荷が高いとき (と言うかメモリが少ないとき) に鬼のように重くなるし、ってことで、やっぱ VJE に戻すことにした。ああ、安心……

結局、いろいろ渡り歩いても、最終的には VJE に戻ってきてしまうなあ。window manager なんかも、結局 WindowMaker に戻ってくるし、根深く染みついたものの呪縛からは逃れられないんでしょうか(笑

% [PC] いまだに cc*pp 問題

これ以上検索結果にノイズを混ぜても悪いから伏せ字にしてます(苦笑

新バージョンが出た直後にこれ関係の referer が増えてるのを考えると、やっぱり今年のバージョンでも同じ問題が起こってるってことなんでしょうかねえ。

% [雑談] 蒼穹のファフナー

他の地域はどうだか知らんが、わしのとこでは月曜の深夜二時半とかにやっている。んで、最近月曜日は夜更かし OK な状況になったんで、何回か見てるんだが……話の内容とかは、ほっちゃらかして (つーか今から見てもさっぱり意味不明だし) 主題歌にずっぽりハマってる気配。

どんだけハマってるかと言うと、この曲が入ったアルバムがもうすぐ出るって知って、今まさに Buy Now しちゃったくらいに(爆

一曲のためにアルバム買うなよ(苦笑)。でも、どうしてもシングルって不経済な気がしてダメなんだよなあ……貧乏性(?)

まあ、一曲のためとは言っても、同じアーティストが歌ってる曲なら、それほど損するもんでもないでしょうよ。さすがにコンピレーションアルバムみたいなのを、一曲のために買ったりはしないけどね。いくらなんでも、それだと費用対効果が悪すぎる。と言うかバクチすぎる(苦笑


2004-11-16 雪降ってるなあ…… [長年日記]

% [雑談] さ、寒い…そして眠い

いきなり冷え込むし、雪はもっさもっさ降ってるし、何かといきなりすぎません?(苦笑

貧弱自律神経を持つわしは、この変化に付いていけずに、大変調子悪いデス。眠い……寝ちゃダメだ、寝たら死ぬぞ……ぐぅ。

うう、いかんいかん。いやね、ストーブ点ければ良いんだけどさ、その前にその周りを片付けなくちゃいけなくて、めん…めんど…い……ぐぅ。

% [Java][雑談] やればやるほど、わけがわからなくなる

要するに、UML (Unified Modeling Language) が (主に Java とセットで) 流行ってるってのは、UML が素晴らしいからではなくて、そんなもんでも無いと Java のクラス構造を設計・把握するのが不可能だからなんじゃないかと思ったりした。複雑すぎる(泣

なんだかもう、頭がパンクしそうです。


2004-11-17 眠いよぅ (いつものことだが) [長年日記]

% [Java] 変数の宣言

くそ、こんな書き方ができるんなら先に言ってくれよ〜

private static final int
   FLAG_VALID = 1,
   FLAG_OPAQUE = 1 << 1,
   FLAG_VISIBLE = 1 << 2,
   FLAG_FOCUSABLE = 1 << 3,
   FLAG_ENABLED = 1 << 4,
   FLAG_FOCUS_TRAVERSABLE = 1 << 5;

% 一生懸命毎回『private static final int』の部分を書いてた (つーてもコピペだが) わしって一体……

% [game] Another Century's Episode

最近、ゲームネタが寂しいので、無理矢理にぎやかしてみる。

で、このゲーム。通称『ACE』。バンプレストのスパロボ系版権パワーと、3D ロボシューの老舗フロム・ソフトウェアが組んだ、とんでもない作品。何がとんでもないって、ロボットのサイズがきっちり再現されてるところ。

ヘビーメタルと戦うオーラバトラーの写真とか見ると、えらいことになってます(笑)。αアジールとかも出るらしいので、そんなんなったらさらにとんでもないことに。うひぃ。

バンプレ側のオリジナル機体は量産型ゲシュペンストMkII。ジェットマグナムとか使えますか。でも、どうせなら量産型じゃない方でスラッシュリッパーとか使いたかったぞ。って言うか、ヒュッケバインMkII でブラックホールキャノン撃たせろ。

フロム側のオリジナル機体は名前忘れたけど、足の部分がブースターの固まりになってて、妙にカッコイイ奴。木星圏のモビルスーツですか?(クロスボーンガンダムネタ)

ともかく、買うでしょう。最近はこの手の忙しいゲームはツライんだけど、レイズナーで V-MAX 使うためだけでも買う価値あるだろ(爆

% [game] スパロボ GC & OG2

どうでも良いけど、Flash Player が無いとまともに見れないサイトはやめて欲しいと思います。せめてスキップできるようにしろよな。

んで、12/16 発売予定の GC 版スパロボ。もちろん買います。個人的には久々にエルガイムが復活してるのがポイント。ネイのオージェにシャイニングフィンガーを5回連続で切り払われた苦い記憶も、今となっては良い思い出です(ほんとか?)。

でも、わしとしては、GC 版よりも GBA 版 OriginalGeneration2 が早く出て欲しいんですが…ほんとはこっちの方が早く出るはずだったのに、いつの間にか延びてるし〜

それにしても、第二次αの機体がごっそり入ってきてるのがどうなのよ…って感じなんですが。リストには載ってないけど、イラストにはダイゼンガーらしきものも。しかし、ゲストはいつになったら出るんだよ。早くゼブっち出してくれ〜

まあ、そこら辺はガマンするとしても、スレードゲルミルが出るのはいくらなんでも無茶じゃないのか?暴れるドリルナックル再び!?


2004-11-18 物欲無限大 [長年日記]

% [game] 薄ぺらちっこい PS2 が欲しいなあ…

PS One が出たときも心惹かれたけど、そのときはすでにプレステが現役を退きつつあったから手を出さなかった。でも PS2 はまだ現役じゃん?

PSP とかはとりあえずどうでも良いから、まずは PS Two を……って言うか、その前に Nintendo DS だよなあ(爆

PSP はスパロボの新作が出たら買うでしょう(笑


2004-11-19 いたちごっこ [長年日記]

% [雑談] referer が付くからますますスコアが上がるわけで…

芋づる式に cc*pp の検索結果が増えていきます。有用な情報なんて別に無いのに……

かと言って、『本日のリンク元』を隠しちゃうと、おもしろおかしい検索結果を楽しむことができなくなるのでもったいないんだよな。まあ良いや、cc*pp で困ってるみなさん、あきらめてください(爆

% [雑談] 帯広名物(?)スイートポテト

んまかったっす。Zap 師ごちそうさん。ほんで、本来これをもらうはずだった某君、風邪ひいてくれてありがとう(爆

それにしても『名物に美味いもの無し』は帯広には当てはまりませんな。他にも六花亭とか豚丼とか。それに引き換え、我が街の有名無実っぷりはどうか(苦笑


2004-11-20 人間にとって二進数は馴染まないということなのか [長年日記]

% [雑談] 今日の読書『センス・オブ・プログラミング!

まあ、内容的には今更な部分がほとんどなんだけど、前橋さんのファンなんでとりあえずゲットってことで。

とりあえず、P61 の図 2-6 の『11』の絵を見て地味に笑う。この形は普通の人間には無理です。アノ漫画の小指がピクピクしながら一瞬だけ成功したときのシーンが頭に浮かびましたよ(笑

% [PC] mlterm がバージョンアップ

ports が 2.9.0 に上がってました。そしたらなんと uim サポートが入っていてびっくり。要するに、『端末自体が』直接 uim のライブラリを利用して日本語入力をしてくれます。

変換ウィンドウも、端末が描画してくれるので、あの重たい gtk2 な uim-candwin-gtk も不要だし、もちろん uim-xim も不要。う、uim-xim & prime に見切りを付けたばっかりだけど、ちょっとまた心惹かれるものが……

ただまあ、prime 自体 (と言うか Ruby が…だけど) がメモリ馬鹿喰いなのは変わりないので、uim-xim を使うより『いくらかマシ』って程度ではあるんだよな。mlterm 自体のメモリ消費量も増えるので、実質的な違いは無いのかもしれない。

やっぱ、prime だけで 20MB くらいは持ってかれちゃうから、わしのようにメモリが足りなくてピーピー言ってるような輩は、prime なんて使っちゃいけないのかも。

同じ uim でも skk や Anthy ならとてもすっきりと動きます。でも、それだったら vje で良いじゃんって話になっちゃうしなあ(苦笑

実際のところ、vje はサーバとクライアントを合わせても、数 MB 程度しかメモリを使わないので、大変軽いのです。

% [雑談] 『数…』ってどれくらい?

ところで、みなさん (誰?) は『数分』だとか『数件』だとかって聞くと、どんな数を思い浮かべますか?辞書なんかを引くと『二・三』程度とするものと『五・六』程度とするものが在ったりしますね。

一般的には『二・三』と考える人が多いように思いますが、わしの場合は、子供の頃に『五・六』だと教え込まれたせいか、そっちの方が頭に浮かびます。

と言うことで、わしが『数…』という表現を使った場合は、ほぼ間違いなく『五・六』くらいの意味です。なので、上に書いた『数 MB』は『5 〜 6MB』くらいを意味しています。まあ、どうでも良いっちゃぁどうでも良いこってすが(笑

% [FreeBSD] VJE と compat3x

実は現在、japanese/vje30 は misc/compat3x に依存しているんだが、compat3x が FORBIDDEN なのでインストールできず、よって vje30 も (libc.so.3 が存在していなければ) インストールできない状況だったりする。

わしのマシンには compat3x が FORBIDDEN になる前にインストールしたものが残っているので、何ともないんだが、かと言って、セキュリティホールのあるライブラリを残しておくのもいかがなものか…と思って、compat3x は消す方向で考えてみた。

幸い FreeBSD5 には libmap.conf というありがたい仕組みがあるので、これを利用して、libc.so.3 を libc.so.5 にマッピングして vje を動かしてみるテスト中。しばらくこのまま運用して、問題が無いようなら compat3x は消してしまおう。vje 以外では使ってないしね。

ちなみに、libxpg4.so.2 をリンクしているものもあるので、こいつは libxpg4.so.3 にマッピング。あとは問題無さそう。


2004-11-21 VJE の動作確認のためにも、積極的に更新しよう (本末転倒気味) [長年日記]

% [雑談] 貧弱ストマック

三連敗。……って、わけわからんよな。まあ、要するに、中華を腹一杯食ったという状況では、三回連続で腹を下しましたと、そういうことなんですが(苦笑

…いや、だから何なんだって言われても困るんですが。

% [雑談] I/O [アイ・オー]

届いたので、さっそく 11 曲目 (Shangri-La) を聴く。ぐあぁ、なんだろなあ、この無駄なかっこ良さは、まったくもう。

他の曲はしばらく聞き込んでみないとわからんが、とにかく買って損はしなかったと思われる。

% [雑談] FILO と LIFO

例の『センス・オブ・プログラミング!』を読んでたら、スタックが『LIFO』だと書いてあって「えっ!? FILO じゃなく?」と思って調べてみた。……なんかどっちでも良いみたいだね。

とんでもない勘違いして憶えてたのかと思って、焦っちゃったよ(苦笑

……って、よく考えたら、これって当たり前だな(笑


2004-11-22 くじけるな子供たち [長年日記]

% [雑談] HAPPY TREE FRIENDS (リンク先は非公式ファンサイト)

某氏に教えられたサイトだが……ひどすぎる!!……良い意味で(爆

パッと見、子供向けだけど、とてもじゃないが子供には見せられませんね(笑)。まあ、あーゆー危険行為をするとヒドイ目に遭うんだよっていう、戒めにはなるのかもしれないが(苦笑

いかにもイギリスっぽい (イギリスの作品かどうかは知らんが) ブラックユーモアがたっぷりです。…ひどすぎるけど(笑)。間の取り方とかが素晴らしい。…ひどすぎるけど(爆


2004-11-24 このところ雑談ばっかりだ [長年日記]

% [雑談] AWD (AWT じゃありません)

この前、スバルの R2 のカタログを見てたら AWD って単語が出てきてびっくり。昔のホンダじゃあるまいし、まさか All Wheel Drive のことじゃないんだろ?と思って調べてみたら……その通りだったので、二度びっくり。なんで今さら定着した用語を読み替える?

もしかしてはやってるのかと思って『AWD』でグーグってみたら、こんなのもあった。

実は6輪車を作る予定があるとかってんなら笑うけどな…

% [雑談][PC] いまだに cc*pp 関係の referer がガンガン付く

なんだかなー。無限ループをやらかすようなものを作ってるシマソテックが悪いのか、無限ループを引き起こすようなアプリをインストールしてるユーザが悪いのか、どっちにせよ不毛だなあ。

たぶん、スタートアップその他の OS 起動時に自動で動くようなアプリが cc*pp が動き出すよりも先に通信をしてしまうような状況で、件の問題が出るような気がしてるんだが……スタートアップはともかく、システムの起動項目なんかは、普通のユーザには制御できんよなあ。しかもそういうのは大抵、何かをインストールしたときに一緒に『知らないうちに』インストールされてたりするから。

ちなみにシステムの起動項目を有効にしたり無効にしたり…ってのは、レジストリをいじるとできるんだが……たしかそれ用のツールもあったような気もする。なんつー名前だったかな。『ファイル名を指定して実行』とかでコマンド名だけで起動できるんで、たぶんシステムディレクトリのどっかにあると思うんだけど……


2004-11-25 雪降らないなあ…タイヤばっか減ってかなわんぞ [長年日記]

% [まんが] タメ息ついてる親を見つけたら…

「スタンドからたたき出してちょうだい!」……ぜってぇ本気だよな、コレ(笑)。でもまあ、わかるよ。アレはほんとにテンション下がるし。つーか、溜息どころか「あ〜あ」とか声に出されたら帰りたくなるよな(苦笑

さて、三橋の体幹が鍛えられて、全力投球のコントロールも計算できるようになったんでしょうかね。そうすっと、さらに投球の幅が広がるなあ。ただ、110km/h 程度だと、どれほど効果があるかは微妙な気はするけど。

カーブとかのスピードが 80〜90 くらいだとしたら、ストレートで 120 くらい出ると良い武器になりそう。ただ、中途半端に速い球ってかえって打ち頃になっちゃったりするから難しいねえ。元オリックスの星野みたく、ストレートで 130 カーブで 90 とかってレベルになるとスゴイんだけど。

来月は、ちゃんと試合始まるのかなあ。なんか顔合わせて終わりって気がしないでもないんだが(苦笑

実は四つ目の変化球がお目見えするかどうかも気になるところ。一巻の最初に投げてるときの握りがどうにも不自然に見えるんだが (ちゃんと指が掛かってない) あれが (絵が下手ってんじゃなくて) わざとなんだとしたら、やっぱナックルとかムービングボールの類なのかなあ。ちゃんとした握りって知らないけど、カーブ、シュート、スライダーのどれもあんな握り方じゃないよね、たぶん。

% [まんが] おとなは!まったくおとなは!!

ランボルギーニと呼ばれて驚きも否定もしないってことは、やっぱみうらちゃんの名前の由来はそれだったんだね。どっかの国では女の子にこの名前を付けるのがはやったことがあるみたいだが、日本人だと名字みたいだから微妙だよな。

あっちの方の車って、やたら女性名が付けられてるのが多いせいか、ミウラも元々女の子の名前なのかと思ってたけど、調べてみたら本来は『暴れ牛』らしいな。……ある意味ぴったりな名前か?(爆

% [雑談] まみれる

情報は久々に Matzにっきより。

わしはまみれたいなあ。って言うか、Matz さん「猫は気まぐれだしなあ」とか言ってるようじゃダメっすよ。『気まぐれだから』こそ、めんこいんじゃないすか猫は。

犬はねえ、ベタベタくっついてくるのがウザい。だから、猫は猫でも、あんまり人懐っこいのは微妙だな。普段はそっけないのに、たま〜にさりげなく甘えてくるのがたまらんのですよ。

ちなみに、わしは人間の女性に対する好みも、こういう方向性ですが、それが何か?(笑

% [雑談] 携帯は!まったく携帯は!!

携帯電話で文字打ってるとキレそうになりませんか?わしはなります。って言うかキレます。

日本語打ってるときはまだマシなんだが、英語 (別に英語圏の人じゃなくても、URL だのメールアドレスだのいくらでも機会はあるでしょ) を打つときがもう……もーーーー!!って感じだ。

なんで母音と子音のキーが一緒くたなんだよ。"def" って打ちたかったら、d → e → f (ここで "→" はカーソルを右に移動させるキーだと思いねえ) とかやらんといかんのだよ。子音のキーが別になってれば三回 (実際は一回で目当ての文字が出るわけじゃないから、正確には『三文字分』だが) 押せば良いだけなのに、これだと五回で、しかも "→" キーは離れていて押しづらい。ユーザインターフェースとして腐ってる。つーか "e" のキーを独立させるだけで、入力効率は跳ね上がるぞ。

で、ちょっと思ったんだけど、欧米圏の携帯電話って文字入力のインターフェースはどうなってんだろう。英語ネイティブじゃない人間ですら、こんなにストレス溜まるんだから、本場の人ならこんなのは耐えられないとおもうんだよな。


2004-11-26 ほんま眠いです、勘弁してください(何を?) [長年日記]

% [FreeBSD] 5.3R と vim の問題

たまたま某氏があがいているのを見つけてしまったが、解決はしていない模様。

この前、5-stable ではどうなのか試してみようと思ったんだが、buildworld が必ず同じ場所で失敗するので、とりあえず諦めた。

どっちにしても、vim の問題はまだ我慢できるわけですよ。わしとして問題なのはどっちかと言うと ssh 経由の eclipse が死ぬ方でして、そっちが解決してくれないと (あるいはそれを使わなくて良くなるかしないと) 5.3R には上げられないですなあ。鬱っぽ〜い(泣

% [OCaml] List.iter とかを使うときに Ruby っぽく書いてみよう

…などと思った。れっつちゃれんぢ。(例はこっから再利用)

let lst = [ "this"; "is"; "a"; "pen" ];;
 
List.iter ( fun x ->
   print_endline x
) lst;;

% むぅ、イマイチ。そもそも list がオブジェクトじゃないから、そっくりになるはずはないんだが、それでも、これではちょっと悔しいので、無理矢理こうだ!

let each l closure = List.iter closure l;;
 
each lst ( fun x ->
   print_endline x
);;

% ちょっと Ruby っぽくなりましたか(苦笑

そもそも、どうして List.iter (その他、類似の関数) が『(処理用関数) -> (処理対象) -> (返り値) = <fun>』という型なのかと言うと、おそらくは…

let each_print = List.iter ( fun x -> print_endline x );;
 
each_print lst;;

% てなことをやるためなんじゃないかと思います。も少し一般化して言えば、『頻繁に変わる可能性がある方の引数を、なるべく後ろに持ってくる』ようになってるんじゃないかと。そうすることで、コードの再利用率がアップするという寸法でしょう。

Ruby のクロージャ (いわゆるイテレータブロック) は、結局のところ『使い捨ての関数を書きやすくする』ものだと思うんだが、OCaml (などの関数型言語) ではもともと無名関数はいくらでも書けるわけで、Ruby のようなアプローチはそもそも必要が無い。それよりはコードの再利用を助ける方向性へウェイトが振られてるってことなんでしょう。

% [雑談] I/O 鑑賞日記

う〜ん、『cheers!』がエエなあ。歌詞はこっぱずかしいが(笑)、サビの微妙に中途半端っぽいメロがたまらん。褒めてんだよ?音楽的知識が乏しいせいで、うまく言葉で表現できないだけ。同じ方向性で『謝罪状況』も良い。

ところで『小さな歴史の詩』は、ものすごくどっかで聴いた気がするオーラぷんぷんなんだけど、これって何か TV 番組とかで使われてたかな。曲名をキーワードにしてグーグっても CD の紹介ばっかりで情報が掴めない。

…もしくは、モノスゴクそっくりな曲を聴いたことがあるって可能性も無きにしもあらずか?

% [FreeBSD][PC] 地獄巡り vim 編(謎

なんかスイッチ入っちゃったんで、例の文字化け問題絡みを調査中。vim のソースって #ifdef の嵐で、読みづらいデス。

とりあえず、つら〜っと読んだ感じだと、mbyte.c の mb_init() の中で、mb_bytelen_tab というグローバルな配列 (たぶん、最初の 1byte を見て文字長を判断するためのテーブルだと思う) を初期化してるんだが、この時に例の化ける文字 (『、』とか『・』) に相当する部分が間違った値になっちゃってるっぽい。実際、『、』も『・』も 1byte 目は 0xA1 で共通してたりするので、とてもとてもそれっぽい。

ちなみに、mb_init() は最初の起動時や encoding の指定がされてたときに呼ばれる模様。

そんで、そのテーブルを埋めるときには、iconv が使われる場合と、mblen() だけで行なわれる場合があるようだ。で、その分岐になるのがたぶん 583 行目辺りの…

   p = enc_locale();
   if (p == NULL || STRCMP(p, p_enc) != 0)
   {
       convert_setup(&vimconv, p_enc, (char_u *)"utf-8");
       vimconv.vc_fail = TRUE;
   }
   vim_free(p);

% ってところなんじゃないかと思うんだが、ここで p_enc と p が一致しない (STRCMP の中身は strcmp とほぼ同じ。要するに 0 で一致) 状況ってのが、ソースを追ってるだけだとイマイチわかりづらい。

ぐあ〜っ、デバッガで追いてえぞ。でも今となっては 5.3R の環境が無いから容易には試せん。くそぅ。

・・・まあ、とりあえずここで iconv が悪いってことになってしまうと、そっちのソースまで読まにゃならんくなるから、あえてそこは見ないふりをして、mblen() が悪いってことで /usr/src/lib/libc/locale/mblen.c を重点的に攻めてみる…って方向で。もしかしたら続く。

% [FreeBSD] It's wonder :-(

mblen() 関連を調査中・・・なんじゃこりゃ?ほんとに大丈夫なのか?このコード。とりあえず、mblen() 自体は短いんで丸写ししてみるが…

int
mblen(const char *s, size_t n)
{
        static const mbstate_t initial;
        static mbstate_t mbs;
        size_t rval;
 
        if (s == NULL) {
                /* No support for state dependent encodings. */
                mbs = initial;
                return (0);
        }
        rval = __mbrtowc(NULL, s, n, &mbs);
        if (rval == (size_t)-1 || rval == (size_t)-2)
                return (-1);
        return ((int)rval);
}

% なんか、この mbs てのが、初期化されてないように見えるのは気のせいでしょうか。んで、__mbrtowc() (EUC の場合実際の中身は euc.c の中の _EUC_mbrtowc になる模様) の中で、いきなり…

         es = (_EucState *)ps;

% とかやってます。ここでは ps が上での &mbs に相当ね。んで、この関数の内部でも es の要素をいきなり比較に使ってる。static 変数は確保した時点で 0 クリアされるって規格でもあるんだっけ?

さらにわけわからんのは、ここで mbstate_t 型を _EucState のポインタにキャストしてるけど、こいつらの定義って…

typedef struct {
        wchar_t ch;
        int     set;
        int     want;
} _EucState;
/* 適当に抜粋 */
typedef __mbstate_t     mbstate_t;
typedef union {
        char            __mbstate8[128];
        __int64_t       _mbstateL;      /* for alignment */
} __mbstate_t;

% こんなんなんですけど。さっぱりわけわかんねえ。__mbstate_t の中身ってどうなってんですか?

5.2.1R の方の mblen() 絡みは、それなりに読み下せたんだけど、5.3R の方は謎多すぎ。正しいんだか正しくないんだかさっぱりです。って言うか、かなり正しくなさそうな気がするんですが(苦笑

やっぱ、もう一回 5.3R の環境用意して実験してみないとダメかなあ。とりあえず試してみたいのは、vim の src/mbyte.c でやってる mb_bytelen_tab を埋める処理。必要なところを抜き出すとこんな感じかと。

   char buf[9];
   char mb_bytelen_tab[256];
 
   int i, n;
 
   for (i = 0; i < 256; ++i) {
   if (i == NUL) {
      n = 1;
   } else {
      buf[0] = i;
      buf[1] = 0;
      if (mblen(buf, (size_t)1) <= 0) {
         n = 2;
      } else {
         n = 1;
      }
   }
   mb_bytelen_tab[i] = n;

% そんで、適当に LANG=ja_JP.eucJP な環境で実行して mb_bytelen_tab の中身をどっかに出力して、5.2.1R での結果と 5.3R での結果を比べてみると、何かわかるかも知れませんな。もしこれに違いが無いようなら、libiconv に問題がある可能性が高まると思われる。

・・・でも環境用意するのがかったるいんで、誰かやってみてくんないかなあ(爆


2004-11-27 正しいのか正しくないのか… [長年日記]

% [FreeBSD] address の指す number バイトまたはそれ以下のメモリが正しい 1 マルチバイト文字をなしていれば、そのバイト数

(注:以下の文は思いっきり勘違いしてるので、情報としての意味はほとんどありません -- 2004/12/1 追記)

愛用する『ANSI C 言語大辞典』の mblen() の動作に関する説明。ちなみにこの本は C をやる人にはかなりお薦めです。

んで、この説明で使われてる mblen() のプロトタイプ宣言は以下のとおり。

int mblen(const char *address, size_t number);

% そこで、昨日の vim の話に戻るが、例の mb_bytelen_tab を埋める操作で、1byte 目に 0x00 から 0xff まで 2byte 目は常に 0 な char の配列 buf を…

   mblen(buf, (size_t)1)

% という形で mblen() に渡している。疑問なのは、こういう使い方ってアリなのか?ってことだ。だって 1byte だけを見せて、「これは正しいマルチバイト文字か?」って聞くのはナンセンスじゃないのか。2byte 目まで見ないかぎりは、本当に正しいマルチバイト文字かどうかはわからんのじゃなかろうか。

まあ、それは置いとくとして、5.2.1R の mblen() では、こういう呼び出しをした場合、1byte 目の 8bit 目が立っていれば (ASCII 文字じゃなければ) 問答無用でマルチバイト文字だと見なした値を返すようになってるようだ。

だが、5.3R の場合はどうも違うっぽい。1byte 目の 8bit 目が立っていて、number に 1 を指定していると、たぶんエラー ( (size_t)-2 ) を返す。も少し具体的には CEI->count[set = _euc_set(*address)] の値が、number よりも大きい場合にこのエラーになる。

ここで、set の値は *address (要は buf の 1byte 目の値) が…『0x008f なら 3』『0x008e なら 2』『それ以外で 8bit 目が立っていれば 1』『8bit 目が立っていなければ 0』になる。EUC の拡張領域の仕組みってよくわかってないけど、たぶん 0x8f や 0x8e はそのためのシフト値だと思われる。

んで、普通の 2byte 文字の場合は CEI->count[1] になるわけだけど、この値が何になるかはちゃんと追いきれてない。ただ、大辞典様の表記を信用するなら、たぶんこれはバイト数だから『2』になるはずだ。

と言うことで、number に 1 を与えるとエラーになると思われる。……ところがこれでは終わらなくて、例の mblen() 内の mbs っていう static 変数がやっかいなことを引き起こしている。

上記のようなエラーの場合、mbs (_EUC_mbrtowc の中では es) の各メンバにその時の状態を保存して抜けてしまう。そして、当然そいつは static 変数だから、次の呼び出しにはその値を持ったまま呼び出され、その値を元にして処理されてしまうのだ。

そんなわけで、vim の mb_bytelen_tab を埋めるための…

if (mblen(buf, (size_t)1) <= 0)
   n = 2;
else
   n = 1;

% は、想定される結果としては mb_bytelen_tab[0x80] 以降は全て『2』になるはずなんだろうけど、5.3R ではおそらく『1』と『2』が交互に出てくるような状態になってるような気がする。

…しかし、なんでこんな修正入れたんだろうな。エラーを返すこと自体は、たしかに、マルチバイト文字をぶった切ってしまうのを防ぎやすくはなるかも知れんが、static 変数に状態を保持するのは反則だろ。まあ、vim 側の使い方も、いかにも hack くさくて褒められたもんでもないのかも知れんが……

とりあえず quick hack するなら…

--- lib/libc/locale/euc.c.orig	Sat Nov 27 14:59:48 2004
+++ lib/libc/locale/euc.c	Sat Nov 27 15:07:43 2004
@@ -192,6 +192,7 @@
 		want = es->want;
 		wc = es->ch;
 	}
+	if (n != 1) {
 	for (i = (es->want == 0) ? 1 : 0; i < MIN(want, n); i++) {
 		if (*s == '\0') {
 			errno = EILSEQ;
@@ -206,6 +207,7 @@
 		es->ch = wc;
 		return ((size_t)-2);
 	}
+	}
 	wc = (wc & ~CEI->mask) | CEI->bits[set];
 	if (pwc != NULL)
 		*pwc = wc;

% てな感じで問題になる部分を、n (number) が 1 の時だけ特別扱いにしてしまうことかな。とりあえずこれで、vim の問題は解決しそうだけど*1……試すのかったるいんで実際にどうなのかは、暇な人とか必要に迫られてる人に任せます。どっちみち、わしはこれが解決しても、他に問題があるから 5.3R にはしばらく移行できん。

*1 そもそも勘違いしてたので、多分役に立ちません

% [FreeBSD] 上のに追記

む、件の場所より上の方で、

if (s == NULL) {
   s = "";
   n = 1;
   pwc = NULL;
}

% とかやってるな (たぶん、『必ず失敗する値』を入れてるんだと思われ)。あのパッチだと場合によっては問題アリかも。ただ、s が NULL の状態でこの関数が呼ばれるシチュエーションがあるのかどうかが疑問だけど。

ま、どっちでも良いや。ともかく、もっとちゃんとした対応がなされるのを待ちましょう。libc 側をいじらずに、vim 側でうまいこと切り抜けるのが一番良いんだろうけど…そうすると、わりと大工事になりそうな気がするんだよね。はあ、鬱だ・・・

% [FreeBSD] 5.3R と vim 問題、別の回避法

mb_bytelen_tab を埋める処理のとき、enc_utf8 が TRUE だと mblen() とか使わずに、mbyte.c の 136 行目で定義されてる、utf8 用のテーブルを使うみたいなので、おそらく例の問題は起こらない。

ほんで、enc_utf8 が TRUE になる状況はと言うと、vim の変数 encoding が utf-8 の時。だから、utf-8 に対応した端末で、.vimrc で set encoding=utf-8 するか、LANG 環境変数に ja_JP.utf-8 なんかを設定するかすれば、とりあえず問題を回避できるような気がする。

もしかすると、端末が eucjp のままでも .vimrc で set termencoding=japan と set encoding=utf-8 としてやればオッケーかも。これなら、通常の環境のままで、alias vim 'env LANG=ja_JP.utf-8 vim' みたいな感じでも行ける?

% [FreeBSD] また追記

試してみたら、termencoding=japan と encoding=utf-8 が設定されてれば、LANG の設定は euc-jp のままで良いみたいだね。これならわりとすっきりしてるから、当面の回避策としてはいけるんじゃないすかね。でもまあ、この場合でも、もし libiconv に似たような問題がある場合は問題が出ると思うけど(苦笑

% [FreeBSD] さらにさらに追記

しつこいなあ、もう(笑

上記の termencoding と encoding の設定をした場合、読み込みファイルの文字コード自動認識で、euc-jp のものを ucs-2 と誤認識することがあるみたいだ。なぜなのかはよくわからん。

とりあえず、fileencodings に ucs-2 を入れてる人は、それを削除する (か、japan より後ろに持ってくる) のが吉でしょう。って言うか、ucs-2 のファイルを直接編集したい場合なんて、それほどあるとは思えんのですが。

ちなみに、新規ファイルを保存すると、基本的には encoding で指定している文字コードになります。なので、上記の設定をすると、新規ファイルは utf-8 で保存されてしまうんだが、それが嫌な場合は、.vimrc に au BufNewFile * setlocal fileencoding=japan とでも書いておくと、幸せになれるでしょう。

% [PC] 今日の新言語『Boo

相変わらず、この方面の情報元は Matz日記。いやあ、なかなかおもしろそうな言語ですな、これは。たぶん、わしが求めてるのは、こういう感じで、文法が Ruby っぽいヤツなんじゃなかろうか。CLI 上の実装だってのがちょっと微妙だけど、これって Mono でも良いのかな。

静的型付けだけど、型推論があるので神経質になる必要もなく、さらに Duck Typing というのを利用すると、動的型付けも可能みたい。

First class functions』ってことで、関数型的な関数の扱いが可能。まあ、文法の元になってる Python にしても、関数はオブジェクトになってるから、同じような使い方ができるけど。

Generators』って何だろう。イテレータみたいなもんかな。

もちろん(?)、今流行りの (なのか?) Closure もありますね。なんか Python 風文法の中で『Braces based』な方の書き方すると、妙に気持ち悪い気がするけど(苦笑)。『Block based』な方は、Ruby でオブジェクトに特異メソッドを追加するときの文法に似てるかな。

Builtin Literals』を見ると、正規表現のリテラル表記があるのが、Python より Perl や Ruby っぽくて良いな。Array が静的サイズで要素の型が単一、List が動的サイズで要素の型は混在可能、ってのがちょっと変わった区分の気がする。

Syntactic Macros』……ん? Lisp 人口の取り込みを狙ってますか?このページでは、例として、VB の with 構文を作ってますね。まあ、with はわりと嫌いじゃない機能でしたが(苦笑

単純に Python の真似をするだけじゃなく、メソッドのオーバライドをするときに明示的に override 指定子を付けたりとか、.Net Framework の色も出てたりしておもしろい。個人的には、オーバーライドするときに指定子が必要なのは、わりと良い事だと思ってたりする。しばらく見守ってみたい言語です。

% [FreeBSD][PC] Mono インストールできず

よっしゃ Boo が FreeBSD で使えるかどうか、試しちゃろ…と思って lang/mono の make install を試みるが、"Does not work on 5.X before 503000" と言われて敢えなく撃沈 (ちなみ 5.2.1R の ${OSVERSION} は 502010)。

もう、なんつーか、いろいろと……泣ける。


2004-11-28 力業……だけど [長年日記]

% [FreeBSD][PC] vim の 5.3R 対応パッチ (超適当)

ぶっちゃけて言いまして、mblen() に頼るのはやめようと(苦笑)。そういう方向で、euc の時には utf8 の時と同じように静的なテーブルを使うようにしてみました。5.3R の環境が無いので、大丈夫なのかは全然わかりません(爆

diff -ru vim63.orig/src/globals.h vim63/src/globals.h
--- vim63.orig/src/globals.h	Sat May 29 20:36:36 2004
+++ vim63/src/globals.h	Sun Nov 28 01:48:36 2004
@@ -673,6 +673,7 @@
 						   DBCS encoding */
 EXTERN int	enc_unicode INIT(= 0);	/* 2: UCS-2 or UTF-16, 4: UCS-4 */
 EXTERN int	enc_utf8 INIT(= FALSE);		/* UTF-8 encoded Unicode */
+EXTERN int	enc_euc INIT(= FALSE);		/* EUC encoded */
 # ifdef WIN3264
 /* Codepage nr of 'encoding'.  Negative means it's not been set yet, zero
  * means 'encoding' is not a valid codepage. */
diff -ru vim63.orig/src/mbyte.c vim63/src/mbyte.c
--- vim63.orig/src/mbyte.c	Fri Apr 23 17:44:36 2004
+++ vim63/src/mbyte.c	Sun Nov 28 02:14:26 2004
@@ -145,6 +145,18 @@
     3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1,
 };
#################### この行は空行に変えてください ####################
+static char euclen_tab[256] =
+{
+    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+};
+
 /*
  * XIM often causes trouble.  Define XIM_DEBUG to get a log of XIM callbacks
  * in the "xim.log" file.
@@ -525,6 +537,10 @@
 #endif
 	enc_unicode = 0;
 	enc_utf8 = FALSE;
+	if (STRNCMP(enc_canon_table[idx].name, "euc-", 4) == 0)
+	    enc_euc = TRUE;
+	else
+	    enc_euc = FALSE;
     }
     enc_dbcs = enc_dbcs_new;
     has_mbyte = (enc_dbcs != 0 || enc_utf8);
@@ -597,6 +613,8 @@
 	    n = utf8len_tab[i];
 	else if (enc_dbcs == 0)
 	    n = 1;
+	else if (enc_euc)
+	    n = euclen_tab[i];
 	else
 	{
 #if defined(WIN3264) || defined(WIN32UNIX)

% euclen_tab の定義の手前に変なメッセージが入ってるところは、tDiary 対策なので、実際に使うときは空行にしてやってください。

全くデバッグしてないので (つーかビルドしてすらいない) いろいろ不具合があるかも知れませんが、その時は適当に直しながら使ってくださいな。うわ、無責任。

いやぁ、それにしても、vim のソースに合わせた記法で書くのが、すんげえ気持ち悪かったっす(笑

% [FreeBSD] 勘違い…と言うか思い込み

あらら?なんかわし、間違って見てたぞ。例の、

   if (mblen(buf, (size_t)1) <= 0)
       n = 2;
   else
       n = 1;

% って部分は、勝手に不等号を逆の意味で考えてた(苦笑)。0 以下なら n = 2 なんだから、この mblen() の呼び出しが『失敗』したら n = 2 ってことだな。だとすれば、理に適ってる。

ついでに言うと、思い込みの連鎖で、5.2.1R の _EUC_mbrtowc() の見方も間違ってたな。全部逆さまだ(苦笑

はてさて、それではどうしてうまく行かないのかしら…と、次のようなテストを書いてみた。

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
   const char *fname = "euclen_tab.txt";
   FILE *io = fopen(fname, "w");
   int i, n;
   char buf[2];
 
   for (i = 0; i < 256; i++) {
      buf[0] = i;
      buf[1] = '\0';
      if (i == '\0') {
         n = 1;
      } else {
         if (mblen(buf, (size_t)1) <= 0) {
            n = 2;
         } else {
            n = 1;
         }
      }
      fprintf(io, "%d,", n);
 
      if ((i + 1) % 32 == 0) {
         fprintf(io, "\n");
      }
   }
 
   fclose(io);
   return 0;
}

% で、これを、5.2.1R で実行して、でき上がった euclen_tab.txt を見ると……なぜかこう。

1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,

% ……あれ〜〜??そもそも mblen() を使うと 5.2.1R でもうまく行かないってこと?そうすっとやっぱ常に iconv が使われてて、そっちで問題が出てるのかなあ……混迷は深まるばかりですな。とりあえず上の euc に静的テーブルを使うパッチは、この辺りをすっ飛ばしちゃうようになってるはずなので、真相はともかくとりあえずは動きそうな気はしてるけど(爆

あ、前に書いた、libc へのパッチは全く無意味だな、きっと。いやあ、「人は己の見たいものを見る」ってやつだな。一旦何か思い込みをやらかすと、全部それに引き摺られる。気を付けないと。

% [FreeBSD] そうかそうか

locale を使った C のコードなんて書いたことないから、お作法がさっぱりわかってないのが露呈(笑

まあ、なんつーんですか、locale を設定してなかったら、そりゃあデフォルトの locale ("C") で処理されるよなあ。それなら、全部 1 になるのは当たり前だ。つーわけで、上記のテストコードを修正。手っ取り早く端末に表示するように変えました。

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
 
int main(void)
{
   int i, n;
   char buf[2];
 
   fprintf(stdout, "%s\n", setlocale(LC_ALL, "ja_JP.eucJP"));
 
   for (i = 0; i < 256; i++) {
      buf[0] = i;
      buf[1] = '\0';
      if (i == '\0') {
         n = 1;
      } else {
         if (mblen(buf, (size_t)1) <= 0) {
            n = 2;
         } else {
            n = 1;
         }
      }
      fprintf(stdout, "%d,", n);
 
      if ((i + 1) % 32 == 0) {
         fprintf(stdout, "\n");
      }
   }
 
   return 0;
}

% ほんで、結果がこれ。

ja_JP.eucJP
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,

% 想定通りですね。と言うことで、5.2.1R ではこのように問題無いのが判明。だれか、このテストコードを 5.3R で試してもらえると嬉しいんですが。多分、後半がぐちゃぐちゃになってるんじゃないかと予想。それもこれもアノ static 変数が……ってちょっと待てよ?

そういや、条件式を逆さまに考えてたから、簡単な対処は無理だと思い込んでたんだけど、失敗したときに n = 2 っていう条件なら、たぶん…

--- mbyte.c.orig	Sun Nov 28 20:40:35 2004
+++ mbyte.c	Sun Nov 28 20:42:49 2004
@@ -650,6 +650,7 @@
 		     * where mblen() returns 0 for invalid character.
 		     * Therefore, following condition includes 0.
 		     */
+		    mblen(NULL, 0);
 		    if (mblen(buf, (size_t)1) <= 0)
 			n = 2;
 		    else

% これだけで、直るんじゃないかな。mblen(s, n) の s に NULL を与えると、例のくそったれな mbs に initial (おそらく中身は 0 ) が代入されて、変な保存状態がリセットされると思われる。そうすれば、普通に動くんじゃなかろうか。どうですか?

本日のツッコミ(全1件) [ツッコミを入れる]

% 潮田 [中川さんのところから飛んできました。 (改行前の文字化けはずっとむかついてた口です) で、上記のサンプルを 5.3-..]


2004-11-29 まったく困ったもんだ [長年日記]

% [FreeBSD] 5.3R の ssh & X fowarding で Linux の Eclipse が死ぬ問題

vim の問題も、なんとか回避できそうな気がしてきた今日この頃なので、もう一つの問題にもちょっくら取り組んでみようかと思った。

で、ちょっと試しに cygwin から件の Linux Box にログインして Eclipse を動かしてみた。わお、同じ死に方で死亡。OpenSSH のバージョンを調べてみると 3.9p1 となっている。5.2.1R の方のバージョンは 3.6.1p1 、5.3R はリリースノートによると 3.8.1p1 だそうだ。

ふうむ、と言うことはこちらは libc とかの問題じゃなく、OpenSSH そのもの (と Eclipse の相性?) の問題ってことか?と思って、5.2.1R に ports で security/openssh-portable を入れてみた。こいつのバージョンは 3.9p1 だ。

で、これを使って Linux にログインしてみる……と、案の定、例の死に方をする。ってことは、5.3R でも、OpenSSH の 3.6 辺りを使ってやれば大丈夫ってことでわ?ちょうど良い事に security/openssh はバージョンが 3.6.1 だ。ふむ……試してみるか。

% [FreeBSD][ツッコミ] 上記のサンプルを 5.3-STABLE で試しました

お、ご協力感謝です。これで、ほぼ原因は確定っぽいですね。

n = 2 も現れてるってことは、mbs の中身が空な状況では、想定通り失敗してくれてるみたいだし、やっぱりあの一行パッチでオーケーそうかな。

とりあえず、ssh の方の問題も回避の目処が付いたんで、今 releng_5_3 で buildworld 中。vim の件もテストしてみて大丈夫なら報告か。…って、どこに報告したら良いんだろ。今のところ FreeBSD だけの問題っぽいから、ports の方に send-pr かしらん?

% [FreeBSD][ツッコミ] 文字化けのほとんどが直りました

それは良かったです。でも、完全には消えてませんか…うーん、mblen() 以外にも何か問題あるのかな。

本日のツッコミ(全1件) [ツッコミを入れる]

% 潮田 [mblen(NULL, 0); を Vim 6.3.035 + im_custom074 に入れました。 ありがたい..]


2004-11-30 疲れたが…… [長年日記]

% [FreeBSD] 今度こそ 5.3R にアップグレード

とりあえず、vim については例の一行パッチ、ssh については security/openssh を入れることで、問題は回避できている模様。これで何とか 5.3R で生活できそうです。

vim については、潮田さんの「完全に消えたわけではありません」発言が、ちと気になるが、わしのところでは問題が無いように見える。im_custom074 も見てみたけど、mblen() や mbtowc() は使ってないし……うーん、何でだろ。

% [FreeBSD] vim の件を send-pr

貧弱な英語力を駆使して一生懸命書いたのに、ssmtp が送信に失敗して無駄にする罠。ぐったり。そういや、前にも同じように失敗してやる気無くしたんだった。その時に send-pr -P のテンプレートで普通にメーラから出そうって決めたのを、後から思い出すダメっぽさ。

前回 (ネタは何だったか忘れたけど) はそのままやる気無くして、結局送らなかったんだが、今回はもう少しだけ踏ん張って、もう一度書き直して送っておいた。まあ、テストコードもパッチも付いてるから、説明が不十分でも何とかなるでしょう。だいたい、あの一行を付け足したからって、他に影響出るわけないし、無条件で取り込んでくれても良いんじゃ?ってくらいですよ (それはさすがに極論か)。


トップ 最新 追記

日記ってのは本来、自分で読み返すためにあるもんだよなあ……
もしくは有名人になったら死後に本になったりとかか?

RSS はこちら

jijixi at azito.com