料理 メバルを食う
メバルが398円で売ってたので買ってきました。
イサキ・イナダ・アジ・サンマは時々やるんですが、メバルは初。
身が柔らかくて大変なのでは?と思いましたが、意外と平気でした。
それにしてもメバルって肝がデカイんですね。
メバル旨い!ハマリそう。
こんな大きさ。俺の手との比較。ちなみに俺は身長175センチです。そこそこの大きさのメバル。
三枚におろします。腹から包丁入れてハラワタ出して、頭落として、骨に沿って包丁入れて、ザクっと切り取ります。
腹の部分の肋骨があるので包丁で削ぎとっておきます。皮が旨そうなので、最初刺身にしようと思ったけど湯引きにしようと思います。ということでざるに入れたとこ。
熱湯を皮にだけかけます。皮があっという間にしなしな〜〜〜って縮みます。皮って火を入れないと固くて噛めないのに、火を入れると物凄く軟らかくなるんですね。不思議。
これを切って湯引きの刺身出来上がり。肝が旨そうだったので肝醤油にしてみました。旨かった。あとアラは味噌汁に。
こんだけ飲み屋で飲み食いしたら3000円くらいしそうだけど、自分でつくれば1000円もかかりません。
今夜も旨し。
特訓内容
今日も特訓、というか練習しました。
参考にさせていただいたのは
http://www.lab.ime.cmc.osaka-u.ac.jp/~kiyo/pub/lecture/unixpro/ruby/#basic
ですが、さすがに2005年のサイトだと、情報が結構古いみたいで、コンパイルエラーが結構出ました。
それはそれで勉強になりました。
以下は今日1時間くらいでやった内容です。調べたりしながらやってるのであんまり行数はありません。
あと今日知ったのが、Rubyにはインクリメント演算子が無い、ということ。有名な事なんでしょうけど、今日知った。。。
あとirbが固まる?みたいな現象が。昨日も出てましたが。最後が"になっちゃって、何も効かなくなってしまいます。。。
何でしょう?いわゆる固まった状態?
C:\Users\hangai_m> C:\Users\hangai_m>edlin grep.rb New file * * *exit C:\Users\hangai_m> C:\Users\hangai_m> C:\Users\hangai_m> C:\Users\hangai_m>irb a = [123,"abc",[4,5,6]] C:/Ruby19/lib/ruby/1.9.1/irb/magic-file.rb:7:in `initialize': No such file or directory - a (Errno::ENOENT) from C:/Ruby19/lib/ruby/1.9.1/irb/magic-file.rb:7:in `open' from C:/Ruby19/lib/ruby/1.9.1/irb/magic-file.rb:7:in `open' from C:/Ruby19/lib/ruby/1.9.1/irb/input-method.rb:77:in `initialize' from C:/Ruby19/lib/ruby/1.9.1/irb/context.rb:79:in `new' from C:/Ruby19/lib/ruby/1.9.1/irb/context.rb:79:in `initialize' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:99:in `new' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:99:in `initialize' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:56:in `new' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:56:in `start' from C:/Ruby19/bin/irb:12:in `<main>' C:\Users\hangai_m> C:\Users\hangai_m> C:\Users\hangai_m>irb irb(main):001:0> a = [123,"abc",[4,5,6]] => [123, "abc", [4, 5, 6]] irb(main):002:0> irb(main):003:0* p a [123, "abc", [4, 5, 6]] => [123, "abc", [4, 5, 6]] irb(main):004:0> irb(main):005:0* a.each do |i| irb(main):006:1* p i irb(main):007:1> end 123 "abc" [4, 5, 6] => [123, "abc", [4, 5, 6]] irb(main):008:0> irb(main):009:0* a.each do |i| irb(main):010:1* puts i irb(main):011:1> end 123 abc 4 5 6 => [123, "abc", [4, 5, 6]] irb(main):012:0> irb(main):013:0* irb(main):014:0* p "pとputsは違うのね" "pとputsは違うのね" => "pとputsは違うのね" irb(main):015:0> irb(main):016:0* 1+2+3+4+5 => 15 irb(main):017:0> irb(main):018:0* class Fixnum irb(main):019:1> def + (a) irb(main):020:2> self * a irb(main):021:2> end irb(main):022:1> end => nil C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:8446:in `_rl_find_next_mbchar': undefined method `force_encoding' for nil:NilClass (NoMethodError) from C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:1692:in `block in expand_prompt' from C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:1676:in `each' from C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:1676:in `expand_prompt' from C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:1765:in `rl_expand_prompt' from C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:1790:in `rl_set_prompt' from C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:4718:in `readline' from C:/Ruby19/lib/ruby/site_ruby/1.9.1/readline.rb:40:in `readline' from C:/Ruby19/lib/ruby/1.9.1/irb/input-method.rb:115:in `gets' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:139:in `block (2 levels) in eval_input' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:271:in `signal_status' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:138:in `block in eval_input' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:189:in `call' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:189:in `buf_input' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:103:in `getc' from C:/Ruby19/lib/ruby/1.9.1/irb/slex.rb:205:in `match_io' from C:/Ruby19/lib/ruby/1.9.1/irb/slex.rb:75:in `match' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:287:in `token' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:263:in `lex' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:234:in `block (2 levels) in each_top_level_statement' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:230:in `loop' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:230:in `block in each_top_level_statement' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `catch' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `each_top_level_statement' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:153:in `eval_input' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:70:in `block in start' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:69:in `catch' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:69:in `start' from C:/Ruby19/bin/irb:12:in `<main>' C:\Users\hangai_m> C:\Users\hangai_m>irb irb(main):001:0> irb(main):002:0* irb(main):003:0* irb(main):004:0* class Fixnum irb(main):005:1> def + (a) irb(main):006:2> self * a irb(main):007:2> end irb(main):008:1> end => nil C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:8446:in `_rl_find_next_mbchar': undefined method `force_encoding' for nil:NilClass (NoMethodError) from C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:1692:in `block in expand_prompt' from C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:1676:in `each' from C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:1676:in `expand_prompt' from C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:1765:in `rl_expand_prompt' from C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:1790:in `rl_set_prompt' from C:/Ruby19/lib/ruby/site_ruby/1.9.1/rbreadline.rb:4718:in `readline' from C:/Ruby19/lib/ruby/site_ruby/1.9.1/readline.rb:40:in `readline' from C:/Ruby19/lib/ruby/1.9.1/irb/input-method.rb:115:in `gets' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:139:in `block (2 levels) in eval_input' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:271:in `signal_status' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:138:in `block in eval_input' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:189:in `call' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:189:in `buf_input' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:103:in `getc' from C:/Ruby19/lib/ruby/1.9.1/irb/slex.rb:205:in `match_io' from C:/Ruby19/lib/ruby/1.9.1/irb/slex.rb:75:in `match' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:287:in `token' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:263:in `lex' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:234:in `block (2 levels) in each_top_level_statement' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:230:in `loop' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:230:in `block in each_top_level_statement' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `catch' from C:/Ruby19/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `each_top_level_statement' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:153:in `eval_input' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:70:in `block in start' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:69:in `catch' from C:/Ruby19/lib/ruby/1.9.1/irb.rb:69:in `start' from C:/Ruby19/bin/irb:12:in `<main>' C:\Users\hangai_m> C:\Users\hangai_m> C:\Users\hangai_m> C:\Users\hangai_m>irb irb(main):001:0> irb(main):002:0* irb(main):003:0* def three_times irb(main):004:1> yield irb(main):005:1> yield irb(main):006:1> yield irb(main):007:1> end => nil irb(main):008:0> irb(main):009:0* i = i; three_times { i *= 2 } NoMethodError: undefined method `*' for nil:NilClass from (irb):9:in `block in irb_binding' from (irb):4:in `three_times' from (irb):9 from C:/Ruby19/bin/irb:12:in `<main>' irb(main):010:0> irb(main):011:0* three_times { print "abc\n" } abc abc abc => nil irb(main):012:0> irb(main):013:0* irb(main):014:0* def foo irb(main):015:1> yield(1,2) irb(main):016:1> end => nil irb(main):017:0> irb(main):018:0* foo {|a,b| irb(main):019:1* p[a,b] irb(main):020:1> } NoMethodError: undefined method `[]' for nil:NilClass from (irb):19:in `block in irb_binding' from (irb):15:in `foo' from (irb):18 from C:/Ruby19/bin/irb:12:in `<main>' irb(main):021:0> irb(main):022:0* string = "ABCDE" => "ABCDE" irb(main):023:0> len = string.length => 5 irb(main):024:0> irb(main):025:0* "ABCDE".length => 5 irb(main):026:0> irb(main):027:0* irb(main):028:0* =begin irb(main):029:0= これはコメント。あんまり見たこと無くね? irb(main):030:0= =end irb(main):031:0* irb(main):032:0* irb(main):033:0* print "abc"; print "def" abcdef=> nil irb(main):034:0> irb(main):035:0* VAR = "定数" => "定数" irb(main):036:0> $var = "global hensu" => "global hensu" irb(main):037:0> irb(main):038:0* def func irb(main):039:1> var = "local hensu" irb(main):040:1> end => nil irb(main):041:0> irb(main):042:0* class Class irb(main):043:1> @@var = "class hensu" irb(main):044:1> def initialize irb(main):045:2> @var = "instance hensu" irb(main):046:2> end irb(main):047:1> end => nil irb(main):048:0> irb(main):049:0* Class.new.initialize NoMethodError: private method `initialize' called for #<Class:0x1d5ade0> from (irb):49 from C:/Ruby19/bin/irb:12:in `<main>' irb(main):050:0> irb(main):051:0* irb(main):052:0* a = 100 => 100 irb(main):053:0> a,b = 10,20 => [10, 20] irb(main):054:0> irb(main):055:0* a = (1+2)/(3-4) * 5 => -15 irb(main):056:0> irb(main):057:0* a = (1 &&2) and (3 || 4 ) or !(5) => 3 irb(main):058:0> irb(main):059:0* a = 7 %2 => 1 irb(main):060:0> irb(main):061:0* a = 3 ** 0.5 => 1.73205080756888 irb(main):062:0> irb(main):063:0* 2 ** 2 => 4 irb(main):064:0> 8 ** 2 => 64 irb(main):065:0> 3 ** 2 => 9 irb(main):066:0> 3 ** 0.3 => 1.39038917031591 irb(main):067:0> 4 ** 0.5 => 2.0 irb(main):068:0> irb(main):069:0* 8 ** 0.5 => 2.82842712474619 irb(main):070:0> irb(main):071:0* a = (1 == 2 ) or (3 != 4) or (5 <6) or (7<=8) => true irb(main):072:0> irb(main):073:0* irb(main):074:0* a = [1,2,3,4,5] => [1, 2, 3, 4, 5] irb(main):075:0> irb(main):076:0* b = [6,7,8,9,10] => [6, 7, 8, 9, 10] irb(main):077:0> irb(main):078:0* a.size => 5 irb(main):079:0> irb(main):080:0* a | b => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] irb(main):081:0> irb(main):082:0* a & b => [] irb(main):083:0> irb(main):084:0* a -b => [1, 2, 3, 4, 5] irb(main):085:0> irb(main):086:0* a.shift => 1 irb(main):087:0> irb(main):088:0* a => [2, 3, 4, 5] irb(main):089:0> a.join("/") => "2/3/4/5" irb(main):090:0> irb(main):091:0* a <<6 irb(main):092:0" a irb(main):093:0" ; irb(main):094:0" irb(main):095:0" ; irb(main):096:0" aaaa irb(main):097:0" exit irb(main):098:0" irb(main):099:0" ^C irb(main):100:0" ^C irb(main):101:0" ^C irb(main):102:0" ^C irb(main):103:0" irb(main):104:0" irb(main):105:0" ^C irb(main):106:0" exit irb(main):107:0" irb(main):108:0" > irb(main):109:0" < irb(main):110:0"
SLIPKNOTのベーシスト、PAUL GRAYが死去
http://bit.ly/9RfChh
いやいやいやいやいやいや。ありえねーっつーの。
一昨年ライブ見たばっかだし。あの左利きのベース。
少なからずショックですわ・・・。
38って。。。若過ぎ。
特訓結果
今日も今日とて特訓です。
記号シリーズが一段落し、変数と定数シリーズを動かしてみています。
スコープの辺りの機能はjavaと変わらないので、「あ、これがあれね」という感じですが、publicとかprivateとかを@とか@@とかで表現するってのが新鮮。
以下コードとか実行例晒しです。
まあ誰の役にも立たないと思いますが、絵で言えば30秒ドローイングみたいなもんですかね。
例によってirbで叩いて確認しています。
何度も同じ名前でクラスとかメソッド作ってると怒れられるんですね。
それにしてもirbさまさま。
http://www.ruby-lang.org/ja/man/html/_CAD1BFF4A4C8C4EABFF4.html#a.c4.ea.bf.f4 irb(main):106:0* a = 10 => 10 irb(main):107:0> irb(main):108:0* p "a is #{a}" "a is 10" => "a is 10" irb(main):109:0> irb(main):110:0* irb(main):111:0* p((true and false)) false => false irb(main):112:0> irb(main):113:0* puts `ruby -h` Usage: ruby [switches] [--] [programfile] [arguments] -0[octal] specify record separator (\0, if no argument) -a autosplit mode with -n or -p (splits $_ into $F) -c check syntax only -Cdirectory cd to directory, before executing your script -d set debugging flags (set $DEBUG to true) -e 'command' one line of script. Several -e's allowed. Omit [programfile] -Eex[:in] specify the default external and internal character encodings -Fpattern split() pattern for autosplit (-a) -i[extension] edit ARGV files in place (make backup if extension supplied) -Idirectory specify $LOAD_PATH directory (may be used more than once) -l enable line ending processing -n assume 'while gets(); ... end' loop around your script -p assume loop like -n but print line also like sed -rlibrary require the library, before executing your script -s enable some switch parsing for switches after script name -S look for the script using PATH environment variable -T[level] turn on tainting checks -v print version number, then turn on verbose mode -w turn warnings on for your script -W[level] set warning level; 0=silence, 1=medium, 2=verbose (default for level) -x[directory] strip off text before #!ruby line and perhaps cd to directory --copyright print the copyright --version print the version => nil irb(main):114:0> irb(main):115:0* irb(main):116:0* irb(main):117:0* irb(main):118:0* 2.times{ irb(main):119:1* p defined?(v) irb(main):120:1> v=1 irb(main):121:1> p v irb(main):122:1> } nil 1 nil 1 => 2 irb(main):123:0> irb(main):124:0* 4.times{ irb(main):125:1* v = 1 irb(main):126:1> p v irb(main):127:1> v ++ irb(main):128:1* } SyntaxError: (irb):128: syntax error, unexpected '}' from C:/Ruby19/bin/irb:12:in `<main>' irb(main):129:0> irb(main):130:0* irb(main):131:0* 4.times{ irb(main):132:1* v=1 irb(main):133:1> p v irb(main):134:1> v++; irb(main):135:1* } SyntaxError: (irb):134: syntax error, unexpected ';' from C:/Ruby19/bin/irb:12:in `<main>' irb(main):136:0> irb(main):137:0* 4.times{ irb(main):138:1* v=1 irb(main):139:1> p v irb(main):140:1> } 1 1 1 1 => 4 irb(main):141:0> irb(main):142:0* n=10 => 10 irb(main):143:0> n.times{ irb(main):144:1* p n irb(main):145:1> } 10 10 10 10 10 10 10 10 10 10 => 10 irb(main):146:0> irb(main):147:0* irb(main):148:0* class Foo irb(main):149:1> def initialize irb(main):150:2> @a = 1 irb(main):151:2> end irb(main):152:1> def a irb(main):153:2> @a irb(main):154:2> end irb(main):155:1> def b irb(main):156:2> @b irb(main):157:2> end irb(main):158:1> end => nil irb(main):159:0> irb(main):160:0* class Baa < Foo irb(main):161:1> def baa_a irb(main):162:2> @a irb(main):163:2> end irb(main):164:1> end => nil irb(main):165:0> irb(main):166:0* p Foo.new.a 1 => 1 irb(main):167:0> irb(main):168:0* p Foo.new.b nil => nil irb(main):169:0> irb(main):170:0* p Baa.new.baa_a 1 => 1 irb(main):171:0> irb(main):172:0* irb(main):173:0* class Foo irb(main):174:1> @a=1 irb(main):175:1> def self.a irb(main):176:2> @a irb(main):177:2> end irb(main):178:1> end => nil irb(main):179:0> irb(main):180:0* class Baa < Foo irb(main):181:1> end => nil irb(main):182:0> irb(main):183:0* p Foo.a 1 => 1 irb(main):184:0> irb(main):185:0* p Baa.a nil => nil irb(main):186:0> irb(main):187:0* irb(main):188:0* irb(main):189:0* class Foo irb(main):190:1> @@foo = 1 irb(main):191:1> def bar irb(main):192:2> puts @@foo irb(main):193:2> end irb(main):194:1> end => nil irb(main):195:0> irb(main):196:0* irb(main):197:0* Foo.new.bar 1 => nil irb(main):198:0> irb(main):199:0* class Foo irb(main):200:1> @@foo = 1 irb(main):201:1> end => 1 irb(main):202:0> irb(main):203:0* class Bar < Foo irb(main):204:1> p @@foo += 1 irb(main):205:1> end 2 => 2 irb(main):206:0> irb(main):207:0* class Baz < Bar irb(main):208:1> p @@foo += 1 irb(main):209:1> end 3 => 3 irb(main):210:0> irb(main):211:0* module Foo irb(main):212:1> @@foo = 1 irb(main):213:1> end TypeError: Foo is not a module from (irb):211 from C:/Ruby19/bin/irb:12:in `<main>' irb(main):214:0> irb(main):215:0* irb(main):216:0* module Fox irb(main):217:1> @fox = 1 irb(main):218:1> end => 1 irb(main):219:0> irb(main):220:0* class Bar irb(main):221:1> include Fox irb(main):222:1> p @@fox += 1 irb(main):223:1> end NameError: uninitialized class variable @@fox in Bar from (irb):222:in `<class:Bar>' from (irb):220 from C:/Ruby19/bin/irb:12:in `<main>' irb(main):224:0> irb(main):225:0* irb(main):226:0* module Fox irb(main):227:1> @@fox = 1 irb(main):228:1> end => 1 irb(main):229:0> irb(main):230:0* class Bar irb(main):231:1> include Fox irb(main):232:1> p @@fox += 1 irb(main):233:1> end 2 => 2 irb(main):234:0> irb(main):235:0* class Baz irb(main):236:1> include Foo irb(main):237:1> p @@foo += 1 irb(main):238:1> end TypeError: wrong argument type Class (expected Module) from (irb):236:in `include' from (irb):236:in `<class:Baz>' from (irb):235 from C:/Ruby19/bin/irb:12:in `<main>' irb(main):239:0> irb(main):240:0* class Baz irb(main):241:1> include Fox irb(main):242:1> p @@fox += 1 irb(main):243:1> end 3 => 3 irb(main):244:0> irb(main):245:0* irb(main):246:0* irb(main):247:0* $foobar = 222 => 222 irb(main):248:0> irb(main):249:0* class FooBar irb(main):250:1> def ppp irb(main):251:2> p $foobar irb(main):252:2> end irb(main):253:1> end => nil irb(main):254:0> irb(main):255:0* FooBar.new.ppp 222 => 222 irb(main):256:0> irb(main):257:0* irb(main):258:0* p __FILE__ "(irb)" => "(irb)" irb(main):259:0> irb(main):260:0* p __LINE__ 260 => 260 irb(main):261:0> irb(main):262:0* class Foo irb(main):263:1> FOO = 'FOO' irb(main):264:1> end (irb):263: warning: already initialized constant FOO => "FOO" irb(main):265:0> irb(main):266:0* irb(main):267:0* irb(main):268:0* class C irb(main):269:1> end => nil irb(main):270:0> irb(main):271:0* p C C => C irb(main):272:0> irb(main):273:0* module M irb(main):274:1> I = 35 irb(main):275:1> class C irb(main):276:2> end irb(main):277:1> end => nil irb(main):278:0> irb(main):279:0* p M::I 35 => 35 irb(main):280:0> irb(main):281:0* p M::C M::C => M::C irb(main):282:0> irb(main):283:0* p ::M M => M irb(main):284:0> irb(main):285:0* M::NewConst = 777 => 777 irb(main):286:0> irb(main):287:0*
JRubyからJavaを呼ぶ
日本JRubyユーザ会に行ったとき、fujibeeさんのデモに感動したけどこれまでためしてませんでした。
http://fujibee.org/2010/05/22/jruby%E3%83%A6%E3%83%BC%E3%82%B6%E4%BC%9A%E3%81%AE%E6%99%82%E3%81%AE%E3%83%87%E3%83%A2/
で解説をしてくださっているのでやってみます。
まずはJRubyのインストール・・・ですが、俺先日インストールしちゃってたし。。。
インストールの仕方は、普通に
http://jruby.org/
から
JRuby 1.5.0 Windows Executable
というリンク先をクリックしてダウンロードしてダブルクリックしてインストールするだけです。何も考えてません。
fujibeeさんの説明だとrvmってのを使ってますが、使えると思うんですが、今回はjirbを使ってしまおうと思います。
コマンドプロンプトを立ち上げて、以下のように打ちます。
C:\Users\mitsuo>jirb irb(main):001:0> irb(main):002:0* require 'java' => true irb(main):003:0> frame = javax.swing.JFrame.new("Hello,JRuby!") => #<Java::JavaxSwing::JFrame:0x4e21db> irb(main):004:0> frame.layout = java.awt.GridLayout.new(5,1) => #<Java::JavaAwt::GridLayout:0x1751a9e> irb(main):005:0> 1.upto(5) do |i| irb(main):006:1* frame.add(javax.swing.JButton.new("button #{i}")) irb(main):007:1> end => 1 irb(main):008:0>
ここまでは画面は何も変わりません。
まあ、見れば分かる通り、ここまではオブジェクトを作ってるところまでですね。
irb(main):008:0> frame.visible = true => true
これをやると、以下の画面が表示されます。
おぉ、スゲエ。
さらに、続けてこれをやると・・・
irb(main):009:0> frame.set_size(200,300) => nil
以下の画面が!!
おぉぉぉ!!スゲエ!!!カッコイイ!!!ボタンをrubyでループ処理で5個出してるあたりがイイですね。
そんで最後は
irb(main):010:0> frame.default_close_operation = javax.swing.JFrame::EXIT_ON_CLOSE => 3
これで閉じられるようになりますな。
この「CUIでGUIを動かす」という感覚に対して、俺はプラレス3四郎をイメージしました。
さて、こうなると、自分が作ったクラスをJRubyから呼ぶには??ってことをやりたくなります。
http://blogs.wankuma.com/kazuki/archive/2008/09/13/156481.aspx#
にしたがってやってみました。
てかもうAntの使い方忘れてる・・・。
かなり遠回り。
適当にクラス作ってjarにして、上記記事の通りやってみましたが・・
C:\Users\mitsuo>jirb irb(main):001:0> require 'java' => true irb(main):002:0> require 'SampleApp.jar' LoadError: no such file to load -- SampleApp from c:/jruby-1.5.0/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31 :in `require' from c:/jruby-1.5.0/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31 :in `require' from (irb):2
ありゃりゃ。例外だ。
include対象のクラスはカレントパスになきゃだめなのかな?と思い、以下のようにやってみた。
C:\jruby-1.5.0>cd lib C:\jruby-1.5.0\lib>jirb irb(main):001:0> irb(main):002:0* require 'java' => true irb(main):003:0> require 'SampleApp.jar' => true irb(main):004:0> include_class('com.bangucs.sample.SampleApp') => Java::ComBangucsSample::SampleApp irb(main):005:0> sampleapp = com.bangucs.sample.SampleApp.new => #<Java::ComBangucsSample::SampleApp:0x23d275>
うむ、通ったっぽい。なるほどー。
でも・・・
irb(main):006:0> p sampleapp.greet('aaa') irb(main):007:1' irb(main):008:1' p sampleapp.greet("aaaa") irb(main):009:1' irb(main):010:1' puts sampleapp.greet('abab') irb(main):011:1'
なぜか結果が表示されない・・・。というとこで時間切れ。
どうやら命令はきちんと通ってるっぽいので、動くことは動くんだろうと思います。
続きはまた今度。。。
rubyでFizzBuzz書いてみた
rubyってやつは記号が多いですね。。。
演算子かと思ったらメソッドだったりするし。なかなか慣れる事が出来てません。fizzbuzzすらも書けない・・・。
仕方がないのでirbを使って特訓しました。本とwebを見ながらひたすらirbで記号を中心にサンプル書いて動かすだけ。
で、そこまでやって、ようやくfizzbuzz壱号が書けました。
def fizzbuzz(n) for i in 1..n if i % 15 == 0 then p "fizzbuzz #{i} " elsif i % 5 == 0 then p "buzz #{i} " elsif i % 3 == 0 then p "fizz #{i}" else p i end end end p fizzbuzz(100)
これを実行すると、1〜100まででfizzbuzzします。
実行結果は以下。
1 2 "fizz 3" 4 "buzz 5 " "fizz 6" 7 8 "fizz 9" "buzz 10 " 11 "fizz 12" 13 14 "fizzbuzz 15 " 16 17 "fizz 18" 19 "buzz 20 " "fizz 21" 22 23 "fizz 24" "buzz 25 " 26 "fizz 27" 28 29 "fizzbuzz 30 " 31 32 "fizz 33" 34 "buzz 35 " "fizz 36" 37 38 "fizz 39" "buzz 40 " 41 "fizz 42" 43 44 "fizzbuzz 45 " 46 47 "fizz 48" 49 "buzz 50 " "fizz 51" 52 53 "fizz 54" "buzz 55 " 56 "fizz 57" 58 59 "fizzbuzz 60 " 61 62 "fizz 63" 64 "buzz 65 " "fizz 66" 67 68 "fizz 69" "buzz 70 " 71 "fizz 72" 73 74 "fizzbuzz 75 " 76 77 "fizz 78" 79 "buzz 80 " "fizz 81" 82 83 "fizz 84" "buzz 85 " 86 "fizz 87" 88 89 "fizzbuzz 90 " 91 92 "fizz 93" 94 "buzz 95 " "fizz 96" 97 98 "fizz 99" "buzz 100 " 1..100 Complete(0)
"" がついてるのが気持ち悪いしロジックも洗練されてないけど、やっとこさ自分でイチから書けたので晒します。
ちなみに、irbでやってた特訓の結果は以下です。
楽器で言うところの運指の練習とかオルタネイトピッキングの練習みたいなもんですかね。
Microsoft Windows [Version 6.0.6002] Copyright (c) 2006 Microsoft Corporation. All rights reserved. C:\Users\mitsuo>p(!true) 'p' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 C:\Users\mitsuo> C:\Users\mitsuo> C:\Users\mitsuo>irb irb(main):001:0> p(!true) false => nil irb(main):002:0> p(!false) true => nil irb(main):003:0> irb(main):004:0* p(!1=2) SyntaxError: compile error (irb):4: syntax error, unexpected '=', expecting ')' p(!1=2) ^ from (irb):4 irb(main):005:0> p(!2) false => nil irb(main):006:0> (!0) => false irb(main):007:0> (!1) => false irb(main):008:0> irb(main):009:0* irb(main):010:0* p(3!=5) true => nil irb(main):011:0> irb(main):012:0* p(3!=3) false => nil irb(main):013:0> irb(main):014:0* /xxx/ !~ yyy NameError: undefined local variable or method `yyy' for main:Object from (irb):14 irb(main):015:0> irb(main):016:0* /"aaaa"/ !~ "bb" => true irb(main):017:0> irb(main):018:0* /"aaaa"/ !~ "aaaa" => true irb(main):019:0> irb(main):020:0* /"aaaa"/ !~ "aaa" => true irb(main):021:0> /"aaaa"/ !~ "aaaaaaa" => true irb(main):022:0> p('%04b%04b' % [3, ~3] irb(main):023:1> ) "00111100" => nil irb(main):024:0> /'aaaa'/ =~ 'bbb' => nil irb(main):025:0> irb(main):026:0* /'aaaa'/ =~ 'aaaa' => nil irb(main):027:0> irb(main):028:0* irb(main):029:0* p(?a) 97 => nil irb(main):030:0> p(?a) #=>97 97 => nil irb(main):031:0> irb(main):032:0* def aa? irb(main):033:1> return false irb(main):034:1> end => nil irb(main):035:0> irb(main):036:0* p aa? false => nil irb(main):037:0> irb(main):038:0* def ab? irb(main):039:1> (1 != 2) ? p(false) : true irb(main):040:1> end => nil irb(main):041:0> irb(main):042:0* p ab? false nil => nil irb(main):043:0> irb(main):044:0* irb(main):045:0* irb(main):046:0* p ("a is #{a}") NameError: undefined local variable or method `a' for main:Object from (irb):46 from :0 irb(main):047:0> irb(main):048:0* irb(main):049:0* irb(main):050:0* class C irb(main):051:1> def foo irb(main):052:2> @foo irb(main):053:2> end irb(main):054:1> def foo=( v ) irb(main):055:2> @foo = v irb(main):056:2> end irb(main):057:1> end => nil irb(main):058:0> irb(main):059:0* c = C.new => #<C:0x42fd024> irb(main):060:0> c.foo = 5 => 5 irb(main):061:0> irb(main):062:0* p c.foo 5 => nil irb(main):063:0> irb(main):064:0* irb(main):065:0* class C irb(main):066:1> attr :foo,true irb(main):067:1> end => nil irb(main):068:0> irb(main):069:0* c = C.new => #<C:0x42ed930> irb(main):070:0> c.foo = 4 => 4 irb(main):071:0> p c.foo 4 => nil irb(main):072:0> foo = bar NameError: undefined local variable or method `bar' for main:Object from (irb):72 from :0 irb(main):073:0> foo[0] = bar NameError: undefined local variable or method `bar' for main:Object from (irb):73 from :0 irb(main):074:0> irb(main):075:0* foo.bar = baz NameError: undefined local variable or method `baz' for main:Object from (irb):75 from :0 irb(main):076:0> irb(main):077:0* irb(main):078:0* irb(main):079:0* irb(main):080:0* irb(main):081:0* class C irb(main):082:1> def initialize irb(main):083:2> @ary = [0,1,2,3,4,5,6,7] irb(main):084:2> end irb(main):085:1> def [](i) irb(main):086:2> @ary[i*2] irb(main):087:2> end irb(main):088:1> def []=(i,v) irb(main):089:2> @ary[i*2] = v irb(main):090:2> end irb(main):091:1> end => nil irb(main):092:0> irb(main):093:0* c = C.new => #<C:0x42c6bdc @ary=[0, 1, 2, 3, 4, 5, 6, 7]> irb(main):094:0> irb(main):095:0* p c[3] 6 => nil irb(main):096:0> irb(main):097:0* p c[3] = 1 1 => nil irb(main):098:0> irb(main):099:0* irb(main):100:0* a = 10 => 10 irb(main):101:0> p"a is #{a}" "a is 10" => nil irb(main):102:0> irb(main):103:0* irb(main):104:0* p(10%3) 1 => nil irb(main):105:0> irb(main):106:0* p(20%3) 2 => nil irb(main):107:0> irb(main):108:0* p("%05d" % 10) "00010" => nil irb(main):109:0> irb(main):110:0* irb(main):111:0* p %r{/etc/httpd/logs$} /\/etc\/httpd\/logs$/ => nil irb(main):112:0> irb(main):113:0* p %w{foo bar baz} ["foo", "bar", "baz"] => nil irb(main):114:0> irb(main):115:0* irb(main):116:0* p %!nomad! "nomad" => nil irb(main):117:0> irb(main):118:0* irb(main):119:0* irb(main):120:0* p (3&5) 1 => nil irb(main):121:0> irb(main):122:0* irb(main):123:0* i =3 => 3 irb(main):124:0> p (i &=3) 3 => nil irb(main):125:0> p (i &=3) 3 => nil irb(main):126:0> p (i &=3) 3 => nil irb(main):127:0> p (i &=2) 2 => nil irb(main):128:0> p i 2 => nil irb(main):129:0> irb(main):130:0* irb(main):131:0* irb(main):132:0* irb(main):133:0* irb(main):134:0* irb(main):135:0* p(3 && 4) 4 => nil irb(main):136:0> p(3 | 5) 7 => nil irb(main):137:0> irb(main):138:0* p(3 || 5) 3 => nil irb(main):139:0> irb(main):140:0* irb(main):141:0* a ||= :some => 10 irb(main):142:0> irb(main):143:0* p a 10 => nil irb(main):144:0> a ||= :sec => 10 irb(main):145:0> p a 10 => nil irb(main):146:0> irb(main):147:0* irb(main):148:0* irb(main):149:0* irb(main):150:0* irb(main):151:0* irb(main):152:0* irb(main):153:0* def fizzbuzz(n) irb(main):154:1> 1.upto(n) do |i| irb(main):155:2* if i%3==0 then irb(main):156:3* p "fizz : #{i}" irb(main):157:3> else i% 5 ==0 then irb(main):158:3* p "buzz : #{i}" irb(main):159:3> end irb(main):160:2> end irb(main):161:1> end SyntaxError: compile error (irb):157: syntax error, unexpected kTHEN, expecting kEND from (irb):161 from :0 irb(main):162:0> irb(main):163:0* exit C:\Users\mitsuo>
書いてて思ったけど、俺が楽器上達したのはバンドやってからだったなー。基礎練習だけやってたから上達したんじゃなくて、実践と同時に基礎を学んでたからかな。
楽器とか音楽とプログラミングの上達の仕方って非常に似てると思います。
俺のプログラミングの上達の仕方が楽器と同じだとすると、具体的なモノをコピーして動かしたりしながら基礎を学んだ方がよさそうだ。
繰り返しと制御構造とメソッドの使い方がなんとなくわかってきたので、以降はサンプルコードを読んでは動かし、壊しては作り・・・を繰り返そうと思います。ちょうどコピーバンドやってるような感じ。
しかしirb楽しいなぁ。
最近は、仕事でちょっとした計算するとき、電卓使わないでirbで計算しています。計算の過程も残るし、コピペも楽だし。