✖
自分のことを知るために他人をミラーとして利用するのは、悪くはないけど、良くもないと思う。自分でやれることはやったらいいのに
自分のことを知るために他人をミラーとして利用するのは、悪くはないけど、良くもないと思う。自分でやれることはやったらいいのに
ひどい夢をみた。
かなりボロいアパート、鍵がかからないところに、自分は住んでいて、生活をしている。なんか特別なことがある日に、バスでどこかにでかけて、帰ってきたら、自分の部屋がない。部屋がなくて探しまわっていたら、廊下みたいなところに、自分の持ち物の一部があることに気付く。泥棒に入られたようだ。(部屋がなくなる説明がつかないけど)
お金がないから、大抵のものは取り戻せない。もうなにもないなーと思ってダメだこれ、って思ったところで、これがプログラムだって気付く。適当に終了処理をすると元のプロンプトに戻る。好奇心でなんかそういう疑似体験っぽいプログラムを実行していたっぽい。
夢の中の夢の派生っぽい感じ。説明できない。
なんか、すでに理由を忘れたんだけど Terminal.app に辟易したので iTerm つかう。今までなんで iTerm を使っていなかったかっていうと
ambi-width がどうとかのパッチはさておき、Cmd+Num をタブきりかえじゃなくて window きりかえにするパッチをかいた
diff --git a/PTYWindow.m b/PTYWindow.m
index ce2676f..8207d01 100644
--- a/PTYWindow.m
+++ b/PTYWindow.m
@@ -109,14 +109,33 @@
- (void)sendEvent:(NSEvent *)event
{
// NSLog(@"%s: 0x%x", __PRETTY_FUNCTION__, self);
-
+
if([event type] == NSMouseEntered)
- {
+ {
//NSLog(@"window mouse entered");
if([[PreferencePanel sharedInstance] focusFollowsMouse])
[self makeKeyWindow];
}
-
+ if([event type] == NSKeyDown)
+ {
+ if ([event modifierFlags] & NSCommandKeyMask)
+ {
+ NSString* c = [event charactersIgnoringModifiers];
+ NSArray* windows = [[iTermController sharedInstance] terminals];
+
+ NSLog(@"pressed: Command+%s", c);
+ for (int i = 1, len = [windows count]; i <= len; i++)
+ {
+ if ([c isEqualToString: [NSString stringWithFormat: @"%d", i]])
+ {
+ // [[iTermController sharedInstance] terminalWindows]
+ [[[windows objectAtIndex: i - 1] window] makeKeyAndOrderFront: self];
+ break;
+ }
+ }
+ }
+ }
+
if (super) [super sendEvent:event];
}
diff --git a/iTermApplicationDelegate.m b/iTermApplicationDelegate.m
index 648f46a..5bb6f4c 100644
--- a/iTermApplicationDelegate.m
+++ b/iTermApplicationDelegate.m
@@ -558,15 +558,16 @@ static BOOL usingAutoLaunchScript = NO;
while ((aTabViewItem = [enumerator nextObject])) {
aSession = [aTabViewItem identifier];
NSMenuItem *aMenuItem;
-
- if(i < 10)
- {
- aMenuItem = [[NSMenuItem alloc] initWithTitle: [aSession name] action: @selector(selectSessionAtIndexAction:) keyEquivalent: [NSString stringWithFormat: @"%d", i]];
- [aMenuItem setTag: i-1];
-
- [aMenu addItem: aMenuItem];
- [aMenuItem release];
- }
+
+ if(i < 10)
+ {
+ // aMenuItem = [[NSMenuItem alloc] initWithTitle: [aSession name] action: @selector(selectSessionAtIndexAction:) keyEquivalent: [NSString stringWithFormat: @"%d", i]];
+ aMenuItem = [[NSMenuItem alloc] initWithTitle: [aSession name] action: @selector(selectSessionAtIndexAction:) keyEquivalent: @""];
+ [aMenuItem setTag: i-1];
+
+ [aMenu addItem: aMenuItem];
+ [aMenuItem release];
+ }
i++;
}
設定は http://f.hatena.ne.jp/cho45/iTerm/ においてみた。一枚ずつのページをすすめながら設定するとべんりっぽい。ふつうに ~/Library/Preferences/net.sourceforge.iTerm.plist (ソースからコンパイルすると iTerm.plist じゃなくなるっぽい) でもいい気がするけど
あと、そもそも cvs head は Xcode 2.5 + Mac OS X 10.4.11 ではビルドできなくて、 iTermSecurityMgr.{m,h} と Shells.{m,h} を iTerm.framework に追加しないとだめだった。
なんか iTerm の window 順がいつのまにか変わることがあって Cmd+num がズレる……
フルスクリーンにするとズレるみたいだ。フルスクリーンにするなら新しいウィンドウつくろう
「はてなTシャツ欲しい!」プレゼントキャンペーン開始【応募締め切り:7/9】 - はてなダイアリー日記 うけたw
そういえば、はてなダイアリーで告白するには、なぞなぞ認証を使えばいいんだと思う。「僕の好きな人の id が入ります☆……↓」とか書いて入力っていう、おおぅ、なんて黒歴史的な告白方法! 気持ち悪さレベルが10ぐらい上りそうだぜ!
正しい振舞い(笑
そろそろ殺されそう……
やばいなぁ…… ほんといい。なんかやたら1期に比べてうごくなーっておもった。これだけはリアルタイムで放映見る。なんか、なぁ、ほんといい。ほんといい。余韻に浸っている。いろいろ、書きたいけれど、余白が65535バイトほど足らないので書かない。
log (じぶんいがいのだいたいさくじょしてるのでコンテキストがよめない)
01:25 <@cho45> XUL/Migemo 01:25 <@cho45> いれてみたけどいろいろすげええええ 01:25 <@cho45> Safari みたいなハイライトかっこよす 01:27 < g****> 365 01:30 <@cho45> migemo ためしてたらはじまってあせった > 365 01:30 <@cho45> 何度かためしたんですけど、慣れなくてだめだった > migemo 01:34 < m****> migemoとかいい365をみるんだ 01:34 <@cho45> なんかやたらうごきますね! 01:35 <@cho45> おれにチョコくれ! ゆの! ゆのー! 01:36 <@cho45> ゆのっちまじかわいい 01:36 <@cho45> ゆのっちまじかわいい! 01:36 <@cho45> ゆのっちまじかわいい!!!1 01:37 <@cho45> ほんとうごくなー 01:37 < m****> 来週から富士山です。 01:37 <@cho45> 来週からwww 01:37 <@cho45> no more 富士山
気付いたらはじまってて急いでヘッドフォンつけた。
もっと! もっと! キモく!!!!
screen でいっぱい window つくって vim 立ち上げまくったりしていると、よく「スワップが残ってるよ、既にどっかで vim ひらいてるよ」と怒られるのです。しかしながら僕は C-z でバックグランドに飛ばしまくるので、どこの window でうごいているのか頑張らないとわかりません。僕は頑張りたくありません。とても困りました。だから僕は、それを解決する方法を考えました。
まずは、pid から、そのプロセスがどこの window で動いているかを知るために、以下のようなことをします。
# .zshrc
# window num -> tty の対応ができるように
tty > /tmp/screen-tty-$WINDOW# pid2screen
#!/usr/bin/env ruby
require "pathname"
pid = ARGV[0]
tty = `/bin/ps -o tty= -p #{pid}`.strip
win = Pathname.glob("/tmp/screen-tty-*").find {|i| i.read[tty] }
if tty.empty? || !win
exit 1
else
puts win.to_s[/\d+$/]
exit 0
endこれで、pid2screen [pid] すると pid から該当のウィンドウ番号が表示されるようになります。(なければ exit 1)
そして、vim のラッパを書きます。すこし長いのでレポジトリに直接リンクをはりますね。
内容的には
という感じです。window に飛ばしてさらにそのファイルをアクティブにしたいところですが、いい方法が浮かびませんでした。悲しいです。でも、とても便利になりました。嬉しいです。
いよいよ、ひだまりスケッチ×365がはじまるので、プロンプトを、よりゆのっちにしたいと思い、
/ _ / × <
としたかったのですが、挫折しました。
まず、iTerm に ambiwidth を正常に表示するパッチをあててビルドしました。この時点で基本的にちゃんと表示されるようにはなりました。でも screen で画面を切替えてると幅がずれることがあってダメでした。
最初 iTerm の疑ってデバッグをしていたのですが、どうやらエスケープシーケンスの時点でずれた値がくることがわかりました。どうやら screen のせいみたいでした。なので、screen に cjkwidth を認識するパッチをあててビルドしてみたのですが、これがうまくいきませんでした。壮絶に崩れまくったので諦めました。悲しいです。
Mac で screen をつかいつつ、ambiwidth な文字をちゃんと表示できているという人がいたら、ぜひ教えていただきたいです。
ちなみに結局妥協した結果
/ _ / X <
にしました。Osaka の × は綺麗な × なので、やっぱり × にしたいです。
svk で mirror レポジトリに直接コミットするような感じにしたいときがいくらかありますよね。普通に git ci / git svn dcommit をやるんでもいいんですが、これだと git の軽さが損なわれてしまい、とても残念な気持ちになります。なので、git svn dcommit は非同期で裏に回すようにします。
しかし、けっこうこういう、裏にまわして非同期で実行して結果だけみたい場合っていうのはあるので、汎用化しておきます。結果表示はうまくいったかどうかだけわかればいいので、screen のラインに表示させることにしました。
backtick は wait を 0 に設定すれば screen と密着したデーモンみたいに使えるので、そこの中で DRb サーバをたちあげ、随時リクエストを実行していくようにします。(ただし :source で終了してくれたりはしないので、自分で過去の自分を kill するようにしています)
#!/usr/bin/env ruby
require "drb/drb"
DRb.start_service
o = DRbObject.new(nil, "druby://localhost:9999")
o.add_queue(ENV.to_hash, ARGV.join(" "))こんな感じでリクエストをなげると、実行されて、一行ずつ screen の backtick エリアに表示されます。実際実行されているかどうかは、ps aux | grep AsyncDRb とかやると、wating... とか実行中のコマンドとかが表示されます。
でもって、これを有効にしたうえで、~/.gitconfig に alias を書きます。
[alias] ci = !sh -c 'git commit -av && [ "$(git config --bool svn-remote.svn.autodcommit)" = "true" ] && $HOME/.screen/asyncrun.rb git svn dcommit && echo "dcommit done!"' svn-ad = config svn-remote.svn.autodcommit true svn-ado = config svn-remote.svn.autodcommit false
自動的に dcommit したくない場合も十分あるので、svn-remote.svn.autodcommit の設定をみて、実行するかどうか決めています。
あとは普通に git ci とかやれば裏で dcommit が走りながら編集できるのでとても便利です。
レンズの話ばかりのやつはおもしろくない。
普通の日常の中からおもしろいことを「発見」することと、そこらにあるつまらないものをおもしろく見せる「演出」の境界はどこにあるんだろう。写真を撮ってると思う。
ホウレンソウって、言葉を見るだけでとても憂鬱になる。
make するとき常に gcc とかが一個しかうごいてなくて、マルチコア CPU だと 50% までしか使わなくて残念なかんじだなーっておもったら、make するとき -j 2 とか渡すと依存関係中で平行できるところは平行してやってくれるみたいだった。make -j だけだと起動しまくって重すぎなので、コアの数を指定するとよさそう?
http://coderepos.org/share/browser/lang/ruby/net-irc/trunk/examples/wig.rb
いままで tig.rb を継承して wig.rb を作っていたのですが、割と API に互換性がないのと、「チャンネル」とかに対応させるたりしたいために wig.rb は tig.rb をコピペしながら書きなおしました (ヘタに混在させてカオスにするよりはコピペのほうが健全)
tig.rb からの変更点
ちゃんと説明すると (というか忘れそうなので現状の整理)
IRC の「チャンネル」とワッサーの「チャンネル」が混ざるので、ワッサーのチャンネルは「ワサチャンネル」と書きなおしました
IM からでも /me fav id が使えるようにした。
問題点
リア充大学生が羨ましい。
だめ
土日はずっとニコニコみながらコード書いてた。非常に充実していた。
今だどうやったら写真がうまくなるのか全くわからない……
日記を書いたけど、だめだったので消した。
iTerm 重すぎてだめだ…… 軽くなるパッチがつくれたらもどろう。。。
へへへ
バイト先のイベントに参加していて、終電に乗って帰宅しようとおもったら、間違えて逆方向の電車に乗って\(^o^)/ 寝過しを心配していた自分がとてもアホみたいですねwww
バイト先に戻って作業する。いろいろ進んでないのがあるしいい機会だ。
もっとwww うへへwww 気持ち悪くwww
そういえば昨日気付いたけど、おれはもう青春とかいらないと思った。
#!ruby -Ku
class X
attr_reader :a, :b
def self./(a)
new(a)
end
def self.to_s
"×365"
end
def initialize(a)
@a = a
end
def /(b)
@b = b
print self
self
end
def <(o)
puts " #{o}"
end
def to_s
@a.a + "スケッチ" + b.to_s
end
class ::Object
def _
X.new("ひだまり")
end
end
end
X / _ / X < :来週も見てくださいね!
正式名称になるように一文字足しました
X := Object clone do ( / := method( if (self ?called, "スケッチ", "ひだまり") print self called := true self ) < := method(o, "365" print o println ) ) X / _ / X < "来週も見てくださいね!"
このコードにおいて、 _ は評価されない ( / の引数なのだけど、/ 内では _ を評価していない) ので定義してなくてもいいところがポイントです。?called は、初回呼び出し時の called スロットがないために起こるエラーを回避します (正確な?の効果は「対象オブジェクトが指定メッセージに応答しないならば、メッセージセンドを行わない」かな? つまり ? でわっしょい!)。
文字列リテラルを使わずに call argAt(0) とかもできるはずなんですが、どうもマルチバイトだとダメみたいで諦めてます。
日記という形をとれなくなったとしても、言葉が続かなくなることはないだろう。
知っていうのは、分類していくことだと思う。「分かる」ことは「分ける」ことだと思う。僕等、僕等自身に知があると思っているけれど、もともとは宇宙の中で、誰かによって、分かられた存在なのだろうと思う。分けられると知になる。孤独なのはあたりまえだ。そうでなければ知にはなりえない。
僕等、普段の生活の中で何かを分けている。何かを分断して、孤独にしていく作業をしている。その過程で、何か分けられたものは、なんだろう。
MacBook だとやたら `/ と typo して悲しいので
expand-to-home-or-insert () {
if [ "$LBUFFER" = "" -o "$LBUFFER[-1]" = " " ]; then
LBUFFER+="~/"
else
zle self-insert
fi
}
zle -N expand-to-home-or-insert
bindkey "\\" expand-to-home-or-insertというふうにしてみました。先頭とかで \ をうったりすると ~/ に展開されます。どうしても \ を入力したいときは C-v \ すればたぶん入力できます。できないなら
bindkey "^V" quoted-insert
ujihisa さんの .zshrc みて alias reload="exec zsh" があったので真似したのですが、たまに C-z かけた vim が露頭に迷うので
# vim とかが露頭に迷わないように
function reload () {
local j
jobs > /tmp/$$-jobs
j=$(</tmp/$$-jobs)
if [ "$j" = "" ]; then
exec zsh
else
fg
fi
}こうしました。job がのこってるなら「終了しろよ!!!」って感じで fg かかります。
タグ「"ゆの in language"」を検索 - はてなブックマーク ひだまりスケッチ×365! わしょしょい
「洗濯機から女の子」ってうまく英訳できないんだよなぁ…… 誰かうまいこと訳してほしい。というか日本語でもうまく略せない。。洗濯機娘 が限界? でもニュアンスが違うんだよなぁ。
一言で表現できたらいいのになぁ。「洗濯機から女の子」を一言で表現できないのが許されるのはオンドゥル語マデダヨネー
日本語のヘッダ画像も修正中
サイトデザインのデータとか普通に公開できるサイトがあったらいいんのになぁ。ガイドとレイヤー情報だけ先にウェブからみれて、興味があればダウンロードできる、みたいな。ガイドのひきかたとかどうやってんのか謎すぎる。
$ echo '#!/bin/sh\necho "ひだまりスケッチ×365 $(readlink $0)"' > 来週も見てくださいね\! $ ln -s 来週も見てくださいね\! X $ ln -s /bin/cat _ $ PATH=.:/bin $ chmod +x X| _ |X ひだまりスケッチ×365 来週も見てくださいね! $ X / _ / X < 来週も見てくださいね\! ひだまりスケッチ×365 来週も見てくださいね!
大事なことなので2度ずつ言いました。(環境壊れます)
「おまえのコードつまんねーんだよ!!11」ってゆわれた気がしたのでバリエーションつくってみました><
# *_missing
class Object
def self.const_missing(n)n end
def method_missing(n, *a)
print (n == :<) ? a : ({
[:_, $!] => "ひだまり",
[:/, :_] => "スケッチ",
[:/, :X] => "×365"
}[[n, a[0]]] || " ")
n
end
end
X / _ / X < 来週も見てくださいね!# 上のと同じのをちょっとゴルフぽく。(むずい)
class X;end
class Object
def method_missing(n,*a)print n==:<?a:({[:_,$!]=>:ひだまり,[:/,:_]=>:スケッチ,[:/,X]=>:×365}[[n,a[0]]]||" ");n end
end
X / _ / X < 来週も見てくださいね!# ひたすらエラーハンドリング
begin
X / _ / X < 来週も見てくださいね!
rescue NoMethodError => e
case e.message[/`(.+)'/, 1]
when "/"
print "×"
Object.__send__(:define_method, :/) {|
x| _ |x
}
Object.__send__(:public, :/)
retry
when "|"
print "365 "
Regexp.__send__(:define_method, :|) {
(/ _ /x)
}
retry
else
puts Regexp.last_match[1]
end
rescue NameError => e
case e.message
when /constant X/
Kernel.const_set(:X, :X)
print "ひだまり"
retry
when /variable or method `_'/
Kernel.__send__(:define_method, :_) { (/ _ /x) }
print "スケッチ"
retry
end
endとてもねむい
なんかまだないっぽい
X = setmetatable({ x = "" }, {
__div = function (o1, o2)
if o2 then
X.x = X.x .. "スケッチ"
else
X.x = X.x .. "ひだまり"
end
return o1
end,
__lt = function (o1, o2)
print(X.x)
return X
end,
__call = function (self, arg)
X.x = X.x .. "×365 " .. arg
return X
end,
})
return
X / _ / X < X"来週も見てくださいね!"
今日、起きて、窓あけたら風が結構強くて、それが涼しくて、そのせいで、妙に現実感を失くした感覚になった。草の花の後半で、戦争が起こっているなかの日常みたいなのがあって、それがやたら静かに描写されるけど、ああいうのを、スケールの違いさえあれ、実感した。
位置決めとか、金とか、時間の節約とか、そういった戦争に関わる全てのことに、本当にうんざりしてる。
やっぱ TAMRON の 90mm MACRO が欲しい。買わないけど
紫陽花は終わりかけがいい感じだと思う。
紫陽花って、見るたびに、小学校低学年のときの、旧校舎に咲いていたのを思い出す。小学校のときの記憶って、雨の日のことばっかりだなぁ。校舎の立て直しが丁度在学中にあって、プレハブで授業を受けていたことがあるんだけど、そのときあたりの記憶も全部雨の日だ。
スルー力が全くない…… 煽られたら\(^o^)/ 状態
写真だけ見たけりゃ flickr でも f.hatena.ne.jp でも /searchdiary?word=*[photo] でもなんでもあるよ。
<?php
function x ($buf) {
return str_replace("X / _ / X <", "ひだまりスケッチ×365", $buf);
}
ob_start("x");
?>
X / _ / X < 来週も見てくださいね!
<?php ob_end_flush(); ?>僕の PHP の知識は 4 で止まっています。
もっと短かくなるよ!
http://subtech.g.hatena.ne.jp/mayuki/20080713/1215952300
php -v したら 5 でした……
なんか washer-in-the-rye.com を管理するにあたって簡単な CMS が欲しいので要件を整理しておく (theruck でつくる)
思いついたこと
自分は十分に助けてもらっているので、ちゃんと自分の足で歩かなくてはならない。
ブクマからキーワードページのテーブルにするやつ
require "rubygems"
require "mechanize"
require "active_support"
require "time"
@ua = WWW::Mechanize.new
puts "|*言語|*リンク|"
begin
results = []
uri = "http://b.hatena.ne.jp/cho45/atomfeed?tag=%E3%82%86%E3%81%AE%20in%20language"
loop do
begin
warn uri
@ua.get uri
doc = XmlSimple.xml_in(@ua.page.body)
raise "Bug?" unless doc["entry"]
results.concat doc["entry"]
next_link = doc["link"].find {|link| link["rel"] == "next" }
break unless next_link
uri = next_link["href"]
rescue RuntimeError
sleep 1
retry
end
end
results.map! {|entry|
entry.update("lang" => entry["subject"] - ["ゆの", "language", "ゆの in language", "ひだまりスケッチ"])
}
results = results.sort_by {|entry| [entry["lang"], entry["issued"]] }.map { |entry|
warn entry["subject"].inspect
"|%s|[%s:title]|" % [
entry["lang"],
entry["link"].find {|link| link["rel"] == "related" }["href"],
]
}
raise "Bug?" if results.uniq!
rescue RuntimeError
sleep 1
retry
end
puts resultsなんかちゃんとフィードがとれないことがあるのでチェックかけてリトライしてる。
todo: last.fm のパスワード変更
弾さんが煽ったせいか [[ゆの in language]] がやたら盛り上がっててうける。特に Java がドラマチックでめっちゃおもしろい。
とりいそぎ CMS 作るまでにあいだ git push で更新できるようにした
$ cat .git/hooks/post-receive #!/bin/sh cd .. /virtual/lowreal/git/bin/git --git-dir=.git reset --hard
ってやると push したときに Working Copy が hard reset されて更新される。なんか PWD と --git-dir をうまいこと指定しないとダメだった…… (フックスクリプトの実行時の pwd は .git 以下)
常に reset がかかるのでリモートでファイル編集とかしちゃだめ。今まで rsync してたけど --delete が怖くてできなかったのでこれでスッキリ
今だにはてなダイアリーキーワードの履歴の diff の読みかたがわからない。diff -u の形式か2カラムの対比表示にしてほしい……
瞬殺だった…… http://subtech.g.hatena.ne.jp/cho45/20080716/1216141617
キーワードの編集ページの履歴リンクをクリックすると、クリックした履歴の一つ前の履歴との比較を diff して表示します。
JavaScript での diff と format は http://ejohn.org/projects/javascript-diff-algorithm/ のをそのまんま使ってます。ちょー簡単にできた。
.zshrc に追記した
if [ `uname` = "Darwin" ]; then
alias nopaste='curl -F file=@- nopaste.com/a >&1 > >(pbcopy) > >(open `cat`) '
alias nonopaste='pbpaste | nopaste'
else
alias nopaste='curl -F file=@- nopaste.com/a'
fifoobar | nopaste とかやると、ブラウザで結果を開きつつ、クリップボードに URL がコピーされて、すぐどっかに貼れるようになる。
海老名で途中下車、掃除中でまじあせる
ガムくいすぎ?
http://subtech.g.hatena.ne.jp/cho45/20071117/1195309573 の便利版
<div class="entry">
<h2 class="title">#{title}</h2>
<div class="body">
#{body}
</div>
<div class="info">
<span class="datetime">#{datetime}</span>
<span class="author">#{author}</span>
</div>
</div>みたいな文字列が template1 に入ってて
var t = dom(template1, parent, {
title : "aaa<aaa>",
body : "foobar",
datetime : "2008-07-19(0日前)T20 : 26 : 54+09 : 00",
author : "cho45"
});
ってやると #{foobar} がフィルされます。
ってだけだと別に普通にエスケープしながら置換したらいいじゃんって感じですが、返り値が便利です
t.root //=> div.entry
t.title //=> h2.title
t.body //=> div.body
t.info //=> div.info
t.datetime //=> span.datetime
t.author //=> span.authorみたいにクラス名に対応する要素が入ってます (ルートは root に)。
ベンチマーク:
- "jQuery only $" -> $(template1) しているだけ
- "jQuery pre-replaced" -> #{} を置換してから $(template1)
- "jQuery" -> $(template1) してから find/end を駆使してテキスト設定
- "dom()" -> 上記関数使って一括設定jQuery の find/end は (中身想像すればあたりまえですが) コスト高いです。でも jQuery 使っていて、先に HTML をばーーーって作ってしまってから、操作したい要素を取得したいケースは結構あって、find を使ってしまいがちです (というかそうしないと綺麗に書けない)
dom() だとパースして要素を追加するのと、欲しい要素の列挙を同時にやっているので、その分有利です。それと Pure DOM なのでテーブル関係のBKなハックを入れなくても parent を直接指定すれば問題ないです。
実体/数値参照を展開してないのでそのコード入れたらもっと遅いかもですね。
クソ長いです
#!/usr/bin/env ruby -Ku
# vim:set ft=ruby:
# ひだまりスケッチ× というファイル名で保存する必要があります
X = 365
t = Time.now
t += 7 * 24 * 60 until t.wday == 4
n = t.strftime("X365次は%m月%d日25時25分からです><")
eval "class #{n} < Exception; end"
alias _ raise
$! = Kernel.const_get(n).new(File.read(__FILE__)[/< (.+!)$/, 1])
X / _ / X < 来週も見てくださいね!出力はこんな風になります。
ひだまりスケッチ×:365: 来週も見てくださいね! (X365次は07月24日25時25分からです><)
方針としては
ってだけです。
Ruby のエラーメッセージはトップレベルの場合
filename:line: message (ErrroClassName)
になります。トップレベルではない場合は in`methodname` が入ってくるのでダメです。そこで _ を raise の alias にすることで、raise と書かなくても例外をゆのっち内で起こせるようにしました。_ には引数がないので、引数なしの raise となり、直前の例外が raise される効果になります。「直前の例外」は $! に入っており、代入することもできるので、例外を生成して直接 $! へ代入しています。
$! へ代入するクラスの名前が、エラーメッセージの括弧内に入るので、オマケで次週の TBS での放送日を入れることにしました。const_name として valid な名前にするのが結構めんどいうえに綺麗にならないですがこんなもんでしょうか。
短かいバージョン ファイル名も行数も関係なし。上のコードは _ でプログラムを抜けて「来週も見てくださいね!」が評価されないのですが、これだとされます。
#!/usr/bin/env ruby -Ku
# vim:set ft=ruby:
class X < (_ = Exception)
class << self
def /(o)
self
end
def <(o)
raise X, o.to_s
rescue Exception
$!.set_backtrace(["ひだまりスケッチ×365"])
raise
end
end
end
class Object
def method_missing(name, *args)
name
end
end
X / _ / X < 来週も見てくださいね!ひだまりスケッチ×365: 来週も見てくださいね! (X)
あぶねー日記にメモらなかった忘れてた
mixi ニュース経由で日記読んでみたらほんと想像力がない人が多くてびっくりする。おれもああなってしまうのかなぁ……もうなってるのかなぁ……
頭の中に住んでいる、仮想的な敵、最悪のケースの最悪の人の像、というのがあって、彼は日常の中の些細な言葉や行動を増幅して、その言動の原因の最悪のケースを僕に伝えてくる。悪いことがないことはありえない。程度の問題だ。程度の問題だから、増幅されると困る。
なんかやたらめったら自信のある眼をしている大学生と、どんなことにも興味を示さない大学生と、どっちも本当に嫌だ。やたらめったら自信だけあって結局なんもせん、なんもできん、みたいな人にどれだけ殺されそうになったかわからないし、どんなことにも興味を示さない人に、どれだけの僕のやる気を剥されたかわからない。「考えてる」って言葉にするけど、何を考えているか言葉にできない人は実際は全く考えていない。それはかつての僕そのものだ。考えている、と信じこんでるだけで全く何も考えてない。しかも「自分が考えていないこと」に気付きたくないから余計何も書かなくなる。
はてダ開いて、「日記書く」ってやると、ちょっと前に書こうとしてやめた内容がバックアップから復元されてきて、継続性を感じる。でもあれ別人だもんなー
Elastic Layout + min-width に対応していないブラウザは JS で補完 + JS 切ってても最低限見れる、ってのが最近の傾向です。
「論争」と彼がいう「何か」を、わざと相手の感情に訴えかけるようにふっかけて「あらあら感情的になっちゃダメじゃないですか」なんてシレっていうやつが多すぎてホント腹が立つ。
わざと肩ぶつけて「どこみてんだよ」と大して変わらない。議論チンピラ
何か3ページ近くになって金額がひどいことになってしまっていたから、そろそろ整理すべきだろって思って整理していくつか買った……
まんが
まんが以外の本
CD
ほかいろいろ。
なんか全部1つずつ買ったつもりだったのに、2つ買ってたやつ (ひだまりスケッチ 1, 2 と女生徒) があって困る…… 返品めんどいなぁ。
いいなー なんか自然と読みなおしてしまった。表情がなー いいなー これはコスパいい作品ですね!!
よんだー 次でおわりか
だいたいみんな「そんなこともしらないで」コードをかいているのだ。おおかれすくなかれ。
そういえば数日前に町田でかわいい女の子みかけた。でもなんかよくわからんないよなー何がかわいいのかよくわからなかった。眼差し? どうでもいい
どうでもいいわけない!!! また夢に出てきた女の子思い出した(笑) きもい(笑) きもいです(笑)
「それはダメだよー」っつって怒られて社会的に終わる。
頭悪いおれはどうしよもなく学習に時間がかかり他人を待たせるので独りでやるしかない。
なんか知らないけどずっと気持ち悪い。
よんだ。カラの一人称がとてもいいなー
ジェッジジョンソンをききながら、作品の消費をしまくっていると、個人的な意味での新時代を感じる。(おおげさ)
『残像に口紅を』を読みながら (まだ読みおわってない) 言葉がなくなっていくことを考えてみてたりした。対象まで消えていくのはなんか違和感があるけど、単純に、言葉だけが、表現の手段として失なわれていくと、あと自分は何をつかえますか?みたいな
『残像に口紅を』では、ゲームというか実験として表現が消えていくけど、今この瞬間にも、他人との関係性のせいで表現は失われていっているよなぁ。
ピクトグラムとかって、「子供でもわかる」とかいわれていて、まぁ確かにそうなのだろうけど、なんか違和感がある。
ピクトグラムとヒストグラムが似すぎてる。
実際そうですもんね。そうでなくても、いないってだけで、なにか問題があるのは、明かなわけです。
ひさしぶりに体重はかったら 60kg 超えてた。
起きてすぐトイレ……しかも頭痛……
4巻まで届いたので読んだよ!!! これほんといい漫画だなぁ……
3ヶ月先の予定も立てられないのだから不安にならないわけないじゃないですか(笑)(笑)(笑)
キーボードは絶対に拘るべきものの一つだとほんと思う。
せっかくいろいろ遠ざけてみたのに、全く、生きている気がしない! もうこれ一生なおらないんでしょうか
破滅の直前には言及数が増えるものですよ。
数日調子悪いのは風邪なのかなぁ。でも調子悪いの自体は一ヶ月以上前からあってなんかよくわかんないなぁ……
えへへ、こんにちは! 期待はずれの cho45 です☆ミ
起きてすぐトイレ…… お腹痛くはない
パンフォーカスにしたいなら一眼じゃないほうがいいじゃんsk ケータイだとさすがに画質悪いけど、コンデジだったら十分な画質でるよなぁ。
体調回復した気がする。クーラーつけて寝るのはかなりダメだなぁ。昨日・今日があまり暑くなくてよかった。
人のものを盗んで来て自分のものにちゃんと作り直す才能は、そのずるさは、これは私の唯一の特技だ。本当に、このずるさ、いんちきには厭になる。毎日毎日、失敗に失敗を重ねて、あか恥ばかりかいていたら、少しは重厚になるかも知れない。けれども、そのような失敗にさえ、なんとか理窟をこじつけて、上手につくろい、ちゃんとしたような理論を編み出し、苦肉の芝居なんか得々とやりそうだ。
(こんな言葉もどこかの本で読んだことがある)
↑ 前のセクション、最初、blockquote にしてみたけど、はずした。この部分は、転載すると、メタっぽい。女生徒の一節です。
まだ試行錯誤中
(function blogparts_name ($, Deferred) { with (Deferred) {
var script = (function me (s, l) { l = (l || s.length) - 1; return /XXX/.test(s[l].src) ? s[l] : me(s, l) })(document.getElementsByTagName("script"));
var params = {}; script.src.match(/#(.+)/)[1].replace(/([^,=]+)=([^,=]+)/g, function (_, key, val) { params[key] = val });
// メイン処理
} // end with
function log (m) {
if (window.console) window.console.log(m);
}
... ユーティリティ関数群
}).apply(this, (function Libraries () {
// ライブラリのコードコピペ
//=begin jQuery {{{
//=end jQuery }}}
//=begin JSDeferred {{{
//=end JSDeferred }}}
return [window.jQuery.noConflict(true), Deferred];
})());