Sponsored Link

メイン

2008年05月20日

ThinkPad Phoenix 到着!(21日追記付き)

ThinkPad Phoenix

ThinkPad Phoenix

さてさてさて、サイオ・キャノンの発動はなかったし、かといって照準は取れたし満足すべき結果だろう。「人殺し!」とは言われたくないからね? さて、念願通り神様から休暇が与えられた。

今日のメインディッシュは、今日届いたばかりの ThnikPad R61e "ThinkPad Phoenix"。

はっきり言って、レノボのデスクトップや、レノボオリジナルのノートパソコンなど買う気がしないが、レノボになろうが ThinkPad は ThinkPad。キーボードの質感も良いし、久しぶりに触るトラックポイントはやはり優れものだ。デザイン的にもアップルを含めて、ノートパソコンの中では ThinkPad が一番良いんじゃないだろうか。

15.2インチ液晶ディスプレイは 1280x800pixels とかなり横長だが Windows Vista のガジェットが右に列んだデスクトップを観るとなかなか良い。なんと言ってもアナログの時計が付いてくることが一番嬉しい。デスクトップの壁紙にはレノボの黒ベースの壁紙を設定。なかなかそそるデスクトップに仕上がった。

続いてすでに納入されていたインテルの無線 LAN カードをキーボードを外して付けたが、全くインターネットに接続できない。困り果てたあげく、レノボのサポートに電話したが、無線 LAN のアンテナに結線していないことに気がついた。いやいやいや、うっかりだったねえ。久しぶりだから忘れていたよ。で、白と黒のアンテナケーブルをカードに付けているところなのだが、白い方は比較的あっさり付いたのだが黒い方がいくら努力しても今のところ付いてない。黒は俺の色なのに(苦笑)。

JIS のキーボードは右シフトが1つ分遠いのは何とかなるがバックスペースが1つ分遠いのがいただけない。まあ、そのうち US 配列のに取り替えるさ。俺は過去に ThinkPad を3台持っていたが、故障した試しなど無いのだから。

企業向けの省スペースなパーソナルコンピューターのソリューションとして、この、ThinkPad R61e はお勧めできる。画面サイズはビジネス用途に十分だし、持ち運びも出来る。米国ではこれより小さい画面サイズではいくら持ち運びが出来ても魅力的ではないだろう。その点、R61e は優れたソリューションだ。DELL ははっきり言って(父向けのパソコンの)選択として後悔しているし、やっぱり、ThinkPad がビジネスソリューション No. 1 だ。

しかし、Windows XP の本来の GUI のデザインは最低だったが、Vista の GUI 周りのデザインを担当したデザイナーはマイクロソフト社員にしては良い仕事をしている。少なくとも Mac OS X よりまともだ。NeXT STEP はデザインが良かったんだけれどねえ。

5月21日追記:

何とか、無線 LAN の黒い方の結線ができた。コネクタへの装着の強さが怪しいのだが、まあ、ThinkPad を落下させない限り大丈夫だろ。無線 LAN の開通も確認。

そうそう、すでに訂正したが、Vista の右に来るのは「ヴィジット」ではなく「ガジェット」だったね。

……。さてさてさて、Yahoo! ツールバーをインストールして、IE7 がすっきりした。Yahoo! Japan のニュースのウィジェットをデスクトップに常駐させなかなか案配がいい。これだけは、Google 製だね?、と言う Google Earth を導入。しかし、米本国に大軍港があったのには気がつかなかった。あそこに照準を定めると民間に相当な犠牲が出るからなあ。イタリアにも米海軍の軍港があるという話だし。まあ、明らかな侵略行為であるグァンタナモ湾米海軍基地をターゲットにしておくだけでとりあえずは止めようか。

2008年05月16日

ソフトウェア・レビュー(源氏物語追記付き)

俺が使っている ATOK 16 をアップグレードしようとしたら、「一太郎2008 特別優待版」(ATOK もしくは Word のユーザーなら特別優待版の対象となる。)が、アマゾンで 8,432円だった。思わず買ってしまい、その後でお試し版をダウンロードしたのだが、なかなかよろしい。

ビジネスシーンだともはや Microsoft Word の優位が崩れることはない。しかし、過去、日本国内で MS-DOS 全盛期には「ワードプロセッサー」と言えば「一太郎」と相場が決まっていた。

ダウンロードして評価したのは、原稿用紙モード。まあ、原稿用紙のテンプレートを読み込んで、それから文章を書くのだがかなり良い。昔、マックで「たまづさ」と言う原稿用紙ワープロを使っていたのだが、「たまづさ」の愛好家だったら、「一太郎 2008」は、お勧め出来ると思う。Word はデファクトスタンダードとはいえ、日本に特化したソフトではない。一方、一太郎は日本人が使うことを前提に作られている。少なくとも物書きには嬉しいソフトだ。また、そんな凝った Word の使い方をしなければ、一太郎 2008 で Word ファイルをほとんどレイアウトを崩さずにインポート出来、Word に対してもほとんどレイアウトを崩さずにエクスポート出来る。ジャストシステムには是非マック版の一太郎を再び作って欲しい所だ。その時は Windows 版のユーザーには特別優待サイドアップグレードのパスを作ってくれれば最高だ。

次に、買ったのが、「CorelDRAW Essentials 3 日本語版 特別優待版」(Word を持っていれば、アマゾンで 6,703円だ)だ。CorelDraw と言うと「使えないドローソフト」というイメージが強かったのだが、内部でレンダリングエンジンを持ち例えば 2mm の線ならどの方向に引いても 2mm になる。ユーザーインターフェイスは独特で、最初、綺麗な矢印の作り方が判らなかったが、何のことはない、ツールバーに始点終点の形状を決める項目があり、矢印のプリセットパターンから簡単に選べる。Illustrator と違い、直線なら自動計算して、例えばフローチャートのボックスへぴたりと矢印を付けることが出来る。残念がなら曲線はずれてしまい、編集も現時点でエレガントにすることは無理だが、例えば「フローチャートを作る」といった目的には「インタラクティブ・コネクタ・ツール」が非常に便利で、ビジネスマンやエンジニアが使うのにはもってこいだろう。もっとも、評価自身はダウンロード出来るのが CorelDRAW X3 と言う高価なバージョンなのだが、さすがにこの辺の機能は CorelDRAW Essentials 3 でも削っていないだろう。Corel には「CorelDRAW Essentials」のマック版を作って欲しい所である。X3 は Illustrator と競合してしまい、プロのデザイナーなら Illustrator を選択するに決まっているから、X3 のマック版を作るのは Corel の利益にならない。アップルに問い合わせた所、マックユーザーの中で低価格で使えるドローソフトの需要は少なくなく、CorelDRAW Essentials のマック版を作るのは利益にかなうだろう。

続きを読む "ソフトウェア・レビュー(源氏物語追記付き)" »

2008年05月09日

チベット語とコンピューター関連の話し(「源氏物語」感想付き)

対中華人民共和国については、十分に情報をさらしており、なおかつ、様子見の要素が多いので新たなエントリーを作る。話題はウェブ上でのチベット語とコンピューターにまつわる話だ。

実は ThinkPad Phoenix 向けに、そろそろ、アドビの製品をアップグレードしようとしたら、Acrobat 4 が Acrobat Standard 8 のアップグレード対象から外れていた。寝耳に水で大顰蹙だったが、「アップグレードは3世代目以前まで」と言うアドビの公式発表が一昨年あったそうだ。そんな話聞いてないぞ!(怒) アドビと言えば古いマッキントッシュの時代に「どんな古いバージョンからでもアップグレードする」と言う最高にクールな美点があった。

慌てて、手持ちの Illustrator 10 を調べたら、ギリギリで Illustator CS3 にアップグレード可能と言うこと、早速アップグレード版をアドビストアで購入した。ヨドバシ・ドット・コムでは単体で販売していなかったからだ。Acrobat は購入した物のほとんど使ったことがなかったので必然性が出てきてから最新版を購入すればいいだろう。Illustrator は使用頻度は少ないものの唯一の「使えるドローソフト」なので外せない。

Mac Phoenix を考えるとき Photoshop Elements の最新版は 8,600円程度でバンドル可能なはずであるが、Illustrator の Mac 版は由緒正しき 5.5 しか持っていない。故に糞高いお金を払って Mac 用の Illustrator など買えない。

Mac に置けるチベット語環境を調べたが、MacOS X Leopard に大谷大学が開発したチベット語システムが標準搭載されているが、ウェブ上でのフォントとしては Microsoft Himalaya とアルファベットの大小の互換性が無く問題があった。しかし、Microsoft Himalaya 自体 Open Type のフォントであり、アドビの「OpenTypeに関する FAQ」から、「Macintoshを使っています。WindowsシステムからOpenType(.otf)フォントを受け取りましたが、ジェネリックアイコンが一緒に表示されます。 これを修正する方法はありますか?」と言う項目で、個人の自己責任で Microsoft Himalaya を Mac 用に変換出来る。これで、俺のチベット語のホームページは Mac でも、正常に観れる訳だ。

Adobe - フォント:OpenTypeに関するFAQ(日本語)
http://www.adobe.com/jp/type/opentype/qna.html

OpenType Q & A (English)
http://www.adobe.com/type/opentype/qna.html

……。今、マイクロソフトから、Windows Vista の各エディションに Microsoft Himalaya が入っているかどうか、返答が来た。すべてのエディションで Microsoft Himalaya が入っていると言うこと。ただし、ThinkPad R61e の Home Basic には、Microsoft Himalaya は入っておらず、パソコンショップなどの情報を総合するとプリインストール版の Vista ではメーカーによってばらつきが生じるようだ。故に確実に Microsoft Himalaya が入るのは、パッケージ版の Vista のみと考えられる。

続きを読む "チベット語とコンピューター関連の話し(「源氏物語」感想付き)" »

2008年05月08日

ThinkPad Phoenix

ThinkPad Phoenix

ThinkPad Phoenix

悪いな、ジョブズ、レノボのだが ThinkPad R61e をオーダーしてしまったよ。何せ、OS こそ、Window Vista Home Basic だが、コンボドライブ+ 1GB RAM で WI-FI のオプションを付けて 75,810円なんだもの。現在、保証は効かなくなるが修理パーツとして英語キーボードがあるか問い合わせ中。無かった場合、一応、オーダーはペンディングにするように指定しているのだが、英語キーボード無しでも欲しい価格だ。なんと言っても「レノボ製」と言っても日本 IBM で ThnikPad を作った誇り高いエンジニアの設計の筈だからな。なんと言ってもトラックポイントが嬉しいの一言に尽きる。これには ThinkPad Phoenix と名付けた。

Mac Phoenix。79,800円で出来るはずだよな?、ジョブズ!!

続きを読む "ThinkPad Phoenix" »

2008年05月07日

チベット語のブログホームページ開設(8日追記付き)

Movable Type 4 を使ったチベット語によるブログのホームページを作った。と、言っても、公開型チベット語学習向けである。

現在、このホームページは Movable Type 3 で運用しているが、商魂たくましい Six Apart が「個人向け非商用追加1サーバー・ライセンス」など作らない、と言ってきやがった!(怒) そこで、Movable Type 4 の FAQ で「MT4出荷後もMT3を使い続けられますか?」との問いに「使えます。プログラムのダウンロードは2008年7月31日までとなります。」と答えていることから、このサイトで MT3、新規サイトで MT4 は「合法」と決定した。この決定に不服なら、「個人向け非商用追加1サーバー・ライセンス」を 9,800円(高くても 12,800円。)でリリースしやがれ、Six Apart! それまでは、俺が MT を使ってやっている「宣伝効果」でライセンス料は不用とする。

さて、出来上がった、チベット語のブログホームページなのだが、まだ、フォントの大きさ等の調整が残っている。なおかつ、何もしないで現状で正確にチベット文字を表示出来るのは Windows Vista のみ。ルートディレクトリの index.html に「Before To Read My Weblog」と言う項目を上げて、Windows XP をサポートしたいのだが、後回しだ。サイトの名前と URL は以下のようになる。

Steve Johnson's Free Tibet
http://www.free-tibet.me.uk

続きを読む "チベット語のブログホームページ開設(8日追記付き)" »

2008年05月03日

Mac Phoenix & Palm TungstenE2 (7日追記付き)

本稿では、Mac Phoenix と Palm TungstenE2 のまわりのことについて書かれる。都合により、本文は more の中に書かれる。

続きを読む "Mac Phoenix & Palm TungstenE2 (7日追記付き)" »

2008年03月14日

Fun To Touch - Sony mylo

mylo

今日、楽しみにしていた Sony mylo が来た。ウェブブラウザの現時点での作りでは iPod touch の Safari の方が操作性の意味で優れるが、mylo は Skype を使用出来、複数人数でボイスチャット出来る Skype にすっかりはまってしまった。mylo を使えば、ベットに寝そべりながらでも Skype でボイスチャットが楽しめる。iPhone は所詮1対1の通話しかできない。

ウェブブラウザに改善の余地がある物の現時点での mylo のクオリティーは MMX の基準を満たす。mylo は MMX が現時点で "Fun To Touch" を保証する唯一のインターネット・デバイスである。

mylo が来る前に PDA 的な機能がないのを気にしていたが、はっきり言って mylo の "Fun To Touch" には、そのような機能は似合わない。’その位、面白いデバイスである。

なお、"Fun To Touch" は MMX の商標であり、ソニー株式会社のみに無料で商標の利用が許可される。ただし、MMX が "Fun To Touch" を保証した製品に限る。

はっきり言って、ソニーにとって mylo とは「21世紀の Walkman」である。トップエンジニアを総動員し、ハードウェアとしての性能を上げるべきである。

さてさて、ウェブメールが俺の大嫌いな Gmail が標準であったが、見事に消してやったよ! アカウントは最近取ったばかりだが、俺の使うウェブメールは Windows Live Hotmail である。Mircosoft に買収されたが、Classic Hotmail がウェブメールの本家である。ついでに言うと、俺は検索エンジンに Google なんて使うこと、まず無い。日本国内だと Yahoo! Japan、ワールドワイドだと Yahoo! が常識だろう?!

さてさて、MMX "THE BASIC" に大幅な仕様変更を持たせる必要に迫られたなあ。大幅な仕様変更とは、「ネットワーク指向インタープリタ」である。故に嫌でも Java を使う必要がある(問題は、僕が要求する「ネットワーク指向」に Java が耐えられる言語かと言うことだ。)。それと、MMX の新たなるソフトウェア MMX "IS" の構想も思いついた。何をするソフトなのかは秘密である(笑)。

……。俺が必要としている「ネットワーク指向」とは P2P なのだから、JXTA を使う必要があるのか。俺が作ろうとしている、新たな仕様の MMX "THE BAISC" とは P2P のネットワーク指向を持つプログラム開発環境なのだから。

まあ、俺の中の優先度では MMX "IS" の方が先だ。これも P2P のソフトウエアである。

2008年03月08日

Sony 携帯端末 "mylo"

Sony mylo

Sony "mylo"

今晩、久しぶりに会社の先輩に電話をかけた。プライベートなことは書かないが、話題になったのが、先輩が係わっている、ソニーの携帯端末 "mylo" (写真上。ブラック。)だ。

世間ではあまり知られていないだろう。Linux カーネル上で、ソニー独自のフレームワークで動作するそうだ。現状で SDK は米国向けのみに恐らく Java の形で公開されていて、日本ではサポートされていないらしいが、引き出し式フルキーボードが付いてくる mylo に興味を引かれ、値段も 34,800円と言うから即決で買った。

何せ、mylo の偉い人が僕の元チューター(新入社員の面倒を見る係)なのだ。僕が提案を先輩に出せばさらに良い mylo が出来るかも知れない。

そもそも、僕のソニー入社時点での配属希望は携帯端末だったのだから、半ば 13年の歳月を経て希望が叶うことになる。

おい! ジョブズ! お前には負けないぞ!!(激) 俺にはまだ、エス・オー・エヌ・ワイの血が流れているんだよ!!

同日追記:

Microsoft が Windows と Office のソースコードをオープンソースにする話が新聞で「いい話」として持ち上げられているが、アフォと違う?

Microsoft が例えば、GNU MS-Windows を無料で PC メーカーにプリインストールさせて、PC メーカーは Microsoft に一銭も払わなくても、GNU MS-Office を無料ダウンロード出来るようにしても良いって言うはず無いだろう?

今回の「オープンソース」(俺は「オープンソース」という言葉が嫌いだ。"GNU's Not Unix" が当たり前の時代に育ったからな。)事件の背景は端的に言って Microsoft が Windows や Office のバグやセキュリティーホールの多さに破綻し、「オープンソース」と言う美しい言葉を使ってハッカーをこき使って「無料で」バグ取りやセキュリティーホールの対策をさせようと言う、「商魂」にしか過ぎない。

そして、GNU を初めとする、まともなハッカーは、そのソースコードなんて脳味噌がウイルスに汚染される可能性があるから絶対に観ないだろう(爆)。

得をするのはネットワーク犯罪者「クラッカー」の皆さんと、セキュリティー対策ソフト制作会社(例えばシマンテック)位の物だろう。

はっきり言って、Microsoft のソースコードを観ていじろうと善意で(利益付きでも)観るには「プロフェッショナル」である必要がある。技術的な意味合いだけではなく、「仕事」という意味で「プロフェッショナル」である必要がある。例えばシマンテックのエンジニアだ。

全く余計な汚物をネットに流しやがって! 糞ゲイツ!!(怒) お〜い、ボブ・ディラン。生きているのか知らないが、生きていたら「追憶のハイウェイ61」の続きの歌詞が書けるぞ!(笑)

ええい、俺が書いちゃる! 歌詞カードが無く、リスニングなので英語として間違っている所があるかも知れない。

Oh, the *Gates* said to a hacker "Touch my code."
The hacker said "May me must be put me on?"
The *Gates* said "No", the hacker said "What?"
The *Gates* said "You can do which, wan't it."
"But the next time see the *gates*, come you better run."
"Jesus", the hacker said "Please tell me where I can touch it."
Jesus said "You can *only* do it on Highway 61."

追加の歌詞が出来たぞ!

Well, the Microsoft engineer asked *Gates* the King:
I got yellow, red, blue bugs cannot be fixed then,
And thousands functions that don't work.
Do you know I can get it little *bit* things?
And *Gates* the King said:
Let me a think for a minute soon?
Any says:
Yes, I think can be easy it done,
To hide everything down under Highway 61.

2008年02月17日

Palm Tungsten E2 "Hello, world."

Hello, world.

"Hello, world" on Palm Tungsten E2

今朝、頼んでおいた Palm Tungsten E2 が届いた。早速、Palm 用 "Hello, world." プログラムをホットシンクしインストールして実行したのが上の画面。何となく楽しい。これから期待出来そうである。

ついでに今日届いた AMG の漆黒の Zippo の写真を:

Hello, world.

Zippo AMG Black

Palm Tungsten E2 用のソフトを物色していて気に入ったのが、"MSDict Concise Oxford English Dictionary and Thesaurus" (写真下)。"MS" と言ったってマイクロソフト製じゃない "Mobile Systems, Inc." 製だ。ミレニアムウェブスターと比較してこっちの方がクールなアプリケーションだった。比較したのは、お試し版を使える PalmOne のウェブサイトで購入出来る物。MMC のウェブスターだと、SD カードと同時に入らなく、例えば RealPlayer による音楽の再生と英英辞典の両立に不満がある。また、Oxford の英英辞典でも日本でパッケージ販売している物のスクリーンショットを観たが PalmOne で手に入る物の方がエレガントである。

MSDict Concise Oxford English Dictionary and Thesaurus

MSDict Concise Oxford
English Dictionary and Thesaurus

ちなみに、現状で英語版 Palm で日本語の表示入力を行う J-OS に手を出す気はさらさら無い。iPod touch がそうであったように、携帯端末の日本語入力は「予測変換」であろう。Palm 社に期待したい。

2008年02月16日

Palm Tungsten E2 購入決定

Palm Tungsten E2

Palm Tungsten E2

昨日、Palm m105 のオークションの入札に乗ったが、落札出来そうもないことが判り、Palm Tungsten E2 の購入を決定した。

m105 と違い 320x320pixels のカラーハイレゾ画面で、ウチに届くのが楽しみである。

それから、NS BASIC で「Print "A = " + str(A)」との記述形式だが、旧式の BASIC の規定で問題なかったな。

10 LET A$ = "Steve"
20 LET B$ = "Johnson"
30 PRINT A$ + " " + B$
40 END

で、問題ない。BASIC をいじっていたのが小学生頃なので忘れていたよ(笑)。

なお、稼働率が下がっていた、NINTENDO DS Lite と DS 用ソフト一式を中古に出した。Palm Tungsten E2 の購入資金の足しにするつもり。また、iPod touch も売却を考えている。もともと、iPod touch を買った理由は、「携帯音楽プレーヤー」だったからではなく、「携帯可能なコンピューター」だったのであるが、いつまで経っても Apple が SDK を公開せず、開発環境が整わないからだ。

iPod touch のスクリーンが 640x480pixels、Palm Tungsten E2 のスクリーンが 320x320pixels。多少差はあるが、Palm の場合、スクリーンを犠牲にしない、確実で早い認識の手書き文字入力があり、開発環境が整っているので僕としては Palm の方が魅力的なのだ。iPod touch を買ったのも、もう Palm デバイスって新品では売っていないとの誤解から来たことも大きな理由だ。

2008年02月15日

Palm PDA と NS BASIC

Palm m105

Palm m105

ネットのオークションで Palm m100 をあさっていたら m105 の入札に乗ることが出来た。競り落とせると良いのだが。iPod touch も良いのだが、「モノクロ液晶」、「乾電池駆動」と言うのは HP200LX の経験から、一番安心して長く使える。

購入の目的は Palm 上で動く BASIC インタープリタの実装で、開発環境としては未知数ではあるが、値段が手頃な NS BASIC の購入を手配した。m105 が落札出来なかった場合、現行で販売されている Palm TungstenE2 (英語版)の購入を考えている。

NS BASIC 版 "Hello, world" プログラムデモ

いやいやいや、早速、NS BASIC の試用版をダウンロードして "Hello, world" プログラムを作ってみた。いやいやいや、やっぱり、BASIC は楽しいねえ〜! へぇ〜! 「PRINT "Hello, world."」とコーディングするとこう出るのか。楽しい楽しい。

続きを読む "Palm PDA と NS BASIC" »

2007年11月14日

iPod touch を買ってきた

My iPod touch with ATH-CK7

My iPod touch with ATH-CK7

一昨日、Apple に iPod touch のオーダーを出したのだが、オペレーターがクレジットカードの認証が通った、と言ったにもかかわらず、僕のこのごろの買い物の多さで実はクレジットカード認証が通ってなかった。「代引きで直ちに遅れ!(怒)」と言っておいたが、ラオックスに iPod touch 16GB の在庫があったので、Apple Store のオーダーをキャンセルし、早速購入した。ちなみに付属のインナーイヤーヘッドフォンの音質なんて知れているし、本体が黒なのにヘッドフォンは白なのが気に入らなかったので、オーディオテクニカのインナーイヤーヘッドフォン ATH-CK7 (ブラック)を同時に購入した。お店で開封してプラグがストレートではなくソニー式の鍵型だったが、今、付けてみてなかなかしっくり来ている。やっぱり、一般的なヘッドフォンやインナーイヤーヘッドフォンはオーディオテクニカに限る。まあ、ATH-CK7 は高域の抜けやアタック感が今一といった所だが、中域から低域はパワフルで素直な音色に仕上がっていると思う。(一般的ではないが、一度潰れた前の STAX のコンデンサータイプのヘッドフォンの音は死ぬ程好きだ。)

内蔵の Safari でこのページを確認したがちゃんと拡大して表示出来るのでなかなかの物だ。例のドラムのサンプル音源を WIFI で聴いてみたよ。

実は iTunes Store でゲームを購入したのだが、iPod touch に対応していないと後から聞いて怒り心頭である。下位互換性ぐらい持たせろよ?!(怒) 600円損したぞ!、ジョブズ!!(激)

後、SHOW-YA の「私は嵐」(ウィキペディア日本語版でこの項目は荒らしにあって、凍結中みたいだ。「私は荒らし」ってが?!(笑))は iTunes Store から購入したが、ジャケットの写真がでるんだな。手持ちの CD から変換した物にはジャケットの写真(技術的にはジャケットの写真を付けることは簡単なはずだ。)は付かない。馬鹿野郎! ジョブズ!!(激)

ちなみに、MMX "THE BASIC" Moble は Java アプレットとしては決して作らない。"Wrote Once, Use Anywhere"、つまり、Mac 上でも動くって言うことだからな。ちゃんと仕事("Job")しろ!、ジョブズ("Jobs")!!

I never make MMX "THE BASIC" Mobile by Java because that means Macintosh can execute MMX "THE BASIC" Mobile, Jobs!!! This is written by Safari running under my iPod touch... It seems that the Safari cannot support Japanese!! Remember Pearl Harbor!!!

15日追記:

iPod touch、CD から落とした曲でも iTunes 上のメニューからアートワークを読み込むことが出来るんだな。ジョン・コルトレーンの "A Love Supreme" を早速 iPod にダウンロードしてアルバムのジャケットが表示されることを確認した。しかし、僕が持っているオフコースのジャケットは用意がなかったようだ。まあ、これが出来て普通だと思うがね? ジョブズ。

そうそう、僕がライン録りしたギターの録音はオーディオテクニカの ATH-A700 と USB オーディオ・インターフェイス EDIROL UA-20 で聞いた限りはまずまず聞けるのだが、iPod touch + ATH-CK7 だとディストーションがかかりすぎで顰蹙だ。自室にモニタリング用のアンプ+スピーカーなんて置けないし、まあ、iPod touch + ATH-CK7 で音が良かった物に置き換えようか。

15日追記2:

レッド・ツェッペリンの「IV」を CD から iTunes にダウンロードして、アートワークをダウンロードしようとしたが、用意がないと言われた。しかし、iTunes Store には "Stairway to Heaven" のダウンロードで「IV」のジャケットがちゃんと用意してある。大馬鹿野郎! ジョブズ!!(怒) ゲイツ君はジョークの種になるから地獄行きにはさせないが、お前を地獄行きにさても良いんだぜ?! 後は、ビートルズ関連は CD を持っていてもアートワークは全滅だ。

20日追記:

今、iPod touch の Safari でこれを書いている。現状の iPod touch では日本語入力は iPod touch を縦向きに構えないと行えない。まるで馬鹿である。

2007年11月12日

iPod touch を買った

iPod touch

iPod touch 16GB

MMX "THE BASIC" の開発環境として、確か gcc も入っていた Apple の Macbook か Mac mini の購入を検討していたが、ウェブブラウズするうちに iPod touch 16GB が気に入ってしまって、Apple Store でオーダーを出した。明後日には手元に届く予定だ。

iPod touch の画像の解像度は 680x480pixels と言うからまあ、妥当な線で、ソフトウエアキーボードに予測変換機能まで付いてくる(画面の下から半分よりちょっと場所を取られるらしいが、予測変換についてはワールドワイドであるそうである。)から言うことはない。内蔵のフォントが等幅でなくプロポーショナルなフォントだが、それはそれで良いだろう。

僕が買った PDA はこれまで HP200LX、Newton MP130、IBM Workpad (型番は忘れたが2機種買った。)、iPAQ、となるが、結局一番実用的なのは HP200LX で他の物は処分してしまった。iPod touch だと、スケジュール帳(Mac を持っていないと機能しない。Windows 向けにも iPod touch のスケジュール帳と同期出来るアプリケーションを作って欲しい。(追記: Outlook だと連係可能であるそうである。個人的には Lotus オーガナイザーと連係を取れるようにして欲しかったが、現時点ではもうマイナーなアプリケーションになっているので無理だろう。))、住所録(メモ欄あり。)、簡易的な電卓、iTunes mini store でダウンロード出来るチェスとかのアプリケーションがあるから(訂正: iTunes Store で購入するアプリケーションはあるが、ダウンロードするのではなく、おそらく Java アプレットとして一時的にダウンロードし、内臓の Safari 上で実行する。)、なかなか楽しい PDA だ。現在は個人で開発したプログラムを iPod touch にダウンロード出来ないが、MMX "THE BASIC" Moblie のターゲットマシンとして考えたいので、ジョブズ、Windows 上で動く iPod touch 向けの開発環境を作ってくれ(訂正: Java アプレットであるのなら、iPod touch 固有の仕様をクリアすれば、個人で作ったプログラムを一時的にダウンロードして使用可能だそうだ。ただし、現状の iPod touch では、MMX "THE BASIC" で作成したプログラムを iPod touch 本体に保存する方法を公開しておらず、ユーザーはそのたびごとにコーディングするしかない。)。言語は C と Objective-C、僕は使わないし醜い言語だが C++(訂正: でも、Java なんていう醜い言語使いたくないよな。仕様書も買わないといけないし。)。頼むよ、ジョブズ。

はっきり言っておくが Mac OS X を MMX "THE BASIC" が動作するプラットホームにするつもりは微塵もない。レパードで MS Windows XP SP2 が動くそうだが、それは "NIH" の精神とは逆方向だしな。

そうそう、James W. Coffron 著 "THE IBM PC CONNECTION" がやっとうちに届いた。

THE IBM PC CONNECTION

軽く内容に目を通したが、なかなか良書のようだ。後は、James W. Coffron 著 "Programming the 8086/8088" が12月01日に到着予定である。

2007年10月31日

MMX 0.03a 正式リリース間近

MMX "THE BASIC" 0.03a の正式リリース前の最終チェックで、同一行番号による、プログラムバッファーの書き換えが出来なくなっていた問題、および、同一行番号空打ちによるプログラムバッファーからの行の削除が機能しなくなっていた問題は、単にエラーチェックの為に挿入したコードにミスがあっただけだった。現時点で上記二つの機能はほぼ正常に機能しているが、マイナーなバグが一件ある。マイナーと言っても MMX がフリーズしてしまうので、現象としては深刻なのであるが、恐らくつまらないバグだ。本日中に MMX "THE BASIC" Version 0.03a の正式リリースを目指したい。マイナーバグが取れ次第、次のバージョン、Versoin 0.03b のコーディングに入るつもりだ。Version 0.03b で実装される機能は以下の機能を予定している。

  1. プログラム命令 "GOTO" および "REM" の実装。
  2. Version 0.03a では、プログラム実行中にエラーが起きてもエラーメッセージを返すだけで、実行を停止しない。これを実行停止にし、エラーメッセージにはエラーが起きた行番号を表示する。

……。MMX "THE BASIC" がフリーズしてしまう原因は僕の書いたプログラムコードではなく、どうやら Microsof Windows XP SP2 の致命的バグの様だ。事実、コマンドプロンプトから edie.exe を実行し、全く同じ手順でプログラムのコーディングをし、RUN して、全く問題ないときと、手順が全く同じにもかかわらずフリーズしてしまうことがある。なんて、滅茶苦茶な OS なんだ。Mircosoft のプログラム作成技術は世界最低水準である。まして、OS を作ろうなんて、おこがましいにも程がある!(怒) おのれの浅はかさを知れ! アフォ共!!(激)

さて、後一押しである。まだ、マイナーバグがあり、プログラムバッファーの先頭行を書き換えようとすると、プログラムバッファーが空になる現象がある。これをクリアすれば、Version 0.03a の正式リリースが可能になるだろう。

Version 0.03a の正式リリースに向け最終段階である。現時点で判っている、既知の問題点は:

  1. Mirosoft Windows XP SP2 の不具合により、edit.exe がフリーズすることがある。
  2. Microsoft Windows XP SP2 の不具合により、edit.exe は全く問題がないにかかわらず、"Flotion exception: Inexact" エラーで edit.exe が強制終了することがある。
  3. Microsoft Windows XP SP2 の不具合により fgets の文字列制限機能が正常機能しない。これは、回避策として、edit.c の中で対策版 my_fgets を作ってコードは完璧にもかかわらず、正常動作しなかった。明らかに Microsoft Widows の致命的バグである。
  4. Microsoft Windows SP2 の不具合により、プログラムバッファーの先頭行の書き換えが出来ない。具体的には先頭行の書き換えを行うとプログラムバッファーが空になる。edit.c では、論理的にいかなる行の書き換えを行ってもプログラムバッファーの行数は変わらないので、明らかに Microsoft Windows の致命的バグである。この対策として、繰り上げて "REM" 命令文の実装を行った。使用するにあたってプログラムコードの最初の行を "REM" 命令文にしておくことを推奨する。
  5. 行番号空打ちによるプログラムバッファーからの行の削除は最終行でしか機能しない。edit.c のプログラムコード上は何の問題もないにもかかわらず、途中行の削除をしようとすると、edit.exe がフリーズする。これも Microsoft Windows XP SP2 の致命的バグの可能性が高い。現時点で断定する訳ではないが、論理的につじつまが合わなく、OS 側の不具合によるものと考える。このままでは正式リリース出来ないので、途中行の空打ちをすると "Internal Error" とエラーを返し、コマンドプロンプトに戻る仕様にした。この苦肉の策の結果、存在しない途中行の空打ちも同じエラーでコマンドプロンプトに戻る仕様になってしまう。行の削除を行うのにあたっては、最終行番号を正確に入力する様、注意を喚起する。

では、正式な MMX "THE BASIC" Version 0.03a のバイナリリリースを行う:

MMX "THE BASIC" Version 0.03a
http://rose7.s143.xrea.com/mmx/edit003a.zip

2007年10月28日

MMX "THE BASIC" Version 0.3a

MMX "THE BASIC" Version 0.03a のリリースのめどが立った。

最後のバグであった「プログラムの最終行番号より小さい値のプログラム中に存在しない行番号を空打ちした場合、プログラムバッファーの状態がおかしくなる」と言う Version 0.03a のリリースにあたっての事実上の最後のバグがフィックスされたのだ。現在、MMX Version 0.3a は機能的には何も問題がないが、マイナーなバグを1件抱えている、それは上に挙げたプログラムコードの間の存在しない行番号を空打ちした場合、環境命令「LIST」でバグフィックス用のビープ音が鳴ってしまうのだ。これのマイナーバグがフィックスされれば今日中にも MMX "THE BASIC" Version 0.03a がリリースされる予定である。なお、Version 0.04a からは、実行ファイル名は "mmx1.exe" とする予定である。

……煮詰まっているついでに、Version 0.03a に「PRINT」命令の引数として "HELLO" の様な文字列を受け付ける様にした。現状では:


10 PRINT "HELLO"
20 LET A = 3.141592
30 PRINT A
40 END

とすると:

OK
RUN
HELLO"
3.14159
OK

と「"」が付いてしまう不具合があるが、Version 0.03a で予定を繰り上げて PRINT "A = "; と言った「;」により改行をしない PRINT 命令まで実装する予定にする。

……取りあえず、PRINT 命令で "HELLO" と言った文字列を「HELLO」と出力するコーディングは終わった。「;」の機能はまだである。また、これは MMX "THE BASIC" の仕様にしようと思うのだが、数値演算は LET 命令の中だけで行われることにしようと思う。つまり "PRINT 1 + 2" と言ったコーディングは認めない、と言うことだ。しかし、実使用上は何の不具合もないはずである。仕様としてほとんど決定である。

さてさて、PRINT 命令の文字列出力の「;」機能も終わった。ただし、まだ変数の出力に「;」機能はなく、また、文字列の場合であっても「"」、「"」で括られる部分に空白、Tab は存在してはならない。これは構文解析に sscanf を使っている現状から来る物である。

……例の、マイナーバグであるが、気がついてみれば何でもない。存在しない途中行番号の空打ちをすると、プログラムバッファーの最後のプログラム行の次のバッファーに "\0" を書き込んでしまい、それがバグとして誤解されていた。本来正常動作である。まだ、細かな点のエラー防止措置を執る必要があるが、今日中の Version 0.03a のリリースは確定的である。

……リリースかと最終チェックをしていたら、同一行番号のプログラムコードの書き換えが出来なくなっていた。最低である。そこの周りのコードはいじっていないし、正常に機能することは確認出来ていたのだが。摩訶不思議である。

でも、「仕方ないだろう?!」。だって、だって、fgets にバグありの LSI C-86 に「メモ帳」だけでコーディングしているのだから。こんなプアな開発環境でコーディングしている奴そんなに多くは居ないぞ?! ま、リリース前に Version 0.03a の注意事項を上げておく:

  1. 入力行は改行('\n')、終端文字('\0')を含めて80文字以下でないと正常動作を保証しない。
  2. 環境コマンド、プログラムコマンド共に大文字でないと受け付けない。
  3. PRINT 命令で使用する「"」、「"」で括られた文字列は、いかなる空白(Tab を含む。)、ダブルクォーテーション(「"」。構文解析に sscanf を使用している現状では、エラーにならず、そのまま出力されるが、本来、エラーである。)も含んではならない。また、改行を無効にする「;」は「"」、「"」で括られた文字列の直後にいかなる文字も置いてはならない。文字列終端の「"」の直ぐ直後に「;」が来なくてはならない。また、変数のプリントに置いては「;」は使用出来ない。
  4. 現時点での実行ファイルのサイズは約 17.4KB である。MMX "THE BASIC" のフルインプリメンテーション(デュアルモードなし)は 32KB 以下にするつもりである。

しかし、僕が企業で CD-ROM ドライブのファームウェアの開発をしたとき今の体調があれば、アセンブラーで書かれた、つまり隠れたバグが必然的につきまとったファームウェアを CD-R チームが C 言語で書いた無駄に贅沢な太り肥えたファームウェアではなく、非常に軽いコーディングで、マスク・ロム化に耐える非常に軽くてエレガントな C 言語のファームウェアに置き換えられた物を。CPU は HITACHI H8 を使っていて、日立から派遣出来たアフォなエンジニアが「C 言語で 32KB 以下なんて無理ですよ!」なんて馬鹿なこと言っていたが、何が「派遣の品格」だ! お前、本当に馬鹿だったなあ! HITACHI はメカ屋や電気屋は凄いんだけれどねえ。でも、基本的に鈍くさいぞ、日立。CD-ROM ドライブが過当競争になった後から市場に参入してきて凄いメカの CD-ROM ドライブ作ってきたけれど、あれじゃあ、かなりの赤字だったはずだ。もったいない。

しかし、まだ午後の十時をまわったばかりなのに嫌に眠たいぞ?! 目が眠たいときののび太の目をしている(笑)。「私には行かなければならない所があるのです! お前達! 失礼ではありませんか! お父様! お父様にだって私を自由にする権利はないわ! 私には、私の道を選ぶ権利があります!!」、「いっかーん!!!(バチッ!!)」、ってガルマ・ザビの愛人、イゼリナ・フォン・ローエンバッファか!(爆)

……ところで、僕はカフェスタのホームページに「N - Mobilis In Mobili」と書いてある通り、ジューヌ・ベルヌ著「海底二万海里」(ここで言う「海里」とは現在の "Sea Mile" とは違い、古いフランスの航海単位である「リュー」である。"Sea Mile" の約2倍。)を愛読し、潜水艦が大好きなのであるが、実際に好きなのは第二次世界大戦の大日本帝国海軍の零式水艇を積んだ伊号潜水艦である。次点でナチス・ドイツのU−ボート。基本的に「潜水艦」と言うより「可潜艇」であり、船団や、敵軍艦を攻撃するときには夜の闇に置いて浮上し、伊号潜水艦の場合は零式水艇を飛ばし敵軍艦の位置を索敵し、九五式酸素魚雷でこれを撃沈する。

……目を覚ますために「機動戦士ガンダム III 特別版」でも観るか。更新はその後で。じゃ、また。

って、「機動戦士ガンダム III 特別版」を観るだけにとどまらず、NINTENDO DS Lite で色々なゲームをやったり、挙げ句の果てはショートムービーまで作った。ショートムービーのテーマは「エロス」であって、監督兼脚本兼主演女優兼撮影監督を一人でこなした(爆)。俳優が僕一人のそして僕は主演女優(男言葉を使っているが俺の本当の性別が「女」であること位知っているだろう?(苦笑))を演じ、艶っぽい声出しながらあんなことやこんなことをしている「エロス」のショートムービーだ(爆)。撮った後で自分で観てあまりのエロスさに鼻血ブー! 高木ブー!!(爆笑) いやいや、面目ないねえ。でも、事実上のAV女優(あれ観れば誰だって本物の女が性行為をしながら淫らな喘ぎ声出しまくっていると思うさ(苦笑))。俳優が一人、主演女優の僕しか居ないのに後二人ぐらい男優がいる様に見える典型的なアダルトビデオだよ、あれは完璧に。いやいやいや、すまん、すまん、こんなことやあんなことしている暇ではなかったよねえ?! でも、「私女だもん! H好きだよ! 女なんだから当然でしょう?!」と、ここではきっぱりと言い切っておく(爆)。

罪滅ぼしに僕の肉声を公開しよう。……ただし、ヴォーカル上のあるテクニックを発見し、女性の声に聞こえるメッセージである(爆)。もっと音程を上げられるのだが、英語で発声しているため地声が低い欧米の女性水準のピッチに合わせてある:

"Hello! Nice to meet you. My name is Ayase Kiyokawa."

本場米国のハッカー達が聴けば完全に女の声に聞こえるだろう? ハックするのはプログラムのコードだけではないのだよ。ファック("FAQ")するのもプログラムのコードなのだよ!!(冷や汗) ちなみに本来の地声は1オクターブは低いぞ?!

2007年10月24日

オブジェクト指向言語に関する雑記

今現在、オブジェクト指向言語と言えば C++ や Java と言った風潮があるが、僕はこれには異を唱えたい。

C++ は、オブジェクト指向の非常にまずい実装形式を取った言語であって実使用に耐えないし、言語単体ではオブジェクト指向環境とは全く呼べない。Java も同然である。その証拠に、Java 自信、Java 1 でオブジェクト指向環境(「環境」とは正確には呼べないが。)のデザインに失敗し、Java 2 を新たに作らなくてはならなかった胡散臭さである。Java 2 だってどれほど実使用に耐える物かは限りなく疑問だ。

僕が知る限り一番堅そうなオブジェクト指向言語は Common LISP だ。これが、正式に標準化された初のオブジェクト指向言語&環境と言うから、C++ の言語設計者や、JAVA の設計者は何馬鹿なことをやっていたのかと思う。

僕は GNU Emacs LISP しかいじったことがないから断定出来ないが、その経験から Common LISP はボトムアップでオブジェクト指向プログラムを作れる可能性のある言語だ。

ただし、"LISP" と言うと括弧の嵐だ。少なくとも「メモ帳」でコーディングするのはきついかも知れない。

比較的 C に近くて使い物になりそうな言語は Objective-C だ。僕は全く言語仕様に目を通してなかったが、ウィキペディアを見る限りじゃ、使えそうな言語だ。うんうん、参考に載っているソースコードを観たが、良い意味でのオブジェクト指向の匂いがぷんぷんしてくる。

そもそも、Objective-C があるのに、C++ なんて言う全く使えない言語がスタンダードになってしまったのは何かの間違いなのだ。C++ の言語設計者のデザインセンスの犯罪的な悪さはマイクロソフトに次ぐ勢いである。こんな言語、とっととなくなれ! C++!!

……さて、話は、Common LISP と Objective-C に絞るとする。

それぞれの特徴、利点、欠点は:

Common LISP
  1. 僕自身が GNU Emacs LISP を通して LISP の特性をそれなりに知っている。
  2. 括弧("(", ")")で囲まれた物ならどんな小単位でも直ちに実行可能である。C 言語の派生である Objective-C は C 言語でそうである様に printf("Hello, world.\n"); とだけ書かれたソースファイルを実行出来ない。
  3. 括弧を多用するためそれなりのプログラム馬鹿でないとコーディング出来ない。

Objective-C

  1. 僕自身が C 言語の達人であって、オブジェクト指向拡張部分さえマスターすれば直ぐにでも使いこなせる。
  2. 上と重なるが、C 言語の中級以上のマスターには一番入門しやすいオブジェクト指向言語である。
  3. ターゲットプラットフォームの API をハンドリング出来れば、C で直接書くより、手間数が少なく、それだけ大きなプログラムを容易に作成可能である。個人的には GNUWin から gcc が出れば、直ぐにでも Windows 向けのグラフィックを多用したアプリケーションを作りたい気分である。

まあ、ここまで書くと、僕が自ら「ボトムアップ式オブジェクト指向言語&環境」を作るなら BASIC を元にするだろう。Visual BASIC .NET などオブジェクト指向言語でもないし、使うものにバグと苦役のみ与える開発ソフトである。何千人のプログラマーが Visual BASIC .NET に泣かされ、無意味なエンジニア生活を送っているかと思うと気の毒でならない。

僕が、BASIC をオブジェクト指向に拡張するなら、呼称に "MMX" は使えない。少なくとも今のところは。使うとしたら Objective-BASIC と言う呼称になるだろう。

オブジェクト指向言語を作るときに、「クラス("class")」、「メソッド("method")」、「インスタンス("instance")」と言う概念は必ず必要になってくる。「クラス("class")」と「メソッド("method")」を僕流に厳密に定義すれば、「クラス("class")」とは「インスタンス("instance"。実行時オブジェクト。)」の「定義」であり、「メソッド("method")」とは、それが所属するクラスの直系の「インスタンス("instance")」に対するメッセージパッシングによって呼び出される「関数」の「定義」である。短く言えば「メソッド("method")」と偉そうに言っているが、所詮「関数」の定義に過ぎない。

ウィキペディアをあたったが、いわゆる一般にオブジェクト指向を語るときの「メソッド("method")」とは、厳密に言うと、「インスタンスメソッド("instance method")」と言う。僕に言わせれば、「メソッド("method")」と略するのは、ゲイツが作った BASIC が "LET" 文を必要としないようにしてしまったという程のアホさ加減である。「インスタンスメソッド("instance method")」と略さないで呼ぶ方がオブジェクト指向の学習にどれだけメリットがあるか計り知れない。ちなみに対義語として「クラスメソッド("class method")」があるが、これは、インスタンスが内部的に使う単なる関数である。

Ovjective-C のクラスの定義法を観たが、さすが SmallTalk を参考にしただけあって、C++ とは別次元の判りやすさである。

一般的に、クラスは次の様に定義する:

// class difinition
@interface MyObject : NSObject {
  int val;
  :id obj;
}
+ (void)classMethod: (id) arg;    // class method
- (id)method:(NSObject*)arg1 with: (int) arg2;    // instance method
@end

ちょっと、Movable Type の表示領域の問題で、コメントの "// instance method" がオーバーラップし、あたかも "method" と言うのがクラスの定義に関係していると勘違いしそうになるから注意して。

いや、実に美しいクラスの定義だねえ。誰が読んだって "NSObject" と言うのは、今回定義するクラス "MyObject" の「親クラス("parent class")」。"int val" は、"val" が "int" 型の「インスタンス変数("instance variable")」と言う定義。"id obj" は、お初だが、"id" は、インスタンス自身を一意に識別する "IDentification" の略の筈。つまり、"obj" にインスタンスを一意に識別する符号が入る。間違いないでしょう?
次はメソッドの定義だ。"+" と "-" の違いはさすがに仕様書を読まないと判らない。最初のクラスメソッドの定義は、露骨に "classMethod" と書いてあるから誰にでも判る。返値の型は "void"。このクラスメソッドを呼び出す形式として、"(id)"、つまりインスタンスの一意識別子が来て、"arg" はクラスメソッド名の筈。コードを読む限り、インスタンスメソッドや内部関数(クラスメソッド)への引数は "with:" で指定していると見た方が良いだろう。つまり、最初のクラスメソッドは引数を取らず、返値も返さない。恐らく、インスタンス変数等の初期化関数(後付注釈: 初期化関数ではなかった。単に引数を取らず、返値も返さない内部関数だった。)。次に来るインスタンスメソッドの定義。"(id)method:と言うことは、返値の型は "id"。これはインスタンス自身の一意識別子。ここまで来れば、それがインスタンスへのポインタであると予想出来る。次の "(NSObject *)arg1" も至って簡単、この項へはインスタンスへのポインタが入るはずだから、"(NSObject *)" で親のクラスにキャストして、"MyObject" 内でこのインスタンスメソッドを親クラスのインスタンスメソッドにオーバーライドする。とすると、"+" は、定義したクラス固有のクラスメソッド、インスタンスメソッドを表し、"-" は、親クラスのクラスメソッド、インスタンスメソッドのオーバーライドを表す。で、このインスタンスメソッドの引数は "with: (int) arg2" だから、引数の型は "int"。最後の "@end" でクラスの定義を終了している。実に判りやすい。

本当に良くできたプログラム言語は仕様書無しでも分かる奴なら直ぐ分かる。そして、こんな良い物は Objective-BASIC に利用すべきだ。Objective-BASIC でのクラス定義は以下の様な物を想定する:

REM CLASS DIFINITION
@INTERFACE MYOBJECT : NSOBJECT [
  INT VAL
  ID OBJ
]
REM CLASS METHOD
+ (VOID)CLASSMETHOD: (ID) ARG
REM INSTANCE METHOD
- (ID)METHOD: (NSOBJECT)ARG1 WITH: (INT)ARG2
@END

そして、クラスメソッド、インスタンスメソッドの定義は以下の様に行う:

@IMPLEMENTATION MYOBJECT
+ (VOID)CLASSMETHOD: (ID) ARG [
REM SOME OPERATION
]

- (ID)METHOD: (NSOBJECT)ARG1 WITH: (INT)ARG2 [
REM
  RETURN OBJ
]

REM
- (ID)INIT [
  LET SELF = [SUPER INIT]
  IF (SELF <> NIL) THEN
    LET VAL = 0
    LET OBJ = NIL
  ENDIF
  RETURN SELF
]
@END

いやはや、一瞬で Objective-BASIC の仕様の中核が決まったじゃないか。よしよしと。
なかなかの収穫日であった。

追記:
Objective-BASIC は、もちろんコンパイラーとしても実装出来るが、インタープリタとしても実装出来る。オブジェクト指向のインタープリタとして RUBY が知られているが、仕様書を見てひっくり返った。なんて醜い仕様だ!! 作った奴は単なるオタクだ。オタクとハッカーの違いを見せてやる。ザコとは違うのだよ、ザコとは!!(ランバ・ラル調で(爆))

2007年10月23日

MMX "THE BASIC" の実装

MMX "THE BASIC" の実装を行っている。

しかし、MovableType のバグかこの記事は何回も文字化けして消失している。

現時点でバージョン 0.03a を作成中。バージョン 0.02c で以下の機能が働いている:

  1. コマンドラインから、環境命令 LIST、即時実行命令の LET と PRINT (引数は変数名一文字のみ、LET に関して言えばさらに演算子 "=" および右辺値数値のみ)、の実行。
  2. 行番号から始まるプログラムコードの入力および、コマンドラインから、環境命令 RUN による、LET、PRINT、END、のみで構成されるプログラムの実行。(LET、PRINT のコマンド仕様は(1)と同等である。)
  3. すでにプログラムコードにある物と同一の行番号から始まる行の置換(作成中の 0.03a で実装済み。)、プログラムコードにある物と同一の行番号空打ちによる行の削除(作成中の 0.03a で「見せかけ上」上手くいっている。)、はバージョン 0.02c では出来ない。
  4. 環境コマンド、命令文、変数名はすべて大文字でなければならず、また、変数、演算子、数値、のすべての間に一文字以上の空白か Tab が必要である。これは、構文解析を現状では sscanf に頼っているからである。

MMX "THE BASIC" のプログラムコードは C の模範的な無駄が一切ない美しいコーディングと言っていいだろう。だが、残念なことにオープンソースにするつもりは微塵もない。MMX "THE BASIC" とは、ハードウェアを含んでの総称なのだから。と言う訳で現時点で動くのはゲイツ君ご自慢のウィンドウズ環境のみとなる。うわっはっはっは! こいつは笑えるぜ、ジーザス!(笑) 古き良き頃のアップルの精神 "NIH" ("Not Invented Here") の精神である。また、MMX "THE BASIC" では、インデントを自動的に潰す。インデントを利用出来た方が、確かにループのネスト等の見通しが良くなるが、これを認めないことにより、アセンブラーへの移行が楽になる。ちなみに僕が会社に勤めていたときに、アセンブラーなのにインデントを付けてコーディングしてしまう先輩が居て困った。一年上の仲の良い先輩が C のコーディングでそのインデントを潰してみるプログラムを作ってきたので、僕は一行で書けるインデントを潰して表示するシェルスクリプト "nih" ("Not Indent Here") を作ったことがある(苦笑)。さてさて、好奇心旺盛なハッカーの諸君にバイナリだけ配布する:

MMX "THE BASIC" Version 0.02c
DEAD_LINK_http://rose7.s143.xrea.com/mmx/edit002c.zip

今までの作成過程での MMX "THE BASIC" の実動作スクリーンショット集:

MMX "THE BASIC" Version 0.02a


MMX "THE BASIC" Version 0.02b


MMX "THE BASIC" Version 0.02b2


MMX "THE BASIC" Version 0.02c


現在もバージョン 0.3a の作成中であるが多少進歩があった。テストに用いる BASIC のコードは以下の様である:
10 LET A = 3.141592
20 LET B = 2007
30 PRINT A
40 PRINT B
50 END

現時点で 20 と空打ちして 20 行を消そうとするが、バグがあって最終行である 50 行が消されてしまう。しかし、まあ、MMX "THE BASIC" では、プログラムが END 命令によらないで終了すると "Unexpected End Of File" エラーを返す様になっており、この場合も実際に 50 行が削除されてしまった後で RUN すると "Unexpected End Of File" エラーが返って来るので、前進と言えば前進だ。あと、問題なかったと思っていた、同一行番号から始まるプログラムコードの置換機能は見た目だけで実はバグがある。取りあえず、行番号空打ちによる行の削除のバグを取ってから、そちらにまわるとするか。

……さてさて、行番号空打ちによる行の削除は完璧だ。後は、同一行番号から始まるプログラムコードへの置換であるが、行の削除とほんのちょっとしか違わないアルゴリズムなので、問題ない。ちょっと一服するか。

ちなみに、MMX "THE BASIC" の実装の基本方針は、実行速度の速さではなく、プログラムサイズをコンパクトにする事を追求する。プログラムバッファーのソートにバブルソートを利用したのが良い例だ。また、実行時に中間言語層を設けるつもりも全くない。BASIC の特徴から、コマンドラインから即時実行可能な命令文の実行コードが、そのまま RUN したときの実行コードに使い回しが効き、プログラムサイズがコンパクトになるからだ。

そうそう、ここで「プログラミングモデル」について語っておこう。僕が取っている「プログラミングモデル」のスタイルは「ボトムアップ」だ。素人には難しいボトムアップだが、達人がするのなら、確実に綺麗なソースコードを書ける。かつ、細部のバグを取れば、まずセキュリティーホールが出来ない。「ボトムアップ」の対義語である「トップダウン」は素人向け。トップダウンでプログラムをデザインすると、最初のデザインが良ければ綺麗なソースコードになるが、逆に言うと最初のデザインがまずければとんでもなく醜いソースコードになり、当然の様に隠れたバグが山程出来る。そして、最初に行ったデザインが良いか悪いかはプログラムが完成してからでないと判らないと来ている。究極のトップダウン・ソースコーディング手法であるオブジェクト指向は、文字通り「ど素人」向けである。確かにクラスライブラリーとは一面便利に感じるが、あくまでクラスライブラリーにバグがないことが前提だ。そして、そんな甘ったるい幻想は直ぐに打ち砕かれる。赤の他人が作ったクラスライブラリーの質など当てにならない。あくまで "NIH" ("Not Invented Here") と言うことを忘れてはならないのだ。

今すぐには思いつかないが、「ボトムアップ式オブジェクト指向言語」をデザインしてみるのも悪くない考えだ。

現時点でのバージョン 0.3a の進捗だが、同一行番号から始まるプログラムコードへの置換は後少しである。現状だと、置換しようとした行がプログラムバッファーに2回出現してしまい、上に挙げたサンプルプログラムだと、50 行の END 命令がバッファーから削除され、結果としてプログラムは END 命令無しでの終了、つまり、"Unexpected End Of File" エラーで終わってしまう。これを何とかするのと、存在しない行番号を空打ちすると 100 OK と言った行になり、まだバグがある。これは行削除の処理のバグではない。この無駄な行に対して 100 と入力すればまた消せる。

さてさて、最後の大きなバグだった、同一行から始まるプログラムコードへの置換機能は完璧だ。後は最後の存在しない行番号を空打ちすると変な行が出来てしまうと言う問題を潰すだけ。……この最後のバグは、二ヶ所に分散していた。一ヶ所は簡単にバグフィックス出来た。もう一方がちょっと懸案だ。

「8080/Z-80 アセンブリ言語」

ZILOG Z80

ZILOG Z80


Amazon.co.jp に頼んでおいた、アラン・ミラー著「8080/Z-80 アセンブリ言語」(近代科学社)が到着した。この本は厳密に言うと僕が過去持っていた Z-80 (正式名称が "Z80" であるのは知らなかった。一般では "Z-80" で知られていたはずである。)の仕様書ではないが、Amazon.co.jp で一番良さそうな本としてチョイスした。「8080」と、うたっている通り、中身のコードはザイログ式ではなく、インテル式だ。まあ、x86 アーキテクチャとの兼ね合いからインテル形式も学んでおくことに損はない。

今、ふと思ったのだが、8086 の Small プログラミングモデルは、CS (Code Segment)、DS (Data Segment)、それぞれ 64KB で合計 128KB のプログラミングモデルであるが、Z-80 の場合 BC レジスタを使って、I/O 空間を 64KB 取ることが出来、つまり、合計で 128KB のプログラミングモデルが使用出来た。シャープの X-1 シリーズはこの特性をよく利用していた。

また、初期の MINIX は、8086 の CS、DS を利用して、本格的マルチプロセッシングオペレーションシステムに仕上がっていた。実装形式は知らないが、カーネルもまた CS、DS を利用して、128KB 以下だったはずである。この時代の MINIX で 10 個のプロセスを並列に実行すると、カーネル 128KB + 1プロセス 128KB × 10 = 約 1.4MB で非常に軽い。1プロセスで使用出来るプログラミングモデルが 128KB でも、UNIX のパイプラインを使えば、実質、もっと大きなプログラムが作成可能であることは言うまでもない。僕は ZILOG Z80 派で、その後は Motorola 68000 派であったが、今思うと Intel 8086 を作ったエンジニアもある意味まんざらではないと思っている。事実、コンピューターの歴史は、68000 でも RISC プロセッサでもなく、8086 の後継 x86 アーキテクチャがデファクトスタンダードだ。

ついでに Intel 8086 の書籍をあたったが、和書では良書と思われる物が無く、洋書で James W. Coffron 著 "Programming the 8086/8088" を購入した。届くのが楽しみである。Leo J Scanlon の "8086/ 8088 Assembly Language Programming" とどちらにしようか迷ったのだが、それぞれが他に書いている著作を比較して、 James W. Coffron の方にした。当たりだと良いのだが。

僕の中で IBM と言うとかなりの技術の実力がある会社だが、IBM PC-AT の設計を行ったとき、マルチプロセスが可能な Intel 8086 を採用したにもかかわらず、CP/M 86 の違法コピーである、ビル・ゲイツの MS-DOS を PC-DOS として採用したのか理解に苦しむ。Co-current CP/M と言うマルチプロセスの OS はいじったことはないし観たこともないが、8086 版で恐らく出ていたはずで、それを採用しておけばパーソナルコンピューターの歴史は 10 年早かっただろう。Macintosh は対抗上、真のマルチタスキングの OS を採用せざるを得ず、その結果 Mac OS X と言う、ビジュアルのみ派手で、中身が何もない OS では無く、白黒のクラシック GUI + Chicago フォントと言う僕にとって最高に麗しいインターフェイスが、真のマルチタスクで実現したのであろうから。(「漢字 Talk」に相当するオリジナルの名称が "System" だったのは初めて知った。実にクールなネーミングである。)

話は、8086 または x86 アーキテクチャに戻るが、僕が現在保有している、C の開発環境は LSI C-86 Ver. 3.30c 試食版だけである。試食版と言っても、プログラミングモデルがスモールモデルであれば何を作って公開しても良く、僕にとって都合が良い。Ver. 3.30c には、現時点で判っている範囲で、fgets のバッファ文字列制限機能に致命的なバグがある(オーバランする。)。

MMX の機械としての仕様に、使用する CPU に Intel 8086 またはそのクローンでも良いかも知れないと思っている。現在では組み込みマイコン用として流通しているはずである。ZILOG Z80 だって流通しているのであるから。8086 だと、少なくとも、確実にヒートシンクを使わずに済む。スクリーンはモノクロ液晶で VGA サイズ(640 × 480 pixels)でも構わないかも知れない。欲を言えば 800 × 600 pixels 位は欲しいが。まあ、モノクロだから、800 × 600 = 約 469KB で済むのだが。使用するフォントは Courier の Nomal と Bold だけで十分すぎる。

まあ、IBM が PC-AT を設計したときに Intel 8086 を採用したのは、「8080/Z80 に慣れたプログラマーがプログラムを(アセンブラーで)書きやすいこと」が第一目的で、それは確実に成功した。MS-DOS を PC-DOS としたのは先見の明が全くなかったが、IBM はハードウェア専業の(と言い切るのは失礼かも知れないが。)会社なのだから仕方なかったかも知れない。また、8086 に「セグメント」という壁があるのを承知で採用したのは、プログラマーに出来るだけ軽いプログラムを作ってもらう、と言う IBM からのある種の縛りだったのかも知れない。今のプログラマーはとても贅沢になっているが、僕の時代、少なくとも僕自身は「1バイトでも短く、1クロックでも早く」が標語だったのだから。

2007年10月20日

MMX "THE BASIC" 演算子・組み込み関数

今日は、MMX "THE BASIC" の演算子と組み込み関数の定義をしておきたい。QBASIC の仕様を参考にどこまで採用するか、と言うことである。

まず、算術演算子。"+"、"-"、"*"、"/"、"^"、"MOD" は最低限必要だ。"\" (「\」。バックスラッシュ)=「整数の除算」をどう定義するか。左辺値、右辺値(共に浮動小数数値)をまず、整数化し、除算の後の結果も整数化すると、取りあえず定義しておこう。

論理演算子は一切採用しない。

数学関数は、"ABS"、"ATN"、"COS"、"EXP"、"LOG"、"SGN"、"SIN"、"SQR"、"TAN"、を採用する。"RND"、"RANDOMIZE" (乱数の初期化)は採用の見送りの可能性が高い。所詮、「疑似乱数」であって、それなのなら、恐らく複数あるであろう「疑似乱数」をユーザー自身がプログラム中で実装した方がより数学的だ。

数値変換(型)であるが、MMX "THE BASIC" では、すべての値は C 言語での "double" であって、採用する価値があるのは、"FIX" と "INT" なのだが、「小数を切り捨てた値を返す(マイナス時 FIX と INT と違う処理)」となっていてユーザーの混乱を招く。定義があいまいだ。99BASIC で試した所、"FIX" は、例えば -3.6 と言う引数に対して、-3 を返し、"INT" は -4 を返す。この事は混乱を招くだけである。であるので、"INT" は「整数型」と言う「型」の意味も含まれるのを嫌い、浮動小数値の整数部分を取り出す関数は "FIX" のみとしよう。

実は、MMX "THE BASIC" に、従来には恐らく無かったであろう概念を導入することが決定している。「マルチプロセスインタープリタ」である。MMX "THE BASIC" 上の呼称では「デュアルモード」。画面を上下に分割し、それぞれ並列して RUN 出来る様にする、と言うことである。画面の上下の切り替えはスタライスペンで行う。この機能を実装することにより、例えば「行番号の振り直し」と言った行為が、「エディター」と言った概念を使用せずに可能になる。他の用途としては片方の画面で桁数の多い素因数分解のプログラムを実行している間に、別の画面で他のプログラムのコーディングをすると言った使用方法がある。この概念は大変ユニークで気に入っている。この「デュアルモード」に移行する命令は "DUAL"、「シングルモード」に戻る命令を "SINGLE" とする。

追記:

疑似乱数についてウィキペディアを参照し、「混合合同法(mixed congruential method)」を、MMX "THE BASIC" でコーディングした。実に簡単だ。やはり、安易に機能を足すのではなく、「数学への好奇心」をユーザーに芽生えさせるのが僕の目的だ。

2007年10月16日

MMX Mobile - 理想のコンピューターへ

携帯電話の「予測変換機能」を思い出して、MMX (「THE BASIC」)を、物理的なキーボード無しで、結構行けそうだと思いついた。

行番号を、画面上のソフトウエア・キーボードから入力するのはさほど難しいことではない。そして、次には必ず命令文が来る。MMX では、命令文の予約語は"LET" "PRINT" "GOTO" "END" "IF" "THEN" "ELSE" "FOR" "TO" "STEP" "NEXT" "REM" のわずか 12個だ。そのうち、行番号の直後に来る物は:
"LET" ("L")、"PRINT" ("P")、"GOTO" ("G")、"END" ("E")、"IF" ("I")、"FOR" ("F")、"NEXT" ("N")、
"REM" ("R")、の8個で、頭文字が一つも重ならない。ソフトウエア・キーボードからアルファベット一文字を打つだけで命令文が確定出来る。変数は特殊演算子名、組み込み関数名に重ならない物はアルファベット一文字で確定出来る。重なった物も「予測変換」を使えば容易に入力が可能だ。

これで、今まで "Dynabook X" と呼んでいた「理想のコンピューター」を、僕オリジナルの呼称「MMX」(「MMX Mobile」)に、自信を持って置き換えられる。

今日はとても良い収穫日であった。

2007年10月15日

やっぱり、クラシック BASIC は良いぜよ!

MZ-2000

Sharp MZ-2000

いま、99BASIC であそんでいる。もう、めっちゃ、楽しいぜよ!

やっぱり、あの時代(小学5年から中1)に戻った様で夢があるよなあ。今、Visual C++ .NET でまともなプログラム作ろうとしても多分楽しめないしなぁ。やっぱり、コーディング環境と実行環境がシームレスなのが良いな!! CP/M に MACRO80 が動く環境ないかなあ? 僕が、X-1 turbo III で CP/M と MACRO80 を使っていたときは RAM ドライブだったからかなり快適だった。シャープさん、MZ-2000 Legend 作ってくれないかなあ〜? ディスプレイは液晶で良いし、記憶媒体は SD メモリカードで良い。US 配列、と言いたい所だが、JIS 配列でもウェルカムだよ! X-1 turbo III も良かったけれど MZ-2000 は憧れだったからなぁ。今、下の様なプログラムであそんでいた。

10 LET X = RND(80)
20 LET Y = RND(20)
30 CLS
40 LOCATE X, Y
50 PRINT "*** HELLO! ***"
60 FOR Z = 0 TO 99999
70 NEXT Z
80 GOTO 10

8行で書けるスクリーンセーバーだ。GNU Emacs LISP でこれを俺が作ったのと同じ時間で作れる奴がいるか?(いるかも知れないけれど……。居たとしたら変人だ!) 素晴らしいぞ! BASIC!! やっぱり、プログラミング入門は簡単に楽しめなきゃ駄目だよ!

う〜ん、別のフリーの BASIC もどき UBASIC (DOS で動く)を使ったが "LET" を理解しないぞ!(怒) 99BASIC 本当に良くできている。UBASIC をできれば HP200LX でと思ったんだが、勝手に小文字に変換するし(昔は勝手に大文字に変換された。)、"LET" を理解しないし、やーめた!! こりゃ、やっぱり、「THE BASIC」を HP200LX 向けに作るしかないか? まるで、大昔のビル・ゲイツである(苦笑)。

……今日も徹夜だ(笑)。

「THE BASIC」言語仕様の範疇内で、BASIC で用いられる標準的な演算子と関数を使うことで、2から任意の数の間に存在する、「素数」を求めることができる。これはコーディング済みだが、演習としてやってみる価値はある。「素数」が求められたら、今度は「素因数分解」ができることになる。

……さて、取りあえずの素因数分解のコーディングが済んだ。ケチっているので結果が例えば:

RUN
1534 = 2 ^ 1 * 13 ^ 1 * 59 ^ 1 * 1
OK

となってしまうが(爆)。

……、やっぱり、僕の BASIC、「THE BASIC」を実装したくなってきた。今使える C コンパイラは LSI C-86 試食版のみ。JAVA でアプレットを作ってっていうのもありか? でも、JAVA のマニュアルとか全部古本に出してしまったし。

取りあえず、「THE BASIC」が動く(ヴァーチャル)マシンを「MMX ("My Machine X")」とコードネームを付けておくか。しかし、肝心の HP200LX 用の RS232C のケーブルどこ行ったのかなあ?

LSI C-86 を試してみたが、GNUWin の bison と全く連携が取れないぞ! まあ、DLL とか付いてくるのかも知れないから、取りあえずのターゲットマシンである HP200LX では、所詮叶わぬ夢だが。よいよ、「頑張れ! ゲイツ君!!」だ!(爆)

追記:

「THE BASIC」言語仕様に置いて、「同一の変数に対する FOR のネストを認めない。」と規定したが、この条件は緩和する必要がありそうだ。例えば次のコード:

10 FOR N = 2 TO 100
20 FOR M = 2 TO N
30 LET X = N / M
40 IF X = 1 THEN GOTO 80
50 IF INT(X) - X = 0 THEN GOTO 90
60 NEXT M
70 GOTO 90
80 PRINT "PRIME NUMBER = ";N
90 NEXT N
100 END

に置いて、50行で条件を満たせば、変数 M に対する FOR ループのネストから GOTO 文により、離脱する。このコードは 100 行の END 命令で終わっているから良いが、100 行以降に、変数 M に対する FOR が、改定前の規定だと、使用出来なくなる。これはゆゆしき問題であり、また、この様な問題は深いネストからの離脱につきものなので、新しい規定を以下の様にする。

「同一の変数に対する FOR 命令文が出た場合、その変数に対する NEXT 命令文のループをより新しく実行された方の FOR ループに適応させるものとする。」

これで、今回発生した欠陥を修復出来る。いや、本気で言語(のインタープリタ)を作ろうとすると、昔は考えもしなかったことに気がつくんだなあ〜!

……。素因数分解のコードの出力をちょっとだけましにした。今のところ:

4525 = 5 ^ 2 * 181 * 1

……。最後の "* 1" を消せれば表示上の問題はお終い。しかし、公開鍵暗号の暗号化鍵に使われるだけあって、数字が大きくなると極端に演算時間が長くなる。

このコードを書いていて、FOR 命令文のもっと厳密な定義が必要なことに気がついた。

現在の仕様上は、

10 LET A = 100
20 LET B = -1
30 FOR C = 0 TO A STEP B
(snip)
50 NEXT C
60 END

と書いた場合、変数、A、B、C は整数でないと行けないと定義している。これは今のところ間違ってないと思う。

C言語の場合は、

for (a = 0; a <= 100; a += 0.3);
for (a = 100; a >= 0; a -= 0.3);

の様に記述出来、変数 a の変化値が少数であっても、「より小さい」、「より大きい」でループの存続条件を決められるが、BASIC では

10 FOR A = 0 TO 100 STEP +1
(snip)
30 NEXT A
40 FOR A = 100 TO 0 STEP -1
(snip)
60 NEXT A
70 END

の様に、ループの存続条件を「より大きい」とも「より小さい」とも規定出来ず、「等しい」と言う条件である必要がある。この事から、引数は「整数」である方が合理的と考えられる。もちろん、引数として与えた式の結果が整数であればよいのであって、演算式の内部は別に浮動小数点数値でも構わない。ただ、評価時に整数値になっていなかったらエラーを返すべきである。

99BASIC で、FOR 文の引数に浮動小数値を入れてループを回したが、エラーにはならなかった。しかし、終了条件は、TO の後に書かれた値の、整数部分が合致した場合であった。厳密に、終了条件として与えた浮動小数点値ではなかったことは言うまでもない。これは、ゲイツが作ったバグに違いない(怒)!

……。きっと、作者は、"very near *the gates*!!" って言う所でプログラミングしていたんだね。

と言っている内に素因数分解のコードが麗しく:

RUN
525 = 3 * 5 ^ 2 * 7
OK

と、表示するバージョンを作れた。後は行番号の振り直し(笑)。

……今終わった。行番号の振り直し。NOTEPAD にコードを書いてから、99BASIC で入力したから、「シームレスな開発環境」としては、ちょっと悔しい気がする。コメント付きの Ver. 0.9 として置いたが永遠の Ver. 0.9 だろう(笑)。FORTRAN なんかも古くさい言語だけれど未だに過去の蓄積の計算コード使われているから、あながち JAVA とか新しい言語知っているのが偉い訳じゃない。

2007年10月14日

THE BASIC 言語仕様検討

プログラミング入門として、ダートマス系 BASIC の有効性ははっきりしている。だが、現在、存在する BASIC は複雑極まりない。MS-DOS に付属していた QBASIC でも入門には複雑に感じる。

まず、プログラミング環境としては、コーディングと実行環境がシームレスである仕様にしようと思う。つまり、プログラムのコードは行番号から始まらなければならない。そして、行番号の後には、必ず命令文が来る。「10 X = X + 1」の様な MS 系の書き方は認めない。「10 LET X = X + 1」とダートマス式に書く。プログラムが変数を扱う以上、"LET" と言う命令文が真っ先に必要になる。行番号を付けず、「LET X = X + 1」と入力すればその場で解釈され、「PRINT X」で変数 X の内容が表示される。「20 PRINT X」と書き、「RUN」と入力すれば、プログラムが実行され、結果として変数 X の内容が表示される。"PRINT" は次に必要な命令だ。

そして、次に必要な命令文は、もっとも単純な制御命令である "GOTO" だろう。「30 GOTO 10」と書いて RUN で実行すれば、X の内容が +1 ずつ足された内容が永遠に画面に出力される。なお、良くある BASIC では "GOTO" 命令を "GO TO" と分けて書くことを認めるが、僕の BASIC では認めない。

今までに挙げた、"LET"、"PRINT"、"GOTO" はすべて英語の動詞である("GOTO" に関しては "GO" が動詞であるのが厳密だが。)。

この次に必要な命令文は、"IF"。動詞ではないが、これがないとお話しにならない。「25 IF X > 100 THEN GOTO 40」、「40 END」の様に書くべきだろう。ダートマス系 BASIC でプログラムを終了するために必ず「END」命令文が必要だったかどうかは知らないが、僕の BASIC ではプログラムを停止させるために "END" 命令は必須とする。"IF" 命令文の "THEN" +命令文の次にオプションで、 "ELSE" +命令文、を認めることにする。

この後に思いつく命令は "FOR"、"NEXT" だ。実は BASIC の "FOR" 命令文の構文をすっかり忘れていて調べ直した。上に書いたプログラムは忘れてしまって、最初から書く。

10 FOR X = 1 TO 100
20 PRINT X
30 NEXT X
40 END

これを "RUN" すれば、1から 100までの数字がプリントアウトされる。"FOR" 命令文には "TO"+整数値、の後に、オプションで "STEP"+整数値、を認めることにする。ここで、ネストの問題が発生する。まずは、"GOTO" 命令との問題。

10 FOR X = 1 TO 100
20 IF X = 50 THEN GOTO 60
30 PRINT X
40 NEXT X
50 END
60 PRINT "HELLO"
70 GOTO 30

単純化したが、"FOR" "NEXT" 命令の間に "IF" 命令で条件を満たした場合、"GOTO" 命令でサブルーチンを呼ぶ様なことができる。しかし、次の様なことも考えられる。

10 FOR X = 1 TO 100
20 IF X = 50 THEN GOTO
30 PRINT X
40 NEXT X
50 END
60 FOR Y = 1 TO 100
70 PRINT Y
80 NEXT Y
90 END

この場合、変数 X に対するループは X が 50 になった段階で実行されなくなってしまう。インタープリタの作業内容としては、"FOR" 命令文で変数 X に対してループを構成し "NEXT X" でプログラムの 10 行へ戻る様スタックに情報をプッシュしてしまう。このプログラムは 90 行で終わり、変数 X に対する "FOR" 命令文のスタック情報がスタックに残ったままになる。まあ、"END" 命令の処理で "FOR" 文のスタックを空にすれば良いだけだが。後は仕様として、同一のプログラム中で、同じ変数に対する "FOR" 命令文がネストした場合エラーを返さないと大変なことになる。僕の BASIC では、"FOR" 命令文は一つの変数に付き、スタック情報が開放されない限り、一度しか記述出来ないこととする。次の様なことは可能だ。

10 FOR X = 1 TO 100
20 PRINT X
30 NEXT X
40 FOR X = 100 TO 1 STEP -1
50 PRINT X
60 NEXT X
70 END

後は "CALL" 命令文の様なサブルーチンを呼ぶ命令であるが、"CALL" 命令文の構文は "CALL サブルーチン名 [引数]" であるが、僕は僕の BASIC で「ラベル(行番号の代わりに付けるプログラム中の位置の指定形式)」を使うつもりはないので採用しない。また、"WHILE" "WEND" と言った制御命令も僕が定義した命令で代用出来るので採用しない。

変数に関してであるが、僕の BASIC ではアルファベット一文字、A から Z までの 26個のみ。型式は浮動小数点の数値のみ。変数で文字列を扱えないとプログラムが数値演算に特化するが、僕の BASIC は「プログラミングの入門専用」なのだから、それで良い。この様な仕様にすると "INPUT" 命令文を不採用とするしかない。プログラムを実行したユーザーが数値のみ入力してくれるとは限らず、数値以外の物を入力した場合、エラーを返す訳にはいかないからだ。

また、画面の制御には "CLS" 命令の様な画面をクリアする命令も採用しない。僕の BASIC では、プログラムを使うものは、プログラムの最初の方で "LET" 命令で定義される数値パラメーターを "LET" 命令を書き換えることで変更し、数値演算結果を "PRINT" 命令で、出力することさえできればいい。残る命令は "REM" 命令。プログラム中に入れる注釈を入れる命令だ。

ここまでで、予約語は、"LET" "PRINT" "GOTO" "END" "IF" "THEN" "ELSE" "FOR" "TO" "STEP" "NEXT" "REM" のわずか 12個だ。後二つプログラミング環境命令の "RUN" "LIST" が予約されるがプログラム中では使えなくエラーになる。

"LIST" の使い方は、単に "LIST" と入力すれば、プログラムすべてを画面上に出力。"LIST 50-" で行番号 50 から出力、"LIST -50" で行番号 50 まで出力、"LIST 50-100" で行番号 50 から 100 まで出力、と言った使い方だ。ある行番号の命令を消したい場合、その行番号を入力して "ENTER" を押すだけ、例えば "50"+"ENTER" とすれば、50 行は消される。

あと、"PRINT" 命令について補足すると、

10 PRINT "3 + 5 = ";
20 PRINT 3 + 5

の 10 行の様に最後に ";" を付けると改行しない。

ずいぶんと古い仕様の BASIC となったが、プログラムのコーディングと実行環境がシームレスなのは、GNU Emacs が *scratch* バッファーで、GNU Emacs LISP を即実行可能で「環境」として非常に良くできている様になかなか便利な物だ。

追記:

自分で BASIC インタープリタを作らなければならないかと思っていたが、ちょうど思った様なフリーウエアの BASIC があった。その名も "99 BASIC"。以下のサイトで DOS 窓風な実行環境な物がダウンロード出来る。

99BASIC
http://www.sagami.ne.jp/tadaka/99Basic/

ちなみにネスト対策にバグがあるらしく、

10 FOR X = 0 TO 100
20 IF X >= 50 THEN GOTO 60
30 PRINT "X = ";X
40 NEXT X
50 END
60 FOR X = 100 TO 0 STEP -1
70 PRINT "X = ";X
80 NEXT X
90 END

とコーディングし、RUN しても何のエラーも返さない。とはいえ、gcc がインストール出来ていない現状で、プログラミングの薫りを味わえるのは、子供の頃に帰った様で楽しいよ。

Dynabook X への道

HP200LX

Dynabook X とは、アラン・ケイの「Dynabook」から概念と名前を借りた僕流の理想のコンピューターのコードネームである。Dynabook X のサイズは DVD のジャケットを横にした大きさを今は想定している。

僕は、大学院では結果的に音声情報処理を専攻したが、会社では携帯型端末の開発に従事したかった(この願いもむなしく、CD-ROM ドライブのファームウエア作成という日陰部署にまわされた。)。

僕が現在保有している携帯端末は DS Lite を除けば大学院時代から使っている HP200LX (写真上)である。写真は僕の使っているものの実物で、僕が ZCLV を発案したとき、HP200LX 内蔵の Lotus 123 で導かれたグラフが写真の画面に映っている。現在入手出来るかどうか判らないが、僕が持っている携帯端末の中では、HP200LX が唯一開発環境がある携帯端末になる。

僕は Dynabook X に、ドローソフト、表計算ソフト、プログラムの開発環境、と言ったクリエイティブな作業をするコンピューターであって欲しいと思っている。

しかし、表計算ソフトなら、液晶上のソフトウエアキーボードでも使用に耐えるが、デバイス単体でのプログラムの開発となると物理的なキーボードがいると考えた方が良いだろう。

僕は小学5年の時から、当時「マイコン」と呼ばれた、PC-8001 や MZ-2000、X-1 と言った物の上で、MS 系 BASIC でプログラミングを覚えた。MS 系でなく、ダートマス系である初期の True BASIC (今は機能が増えすぎて煩雑になっている様だ。)はプログラミングを覚えるのに一番良い環境だと思う。基本的に BASIC と言うインタープリタは、プログラミングの作成環境と実行環境がシームレス(プログラムのコードを書くときは、先頭に行番号を付け、実行は「run」で行えばよい。)なのが利点であり特徴だ。僕の場合、MS 系 BASIC の次に覚えたのが Z-80 のマシン語だ。少なくとも Z-80 レベルのマシン語を覚えるのは非常に有益だと思う。例えば、C 言語における、ポインタの理解が早くなる。

今、肥大化した BASIC を昔なじみの美しい姿にしようかな?、と考えている。だが、どの程度軽量化するかが問題だ。僕が、BASIC でプログラミングを始めたのは「(コンピューター)ゲームが作りたい」と言った動機が強かった。だが、初めて次の様な、プログラムを書いて実行して興奮した物だ。

10 PRINT "HELLO"
20 GOTO 10

このプログラムは当時のマイコンにあった BREAK キーがないと RUN すると終わらない。が、凄く懐かしい。この項目は稿を改めて、書こう。