non vorrei lavorare

昔はおもにプログラミングやガジェット系、今は?

mrubyでaobenchを動かし、GIFアニメを出力できるようにした

こんばんは、奥さんが出張のため、またまた実家に来ています。3歳ともうすぐ5歳になる息子たちも一時期に比べ、電車での世田谷の自宅から、中野の実家までの移動も楽になってきたことを実感してます。@kjunichiです。

mrubyでaobenchを動かし、動画にする

静止画はつまらないので、高速化して、GIFアニメを出力できるようにした。

f:id:kjw_junichi:20160723175205g:plain

成果物

build_config.rb

conf.gem :github => 'kjunichi/mruby-aobench-native'
conf.gem :github => 'kjunichi/mruby-mrmagick'

aoanim.rb

s0 = {:x => -2.0, :y => 0.0, :z => -3.5}
s1 = {:x => -0.5, :y => 0.0, :z => -3.0}
s2 = {:x => 1.0, :y => 0.0, :z => -2.2}

gif = Mrmagick::ImageList.new

for i in 1..50
  Ao.init_scene(s0, s1, s2)
  img = Mrmagick::ImageList.new
  img.from_blob(Ao.render)
  gif.push img
  s0[:x] = s0[:x] + 0.1
  s1[:x] = s1[:x] - 0.03
  s1[:z] = s1[:z] + 0.08
  s2[:x] = s2[:x] + 0.05
end

gif.write("ao.gif")

aobenchのネイティブ化の成果

bm_ao_render.rbは256x256の出力サイズに変更済み。

$ time build/bench/bin/mruby benchmark/bm_ao_render.rb >aorender.ppm

real    2m51.207s
user    2m48.690s
sys 0m1.311s

$ time bin/mruby ao.rb 
fname = ao.ppm

real    0m1.555s
user    0m1.510s
sys 0m0.015s

まとめ

mruby-juliaを作ったので、aobenchをJuliaで動かし、 これをmruby-juliaから使うことで、mrubyのaobenchを 速くしたという記事を書きたかったが、現状の自分のjulia力だと aobenchが速くならず、それならばということで、Cのオリジナル 実装をちょっと変更して、mruby側にオンメモリーppmを出力 して、mruby-mrmagickをオンメモリーのデータを扱えるようにすることで、 このデータをGIFファイル化が可能となった。

関連記事

12年前の記事

6年前の記事

1年前の記事

aobenchをjuliaでやってみた

おはようございます。長男は初のお泊まり保育を無事終えて、ちょっとたくましくなって帰ってきたきがします。その一方、次男は相変わらず、ウンチしない、言うこと聞かないという状態の@kjunichiです。

背景

mruby-juliaなる謎のmrbgemを作成中、mruby版のaobenchを見つけるも、 Julia版は見つけられなかった

mruby版のaobench

mruby版のaobenchは、mrubyのソースに付属している。

やってみた

f:id:kjw_junichi:20160715074017p:plain

比べてみる

time ./a.out 

real    0m1.569s
user    0m1.550s
sys 0m0.007s

time ~/work/mruby/mruby-julia/mruby/bin/mruby bm_ao_render.rb >mrbao.ppm

real    0m21.985s
user    0m22.110s
sys 0m0.202s


time /Applications/Julia-0.4.6.app/Contents/Resources/julia/bin/julia ao.jl 

real    0m7.082s
user    0m7.195s
sys 0m0.213s

参考資料

d.hatena.ne.jp

関連記事

4年前の記事

3年前の記事

2年前の記事

2年後の記事

TLで「mruby」を検索したらmrubyのコントリビュータになれた

こんばんは、今日は長男が初めて、親元を離れて保育園に泊まるお泊まり保育の日です。@kjunichiです。

TLでいつものようにmruby関連の何か動きはないかチェックしていたら

貼り付けたツイートではmrmagickであたかも検索した様に言ってますが、実際は、「mruby」でツイッター検索した際に発見しました。

初めてmruby本体にプルリク投げた

github.com

マージされた!

f:id:kjw_junichi:20160708201520j:plain:w500

プルリク作成時に学んだこと

C99で書くが、VC++を考慮して、変数の宣言はブロックの先頭にする

プルリク出そうとしたら、

mruby/CONTRIBUTING.md at master · mruby/mruby · GitHub

を読めと出てきて、知ることができた。

for ( int i = 0; i < num_files; ++i ) {

このような書き方はダメらしい。

definedはC90から導入された

#ifdefは知っていたが、今回は、条件を複数書きたくて、ググって調査して学んだ。

今回のプルリクで解決したこと

C++とCのmrbgemを混在させた際に、Cで記述されたmrbgemでもMRB_TRYが使えるようになりました。

関連記事

9年前の記事

4年前の記事

1年後の記事

2年後の記事