2008-09-04
■ [games] ゲームセンター 終 了 の お 知 ら せ
銀閣寺GOLD、下鴨ヒーロータウン、プレイシティ車庫前が閉店していた。
[ohai日誌(2008-09-04)より引用]
/\___/ヽ ヽ / ::::::::::::::::\ つ . | ,,-‐‐ ‐‐-、 .:::| わ | 、_(o)_,: _(o)_, :::|ぁぁ . | ::< .::|あぁ \ /( [三] )ヽ ::/ああ /`ー‐--‐‐—´\ぁあ
夢だと言ってくれ…。
■ [softs] Google Chromeのチートっぷりをベンチマークで体感してみた
僕はBiwaSchemeっていうJavaScriptで書いたScheme処理系を開発してるんですけど、 そのユニットテストがSchemeの関数をいっこいっこテストするんで だいたい15〜20秒くらいかかるんですよ。
んでChromeでどうなるか試してみたら:
Firefox 3.0.1 | 15.921秒 | 15.863秒 | 15.785秒 |
Safari 3.1.1 | 16.391秒 | 16.360秒 | 17.079秒 |
Opera 9.52 | 15.359秒 | 20.141秒 | 20.156秒 |
IE 6.0 | 23.344秒 | 23.875秒 | 28.843秒 |
IE 7.5 | 27.328秒 | 28.375秒 | 33.734秒 |
Chrome | 5.733秒 | 5.427秒 | 5.276秒 |
Google Chromeはえええええええwwwwwww
なんでこんなに速いの?死ぬの?
あとIE7が6より遅くなっててしょんぼりした。
ベンチマーク環境はこんな感じです。
- WinXP
- CPU Celeron D 2.80GHz
- メモリ 1024MB
■ [linux][lisp] StumpWMをUbuntuで使ってみた
StumpWMはCommon Lispで書かれたタイルベースのウィンドウマネージャだ。操作系統はratpoisonに(つまり、GNU Screenに)似ている。 全てがCLで制御されているため、WMを再起動せずに挙動をハックすることができるのがウリらしい。
とりあえずインストールは
sudo aptitude install stumpwm
でいけた。
んで、起動する前に
sudo vi /usr/share/xsessions/stumpwm.desktop
として、以下の内容を書き込んでおくと、ログイン時に「セッションの選択」でStumpWMを選べるようになる。
[Desktop Entry]
Encoding=UTF-8
Type=XSession
Exec=stumpwm
TryExec=stumpwm
Name=StumpWM
Comment=Stump window manager
[Gutsy + Stumpwm - Ubuntu Forumsより引用]
初回起動時はコンパイルするので結構時間がかかるようだ。
キーバインドはとりあえず C-t ? だけ覚えておけば大丈夫(ヘルプが出る)。C-t cでターミナルが開く。
日本語入力する方法が分からなかったんだが、設定ファイルに書けばいいのか。
(run-shell-command “scim &”)
(setf (stumpwm::getenv “XMODIFIERS”) “@im=SCIM”)
(setf (stumpwm::getenv “GTK_IM_MODULE”) “scim-bridge”)
[stumpwm « Kazusan’s Weblogより引用]
リンク先でも書かれてるけど、setf + setenvなのがCLらしくていいね。
awesome wm も触ってみたけど、機能はこっちの方が豊富そうかなぁ。キーバインドはScreen系ではない(Windowsキー+hjklとか)。
2008-09-05 最近書き溜めてたエントリまとめうp
■ [ruby] _why先生のShoes本が通販できるらしい
NOBODY KNOWS SHOES (nks) といえば_why先生のRuby Shoes本なわけですが、
こいつがlulu.comで通販されているらしい。
これは買うしかないだろ!と思って注文しかけたんだが、送料含めたら3000円とかになって 我に返った。普通にPDFから印刷するか…。
廉価版もあるんだけど見開き綴じになってないっぽい。
■ [ruby] Proc#===を定義してFizzBuzzを綺麗に書く
class Proc def ===(*args) self.call(*args) end end def divide0?(n) proc{|x| x % n == 0 } end
のように定義しておくと、FizzBuzzが
1.upto(15) do |i| case i when divide0?(15) puts "FizzBuzz" when divide0?(3) puts "Fizz" when divide0?(5) puts "Buzz" else puts i end end
みたいに書ける。divide0?がProcオブジェクトを返して、case〜whenなのでProc#===が呼ばれて 、その返り値が真か偽かでマッチしたかが判定されると。なるほどなぁ。
一応、実行結果。
/Users/yhara/ % ruby ~/tmp/fb.rb 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz
■ [misc] ruby-talkの流量がruby-listより多いのは
そもそもMLに書くメールの概念が違うよなぁ。1行付け足しただけのメールとか普通にあるし。
ruby-talkの方がチャットに近い雰囲気であるといえる。
■ [haskell] AppleCatcherがHaskellに移植されそうです
AppleCatcherというのは僕が作ったこういう感じのゲームなのですが、
それがHaskellのYampaに移植されそうです。wktk。
YampaというのはHaskellでFunctional Reactive Programmingするためのライブラリで、 内部実装にArrowが使われてるとかなんとか。
Yampa自体はデータの流れを制御するだけなので特定のViewには結びついてないようで、 ViewとしてはSDLが使われてます。
■ [rails][rspec] it_renders, it_assignes, it_flashes
- from: Readable Specs: it renders, it assigns, it flashes My Pragmatig life
- via: RubyFlow-ja(2008-08-17)
RSpec+Railsで、こういうありがちなのは↓
flash[:error].should_not be_nil
response.should render_template("new")
こういう風に書けた方が嬉しくね?という話。
it_flashes :error
it_renders :new
実装はリンク先をどうぞ。spec/spec_helper.rbに追記するだけらしい。簡単ですね。
関係ないけど、
def it_renders(what) response.should render_template(what.to_s) end
の仮引数に「what」を使うという発想はなかったなぁ。
■ [rspec][prog] RSpecみたいな英語DSL的なものが
日本語に存在しないのが遺憾である。
誰か、日本語をそのまま書いたら仕様になるようなシステムも作るべき。なでしこに期待。
…っていうかなでしこそのまんまか?
■ [haskell][prog] Re: 超似非G-Machineを実装してみた - Yet Another Ranha
これは遅延評価言語を作るのに役立ちそう。日本語で読めるのがありがたいですね。
Haskellとか実装したい人は読むといいのかな。
2008-09-09
■ [web] Google先生が気を利かせすぎてバグってる件
Mercurialに「glog」というとてもグラフィカルで分かりやすいコマンドが実装されてるらしいんですが、 なぜか手元のhgでは「そんなコマンドないよ」と言われてしまう。
そこでGoogleで「mercurial glog」で検索してみたんです。
違うよ!それは「mercurial blog」の検索結果だよ!(「ブログ」が太字になってるし)
(9/11追記: 「mercurial "glog"」でいけるらしい。ありがとうございます>znzさん)
(10/15追記: 「mercurial +glog」でもいいらしい!)
■ [hg] Mercurialでブランチをグラフ状に表示してくれるhg glogコマンドを使う方法
~/.hgrcに
[extensions] hgext.graphlog =
と書いておくと、hg glogでこんなんが出るらしいですよ。
/Users/yhara/proj/bookmak % hg glog |head -n 20 @ changeset: 37:d60c1340fa62 | tag: tip | parent: 35:0af16b7aeccd | user: Yutaka HARA <yhara.kmc.gr.jp> | date: Sat Jul 26 00:29:09 2008 +0900 | summary: add: ignore tmp/* | | o changeset: 36:118025881181 |/ branch: instant_login | user: Yutaka HARA <yhara.kmc.gr.jp> | date: Sat Jul 26 00:26:24 2008 +0900 | summary: branch: try to impl. instant login | o changeset: 35:0af16b7aeccd | user: Yutaka HARA <yhara.kmc.gr.jp> | date: Sun Jul 20 21:24:06 2008 +0900 | summary: add: ideas by Kanasan.JS attendee | o changeset: 34:cba942c72f32 | user: Yutaka HARA <yhara.kmc.gr.jp>
いいね!
2008-09-14
■ [softs][mac] MacでDropbox使い始めたけど
同期するときにCPUのコアを一つ使い切るのでうざい。熱いよ。
/Users/yhara/proj/ 以下 (ソースコードがいろいろ置いてある) を同期させてるんだが、再起動するたびに全ファイルをスキャンし直してる疑惑。
それさえ目を瞑れば、バックアップソフトとしては非常にお手軽ではある。勝手に同期するんでいちいちソフト起動する手間がないし、ディスク用意する必要すらないし。
■ [ruby][scheme] RubyistがSchemeに惹かれたわけ
まつもとさんの指摘によれば「LISP-2という点で、RubyはSchemeよりCommon Lispに似ている」。
じゃあなんで僕はSchemeを気に入ったんだろう?と考えてみたところ、「統一感」や「一貫性」を重視するところじゃないかという案を思いついた。
- Rubyの統一感
- 全てがオブジェクトであること。どこでもselfが定義されていること。
- Schemeの統一感
- 述語は「?」で終わるとか、「foo->bar」みたいな命名規則。
…いまいち説得力に欠けるかな。どうだろう。
■ [prog][stack] Factorやるじゃん
: qsort ( array -- new )
dup length 1 > [ [ rest ] [ first ] bi [ [ > ] curry filter qsort ]
[ nip suffix ] [ [ <= ] curry filter qsort append ] 2tri ] when ;
[Factorでクイックソート - anatoo記 - ハチロク世代より引用]
みじかくね?
一般に普及するには独特すぎる(少なくとも時間はかかるだろう)と思うのだけど、スタック言語気になるわー。
追記
なんでスタック言語がここに来て一部で流行ってるのかというと、「関数を組み合わせて」プログラムを作るという 関数型言語のパラダイムとスタックが意外にも相性が良いことが分かったからだと理解している。
- Joy: http://www.latrobe.edu.au/philosophy/phimvt/joy.html
- Cat: http://www.cat-language.com/
- Factor: http://factorcode.org/
てかPEGライブラリとかあるのかー
2008-09-16
■ [gadget] テクノ民族楽器入門 を見て物欲が爆発した
DS-10とか、大人の科学シンセとかの「テクノっぽい音が出るおもちゃ」のまとめ記事です。
というわけで以下は自分用メモ。
YouTube - Stylophone+DS-10 - The Girl From Ipanema
DS-10の有効利用。
YouTube - DS-10 / Stylophone / SX-150
同作者。プロの犯行か!?
B0012HT9TI B0012I9DQQ B0012IPLNA
USB接続のスピーカー。色は赤、黒、白。
簡易ミキサーとして使えるらしい。欲しい。
2008-09-19
■ [web] はてなアンケートの回答者は適当な奴ばっかりか
このアンケートから分かることは、「回答者は質問文を真面目に読まない」ということだな。 まぁ、締め切られるまでの時間の短さを考えると、アンケート回答者は定期的に新着アンケートを監視している「プロ回答者」が多そうだし、 アンケートに答える作業がルーチンワークになっていて質問文を流し読みしてしまうことは想像に難くない。
西尾さんの設問にも実は穴があって、一問目のタイトルは
- Q01 〜を選んでください。これに答えられない方は解答をご遠慮ください。
だけど、「答える」という日本語は別に「正解する」という意味ではなく「回答する」という意味にすぎない。だから取りようによっては、 Q01でいずれかの選択肢を選んだ人は全員Q02に答える権利がある(笑)。 しかも警告がQ02の頭ではなくQ01の終わりに入っているので、悪意を持って無視したというよりは単に警告を見落とした人が多いんじゃないか。
ここはいっそ、回答者が質問文を流し読みすることを前提にして
- Q02 【☆★☆警告☆ Q01に自信のない方はご遠慮ください!!☆★☆】 どの言語がよいでしょう(複数選択)
くらいスイーツ(笑)な感じで装飾し、質問文も
☆★☆ ☆★☆ ☆★☆ プログラミングに詳しい人に質問です。 ☆★☆ ☆★☆ 一問目に正解できる自信のある人だけお答えください。☆★☆ ☆★☆ ☆★☆ 大学でプログラミング経験の学部一年生向けにプログラミングを教えることを想定しています。週1コマ×半年程度の限られた時間で、プログラミングとはどういうものかという本質を教えたいのですが、どの言語を使うのが適切でしょうか。
みたいに見落としようがないくらい警告を目立たせたらどうだろう。 それでもまだ適当な回答が相次いだなら、「はてなアンケートの回答者はポイント欲しさに質問文を無視する悪い奴らだ!!」と言えるかと思う。
…そこまでしないといけないのかって?うーん、はてなアンケートはそういうものだと思うしかないのが現状じゃない?
余談
- 一度こっそりアンケートと回答者の「不真面目度合い」を比べてみたいものだ(どういう設問をすれば回答者がどれくらい注意して質問文を読んでいるかを計ることができるだろうか?)
- …それはともかく、せめて「Scheme」でGoogle検索するくらいはしようよ!>回答者一同
- 「書いただけでは読んでもらえない」という衝撃の事実! : 今日のホッテントリに似たような話が。
■ [link] 今日のメモ
- masuidrive on rails - ブラウザの言語をJavascriptから調べる。
- JavaScriptのみでブラウザの言語設定を取得する方法。静的ファイルでも英語・日本語を自動的に切り替えたりできるよ、ということか。
- llv8call 0.01 released - TokuLog 改めB日記
- Chromeで有名になったV8エンジンからFile()とかプロセス管理とかできるらしい。…これそろそろUnbabelが実装できるんじゃね?
- Scheme Compiler の勉強(0) - cranebirdの日記
- なんかSchemeでSchemeコンパイラ*1を作ったよ!という論文があるらしい(pdf *2)。んで、それをLLVMに移植してらっしゃるらしい。なんかすげー−。
- ほぼ日刊イトイ新聞 - 原丈人さんと初対面。
- 全ハチロク世代がよむべき
- プログラミングの道しるべと道路舗装 - プログラマーの脳みそ
- 「ペアプログラミングをオンラインで行える環境」って、Partty!使ってなんとかできたりしないかなぁ。教える人のttyと教わる人のttyが左右に並んでて、その下にustreamみたいなチャットウィンドウがあるかんじ。
2008-09-26
■ [prog] Webアプリはカルいのか
はてブでさまざまな新サービスがhotentryに並んでいるのを見ると、Webアプリは華やかでクリエイティブなものに思えるが、 それは樹木の地上に出ている部分を見ているにすぎなくて、実際にはセキュリティとか、スケーラビリティとか、フレームワークとかの技術的な側面がしっかりと地面の下に根を張っている。
木が小さいときは根っこも小さくて済むが、小さい根っこのままで木を大きくすることはできない。風が吹いたら倒れてしまうだろう。
■ [ruby] 札幌Ruby会議
http://regional.rubykaigi.org/sapporo01
あ、意外と道外のスピーカが多いんだ。
つまり、Rubyistが地方に遠征して発表を行うという側面もRegional RubyKaigiにはあるのだな。憧れのあの人があなたの街に!
2008-09-29
■ [tetris] ついにTAP/Tiのサントラが?
Club TGMの話。
なんと、Club TGM設立記念の大会が、
とある市のイベントとして開催出来そうな流れです(おぃ)。
がんばりますよ。
☆
んで、上記のイベントにおいてサントラ化の話を進めるので
取り締まりをビシビシいきますのでご協力をお願いします(ぺこり)。
つーか、自主的削除推奨。
お願いします。
サントラは歴代+アレンジ+映像で検討中。
がんばりますよ。
[Mihara's sub Layer | 『Amazon.co.jpからのお知らせ』と、Club TGMの事より引用]
映像とな?(wktk)
■ [scheme] Re: Scheme どう書く?的 - ひげぽん OSとか作っちゃうかMona-
先頭から1ずつ増えてる部分を取ってくる関数があればいいんじゃないかなぁと思って書いてみた。
(use srfi-1) ; last (use srfi-11) ; let-values (define (group-numbers ls) (define (take-sequence+cdr ls seq) (cond [(null? ls) (values seq ls)] [(null? seq) (take-sequence+cdr (cdr ls) (list (car ls)))] [(= (car ls) (+ 1 (car seq))) (take-sequence+cdr (cdr ls) (cons (car ls) seq))] [else (values (reverse seq) ls)])) (if (null? ls) '() (let-values (((seq rest) (take-sequence+cdr ls '()))) (cons (if (= (length seq) 1) (car seq) (cons (car seq) (last seq))) (group-numbers rest))))) (print (group-numbers '(1 3 4 5 6 12 13 15)))
技巧的で短いのよりは、長くても読みやすい方が好きです(←長くなったいいわけ)。
id:katonaさんのutil.match版は短くてわりと読みやすいので良いなぁと思った。いろいろ書き換えながら動作を確認してみた。x+1?みたいな関数名が許されるのはLispならでは。
(use util.match) (define (group-numbers ls) (match ls (() ()) ((x . xs) (let1 x+1? (lambda (y) (and (number? y) (= (- y x) 1))) (match (group-numbers xs) ((((? x+1? y) . z) . rest) (cons (cons x z) rest)) (((? x+1? y) . rest) (cons (cons x y) rest)) (rest (cons x rest))))))) (print (group-numbers '(1 3 4 5 6 12 13 15)))
おおむね、こんな感じ↓で動きます。
; x y z rest ; 6 (12 . 13) 15 ; 5 ; 4 ; 3 ; 1
2008-09-30
■ [mac] port install graphviz +no_x11 +ruby +guile +gui とかしたら
なんかApacheのインストールが始まったんだが…。
|l、{ j} /,,ィ//| /‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ i|:!ヾ、_ノ/ u {:}//ヘ | あ…ありのまま 今 起こった事を話すぜ! |リ u' } ,ノ _,!V,ハ | < 『おれはgraphvizをインストールしていたと fト、_{ル{,ィ'eラ , タ人. | 思ったらいつのまにかWebサーバを入れていた』 ヾ|宀| {´,)⌒`/ |<ヽトiゝ | 催眠術だとか超スピードだとか ヽ iLレ u' | | ヾlトハ〉. | そんなチャチなもんじゃあ 断じてねえ ハ !ニ⊇ '/:} V:::::ヽ. │ もっと恐ろしいものの片鱗を味わったぜ… /:::丶'T'' /u' __ /:::::::/`ヽ \____________________
しかも入らねーしwww
/opt/local/share/apr-1/build/libtool --silent --mode=link /usr/bin/gcc-4.0 -I/opt/local/include -O2 -L/opt/local/lib/db46 -L/opt/local/lib -o httpd modules.lo buildmark.o -export-dynamic server/libmain.la modules/http/libmod_http.la modules/mappers/libmod_so.la server/mpm/prefork/libprefork.la os/unix/libos.la -L/opt/local/lib -lpcre /opt/local/lib/libaprutil-1.la -ldb-4.6 -lexpat -liconv /opt/local/lib/libapr-1.la -lpthread Undefined symbols: "_ap_ugly_hack", referenced from: _ap_ugly_hack$non_lazy_ptr in libmain.a(main.o) "_ap_prelinked_module_symbols", referenced from: _ap_prelinked_module_symbols$non_lazy_ptr in libmain.a(core.o) "_ap_prelinked_modules", referenced from: _ap_prelinked_modules$non_lazy_ptr in libmain.a(main.o) _ap_prelinked_modules$non_lazy_ptr in libmain.a(config.o) "_ap_http_input_filter_handle", referenced from: _ap_http_input_filter_handle$non_lazy_ptr in libmain.a(protocol.o) "_ap_preloaded_modules", referenced from: _ap_preloaded_modules$non_lazy_ptr in libmain.a(config.o) ld: symbol(s) not found
_ap_ugly_hackってなんだ。
+rubyだけでもApache入れようとするなぁ。何に使うんだ。
□ Yuya [Windows DreamScene? 僕的には気が散ってダメでした・・・]
□ yhara [おお、既に実現されてるのですね。 あまり動きのないほうが作業には向いてるかもなぁ。]