.mjtにっき(建設中)


[RSS]/ RSS feed meter for http://diary.okotama.org/

2007-12-30 - (no title)

いそがしい

いろいろと上手く行って無くてヤバい感じです。とかいいつつ、twitterとかpixiv始めました。熱心に使うかどうかは未知数。twitterの方はローカルにXMPPサーバ立てて色々したい。

にっき生成もテンプレートが豪快に間違ってるところ見つけたけど面倒なので生成した後のHTMLを手修正という。。

しかもまだ間違ってます。FirefoxとOperaとSafariで見れるから良いや。

俺アーキテクチャ本のネットワーク周りはBluetooth(over USB)になりました。Ethernetに出れる標準規格がそれしかなかったんで。。その辺の事情はそのうちちゃんと書きます。

他にも正規表現じゃなくて手でオートマトン作らすとか結構教育的な配慮を盛り込んでます。計算機工学的な話をいきなり1章丸ごと入れたら引かれるのは間違いない気がするので。

表面的にはCPUエミュレータ + libusbで直接USBデバイス触って遊ぶ本なのでFPGA無くても楽しめます。もっとも触るUSBデバイスはHIDとBluetooth HCI、マスストレージだけですが。プロトコルの実装はTCP/IPとHTTPがメインです。人によっては軟弱だと感じるかもしれませんが、僕なりに適切な着地点を探したらこうなりましたと言うことで。。

特に電子工作的なトピックをばっさり削ったのは批判が多そうだなぁ。。火も包丁も使わないお料理ブック。

制作風景とかは待て次号。


2007-11-15 - (no title)

まだテスト中

これらはテストエントリです。

今までのtDiary記法は完全に捨ててしまって、この日記エントリの記法は今書いている本の原稿の記法に合わせた奴*1になっています。Wiki風だけどTeXに合わせた記法。

今日はフォーマッタのテストです。まだフォーマッタの出力するHTMLをきちんと考えてないので、今日のエントリのこの日記へのリンクは機能しません。

(営業的な意味で)重要なエントリは後日改めてちゃんとしたのを書く可能性が高いです。

テストがてら、本のこととかをちょっと書こうと思います。

*1

要はテキストプロセッサを流用しようともくろんでいる

本書いてます

以前、osdev-jの日記でも書きましたが、今は本を書いたりしてます。

もっとも、まだ出ると決まったわけではないので下手したら同人誌ですが、僕がちゃんと頑張ればISBNと値段が付いて流通するはずです。。本来的にはこんなん書いてないで原稿に取り組まないとかなり不味い時期なんですが、まぁなんというか空気を知りたいと言うのがあって。

内容を端的に表現すると、「FPGAでCPUとUSBホストコントローラを作ってその上で生活する本」ですが、その見た目とは裏腹にC●出版からは間違っても出ないソフトな内容になっていると思います。

要は、「僕だったら買う本」を全力でやってるって事です。センスの近い方はご期待下さい。

何処から出るのかとか値段とか時期とか体裁はまだナイショです。普通の本の普通の値段という目処は立ってるんですが、営業的な理由で。

大きなテーマ

(個々の要点を書いてたら本に書くことがなくなっちゃうので、)先にあんまり本文中で語ってもしょうがない大きなテーマについて。

"Goodbye, World!"と"Hello, World (again)"という2つの大きな裏テーマが有ります。あんまり単刀直入にテーマを書くのはかっこよくないので本文中では出てこないんですが、思想的にはちょっと重要なのでここでは説明を書きます。

誰でもC言語やその他の自分の好きな言語でprintf("Hello, World!\n");をしたことが有ると思います。*1しかし、それが Hello, World! を出力するのはOSとかコンパイラのお膳立てがあるからこそで、それらのお膳立てのある世界からはGoodbyeしてみるのはどうだろうと言うのが一つ。

しかし、Goodbyeしたきり自分一人の世界に引きこもっていては存在意義が無いので、何らかの手法で元の世界と接触しようというのがもう一つ。英雄は旅をするけど時折帰ってくるんです。

で、表テーマは「名前を付け、それを呼ぶこと」。状態遷移や構造体、それらのテキスト表現であるところのプログラミング言語は、名前を通した計算機と人の間のUIなので、この概念の重要性を強調したつくりになっています。何故コンピュータは空気を読まないのかということを感じられる内容にしたいということで。

*1

無い人は残念ながら対象読者では無いですが、すぐに仲間入り出来ます。

内容的な話

哲学的な話は大多数の人にとって面白くないので物理的な話。

内容は大体前後編に分かれていて、状態遷移図とか構造体、プロトコルの必要性といった後編の説明を理解するのに必要な基礎知識的な話と、CPUの制作とホストPCとの通信までが前編。後編がUSBとTCP/IPv4、多分HTTPの実装。

後編で実装するアプリケーションプロトコルはまだ悩みどころで、つい昨日BigIntの実装がおかしいことに気づいたりとかなかなか難しい状況なので流動的です。。この日記が見えてるってことはHTTPサーバ(とクライアント)は多分載せられると思いますが。

まぁそれ以前に肝心のUSBが安定してないんですけどね。。解説を書く過程である間違いに気づいたので今度こそ上手く行くと今のところは信じてますが、マジでダメだったらSL811使うみたいな逃げの一手を打つかも。。

あと、当初案ではDSPとグラフィックスも入ってたんですが、どっちも専門外って事で無しにしました。テーマとしては面白いんだけど、流行ものだけにちょっと手を出しづらい。

一応、FPGAを通した制作と実践がメインですが、PCだけとか秋月のH8キット類でも(C言語へのトランスレータとかエミュレータを通して)試せるように考えてます。*1

FPGAはその辺から買ってくるわけにも行かないので、今のところはSpartan3 Starter Kitをターゲットにしています。もっとも、本が出る時期まで売り続けてるかは解らないので、Spartan 3EStarter Kitもサポートする予定です。Alteraとかは未定。

*1

考えてますってのはまだコードを統合してないから。この日記のサーバが最初の取り組み。

HTTPヘッダとか

Referrerがやっぱり居た。あと、Transfer-Encodingの意味でTEという謎のヘッダを使ってくるUAも居る。

ちょっと謎が多い。。

というわけでリファラとかは見てますが、一応これ卒研も兼ねてるので意図的に面白おかしいヘッダを送出するのはご遠慮下さるようお願いします(ぉ

Lighttpdうんぬんは調べてみたところ濡れ衣で、シリアルポートエミュレータが予測できないタイミングでソケットをcloseする所為でした。要は、TCPを全二重シリアル通信に見せてデバッグ用のポートから無理矢理HTTPサーバロジックを駆動する形になってます。エミュレータをエミュレータで駆動するというかなり回りくどい状況。。

せめてシリアルからこっちは実機(FPGA)にしたいんですが、どうせ速度出ないしせっかくだからCPU作り直したいので延期中。ロジックのデバッグは先に出来るしね。。

今のところホストはosdev-jのProxyと一緒に動かしてるので玄箱/PRO(ARM)です。というか、NATを使ってる都合で、ポート80番で接続を受けられるサーバは一つしか立てられませんよ。と。。適当なタイミングでProxyも自前のサーバに差し替えたいと思います。

背景絵

DNS変更前の負荷テスト中に書いた。まぁ結局公開後にも落ちたりしてるのであんまり意味無かったけど。

今でもエミュレータ側にものすごいレアケースで落ちる不具合が有って修正してないので、たまに落ちると思います。今のところ2000リクエストくらい処理して一度だけヒットしました。

絵に関しては、まぁ批判もあるので止めようかってのも有るんですが、ギャグの一環なので周囲を気にする必要がある環境ではRSSだけ読めば良いんじゃないかと思います。コメントとかは未定ですが、本文に関しては(IMGタグを抜いて)全文配信する予定でいます。RDFのcontentに対応してないブラウザでは残念な結果になると思いますが、少なくともWeb上で動くアグリゲータは大抵大丈夫です。

今までは全文配信じゃなかったんですよね。。常識的に考えて不便だったのでどうにかします。

あと、IE6ではもう正常に表示できません。まぁそんなレガシーなブラウザ使ってないでIE7とかFirefoxとかOperaとかに移行してね。と。MacIEとかも勘弁してください。。

久々に作ったので立ち位置が高すぎ。以前書いたスクリプトを無くしたのでgimpでちまちま加工。。ハーフトーン効果は良さそうなんだけど、コントラストが強いままだから本文背景には向かないと言うことが解った。ドットのサイズを調整すれば良いかも知れない。それ以前に黒塗りで目を描いてるのが最大の問題だけど。

そもそも絵単体ではハーフトーン効果が視認しづらいのでwait a momentの文字にドロップシャドウを入れたりとかせせこましいことをしてたりする。一発のロードあたり300KBが目標値。

脱いでいるところなのか着ているところなのかは想像にお任せします。


準備状況

今のところ、HTTPサーバだけが手作りです。

プロトコル類の実装状況 :

  • HTTP - if-modified-sinceの類には対応しないと不味そう。。(まだasctime日付と4桁西暦でない日付をパースできない)
  • TCP - 移植中
  • IPv4 - 移植中
  • IPv6 - まだ
  • Ethernet - 移植中
  • USB/url - 移植中

OS / ハードウェア類の実装状況 :

  • CPU - 再設計予定 - デバッグ困難な規模になってきたので
  • USB1 - 再設計予定 - 48MHz水晶不要化へ。。DPLLをちゃんとする。
  • RAINコンパイラ - 宇宙buggy - キャッシュの推論がおかしい、型推論の曖昧な場合がある(仕様的な欠陥)
  • ホストPC向けのソフト - まだ

バックエンド類の実装状況 :

  • 日記ファイル生成 - まだ
  • USB/libusb - 済
  • USB/bsdugen - 済
  • Emulator/pthread - 済