2007年 11月 08日

HTML の class

class はまんま OOP のクラスと同じ意味でとらえることができて、

<div class="hentry">
</div>

というのはクラスが hentry である div を表わし、言いかえれば、この div 要素は hentry クラスのインスタンスといえる (hentry に分類される実体)。

二つ以上のクラスのときは多重継承したクラスをイメージすればいいと思いますよ。

モーダルだけいえば

一般的にモーダルなのはよくないことになっていて、とかいいつつメニューとかもモーダルなんだけど、どこでもつかわれているメニューでさえ慣れていない人は操作法がわからないものらしい (おれにはそれがよくわからないけど、例えば MS Office で大量にツールバーアイコンがあるのはそういう人向けらしい)。でもみんな普通にコンピュータ使うときにはモーダルなことをしてる。モードの有無はそれを想像できるならどうでもいいことだと思う。あとはモードの切替えがめんどいかめんどくないかとか、デフォルトのモードが適切かどうかとかぐらいな感じがする。


どこらへんで妥協して線をひくかがいつも重要だけれど、そういうのって頭よくないとできないんだよなぁとつくづく感じる。おれにはできる気がしない。プログラミング言語デザインとかもそうだよなぁ (S式がなんでだめかみたいな。なんかここ最近S式がなんでだめかとか考えてばっかなんだけど)。

Vim の自動補完候補表示

http://screencast.com/t/jfQ2fz8HHL (月あたりの転送量を超えたらしく見れなくなった。Jing は 1G/month らしい)

http://lab.lowreal.net/trac/browser/config/.vimrc#L225

使いはじめてしばらくたったけど、快適すぎる。けっこう重くなるから非力マシンだと使えなそうだけど、頭使わずに補完が使えるようになってほんとに楽だ。noignorecase にしないとあれになるから検索とかが不便になるけど、それを考えてもいいかんじ。

数文字うったら候補が勝手に表示されて、候補がおおかったらずっとうちつづけられるし、候補があったらすぐ TAB 連打して入力できるし……

追記
http://subtech.g.hatena.ne.jp/cho45/20071111/1194766579

http://www.vim.org/scripts/script.php?script_id=1879

っていうのが既にあるよ! オプションとかあるからこっちのほうが便利だよ!

言語

Haskell の (\x -> a * x) みたいな匿名関数の表記はかなりビビっとくる。なんていうかこう、可愛い女の子を見たときの気持ちにている。腹の底がグっって持ちあがる感じ、わくわくする感じ。

JS でもこんぐらい短いといいのになぁ。というか JS は return かかないと値返さないのがダメすぎる。なんであんな仕様にしたんだろ。もったいない。Lua もだ。最後に評価した式の値返せばたくさん幸せになれるのに……

あと Lua はめっちゃ JS だよ。JS

a = List.new(1, 2, 3)
a:map(function (i)
    return i * i
end)
a = new Array(1, 2, 3);
a.map(function (i) {
    return i * i;
});
2007年 11月 07日

Lua で Blosxom クローン

http://coderepos.org/share/browser/lang/lua/bluasxom/bluasxom.lua

ファイル列挙するのが生の Lua でできないので ruby よんで解決。他の部分は Lua だけでかいた。Class と List は前に RO 用に書いたのをそのままつかった。reverse を定義していないことにきづいたけど sort の等号変えてアドホック解決。Lua の文字列リテラルはおもしろくて

[[...]]
[=[ ... ]=]
[==[ ... ]==]
[===[ ... ]===]

みたいに = をふやして入れ子にできる。コメントなんかも複数行書きたいときは -- のあとにコレかくんだけど、これのおかげでテンプレートのコンパイルのときに楽をしてる。それとテンプレートの include (コンパイル時に処理しないといけない) とかも入れこにできるから簡単かも。実装してないし、してもあんま意味がないのだけど……

テンプレートへの値のうけわたしは setfenv (set function environment) でやってる。Lua では文字列の eval をしたいとき、 loadstring で文字列を評価する関数をつくって、それをよぶという感じなので、loadstring のかえす関数に setfenv をよんでやれば環境が変更できる (これは Ruby でいうところの binding を指定して eval してるようなものだけど、環境も Lua ではただのテーブルなのでより柔軟性がある)。

ただ、たんにテンプレートでつかう値だけを入れたテーブルを setfenv すると os.date とか組みこみの関数がテンプレ内からつかえなくて泣けるので、グローバル環境から一段階値をコピーしてからセットしてる。やっぱ環境に直接さわれるのはおもしろい。JS もさわれたらいいのになぁ。

正規表現リテラルが必要なたったひとつの理由

バックスラッシュ二個かくのめんどくさいだろ……常考……

2007年 11月 04日

libruby.1.dylib うめこむやつ

http://rubycocoa.sourceforge.net/EmbedRubyCocoa

require 'pathname'
exec = File.join(ENV['TARGET_BUILD_DIR'], ENV['EXECUTABLE_PATH'])
old = Pathname.new('/usr/lib/libruby.1.dylib').realpath
new = '@executable_path/../Resources/libruby.1.dylib'
system("install_name_tool -change '#{old}' '#{new}' '#{exec}'") or exit 1

ってうまくいかないようなきがする。Contents/MacOS/APPNAME は otool -L すると libruby にリンクしてなくて、@executable_path/../Frameworks/RubyCocoa.framework/Versions/A/RubyCocoa にリンクしてるし、実際 libruby にリンクしてるのはこっちのほう。install_name_tool の挙動を勘違いしていなければ、たんにこれは指定されたファイルの Mach-O dylib のパスを書きかえるだけだろうから、これだと意図したこと (バンドル内の libruby よむ) ようにならない?

Chemr とかでは結局 standalonefy してあつめられる .bundle とかの libruby.1.dylib へのリンクも一緒に書きかえるようにしてみた。

# in 'package' task
	# copy libruby.1.dylib
	sh %{rubycocoa standaloneify "build/#{DEFAULT_CONFIGURATION}/#{APPNAME}.app" "image/#{APPNAME}.app"}
	system_libruby = Pathname.new("/usr/lib/libruby.1.dylib").realpath
	bundle_libruby = "image/#{APPNAME}.app/Contents/Resources/libruby.1.dylib"
	linked_binary  = "image/#{APPNAME}.app/Contents/Frameworks/RubyCocoa.framework/Versions/A/RubyCocoa"
	(Pathname.glob("image/**/*.{bundle,dylib}") + [linked_binary]).each do |l|
		sh %{install_name_tool -change '#{system_libruby}' '@executable_path/../Resources/libruby.1.dylib' '#{l}'}
	end
	cp system_libruby, bundle_libruby
sudo mv /usr/lib/libruby.1.dylib /usr/lib/libruby.1.dylib_  

して起動することを確認してみた。

(たぶん) 完全にスタンドアロンな Chemr と Amalgam

起動バイナリを置きかえて DYLD_LIBRARY_PATH を設定するとかでもいいのかなぁ。この環境変数がどれぐらい強いのかよくわからないけど

マルチログイン系のを GM で書かない理由

使わないときにも実行されるのが嫌

GM で書いたほうがはやく書けるけど、日常的におもくなってストレスたまるほうがいやだな。


GranParadiso はそれでなくても重いし!!!!! というか Safari の UI を RubyCocoa で InputManager とかつかって変更できるなら乗りかえちゃうなとか思った。

>

GranParadiso

CPU つかいすぎだなぁ……あとなんかフォアグラウンドにいるときはより CPU を食う。ActivityMonitor のグラフがやたらのびてるなぁとおもってそっちにスイッチすると隠れようとする。

関係ないけど pmTool も CPU 食いまくるよなぁ。そのせいでバッテリ持たないっていうのはどうなの。

2007年 11月 03日

GranParadiso

Firebug1.1.0b7 を入れた。うごいている。しかしいままで以上に重い。GranParadiso の重さと相乗効果

はてなのマルチログイン uc.js がないと激しく不便なのでデバッグして Fx3 向けに修正した。tumblr のやつも同じ修正が必要だけど、あんま使ってないのでそのうちでいいや。

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