2007年 10月 29日

GranParadiso

Firefox の history.dat の形式に嫌気がさした (パーサ書いたけど、大量のヒストリあると重くて使えない……) ので Fx3 に乗りかえるお><
GranParadiso Alpha8 入れた! 常用してやる!!!! (FireBug と Greasemonkey がない時点でむり)

userChrome.js が有効なっているけど、hatena のきりかえはどっかバグってるっぽいなぁ

いきなり常用プロファイルで起動して大丈夫かなぁと思ったけど、割と大丈夫っぽい。2.0 に戻れないかもだけど

やばい GM なしで生きていくのはつらい。というか GM 入れてない人ってよくインターネットできるよな……

memo

CREATE TABLE moz_anno_attributes (
	id INTEGER PRIMARY KEY,
	name VARCHAR(32) UNIQUE NOT NULL
)
CREATE TABLE moz_annos (
	id INTEGER PRIMARY KEY,
	place_id INTEGER NOT NULL,
	anno_attribute_id INTEGER,
	mime_type VARCHAR(32) DEFAULT NULL,
	content LONGVARCHAR,
	flags INTEGER DEFAULT 0,
	expiration INTEGER DEFAULT 0,
	type INTEGER DEFAULT 0,
	dateAdded INTEGER DEFAULT 0,
	lastModified INTEGER DEFAULT 0
)
CREATE TABLE moz_bookmarks (
	id INTEGER PRIMARY KEY,
	type INTEGER,
	fk INTEGER DEFAULT NULL,
	parent INTEGER,
	position INTEGER,
	title LONGVARCHAR,
	keyword_id INTEGER,
	folder_type TEXT,
	dateAdded INTEGER,
	lastModified INTEGER
)
CREATE TABLE moz_bookmarks_roots (
	root_name VARCHAR(16) UNIQUE,
	folder_id INTEGER
)
CREATE TABLE moz_favicons (
	id INTEGER PRIMARY KEY,
	url LONGVARCHAR UNIQUE,
	data BLOB,
	mime_type VARCHAR(32),
	expiration LONG
)
CREATE TABLE moz_historyvisits (
	id INTEGER PRIMARY KEY,
	from_visit INTEGER,
	place_id INTEGER,
	visit_date INTEGER,
	visit_type INTEGER,
	session INTEGER
)
CREATE TABLE moz_items_annos (
	id INTEGER PRIMARY KEY,
	item_id INTEGER NOT NULL,
	anno_attribute_id INTEGER,
	mime_type VARCHAR(32) DEFAULT NULL,
	content LONGVARCHAR,
	flags INTEGER DEFAULT 0,
	expiration INTEGER DEFAULT 0,
	type INTEGER DEFAULT 0,
	dateAdded INTEGER DEFAULT 0,
	lastModified INTEGER DEFAULT 0)
CREATE TABLE moz_keywords (
	id INTEGER PRIMARY KEY AUTOINCREMENT,
	keyword TEXT UNIQUE
)
CREATE TABLE moz_places (
	id INTEGER PRIMARY KEY,
	url LONGVARCHAR,
	title LONGVARCHAR,
	rev_host LONGVARCHAR,
	visit_count INTEGER DEFAULT 0,
	hidden INTEGER DEFAULT 0 NOT NULL,
	typed INTEGER DEFAULT 0 NOT NULL,
	favicon_id INTEGER
)

places.sqlite + ActiveRecord

require "rubygems"
require "active_record"
require "active_support"

ActiveRecord::Base.establish_connection(
	:adapter => "sqlite3",
	:database => "places.sqlite"
)

class MozHistoryvisit < ActiveRecord::Base
	belongs_to :place, :class_name => "MozPlaces", :foreign_key => "place_id"
end

class MozPlaces < ActiveRecord::Base
end

p Time.now.yesterday
# なんか 6桁ちがうのでかけてみてる……
# ソースよまないとよくわからなそう
from = Time.now.yesterday.to_i * 1000000

MozHistoryvisit.find(:all, :conditions => ["visit_date > ?", from]).each do |h|
	place = h.place
	puts place.title
	puts place.url
	puts place.visit_count
	puts
end

GranParadiso のロケーションバー補完

なんかちょっと Fx2 よりディレイあるなぁ。

Amalgam

補完候補を生成するプロセスとランチャが実際動いてるプロセスを分離したほうがいいかもなぁ。Ruby のスレッドだと影響しあっちゃうし、マルチコアの恩恵がうけられないし、ごちゃごちゃやったりするので Cocoa と通信してるよこでやったりするとたまに落ちる。起動直後 fork して DRb るのがいいのだろうか

Amalgam 2007-10-29

http://lab.lowreal.net/test/amalgam/Amalgam.2007-10-29.dmg

つかれてきた。プラグインで候補を追加できるのと、サブランチャを作れるところぐらいまでやった。起動がクソ遅い (毎回アプリケーションフォルダスキャンしてるから)

プラギンは ~/.amalgam/plugins において、.d reload_plugins すれば(リ)ロードされるように

プラギン自体は http://coderepos.org/share/wiki/Amalgam#plugins みたいになっていて、候補を生成するとき毎回プラグインの candidates メソッドが呼ばれる (なので必要ならプラギン側でキャッシュする必要がある)

サブランチャは http://coderepos.org/share/browser/lang/ruby/Amalgam/plugins/folders.rb こんなんみるとなんとなくわかるかもしれない。amalgam.sublaunchers 配列に push すると候補を生成するやつ (とフィルタしてソートするメソッド) をそのオブジェクトに委譲する。

サブランチャから戻るには C-b で、サブランチャの中では空白 RET でも選択されたアイテムが実行される (通常は空白 RET はキャンセル扱い)

デバッグコンソールみたいなのをアプリケーション内にもったほうがいいなぁ。SEGV には無力だけど……

GranParadiso に Greasemonkey

強制的に有効にしたら普通につかえた。

https://addons.mozilla.org/ja/firefox/addon/421 が便利っぽい。アイコンがださいけどw

Amalgam Fx ヒストリ

fuzzy 検索にしたくて URL リストをとってきてこっちでやっていたんだけど、重すぎなのと不安定 (スレッドつかってるから) なので、SQL クエリを直接なげるようにした。LIKE をてきとうに投げて、visit_count でソートするようにしてみた。だいたいロケーションバーの補完とにたかんじに

http://coderepos.org/share/changeset/838

設定とかプラグイン

って、すごく気をつかう部分だよなぁ……実装しまくるっていう感じじゃなくて、よく考えて実装して、一度置いて、また考えて、みたいなのを繰り返さないと良い設計にならない……たぶんすごい人はいっきにできてしまうんだろうけど……

スレッドとか DRb とか RubyCocoa のくみあわせ

どうも相性わるくて、落ちるときは確実に落ちるけど、最小再現つくろうとすると落ちない。メインスレッド以外で Obj-c のオブジェクトにアクセスするとまずいっぽいけど確実にそうってわけでもないしなぁ……

ruby のバージョンあげないとだめなのかも

ruby 本体へのパッチってこういう系の問題対処だったんだ

パッチあて済みの libruby がレポジトリにはいっていたのでそれそのままコピーしたら落ちなくなった

cd /usr/lib
sudo mv libruby.1.dylib libruby.1.dylib.orig
sudo cp ~/project/rubycocoa/src/misc/libruby.1.dylib . 

http://rubycocoa.sourceforge.net/EmbedRubyCocoa