SinatraをCGIで動かして、他のフレームワークと起動性能を比較してみた

実行速度的にも軽いのかな。以前、下記のエントリでやったように、CGI+rubyで性能比較してみようかな。

Sinatra良いかも - NAT’s Programming Champloo

こんな事を書いておきながら、長い間ほったらかしなので、SinatraCGI起動で試してみた。

続きを読む

iTunesで再生している曲をTwitterに投稿するAppleScript

Macで、iTunesで再生している曲をTwitterに投稿できるアプリとかないか調べてみたが、なかなか良いものがなかった。AppleScriptを使えばiTunesで再生中の曲名が取れる事が分かったので、自分でスクリプトを書いてみた。

tell application "iTunes"
	set thisTrack to current track
	set trackName to name of thisTrack
	set trackArtist to thisTrack's artist
	set trackAlbum to thisTrack's album
end tell

-- 投稿メッセージのテンプレート
set message to "今聴いている曲: " & trackName & " (" & trackArtist & "のアルバム「" & trackAlbum & "」より)"

-- Twitterを投稿するURL
set tweetUrl to "http://twitter.com/home?status=" & message

do shell script "open \"" & tweetUrl & "\""

このスクリプトを実行すると、ブラウザでTwitterサイトのホームページを開いて、iTunesで再生中の曲をメッセージ欄に入力してくれる。あとは適当にメッセージを編集するなどして、「投稿する」ボタンを押せば良い。

投稿メッセージのテンプレートを変えるには、「set message to ...」の所を変えれば良い。

またTwitterクライアントにTweetie(iPhone用じゃなくてMac用の方)を使っている場合、「set tweetUrl to ...」の所を下記のように変えると、ブラウザを開く替わりにTweetieの投稿用ダイアログを開くことができる。

set tweetUrl to "tweetie:" & message

Javaで音声ファイルを音量を制御しながら再生する方法

Java Soundで音声ファイルを再生する方法を調べたのだけど、音量を制御する方法がちょっと面倒だったので、覚え書き。
音声ファイルを再生するだけならClip#start()で良いのだけど、音量を制御するには、Clip#getContol()でFloatControl.Type.MASTER_GAINのコントロールを取得する必要がある。
取得したFloatControlに設定する値もデシベル単位なので、オリジナルの50%の音量で再生とかするのに、ちょっと面倒。対数計算が必要になる。(参考:Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle)
コードとしては、以下のようになる。

public void testPlayClip() {
	try {
		Clip clip = AudioSystem.getClip();
		AudioInputStream in = AudioSystem.getAudioInputStream(new File("test.wav"));
		clip.open(in);
		FloatControl control = (FloatControl)clip.getControl(FloatControl.Type.MASTER_GAIN);
		controlByLinearScalar(control, 0.5); // 50%の音量で再生する
		clip.start();
	} catch (Exception e) {
		e.printStackTrace();
	}
}

private void controlByLinearScalar(FloatControl control, double linearScalar) {
	control.setValue((float)Math.log10(linearScalar) * 20);
}

Objective-Cの勉強を始めてみた

詳解 Objective-C 2.0

詳解 Objective-C 2.0

こんな本を買ってみました。MacとかiPod Touch/iPhoneとかのアプリでも作ろうかなぁ、とか思って、まずプログラム言語の特徴をちょっと知りたかったので。

ちょっとパラパラと読んだだけだけど、私の知っているオブジェクト指向言語と比べると、Objective-Cって、C++C#の中間みたいな印象。C++ほど複雑でもないし、C#ほどC言語から離れた文法でもないし、という感じ。
言語的には、ガーベッジコレクトとかプロトコル(Javaのinterface相当)とかプロパティとかもあるし、最近のオブジェクト指向言語にある特徴は一通りある感じ。

やはり独特なのは、オブジェクトのメソッドなどを呼ぶときに使う、メッセージ式かな。

[aString copy]
[view cellAtRow:10 column:5]

こんな感じで、大括弧で囲む。メソッドの引数は順序でなく、メッセージキーワードを付けて指定する。
C++ともJavaともC#とも違った感じで、興味深い。

Sinatra良いかも

サイトのトップページに書かれているコード。これが、サクサク感をかもし出してくれています。

require 'rubygems'
require 'sinatra'

get '/hi' do
  "Hello World!"
end
http://d.hatena.ne.jp/shunsuk/20090422/1240401592

Sinatraか〜。数ページ程度でDBを使わない、軽いWebアプリをさくっと書くには良さそう。私はそういう用途にはRamazeを使っているのだけど、単純な記述量で比べると、クラス宣言が不要な分、Sinatraの方が優れているかも。
実行速度的にも軽いのかな。以前、下記のエントリでやったように、CGI+rubyで性能比較してみようかな。
rubyの軽いWebアプリケーションフレームワークを試してみた - NAT’s Programming Champloo

写真特大サイズ追加

http://api.xii.jp/itteharu/
写真特大サイズの機能を、イッテハルに追加しました。今まで選べたサイズの最大は320x240だったのだけど、 デジカメ写真ならもう少し大きいサイズでも貼り付けても良さそうなので、500x375の特大サイズも追加しました。


以下、貼り付け例。

続きを読む