以前@g000001さんにSBCL+SLIMEのデモを見せてもらった時、関数やマクロの定義にジャンプできるだけでなく同じノリでアセンブリまで降りて行けれるのを見せてもらってびっくりした覚えがあります。コンパイラとデバッガが言語仕様に含まれてるCommon Lispならではですね。

* (defun main () (format t "unk~%"))

MAIN
* (save-lisp-and-die "unk" :toplevel #'main :executable t)
[undoing binding stack and other enclosing state... done]
[saving current Lisp image into unk:
writing 5248 bytes from the read-only space at 0x20000000
writing 3088 bytes from the static space at 0x20100000
writing 40529920 bytes from the dynamic space at 0x1000000000
done]

SBCLではsave-lisp-and-dieで実行可能バイナリファイルを作成できるみたいです。

$ ./unk
unk

「ほう、経験が生きたな」(@ブロントさん)

$ du -h unk
39M unk

でかい!でもまあこれは仕方がない。

$ file unk
unk: Mach-O 64-bit executable x86_64

当たり前だけどMacではELFじゃなくてちゃんとMach-Oなんですね。これじゃ@g000001さんがやってたみたいな、"ローカルで適当な実行可能イメージを作ってLinuxサーバーにアップ"なんてことできませんな。

明日はShibuya.lisp Hackathon #1 : ATNDに行きます。

@g000001さんと@quekさんと同じ会社にいたお陰でLispといえばCommon Lispだと洗脳されているのでCommon Lispを再び勉強したい。

@machidaさんも行くので何をやるのか相談しました。@machidaさんが”Made with secret alien technology”パーカーをデザイン・販売サイトへの登録して、僕がhunchentootでペラいちのページを作るというのをやったらどうかなと。(最近さくらのVPS借りたので)

hunchentootで1ページなんてインストールするだけだろう?と思われるでしょうが、初心者以前の僕は恐らく、CentOS上でhunchentootが動かないとかどハマりしていい課題になるのではないかと・・・。

当日の課題

  • Emacs設定
  • SBCLインストール
  • SLIMEインストール
  • asdfインストール
  • Hunchentootインストール
  • cl-whoの勉強
  • shellから実行できるbinaryを作る調査
  • サーバー設定(mod_proxy)

CVSからインストール

MacPortsにはあるがhomebrewには無いのでcvsに置いてあるのからインストール。

$ cvs -d :pserver:anonymous:anonymous@common-lisp.net:/project/slime/cvsroot co slime

Emacsの設定

;; slime
(setq load-path (cons "/Users/komagata/code/slime" load-path))
(require 'slime-autoloads)
(setq slime-lisp-implementations `((sbcl ("/usr/local/bin/sbcl"))
(clisp ("/usr/local/bin/clisp"))))
(add-hook 'lisp-mode-hook
(lambda ()
(cond ((not (featurep 'slime))
(require 'slime)
(normal-mode)))))
(eval-after-load "slime"
'(slime-setup '(slime-fancy slime-banner)))

;; japanese
(setq slime-net-coding-system 'utf-8-unix)

SLIME on Mac(Install from source) from komagata on Vimeo.

slime-mode

C-c C-c
現在のトップレベルフォームをコンパイル
M-x slime-compile-region
リージョンをコンパイル
C-c C-k
カレントバッファのファイルをコンパイルし,ロードする(コンパイルが成功した場合だけロードされる)
C-c M-k
カレントバッファのファイルをコンパイルする(ロードしない)
C-c C-l
バッファのファイルをロードする
M-x slime-load-sysmtem
入力されたシステムの変更されたファイルをコンパイルしてロードする

homebrewでMacにインストール

$ brew install sbcl

http://localhost:9393/hello

Commit c6954984dca64cbc02ee28f63ec4f7ce56bec1b4 to komagata's lokka - GitHub

ktkr! 神降臨! > @yagi_

IRC(#lokka-ja)で適当に話してたことが既に実装されとる!

テーマAPIとプラグインAPIは超大切なのでプラグイン規約はちょっと悩みますね。@yagi_さんが書かれている通りですが、現状helloというプラグインを作るとするとこんな感じです

  • plugin/lokka-hello/lib/lokka/hello.rbがあればrequireする。
  • Lokka::Helloがあればregisterする。
  • helperはLokka::Helpersを勝手に再オープンしてメソッド追加すればよろし。

規約とは殆どが配置と命名の事です。配置はこんな感じです。

LOKKA_ROOT/
 plugin/
  lokka-hello/
   lib/
    lokka/
     hello.rb

URLの/helloにアクセスするとhelloと表示し、helloというhelperを追加するhelloプラグインの中身はこんな感じです。

module Lokka
  module Hello
    def self.registered(app)
      app.get '/hello' do
        'hello'
      end
    end
  end

  module Helpers
    def hello
      'hello'
    end
  end
end

簡単なルールでいいかもですね。

Lokkaの@yagi_さんのforkのplugin autoloadを辛抱たまらず勝手にマージしてみた。

$ git fetch git://github.com/yagitoshiro/lokka.git master:plugin-patch
$ git merge plugin-patch

Commit c01380f5d6d5ddf4145fa990c7d3d1ca03ed8bce to komagata's lokka - GitHub

404 not found - Lokka

サンプルのHelloプラグインが動いてないので明日もっとよく見る。今日は寝る。

まずMacPortsをアンインストール

(MacPortsで入れたzshをログインシェルにしてると裏世界でひっそり幕を閉じる。が、Terminal.appのshells option with:を/bin/shにすれば助かる。)

Homebrewをインストール。(Xcodeはその前に必要)

$ sudo chown -R `whoami` /usr/local
$ ruby -e "$(curl -fsS http://gist.github.com/raw/323731/install_homebrew.rb)"

gitをインストール。

$ brew install git

rvmをインストール

情報処理推進機構:プレス発表:記事:「2010年度日本OSS貢献者賞・日本OSS奨励賞」受賞者を選定

IPA(独立行政法人情報処理推進機構、理事長:藤江 一正)は、このたび、優れたオープンソースソフトウェア(OSS)の開発及び普及に貢献した個人等を表彰する「2010年度日本OSS貢献者賞」および「2010年度日本OSS奨励賞」の受賞者を選定しました。

今回発表された日本OSS貢献者賞2010に日本語プログラミング言語なでしこの作者、酒徳 峰章さんが受賞されていました。おめでとうございます。

以前、尊敬するエンジニアは誰?と聞かれたときに、DHHですかねー?などと適当に答えてしまったんですが、本当は酒徳さんだなあーと。

どれが良い悪いではなく、プログラマーを

  • 0を1にするのが得意な人
  • 1を10にするのが得意な人
  • 10を100にするのが得意な人

の3つに分けるとしたら酒徳さんは0を1にするタイプの人だなあと思っていました。

酒徳さんを初めて見たのは確かオープンソースカンファレンス2005だか2006で、なでしこの発表をされている時でした。その頃僕はプログラマーというと早口で捲し立てる完璧主義者というイメージを持っていたので、(プログラマーにもこんなにゆっくりしゃべってくれる優しそうな人がいるのか)と驚いたことを覚えています。

その後ウノウで働く中で数回ペアプロやったり、酒徳さんの活動をウォッチしてたんですが、とてもユニークな人で、僕もこういう風になりたいなと思うようになりました。(社内で聞こえてきた会話の断片などを元に記憶を掘り起こしているので事実と違うところをがあるかもしれません。)

プログラミングが半端じゃなく好き

ウノウで開発合宿をしたとき、WindowsのGUIアプリを誰か(ココイチさんかな?)が作っていて、「よくあるこういう処理ってどうすればいいんでしたっけ?」と聞いたときに酒徳さんが「それならいいのがありますよ」といって取り出した自作ライブラリの名前が"BenriUtil"。「BenriUtilっていい名前ですね!」というと「これ、便利なんですよ・・・」と言っていました。

また別の時は、「女子高生にプログラミングをしてもらうには携帯しかない!」と言って、FlashLiteのプログラムを良く知るためにActionScriptを始めていました。(Web開発環境"葵")

「Delphi好きの我々にとっては馴染み易いですね」(変数宣言の名前と型の順番が同じ)と言って勉強のために作ってたのがHello, Worldではなく、1マス1マスが人の形の画像を使ったライフゲーム。

僕自身も、上手い下手は兎も角、(ご飯が食えて、死ぬまでプログラミングが出来ればそれでいいや・・・)と考えてるクチなんですが、それでも酒徳さんよりプログラミングが好きか、楽しんでやっているかと問われると自信がありません・・・。

極端な成果物指向

元々、酒徳さんが"日本語プログラミング言語ひまわり"を作ったのは会社のアルバイトの人の業務自動化のためだそうです。

ウノウでCTOの尾藤さんがペアプロの時に、酒徳さんがプログラミング言語やコンパイラを作るときには普通必ず使うであろう技術やツールを知らないことに驚いていました。「今までどうやっていくつも言語を作ってきたんですか?」って。

酒徳さんはというと「おお、こんな便利な物があったんですね!これは凄いですね!」と言っていました。

しかし、その後、周りの人に聞いたり、定番の書籍(ドラゴンブック等)を読んであっという間に習得していました。

「これで次からはプログラミング言語がもっと楽に作れる!」とか言ってました。

成果物指向かつ楽しんでやりたい

0を1にするには極端に独善的である必要があります。しかし、酒徳さんはそういった欲望を他人に迷惑の掛からない自分のソフトウェアのコードの中だけで爆発させているように見えます。

僕自身は上記3種類でいったら1を10にするタイプかなあ・・・と思っているので直接的には真似出来ませんが、常々、酒徳さんをリスペクトしている次第です。

MacでTerminal.appから起動したアプリとFinder/Spotlightから起動したアプリの環境変数が違う。(厳密にはFinderとSpotlightも違う)

MacVimから色々やろうとしたときにかなりウザイ。

:!rvm
zsh:1: command not found: rvm

shell returned 127
:!echo $PATH
/Applications/MacVim.app/Contents/MacOS:/usr/bin:/bin:/usr/sbin:/sbin

・・・ほう(イラッ

/etc/launchd.confでsetenvすればいいそうです。(なんでcshみたいな書き方なんだろう?)

# /etc/launchd.conf
setenv PATH /Applications/MacVim.app/Contents/MacOS:/Users/komagata/.rvm/gems/ruby-1.8.7-p299@ruby1.8.7/bin:/Users/komagata/.rvm/gems/ruby-1.8.7-p299@global/bin:/Users/komagata/.rvm/rubies/ruby-1.8.7-p299/bin:/Users/komagata/.rvm/bin:/Users/komagata/bin:/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

PATH in MacVim

できた。

(/etc/pathsやenvironment.plistで設定する方法もあるみたいですが、Finder/Spotlightの両方共設定することが出来なかったのでこの方法です。)

Lokka 0.1.0 Released - Lokka

Lokka 0.1.0をリリースしました。これはPyhaからLokkaに名前が変わってから最初のリリースです。

ダウンロードはこちらから。

PyhaはPython製であるように見えてしまって紛らわしい説があった(あたりまえ)のでGoogleグループで投票で新しい名前、Lokka(ロッカ)になりました。

公式サイトもlokka.orgになりました。改めて調べてみると北欧の地名?ってPyから始まるものが結構多いんですよね。Pythonのソフト作るときにいいかもです。