2007年 09月 25日

1から100までの数字を色を表わすとするとどういうアルゴリズムがいいんだろうなぁ。
小さいほど青で明度が低く、大きいほど赤で明度があがる? 彩度で雰囲気調整?

カラーピッカー


Photoshop では HSV の H を横に縦に出したやつ (たぶんもっともよくみる形のピッカー) しか使わないけど、実際どういう形が一番いいんだろうなぁ。いいっていうのは、直感的に選びたい色が選べるという意味で、だけど……



Windows 標準のカラー選択ダイアログもこれだった気がするけど、これは中間色がなんとなく選びにくい感じ。


これも上とあんまり変わらない。

やっぱ「あの色 (色相) の、こういう感じのトーン……」って選ぶからいちばんうえのっぽいのが一番使われているんだと思うけど、それにしてもこういう選びかたをさせるピッカーの形もいくつかある。

Painter の右にむいた二等辺三角形 (http://lowreal.net/2005/triangle-color-selector とほぼ同じだけど、正三角形ではない。等間隔になるように三角形の高さを底辺と合せてある) は結構好きだけど、ちょっと狭い感じがする。

http://www.ficml.org/jemimap/style/color/wheel.html こういうのもあるけど、意図がよくわからない。

ほかに色相環+そのなかに四角とかも見る。これは場所をとるのが欠点だけど、色相環がちゃんと環になっているのが好き。人気があるっぽいSAIもこれっぽい (もちろんピッカーの形で選ばれているわけではないだろうけど)。


あと関係ないけど、普通の人に「いい色」を選びとってもらうという用途で、別に全部の色を選ばなくていいんじゃね、というなら、例えば DIC カラーとかを参考にしつつ適当に抜いてくるとか、あるいは「日本の伝統色」とかジャンルわけでやるとかがいいのかなぁ。

curses のメモ

じぶんはターミナルをほぼ全画面表示させているので、横幅が結構ながい。
そんなんで、ときどき右側にちょっと表示させたいなぁってことがあったりするのでそれのサンプル。

#!/usr/bin/env ruby

require "curses"
class Curses::Window
	def puts(*msgs)
		write(msgs.map {|m| m.to_s.chomp + "\n" }.join)
	end

	def write(str)
		@data ||= ""
		@data << str

		setpos(0, 0)
		l = maxy - 1
		out = @data.split(/\n/).last(l).join("\n") + "\n"
		addstr(out)
		refresh
		@data = @data.match(/(.*\n)*.*\n?\z/)[0] 
	end

	def sync=(*)
	end
end

Curses.init_screen
begin
	win1 = Curses::Window.new(Curses.lines, (Curses.cols / 2).to_i, 0, 0)
	win2 = Curses::Window.new(Curses.lines, (Curses.cols / 2).to_i, 0, (Curses.cols / 2).to_i+1)

	Curses.refresh
	
	$stdout = win1
	$stderr = win2
	
	load(ARGV.first, true)

ensure
	Curses.close_screen
end

$stdout と $stderr を画面半分ずつわけて表示させてみる。引数に ruby スクリプトをとる。
うえのをてきとうに double.rb とかで保存して http://lab.lowreal.net/trac/browser/c/mendoi/proxy.rb を実行させると、左にのっとりされたファイル、右にスキャンしたファイルが表示される。

(画面ちっちゃくして撮影)

$0 == __FILE__ やってるスクリプトはうごかないけど、とりあえず proxy.rb だけこうしたかった (ちゃんとのっとりできてるかわかりにくかった)

@data をちゃんとつめないとだめだ
http://lab.lowreal.net/trac/changeset/877

Tumblr のログイン支援

http://svn.coderepos.org/share/lang/javascript/userchrome/tumblr-multi.uc.js
ステータスバーに tumblr のアイコンがでる。クリックすると今までログインしたことのあるユーザ名が一覧表示され、選択するとそのアカウントでログインしたうえでブックマークレット発動
ログイン情報はパスワードマネージャから拾ってくるので保存されてないとつかえない。

chokan クラックされた

Eval と SimpleReply 系を併用してつかってる人がもしいたらすぐ Eval のほうを無効にしてください。任意の IRC コマンドが放てます。

IRCNet にいた chokan は一旦落とし、Eval をロードしない状態でうごかしています。てら迷惑な chokan
もっとセキュアな eval を考え中

kill してとめて main screen turn on / got signal とかいうから、あれもしかして SSH で入ってシェル見てんのとか思ったりして tail -f /var/log/auth.log したりとか……
でもぱっとみは chokan 経由でしかやってなかったっぽいし、なんで signal でとめたのがわかったのかわからない……彼らからするとみえないはずなんだけどなぁ。chokan のログはとってなくて (表示させてるだけで、追ったときは screen のバックログ検索) ふかくおえない……

chokan は tiarra 経由でつないでて、chokan.rb を殺しても IRCNet 側的にはなにもおきない (これは CTCP で彼らはしってた)。Eval 経由ではソケットへの書き込みは $SAFE 的に一切できないはずだから (できるなら SimpleReply を経由しないだろう)、直接そこからどうこうしたってわけではないと思う……

直接 chokan に対してセッションをはれていたわけではないはずだから、SEGV させてうんたらってのはできないはず。SEGV させたら Eval がもう動かないし

  • chokan.rb から任意の IRC コマンドが発行できる状態になっていた
  • freenode と ircnet につないでいたが IRCNet 以外ではとくになんもなかった
  • 他のチャンネルいくつかにも強制 JOIN していた。すべて IRCNet
  • http/https/ssh/ircd 以外のポートはルータの時点で閉じてる。
  • SSH のログで最後にアタックがあったのは 16:00 で、.net ドメイン (全て失敗) クラッカーは .at .ch だった。
  • SSH はそれから先 publickey でのおれのログインしかない。

直接セッションはらせる方法もあることはあるか……
DCCCache つかって CTCP SEND 投げて chokan に直接接続させて、ほげほげ? できんの?
とおもったけど、接続がきた時点で日付とか nick をふくめてファイルを生成しているのになんもできないからこれは使ってないっぽい。

2007年 09月 24日

スターすたー

あるアンテナから辿っておもしろい日記をさがしていたのだけど、はてなスターのボタンがついてないと「ああいいやスターつけられないし」とか思って閉じている自分に気付く。いけないいけない、と思って一セクションだけ読んでみるのだけれど、あんま面白くないことが多いので結局閉じる。

canvas on Safari

Fx 用にかいたのを Safari でもうごくようにしたいメモ書き

  • createLinearGradient は canvas を appendChild してからじゃないと値かえさない
  • fillRect() でグラデーションえがけない。 beginPath(); rect(); fill() にわける。
2007年 09月 23日

おれきづいたことがあるんだ。昨日夢で見た女の子のことが好きなんだ。

夢とグレープフルーツとMARCH

夢とグレープフルーツは情報で溢れている。
一昨日の深夜、コンビニにってグレープフルーツジュースを買い、帰り道にそれを飲んでいると、いろんなことが頭の中に流れ込んできた。あの夢はたぶんそのグレープフルーツジュースに含まれていた情報なんだろう。

ブックマークレットとかで、設定を先頭に書けるようにする

設定を分離するために

javascript:(function (url) {
   // hoge
})("http://example.com");

みたいにしたりするけど、最後に書くのがちょっとだるい。ので、次のようなのを考えてみた。

javascript:"http://example.com".replace(/.+/, function (url) {
  // hoge
});void("fumino");

ちょっと長くなるのでぎりぎりの場合はつかえないけど、設定が前にでてくるので書きかえやすい。スクリプト要素追加系だと、中身は共通なのでこっちのほうが新しくブックマークレットつくりやすい (ささいな手間といえばそうだけれど)

これを使うとスクリプト追加系は以下のように

javascript:"url".replace(/.+/,function(url,s){s=document.createElement("script");s.charset="utf-8";s.src=url;document.body.appendChild(s)});void("san");

javascript:"url".replace(/.+/, function(url, s) {
    s = document.createElement("script");
    s.charset = "utf-8";
    s.src = url;
    document.body.appendChild(s)
});void("moe");

わりとどうでもいいけど

var s=...

と書くかわりに、仮引数を使うことでなんか気持悪いスペースを消してみてる。

複数の引数をとりたいときも同じように書ける。ただしデータの変換は関数内部でやることになるし、パースも自分で正規表現を書くことになる。でもたいしたこと書かないから問題ないとおもう。

"2222 81".replace(/(\d+) (\d+)/, function(_, a, b) { alert(Number(a)+Number(b)) });void("二次元にいきたい");

唐突に夢の内容を思い出した。今日の朝の夢だと思うけれど、桜並木 (ただし夏で、葉が青い) で、jkondo 氏と会話する。たぶんすれ違いざまに一言二言だったと思う。内容は覚えていないし、なんですれ違いざまに会話するのかもよくわからない。ただ、やっぱり、自転車にのってた。
いやでも本当にこれは夢の内容なのだろうか。今「夢で見たことがある」っていう記憶が生まれただけではないのだろうか。でもなんで

zsh の bindkey -v (vi バインド) でモード表示するようにした


どっちだかわからなくて不安になるので (どうせ C-[ 連打するとはいえ) 検索したらすぐヒットした。http://www.zsh.org/mla/users/2002/msg00105.html

http://lab.lowreal.net/trac/changeset/871

でもこれだと毎回プロンプトだすときに INSERT とかでてうざったいので、preexec で前回表示したモード表示を消すようにしてみた。(数値きめうちなので、複数行入力するとおかしくなる。PREBUFFER とかつかえばいいのかな)

http://lab.lowreal.net/trac/changeset/872

でも preexec なので C-c とかやってプロンプトリセットしたりすると残ってしまう。

ほんとはプロンプトの下にだしたいのだけど、位置指定してほげほげしてると、INSERT -> NORMAL -> INSERT とかやったときひどいことになるので諦めた……screen の hardstatus に出すのがいいのかもしれないけど、なんかそれも違う気がしたので妥協

あと関係ないけど、C-p C-n がなぜかそのまま入力されてうざいので、それだけはバインドした。
http://lab.lowreal.net/trac/changeset/870 (bindkey -e; bindkey L ででてきた結果を適当につっこんだので ^O もバインドしてある。つかわない)

ML おってたらもっと簡単なのがあったのでそっちにへんこう
http://lab.lowreal.net/trac/changeset/873

zsh の補完

なんか exec zsh を毎回やらないとエラーでるようになった。

書く順番書けたらなおった。cmp 系はあとのほうに書かないといけないっぽいのかな