DRY up your Enumerations in Common Lisp
http://www.devchix.com/2007/05/25/ruby-dry-up-your-enumerations/
Common Lispならマクロの出る幕すらない。
(defstruct stooge :name :hair :habit) (defparameter *stuff* (vector (make-stooge :name "Mo" :hair "bowly" :habit "eye poking") (make-stooge :name "Larry" :hair "curly" :habit "whomping") (make-stooge :name "Curly" :hair nil :habit "whining"))) (defun baldish? (x) (null (stooge-hair x))) (defun is (field value) (lambda (stooge) (equal (slot-value stooge field) value))) (defun name-is (value) (is :name value)) (defun defalias (new func) (setf (symbol-function new) func)) (defalias 'select #'remove-if-not) ;; @stooges.that.are.baldish? (select #'baldish? *stuff*) ;; @stooges.that.have.name == ‘Mo’ (remove-if-not (lambda (x) (equal (stooge-name x) "Mo")) *stuff*) (select (name-is "Mo") *stuff*) ;; @stooges.extract.name (map 'vector #'stooge-name *stuff*) ;; @stooges.all.are.baldish? # false (every #'baldish? *stuff*) ;; @stooges.any.are.baldish? # true (some #'baldish? *stuff*) ;; @stooges.all.are_not.baldish? # false (every (complement #'baldish?) *stuff*) ;; @stooges.any.are_not.baldish? # true (some (complement #'baldish?) *stuff*) ;; @stooges.all.have.name == ‘Mo’ # false (every (name-is "Mo") *stuff*) ;; @stooges.any.have.name == ‘Mo’ # true (some (name-is "Mo") *stuff*)
condition-case / handler-case
elispではcondition-case、Common Lispではhandler-case。
JavaScript対応のテキストブラウザ…
http://d.hatena.ne.jp/khiker/20070620/text_browser
id:khikerさんのエントリ。
俺もJavaScript対応のテキストブラウザが欲しい。w3m-jsを以前試してみたが使い勝手がよくなかった。
しょうがないのでfirefox(conkeror)を常駐し、自動で再起動するようにしてある。
このshell script(retry.sh)で retry.sh iceweasel とやっている。(実際はウィンドウマネージャーとの兼ね合いでもっと複雑)
#!/bin/sh $@ ; sleep 0.05; exec $0 $@
keywordテキストブラウザについて
keyword:テキストブラウザ
「フォントと画面サイズが固定されるという問題はある」とあるが、俺はそれが逆にメリットだと考えている。小さい字にされると読みづらいんじゃボケー!
色が固定されるのも俺的にはメリット。
常に黒地に白字で作業しているから、明るい背景色だと眩しすぎる。
HyperSpec辞書引きLocal CGI
http://d.hatena.ne.jp/mitsygh/20070620/1182365173
id:mitsyghさんのエントリ。同じようなこと考える人はいるものだ。
EmacsだとSLIMEで存在する。HyperSpecのデータベースはelisp側が持っているので外部プログラム側がそれを使いたければgnudoit経由で取り出すしかない。
これはw3mのLocal CGIスクリプトhyperspec.cgi。
#!/usr/bin/env ruby ## from mylib.rb class << IO # Redirect stdout to STDOUT and executes the block. def redirect(stdout) begin stdout_sv = STDOUT.dup STDOUT.reopen(stdout) yield ensure STDOUT.flush STDOUT.reopen(stdout_sv) end end end require 'tmpdir' require 'fileutils' @@__system_to_string_count__ = 0 def system_to_string(*args) begin tmpf = File.join(Dir.tmpdir, "#{$$}-#{@@__system_to_string_count__}") @@__system_to_string_count__ += 1 ret = nil open(tmpf,"w") do |f| IO.redirect(f) { system *args } end File.read(tmpf) ensure FileUtils.rm_f tmpf end end ## /mylib.rb func = ENV['QUERY_STRING'].sub(/hyperspec:/, '') lisp = <<'XXX' (let* (tmpurl (browse-url-browser-function (lambda (x &rest args) (setq tmpurl x)))) (common-lisp-hyperspec "%s") tmpurl) XXX url = system_to_string "gnudoit", lisp % func print "Location: #{url}\r\n\r\n"
firefox拡張
http://d.hatena.ne.jp/khiker/20070617/firefox_devcon_2007
firefoxの拡張って楽しそうなんだが、そんなにfirefox自体使ってないんだよね。いつもw3mでJavaScriptが必要なときに仕方なく使う程度なので。
w3mヘビーユーザの俺に言わせれば、DOMとかをJavaScriptでいぢれるのが羨しい。