Monday, June 30, 2008

Gmailをふつうのアプリケーションのように使う

Prismというアプリケーションをインストールした
GmailやGoogleCalendarなどのWebアプリを
ローカルのアプリケーションのように使えるようにするものだ

Sunday, June 29, 2008

テスト

macにプリンストールされている購入さち嬢問題なければ予測変換

macにプリインストールされている購入さち嬢問題なければ予測変換

日本語変換文字化け?

メールから投稿したら文字化けしてるぞ。
日本語変換がまずいのか。
ーーーーーーーーーーー
こんどはanthyでやってみる
日本語変換がまずいのか。メールからの投稿したら文字化けしているぞ。

日本���MacUIM

macにプリインスト�ルされていることえりは××なので
egbridgeというのを�入して使っているが
これもちょっとお�鹿なので困っているところに
MacUIMというUnix系のフリ�のIMのインタフェ�スを�つけた
これにはAnthy、Prime、SKKという3つの入力システムが同�されている
Anthyというのはことえりに使い�手が似ているようだ
Primeといのは予���システムで先�みしてくれる
ちょっと使ってみたらなかなかよさげだぞ
しばらく使って��なければ
さち�にも�めてみよう

MacUIM � Trac

予�入力システム: PRIME

Saturday, June 28, 2008

Ruby Hilite.rb


fact.js with slush_poppies

   1  var fact = function(n) {

   2  if(n==0) {

   3  return 1;

   4  } else {

   5  return n * arguments.callee(n-1);

   6  }

   7  }

fact.pl with spacecadet

   1  sub fact {

   2  my($n) = @_;

   3  

   4  if ($n == 0) {

   5  return 1;

   6  } else {

   7  return $n * fact($n - 1);

   8  }

   9  }

  10  

  11  printf "%d! = %d\n", 10,fact(10);

  12  

fact.py with amy

   1  def fact(n):

   2  if n == 0:

   3  return 1L

   4  else:

   5  return n * fact(n - 1)

   6  

   7  print "%d! = %s" % (10, fact(10))

fact.rb with brilliance_dull

   1  def fact(n)

   2    if n == 0

   3      1

   4    else

   5      n * fact(n - 1)

   6    end

   7  end

   8  

   9  printf "%d! = %d\n", 10, fact(10)

fv.rb

   1  #!/opt/local/bin/ruby -Ku

   2  #

   3  # FV = PV(1+r)^n

   4  #

   5  

   6  class FCalc

   7    def fv(pv,r,n)

   8      pv*(1+r)**n

   9    end

  10    def pv(fv,r,n)

  11      fv/(1+r)**n

  12    end

  13  end

  14  

  15  f = FCalc.new

  16  p fv = f.fv(100,0.1,10)

  17  

  18  11.times { |n| p "year #{n}: #{f.fv(100,0.1,n)}" }

Monday, June 23, 2008

TextMate:Create Snippet

  1. -plain text: just insert text
  2. -variables: $TM_SELECTED_TEXT
  3. -variables with default: ${TM_SELECTED_TEXT:default text}
  4. -variables with regexp: ${TM_SELECTED_TEXT/regexp/format/options}
  5.   ex. ${TM_SELECTED_TEXT/w+/<$0>/g}
  6. -Shell Code Insertion: ex. <a href="`pbpaste`">$TM_SELECTED_TEXT</a>
  7. -Tab Stops: $0 or $1..$n
  8. -Tab Stops with Default(Placeholders): ${1:default}
  9. -Mirrors: ex. <${1:div}>  $0  </$1>
  10. -Transformations: ${1/regexp/format/options}
  11. -Transformations with condition: ${1/x$|(.+)/(?1:other)/}
  12. -Cascading placeholders: ${1:default${2:default}}

Sunday, June 22, 2008

TextMate Snippet

  • patfh
  • lam
  • Enum
  • Comp
  • defs
  • eap
  • ⌘+D

Saturday, June 21, 2008

TextMate Tips: excute code

  • Run code: ⌘+r
  • Ruby in line evaluation with # => , ⌘⌃ +E
  • same without # =>, ⌘⌃+E
  • excute line as Ruby: ⌃+E
  • excute line as shell: ⌃+r

TextMate mate command

terminalで使うmate commandがなぜか死んでいたので以下により復活。
$ sudo ln -s /Applications/TextMate.app/Contents/Resources/mate ~/bin/mate

Friday, June 20, 2008

Ruby Pastie.rb syntaxhighlight

Pastie.rbを修正して、一応Cobaltはプリントできるようになった。ただ他のテーマについてはまだ未対応。
(課題)
  • 各テーマのbackground-colorとcolorプロパティがUv側から取得できていない。
  • 替わりに、ハッシュで設定ファイルを作ってこれを読むようにしている。
  • Cobalt以外のテーマのこれらのプロパティ値がいまのところ不明。
Pastie.rb

   1  #!/usr/bin/env ruby -wKU

   2  # encoding: utf-8

   3  require "rubygems"

   4  require "uv"

   5  

   6  theme_colors = {"active4d" => [], "all_hallows_eve" => [],

   7                  "amy" => [], "blackboard" => [],

   8                  "brilliance_black" => [], "brilliance_dull" => [],

   9                  "cobalt" => ['#002444','#e6e1dc'], "dawn" => [],

  10                  "eiffel" => [], "espresso_libre" => [],

  11                  "idle" => [], "iplastic" => [],

  12                  "lazy" => [], "mac_classic" => [],

  13                  "magicwb_amiga" => [], "pastels_on_dark" => [],

  14                  "slush_poppies" => [], "spacecadet" => [],

  15                  "sunburst" => [], "twilight" => [],

  16                  "zenburnesque" => []}

  17  

  18  

  19  input = ARGF

  20  theme = "cobalt"

  21  syntax = "ruby"

  22  numbering = true

  23  

  24  html = Uv.parse( input, "xhtml", syntax, numbering, theme )

  25  

  26  css_file = File.join(Uv.path, 'render', 'xhtml', 'files', 'css', "#{theme}.css")

  27  

  28  styles = {}

  29  css = open(css_file, 'r').read

  30  css.gsub(/pre¥.#{theme}¥s+¥.(¥w+)¥s+¥{¥s*(¥w+.*¥s*¥w*.*)¥s*¥}/) do

  31    styles[$1] = $2.gsub(/¥s/, "")

  32  end

  33  styles["#{theme}"] = %Q{background-color:#{theme_colors[theme][0]};color:#{theme_colors[theme][1]}}

  34  

  35  styles.each do |key, value|

  36    html.gsub!(/class="#{key}"/i, %Q{style="#{value}"})

  37  end

  38  puts html

Thursday, June 19, 2008

Ruby code colorize 3

と思ったら、CSSのリンクじゃブログに反映されないじゃないか。
で、やはり作りました。

(使い方)
$ ruby pastie.rb rubyfile.rb > target.html

あれ?変な線が入ってる?


pastie.rb

   1  #!/usr/bin/env ruby -wKU

   2  # encoding: utf-8

   3  require "rubygems"

   4  require "uv"

   5  

   6  themes = %w(active4d all_hallows_eve amy blackboard brilliance_black 

   7              brilliance_dull cobalt dawn eiffel espresso_libre idle

   8               iplastic lazy mac_classic magicwb_amiga pastels_on_dark

   9                slush_poppies spacecadet sunburst twilight zenburnesque)

  10  

  11  

  12  input = ARGF

  13  theme = "cobalt"

  14  syntax = "ruby"

  15  numbering = true

  16  css_file = "/opt/local/lib/ruby/gems/1.8/gems/ultraviolet-0.10.2/render/xhtml/files/css/#{theme}.css"

  17  

  18  html = Uv.parse( input, "xhtml", syntax, numbering, theme )

  19  

  20  #link = %Q(<link rel="stylesheet" href=#{css_file} type="text/css" media="screen" title="no title" charset="utf-8">)

  21  

  22  css = open(css_file).read

  23  style = %Q(<style type="text/css" media="screen">

  24  #{css}

  25  </style>)

  26  

  27  puts style + html

Ruby code colorize 2

ultravioletはcommand line toolとしても使えるので、わざわざ前の投稿のようにする必要はなかった。
$ uv -s ruby -t cobalt -c . rubyfile.rb > target.html
としてHTMLファイルを作成すると、cssファイルが入ったフォルダがcwdにコピーされるので、その一つをリンクすればいい。
<link rel="stylesheet" href="css/cobalt.css" type="text/css" media="screen" title="no title" charset="utf-8">

Ruby code colorize

ultravioletというライブラリを使って
ソースコードをTextMateのcobaltでHTML化するツールを作成

(使い方)
$ ruby code2html.rb < rubyfile.rb > destination.html

          

   1  #!/usr/bin/env ruby -wKU

   2  # encoding: utf-8

   3  require "rubygems"

   4  require "uv"

   5  

   6  BACKGROUND_COLOR = '#002444'

   7  COLOR = '#e6e1dc'

   8  COLORS = {

   9  #  :punctuation => '#E1EFFF',

  10    :constant => '#FF628C',

  11    :entity => '#FFDD00',

  12    :keyword => '#FF9D00',

  13    :storage => '#FFEE80',

  14    :string => '#3AD900',

  15    :comment => '#0088FF',

  16    :support => '#80FFBB',

  17    :variable => '#CCCCCC',

  18    :symbol => '#6e9cbe',

  19    :JEntityNameType => '#FFDD00',

  20    :attribute => '#d0d0ff',

  21    :StringRegexp => '#80FFC2',

  22    :StringEmbeddedSource => '#FFFFFF',

  23    :exception => '#FF1E00',

  24    :function => '#FFEE80'

  25  }

  26    html = Uv.parse(STDIN.read, "xhtml", "ruby", true, 'cobalt')

  27    

  28    COLORS.each do |token, color|

  29      html.gsub!(/class="#{token}"/i, %Q{style="color:#{color}"})

  30    end

  31    puts %Q(

  32            <pre style="background-color:#{BACKGROUND_COLOR};

  33            color:#{COLOR};

  34            padding:3px 0 3px 0;

  35            overflow:auto;

  36            line-height:15px;

  37            font-size:13px";>

  38            <code>#{html}</code>

  39            </pre>

  40          )


          


参考:Colorize code in your blog posts (with Ruby of course) « Marc-André Cournoyer's blog

Wednesday, June 18, 2008

Ruby メタプログラミング define method

同種のメソッドを実行時に生成する方法として、define_methodで定義するやり方と文字列をevalするやり方がある。もちろん安全性からいってdefine_methodのほうがいい。


2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

#!/usr/local/bin/ruby -wKU

# encoding: utf-8

class Fetcher

  def fetch(n)

    puts "Fetching #{n ? n : "all"}."

  end

  

  [['ten',10],['one',1],['all',nil]].each do |name, n|

    define_method("fetch_#{name}") do

      fetch(n)

    end

  end

  

  [['two',2],['three',3],['four',4],['five',5]].each do |name, n|

    module_eval %{def fetch_#{name}

     fetch(#{n})

     end}

  end

end


f = Fetcher.new

f.fetch_ten

f.fetch_all

f.fetch_five



Output:

1

2

3

Fetching 10.

Fetching all.

Fetching 5.

Tuesday, June 17, 2008

Ruby factorial

再帰を使った階乗計算

def factorial(n)
   (n > 1 ? factorial(n-1) : 1) * n
end 

Ruby 再帰の結果を配列に入れる

class Class
 def hierarchy
   ( superclass ? superclass.hierarchy : [] ) << self
 end
end

Array.hierarchy => [BasicObject, Object, Array]

Webアプリの要素技術

  • DataBase
  • DOM Manipulation
  • Graphics, Chart
  • User Input Method
  • Data Scrabbing(Mashup)

死の被害者

事故や事件に巻き込まれたり
医師からの死の告知により
突然死がやって来ることがある

そのとき第三者は
その本人を可哀想だといい哀れむ
確かに本人が死を認識してから実際に死ぬまでの間はつらいと思う
しかし死によって生体としての人間の脳は機能停止を起こすから
その時点で本人にはつらいという感覚がなくなる
つまりその苦痛から開放される
事故や事件により本人が自分の死を認識しないうちに死を迎えるようなケースでは
さらに直前の苦痛すらも存在しない

むしろ人の死によって苦しむのは残された者である
心の準備がないまま人生に必要だった人が突然消えていなくなる
残された者の脳はこの変化にすぐには対応できない
最悪のケースでは必要だった人を奪ったその原因を恨み
それに自らを拘束する
残された者の脳には必要だった人がいないことに起因する苦痛が蓄積され沈殿する
残された者はその人の死を受け入れ
できるなら消化してほしいと思う

はちみつ協定、締結!

さち及びきょうは以下の通り、はちみつ協定を締結する。

1.さち及びきょうは、はちみつ、バター、クリームチーズその他これに類するブレッド用スプレッド(以下、単に「はちみつ」という)を自由に好きなだけ、好みのフランスパン、ドイツパン、ジャパン(以下、「ブレッド」という)に塗って良い。そのとき相手方の事前承諾は要らない。

2.相手方のはちみつの使用量が多いからといって、文句を言ったり、恨んだりしてはいけない。

3.これが理由で経済的困難に陥ったときには、他の経費を徹底的に抑え、いかなるときでも十分な量のはちみつを確保し、諸問題の発生を回避するよう努めなければいけない。

以上

2008年6月15日

Monday, June 16, 2008

我らただいま実験中!

わが家では午前中の活動が鍵となっている
さちはキッチンへ立って料理へと向かう
ぼくは机に座ってプログラミングへと向かう
朝6時過ぎに起きて8時前には各自の持ち場に着く
作業はどうしようもなくお腹が空き出す11時まで続く

情報を収集し興味が湧いたものを自分でも試してみる
それに自分独自のアレンジを少し加えてみる
その過程で素材の持ち味や調味料の使い方を学ぶ
その過程で基本構文やライブラリの使い方を学ぶ
無から有を生む創作活動というよりも
ただいま「実験中」という感じだ
作っては消費し作っては消費するその繰り返し

あっという間に時間が過ぎる
いまのところこの繰り返しに飽きる気配はない
この先に何があるかはわからないけど
興味が続く限りこの繰り返しが出来たらいいと思う

我らただいま実験中!

Rails Portfolio進捗状況

既に実装できたもの
  • Hpricotを使ってInfoseekのサイトから株価および企業情報を取得
  • 取得した情報に基づいて利益などのポートフォリオ情報を計算
  • 計算結果と情報を表形式で表示
  • ポートフォリオ情報と企業情報をタブで切替え
  • タブ切替えはPrototypeのVisualEffectを使用
  • 取得した時系列株価を整理して、月、週、日ごとの株価の表を登録銘柄について比較表示
  • OpenFlashChartを使って個別銘柄の株価チャートを表示
まだ出来ていないもの
  • データベースと連携して取得したデータを保存すること
  • 利益などのポートフォリオ情報の変動を示すグラフ
  • 株価の変動と当期利益の変動の関係を示した二軸チャートの作成(出来れば対数グラフ)
  • 更に進んで資産管理データベースの作成
ちょっと区切りが出来たので、一旦寝かせるか。

Sunday, June 15, 2008

イヤホンで恐ろしく迷う

長年愛用していたSony製のカナル型イヤホン(4,000円)が断線した
音楽がないと完全に生きられない体になっているので
早々代わりの品を検討する
調べると3,000円前後でSonyのものよりもいい物が買えそうだ
この価格帯ではフォスター電機のOEM製品の評判が良い
価格付属品プラグケーブルタイプケーブル長ブランド
ゼンハイザーCX3003,900無しL型U型0.85
CreativeEP6302,500無しストレート/メッキY型1.2
Sumajin/SUMEAR4,212コードマネージャ/ポーチ/AirplaineAdapterL型メッキU型1.33
iSonic/mimisen2,980キノコ/ポーチ/iPod用ストラップストレート/メッキY型1.2×

これがワレの生き方じゃ!その1

  1. 寿命が伸びた現代では、年齢を2で割ってちょうどよい。
  2. 他人の評価は重要ではない。重要なのは自分がそれを楽しめているかだ。
  3. 人間の脳は思いの外考えるのが苦手である。
  4. 脳は良い出来事よりも悪い出来事のほうをより鮮明に記憶する。
  5. 健康のためには食べてはいけない。
  6. 肥満は自殺行為である。
  7. 人生は本質的にはつまらないものである。
  8. 人生を壮大なる実験と考えたほうがよい。
  9. 大抵の問題の原因は自分にある。
  10. 人は鎖を解かれても先の見えない恐怖から自ら奴隷になる。

Saturday, June 14, 2008

Rails Tab

自分でタブを実装してみた。まだ完全じゃないけど、とりあえず。ポイントは、
  • フェードエフェクトでタブを切替え
  • タブにlink_to_remoteを貼り、これでrjsファイルを呼び出し、部分テンプレートを読むようにする
  • rjsファイルを呼び出す際に:idパラメータを渡し、それで表示する部分テンプレートを切り替えるようにする
  • link_to_remoteに部分テンプレートで表示する情報を:stocksパラメータとして渡す
  • rjsでは既に表示されているDOMをfadeし、delayした後、replace_html, appearする。
苦労した点は、
  • link_to_remoteがパラメータとしてobjectを渡せずstringかarrayしか渡せないようなので、helperで予め渡すオブジェクトから要素を抜き取って配列とした点。
  • rjsで、シリアルにfade, appearとしてもうまくいかず、delayを挟んだ点。
page[:panel].visual_effect :fade, :duration => 1.0
page.delay(1) do
  case params[:id]
  when '1'
    page[:panel].replace_html :partial => 'panel1'
    page[:panel].visual_effect :appear, :duration => 1.0
  when '2'
    page[:panel].replace_html :partial => 'panel2'
    page[:panel].visual_effect :appear, :duration => 1.0
  end
end

Friday, June 13, 2008

Rails Tab

RailsでTabメニューを実装するため調べたら、Stereotabsというprototypeを使った素晴らしいものを発見。

Stereo Interactive & Design » Stereotabs: Tabs with Prototype and Scriptaculous

しかしRailsのhtml.erbというファイルネームに問題があるようでうまく動かない。
ソースを見ても解決策が見いだせず。
ただ、prototypeのFadeエフェクトを使っているようなので、もしかしたら自分でRubyで実装できるかもしれない。

Wednesday, June 11, 2008

Rails session

Rails2.0ではsessionはデフォルトで、cookiesessionというcookieに格納する
しかしその容量が4kと小さいので大きいオブジェクトを格納するとエラーになる
そのときは、以下の方法でactive recordを格納先にできる

1.environment.rb内の以下をコメントアウトする
 config.action_controller.session_store = :active_record_store

2.セッションデータベースを以下により準備する
rake db:sessions:create 
rake db:migrate 

Tuesday, June 10, 2008

Rails parameter passing

Railsでopen flash chartの表示ができるようになった。インストールは以下の説明で。
ただ、ビュー用のメソッドからグラフのメソッド(y_right)へのパラメータの渡し方が今一つわからない。セッションを使った場合2種類のデータを渡すと500 internal errorとなってしまう。

Rails page cache

at controller,
caches_page :index, :view

at config/environment/development.rb
config.action_controller.perform_caching = true


キャッシュファイルはデフォルトでpublicフォルダに.htmlファイルとして保存される。
キャッシュを無効にしたい場合はそれらを削除する。

Rails Chart

RailsでChartを表示するためのプラグイン

CSS box alignment

boxを揃える。

div#box {
 display: inline-block;
 vertical-align: top;
}

Sunday, June 08, 2008

Ruby Stock

Infoseekの株価データにアクセスして必要な情報を取得する。
サマリーとヒストリー

Stock.rb

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

#!/usr/bin/env ruby -wKU

# encoding: utf-8

require "rubygems"

require "hpricot"

require "open-uri"

require "kconv"


class Stock

  attr_reader :name, :category, :data, :price_data, :credit_data, :company_data, :value_data

  def initialize(code)

    @code = code

    main_data(@code)

  end

  

  def price_history(term,method='m',start_page=0) #method:m,w,d, sstart_page:0,50,100

    begin

      url = "http://money.www.infoseek.co.jp/MnStock/#{@code}/slast/?sy=#{term[0][0]}&sm=#{term[0][1]}&sd=#{term[0][2]}&ey=#{term[1][0]}&em=#{term[1][1]}&ed=#{term[1][1]}&k=#{method}&st=#{start_page}"

      doc = Hpricot(open(url))

      price_history = []

      (doc/"table.ruled"/:tbody/:tr).each do |elem|

        begin

          price_history << [elem.at(:th).inner_text.toutf8, elem.at("td.emph").inner_text.toutf8]

        rescue Exception => e

          price_history << [elem.at(:th).inner_text.toutf8, nil]

          p e

        end

      end

      price_history

    rescue Exception => e

      puts e

    ensure

    end

  end

  

  private

  def main_data(code)

    begin

      url = "http://money.www.infoseek.co.jp/MnStock/#{code}/sresult/"

      data =Hpricot(open(url))

      (data/"h3#description").each do |elem|

        begin

          @name = elem.at("span#dname").inner_text.toutf8

          @category = elem.at("span#dname").next_sibling.inner_text.gsub(/\s|\?/,"").toutf8

        rescue Exception => e

          

        end

      end

      @data = []

      (data/"table.ruled").each do |table|

        begin

          @data << table.inner_text.toutf8.to_a.reject{ |item| item == "\n" }.each { |item| item.delete!("\n")}

          @price_data, @credit_data, @company_data, *@value_data = *@data

        rescue Exception => e

          

        end

      end

    rescue Exception => e

      puts e

    end

  end

  

end


if __FILE__ == $0

  stocks = ['2678.t', '3382.t', '4659.j', '7974.t', '8227.t', '9064.t', '9983.t']

  term = [[2005,1,1],[2008,6,30]]

  start_page = 0

  method = 'm'

  

  stocks.each do |stock|

    stk = Stock.new(stock)

    puts stk.name

    puts stk.category

    p stk.value_data

    p stk.price_history(term, method, start_page)

  end


end