2004年05月31日

Heimdallr 1.04alpha3リリース

Heimdallr 1.04alpha3をリリースします。
安定版ではありません。
Heimdallr 1.04alpha3

安定版はHeimdallr 1.03です。

変更点は以下の通りです。

  • 記事更新にかかる時間が短くなりました。

  • Ctrlを押しながら記事を左クリックすることで既読にするようにしました。


既読ボタンの大きさ変更機能はさらに次のバージョンに持ち越しになりました。

Heimdallr 1.03から比べて、GUI周り(色変更対応のため)とファイルダウンロード周り(記事更新時間短縮のため)というHeimdallrの中核をなす機能のうち2つに大きな変更が行われました。
うまく動くかどうか結構心配です。

不具合を見つけたり、新しい機能に対する意見がありましたら、コメントお願いいたします。

2004年05月30日

素行の悪いRSSリーダー

ちょっと前の話ですが、RSSリーダーがインターネット渋滞の元凶になるという記事HotWiredに掲載されていました。

HeimdallrというRSSリーダーを開発している身にとって、他人事ではないので、ちょっと考えてみることにしました。

今のHeimdallrは、上記記事にあるような

RSSリーダーは通常、前回のアクセス時以降、RSSファイルが更新されたかどうかをチェックする仕組みになっている。もし更新がなかった場合、ウェブサイトは「no」(なし)というごく小さなメッセージをRSSリーダーに返す。

というようにはまったくなっていません。
記事の更新を行う際、毎回コンテンツを全部ダウンロードしています。
いやぁHeimdallrは素行の悪いRSSリーダーですね。

RSS Feedって画像やらなんやらの重たいコンテンツが含まれていないので
取得回数が多くても平気だと思っていました。
しかし、現実に問題が発生しているサイトがある以上、無視するわけにもいかないでしょう。

といっても、実際の所、Heimdallrは、更新間隔は30分以下には設定できないようにしてありますし、
デフォルトの更新間隔は60分となっていますし、
なによりマイナーなので使用者が少ないため、
問題を引き起こす可能性は少ないでしょう。

しかし、Heimdallrがもし爆発的に普及すると(ありえなさそうですが)、
Heimdallrのせいでサイトが落ちたとか言われかねません。
そこで、上記の仕様のとおりに実装し、サーバーに大きなコンテンツを要求する回数を減らすようにしようと思いました。

ところが、技術的にどう実装すれば良いのか良く分かりません。特に分からないのがこれ。

ウェブサイトは「no」(なし)というごく小さなメッセージをRSSリーダーに返す。

これってどうやればいいんだろう・・・。誰か何かご存知でしたら教えて下さい。
良く分からないので、ちょっと考えた挙句、以下のような仕様にすることにしました。

  • 最初はサイトにGETメソッドでリクエストを送信し、コンテンツを取得する。このとき、レスポンスHTTPヘッダのLast-Modifiedフィールドの値を記録しておく。
  • 二回目以降は、まずHEADメソッドでリクエストを送信し、レスポンスHTTPヘッダのLast-Modifiedフィールドの値を取得して前回の値を比較する。同一ならばコンテンツはダウンロードしない。同一でなければあらためてGETメソッドでリクエストを投げてコンテンツを取得する。

実は、現時点でほぼ実装が終わってテスト中です。
サーバーへの負荷がどうなったのかは良く分かりませんが、更新するのに必要な時間がだいぶ短くなりました。感覚的には1/3以下ですね。

次のバージョンであるHeimdallr 1.04alpha3ではこの機能をお披露目できると思います。

2004年05月29日

ソースコードを公開している理由

このサイトではいくつかのソフトウェアを公開していますが、
バイナリだけでなく、ソースコードも一緒に公開しています。

ソースコード公開には、そんな深い意図があるわけではなく、
ここで公開しているソフトウェアのある機能を見て、どうやって実装するのかな?と思った人が、ああなるほど、と参考にするため、という程度のものです。

コード自体はあまり綺麗なものではなく、例えば、一番新しいHeimdallrでさえ、
開発途中から新しいライブラリ(boostライブラリ)を導入したので、
それより前のコードと後のコードではだいぶ書き方が違います。
コーディング規約も、時々変えているので、
コードによっては古いコーディング規約と新しいコーディング規約が混ざって理解し難かったりします。

しかも、恐ろしいことに公開されているソースコードにはライセンスに関するドキュメントがありません。
ですので、今のところこのソースコードの扱いは、デフォルトのライセンス、すなわち法律に従うことになります。
私は法律に詳しくは無いので、法律に従うとすると、どのような扱いになるのかは、よく分かりません(ヒドイ話ですね)。

何か要望があったり問題があったりしたら、BSD修正ライセンスあたりをベースにライセンスドキュメントを付加しようと思いますが、今のところ要望や問題どころか質問さえありませんので、まあこのまま何もしないで良いかな。と。

2004年05月27日

Heimdallr 1.04alpha2リリース

Heimdallr 1.04alpha2をリリースします。
安定版ではありません。
Heimdallr 1.04alpha2

安定版はHeimdallr 1.03です。

Heimdallr 1.04alpha2では、設定ファイルの形式が変わりました。
内部で新しい形式に勝手に変換するので、ただ使うだけならば意識する必要がありませんが、
古いバージョンに戻してしまうと正常には動かなくなります。
つまり、Heimdallr 1.04alpha2を実行してしまうと、もう古いバージョンへの後戻りは効かなくなります。

安全をお求めの方は、設定ファイルのバックアップを取っておくと良いでしょう。
マイドキュメント\SutoSoft\Heimdallrフォルダを丸ごとどこかへコピーしておけばOKです。

機能面の変更点は、

  • ビューのテキストや背景色を変更できるようになりました。

  • 既読ボタンの上にカーソルがあるときも概要が表示されるようになりました。

という2点です。

色設定を変更するためのユーザインターフェースはあまり良いものではありませんが、
追々機能を向上させて行きたいと思います。

あとはビューのGUI周りのコードをかなり書き換えています。
そのため単純な操作でも色々とバグあるかもしれません。
何か気が付いたら報告して頂ければ幸いです。

既読ボタンサイズの変更オプションと、Ctrl+クリックによる既読化機能は、
次のバージョンである1.04alpha3で実装する予定です。

2004年05月25日

Heimdallrのライバル達

RSSリーダーの開発なんぞをやっていると、数ある他のRSSリーダーと比べてどうなのか、というあたりがやっぱり気になります。

そこで、HeimdallrのライバルとなるRSSリーダーと、Heimdallrの人気を比較をしてみたいと思います。
といっても、機能などの違いを日本語で説明しても、主観が入りまくって歪んだ結果になると思いますので、
できる限り主観が入らない方法で比較してみることにします。

まずは、Heimdallrのライバルと考えているRSSリーダーを列挙します。
対象となるのは、デスクトップに常時張り付いて情報を表示し続けるいわゆるティッカータイプのRSSリーダーです。
ココログのRSSリーダーリンク集によると、ティッカータイプのものはHeimdallrを除き以下の3つです。

比較方法として、次の2つの方法を用意しました。

  • Googleで検索した場合のヒット数。RSS + ソフトウェア名 で日本語のページを検索し、検索結果を最後まで見て、「最も的確な結果を表示するために、上のN件と似たページは除かれています。」のNを成績とします。

  • VectorをキーワードRSSで検索し、人気順に表示した際の順位。検索結果の順位がそのまま成績となります。この検索結果は、ソフトウェアを更新直後には最低の順位となりますので、更新してからのダウンロード数を計測しているものと思われます。ですので、更新日時も考えて比較することにします。

計測日時は2004/05/25の0時です。

ソフトウェア名Googleヒット数Vector順位(日付)
Rabbit Ticker2396(2004/01/27)
Headline-Deskbar1309(2004/05/02)
パラボラミニ73登録無し
Heimdallr4314(2004/05/08)

とりあえず結論。

現状ではRabbit Tickerが一番人気があるようです。
しかし、Headline-Deskbarは、最近公開された割には人気がとても高いので、勢いがあるようです。
肝心のHeimdallrはどうなのかって?うーん。とりあえずビリですね。Mostマイナー賞です(いらねー)。

というわけで悲しいながらHeimdallrの人気は大したものではありません。
恐らく、他のRSSリーダー開発者からはライバルと思われていないでしょう。ライバルと思っているのはこちらだけだと思われます。

ああ、なんて悲しすぎる結論なんだ・・・

2004年05月23日

現在開発Suspend中のソフトウェア

本サイトを訪れた人の中には、Vectorの作者紹介ページから来た人が大勢いると思いますが、
本サイトで公開しているのは今のところHeimdallrとLancasterだけです。

Ray Fighter、断面Golf、DogFight、SBookは本サイトでは公開しておりません。

というのも、現在開発Ready状態(いつでも要望に応えて機能追加やバグ修正ができる状態)にあるのはHeimdallrとLancasterだけだからです。

他のソフトウェアは、現在開発Suspend状態(機能追加やバグ修正をするためにいくつのも作業が必要であり、すぐには何もできない状態)です。

Ray Fighterと断面Golfは、何世代か前の古い開発環境及び古い技術で作られたものであり、これから改良するのは大変ですが、
SBookとDogFightは、一つ前の開発環境で作られたものなので、
開発Ready状態にするのはそれほど大変ではありません。

ですので、SBookとDogFightについては、要望があれば開発Ready状態にした上、
本サイトで公開したいと思います。要望が無ければ今のまま開発Suspend状態です。

2004年05月19日

Heimdallrの最大の特徴

さて、私はHeimdallrというソフトウェアを開発しています。
ここで、改めてHeimdallrの最大の特徴について考えてみたいと思います。

作者だったら最大の特徴なんて把握していると思われるかもしれませんが、
意外と作者でも分かってないものです。

私は、最初Heimdallrの最大の特徴は、記事のタイトル確認から概要確認、全文確認までが
少ない操作でスムーズにできることだと思っていました。

しかし雑誌での紹介文などを読むと、
どうやら、

マルチウィンドウ

の方が最大の特徴と言われることが多いようです。
良く考えると、記事一覧を表示するためのウィンドウをいくらでも増やせるRSSリーダーって
あまり無いようです。

開発当初は、ジャンル分けくらいには利用できるかな、と言う感じで
マルチウィンドウ機能を実装したのですが、
最近は、分かりやすいジャンル分けができるというということは結構重要なのではないかという気がしてきました。

ソフトウェアが作者の思惑と違うところで評価されるのもそれはそれで結構楽しいです。
まあそもそもHeimdallrは月間ダウンロード数500位のマイナーRSSリーダーなので
評価されていると言って良いのかどうかは良く分かりませんけどね。

2004年05月18日

ソフトウェア開発者はソフトウェアでものを語れ

このサイトは、各ページ毎にアクセスカウンタが付いていて、
どのコンテンツが一番人気があるのか分かるようになっています。

現在一番人気があるコンテンツは、作品集のHeimdallrです。
アクセス数がトップページの半分以上あり、このサイトを訪れた人の半分以上がHeimdallr目当てであることが分かります。

良く考えて見ると、このサイトでもっとも独自性のあるコンテンツって、ソフトウェアなんですよね。
開発日記やらなんやらも、それなりに頑張って書いているのですが、そもそも私に独自性がある文章を書く力が無いため、ソフトウェア以外のコンテンツは、やっぱり(残念ながら)似たようなものがあちこちにあります。

結局の所、こういうことですか。
ソフトウェア開発者はソフトウェアでものを語れと。

2004年05月16日

最下位Windowの作り方

環境
Visual C++.NET 2003
ライブラリ
MFC 7.1

壁紙に張り付くようなウィンドウの作り方です。

最初に、ウィンドウクラスCXxxWndにWM_WINDOWPOSCHANGINGの メッセージハンドラを追加します。

次に、メッセージハンドラの内容を以下のように記述します。

void CXxxWnd::OnWindowPosChanging(WINDOWPOS* lpwndpos)
{
	CXxxWnd::OnWindowPosChanging(lpwndpos);
	lpwndpos->hwndInsertAfter = HWND_BOTTOM;
}

以上で完了です。

Heimdallr 1.04alpha1リリース

Heimdallr 1.04alpha1をリリースします。
安定版ではありません。
Heimdallr 1.04alpha1

安定版はHeimdallr 1.03です。

1.04alpha1では、1.04の目玉機能である既読ボタンを実装してみました。
デザインは置いておいて、とりあえず機能面でのコメントを頂ければ幸いです。
細かいコメントも歓迎します。

既読ボタンの使い方は2つあります。

  • クリックする。クリックすると、記事が既読になってビューから消えます。
  • ドラッグする。ドラッグした範囲の記事が全て既読になってビューから消えます。

2004年05月11日

VisualSourceSafeの分岐とマージ

環境
VisualSourceSafe 6.0d

最近、VisualSourceSafe(以下VSS)の分岐機能とマージ機能を使ってみました。 これらの機能を使った感想や、うまく使うコツを書いてみたいと思います。

分岐とマージは、ソースコード管理の世界では一般的な単語だと思いますので 説明は省略します。

過去のバージョンからの分岐。
VSSエクスプローラーから分岐させたいプロジェクトを選択し、メニューから以下の通りに操作します。
プロジェクトの履歴→分岐するバージョンのラベルを選択→共有→共有後に分岐をチェック →適当なプロジェクトを選択(分岐するプロジェクトの親プロジェクトが良い)→新しい名前を適当に選択(プロジェクト名+分岐時点のラベル名が良い)
「共有後に分岐」のチェックを忘れた場合は、後で分岐しておきましょう。

分岐できたら、分岐したファイルを編集してバグ修正や新機能の追加を行います。 編集が完了したらチェックインしておきましょう。

ビジュアルマージのOFF。
マージを行う前に、コンフリクトの発生に備えます。
VSSは、GUIでコンフリクトの解消が行えるビジュアルマージというツールを用意してくれています。
しかし、コンフリクトの解消というのは開発者が一行一行チェックして行わないとうまく行かない微妙な作業であるのに対し、ビジュアルマージは、分岐元のコードを取り込むか、分岐先のコードを取り込むか、両方のコードを取り込むか、などといった大雑把な選択しかできません。
そのためちょっと使い物にならないので、ビジュアルマージを使用せず手動でコンフリクトの解消を行うことをお勧めします。ビジュアルマージはメニューから以下の操作を行うことによりOFFにできます。
ツール→オプション→全般→ビジュアルマージの使用→いいえ

分岐先のソースの分岐元へのマージ。
次に分岐元を編集して分岐先に加えた変更を取り込みます。

最初に、分岐元のソースを全部チェックインしておきましょう。 マージ直前ということでラベルを設定しても良いです。

次に、分岐先でどのファイルを編集したのか確認しましょう。 編集したファイル名を全て覚えていれば良いのですが、全部は覚えていない場合、 分岐先のプロジェクトの履歴を見て、レポートをファイルかクリップボードに出力しておくと良いでしょう。

次に、先ほどのレポートに記述されているファイル一つ一つに対し、 VSS上で分岐元のファイルを選択し(分岐先のファイルではありません。分岐元です)、以下の操作を行いマージします。
ソースコード管理→分岐ファイルのマージ →分岐先プロジェクト選択→マージ
分岐ファイルのマージはファイル一個ずつ行なうしかないようです。 ファイルがたくさんある場合はどのファイルをマージするべきか分かり難く大変ですが、 先ほど出力したレポートを見つつ一つずつマージしていきましょう。

マージした際、「コンフリクトのない状態でマージされました。ここでチェックインしますか ?」というメッセージが表示されてそのままチェックインできることがありますが、 ここではチェックインせず、「いいえ」と答えてチェックアウト状態のままにしておきましょう。
これは、VSSが自動的に結合を行った結果、特に問題なく結合できたということを意味していますが、VSSはプログラミング言語を解釈した上で結合したわけではないので、 VSSでは問題がなくても実際にコンパイルすると問題は山ほど出てきます。 そんな問題があるコードをチェックインしてはいけません。

さて、レポートに書いてあるファイルを全てマージしたとします。 その時点では、マージしたファイルは全てチェックアウト状態になっているはずです。 とりあえずビルドしてみましょう。 コンパイルエラーがわんさか出てくるはずですので泣きながら地道に潰していきましょう。

場合によっては、ソースコード中に次のような文字列が挿入されていることがあります。

<<<<<<<
=======
>>>>>>>

これはコンフリクトマーカーと呼ばれるもので、 コンフリクトが発生してVSSがうまく結合できなかったことを示しています。 このマーカーがある周辺は、特に注意しながら修正してきましょう。

なお、マージ直前のコードは拡張子orgとなって残されているので オリジナルコードを見たいときには参照しましょう。

コンパイルエラーが全てなくなったら、テストの1つでも行なった後チェックインしましょう。 このとき拡張子orgのファイルは削除されます。これでマージ作業は完了です。おめでとうございます。

2004年05月09日

MFCアプリケーションが自身を再起動する方法

環境
Visual C++.NET 2003
ライブラリ
MFC 7.1

アプリケーションの初期化シーケンスをもう一度走らせたい場合など、 アプリケーションが、自身を再起動させたいときがたまにあります。 それを実現する方法です。

手順は以下の通りです。

  1. アプリケーションを実行しているプロセスのIDを取得する。
  2. ::ShellExecuteで自身を起動し、コマンドラインからプロセスのIDを渡す。
  3. 直ちに終了する。
  4. 起動時にコマンドライン引数を確認し、プロセスのIDが存在したら、::WaitForSingleObjectでプロセスがシグナル状態になるまで待つ(プロセスがシグナル状態=プロセス終了)。

サンプルコードを載せておきます。

再起動を行う部分のコードは以下の通りです。

TCHAR strPath[MAX_PATH];
::GetModuleFileName(AfxGetInstanceHandle(), strPath, sizeof(strPath) / sizeof(TCHAR));
TCHAR strCurDir[MAX_PATH];
::GetCurrentDirectory(sizeof(strCurDir) / sizeof(TCHAR), strCurDir);
// 元プロセスのコマンドライン引数を継承する必要があるか検討して下さい。
DWORD dwProcessId = ::GetCurrentProcessId();
CString strCmdLine;
strCmdLine.Format("/waitterminate %u", dwProcessId);
::ShellExecute(NULL, NULL, strPath, strCmdLine, strCurDir, SW_SHOWNORMAL);
// アプリケーションを終了する。
AfxGetMainWnd()->SendMessage(WM_COMMAND, MAKEWPARAM(ID_APP_EXIT, 0), NULL);

CXxxApp::InitInstanceに以下のコードを追加します。

BOOL CXxxApp::InitInstance()
{
	bool bWaitTerminate = false;
	DWORD dwWaitProcessId;
	for (int i = 1; i < __argc; ++i) {
		if (!(__argv[i][0] == '/' || __argv[i][0] == '-')) {
			continue;
		}
		if (_tcsicmp(&__argv[i][1], "waitterminate") == 0) {
			if (++i >= __argc) {
				continue;
			}
			dwWaitProcessId = static_cast(_ttoi(__argv[i]));
			if (dwWaitProcessId != 0) {
				bWaitTerminate = true;
			}
		}
	}
	if (bWaitTerminate) {
		HANDLE hWaitProcess = ::OpenProcess(SYNCHRONIZE, FALSE, dwWaitProcessId);
		if (hWaitProcess != NULL) {
			// 10秒待っても前のプロセスが終了しない場合は、アプリケーションを終了します。
			if (::WaitForSingleObject(hWaitProcess, 10 * 1000) == WAIT_TIMEOUT) {
				return FALSE;
			}
		}
	}
	// CXxxApp::InitInstanceの残りの処理を行う。
}
アイデアそのものはMFCに依存していないので、 ちょっと変更すればMFCを使わなくても実現できると思います。

2004年05月08日

Heimdallr 1.04で実装する機能

無事にHeimdallr 1.03がリリースできたので、
1.04以降をどうするのか考えてみます。

現状、Heimdallrには大きく分けて次の二つの課題があります。

  • デザインの向上。いい加減に白い背景に灰色の枠のGUIから卒業しないとなりませんね。

  • 見たくない記事をビューから削除する方法。現状、記事を見ないで既読にするためには、記事を右クリックしてメニューを開き、「この記事を既読にする」を選択する必要があります。面倒ですね。

1.04では、後者の課題を解決したいと思います。
前者も、背景色の変更位はやりたいですが、できるかどうかは分かりません。

上記したことと重なりますが、現状の細かい要望リストを載せておきます。

上に書いてあるものから優先的に実装していきます。上からいくつか実装した時点でバージョン1.04としてリリースします。
実装する際の難易度を難、普、易の三段階で評価し、効果を大、中、小の三段階で評価します。

  • 「このサイトの表示されている記事を既読にする」コマンドを追加する。難易度は易、効果は小。 このコマンドを追加するかどうかは以前考えたことがあるのですが、そのときはビュー右クリックメニューの項目数が多いと分かりにくいと思って追加しませんでした。しかし、しばらく前に追加して欲しいとの要望を受けましたので追加します。
  • 記事にカーソルを合わせてからしばらくはビューを更新しないようにする。難易度は普、効果は小。 記事をクリックしようとしたら別の記事を開いてしまったということが無いようにするためです。
  • 削除ボタンを追加する。難易度は難、効果は大。 見たくない記事をビューから削除するための切り札です。ビューに削除ボタンを表示し、それをクリックすると記事を閲覧することなく既読にします。
  • 記事の未読/既読情報を常に記録する。難易度は普、効果は中。 現在、Heimdallrはそれぞれの記事が未読であるか既読であるか、という情報を終了時に保存しています。ですので、Heimdallrが何らかの理由により正常に終了しなかった場合、前に見たはずの記事が再びビューに表示されます。記事を閲覧するたびにこの情報を保存することにより、いつHeimdallrが落ちても(あるいはOSが落ちても)一度見た記事は表示されなくなります。
  • 枠の色、文字色、背景色をカスタマイズ可能にする。難易度は普、効果は中。 色を変えるだけで結構見た目も楽しめるようになるのではないかと思います。枠を木の色にして背景色を黒板の色にしてみたりすることができますしね。
  • 外観を変更できるようにする。難易度は超難、効果は大。 WinAmpのスキン機能のようなものを追加しようかと考えています。 しかしスキンフォーマットの策定からスキン読み込み/表示機能の実装、スキンに使用する画像の選定やその画像のライセンス問題の解決と課題は山済みで大変そうです。
  • エラー管理を行う。難易度は難。効果は中。 現在、Heimdallrはエラーが発生したサイトは無視するだけです。しかし、無視していると、エラーが発生したことがユーザに伝わららず、ユーザが対策を打つこともできません。 エラーが発生したことをユーザに伝えることができる仕組みが必要だと思います。
  • キーワード検索処理をバックグラウンドで行う。難易度は難、効果は中。 現在、GUIを扱うスレッドと同じスレッドでキーワード検索処理を行っています。その結果、更新する記事が数千ある場合、更新完了時に記事の中からキーワードを探し出す処理を行うため数秒固まったように見えます。これをなんとかしようと思います。
  • 大文字小文字を区別しないキーワードを設定できるようにする。難易度は普、効果は小。 大文字小文字を区別しないこと自体はなんとかなるのですが、キーワード設定ダイアログの仕様を決めるのが難しそうです。
  • 表示項目をカスタマイズできるようにする。難易度は難、効果は小。 現在は、サイトの短縮名、記事の日時、記事のタイトルの3つを表示していますが、これの順番を変えたり、一部を非表示にできるようにします。
  • RSS auto-discoveryに対応する。難易度は易、効果は小。 Heimdallrにとっては、RSS auto-discoveryに対応したサイトの(htmlへの)URLを登録するのも、RSSファイルへのURLを登録するのも大差ないので、あまり有難くはなさそうです。
  • ビューのキーワード/非キーワード間にカーニングをかける。難易度は普、効果は小。 現在、ビューに表示されている記事のタイトルのキーワードと非キーワードの境目はカーニングが行われていません。ちゃんとカーニングしておいた方が良いです。といっても実際にはカーニングを行っても誰も気付かないとは思いますが。

バージョンアップをすればするほど重たい要望だけが残るようになりますねー。

見出しの著作権

しばらく前、ニュース記事の見出しをネット上で無断配信され著作権を侵害されたとして、読売新聞東京本社がデジタルアライアンスを訴え、敗訴したという話がありました。

記事の見出しを扱うRSSリーダー(Heimdallr)を開発している私にとっては、見出しに著作権が無ければ色々なしがらみが無くなり楽になる言うこともできるのですが、敗訴したのは、正直、残念です。

というもの、適切な見出しを考えるのはとても大変なのです。ですので、私は適切な見出しを考えた人にはしかるべき敬意を払うべきだと思っています。
見出しに著作権が無いという判決には、見出しを考えた人への敬意が全然感じられません。
しっかりと仕事をした人にしっかりと敬意が払われないと、手抜き作業が蔓延するようになります。
その結果、世の中から適切な見出しが少なくなっていくのではないかと心配しております。

がんばれ読売。

Lancaster 1.03リリース

Lancaster 1.03をリリースします。
安定版です。

Lancaster 1.03
Lancaster 1.03ソースコード(Visual C++.NET 2003用)

変更点は以下の通りです。

  • 開発環境をVisualC++.NET 2003へ移行

  • ファイル転送完了時、転送率が100%にならないことがあるバグを修正


Lancasterとは

Lancasterは、LANで接続された複数のWindowsマシンでチャットを行うためのソフトウェアです。

以下のページからダウンロードできます。
Lancasterリリース

以下のような場所で使うことをお勧めします。

  • 大学の研究室。席が離れていてもLANで繋がっていればおしゃべりできます。

  • 会社。席に座ったまま仕事の話題でも雑談でも盛り上がれます。

  • 学校の授業。コンピューター室での授業の時に使うと盛り上がるかもしれません。

  • その他大規模なLANが組んであるところ。

Lancasterは以下のような特徴があります。

  • 接続が簡単です。初回起動時にニックネームと本名を設定するだけで接続できます。

  • 部屋名を設定することにより、複数の会話の場を提供できます。

  • チャット参加者の間でファイルの送受信が可能です。

  • 普段はタスクトレイに潜み、名前が呼ばれたときのみユーザにそのことを通知することができます。

なお、以下のようなことはできませんので注意して下さい。

  • インターネット経由でチャットする。


ちょっと昔に作ったものですが、要望がありましたので紹介記事を復活させます。

Heimdallr 1.03リリース

試しにWeblogでソフトウェアのリリースをしてみます。

Heimdallr 1.03をリリースします。
安定版です。
Heimdallr 1.03
Heimdallr 1.03ソースコード(Visual C++.NET 2003用)

変更点は以下の通りです。

  • 文字が化けて?になってしまう文字のうち、頻出する文字は?にならないようにした。
  • ビューにRSSファイルへのリンクをD&Dすることにより登録できるようにしました。
  • ビューの右クリックメニューから設定ダイアログを開けるようにしました。
  • ビュー設定ダイアログで複数のビューを一度に設定できるようにしました。
  • 再配布の条件を付属ドキュメントに明記しました。
  • ビューをタスクバーに表示しない普通のウィンドウにできるようにしました。
  • タスクトレイアイコンの左クリックにより(最下位以外の)ビューが前面に表示されるようにしました。
  • 長い概要を概要ウィンドウに表示するときは途中で切って省略文字を付加するようにしました。
  • 概要ウィンドウのキーワードを強調表示するようにしました。
  • タスクトレイアイコンのTipにワンポイントヒントを表示するようにしました。
  • ビューを新規作成したとき、以前のビューの設定をコピーするようにしました。
  • ビュー設定ダイアログの編集ボタンと削除ボタンは必要が無いとき操作できないようにしました。
  • 自動生成された短縮名が文字化けすることがある問題を解消しました。
  • RSSファイルのチャンネルの更新時刻は無視するようにしました。
  • タイトルに空白が含まれている記事が起動時に未読になってしまう問題を解消しました。

不適切なRSS Feed

私はHeimdallrというRSSリーダーを開発しています。こういうものを開発していると、
さまざまなRSS Feedを見かける機会があるのですが、結構、不適切なRSS Feedがあります。
不適切なRSS Feedとは、RSS Feed提供者が提供したいと思っている情報と、
RSS規格を厳密に適用して解釈した結果とが食い違っているRSS Feedのことです。

例えば、こんなRSS Feedを見かけました。

  • RSS 2.0なのに、itemの更新時刻をdc:date要素で記述しているRSS Feed
    RSS 2.0ではitemの更新時刻はpubDate要素を使用して記述するものです。

  • RSS 0.92なのに、itemの更新時刻をpubDate要素で記述しているRSS Feed。
    RSS 0.92ではitemの更新時刻を記述する方法はありません。RSS 1.0かRSS 2.0を使用するべきです。

  • RSS 1.0で、/rdf:RDF/item 要素はちゃんとあるのに、/rdf:RDF/channel/items/rdf:Seq 要素が空要素になっているRSS Feed。
    /rdf:RDF/channel/items/rdf:Seq要素にはrdf:li要素なりなんなりを記事の数だけ含ませるべきです。

  • RSS 1.0で、/rdf:RDF/item要素のrdf:about属性がユニークではないRSS Feed。
    /rdf:RDF/channel/items/rdf:Seq/rdf:li要素のrdf:resource属性もユニークではありません。この属性はユニークである必要があります。

一応前もって言い訳しておきますが、もしかしたら私が勘違いしているだけで上記のRSS Feedは適切なのかもしれません。
しかしここは不適切であるとして話を進めます。

こうしたRSS Feedに対し、RSSリーダーはどう振舞うべきか。それはとても難しい問題です。
RSSに限らず、不適切なデータに対し、どのように振舞うべきか、という問題は昔からあります。
例えば、Webブラウザ開発においても、不適切なHTMLファイルに対してどう振舞うべきか、と悩んだことがあったと思います。

どう振舞うか、といっても実際のところ方針の選択肢は2つしかありません。

  • RSS Feedを厳密に解釈し、仕様に書いていない要素などは無視する。

  • RSS Feedの解釈をあまり厳密ではないものにし、仕様に書いていない要素も解釈しようとする。

現状、Heimdallrは、前者の方針で解釈してます。私は、世の中のRSSリーダーはすべて前者の方針で解釈するべきだと思っています。
そうすれば、不適切なRSS Feedは、すぐに不適切なRSS Feedであることが判明し、提供者が修正します。これにより、世の中から不適切なRSS Feedがなくなります。

しかし、現実には後者の方針で解釈しているRSSリーダーが既に存在します。例えば、InfoMaker様が提供するHeadline-Readerです。
Headline-Readerは、RSS Feedをフランクに解釈しているらしく、
上記したような不適切なRSS Feedからもしっかり情報を読み取ってくれます。

Headline-ReaderのユーザはHeimdallrのユーザよりも遥かに多いため、(桁が2つ以上違う)、Headline-ReaderでRSS Feedを解釈できるかどうかだけしか
確認していないRSS Feed提供者は大勢いるでしょう。そういうRSS Feed提供者は、RSS Feedに潜む問題を発見できないわけです。
また、後者の方針も、多くのRSS Feedが解釈でき、多くの情報を得ることができるという利用者側の利点があるため、簡単に否定することもできません。
また、RSSには多くのバージョンがあり、それぞれのバージョンを厳密に解釈するのは難しいという開発側の問題もあります。

つまりは、どちらの方針も利点欠点が色々あり、さらにはRSS自身が抱えている問題もあって状況は複雑になっています。
どちらの方針が良いのか考えても結論はでないので、RSSの世界が、技術面から見て、これからどのように進めば理想的か、というのを考えてみます。

まず最初に、山ほどある今のRSSの仕様を統一した仕様を策定します。
次に、統一RSS仕様に準拠しているかどうかを検証する検証ソフトを普及させます。
次に、統一RSS仕様に準拠したデータをどのように解釈し、どのように振舞うべきかを定めたRSSリーダーの仕様を策定します。
最後に、RSSリーダーの仕様に準拠したRSSリーダーを開発し、普及させます。

しかしまあこんな感じでうまく進むことは無いと思います。
RSSは、大勢の人がそれなりの思惑をもって関わっていますので、
そう簡単に統一仕様が決まるとは思えません。ましてやRSSリーダーの仕様なんて誰も決められないでしょう。
いやはや世の中難しいですねぇ。

VisualSourceSafeの小技

2004/05/01の開発日記のネタを、Weblogで書いてみるとどうなるか試してみます。
環境
VisualSourceSafe 6.0d

ちょっと便利なVisualSourceSafeの小技集です。

キーワード展開。
以下のようなキーワードをソースコード中に含めておくと、 VisualSourceSafe(以下VSS)がログなど色々なテキストを追記してくれます。

/*
 * $Log: $
 */

但し、VSSアドミニストレータを起動して、「オプション→全般→キーワードを展開するファイルの種類」に、 「*.cpp;*.h」のようにキーワード展開するファイルの種類を指定する必要があります。 Log以外にも色々なキーワードがあります。詳細はVSSのヘルプを見て下さい。

プロジェクト名の変更やプロジェクトの移動。
VSSエクスプローラーからプロジェクトを選択して「ファイル→移動」や「ファイル→名前の変更」で変更や移動が行えます。 間違えたプロジェクト名をつけたからといっても諦めないで下さい。

ラベル名の変更。
「プロジェクトの履歴→ラベルが設定されたバージョンを選択→詳細情報」からラベル名の変更や削除ができるようです。 ラベル名を間違えても泣くことはありません。さくさく修正してしまいましょう。

プロジェクトのクローク。
「プロジェクトを選択→プロパティ→クロークプロジェクトをON」とすることにより、 プロジェクトをクロークにすることができます。クロークになったプロジェクトは、「最新バージョンの取得」や「チェックアウト」処理を 再帰的に行ったとき、操作の対象から外れます。
私は、自分に著作権が無いソースコードは適当な名前のサブプロジェクトに格納し、そのサブプロジェクトをクロークにすることにより、 ソースコードを公開したときに自分に著作権が無いソースコードまで公開されないようにしています。

Heimdallrとは

Heimdallrは、壁紙のようにデスクトップに貼り付けることができるRSSリーダーです。

以下のページからダウンロードできます。
Heimdallrリリース

機能は以下のとおりです。

  • バージョン0.91/0.92/1.0/2.0のRSSファイル及びバージョン0.3のAtomファイルを取得し、記事の見出しをまとめて表示できます。

  • 定期的にRSSファイルを取得し、常に最新の記事の見出しを表示します。

  • 見出しが多数有る場合、いくつかに絞って表示してくれます。

  • キーワードを指定して優先的に表示することもできます。

  • 複数のウィンドウを表示し、夫々のウィンドウに別のサイトの記事の見出しを表示できます。

こんな方にお勧めです。

  • WWWでニュースを見ることはあまり無くても、ニュースタイトルくらいはチェックしておきたい方。

  • 友人が書いた日記(blog)などを素早くチェックしたい方。

  • 余っているデスクトップのスペースを有効活用したい方。


以上、宣伝させて頂きました。

パラボラミニやRabbit Tickerに匹敵するくらいの出来には仕上がっていると思います。
ディスプレイとにらめっこして仕事をしている方にはお勧めの一品です。

はじめに

はじめまして。

ここは、MASATOがソフトウェア開発を行ったときに色々と感じたことなどを
書いたWeblogです。

このWeblogの目的は以下の通りです。

  • Weblogを実際に使ってみてどんなものか勉強する。

  • 開発日記の更新を簡単にしたい。

  • トラックバックやコメント機能で他の人と情報共有したい。

古い開発日記は下記のURLにあります。
http://www.sutosoft.com/oldroom/devdiary/

WeblogはMovableTypeを使って書いています。
まずはMovableTypeをインストールしてみた感想を書いてみます。

第一印象は、インストールが簡単だなぁ、ということです。
パーミッション等が設定されたUNIX用アーカイブファイルが提供されているのも便利ですし、
初期化を行ってくれるCGIスクリプトが用意されているのも便利です。
インストール手順が書かれたドキュメントも分かりやすかったですし、
夫々のCGIがエラーメッセージを分かりやすく表示してくれたのも良かったです(エラーが発生するとInternal Server Errorとしか表示しないCGIスクリプトの多いこと多いこと・・・)。

日本語化パッチの説明も分かりやすく、普通ならば色々とトラブルが発生するはずの
インストール&パッチ宛作業が、ほとんどトラブル無しで行えました。

いやーCGIパッケージはこうありたいものですね。