Monday, October 10, 2011

jQuery+jsonpでエラーハンドリング

jQueryの$.ajaxでjsonpを使うと、errorハンドラが発火しない。jQuery+jsonpでエラーハンドリングが必要なケースは、jquery-jsonpを使う。

$.jsonp({
  url: url,
  dataType: 'jsonp',
  callbackParameter: 'callback', // パラメータ名がjsonpではなくcallbackParameter
  success: function(data, status) {},
  error: function(XHR, textStatus, errorThrown){}
});

参考:jQuery ajax (jsonp) ignores a timeout and doesn't fire the error event

Thursday, September 15, 2011

Cameleon : HTTPスタブ フレームワーク

Rubyで書かれたHTTPのダミー/モックサーバーを手軽に作るためのツール、Cameleonをリリースしました。

仕事でよくHTTPの外部システムを使うアプリを作ることがあるのですが、Cameleonはその外部システムのモックを簡単に作るために開発しました。何度か実際の開発案件で利用しています。

使い方はRuby on Railsの感じを参考にしています。

特徴

  • 基本はレスポンスのファイルをフォルダに配置するだけ
  • "_switch.rb"というシンプルなRubyのDSLでレスポンス用のファイルを選択
  • RESTfulなサービスのモックも簡単に作成できる(HTTPメソッドサポート)

インストール

Rubygemsで一発インストール

$ gem install cameleon
インストールできるとcameleonコマンドが使えるようになります。

Getting started

まずは、cameleonのプロジェクトをnewコマンドで作ります。

$ cameleon new your_project_name
できたディレクトリに移動してserverコマンドを実行するとデフォルトでポート9292でサーバーが起動します。
$ cd your_project_name
$ cameleon server
別のターミナルを立ち上げて、curlでテストしてみましょう。
$ curl http://localhost:9292
Hey, I am cameleon!
Edit response folder to change response whatever you want.
see README.md more detail.
はい、とりあえず動いていることは確認できました。

使い方

たとえば次のようなインターフェイスを作成することを考えます。

  • URLのパスが/path/to/interface
  • レスポンスは単純に"ok"
この場合、cameleonではresponse/path/to/interfaceディレクトリを作成し、その中にokと書いたファイルをdefault.txtとして保存すればOKです。
$ mkdir -p response/path/to/interface
$ cd response/path/to/interface
$ echo "ok" > default.txt
curlでテストしてみましょう。
$ curl http://localhost:9292/path/to/interface
ok
同様のことはgenerateコマンドを使うとより簡単です。ここでは/path/to/fooに新しいインターフェイスを作ってみます。
$ cameleon generate path/to/foo
こちらもテスト。
$ curl http://localhost:9292/path/to/foo
edit me: response/path/to/foo/default
作成できてますね。レスポンスは必要な内容に書き換えて下さい。

_switch.rb

普通アプリ開発で利用するのであれば、モックとはいえ、レスポンスをリクエストに応じて変化させる必要があるでしょう。そのときはフォルダ内に"_switch.rb"というファイルを作成し、その中でどのレスポンスファイルをレンダリングするかを選択します。

_switch.rbはRubyで自由に記述できます。レスポンスの内容を切り替えるためには、renderメソッドでレスポンスファイルを選択します。renderメソッドが呼ばれると、そこで_switch.rbからはすぐに抜け、以降の処理は継続しません。逆に、最後までrenderメソッドが呼ばれなかった場合は、defaultで始まるファイルをレンダリングします。また、_switch.rbではparamsにリクエストパラメータが格納されているので、これを使ってレスポンスを選択するといいでしょう。

_switch.rbのサンプルです。

# you can access URL parameters by 'params'
case params[:key]
when "foo"
  # curl http://localhost:9292/gallery/params?key=foo
  render "foo.txt"
when "bar"
  # You can also use POST or PUT. See 'rest' more about hadling HTTP methods.
  # curl -XPOST http://localhost:9292/gallery/params -d"key=bar"
  render "bar.txt"
end

# if else, render "default" (any extention acceptable) file.

Gallery

galleryコマンドで、response/galleryディレクトリにサンプルが出力されます。最初は_switch.rbで使えるAPIなどの参考になるとおもいますので利用して下さい。

$ cd YOUR_CAMELEON_HOME
$ cameleon gallery

私はけっこう便利に使えているので、ぜひ利用してみて下さい。

Wednesday, August 31, 2011

markd

markd is rich html builder for markdown, and is especially focused on printing purpose. You can get well-formatted printings (or PDF by preview) when you print html using modern browser (such as Google Chrome, Firefox, Safari).

Source code is available on github.

markd is based on bluecloth and google code prittify.

features:

  • Well-formatted HTML with CSS
  • Good style for printings
  • Auto numbered chapters
  • Code Highlighting

Installation

You can install markd using RubyGems as below:

$ gem install markd

Usage

Build html from markdown:

$ markd -o out_dir markdown.md
where markdown.md is target markdown file and out_dir is directory that html/css/js files are generated into.

Use -h (or --help) option to show detail.
$ markd -h

License

markd is released under the MIT license.

Enjoy!

Monday, August 29, 2011

Facebookのユーザーのサムネイル

Facebook からユーザーのサムネイル画像を取得するのは次のURL。
<img src="http://graph.facebook.com//picture?type=square" />
UserIDを取得するのは、facebook_oauthでは
client = FacebookOAuth::Client.new(
  :application_id     => "your application id",
  :application_secret => "your application secret",
  :token              => "your token"
)
user_id = client.me.info["id"]

Thursday, August 25, 2011

markd

markdを公開しました。Rubyで書かれたMarkdownをHTMLに変換するツールです。特にソースコードを含むドキュメントを簡単かつ奇麗に作成することができます。ソースはgithubから。

念のため説明すると、markdownはeメールの装飾でよく使われる書式でテキストファイルをマークアップするフォーマットです。 githubに登録されているプロジェクトの多くのトップでREADME.mdが表示されいますが、これがmarkdownです。markdown記法についてはこちらのページが詳しいです。

markdはそのmarkdown形式のファイルからHTMLファイルを出力するコマンドラインツールです。markdの出力はHTMLですが、ブラウザから印刷することでそれなりの品質のドキュメントとなることを目指しています。

markdの特徴
  • ソースコードがカラーリングされる
  • h1, h2タグに章番号が自動で振られる
  • ブラウザからの印刷に最適化されている
RubyのMarkdownプロセッサには既にblueclothなどがあります。markdも内部でblueclothを利用しています。 markdはblueclothの出力結果に対してHTMLを整形し、CSS/Javascriptを追加してデフォルトで一通りレイアウトされた結果を出力します。

インストール

Rubygemsでインストールできます。
$ gem install markd

使い方

markdコマンドに引数でmarkdownファイルを渡します。
$ markd markdown.md
デフォルトではdocsというディレクトリが作成され、その中にHTMLファイルなどが生成されます。出力先を変更したい時には-oオプションを使います。
$ markd -o OUTPUT_DIR markdown.md
この例ではOUPUT_DIRというディレクトリに結果が出力されます。

ライセンス

MITライセンスです。

Tuesday, April 12, 2011

gitで任意のファイルを、特定のリビジョンとGUIで比較(mac)

gitで任意のファイルを、特定のリビジョンとGUIで比較したい。Macの場合、GitXだとできないっぽい。 そこで、XCodeと一緒に入るFileMergeを使って差分をみる。
$ git difftool -t opendiff -y {revision} -- {path/to/file}

Monday, February 09, 2009

Pythonで動的にメソッドを呼ぶ

Pythonで文字列からメソッドを呼ぶ方法。
meth = getattr(obj, 'method_name')
meth()

Sunday, June 29, 2008

Mac Portsでいろいろインストール

作品を制作するにあたって、Macにソフトをいろいろインストール。昨日今日とMac Portsを使ってUnix系のソフトをインストールしていた。ちなみにMac PortsはUnix系のオープンソースのソフトをネット経由でソースをダウンロード、コンパイル、インストールしてくれる便利ツール。さらに良いのは、あるソフトが依存しているライブラリ等も同時にインストールしてくれるので、インストールの順番等をこちらが気にしなくてよいこと。Unix / Linux系の世界では同等のソフトは普通に使われているが、Macだと開発者系の人以外はあまり知らないのでしょうか。そんなことも無いかもしれませんが。今回はgnuplotが使いたかったのでとりあえず入れて、それからついでとばかりに次々にインストールした。以下、メモ。
gnuplot
グラフを書くツール。科学技術/Unix系では業界標準。
octave
Matlab相当の科学技術計算を行うためのツール/(プログラミング)環境
clisp
プログラミング言語「Lisp」の実装系
ImageMagick
画像処理ライブラリ/ツール
OpenCV
Intelが開発しているコンピューター・ヴィジョン・ライブラリ
wget
ダウンローダー。サイトを丸ごとダウンロードとか。
特にoctaveはインストールに(というかコンパイルに)異様なほど時間がかかった。依存ライブラリも多く、gcc4.2のコンパイルで相当な時間を使っていた。octave全部で2時間くらい?しかも一度目は失敗した。他のアプリをインストール後にもう一度トライしたらうまく言ったが、何が悪かったかは不明。

Wednesday, January 09, 2008

mixiのatom

mixiはatom pubに対応しているようだ。 atom pubのワークスペースには以下のURLからアクセス可能。 http://mixi.jp/atom/notify その中のcollection要素の中に、個人のatomフィードへのURLが 例)
<collection href="http://mixi.jp/atom/notify/r=*/member_id=***">

Monday, March 12, 2007

Flash7からJavascriptを呼ぶ

FlashからgetURLを利用してjavascriptを呼ぶ時、Flash Player7の組み合わせでうまく動作しなかった。 原因はobjectタグおよびembedタグのallowScriptAccessが"sameDomain"に設定されていたからで、これを"always"に変更すると正しく動作した。

Sunday, July 30, 2006

prototype.js

prototype.jsを使ってPOSTでデータを送信するプログラムを作るとき、methodは'post'のように小文字で書かないといけないので注意。 以下サンプル。 function upload(){ var url="http://address"; var body = "This is body."; var myAjax = new Ajax.Request( url, { method: 'post', postBody: body, onComplete: function(){ alert("complete"); }, onFailure: function(){ alert("failure"); }, onException: function( o, e ){ alert("exception: " + e); }, onSuccess: function(){ alert("success"); } }); }

Sunday, June 04, 2006

Glitch

取り込んだオーディオをリアルタイムにカットアップしてループさせるVSTプラグイン。 Windowsのみらしい。Free。

Monday, May 29, 2006

scriptographer

イラストレータをJavaScriptで制御。 こういうの欲しかった! scriptographer procesingのリンクで発見。

Monday, May 22, 2006

耳音響放射

人間の耳は音を認識するために自らも発信し、音を出している。 Beyond Discovery 新生児における耳音響放射の臨床応用

open technica!

杉森大輔個人の技術情報を整理するためのブログ、open technicaを開設!