2010/05/17

MacのEmacs「Aquamacs」にSwank Clojureをインストールする

Aquamacsの2.0がリリースされたらしいので使ってみたいと思います。AquamacsについてはSourceForgeのニュース記事にいろいろ書かれています。今までClojureのコードを書くときはEclipseのCounterclockwiseを使っていました。Emacsは何度か挑戦して、何度も挫折してます…。
ということで、AquamacsでSwank Clojureを動かしてみます。

Aquamacsをインストール

http://aquamacs.org/からダウンロードして、インストール。

ELPAを使う

ELPAはEmacs LispのPackage Archiveらしいです。これを使ってSwank Clojureをインストールします。

まずAquamacsを立ち上げ、*scratch*バッファに以下のコードを入力します。


そしてコードの最後にカーソルを移動して、C-x C-eを実行する。その後M-x package-list-packagesでエンターキーを押すと、使用可能なパッケージのリストが表示されます。
ELPAでM-x package-list-packagesを実行したときのスクショ
こんな感じ。

Swank Clojureをインストール

ELPAのパッケージリストにカーソルがあることを確認した後、cmd-fを押し、「swank-clojure」とタイプします。これでリストの中でswank-clojureを見つけることができます。そしてswank-clojureをインストールすることを明示するため、その場でiを押し、xを押してインストールを開始します。
インストールが終わるとWarningエラーがいくつか出ますが、気にしなくて良いっぽいです。

以上です。

参考サイト

Install Clojure on Mac OS X and Aquamacs — Michael Schneider

2010/03/06

ウェブサイトを1つのデスクトップアプリケーションっぽく起動できる「Prism」を試してみた


Mozilla Labsで公開されている「Prism」を試してみました。このアプリケーションを使うと、タイトル通り、ウェブサイトをデスクトップアプリケーションっぽく起動できます。主な機能はhttp://prism.mozillalabs.com/features/で紹介されています。

使ってみる
FirefoxのAddon版と、Firefox無しでPrismが使えるスタンドアローン版が用意されているみたいです。スタンドアローン版はWindowsとMacに対応しています。僕はスタンドアローン版を使いました。FirefoxのAddon版は、たぶんWindows版のChromeに実装されている「アプリケーションのショートカットを作成」機能に近いものだと思います。Mac版Chromeにも早く実装されて欲しいなと思っていましたが、Prismがあれば不要かも知れません。

インストール
http://prism.mozillalabs.com/started/からスタンドアローン版をダウンロードして、適当にインストールします。

Prismを起動
インストールしたPrismを起動すると下の画像のようなウィンドウが表示されます。
URL
起動したいウェブサイトのURLを入力します。
Name
起動した際のアプリケーションの名前を入力します。
「Show navigation bar」と「Show status message and progress」
下の画像のバーを表示するかしないかのチェックボックスです。
Enable navigation keys
よくわかりませんでした。
Create Shortcuts
ショートカットを作成するかしないかという設定です。ここで作成されるショートカットの名前は「Tumblr.app」のようになります(Macの場合)。クリックすると既定のウェブブラウザが起動するショートカットではありません。
Icon
アプリケーションのアイコンの設定ができます。アイコンのデフォルトはFaviconで、command+Tab (WIndowsではAlt+Tab)を押したときとかMacのDockに表示されたときにアイコンがぼやけるので、解像度の高いアイコンをここで設定するときれいかも知れません。

ウェブサイトを起動
設定を終えると自動でウェブサイトが起動されます。「status messages and progress」
のバーを表示させている場合は、そこからフォントの設定やプロキシの設定、印刷ができます。あとAddonの設定もできるようですが、その前にAddonの追加方法がわかりませんでした。
まとめ
Prismを使えばウェブブラウザを起動せずとも指定したウェブサイトを見ることができます。「もはやこれはデスクトップアプリケーションですよね」みたいなUIのウェブアプリケーションに使用すると効果的だと思います。

2010/03/03

Posterousに投稿できるChrome Extension「Posterous for Chrome」をインストールしたよ


タイトル通り。Posterousに簡単に投稿できる方法が無いかなーと思ってExtensionを探したら見つけました。最近ギャラリーに追加されたっぽいです。

Posterous for Chrome - Google Chrome extension gallery

機能はたぶんPosterousが提供しているブックマークレットと同じだと思います。つまり、
  1. Extension(ブックマークレット)を呼び出すと投稿フォームがその場にポップアップ表示される
  2. ページ内の画像や動画を選択して投稿できる
  3. ページ内の文章をマウスで選択→引用して投稿できる
  4. 1と2に自分のコメントが付加できる
という機能が備わっています。まだあんまり使ってないからこのくらいしか知らない…^^;

「ブックマークレットと同じ機能ならブックマークレットで良いじゃない」などと思われそうですが、ブラウザのブックマークバーを表示しなくても1クリックで投稿フォームが表示できるのは便利だと思います。Chromeのブックマークバーはロケーションバー(で呼び方は合ってるのかな?URLとExtensionのアイコンとかが表示されてるバー)の下に1段まるまる使って表示して、ブラウザの表示スペースを狭くするから好きじゃないんですよね。その点Firefoxはブックマークバーの位置を移動できるので良いと思います。他のブラウザはよくわかりません。

あ、あと、ポップアップされた投稿フォームの右下にある「Advanced Options」から、
  1. タグの追加
  2. 投稿の公開非公開の選択
  3. Autopostするかどうかの選択
ができるのは便利だと思います。特に「タグの追加」が個人的には一番嬉しくて、Bloggerに手軽に投稿できるChrome Extensionに欲しいなあと思っていました。Extensionを使ってその場で投稿した後、わざわざその投稿された記事のページに行ってタグの追加をするのは面倒なので。

というわけで「Posterous for Chrome」を使って興味深い画像などにコメントを付けて楽しみたいと思います。

2010/02/26

Clojureのcontains?関数

contains?関数はコレクションにキーが存在するかどうかを確かめるために使う。
> (contains? {:h "hoge" :f "fuga"} :h)
true
だから下のコードのように値の存在を確かめることはできない。
> (contains? ["hoge" "fuga"] "hoge") ; 値を指定
false
> (contains? ["hoge" "fuga"] 0) ; キーを指定
true
値の存在を確かめるにはsome関数を使うのが良さそう。
> (some #(= "hoge" %) ["hoge" "fuga"])
true
> (some #(= "hoge" %) (vals {:h "hoge" :f "fuga"}))
true
ただこの場合、存在しなかったときはfalseではなくnilが返ってくる。
> (some #(= "durarara" %) (vals {:h "hoge" :f "fuga"}))
nil
(contains? ["x","y"] "x") => false; Works as designed. This design confuses me. #clojure #novice
というTweetを見かけたので書いてみました。

追記(2010/02/27 00:06):
(some #(= x %) coll)の代わりになるincludes?という関数がclojure.contrib.seq-utilsに用意されていた。こっちのほうがスマートかも。
> (use '[clojure.contrib.seq-utils :only (includes?)])
nil
> (includes? ["hoge" "fuga"] "hoge")
true
> (includes? (vals {:h "hoge" :f "fuga"}) "hoge")
true
> (includes? (vals {:h "hoge" :f "fuga"}) "durarara")
false

追記(2010/02/27 00:38):
動作環境は、Clojure 1.1.0とclojure-contrib 1.1.0です。

2010/02/21

Clojure用ビルドツールのLeiningenをインストールする

環境
  • Mac OS X 10.5.8
  • Java 1.6.0_17
  • Leiningen 1.1.0
流れ
以下のコマンドを実行する。
$ cd /usr/local/bin/
$ wget http://github.com/technomancy/leiningen/raw/stable/bin/lein
$ sudo chmod a+x lein
$ sudo lein self-install
おしまい。

2010/01/18

Common Lispの「#'」オペレータはClojureでいうなに?

Clojureを勉強しようと思って「On Lisp」を読み始めました。Common Lispで書かれているソースコードをClojureに翻訳しながら読もうというたくらみです。
で、さっそくつまずきました。p.12-13にこんなコードがありました。
> (defun double (x) (* x 2))
> #'double
#<Interpreted-Function C66ACE>
このプログラムの「#'」オペレータをClojureでどう書くのかがわかりません。でも見た感じ、type関数に近いような気がします。
> (type double2)
chap02.defun$double2__124
> (type 10)
java.lang.Integer
doubleという関数を定義しようとしたらエラーになったので、double2にしました。
…うーん、やっぱり違うかも。

2010/01/08

Chromeのエクステンション「Blog This!」を使ってみた

Google
google.com上で「Blog This!」のアイコンをクリックしたら、上のリンクが投稿フォームに自動で挿入された。投稿フォームはポップアップウィンドウとして現れるんだけど、その中ではタグ付けとか動画・画像のアップロードとかができないから、ちょっとシンプル過ぎて使いづらいかも。
Taberareloo」を使ってTumblrに投稿、とかの方が良いかな。Tumblrはもともとクリップした記事に追加で画像を付加する、みたいな使い方をするようなサービスじゃないし(僕が勝手にそう思ってる)。Taberarelooさん、できればBloggerとposterousへの投稿もサポートしてくれると嬉しいです。