sdl2rのそのままじゃないところ

一応、sdl2rはSDL2そのままの形でRubyから使えるというのが売りなのだが、そもそもがC用のライブラリであるだけに、どうしてもそのままでは困ったちゃんな部分があって、Ruby向けに修正しているところがいくつかある。そのへんを書いておこうと思う。

sdl2rの使い方

現在、Ruby用SDL2バインダのsdl2rをなんとなく作ってみている。 基本的にはSDL2の関数やマクロをそのまま実装した感じで、そのままだと困っちゃう部分に関してはちょこっとだけ手を入れている。SDL2のラッパなのでMacでもLinuxでもビルドできれば動くはずで…

SDL2の使い方

SDL2は日本語の情報があんまりなくて、SDL2そのままの使い勝手でRubyから使えますというライブラリを作っても、使える人は限られるのではないかと言うことで、基本的なことを書いておくことにした。とりあえずはおおまかな概念だけ。 関数の一覧および使い方…

手続き脳のためのラムダ式のはなし

ずいぶん前からメジャーなオブジェクト指向言語にラムダ式が導入されている。 俺がいる職場では未だに.net2.0なので使えないのだが、最近ちょこちょことヘルパーライブラリを作っていてSystem.Funcが使えたらなあーなどと思うことがよくある。職場の何人かに…

DXRuby1.4.1(Ruby2.1用)リリース

ビルドできて一通り動いているようなのでSourceForgeにアップしておいた。一番下にある。 https://sourceforge.jp/projects/dxruby/releases/ いつからか知らんけど見た目が変わっててわかりにくくなった。前からたいがいわかりにくかったけど。いずれはgem…

Ruby2.1.3が出たので今後を考える

Windows用のRubyインストーラであるRubyInstallerでRuby2.1.3がリリースされた。リリースされてしまった。Ruby2.1.3自体が9月19日リリースなのでつい最近のことだろうと思う。 http://rubyinstaller.org/downloads/ RubyInstallerはRuby2.1系について、テス…

CライブラリとRubyの不整合について

昨日、SDL2のRubyバインダを作ろうとして挫折したので、何が問題になったのかをメモ。 結論から言うと、SDL2のオブジェクトの寿命管理がC用の考え方で作られていて、Rubyで扱うためにRubyオブジェクト化した場合にGCによる解放処理との整合性が取れない。SDL…

DXRubyWS開発秘話

2013年7月26日、大阪に行ったときに暇つぶしにDXRubyWSを検討していたときの文章が出てきたので置いておく。 これで開発されたものがgithubにおいてある。 https://github.com/mirichi/DXRubyWS 見てみたら最初のコミットは7月28日であった。文章を書く前に…

C言語の変数とメモリとアドレスの話

Cの入門などでは変数の説明で箱をイメージさせることがたびたびあるが、ポインタのところまで来ると箱の名前だとか場所だとか住所だとか言われていまいちピンとこない。ポインタが理解できない一因はこの「箱のイメージ」なのではないかと思う。 変数とは言…

mrubyのVMざっくり解説

なんとなく、mrubyのVMの基本的なところを書いておこうと思ったので。誰かの参考になれば。 大きな仕様的なところは、 ・32bit固定長のバイトコードを解釈して動作する。 ・レジスタをスタックに確保するタイプのレジスタマシンである。従って、スタックの任…

DXRuby1.5.11devリリース

DXRuby1.5.11devをWikiに置いといた。 http://dxruby.sourceforge.jp/cgi-bin/hiki.cgi?%A5%D5%A5%A1%A5%A4%A5%EB%C3%D6%A4%AD%BE%ECInput::IMEの機能追加で、変換中の文字列や候補の一覧、数などを取得できるようにした。 通常、IMEの変換中文字列の描画はI…

mrubyのkhashとHashの高速化

mrubyカテゴリあったほうがいいかなーとか思うが、そんなに書くこともないからいらんかも。増えるようなら考える。 khashをどうにかして高速化できないかなーと細かい修正を入れてみて、ついでにHashが遅いらしいので書き込みを高速化してみたのでそれをネタ…

ocraで画像や音その他のファイルをexeに入れる方法

ocra による Ruby の EXE 化を見てもらえば終わる話なのだが。 ちょっと具体的にDXRubyで扱うリソースをまとめてみたのでそのレポートをば。 サンプル ここに置いておいた。解凍するとexeファイルが1個出てくる。これを実行するとサンプルゲームが動く。exe…

プリセット画像というアイデア

これは昔書いたかもしれんし、Twitterでつぶやいたかもしれんけど、DXRubyにプリセット画像を用意するという発想はずっと前から持っている。水視さんが手伝ってくれてた頃に思いついてたら迷わずお願いしてたはずなのだが、それが無いということはまあ、るび…

RubyInstallerのRuby2.0でRubyInlineとOcraを使ってexe化する

Rubyのコード内にCのコードを埋め込んで、その部分だけCコンパイラでコンパイルして拡張ライブラリ化し、呼び出す。これがRubyInlineの仕掛けである。Windowsでうまく動かないとか、Ocraでexe化するのがうまくいかないとか、色々あったが、最近のんは改善さ…

Spriteの実装と設計判断

高尾さん(@takaokouji)から「Spriteはなぜインスタンス変数に値を持たないのか」という質問を受けた。その回答はシンプルに「遅いから」であった。 Spriteの描画時など、参照するパラメータは10を軽く超える。これらをすべてCのAPIでインスタンス変数から取…

松江Ruby会議05に参加してきた(3)

昨日の最初に書いた「普段置かれている環境への疑問」てのは職場のことであって、Twitterとかで関わってる人たちのことではない。ここを誤解されると致命傷になりかねんので一応念のため。さて、今回は松江Ruby会議05ちょー個人的感想の最終回で、DXRubyに関…

松江Ruby会議05に参加してきた(2)

前回は講演の超主観的な感想であった。全体的にレベルが高いのは松江だからなのか、それともどこに行ってもこんな感じなのか。 自分が普段置かれている環境に若干の疑問を持ちつつ。次いってみよー。 松江、島根の取り組み Ruby合宿、中学生Ruby教室、Ruby.J…

松江Ruby会議05に参加してきた

2014/3/15(土)、島根県松江市にてMatsue.rb主催の松江Ruby会議05が行われた。それのゲスト講演をしてきた。 島根県がやっているRuby合宿でDXRubyが使われているという繋がりでDXRubyに関する講演の依頼が来たので、ちょっと喋りに行ったという経緯である。 …

DXRuby1.4.1リリース

1.4.0が2012年8月だったので随分久しぶりのリリースとなった。 開発版の1.5devを2013年5月に開始してから、いろいろと修正を入れているうちの、確定していない微妙な機能を省いたバージョンとなっている。ソースは1.5devと共通で、マクロでコードを削除した…

ソース隠蔽手法

昨日の続き。隠蔽といってもアセンブラレベルでは見れてしまうので頑張れば解析可能なわけだが。Rubyのアセンブラは高レベルなので読みやすいというのが難点か。 ともあれ、このようなファイルを作る。名前はiseqloader.rbとしよう。 require 'fiddle' class…

バイトコードのローディング

ちょいとメモ。 require 'fiddle' class RubyVM class InstructionSequence addr = Fiddle.dlopen(nil)['rb_iseq_load'] fn = Fiddle::Function.new( addr, [Fiddle::TYPE_VOIDP] * 3, Fiddle::TYPE_VOIDP) define_singleton_method(:load) do |dat, par=nil…

Rubyのインスタンス変数について

Rubyの特徴としてよく言われるのは「すべてがオブジェクト」だが、オブジェクトであるならばインスタンス変数を持つことができる。今回はRubyのインスタンス変数についての色々。 インスタンス変数とは Rubyでは「@」ひとつで始まる変数名が自動的にインスタ…

DTLの自作レンダラの実験

いいスクリーンショットがなかなか撮れない。のでgif動画にしてみた。 土屋つかささんのdxruby_text_layerを使って、独自レンダラを書いて、この間のmieki256さんのSTGサンプルのステージクリアの文字みたいな動きを(アルゴリズムパクって)作ってみた。それ…

BGアニメーションを考える

mieki256さんが大変なものを作っていたのでご紹介。 DXRubyでSTGサンプルを作成 爆発エフェクトは派手だわShaderを使った背景は派手だわすごいもんだ。デカいボスもおるし、途中の壁は斜めの見た目に合わせて丁寧な衝突判定してるし、音こそ無いものの、ここ…

ミニゲームキット

DXRubyはちょっとしたものを簡単に作れるライブラリであるからして、とりあえずrequire 'dxruby'してWindow.loop do endでガシガシとコードを書いていけば動くものが作れる。例えば、ちょっとしたコードでなんか作る。 require 'dxruby' class Enemy < Sprit…

OpenGL対応その2

DXRuby Advent Calendar 2013、26日目です。嘘です。25日目はDXRubyの開発環境に(将来的に)望む物でした。配布形式については初めの頃からの課題ではあって、どうにかできないかとRBatに暗号化を突っ込んでみたりしているのだが、そのやり方はrequireの動…

OpenGLテスト中

そもそもOpenGLがさっぱりわかってないのでどうにもならん感じである。 とりあえず、DXRubyのImageにconnect_glメソッドを追加して、OpenGLの描画先をImageオブジェクトにすることはできた。DXRuby1.5.8dev-test-mswin32-ruby20.zipとして地味に置いておいた…

おもちゃを作ってみようとしたが

SoundEffectに配列から音を生成する機能を追加したから、これを使っておもちゃ的なプログラムを作ろうと考えていた。 例えば正弦波を出力するブロックがあって、それを縦とか横とかに繋げて音を変化させるようなもの。縦に繋ぐと和音になって、横に繋ぐと周…

DXRuby1.5.8devリリース

ちょっと勢いで作っちゃった新機能を公開するために、これまでのバグ修正などを含めた1.5.8devをリリース。 http://dxruby.sourceforge.jp/cgi-bin/hiki.cgi?%A5%D5%A5%A1%A5%A4%A5%EB%C3%D6%A4%AD%BE%EC細かいものから大きなものまでいくつかのバグ修正と、…