WHITELEAF:Kindle応援サイト

KindleでWEB小説を読もう! Narou.rb 公開中

Ruby

オーバーロードWEB版のルビを青空文庫形式に

オーバーロードWEB版のテキスト中のルビを、青空文庫形式の《》に変換します。魔法名は区切りが分かりやすいのですが、他の固有名詞は区切りが明確ではないため、MeCabによる形態素解析を用いてある程度単語の区切りを推測し、最終的に人間が区切りを判断す…

リソースの自動ロード

DXRuby(や何か)でゲームを作っていた場合を想定して、何かのリソースを変更するたびに実行し直すのは面倒臭いので、リソースの更新を検知して自動で再ロードをしたい。(画像データやマップデータ、モデルデータetc.) モジュール化とか何も考えずに書いて…

ruby-aaws 0.8.1 で invalid byte sequence in utf-8 が出た場合

Ruby で Amazon Web Service(AWS) を使用するためのライブラリに、ruby-aaws というものがあります。 このライブラリを Ruby1.9 で使用した場合、cache がある場合に invalid byte sequence in utf-8 とエラーを吐いて止まります。これの対処方法を書いてお…

Ruby で構造体もどき その3

その1 | その2前回までと違って unpack フォーマットを直接書くのではなく型を定義して BinData のような形式にしてみました。unpack のフォーマット文字列を生成して一回の unpack 実行で済ませる方針は変わっていないので、配列の添字にシンボルは使えま…

Ruby で構造体もどき 続き

前回の続きBinData と比較するためにコードを作成。約1Mのモデルデータを読み込むコードです。BinData を使ったほうは2.5秒かかりました。自前の unpack ラッパーは約0.07秒。(PCスペックに左右されるので参考程度)BinData は柔軟な記述ができる代わりに、…

Ruby で構造体もどき

Ruby から離れていたのでリハビリがてらにちょろっとコードを書いてみた。 バイナリデータを扱う場合に unpack は使いづらい、だがしかし Gem の BinData とかを使うほど大げさでもない場合用。構造体もどきを定義して名前でアクセスできる、が、やっぱり使…

push or <<

Array に要素を挿入するメソッドは push ですが、 require "benchmark" Benchmark.bm { |bm| bm.report("push") { a = [] 5000000.times { |i| a.push(i) } } bm.report(" << ") { a = [] 5000000.times { |i| a << i } } } ruby 1.9.2dev (2010-04-27 trunk…

:"symbol"

気になったので他のパターンも。JRuby のための計測です。 require "benchmark" def test_symbol(sym) a = sym end Benchmark.bm { |bm| bm.report("(1)") { 10000000.times { test_symbol(:abc) } } bm.report("(2)") { 10000000.times { test_symbol(:"abc…

access hash

Hash をアクセスする際に Fixnum, Symbol, String を使う場合の比較です。Hash ではなく Array を使った結果もつけておきます。 require "benchmark" class Test def initialize @num_table = {} @sym_table = {} @str_table = {} @array = [] 100.times { |…

Server VM でも試してみました。オプションはよくわからないのでかたっぱしから速くなりそうなのを……。--fast はエラーが出てダメでした。 >jruby --server -v -J-Djruby.compile.frameless=true -J-Djruby.compile.position less=true -J-Djruby.compile.th…

ダブルクォーテーション or シングルクォーテーション

require "benchmark" Benchmark.bm { |bm| bm.report("double") { 20000000.times { a = "strings" } } bm.report("single") { 20000000.times { a = 'strings' } } } ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32] user system total real double…

1liner?

require "benchmark" def f1 return false || true end def f2 true unless false return false end Benchmark.bm { |bm| bm.report("f1") { 20000000.times { f1 } } bm.report("f2") { 20000000.times { f2 } } } ruby 1.8.6 (2008-08-11 patchlevel 287) …

少しでも速くするために

こまか〜いことでも、意外と速度に響いてくることがよくあります。響かないときもあります。思いついたときに実際にベンチーマークを取ったものをこまめにメモっておくことにします。[Rubyベンチ]タグをつけておいて分かりやすいようにしておこう。

続 Min-in 駆動型ゲームライブラリ

前回は method_missing とか使ったりして、ヒドイもんだったけど今回はちょっと真面目(当社比) ライブラリが揃っていたと仮定して、ゲーム部分はこんな感じになりす。 require_relative "framework" require_relative "unit" require_relative "mixinlibra…

元ネタ:http://twitter.com/mirichi/status/16602971260 ここまで書いてわけわかんなくなったので終了。やりたい事と違う…… (ruby 1.9.1 以上が必要(たぶん)) require "dxruby" module MetaGame module Core @@initialize_parameters = {} @@handler_names …

元ネタ:http://twitter.com/hikaruna/status/16547039623 class Module def attr_class_accessor(name) eval(%Q( def self.#{name} @@#{name} ||= nil end def self.#{name}=(value) @@#{name} = value end )) end end class A attr_class_accessor :a end …

SFont

by http://d.hatena.ne.jp/mirichi/20100619/p1 (Twitter で reply したんだけど気づかれなかったようだ lol)更新。 てきとうなコードを書いた( http://twitter.com/mirichi/status/16531632255 )お詫び(?)にちょっと真面目に書いてみました。 Image#draw…

Ruby でゲーム

Ruby を覚えるために最初に作ったプログラムであるゲームをちょろっと公開してみる。Falling Tower Ruby http://ux.getuploader.com/whiteleaf/download/2/fall.zip名作 Falling Tower を Ruby で再現。実装は記憶のみで行ったために挙動はオリジナルとはか…

Fiber の評価

まだコードに組み込んで使ったわけじゃないんで実際の使用感ではないですが。 f = Fiber.new do 300000.times do Fiber.yield false end Fiber.yield true end t = Time.now until f.resume end puts Time.now - t ruby 1.9.1p378 (2010-01-10 revision 2627…

Fiber はGCに負荷がかかる

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/46901大量の Fiber は生成コスト自体は無視できるくらい軽いが、GC的には非常に重いらしい。 しかし500個程度の Fiber ならさほど重くないので実用的には問題はなさそうである。

ocra + Ruby/SDL

Ruby/SDL を ocra で exe 化した際にはまったのでメモしておきます。 (Ruby1.9.1を想定しています。1.8 なら exerb でいいんジャネ?)Ruby/SDL を使用したスクリプトを ocra で exe にまとめようとすると、 sdl_ext.so が見つからないというエラーが発生しま…

Ruby1.9速すぎワロタ

abstract method

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/15841 こちらを書き直し class AbstractMethodCallError < NotImplementedError end class AbstractNotImplementedError < NotImplementedError end class Module @@_abstract_methods = {} def…

Ruby/SDLでウィンドウをセンターに

SDL にウィンドウを操作する機能が皆無なので、自分でやる必要があるようです。 # Windows 限定 require "Win32API" SWP_NOSIZE = 1 SM_CXFULLSCREEN = 0 SM_CYFULLSCREEN = 1 def window_align_center(width, height) get_active_window = Win32API.new("us…