Wednesday, October 29, 2008

Ruby observerパターン


   1  module Observable

   2    def add_observer(observer)

   3      @observers ||= []

   4      @observers << observer

   5    end

   6    

   7    def notify_observers(*objs)

   8      @observers.each do |obs|

   9        obs.update(*objs)

  10      end

  11    end

  12  end

  13  

  14  class Tick

  15    include Observable

  16    def start

  17      loop do

  18        now = Time.now

  19        notify_observers(now.hour, now.min, now.sec)

  20        sleep 0.9

  21      end

  22    end

  23  end

  24  

  25  class Clock

  26    def update(h, m, s)

  27      printf "\e[8D%02d:%02d:%02d", h, m, s

  28      STDOUT.flush

  29    end

  30  end

  31  tick = Tick.new

  32  tick.add_observer(Clock.new)

  33  tick.start

Monday, October 27, 2008

Ruby Observer PartI

before observable

   1  #!/usr/local/bin/ruby

   2  # encoding: utf-8

   3  class Ticker

   4    def start

   5      loop do

   6        price = StockPrice.price

   7        print_price(price)

   8        print warn_price(price)

   9        sleep 1

  10      end

  11    end

  12    def print_price(price)

  13      printf "%.02f\n", price

  14    end

  15    def warn_price(price)

  16      if price > 140

  17        "High\n"

  18      elsif price < 60

  19        "Low\n"

  20      end

  21    end

  22  end

  23  class StockPrice

  24    def self.price

  25      (rand * 100) + 50

  26    end

  27  end

  28  ticker = Ticker.new

  29  ticker.start

Saturday, October 25, 2008

So-So- Brooke Waggoner cover

このビデオをYouTubeでチェック:

http://www.youtube.com/watch?v=KU1q8I1p9fg


iPodから送信

Friday, October 24, 2008

Ruby Distributed Ruby

RubyにはDRubyというオブジェクトの永続化機構があるし〜
クライアントからサーバー上のオブジェクトにアクセスすることで
サーバーが生きてる限りその永続がが図られるんだよ
しかも簡単
もう少し勉強したい

Ruby method再定義

メソッドの再定義は通常
class Example
  alias_method old_reverse reverse
  def reverse
    result = old_reverse
    ....
  end
end

というような形でやるけど
old_reverseが既に定義されていたらまずい
で
class Example
  old_reverse_method = instance_method :reverse
  define_method :reverse do
    result = old_reverse_method.bind(self).call
    .....
    result
  end
end 
というやり方があると

 

Tuesday, October 21, 2008

Mighty Mouse電池交換

前回は9月4日
やっぱり一月半だ
これだと年間で八回*2本も交換がいる
ちょっと持ち悪い
ノートにすればこの問題も解消ってか
またAskul*2で

Sunday, October 19, 2008

机のレンチ

六角レンチの6mmかな

Ruby Hook Method list

[Method-related hooks]

method_missing, method_added, singleton_method_added, method_removed, single-ton_method_removed, method_undefined, singleton_method_undefined 

[Class and module-related hooks]

inherited, append_features, included, extend_object, extended, initialize_copy, const_missing 

[Object marshaling hooks]

marshal_dump, marshal_load

[Coercion hooks]

coerce, induced_from, to_xxx 

Wednesday, October 15, 2008

Amazon VS Yahoo! Auction

アマゾンとヤフオクに出品する場合の手数料をちゃんと比較しておこう

ヤフオク
  1. 月会費294円
  2. 落札価格の5.25%(税込)
  3. 月10回以上の出品で10.50円×個数
  4. 配送料が落札者持ちなら0円
アマゾン
  1. 成約料100円
  2. 販売価格の15%(エレクトロニクスは10%)
  3. 実際の配送料とアマゾンからの支給額の差額(下表参照)
例1:15,000円のゲーム機
  1. ヤフオク:1,081.5円(294+787.5)=>利益:13,918.5円
  2. アマゾン:2,950円(100+2250-140+送料740)=>利益:12,050円
  3. 差額:1,868.5円
例2:2000円の本
  1. ヤフオク:399円(294+105)=>利益:1,601円
  2. アマゾン:670円(100+300-80+送料350)=>利益:1,330円
  3. 差額:271円
金額がでかくなるとそれなりに差額も大きくなるなあ
この差が出品におけるこちらの手間賃の差ということだ

配送料の欄に
表示される金額
配送料から差し引かれる金額 出品者が受け取る実際の配送料

本

¥340
¥80
¥260
CD&レコード
¥340
¥140
¥200
ビデオ
¥380
¥30
¥350
DVD
¥340
¥140
¥200
ソフトウェア
¥340
¥140
¥200
ゲーム
¥340
¥140
¥200
エレクトロニクス
¥450+¥50/kg
¥90+¥10/kg
¥360+¥40/kg
ホーム & キッチン
¥450+¥50/kg
¥90+¥10/kg
¥360+¥40/kg
おもちゃ & ホビー
¥500
¥100
¥400
スポーツ
¥500
¥100
¥400
ヘルス & ビューティー
¥500
¥100
¥400

Google Experimental Searchの設定

日本語でExperimentalSearchをやる場合

接尾:&esrch=BetaShortcuts&ie=UTF-8&oe=UTF-8

Tuesday, October 14, 2008

日経号外2008-10-14



株式市場に嵐が吹き荒れている

米国のサブプライムバブルが世界的金融危機を引き起こしている
年初から全世界で株価が50%も暴落している
ブラックマンデーのことは知らないがそれを超える歴史的事件だろう
各国政府および中央銀行の協調的救済策が発表された
先週末8200円台を付けた日経平均は今日14.4%上昇して9400円台に戻った
まだまだ予断は許さないがこの歴史的事件を記録しておこう

日経号外

Ruby metaprogramming - create Class Methods

今度はクラスメソッドを生成するメソッド
ポイントはdefine_methodの実行コンテキストをメタクラスにすること

   1  #!/usr/bin/env ruby

   2  # encoding: utf-8

   3  class Creature

   4    def self.atta(arg)

   5      metaclass = class << self

   6        self

   7      end

   8      metaclass.class_eval do

   9        define_method(arg) do |val|

  10          eval("@#{arg}=#{val}")

  11        end

  12      end

  13    end

  14    atta :life

  15  end

  16  

  17  class Dragon < Creature

  18    life 100 # => 100

  19    @life # => 100

  20  end

  21  Dragon.singleton_methods # => ["life", "atta"]

  22  

Ruby metaprogramming accessor

Rubyのアクセッサ相当を書いてみる
instance_variable_get, _setがインスタンス変数を文字列として取れる
という点がポイントか

   1  #!/usr/bin/env ruby

   2  # encoding: utf-8

   3  class Creature

   4    def self.atta(*arg)

   5      arg.each do |arg|

   6        define_method(arg) do

   7          instance_variable_get("@#{arg}")

   8        end

   9        define_method("#{arg}=") do |val|

  10          instance_variable_set("@#{arg}", val)

  11        end

  12      end

  13    end

  14  

  15  end

  16  

  17  class Dragon < Creature

  18    atta :life

  19  end

  20  d = Dragon.new

  21  d.life = 20

  22  d.life # => 20

  23  

Saturday, October 11, 2008

iPodTouch保護フィルム

iPodTouchの指紋がどうにも気になるので
今日ヨドバシで保護ケースを見に行った
でケースはやっぱりダサいけど
両面に貼る保護フィルムというのがあって
こちらのほうがいいかと検討したが
結局買わずに帰宅した

帰宅後ネットで調べてみると
ヨドバシにあったメーカーのアンチグレアは
指紋が目立たなくなり写り込みも抑えられる
ということでなかなかの評判であった

たぶんこれ買う
ちなみにアマゾンは在庫無しだった

fring with iPod Touch

fringというアプリをiPodTouchに入れて
マイク付きイヤホンを買うと
iPodTouchが電話になるらしい
通話場所は無線LANアクセスポイントに限られるけど
もう携帯電話はいらんぞ

fring – Make free mobile calls, IM with Skype, MSN Messenger, ICQ, Google Talk™, SIP & Twitter, AIM® & Yahoo!™

Monday, October 06, 2008

iPod Touch

iPodTouchが来て3日目
(悪い点}
  • いろいろできることで却ってなんか落ち着かない
  • 余計な仕事を増やしてる感じ
  • 裏も表も指紋でべったり
  • Webを見るのはちょっとつらい
(良い点)
  • メールやRSSなどのリストものは見やすい
  • 音が思ってたよりいい
  • YouTubeなどの動画が見やすい
  • メールに添付したPDFは一旦アクセスすればオフラインでも閲覧できる
  • ジーンズのポケットに入れられるサイズ
どれくらい使うようになるかはまだわからない

Sunday, October 05, 2008

iPod Touch遂に現わる!

4日に実家から帰ってきてAmazonからの発送メールが丁度来ていた
当然5日の午前中だと思っていたら7時過ぎに佐川さん到着にびっくり

遂にiPodTouchが来ました
ネット接続設定をして音楽、写真、ビデオをちょっと入れてみた
音は思ったよりもかなりいい
ネット接続も快適だ
特にTouch用に作られたgmailやcalendarやYouTubeがかなりよい
株価を見るのも便利
PDFも問題ない

またビデオがいい
最後の恋のビデオを見たが
きれいで見やすくて
さちも興奮気味だった

それから文字の入力もなかなか快適だ
短いメモを取る程度は苦でなさそう

今日はいろいろと試してみるぜよ

Inkjet Printerのインク交換

またインクが無くなった
だいたい4ヶ月に一回のペースで無くなる
大して使ってないのに早い
カートリッジは黒とカラー合わせて
5,000円くらいするから年間で15,000円の出費

で今回はサードパーティの詰め替えインクというのにトライすることに
価格は2,500円で1/2で詰め替え6回分あるから
相対的には1/12という驚愕の価格差!
ただし詰め替え3回に1回程度はカートリッジを交換する必要がある

今朝詰め替えに挑戦
結構大変な作業
インクもこぼれるし
1時間くらい掛かったか
慣れても40分くらいは掛かりそうだ
でもまあ手間に見合う価格差だから仕方がない

印字品質は問題なさそうだ
節約したな我らまた!

Thursday, October 02, 2008

Unix/Linuxプログラミング 理論と実践

図書館でリクエストしていたのがやっときた
で少し読んだらこれはすごくいい
UNIXのコマンドを自分でプログラムすることを目的に説明がされていて
その過程でUNIXの知識を吸収できる構成となっている
かなり勉強になる

ここにあるLinuxのコマンドをRubyでプログラムしてみよう

すべてのクラスの取得

ObjectSpaceを使えば取得できるんだ
知らなかった
でもモジュールは拾えないかな
klasses = []
ObjectSpace.each_object do |obj|
  begin
    klasses << obj if obj.superclass
  rescue Exception => e
  end
end

p klasses

Wednesday, October 01, 2008

gOSにRuby1.9をインストール

 sudo apt-get install subversion
 sudo apt-get install autoconf bison -y svn co http://svn.ruby-lang.org/repos/ruby/trunk ruby cd ruby autoconf ./configure --prefix=/usr/local --program-prefix=_ make sudo make install


どうもインストールはうまくいったんだけど
_rubyで起動できない
/usr/local/bin/_rubyとするとできるのに…

Ruby1.8.6 install

RubyMethod Listで必要になったので
Gemではなくソースから186をインストール
どうやらprefixでパスを指定しないとうまくいかないようだ

> $ ./configure --program-suffix=186 --prefix=/usr/local --with-readline-dir=/usr/local

readlineの指定は無視されてるようだ
1.9でもこれでいけるのかな?