GUI-less XMMS
xmmsからGUIを取り除いたプログラムがある。いつかconfigure optionで設定できるように本家に取り込まれるといいかもしれない。
http://radioqualia.va.com.au/guile
http://xmmsd.sourceforge.net/noxmms
でもratpoison的には
unmanage XMMS
しているからGUI-lessにしたって数MBのメモリが浮くだけだろう。
てかguileってScheme処理系の名前とかぶってるじゃん。
グループに登録・はてダラの設定
http://www.hyuki.com/techinfo/hatena_diary_writer.html#faq_groupdiary
せっかくグループに加入したので、はてダラ側の設定もやる。 けどほぼ同じ内容の設定ファイルを蒔き散らかすのはDRYに反してて好きではない。 config.txt一括生成スクリプトmake-group-config.rbを書いた。
俺の設定では ~/memo/hatena にはてな日記を置いているので、make-group-config.rbもそこに置く。
require 'fileutils' TEMPLATE = <<'XXX' id:USERNAME password:PASSWORD cookie:~/memo/hatena/cookie.txt filter:nkf -w %s g:__GROUP__ XXX for group in ARGV config = "#{group}/config.txt" puts "Writing #{config}" FileUtils.mkdir_p group open(config, "w") do |f| f.print TEMPLATE.sub(/__GROUP__/, group) end end
ruby make-group-config.rb ruby rubyist
のようにグループ名を引数にして実行〜
Emacs側にはこれを加えておいた。
(defvar hatena-groups '("dprogramming" "lisp" "ruby" "rubyist")) (defun hatena-group (group) "Open today's hatena group diary file." (interactive (list (completing-read "Group: " (mapcar 'list hatena-groups) nil t))) (find-file (concatenate 'string hatena-dir "/" group "/" (format-time-string "%Y-%m-%d.txt" (current-time)))))
On LispのmemoizeをRubyに翻訳してみる
# (defun memoize (fn) # (let ((cache (make-hash-table :test #'equal))) # #'(lambda (&rest args) # (multiple-value-bind (val win) (gethash args cache) # (if win # val # (setf (gethash args cache) # (apply fn args))))))) module Memoize def memoize(fn) cache = {} lambda{|*args| val = cache[args] if cache.has_key?(args) val else cache[args] = __send__(fn, *args) end } end end def f(x) sleep 0.2 x*10 end require 'benchmark' include Benchmark def real(&block) measure(&block).real end include Memoize memf = memoize(:f) real{ memf[100] } # => 0.197517156600952 real{ memf[100] } # => 1.81198120117188e-05 real{ memf[100] } # => 1.38282775878906e-05 memf[100] # => 1000 Kernel.module_eval { define_method(:mf, &memf) } real{ mf(7) } # => 0.199476003646851 real{ mf(7) } # => 1.69277191162109e-05 mf(7) # => 70 class Hoge def f(x) sleep 0.2 x*100 end module_eval do extend Memoize define_method(:mf, &memoize(:f)) end end h = Hoge.new real { h.mf(99) } # => 0.199654817581177 real { h.mf(99) } # => 1.59740447998047e-05
条件式の結果も返す Enumerable#find
module Enumerable def find2(&block) each do |x| if val = block[x] return [x, val] end end end end ["hoge", "boke", "nico"].find2{|s| s =~ /ok/} # => ["boke", 1]