2010/12/30

Emacs で GhostScript(PostScript)

そういえばメモってなかったので。

ps-mode を load して、ps-run-x に GhostScript のパスを指定すれば OK 。
ps-mode で C-c C-s すれば GhostScript の REPL が出てくる。

;; ps-mode
;; C-c C-v : ps-run-boundingbox
;; C-c C-u : ps-mode-uncomment-region
;; C-c C-t : ps-mode-epsf-rich
;; C-c C-s : ps-run-start
;; C-c C-r : ps-run-region
;; C-c C-q : ps-run-quit
;; C-c C-p : ps-mode-print-buffer
;; C-c C-o : ps-mode-comment-out-region
;; C-c C-k : ps-run-kill
;; C-c C-j : ps-mode-other-newline
;; C-c C-l : ps-run-clear
;; C-c C-b : ps-run-buffer
(load "ps-mode")
(setq ps-run-x `(,(expand-file-name "~/gs-path")))

逆ポーランド記法の言語といえば Forth ですが、Forth 使いの人の呼び名がかっこいいです。

ページ記述言語 PostScriptチュートリアル&クックブック (ASCII電子出版シリーズ)

2010/12/29

iPhone / iPad で Scheme: iBiwaScheme


これができるまでの流れがかっこいい。。

出来ました http://www.biwascheme.org/i.html メリークリスマス! RT yhara やりましょう RT @wtnabe biwascheme が iPhone 対応しないかな
このリリースは「大人になったからそろそろプレゼントする側にならないとな」という気持ちの提供でお送りしました。


そういえば iScheme も BiwaScheme ベースだとどこかで。。
私は iPhone 持ってませんけど。。


余談

yhara さんが Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~ の著者の方だと先日気づきました。。

追記


追記2

BiwaScheme 公式サイトのデモすげぇ。増えてる。。

あとやっぱこの破壊力。

Scheme手習い

SICP 原書の amazon レビュー 和訳(Paul Graham, Peter Norvig ...

amazon の SICP(計算機プログラムの構造と解釈)原書。
レビュアーがすごいですね!

SICP って「sick pee(しっくぴー)」って読むらしいですよ。ずっと「えすあいしーぴー」って読(呼)んでます。。

Paul Graham は ハッカーと画家 コンピュータ時代の創造者たち とか On Lisp の人ですね。
Peter Norvig は Google の現研究本部長で PAIP(実用 Common Lisp (IT Architects’Archive CLASSIC MODER))とか エージェントアプローチ 人工知能 の人ですね。 Red さんは何者なんでしょうか。

ところで

368 :デフォルトの名無しさん :2010/11/10(水) 19:40:16
ポールグレアムがグラハムかグレアムかで迷ったときは
DQ6の隠しボスの名前を思い出すといいよ。

ポールグレアム
ダークドレアム

な。似てるだろ。

Paul Graham はポール グレアム。Heather Graham はヘザー グラハム。。
なんで?微妙に気になります。

計算機プログラムの構造と解釈

2010/12/28

今年の3冊

本続きで。

3冊選んでみた

貧困大国アメリカは2冊セットで。
  1. 「ジェンダー論」の教え方ガイド―女子大生のための性教育とエンパワーメント (フェミックスブックレット (1))
  2. 数学入門〈上〉 (岩波新書)
  3. ルポ 貧困大国アメリカ (岩波新書)
「ジェンダー論」の教え方ガイド―女子大生のための性教育とエンパワーメント (フェミックスブックレット (1))数学入門〈上〉 (岩波新書)ルポ 貧困大国アメリカ (岩波新書)ルポ 貧困大国アメリカ II (岩波新書)

「ジェンダー論の教え方ガイド」は、今年のはじめの方に読んだけど印象に残ってる。こういう授業は必須じゃないかなぁ・・・。「数学入門」は @shunsuk さんからすすめられて読んだ。中学か高校、せめて十代で読みたかった。。でも読んでよかった。「貧困大国アメリカ」は夢中で読んだ。アメリカ怖いよアメリカ。

技術書3冊

というか Lisp 本3冊。
  1. 実用 Common Lisp (IT Architects’Archive CLASSIC MODER)
  2. On Lisp
  3. LET OVER LAMBDA Edition 1.0
実用 Common Lisp (IT Architects’Archive CLASSIC MODER)On LispLET OVER LAMBDA Edition 1.0

先生!僕にもマクロが読み書きできるようになりました!

伝統的マクロと衛生的マクロ(syntax-rules に限る)をある程度読み書きできるようになった(上記の本に syntax-rules は出てこないけど)。これはやっぱり今でも Lisp でしか体験できない抽象かもしれないので、悟り体験に含まれるのかも。つか悟り体験ってなんなんだろ。

賛否両論あるだろうけどマクロは他の言語にも輸入した方が良いと思う。S 式じゃなければ Lisp マクロほどの強力なマクロを用意するのは難しいのかもしれないにしても。(脱線)

PAIP は読みやすい・わかりやすい・おもしろい・重い・厚い。On Lisp は後半難しかったけど、丁寧で読みやすかった。ただし、ある程度 Lisp を読み書きできないと序盤からきついのかも。コードがきれい。Let Over Lambda が一番ぶっ飛んでた。文章もマクロも。オレオレマクロ TUEEEEE !
The Little Schemer, 4th Edition も好きで、待望の和訳本も出たけど、原書を読んだのは去年なので選ばず。

Scheme手習い

最近読んだ本

若者はなぜ3年で辞めるのか? 年功序列が奪う日本の未来 (光文社新書)3年で辞めた若者はどこへ行ったのか―アウトサイダーの時代 (ちくま新書)思考の整理学 (ちくま文庫)ルポ 貧困大国アメリカ II (岩波新書)変身 (新潮文庫)実用 Common Lisp (IT Architects’Archive CLASSIC MODER)

「若者はなぜ3年で辞めるのか?」「3年で辞めた若者はどこへ行ったのか」は両方とも面白かった。就活前後の学生さん、これから働く人、3年くらい働いた人とか読んだら面白いんじゃないかと。「思考の整理学」は読みやすかったけどあまり印象に残らず、ふーんって感じ。「貧困大国」はⅠもⅡも夢中で読んだ。日本もこうなってくんじゃないかと怖かった。「変身」は、うーん、グレーゴルの姿があまり想像できないまま読み終わった。。「実用 Common Lisp」は昨日ざっくり感想を書いた。
近所の図書館とか大学の図書館とかもっと利用しようと思う。
去年は7冊もらってきた。

そういや今年は Lisp 本を12冊読んだ。月1冊ペース?しばらくいいや。。

また本を頂きました!

またもや @finalfusion さんから本を頂きました!
ありがとうございます!

「記号と再帰」読んでみたかったんです><
それに「渕一博 その人とコンピュータサイエンス」これって第五世代コンピュータの先頭に立った方ですよね!今「第五世代コンピュータ―日本の挑戦」という本を読んでいるのでタイムリーでした。
他の2冊もすごく新しい本ですね。書店で見かけます。

記号と再帰―記号論の形式・プログラムの必然
田中 久美子
東京大学出版会
売り上げランキング: 23341

20歳のときに知っておきたかったこと スタンフォード大学集中講義
ティナ・シーリグ
阪急コミュニケーションズ
売り上げランキング: 36

渕一博―その人とコンピュータサイエンス
田中 穂積 太田 耕三 古川 康一 岡田 久雄 黒川 利明
近代科学社
売り上げランキング: 705164

マンガでわかるJavaScript
クロノス・クラウン 柳井 政和
秀和システム
売り上げランキング: 75951

以前も読みたかった本や、良書と評判の本をたくさん頂きました。
本当にありがとうございます!!

2010/12/27

そういえば PAIP (実用 Common Lisp) 読んだ

  • Lisp 初級者が次のレベルに向けて読む道標的なもの
  • 動的型付けの言語での開発・プログラミングのイロハ
  • Lisp 独特の柔軟性を生かした設計とインタラクティブで反復的な開発
  • Lisp でのプログラミング・開発・改善
  • Lisp の本というだけでなく、プログラミングの本
  • めちゃくちゃわかりやすい・丁寧
ザッとこんな印象。

一通り読むのに4ヶ月以上かかった。。
今年のうちに一周できてよかった。。
あと物理的に重かった。

例題や演習(解答付き)は原書のタイトル通り AI 周辺。
オブジェクトシステムや Common Lisp で書く Scheme インタプリタ & コンパイラ など(call/cc 付き)も。
(別に悪い意味ではなく、)どの辺が「実用」なのかわからなかった。


一通り読んだものの、演習はほとんど手付かず。相変わらず初級者のまま。二周目はしばらく積んでから、かな。
当たり前だけど、ちゃんと書かないと意味ない。すでに記憶が磨耗し始めてる。
なんかネガティブっぽい感想になったけど、そんなことはなく値段以上に良かった。

実用 Common Lisp (IT Architects’Archive CLASSIC MODER)

2010/12/21

tumblr からランダムにポストする Twitter ボット

tumblr は瞬時にメモれるので良いのですが、振り返りにくいですよね。検索も弱いし。
Twitter のふぁぼりと同様 Tumblr にクッリップしたものもランダムに、かつダラダラ読みたい。
ということで、取りあえず Twitter ボットにしました。
(肝心の Tumblr が落ちてるようですけども)

以下のコマンドを定期実行しているだけです。
gosh tumblrandom.scm consumer-key consumer-secret access-token access-secret tumblr-id type

Tumblr では以下のように入力するとランダムなポストが得られます。
http://hoge.tumblr.com/random
ですが、Tumblr api には random に取得するためのインターフェースがないようです。
そこで一度以下のようなリクエストを送ります。
http://hoge.tumblr.com/api/read/json?start=0&num=0&type=fuga
type は quote なり text なり、空でも良い様です。
返ってきた json に指定した type のポスト総数が入っています。
あとはその値からランダムな数値を作れば OK です。
http://hoge.tumblr.com/api/read/json?start=random-number&num=1&type=fuga

コードはこちら。Scheme(Gauche)で書きました。


参考


追記

こんなのあった。

プログラミングGauche

2010/12/20

あとで読む部分継続(限定継続)(と、継続)

「あとで読む」的なもの。

余談

面白かったのが

経由で読んだこれ
「難しいのは継続ではないcallccだ…とすると、 難しいのは限定継続ではなくshift/resetなのでは?」
これわかるような気がします。継続自体も難しいけど、call/cc がまた難しい。以前 let/cc はわかるけど call/cc がわからないという状態がありました。。今でも let/cc ベースで call/cc を認識しているわけですが・・・。(The Seasoned Schemer の影響もあり)

こんな感じで・・・
(let1 loop #f
  (let1 i 0
    ;; (let/cc c (set! loop c))
    (call/cc (^c (set! loop c)))
    (print i)
    (inc! i)
    (when (< i 10)
      (loop))))

余談2

そういえば、継続といえば、amb カッチョイイですよね。

(return の記事おもしろいなあ。。)

ついでみたいだけど


記号と再帰―記号論の形式・プログラムの必然

自分のふぁぼりからランダムに選択してポストする Twitter ボット

自分が過去に書いたことやその当時気に入ったものをランダムに突きつけられたい。Twitterのつぶやき、ふぁぼりふぁぼられ、書いたブログの記事、ブクマったページ、タンブラーにクリップしたもの、他にもいろいろあろう。そういうもろもろを唐突にランダムに突きつけてくれるサービスが欲しい。

ふぁぼりだけでなく Tumblr やブログもそうなんですが、ランダムに見たいんですよね。
最新のものを頭から眺めるのも、アーカイブから探すのも、検索ボックスから検索して探すのも、どれも違う。

一覧やアーカイブも必要だし、検索も必要だけど、もうひと手段欲しい。
溜め込んだデータの類って、そこに入れたことすら忘れてるものが多くなるように思う。

一覧や検索からだと辿り着かないものがたくさんあるんじゃないか、というかある。
能動的な(?)捜索だと観測範囲がどうしても狭くなるというかなんというか。

ふぁぼりに関しては favotter や favstar も違うし、favolog も違う(よく見てないのでたぶん)。

Tumblr は
http://hoge.tumblr.com/random
すればランダムに見れるんですが、それもなんか違うんですよね。
もっとこう、ダラダラと垂れ流して欲しい。

試しに、ふぁぼりに関しては定期的にランダムにつぶやくボットにしてみました。
Scheme(Gauche)で書きました。
こういうのをもっと一般化したもの(サービス?)があると嬉しいかも。

このスクリプトを定期実行しているだけ。
gosh script.scm consumer-key consumer-secret access-token access-secret twitter-id filter-function

参考


Gauche の新しいバージョンに json 用のモジュールが追加されてた。

プログラミングGauche

2010/12/15

gauche-net-twitter

少しだけ触ってみました。参考にしたのは README とこちら。

たいしたサンプルにもなりませんが、簡単な URL を作ってつぶやくだけの簡単なお仕事をするスクリプト。


例えば、こういう風に呼ぶと
>gosh url-builtter.scm consumer-key consumer-secret access-token access-token-secret "kumanichi.com" "/sinseimen/~a/~a.shtml" "(^t (let1 today (current-date)(format t (date->string today \"~Y~m\")(date->string today \"~Y~m~d001\"))))" "(^u (string-append (date->string (current-date) \"~Y/~m/~d ~H:~M:~S ~a \") u))"
こんなふうに URL をつぶやく。
2010/12/15 02:42:47 Wed http://kumanichi.com/sinseimen/201012/20101214001.shtml

ボットにするなら、あとは外から定期実行してやれば良いかなあと。

上記例のページがそうなんですが RSS がないんですよね。
そういうページの RSS を生成してくれるサービスもありますが、うまいこと生成されないページもしばしば。
URL が簡単なものであれば Twitter ボットに呟かせるのも手かなー、などと思ったもので。
リンク貼るだけならどこかの図書館みたいなことになることもないでしょうし。。

プログラミングGauche

2010/12/14

Gauche スクリプトに S 式を渡したい時って

例えばこういうことをしたい時って、

>gosh script.scm -sexp "identity"
Hello, world

>gosh script.scm -s "(^x (print x)(print x))"
Hello, world
Hello, world
#<undef>

>gosh script.scm -s "(lambda _ (use srfi-19 :only (current-date date->string))(current-date))"
#<date (32400)="" 12="" 14="" 2010="" 23:18:00.218750000="">

こんなんで良いのかな。

(use gauche.parseopt)

(define (main args)
  (let-args (cdr args)
      ((func "s|sexp=e" identity))
    (print ((eval func (interaction-environment)) "Hello, world"))))

追記

@valvallow 1引数決め打ちで、これはダメ? (define (main args) (print (eval `(,(read-from-string (cadr args)) "Hello, world") (interaction-environment))))
(define (main args)
  (print (eval `(,(read-from-string (cadr args)) "Hello, world")
               (interaction-environment))))

なるほどこっちが良いです!

追記2

@valvallow golf に挑戦してみた。 (print((eval(read-from-string(car *argv*))'user)"Hello, world"))
(print((eval(read-from-string(car *argv*))'user)"Hello, world"))

短い!

プログラミングGauche

Gauche 今日の日付

(use srfi-19 :only (current-date date->string))

(let1 today (current-date)
  (date->string today "~Y~m~d"))

use で特定のシンボルを指定できてエイリアスも指定できるようになってて便利だー

プログラミングGauche

2010/12/12

近況

最近ブログの更新が停滞していたので、ここらで投稿しておこうと思います。

そろそろ働きたいと思っていて、採用面接を受けてみたり人に会ってみたりしています。
もしかすると何らかの形で年明けくらいから働くことになるかもしれません。
以前と同じくプログラミングやソフトウェア開発に関わるお仕事です。

以前勤めていた会社を辞めてから1年以上が経ちました。
働いている時は「働らかずに生活できたら良いのに・・・」などと思うこともありましたし「もっと時間が欲しい」と思うこともありましたし「やりたいことをもっとやりたい」と思うことがありました。
1年も好き放題ブラブラしていると、働きたくなってくるから不思議なものです。

この1年間十分楽しみました。
好きなだけゴロゴロして、寝たいだけ寝て、読みたい本を読んで、知りたいことを調べて、書きたいコードを書く。
やりたくないことは極力せずにやりたいことだけやれたと思います。
良い面もあれば良くない面もありました。

残念なのは成果物がないことです。
このブログの記事くらいでしょうか・・・、でもそれも成果物ではないですね。
次の1年は何かモノを作れたら良いなぁと思います。
実用的なモノが良いですね。

適当に短く書くつもりが長くなってきたのでここらで。
ブログは今まで以上に適当な内容で更新できたら良いなぁと思っています。