XML エディタの <oxygen/> を購入しました。そろそろ Internet Explorer 7 が出そうなので、当サイトも XHTML に移行しようかなぁと考えているのが理由の一つ。もう一つの理由は、ウェブ用、印刷用ともに使える形式に興味が出てきたからです。
先日、大学の卒業論文を次のような手順で執筆、印刷しました。
執筆を始める時、HTML と SVG だけで印刷レベルの文書を作れないだろうかと考えました。CSS Level 2 では例えば用紙サイズや改ページなど印刷用のスタイルが追加されました。それを使えばウェブにも印刷にも使える原稿を作れるのではないか、と考えたのです。 ・・・実際には、それらのスタイルを使って遊んでみたかっただけなのですが(笑)。
結果から言うと、現段階では無理でした。CSS Level 2 ではヘッダやフッタ、そしてページ番号という概念が無いからです。先ほど記した手順の最後で、目次、ヘッダ、フッタを 「Word 上で」書き加えたのはこれが理由です。
今回の経験では結果として満足するものは得られませんでしたが、CSS のメディア指定やカウンターなど、色々と勉強できました。CSS Level 3 では Paged Media Module というモジュール(モジュールという概念は未調査。サブセットかな?)が定義され、ヘッダ、フッタ、ページ番号などを扱えるようになるようです。もし、これから先に各ウェブブラウザが Paged Media Module に対応する時代が来るなら、楽しくなりそうですね。
ウェブブラウザ Opera 8.5 にプロキシサーバの有効・無効を切り換えるチェックボックスを MyButtons の一つとして追加する方法について。
Opera には標準で同機能を持つチェックボックスが用意されています。しかしそのボタン名は「Enable proxy servers」と長いので、ツールバーに追加すると面積を取って邪魔になります。また、ウェブ上で同じ機能を持つ「ボタン」を見つける事ができたのですが、これをスタイルがimage only
になっているツールバーに追加した場合、チェックボックスだけになってしまいました。これだと何が何だか分かりません。そこで、同じ機能を持つチェックボックスで名前が「Proxy」と短いものを作ってみました。
作った方法を書きます。まず、一度でも Opera のツールバーをカスタマイズしていれば、次のディレクトリに .ini ファイルがあると思います(インストール時の設定によって違います)。
私の環境では standard_toolbar (2).ini という名前のファイルがありました。これが Opera のツールバー設定ファイルです。これに次の項目を書き加えます。
My button を一つでも追加していれば、「Customize Toolbar Custom.content」というセクションが既に存在していると思います。その場合は、既存の同セクションに上記二行目だけを追加しましょう。
これで、「My buttons」カテゴリにProxyという名前のチェックボックスが追加されているはずです。後は通常のツールバーボタンと同じように使えます。
Unicode (UCS2) の点字パターン領域を一覧表示するテストページを作ってみました。表示フォントを変更できるスクリプトも埋め込んであるので、点字パターン領域に対応していると謳われているフォントをテストしてみてはいかがでしょうか。
興味のある方はUnicode の点字パターン領域からどうぞ。
卒業論文を書いている最中なので当然ですが、忙しい(苦笑)。などと言いつつ息抜き兼、現実逃避にテキストファイル用アイコンに手を加えました。アイコンのページからどうぞ。今度は 48x48 サイズのアイコンも含み、さらにアルファチャンネル(半透明)付きの 32bit 色も同梱!・・・って卒論を書け自分。
ついでに、昔作りかけていたアイコンの自動関連づけアプリケーションに少々修正を加えて同梱してみました。2004 年 8 月に作ったきりになっていたので、いつ頃かと言えばちょうどインターンシップで治郎吉商店に入った頃で、私のプログラミング技能が劇的に改善され始めたところです。まあ、そのアプリのコードはそんな頃に書いたコードなので、統一のとれていないハンガリアン記法+メンバ変数をグローバル変数のように使う+妙に長いループや関数がある・・・とまあ要するに Visual C++ と MFC しか知らない素人くさい、だめなコードでした。その上、というかやはりというか、実装しているロジックにも穴があって、関連づけに失敗する場合が多かったりしました。 今回の修正で、レジストリ書き換え部分は全部書き直しましたので関連づけに失敗する事はまず無いと思いますが、機会があればフルスクラッチで書き直したいものです。
ところで Internet Explorer 7 の public beta が出ましたね。 バージョン 6 の頃は、厳密適合した XHTML についてもその先頭にある XML 宣言のせいで「IE の誤解」の記事でいう広告問題と同じ問題が発生していました。7 になってどうなったのかなと思って確かめてみたら、修正されていますね。他にも半透明 PNG にも対応したという話などがあって、Web の作り手としては嬉しいアップデート内容になりそうです。なお、7 の beta をインストールするとシステムに入っているバージョン 6 のファイルを上書きします。この点は注意しておきましょう。私の場合は、evolt.org で Internet Explorer 6.0 SP1 のスタンドアローン化したものを手に入れたため、それを使って 7 と 6 を共存させています。
Unicode は文字コードの規格です。 文字コードを簡単に説明すれば、 たくさんある文字のそれぞれに振った背番号みたいなものです。 たとえば ASCII コード規格では、背番号 71 番が "G" になります。
Unicode は、世界中のありとあらゆる文字に背番号を振ってしまおうという規格です。 そのため「何番目から何番目までは何語用の番号」といった形に、 番号の領域ごとに使い方を決めています。その中に、 意外な事に点字パターン用の領域があります。
点字は、その「パターン」にだけ注目すると世界共通の文字なんですよね。 ですから、その領域の文字を使えば Unicode で点字文書が書けます。
これに関してすごく面白いなと思う点があります。 Unicode の特性上、すべての Unicode 文字は同じ文書内に書くことができますので、 墨字点字混在の文書が(コンピュータ的に)簡単に書ける事になります。 例えば、
「こんにちは」を点訳すると ⠪ ⠴ ⠇ ⠗ ⠄ となります。
といった感じに。 とはいえほとんどの環境では 先に書いた点字墨字混在文章を正常に表示できないと思います。 MacOS X では点字パターンを含むフォントが最初から入っているようでした。 Windows では、 Free UCS Outline Fonts などの点字パターンを含むフォントを別途インストールした上で ブラウザのフォント設定を行えば正常に表示できると思います。
さて、去った 2005 年に購入した CD を列挙。という書き方で列挙します。
以上、合計 21 枚・・・でした。 去年より少しだけ減ってしまいました(苦笑)。
本日、合計 3 枚 CD を購入。 次のです。
最初の一枚は、私の高校時代の同級生である あかねこさん がピアニストを務める「女性のみ」のブラスバンドです。 女性だけのバンドとなると世界的にも珍しいらしいですよ。 続いて二枚目は、試聴して気に入ったので購入。 トラック 3、Tokyo のドラムが入ってきたあたりで 「試聴台で聴くのがもったいない」と思ってすぐ試聴をやめて買いに行きました。 すばらしいです。 最後の一枚はご存じ(?)Rage です。 実を言うと私は Grand Theft Auto: San Andreas といういろいろな意味で有名なゲームをやっていまして、 その中で出てくるわけですね、このアルバムの 2 曲目 Killing In The Name が。 ゲーム中でのこの曲の使い方がモノスゴク気に入ってしまいまして、 つい買ってしまいました(苦笑)。
Windows 上で「NUL」という名前のファイルを削除する方法、 という小ネタを書きました。 独立したページにするほどの内容ではないんですけどね。
プログラミング関係の記事に プリコンパイル済みヘッダ を追加しました。
なお、最近は Minotaur Shock に「首ったけ」です。 Vigo Bay 最高です。 アルバム Maritime 試聴ページ (juno records) で全曲試聴できます。
プログラミング関係の記事ですが、 追って書きためていきたいと常々思っていたので最初の一ページを作ってみました。 C# からの Platform Invoke に関する覚え書き です。
いつも通りに C++ のコードを書いていました。 よく分からないのですが、 GCC で次のコードがエラーになります。
template< typename T >
class Hoge{
public:
class InnerClass{
public:
InnerClass();
};
};
template< typename Type >
void func(){
Hoge<int>::InnerClass obj_i; // こっちは OK
Hoge<Type>::InnerClass obj_t; // こっちはエラー
}
コメントで書いてあるとおり、 obj_t を宣言した時点でエラーが出ます。 どうやらテンプレートクラス(ここでは Hoge )はインスタンス化されるまで具体的な型情報を持てないため、 その名前空間の内部で定義される型をコンパイラが認識してくれない、 といった感じに見受けられます。 つまり、obj_t の型は Hoge<Type> であり、これは func() へ与える型引数 Type が確定するまでは具体的な型情報は定義できない、 という事が原因でこんなエラーになっているような気がする、 と私見では感じました。
Visual C++ 6、 7 に加え、 Digital Mars C++ 8.42 でも問題なくコンパイルできます。 しかし GCC でダメとなるとこういうコードは書けませんよね。
何でこんな話をしているかというと、 イテレータを使って std::string と std::wstring に両用のアルゴリズムを書く時に、 次のようなインターフェイスにできなくて嫌だったのです。
template< typename String >
String
DoSomethingToString( const String & str )
{
String::iterator it; // これがエラーに
// do something
};
なお、string/wstring を与えるのではく char/wchar_t を与えるようにしても同じ理由でエラーになります。 これを解消したければ型引数にイテレータを与える形にせざるをえないと思います。 しかし文字列全体に対して働くアルゴリズムの場合、 常に文字列の最初と最後を指すイテレータを与えるような関数になります。 これは、個人的には分かりにくいスタイルだと思います。 文字列全体に作用する処理には、 文字列全体しかを与えられないようになっていて欲しいですし。
ところで SOL 用プラグイン第二弾のリストエディタの制作ですが、 時間が無くてなかなか進みません(苦笑)。 いつか完成させたいなぁと思ってちょっとずつ作業しているのですが・・・ さてはて完成は一体いつになる事やら(苦笑)。
近況。 大学の研究と自動車学校とバイトで忙しくて気が休まりません(苦笑)。
さて、ひさしぶりに SOL 関係の「何か」をやろうかなと思い、 ボイスリストのシステムエクスクルーシブ定義ファイルの形式を調べてみました。 どうやら SysexTemplate.ini はリストエディタでの入力、表示に使っていそうだとは分かりました。 しかし Sysex.ini が何に使われているのかよく分かりません。 もしかして XG Editor が使うのかなぁ・・・? インストールしてないし使った事無いから分からない(苦笑)。 今度インストールして見てみますか。
つい先日 Kensington の Expert Mouse というトラックボールマウスを購入しました。 スクロールリングはもちろん、大型のボールが転がしていて気持ちがいいです。 どのくらい気に入っているかというと、 PC の電源が付いていない状態でも無駄に転がして遊んでしまうほどです。 ああっと・・・文章にするとすごく変態っぽいですね(苦笑)。
ところで FOX ツールキットについてメモ書き程度のメモ書き(そのまんま)を書いておきます。 誰のためでもなく、自分のために。
FOX ツールキットを Visual C++ で使う場合、
FOX のライブラリをリンク対象に指定したりインクルードパスに
FOX の include ディレクトリを追加するのは C/C++ の基本ですから、
忘れる事はないと思います。
最初に試して以来使ってなかったせいで忘れてしまったのはこれではありません。
アプリケーションのエントリーポイントを mainCRTStartup
にしなければいけないという事です。
でないと WinMain() をエントリーポイントとして探しに行ってしまい、
main() をエントリーポイントとして使ってくれない、という話だったと記憶しています。
指定を忘れると WinMain() が見つからないというリンクエラーが出ますから、
そういう事だったはずかと。・・・んー、だったはず(苦笑)。
あともう一つ。 ファイルを選択するダイアログを表す FXFileDialog クラスを使う時のメモ書きです。 このクラスは内部で gethostname という API を呼んでおり、これは wsock32.lib に含まれています。 したがって使う場合はこのライブラリもリンク対象に追加しなくてはいけません。
というわけで(?)試してみました JNI。 JNI とは Java Native Interface の頭文字を取ったものであり、 Java プログラムから各プラットフォームのネイティブコードを呼び出す機能です。 今日の成果としては研究室にあるブレイルメモに簡単なドットパターンを表示する Java プログラムが作れました。
私は先日の日記に書いたとおり、 ウィンドウなどを PC の画面のかわりに(あるいはそれに加えて)触覚ディスプレイに表示する Look&Feel を作れるんじゃないかと予想しました。 それには確かめておかないといけない重要な点が二つあり、 一つは Look&Feel はどのように実装するのか、 もう一つは今後おそらく必要になる Java プログラムからのネイティブコードの呼び出しはどのレベルでできるのか、 です。
前者について、インターネット上でオープンソースで公開している Look&Feel をインストールし、動作させてからソースを見てみようと思いました (試したのは Liquid LnF というものです)。 ソースを見てみると、どうやら各ウィジェットのクラス名の頭に Basic がついたクラスをそれぞれ実装すれば良いようです。 まあ JButton button = new JButton(); と書いたアプリケーションでも何故 LiquidButton や MetalButton などが使われるのかなど、まだ分からない事は残っています。 しかし今回は Look&Feel が通常の Java 言語によるコーディングで作るものだと分かった事が重要です。
もう一点のネイティブコード呼び出しについてですが、 Sun のサイトにJNI のかなり親切な導入記事があります。 やはり遅いと言われる Java のユーザにとって、 たとえばシミュレータの演算処理部で C/C++ などで実装した高速な外部モジュールを呼び出したいと考えるのは自然な事なのでしょう。 日記を書いている最中に JNI で検索したらヒットする事する事(苦笑)。 さて、個人的に重要と思った JNI に関する点は次です。
まあ何にせよ、ほぼ間違いなく「触覚ディスプレイに表示する」という Look&Feel が作れると分かりました。 もしやるなら作業量の問題が持ち上がりそうですが。 しかし・・・ Java プログラムからネイティブコードを呼ぶのは何とも面白い体験でした。 楽しかったです(笑)。
追記。 このネイティブコードとの相互運用は C# / .NET Framework のそれと非常に似ているため、そちらを知っていた私には理解が楽でした。 また、Sun の JNI 関係の解説はよくできており、Look&Feel のソースを眺めるところからブレイルメモへのドットパターンの表示まで含めて四時間程度でできてしました。 やはり力が入っている分野なのでしょう。助かります(笑)。