今年も終わりですね

今年は踏まれたり蹴られたりでしたが、来年はいいことがありますように。

さて、掲示板の方でちょっとお見せしたのですが、今新しいブラウザを書いています。Mocaという名前です。Donutの名前をつけていないので気付くと思いますが、既存のDonutベースではなく、深い部分から書き下ろしている本当に新しいブラウザです。ただしDonutのコードで使えそうなところは拾って使っているので完全オリジナルではないんですが。

目標というのは特に定まっていませんが、幾つかの事は決定しています。

  • ソースを公開すること
  • UNICODEに対応すること
  • プログラムの設計についてよく考え学習すること

ソースを公開する目的は勿論ソースを利用して何らかの新しいものを生み出す人が現れることの期待を持つためです。このソースを改造しようという気になるソースが作れればいいでと思います。そのためにドキュメントっぽいものも作る予定です。

9x系WindowsではSJISが標準の文字コードでしたが、2000以降ではUNICODEが使われています。そのためSJIS版とUNICODE版の両方に対応するプログラムを書くことを念頭に入れて作っています。unDonutでは残念ながらSJIS版しか生成できない状態です。

正直言っていきなりunDonut相当やそれ以上のブラウザが作れるとは思っていません。一から作った経験があれば別ですが、私は単にかなり出来上がっていたものにちょこちょこ手を加えただけなので。そのためMocaでは経験を積むことを重視しています。既に設計のまずい部分が幾つか浮上していますが、どうしたら良くなるだろうかと考えるのは非常に楽しいです。

ただし本格的な開発に入るのはunDonutのrelease13(14?)を出してからになると思います。こちらもちゃんと作らないと勿体無いですし。何よりバグ報告してくださってる方に申し訳ないので。ところで先程test9出したんですがうっかり更新履歴に誤字を入れてしまいました(s/御一方/御一報)。恥ずかしー。

unDonut開発状況 11/05

ちょっと無理してtest8出しました。

修正としてはドッキングバーを閉じた状態で再起動したときフロート状態になってしまう問題についての修正が主です。難しい問題だったので一時は仕様にして諦めることも考えましたが、何とかそれらしく動作するように修正できたかと思います。

ただし、まだ他の部分でいろいろと問題が生じているらしく落ち着くのはもう少し先のことになりそうです。testのバージョンはいくつまで伸びるでしょうか。私にも分かりませんが、そろそろ新機能はやめてrelease13として出せるような安定度を高めたいと思います。

新機能といえばtest7のウィンドウサイドの機能ですが、これはrelease12dまでにあった「エクスプローラバーを自動で隠す」機能を元に作られています。なくなって困るという方向けに汎用的な機能を用意してみました。ウィンドウの上下左右にカーソルを持っていったとき、指定のコマンドを実行する機能です。ちょっと感度とか反応範囲とかに改良の余地はありますが、「特殊」カテゴリの「ドッキング - エクスプローラバー」などを指定すると従来に近い反応でエクスプローラバーなどを開くことが出来ます。まあちょっと異色の機能みたいなところはあります。私は右端にフォーカスを検索バーに移動するコマンドを指定してあります。それ以外の何かよさげな使い道がありましたら教えてくださいな。

さて、バグですが今回も結構出てますね。重要そうなのはD&Dと二重起動関係のバグでしょうか。正直D&Dの細かい挙動は把握しきれていないのでもうちょっと続くかも知れません。ところでドッキングバーが表示されないとか起動時に落ちるとかいう症状が起きる場合はwindowstate.datを削除してみると解決するかもしれません。

最後にどうでもいいマイナーな機能のご紹介。Windows2000以降のみ使えるのですが、ドッキングバーを単体でフロートさせて、そのタイトルバーを右クリックすると……。正直つかえねーですがネタ程度に。

難解プログラミング言語 brainfuck

ちっとも人間に優しくない人工言語。ちょっと興味がわいたので触れてみました。

どんな言語かというと、+-<>[],.の8種類の意味を持つ記号しか使用しないシンプルな言語です。足し算する機能すら用意されていないしょんぼり具合ですが、計算機にできる計算は何だって出来てしまうようです。Hello World!だって作れます。というか作ってみたんですが、これはすごいですよ。


Hello World! + 改行を表示するプログラム

++++++++[>+++++++++<-]>.<++++++[>+++++<-]>-.+++++++..+++.[-]<++++[>++++++++<-]>.<+++++++++++[>+++++<-]>.<++++++[>++++<-]>.+++.------.--------.[-]<++++++++[>++++<-]>+.<+++++++++++++.

長いし意味不明。ソースコードの時点でもはや暗号のよう。ということで難解プログラミング言語と呼ばれています。正直実用としては何の役にも立ちませんが、パズル的な面白さを持っているためときおり惹きつけられる人がいるようです。というか私もその一人ですね。
なんというかレゴブロックで遊んでいるときのような感覚です。

OS再インストール

この間Cドライブが入ったHDDがご臨終なされたので、環境の再構築にいろいろソフトをインストールしてます。今日は小難しい内容はなしに私のいつも使っているソフトウェアを紹介してみようかと思います。まあ、誰も見てないでしょうけど。

種別 名前 使用感
ブラウザ unDonut ここに違うの書いたら何て言われるかな。
まだまだ粗が目立ちますが少しずつ整えていきたいですね。
メーラー ThunderBird 最近入れたんですがいい感じです。
迷惑メールのフィルタ機能って結構いいものですねぇ。
テキストエディタ Terapad 随分長いこと使ってます。
正規表現使えないとかちょっとした不満もなくはないのですが、
何となく使い続けていますね。
FTP FFFTP 必要十分って感じです。
サイト作成 StyleNote スタイルシート関係の機能が便利です。
ファイラー だいなファイラー 実はキーボード派です。エクスプローラも併用していますが、
アイコンの読み込みのせいで処理が止まったりするのがストレスなので。
その点これはシンプルでいいです。
対ウィルス AVG Free Edition 結構ちゃんと仕事してくれるみたいです。
ファイヤーウォール ZoneAlarm Free 要するにお金かけたくないんです。
プログラムランチャー Orchis メニュー型。ソフトは大概ここから起動させます。
これもずっと愛用している一品です。
音楽 Winamp プログラム書いてるときとかいろいろ聴いてます。
曲はいろいろですね。クラシックが多いかもです。


他にもごちゃごちゃ入れてますけどあまり使いません。続いてunDonut開発の際に使っているソフトも紹介します。

名前 概要
Microsoft VisualStudio .NET 2003 現在使っている統合開発環境です。たまに挙動不審になりますが、
前バージョンのVC6ほどでもなく、そこそこ使えています。
JGrep ファイル内テキストの一括検索をするソフトです。
開発環境にも同様の機能がついていますが、いちいち起動するのがだるいときに使っています。
ExamDiff テキストファイルの差分を分かりやすく表示するソフトです。
変更箇所をチェックする際に役立ちます。
Spy++ VisualStudioについてくるツールです。
プログラムのメッセージを監視したり出来ます。
使い方を誤るとすぐシステムごとフリーズする危険な代物です。
Dependency Walker プログラムのファイル依存関係を確認できるツールです。
要するに起動するのにどんなDLLが必要かとかがわかるわけです。
OLE View ActiveXなどのCOMコントロールに関する情報を取得できるツールです。
unDonutはCOMと密接な関係にあるため必須のツールです。
TortoiseSVN subversionクライアント。
簡単に言うとソースコード管理ツール。
最近導入したばかりですが、なるほど便利という感じです。
TsxBin バイナリエディタ
バイナリデータを読み書きするプログラムを書いたときに
動作確認によく使います。ずっと使ってるお気に入りです。
WinExplorer 各プロセスとウィンドウの情報を取得できるツールです。
デバッグ中のデータ確認に重宝します。
cygwin WindowsUNIX環境。
perlとか簡単なスクリプトの作成に役立つ。

あとはダウンロードしてきたり自作したりいろいろなツールに囲まれて開発してます。

プログラムのバージョンについて

プログラムにはほぼ例外なくバージョン情報というものが付随します。無論これは将来に亘って変更する可能性があり、更新したものと以前のものを区別するために存在するわけです。

フリーソフトなんかですと、バージョンの表記の仕方も随分と多様になっています。一応一般的には1.0とか1.0.0とか1.0.0.0とかの表記が多いわけなんですが、特に強制されているわけでもないので、皆好き勝手つけているようです。私も結構適当につけています。

次では、プログラムのバージョンについて暗黙の了解的なものをいくつか書いてみました。とても主観が入っています。

  • 1.0未満のプログラムは未完成のような印象がある
    • これは結構皆さん感じていると思いますがどうでしょう。1.0や2.0といった場合1や2はメジャーバージョンと呼ばれますが、これが0である場合違和感を感じるかも知れません。一人前を1.0とするなら0.5とかは半人前なわけで、1を以って始めとする意識が働いているんじゃないかと思うわけです。
    • 私もよく0.5や0.6といったバージョン表記を使います。未完成だからという意味合いも込めています。だからバグが多少あっても勘弁してください、という気持ちも込めてあります。1.0以降であってもβとかつけたりしているときは同種の気持ちが込められているかもしれません。
    • 1.0未満だからといって使い物にならないというわけでもありません。そもそも使い物にならないソフトならまだ公開しないでしょうし。プログラマの方もある程度自信があって公開しているはずです。
  • メジャーバージョンの更新前と更新後は全くの別物である
    • マイナーバージョンアップだとちょっとしたバグの解消や機能の追加があったりしてうれしいのですが、メジャーバージョンアップの際はちょっとためらいます。というのも内容的に別物になっていることが往々にしてあるからです。例えばWindows Media Player6.4あたりはシンプルだったのに最近のバージョンは不要な機能ばかりでうんざりとか。企業においては一から作り直したものを新バージョンとするところも少なくありません。別物の割に異なるバージョンを同時にインストールしておけないソフトウェアはちょっとアレだなぁと思います。
  • バージョンは安定性の基準にはなり得ない
    • バグを直すだけのアップデートを延々と続けていけば安定性は増していくのでしょうが、個人的にはそんなプログラミングのどこが楽しいのかと思うわけです。そういうわけで新しい機能の追加をしてしまうと最後、エンバグとバグ修正のループを回しつづけることになります。そんなわけで安定性を重視する方は更新履歴や掲示板を覗きつつアップデートするようにしましょう。

とか適当に思いついたことを書いて見ました。相も変わらず何が書きたかったのか忘れてしまったわけですが(そもそも書きたいことは最初に書くのが理系の文章の書き方なのに)。

皆さんはバージョンについて何か思っているところとかありますか?
とか言って締め。

開発再開

ようやく正月気分も抜け去り、開発を再開しようかと思います。本当は10日から始めたかったのですが、ついうっかり本屋によって十数冊の文庫を購入して読みふけってしまいました。全部読み終わったのでプログラムのほうもぼちぼちと。