デスクトップに文字をOSD風に描画するツール

 最近Twitterでfollowさせていただいている方が何名かUstreamで生放送をされていたのですが、このときにデスクトップのアプリケーションとかゲームのウインドウ(の一部)を動画として配信されていました。
 もちろん音声は入っていないで、何か反応するときはTwitterかChatに書き込むか、メモ帳などのテキストエディタを表示してそこに書く、というのが普通なのですが、テキストエディタだと表示しているウインドウが隠れてしまうという欠点があり、なかなか面倒くさそうだなあ、なんて思っていました。
 おりしもちょっと前のエントリーでIrcvを改造していて、良くできているな-なんて思っていたところに、そういえばこれを改造すればテキストエディタの代わりになるんじゃ?と思い、思いつきで作ってみたモノをご用意しました。
スクリーンショット:
 20100425-gdiplus.jpg
最新版ファイル:
 20100429-GDIPStrings-20100429.zip (42KB)
修正履歴:
 2010/04/29
  useFullFadeOut で true を設定していても、一つ目のメッセージがフェードインしなかった不具合を修正。
(お約束ですが)注意事項:
・アイコンがオリジナルのIrcvのままなのでわかりにくいですが、イチから作るセンスがないので…すいません。
・使い方は同梱のREADMEファイルを参照していただきたいのですが、動作させるにはWindows 2000/XP/Vista/7および.NET Framework 1.1以上が必要です。
・ファイル内のデータはESET NOD32 Antivirusにてウイルススキャン済みですが、ウイルスが含まれていないことを100%保証するものではないことにご留意ください。
・ライセンスはオリジナルのIrcvに準拠しています。
・この配布ファイルを使用したことで生じたいかなる問題にも、オリジナルの作者様および改変者は応じる義務のないものとします。
 不具合の報告などについては受付いたしますが、なにぶん飽きっぽいので^^;修正させていただくかどうかは微妙ではあります。
 何かのお役に立てれば幸いです。

Continue reading デスクトップに文字をOSD風に描画するツール

IrcvでUTF-8が通るように変更する

 ご無沙汰のエントリーはたぶんあまり需要のないネタです。
 未だに自宅ではircを眺めるのにMayuki Sawatari氏作のIrcvを使用しているのですが、IrcvはircサーバーとのやりとりにJISコードのみが流れることを想定しており、freenodeなどのUTF-8だと文字化けしてしまうのを何とかしてみよう、というものです。
※もっともtiarraを使用してUTF-8からJISに変換すればよいのですが、我が家ではこの機会にすべてUTF-8にしてしまったので(汗)
 とはいえIrcvはC#で書かれており、そもそも内部のエンコーディングにはUTF-8が使用されているので、単にJISコードへの変換部分を取っ払ってしまえばよい、ということになります。
 具体的には、IRCClient.csの155行目と156行目、

_sr = new StreamReader(_nstream, Encoding.GetEncoding(“ISO-2022-JP”));
_sw = new StreamWriter(_nstream, Encoding.GetEncoding(“ISO-2022-JP”));

と書かれている部分を、

_sr = new StreamReader(_nstream);
_sw = new StreamWriter(_nstream);

のようにしてしまえばよいわけです。
 これだと結局UTF-8決めうちで美しくないじゃん、という方もいらっしゃると思いますが、その場合はConfiguration.csやircv.csにも追加で書き加えて、環境設定ファイルから文字コード指定を読み込み、それをIRCClientのインスタンスに渡して設定させる…というコードにすればよいでしょう。(全部いじっても全部で15行程度追加するくらいでいけます)

Continue reading IrcvでUTF-8が通るように変更する

au端末だけキャッシュからページを表示する

 たまには役に立つ話を。(有効範囲がちょっと狭いけど^^;)
 去年夏にauの端末に乗り換えて以来、今まで必ずサーバに取りに行ってきていたHTMLデータが、なぜかキャッシュから表示されるようになってしまいまして。
 最近までは再読み込みで何とかなるからいいかーと思っていたのですが、先日広告書き込み対策を一部サイトで実施した都合で、どうしても最新の情報を読んでくる必要がありました。
 ということで早速公式ページを確認したところ、複数の方法で制御可能との記述が。(→技術情報ページ:http://www.au.kddi.com/ezfactory/tec/spec/wap_tag2.html
 早速それを参考に、各ページの<head>~</head>までの間に、
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Cache-Control" content="max-age=0">
と記述、無事に正常に表示されるようになりましたとさ。

半角カタカナと文字化け

 掲示板などに書き込む際、半角カタカナを入力したら化けてしまった、ということは良く聞く話。なんでこうなるのか、という原因を説明しているサイトもたくさんあるので、今回はそこもはしょって、実際にどうすればよいのかという話をちょこっとだけ説明します。
 Internet上で配布されているBBSスクリプトなどは、汎用性を持たせるためにどんな文字コードでも動作するようになっています。そして内部のデータ形式だけ文字コードを固定すれば、スクリプト自体の文字コードを変換(スクリプトによっては、出力に使用する文字コードを指定できるものもあります)してやるだけで、あとはShift_JISだろうとEUC-JPだろうと動作するためです。もちろんデータファイルの文字コードは固定されていますので、別の文字コードで出力するスクリプトにもそのまま流用できます。
 ほとんどのスクリプトにおいて、これを実現するためにjcodeという日本語コード変換ライブラリを利用していますが、このjcodeのconvert関数に渡すとき、入力された文字コードがどれなのかが分からないため、自動判定で渡します。
 このとき、入力された文字が半角カタカナのみの文章(あるいは半角・全角が混ざった短い文章)の場合、jcodeは文字コードを正常に識別できなくなり、結果文字化けが発生する、ということです。 これはjcodeの問題ではなく、半角カタカナの文字コードが原因で発生します。
 これを回避するには、jcodeに自動判別で渡さなければよい、つまり入力される文字コードも、出力される文字コードも固定すれば良いわけです。(スクリプトによっては出力に使用する文字コードを指定しているのにもかかわらず、jcodeに渡すときに自動判定にしているものもあります)
 具体的には、

&jcode’convert(文字列へのポインタ, ‘sjis’);

と、出力文字コードは指定しているのに入力文字コードを指定していない場合、以下のように入力文字コードも固定してしまいます。

&jcode’convert(文字列へのポインタ, ‘sjis’, ‘sjis’);

こうすることで、半角カタカナの文字化けを回避することができるようになります。
 ちなみにtackynoteの場合は322行目を(メール送信機能を使用する場合は1307行目、1310行目、1339行目も)、tackynotespの場合は496行目、519行目を(同じくメール送信機能を使用する場合は1953行目、1956行目、1985行目も)、それぞれ変更してあげてください。

LayeredWindow

20041108-LayeredWindow.png

※Delphi Q&A掲示板より来られた方へ:MikiはMayuki Sawatariさん製作のプレーヤであり、この記事を書いている僕とは一切関係ありません。
 Mayuki Sawatariさん作のMikiというサウンドプレーヤーがあるのですが、これと同じようなものを.NET Framework無しで作ってみたくて、久々にDelphiを弄っています。
 正方形でない(要するに普通の四角形のウィンドウではない)ウィンドウを表示するには、以前はRegionというマスク画像のようなものを作ってあげる必要がありました。が、Windows 2000/XPではLayeredWindowというものが使用できるようになりました。LayeredWindowでは、透過したい色を指定するだけで、正方形でないウィンドウを作ることができます。
 で、作ってみたサンプルが最初のスクリーンショットです。
 結構簡単に出来上がったのですが、文字の縁取りを半透明にするためには、SetLayeredWindowAttributesではなく、UpdateLayeredWindowを使わなければいけないことが分かりがっくり。
 ツメが甘いようで…

ポインタ

 じくうさんのページでポインタに混乱している様子が書かれていたので便乗触発されてポインタについて書いてみようとか思ったり思わなかったり。
 よく他人に対して説明するとき、「どこそこに書いておいたから見といてー」というような言い方をしたことがありませんか?ポインタとは、まさしくこのような使われ方をします。
 例によって大雑把にまとめてみました。

Continue reading ポインタ