http://rubikitch.com/に移転しました このページをアンテナに追加 RSSフィード

2007-06-23

[][]elispプログラミングしてるとCommon Lispのパッケージシステムが恋しい

最初からいちいち長い名前なんかにしてたら思考が中断してしまう。

パッケージで名前空間を分けられたら…

多値も恋しい。

[]はてな自動リンクを入力するelisp(スケッチ)

とりあえずはてなダイアリーはてなグループ自動リンク記法には変換してほしいので。

他はやる必要あるのかな。

(require 'cl)
(defun hatena-url-unescape (string)
  (shell-command-to-string
   (format "ruby -rkconv -rcgi -e 'print CGI.unescape(ARGV.first).toeuc' %s"
           (shell-quote-argument string))))

;; (hatena-url-unescape "aa")
;; (hatena-url-unescape "%a4%cf%a4%c6%a4%ca")
(defun hatena-notation (url)
  "Returns URL's hatena notation."
  (block hatena-notation
    (dolist (entry *hatena-notation-table* url)
      (when (string-match (car entry) url)
        (setq url (replace-match (cadr entry) nil nil url))
        (when (memq :unescape entry) (setq url (hatena-url-unescape url)))
        (return-from hatena-notation url)))))

(defvar *hatena-notation-table*)
(defun define-hatena-notations (table)
  (setq *hatena-notation-table*
        (mapcar (lambda (pair)
                  (cons (hatena-url-convert-regexp (car pair)) (cdr pair)))
                table)))
(defun hatena-url-convert-regexp (re)
  (format "^%s/?$" (replace-regexp-in-string "\\." "\\\\." (replace-regexp-in-string "_" "\\\\([^/]+\\\\)" re))))

(define-hatena-notations
  '(("http://d.hatena.ne.jp/keyword/_" "[[\\1]]" :unescape)
    ("http://d.hatena.ne.jp/_/_" "d:id:\\1:\\2")
    ("http://d.hatena.ne.jp/_" "d:id:\\1")
    ("http://_.g.hatena.ne.jp/keyword/_" "g:\\1:keyword:\\2" :unescape)
    ("http://_.g.hatena.ne.jp/_/_" "g:\\1:id:\\2:\\3")
    ("http://_.g.hatena.ne.jp/_" "g:\\1:id:\\2")
    ))

;; (hatena-notation "http://hatena.g.hatena.ne.jp/keyword/%e3%81%af%e3%81%a6%e3%81%aa%e3%83%80%e3%82%a4%e3%82%a2%e3%83%aa%e3%83%bc%e5%88%a9%e7%94%a8%e5%8f%af%e8%83%bd%e3%82%bf%e3%82%b0")
;; (hatena-notation "http://d.hatena.ne.jp/rubikitch/")
;; (hatena-notation "http://d.hatena.ne.jp/rubikitch/archive")
;; (hatena-notation "http://d.hatena.ne.jp/rubikitch/about")
;; (hatena-notation "http://ruby.g.hatena.ne.jp/rubikitch/")
;; (hatena-notation "http://hatena.g.hatena.ne.jp/hatenadiary/20040501")
;; (hatena-notation "http://hatena.g.hatena.ne.jp/hatenadiary/")
;; (hatena-notation "http://d.hatena.ne.jp/keyword/%bc%ab%c6%b0%a5%ea%a5%f3%a5%af")

(defun hatena-notation-insert (url)
  "Insert hatena notation."
  (interactive "sURL: ")
  (insert (hatena-notation url)))

(define-key hatenahelper-mode-map "\C-c\C-u" 'hatena-notation-insert)

追記:hatena-notationじゃなくてhatena-autolinkのほうがいいか。

[]rcodetools 0.7.0リリース

http://eigenclass.org/hiki.rb?rcodetools

rcodetoolsは俺とmfpで共同開発しているソフトウェアです。

rcodetools 0.7.0をリリースしました

前バージョンよりもツールが増えて大幅にパワーアップしています。

rcodetools は Ruby のコードを扱うツール群です。
rcodetools には xmpfilter とエディタに依存しない開発支援ツールが含まれています。
Emacs と Vim のインターフェースも用意しています。

* xmpfilter: Test::Unit assert* / RSpec should* 自動生成、コード注釈
* rct-complete: 高精度メソッド名・クラス名・定数名等補完
* rct-doc: ドキュメント参照・コードナビゲーター
* rct-meth-args: 高精度メソッド情報リスト、TAGS ファイル作成
* rct-fork: Rails 等重いライブラリを予めロードし、補完を高速化する(サーバ)
* rct-fork-client: rct-fork サーバが保持する状態から Ruby スクリプトを実行する
* ruby-toggle-file: テストスクリプトと実装スクリプトを切り換える
* rbtest: 小規模スクリプトのための埋め込み Test::Unit

今回の目玉はテスト駆動補完(TDC)です。

rcodetoolsの補完のやり方には大きな問題点がありました。それは、補完する時点まで全てのコードを実行してしまうことです。たとえば、補完する行の直前にファイルを削除するコードが含まれていた場合、補完時にはファイルが削除されてしまいます。Rubyの場合、高精度な補完をしたい場合は実際に実行してみる他はありません。「それが仕様だ!」と言ってしまえばそれまでですが、自分も含め多くのユーザがこの副作用問題に不満を持っています。

もうひとつの問題点は、実行されないメソッド内部での補完ができなかったことです。

そこでユニットテストに注目しました。ユニットテストは繰り返し実行できるよう後片付まできちんとしますね。ではユニットテストからメソッドを実行して補完情報を取れないかと考えました。

この工夫で副作用問題は解決し、メソッド内部での補完も可能になりました。しかも、通常のTDDのサイクルに簡単に組み込めます。そのためこの補完手法TDCと名付けました。

ではどうやってユニットテストテストメソッドを選択するかですが、通常TDDをやっているとテストメソッドと実装メソッドを行き来しますね。だから最後にエディタに表示したテストスクリプトの(エディタ上の)カーソル上にあるテストメソッド自動的に選択します。この行き来をするツールがruby-toggle-fileです。これで以下のサイクルでTDD/TDCができます。

(1) テストスクリプトを閲覧・修正

(2) ruby-toggle-fileで実装スクリプトバッファを切り換え

(3) 『補完つき』で実装メソッド書ける!

(4) テスト

(5) ruby-toggle-fileでテストスクリプトバッファを切り換え

(6) 1へ

rbtestは以前ruby-listに投げたスクリプトを焼き直したものです。小規模スクリプトTDCできるようにするために同梱しました。

rct-fork/rct-fork-clientrailsなど重いライブラリを予めロードし、補完時間を短縮します。ZenTestに含まれるruby_fork/ruby_fork_clientのrcodetools版です。demo/fork-demo.shを実行すればデモが始まります。

エディタインターフェースではよきにはからってくれます。スクリプト内にrbtest形式を発見すればrbtestを使って補完しますし、rct-forkが起動中であればrct-fork-clientを使います。

それではHappy Hacking!

[][]

http://d.hatena.ne.jp/gan2/20070621/1182441886


(setq ruby-deep-indent-paren-style nil)

ですかぁ。10年近くrubyistやってるのに知らんかったなんてorz

[]同じシ社製エレベーターでまた閉じ込め

http://www.nikkansports.com/general/f-gn-tp0-20070622-216572.html

 22日午前8時20分ごろ、新潟市が管理する福祉施設「新潟テルサ」(同市中央区鐘木)
のシンドラーエレベータ社製エレベーターで、施設利用者の男性が約5分間閉じ込められるト
ラブルがあった。5月29日にも同じエレベーターで閉じ込めトラブルがあり同社が修理、6
月5日に運転を再開していた。

怖っ…エレベーター乗りたくないな。なるべく階段にするか。

[]hatena-modeと「はてダラ

hatena-modeと「はてダラ」と組み合わせて使えたらいいな。

あと、誰かが言ってたけど、C-c C-pはC-c C-cにすべきでしょw C-c C-cは送信とか完了とかの暗黙の意味合いがあるようで拙作含め多くのelispプログラムがそうしている。Mewだってnavi2chだって。

[]ajaxって…

d:id:qb_dp:20070607

ajaxってw3mに対応してないからキライ…

はてなemacsだけで日記が書け、w3mだけでブラウジングできるのが嬉しい^^

[]elispの発音

elispを「えりすぷ」と読む人は少数派?

たしかに意味的には「いーりすぷ」なんだが。

[]関数人間

http://dame.dyndns.org/misc/fpiat/

よくわからんテストだ。

0.215721〜だった…まだまだか。

conkerorだとうまく動作しなかったのでM-x firefoxで履歴から読み込まないといけなかった。

[]ん〜菱形継承

http://d.hatena.ne.jp/ytakenaka/20070620/p1

菱形継承は慣れてないから頭が混乱する。多重継承の使い道っていまだMix-inしか知らない。

どうやって理解すればいいんだろ。

ドラクエ6の職業システムみたいなものかな。

たとえば僧侶と武闘家をマスターしたら上級職のパラディン転職できる。パラディン僧侶呪文と武闘家の特技のどちらも使えパラディンの技も習得していくと。魔法使い戦士魔法戦士戦士+武闘家→バトルマスターとか。

[]無量大数の彼方へ

http://www.sf.airnet.ne.jp/ts/language/largenumber.html

小学生のころ無量大数まで覚えたんだけど、もっと後があったのか!

[]優れたもの…

d:id:ytakenaka:20070405

興味のあるソフトウェアソースコードなんてのはどうだろう?興味がある分野だと断然読みやすいと思う。

俺の場合はelispが身近だけど、Lispらしく書いているソースが少ない気がする。

[]修学旅行中の2教師、セクハラ強制送還

http://www.nikkansports.com/general/p-gn-tp0-20070623-216759.html

 宇都宮市の市立中学校の修学旅行中に、男性教諭(32)が女子生徒の人気投票を聞き取り
調査していたとして、生徒からつるし上げられて、宿泊先の京都市から帰されていたことが2
2日、分かった。また、別の男性教諭(32)も過去に「巨乳探し」をしたとして一緒に宇都
宮市へ戻されてしまった。セクハラ発言をした2人の教諭は何度も謝罪したが、女子生徒の怒
りを抑えることはできなかった。

 宇都宮市教育委員会によると、市立中学校の3年生の修学旅行で、訪れた京都市内のホテル
の大広間に女子生徒51人が“招集”された。集めたのは学年主任の教諭。そしてうなだれた
表情の32歳の担任を持つ男性教諭が同席。男性教諭は女子生徒全員に「本当に申し訳ない」
と何度も頭を下げたが「先生とは一緒に旅行を続けられない」と突き放した言葉が浴びせられ
た。

 原因はセクハラ発言だった。3年生4クラスの修学旅行日程は今月17日から2泊3日。“
事件”は18日午後8時半に発生した。教諭は男子生徒(全55人)の宿泊階廊下で、生徒が
騒がないように監視する「巡回指導」の最中だった。1人で退屈だったのか、すれ違う男子生
徒十数人に「女子で誰がいい?」と女子生徒の人気投票を実施して時間をつぶしていた。

 ところが、教諭から聞き取りを受けた男子生徒が、女子生徒に内容を伝えてしまった。怒っ
た女子生徒らが学年主任に怒鳴りこんで大広間での“緊急集会”に発展した。

 さらに、その集会で今年2月に行われたスキー教室で、別の男性教諭が男子生徒に「胸のデ
カい女子は誰だ?」との話をしていたことも発覚。巨乳探しをした教諭も大広間に“追加招集
”され、素直に事実を認めて平謝りしたが、最後まで許してもらえなかった。約1時間、女子
生徒からつるし上げられた2人の教諭は、翌19日始発で宇都宮市に帰った。

理不尽要求をする親がいるかと思えば、腐ってる先生もいる。もうアホかと馬(以下略

gan2gan2 2007/06/23 11:30 こんにちわ。
昨日日記にコメントを頂いたgan2です。

もうすでに気付かれているかもしれないですが、
例の凹みすぎ現象を解消する方法を教えて頂いたので報告します。
.emacsに以下を追加すれば解消されます。
(setq ruby-deep-indent-paren-style nil)

http://d.hatena.ne.jp/gan2/20070621/1182441886#c

ytakenakaytakenaka 2007/06/24 01:09 アドバイスありがとうございます。:-) 菱形継承の件は少し考えています。

実はmaximaのソースコードを一部読もうとしていたです。ほんと興味があるものなら少しは読もうと努力出来ました。いろんな種類のものがあって、多少めちゃくちゃなもの(lispらしく無いという意味です。)でも気にせずに寄与して広く使われてるものもあるんだなと勇気をもらった事を覚えています。rubikitchさんのコメントを読んでmaximaもemacsと同じでlispを余り触らないユーザーの方が多いという事もあるし、同じ様なlispっぽさがない傾向があったのかなと思いました。

Connection: close