mojavy.com

TOMLノススメ

April 26, 2013 at 08:21 PM | categories: tips, toml |

github

TOMLとは

https://github.com/mojombo/toml

Tom's Obvious, Minimal Language (TOML) とはgithubの中の人が提案している設定ファイルのためのミニ言語で、以下のような特徴があります。

  • 人間が読み書きしやすい
  • 標準的なデータ型が利用できる
  • 曖昧さが発生する余地が極力排除されている
  • パーサをかくのが簡単

なぜTOML?

例えば、YAMLを設定ファイルに使っているシステムは多いですが、YAMLの仕様書は80ページもあり正しく使うのは意外と大変です。1

またJSONはカッコやダブルクオートの割合が多すぎますし、コメントも使えません。2

TOMLをつかえばそのようなストレスはありません。

TOMLの使い方

TOMLの書き方は本家のドキュメント をみてもらえばすぐわかると思います。

TOMLのライブラリは各種言語に対応したものが既にたくさんあります。 言語によっては複数の実装が存在するものもありますが、とりあえずはgithub上でのstarの数が一番多いものから試すといいと思います。

わざわざ説明するほどの内容でもないですが、ここでは一応rubyでの使い方を紹介します。 gem install tomlでインストールして、以下のようにするだけです。YAMLの場合と大体同じですね。

require 'toml'

TOML.load("thing = 9")
# => {"thing" => 9}

TOML.load_file("my_file.toml")
# => {"whatever" => "keys"}

その他

  • TOMLでは日付型も定義されていて、それもUTC固定というのが地味にいいです
  • githubのコードハイライトは既にTOMLに対応してます
  • emacsユーザはtoml-modeというのがmelpaに登録されているので、M-x list-packagesからインストールできます。

まとめ

TOMLという設定ファイルのための新しいフォーマットを紹介しました。 設定ファイルにYAMLやJSONつかってるひとはTOMLに移行すると幸せになれるかもしれません。


  1. 仕様を正確に実装したYAMLパーサはほとんど存在しないとかいう話もちらほら 

  2. https://github.com/mojombo/toml/issues/2  



Quicklinks 5

April 23, 2013 at 08:20 PM | categories: quicklinks |

ruby

MessagePack

https://github.com/msgpack/msgpack/issues/121

盛り上がってたのはもう2か月くらい前ですが議論はまだ進行中のようです。 技術的な面だけでなく日本のコミュニティの外国からの見えかたとか政治力とかといった点も興味深かったです。

toml

https://github.com/mojombo/toml

日本でLTSVが流行ってたくらいの時期にtomlというミニ言語も流行っていたらしいです。 あらゆる設定ファイルはこのフォーマットになればいいと思います。

RubyMotion

http://www.rubymotion.com/

rubyをつかったiOSアプリのためのツールチェイン。 rubyのコードをllvmベースのマシン語にコンパイルするので高速に実行できるとのこと。 既存のrubyコードがすべてそのまま動くというわけではないみたいですが、XCodeとObjective-C使わなくていいというのは魅力的ですね。

MobiRuby

http://mobiruby.org/

これもrubyでiOSアプリをつくるためのものですが、こちらはmrubyをベースにしたruby実行環境をiOSの上に構築するので既存のrubyのコードがほとんどそのまま動くそうです。

Ruboto

http://ruboto.org/

こっちはrubyでAndroidアプリをつくるためのもの。jrubyベース。 これに関しては別途記事書きました

genome compiler

http://www.genomecompiler.com

塩基配列をリッチなUIでデザインするためのエディタ的なもの。 ゲノムをソースコードのアナロジーでつかうならコンパイルは遺伝子発現だと思うけど、これで実際にできるのはデザインした配列を生合成業者に注文するところまで。

七葉院まゆせ

http://shichihain.com/

CVは金元寿子さんだそうです。帰省の際は両備バス利用したいと思います。

その他

つかれてきたので以下簡易版



inf-php.elがmelpaに登録されました

April 21, 2013 at 04:56 PM | categories: php, emacs |

emacs

先日つくったinf-phpmelpa に登録されました。1

emacs24 以降をつかっている人はM-x list-packages からinf-phpをインストールできるようになります。


  1. 初めてmelpaにpull requestを送ってみましたが、送って1分でmergeされるという爆速対応でした。 



emacsでphpのインタラクティブシェルを動かすinf-php.elを書いた

April 05, 2013 at 07:49 PM | categories: php, emacs |

emacs

phper人口は多いはずなのになぜかどこにも見つからなかったので1emacsでphpのインタラクティブシェルを動かすためのinf-php.el を書いた。

install

auto-installがはいっていれば、(auto-install-from-url "https://raw.github.com/taksatou/inf-php/master/inf-php.el")で、はいってなければ inf-php.el をダウンロードして適当にload-pathの通った場所に配置して、.emacsに以下を追記

(require 'inf-php)

usage

現状のキーバインドは以下の通り

(define-key php-mode-map "\C-c\C-s" 'inf-php)              ;; inf-phpを起動する
(define-key php-mode-map "\C-c\C-z" 'php-switch-to-inf)    ;; inf-rubyバッファに切り替える
(define-key php-mode-map "\M-\C-x" 'php-send-definition)   ;; 現在カーソルがあるところの関数をinf-phpに送る
(define-key php-mode-map "\C-c\C-x" 'php-send-definition)  ;; 同上
(define-key php-mode-map "\C-c\M-x" 'php-send-definition-and-go)  ;; 同上だが送った後バッファを切り替える
(define-key php-mode-map "\C-c\C-r" 'php-send-region)             ;; 現在のregionを送る
(define-key php-mode-map "\C-c\M-r" 'php-send-region-and-go)      ;; 同上だが送った後バッファを切り替える
(define-key php-mode-map "\C-x\C-e" 'php-send-last-sexp)          ;; 直前のsexpをinf-phpに送る

misc

フィードバック、要望等ありましたらgithubからおねがいします。


  1. と思ったら、php_repl なるものが存在していた。php_replのほうが機能的には充実してそう。inf-phpは依存がほぼないのでインストールが簡単という点がメリットなのでまあよしとします(2013/04/05 20:57:35 追記) 



Rubotoを使ってRubyでAndroidアプリをかく

March 29, 2013 at 09:53 PM | categories: android, ruby |

ruboto

最近iOSアプリ界隈ではRubyMotionMobiRubyが盛り上がってきてますが、AndroidでもRubotoをつかえば簡単にrubyで開発することができるようになります。

そもそもjavaで実装された処理系であれば大抵javaクラスの呼びだしは簡単にできるようになっているので、jrubyやjythonでandroidアプリを開発することは以前から可能でした。 しかし、以下のような問題があって実際にやるとなるとそれなりに面倒なものでした。

  1. jrubyやjythonをdalvikvm用バイナリ(dex)にコンパイルするのに時間がかかる1
  2. androidのjavaでは使えない機能を使って処理系を実装してある場合があるので、何らかの方法で回避する必要がある
  3. スクリプトのソースファイルの配置やパスの設定を自分でやる必要があり、パッケージングが面倒
  4. アプリのフットプリントが大きくなる2

Rubotoをつかえばこのあたりの面倒をみてくれるので、ほとんどjavaを書く必要がなくなります。Ruboto自体は結構前からありますが、ここ1年くらいでもろもろの機能が充実してきて大分実用的になってきた感があります。

以下Rubotoの使用方法について簡単に紹介します。

インストール

gem install ruboto
gem install jruby-jars

また、ANDROID_HOME環境変数の設定と、android sdkの tools/platform-tools/にはあらかじめパスをとおしておきます

雛形の生成

ruboto gen app --package org.rubyandroid.new_demo

# 以下のようにしてより詳細に設定することもできます
# ruboto gen app --package org.rubyandroid.new_demo --path ./myapp --name MyApp --target android-17 --min-sdk android-10 --activity MainActivityName

ビルドとインストール

rakeからビルドできるようになっています。また、rubyスクリプトの更新はコンパイル不要で反映できます。 あとは普通にrubyを書くだけです。

cd new_demo
rake
rake install

#
# edit ruby scripts..
#

rake update_scripts

rubygemsを使う

通常のGemfileと同じ内容を、Gemfile.apkという名前のファイルに書いてプロジェクトのルートディレクトリに置いておけば、rakeした際にlibs/bundle.jarを生成してapkにいれてくれます。

詳細は以下の例を参考にしてください。 https://github.com/ruboto/ruboto/wiki/Tutorial%3A-Using-an-SQLite-database-with-ActiveRecord

補足

rubotoではjrubyの実行環境は別途Ruboto Core platformというapkで提供されています。そのためアプリ本体にruby処理系を同梱する必要がなく、省サイズでコンパイルも速くなるというメリットがあります。しかし、このやり方だとRuboto Core platformを別途インストールしてもらう必要がでてきてしまい、実際にGoogle Playで配布するようなアプリでは受け入れ難いと思います。

これを回避する方法も提供されていて、プロジェクトを生成する際に--with-jrubyというオプションをつければjrubyを同梱したapkをビルドできるようになりますが、この場合は前述のメリットはうけられなくなります。ただ、コンパイル時間に関しては、rubyスクリプトだけを触っている限りは、dexの再コンパイルは必要ないのでそれほど気にならないと思います。

まとめ

  • androidで素のjrubyを使うのは茨の道ですが、rubotoを使えば非常に簡単にrubyを使えるようになります
  • jrubyなので普通のrubygemsやjavaでかかれたライブラリもそのまま使えます
  • javaで開発した場合はコンパイル〜再インストールが毎回必要になりますが、.rbの更新反映は高速にできるので開発効率があがります
  • まだそれほど使い込んでないので思わぬはまりどころがあるかもしれません

  1. dxが分割コンパイルに対応してないので回避しづらい 

  2. ファイルサイズも実行時のメモリ使用量も 



About Me

pic
mojavy

Recent posts






Categories



Badges