Twitter
RSS
Facebook

Act as Professional

daemontoolsで勝手にプロセスが終了していたという悲しい状況を防ぐ


投稿日:2011年1月13日(この記事を読むのに必要な時間: 約 5分15秒

Ruby1.9スクリプト(Twitterbot)をLinuxデーモン化する方法

にて、Rubyスクリプトをデーモン化して、簡単に自動起動と停止できるようにしました。

ですが、何らかの影響で、Rubyスクリプトが終了してしまった場合にスクリプトが落ちたままになってしまいます。これは精神衛生上非常に良くない。

今回は、daemontoolsを使用して、プロセスが終了しても自動的に立ち上げ直す状態をつくります。

続きを読む «daemontoolsで勝手にプロセスが終了していたという悲しい状況を防ぐ»

達人プログラマーに学ぶ リファクタリング


投稿日:2011年1月12日(この記事を読むのに必要な時間: 約 4分25秒

達人プログラマー 第6章 コーディング段階 p.188

ガーデニングのメタファーはソフトウェア開発の現実にかなり近いものです。あるルーチンが大きくなりすぎたり、色々なことを実現しようとしすぎている場合、2つに株分けする必要があるのです。また、計画通りうまくいかないものは雑草を抜いたり剪定してやらないといけないのです。

こういったコード記述のやり直し、再作業、再設計を総称して「リファクタリング」と呼びます。

アンドリュー ハント¥ 3,990

Amazonで詳細を見る by AmaGrea

続きを読む «達人プログラマーに学ぶ リファクタリング»

Ruby Enterprise EditionによってRedmineのメモリ使用量を42%節約


投稿日:2011年1月9日(この記事を読むのに必要な時間: 約 9分14秒

昨日インストールしたRedmineですが、格安VPSで動かすにはちとメモリを使いすぎる。

Ruby Enterprise Editionでpassengerを動かして、45%ものメモリを節約することに成功した。

その一部始終を語ろう。

続きを読む «Ruby Enterprise EditionによってRedmineのメモリ使用量を42%節約»

Redmineによる個人的に書いたコードを管理する意義と必要性と方法


投稿日:2011年1月8日(この記事を読むのに必要な時間: 約 3分46秒

Redmineはプロジェクト管理ソフトウェアです。

  • 課題(タスク)管理
  • ガントチャート、カレンダー
  • Wiki
  • 工数管理
  • SCMとの連携

など、企業・個人で有効活用できるツールです。個人で活用することも考えてみます。

続きを読む «Redmineによる個人的に書いたコードを管理する意義と必要性と方法»

3分でわかる RubyでつぶやくTwitter bot


投稿日:2011年1月6日(この記事を読むのに必要な時間: 約 2分12秒

必要なgemをインストールしておきましょう。

$ gem install twitter logger
$ gem server

これがgemのドキュメントなので複雑なことがやりたくなったら見てください。

コンシューマーキーなどを事前に入手しておく。

XXXXXXXで埋められている部分を自分の上記で入手したKEYに変更してください。

require "rubygems"
require "twitter"
require 'logger'

LOG = Logger.new('tweet.log')
CONSUMER_KEY = 'XXXXXXXXXXXXX'
CONSUMER_SECRET = 'XXXXXXXXXXXXXXXXXXXXXX'
ACCESS_TOKEN = 'XXXXXXXXXXXXXXXXXXXXXX'
ACCESS_SECRET = 'XXXXXXXXXXXXXXXXXXXXXX'

Twitter.configure do |config|
  config.consumer_key = CONSUMER_KEY
  config.consumer_secret = CONSUMER_SECRET
  config.oauth_token = ACCESS_TOKEN
  config.oauth_token_secret = ACCESS_SECRET
end

tweet = ['つぶやきA',
         'つぶやきB',
         'つぶやきC']

client = Twitter::Client.new
begin
  client.update(tweet[rand(tweet.length)])
rescue => ex
  LOG.warn ex
  sleep 5
  retry
end

これをcronなどで定期的に回せば、ランダムでつぶやいてくれます。

その他の参考情報

Twitter OAuthに必要なKEYをそろえる


投稿日:2011年1月4日(この記事を読むのに必要な時間: 約 6分46秒

TwitterのAPIをRubyでいじっていたので、書きました。

CONSUMER_KEYとCONSUMER_SECRETは事前に入手して、スクリプトの最初の部分を書き換えてください。

[Register new app]をクリックしてこんな感じで入力すればすぐに手に入ります。

gem oauthがインストールされていなければ、こんな感じでインストールしてください。

$ gem install oauth

スクリプト

require "rubygems"
require "oauth"                                                                                                                                                                                

CONSUMER_KEY = 'XXXXXXXXXXXXXXXXXXXX'
CONSUMER_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'                                                                                                                                

consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, :site => "http://twitter.com")
request_token = consumer.get_request_token
print "このURLにアクセスして出力された番号(PIN)を入力してください。"
print request_token.authorize_url # requrest tokenをもとに認証URLを生成
oauth_verifier = gets
oauth_verifier.chomp!
access_token = request_token.get_access_token(:oauth_verifier => oauth_verifier )
print "ACCESS_TOKEN:" + access_token.token
print "ACCESS_SECRET:" + access_token.secret

手元にコピペして、こんな感じで実行すれば、すぐにACCESS_TOKENとACCESS_SECRETが入手できます。

$ ruby -l ./twitter_oauth.rb
このURLにアクセスして出力された番号(PIN)を入力してください : 

http://twitter.com/oauth/authorize?oauth_token=aKHHE9jJS6L6tWZUIegxIxxxxx1ksRUtcyc1RQvU93Y

9111112
ACCESS_TOKEN:68914747-eFfUsIyWHRMxxxxx68254IxBPQQmJIhr4n1NJWikI
ACCESS_SECRET:0hcnelvOixxxxx9jYTDVanW9EkDvjMjxzGr3ZixMpbE

これで、サクッとbotをつくったりできますね。

5分でわかる Ruby を知らない人が Ruby の便利さを学べる記事をかいたよ


投稿日:2010年12月29日(この記事を読むのに必要な時間: 約 3分20秒

Ruby を知らない人に Ruby の話をして欲しいと言われてないけど、ブログを書きました。(*1)

難しい話は抜きにしたいんだけど、抜きにしちゃうとまったく訳わかんないから簡単に説明する。

今回は Ruby の erb ってのを使って元ネタ同様のことを実現する。

mod_ruby が動くサーバなんて自分でつくらないとないだろうけど、

その辺はどうにかしてもらう。

erubyが導入されていれば、ファイルの1行目に #!/usr/bin/eruby -McKuCutf-8 とする。(*2)

そんなこんなで、どうにかしてもらったら、 <%= と %> で囲めば動きます。

どうにかしてもらったサーバで example.html というファイルの拡張子を example.rhtml すれば良いだけです。

<%= Rubyスクリプト %>

拡張子を変えずに動かすこともできます。 .html ファイルでも Ruby を使いたい場合は .htaccess ファイルに以下のように書けば良いだけ。サーバーによってはこれを禁止してたり、少しやり方が違う場合がありますが、大体動くので、どうにかしてもらった人に言ってください。

AddType application/x-httpd-eruby .rhtml .html

フレームの代わりに Ruby を使うってのがないので、参考になるのはありません。

致し方ないので、フレームの代わりにPHPを使うを参考にしてください。

ついでに Ruby を少しでも使えるようになれば、こんなことができるという一例を紹介します。

コピーライトの西暦を自動更新

Ruby を使えばページフッタの西暦も自動更新します。

Copyright (c) 20010-<%= Time.now.strftime("%Y") %> Weble inc. All Rights Reserved.

自分の年齢を自動更新

Ruby を使えば自分の年齢を自動更新して表示できます。

<%= (Time.now.strftime("%Y%m%d").to_i - 19900605) / 10000 %>歳

ページの部品を読み込む

Ruby を使えばページ内に部品を読み込むことができます。

<%= require 'footer.html' %>

これを応用すれば以下のようにしてフッタとヘッダを同期できますよ。

<%= require 'header.html' %>
<div id="contents">
テキストテキストテキスト
</div>
<%= require 'footer.html' %>

他人のサイトの内容を読み込む

<%=
require 'open-uri'
open("http://google.com/") do |f|
  f.each do |line|
    puts line
  end
end
%>

複数のメッセージをランダムに表示

<%=
    if RUBY_VERSION < '1.9.0'
        class Array
            def choice
                at( rand( size ) )
            end
        end
    end
    message = ["メッセージA", "メッセージB", "メッセージC", "メッセージD", "メッセージE"]
    message.choice
%>

指定した月のカレンダーを出力

少し長いですが、2010年12月のカレンダーを出力します。(*3)

<%=
require 'date'

def calendar(year, month)
    jpweek = ['日', '月', '火', '水', '木', '金', '土']
    date = DateTime::new(year, month, 1)
    date = (date >> 1) - 1
    days = date.day
    one = Date::new(year,month,1)
    week = one.wday
    day = Array.new(42)

    days.times{|i|
        day[week + i] = i + 1
    }

    calendar = '<table><tr>'
    jpweek.each{ |i|
        calendar << '<th>' + i.to_s + '</th>'
    }
    calendar << '</tr>'
    key = 0
    day.each{|i|
        if key.to_i % 7 == 0 then
            calendar << '<tr>'
        end
        calendar << '<td>'

        if i != nil
            calendar << i.to_s
        else
            calendar << '&nbsp'
        end

        if key.to_i % 7 == 6
            calendar << '</tr>'
        end
        key += 1
    }
    calendar << '</table>'
    return calendar;
end
print calendar(2010, 12)

%>

以上のように結構便利なものがあります。コピーして貼りつけても大体のサーバーで動きますのでどうぞ。

本当はサーバーで動かす前に自分のパソコンでテストした方が良いんですけど、興味のある方はぜひ以下の記事をご覧ください。

できる限り、PHP っぽく Ruby を書いてみました… orz

この記事の原因になった下記の記事もよろしくお願いします。

Rubyに興味を持った方はこちらがおすすめです。ほんとにたのしめる内容です。

高橋 征義¥ 2,730

Amazonで詳細を見る by AmaGrea

追記:この記事をもっと Ruby っぽく書いていただけました。そしていろいろ間違っていたところを指摘していただけました。ありがとうございます。

5分でわかる Ruby を知らない人が Ruby の便利さを学べる記事をかいたよ を勝手に改造 – yayuguのにっき

*1: 本当は元ネタと同じ頃に前のエントリーを書いて、はてブがぶっちぎられたが悔しく、未だに人気エントリーになってないからノリで書きました。ごめんなさい。

*2: @otnxさん情報ありがとうございます。

*3: バグっていたので修正

RubyKaigi2010 3日目レポート


投稿日:2010年8月30日(この記事を読むのに必要な時間: 約 3分59秒

家に帰って、Rubyラーメン食べて、レポート書くまでがRubyKaigi2010ですよ。

RWikiを怠慢な私の10年間 – Masatoshi SEKI

10周年記念。パチパチ。

Practical Ruby Projects with MongoDBAlex Sharp

RDBMSがトランザクションを必要とするケースをMongoDBでは必要としない例を説明。

BUNYANの紹介

トランザクション処理が必至なポイントはMySQLにするなどする。

MongoDBシンプルすぎてスゲー。

Chad Fowler発見!!

セッション見るのやめて、休憩していたらChad Fowler発見した。

情熱プログラマー購入して、サインもらった。

今日から僕も情熱プログラマー。

before Rails時代のプログラマが如何にしてafter Railsの世界にたどりついたか – SHIBATA Hiroshi

after Railsはロゴがかっこいい。だいたいgithub

rubyの作法が違う

befor rails は 「もっと、俺ってはスゲー感」

Rubyistにできること

githubウォッチしてレベルアップしろ!

There is no Spoon Think Global, Act Regional – Shintaro Kakutani

角谷さんトラブルであたふた(笑

禅とオートバイ修理技術―価値の探究 (シリーズ精神とランドスケープ)

「コミュニティ」とは誰か

基調講演 – Chad Fowler

伝えきれない感動を味わう。こいつが代わりに伝えてくれる。

情熱プログラマー ソフトウェア開発者の幸せな生き方

Closing

アンケートはこちら

RubyKaigi2011は7月に東京で開催。テーマは「最後のRugyKaigi」

テーマの原因はこれ。ごもっとも。

RejectKaigi 改め TimerConference

RejectKaigiはTimerConferenceとなります。会場ではドラの代わりにブブゼラが!

1 匿名 巨大SIerでもRuby案件は3件(泣

2 @m_kawato Android Emu Eclipse closs Ruby on Android Ruboto IRB

3 あんどうやすし Google Wave Ruby Robot入門(笑)ruby-wave-robot-apiライブラリ

4 nari シャイ力 Asakusa.rb

5 須藤 るりまサーチ racknga あなたの元に大量のエラーメールが。CleareCode

6 koyohoge PHPer 日本OSS貢献者賞 7 大林一平 RRSE emacsのミニバッファ

8 加藤文彦 RDF.rb

9 永井@九工大 ThreadGroup,ThreadGroup,ThreadGroup

10 @nariki purl PostScript-like

11 ささだこういち Rubyのパフォーマンス

12 John Woodell AppEngine/Jruby Mirah Debious Mirah mirah.org

13 米沢 #TKBB

14 Ayumu AIZAWA 個人スポンサー RubyKaigi2009 780万 半分はスポンサー企業 174万

15 OOPJog @tsuyoshikawa GREE Passion つくばって本当に怖いところですねぇ〜。

16 manveru ver

17 こしば としあき @bashOC7 Excelのこしばです。 picture

18 うめざきひろき @raa0121 北海道から来た

個人的なまとめ

RubyKaigiにはじめて参加したので、まとめてみる。 Rubyのコミュニティはすばらしい。

だから、掃除のおばちゃん軍団もMatzのうちわもってるんだ。

PからはじまってPで終わるのとかとはだいぶ違う。(数年前だけど)

スタッフの皆さんありがとう!

そして、直前になってチケットが買えなかった僕に手をさしのべてくれた@iwadonありがとう!

来年はもっとRubyな人になって参加したい。なってなくても参加したい。

まずは情熱プログラマーよんで、メタプログラミングRubyしてみるよ。

明日あたりにRails3でるかな。

さらなるまとめ

動画とか:http://vimeo.com/channels/rubykaigi2010

動画とか:http://www.nicovideo.jp/mylist/20782156

RubyKaigi2010 2日目レポート


投稿日:2010年8月29日(この記事を読むのに必要な時間: 約 1分21秒

家に帰ってレポート書くまでがイベントの参加ですよ。

ってことで、2日目のレポート。(1日目は残念ながら不参加)

そもそも着いたのが12時頃。Matzの基調講演がちょうど終わったところ。

会場のネットワークは重すぎるのでIRCぐらいしかできないと思った方が良い。

サイン会

メタプログラミングRubyを購入。

Paolo Perrotta, 角 従典, Matzにサインをもらう。

超絶技巧 Ruby プログラミング – Yusuke Endoh

Esoteric Programming Languageのお話。

おもしろおかしい内容だけど、人が読める物じゃないコードの書き方をする内容。

数字だけで、Hello worldとか、アンダースコアだけで、Hello worldとか出してた。

The Neccessity and Imlimentation of Speedy Tests

testをスピーディにするって話だけど、スピーカーの外人がスピーディーすぎ(wSaikuro … 同じようなことをやっていないかソースを解析するソフト

異文化ペアプログラミング

@t_wada 主導の元、@hon53とRSpecを学ぶ。そのあと外国人とトイプログラミング(ChangeMachine)をした。翻訳駆使しながら、やったけど楽しかった。

LT

ペアプロが長引いたので、途中から参加。

MessagePack-RPCがJSONよりはえー。おもしろそう。ってぐらい。

懇親会の当日券が買えなかったー。

明日も頑張る。

ちなみに帰りは、つくばのお祭りでカオス

Related Posts Plugin for WordPress, Blogger...