Welcome to Magicale2001.... このソフトは動く3Dカレンダーの表示と電子メールの受信ができます。メモを記述することもできます。DirectMusic を使用したサウンドはデフォルトではオンになっていますので軽快な曲とともに起動されます。 "つれづれになるままに…"は、役に立つことも多少は書いてありますがそうでないことも多いです。鬱陶しい向きには"起動時にワンポイントを表示"のチェックを外してください。 デフォルトでは電子メール受信を設定すると、すべて自動的に表示されるようになっています。表示したくないメールアドレス、ホスト名などがあれば設定してください。 電子メールを自動表示してしまうと聞くと、"I Love You"ウイルスの類に感染してしまうのではないかと思われるかも知れませんね。でもこのソフトは HTML は通さないし JAVA/VBスクリプトを解釈する機能を一切持たないのでそういった心配は無用です。自慢げに言うことではないですが…(^^; ダイアログ枠をマウスでドラッグすれば、Magicale2001のスクリーンサイズを変更することができます。目一杯大きくして楽しみましょう。 Magicale2001は "Magic" と "Calendar" と 2001年(21世紀)をあわせた名称になっています。 西暦100年から西暦9999までの任意の月のカレンダーを表示することができ、また当月ボタンを押せば一気にもどります。 日付のオブジェクトをクリックすれば、メモ情報を入力することができます。同一の日付にいくつでもメモをいれることができます。 終了時の背景、"月面から地球を望むの図"は NASA(NSSDC)のパブリックドメインの画像です。アポロ17号の乗務員が月面から撮影したものです。 "指定"ボタンを押せば、たとえばあなたの生まれた西暦年月に直接ジャンプすることができます。 今から30年ぐらい前のSF映画 "2001年宇宙の旅" に登場するコンピュータ HAL は 1992年の1月に製造されたそうです。奇しくも私の長男の生年月日と2週間しか違いません。(全然奇しくもじゃないですか) このプログラムは Microsoft社の Visual C++ というコンパイラ(開発ツール)と DirectX6.1 SDKを使って開発されています。 このプログラムには3Dアクセラレータは必須でしょう。フレームレート(1秒間に画面を書き換える回数)は最低でも30回ぐらいないと、スムーズな表示にはならないかも知れません。もしそれ以下の場合には高性能3DアクセラレータまたはCPUを買いに走るか、画像の品質を落とすかしてください。 このプログラムは稲垣潤一のCDをヘッドフォンで聞きながら、あるいはフォーレのレクイエムまたは小沢征爾指揮のマーラー4番を聴きながら製作されています。 DirectXの中のメンバ DirectMusic というのを使って高品位なMIDI音楽が再生されるでしょう。 MIDI曲は Microsoft社の"Music Producer"というツールを使って、うちの小学3年と1年のチビさんが作曲しました。もっとも、ほとんど自動なので作曲とはいえないかも? プログラム終了時のスタッフロールどうですか?前からやってみたかったんです。邪魔だと思う人はシェアウエア登録してくださいね。そうすれば、スタッフロールやめさせることもできるし自前のものに変えることもできるようにしておくつもりです。(2000/6/23現在、まだ出来てないけど) このプログラムのメモ情報は MSJET というデータベースエンジンを使って管理されています。ですから MDB ファイルをアクセスなんかで読むこともできますよ。全然リレーショナルな構成になってないんですけど。 カールセーガン博士は母校の小学生に言いました。「君も銀河の一部なんだよ。」そうなんですよね、現在の太陽の何世代か前の太陽の超新星爆発の一瞬に生成された物質で我々の地球も、我々自体も構成されているんです。 画面の右下に表示されているフレームレートはオプション設定でフォントの種類や大きさを変えることができます。残念ながら色まで変えることが出来るようには作っていません。 メモ情報は"検索"ボタンで記述されたキーワードを検索することができます。検索結果は一覧表示されてクリックすればその情報を直に開くことができます。 コンピュータと関わるようになってもう20年が経ちます。最初は 8Bit のボードコンピュータ TK-80 && BS でした。当時のBasic言語ではとてもこのようなリアルタイム3D表示ができるようになるなんて夢にも思いませんでした。 情報をデータベースから検索したり、登録したりする間に画面表示が止まっては面白くないのでマルチスレッドという方法を使ってなるべくスムーズな表示になるように工夫されています。 メモ情報のウインドウって四角くないでしょ?なんかプログラム的にはすごく難しそうな気がしていませんか?そんなことないんです。リージョン関数を駆使すれば比較的簡単に実現できます。(駆使すること自体がもう簡単じゃないって?) カレンダー生成ルールを使えば、たとえば祝日が変更になったり、新たな祝日ができたりした場合に簡単にルールを追加、修正することができます。Magicale2001のウリのひとつですかね。 もちろん"ハッピーマンデー"法案にも対応しています。もしハッピーフライデーとかハッピーチューズデーとかができたとしても大丈夫。(ただしユーザが御自分でルールを入れる必要がありますけれど) コンピュータに搭載されたビデオメオリが少ない場合には、Magicale2001の画面を大きくしすぎるとメモリ不足になって表示されない場合があります。普通ビデオメモリは増設できないので大きくするのは諦めるか新しいビデオカードを買いましょう。 よくオンラインソフトなどで "このプログラムはレジストリを使いません"などと高らかにうたって独自の設定iniファイルに設定などを保存するソフトを見かけます。まるでレジストリを使わないことがいいことかのごとく(実際、肥大化しすぎるとよくはないんですがね。)言ってますが、僕はそういうソフトは好みません。 岩崎賀都彰さんの"太陽系45億年の旅"という本が手元にありますが、僕はこのなかで"アマルティアから見た巨大な木星"という絵が好きです。まるで木星の生きている音が聞こえてきそうな迫力の絵です。本当にこの場所に立ってこの景色を見てみたいです。 C あるいは C++ で DirectDraw + Direct3D を使う場合、本当に初期化が難しい。難しいというか面倒くさい。今回のプログラムは今までのしがらみを捨ててゼロからコーディングを開始したので初期化部分だけで10日ぐらいかかった。(仕事終わってから取り掛かるのので、いつも 22:00 ぐらいからかな。) 3Dモデリングする場合、僕の場合 TrueSpace/EZ というソフトを使いました。ソフト自体が安価だしなによりXファイル(米国連邦捜査局に保管されたファイル)を直接はきだせるのがいい。アニメーション情報もはきだせるしね。本格的な用途にはちょっと力不足かも…。 また、ファイル中で親切のつもりで日本語名称がついているのが Direct3D に理解できずに困ってしまう場合があり、テキストエディタで編集して対処しました.... いまどき画面をどうしても256色で使わなければならないコンピュータでこのソフト(Magicale2001)がまともに動くとは到底思えないので、パレットを使った描画のサポートはしていません。また VooDoo系のビデオカードの場合 16bit モードでないとこのソフトはもとよりDirect3D自体が動作しない場合があるので、その場合はビデオモードを切り換えてください。 以前製作された"マジカレンダー"はDirectDrawという技術を使って3D風のカレンダーを表示していましたが、実はよく見ると2Dであることにお気づきだったでしょうか? Magicale2001は違います。正真正銘の3D技術を使って表示されています。その分重くてマシンを選びますが………。 他の人(ソフト作者)はどうだか知りませんが僕の場合マシンは M2-330MHz という今となっては低速マシンで開発しています。作ったソフトを他の場所で試しに動かすととてもスムーズに動くのでビックリします。 最近、というかここ5年くらいモニタが何台も壊れました。1年以内というのも2台ありました。ここはひとつ思い切って液晶パネルにしようということで最も安かった13.4インチ(CRT15インチ相当)のLogitecのを\62,800で買いました。 プログラム中の3Dオブジェクトはプログレッシブメッシュという動的にポリゴン数を可変できるオブジェクトでできています。 そろそろお気付きかも知れませんが、ここに表示される文章はプログラムディレクトリにある tips.txt というファイルに記述されたものが次々表示されています。したがってこれを差し替えれば自分の好きな文章を表示することができます。 メモ表示ダイアログボックスのブルーの部分をドラッグすれば表示位置を移動することができます。 メール受信する時、自分の加入しているプロバイダのメールサーバに直接接続していない場合は、メールの受信には "APOP"オプションを使ってください。パスワードが暗号化されるので安心です。ただし、プロバイダのメールサーバが対応してればですけどね。 Magicale2001で採用しているメール受信時の"APOP"オプションは代表的なメーラー Microsoft の Outlook Express 5.0 でも何故か採用されていません。なぜだろう? バージョン情報ボタンを押してみてください。Internet Exproler がダイアログボックスの中で立ち上がります。 FPS(Frames Per Second)とは1秒間に画面を書き換える回数を表しています。CPUやビデオカードが優秀ならばこの値はモニタのリフレッシュレートに限りなく近づいていきます。 DirectXは最近のコンピュータならば初めから入っています。このプログラムではDirectDraw, Direct3D, DirectMusic というインターフェースを使用しています。また、Windows2000 ならば問題ありませんが WindowsNT4.0ではDirect3Dのバージョンが古いため動作しません。 広島風お好み焼きのおすすめは"肉、玉、そば"です。初めて広島のお好み焼き屋に行ったとしてもこういえば通じます。そばをダブルにして食べる人もいます。 僕の作るプログラムはたいてい Visual C++でスタティックリンクという方法を使ってコンパイル・リンクしています。だから実行モジュールは数百キロバイト大きくなるけど20GBのHDDが1万円で買える時代だから関係ないよね。 スタティックリンクという方法はシステムDLLをプログラム内に内包させてしまうというやり方です。 DLLの有無やバージョン違いなどを気にしなくてもよくなる方法です。 もともとDLL(ダイナミックリンクライブラリ)は昔のマシンの少ないディスク容量、システムメモリを有効に使おうといういう発想からできた仕組みです。その当時はそれは素晴らしい考えだったと思いますが、今となってはシステムDLLのバージョン違いや相互の微妙な相性(?)のせいでうまく動かなくなったりする、やっかいものになってしまいました。 このワンポイントに表示している内容のうち主観的な表現のものはあくまで僕の個人的な意見です。異論や苦情があってもそれに対してメールを送らないでください。(^^; このプログラムは西暦2000年の3月2日の22:18から製作開始されています。本業が忙しかったりして全然ソースに手を入れられない時もあります。特に5月は1ヶ月も放ったらかしだったので思い出すのに必死です。普通ソフトウエア開発の場合ドキュメントを製作してから取り掛かるのが常識ですが、趣味のプログラミングの場合そんな面倒なことはしません。だから、製造中に限りなく脱線して別のソフトになったりすることもあります。 エンディングミュージックはモーツアルト風、ドビュッシー風の MIDI 曲をDirectMusicを使って演奏します。 Q:Magicale2001はフルスクリーンモードで表示できますか? A:できません。なぜなら、「旧マジカレンダーはウインドウ表示できず、非実用的」といわれていたので、このアプリはウインドウ表示を念頭に作られたからです。(^^; こだわりのソフトです。なんで、カレンダーなのにメール受信が必要なの?まあ、いいじゃないですか。好きでやっていることですから。 50億年先には我々の太陽は赤色巨星になって地球を飲み込んでしまうと言われています。またアンドロメダ銀河と我々の銀河が衝突するのも50億年先と言われています。スターバースト現象で新しい星がたくさん誕生すると考えられています。我々の子孫がその時まで生き延びていればどこかに逃げ出しているだろうか。 Magicale2001のホームページは http://www.urban.ne.jp/home/winplus/ です。一度お越しください。 外部に MID ファイルを用意すればその曲を演奏させることが可能です。 メール受信機能はありますが、メールサーバ上のメールを削除する機能は意図的に設けてありません。メールサーバ上のメールはメインで御使いのメーラーによって削除してくださるようお願いします。 Magicale2001では受信したローカルのメールデータを一定期間経過後削除します。メールサーバ上のメール削除ではないことにご注意ください。 新着メールのチェックには POP3 プロトコルの UIDL コマンドを使っているので効率的です。 シェアウエアの機能制限解除は"登録者名"、"登録者メールアドレス"、"解除キー"の3つが正確に合致した場合にのみ行われます。シェアウエア解除キーをアングラサイトに流したりすることは、御自分の名前、メールアドレスも一緒に流すことになります。(続く) もしそういった不正な解除キーをアングラサイトなどで発見した場合には次回からのシェアウエア登録はお断りするのはもちろん、ブラックリストにも登録させていただきます。 スタッフロールが不必要な場合は動作設定画面で"スタッフロールしない"を選択してください。 スタッフロールを"オフ"にしても終了音楽を設定している場合は、音楽の演奏が終わるまでアプリケーションは終了しません。すぐに終了したい場合は"終了音楽もオフ"にしてください。 このソフトをシェアウエア登録するには氏名、メールアドレスが必須です。 2ヶ月ごとの単位で背景画面を設定することができます。また、ご自分の好みのビットマップファイルを背景に設定することもできます。ただし、条件があります。(つづく) 自分の好きなビットマップ画像を背景に設定するには、なるべく16色、256色以外のビットマップを用意してください(このアプリはパレットのサポートをしてないため)。また、ビットマップの横サイズ(ピクセル)は 4の倍数にしてください。(^^; Magicale2001は2001年に間に合うんだろうか?夏までには楽勝で完成する予定だったのだが、そろそろやばいぞ('00/07/24) Direct3D には Immeadiate Mode(直接モード)と Retained Mode(保持モード)という二つの使い方があります。高速で細かい制御ができるのは前者です。このプログラムでは後者のモードを使っています。より高レベル(いいという意味ではない)で解り易いモードだからです。(って、難しくてそれしかできないというのが本音か…) マイクロソフトから新しいプログラム言語(C#)というのが発表されましたね。まあ、Java の亜流だろうから C++ が理解できればそんなに難しくないかな。 自分の場合、一番最初が Basic で 次がFortran ,8080アセンブラ, 6800アセンブラ, その他16ビット/4ビットアセンブラ各種を経てやっと C に辿り着き、ここ3年ぐらいが C++ ですかね。あ、自分らの時代はアセンブラもなかったので、自分で作っていました。(アセンブラを) 昔はハンドアセンブルという方法でプログラムしたり(要するに紙の上だけでプログラムし、マシンコードをはめ込んで行く)、プロのバイナリコードをハンド逆アセンブルしたりして勉強したりしました。 マシンの速度がどんどん速くなっていくので、そのうち VisualBasic だけでプログラムできちゃうような時代になるのかな。嫌だな。 メモパッドの表示文字ってよく見ると、影がついて三次元的表示になっています。本職の場合はこういう細かいことやっても時間かかるだけでいいことないけど、趣味のでやっている場合は気の済むまでやります。 MIDI の繰り返し回数は無限回ではありません。実は10000回だったりします。あなたがそこまで待てればですが…。 描画速度が遅い場合、数字オブジェクトのポリゴン数を我慢できる程度まで減らしてみてください。品質を落としすぎると何がなんだかわからなくなります。(^^; 3Dハードウエアがある場合は、"設定"ボタンから開くプロパティページの"3D設定"で"標準"を選んでおけば大概大丈夫です。 ソフトウエアエミュレーションで描画する場合、"背景イメージを描画しない。"オプションを設定すれば多少速く動作するようになるでしょう。 3Dハードウエアが複数枚挿さっている場合は"設定"ボタンから開くプロパティページの"3D設定"で"3Dハードウエア使用"として適切なHALドライバを選択してください。そうしないと、遅いほうのHALドライバが選択されているかも知れません。 一応、ソフトウエアエミュレーションの設定もできるようにはなっていますが、どの設定にしてもよほど高性能なマシン以外は満足のいく結果はえられないでしょう。 ソフトウエアエミュレーションの中では "MMX" がお勧めでしょう。速度重視の場合は "Ramp"です。光線に色がつかないのでちょっと暗い感じがします。 "RGB"は速度的には相当苦しい選択でしょう。 描画フレームがあまりに飛びすぎる場合には"描画フレーム抜けを少なくする"オプションを設定すれば、マシになるかも知れません。ただし、描画動作そのものは非常に遅くなる可能性があります。 Magicale2001は C++ 言語を使用して作成されています。本来はクラス設計をきちんとやってから取り掛かるべきですが、行き当たりばったりなので汚いソースもあったりします。 プログラマ向け情報:CDaoDatabaseをマルチスレッドで使うとどうもうまくいかなかったりしませんか。AfxDaoTerm()を使うときっと、うまくいきます。マルチスレッドの場合、セマフォを使うの忘れずに! お使いのOSが Windows98 か Windows2000 だった場合、ダイアログボックスが出現するときに「ふわっ」という感じで出てくるでしょ。Windows の新機能を使っているんです。 背景画像の張替えをするときも別スレッドを生成していますが、マシン能力が低いとちょっと引っ掛かったような感じになりますね。スムーズにしたいんですが、なかなか……。 "スレッド"って何かって? 忙しいときに自分の分身を作って別の仕事をやらせることができます。その分身のことを"スレッド"と言います。Windows2000でかつ CPU が複数装着されていたりすると特に有効でしょうね。(たぶん…) カレンダーの生成ルールや、メモ情報を保存したデータベースは MS Access の MDB 形式になっています。データが重要な場合には magicale.mdb ファイルを時々バックアップしておいてください。 画面を右クリックするとポップアップメニューが出現します。Magicale2001画面が小さすぎてボタンが押せない場合にお試しください。 数字のオブジェクトは平日、土日、祭日、記念日で色分け表示することができます。 平日の色使いで"面ごとにランダム色"を選択した場合はマシンによっては描画パフォーマンスが落ちる場合があります。 Windows2000の場合はダイアログボックスの出現時にはフェードアニメーションを使用しています。Windows95/98の場合はOSが対応していないので使用していません。 プログラムを作成する時、いつも参考にするのは MSDN magazine(旧 MSJ && MIND)です。でも、非常に高度で難しいので理解できるのはその一部だけでいつも消化不良を起こしています。(続く) プログラマ向け情報:たとえば Windows2000ではファイルオープンコモンダイアログの形式が変更になっています。通常の MFC ではこれを使用できませんがMagicale2001では使用しています。これは MSDN mag.の情報によるものです。 1054年7月4日。中国の天文学者はおうし座の中に超新星を発見した。いまでは"かに星雲"とよばれていて、地球から 5000光年の距離にある。 メモ情報を検索するときに "*" をキーワードとして入れると該当年のすべてのメモにヒットします。何をいれたかわからなくなった時などにつかってください。 このアプリはマシンを選んでしまうソフトですが、今隣に座っている大上君のパソコン(Pen3-700MHz)では 100 FPS オーバーします。すごいですね。 ちなみに僕の使っているマシン(M2-333MHz)では 3DカードにBansheeを使ってやっと 20FPS です。ぎりぎり我慢できる限界ですね。 実行モジュールのサイズはかなり大きいですが、これはプログラムが冗長な作りだからではなく背景画像やMIDファイル、3DのXファイルなどをすべて含んでしまっているからです。だからプログラム自体の占有メモリは少ないです。(きっと!) このプログラムのメール受信はマルチアカウント対応です。複数のメールアドレスをお持ちの場合でも、もれなく受信することができます。 カールセーガン博士の著書「コスモス」(邦訳・朝日新聞社)はテレビ化もされ全世界で5億人に視聴されたそうです。もちろん日本でも約20年前に放映されました。御存知の方も多いのではないでしょうか。(続く) 「コスモス」の中で印象に残ったフレーズを紹介します。(木村繁氏 訳)『アップルパイを作るためには、小麦粉、リンゴ、少量のあれやこれやと、熱とオーブンが必要である。材料はたとえば砂糖とか、水とかいう分子でできている。』(続) 『そして分子はたとえば炭素、酸素、水素といったような原子でできている。ではこれらの原子は、どこから来たのだろうか。水素以外の原子は恒星のなかでつくられたものである。』(続) 『恒星は、宇宙の台所のようなものだ。そこで、水素の原子が料理され、重い原子になった。そして、その恒星は、宇宙のチリが凝縮してできる。その気体とチリは宇宙のはじまりである大爆発「ビッグバン」の時に作られた。』(続) 『もし、あなたが、一からはじめてアップルパイを作ろうと思うなら、あなたは、まず宇宙を発明しなければならない。』(カールセーガン博士の著書「コスモス」木村繁氏 訳 朝日新聞社より) magicale2001 のメール機能ではウイルス感染は絶対にしません。なぜなら、JAVAを解釈する機能も添付ファイルを開く機能もないからです。(^^; メールのメッセージ表示フィルタ機能を使えばよみたくないメッセージやプライベートのメッセージを表示させないようにすることができます。ただし、表示しないだけでダウンロードはされています。(続く) ですから、表示しないようにしたメールも過去ログには残っていますので御留意ください。 恒星へと今も旅を続けているボイジャーには銅版に金を張ったレコードが積載されています。どこかの宇宙人が拾い上げてくれるといいのだが…。 春秋分の日は前年の閣議で正式に決定されるものなので、本当からいえば先の春秋分の日は表示できないはずです。しかしMagicale2001では計算によって求めた春秋分の日を2001〜2010までに限り表示するようにしています。 1948年に祝日法というのが制定されていますので、国民の休日に関してはだいたい1949年〜2099まで表示するようにしてあります。一部には1949年からではないのもあります。(続く) 国民の休日の表示が2099年まででは足らない方(笑)は、表示ルールを変更すればそれ以降でも表示されるようになります。 Magicale2001本体はC++言語で製作されていますが、2000/9/27現在 C++クラス総数は96、コード総行数は32058行です。(ステップ数にあらず) 今年初頭は2000年問題とやらで大騒ぎでしたが、実はパソコンには次なる2038年問題(?)があったりします。1970年1月1日をゼロとするカウンタ値が2038年1月18日でオーバーフローするためです。(続く) その辺を意識して書いてないプログラムだと問題が発生します。Magicale2001では意識したつもりではありますが、その時になってみないとどうなるかよくわかりません。もしかしたらOS側でカバーしてくれるかも…。 まったく、1年間でハードディスクを4台も飛ばしてしまう(別々のマシンだけど)一般人なんて、日本中探して何人いるんだろうか。すべて突然に、しかも不良セクタでズタズタ状態です。ちゃんとシャットダウンしてるのに…。ハードディスクは信用できない…。(続) 日ごろの行いのせいだと、赤松君にからかわれてしまっています。そこで新たにハードディスククーラーを取り付けることにしました。 新着メールを表示している時、"既着扱いにする"ボタンを押せば、それらはすべて SJISテキストファイルとなって保存されます。メールのタイトルがファイル名になります。 ハレー彗星が前々回接近したときは、毒ガスを含んだ尾が地球を掠めるということで地球最後の日という騒ぎだったようです。この世の最後の楽しみとして"彗星パーティー"がが流行ったとか。 土星も木星も巨大惑星です。ほとんどがガスでできていて人間が歩けるような地面はない(?)そうです。 月の表面にある"ウサギの餅つき"の模様は、内部の鉄だとかそういった重たい金属が地球の引力に引き寄せられて地球側(表)に集まってできたものです。だから、月の裏側にはあのような模様はありません。重心がずれているから、もし転がすことができたらきれいなフックボールになることでしょう。 シドニーオリンピックを見ていて思ったんですが、柔道のポイント制って何とかならないんですかね?剣道の個人戦みたいに"一本"決まるまで制限時間なしでやってほしいな。