2008/01/31


もごもご vimからもごもごを閲覧/更新できるアプリケーションを作りました。
ベースとなっているのは、Twitter : A simple client for Twitterです。
以前、この「Twitter : A simple client for Twitter」のマルチバイト周りとWindowsで動作するように修正した物をtwitter上でひっそりとアナウンスしましたが、それをベースにもごもごバージョンを作ってみました。
もごもごって、public_timelineでも認証がいるんですね...汗
使い方は、twitter版と同じ

publicステータス取得
:Mogo2PublicTimeline friendsステータス取得
:Mogo2FriendsTimeline ステータス更新
:Mogo2StatusUpdate 今日も、もごもご となります。
※スレッドへの発言も同様に
:Mogo2StatusUpdate >>343473 もごもご... と実行します。

ダウンロード:
※witter.pyがpythonスクリプト内でグローバルなメソッド名称定義してくれてますので、mogo2.pyでは接頭語「Mogo2」を付けてます。

また、オリジナルのtwitter版をマルチバイト/Windows対応した物も一緒に配布します。こちらは精神衛生上の都合もあり上記接頭語を「Twitter」に変更しています。
ダウンロード:
上記スクリプトのインストール方法は...メンドイので省略
Posted at by




おそろしやおそろしや...

むかーしむかし、Microsoft Visual J++という道具があったそうな...
その道具では、関数呼出の参照渡しを実現するために、配列を渡してJNI内部で値を設定するといった、奇怪な手法が使われておりましたとさ。

さて話は現代に移り、Microsoft Visual J#という道具が巷では出回っていると聞き、さっそく試した私は、腰を抜かしてしまいそうになりました。
public class Test
{
    public static void test1(int a) { a = 2; }
    public static void test2(/** @ref */ int a) { a = 2; }
    public static void main(String[] args) {
        int b = 3;
        test1(b); System.out.println(b);
        test2(b); System.out.println(b);
    }
}
まさか、こんな結果になりますとは...

Javaという言語仕様まで変えてしまうとは...

おそろしや、おそろしや...


#まぁ、Javaって言ってない(J#)から、いいんですか...
#そうですか...
Posted at by




ローカルDBやメモリDBとして使えるSQLiteは、開発者にとってかなり有用なツールです。 私はよく「あーーーあのSQLどう書こう」なんて悩む時にSQLiteのshell版を使います。今日はそのWin32 SQLite3のshell版sqlite3.exeの作り方をご紹介。

まず、ダウンロードページから
sqlite-3_5_0.zip
というファイルをダウンロードします。
次に、ソースツリー内の「src」ディレクトリに移動し、以下のMakefileを置きます。
.SUFFIXES: .c .obj

all : sqlite3.exe

sqlite3.exe :  alter.obj analyze.obj attach.obj auth.obj btree.obj build.obj callback.obj complete.obj date.obj delete.obj expr.obj func.obj hash.obj insert.obj legacy.obj loadext.obj main.obj opcodes.obj os.obj os_os2.obj os_unix.obj os_win.obj pager.obj parse.obj pragma.obj prepare.obj printf.obj random.obj select.obj shell.obj table.obj tokenize.obj trigger.obj update.obj utf.obj util.obj vacuum.obj vdbe.obj vdbeblob.obj vdbeapi.obj vdbeaux.obj vdbefifo.obj vdbemem.obj vtab.obj where.obj mutex.obj mem1.obj malloc.obj
    cl /Fesqlite3.exe alter.obj analyze.obj attach.obj auth.obj btree.obj build.obj callback.obj complete.obj date.obj delete.obj expr.obj func.obj hash.obj insert.obj legacy.obj loadext.obj main.obj opcodes.obj os.obj os_os2.obj os_unix.obj os_win.obj pager.obj parse.obj pragma.obj prepare.obj printf.obj random.obj select.obj shell.obj table.obj tokenize.obj trigger.obj update.obj utf.obj util.obj vacuum.obj vdbe.obj vdbeblob.obj vdbeapi.obj vdbeaux.obj vdbefifo.obj vdbemem.obj vtab.obj where.obj mutex.obj mem1.obj malloc.obj

.c.obj :
    cl /c /DSQLITE_THREADSAFE=0 $<
後は、Visual Studioのコンパイラにパスが通ってるならば「nmake」でコンパイルします。 なおSQLiteは、内部処理がUTF-8でやり取りされており、Win32版の場合はNTかどうかでCreateFileA/CreateFileW等、ワイド文字APIの呼び方を変えています。
しかし、コマンドライン引数には対応出来ておらず C:¥> sqlite3.exe データベース.db なんて事すると、エラーが発生します。ちなみにNTでない場合には変換無しにCreateFileAを使いますから問題なく動きます。
これって、コマンドラインをUTF-8にすれば動くんだろうけど C:¥> chcp 65001 やってUTF-8にしても文字は化けるし、IME動かないし意味無いですよね。
適当に --- os_win.c.orig   Mon Sep 03 22:39:38 2007
+++ os_win.c    Fri Sep 28 22:17:50 2007
@@ -137,6 +137,8 @@
 # define isNT()  (1)
 #else
   static int isNT(void){
+    if( GetACP() != CP_UTF8 )
+      return FALSE;
     if( sqlite3_os_type==0 ){
       OSVERSIONINFO sInfo;
       sInfo.dwOSVersionInfoSize = sizeof(sInfo);
こんなパッチ当てて、実行すると日本語のファイル名も扱える様になります。
このEXEをUSBなんかで常備しておくと、いざという時に助けられるかもしれませんね。

Posted at by