2008/01/31


ローカル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




ショートカット一発検索で生活が変わる を見ていて、普段自分がWindowsで使ってるキーボードショートカットを書いて見る事にする。

ウィンドウ最大化
Alt-Space Alt-X
押し方はAltキーを押しっぱなしで「スペース」、「X」と連続で押す。
元に戻したい場合は「X」の代わりに「R」を押す。
システムのプロパティ
Win-Pause
押し方はWindowsキーを押しながらPauseキー
まれに無限ループするプログラムを書いてしまった時等に、プロセス強制終了したい場合等に使う。
コンピュータのロック
Win-L
押し方はWindowsキーを押しながら「L」キー
突然会議に召集を掛けられた場合には、すかさず「Win-L」して席を外す。
番外編
普段からコマンドプロンプトを使う事が多い私は、デスクトップにコマンドプロンプトのショートカットを貼り、そのショートカットのプロパティでショートカットーキーを「Ctrl + Shift + Alt + F12」に設定している。
これでどの画面からでも「Ctrl + Shift + Alt + F12」でコマンドプロンプトを起動出来る。
基本的にはオリジナルの設定を変える事はしないほうです。便利だと思ったら付け足すくらい。
ただvimrcは、もう911行もある...。
vimrcでどんな事やってるかについては、また違うエントリで...
Posted at by




久々動かしたら、動かなくなってました。PLAYLOGで、日付に関する制約が入り、バグを直すのを忘れてました。一応これで
3点修正が完了しました。(上記2点は既に修正済)
一応、何もバージョンアップしないというのもカッチョワルイ話なので、Music Player Daemon(mpc)で再生した曲情報アップロードにも対応しました。
個人的には一番軽いので、気に入っています。

これで「音ログ for Linux」がサポートしているプレーヤは
となりました。ただ、まだリリースされたばかりなのでPLAYLOG再生履歴でのクライアント名表示には「?」と表示されます。一応、事務局のほうにも新しいクライアントが増えた事は伝えておくつもりです。
#幾分、知名度がないクライアントですので採用されない可能性もあります。
#ちなみに、この曲をPLAYLOG再生履歴に残したの、私が初めてのようです。苦笑

otolog4linux-20070628

お知らせ:
ところで...
最近のニュースでも取り上げられている通り、MSの強力により、レーベルゲート自信がPLAYLOGのアップローダをリリースする事になる為、「プレイログアップローダ for WindowsMediaPlayer」は、よほど重大なバグでも見付からない限り、バージョンアップを行わない方針に決めさせて頂きました。

これまで幾度かリリースさせて頂きましたが、使用して頂いた皆様、バグ報告を頂いた方、本当にありがとうございました。
Posted at by