キーボード
学校の端末を英語配列で使えるようにする方法を考える。権限が少なすぎ……なんか簡単に変えられないのかなぁ。ユーザごとにキーレイアウト変えられないわけがないとは思うのだけれど……
学校の端末を英語配列で使えるようにする方法を考える。権限が少なすぎ……なんか簡単に変えられないのかなぁ。ユーザごとにキーレイアウト変えられないわけがないとは思うのだけれど……
スクリーンショットを対話的にとるとき、マウスでドラッグして選択するのがあるけど、あれってどうやってやるんだろうって考えてた。
マウスイベントをキャプチャーして……とか面倒くさそうだなぁとか思ってたけど全然違う方法で実装できそうだ。
require 'osx/cocoa'
include OSX
class SelectionView < NSView
attr_accessor :delegate
def drawRect(rect)
NSColor.colorWithCalibratedRed(0, :green, 0, :blue, 0, :alpha, 0.1).set
NSRectFill(bounds)
if @start && @end
NSColor.colorWithCalibratedRed(0.5, :green, 0.5, :blue, 0.5, :alpha, 0.5).set
NSRectFill(calc_rect)
end
end
def mouseDown(event)
@start = NSEvent.mouseLocation
end
def mouseDragged(event)
@end = NSEvent.mouseLocation
setNeedsDisplay(true)
end
def mouseUp(event)
@end = NSEvent.mouseLocation
delegate.windowShouldClose(nil)
window.close
end
def calc_rect
x = [@start.x , @end.x].min
y = [@start.y , @end.y].min
w = (@start.x - @end.x).abs
h = (@start.y - @end.y).abs
[x, y, w, h]
end
end
class TEST < NSObject
def applicationDidFinishLaunching(aNotification)
size = NSScreen.mainScreen.frame.size
rect = [0, 0, size.width, size.height]
@window = NSWindow.alloc.initWithContentRect(rect,
:styleMask, NSBorderlessWindowMask,
:backing, NSBackingStoreBuffered,
:defer, 0)
@window.setDelegate(self)
@window.setOpaque(0)
@window.setHasShadow(0)
@window.setLevel(1000) # NSScreenSaverWindowLevel
@view = SelectionView.alloc.initWithFrame(rect)
@view.delegate = self
@window.setContentView(@view)
@window.makeKeyAndOrderFront(nil)
@window.orderFrontRegardless
end
def windowShouldClose(sender)
p @view.calc_rect
exit
true
end
end
$App = NSApplication.sharedApplication
$App.setDelegate(TEST.alloc.init)
$App.run
スクリーンと同じサイズのできるだけ透明なウィンドウを作ってあげてそいつでイベントうけとる。
画面イメージを取得して書き出してみる。
// gcc -framework Cocoa
// depth 32bit, intel little endian
#import <Cocoa/Cocoa.h>
int main() {
int w = CGDisplayPixelsWide(kCGDirectMainDisplay);
int h = CGDisplayPixelsHigh(kCGDirectMainDisplay);
NSLog(@"%d, %d", w, h);
unsigned char* _screenBytesActual = (unsigned char*)CGDisplayBaseAddress(kCGDirectMainDisplay);
NSLog(@"Address: %08x", _screenBytesActual);
int bitPerPixel = CGDisplayBitsPerPixel(kCGDirectMainDisplay);
int bitPerSample = CGDisplayBitsPerSample(kCGDirectMainDisplay);
int samplePerPixel = CGDisplaySamplesPerPixel(kCGDirectMainDisplay);
int bytePerRow = CGDisplayBytesPerRow(kCGDirectMainDisplay);
int bytePerPixel = bitPerPixel / 8;
NSLog(@"%d %d %d %d %d", bitPerPixel, bitPerSample, samplePerPixel, bytePerRow, bytePerPixel);
FILE* fp;
if ((fp = fopen("test.bin", "w")) == NULL) {
NSLog(@"fopen failed");
exit(1);
}
int x, y;
for (y = 0; y < h; y ++) {
fwrite(_screenBytesActual + y * bytePerRow, w * bytePerPixel, 1, fp);
}
fclose(fp);
return 0;
}書き出されたファイルは BGRA がディスプレイの左上から並んでる (intel)。
1ピクセルあたり 4 bytes なので、全体では 1280*800*4 = 4096000 = 4000KB
でできた test.bin を png なりに変換してみる。ここでは rmagick
require 'rubygems'
require 'RMagick'
require 'ostruct'
require 'profiler'
frame = OpenStruct.new
frame.width = 1280
frame.height = 800
Profiler__.start_profile
img = Magick::Image.new(frame.width, frame.height)
img.import_pixels(0, 0, frame.width, frame.height, "BGRA", File.read("test.bin"), Magick::CharPixel)
img.write("test.png")
Profiler__.print_profile(STDOUT)img.write は遅い。
への布石
を組み合わせてスクリーンショットをとりまくって変換してみる。
#!/usr/bin/ruby
require 'rubygems'
require 'RMagick'
require 'ostruct'
require 'pathname'
require 'osx/cocoa'
require 'ext/osxscreen'
require 'zlib'
require 'progressbar'
include OSX
system('rm test/*')
size = eval( `./fullscreen.rb` )
p size
fps = 12 # frames per second
interval = 1.0 / fps
time = Time.now + 3
nextrun = 0
loop do
true while Time.now.to_f < nextrun
nextrun = Time.now.to_f + interval
filename = "test/temp-#{Time.now.to_i}.#{Time.now.usec}.bin"
File.open(filename, 'wb') do |f|
f.write OSX::ScreenData.data
end
# Zlib::GzipWriter.open(filename + '.gz', Zlib::BEST_SPEED) do |f|
# f.write OSX::ScreenData.data
# end
puts filename
break if Time.now > time
end
frame = NSScreen.mainScreen.frame.size
files = Pathname.glob('test/*')
bar = ProgressBar.new('Convert', files.size)
files.each do |f|
img = Magick::Image.new(frame.width, frame.height)
img.import_pixels(0, 0, frame.width, frame.height, "BGRA", f.read, Magick::CharPixel)
img.crop!(*size)
img.write(f.to_s + '.png')
f.unlink
bar.inc
endzlib は使わない方がいい気がする。ハードディスクあいてないときは使わざるを得ないけど……
fullscreen.rb (名前わるすぎ)
#!/usr/bin/ruby
require 'osx/cocoa'
include OSX
class SelectionView < NSView
attr_accessor :delegate
def drawRect(rect)
NSColor.colorWithCalibratedRed(0, :green, 0, :blue, 0, :alpha, 0.1).set
NSRectFill(bounds)
if @start && @end
NSColor.colorWithCalibratedRed(0.5, :green, 0.5, :blue, 0.5, :alpha, 0.5).set
NSRectFill(calc_rect)
end
end
def mouseDown(event)
@start = NSEvent.mouseLocation
end
def mouseDragged(event)
@end = NSEvent.mouseLocation
setNeedsDisplay(true)
end
def mouseUp(event)
@end = NSEvent.mouseLocation
delegate.windowShouldClose(nil)
window.close
end
def calc_rect
x = [@start.x , @end.x].min
y = [@start.y , @end.y].min
w = (@start.x - @end.x).abs
h = (@start.y - @end.y).abs
[x, y, w, h]
end
end
class TEST < NSObject
def applicationDidFinishLaunching(aNotification)
size = NSScreen.mainScreen.frame.size
rect = [0, 0, size.width, size.height]
@window = NSWindow.alloc.initWithContentRect(rect,
:styleMask, NSBorderlessWindowMask,
:backing, NSBackingStoreBuffered,
:defer, 0)
@window.setDelegate(self)
@window.setOpaque(0)
@window.setHasShadow(0)
@window.setLevel(1000) # NSScreenSaverWindowLevel
@view = SelectionView.alloc.initWithFrame(rect)
@view.delegate = self
@window.setContentView(@view)
@window.makeKeyAndOrderFront(nil)
@window.orderFrontRegardless
end
def windowShouldClose(sender)
size = NSScreen.mainScreen.frame.size
rect = @view.calc_rect
rect[1] = size.height - rect[1] - rect[3]
p rect
exit
true
end
end
$App = NSApplication.sharedApplication
$App.setDelegate(TEST.alloc.init)
$App.runext/screendata は C
#include <Carbon/Carbon.h>
#include <ruby.h>
VALUE
screendata_data () {
VALUE ret;
int w = CGDisplayPixelsWide(kCGDirectMainDisplay);
int h = CGDisplayPixelsHigh(kCGDirectMainDisplay);
unsigned char* _screenBytesActual = (unsigned char*)CGDisplayBaseAddress(kCGDirectMainDisplay);
unsigned char* _screenBytes = (unsigned char*)malloc(w * h * 4);
//NSAssert(_screenBytes != 0, "fail malloc");
int bitPerPixel = CGDisplayBitsPerPixel(kCGDirectMainDisplay);
int bitPerSample = CGDisplayBitsPerSample(kCGDirectMainDisplay);
int samplePerPixel = CGDisplaySamplesPerPixel(kCGDirectMainDisplay);
int bytePerRow = CGDisplayBytesPerRow(kCGDirectMainDisplay);
int bytePerPixel = bitPerPixel / 8;
int x, y;
// for (y = 0; y < h; y++) {
// unsigned long step = y * bytePerRow;
// for (x = 0; x < w; x++) {
// unsigned long pixel;
// pixel = *((unsigned long*)(_screenBytesActual + (x * bytePerPixel) + step));
// // pixel on Intel => AABBGGRR
// // bitmap data planes => AARRGGBB
// pixel = ((pixel & 0x00ff0000) >> 16) | ((pixel & 0x000000ff) << 16) | (pixel & 0xff00ff00);
// *((unsigned long*)(_screenBytes + x * 4 + y * w * 4)) = pixel;
// }
// }
for (y = 0; y < h; y ++) {
memcpy(_screenBytes + y * w * 4, _screenBytesActual + y * bytePerRow, w * bytePerPixel);
}
ret = rb_str_new((const char*)_screenBytes, w * h * 4);
free(_screenBytes);
return ret;
}
void
Init_osxscreen () {
VALUE ScreenData;
VALUE module;
rb_eval_string("require 'osx/cocoa'");
module = rb_eval_string("OSX");
ScreenData = rb_define_module_under(module, "ScreenData");
rb_define_module_function(ScreenData, "data", screendata_data, 0);
}memcpy の引数を逆にしてひどいことになった。すぐなおるからいいけど(CGDisplayBaseAddress の先には直接書き込める。すなわち直接描画できる。)
ここから flv に変換したい。
rmovie という gem があるんだけど、コンパイルできない。ffmpeg を port で入れて云々がうまくいかない。深く追ってない。
このエントリは古いのでアテにしないでください。新しいスクリプトは userscripts.org で公開され、CodeRepos で保守されています。
mallowlabsの備忘録 - ポップアップ型英英辞書 見てて選択したらすぐ検索できるのっていいなぁと思ったので似たようなのを作ってみた。
相違点
結果のタイトル (赤い部分) をクリックするとその結果だけ消えます。ドキュメント内のどっかをクリックすると全部消えます。
ダブルクリックで単語を選択するのでどんどんひける。
献本欲しい!と書くともれなく gaba さんが献本して下さるかもしれません。という仕組みはまだありません?><
註記:このエントリは、なんらかのオープンなライセンスに基づいて、http://subtech.g.hatena.ne.jp/secondlife/20061204/1165212092 をコピペしたものです。
註記:このエントリは、なんらかのオープンなライセンスに基づいて、http://subtech.g.hatena.ne.jp/antipop/20061204/1165212198 をコピペしたものです。
やばい。素敵だ。なんでもっとはやく買わなかったんだろう。
haraitai
15日ぶり。久しぶりにトイレにこもったら足が痺れた。
学内の proxy よりも ssh でトンネリングした SOCKS 経由の接続の方がはやい。
もっと精進します。
なんか synergy がやたらきれて調子が悪かったので再起動かけたら、ログイン画面がでる直前に青画面になってリブートがかかってしまうようになった。
いったんセーフモードで起動して再起動したら起動した。怖すぎる。
mayu かと思ったけど、インストールしてから数日たってて問題がなかったので、なんとなくだけどグラフィックカードのような気がする(解像度の変更に失敗している?)
やっぱ Perl むずい。ithread 周りをまたちょっと見てみたけど、罠が多くて覚えられない。
というのはどうでもいいけど、内部データ構造もよくわからない。utf8 まわりがぜんぜん……
起動時にブルースクリーンさんがでしゃばってなかなか起動しなくなってしまったので再インストールしました。
nLite でどうでもよさそうなのを軽く削って、CD ブート。
起動したと思ったら NIC が認識されてなくて途方に暮れた。マザボ付録の CD からドライバ入れて解決。怖かった。これのために部屋をひっくりがえした。見つからない見つからない……結局なぜか DELL の付属品入れに入ってた。引っ越しのときに適当な大きさだったから入れたんだろうけど……
ネットワークが繋がったら
とかごたごたやった。
そして
を入れた。既にメインマシンじゃないので適当
でなんかちょっとたったらハードディスクが一気に全部使い果たされてていきなりウィルスかとあせった。なんかオフラインファイル機能が有効だったらしく、ネットワークドライブを勝手に同期されてた。こわい。
なんかうまくいかない。
そもそも dojo 0.4 + MochiKit 1.3.1 の組み合わせはうごかない http://trac.dojotoolkit.org/ticket/1735
うえのチケットみて対策してみると一応使えるようにはなるけど、dojo と一緒に使った場合 MochiKit さんは export してくれない。
しかし dojo でどうやって export すればいいのかわからない。
もうめんどいので script 要素書いたけど……
charting/vml/Axis.js 181
charting/svg/Axis.js 155
var textSize=10;ひっかけられそうなポイントがない!
再起動させるとほぼ確実に blue screen で起動しない。
セーフモードで起動したり、電源を強制的に切ったりしたりしてると起動したりする。
blue screen はログイン画面がでる直前にでてすぐに消え、リブート。セーフモード云々の選択肢がでる。
セーフモードでは確実に起動するっぽい(二回しかやってないけど)。でもセーフモードで起動したあとそのまま再起動を行うとブートプロセスがはじまらない。ハードシャットダウン
一度起動してしまえば、ハイバネートはまったく問題ない。なんでだ……
とりあえずいい機会なので XP を再インストールすることにする。学校で CD を借りた。nLite で Luna 削って入れようと思う。しかしプロダクトキーが家のどこにあるか探し出さなければならない!
バイト先のすごい人(謎)が、PIC マイコンがどうとか言っててカッケかったので試してみたい。のでネタを考えてる。なんか世界がひろがりんぐだけどひろがりんぐすぎて思いつかない!
PIC マイコンとかって何か絶対手が出ないものとか中学の頃は思ってたけど、改めてアセンブリソースとか見せてもらったりすると意外にできるんじゃないかとか思えて面白かった。
重すぎてまともに見れない。まずロードが終わることがない。なんなんだろう。
ブロックレベルの ins/del が実質使えない。要素の中だと Markdown シンタックスが使えないため、ブロックレベル ins/del を使いたいならば ins/del の中身は全て手動でマークアップしないといけない。これが面倒くさい。
Text::Hatena にしたいけど、既存のエントリをどうするかで困る。meta でフォーマットもってそれを読むようにするとかしないとだめっぽい。むーん。
ひさしぶりに DVD を手に取ってた見たけど、やっぱジャケットがはてななのが面白い。daimasの日記スペシャルの日記
amazon に画像がないのが残念だなぁ。なんか DVD ジャケットとしてはてなダイアリーがでてくるといつも見るはてなダイアリーとは違った感じがする。あたりまえか
寝まくってたらまた学校関連の夢を見た。
キノの旅〈10〉the Beautiful World 時雨沢 恵一 を読んだ。
冒頭のペットのやつが地味に好き、かもしれない。あとがき以外は面白かった。
少し前まで、書きたい事がたくさんあったけれど、最近はなんだか減ってきてしまった。そもそも自分の「書きたい欲求」は「不満」からくるものであったか、何かに対する言い訳だったと思うのだけれど、最近そういうのが減ってきたのかもしれない。諦めが良くなったのか、それとも本当に減ってきたのかはわからない。
それと、こうやって詳しく誰かに何かを伝えようとする、みたいなことがだんだん意味があることなのかよくわからなくなってきている。結局どんな言葉であっても、伝わらないものは伝わらない。ついでに言えば、最も伝えたい人には殆ど伝わらない。
だいたい自分が不満に思うのは、前提/思考レイヤーが違う人たちに対してなので、そもそも話が通じないのだ。だからそういう人たちに何かを言って伝えようとしたって、伝わらなくてみじめな思いをするだけだ。結局自分に何か嬉しいことがない。
何か嬉しいことや、楽しいことがしたいと思う。それはまずはじめに自分のためであって、誰かにためじゃない。ただし、その自分が楽しくなるための過程で、他人が楽しくないといけないならば、それを実行したいと思っている。最終的な目的を見失わないようにしたいし、変な言い訳をしないようにしたい。
いつまでたっても「したい」とかそういうのばっかりだ、なぁ。
前より少しいいのは、「なりたくない人」だけじゃなくて、「なりたい人」みたいなのが少しずつ見えてきていることかもしれない。漠然とじゃなくて、いろんな人から、自分がいいと思う部分をかき集めた感じの何かがなんとなくあったりする。
前より悪いのは、また構築したものがベリベリとはがれ落ちている感じがすること。いつだったか、球体の穴を埋めて行くとかなんとか書いたけれど、あれがまた元に戻っている。もしこれが他人に対して「オープンになる」という感覚だったとしたら、自分は一生クローズでありたいと思う。地に足がついている気がしない。落ち着かない。いやしかし単に読書不足かもしれない。最近ラノベぐらいしか読んでない。
学校がちょっと本当に楽しくないので、やめることを一応半分本気で考えているけれど、今のままでは無理なので、どっちにしろやめられないという結論はでてる。ただ今のまま学校をつづけても、そして今のまま学校をやめてもほぼ確実に後悔するだろうと思う。学校を今のまま続けたら、数年後に「あれは時間の無駄だった」と思うだろうし、今学校をやめれば「学校を出ておけばよかった」と思うだろう。
で、どっちもだめなのだから、ここは変えるべきポイントじゃないんだと考えることにする。いや、今そう考えることにした。タイピングしながら考えている。HHKB 素晴らしい。関係ない。
さてじゃあ何を変えるべき? 自分が今不満なのは何? やる気が出ないのはなぜ?
とか考えてみるけど現実的な解がいまいち見つからない。とりあえず可愛い女の子といちゃいちゃしたい。そんな子がいて、例えば冬の日に「寒いね」って言うその子の口からでる霧が綺麗で、逆光の中で髪が輝いてて、僕は眼を細めて、「ああ、幸せだなぁ」なんて思いたいんだよ。そんな夢を壊さないで!
学校の何がつまらないんだろう。一通り考えたけど、結局「学校だから」つまらない気もする。例えば学校が「校内全て禁煙」で「全てのトイレが綺麗」で「クソくだらない講義をする教授」がいなくて「svn, svk するために ssh -D しない」でよかったら楽しいかっていったら楽しくない気がする。
というかクソ講義をする教授は論外だとしても、自分が一番なんかひっかかるのは、学生のほうだと思う。しかし自分自身学生であるから、他の学生について書くのは難しいし、だいたいは人の事を言えないのがアレすぎる。ベンチとか出入り口とかで偉そうにタバコ吸って粋がっている学生とかはほんとに死んで欲しい(灰皿があるのがそもそも間違っているとは思うけど)。最低限考えられている暗黙のクオリティをすっ飛ばしてるとか、そのくせ効果を言わずに意見だけいうとか。
はいはい人の事言えない。
何にしても、結局いろんなことは全部自分に帰ってくるんだよなぁ。だから自分がちゃんとしないといけない。ちゃんとするの難しい。誰だってそうだ。考えよう。
他人のことが不満なら、自分で全てやってしまうしかない。自分でやれば解決する。
もう、いいや。
OS X の Firefox で IME きりかえ (C-SPC) をするとスペースが入力されることがある。この状態になると一度 Firefox を再起動しないと治らない。うーん。
属性に変数を使いたい時にハマった。クオートしたらだめなのか
var xml = <>
<a href="{foo}">unco</a>
</>;は foo が展開されない。
var xml = <>
<a href={foo}>unco</a>
</>;だと展開される。
属性値の途中に埋め込みたい時はどうするんだろう。JS の式書くしかないのかなぁ。キモイなぁ。
^!h::Send {Left}
^!j::Send {Down}
^!k::Send {Up}
^!l::Send {Right}みたいにするようにした。C-f C-b C-n C-p に慣れたほうがいい気もする。
おなかいたいお
よくある攻撃手法で、スルー力がない自分が最も嫌いなもの
> よくある攻撃手法で、スルー力がない自分が最も嫌いなもの
きめぇ文章だなw 日本語書けよw スルー力いいたいだけなんじゃねぇのっっw
とか引用して適当に書くやつ。こういうのを透明にする GM スクリプトを書こうと思ったけどうまく書けないので諦めた。
攻撃対象になった時点で負けである。負けを認めて引きこもって対象が変わるのを待つしかない。これがひたすら気持ち悪くて嫌いなのは、反論を許さないことにある。何言っても無駄にも関わらず、向こうは何を言っても、こちらがそれを読んでいる限り攻撃が有効だ。
回避方法はとにかく無視するしかない。脳内フィルタでうまく排除できないのなら機械的に排除するしかない。機械的に排除できない部分は (例えばコンピュータを介さないとか) 耳や目を塞ぎ、相手の手が及ばないところに逃げるしかない。
コメント欄があるブログなら、匿名で「きもいですね」と書いたら十分だ。コメント欄は性質的に SBS より無視しにくいので攻撃するにはうってつけ。バナナフィッシュに
var params = {};
location.search.replace(/^\?/, '').split(/&/).forEach(function (e) {
var t = e.split('=');
params[t[0]] = t[1];
});
$X('//img[contains(@src, "'+params.asin+'")]').forEach(function (e) {
var ref = $X('./preceding::h2[1]/following-sibling::*[1]', e)[0];
var s = <>
<a href={"http://www.amazon.co.jp/exec/obidos/ASIN/"+params.asin+"/nuso-22/ref=nosim/"}>
<img src={e.src} alt="" />
{e.alt}
</a>
</>.toString();
ref.parentNode.insertBefore(
$N('div', {'class':'document_indent'}, [
$N('textarea', {cols:70, rows:10}, s)
]),
ref
);
});みたいの書いてごまかした。(画像のみのページで使う)
一から AWS 使って書こうと思ったけど UI 作るのがめんどいのでやめた。
なんかサーバパスワードとして NickServ のパスワード送ればいいだけだった。
自前で Basic 認証するスクリプト書きたいけど想定してる環境だとうまくできないなぁ。
CGI は無理だし、mod_fcgi もユーザ名/パスワードとれない。
Ajax で叩く API って Basic 認証の方が便利だと思うだよなぁ。クッキーだとダイアログ出すとかできないからログインしてない場合に特別何かしてあげないと気付けない。
W-ZERO3 が流行っているおかげで mini-A USB コードが入手しやすくなってる。せっかくなので一本買ってみた。
キーボードを繋いでみたけど、何も設定しなくてもそのまま使える。ただし日本語配列。ドライバレベルで手を入れないと英語キーボードは使えるようにならないみたいだ。(ぐぐるといくつかでてくる)
そんなに使いたいわけじゃないので深追いしてない。
技術的なことを深く掘り下げるっていうより、考えていること (mala さんのアレとかはてな哲学とか) を聴けたのがよかった。
なんていうか、当たり前だけどレベルが違うなぁとか思った。途中で最近自分は何にもそういうこと考えてないなぁって気付いてヤバい。
Capistrano のシェルってすごいなぁっておもたけど、個人レベルじゃ使う機会がなくてうんぬん。
qpe-embeddedkonsole-ja だと mutt がうまく表示できない。
このサイトもそうだけど、たくさんのサイトは一番上にサイト名があって、次にナビゲーションがあって……みたいになってる。
でもこのサイト名とかナビゲーションって一番上になくてもいい気がする。サイト名って別にそのページのリソースとは直接関係ないし、サイト名がわかったからといって、読んでる人はそんなに得をしない気がする。ページのタイトルが一番上に来ている方がスマートなんじゃないかって、なんかさっき坂を上りながら考えた。
そろそろ古い CSS セットを捨てて HTML を書き直しつつ新しい CSS を書こうと思う。今のはごちゃごちゃしすぎている。
モチベーションって何かなぁ。モチベーションのスイッチが入っているときは、いつスイッチが切れてしまうんだろうって不安だし、切れているときはもう二度と入らないんじゃないかと不安だ。なんか不健康なもののようだ。いやでもスイッチが完全に入っていれば集中してるからいいのか。でも集中ってずっと続かないのが明らかというかご飯食べないと死ぬよね、みたいな。
ご飯食べたり、トイレいったりする時に、悪い方向にピンとくるとスイッチが切れてしまう。良い方向にピンとくるともっとスマートな実装を思いついたりする。プラスマイナスゼロ
追いつめられないとあらゆることにモチベーションが沸いてこない。ぎりぎりまで何もしない。正確には、スイッチがどうすれば入るのかを考えている。けど手を動かしていないので何もしていないのとおなじ。
モチベーションから行動。
自分が「とりあえずやってみるか」と思えるのはアンドゥが効くときだけみたいだ。全くリスクがないとき。
何かしらリスクがあることはそうはいかなくて、そのままでは全く行動までいかない。でもってここで「失敗したら死ねばいい」と考えているから、やっと行動ができる。失敗ケースの逃げ道は、もちろんそれ以外にも用意はするけど、結局ワーストケースで全く逃げ道がない場合でも、死ねばいいという逃げ道を確保できる。自分はこれはネガティブな考え方だとは思ってない。もしこれについてネガティブだなぁっていうなら、そいつは何もわかっちゃいないのだ、と思う。
なんかフォントが M+ になったり MS ゴシックになったり謎の挙動。
guifont=BDF_M+:h9:cSHIFTJIS
としてあるんだけど、M+ になっているところとなってないところがある。謎すぎる
吉永さん家のガーゴイル 11 を読んだ。
もう11巻目なのか!とか思いつつ、しかし10までの内容をあんまり覚えてなかったりする。もう安定した話になってて大枠でストーリーが動いたりはしないみたいだ? 普通に面白い。
blosxom いいんだけど、なんかまた日記ツールを作りたい病にかかってる。
taiytry の何がアレなんだっけなぁ。テンプレートに処理が書いてあるのがアレなんだっけ。今はどうだかわからないけど……
CGI で動くのが作りたい。
Rails は(殆ど触った事ないけど)特定の用途ではいいっぽいけどそんなに汎用性がある感じじゃないイメージ。あと重い。CGI で動かすと死ぬ。データベース必須。とか……
データベース使わなくてもできることはできるのだろうけど、AR とコアとの関係が深そう。ORM が強いのが Rails の強みみたいな話を聞く。
イメージ的には Catalyst の Ruby 版が欲しいんだよなぁ。概念とある程度のガイドラインがあって、実装はコントローラぐらいしかない。
欲しいのは
CGI のことを考えてるあたりアレだけど、実際使うとなるとなぁ……XREA で動かしたい。自分でサバ管理したくない。
rails は AR なくても動くみたいです! オフにできるって!
var host = (frames.top) ? frames.top.location.host : location.host;
Array.forEach(document.getElementsByTagName('a'), function (e) {
log(host, e.href);
if (e.href.indexOf(host) != -1 && e.href.indexOf('http:', 1) == -1) {
e.style.background = '#f00';
e.style.fontWeight = 'bold';
}
});というのをざっと書いたのだけど、セキュリティエラーで frame がうまく処理できない。
(同じホストへのリンクをハイライトするものです。普通のサイトに使うとうざったい。あと out.php?h=http://hoge/ みたいなのを排除)
引っ越したので案内状が今住んでいるところからしかこない。一応不安なので調べてみた。
以前住んでいたのは川崎市。
とりあえず「成人式 他の市」でぐぐると、FAQ みたいなのがでてくる。しかし別の市のもの。川崎市にも FAQ みたいなのがあるのかな、と思い「川崎市 成人式」でぐぐる。
川崎市 FAQ 成人式について知りたい。というのがでてくるけどここには書いてない。
「関連するホームページ」というのがあるので見てみると成人式概要 があり、
Q3:川崎市内に住民登録していないが、川崎市の式典に参加したい。
A:案内状がなくても参加できます。身分証明証等の提示も必要ありません。
案内状がない方の入口がありますので、そちらから入場してお名前を記入してください。
と書いてあった。普通に入れるようだ。
外部ディスプレイつないだときに輝度がMAXになるけど、これって変えないように出来ないのかな
YP-C1 ってもう売ってないんだなぁ。
単三1本で動くプレイヤーがなくなると困る。iriver が一つシリーズ出してるけど、いつなくなるかわからない……
単三1本で動くプレイヤーだと充電池3本で(1本ごとに充電できる充電器なら2本) 回せるからいいんだけどなぁ。電池きれてもカバンの中に常に予備を入れておける。
ドックみたいな感じだと充電忘れまくる。携帯でさえ充電忘れてたまに家におきっぱだし……
だから iPod がどんだけ売れてても論外というか、再生時間短すぎというか iTunes に依存してるのが気に食わないというか iTunes インストールするとき勝手に関連づけ変更されるのが気に食わないので Windows には iTunes 入れてないとうか、だからといって fb2k から iPod プラグインを使うというのはなかなか不安なのでやりたくないしというか、いやだから電池がアレじゃ……
歴史なんてどうでもいい。
for (var i = 0; i < foo.length; i++) {
// hoge
}i -> index
foo.each do |i|
# hoge
endi -> item
ずっと C-v でコピペしてて、座標がリセットされるの意味わからんとか思ってたけど、C-f, C-b でペーストすると同じ座標にペーストされた……(重なり順以外は同じ挙動だと思ってた)
Asano さんに教えてもらった。kami gtlt
/notice はいいんだけど、複数行送りたい時いまいちいい方法がない!
scripts にいくつかあるけどいまいち……でもって内部 perl から system('vim') とかやってみたけど画面崩れてだめだった(わらい
GreasemonkeyスクリプティングTIPS&SAMPLES をいただきました。ありがとうございます。ホントは貰えるとは思ってなかった (メールに気付かなかった) のですが、いろいろあって貰えました。
Greasemonkey の API を使おうと思うたびに authoring.html を開いていたので (GM_xmlhttpRequest はコピペ)、さりげなく API リファレンスが便利かも。
一旦流して読んでみたので、コンピュータ見るのに疲れたときに布団の中で読もうと思います。
このサイトで公開された 2006 年分の user.js は http://lowreal.net/2006/?D=A にあります。Javascript なやつをてきとうにさがしてください(てきとう)。自分がもう使ってないやつは動かないかも。
そういえば $X のまともな説明ページって書いてないっぽい感じすね。あの日記のセクション読んでも意味わかんなそうだ。
ろんりてきじゃない。タイプしながら考える。
努力がどうとか、ホントにずっと考えているけど、恐らく誰かが望むであろう「良い」答えはでてない。ただ、絶対にしたくない努力についての考え方みたいなのはあったりする。
自分でその最上級にくだらなくて、つまらなくて、つらい「努力」とやらを望んでやっているのに、「俺はつらい努力をしているから偉い」みたいな考え方をするのはさけたい。意識的/無意識的に関わらず、さけたい。だから時々自分をチェックする必要がある。
人間が生きていることになんて、なんの意味も、価値もない。意味も価値も、見いだしているのは人間/自分そのものだ。だから、「つらい」ことをやっている自分、というのは、自分がそれを望んだからそれをやっているに過ぎないと思う。いくらでも、楽しい方向に考えることはできるはずだ。でもそれは殆どの場合うまくいかない。ちょっと「つらい」ことをしたあとに楽しいことをしたほうが、より楽しいことを知っているからだ。でもって人によって、この「つらい」ことをするのと「楽しい」ことをするのとのバランスが違う。殆どずっと楽しい人もいるし、殆どずっと辛い人もいる。
そしてそのバランスは一度決まってしまうと(たぶん小学生か中学生ぐらいのときに決まる)、変化しにくい。辛い環境に慣れてしまうと、楽しいことが楽しんだ後、その楽しいことのせいでバランスが崩れ、今より辛いことになる想像をしてしまう。楽しい環境に慣れてしまうと、辛い環境の覗き込んだ時、その深さに耐えきれず現実逃避してまで楽しいことをしようとする。(というか、無意識的であれ意識的であれ、「隣の芝生は青い」ことを直感しているので、そうそうそのバランスを変えて情緒不安定になるリスクをおかしてまで、変化させるメリットがない。どうせ変えても、その状況もまた、その視点では辛い)
具体的な話をすると、自分は今学校がクソつまらなくて、授業にでなきゃいけないのにでてない。授業にでるのがすごく嫌で、自分にとって「努力」を必要とすることなんだけど、たぶんこれって、解らない人には絶対わからない。いやわからないほうがいいんだけど……それで、そんな状況で「努力」して卒業したからって、自分はそのことを偉いとは思いたくない(でも実際には思いそうなので嫌だ)。明らかにそんなくだらない、実にならない「努力」をするより、楽しく学問をできる人がそれをやったほうがいい。
実際もっとモチベーションに溢れていれば、学問の勉強ではなく、実務あるいは芸術的なことを深く追いつめることで、学校をやめる道(ないし休学)もあるだろうと思う。でも自分はそれをしてない。その程度の雑魚であるから、この中途半端な状況にいる。でも自分はそれを必死で変えたりもする気がないようだ。つまり今の状況は今の状況でそこそこ満足しているらしい。発展性がないやつだ。
ただし、状況は常に変化するし、親は死ぬし、金はなくなるので、次の状況に対応するバランスを見つけておかないといけないとは思ってる。どこに、今の自分が納得して、かつ未来の自分が安定するバランスがあるのか。
でもだいたいどっちにしろ、「辛いふり」をしたり「楽しいふり」をしなければならない。くだらない人間ごっこをしなければならない。みんな楽しいことをしていればいいのにも関わらず、「みんな楽しいこと」をしている状況になるためには、既にみんなが楽しくなければいけない。誰か一人が壊れていると、それが人間ごっこをはじめるせいで周りが巻き込まれる。誰がこのクソマゾゲーを始めたか知らないけど、だいたい今生きている人は巻き込まれてるだけだ。しかも連鎖的に確実に悪化していくので、救いようがなく、そのうち必ず終わってしまう。
と今は考えてる。でもって、しかし自分はこの人間ごっこをやめて、幸せになりたいので、抜け道を探している。今のところ人間ごっこをやめる方法は一つしか思いついてない。
がきた。メロンパン食いながら読む
別に <title> とは relation がないんだけど、とここまで IO#write したところで何を IO#write しようとしたのかを GC された。
http://d.hatena.ne.jp/xcezx/20061219/1166516755 で TB がきたので設定したみた。けど、たぶんあれだとスペースを含むメッセージで問題があるので
/alias n notice $C
した。
りゅうこうは HTML 4.0 をできるだけ省略して書く。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<title>a</title>
<p>aThis Page Is Valid HTML 4.0 Strict!
なんかちょっとウケたのだけど(はてなちゃん想像した)、普通に言う表現なのかなぁ
あ、マジカルなパーサって表現がるびまでもあった。
http://www.colourlovers.com/
いつのまにかかわてた
def cht(data)
ret = ""
data.each do |a, v, c|
ret << [0x08, v, a, 0, 0, c].pack("CCVCCZ20")
end
ret
end
data = []
base = [
[0x7e2605, 0x03, "MHP"],
[0x7e2606, 0xe3, "MHP"],
[0x7e2609, 0x63, "MMP"],
[0x7e260b, 0x63, "str"],
[0x7e260c, 0x63, "vit"],
[0x7e260d, 0x63, "agi"],
[0x7e260e, 0x63, "int"],
[0x7e260f, 0x63, "hit"],
[0x7e2610, 0x63, "flee"],
[0x7e2611, 0x63, "mdef"],
]
data << [0x7e240f, 0xc5, "last e"]
data << [0x7e250f, 0x63, "last e"]
(0..3).each do |i|
base.each do |a, v, c|
a = a + i * 0x50
data << [a, v, c]
end
end
code = cht(data)
File.open('t.cht', 'wb') {|f| f.print code }~/tmp あさってたら出てきた。
考えてみると殆ど補完使ってない。HTML/XHTML モードだとなぜか omni が効かないし、C-n しようと思ったときにはまだそれを書いてなくて補完できないし、もう一度書こうとしたときには「なんでまた書こうとしてるんだろう、DRY じゃないんじゃないか?」とか考えて他の方法さがしてる。考えてないときは補完の事が頭にないので全部うってる……
勝手に補完メニューでてくれたらいいのになぁ……
最近どっちも使ってるなぁ。そんなに意識してないんだけど、数字的なときは map で、ソレ以外のときは collect 使ってる気がする。
foo = (0..9).map {|i| 2 ** i }
hoge = [
{ :Foo => :aaa },
{ :Foo => :bbb },
]
p hoge.collect {|i| i[:Foo] }どっちかっていうと collect 派だけど、ちょっとかくのがめんどい
Alt-q (11) でチャンネル変える時に Cmd-q 押して終了してしまうことが多々ある
if (location.href == 'http://reader.livedoor.com/reader/') {
window.addEventListener('beforeunload', function (e) {
e.preventDefault();
e.stopPropagation();
}, true);
}ユーザスクリプトを分離するのがめんどい。
まじはまって20分ぐらい損した。。。sinitize
こう定期的にモニタの色を気にしたりして、結局デフォルトに戻したりを繰り替えているけれど、何にあわせればいいのかわからない。
今日はなんとなく NVIDIA Contorol Panel からのキャリブレーションを実行してみた(マルチモニタの接続先を変えたので)のだけど、かなり今まで見てた色と違って怖い(ホントに恐ろしさを感じる)
ウェブ関連の画像を作るときは、むしろ積極的にキャリブレーションすべきじゃない気がするけど(世の中の人の殆どはキャリブレーションをしないし、そして安い液晶を使っている)、そういう考えも相まってどこにあわせるか悩む。
そしてついでに MacBook のキャリブレーションもしてみたけど、結構青い方向に補正された。うううううん。
うーん。結局入力/出力であってればいいんだから自分の使う範囲で色があってればいいんだよなぁ……
ウェブの画像作る時ってどうすればいいんだ。
あと疑うべきが多すぎる。モニタ自体(ハードウェア)、モニタプロファイル、モニタの設定、OS のドライバ設定、自分の眼。
ここ数日の間に同じ症状で二度フリーズした。電源ボタン長く押して再起動
現象
謎
256 * 2 Dual Channel なところに 512 一本差した。
ゲームがちょっと快適に(げーむかよ
なんとなく sudo apt-get upgrade したらカーネルのアップデートがあったのでインストール。
なんかアレな気分になって /boot/grub/menu.lst 見たら書き換え前の状態 (root=/dev/sda) に戻ってる。
とかいう話を IRC でしたら Topia さまが上のほうにあるコメントアウトされた kopt を変えて grub-update するんだよ!とか言ってくれたのでやった。なるほどなぁ
# kopt=root=/dev/md0 ro
コメントアウトはしたまま。
キーボードの U.S. Extended を選ぶと、Alt-6 (サーカムフレックス) Alt-b (ブリーブ) が入力できるようになるみたいだ。あとは続けて c, g, h, j, s / u をうてばいい。
Wikipedia の Esperanto の項に書いてあった
sonĝi (うたう不定形)
しかし全然語彙を覚えてない件
ついでにここ数日頭痛が激しい。左後頭部が痛い。
vox の言語設定をすぐに変えられるといいなぁと思ってちまちま GM 書いてたけどハマりまくった。
http://lab.lowreal.net/trac/browser/c/userjs/voxchangelangononeclick.user.js?rev=537
http://svn.lab.lowreal.net/lowreal/c/userjs/voxchangelangononeclick.user.js
lowreal.net にうpるのが面倒くさい……ミラーリング環境整えないとなぁ
関係ないけど Greasemonkey は content-type に関わらず user.js に対してインストールダイアログだすのをやめてほしい! っていうかインストールダイアログはどう考えても改悪としか……ソース読むのにワンステップ踏まないといけないし
bluetooth なキーボード/マウスが欲しい。
けどなんか bluetooth 機器はやたら高い
ファイルサイズしか見てないようだ。なので、鯖上にファイルがあり、ローカルにもファイルがある場合かつ、ファイルサイズが違う場合、問答無用で鯖上のファイルが上書きされるっぽい。
なんか、まだ、しらべて、ない、けど、旧日記のコメントデータをいくらか失った、かも、し、れない。ときどきダウンロードしてたから、完全になくなってはいないだろうけど……
けつろん
っていうか速度的に lftp とかありえない>< ファイルリストとってくるの遅過ぎる。
ので結局 rsync でミラーリングするようにスクリプト書き直した。いそがばまわれですよ。
Your account -> You blog で適当に追加したあと Layout -> 500px, on its own line (例) -> CUSTOMIZE ってやると HTML が修正できることに気付いた。
せいかくには、だれかが写真のエントリの CSS を変えていたんだけど、どうやってやってるかわからなかったから一日中調べてたんだけど!!! Layout 選択のときにさらに奥に行けるとは思わなかった。
text-hatena とソースコードハイライト使ってほげほげする。
というか vimcolor のソースよんで移植できそうだったら移植してつかおう?
designMode の iframe でキャレット位置を取得するほうほうがわからないなぁ。外側からだとできないのかもしれない?
window.getSelection().getRangeAt(0).insertNode したい。
http://developer.mozilla.org/en/docs/DOM:window.getSelection
Text::VimColor って内部で vim 使ってるのか!!
vim の syntax ファイルを読み込んで使えるように実装した何かだと思ってた。orz
Greasemonkey は選択して右クリックから「選択範囲を GMS に」みたいな機能がいるとおもうんだ!!
Stylish みたいにさ!!!
(5 * 60).downto(0) do |i|
print i, "\r"
$stdout.flush
sleep 1
end
なんか GUI のクライアント使うのさえ面倒くさくなってきてミラーリングツールを使って更新することにした。
#!/usr/bin/ruby
require 'optparse'
require 'pathname'
require 'open-uri'
ROOT = '/srv/www/virtual/userid/public_html'
SERV = '/virtual/userid/public_html'
HOST = 's63.xrea.com'
USER = 'userid'
PASS = 'hogehoge'
open("http://www.#{HOST}/jp/admin.xcg?id=#{USER}&pass=#{PASS}&telnet=t") do |f|
data = f.read
ip = data[/NAME="remote_host" VALUE="([¥d.]+)"/, 1]
raise "can't get IP" unless ip
open("http://www.#{HOST}/jp/admin.xcg?id=#{USER}&pass=#{PASS}&remote_host=#{ip}&ssh2=SSH%93o%98%5E") do |f|
end
end
host = nil
dry = false
OptionParser.new do |opts|
opts.on('-n', '--dry-run') { dry = true }
opts.parse!
host = ARGV[0]
unless host
puts opts
exit 1
end
end
def sync(host, dry=false)
dir = Pathname.new(ROOT) + host
raise "#{host} is not exists." unless dir.exist?
system(<<-EOC.gsub(/^¥t+/, ''))
rsync #{dry ? '--dry-run' : ''} -vptr #{dir}/ #{USER}@#{HOST}:#{SERV}/#{host}
EOC
end
unless sync(host, dry)
puts "rsync failed. retry after 5min."
(5 * 60).downto(0) do |i|
print i, "¥r"
$stdout.flush
sleep 1
end
sync(host, dry)
end
こんなスクリプト書いて実行させてる。ホストごとに rsync できるようにしてる。
最初は lftp でやってたのだけど、こいつはなぜかファイルサイズを見るらしく困ったうえに、ファイルリストとるのが劇遅くてやる気がなくなるので結局 rsync にした。ssh 登録がめんどいけどそれも自動化した。
ピンホールかめら楽しいよ!
gerry++
んがー。ログオフしたら再起動かかった。こわい
なんだかわからないけど、うまく対称性があるインスタンスメソッドの対を見ると、ドキドキします。
Opera 以外はできないのかなぁ。
JS 部分は Opera/Firefox/Safari でうごいて IE がなかまはずれ
CSS 部分は Firefox/Safari で想定したものになって、Opera/IE が想定外(ただしこのふたつは挙動が一緒)ってなった
なんかこの組み合わせが多いきがする
html = html.replace(/>([^<]+)/g, function () {
var ret = arguments[1];
ret = ret.replace(/¥[?(https?:¥/¥/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)¥]?/g, '<a href="$1">$1</a>');
ret = ret.replace(/¥[?(d:id:([A-Za-z][a-zA-Z0-9_¥-]{2,14}))(¥:(¥d{8}))?(?:(¥#|:)([a-zA-Z0-9_]+))?¥]?/ig, function () {
if (arguments[5]) {
var delim = arguments[5] == ':' ? '/' : '#';
return [
'<a href="http://d.hatena.ne.jp/',
arguments[2],
'/',
arguments[4],
delim,
arguments[6],
'">',
arguments[1],
arguments[3],
arguments[5],
arguments[6],
'</a>'
].join('');
} else {
return [
'<a href="http://d.hatena.ne.jp/',
arguments[2],
'/',
arguments[4],
'">',
arguments[1],
arguments[3],
'</a>'
].join('');
}
});
return '>'+ret;
});
あー日記を最初から読み直してメモしてたけど、途中で Fx 固まって消えたのでもういいや。でも年に一度ぐらいは日記を読み直したほうが絶対いいなぁと思った。こんなことあったのか、とか気付いたり、あれって今年のできごとだったんだ、と気付いたり面白い。
現在位置の確認をするのに、過去の日記はたいへんつかえるのかもしれないなぁと思いました。
今年は前年にも増していろいろなことがあり、いろいろな人のお世話になりました。おかげさまで二年ぐらいたったように感じられます。ありがとうございます。
だんだん書ける事が少なくなっていくのが不安ですが、できるだけ何も考えないで書いていけるようにするために緩やかな変化をつけていこうと思います。