2007年 10月 30日

Chemr + Amalgam

Chemr でいっぱい開いてると、目的のやつにたどりつくまでめんどいので、Amalgam から検索できるようにしてみた。DRb++

http://screencast.com/t/9jJng5yu7U

http://lab.lowreal.net/test/chemr/Chemr.2007-10-30.dmg (設定可能版の Chemr)

  • http://svn.coderepos.org/share/lang/ruby/Amalgam/user-plugins/chemr.rb を ~/.amalgam/plugins に
  • うえのファイルの =begin ~/.chemr/initrc.rb から =end までを ~/.chemr/initrc.rb に追記
  • Chemr 再起動してファイルたくさんひらく
  • .d r "Chemr" (プラグインのトップレベル候補をリロード)
    • 機能のバージョンだとできないので touch ~/.amalgam/plugins/chemr.rb して .d reload_plugins
  • chm ファイル名でトップレベルに候補追加
  • 選択して RET するとサブランチャに (初回は Chemr から index をとってくるのでおもい)
  • さらに選択して RET すると該当のウィンドウがアクティブになって項目を表示

libruby ふくめてないからそのままだと落ちると思う。ぜんぶにふくめたほうがいいのだろうなぁ……

ローカル gem の chm バンドルをつくる ruby スクリプト

http://coderepos.org/share/browser/lang/ruby/misc/chm-generators/generate-local-gems-chm-bundle.rb

カレントディレクトリに GemRdoc.chm というバンドル (Chemr だけで読める) をつくる (ただしテンプレに Resh をつかっていること前提)。ドキュメントの実体は gempath にあるほうなので、gem install したり削除したりしたら実行しなおす。バンドルみたいにただのディレクトリだと symlink とかつかえてよい。

AR とか AS のももちろんインデクスされるので、そういう系の .chm はいらなくなった。

.chm にコンパイルするのも yaml から変換すれば簡単にできるだろうけれど、時間かかるのでめんどそう

mobirc いれた

これはすばらしい。

keitairc のとき読むのがめんどくさくてずっと basic password を毎回いれてたけど、これで開放される…… (N73 は接続きれたりすると再入力になってしまう)

あとキーワード機能がすばらしいなぁ。重要なのだけピックアップできるのがすてき。

モバイルの CSS ってどんぐらい効くんだろう。N73 だと twitter がかなり綺麗に表示されるけど、あれは外部 CSS になってんのかなぁ。モバイル事情を知らなすぎる。

N73 メモ

  • ブロック要素でも縦の margin 指定がきかない
  • padding はきく
  • body { margin:0; padding:0 } しても上下にマージンがでる
  • bold にならない
  • フォントサイズは割と変えられる (というか ttf よんでる)
  • input[type="text"] に対応している (CSS2)
  • 外部スクリプトは呼べない
  • document.writeln だけ確認
  • Opera mini
    • 外部スクリプトよべる
    • alert できる (中央にメッセージ表示)
    • Opera のサーバを経由する (全部のページがケータイ向けに変換かかる)

gerry++

なんか腹痛い……

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 には無力だけど……