名古屋ruby会議01 - rubyでライフハッキング10連発♪

Post on 01-Nov-2014

2.188 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

すみません10連発じゃなくて、Ruby 1.9 を使おうよ!って内容になってます。

TRANSCRIPT

Rubyでライフハッキング10連発♪

2009.10.10 がぶちゃん

自己紹介•塚田翔也(つかだしょうや)•サラリーマン3年半•フリーランス2年目• IPA 2008年度下期未踏• 音声認識Webアクセスツール「Puppy」の開発• Android + NDK 開発 なう。

諸事情により未踏の話• IPA(独立行政法人情報処理推進機構)• 公募テーマに対して提案• 開発費とPMによるサポートを受けて約半年間で開発

• 開発終了後もサポート• ベンチャー支援系の団体としては優良• 2000年からやっている

Rubyと私• サラリーマン• Java + Strutsで3年半• Rails を知る。→ Ruby を知る。• フリーランス• Rails 2件• CakePHP 1件 もちろん他にいろいろ• 未踏• Merb

ライフハッキングその1

ExcelもRubyで

Excelを読み込むrequire 'win32ole'

app = WIN32OLE.new('Excel.Application')book = app.Workbooks.Open(app.GetOpenFilename)

for row in book.ActiveSheet.UsedRange.Rows do for cell in row.Columns do p cell.Name p cell.Age endend

book.close(false)app.quit

via http://jp.rubyist.net/magazine/?0027-ExcellentRuby

YAMLで書き出すrequire "yaml"

people = []for row in book.ActiveSheet.UsedRange.Rows do for cell in row.Columns do people << {:name => cell.Name, :age => cell.Age} endend

File.open 'people.yml', 'w' do |file| YAML.dump(people, file)end

そしてRailsのDBへrequire 'yaml'

people = YAML.load_file 'people.yml'people.each do |person| p = Person.new person p.saveend

これを import.rb というファイル名で保存して、以下を実行。ruby script/runner import.rb

幸せポイント• VBAよりも簡単!• CSVに変換して他の言語でも出来るけど簡単!• 直感的で可読性がすごく高い!• Rails/MobelのValidate(入力チェック)が活用できる!

• 独自にインポートするプログラムを作った場合、入力チェックも作り込まなきゃいけない。

ライフハッキングその2

SocketもRubyで

と、思ったんですが

このペースだととても時間内に終わりそうにありません。

そこで

突然ですが

皆様!Ruby 1.9

使ってますか?

Ruby 1.9について隣の人と30秒相談してください。

私はまだです。

ということで一緒に Ruby 1.9 に移行しましょう!

Ruby 1.9 おさらい

•2007年クリスマス 1.9.0 リリース•2009年1月31日 1.9.1 リリース•1.9 系の安定版

早く移行しましょう!(自分• YARV(Yet Another Ruby VM)で速くなった!• M17N• エンコーディングとかマルチバイトとか標準サポート。

• 便利なクラス/メソッドが増えた!• 関数型っぽさが増えた!<ここ重要

M17N• StringインスタンスがEncodingを持っている。

• なんと!標準メソッドで文字コード変換が出来る!

u = 'がぶちゃん'u.encoding # => #<Encoding:UTF-8>

s = u.encode(‘Shift_JIS’)s.encoding # => #<Encoding:Shift_JIS>

M17N• マルチバイトも標準でOK!

# Ruby 1.9系"がぶちゃん"[0..2] # => "がぶち"

# Ruby 1.8系"がぶちゃん"[0..2] # => "\343\201\214"

M17N• マジックコメントで文字コードを指定するべし。

$ cat hello.rbp "はろー!はろー!"

$ ruby1.9 hello.rbhello.rb:1: invalid multibyte char (US-ASCII)

M17N• マジックコメントで文字コードを指定するべし。

$ cat hello.rb# vim:fileencoding=utf-8p "はろー!はろー!"

$ ruby1.9 hello.rb"はろー!はろー!"

M17N• マジックコメントは emacs 風と vim 風があります。

vim 風# vim:fileencoding=utf-8

emacs 風# -*- coding: utf-8 -*-

M17N• けど、• ライブラリなど他言語で利用されるファイルはエンコーディングを指定するべきではない。

• そうです。

M17N

Arrayの拡張

Listプログラマや数学好きな人が喜びそうなメソッドが増えた!

Arrayの拡張• 組合せ• 重複を持たない組合せ

• 重複組合せ

[1, 2, 3].combination(2).to_a# => [[1, 2], [1, 3], [2, 3]]

[1, 2, 3].permutation(2).to_a# => [[1, 2], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2]]

Arrayの拡張• 直積集合

• flatten(ふらっとん)で平滑化する深さを指定できる。

[1, 2].product([3, 4])# => [[1, 3], [1, 4], [2, 3], [2, 4]]

[1, [2, [3]]].flatten(1) # => [1, 2, [3]]# Ruby 1.8系は、深さを指定できないから# => [1, 2, 3]

Arrayの拡張• 要素をシャッフルする。

• ランダムに要素を取り出す。

[0, 1, 2, 3].shuffle # => [1, 3, 0, 2][0, 1, 2, 3].shuffle # => [2, 0, 3, 1]

[0, 1, 2, 3].sample # => 2[0, 1, 2, 3].sample(2) # => [3, 2]

Enumerable• 先頭からn個を取り出す。

• 指定したインデックス以降のリストを返す。

• つまり、• carっぽい事は、 Enumerable#take(1)• cdrっぽい事は、Enumerable#drop(1)

[0, 1, 2, 3].drop(1) # => [1, 2, 3]

[0, 1, 2, 3].take(2) # => [0, 1]

Enumerable• inject でシンボルが渡せるようになった。

# Ruby 1.8 までのリストの合計[1,2,3,4,5].inject(0) {|result, i| result + i} # => 15

# 1.9 からは

[1,2,3,4,5].inject(:+) # => 15

# ついでに reduce というaliasも追加された。[1,2,3,4,5].reduce(:+) # => 15

全て紹介することはできませんが

やっぱりRuby 1.9も楽しいですよ!

さて、これで

名古屋のRubyistは

Ruby 1.9に移行完了

ライブラリ動かないとか言わない。動かせばいい!

Ruby 1.9入門って意味で

済!

Ruby を愛し育てるためにもRuby 1.9 を使いましょう

最後に

名古屋のRubyコミュニティを盛り上げましょう!

最後の最後に

大募集お友達

ビジネスパートナーアルバイト

詳しくは

Twitter : gabu

ご清聴ありがとうございました。

Rubyで素敵なプログラミングライフを

by がぶちゃん gabu

午前中の集計の問題

data = (1..100).map{rand(5)+1}.map{|id| {:id => id, :value => rand(10000)}}(1..5).map{|i| {:id => i, :sum => data.select{|h| h[:id] == i}.map{|h| h[:value]}.reduce(:+)}}

2行で出来ましたが、ひどい有様ですw

top related