04_07_02


せっかくなので、少しだけでも書いておくか。

--

evilwmのフォーカスがなんとかなった、っていう話の続きなんだけど、 どうも、何かがおかしくて、ウィンドウを閉じたときにSEGVするのか、 Xごと終了してしまうような感じだ。…会社のPCでは。

で、これを家のPCで再現しようとしたんだけど、 どうもうまくいかない。会社のPCではX起動→kterm起動→kterm終了。で、 常にXが終了してたんだけどなぁ…わからん…。

けど、これ、状況によっては無視できない事態になってもおかしくないので、 なんとかしないとなぁ…っていうどうでもいい話

--

あぁ…128kbpsでGentooは厳しいなぁ…


wo:
XGetWMHints が NULL を返してるみたいなので、そのへんなんとかしたらなんとかなったんだけど、なんで NULL を返すのか、なんで家では再現しないのか、とか、そのへんは不明。

04_07_03


大往生やってて明るくなってきたなぁ…朝だなぁ…と思ったら6時過ぎてて、それでいいのか自分。 しばらくやってなかったせいか、細かい部分忘れすぎだ。普通に4面ゲームオーバーってなんだ。

--

塊魂をALLした。買った初日に6時間くらいやって、それから全然やってなかったんだけど、とりあえずクリアー。 熊とか牛とか極小だけど。 あと、エスプガルーダは結局買ってない。なんとなく。 ファントムブレイブが残ってるので、他は今はいいかなぁ…あー、でもゼノサーガとかもあるしなぁ… でも、休日は寝てばっかなので、ゲームしてる時間が無い。いや、でも、今日は寝てないのか? よくわからん。起きたのは午後2時だったけど。ケツイやりたい。プロギアやりたい。

あー、何書いてるかわからん。まあ、ほぼ徹夜明けみたいなもんなので、仕方無いといえば、そのとおりなんだけど。 寝ようかなぁ…でも寝たら次起きるのが午後4時とかになりそうで恐い。

04_07_06


なんか、前までは、更新が日常の一部になっていたような感じだったけど、 すっかりそんなことは抜けてしまったようで、更新するのを忘れてしまう。

まあ、別に忘れたからと言って害は無いんだけど。 とりあえず、4日は午後2時までには起きていたように思う。4時まで 寝るっていう最悪の事態は避けられたようだ。まあ、起きてからゲーセン行ってたんで、 何の意味も無いんだけど。セガワールドが遠い。自転車で30分くらい行って、そのあとに 坂道10分くらい登ったところにある。そこで、やっと大往生とガルーダができる。 辛い…。まあ、大往生はとりあえず2-2ボスくらいまでは行けた、というか、 2-2ボスが一番辛い弾(アレだ、って言っても通じないだろうけど)ばっか撃ってきて、泣きたくなった。 ガルーダは4000万ちょいだった。そんなになまってはいないようで。 あと、意外とType of the Deadのビルの前に出てくるボスの前半を初めてひとりで倒せた。 一回もミスタイプしなかった。けど、後半であっさりやられた。

というか、ケツイがやりたい。長野県内であればいい…上田になくたっていい…どこかに無いものか。 怒首領蜂IIには困らないんだけど。ゲームやるために東京まで行きそうな勢いだ。一往復約12000円。 10回行ったら基盤買える。

--

なんとなく、 Paul氏の文章(翻訳文章のところ) を読んでしまう…。いくつかは、前にも読んだことあるような気がするんだけど…

まあ、アレだ。Lisp使いたくなった。と、いうか、この文章は何回見てもLisp使いたくなる。 そういう文章だ。と、いうか、これ読んでも「Lispは使いたくない」と、言うような人は、 もはや、プログラマとして不能であるとしかいいようがない。そんなことはないけど。 と、いうか、Lisp好きって言う奴のほうが変態だ、という意見のほうがマトモだろうか。

とりあえず、そのへんのことはいいとして、今は異様にLispが使いたいのである。 できれば、schemeとかで。

ああ、もう、これで何度目だろうか、「次はLispで書こう…」と思ったのは。 けど、Lispでまともな物は書いたことが無いのである。まあ、そんな感じで。

04_07_08


そういえば、メールアドレス変わってます。wo_atmark@s9.dion.ne.jp aboutも、ちょっと更新。

--

雨降ってるときは、たまにミミズを見たりするのである。まあ、普通なんだけど。 で、それは、「たまに」しか見ないわけだ。見つけたとしても1-2匹くらい。 けど、雨上がりには、結構な量のひからびたミミズを見つけられるのである。 その量は明らかに雨の日に見つけられる量よりも多いのである。

ようするに、わざわざひからびるために土の中から出てきてるっていうことなんだろうか。 あと、ミミズとかって結構高タンパク源のような気がしないでもないので、 本気で食糧難とかになったら貴重な存在なんだろうなぁ…とか、そういうどうでもいい話。


e1101:
をは,蟻さんとミミズさんで暮らしてるの?

04_07_11


2時半くらいに起きて9時くらいまでファントムブレイブやってた。終わってる。

で、虫が多いので、虫について3個くらい適当な話を考えたりしたので、そのへんを。

--

まず、ひとつめは、蜘蛛は食べ残しが多い、ということだ。

蜘蛛の巣は別に構わない。虫の死骸も構わない。 けど、蜘蛛の巣に絡みまくった大量の虫の死骸はさすがに気持ち悪い。

よく、「食べ残しみたいな贅沢なことをするのは人間だけだ。」とか 言うけど、あんなのは大嘘で、蜘蛛も地球に優しくない。

もういっこは、前回の話と絡んできたりするのだけど、 高タンパク源の話だ。

誤解の無いように言っておくと、究極の節約の為に昆虫を 主食にしたとか、そういう話ではない。これは、 虫に対する嫌悪感をなんとかするための自衛の方法のひとつだと思っていただいてかまわない。

まず、問題は、何度も述べているように、小さい虫が多すぎて、 非常になんともいえない生活を送っている、という点だ。

しかし、この問題は本当に「問題」なのか、とか、思ったりするわけである。

夏に出るわけのわからない小さい虫は、ほとんどの場合、人畜無害。 刺したりしないし、病気を運んだりするわけではない。すなわち、 「なんとなく気持ち悪い…」と、いう気持ちがあるというだけで、 精神的になんとかしてしまえば全く問題ではなくなるのである。

で、そのなんとなく気持ち悪いのはどうすればいいだろうか。 僕はそれほど虫が嫌いだったりするわけではない。 けど、小さい虫はちょっと触ると潰れる、というのが、どうしても 耐えられないのである。

で、そこで、考えたのが、「虫は高タンパク源だ」と思い込むようにする方法である。

例えば、考えてほしい。どんなに気持ち悪いものでも、食べ物であれば、 なんとなく嫌悪感が無くなったりしていないだろうか。

レバーとか、ミンチとか、貝類とか。ああいうのは、 食べ物として扱われているのでなければ、ああも簡単に扱ったり できないだろう。食べ物であれば、どんなにヌルヌルしてても 手で握り潰したりしても大丈夫であろう。

さらに、考えてもみてほしい。 肉食、雑食動物の中で、昆虫を食料としていない動物というのは、 むしろ珍しいくらいなのである。虫というのは、本来そういうふうに 利用するものなのである。

だから、もうなんかよくわからなくなってきたけど、 街灯にたかってる虫の大群見たら、気持ち悪くならないように、 なるべく、「食料だ…」と、思いこむようにしているのである。

--

ちょっと前の話なんだけど、 お母さんが安心して子どもにパソコンを使わせる本 っていう本を見て、まあ、なんていうか、前半部分はありがちな内容っていうか、 そういう内容だったんだけど、後半部分で、WSH+VBScriptとか使って 時間になったらダイアログ出して「冷蔵庫にプリンがあるよ」 みたいなものを表示させるプログラムの作り方みたいな感じのが載ってて、 書いた人の器の大きさを感じた。

04_07_12


osdev-jのWikiというのを 最近見付けたので、昼休みとかに読んだりしてる。

POSIX互換OS作っちゃってる のとか、見つけたりして、あぁ…すごいなぁ…とか思った次第。あと、 ケンシロウ進数は前に見たことあるような無いような。うろ覚え。

んで、関係あるのか無いのかはわからないけど、 6809が好きなあまりPCIのベンダID 0x6809 を取っちゃった話とか見つけて、それはどうでもいいんだけど、 「そういえば、IntelのベンダIDって0x8086じゃなかったっけなぁ…」とか思い出して、 やっぱそうだったりして、どこで覚えてきたんだっけなぁ…そんなこと。

で、それは別に構わないのだ。むしろ、ちょっとした遊び心があって良いと思う。けど、だけど、である。 8086の前は8080っていうのがあって、それは8bit CPUだったから8080だったわけだ。で、 それを16bit拡張したから、8086なわけだ。16bitだからと言って、最後に6を付けるという気持ちはちょっと 理解しかねるが、問題はそれじゃなくて、8086っていうのは、"0x8086"と、いうふうに16進表記するのは ちょっとおかしい、という話なのである。"8086"の'6'は16bitの'6'なのである。

まあ、どうでもいいことなんだけど。

04_07_13


最近、1ヶ月くらい家にいる時はなにひとつ生産的なことをしていないので、 どうしても書く内容がどうでもいい話ばっかりになってしまう。

まあ、適当な話を書くのは別に構わないんだけど、ちょっとマンネリ気味かなぁ…自分の中で。 漫画を書く環境があればそれなりになんとかなるんだろうけど、わざわざタブレットとかスキャナとか 買ってくるのもどうかと思うし、ていうか、マウスで描けよ、自分。 やらないことを環境のせいにする人は環境がどうにかなったとしても結局やらないっていうか、なんていうか。

で、マウスで絵描くっていうと、なんとなくほわほわ って思い出して、久し振りに読んでみたら、24時間更新する っていうのが非常に良かった。これ描いてる人すごいなぁ…。

まあマウスがどうこうっていうのはいいか。 一応会社行ってるから絶望的にダメ人間ってほどではないけど、会社のことわざわざ書くのも なんだかなぁ…って感じで。

トイレロック同期問題

とか、前フリしといて、会社の話。

トイレには大きいほうと小さいほうがあるんだけど、大きいほうは、一個しかなくて、 誰かが入ってると、次の人は待たないといけない仕様になっているのである。

鍵がかかっているかどうかは外から確認できるようになってて、鍵は中からしかかけれないから、 一応、人が入っているかどうかは外から確認できるようになってるんだけど、 鍵がかかっているかどうかを示している部分っていうのが小さくて、ちょっと近寄らないと 見えないのである。

で、ここでトイレはあんまり広くないうえに、大きいほうはトイレの奥のほうにあるっていう事情と重なって、 大きいほうが空いてるかどうかを確認した際に、もし、入ってたとしたら、その狭いトイレで待機するか、 細長いトイレをとぼとぼ引き返していくか、どちらにしても少々悲しい思いをする、という問題が 生じることになるのである。

で、こういう問題を解決するためかどうかは知らないんだけど、トイレのドアノブのところに、 現在トイレが空いてるかどうかを示すために大きく「使用中」て書いた紙が用意されてて、 使用者は入るときにそれを見えるようにしておく仕様になっているのである。 これならば、トイレに入った瞬間に、大きいほうは空いてるか空いてないかが確認できるので、 トイレの奥までわざわざ確認してから引き返してきたり、狭いトイレで空くのを待ったりする必要が無くなる、というわけである。

でも、これ、人が表示を切り替える必要があるっていう問題があって、 もし切り替えを忘れたりしてしまったら、実際のトイレの使用状態と使用状態の表示の同期がとれなくなるのである。

これ、大した問題では無いような感じがするんだけど、そうではない、この状況っていうのは、 最初の状況、すなわち、「空いてるかどうかは近寄らないと確認できない」っていう状況よりも 悪くなっているのである。

まず、使用状況と表示内容が一致しているという保証が無いので、結局近寄らないと確証が持てない。 すなわち、状況はあまり改善されてないということと、 それから、使用状況と表示内容に相違が発生した際に間違った情報が相手に伝わってしまうかもしれない ということ、すなわち、「トイレが空いてるにも関わらず、表示が"使用中"だったので待ってしまう」 という状況が生じる可能性がある、ということ。

状況が改善されてないうえに、もう一個問題を生じさせてしまっている、というわけだ。

で、まあ、ここまで書いといて、話のオチが思い付かないので、 「過剰な情報を与えるインターフェースはむしろ良くない」とか、ありがちな結論で終了。

--

書くの忘れそうだった。プログラマのダイエット が良かった。それだけなんだけど。

04_07_14


目覚し時計はふとんから離れたところに置いておくのである。 そうすると、二度寝しにくい…っていうのだったんだけど、暑くなってきたら、 ふとんで寝るのも床で寝るのもあんまり変わらないので、二度寝する。 そんな今日の午前。

まあ、そういうのはどうでもよくて、企業で働くプログラマとかの話だ。 プログラマというか、SEとでもいうべきか、いまだにプログラマとSEの区別がわからんのだけど、 まあ、言葉の定義はどうでもいいとして、とにかく、お金もらってプログラム書いてる人の話だ。

以前は、そういう話は技術的に面白くないから、全然考える気とかしなかったんだけど、 さすがに、3ヶ月も見積りだの生産性だの毎日聞かされてると、それなりに色々考えたり するようになってきて、で、考え方も変わってきたりするのである。たとえば、 Javaっていうのは良いのかもしれない、とか、そういうふうに思ってきたりとか、そういうの。

Javaの魅力

Javaっていうのは僕の中でどうでもいい言語のひとつだった。 インタプリタのくせに、実行時に何もおもしろいことができない言語仕様、 速いんだか遅いんだか結局よくわからない仮想マシン、起動遅い、 ライブラリ豊富だけど、そのぶんランタイムライブラリ大きすぎとか、 とにかく、そういう微妙なイメージしか持ってなくて、 嫌い、とまではいかないけど、わざわざ使おうという気にはならない、という感じだった。

とくに、一歩足を引かせる要因になっていたのは、「宣伝しすぎ」という部分だ。 まず、導入部分でオブジェクト指向の素晴らしさ(現実世界を再現とか、そういうくだり)を書いて、 続いて、これまでの言語と違って新しい概念がうんぬん(全てがオブジェクトだとか、GCだとか、そういうくだり) っていう話で、初心者を引っぱり、慣れてきた人に対しては、「ネットワーク」「webアプリ」「XML」 とかいった流行りの言葉で畳みかける、そういう部分。

これ、聞くたびに、「オブジェクト指向ってそんなにうまくいかねぇよ…」「GCとか別に新しい概念じゃないよ…」 「ネットワークとか、XMLとか、それってJavaじゃなくて、ライブラリがあるだけじゃないか…」 とか、そういうふうに思ったりして、なんか引いてしまうのである。 Javaの言語仕様っていうのはどっちかっていうと、 こじんまりとしてて、わざわざ宣伝する部分なんて無いように感じたりもする。

けど、これ、この「宣伝」こそが、Javaの魅力の一部だったのである。

個人でプログラム書いてると新しい技術を身につけるっていうのは、 非常にコストが小さい作業だ。理由が「なんとなくおもしろそうだから」っていう一言で済ませられる。 けど、企業は違う。企業っていうのは新しい技術の導入には、細心の注意を払う。

なんでかっていうと、企業にとって、開発コストは大きさよりも、予測可能であるかどうか、のほうが 重要な部分だからだ。コストを予測することで、はじめて戦略を立てられるようになるし、 退くべきか、押すべきかの判断も可能になる。

だから、新しい技術を導入するときはなによりもまず、「本当にそれでうまくいくのか」っていう検証の 部分を慎重に行う必要がでてくるのである。

で、こうなると何が問題かっていうと、検証っていうのは非常に面倒でつまらない作業っていうのと、 「今までそれなりにうまくいってんだから、わざわざ新しい技術を導入する必要もないよなぁ…」 っていう考えとかもあって、さらに、新技術の話を自分から出したら、それをみんなにわかりやすく説明する 義務が生じるとか、そういう色々な要因が重なったりして、ようするに、 「新しい技術は面倒」っていう結論になってしまってしまったりするのである。

でも、Javaは違う。Javaは各技術について、それぞれ、「何故うまくいくのか」という部分を「宣伝」として全面的に 押し出してきている。わざわざ自分がそのことについて検証する必要が無いのである。さらに、 それを押し出してきているのは、あのSunだ。そこらの一般人がでっち上げた検証とは 信用が違う。重みが違う。

つまり、Java関連の技術は新しく導入するのが他に比べて楽だ、というわけだ。 で、Javaには「ハッカーから見たら面白いだろうけど、 一般人から見たらわけのわからない機能(Cみたいにメモリいじって何でもできる、 とか、Lispみたいにそもそも何かわからない、とか)を持ってない」 っていう部分があって、真面目なプログラムを書くのを要求されたりするのとか、 そういう部分と重なってきて、企業にとっては非常に素晴らしい言語になっているんじゃないだろうか、 とか、そういう適当なことを妄想してみた。

--

というか、昨日の文章は何書いてるかわからないですよ。 多分今日の文章も明日見たら何書いてるかわからないですよ。

04_07_19


3連休はほとんどファントムブレイブやってた。ほとんどというか、ずっとというか。

なんて無駄な休みなんだとか思うんだけど、去年までだったら、もうすぐ夏休みなわけで、 全然貴重じゃないわけだ。

そういえば、編入生も夏休みってあるの?とかいう私信。

まあ、とりあえず、そんなおかげで、ファントムブレイブはエンディング見た。 なんていうか、あのゲームは、レベル上げしてると、どんどん時間が過ぎていくので 危険だ。

たとえば、女神転生とか、ドラクエとかみたいな感じでレベル上げが必要なゲームだとしたら、 ずーっとレベル上げしていたら、レベル上がりにくくなってくるし、 単調作業になってくるしで、だんだん嫌になってきて、そのうち やめれるんだけど、ファントムブレイブは、なんていうか、5時間やったらレベル50ぐらい上がるし、 10時間やったら100レベルぐらい上がるし、それなりに頭使う作業で、単調作業 じゃないので、なんとなく続けてしまうのだ。

まあ、そんな感じで、3日は無駄に過ごした。

あと、誰のためのデザイン がちょっとおもしろそうだと思って、はるばる長野駅前平安堂まで繰り出したんだけど、 売ってなくて、「なんか平安堂は有りそうで無いなぁ…色々…」と、適当に結論出して、 こういうの を買ってしまうダメ人間。

--

持ってる携帯とリナザウとで赤外線通信できたりするのが分かって、 そういえば、携帯電話てカメラ付いてたよなぁ…って、気が付いて、 試してみたらいけた。

まあ、要するにカメラが使える。

#!/bin/sh
#vntをjpgにする

(echo $1 | sed -e 's/\(.*\)\.\(.*\)/begin-base64 644 \1.jpg/';

sed -e "
/^.*:.*$/ {

	s/X-DOCOMO-BODY;ENCODING=BASE64:\(.*\)/\1/
	s/^END:VNOTE/====/
	/:/d

}

/^$/d" $1) | uudecode

やっと今になってsedが理解できた。

04_07_20


ああ、やばい。sedがちょっと楽しい。と、いうか、これを楽しいと呼ぶかどうかは疑問だけど。

明日か明後日には動くかも。

04_07_21


Type Of The Deadで、パーフェクトが99回以上いけた。 ちなみに、99でカンストした。

--

Ioとか、JavaScriptみたいなプロトタイプベースのOO言語を 知ると、OOに対する考えかたがちょっとだけ変わってくるのである。 特にオブジェクト指向設計とか銘打っておいて、 とにかく、クラス構成の話とかを聞いたときに、 なんか、もやもやした気分になってしまったりするのである。 UMLとか、どうしたらいいだろうか。って感じで。

まあ、要するに、またひとつ素直な考え方ができなくなってしまったわけだ。 こうやって大人になっていくんだなぁ。

とにかく、オブジェクト指向っていったら、オブジェクト指向なのだ。 もはやわけわからん。実行時にオブジェクトの特性をいじれないで 何がオブジェクト指向なんだろうか。 とか、言いながら、二日間全身全霊をこめて書いたプログラムがsedスクリプト。

#!/bin/sed -f

# 
# ホールドスペース構造
#
#  top
#  ---------------
#
#   label stack  (といっても数字だけでスタックっぽさを実現)
#
#  ---------------
#
#   temporary 
#
#  ---------------
#
#   symbol table
#
#  --------------
#  bottom
# 


1{
i	.text
i.global  main
i\
\main:\
\	pushl	%ebp\
\	movl	%esp, %ebp\
\	subl	$8, %esp\
\	andl	$-16, %esp\
\	

h
s/^.*$/0/
x

}


# IF HOGEHOGE THEN

/^[ \t]*IF[ \t]\+\(.*\)\([ \t]\\+THEN\)\?/ {
	x # ラベルの取得
	y/012345678/123456789/
	x # ラベル保存

	H # 現在行の保存
	s/^[ \t]*IF[ \t]\+\(.*\)[ \t]\+THEN.*/\1/ #条件取り出し

	/\([A-Z]\+\)[ \t]\+\(=\|<>\)[ \t]\+[A-Z0-9]\+/ {

		s//\tmovl\t\1, %eax/
		p

		s/^.*$//

		g
		s/.*[ \t]*IF[ \t]\+\(.*\)[ \t]\+THEN[ \t]*$/\1/ #条件取り出し

		/[A-Z]\+[ \t]\+\(=\|<>\)[ \t]\+\([A-Z]\+\)/ s//\tmovl\t\2, %ebx/   #変数
		/[A-Z]\+[ \t]\+\(=\|<>\)[ \t]\+\([0-9]\+\)/ s//\tmovl\t$\2, %ebx/  #定数

		p
		
		s/^.*$/\tcmpl\t%eax, %ebx/
		p


		# 比較演算子取り出し
		g

		s/[ \t]*IF[ \t]\+\(.*\)[ \t]\+THEN[ \t]*$/\1/
		s/[A-Z]\+[ \t]\+\(=\|<>\)[ \t]\+[A-Z]\+/\1/


		/=/ {
			g
			s/\([123456789]\)/\tjne\t\1f/
		}

		/<>/ { 
			g
			s/\([123456789]\)/\tje\t\1f/
		}

		P
	}


	x
	s/\n[^\n]*$// # 一番下にある行を消す…強引だなァ…

	x
	s/.*//g
}


/^[ \t]*ENDIF[ \t]*$/ {

	g

	/^0/ {
		s/^.*$//
		i\unmatch if-endif
		q
	}


	s/^\([1-9]\).*/\1:/
	p

	x
	y/987654321/876543210/
	x

	s/^.*$//

}

# 代入文

/^[ \t]*\([A-Z]\+\)[ \t]*=[ \t]*\(\([0-9]\+\)\|\([A-Z]\+\)\)[ \t]*$/ {

	
	H 

	s//\1/

	# シンボルテーブルに登録
	H

	# 以下2行はホールドスペースから文拾ってくる常套句なので覚えること
	g

	s/.*[ \t]*[A-Z]\+[ \t]*=[ \t]*\(\([0-9]\+\)\|\([A-Z]\+\)\)[ \t]*.*/\1/

	/\([0-9]\+\)/ {  # AT&T(だったっけ?)では定数の前に'$'
		s//\tmovl\t$\1, %eax/
	}

	p

	g
	s/.*[ \t]*\([A-Z]\+\)[ \t]*=[ \t]*\(\([0-9]\+\)\|\([A-Z]\+\)\)[ \t]*.*/\tmovl\t%eax, \1/
	p

	x

	# テンポラリから消す

	s/\n[ \t]*[A-Z]\+[ \t]*=[ \t]*\(\([0-9]\+\)\|\([A-Z]\+\)\)[ \t]*//
	x

	s/^.*$//

}

/^[ \t]*PRINT[ \t]\([A-Z]\+\)/ {

	s//\tpushl\t\1\n\tpushl\t$format_str\n\tcall\tprintf\n/
	p

	s/^.*$//

}


/^$/! {
	s/^.*$/parse error/
	p
	q
}

:end

$ {
i\
\	leave\
\	ret

	g

	# ラベルの削除

	/^0/! {
		s/.*/unmatch if - endif/
		q
	}

	/^0$/ b outvar_loop_end

	s/^0\n//

	h

	s/.*/.data\nformat_str:\t.string\t"%d\\n"/
	p

	# シンボルテーブル出力
:outvar_loop_begin
	g

	/^outputed_[A-Z]\+\n/ b outvar_loop_end

	/^\([A-Z]\+\)\n\(.*outputed_\1\)/ {   # 出力済み
		s//\2/
		h
		b outvar_loop_begin
	}


	g
	s/\([A-Z]\+\)/\t.size\t\1, 4/
	P
	g
	s/\([A-Z]\+\)/\1: .long 0/
	P
	/.long 0:$/ b outvar_loop_end

	x
	s/^\([A-Z]\+\)\n\(.*\)$/\2\noutputed_\1/
	x

	b outvar_loop_begin
	

:outvar_loop_end

	d

}
A = 10
B = 100

IF A <> 10 THEN
	B = 20
ENDIF

PRINT B

こういうのが

.text
.global  main
main:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$8, %esp
	andl	$-16, %esp
	
	movl	$10, %eax
	movl	%eax, A

	movl	$100, %eax
	movl	%eax, B


	movl	A, %eax
	movl	$10, %ebx
	cmpl	%eax, %ebx
	je	1f

	movl	$20, %eax
	movl	%eax, B

1:


	pushl	B
	pushl	$format_str
	call	printf
	leave
	ret
.data
format_str:	.string	"%d\n"
	.size	A, 4
A: .long 0
	.size	B, 4
B: .long 0

こうなる。

もっとBASICっぽく、FOR-NEXTとか、INPUTとか入れてから公開しようと思ってたんだけど、 明日までやる気が続く自信が無かったので、もういいや。

とりあえず今は代入とIF文だけ。算術演算は一切できない。 とにかく、変態sedスクリプトが書きたかっただけで、特に意味は無い。 勉強になったことはsedの正規表現では繰り返しの'+'はバックスラッシュでエスケープしないと いけないこととか、その程度。

で、sed 変態で ぐぐったTuring machineコンパイラを実装しちゃってる話 とかがあっさり見つかって、意外と変態sedスクリプトは流行なのかもしれない、と思った。

あと、最近、「XMLはHTMLの綺麗なバージョン」程度の認識では、 少々困ったりするかもしれない、XMLは僕が思ってるよりずっと便利かもしれない。 とか、思った。あんまり関係ないけど。

04_07_23


前回のはそれなりに楽しんでいただけたようで、 書いた本人としては嬉しいかぎりです。

日本の変態sedの第一人者(かどうかは知らないけど)である sin-x氏からも 変態的sed使い として認められたので、これからも頑張っていきたい…とかはあんまり思わなくて、 どっちかっていうと、むしろもうしばらくsedは見たくないというか。いいのか。それで。

とにかく、全部の機能を駆使しないとまともな物が作れない== それなりに動くっていうことは全部の機能を駆使してる。 「自分はすごいぞ…」って思いながらプログラム書けるっていうのが 楽しい部分なんじゃないかと思います。僕の場合だけど。

あと、高級言語っぽいサブルーチン呼び出し機構なんですが、 :return ラベルとパターンマッチを利用してやるっていうのはどうでしょうか。


...

P
D ← ここにDを入れとく

:return


/^^/ {    # これはマッチしないように
:hogehoge

	...
	s/^/hogehoge-ret-label\n/   # ラベルのプッシュ
	b sub
}

/^hogehoge-ret-label\n/ {
	... # なんか続き
}


/^^/ {
:sub
	...  # なんか
	b return

}

こうやっておけば、戻りラベルの管理が呼び出し部分の付近で行えるようになるので return をサブルーチンにするよりも少々楽なんじゃないかと思います。 ラベル生成するスクリプトをawkで書くっていうのも非常にイカれてて素敵だと思いますが。

で、あとはsetvar、getvar作ったりすれば、便利になる。と思ったんだけど、 さらにわけわからなくなったりとかでアレ。

a=10
p a

ってやると、aの値を吐いてくれるっていうサンプル

--escape--が見苦しかったり、変数の値を上書きする部分を諦めていたりとかするので、 実用には耐えない。

04_07_24


前回(23日分)のは今日の午前4時半くらいに書いてます。 で、今が午前4時くらいです。意味がわかりませんね。 まあ、今日は午前4時が二回あった、ということで。 一回も寝てません。眠いです。

僕の一日っていうのは、睡眠区切りなもんで、たとえ何時になっていようと、 起きている限り、それは同じ日であるとされます。 じゃあ、23日分の更新は日付がおかしいんじゃないか、という話なんだけど、 それは、まあ、本当だったら、そこからもう一度寝る予定だったんだけど、 なんか起きてて、そのままって感じで。

まあ、要するに、起きてから24時間突破しそうです。で、僕の日付区切りは 睡眠区切りなので、今日は24時間あった、ということになるわけです。

結論: 一日は24時間である。あと、眠い。


f:
睡眠区切り、同じです。なんだか得した気分になるんですよね(違
wo:
けど、長い一日の次の日は短くなったりするので実際は得しない罠

04_07_27


フレミング左手の法則は、右手か左手かわからなくなるうえに 親指からか中指からかわからなくなるというアレ。

「どんぐりころころ」の唄って 非常に悲しい終わりかただったようなことを思い出した。

調べればすぐ出てくる。ぐぐるさんは便利だなぁ…

--

全然わからない

と、言われてしまった。

確かにあれでは説明になってないか…。 技術っぽい文章のときはそれなりにわかるようにしてたつもりなんだけど、 今見たら全然だなぁ…というか、説明なんて全然書いてないじゃないか。

ただ、ひとつだけいいわけさせてもらうならば、sedプログラムでは 簡単でわかりやすい例っていうのが簡単には思い付かないっていうのがあったりなかったりで、 次からは気を付けますorz。

--

最近、会社でVC++でプログラム書いたり、家でWinAPI叩いてたりで、 Windowsばっかりだ。

Windowsのサブシステムの機構をうまく使えば、 WindowsネイティブでLinuxアプリケーションを動かすとかできそうだと 思うんだけど、どうだろうか。サブシステムがなんなのかいまいちよくわからない。 サブシステムってドライバ書く能力があるんだったら個人でも作れるものなのだろうか?

Wineは、ただ単に使うだけじゃなくて、WINAPIの仕様とか、 内部事情とか調べたりするのにも役立つんじゃないだろうか、と思って、 ちらっとソース見たけど、あんまりわからなかって、なんか駄目だなぁ… VC++のインテリ補完が素敵だ。けど、キーバインドがWindowsなので、 どうしても受け入れられない。


はやまだす:
Windows Services for UNIX(SFU)って、まさにそういうものだと聞いた記憶があるんですが…
違ってたら、すみません。
http://www.forest.impress.co.jp/article/2004/01/16/servicesforunix35.html
wo:
あー、いや、ソースコードが使えるとかではなくて、LinuxのELFバイナリを直接実行できたりしないのかぁ…って、思ってるだけです。
DOSのexe実行して、それでシステムコール割り込みなんとかできるんだったら、Linuxも同じようにできるんじゃないのか、って感じで。
e1101:
久しぶり.本文とは,全然関係ないけど,できることをできないという講師を何とかしてほしい.「`<' は,続けて使えないので `&&' を使いましょう」って,いつからC言語は,そんな親切になったんだ? というわけで,なんとかしてくれ(ToT)
はやまだす:
なるほど、失礼しました(汗)
f:
SFUは、Interixサブシステムだった気がします。Windowsのサブシステムは僕もおもしろそうだと感じたんですが、日本語の情報が少なくて結局調べてないです。話題が Deep な Advanced Windows っていう本にも載ってなかったし。
wo:
「WindowsOS内部アーキテクチャのすべて」にも触りぐらいしか載ってなかった

やっぱりデバドラ関連の資料見ないと載ってないかなぁ…
さすがにそこまで調べられるほどWindowsに愛は感じない。

04_07_28


蜘蛛の、蜘蛛の巣作ってるときの姿を見て、 こいつら頭良いなぁ…とか思うんだけど、 巣作りに熱中するあまり(?)すぐ隣を歩いてる 小さい虫とかを無視しているっていうのは、 手段と目的が逆転してるっぽくて、素敵だと思う。UNIX使いの素質があるんじゃないかと思う。

なんか、蜘蛛の話ばっかりなんだけど、そのぐらいに、 蜘蛛がいるので見逃してください。

参考World Wide クモの巣

--

変な時間に寝る癖が付いてしまった…

--

比較演算子'<'は続けて使えない。

その人は昔、


if ( 0 < value < 31 ) {  /* value が 1〜30だったら */
	...
}

っていうふうなコードを書いてしまって、痛い思いをしたから、 「範囲指定する時はちゃんと'&&'使ってね」 って言いたかっただけなんではなかろうか。とか言ってみる。

ようするに、その人にあんまり責任は無くて、C言語の方に責任があるわけだ。

C言語はこの世界に貢献した点も多いけど、 悪い影響もそれなりに大きいんじゃないかと思う。

まず、C言語っていうのはそんなに使いやすい言語ではない。それはなんとなく感じるはず。 けど、Cが、ある意味デファクトスタンダードになっているので、 プログラミングの世界全体で、「使いにくい方が標準」 になってしまっている部分があるわけだ。

「C言語がこういう実装になってんだから、これは普通じゃないか。」

っていう感じ。例えば、 さきほどの"0 < x < 31" っていうのは、プログラムを書いたことの無い人からすれば十分正しいコードだし、むしろ、 0とxの比較した結果を数値に変換して、それと31とを比較っていうほうが不自然なんだけど C言語の実装に慣れてしまっているから、不自然なほうが自然と感じてしまうわけだ。

あと、文字列が文字単位よりもバイト単位のほうがしっくりくるとか、 整数割る整数はいつも整数だとか、他色々。まあ、どれもC言語が最初ってわけじゃないけど、 特にオチも思い付かないのでC言語の責任にしておく。 僕はC言語大好きだけど。

--

SFUってサブシステムだったのか…

あんまり話題を聞いたことがないんだけど、Windowsのサブシステムっていう機構は それなりに興味深いシステムなんじゃないかと思う。

僕の解釈が間違っていなければ、あのシステムっていうのは、 OSとしては絶対に外せない本当にコアの部分(スケジューリングとかデバイスドライバ)、 と、OSとしての個性がある部分(システムコールとかのインターフェース) を分離して、その分離したものをサブシステムとし、 そのサブシステムを複数動かすことにより、いっこのコンピュータで 複数のOSを動かすっていう感じになっているはずだ。

で、このへんをうまくごにょごにょやれば、たとえば、昨日言ってた、 Linux-ELFサブシステム以外にも、BSDも動いちゃったり、 もっと色々やって、MAMEサブシステムとか作って、アーケードゲームが ネイティブで動いたり、PC/ATサブシステムとか言って、 ブートフロッピーイメージを直接実行できて、もはや、PC/ATエミュレーター とか、そんなんもできるんじゃないかと妄想したりもする。

詳しいことはよくわからんのだけど、OSASKのエミュレータ機能っていうのは、 Windowsでもできるんじゃないだろうか。OSに深い人的に、 サブシステムは面白い機能なのかどうかっていうのを聞いてみたい気もする。

04_07_31


特に何も無い。このごろ。

会社で、研修と称して好きなようにプログラム書いてもいいっぽかったので、 適当に書いてたら、なんか趣味で書いてるプログラムと大して変わらないものが できてしまって、結局OpenGLとかで遊んでるだけだったし、 これでええんかいな…とか、思った。

あと、あまりのコメントの少なさに指摘を受けてしまった。

これは、僕の超適当ボトムアップインクリメンタル開発モデル(なんじゃそりゃ) に問題があるのではないかと思う。

  1. まず、開発するものを決める。で、適当に脳内で処理を分解。
  2. で、その分解された中で、最も技術的に問題ありそうなところを決める。
  3. その部分を、さらに分解。で、同様にその中で、問題ありそうなとこを決める。
  4. だいたい小さくおさまる気がするところまで繰り返す。
  5. その部分からコード書き始める。(認識が正しいか確認する方法が無いので実際動かさないと何もわからない)
  6. もちろん、一発では動かない。大幅修正
  7. だいたい動くようになるまで繰り返す。
  8. で、それで完成されたもののインターフェースにあうように周りを作る。
  9. 適当にしかインターフェースが決まっていないので修正の嵐。
  10. 直す。繰り返す

てな感じで、とにかく、修正しまくるようになっているので コメントを入れてもすぐ無駄になってしまうので書く気がしない で、修正が少なくなって安定してきたときは、すでに最低でも2レベルは高レベルのモジュールを 書き始めている状態なので、もはや、そんな下層レベルのところに コメントを入れようとする気が起こらない、と、いう感じだ。 いいのか、それで。

--

schemeでなんか書こうとしてみるも、勝手が全然わからない。 emacs lispとは感じが違う、というか、emacs lispは ドキュメント調べるのが楽なんだよなぁ…。ああいうふうにはいかないのか。

あと、サンプルプログラムとか、ライブラリのソースとかがあんまりわからなかったりで、 思ったよりも時間がかかりそうだ。

中途半端なLISP知識は捨ててSICP読んで出直してこいということか。 でも、SICP日本語はあんまり評判良くないんだよなぁ…まあ、そのへんは を読めということか。でも、英語は読めないんだよなぁ… 中途半端な英語知識は捨てて、本場行って勉強してこいということか。

もう、なんか、どうしたらいいかわからなくなってきた。眠いので寝る。