Monday, December 29, 2008

最近あまり本を読んでいない
で「はじめて読む8086」と
「The Art of UNIX Programming」を借りた

で「はじめて…」をざっと読んだ
ざっくりマシン語のことがわかってよかった
年内に「The Art…」も読みたい

Tuesday, December 16, 2008

人と違うことをしなければいけない

人と違うことをすると不安になる
不安が人と同じことをするよう引き込む
一方で社会における価値は新しいものを生み出すことだ
従来にない新しいものを生み出すためには
人と同じことをしていたらだめだ

だから恐れずに人と違うことをしなければいけない
違うということに快楽を覚えなければいけない

Tuesday, December 09, 2008

仕事=他の人に価値を与えること

仕事とはお金を稼ぐことではなく
他の人に価値を与えること

そう考えれば仕事は難しくないかもしれない
つまり自分はどんな価値を人に与えられるかを考える
自分が持っていないものは人には与えられないので
自分は何を持っているか考える
自分が何か作れるのならそれを与える
自分がいい知恵を持っているのならそれを与える
そしてその与えたものの価値に見合うお金をいただく

もう一つ考える必要がある
人々の与えた価値が総体として
全体の価値を向上させ既存してはならないということだ
つまり反社会的・破壊的な価値(たとえば銃を製造して売るとか)を与えた場合
買い手に価値は与えられるかもしれないが
世界の総体としての価値は下がる
だから自分の与える価値がなんであるかは
社会延いては自分の仕合せにとっては重要である

自分たちは事務所を辞めてからのこの数年で
生き方についていろいろと考えてきた
その結果としていくつかのいいこと(自分にとっても社会にとっても)を学んだ
それは健康管理であり資産運用であり
日々のライフスタイルであり他者とのつきあい方であり
コンピュータの使い方でありご飯の作り方であり
部屋の装飾であり節約の仕方であり
要らないものの処分の仕方であり物事の考え方である

それらのことの何らかに基づいて
他の人に価値を与えられれば
それがきっと仕事になるのだろう

記録するということ

人は記録するという行為を頻繁にする
メモする写真を撮るブログを書く
しかし記録するという行為は
過去を記録するということであり果たして
生産的建設的な意味はどれくらいあるのだろうか

記録することによって
その情報を他の人に伝えることができるようになる
だから記録することは情報伝達の手段と見ることができる
例えばビジネスや芸能で成功した人がいるとき
その人の過去が現在の成功の鍵になると考えられたとき
その人についての過去の記録は価値を持つ
一方で成功者でない人の過去の記録は価値を持たない

記録するという行為にはもう忘れてもいいという安心感がある
つまりその記憶を脳の外に出せる
逆に言えば脳に記憶しておくということは
人間にとって負担になっているということだ
しかし脳に記憶できないものを残しておくことに
どれほどの意味や価値があるのかはすこし考える必要がありそうだ

記録することは物を収集することにも似ている
その記録するという行為自体に一定の満足を感じ
その結果物には実質的な意味は余りないのかもしれない

過去の清算

実家からもってきたレコードと切手を処分するため
昨日やっと重い腰を上げてみた
レコードはヤフオク、一括買取業者を検討したが
ヤフオクでは売買がほとんど成立していなかったので
一括買取業者を検討しUnionDiscに電話したら
ほとんど買い取れないとの返答を得て廃棄処分の覚悟がついた
LP25枚、SP16枚、古いEP?9枚の写真を撮って処分

切手はネットで買取を調べるも
こちらも現在額面割れらしく
郵便局で切手シートに交換してもらい
それを金券ショップで現金化するのが
よさそうだと言うことになり
それに向けて整理したところ
23,000円分あった

郵便局では手数料として1枚につき5円とられ
金券ショップでは8割位で引き取るらしいから
まあ半分残ればいいか

Sunday, December 07, 2008

BIGMAC設置

昨日Amazonで注文した外付けハードディスクがもう到着した
音はかなり静かで転送速度も速い
早々データの移管作業を開始
  • 名前を「BIGMAC」に
  • keyesmacのiTunes MusicとiPhoto Libraryのデータをすべて移管(coosaのデータはそのまま)
  • dellへのバックアップは3つのファイルで取ることに
  • keyesmacのデータはbackup_keyesmac.shで
  • BIGMACのデータはbackup_bigmac.shで
  • coosamacのデータはbackup_coosamac.shで
backup_keyesmac.sh
rsync -avz -e ssh --delete --exclude 'Library/Caches/' --exclude '.Trash' --exclude '/Music/iTunes/back_iTunes Music' --exclude '/Pictures/back_iPhoto Library' /Users/keyes/ 192.168.1.6:/home/keyes/backup/keyesmac/

backup_bigmac.sh
rsync -avz -e ssh --delete /Volumes/BIGMAC/ 192.168.1.6:/home/keyes/backup/bigmac/

ヒットの条件 New+able=Newable

「未体験」で「できそう」と思えるものがヒットの条件だ。

Friday, December 05, 2008

外付けハードディスクの検討

Macの内蔵ハードディスクを交換することを検討しているが
やはりHDDの換装には手間とリスクが伴うので
外付けも検討してみる
ネットで検索するとiTuneを外付けHDDに出している人が結構いて
問題なく動作しているようだ

外付けには、基本的にはUSB接続とLAN接続の二種類があって
価格は500GのUSBタイプで最安値8,000円
LANタイプで最安値15,000円
とUSBタイプは思いの外安いのに驚く

複数のパソコンからiTuneなどのデータにアクセスしたい場合はLAN型になるけど
どうやら動画データには対応していないようなので
USBタイプで足りそうかな

内蔵HDDは250Gで6,000円程度だから
手間とかリスクを考えるとUSBに軍配が上がりそうだ

候補は以下

価格.com - IODATA HDCN-U500 価格比較

Macハードディスク増設計画

数年遅れ韓流ブームの勃発により
Mac miniのディスク容量がピンチになってきた
でHDDを増設する計画が出ている
ワシの120Gをさちに移して
250Gくらいを新規購入って感じか

その前にデータ移管計画をちゃんと立てておかないと
大変なことになりそうだ

  1. 新規250をワシのMacに換装
  2. ワシの120をさちのMacに換装
  3. 120のデータを新規250にコピー
  4. DellのさちのBackupデータを120にコピー
これで果たしてうまくいくか?
ちょっと心配なのはDRMが掛かった音楽データだな
あとコピーにスゲー時間が掛かりそうだ


健康診断

区の検診の結果を今日聞いてきた
特に問題ないが
総コレステロール値228HDL140と
基準値を少し出ている点は大きな改善は見られない
まあでも気にする値ではない
コレステロール低下には汗をかく運動がいいようだから
多少意識しよう

この一年の食事療法を中心とした健康管理を話したら
看護士と栄養士の人はえらく感心していた
男ではなかなかちゃんとできてる人はいないようだ

Thursday, December 04, 2008

純利益有形固定資産比率

かつての持ち株を調べてみた

ヤマトHD 6.89%

7&i 8.45%

しまむら 17.57%

アスクル 9.80%

エイジス 29.09%


合格ラインはエイジスのみだ

FNS歌謡祭

どういうわけか毎年文句を言いながらもこの番組を最後まで見ている
テレビをほとんど見ないわが家においては極めてめずらしい光景だ
全体的な迫力の無さは例年通りだけれどMr.Childrenだけは違った
真剣に音楽に取り組んでおりそれを伝えたい思いというのが
伝わってくる鬼気迫る演奏でのめり込んで聞いた
さちも同じ感想で二人ですごいと興奮していた

自分ももっともっと物事に真剣に取り組む必要があると思った

Tuesday, December 02, 2008

バフェットからの手紙

バフェットからの手紙を読み返している
やはり最高の投資指南書だ
それと共に最高の経営書でもある
なぜなら投資においても企業経営においても
もっとも重要なのはその資本政策であり
この本には恐るべき結果を残しているバフェットの経験から得られた
資本政策が丁寧に書かれているからだ
是非とも任天堂の岩田さん並びにFRの柳井さんに読んでもらいたい

バフェットの言う最良の資本政策は、以下に集約される
つまり
(1)優れた経営者が経営する、
(2)優れた特性を持った企業を、
(3)魅力的な価格で買うこと
に尽きる

そのすべてが揃わない限り投資はすべきではなく
そのすべてが揃ったとき投資は最高のものになる

その判断は必ずしも難しいものではないが
人間が欲望をコントロールして投資を行うことは難しい
それができる人間だけが卓越した結果を残せるのだ

東急ハーヴェストクラブの研究

会員権を買う予定はないけど
投資対象として魅力的か検討してみる価値はあるかも
ということでわかっていることを書いておく

  • 施設は全国に23ヶ所あり、会員権には共有会員制と預託会員制がある。前者は不動産として所有権の一部をもつ権利で、後者は施設を利用するだけの権利
  • 共有会員制は、一室を10口または12口で共有するもので、対象施設は、有馬六彩・VIALA箱根翡翠・旧軽井沢アネックス・那須・箱根甲子園・旧軽井沢・蓼科・勝浦・浜名湖・天城高原・静波海岸・鬼怒川・南紀田辺・伊東・斑尾・蓼科アネックス
  • 預託会員制は、入会金と預託金を払い利用するもので、預託金は解約時に返金される。施設によってその割合は異なるようだが、例えば裏磐梯グランデコで入会金:126万円、預託金:160万円、蓼科リゾートで入会金:168万円、預託金450万円などとなっている。対象施設は、裏磐梯グランデコ、蓼科リゾート・軽井沢万平・箱根明神平・京都・軽井沢高原・山中湖マウント富士・スキージャム勝山
  • 共有会員権は最高値の箱根翡翠1100万から最安値の浜名湖150万と幅がある
  • 会員権以外に、10万前後の年会費と利用毎の施設利用料4000円/1日程度が掛かる
  • 会員には毎年36枚(または30枚)の施設利用券が配布されるが、その6割(21または18枚)はホームグランド用、4割(15または12枚)は相互利用券
  • ホーム券は相互利用券に対してホーム予約上有利になっており、それは相互利用券が、繁忙期である特定期間での抽選に参加できない、という点のみ
  • 一方、ホーム券は相互利用券に振替えることもできるようで(ハーヴェストクラブのHP以外からの情報)、その場合の制限は、祝祭日前日に利用できないという点。つまり平日であればすべての券を他施設利用のために使うこともできる
  • 利用券は知り合いに譲ることもできるようだが、売買できるかは不明。ただネットオークションでは現実に売買されている。7000円前後の値がついている。

もっともパフォーマンスの高そうな購入方法を考察してみよう
  • 最安値の浜名湖を150万円で購入。年会費は9万円。利用券は36枚
  • ホーム券21枚を振替えて他館を利用。二人で一泊3780×2=7560円
  • 相互利用の15枚をオークションで売却。1枚8000円として120,000円の収入
  • 年間収支120,000-90,000=+30,000円
オークションでの売却が合法でうまくいくなら悪くない取引か

Ruby Fiber


   1  #!/usr/local/bin/ruby

   2  # encoding: utf-8

   3  words = Fiber.new do

   4    File.foreach("testfile") do |line|

   5      line.scan(/\w+/) do |word|

   6        Fiber.yield word.downcase

   7      end

   8    end

   9  end

  10  counts = Hash.new(0)

  11  while word = words.resume

  12    counts[word] += 1

  13  end

  14  counts.sort { |a,b| b[1] <=> a[1] }.each { |w| print "#{w[1]}:#{w[0]} " }

Sunday, November 30, 2008

人間は考えるのが苦手である

バートランド・ラッセルの言葉
「多くの人間は、考えるくらいならむしろ死を選ぶであろう。実際多くの者がそうするのだ」

Monday, November 24, 2008

Printer Ink詰め替え

詰め替えインクを使ってから約2ヶ月で黒がなくなった
ちょっとはやいな
今回の詰め替え作業は15分で完了
カラーはまだあるようなので詰め替えせず

インクの使用量を抑えるために
プリントするときにできるだけ品質を
「きれい」から「はやい(標準)」に切り替えよう
それでも十分な品質だから

Friday, November 21, 2008

GR digital故障・修理。しかし…

京都旅行中にGRdigitalの電源が突然入らなくなったので
それなりの出費を覚悟の上
今日銀座の修理センターに持ち込んだ

受付で今年3月にも修理を受けている旨を告げると
履歴を調べてくれて
「2回修理していますね。ご迷惑をおかけしていますので、今回はこちらの負担で修理します。」
と驚愕の対応
3時間待って引き取りに
修理伝票によれば
メイン基板、電源ユニット、鏡銅ユニットCCD付きのすべてを交換した模様
もうほぼ新品といっていい

帰ってきてさちに部品交換で大変なことになったと伝えると
怖くて伝票を開くこともできないほどびびっていた
で0円とわかって腰が抜けたようになってた
さちを騙すのはやっぱり簡単だ

それにしてもリコーの対応には驚かされる
キヤノンに隠れて目立たないがなかなかの優良企業かもしれない

Sunday, November 16, 2008

作品はその作者との共感システムである

人は一人では生きられない
人は他の人とコミュニケートし
物事に対する共感を得ることで
生きる力を与えられる

人は人とダイレクトにコミュニケートしなくても
人が作ったもの(作品)を介してコミュニケートできる
その作品を好きだという感情には
その作品に対する作者の価値観に対する共感が内在する
つまり作品はその作者との共感システムである

だからある物が好きだという感情は
人が生きていく上で極めて重要であり
それを阻害してはいけない

Friday, November 14, 2008

Synergy

synergy.conf
section: screens
        keyesmac.local:
        gos:
end
section: links
        keyesmac.local:
                left = gos
        gos:
                right = keyesmac.local
end
section: aliases 
       keyesmac.local:
              keyesmac
end

synergy.sh
/usr/bin/synergys --name keyesmac --config .synergy.conf 

Wednesday, November 12, 2008

やはり天才なのか?

Ruby ShoesとdRubyで簡易チャットアプリケーションを作っている
かなりいいところまで言ってるんだけど
もう一歩のところででつまずいていた
でさちの前で
「値渡し…参照渡し…」
ってつぶやいてたら
「ラインだよ」
っていうんでclient_lineのところを見直してたら
配列をDRbObjectで渡すことをひらめいて
問題が解決してしまった

これはなんの力なのか…

Tuesday, November 11, 2008

Monday, November 10, 2008

小室哲哉は今でも楽譜を読めないころからひらめいた

小室事件に関連してYouTubeにアップされていた「オーラの泉」を見たら
小室哲哉自身が自分は今でも楽譜を読めないということを言っていて
びっくりした

それであらためて気がつかされた
素晴らしい作品を作るのに必要なものは知識ではないんだなと
大切なのはみんなをびっくりさせるようなものを作り出すことで
知識を自慢することではない
むしろ知識による制約が邪魔になることもあるのかもしれない

だから知識は作品を作り出す上で必要になったら学べばいい
つまり知識はでこぼこであっていい

なにかみんなをびっくりさせるようなものを考え出す
そのことに注力しなければいけない

小室哲哉逮捕に思うこと

小室哲哉が自身の著作権譲渡に絡む詐欺容疑で逮捕された
メディアはこぞって彼の転落人生を報道している
浪費癖と海外進出失敗による多額の借金が原因であると
しかし自分はどうしてもこの人が悪いことをするような人間に思えない
人をだます詐欺という犯罪と彼に人格とがどうしても結びつかない
彼自身が罪を認めているようなのでそれは事実なんだろう
でもどうしても腑に落ちない
だまされることはあっても
人をだますというにおいが彼からは全くしないのだ
だからこの事件は残念でならない

Friday, November 07, 2008

DRuby + Observer Pattern

drubyとobserverパターンを使ったリモートタイマー
クライアント・サーバー間のオブジェクトの転送をユニバーサル変数を介して実現するアイディア
ユニバーサル変数はダブルアンダースコアをプリフィクスした文字列
ユニバーサル変数への代入時にこれをローカル変数と区別する必要がありselfを前置しなければならない点がダサい

drb_server.rb

   1  require "druby"

   2  

   3  class Tick

   4    include Observable

   5    def start

   6      loop do

   7        now = Time.now

   8        notify_observers(now)

   9        print "Current Time: #{now}\n"

  10        sleep 1

  11      end

  12    end

  13  end

  14  tick = Tick.new

  15  self.__hello = tick

  16  tick.start

  17  

  18  

  19  puts 'Press [return] to exit'

  20  gets


drb_client

   1  require "druby"

   2  

   3  class Timer

   4    def update(now)

   5      print "#{now.sec}\n" if now.sec % 10 == 0

   6    end

   7    def _dump(dummy)

   8      raise TypeError, "can't dump"

   9    end

  10  end

  11  

  12  timer = Timer.new

  13  

  14  tick = __hello

  15  tick.add_observer(timer)

  16  

  17  puts 'Press [return] to exit'

  18  gets


druby.rb

   1  require "drb/drb"

   2  module DRuby

   3    include DRbUndumped

   4    URI = 'druby://localhost:12345'

   5  

   6    def self.universal_variable=(obj)

   7      DRb.start_service(URI, obj)

   8    end

   9  

  10    def self.universal_variable

  11      DRb.start_service

  12      DRbObject.new_with_uri(URI)

  13    end

  14  

  15    class << self

  16      alias :uv= :universal_variable=

  17      alias :uv :universal_variable

  18    end

  19  end

  20  

  21  module Observable

  22    def add_observer(observer)

  23      @observers ||= []

  24      @observers << observer

  25    end

  26  

  27    def notify_observers(*objs)

  28      return nil unless defined? @observers

  29      @observers.each do |obs|

  30        obs.update(*objs)

  31      end

  32    end

  33  

  34  end

  35  

  36  class Object

  37    URI = 'druby://localhost:12345'

  38  

  39    def singleton_klass

  40      class << self; self end

  41    end

  42  

  43    def method_missing(name, *args, &block)

  44      if name[0,2] == "__"

  45        if name[-1] == "=" 

  46          DRb.start_service(URI, args[0])

  47        else

  48          DRb.start_service

  49          DRbObject.new_with_uri(URI)

  50        end

  51      else

  52        super

  53      end

  54    end

  55  end


Wednesday, November 05, 2008

modify aBridge.com

Ruby1.9.1 のリリースに対応してaBridgeも修正

Ruby 1.9.1 candidate released

早々インストール。相変わらずよくわからないので、とりあえず以下で。

./configure --program-prefix=_  --prefix=/usr/local/ --with-readline-dir=/usr/local/

 しかし_ruby -vで確かめるもうまくいかず。
.zshrcのaliasでまた対処。

Tuesday, November 04, 2008

HTMLを書くのにはRDが便利そうだ

rd2 test.rd > test.html

RDで書いたファイルはRDToolで上のように変換すればHTMLができる

  • 見出し:=、==、+
  • リスト:*、(1)
  • pre:インデント
  • インライン:((*強調*))、((<Ruby|URL:http://...>))、((-注記-))、((|i|))
  • 定義::ruby
  • コード:---Enumerable#inject([k]) {|i,j| ... }



dRubyはRubyオブジェクトをユニバーサル変数に入れて宇宙へ運ぶスペースシップだ!

DRbObjectはRubyオブジェクトのユニバーサル変数定義
dRubyはユニバーサル変数を運ぶスペースシップ

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