flist.scm

mzp2007-05-02

30分シリーズ、15。ファイルリスト生成プログラム。
常にネタ切れ感に苛まれているのですが・・・。

今回は、今で書いたプログラムの一覧を生成するプログラム。作ってから思ったけど、はてな記法で生成するべきだったかも。

$ gosh flist.scm *.{pl,py,rb,scm}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
       "http://www.w3.org/TR/html4/strict.dtd">
<html><head><link rel="STYLESHEET" href="flist.css" type="text/css" /></head
><body><table><tr><td><a href="rpn.pl">rpn.pl</a
></td
><td><a href="http://d.hatena.ne.jp/mzp/20070416/"><img src="hatena.png" /></a
></td
></tr
><tr><td><a href="unlambda.py">unlambda.py</a
></td
......
#!/opt/local/bin/gosh
;; file list generator
 
(use srfi-19)
(use file.util)
(use text.html-lite)
(use text.tree)
 
(define (sort-file . files)
  (sort files 
	(lambda (lhs rhs) (< (file-mtime lhs)
			     (file-mtime rhs)))))
 
(define (time->date time)
  (time-utc->date (make-time 'time-utc 0 time)))
 
(define (date->hatena date)
  (date->string date "http://d.hatena.ne.jp/mzp/~Y~m~d/"))
 
(define (files->html . files)
  (cons (html-doctype)
	(html:html
	 (html:head
	  (html:link :rel "STYLESHEET" :href "flist.css" :type "text/css"))
	 (html:body
	  (html:table
	   (map (lambda(item) 
		  (html:tr 
		   (html:td (html:a :href item item))
		   (html:td (html:a :href (date->hatena (time->date (file-mtime item)))
				    (html:img :src "hatena.png")))))
		files))))))
  
(define (main args)
  (write-tree
    (apply files->html
	   (apply sort-file (cdr args)))))
  • HTMLが美意識に反する。まあ、どうしようもないことなんだけれど
  • たしかに、直でHTMLを書くよりtext.html-liteを使ったほうが楽
  • file-mtimeはUNIX時間を返す。それを、timeオブジェクトに変換してから、dateオブジェクトに変換する。無駄じゃね?
  • 要約が欲しいところだけど、どうしようもない。今日からコメントを入れることにしよう
  • 生成したHTMLがやたら殺風景
  • 無駄にapplyしすぎ