ogagagaの日記

ruby、mac、スポーツ、釣り、アウトドア、etc・・・について、気ままに・・・。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

iCalendar形式のデータを読み書きしたい

Ruby逆引きレシピAdvent Calendarの8日目です。

こちらの本ですが、Rubyを使ってお仕事をしている人達にとってとても重宝すると思います。特に9章以降の「エラー処理/ログ」、「テスト/最適化」、「デバッグ」、「システム管理/自動化」、「ドキュメンテーション/パッケージ化」などは、Rubyでどうやったらいいんだろう?なんて思ったときにレシピ先輩が華麗に教えてくれます。そして、Rubyインストール直後に役立つ事がかいてある第一章も大変役に立つことがかかれています。また、5名の方々はそれぞれ違う方面でご活躍されていることもあり、内容が幅広いのも特徴です。
手元に一冊あって損はしないです。

Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)
# 作者: 島田浩二,設樂洋爾,村田賢太,前田智樹,谷口文威
# 出版社/メーカー: 翔泳社
# 発売日: 2009/07/25

商品詳細を見る


本日は、本をぱらぱらっとめくりお題は iCalendar形式を扱うにしました。Calendarつながりってことで、ここが気になりました。

以下は、本を見ながら書いたコードです。特に自分でカスタマイズすることなく、ほぼ本の内容を忠実に守ってコードを書いてみました。

まずは、インストール

ogagagaMacBook-478:~ ogagaga$ sudo gem install icalendar
Password:
PostInstall.txt
Successfully installed icalendar-1.1.5
1 gem installed
Installing ri documentation for icalendar-1.1.5...
Installing RDoc documentation for icalendar-1.1.5...



でもその前に、iCalendarのドキュメントを見たくなったので、参照してみることに。
おっと、ここでもレシピ先輩の出番ですよ!

#ドキュメント参照
#==========================================================================
# Ruby逆引きレシピ 010 RubyGems でインストールしたパッケージのドキュメントを参照したい
#==========================================================================
ogagagaMacBook-478:~ ogagaga$ gem server
Starting gem server on http://localhost:8808/


上記URLにアクセスするとドキュメントが参照できます。
これまた、この本でお手軽に調べる事ができます。

以下はコードです。

#==========================================================================
# Ruby逆引きレシピ 139 iCalendar 形式のデータを読み書きしたい
#==========================================================================

require 'rubygems' # Unless you install from the tarball or zip.
require 'icalendar'
require 'date'
require 'kconv'

require 'pp' # for debug


include Icalendar # Probably do this in your class to limit namespace overlap

# Create a calendar with an event (standard method)
cal = Icalendar::Calendar.new

# ブロック内で定義されたイベントをカレンダーに追加する
cal.event do
dtstart Date.new(2010, 12, 03)
dtend Date.new(2010, 12, 05)
summary "札幌Ruby会議03"
description "地域Ruby会議(Regional RubyKaigi;りーじょなるるびーかいぎ)"
klass "PRIVATE"
end

# iCalendar 形式へ変換!
cal.to_ical

pp(cal)

# ogagagaMacBook-478:src ogagaga$ ruby icalendar_sample.rb
# ## @components=
# {:events=>
# [## @components={},
# @name="VEVENT",
# @properties=
# {"sequence"=>0,
# "ip_class"=>"PRIVATE",
# "dtend"=>#,
# "dtstart"=>#,
# "uid"=>"2010-12-13T23:25:40+09:00_165775011@ogagagaMacBook-478.local",
# "dtstamp"=>#,
# "description"=>
# "地域Ruby会議(Regional RubyKaigi;りーじょなるるびーかいぎ)",
# "summary"=>"札幌Ruby会議03"}>]},
# @name="VCALENDAR",
# @properties=
# {"version"=>"2.0", "calscale"=>"GREGORIAN", "prodid"=>"iCalendar-Ruby"}>

# 既存のeventオブジェクトを追加する方法
cal = Icalendar::Calendar.new

event = Icalendar::Event.new
event.dtstart = Date.new(2010, 12, 03)
event.dtend = Date.new(2010, 12, 05)
event.summary = "札幌Ruby会議03"
event.description = "地域Ruby会議(Regional RubyKaigi;りーじょなるるびーかいぎ)"
event.klass = "PRIVATE"

cal.add_event(event)

pp(cal)

# ## @components=
# {:events=>
# [## @components={},
# @name="VEVENT",
# @properties=
# {"sequence"=>0,
# "ip_class"=>"PRIVATE",
# "dtend"=>#,
# "dtstart"=>#,
# "uid"=>"2010-12-13T23:25:40+09:00_120918459@ogagagaMacBook-478.local",
# "dtstamp"=>#,
# "description"=>
# "地域Ruby会議(Regional RubyKaigi;りーじょなるるびーかいぎ)",
# "summary"=>"札幌Ruby会議03"}>]},
# @name="VCALENDAR",
# @properties=
# {"version"=>"2.0", "calscale"=>"GREGORIAN", "prodid"=>"iCalendar-Ruby"}>



と本を読みながら簡単にできます。

ファイルに落とす場合は、こんな感じ。

# ファイルに落とす
# http://ja.wikipedia.org/wiki/ICalendar
# によると拡張子は.ical; .ics; .ifb; .icalendar
File.open("recipe_sample.ics", "w+b") do |f|
f.write(cal.to_ical.toutf8)
end



次は、ファイルの解析。

# iCalendar 形式のファイルを解析する
File.open("recipe_sample.ics") do |f|
cal = Icalendar.parse(f).first
event = cal.events.first

pp(event.dtstart)
pp(event.description)
end

# #
# "地域Ruby会議(Regional RubyKaigi;りーじょなるるびーかいぎ)"



で、なんとなく一意なファイル名で保存したくなった。ここでもレシピ先輩の登場。

# おまけ
# =============================================================================
# Ruby逆引きレシピ 040 ユニークな識別子(UUID)を生成したい
# =============================================================================
# ファイル名を一意にしてみます。
# gem install uuidtools
require 'uuidtools'

File.open("recipe_sample_#{UUIDTools::UUID.timestamp_create}.ics", "w+b") do |f|
f.write(cal.to_ical.toutf8)
end

# recipe_sample_190d9a24-06c9-11e0-a117-002500fffecc.ics が出来上がり。



ということで、この本があると特にググったりしなくても良い場合がありますね。
ほんとに重宝するね!
スポンサーサイト
  1. 2010/12/16(木) 00:00:00|
  2. Ruby
  3. | トラックバック:0
  4. | コメント:0

札幌Ruby会議03 裏話 大懇親会編

札幌ruby会議03 NOC裏話編なんてのを小岩さんが書いてくれていたので、懇親会を担当していた私もまとめてみました。

今回、札幌Ruby会議で初めての懇親会となりました。01,02の懇親スイーツタイムが前進となります。

Ruby札幌では懇親会の実績がなく、どんな内容にするかはそれなりに悩みました。

今回のポイントは「Ruby札幌なりの」ということに焦点を当てました。The RubyKaigi や OSC北海道 の懇親会企画をそのままもってきても単なるコピーになってしまうので、それ以外の何かを考えていました。当初は企画なしでも懇親できるのではなんてことも考えていたりしました。
など(上記は一部)から懇親会内容を決めました。

場所
ヨシミキッチン 札幌パルコ店
札幌市中央区南1条西3丁目 札幌パルコ8F [TEL]011-214-2205 AM11:00~AM0:00
[選定理由]
OSC2010Hokkaidoの懇親会に参加したらこちらの場所だったので、どんなことができるかとか人の流れなどを体感できていたのでスタッフが動きやすいこと、こちらの会場で懇親会を設定したかたがスタッフにいたこと、貸し切り可能だったことなどの理由でこちらのお店にしました。

料理
「札幌らしい」よりは「北海道らしい」というポイントでメニューを店長と相談して決めました。本州からいらっしゃた方は、海鮮やスープカレー、ラーメンなどがお目当てなようだったので懇親会では、「ジンギスカン」、「ちゃんちゃん焼き」などをメニューに加えてもらえるようにお願いしました(普段はメニューにありません)。北海道らしいメニューにすることで、道内参加者から道外参加者への説明もしやすいのではという意図もありました。あとはこれらのメニューに合うように、おにぎりを用意してもらったりもしました。
飲み物ではサッポロビールのクラシックを用意したり。

企画
「みんなが懇親できるように」ということで、全員参加型の企画「1人20秒自己紹介」というのにしました。名札に貼ってもらったシールもここで懇親しやすいようにという意図があります。それでも、何も話す事がない場合のためにカンペ(本州方面と北海道の2種類)も用意しました。


以下はよかったことと反省点です。

よかったこと
大きな問題もなく懇親会ができた
みなさんが企画に参加してくれた(時間はかかったけど)
YOSHIMI のスタッフのみなさんがとてもよくしてくださった(企画から当日まで本当にお世話になりました)
まつもとさんも参加してくれた(当初欠席の噂もあったり)
DSC_0230
参加人数が会場の大きさに対して適切だった。
開始はフリードリンクにしてよかった
企画のおかげで懇親できたよと声をかけていただいたり

反省点
私が企画の司会などで会場全体を把握できていなかったこと
企画のために、本州方面と北海道の人を分けてしまったこと(料理がとりにいけないなど不便が多かった)
料理が足りない人がいたかをこまめにチェックできていなかった。懇親会の運営に配置するスタッフが足りなかったのがまずかったかも。
料理の出る場所が偏っていたこと(会場がコの字型なので、仕方ない部分もあった)

そんなに裏話的なことはなかったかもしれませんでしたが、何かの参考になればと思います。
わたしはずっと司会をしていたので、料理の写真を撮れていないので、誰か提供してほしいな
なんて思ったりもしています(笑)

最後に懇親会企画や運営に協力してくれたスタッフのみなさんありがとうです!何とか無事?開催できたのものみなさんのおかげです。

準備中の写真


DSC_0220

DSC_0217

DSC_0216

DSC_0215

DSC_0214

DSC_0208
こっち側にも料理があればよかったんですね...
  1. 2010/12/15(水) 22:32:47|
  2. Ruby
  3. | トラックバック:0
  4. | コメント:1

札幌Ruby会議03

札幌Ruby会議03に参加してきました!

メディアMIX

去年はるびまレポート担当で、今年は受付お手伝い、懇親会周りを担当していました。

まずは、ご来場くださった皆様、スピーカーの皆様、実行委委員の皆様ありがとうございました!
みなさんの協力なしでは、こんなに素晴らしいイベントにはなりませんでしたね。
(実は天気があやしくて、いろいろ不安だったのでした)

私はほぼ本編を見る事ができていない(あとで録画動画は見ます)ので、IRC や #sprk03
などから得た範囲でまとめてみました。いい話は他の方のブログを見た方がいいと思います。

・当日の朝は、matzをお迎えに行き普通に会話できたことが良かった。なので、当日の実行委員の朝会は欠席しますと伝えていたのに、僕は寝坊していると思われていたらしい(笑)。

・唯一まともに見たセッションは、上司の@tmaedaさんのです。あの内容は本当によかったと思います。来れなかった方も録画なのでみるといいと思います!そして、そんな素晴らしい話を教えてくれる前田さんに感謝です。同じ職場で僕は恵まれていると思います。

・プログラム内容と順番がとてもよかった。Ruby のイベントで、テストや数学、カーリングなどのお話も聞けた。

・会場設計中に急遽、受付を当日の場所に変更したのはよかったと思うのと、人があまりどばっときていない?のもあってスムーズだったのかな(もちろん受付担当の方々がすばらしかったのもあるのです)

・会場がホールでよかったこと。ハンズオンがなくセッションオンリーだと見事にハマったと思う。

・本州方面の方々と再会できて嬉しかったです!ただ、あまりお話する時間がとれなくて残念でした。

以下懇親会。

・本編の終了時間が遅れていたにも関わらず、懇親会の会場までほぼ時間通りに集まってくれた。

・参加者全員に一言いただくことをお願いさせてもらったのですが、実行委員じゃない方も僕のサポートをしてくれて助かりました。

・matzや高橋さんをはじめとした方々とみなさんが懇親できていたのだろうか?料理や飲み物はみなさん召し上がってくださっているのだろうか?などと思っていましたが、
YOSHIMIさんのご協力もあり、料理など不足することはなかったと思います。

・私は司会したりしていたので、あまりお話などできていませんでしたが、「今日は本当にありがとうございます」なんて言葉を直接いただき、本当に嬉しかったです!お店を最後に出るときに、はしむかいさんが直接ご挨拶にきてくださり嬉しかったです。

・懇親会関連でサポートしくれた実行委員のみなさんに凄く助けられました。ありがとう!

札幌Ruby会議03 が終わって、自分自身どうしいいくべきかみたいなことはもやもやとあるので、
それは年末にでもまとめてみることにしよう。ただ、僕がRubyコミュニティに関わるようになった
のは、間違いなく Ruby2009 で 角谷さんの「Take the Red Pill」を聞いてからだったので、この
辺りから今までの自分もふりかえれるといいのかな。

追伸:ペアプログラミングで寝ない方法にはとても興味がある。
  1. 2010/12/05(日) 22:47:58|
  2. Ruby
  3. | トラックバック:0
  4. | コメント:0

プロフィール

ogagaga

Author:ogagaga
北海道小樽市在住のエンジニア(職場は札幌)です。
Ruby、Rails、Objective-C、カメラ(NIKON D60)、iPhone(3GS)、たいやき、和菓子 etc...

flickr

http://www.flickr.com/photos/y_ogagaga/

flickr

www.flickr.com
y_ogagaga's items Go to y_ogagaga's photostream

SapporoRubyKaigi03_STAFF

RubyKaigi2010_STAFF

SapporoRubyKaigi02_STAFF

RubyKaigi2009_ATTENDEE

最近の記事

Viewサーチ北海道

カレンダー

07 | 2017/08 | 09
- - 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 - -

カテゴリー

月別アーカイブ

最近のコメント

最近のトラックバック

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。