ClozureCL 1.6でOpenGL

  • 1.4ぐらいで動かしていたコードがうまく動かない.画面は表示されて,矢印キーなどにはうまく動くが,ターミナルからの命令で動かすとカーネルごと落ちたりする.当初はopenglのcontextがずれることが原因かと思い,設定するようにしてみたら,個別のコマンドではうまくいくが,ループ実行では同じように落ちる.
  • cl-opengl(cl-glut)をASDFしてみたが,exampleすら動かないでClozure CLが落ちる.

MacFusion

Snow Leopardにアップデートしたら,MacFusionからサーバにアクセスできなくなってしまい,SFTPでアクセスしているWebサイトの更新とかを高機能化したせいでとても重くなってしまったCyberDuckを使わざるを得なくなったりして,著しい生産性の低下に悩んでいる人多数のはず.
MacFusionのパッケージの中のsshnodelayだったかを削除したらうまくいくという話も見つけたけど,残念ながら,それだけでは解決しなかったし,というわけでぐぐり続けるはめとなったのだが,とりあえず,MacFuseもMacFusionもUnofficialなバージョンを使うと解決できたので,ここにメモしておく.

MacFuseはこちらのUnofficial 64bit版↓をダウンロードしてインストールする.
http://caurea.org/2009/09/15/unofficial-macfuse-release-for-64bit-kernels/

  • MacFusion

MacFusionは,gitレポジトリ↓の2.0.4SLをダウンロードする.
http://github.com/nall/MacFusion2/downloads

結局のところ,これだけなのだが...

thunderbirdの文字化け問題とその解決

Thuderbirdは,文字エンコーディングを自動で設定する機能があり,ほとんど完全に見分けてくれる.しかし,一番使う仕事環境のThunderbirdだけがが全く判別しないという問題があり,これまでの悩みだった.

しかし,こちら

Thunderbird 2 にあったはずの「すべての受信メッセージに既定の文字エンコーディングを適用する」というオプションが、Thunderbird 3 では消えていらっしゃる。代わりに、「about:config の mailnews.force_charset_override を true にする」 ことで解決を見た。

を見て,エンコーディングがうまくいかない原因がわかった.
ただ,この筆者とは別にtrueをfalseにしたのだけど.
同じ悩みの方がどれほどおられるかわからないのだけど,ご参考まで.

Thunderbirdへの怒り

Thunderbird(MacOSX版 2.0.0.23)でとあるメールへの返信を保存しようとするとUTF8でしか表せない文字が含まれているらしく,

現在の文字エンコーディングでは使えない文字がメッセージ中に
含まれています。このまま送信すると一部の文字が疑問符に
変わって受信者に読めなくなってしまいます。通常はUnicode
UTF-8)で送信すれば問題ありませんが、受信者がUnicode
サポートしていない場合は日本語などが全て文字化けして
読めなくなってしまいます。その場合はメッセージを修正するか、
別の文字エンコーディングを選択してください。

と表示される.
Unicodeでは送りたくない場合,どの文字かを指摘してくれないので,修正するのにとても苦労する.
どの文字かぐらい,わかるようにしなさい!

以上,Thunderbirdへの怒りでした.
これを改善してくれる,いいThunderbirdのPlugin知りませんかねぇ..

#保存するだけでこれが指摘されるのは,IMAP4を使っているからだと思います.

exampleのrubixを元にOpenGLを試す

ClozureCLはCocoaプログラミングができていまうのであった.以下が暫定のまとめ.

    • Cocoa関数(メソッド)を呼ぶときは#/をつける.Lispなので,関数・メソッド名が先頭です.
    • Cocoaのメソッド定義は,objc:defmethodを使う.
    • マニュアルにはsend関数を使うように書いてあるが,これは使えないみたい.
    • Cocoaのクラスを直にCLOSから継承したりもできる.
    • 構造体はMCL時代におなじみのrletを使う(みたい).
    • MCLと同じく,メモリ空間を使うときは,ccl::stack-blockを使う.MacPtrとかはないので,ちょっと使い方は微妙に変わってるかも.

RubixのOpenGL画面はリサイズできないので,CocoaOpenGLを使う例を元に画面をリサイズできるようにいろいろ試した.NSOpenGLViewのサブクラスにメソッドreshapeを定義してオーバーライドなど.しかし,何故かうまくいかない....

ClozureCL 1.2をテスト

MacintoshCommonLISPは,完全にGNU劣化ライセンスでフリー化(MCL 5.2Final)されてしまったのだが,IntelMacではやはり起動しない.
そこで,ClozureCL 1.2をテストしてみた.

ダウンロード

Subversionでチェックアウト

 $ svn co http://svn.clozure.com/publicsvn/openmcl/release/1.2/darwinx8664/ccl

とやるか,
ftp://ftp.clozure.com/pub/release/1.2/からダウンロードする.

起動

cclフォルダに入って起動するだけ.

 $ ./dx86cl64
Welcome to Clozure Common Lisp Version 1.2-r10552  (DarwinX8664)!
? 

あとは,EmacsからSLIMEでどうぞ.....で終わりではなく,ClozureCLの素晴らしいところは,いわゆるTerminalでのみ動くだけではなく,ClozureCLでは過去のMCLと同様,MacOSXのアプリとして実行するようにもできるようになっているところ.但し,まだまだアルファ版でたまに反応がなくなったりしますが.
で,そうしたい場合には,

ClozureCL.appを生成

Welcome to Clozure Common Lisp Version 1.2-r10552  (DarwinX8664)!
? (require :cocoa-application)
・・・・・・・・・メッセージがいっぱい出てきて,ClozureCL.appが保存されて,終了する.

これで,エディタ(Hemlock)も付いているMCLのような環境で開発できます.

OpenGLも動く!

OpenGLを利用したexampleも用意されています.

Welcome to Clozure Common Lisp Version 1.2-r10552  (DarwinX8664)!
? (load "ccl:examples;rubix;loader.lisp")
#P"/Volumes/Spock/ccl/examples/rubix/loader.lisp"
? (run-rubix-demo)
#<RUBIX-WINDOW <RubixWindow: 0x16e76b40> (#x16E76B40)>
?

で,OpenGLのデモを見ることができます.

Courier-imapの素人研究

OSをLeopardに入れ替えたので,ThunderbirdからMailが使えるかなとちょっと切り替えて,少し設定を変えたりしてたりしてたら,トラブル発生.自宅の玄箱Linuxサーバで動かしているcourier-imapのプロセスが止まらないという状況に陥る.設定を変えたときに数十万オーダーのたまりにたまったSPAMメールを削除するようにしてしまったのが原因でした.
しかし,それがわかってもcourier-imapのプロセスはクライアントでアクセスしたとたん,止まらなくなるので,やむなくMaildirの中身を直接いじって,この蓄積したメールを消すはめに.しかし,このあたり,インターネットで検索しても見つかるのはインストール記事ばかり.和文では,ほとんど資料が出てこないのでございました.英文ではこちら→http://www.courier-mta.org/maildir.html
結局..

Maildirの構造(メモ)
  • Maildir以下がINBOXに対応しており,cur/,tmp/,new/,fromがある.
    • new/には最新のメールが入る.
    • cur/には見たメールが入る.
      • 末尾がSTになっているファイルはどこかに移動済みのメールを表す.
    • tmp/にはフォルダに移動中のメールなどが入る.cur/やnew/とはファイル名のパターンが異なっている?.
    • fromには受け取ったメールの情報がキャッシュされている(いつ消えるんだろ).
      • fromはMaildir直下以外には存在しない.
  • courier-imapの場合には,それ以外にcourierimaphieracl/,courierimapkeywords/,courierimapsubscribed,courierimapuiddbなどがある(たぶん,courier-imapのみの仕様).
    • courierimaphieracl/には,配下の階層を示すファイルが入っている.ファイルの中身はowner aceilrstwxとか.たぶん,権限を示す文字列でしょう.
    • courierimapkeywords/ →不明.
      • :listにメールのファイル名等が記載されている.迷惑メール等のマークに対応している模様.
    • courierimapsubscribed →購読されているメールフォルダのリスト.
    • courierimapuiddb →受信したメールの連番とファイル名のリスト.
  • Maildir直下にメールフォルダに対応するディレクトリがある."."が先頭についている.
    • 中身はMaildir直下と同じようにcur/,tmp/,new/,from/及び,courierimaphieracl/,courierimapkeywords/,courierimapsubscribed,courierimapuiddbなど.

ということがだいたいわかり,.Trashの中身を移動し,たまりにたまったSPAMメールの削除成功.Thunderbirdも快適に動作してます.
でも,最初は,権限が違ってた(otherやgroupにrやxがついていた)せいか,ゴミ箱に入れたメールが入れたとたん,消えてなくなる(tmp/にはいってそのまま)というトラブルに悩まされていました.
で,今は治ってはいるのですが,.Trash/tmp/にメールがたまりっぱなし.
いったい,どうすればいいのでしょうね.まあ,SPAMだからほおっておくか..