<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>urn:uuid:00a2b874-562a-4738-bd38-6e6ec9b756fa</id>
  <title>tetralabo</title>
  
  <updated>2011-10-25T06:53:00+09:00</updated>
  <generator>PinkyBlog</generator>
  <link href="http://ruby.morphball.net/note/blog.cgi" rel="alternate" />
  <link href="http://ruby.morphball.net/note/res/feed/modified.xml" rel="self" />
  <author>
    <name>Dice</name>
  </author>
	
  <entry>
    <id>urn:uuid:c42a3b48-6329-46a7-8fd4-1d941e7ec6d9</id>
    <title>facets/boolean 解説</title>
    <link href="http://ruby.morphball.net/note/blog.cgi/entries/1265552158-6680" rel="alternate" />
    <updated>2011-10-25T07:27:23+09:00</updated>
    <published>2011-10-25T06:53:00+09:00</published>
    
    <category term="ライブラリ紹介" /><category term="RubyFacets" />
    <content type="html">&lt;p&gt;膨大な数の拡張メソッドが収録されている&lt;a href=&quot;http://rubyworks.github.com/facets/&quot;&gt;Ruby Facets&lt;/a&gt;。現時点で日本語のドキュメントが存在しないため、普通は&lt;a href=&quot;http://rubyworks.github.com/facets/learn.html&quot;&gt;英語のドキュメント&lt;/a&gt;を解読していくことになるのですが、メソッドを一つ一つ解読していくのは大変です。そこでこのblogでは、私的なメモも兼ねて、Ruby Facetsに収録されたライブラリを日本語で解説していきます。&lt;/p&gt;

&lt;p&gt;第5回は、すべてのオブジェクトに真偽値（true / false）関連の変換・判定メソッドを追加する facets/boolean です。Ruby Facets 2.9.1に準拠しています。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#bfheader-0ca358eb88828dce18d81b8eef135504&quot; rel=&quot;toc&quot;&gt;駆け足紹介（クイックツアー）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#bfheader-c42f4ce71064db24aecb953cdcc671a1&quot; rel=&quot;toc&quot;&gt;Objectに追加されるインスタンスメソッド&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#bool&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;bool?&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#to-b&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;to_b&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#to-bool&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;to_bool&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#true&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;true?&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#false&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;false?&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;bfheader-0ca358eb88828dce18d81b8eef135504&quot;&gt;駆け足紹介（クイックツアー）&lt;/h3&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/boolean'

# to_bool : オブジェクトを真偽値に変換する
true.to_bool  # =&amp;gt; true
nil.to_bool   # =&amp;gt; false
'abc'.to_bool # =&amp;gt; true

# to_b : 真値（フラグの有効値）とみなしてもよさそうな文字列や数値などをtrueに、それ以外の値をfalseに変換する。ただし一部の値はnilに変換する
&quot;yes&quot;.to_b       # =&amp;gt; true
&quot;no&quot;.to_b        # =&amp;gt; false
&quot;on&quot;.to_b        # =&amp;gt; true
&quot;off&quot;.to_b       # =&amp;gt; false
&quot;unknown&quot;.to_b   # =&amp;gt; false
&quot;null&quot;.to_b      # =&amp;gt; nil
1.to_b           # =&amp;gt; true
0.to_b           # =&amp;gt; false

true.to_b    # =&amp;gt; true
false.to_b   # =&amp;gt; false
nil.to_b     # =&amp;gt; false

# bool? : オブジェクトが真偽値かどうかを判定する
'foo'.bool? # =&amp;gt; false
30.bool?    # =&amp;gt; false
true.bool?  # =&amp;gt; true
false.bool? # =&amp;gt; true
nil.bool?   # =&amp;gt; false

# true? / false? : それぞれオブジェクトがtrueかどうか、falseかどうかを判定する
t = true
f = false
n = nil
s = 'foo'

t.true?   # =&amp;gt; true
f.true?   # =&amp;gt; false
n.true?   # =&amp;gt; false
s.true?   # =&amp;gt; false

f.false?  # =&amp;gt; true
n.false?  # =&amp;gt; false
&lt;/code&gt;&lt;/pre&gt;



&lt;h3 id=&quot;bfheader-c42f4ce71064db24aecb953cdcc671a1&quot;&gt;Objectに追加されるインスタンスメソッド&lt;/h3&gt;

&lt;h4 id=&quot;bool&quot;&gt;&lt;code&gt;bool?&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;オブジェクトが真偽値を表すオブジェクト（true, falseのどちらか）であるかどうかを判定します。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/boolean'

'foo'.bool? # =&amp;gt; false
30.bool?    # =&amp;gt; false
true.bool?  # =&amp;gt; true
false.bool? # =&amp;gt; true
nil.bool?   # =&amp;gt; false
&lt;/code&gt;&lt;/pre&gt;



&lt;h4 id=&quot;to-b&quot;&gt;&lt;code&gt;to_b&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;真値（フラグの有効値）とみなしてもよさそうな文字列や数値などをtrueに、それ以外の値をfalseに変換します。ただし一部の値はnilに変換します。&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;#to-bool&quot;&gt;to_bool&lt;/a&gt;メソッドとの違いは、実際に真であるか偽であるかにかかわらず、「真のように見える値」であればtrueに、「偽のように見える値」であればfalseに変換されるという点です。
Ruby Facets 2.9.1時点では、以下のような値が「真のように見える値」と見なされます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;文字列 'true', 'yes', 'on', 't', '1', 'y', '==' (大文字/小文字は区別しません。また、前後の空白は取り除いて判定します)&lt;/li&gt;
&lt;li&gt;0以外の数値&lt;/li&gt;
&lt;li&gt;空でない配列やハッシュ&lt;/li&gt;
&lt;li&gt;true&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;逆に、以下のような値は「偽のように見える値」と見なされます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;上記以外の文字列&lt;/li&gt;
&lt;li&gt;0と等しい数値（0, 0.0）&lt;/li&gt;
&lt;li&gt;空の配列やハッシュ&lt;/li&gt;
&lt;li&gt;false, nil&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;以下の値は、to_bメソッドによりnilに変換されます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;文字列 'null', 'nil' (大文字/小文字は区別しません。また、前後の空白は取り除いて判定します)&lt;/li&gt;
&lt;/ul&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/boolean'

&quot;true&quot;.to_b      # =&amp;gt; true
&quot;false&quot;.to_b     # =&amp;gt; false
&quot;yes&quot;.to_b       # =&amp;gt; true
&quot;no&quot;.to_b        # =&amp;gt; false
&quot;on&quot;.to_b        # =&amp;gt; true
&quot;off&quot;.to_b       # =&amp;gt; false
&quot;unknown&quot;.to_b   # =&amp;gt; false
&quot;null&quot;.to_b      # =&amp;gt; nil
1.to_b           # =&amp;gt; true
0.to_b           # =&amp;gt; false
0.0.to_b         # =&amp;gt; false

&quot;True&quot;.to_b       # =&amp;gt; true
&quot; TRUE &quot;.to_b     # =&amp;gt; true

['a'].to_b       # =&amp;gt; true
[].to_b          # =&amp;gt; false
{'a' =&amp;gt; 1}.to_b  # =&amp;gt; true
{}.to_b          # =&amp;gt; false

true.to_b    # =&amp;gt; true
false.to_b   # =&amp;gt; false
nil.to_b     # =&amp;gt; false
&lt;/code&gt;&lt;/pre&gt;



&lt;h4 id=&quot;to-bool&quot;&gt;&lt;code&gt;to_bool&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;オブジェクトを真偽値（trueオブジェクトかfalseオブジェクトのどちらか）に変換します。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/boolean'

true.to_bool  # =&amp;gt; true
nil.to_bool   # =&amp;gt; false
'abc'.to_bool # =&amp;gt; true
&lt;/code&gt;&lt;/pre&gt;



&lt;h4 id=&quot;true&quot;&gt;&lt;code&gt;true?&lt;/code&gt;&lt;/h4&gt;

&lt;h4 id=&quot;false&quot;&gt;&lt;code&gt;false?&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;それぞれ、オブジェクトが実際にtrueであるかどうか / falseであるかどうかを判定します。&lt;/p&gt;

&lt;p&gt;「その値が真か偽か」という判定ではなく、「実際に真偽値を表すオブジェクト（true, false）であるかどうか」という判定を行います。そのため、'str'.true? や 1.true? は false を返します。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/boolean'

t = true
f = false
n = nil
s = 'foo'

t.true?   # =&amp;gt; true
f.true?   # =&amp;gt; false
n.true?   # =&amp;gt; false
s.true?   # =&amp;gt; false

t.false?  # =&amp;gt; false
f.false?  # =&amp;gt; true
n.false?  # =&amp;gt; false
s.false?  # =&amp;gt; false
&lt;/code&gt;&lt;/pre&gt;

</content>
  </entry><entry>
    <id>urn:uuid:3a1a8788-4dfb-4c96-a756-29bec2964766</id>
    <title>NYAOS上でpikを動かすための設定（0.3.0pre対応版）</title>
    <link href="http://ruby.morphball.net/note/blog.cgi/entries/1316423511-d3e9" rel="alternate" />
    <updated>2011-09-19T18:11:51+09:00</updated>
    <published>2011-09-19T18:11:51+09:00</published>
    
    <category term="pik" /><category term="NYAOS" />
    <content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://d.hatena.ne.jp/miyamuko/20100905/nyaos_with_pik&quot;&gt;nyaos で pik を使う設定と pik の動作原理 - *Trace Output*&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;上記ページで公開されている方法を使うと、&lt;a href=&quot;http://www.nyaos.org/index.cgi?p=NYAOS+3000&quot;&gt;NYAOS&lt;/a&gt;上でも&lt;a href=&quot;https://github.com/vertiginous/pik&quot;&gt;pik&lt;/a&gt;を使ってrubyを切り替えることが可能になります。&lt;/p&gt;

&lt;p&gt;しかし、上記関数はpik 0.2.8を使っていれば動作するのですが、最新のpik 0.3.0 preを使っている場合には動作しません（自動生成されるバッチファイルの名前が、&lt;code&gt;pik.bat&lt;/code&gt;から&lt;code&gt;pik_run.bat&lt;/code&gt;に変更されたためです）。そこで、pik 0.3.0 preにも対応できるように、上記ページで公開されている関数を書き換えました。&lt;/p&gt;

&lt;p&gt;以下の関数定義を&lt;code&gt;_nya&lt;/code&gt;ファイルに追加すると、pik 0.2.8とpik 0.3.0 preの両方をNYAOS上で使えるようになります。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;# pikをNYAOS上で使うための関数
pik{
  pik_runner.exe pik.bat %*

  # pik 0.3.0 pre 以降対応
  if exist &quot;%USERPROFILE%.pik\pik_run.bat&quot; then
    source &quot;%USERPROFILE%.pik\pik_run.bat&quot; 2&amp;gt; nul
  else
    # pik 0.2.8 以前対応
    if exist &quot;%USERPROFILE%.pik\pik.bat&quot; then
      source &quot;%USERPROFILE%.pik\pik.bat&quot; 2&amp;gt; nul
    endif
  endif
}
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;※&lt;code&gt;_nya&lt;/code&gt;ファイルの中にすでにpik関数の定義を追加している場合は、その定義を上記の関数定義で上書きしてください。&lt;/p&gt;</content>
  </entry><entry>
    <id>urn:uuid:7b6b8645-9314-4866-9254-4f75388e9974</id>
    <title>facets/exception 解説 （Ruby Facets）</title>
    <link href="http://ruby.morphball.net/note/blog.cgi/entries/1264911892-6c3d" rel="alternate" />
    <updated>2010-02-06T11:45:00+09:00</updated>
    <published>2010-02-06T11:45:00+09:00</published>
    
    <category term="ライブラリ紹介" /><category term="RubyFacets" />
    <content type="html">&lt;p&gt;膨大な数の拡張メソッドが収録されている&lt;a href=&quot;http://facets.rubyforge.org/&quot;&gt;Ruby Facets&lt;/a&gt;。現時点で日本語のドキュメントが存在しないため、普通は&lt;a href=&quot;http://facets.rubyforge.org/apidoc/index.html&quot;&gt;英語のドキュメント&lt;/a&gt;を解読していくことになるのですが、メソッドを一つ一つ解読していくのは大変です。そこでこのblogでは、私的なメモも兼ねて、Ruby Facetsに収録されたライブラリを日本語で解説していきます。&lt;/p&gt;

&lt;p&gt;第4回は例外（Exception）クラスを拡張する facets/exception です。Ruby Facets 2.8.1に準拠しています。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#bfheader-0ca358eb88828dce18d81b8eef135504&quot; rel=&quot;toc&quot;&gt;駆け足紹介（クイックツアー）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#bfheader-c36dd3e69a2f9066a8a12c9cfffe8df1&quot; rel=&quot;toc&quot;&gt;クラスメソッド&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#exception-suppress&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;Exception.suppress(*exception_classes) { ... }&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#bfheader-b88b52a7115ce77cea123258541b3378&quot; rel=&quot;toc&quot;&gt;インスタンスメソッド&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#detail&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;detail&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#raised&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;raised? { ... }&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;bfheader-0ca358eb88828dce18d81b8eef135504&quot;&gt;駆け足紹介（クイックツアー）&lt;/h3&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/exception'

# detail: エラーの詳細を表示する
begin
    wrong_name_method
rescue NameError
    puts $!.detail
end
# 出力: 
# undefined local variable or method `wrong_name_method' for main:Object
#   exception-tour.rb:5
#   LOGGED FROM: exception-tour.rb:7


# Exception.suppress: 指定したクラスに属する例外を抑制する
Exception.suppress(NameError, ArgumentError) do
    wrong_name_method
end
puts &quot;NameError is suppressed.&quot;
&lt;/code&gt;&lt;/pre&gt;



&lt;h3 id=&quot;bfheader-c36dd3e69a2f9066a8a12c9cfffe8df1&quot;&gt;クラスメソッド&lt;/h3&gt;

&lt;h4 id=&quot;exception-suppress&quot;&gt;&lt;code&gt;Exception.suppress(*exception_classes) { ... }&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;ブロック内において、指定したクラスの例外が発生しても、インタープリタの実行が終了されないようにするる。&lt;/p&gt;

&lt;p&gt;引数には1つ以上の例外クラスを与える。ブロック実行中に何らかの例外が発生したとき、その例外が引数で指定した例外クラスのどれかに属している（kind_of? 判定で true になる）なら、そのままブロックを抜ける。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/exception/suppress'

wrong_name_method
# undefined local variable or method `wrong_name_method' for main:Object (NameError)

Exception.suppress(NameError, ArgumentError) do
  wrong_name_method
end
# 何も起きない
&lt;/code&gt;&lt;/pre&gt;



&lt;h3 id=&quot;bfheader-b88b52a7115ce77cea123258541b3378&quot;&gt;インスタンスメソッド&lt;/h3&gt;

&lt;h4 id=&quot;detail&quot;&gt;&lt;code&gt;detail&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;その例外の詳細を表す文字列を返す。バックトレースや呼び出し元などの情報を含んでおり、message や to_s よりも詳しい情報を得ることができる。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/exception/detail'

begin
    wrong_name_method
rescue
    puts &quot;-- Detail ----------------&quot;
    puts $!.detail
end
&lt;/code&gt;&lt;/pre&gt;





&lt;pre&gt;&lt;code&gt;-- Detail ----------------
undefined local variable or method `wrong_name_method' for main:Object
  exception-detail.rb:4
  LOGGED FROM: exception-detail.rb:7
&lt;/code&gt;&lt;/pre&gt;



&lt;h4 id=&quot;raised&quot;&gt;&lt;code&gt;raised? { ... }&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;ブロックの実行時に例外が発生するかどうかを判定するメソッドのようだが、現時点（Ruby Facets 2.8.1）では正常に動作しない。ソースコードを見る限り、rescue 節に例外クラスでない self を渡そうとしているため、もともと動作するはずがないメソッドのようだ。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;class Exception
  # Does a block raise an a given +exception+.
  #
  def self.raised? #:yeild:
    begin
      yield
      false
    rescue self
      true
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;

</content>
  </entry><entry>
    <id>urn:uuid:a5379fc5-10c3-44da-a160-e184b02b770b</id>
    <title>facets/numeric 解説 （Ruby Facets）</title>
    <link href="http://ruby.morphball.net/note/blog.cgi/entries/1264901366-a1c1" rel="alternate" />
    <updated>2010-02-02T01:30:00+09:00</updated>
    <published>2010-02-02T01:30:00+09:00</published>
    
    <category term="ライブラリ紹介" /><category term="RubyFacets" />
    <content type="html">&lt;p&gt;膨大な数の拡張メソッドが収録されている&lt;a href=&quot;http://facets.rubyforge.org/&quot;&gt;Ruby Facets&lt;/a&gt;。現時点で日本語のドキュメントが存在しないため、普通は&lt;a href=&quot;http://facets.rubyforge.org/apidoc/index.htmlい&quot;&gt;英語のドキュメント&lt;/a&gt;を解読していくことになるのですが、メソッドを一つ一つ解読していくのは大変です。そこでこのblogでは、私的なメモも兼ねて、Ruby Facetsに収録されたライブラリを日本語で解説していきます。&lt;/p&gt;

&lt;p&gt;第2回は数値（Numeric）クラスを拡張する facets/numeric です。Ruby Facets 2.8.1に準拠しています。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#bfheader-0ca358eb88828dce18d81b8eef135504&quot; rel=&quot;toc&quot;&gt;駆け足紹介（クイックツアー）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#bfheader-b88b52a7115ce77cea123258541b3378&quot; rel=&quot;toc&quot;&gt;インスタンスメソッド&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#distance&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;distance(other)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#length&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;length&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#size&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;size&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#round-at&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;round_at(d)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#round-to&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;round_to(n)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;bfheader-0ca358eb88828dce18d81b8eef135504&quot;&gt;駆け足紹介（クイックツアー）&lt;/h3&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/numeric'

# round_at, round_to: 数値を任意の桁で丸める
p 25.1482.round_at(1)  # =&amp;gt; 25.1
p 25.1482.round_at(2)  # =&amp;gt; 25.15
p 25.1482.round_at(6)  # =&amp;gt; 25.1482
p 25.1482.round_at(0)  # =&amp;gt; 25.0
p 25.1482.round_at(-1) # =&amp;gt; 30.0
p 25.1482.round_at(-2) # =&amp;gt; 0.0

p 25.1482.round_to(0.1)      # =&amp;gt; 25.1
p 25.1482.round_to(0.01)     # =&amp;gt; 25.15
p 25.1482.round_to(1)        # =&amp;gt; 25.0
p 25.1482.round_to(10)       # =&amp;gt; 30.0


# distance: 減算（機能は - 演算子と同じ）
p 7.distance(4) # =&amp;gt; 3

p ([1, 2, 3] - [2])       # =&amp;gt; [1, 3]
p [1, 2, 3].distance([2]) # undefined method (NoMethodError)
&lt;/code&gt;&lt;/pre&gt;



&lt;h3 id=&quot;bfheader-b88b52a7115ce77cea123258541b3378&quot;&gt;インスタンスメソッド&lt;/h3&gt;

&lt;h4 id=&quot;distance&quot;&gt;&lt;code&gt;distance(other)&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;self - otherと同じ。「数値同士での減算」を明示したいときに使う。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/numeric/distance'

p 4.distance(3) # =&amp;gt; 1  (4 - 3と同じ)

p ([1, 2, 3] - [2])       # =&amp;gt; [1, 3]
p [1, 2, 3].distance([2]) # undefined method (NoMethodError)
&lt;/code&gt;&lt;/pre&gt;



&lt;h4 id=&quot;length&quot;&gt;&lt;code&gt;length&lt;/code&gt;&lt;/h4&gt;

&lt;h4 id=&quot;size&quot;&gt;&lt;code&gt;size&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;何もしない（selfを返す）。&lt;/p&gt;

&lt;p&gt;……のはずだが、sizeメソッドを整数に対して実行すると、なぜか意図通りの数値が返ってこない（rubyのバグ？）。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/numeric/length'
require 'facets/numeric/size'

p 3.length      # =&amp;gt; 3
p 2.5.length    # =&amp;gt; 2.5

p 3.size      # =&amp;gt; 4 (?)
p 4.size      # =&amp;gt; 4
p 5.size      # =&amp;gt; 4 (?)

p RUBY_DESCRIPTION  # =&amp;gt;&quot;ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]&quot;
&lt;/code&gt;&lt;/pre&gt;



&lt;h4 id=&quot;round-at&quot;&gt;&lt;code&gt;round_at(d)&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;小数点以下d桁まで残し、近い方の数字に丸める（小数点以下d桁で四捨五入する）。
返り値はかならずFloatになる。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dが0であれば整数部分のみを残す。&lt;/li&gt;
&lt;li&gt;dが負の数であれば、整数部分までさかのぼって丸める。&lt;/li&gt;
&lt;li&gt;dが小数（Float）だとうまく動作しない。&lt;/li&gt;
&lt;/ul&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/numeric/round'

p 25.1482.round_at(1)  # =&amp;gt; 25.1
p 25.1482.round_at(2)  # =&amp;gt; 25.15
p 25.1482.round_at(10) # =&amp;gt; 25.1482
p 25.1482.round_at(0)  # =&amp;gt; 25.0
p 25.1482.round_at(-1) # =&amp;gt; 30.0
p 25.1482.round_at(-2) # =&amp;gt; 0.0

p 25.round_at(2) # =&amp;gt; 25.0
&lt;/code&gt;&lt;/pre&gt;



&lt;h4 id=&quot;round-to&quot;&gt;&lt;code&gt;round_to(n)&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;#round-at&quot;&gt;round_at&lt;/a&gt;メソッドと機能は同じだが、引数が異なる。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/numeric/round'

p 25.1482.round_to(0.1)      # =&amp;gt; 25.1
p 25.1482.round_to(0.01)     # =&amp;gt; 25.15
p 25.1482.round_to(0.000001) # =&amp;gt; 25.1482
p 25.1482.round_to(1)        # =&amp;gt; 25.0
p 25.1482.round_to(10)       # =&amp;gt; 30.0
p 25.1482.round_to(100)      # =&amp;gt; 0.0

p 25.round_to(0.01) # =&amp;gt; 25.0
&lt;/code&gt;&lt;/pre&gt;

</content>
  </entry><entry>
    <id>urn:uuid:722d268a-cc7e-409a-af04-89af33b5ad62</id>
    <title>facets/time 解説 （Ruby Facets）</title>
    <link href="http://ruby.morphball.net/note/blog.cgi/entries/1264841608-e17f" rel="alternate" />
    <updated>2010-01-31T13:03:48+09:00</updated>
    <published>2010-01-30T17:53:28+09:00</published>
    
    <category term="ライブラリ紹介" /><category term="RubyFacets" />
    <content type="html">&lt;p&gt;膨大な数の拡張メソッドが収録されている&lt;a href=&quot;http://facets.rubyforge.org/&quot;&gt;Ruby Facets&lt;/a&gt;。現時点で日本語のドキュメントが存在しないため、普通は&lt;a href=&quot;http://facets.rubyforge.org/apidoc/index.htmlい&quot;&gt;英語のドキュメント&lt;/a&gt;を解読していくことになるのですが、メソッドを一つ一つ解読していくのは大変です。そこでこのblogでは、私的なメモも兼ねて、Ruby Facetsに収録されたライブラリを日本語で解説していきます。&lt;/p&gt;

&lt;p&gt;第1回はTimeクラスを拡張する facets/time です。Ruby Facets 2.8.1に準拠しています。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#bfheader-0ca358eb88828dce18d81b8eef135504&quot; rel=&quot;toc&quot;&gt;駆け足紹介（クイックツアー）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#bfheader-c36dd3e69a2f9066a8a12c9cfffe8df1&quot; rel=&quot;toc&quot;&gt;クラスメソッド&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#time-elapse&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;Time.elapse { ... }&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#time-stamp&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;Time.stamp(fmt)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#bfheader-b88b52a7115ce77cea123258541b3378&quot; rel=&quot;toc&quot;&gt;インスタンスメソッド&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#advance&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;advance(options)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ago&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;ago(number, units=:seconds)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#hence&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;hence(number, units=:seconds)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#change&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;change(options)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#round&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;round(amount)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#set&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;set(options)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#stamp&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;stamp(fmt = nil)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#trunc&quot; rel=&quot;toc&quot;&gt;&lt;code&gt;trunc(amount)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;bfheader-0ca358eb88828dce18d81b8eef135504&quot;&gt;駆け足紹介（クイックツアー）&lt;/h3&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/time'

# Time.elapse: ブロックの実行時間を計測する
p Time.elapse{ sleep(1) }  # =&amp;gt; 1.07800006866455


time = Time.now
p time  # =&amp;gt; Sat Jan 30 21:41:42 +0900 2010

# hence, ago: 時間を進めたり戻したりできる
p time.hence(5, :days)  # =&amp;gt; Thu Feb 04 21:41:42 +0900 2010
p time.ago(2, :weeks)   # =&amp;gt; Sat Jan 16 21:41:42 +0900 2010


# change: 時刻のうち一部だけを書き換える
p time.change(:day =&amp;gt; 2, :minute =&amp;gt; 30) #=&amp;gt; Sat Jan 02 21:41:42 +0900 2010


# trunc, round: 時刻を指定した単位（秒）で丸める
#               60 なら1分単位、60 * 60 なら1時間単位
p time.trunc(60)       # =&amp;gt; Sat Jan 30 21:41:00 +0900 2010
p time.trunc(60 * 60)  # =&amp;gt; Sat Jan 30 21:00:00 +0900 2010
p time.round(60)       # =&amp;gt; Sat Jan 30 21:42:00 +0900 2010
p time.round(60 * 60)  # =&amp;gt; Sat Jan 30 22:00:00 +0900 2010


# stamp: 時刻を指定したフォーマットで文字列化
p time.stamp(:short)  # =&amp;gt; &quot;30 Jan 21:41&quot;
p time.stamp(:time)   # =&amp;gt; &quot;21:41&quot;
p time.stamp(:number) # =&amp;gt; &quot;20100130214142&quot;
p time.stamp(:db)     # =&amp;gt; &quot;2010-01-30 21:41:42&quot;

p Time.stamp(:db)     # Time.now.stamp(:db)と同じ
&lt;/code&gt;&lt;/pre&gt;



&lt;h3 id=&quot;bfheader-c36dd3e69a2f9066a8a12c9cfffe8df1&quot;&gt;クラスメソッド&lt;/h3&gt;

&lt;h4 id=&quot;time-elapse&quot;&gt;&lt;code&gt;Time.elapse { ... }&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;ブロックの実行時間を計測し、結果をFloatで返す（&lt;a href=&quot;http://ruby-doc.org/stdlib/libdoc/benchmark/rdoc/classes/Benchmark.html#M000005&quot;&gt;Benchmark.realtime&lt;/a&gt; と同じ）。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/time/elapse'

Time.elapse { sleep 1 }  #=&amp;gt; 0.999188899993896
&lt;/code&gt;&lt;/pre&gt;



&lt;h4 id=&quot;time-stamp&quot;&gt;&lt;code&gt;Time.stamp(fmt)&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;Time.now.stamp(fmt)&lt;/code&gt; と同じ。詳しくは&lt;a href=&quot;#stamp&quot;&gt;stamp&lt;/a&gt;メソッドを参照。&lt;/p&gt;

&lt;h3 id=&quot;bfheader-b88b52a7115ce77cea123258541b3378&quot;&gt;インスタンスメソッド&lt;/h3&gt;

&lt;h4 id=&quot;advance&quot;&gt;&lt;code&gt;advance(options)&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;http://as.rubyonrails.org/&quot;&gt;ActiveSupport&lt;/a&gt;の Time#advance と同じ。&lt;/p&gt;

&lt;h4 id=&quot;ago&quot;&gt;&lt;code&gt;ago(number, units=:seconds)&lt;/code&gt;&lt;/h4&gt;

&lt;h4 id=&quot;hence&quot;&gt;&lt;code&gt;hence(number, units=:seconds)&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;agoなら時間を戻し、henceなら時間を進めた、新しいTimeオブジェクトを生成して返す。
動かす量は数値（number）と単位（units）の組み合わせで指定でき、単位には &lt;code&gt;:seconds, :minutes, :hours, :days, :weeks, :months, :years&lt;/code&gt; のいずれかを指定できる。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/time/ago'
require 'facets/time/hence'

time = Time.now
p time                     # =&amp;gt; Sat Jan 30 18:59:29 +0900 2010
p time.hence(5)            # =&amp;gt; Sat Jan 30 18:59:34 +0900 2010
p time.hence(5, :seconds)  # 上の例と同じ
p time.hence(30, :minutes) # =&amp;gt; Sat Jan 30 19:29:29 +0900 2010
p time.hence(7, :days)     # =&amp;gt; Sat Feb 06 18:59:29 +0900 2010
p time.ago(3, :weeks)      # =&amp;gt; Sat Jan 09 18:59:29 +0900 2010
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;numberに負の数（-20）を指定した場合には、逆方向のメソッドが呼び出される。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;time.hence(-10) # time.ago(10) と同じ
&lt;/code&gt;&lt;/pre&gt;



&lt;h4 id=&quot;change&quot;&gt;&lt;code&gt;change(options)&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;時刻を部分的に変更した、新しいTimeオブジェクトを生成して返す。
「年だけを2009年に変更」「時間を13時30分に変更」などの処理が可能。&lt;/p&gt;

&lt;p&gt;時間（:hour）、分（:minute）、秒（:second）を変更した場合、それより下の時間要素は0に設定される。
たとえば「15時30分」であるTimeオブジェクトに対して、changeで時間だけを13時に変更すると、時刻は「13時00分」となる。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/time/change'

time = Time.now
p time                                    # =&amp;gt; Sat Jan 30 20:45:12 +0900 2010
p time.change(:year =&amp;gt; 2000, :month =&amp;gt; 3) # =&amp;gt; Thu Mar 30 20:45:38 +0900 2000
p time.change(:hour =&amp;gt; 23)                # =&amp;gt; Sat Jan 30 23:00:00 +0900 2010
&lt;/code&gt;&lt;/pre&gt;



&lt;h4 id=&quot;round&quot;&gt;&lt;code&gt;round(amount)&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;時刻をamount秒単位で丸めた、新しいTimeオブジェクトを生成して返す。
たとえばamountが60であれば、時刻を1分単位で割り、四捨五入のように近いほうの時刻へ丸める。&lt;/p&gt;

&lt;p&gt;近いほうの時刻にするのではなく切り捨てたい場合には、&lt;a href=&quot;#trunc&quot;&gt;trunc&lt;/a&gt;メソッドを使う。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/time/round'

time = Time.now
p time                     # =&amp;gt; Sat Jan 30 20:57:56 +0900 2010
p time.round(60)           # =&amp;gt; Sat Jan 30 20:58:00 +0900 2010
p time.round(60 * 60)      # =&amp;gt; Sat Jan 30 21:00:00 +0900 2010
&lt;/code&gt;&lt;/pre&gt;



&lt;h4 id=&quot;set&quot;&gt;&lt;code&gt;set(options)&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;#change&quot;&gt;change&lt;/a&gt;メソッドと同じだが、時間・分・秒を変更しても、その下の時間要素を0にしない。&lt;/p&gt;

&lt;h4 id=&quot;stamp&quot;&gt;&lt;code&gt;stamp(fmt = nil)&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;時刻を指定したフォーマットの文字列に整形する。fmtはフォーマットの種類を表すSymbol。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/time/stamp'

time = Time.now
p time.stamp(:short) # =&amp;gt; &quot;30 Jan 18:18&quot;
p time.stamp(:long) # =&amp;gt; &quot;January 30, 2010 18:18&quot;
p time.stamp(:time) # =&amp;gt; &quot;18:18&quot;
p time.stamp(:number) # =&amp;gt; &quot;20100130181814&quot;
p time.stamp(:utc) # =&amp;gt;&quot;2010-01-30 18:18:14&quot;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;使用可能なフォーマットとその内容については、Time::FORMAT定数を見れば確認できる。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/time/stamp'

p Time::FORMAT.class # =&amp;gt; Hash
p Time::FORMAT.keys  # =&amp;gt; [:datbase, :day1st, :utc, nil, :long, :number, :dmYHM, :short, :rfc822, :db, :time, :dbase]
p Time::FORMAT[:db]  # =&amp;gt; &quot;%Y-%m-%d %H:%M:%S&quot;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;なお、Symbolではなく文字列を引数にすると、Time#strftimeとほぼ同じ動作を行う。&lt;/p&gt;

&lt;h4 id=&quot;trunc&quot;&gt;&lt;code&gt;trunc(amount)&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;時刻をamount秒単位で切り捨てた、新しいTimeオブジェクトを生成して返す。たとえばamountが60であれば、時刻を1分単位で割り、余り（秒）は切り捨てる。&lt;/p&gt;

&lt;p&gt;切り捨てでなく近いほうの時刻にしたい場合には、&lt;a href=&quot;#round&quot;&gt;round&lt;/a&gt;メソッドを使う。&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;require 'facets/time/trunc'

time = Time.now
p time                     # =&amp;gt; Sat Jan 30 20:57:56 +0900 2010
p time.trunc(60)           # =&amp;gt; Sat Jan 30 20:57:00 +0900 2010
p time.trunc(60 * 60)      # =&amp;gt; Sat Jan 30 20:00:00 +0900 2010
&lt;/code&gt;&lt;/pre&gt;

</content>
  </entry><entry>
    <id>urn:uuid:4b281954-c357-4933-bac1-89319efbaeb5</id>
    <title>[メモ] Rubyで使えるMarkdownパーサ</title>
    <link href="http://ruby.morphball.net/note/blog.cgi/entries/1258863285-b3b4" rel="alternate" />
    <updated>2009-11-22T13:14:45+09:00</updated>
    <published>2009-11-22T13:14:45+09:00</published>
    
    <category term="Markdown" />
    <content type="html">&lt;p&gt;見つけたものからメモっていきます。&lt;/p&gt;

&lt;h3 id=&quot;bfheader-c82c8e1ebad0477460bc2d89c6b96be0&quot;&gt;BlueCloth&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.deveiate.org/projects/BlueCloth&quot;&gt;http://www.deveiate.org/projects/BlueCloth&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Markdown。RubyにおけるMarkdownパーサの元祖。2.0.0からは拡張ライブラリになって大幅に高速化された。&lt;/p&gt;

&lt;h3 id=&quot;bfheader-1d4d112714d393aa024faec60a4fe694&quot;&gt;BlueFeather&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://ruby.morphball.net/bluefeather/&quot;&gt;http://ruby.morphball.net/bluefeather/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MarkdownExtra＋独自拡張。pure ruby。拙作。BlueCloth 1.0.0を改造して作ったもの。&lt;/p&gt;

&lt;h3 id=&quot;bfheader-82e5520d959a18a3aebf620ac76d5eb0&quot;&gt;Kramdown&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://kramdown.rubyforge.org/&quot;&gt;http://kramdown.rubyforge.org/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Markdown Extra＋独自拡張。pure ruby。比較的新しい。「Marukuより5倍速く、BlueFeatherより10倍速い」らしい。&lt;/p&gt;</content>
  </entry><entry>
    <id>urn:uuid:6691a17e-cabb-4eda-944d-dfa2c98db2ce</id>
    <title>[Tips] WindowsやLinuxで標準ブラウザを開く方法</title>
    <link href="http://ruby.morphball.net/note/blog.cgi/entries/1254840201-11c6" rel="alternate" />
    <updated>2009-11-19T07:50:00+09:00</updated>
    <published>2009-11-19T07:50:00+09:00</published>
    
    <category term="Tips" />
    <content type="html">&lt;p&gt;WindowsやLinuxで、標準Webブラウザを呼び出して、任意のページを表示させる方法（Macでの方法は不明）。&lt;/p&gt;

&lt;h3 id=&quot;bfheader-aea23489ce3aa9b6406ebb28e0cda430&quot;&gt;Windows&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;require 'dl/win32'

sw_show_normal = 1
api = Win32API.new('shell32.dll','ShellExecute',%w(p p p p p i),'i')
api.call(0, 'open', 'path/to/document.html', 0, 0, sw_show_normal)

# もしくは
# api.call(0, 'open', 'http://example.net/', 0, 0, sw_show_normal)
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&quot;bfheader-01940fb4deee82984d9b22eb06eef38b&quot;&gt;補足&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Windows APIの&lt;a href=&quot;http://msdn.microsoft.com/ja-jp/library/cc422072.aspx&quot;&gt;ShellExecute関数&lt;/a&gt;を利用している。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows標準の&lt;a href=&quot;http://www.fpcu.jp/dosvcmd/start.htm&quot;&gt;startコマンド&lt;/a&gt;を使って、以下のように書く方法もあるが、URLを渡してもちゃんと動くのかどうかがはっきりしないため、ここでは使っていない。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;system &quot;start path/to/document.html&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.ruby-lang.org/ja/man/html/Win32API.html&quot;&gt;Win32APIライブラリ&lt;/a&gt;は、Ruby 1.9.1で非推奨となっている（警告が出る）ので使っていない。dl/win32 で代用可能。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;bfheader-edc9f0a5a5d57797bf68e37364743831&quot;&gt;Linux&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;path = 'path/to/document.html'
# もしくは
# uri = 'http://example.net/'

system(&quot;/etc/alternatives/x-www-browser #{path} &amp;amp;&quot;) || system(&quot;firefox #{path} &amp;amp;&quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&quot;bfheader-01940fb4deee82984d9b22eb06eef38b&quot;&gt;補足&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Linux環境では、&lt;code&gt;/etc/alternatives/x-www-browser&lt;/code&gt; に&lt;a href=&quot;http://mstssk.blogspot.com/2008/12/ubuntu810.html&quot;&gt;標準ブラウザへのシンボリックリンクが置かれている&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;bfheader-d17a0f0bae4b2d07e3367db4796a9180&quot;&gt;参考&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://rubyist.g.hatena.ne.jp/muscovyduck/20070317/p1&quot;&gt;Rubyからブラウザを起動する(Windows版) - バリケンのRuby日記&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mstssk.blogspot.com/2008/12/ubuntu810.html&quot;&gt;標準のブラウザを変更[Ubuntu8.10] - 1 Entry per Day&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry>
  
</feed>
