Tuesday, September 30, 2008
Monday, September 29, 2008
Ruby1.9 install
Ruby1.9 install again
download
$ svn co http://svn.ruby-lang.org/repos/ruby/trunk ruby
install
$ autoconf
$ ./configure --program-suffix=_
$ make
$ sudo make install
RubyのClassクラスはすべてのクラスの母であり、Moduleクラスはすべてのクラスの父である
class Moduledef m'm'endendModule.new.m # => "m"Enumerable.m # => "m"Math.m # => "m"Kernel.m # => "m"Class.new.m # => "m"Object.m # => "m"Array.m # => "m"class MyClassendMyClass.m # => "m"Module.m # => "m"Class.m # => "m"
MUJI Desk
サイズ:w122 * d52.5
(定価)
legs tamo melamine
stainless 63,000 58,800
steel 44,100 39,900
(10%OFF)
legs tamo melamine
stainless 56,700 52,920
steel 39,690 35,910
タモ材天板にステンレス脚で10%引きで56,700円
次の候補はタモ材にスチール脚で39,690円
差額は17,010円
一番安いのはメラミン天板とスチール脚で35,910円
差額は20,790円
メラミンが好きでないのと差額がタモ材とで3,000円しかないので
一番安いのは選択肢としてはない
タモ材スチール脚のとの差額は思ったほどじゃないな
10%OFFは3日から14日まで

Ruby method listのリファクタリング
Saturday, September 27, 2008
RubyのObjectクラスはタイムマシーンだ!
Friday, September 26, 2008
Rubyのクラス-オブジェクトはやっぱり複雑だ
- クラスにはメソッドを定義することができる。
- メソッドには、自身のためのselfメソッドとインスタンスのためのInstanceメソッドがある。
- クラスはインスタンスを生成でき、そのインスタンスはそのクラスに定義されたInstanceメソッドを自身のためのメソッドとして使える。
- オブジェクトにおけるselfメソッドはInstanceメソッドであり、クラスにおけるselfメソッドはクラスメソッドである。
- クラス継承は、サブクラスにおいてスーパークラスに定義されたselfメソッドとInstanceメソッドを、自分に定義されたメソッドとして継承すること。
- すべてのクラスの子孫クラスはObjectクラスであり、従ってObjectクラスに定義されたselfメソッドとInstanceメソッドは、そのまますべてのサブクラスで定義されたものになる。
- すべてのクラスはClassクラスのインスタンスだから、Classクラスに定義されているInstanceメソッドはすべてのクラスのクラスメソッドになる。
- ClassクラスはObjectクラスとModuleクラスを継承しているから、それらに定義されているselfメソッドとInstanceメソッドは、Classクラスに定義されたものになる。従って、ObjectクラスとModuleクラスに定義されているInstanceメソッドは、すべてのクラスのクラスメソッドになる。
- すべてのモジュールは、Moduleクラスのインスタンスである。よってModuleクラスに定義されているInstanceメソッドは、すべてのモジュールのモジュールメソッドになる。
- モジュールのincludeは、そこに定義されたInstanceメソッドを、include先クラスのInstanceメソッドとして継承すること。この場合モジュールに定義されたselfメソッド(モジュールメソッド)は継承されない。
- ObjectクラスはKernelモジュールをincludeしている。従って、Kernelモジュールに定義されたInstanceメソッドは、Objectクラスに定義されたものになる。
Thursday, September 25, 2008
RSpecをちゃんとやらんと!
Wednesday, September 24, 2008
さちAppStoreで2000万に激しく反応す!
- 画面に数字をランダムに表示してその数だけタップするゲーム
Webサービスのアイディア
- ランチ写真の投稿サイト
- 自分のおすすめ品投稿サイト
Monday, September 22, 2008
Ruby 1.9.0 2008-08-26 revision 18849 installed
Sunday, September 21, 2008
Barbar Sati
MacPortでRubyのヴァージョンを使い分ける
Friday, September 19, 2008
Ruby Class List
- クラス階層を表示するようにした
- 1.8.7以降で導入されたメソッドのリンクカラーを変えた(186のメソッドリストを読み込んで)
- 全体に表示を詰めた
- !や?で終わるメソッドのリンクにも対応させた
Ruby Ref Manual keywords
Wednesday, September 17, 2008
Tuesday, September 16, 2008
WebページをPDFに
iPod Touchを購入!
Monday, September 15, 2008
Class_tree
1 #!/usr/local/bin/ruby
2 # encoding: utf-8
3 def get_klasses(obj)
4 klasses = obj.constants.sort.map{ |c| eval(c.to_s) }.select{ |c| c.class.to_s =~ /^(Class|Module)$/ }
5 normal_class, module_class, error_class, erb_class = [],[],[],[]
6 klasses.each do |klass|
7 case
8 when klass.to_s =~/ERB|StringScanner/
9 erb_class << klass
10 when klass.to_s =~ /Error/
11 error_class << klass
12 when klass.class == Module
13 module_class << klass
14 else
15 normal_class << klass
16 end
17 end
18 return normal_class, module_class, error_class
19 end
20
21 def get_methods(klass)
22 result = []
23 meths = %w(public_methods protected_methods private_methods public_instance_methods protected_instance_methods private_instance_methods)
24 begin
25 meths.each do |m|
26 meth = klass.send(m,false)
27 meth.delete_if { |m| m =~ /get_klasses|get_methods|get_supers/ } if klass == Object
28 result << {m => meth.sort} unless meth.empty?
29 end
30 rescue Exception => e
31
32 end
33 result
34 end
35
36 def get_supers(klass)
37 (klass.superclass ? get_supers(klass.superclass) : []).unshift(klass)
38 end
39
40 klasses, modules, errors = get_klasses(Object)
41 all_klasses = klasses + modules + errors
42
43 klasses = (klasses).sort_by { |k| k.superclass.to_s }
44
45 class Array
46 def class_tree(parents)
47 result = []
48 parents.each do |parent|
49 s_class = select{ |this| this.superclass == parent }
50 result << class_tree(s_class) << s_class
51 end
52 result
53 end
54 end
55
56 klasses = [Object, Integer, File, Numeric, IO, String]
57 p klasses.class_tree([BasicObject])
Saturday, September 13, 2008
Friday, September 12, 2008
Gistの使い方
- 自分のアカウントでコードをペーストする
- Terminalでdropbox/github/に移動
- Gistの対象コードのprivate cloneからコードをpullする(git clone git@gist.github.com:10357.git git-10357)
- pullしたコードを修正する
- 修正をコミットする(git commit -a)
- サーバにpushする(git push)
Html Generator for Ruby 1.9 Classes
1 #!/usr/local/bin/ruby
2 # encoding: utf-8
3 require "erb"
4
5 def get_klasses(obj)
6 klasses = obj.constants.sort.map{ |c| eval(c.to_s) }.select{ |c| c.class.to_s =~ /^(Class|Module)$/ }
7 normal_class, module_class, error_class = [],[],[]
8 klasses.each do |klass|
9 case
10 when klass.to_s =~ /Error/
11 error_class << klass
12 when klass.class == Module
13 module_class << klass
14 else
15 normal_class << klass
16 end
17 end
18 return normal_class, module_class, error_class
19 end
20
21 def get_methods(klass)
22 result = []
23 meths = %w(public_methods protected_methods private_methods
24 public_instance_methods protected_instance_methods
25 private_instance_methods singleton_methods)
26 begin
27 meths.each do |m|
28 meth = klass.send(m,false)
29 result << {m => meth.sort} unless meth.empty?
30 end
31 rescue Exception => e
32
33 end
34 result
35 end
36
37 klasses, modules, errors = get_klasses(Object)
38 all_klasses = klasses + modules + errors
39
40 file_name = "/Users/keyes/Desktop/ruby_class.html"
41 File.open(file_name, "w+") do |f|
42 f.puts ERB.new(DATA.read).result(binding)
43 end
44
45 __END__
46 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
47 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
48 <html>
49 <head>
50 <meta http-equiv="Content-type" content="text/html; charset=utf-8">
51 <title>Ruby 1.9 Class List</title>
52 <style type="text/css" media="screen">
53 h1 {color:#eed; background:#149; padding-left:10px;}
54 h3 {color:#833;}
55 p.list {padding-left:15px;}
56 div#meths {padding-left:15px;}
57 span#top_link {font-size:18px; float:right; margin:8px 20px;}
58 a:link {color:;}
59 </style>
60 </head>
61 <body id="main" style='background:#eed'>
62 <p class='list'>
63 <% klasses.each do |klass| %>
64 <span><a href="#<%= klass %>"><%= klass %></a></span>
65 <% end %>
66 </p>
67 <p class='list'>
68 <% modules.each do |mod| %>
69 <span><a href="#<%= mod %>"><%= mod %></a></span>
70 <% end %>
71 </p>
72 <p class='list'>
73 <% errors.each do |error| %>
74 <span><a href="#<%= error %>"><%= error %></a></span>
75 <% end %>
76 </p>
77 <% all_klasses.each do |klass| %>
78 <h1 id="<%= klass %>"><%= klass %>:<%= klass.class %><span id="top_link"><a href=<%= File.basename(file_name) %> style="color:#883">top</a></span></h1>
79 <div id='meths'>
80 <% meths = get_methods(klass) %>
81 <% meths.each do |method| %>
82 <% method.each do |title, meths| %>
83 <h3><%= title %></h3>
84 <% meths.each do |meth| %>
85 <span><a href="http://www.ruby-lang.org/ja/man/html/<%= klass %>.html#<%= meth %>"><%= meth %></a> </span>
86 <% end %>
87 <% end %>
88 <% end %>
89 </div>
90 <% end %>
91 </body>
92 </html>
Thursday, September 11, 2008
make dot file for ruby classes
1 #!/usr/local/bin/ruby
2 # encoding: utf-8
3 ruby_classes = [ BasicObject, Object, Kernel, Module, Class, String, Array, Hash, Numeric, Integer, Fixnum, Float, Bignum, Range,
4 Regexp]#, MatchData, Struct, Struct::Tms, Symbol, IO, File, File::Stat, Dir, Time, Proc, Method, UnboundMethod, Binding, Encoding, Exception, Thread, ThreadGroup, Fiber, Mutex, Process::Status, TrueClass, FalseClass, NilClass ]
5 #Enumerator, Complex, Rational,
6 #ruby_modules = %w(Comparable Enumerable Errno FileTest GC Marshal Math ObjectSpace Process Process::GID Process::Sys Process::UID Signal)
7
8 class_output = ""
9 mod_output = ""
10
11 ruby_classes.each do |klass|
12 begin
13 superklass = klass.superclass
14 mods = klass.included_modules.delete_if{ |m| m == Kernel unless klass == Object }
15 meths = klass.instance_methods(false).join(",").gsub(/(([\w?!=\+\-\>@]+\,){3})/,'\1\n').gsub(/[<>|]/){ |m| '\\' + m }
16
17 class_output << %Q{ #{klass} [label="#{klass}\\nclass|#{meths}"]\n} << %Q{ #{superklass} -> #{klass}\n}
18
19 mods.each do |m|
20 mod_output << %Q{ #{m} -> #{klass}[color=red]\n}
21 end
22 rescue Exception => e
23 end
24 end
25 class_output.gsub!(/\s(\w+)::(\w+)/,'\1\2')
26 mod_output.gsub!(/\s(\w+)::(\w+)/,'\1\2')
27
28 File.open("/Users/keyes/Desktop/ruby_class.dot", "w+") do |f|
29 f.puts <<-"DOT"
30 digraph RubyClass {
31 rankdir=TB
32 node[shape=Mrecord, height=1.2, width=2, style=bold]
33 #{class_output}
34 node[shape=record, style=filled]
35 #{mod_output}
36 }
37 DOT
38 end
Friday, September 05, 2008
RubyのTopLevelは両生類だ!
- そこで定義されたメソッドはObjectのprivateメソッドになる。だからObjectクラス
- publicにすることもできる
- Singletonメソッドを定義できる。だからmainインスタンス
1 #!/usr/local/bin/ruby
2 # encoding: utf-8
3 module Kernel
4 def ker_pub_hello
5 "hello of Kernel Public called from #{self}"
6 end
7 private
8 def ker_pri_hello
9 "hello of Kernel Private called from #{self}"
10 end
11 end
12
13 class Object
14 def obj_hello
15 "hello of Object called from #{self}"
16 end
17 end
18
19 def top_hello
20 "hello of Top called from #{self}"
21 end
22 class << self
23 def top_singleton_class_hello
24 "hello of Top Singleton Class from #{self}"
25 end
26 end
27 def self.top_singleton_hello
28 "hello of Top Singleton from #{self}"
29 end
30 public
31 def sel
32 self.select{ |m| m =~ /hello$/ }
33 end
34
35
36 main = Object.new
37 main.obj_hello # => "hello of Object called from #<Object:0x11a30>"
38
39 ker_pub_hello # => "hello of Kernel Public called from main"
40 ker_pri_hello # => "hello of Kernel Private called from main"
41 self.ker_pub_hello # => "hello of Kernel Public called from main"
42 obj_hello # => "hello of Object called from main"
43 top_hello # => "hello of Top called from main"
44 self.top_singleton_class_hello # => "hello of Top Singleton Class from main"
45 self.top_singleton_hello # => "hello of Top Singleton from main"
46
47 self # => main
48 self.class # => Object
49 self.methods(true).sel # => ["top_singleton_class_hello", "ker_pub_hello", "top_singleton_hello", "obj_hello"]
50 self.private_methods(false).sel # => ["top_hello"]
51 self.singleton_methods(false) # => ["public", "to_s", "include", "top_singleton_hello", "private", "top_singleton_class_hello"]
52
53 Object.private_instance_methods(false).sel # => ["top_hello"]
54 Object.included_modules # => [Kernel]
55 Kernel.private_instance_methods.sel # => ["ker_pri_hello"]
56 Kernel.instance_methods.sel # => ["ker_pub_hello"]
57
58 class H
59 top_hello # => "hello of Top called from H"
60 def k
61 top_hello
62 end
63 end
64 H.new.k # => "hello of Top called from #<H:0xe6a0>"
Thursday, September 04, 2008
Ruby methods
1 #!/usr/local/bin/ruby
2 # encoding: utf-8
3 class Demo
4 def self.class_method
5 end
6 def public_method
7 end
8 private
9 def private_method
10 end
11 protected
12 def protected_method
13 end
14 class << self
15 def class_singleton_method
16 end
17 end
18 end
19
20
21 m1 = Demo.methods.select{ |m| m =~ /methods/ } # => ["public_methods", "methods", "instance_methods", "singleton_methods", "public_instance_methods", "protected_methods", "protected_instance_methods", "private_methods", "private_instance_methods"]
22
23 demo = Demo.new
24 m2 = demo.methods.select{ |m| m =~ /methods/ } # => ["public_methods", "methods", "singleton_methods", "protected_methods", "private_methods"]
25
26 puts "<Methods for Demo class>"
27 m1.map { |m| [m, Demo.send(m,false)] }.each { |k,v| puts "#{k} -> #{v}" }
28 puts "\n<Methods for demo object>"
29 m2.map { |m| [m, demo.send(m,false)] }.each { |k,v| puts "#{k} -> #{v}" }
- methods:自分が使えるメソッドを返す。falseの場合selfメソッド(Singletonメソッド)のみを返す(singletonメソッドと同じ)
- singleton_methods:そのSingletonメソッドを返す
- public_methods, protected_methods:自分が使えるメソッドを返す。つまりそのオブジェクトのクラスに定義されているpublic_instance_methodsおよびprotected_instance_methodsを返す。クラスにおいてmethods=public_methods+protected_methodsである。falseの場合はそのクラスへの継承メソッドは含まない。
- private_methods:そのオブジェクトのクラスに定義されているprivate_instance_methodsを返す
- instance_methods, public_instance_methods, protected_instance_methods, private_instance_methods:クラスオブジェクト(もジュールを含む)だけが使えるメソッドで、そのクラスに定義されているinstanceメソッドを返す。falseの場合はそのクラスへの継承メソッドは含まない