ruby

ベンチマーク?

ベンチマークとかよくわからないけど、timeというコマンドでできるみたいなので、ちょっとやってみた。benchrmark.rb #!/usr/bin/env ruby puts (1..1000).to_a.inject(:+) benchmark.io #!/usr/bin/env io Range setRange(1, 1000) asList reduce(+) print …

Rubyで和音を扱うライブラリ

aereal/music-chord · GitHub 短絡的にMusic::Chordと名づけました。いろいろやばい気がします。これは、OSのAPIを叩いて音声を再生するとかそんなすばらしいものではなくて、構成音からコードネームとかを得るとか、そういった用途に使います。 しかし、肝…

勝手にActiveSupportっぽいことをするシリーズ #2

12進数を扱おうとしたなにか。 class ::Fixnum def duo self % 12 end end とりあえずやりたいことは達成できたのでよしとする。

勝手にActiveSupportっぽいことをするシリーズ

module ::Boolean def then self end def else self end end class ::TrueClass include Boolean def then yield self end def else self end end class ::FalseClass include Boolean def then self end def else yield self end end リファレンスに # -> B…

Python の import as っぽいもの

def import(feature, as={}) ret = require feature self.class.instance_eval do as.each do |(orig, dest)| c = const_get(orig) remove_const(orig) if const_defined?(orig) const_set(dest, c) end end unless as.empty? ret end import "date", :Date …

ネストされた定数を取得する

def get_each_const(const, context=::Object) const.to_s.split(/::/).inject(context) {|parent, c| parent.const_get(c) } end module Foo module Bar module Hoge module Fuga end end end end bar = get_each_const "Foo::Bar" # -> Foo::Bar fuga = ge…

コーディングルールっぽいの (Ruby)

ひとりで書いているし、ガチガチに作っているわけでもないけど、気をつけるようにしていることとか。 Tab indent, No space indent タブインデントに決め打ちしておけば、近い将来に自分がインデント幅8に目覚めても、エディタの設定をいじればすむ。 インデ…

Config = { # 対応するメディアタイプの拡張子 :typemap => %w(xhtml html atom json) } class Resource Config[:typemap].each do |i| # Resource#to_xhtml, Resource#to_html, ... を定義する define_method("to_#{i}") do # Resource#to_xml はコアで対応…

begin require "dl/win32" rescue LoadError require "Win32API" end def alert(wnd, text, caption, mode=0) msgbox = Win32API.new("user32", "MessageBox", %w(p p p i), "i") msgbox.call(wnd, text, caption, mode) end if $0 == __FILE__ class Numeri…

安全なERB

ERB を Web アプリケーションのビューに使うときなんかに、変数とかを使うときによく考えないと、余計なメソッドを呼ばれたり、めんどうなので。 def render_erb(template, vars={}) require "erb" obj = Object.new obj.class.instance_eval do vars.each d…

順序の重複がないランダムなソート

うまくいえないけど。 a,b,c,d,... というアルファベットの羅列 (べつにアルファベットじゃなくてもいいけど) があって、それをもとのインデックスと同じインデックス以外にランダムに配置する、というソートをやってみる。 alphabet = ("a".."z").to_a.sort…