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への投稿もサポートしてくれると嬉しいです。

2009/11/05

PHP 5.3のインタラクティブシェルでは補完が効く

今日はじめて気がつきました。



PHP 5.2までは、インタラクティブシェルを起動した後、「<?php」と打ってから命令を実行していく流れになっていましたが、5.3からは最初から対話的に実行できるようになったようです。
本題の補完機能ですが、「ar」と打った後にタブキーを2度打つとズラッと候補が表示されるようになっています。そして候補が一つしかない状態のとき(ここでは「ars」まで打ちました)タブキーを打つと、残りと開始の括弧までが補完されます。これは便利かも。
ちなみに、インタラクティブシェル内で上キーを打つと、直前に実行した命令が表示されるようにもなっています。例えば上の画像の状態で上キーを打つと、直前に実行した「echo "hello world";」が再表示されます。また、一度インタラクティブシェルから抜けて、もう一度入り直した後でも、前回入力した命令の履歴が残るようになっています。
良い感じです。

2009/10/30

Eclipse 3.4 Ganymedeでは「Eclipse XML Editors and Tools」の3.1系が使えない?

「Help」→「Software Updates」からプラグインをアップデートし、Eclipseを再起動。その後いつも通りプロジェクト内からXMLファイルを開こうとしたら、
An error has occurred. See error log for more details.org.eclipse.wst.sse.ui.StructuredTextEditor.isBlockSelectionModeEnabled()Z
というエラーメッセージが表示されてXMLファイルが開けなくなってしまった。これは困った…。
で、このエラーメッセージをコピペしてGoogle先生に聞いてみたら、同じような悩みを持っている人を発見。

問題はどうやら「Eclipse XML Editors and Tools」というプラグインのバージョンにあったようです。アップデートしたとき、3.0系から3.1系になったのがいけなかったみたい。Ganymedeの場合は3.0系のほうが良さそうなので、上のページのアドバイス通りに、
  1. 「Help」→「Software Updates」
  2. 「Installed Software」タブ内の「Eclipse XML Editors and Tools」をクリック
  3. 「Revert Configuration」
  4. 履歴っぽい画面が現れるので、適当に日付をクリックして「Eclipse XML Editors and Tools」が3.0系のものを探す
  5. 「Finish」
このあとEclipseを再起動したら無事XMLが開けるようになりました。めでたしめでたし。

2009/06/21

Bloggerへの投稿テスト

こんにちは。Bloggerへの記事投稿テストです。
はてなダイアリーは最近重くなってきたので、他のブログサービスへの移動を検討しています。Bloggerで記事を書くかWordPress.comで記事を書くかで迷っていましたが、どうやらWordPress.comはCSSを編集するだけで年間1500円も払わないといけないみたいなので止めました。
よくプログラムのコードを書くと思うので、その表示のテストもしてみよう。
テスト
 (define (filter lis)
  (if (pair? lis)
      (if (number? (car lis))
          (cons (car lis) (filter (cdr lis)))
          (filter (cdr lis)))
      lis))
package pac;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import config.AppConfig;

public class Facade {
  
 private Facade() {
 }

 public static String put(String key) {
  AnnotationConfigApplicationContext acac = new AnnotationConfigApplicationContext();
  acac.register(AppConfig.class);
  AppConfig ac = acac.getBean(AppConfig.class);
  Generater gen = ac.generaterBean();
  return gen.generate(Database.find(key));
 }

}

Educators, generals, dieticians, psychologists, and parents program. Armies, students, and some societies are programmed. An assault on large problems employs a succession of programs, most of which spring into existence en route. These programs are rife with issues that appear to be particular to the problem at hand. To appreciate programming as an intellectual activity in its own right you must turn to computer programming; you must read and write computer programs -- many of them. It doesn't matter much what the programs are about or what applications they serve. What does matter is how well they perform and how smoothly they fit with other programs in the creation of still greater programs. The programmer must seek both perfection of part and adequacy of collection. In this book the use of ``program'' is focused on the creation, execution, and study of programs written in a dialect of Lisp for execution on a digital computer. Using Lisp we restrict or limit not what we may program, but only the notation for our program descriptions.
  • リスト1
  • リスト2
  • リスト3
  1. リスト4
  2. リスト5
  3. リスト6
さて、どうしようかな。