トップ 最新 追記

Route 477



2006-05-02

[misc] 日記

ほっとくと更新しなくなるなー。

日記を書くネタの閾値が高すぎるのかも。もっとS/N比*1を下げるべきか。

*1 シリアス:ネタ比

[softs] Subversion

部室のマシンにSubversionを入れてみた。

今まで知らなかったんだけど、svn+ssh使えばサーバ(svnserve)立てたりする必要ないのな! (Subversionを ssh 経由で使おう(ApacheもWebDAVも必要ないよ))

Rubyから扱う場合は、標準でRubyバインディングがついているらしいです。 CVSは標準でそういうのはないのかな?(RAAにruby-cvsがあるけど)

RAAのVCSもダウンロードしてみたけど、 「CVSやSVN等を統一したインターフェイスでアクセスできるようにする」というもののようで、 リポジトリを直接触るとかそういう感じではなさそう。(というかREADMEがフランス語でよくわからん(笑))

何がやりたいのかというと部内のプロジェクトの進行状況をウォッチしたいのだけど。

[misc] Fortress

Guy Steele氏の講演が京大であったので聞いてきた。英語なんで1/10くらいしか聞き取れず…

メモを書いたノートが研究室にあるんで内容はそのうち。というか k.inabaさんの記事を読んでくださいというのでも良いんですけど(笑)、 付け足すとすれば「=」と「:=」が両方用意されてる*1 のとか僕は面白いと思いました。

*1 たぶん、副作用を伴うかの違い。前者は「束縛」、後者は「代入」


2006-05-03

[misc] 日記

要するに普段IRCに投げるようなネタをこっちに書けばいいような気がしてきた。

[ruby] Test::Unit

なんか、いつも

assert_equal hoge, 150

みたいに変数を先に書いてしまうんだが。(こっちの方がなんとなく自然じゃね?)


2006-05-04

[ruby] 全角スペースを取り除く

jcode 使うと str.delete(' ') みたいに簡単に書けるけど、jcode使わないとしたらどう書けば良いか。

(追記:gsubの存在を忘れてた_|‾|○)

[ruby] ,;

なんかCの感覚で

prev_score = nil, prev_players = []

とか書いてしまってはまった。*1

*1 「,」ではなく「;」が正しい


2006-05-05

[tDiary] はてなブックマーク関連のプラグイン

はてブ関連のtDiaryプラグインについて調べてみたよ。

ょゎさんの日記のはどうやってるのかな?と思ったらプラグインじゃなかったらしい。

[book] MONSTER

浦沢直樹の「MONSTER」(全18巻) 読了。

テーマは「人が人を殺すこと」か?


2006-05-06

[javascript] printf

なんでjavasciptにはprintfがないのかと小一時間。いや別に printfでなくてもいいけど、0詰めとか簡単にやる方法が欲しいよ。

ぐぐったら頭に"0"を付けておいて最後の2文字を切り取る なんて方法が出てきた。なるほどなぁ。

例えば %04d なら

str = ("000" + i).substr(-4);

とかか。(iは4桁以下とします)


2006-05-07

[junk] ついにGW最終日

         ,. -‐'''''""¨¨¨ヽ
         (.___,,,... -ァァフ|          あ…ありのまま 今 起こった事を話すぜ!
          |i i|    }! }} //|
         |l、{   j} /,,ィ//|       『おれはゴールデンウィークを満喫していたと
        i|:!ヾ、_ノ/ u {:}//ヘ        思ったらいつのまにかもう最終日』
        |リ u' }  ,ノ _,!V,ハ |
       /´fト、_{ル{,ィ'eラ , タ人        な… 何を言ってるのか わからねーと思うが
     /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ        おれも何をされたのかわからなかった
    ,゛  / )ヽ iLレ  u' | | ヾlトハ〉
     |/_/  ハ !ニ⊇ '/:}  V:::::ヽ        頭がどうにかなりそうだった…
    // 二二二7'T'' /u' __ /:::::::/`ヽ
   /'´r -—一ァ‐゛T´ '"´ /::::/-‐  \    超スピードだとか催眠術だとか
   / //   广¨´  /'   /:::::/´‾`ヽ ⌒ヽ    そんなチャチなもんじゃあ 断じてねえ
  ノ ' /  ノ:::::`ー-、___/::::://       ヽ  }
_/`丶 /::::::::::::::::::::::::::‾`ー-{:::...       イ  もっと恐ろしいものの片鱗を味わったぜ…

[ruby] PDT

「May 8, 2006 17:00 Pacific Daylight Time」を日本時間に直すには?

yhara@cosmos:~ % irb
irb(main):001:0> require 'time'
=> false
irb(main):002:0> Time.parse 'May 8 2006 17:00:00 PDT'
=> Tue May 09 09:00:00 JST 2006
irb(main):003:0>

Ruby便利だ…。

本日のツッコミ(全2件) [ツッコミを入れる]

hanyawn [わーんあんまり休んでないよう。 腹いせに平日に休んでやる。]

yhara [スタンド使いのしわざとしか考えられません。]


2006-05-09

[prog] Curry-Howard Isomorphism

「命題 ⇔ 型」 という一対一の対応関係、そして 「証明 ⇔ プログラム」という一対一の対応関係のことをいいます。命題や証明というのが論理学の概念ですね("命題"というのはtrueかfalseなのかを議論できるような対象のことで…例えば "1" は命題じゃないですが "1+1=2" は命題、みたいな。 "証明"はみなさんご存じのいわゆる証明です)。型やプログラムというのがλ計算などなど、プログラミング言語の世界の用語です。この二つの一見あんまり関係なさそうな世界に見事な対応関係がある、というのがCurry-Howard 対応です。

面白かったっす。僕も論理学とλ計算は教わったけど*1 はこういう話は出てこなかったと思います。

*1 あれ、「計算と論理」で「ラムダ計算とは」という話ってやったっけ

[ruby][SDL] on Mac OS X

新入部員の一人が(KMCには珍しく)Mac使いで、Ruby/SDLのインストールに挑戦しているようです。 Ruby/SDLとMac OS Xというと

あたりが参考になります。

「最後の一行がうまく行かない」らしいので(make install)、手動でインストールしたらOKな気がするんだけど。

  • sdl.rb, rubysdl_alias.rb を /usr/local/lib/ruby/site_ruby/1.8/ あたりに
  • sdl.so を /usr/local/lib/ruby/site_ruby/1.8/i386-macosx(??) あたりに

コピーします(suが必要かも)。具体的なディレクトリ名は

ruby -e 'p $LOAD_PATH'

とかやると分かるはず。

本日のツッコミ(全2件) [ツッコミを入れる]

henkma [その昔, 春合宿で講座やったような気がするなぁ. curry-howard isomorphism]

yhara [へぇ。知りませんでした(僕が入るよりも前かな?)]


2006-05-10

[ruby] Ruby勉強会@関西-10

もう今週末かー。

実はKMCの新勧コンパと被っていたりする(ので、夜の部は参加できない予定です)。

[prog] 計算幾何学

という分野があるらしい(computational geometry)。

発音上「計算機科学」と区別できないなあ。


2006-05-11

[vim] VIM7

via jarp

はてなの技術勉強会でも話題になっている vimの最新版が出た模様。

  • Intelligent completion for C, HTML, Ruby, Python, PHP, etc.
  • Tab pages, each containing multiple windows
  • Internal grep; works on all platforms, searches compressed files
  • Browsing remote directories, zip and tar archives

この辺がすげー気になる。特に最初のとか!

[prog] Programming Challenge

ICPCっぽい問題を考えてみたよ。

次のような形式で、何人かのスケジュールが与えられているとする。

     2 3 4 5 (限)
5/15 x x o o
5/16 x x x o
5/17 x x x o
5/18 o x x x
5/19 x o o o

全員が「o」になっている部分の日付と時間をすべて求めなさい。

sample input

     2 3 4 5 (限)
5/15 x x o o
5/16 x x x o
5/17 x x x o
5/18 o x x x
5/19 x o o o
     2 3 4 5 (限)
5/15 x x o x
5/16 x x o o
5/17 x x x x
5/18 o o o o
5/19 x o o o
     2 3 4 5 (限)
5/15 o x x x
5/16 o x o o
5/17 o x x o
5/18 x x o o
5/19 x x x o

出力形式は自由とします(^^;


2006-05-12

[web] Google Calendar

試用中。月ごとの表示ができるのはとても良い(ってカレンダーならだいたい月表示できるか)

今は紙の手帳をカレンダーに使っているので、それと比較して要望を挙げるとすれば

  • 週末は別の色で表示してほしい。
  • イベントの見た目が「時刻指定あり」と「なし(一日中)」の2種類しかないけど、表示色を指定できるようにしてほしい
    • TODO管理に使いたいので。いまのところ、日付指定なしをTODOの代わりに使ってます。
    • 「あまり重要でない項目」で全体が見づらくなるので。

人によってイベントの存在する密度が全然違うので*1、カレンダーアプリの仕様づくりは難しそうだ。

とりあえず予定を全部書いてみたら来週の予定がいっぱいすぎて泣いた。3rpw*2 とかいつ以来だよ。

*1 僕は1日平均1〜2個くらい

*2 reports per week, 1週間のレポート締め切り数

[ruby] Exerbの1.8.4コア

Ruby1.8.4のコアが最新のASRに含まれてる らしいよ!

Exerbのコアの作成は結構頑張ってチャレンジしたけど、結局挫折したままだなぁ。


2006-05-16

[scheme] WebScheme……"SchemeでAjaxしよう"

去年卒論で作ったWebSchemeを、研究室のページで 公開しました。

詳細は向こうのページを見てもらうとして、ここでは向こうに書けないQ&Aを…。(^^;

これは何?
JavaScriptで書かれたSchemeインタプリタ(に、ウェブアプリケーション向けの機能を追加したもの)です。オリジナルの処理系はこちら
何ができるの?
Schemeを用いて、ブラウザ上で動くアプリケーションを作成することができます。とりあえずデモ(数独)とか見ていただければ。Ajax (XMLHttpRequest) もできますよ!
なぜScheme?
Schemeとか好きだから ていうか湯淺研だし えーと、Schemeの高い記述力を生かしてなんたらかんたら。一級継続とか。
継続ですか?
例えば関数内で「一定時間待つ(sleep)」命令は、現在の継続を保存し、一定時間後に再開することでうまく実装できたりします。…とかなんとか。
jsSchemeとの違いって、ライブラリ追加しただけ?
基本的にそうです。が、FireFoxに対応したり、あと通信関連やJavaScriptのメソッドの実行のためにインタプリタをいじったりもしてます。jsSchemeはほぼ「素のScheme」なので、アプリケーションを作るのに便利な関数を追加した、という感じです。
結局これはネタなの?マジなの?
うーん、マシンの高速化次第ではこういう未来もあり得るんじゃないかな、という感じです。デモはそれなりに実用的な速度で動いているし。ブラウザ上の言語がJavaScriptしかないよりは、いろいろあった方がきっと楽しいですよね。
どういう人をターゲットにしているのでしょうか?
とりあえず「Schemeを勉強したい」という人にとっては、世界一お手軽な処理系かも知れません。Schemeに慣れたら、なんか面白いもん作ってみてください。
まだ未整備なところがいろいろありそうだけど、実用化を目指すの?
当面、僕がやらないといけないのは実用化することよりも修論を書くことのようです。(…研究室インターンでM1の人に何かアプリケーションを作ってもらうことになったんで、もうちょっと機能の整備は行われそうです。)

[ruby] map派とcollect派

昨日出たばかりのるびまより。Rubyにはmapとcollectという同じ機能をもつメソッドがあるんだけど、 どっちを使うのが好きか(読みやすいと思うか)という議論。

僕はmap派です。

笹田 だって collect って全然 collect っぽくないじゃん。

というのに賛成(笑)。

でもどっちかというとmapも直感的じゃない気がしてて、 「配列の中身をある関数で変換する」という意味では「convert」とかそれっぽいかなぁと思うんですが。

[1,2,3].convert{|i| i*2}

どうでしょ?

[web] Google Calendar(2)

なんか、新しいカレンダーを用意すれば別の色にできるらしい。 とりあえずHoliday Calendarsの項から、Japanese Calendarを入れてみた。

設定画面に移ったときに、「Back to Calendar」が下にしか出ないのは駄目だなぁ。

本日のツッコミ(全2件) [ツッコミを入れる]

パッチ希望 [WebSchemeですが、addEventListenerの三番目の引数をfalseにするとOperaでも動きます。]

yhara [おお、ありがとうございます。 次のリリースでは修正しておきます。]


2006-05-22

[scheme] GaucheでHTTPサーバを書いてみる

  • GaucheでCGIを書いてみたい。
  • けどこのマシンはWindowsだなぁ。
  • 適当にHTTPサーバを拾ってくるって手もあるけど、せっかくだからGaucheで書いてみるか。
  • (GaucheでHTTPサーバを書くためのライブラリ*1を探したんだけど、見つからず)

というわけで。

  • とりあえずリファレンスを眺める。www.cgiはCGIを書くためのものだから違うな。rfc.httpはHTTP「クライアント」って書いてあるから違うな。うーん、gauche.net使って頑張るのか。
  • 高レベルインターフェイスにHTTP「クライアント」の例はあるな。サーバは…そうか、bindとかlistenとかするのか。実習でやったなぁ。
  • socket(),bind(),listen(),accept(),read/write/send/recv(),close()らしい
  • 今回は、socket,bind,listenまでmake-server-socketがやってくれそう。

というわけでhttpserv.scmできたよー。

(use gauche.net)

(define sock #f)

(define (server-start)
  (make-server-socket 10800))

(define (server-accept sock)
  (let ((new-sock (socket-accept sock)))
    (display (socket-status new-sock))
    (display (socket-recv new-sock 100000))
    (socket-send new-sock "HTTP/1.1 200 OK\ncontent-type: text/html;\n\nasdf,fdsa")
    (socket-close new-sock)))

(define (main arg)
  (let ((server (server-start)))
    (server-accept server)))

gosh httpserv.scmとやって、ブラウザでhttp://localhost:10800/を開くとasdf,fdsaと表示されます。

*1 Rubyのwebrickのような

[scheme] GaucheでHTTP

次はCGIか。

…あれ、GaucheでRubyの「$0==__FILE__」(そのファイルをインタプリタで実行されたときは真に、requireされたときは偽に なる)ってどう書くんだろう。

まあいいや、CGIのリクエスト文字列を引数に取るようなmain関数をCGIスクリプト側で書くようにしよう。 サーバからはそのmainを呼ぶ、と。

cgitest.scm:

(use www.cgi)
(define (main arg)
  ...

httpserv.scm:

(use gauche.net)
(load "./cgitest.scm")
...
   (socket-send new-sock (main req_str))

[scheme] GaucheでHTTP(3)

いろんなデータを文字列に直すのはどうするのかな?(Rubyのto_sやinspectみたいな)

(x->string hoge) を使えばいいのか。

[scheme] GaucheでHTTP(4)

さて、じゃあHTTPのリクエストのパースをするか。

文字列処理だから6.10(文字列)と10.9(srfi-13)あたりを読んどけば大丈夫かな。正規表現使うなら6.11と9.16(gauche.regexp)か。 *1

うあ、caseの同値判定はeqv?か!文字列には使えないじゃん。cond使うか…。

こんな感じでいいか。

(use gauche.net)
(use srfi-1)
(use srfi-13)
(load "./cgitest.scm")

(define (parse-request request)
  (rxmatch-let (rxmatch #/^(GET|POST)/ (car request)) (method)
	       (cond
		 ((string= "GET"  method)
		  ((#/^GET \/?([^\?]+\?)?(\S+) HTTP/ (car request)) 2))
		 ((string= "POST" method)
		  (last request))
		 (else
		   "error: unknown method"))))

...
    (socket-send new-sock (main (parse-request request)))

*1 「あれ、この処理標準ライブラリにあるじゃん!」という経験はRubyで何回かやってるので、リファレンスはちゃんと読むことにしています(^^;


2006-05-25

[prog] Yahtzee

研究室の輪講のために問題を解いてたら朝になってしまった…(結局輪講には出れず)。なにやってんだ。


2006-05-26

[softs] Irolog

IRCでソースを貼り付けてみて、タブやスペースがちゃんと表示されないことに気づいた。

が、HTMLで空白をちゃんと表示する方法がわからない。とりあえず全角スペースに変換する(^^;;; という方法で ごまかしてみたけど、日本語でしか使えないしなぁ。

右側のmarginだけ大きいようなspanタグを生成するとか?

[ruby] eto.com/d - 組み込みRuby

CのプログラムからRubyのスクリプトを実行するという話。

[ruby] Rubyインストールガイド

http://www.ruby-lang.org/ja/install.cgi?cmd=view;name=top;navi=top

こんなページあったのか…

VC++でのコンパイル方法とかもある。


2006-05-28

[ruby] 統合アーカイバDLL

Rubyから圧縮ファイルの解凍をしたい場合、どうすればいいか。 unixならtarとかunzipとかを呼び出すのが良さそう。 じゃあ、windowsは?

ということで、Rubyから統合アーカイバDLLを呼び出すことを考えてみる。

試しにUNZIP32.DLL。

require 'Win32API'

class ZIP
  def self.version
    Win32API.new('UNZIP32.DLL', 'UnZipGetVersion', 'v', 'i').call
  end
  def self.unpack
    #int WINAPI UnZip(const HWND hWnd,LPCSTR szCmdLine,LPSTR szOutput, const DWORD dwSize);
    func = Win32API.new('UNZIP32.DLL', 'UnZip', %w(p p p i), 'i')

    ret = "\0"*256
    func.call(0, "z.zip", ret, 256)
    ret
  end
end
p ZIP.version
p ZIP.unpack

超適当だが、なんか解凍できたっぽい。

ライブラリ化するとしたらどういうインターフェイスが良いだろうか。


2006-05-29

[scheme] GaucheでHTTP(5)

ファイルの読み込みはstring->portを使うと超簡単!

…っと思ったんだが、日本語の文字列*1が出てきたところで 読み込みが止まってしまう。read-blockでは普通に読めるのに、何でだ。

(追記:file.utilにfile->stringっていう関数があった。こっちの方がより簡単だな。)

*1 「盤面を〜」の「を」以降が読めない

[scheme] GaucheでHTTP(6)

仕方ないのでread-blockで読み込んでみた。

(let ((port (open-input-file path)))
   (let loop ((str (read-block 1000 port)))
     (if (not (eof-object? str))
       (begin
	 (send str)
	 (loop (read-block 1000 port)))))))

初めて named let 使ったよ。

read-blockの第3引数(port)を忘れると標準入力から読み込もうとするので注意(2回はまった)。

[softs] Subversion

最近部内でも使い始めた。とりあえずTortoiseSVNはネ申。

はいいとして、本当に便利なのはSSH使えばサーバ立てる手間なくネットワーク越しのマシンのリポジトリに アクセスできることだったり。