Posted by & filed under .


一部訂正: 地震について書かないと宣言する必然性はないので冒頭の記述を削除。

Amazonに「実践サーバサイドJavaScript」のページができていました。技術評論社から聞いていません…まるで松本伊代です。喩えが古くてすいません。

実践 サーバサイド JavaScript

ちなみに聞いていないのはAmazonにページができていたことです。本が出ることは知っています。自分で書いたので当然です。ゴーストライターはいません。「パーフェクトJava」出版後の2009年の末から書き始めていました。執筆に1年以上かかっています。「パーフェクトJava」の経験を生かしてもっと速く書きたかったのですがこんなにかかってしまいました。600ページを越える「パーフェクトJava」に比べれば、400ページはかわいいものですが、サーバサイドJavaScriptネタで400ページも書くことがあるのか?と事情を知る人は驚くかもしれません。

今、別の執筆で忙しいので、後日、本の内容や執筆の思いを書きます。


関連文書:

  • 関連文書は見つからんがな

Posted by & filed under いろいろ.


Google Apps Scriptでデバッガを使える話を書きました。ステップ実行しながら結果を確認できるのか試してみました。

次のコードはスプレッドシートの左上から右下に向かってセルを赤くするコードです。getRange()の引数の意味は座標と幅と高さです。これが分かればAPIの詳細は分からなくてもコードの雰囲気はつかめると思います。

forループの中にブレークポイントを仕掛けてステップ実行しつつ、別タブでスプレッドシートを観測していると…残念ながらループを回すごとに赤いセルが増えるのは観測できませんでした。

ステップ実行中にスナップショットした状態でも見ているのかと思い、スプレッドシート中の値を読み取るスクリプトのステップ実行中にスプレッドシートを別タブで書き換えてみようと、次のようにコードを変えてみました。セルの文字を大文字に書き換えるコードです。

期待に反して、これを実行してみるとステップ実行している間、セルの文字列書き換えを別タブで観測できました。セルの色変更と動作が違います。最適化の関係か、たまたまなのか不明です。

考えてみれば、人間同士が共同編集する時と起きることは原理的に同じはずです。内部的にはGrooveやGoogle Waveみたいにひとつひとつが編集命令としてキューイングされる作りなんでしょう。

関連文書:

  • 関連文書は見つからんがな

Posted by & filed under 開発.


このエントリはModern Common Lispの一部です。

 Common Lispのライブラリを利用するのに、以前はASDF-Installを使っていました。しかし、ASDF-Installは外部のシェルコマンドに依存するためWindowsでの利用が面倒だったり、接続先のサーバが落ちていてダウンロードできなかったり、ダウンロードできたとしてもビルドできないといったことが多くありました。

 これを解決するためにZach Beaneが開発したのがQuicklispです。現在BETA公開中で、いくつか制限事項はありますが、誰でも利用できるようになっています。

Quicklisp BETA

セットアップ

 まずはQuicklisp自身をインストールします。以下のリンクからQuicklispをダウンロードしてください。

 あなたのLisp処理系 (きっとSBCL以外でしょうね) を起動し、以下のコードを実行してください。

※注) もしプロキシを通す必要があれば:proxyキーワードにURLを文字列で渡してください。例: (quicklisp-quickstart:install :proxy “http://192.168.xx.xx:8080”)

 これでセットアップは完了です。~/quicklispというディレクトリができていることを確認してください。

 もしQuicklispのディレクトリを変更したい場合には、~/quicklispディレクトリを移動したあと、処理系のinitファイル (Clozure CLならば~/.ccl-init.lisp)の一部を修正します。

ライブラリのインストール・ロード

 Quicklispでライブラリのインストールをするにはql:quickloadを使います。このコマンドは試験に出るのでよく覚えておいてください。

 指定したライブラリがまだインストールされていなければ、サーバからダウンロードしてインストールします。ASDF-INSTALLと違って依存パッケージも同時にインストールしてくれるので非常に助かります。

ライブラリを探す

 Quicklispに登録されているライブラリを探すにはql:system-aproposを使います。

リポジトリをアップデートする

 Quicklispのリポジトリは毎月1回更新されます。ライブラリが更新されたり、追加されたり削除されたり。最新のライブラリにアップデートするには以下のコマンドを実行します。

ASDF2 – 登録されていないライブラリを使う

 Quicklispには既に多くのライブラリが登録されているとはいえ、まだ登録されていないライブラリもあります。また、自分が作ったライブラリやアプリケーションのロードには使うことができません。

 そこで、「ASDF2」を使ってローカルの指定のライブラリをロードできるようにします。ASDF2は多くの処理系で標準バンドルされているはずなので特にセットアップの必要はありません。

 まずはライブラリを置くディレクトリを作ります。ここでは~/.lisp/systemsにライブラリを置くものとします。

 そして~/.config/common-lisp/source-registry.conf.d/01-add-local-lisp.confに上のディレクトリパスを指定します。

 これで準備完了です。ASDF2は~/.lisp/systemsの中を再帰的に見て、その中のライブラリをロードできるようになりました

ライブラリのインストールと利用

 たとえばClackを使うには~/.lisp/systemsにソースをcloneします。

 Lisp処理系を立ち上げ、ql:quickloadしてください。

 これでClackが使えるはずです。以下のコードを実行して、http://localhost:5000/にアクセスしてみてください。“Hello, Clack!”と表示されるはずです。

 使えなかった場合は@nitro_idiotに報告してくださいね。

まとめ

 今回はQuicklispとASDF2によるライブラリの導入について解説しました。PerlやRubyに比べるとそれほど良い環境とは言えませんが、以前と比べてLispのライブラリ環境も悪くなくなってきています。これから数もどんどん増えていくことでしょう。

 次回は松山さんがEmacsとSLIMEの環境設定について書いてくれるはずです。


関連文書:

Posted by & filed under いろいろ.


先月ひっそり(単にぼくが知らなかっただけですが)、Google Apps Scriptにデバッガが乗っていました。ブレークポイント張ったりステップ実行したり変数の値を表示したりなどがブラウザ上でできます。ちなみにGoogle Apps Scriptはサーバサイドで動くJavaScriptです。

Google Apps Scriptでは、以前から次のようにEmacsのauto-completeみたいなことができました。

like auto-complete

今回、遂にEmacsのGUDみたいなことができるようになりました。

画面の行番号をクリックしてブレークポイントを張れますが、ECMAScript第5版で入ったdebugger文でも停止するようです。画面でブレークポイントを張れるのでdebugger文はなくてもいい気がしますが、ここで使わないと誰がdebugger文を使うのかという感じなので良かったと思います。


関連文書:

  • 関連文書は見つからんがな

Posted by & filed under 開発.


同僚の深町さんと「モダンCommon Lisp」シリーズを初めることになりました。今回はCommon Lisp処理系のインストール方法について解説します。

どの処理系を使うか

Common Lispには処理系が多数存在するため、プログラミングを初める前に、まずどの処理系を使うか決めなくてはなりません。商用ならAllegro CLでほぼ一択のようですが、お金がかかりますし、プロプライエタリソフトウェアですから、今回は候補から除外します。

無料で手に入る(フリーな)処理系としてはSBCLが有名です。多くのライブラリでサポートされている処理系であり、コンパイラの品質が高い(速いコードが生成される)という強みを持っていますが、スレッドサポートがかなり怪しいらしく(未確認)、またコンパイルに非常に時間がかかるという問題を持っています(開発のテンポに影響)。

SBCL以外には、例えばCLISPなどがありますが、今回は深町さんに教えてもらったClozure CLをおすすめしようと思います。

Clozure CLは、SBCLほどではないにしろ、多くライブラリでサポートされている処理系であり、また元々のサポートの対象であったDarwin系のOS以外にも、GNU/LinuxやFreeBSD、Solaris、Windowsに対応しています。深町さんはMac OS X 10.6で、僕はUbuntu 10.10でClozure CLを使っていますが、今までで致命的な問題になったことはないです。また、SBCLに比べて非常にコンパイルが速いのも重要な利点です。ただ、生成されるコードの品質はそれほど良くないので、開発時はClozure CL、運用時はSBCL、という使い分けが良いと思います。

Clozure CLをインストールする

現在での最新安定板はv1.6です。一応、次のURLから最新版を確認してください。

http://trac.clozure.com/ccl

ここではGNU/Linux x86_64にClozure CL v1.6をインストールする手順を説明します。Mac OS Xでもほぼ同じ手順でインストールできると思います。

まず~/optにリリースをダウンロードします。

cclディレクトリが作られ、その中に32bit用と64bit用の実行可能ファイルが置かれます。なぜSubversionなのかというツッコミはやめましょう。

32bit用と64bit用で実行可能ファイルの名前が異なるので、簡単なラッパースクリプトを作ります。次のURLから取得してください。またCCL_HOMEは適宜書き換えてください。

https://gist.github.com/858238

このスクリプトをPATH環境変数の通ったディレクトリにcclという名前で保存します。ここでは~/binに置きます。

最後にターミナルでcclを起動して、正しく動作すればOKです。

次回はQuicklispのインストール方法について解説します。

モダンCommon Lispシリーズ


関連文書:

Posted by & filed under いろいろ.


デブサミ行かなかったのと世情に疎いので知らなかったのですが、サイボウズラボの絶対エース奥(一穂)さんがDeNAに転職していました…

以下の辺りで身辺整理していたようです。

– http://labs.cybozu.co.jp/archives/2010-10-12-1.html
– http://developer.cybozu.co.jp/kazuho/2010/10/japanize-myling.html

残りtかn辺りを引き抜かれたら消えてなくなりそうです。

DeNAが巨人か阪神、サイボウズラボが広島に見えます。えげつない。


関連文書:

  • 関連文書は見つからんがな

Posted by & filed under いろいろ.


毎月末に原稿公開を予定していますが、なぜか3月にずれ込みました。「Emacsのトラノマキ」の原稿を公開します。

画面上のメニュー「ドキュメント」からたどれます。前号のauto-completeネタの続きです。著者は引き続き松山さんによる記事です。

今発売中のSoftware Design 2011年3月号の「Emacsのトラノマキ」は袖山さんがEmacsのGC(ガベージコレクション)について書いています。興味があれば買ってみてください。奇跡のように他の連載記事とGCネタが被りましたが。

Software Design (ソフトウェア デザイン) 2011年 03月号 [雑誌]


関連文書:

  • 関連文書は見つからんがな

Posted by & filed under いろいろ.


今日は年に何度かのブロガーになる日でした。salesforceのイベントにブロガー枠で招待される日です。

過去のレポート記事を挙げておきます。

salesforceのchatterで思ったこと
コラボレーションとマジックナンバー100
Cloudforce 2010レポート

元々、ブロガーと呼ばれること自体が恥ずかしいことでしたが、最近では更に、えっ今時twitterでもfacebookでもなくブログなんですか?、と別の恥ずかしさも加わりました。しかし物は考えようです。元々マイナスイメージだったブロガーに別のマイナス要素がかかったので、プラスに転じたと思えなくもありません。簡単に言うと、どうでもいい話です。

自分がブロガー枠に選ばれた内幕を中の人から初めて聞けました。内輪話なのでここには書きません。

さて、今回のイベントはいまいちでした。中の人にも直接伝えました。中の人も自覚していたので厳しい意見ですがここにも書きます。スピーカーや構成の問題と言うより、そもそも新しいネタが無いという致命的な欠陥を抱えたイベントでした。

(他のイベントの再利用という裏話はさておき)及川さんの話は面白かったです。新しいネタではなく開発プロセスの話です。salesforce.comがスクラムを使って開発効率を向上した話です。ぼくもこういう話をしたいものです。アリエルの開発プロセスはこんなに凄いんだぞ、という自慢話です。もっともアリエルの開発プロセスもそんなに悪くないという自負はあります。W社とは格が違う、と言えるぐらいのレベルにはあると思っています。しかし下を見ても仕方ないので上を見るべきです。

アリエルの開発もかなりスクラムっぽいと思っています。誰かの強力な意志でそうなったと言うより自然にそんな開発プロセスに行き着いたように感じます。3年以上前になりますがスクラムについて書いた記事があります。アジャイル関係の本にいつも似たような感想を書いている気がしますが気にしないでください。記事を読み返すと、だいたい今でも気持ちは変わっていません。ただ、1ヶ月のスプリント期間を妥当と書いているのは微妙です。1ヶ月は開発期間として短いと思っていて、当時も同じ気持ちだった気がするのですが、昔なので書いた時の気分を思い出せません。


関連文書:

  • 関連文書は見つからんがな

Posted by & filed under 開発.


誰も使わないだろうと思っていたのにバグ報告がきて、なおかつ恥ずかしいバグだったので、過去を亡き者にするためにpython websocket client 0.4.1をリリースをしました。pypiにもいるので、pip install websocket-clientでもインストールできます。

[続きはこちら]


関連文書:

Posted by & filed under 開発.


SunのJVMにはHeapDumpBeforeFullGCっていうオプションがあります。知ってました?このキーワードでぐぐっても200件程度しかひっかからないので知らない人も多いんじゃないかと思います。

あまり知られてなさそうなこのオプション。実はすごいできる子です。なんと、名前のとおりFullGC直前にヒープダンプだしてくれます。たとえばYoung領域使いすぎで昇格してしまうようなオブジェクトを探すときにこのオプション使うと大活躍してくれます。

このオプションは普通のオプションと違うので例によって-XX:+...で使います。こんな感じです。

これと似たようなオプションは他に以下のものがあります。大体名前で想像つきますね。

  • HeapDumpBeforeFullGC
  • HeapDumpAfterFullGC
  • PrintClassHistogramBeforeFullGC
  • PrintClassHistogramAfterFullGC

これらのオプションはおそらくJava6からしか使えないと思います。使えるかを確認する場合は以下のコードを試してみてください。この手のオプションを一覧してくれます。

パフォーマンスチューニングのお供にどうぞ。
おしまい。


関連文書: