2009/02/28

第7回北海道開発オフ、大盛況でした。

さて、今日は第7回北海道開発オフの日でした。当初13名の予定が、あれよあれよと増員され、最終的には以下のメンバー。17人!すごい。お忙しい中お越し頂いた皆さん、お疲れ様でした。今日も楽しかったです。

@smokeymonkey
@irasally
->Sapporo Weather
@hadzimme
@webbingstudio
@makies
@iyoupapa
@h_hiro
@maimuzo
@sak
@snoozer05
@darashi
->SAPICAの利用履歴を可視化する
@ketaiorg
@shuji_w6e
->pilika
@osabou
->@CTSInfo
@lncr_ct9a
@nakayoshix
@n24bass

相変わらずのまったりゆるゆるな感じで進行しました。お昼ご飯は第6回と同じくスープカレーSuage+に行きました。

さて、今回僕がやったのは以下の2つ。
[-*煙猴*-]: 第7回北海道開発オフ成果:Yma4rを使ってみる
[-*煙猴*-]: 第7回北海道開発オフ成果:Google TrendのHottrendをTwitter投稿する
それと、開発サーバをEtchからLennyにUpしてから動かなくなっていたPlaggerスクリプト(JVN、SapporoNews)の対応...してたのですが、結局動かず。Ruby化を目論みましたが失敗。近いうちに完成させます。

ついでに、やたらと増えてしまったTwitter Botたちを記録しておきます。
@JVN
@SapporoNews
@LastFmRank
@dabesa
@AngraMainyu
@ITWSCAL
@825fm

次は3月にプチ開発オフをやる予定ですので、興味のある方はぜひ参加して頂けると嬉しいです。

第7回北海道開発オフ成果:Google TrendのHottrendをTwitter投稿する

Google Trend 急上昇ワードを取得してParseして@dabesaに喋らせる。


#! /usr/bin/ruby -Ku

require 'open-uri'
require 'rexml/document'

require 'net/http'
require 'rubygems'
gem 'twitter4r'
require 'twitter'
require 'pit'

# Twitter4Rバグ回避
require 'cgi'
class Hash
def to_http_str
self.map{|key,value| "#{key}=#{CGI.escape(value.to_s)}"}.join("&")
end
end

# TinyURL化メソッド
def tinyurl(link)
url = "http://tinyurl.com/api-create.php?url=" + link
open(url) do |http|
res = http.read
return res
end
end

begin

uri="http://www.google.com/trends/hottrends/atom/hourly"
xml = open(uri).read
eventlist=Array.new

REXML::Document.new(xml).root.elements.each("entry") do |elm|
eventlist << elm.elements['content'].text.to_s
end

i = eventlist[0].index("href=")
i = i + 6
j = eventlist[0].index("&sa=X")
j = j + 4
url = eventlist[0][i..j]
turl = tinyurl(url)

i = eventlist[0].index("&sa=X")
i = i + 7
j = eventlist[0].index("<\/a>")
j = j - 1
keyword = eventlist[0][i..j]

mess = "[Now Hottrend!] \"" + keyword + "\" => " + turl

config = Pit.get("dabesa")
cl = Twitter::Client.new(config)
cl.status(:post,mess)

wmess = 'status=' + URI.escape(mess)
req = Net::HTTP::Post.new("/statuses/update.json?")
req.basic_auth "dabesa","PASSWORD"
Net::HTTP.start('api.wassr.jp',80) {|http|
response = http.request(req,wmess)
}

rescue
print "RuntimeError: ", $!, "\n";
end

第7回北海道開発オフ成果:Yma4rを使ってみる

@niku_nameさんが開発オフでも作っていた、yma4rを試してみる。

(1)インストール。cucumberも入れないと動かなかった。

sudo gem source -a http://gems.github.com
sudo gem install cucumber
sudo gem install niku-yma4r


(2)以下ソース。

#!/usr/bin/ruby -Ku
# Yahooのテキスト解析は以下を参照
# http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html

require 'rubygems'
require 'yma4r'

puts "###### 形態素解析(ma)"
yma4r = Yma4r.new(
# YahooアプリケーションID
:appid => '自分で取得したYahooアプリケーションID',
# 解析対象のテキスト
:sentence => '友達の友達は皆友達、俺の友達とお前の友達は皆友達。',
# ma->形態素解析結果、uniq->出現頻度情報
:results => :ma,
# 戻り値を指定、以下の5種類がある
:response => [:surface, :reading, :pos, :baseform, :feature]
)

yma4r.parse.ma_result.word_list.each do |e|
puts "surface:#{e.surface}, reading:#{e.reading}, pos:#{e.pos}, baseform:#{e.baseform}, feature:#{e.feature}"
end

puts "###### 出現頻度数(uniq)"
yma4r = Yma4r.new(
# YahooアプリケーションID
:appid => '自分で取得したYahooアプリケーションID',
# 解析対象のテキスト
:sentence => '友達の友達は皆友達、俺の友達とお前の友達は皆友達。',
# ma->形態素解析結果、uniq->出現頻度情報
:results => :uniq,
# 戻り値を指定、以下の5種類がある
:response => [:surface, :reading, :pos, :baseform, :feature]
)

yma4r.parse.uniq_result.word_list.each do |e|
puts "#{e.count}, surface:#{e.surface}, reading:#{e.reading}, pos:#{e.pos}, baseform:#{e.baseform}, feature:#{e.feature}"
end


(3)出力結果。

###### 形態素解析(ma)
surface:友達, reading:ともだち, pos:名詞, baseform:友達, feature:名詞,名詞,*,友達,ともだち,友達
surface:の, reading:の, pos:助詞, baseform:の, feature:助詞,助詞連体化,*,の,の,の
surface:友達, reading:ともだち, pos:名詞, baseform:友達, feature:名詞,名詞,*,友達,ともだち,友達
surface:は, reading:は, pos:助詞, baseform:は, feature:助詞,係助詞,*,は,は,は
surface:皆, reading:みな, pos:名詞, baseform:皆, feature:名詞,名詞,*,皆,みな,皆
surface:友達, reading:ともだち, pos:名詞, baseform:友達, feature:名詞,名詞,*,友達,ともだち,友達
surface:、, reading:、, pos:特殊, baseform:、, feature:特殊,読点,*,、,、,、
surface:俺, reading:おれ, pos:名詞, baseform:俺, feature:名詞,名詞,*,俺,おれ,俺
surface:の, reading:の, pos:助詞, baseform:の, feature:助詞,助詞連体化,*,の,の,の
surface:友達, reading:ともだち, pos:名詞, baseform:友達, feature:名詞,名詞,*,友達,ともだち,友達
surface:と, reading:と, pos:助詞, baseform:と, feature:助詞,並立助詞,*,と,と,と
surface:お前, reading:おまえ, pos:名詞, baseform:お前, feature:名詞,名詞,*,お前,おまえ,お前
surface:の, reading:の, pos:助詞, baseform:の, feature:助詞,助詞連体化,*,の,の,の
surface:友達, reading:ともだち, pos:名詞, baseform:友達, feature:名詞,名詞,*,友達,ともだち,友達
surface:は, reading:は, pos:助詞, baseform:は, feature:助詞,係助詞,*,は,は,は
surface:皆, reading:みな, pos:名詞, baseform:皆, feature:名詞,名詞,*,皆,みな,皆
surface:友達, reading:ともだち, pos:名詞, baseform:友達, feature:名詞,名詞,*,友達,ともだち,友達
surface:。, reading:。, pos:特殊, baseform:。, feature:特殊,句点,*,。,。,。
###### 出現頻度数(uniq)
6, surface:友達, reading:, pos:名詞, baseform:友達, feature:名詞,*,*,友達,,友達
3, surface:の, reading:, pos:助詞, baseform:の, feature:助詞,*,*,の,,の
2, surface:は, reading:, pos:助詞, baseform:は, feature:助詞,*,*,は,,は
2, surface:皆, reading:, pos:名詞, baseform:皆, feature:名詞,*,*,皆,,皆
1, surface:、, reading:, pos:特殊, baseform:、, feature:特殊,*,*,、,,、
1, surface:。, reading:, pos:特殊, baseform:。, feature:特殊,*,*,。,,。
1, surface:お前, reading:, pos:名詞, baseform:お前, feature:名詞,*,*,お前,,お前
1, surface:と, reading:, pos:助詞, baseform:と, feature:助詞,*,*,と,,と
1, surface:俺, reading:, pos:名詞, baseform:俺, feature:名詞,*,*,俺,,俺

2009/02/27

Mechanizeを使ってTwitterのアイコンを変更

@riywoさんのTwitterのアイコンに自動で文字入れたりするPlaggerが楽しそうで刺激されたので、Twitterのアイコンを変更するスクリプトを書いてみた。Mechanizeを使って画像ファイルをPOSTしてるだけです。Mechanizeを使うのは初めてだったので苦戦しました。Cronで6:30と20:30に実行して、昼と夜でアイコンに切り替えます。


#! /usr/bin/ruby -Ku

require 'rubygems'
require 'mechanize'
require 'date'


begin
uname = "USERNAME"
upass = "PASSWORD"

agent = WWW::Mechanize.new
page = agent.get('http://twitter.com/login')
f = page.forms.first
f.field_with(:name => 'session[username_or_email]').value = uname
f.field_with(:name => 'session[password]').value = upass
data0 = agent.submit(f)

data1 = data0.link_with(:text => 'Settings').click
data2 = data1.link_with(:text => 'Picture').click
f = data2.forms.first
if DateTime.now.hour > 6 and DateTime.now.hour < 20 then
f.file_uploads.first.file_name = "twDay.png"
else
f.file_uploads.first.file_name = "twNight.png"
end
agent.submit(f)

rescue
print "RuntimeError: ", $!, "\n";
end

exit

IT勉強会カレンダーの内容を1ヶ月分と1週間分にまとめてBlog投稿

前回の北海道開発オフで@ITWSCALを作ったのだけど、当日分の勉強会開催情報しか配信されないので、事前に数日後の勉強会をチェックするのには使えない。そこで、IT勉強会カレンダーの内容を1ヶ月分及び1週間分としてBlogに投稿するスクリプトを作った。基本的には、自分でRSSで読めたら便利かなぁ、というだけです。

IT勉強会カレンダーの二次利用については、運営されているはなずきん♪さんのこちらを参照。大変な運用をされている、はなずきん♪さんに感謝と賛辞を。

投稿されるBlogはhttp://itwscal.smokeymonkey.net/。ソースは以下。


#! /usr/bin/ruby -Ku

require 'open-uri'
require 'date'
require 'rexml/document'
require 'kconv'
require 'net/smtp'

begin

fday = Date.today.to_s
array = Date.today.to_s.split("-")
day = Date.new(array[0].to_i,array[1].to_i+1,1)
lday = day.to_s

uri="http://www.google.com/calendar/feeds/fvijvohm91uifvd9hratehf65k%40group.calendar.google.com/public/basic?orderby=starttime&max-results=10000&start-min=" + fday + "&start-max=" + lday
xml = open(uri).read
eventlist=Array.new
cntlist=Array.new

REXML::Document.new(xml).root.elements.each("entry") do |elm|
cnt = elm.elements['content'].text.to_s
cnt.gsub!(/\n/,"")
cnt.gsub!(/
/,",")
cnt.gsub!(/,+/,",")
eventlist << [elm.elements['title'].text.to_s,cnt]
end

day = day - 1
sfile = open("send.txt",'w')
sfile.puts "From:FROMADDRESS\n"
sfile.puts "To:TOADDRESS\n"
subject = "Monthly Event: " + fday + "-" + day.to_s + "\n"
sfile.puts "Subject:" + subject
sfile.puts "Mime-Version: 1.0\n"
sfile.puts "Content-Type: text/plain; charset=\"utf8\"\n"
sfile.puts "Content-Transfer-Encoding: 8bit\n"

eventlist.reverse_each do |event|
sfile.puts "\n"
sfile.puts "●" + event[0]
event[1].split(",").each do |data|
edata = Kconv.kconv(data,Kconv::UTF8)
sfile.puts edata
end
end
sfile.close

Net::SMTP.start('localhost',25) {|smtp|
File.open('send.txt','r') {|f|
smtp.send_mail f, 'FROMADDRESS', 'TOADDRESS'
}
}
rescue
print "RuntimeError: ", $!, "\n";
end

2009/02/26

社内勉強用資料「超・ネットワーク入門」を作った

最近月1回の社内勉強会を開催しています。方式としてはほぼ北海道開発オフ方式をとっているのですが、やはりテーマが無いと食らいつきが悪い。そこでまず、あまりネットワークに詳しくない社員を対象にネットワークアナライザを使ったハンズオンをしてみようと思い、勉強用資料として、以下のスライドを作成してみました。



実はSlideShareを使うのは初めてです。内容も初歩的なものですが、まずはこれで経験の浅い社員に勉強してもらおうと思います。ツッコミも募集します:-)

他にも「こんなのやったらいいんじゃない」とかネタがあったらぜひ教えて下さい。

2009/02/25

僕の残り短い20代をカウントするスクリプト

待って!まだ逃げていかないで、僕の20代!


#! /usr/bin/ruby

require 'time'
require 'rubygems'
gem 'twitter4r'
require 'twitter'
require 'pit'

require 'open-uri'
require 'kconv'

# Twitter4R バグ回避
require 'cgi'
class Hash
def to_http_str
self.map{|key,value| "#{key}=#{CGI.escape(value.to_s)}"}.join("&")
end
end

begin

tday = Date.today
bday = Date.new(2009,3,8)
zday = bday - tday

mess = "The one's twenties of smokeymonkey is " + zday.to_s + " another."

# Ej9F
config = Pit.get("Twitter")
cl = Twitter::Client.new(config)
cl.status(:post,mess)

rescue
print "RuntimeError: ", $!, "\n";
end

北海道情報セキュリティ勉強会のロゴが変わりました

事の経緯:せきゅぽろでもスタッフ用のネームカードが欲しいね→可愛いロゴがあると良いね→まっちゃだいふくさんが無茶振り→toshizouさんが
北海道情報セキュリティ勉強会(せきゅぽろ)のロゴを作ってくださいました!

すげぇ!かわいい!札幌っぽい!

なんとデザイン違いのネームカード用ミニロゴまで!

僕の長女はこっちのほうが好きと言ってました。どっちも素敵です。

toshizouさん、ありがとうございました!

2009年4月11日(土)に第2回の北海道情報セキュリティ勉強会を予定しています。近日アナウンス予定、皆さんのご参加をお待ちしております!その際には新ロゴのネームカードをお渡しできるように準備したいと思います(笑)

2009/02/22

スノーゴーグルを購入した

今シーズンは長女の付き添いでスキーに行ったり、同僚とスノーボードに(デビュー戦で)行ったり、ウィンタースポーツをする機会が増えました。というか、実際のところ10年ぶりです。高校卒業以来一回も滑ったことが無かったので、体力的に不安だったのですが、まぁ何とかついていけてます。

道具については高校時代に使っていた板・ポール・ブーツ、そしてウェアを流用。10年経ってもウェアが着れるというのは喜ばしいことですが、さて後何年体型維持できるか...グローブも10年前のものをそのまま使っていますが、帽子はさすがにデザインがキツく、ゴーグルは傷だらけで使い物にならず。どうしようかと困っていたのですが、やっとゴーグルと帽子を購入しました。帽子は普通のニットのもので、まぁセールで\500のもの。ゴーグルは↓これです。



僕は眼鏡をつけたまま滑るので、眼鏡着用可タイプであるDRED-DHを選択しました。展示品箱無しで\9,450→\4,480でした。どうせ年間4,5回しか使わないので、このレベルで十分です。

さっそく来週、長女を連れてスキーに行きたいと思います。

2009/02/21

すもけ Presents Now Playing by Youtube

Naturally 7:[Feel it (in the air tonight)]


Bobby V feat Yung Joc:[Beep]


INDIA.ARIE:[Beautiful Flower]


Plies:[Put it On Ya]


Soulja boy tellem:[Kiss Me Thru The Phone]


Haystak:[Hard 2 Love By]


Savage:[Swing]


サイプレス上野とロベルト吉野:[WONDER WHEEL]


GrandMaster Flash Feat. V.A.:[We Speak Hip Hop]

2009/02/20

LOCAL定例会見学ツアー

2008/02/19(木)、北海道開発オフのメンバーで、LOCALの2009年2月度定例会を見学してきました。事の経緯はこちら。雰囲気だけレビューします。

20:00、札幌駅西口にて待ち合わせ。参加者は@smokeymonkey、@irasally@hadzimme@webbingstudio@h_hiroの5人(敬称略)参加予定だった@iyoupapaさんは風邪により急遽欠席。お大事にして下さい。

引率係の@makiesさんに引き連れられて札幌駅北口の札幌ビズカフェへ。実はビズカフェは初めて行きました。入場\500でフリードリンク、カウンタとテーブル2席、奥に会議室という構成でした。テーブルには打ち合わせをされている若い方がいらっしゃったり、結構活気あるんだな、という印象。待っていると徐々にLOCALメンバーが集まってきて、最終的には14,5名が参加されていました。僕ら見学者は後ろのほうに固まって傍聴。

定例会の議事内容自体は、後日LOCALのWebサイトにアップされると思うので割愛。会議自体は、@irasallyさんが「こんなに熱い討論を見たのは高校生以来」とぽろっと呟いたくらい活発でした。最初に議題のアジェンダをWikiにアップしておき、プロジェクタで映しながら進めていたので、スムーズに議事が進行していました。またUstreamでも定例会風景が配信されていました。僕も以前Ustreamで定例会を見ていたことがあったんだけど、活動を広く知らしめるという点では良いことだと思います。UstreamのURLが分からなかったけど...Webサイトに書いてあったのかな?多岐にわたる活動について、皆で議論しながら進めていくスタイルである、ということがよく分かりました。

22:00に閉会、その後軽く食事にでも、ということで僕も混ぜてもらい、ちょっと呑んで帰宅しました。和気藹々としていて楽しかったです。アマチュア無線の話はさっぱりわかんなかったけど(笑)お土産に手作りパンまで頂きました。美味かったです。

LOCALはメタコミュニティというスタンスで、道内でコミュニティを開催する際に後援してくれる、というイメージしか無く、なかなか実際の活動を把握していなかったのですが、この定例会の見学で大分見えてきたと思います。LOCALとしても多くの人に活動を知ってほしいとのことなので、興味がある方がいれば、定例会を見に行くのは一つの手じゃないかな、と思います。もし「そうは言っても一見さんはなかなか行き辛いし...」と思われているのであれば、僕に声かけてくれれば一緒に行きます:-)

LOCALの皆さん、ありがとうございました。

2009/02/18

Youtubeで20syl本人ぽい人発見

何気なくYoutubeをDiggしてたら、20sylというユーザを発見。この人リアルに、フランスのHip Hop Band Hocus Pocusのリーダーの20syl本人ぽいですね。MPCでビートメイクしている映像なんかもあります。

Hocus Pocusは超ファンキーでカッコいいです。



Place 54
Place 54
posted with amazlet at 09.02.18
Hocus Pocus
Motown
売り上げランキング: 437187

2009/02/17

昨晩から今日にかけていろいろ大変だった件

Geekなぺーじ : 今朝、インターネットが壊れました
yebo blog: インターネットでルーティング障害発生
Daily Kos: State of the Nation

(1)AS47868を繰り返す異常な長さのAS Pathが発生。
(2)一部のルータは相手を不正なpeerと見なしセッション切断。
(3)一部のルータはAS Pathを受信しちゃってさらに広報。
(4)経路大混乱。

どうも(3)についてはIOSのバグであったらしく、Version Upによって解消される問題だったらしい。僕も詳しく追えていないんだけど、備忘録として記録しておく。ネットワーク管理者の皆さん、お疲れ様でした。まだ終息していないところもあるだろうけど(汗)

吉四六漬けが美味い

皆さん、吉四六漬けを知っていますか。僕は知りませんでした。大分県玖珠町の名物の漬物だとか。長女が仲良くしている女の子のお母さんの実家が大分県だということで、貰い物したものです。

頂いたのは大根・人参・胡瓜の3種がセットになったもの。独特のもろみで漬けたものだそうですが、なんとなく味噌っぽい風味がします。結構塩ッ気が強いのですが、小さく刻んで炊き立ての白米と一緒に食べると極楽。すげぇ美味いです。これなら日本酒や焼酎のツマミとしても良いと思われます。お茶請けにしたらバクバク食べちゃいました。

地方名物の漬物としてはいぶりがっこも好きなのですが、また一つ美味しい漬物に出会えました。

2009/02/16

読了:神林長平:[魂の駆動体]&僕のクルマの話

魂の駆動体 (ハヤカワ文庫JA)
神林 長平
早川書房
売り上げランキング: 176555


全人類を精神体シェルターに格納する、というのは「小指の先の天使」でもあったモチーフでしたが(あれ、そーいやゼーガペインもそうだっけ)、今回はそのモチーフを背骨に、クルマや「物を作る」ということの魅力を肉付けした物語です。すごく面白かったんだけど、ここで僕が伝えたいのはその感想では無くて、この小説を読んで思い出した、僕の乗っていた車の話です。

免許を取得した当初は親の車(日産・サニー→トヨタ・スターレット)に乗っていて、その後初めて自分で購入したのは中古のはダイハツ・ミラ・パルコでした。込み込みで10万という、値段も破格ならボロさも超絶。しかしぶつけてもこすっても頑丈に走ってくれました。

その後正社員として就職し、初めて買ったのが、昔からどうしてもどうしても欲しかった夢の車、VW TYPE-1。1947年製、色はベージュ、オーバルウィンドウで、ブレーキランプがウィンカーも兼ねたタイプです。エンジンを新品に乗せ変えてレストアされた、素晴らしいヒストリック・カーでした。

もちろん、レストアカーらしく、さまざまなトラブルに見舞われました。購入当初はマフラーから直接ガソリンが噴出し、エンジンの調整が甘くて回転数が低くすぐにエンスト。フロントガラスから雨漏りするわ、クラクションを鳴らしたらクラクションボタンが飛んでくわ、走行中にワイパー吹っ飛ぶわ、夏は暑いわ、暖房用のジェットヒーターを別付けしたからガソリンスタンドではエンジン用のハイオクとジェットヒーター用の軽油を給油してもらう必要があるわ、真冬にエンジンが動かなくなり薄野交番前でおまわりさんに怒られながら友達に牽引してもらうわ、シートベルト付いてないから走行中に検問で引っかかって「すみません、最初から付いてないんです」って言ったらおまわりさんに苦笑いされるわ、ガソリンタンクがフロントに設置されているため彼女には「車内がガソリン臭い」ってブースカ言われるわ、もう散々です。

しかし、だからこそ面白い。なかなか回転数が安定しないエンジンを、少しずつ回しながら安定させる。安定走行したときの水平4気筒の音は最高でした。ラジオが壊れていたけど、エンジンの音が聞こえていれば、他に音なんていらないくらい気持ちよく過ごせました。本気で愛称(ハーヴィ)を付けて呼んでました。こんなにモノに恋したのは、後にも先にもこれが最後です。

その後結婚し、妻が妊娠。ちょうどチャイルドシートが法令化されたころで、シートベルトの無い車を維持するのは、生活的に無理でした。泣く泣く手放し、ファミリー用の大きなワゴンを購入。今に至ります。

またいつか、あのTYPE-1のようなヒストリック・カーを手に入れたい、乗りたいと思っていますが、僕も子供を3人抱える身ですし、難しいでしょう。しかし、僕が仕事以外に一生かけてでも叶えたいと思っているのは、この「自分の好きな車に乗りたい」という夢だけです。欲しい車はいっぱいあります。もちろんまたTYPE-1にも乗りたいし、TYPE-2にも憧れるし、MINIバンも好きだし、チンクも2CVも欲しいです。さすがにスーパーセブンまではいかないけれど...50歳になるまでには、自分の好きな車に乗ることを目指します。

今もどこかの空の下で、僕がかつて愛したオーバルのTYPE-1は、気持ちよく走っているのだろうと、思いを馳せています。

2009/02/15

LOCAL DEVELOPER DAY '09/Winterが開催されました

関連:【告知】LOCAL DEVELOPER DAY '09/Winter

2009/02/14、LOCAL DEVELOPER DAY '09/Winterが開催されました。僕はせきゅぽろのスタッフとして、お手伝いさせて頂きました。参加者の皆様、お忙しい中わざわざお越し頂き、ありがとうございました。講師の皆様、遠地からご足労頂き、ありがとうございました。

さて、参加者としての感想。正直なところ、PHPやPostgreSQLの深い話は、僕には難しいところもいっぱいあったのですが、原さんのMogileFSの話や中津川さんのMOONGIFTの運営話はすごく面白かったです。またせきゅぽろ枠としてお越し頂いた大垣さんのセキュリティ対策のセッションは、トータル的なセキュリティについての話だったのでとっつきやすく、好評だったように思います。クラッキングビデオとか面白かったなぁ。内容のボリュームを考えれば、もっと時間確保しておいたほうが良かったなと思いました。次は2コマでお聞きしたいですね(笑)

懇親会では、大垣さんとセキュリティのお話をしたり、中津川さんにPythonについてお聞きしたり、原さんとZABBIXのお話をしたり、小岩さんに「DoLUCはいつ復活するんですか」って聞いたり、すごく楽しかったです。残念ながら終電の関係があり、僕は0時前に撤収したのですが、もっともっと色々お話させて頂きたかったですね。割合としてスタッフや関係者が多かったのは残念なところ。もっと参加者の皆さんとお話できる環境を作るにはどうしたらいいか、今後の反省点ですね。

個人的には、昔の会社の先輩の旦那さんにお会いしてお話が出来た、というのもとても良かったです。こういう風に、思いがけないところで人のつながりを感じるのっていいですよねー。

参加者の皆さん、本当にありがとうございました。皆さんが楽しめたのなら、一スタッフとして嬉しい限りです。またせきゅぽろの勉強会を開催しますので、ぜひ来てください!

2009/02/13

はなずきん♪さんに感謝状が渡されたそうです

関連:[-*煙猴*-]はなずきん♪さんに感謝状を贈ろうプロジェクト

既に旬が過ぎた話題ではありますが...
上記でご紹介したIT勉強会カレンダーの作成者「はなずきん♪」さんに感謝上を贈ろうというプロジェクトが発足していましたが、2月7日のセキュリティ&プログラミングキャンプ・キャラバン京都で、hyoshiokさんからはなずきん♪さんに感謝状をお渡ししたそうです。素晴らしい!

感謝状をいただきました。

こっそりと左上に僕の名前もあります。

はなずきん♪さん、今後もまたーり続けていってください!応援してます。

2009/02/07

FM NORTH WAVEのプレイ曲をTwitterに投稿する@825fmを作った

僕の大好きな北海道のFM局「FM NORTH WAVE」のWebサイトでは、ラジオでプレイした曲が確認できる仕組みがあるので、最新のプレイ曲をTwitterに投稿するBotを作って見ました.

@825fm

2008/02/18 Update:当初は30分に1回Cronで回してたんだけど、投稿時に再生時間を別ファイルに保存して、3分に1回Cronで回して、前回投稿時より再生時間が新しい場合だけ投稿するように改造。投稿量が増えるだろうけど、大体再生した曲を全てTwitterに流せると思う。

2009/02/21 Update:North Waveでは29時に日を切り替えているので、29時までは前日のURLからデータを取得するように改造。

以下ソース。

#! /usr/bin/ruby

require 'time'
require 'rubygems'
gem 'twitter4r'
require 'twitter'
require 'pit'

require 'open-uri'
require 'kconv'

# Twitter4Rバグ回避
require 'cgi'
class Hash
def to_http_str
self.map{|key,value| "#{key}=#{CGI.escape(value.to_s)}"}.join("&")
end
end

begin
# 前回の最新投稿の楽曲再生時間を取得
btime = nil
tfile = open("825.txt",'r')
tfile.each do |time| btime = time.chomp end
tfile.close

# NorthWaveでは29:00で日時変更される
if DateTime.now.hour > 4 then
# 今日の日付を取得
nday = Date.today.to_s
else
# 昨日の日付を取得
tday = Date.today.to_s.split("-")
day = Date.new(tday[0].to_i,tday[1].to_i,tday[2].to_i)
day = day - 1
nday = day.to_s
end

# 曲再生リストURLを取得
open("http://www.fmnorth.co.jp/search/itiran.asp?YMD=nday") do |http|
response = http.read
nplay=""
ary = response.split("\n")
ary.each do |line|
if /.*<\/tr>/ =~ line then
mary = line.chomp.split("")
nplay=Kconv.kconv(mary.pop,Kconv::UTF8)
end
end
nplay.gsub!(/<\/font>/,",")
nplay.gsub!(/<[^>]*?>/,"")
nary = nplay.split(",")

ntime = nary[0].gsub(/:/,"")
# 前回投稿した曲再生時間より新しいデータがあったら
if ntime > btime then
# 投稿用メッセージを作成
mess = "[FM North Wave] " + nary[0] + " PLAYING!=> " + nary[2] + ":[" + nary[1] + "]"

# 投稿
config = Pit.get("825fm")
cl = Twitter::Client.new(config)
cl.status(:post,mess)

# 最新の曲再生時間をファイルに書き込む
tfile = open("825.txt",'w')
tfile.puts ntime
tfile.close
end
end

rescue
print "RuntimeError: ", $!, "\n";
end

2009/02/05

UbuntuのWebブラウザをOperaにしてみた

Ubuntu上のFirefoxがやたら重い。複数タブを開くとCPU負荷が急激に高まる。LDRでPinを一気に展開したとき等すごいストレスなので、Twitterで代替ブラウザについて聞いてみたところ、@oqunoさんからOperaを勧められたので導入してみた。

インストールはOperaのダウンロードページからdebパッケージをダウンロードしてきてインストールするだけ。初期状態だとフォントがおかしいので、詳細設定から変更(東風フォント等の日本語フォント)に変更してあげる必要がある。

動作は非常に快適。複数タブを開いてもほぼ問題なくサクサク展開される。Firefoxの時と同じくニコニコ動画ではコマ落ちが激しく見るに耐えないけれど、動画以外で使う分には軽くて良い。greasemonkeyまわりの環境が使えなくなったのは痛い(カスタマイズで使えるみたいだけど面倒臭い)けど、とりあえず実用に耐えうるので、しばらくこれで使ってみる。

「血液型 自分の説明書メーカー」をやってみた。

血液型 自分の説明書メーカーをやってみた。



て、的確過ぎてフイた。

2009/02/04

読了:神林長平:[時間蝕]

「永久刑事」とか「PAB」とか、他の作品に繋がる設定や小道具が出てくるので、あぁここが原点なのか、と思いました。「ここにいるよ」が一番分かり辛く、「酸性雨」が一番分かり易いかな。SFとして一番面白かったのは「渇眠」でした。