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




音ログ for LinuxをCodeReposに入れました。
/lang/python/otolog4linux/trunk - CodeRepos::Share - Trac
「音ログ for Linux」は音ログをLinuxでもやりたい!という思いから開発を始めたソフトウェアで、現在では音ログAPIを実装したPLAYLOGという音楽SNSで利用出来ます。具体的には
といった音楽プレーヤの現在再生曲情報がPLAYLOGにアップロードされます。
名前にはLinuxとありますが、iTunesを使ってWindowsでも動きます。結構前からコード放置状態にありますが、そのままにしておくのも勿体ないので、CodeReposに上げる事にしました。へたっぴなpythonのコードですが少しでも誰かの役に立つのならば嬉しい話です。

Posted at by