4月 30

php-mode.el を修正。

↓の様なインデントをサポートするように改造。

$a = array(
    'aaaa' => 1,
    'bbbb' => 2,
);

あと、もともと入っていた template という、ウィザード形式の入力支援が苦手だったので、全部その処理をしているところをばっさり削除。
便利な入力支援は yasnippet を使うことにする方がいいかも。
http://code.google.com/p/yasnippet/

4月 21

ひさしぶりに、 SQLite を触ってみたら変なエラーが出たのでメモ。

    環境

  • Windows XP SP2
  • FedoraCore7 on coLinux
  • SQLite 3.4.2

perl から sqlite を操作しても、 sqlite3 のコンソールから直接操作しても、cofs 上の database ファイルは扱えなかった。
※ファイルの作成はできるけど、 CREATE DATABASE とかの操作をすると
disk I/O error(10) at dbdimp.c line 403

解決策は、データベースを保存する場所を、cofs じゃない場所にしただけ。
tmpfs 上、ext3 上にデータベースを作成した場合はOKだった。

#!/bin/perl

use strict;
use warnings;
use DBI;

my $dbname;

$dbname = 'test.db'; # OK:ext*,tmpfs NG:cofs
unlink($dbname) if (-e $dbname); # テストだから毎回新規作成したい

unless (-e $dbname) {
    my ($dbh, $sql, $rc);

    $dbh = DBI->connect("dbi:SQLite:dbname=$dbname", "", "", {PrintError=>0});
    die "Error: $DBI::errstr\n" unless ($dbh);

    # cofs の時は CREATE のタイミングで↓のエラーが発生する
    # disk I/O error(10) at dbdimp.c line 403
    $sql = "CREATE TABLE users (id integer primary key, name varchar(32), age integer)";
    $rc = $dbh->do($sql);
    print "$DBI::errstr\n" unless ($rc);
}
4月 11

ペペロンチーノを作る。

使う Makefile の中身:

INSTALLDISH = /dish
PAN  = /tmp/fryingpan
POT  = /tmp/pot
CUP  = /tmp/cup

all : peperoncino

install :
	mv ${PAN}/* ${INSTALLDISH}

peperoncino : source boiled-pasta consomme.o
	split -d -b 100cc ${POT}/water.o water-
	mv ${POT}/water-00 > ${CUP}
	mv consomme.o ${CUP}
	rm ${POT}/water*
	find ${POT} -name "pasta-*" -exec mv {} ${PAN} \;
	fry -t 1m ${PAN}

source : garlic.o red-pepper.o olive-oil.o
	split -d -b 2 garlic.o garlic-
	mv   garlic-* ${FRYINGPAN}
	split -d -b 15 red-pepper.o red-pepper-
	mv   red-pepper-* ${FRYINGPAN}
	mv   olive-oil.o ${FRYINGPAN}
	fry  ${PAN}

boiled-pasta : water.o salt.o pasta.o
	mv water.o ${POT}
	boil  ${POT}
	split -d -b 150 pasta.o pasta-
	mv pasta-* ${POT}
	mv salt.o ${POT}
	sleep 6m

garlic.o :
	cat /dev/garlic > garlic.o

red-pepper.o :
	cat /dev/red-pepper > red-pepper.o

olive-oil.o :
	cat /dev/olive-oil > olive-oil.o

water.o :
	cat /dev/water > water.o

salt.o :
	cat /dev/salt > salt.o

pasta.o :
	cat /dev/pasta > pasta.o

consomme.o :
	cat /dev/consomme > consomme.o

clean :
	rm -R ${INSTALLDISH}/*
	rm -R ${PAN}/*
	rm -R ${POT}/*

作って食べる:

% ls
Makefile
% make
% make install
% eat /dish/*
4月 09

AutoHotkey
M-Space (Alt+Space) で Launchy を起動していたけど M-Space 他の機能に割り当てたい気がしてきたので、何かのランチャーがやってたみたいに Shift を素早く2回押しで起動するようにする。

窓使いの憂鬱でしようと思ったけど、「Shift キーを素早く2回押し」の「素早く」の部分ができないっぽいので、AutoHotkey を導入。
AutoHotkeyを流行らせるページ の説明が詳しかった。

AutoHotkey を導入する前に、Launchy を起動させるホットキーを Win+Space に変更する(他のホットキーと被らないように)。

  • まずは、ここから AutoHotkey のインストーラを取ってきてインストール。
  • D:\Settings\AutoHotkey というディレクトリにスクリプトを置くことにして、 D:\Settings\AutoHotkey\MyAutoHotkey.ahk というファイルを作成。
  • #NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
    SendMode Input
    
    ~Shift up::
    if(A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 180)
    Send,#{Space}
    return
    
  • AutoHotkey のショートカットを作成して、 リンク先を↓の様に変える。
  • "C:\Program Files\AutoHotkey\AutoHotkey.exe" "D:\Settings\AutoHotkey\MyAutoHotkey.ahk"

  • あとは、このショートカットをダブルクリックすれば、素早く Shift 2回押しが Win+Space に変換されて、Launchy が開くようになる。
  • このショートカットをスタートアップに登録しておけば便利。
  • (ホントは、ショートカットを作成しなくても、MyAutoHotkey.ahk をダブルクリックするだけでいい。)