Archive for the 'windows' Category

Feb
26

[Pidgin]現行Yahoo!メッセンジャーでPidginの文字化けを回避するためのパッチとWindowsバイナリ

PidginというIM(Instant Messenger)クライアントがあります。これはMSN MessengerとかYahoo!JAPAN Messengerとか、他にもいろいろなプロトコルに対応した便利なIMクライアントです。Linux上でも動作するので、普段から便利に使っています。
なのですが、ウェブ版Yahoo!メッセンジャーのリリースのタイミングで、メッセージをやりとりするための文字コードがSHIFT-JISからUTF8に変更になったようで、pidginから送ったメッセージが相手に表示されなかったり文字化けを起こしたりするようになってしまいました。
2008年2月26日をもって「バージョン7.0.1.0未満」のWindows版Yahoo!メッセンジャー、および「バージョン2.5」のMacintosh版Yahoo!メッセンジャーのサポートを終了させていただきました。
とあるので、これまでSHIFT-JISとUTF8と両方の文字コードをサポートしていたけど、これからはUTF8一本に統一します、ということかもしれないですね。
仕事でもプライベートでもメッセンジャーを愛用していて、これが使えなくなってしまうととても不便です。
なので、これを回避するためのパッチを作ってみました。

#
# old_revision [d77adf1b9a4b44f121620f20e2643602e3f6776e]
#
# patch “libpurple/protocols/yahoo/util.c”
# from [6a72fcc2054413ee7791e5c5cc62b6b18f4bcce0]
# to [2a3725bcc455684e1c1bb42bd4982cc322732f38]
#
============================================================
— libpurple/protocols/yahoo/util.c 6a72fcc2054413ee7791e5c5cc62b6b18f4bcce0
+++ libpurple/protocols/yahoo/util.c 2a3725bcc455684e1c1bb42bd4982cc322732f38
@@ -114,18 +114,15 @@ char *yahoo_string_encode(PurpleConnecti
char *ret;
const char *to_codeset;

- [...]

Feb
13

[Windows]有効hosts確認

Webアプリケーションの開発をしていると、hostsファイルにIPアドレスとドメイン名を指定して、テスト環境のマシンを特定の名前で呼びだして動作確認をすることがよくあります。hostsファイルは数行程度なら目で追って確認することができますが、テキストエディタでスクロールが必要なくらい長くなってくると、全体通して有効になっている記述を把握するのが難しくなってきます。
UNIX系のOSなら、例えば次のように付属のツールを組み合わせて、現在有効になっている記述を簡単に把握することができます。

% grep -v ‘^#’ /etc/hosts | sed -e ‘/^\s*$/d’

しかし、WindowsではUNIXのようにgrepやsedが最初から入っていないので、これを実現するのはちょっと難しそうです。
Cygwinを入れれば同様のツールが使えるようになりますが、実際にやってみると各ツールを起動するためにけっこうな時間がかかるので、作業効率が低下してしまい、使いづらく感じました。
この場合、次のような簡単なCのプログラムを用意してコンパイルし、exeファイルを実行すれば有効なhostsを出力してくれるようにしておくと便利です。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define BUFSIZE 1024
#define HOSTS "\\system32\\drivers\\etc\\hosts"
 
int main(int argc, char** argv)
{
FILE* fp;
char hostsfile[128];
char buf[BUFSIZE];
 
strcpy(hostsfile, getenv("SystemRoot"));
strcat(hostsfile, HOSTS);
if ((fp = fopen(hostsfile, "r")) == NULL) [...]