2013/01/20


あけましておめでとうございます。本年も宜しくお願い致します。
今年も、皆さんの役にたたないプロジェクトの量産を目指し、一層の努力をして参る所存でございます。

さて、正月あいだ masui さんが mruby のビルドシステムを cruby で書き換えてて、僕も親父のマシンに mingw32 やら msysgit やらを入れて深夜に試してたんですが、昨日今日でだいたい動くようになった感じです。mrbgem.rake には殆ど何も書かなくても良くなりました。
mrbgem.rake には作者とライセンスを明記する部分があったので、これを期に僕の作った mrbgem のライセンスを統一して MIT にしました。
今後これらが業務で使われる方がいらっしゃったとしても心配無用。

masui さんの pull-req には git 管理されたフォルダも自動でビルド対象にする機能が含まれていたんだけど、それに合わせたか bovi さんが mruby 向けの gem コマンド mgem を書いてくれてた。
bovi/mgem - GitHub

A program to manage GEMs in mruby

https://github.com/bovi/mgem
このコマンドを gem install mgem gem コマンドからインストールすると
bovi/mgem-list - GitHub

A list of all GEMs for mruby to be managed by mgem

https://github.com/bovi/mgem-list
mgem-list というプロジェクトで管理されている gem ファイルを元に所定の位置に git clone してくれます。
mgem (Version 0.0.2) is a library manager for mruby

Usage:
  mgem size              How many GEMs are available?
  mgem list [active]     List GEMs
  mgem info *pattern*    Show detail information about a GEM
  mgem add *name*        Activate a GEM
  mgem rm *name*         De-Activate a GEM
  mgem search *pattern*  Search for GEMs
  mgem config            Generate a mruby build config including all active GEMs
  mgem update            Update the list of GEMs

Website:
  https://github.com/bovi/mgem
なかなな便利になったのではないでしょうか。最新版の mruby では build_config.rb に使う gem を明記する必要がありますが、それ用のコマンド(config)も用意されています。
今のところ、この github プロジェクトが rubygems.org の様な中央リポジトリになっているので、自分の作った gem を登録するには bovi さんに pull-request を送ると良いです。

ちなみに現状の mgem-list の中身は、とても mattn 無双でした。
mattn無双



詳しい内容は bovi さんのページで...
The mgem GEM - mruby.sh

How does it work To maintain a list of GEMs I created a repository called mgem-list . This repositor...

http://mruby.sh/201301040627.html
Posted at by




toilet mruby と言えば組み込み用途のイメージが高いですが、Windows で何度も ruby 拡張のビルドエラーを潜り抜けて来て、ある程度 ruby 拡張の仕組みも知っている僕としては mruby の方がソースが綺麗し精神衛生上良いと言いたいが、言ってしまうとどこかしらからかオノが飛んで来そうな昨今でございます。
最近はmrubyでウォシュレットの噴出を監視するシステムも登場し、「TOTO さん、そろそろ本気で mruby 組み込みウォシュレット 考えてみませんか」と言いたくなる状況です。
さて、そろそろ mruby にも GUI が欲しくなってきたので fltk3 を組み込んでみました。
mattn/mruby-fltk3 - GitHub
https://github.com/mattn/mruby-fltk3
mrbgems 化してあります。
まぁまぁ忠実に fltk3 を移植してあります。まだ全ての Widget が書けた訳ではないけど、簡単なアプリケーションを書くくらいなら出来る様になってきたので報告がてら記事にしようと思いました。

FLTK1 系を選んでも良かったのですが、FLTK1 は完全な utf-8 対応ではなく、かつ utf-8 対応した物はサードパーティプロダクトだったりします。fltk2 でも良かったのですが、どうやら最新は fltk3 という事で未来もある fltk3 を採用しました。
全てのオブジェクトは FLTK3 モジュール配下に入っています。

例えばウィンドウを作るのであれば window = FLTK3::DoubleWindow.new(00100100"mruby-fltk3")
window.show
FLTK3::run
こんな感じに。ウィンドウにボタンを足すのであれば begin メソッドと end メソッドの中でインスタンスを生成します。
window = FLTK3::DoubleWindow.new(00100100"mruby-fltk3")
window.begin
  button = FLTK3::Button.new(10108030"click me!")
window.end
window.show
FLTK3::run
begin にブロックを取る場合はブロック内で begin/end を行います。 window = FLTK3::DoubleWindow.new(00100100"mruby-fltk3")
window.begin do
  button = FLTK3::Button.new(10108030"click me!")
end
window.show
FLTK3::run
画像も扱えるので、例えば window = FLTK3::DoubleWindow.new(100100400430"mruby-fltk3")
window.begin do
  widget = FLTK3::Widget.new(1010380400)
  button = FLTK3::Button.new(103908030"load file")
  button.callback do
    fn = FLTK3::file_chooser("image file""*.{bm,bmp,gif,jpg,pbm,pgm,png,ppm,xbm,xpm}")
    image = fn ? FLTK3::SharedImage::get(fn) : nil
    if image.w > widget.w || image.h > widget.h
      if image.w > image.h
        temp = image.copy(widget.w, widget.h * image.h / image.w)
      else
        temp = image.copy(widget.w * image.w / image.h, widget.h)
      end
      image.release
      image = temp
    end
    widget.image = image
    widget.redraw
  end
end
window.show

FLTK3::run
これだけのコードで画像ビューワが出来上がり!
mruby-fltk3
なんだか mruby を組み込み用途以外で使ってるの、僕だけなんじゃないかと心配になって来ましたが負けません。戦います。
役にたつかどうか分かりませんが、遊びたい方はどうぞ。
Posted at by



2013/01/11


TwitVim で「あーこの人のこの発言、バズってるんだろうな」と思った時に FavStar を見る事があるんだけど、FavStar は最新の fav/rt 一覧しか表示してなかったので過去の物を表示する事は出来なかった。僕的にニーズがあったのでツィート単位に表示出来る様にした。
もちろん、TwitVim は一切触らない。やり方は以下の記事を参照。
Big Sky :: 他人が作ったVimScriptを一切触らず拡張する

普段twitterするときはtwitvimというvimscriptを使ってvimからやってるのだけど、たいがいこういうのって自分の思う機能が実装されていなかったり、違う実装になっていたりする...

http://mattn.kaoriya.net/software/vim/20110728094347.htm
まず FavStar を修正した。
FavStar mattn_jp という風にスクリーン名しか受け付けていなかったけど FavStar mattn_jp XXXXXXX でツィートIDも受け取れる様にした。そして function! TwitVimShowFavStar()
  silentredir => json
  silent! TwitVimShowCurbuffer
  silentredir END
  let curbuffer = eval(substitute(json, "\n"'''g'))
  let id = get(curbuffer.statuses, line('.'))
  if id != 0
    let user = substitute(curbuffer.buffer[line('.')-1], ':.*''''')
    exe "FavStar" user id
  endif
endfunction
TwitVim からツィートIDを抜き取って FavStar コマンドに渡す。
あとはこれのキーアサイン nnoremap <buffer> <leader>F :call TwitVimShowFavStar()<cr>
キーアサインの入れ場所は上記の記事を見て下さい。
これで TwitVim を見てる最中に <leader>F をタイプすれば個別の fav/rt が見れる様になりました。
めでたしめでたし。
Yes, 高洲クリニック
Posted at by