<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>はるかなる熊 &#187; Ruby</title>
	<atom:link href="http://b.ruyaka.com/category/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://b.ruyaka.com</link>
	<description>ウェブは面白い。VPSとか色々試しています。</description>
	<lastBuildDate>Sun, 29 Jan 2012 11:42:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>さくらのVSPでオンラインデータ管理システムBoxroomを試してみる。</title>
		<link>http://b.ruyaka.com/2011/08/23/%e3%81%95%e3%81%8f%e3%82%89%e3%81%aevsp%e3%81%a7%e3%82%aa%e3%83%b3%e3%83%a9%e3%82%a4%e3%83%b3%e3%83%87%e3%83%bc%e3%82%bf%e7%ae%a1%e7%90%86%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0boxroom%e3%82%92%e8%a9%a6/</link>
		<comments>http://b.ruyaka.com/2011/08/23/%e3%81%95%e3%81%8f%e3%82%89%e3%81%aevsp%e3%81%a7%e3%82%aa%e3%83%b3%e3%83%a9%e3%82%a4%e3%83%b3%e3%83%87%e3%83%bc%e3%82%bf%e7%ae%a1%e7%90%86%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0boxroom%e3%82%92%e8%a9%a6/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 12:36:44 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby On Rails]]></category>
		<category><![CDATA[さくらのVPS]]></category>
		<category><![CDATA[その他]]></category>
		<category><![CDATA[オープンソース]]></category>
		<category><![CDATA[boxroom]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=1857</guid>
		<description><![CDATA[貴重なデータをサーバー上に保管 IT化が進んでいないところでは、社内の貴重なデータを普通のデスクトップパソコンに保存、管理してるケースも少なくないと思う。 貴重なデータは最低でも以下の環境に置かれていることが望ましい。 １．データセンター内のサーバー ２．ハードディスクが多重化されている。 ３．複数のサーバーでバックアップ 上記の条件が揃っているサービスとしてクラウドがあげれるが、 安心かと思われたクラウドでも昨年、Amazonクラウドサービスで 大規模の障害がおきた。 そのため、クラウドを利用する時も、3のバックアップは他ホスティングサービスを 利用したほうが一層安心かもしれない。 オンラインデータ管理システムBoxroom とある会社からデータ管理システムを頼まれたので、オープンソースで良いのがないか探していたところ、 Boxroomを発見。なかなか良さそう。しかもRailsで実装されている。 試してみたところ予想以上に使い勝手がよいのでメモ。 ちなみに、その会社、聞いたところによると大切なデータを外付けHDDで保管しているとのこと。 手軽な外付けHDDなんて、そのまま持っかれたら終わりだし。 開発環境は ServersMan@VPS CentOS 5.4 Ruby 1.9.2 Rails 3.0.9 インストール方法 Git,Ruby,Railsなどはインストールしてあるものとする。 []$ git clone https://github.com/mischa78/boxroom.git []$ cd boxroom # GemfileとGemfile.lockに書かれているバージョンが古いので変更。 # rakeファイルの変更はbundleコマンドをたたく前に必要あり。 # rake = 0.8.7 → 0.9.2 # 他にもバージョンが違うgemがあったら「gem list」を参考に変更しておく。 []$ vim Gemfile []$ vim Gemfile.lock []$ bundle [...]]]></description>
			<content:encoded><![CDATA[<h4>貴重なデータをサーバー上に保管</h4>
<p>IT化が進んでいないところでは、社内の貴重なデータを普通のデスクトップパソコンに保存、管理してるケースも少なくないと思う。<br />
貴重なデータは最低でも以下の環境に置かれていることが望ましい。<br />
１．データセンター内のサーバー<br />
２．ハードディスクが多重化されている。<br />
３．複数のサーバーでバックアップ<br />
上記の条件が揃っているサービスとしてクラウドがあげれるが、<br />
安心かと思われたクラウドでも昨年、Amazonクラウドサービスで<br />
大規模の障害がおきた。<br />
そのため、クラウドを利用する時も、3のバックアップは他ホスティングサービスを<br />
利用したほうが一層安心かもしれない。</p>
<h4>オンラインデータ管理システムBoxroom</h4>
<p>とある会社からデータ管理システムを頼まれたので、オープンソースで良いのがないか探していたところ、<br />
Boxroomを発見。なかなか良さそう。しかもRailsで実装されている。<br />
試してみたところ予想以上に使い勝手がよいのでメモ。<br />
ちなみに、その会社、聞いたところによると大切なデータを外付けHDDで保管しているとのこと。<br />
手軽な外付けHDDなんて、そのまま持っかれたら終わりだし。</p>
<p>開発環境は</p>
<blockquote><p>
<a href="http://px.a8.net/svt/ejp?a8mat=1NYTB5+2T7PMA+1QFI+101KYQ" target="_blank">ServersMan@VPS</a><img border="0" width="1" height="1" src="http://www13.a8.net/0.gifa8mat=1NYTB5+2T7PMA+1QFI+101KYQ" alt=""><br />
CentOS 5.4<br />
Ruby 1.9.2<br />
Rails 3.0.9
</p></blockquote>
<h4>インストール方法</h4>
<p>Git,Ruby,Railsなどはインストールしてあるものとする。</p>
<blockquote><p>
[]$ git clone https://github.com/mischa78/boxroom.git<br />
[]$ cd boxroom<br />
# GemfileとGemfile.lockに書かれているバージョンが古いので変更。<br />
# rakeファイルの変更はbundleコマンドをたたく前に必要あり。<br />
# rake = 0.8.7 → 0.9.2<br />
# 他にもバージョンが違うgemがあったら「gem list」を参考に変更しておく。<br />
[]$ vim Gemfile<br />
[]$ vim Gemfile.lock<br />
[]$ bundle<br />
Using rake (0.9.2)<br />
Using abstract (1.0.0)<br />
Using activesupport (3.0.9)<br />
Using builder (2.1.2)<br />
Using i18n (0.5.0)<br />
Using activemodel (3.0.9)<br />
Using erubis (2.6.6)<br />
Using rack (1.2.3)<br />
Using rack-mount (0.6.14)<br />
Using rack-test (0.5.7)<br />
Using tzinfo (0.3.29)<br />
Using actionpack (3.0.9)<br />
Using mime-types (1.16)<br />
Using polyglot (0.3.1)<br />
Using treetop (1.4.9)<br />
Using mail (2.2.19)<br />
Using actionmailer (3.0.9)<br />
Using arel (2.0.10)<br />
Using activerecord (3.0.9)<br />
Using activeresource (3.0.9)<br />
Using acts_as_tree (0.1.1)<br />
Using bundler (1.0.15)<br />
Using cocaine (0.1.0)<br />
Using dynamic_form (1.1.4)<br />
Using factory_girl (1.3.3)<br />
Using rdoc (3.8)<br />
Using thor (0.14.6)<br />
Using railties (3.0.9)<br />
Using factory_girl_rails (1.0.1)<br />
Using paperclip (2.3.16)<br />
Using rails (3.0.9)<br />
Using sqlite3 (1.3.3)<br />
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.<br />
[]$ rake db:migrate RAILS_ENV=development<br />
[]$ rake db:migrate RAILS_ENV=production
</p></blockquote>
<h4>Passengerで本番環境で動かすには、、</h4>
<p>Boxroomは本番環境ではxSendFileというApacheモジュールが必要で、Apacheの初期状態でははいってない。<br />
そのためインストールして設定する必要がある。</p>
<blockquote><p>
[]$ yum install -y mod_xsendfile<br />
[]$ vim /etc<br />
# xSendFileの設定<br />
[]$ vim /etc/httpd/conf.d/xsendfile.conf</p>
<blockquote style="background: #000000; color: #FFFFFF"><p>LoadModule      xsendfile_module        modules/mod_xsendfile.so<br />
&lt;IfModule xsendfile_module&gt;<br />
  XSendFile on<br />
  XSendFilePath /var/www/uploads<br />
&lt;/IfModule&lt;&gt;
</p></blockquote>
<p># バーチャルホストの設定はこんな感じ。<br />
[]$ vim /etc/httpd/conf.d/boxroom.conf</p>
<blockquote style="background: #000000; color: #FFFFFF"><p>
NameVirtualHost *:80<br />
&lt;VirtualHost *:80&gt;<br />
    DocumentRoot /var/www/boxroom/public/<br />
    ServerName your_boxroom_domain.com<br />
    ErrorLog /var/log/httpd/boxroom-error_log<br />
    CustomLog /var/log/httpd/boxroom-access_log common<br />
    XSendFile on<br />
    XSendFilePath /var/www/boxroom/uploads/production<br />
&lt;/VirtualHost&gt;
</p></blockquote>
</blockquote>
<h4>BoxroomでHTML5のファイル複数同時アップロードを実装する場合</h4>
<p>こんな感じ変更すれば複数同時アップロードを実装できました。</p>
<pre class="brush: ruby; title: app/controllers/files_controller.rb : 31行目; notranslate">
  def create
    if params[:user_file][&quot;attachment&quot;].class == Array
      # 複数ファイルの場合の処理
      params[:user_file][&quot;attachment&quot;].each do |f|
        @file = @target_folder.user_files.build({&quot;attachment&quot; =&gt; f})
        render :action =&gt; 'new' and return unless @file.valid?
      end

      params[:user_file][&quot;attachment&quot;].each do |f|
        @file = @target_folder.user_files.build({&quot;attachment&quot; =&gt; f})
        @file.save
      end
      redirect_to folder_url(@target_folder)

    else
      # 単数ファイルの場合の処理
      @file = @target_folder.user_files.build(params[:user_file])
      if @file.save
        redirect_to folder_url(@target_folder)
      else
        render :action =&gt; 'new'
      end
    end
  end
</pre>
<pre class="brush: xml; title: app/views/files/new.html.erb : 12行目; notranslate">
   &lt;%# f.file_field :attachment %&gt;
    &lt;input id=&quot;user_file_attachment&quot; name=&quot;user_file[attachment][]&quot; type=&quot;file&quot; multiple = &quot;multiple&quot; /&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2011/08/23/%e3%81%95%e3%81%8f%e3%82%89%e3%81%aevsp%e3%81%a7%e3%82%aa%e3%83%b3%e3%83%a9%e3%82%a4%e3%83%b3%e3%83%87%e3%83%bc%e3%82%bf%e7%ae%a1%e7%90%86%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0boxroom%e3%82%92%e8%a9%a6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>lundefined method `jpmobile&#8217; for #</title>
		<link>http://b.ruyaka.com/2011/07/16/sakura-vps-openpne-install-setting/</link>
		<comments>http://b.ruyaka.com/2011/07/16/sakura-vps-openpne-install-setting/#comments</comments>
		<pubDate>Sat, 16 Jul 2011 11:07:03 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby On Rails]]></category>
		<category><![CDATA[VPS]]></category>
		<category><![CDATA[さくらのVPS]]></category>
		<category><![CDATA[その他]]></category>
		<category><![CDATA[OpenPNE3]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=1818</guid>
		<description><![CDATA[さくらのVPSにOpenPNE&#038;Railsを立ち上げるまでのメモ。 そもそもOpenPNE3とRailsを同時にインストールする人もそんないないと思うけど・・。 自分用メモ。 MySQL, PHP, Git、Rubyをインストールする。 # remiレポジトリ追加 $ wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm $ wget http://rpms.famillecollet.com/el5.i386/remi-release-5-8.el5.remi.noarch.rpm $ sudo rpm -Uvh remi-release-5-8.el5.remi.noarch.rpm epel-release-5-4.noarch.rpm # enabled=1に変更 $ vi /etc/yum.repos.d/remi.repo # Gitのインストール $ yum install git # MySQL 5.5.4のインストール $ yum install mysql*remi $ chkconfig &#8211;level 3 mysqld on # PHP 5.3.6のインストール $ yum install php php-devel php-mbstring php-mysql php-pdo [...]]]></description>
			<content:encoded><![CDATA[<p>さくらのVPSにOpenPNE&#038;Railsを立ち上げるまでのメモ。<br />
そもそもOpenPNE3とRailsを同時にインストールする人もそんないないと思うけど・・。<br />
自分用メモ。</p>
<h5>MySQL, PHP, Git、Rubyをインストールする。</h5>
<blockquote><p>
# remiレポジトリ追加<br />
$ wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm<br />
$ wget http://rpms.famillecollet.com/el5.i386/remi-release-5-8.el5.remi.noarch.rpm<br />
$ sudo rpm -Uvh remi-release-5-8.el5.remi.noarch.rpm epel-release-5-4.noarch.rpm<br />
# enabled=1に変更<br />
$ vi /etc/yum.repos.d/remi.repo<br />
# Gitのインストール<br />
$ yum install git<br />
# MySQL 5.5.4のインストール<br />
$ yum install mysql*remi<br />
$ chkconfig &#8211;level 3 mysqld on<br />
# PHP 5.3.6のインストール<br />
$ yum install php php-devel php-mbstring php-mysql php-pdo php-mcrypt php-pear php-xml -y<br />
# readlineのインストール<br />
$ yum install readline-devel<br />
# Sqlite3のアップデート<br />
$ yum install sqlite sqlite-devel<br />
# ruby1.9のインストール<br />
$ wget ftp://core.ring.gr.jp/pub/lang/ruby/ruby-1.9.2-p290.tar.gz<br />
$ tar zxvf ruby-1.9.2-p290.tar.gz<br />
$ cd ruby-1.9.2-p290<br />
$ ./configure<br />
$ make<br />
$ make install<br />
$ gem install rails jpmobile mysql  passenger<br />
# FTPサーバーのインストール<br />
$ yum install vsftpd<br />
# vim-enhanceのインストール<br />
$ yum install vim-enhanced
</p></blockquote>
<h5>OpenPNEのダウンロード</h5>
<blockquote><p>
$ git clone git://github.com/openpne/OpenPNE3.git<br />
$ cd OpenPNE3<br />
$ git checkout OpenPNE-3.4.14.1
</p></blockquote>
<blockquote><p>
$ mysql -u root -p<br />
GRANT ALL PRIVILEGES ON {データベース名}.* TO {ユーザー名}@localhost IDENTIFIED BY &#8216;{パスワード}&#8217; WITH GRANT OPTION;<br />
CREATE DATABASE {データベース名} CHARACTER SET utf8;<br />
$ cd OpenPNE3<br />
$ cp config/ProjectConfiguration.class.php.sample config/ProjectConfiguration.class.php<br />
$ cp config/OpenPNE.yml.sample config/OpenPNE.yml<br />
$ ./symfony openpne:install
</p></blockquote>
<h5>Sqlite3.7.3にアップグレード</h5>
<p>rails3がsqlite3.6以上でしないと駄目なので・・。</p>
<blockquote><p>
$ cd /usr/local/src<br />
$ sudo wget http://www.sqlite.org/sqlite-amalgamation-3.7.3.tar.gz<br />
$ sudo tar xvzf sqlite-3.7.3.tar.gz<br />
$ cd sqlite-3.7.3<br />
$ sudo ./configure<br />
$ sudo make<br />
$ sudo make install
</p></blockquote>
<h5>Passengerのインストール</h5>
<blockquote><p>
$ yum install curl-devel httpd-devel apr-devel apr-util-devel<br />
$ passenger-install-apache2-module
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2011/07/16/sakura-vps-openpne-install-setting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RailsからWordPressの情報を取得する</title>
		<link>http://b.ruyaka.com/2011/03/01/rails%e3%81%8b%e3%82%89wordpress%e3%81%ae%e6%83%85%e5%a0%b1%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b/</link>
		<comments>http://b.ruyaka.com/2011/03/01/rails%e3%81%8b%e3%82%89wordpress%e3%81%ae%e6%83%85%e5%a0%b1%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 06:55:09 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby On Rails]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=1349</guid>
		<description><![CDATA[app/models/wp_post.rb app/models/wp_comment.rb]]></description>
			<content:encoded><![CDATA[<p>app/models/wp_post.rb</p>
<pre class="brush: ruby; title: ; notranslate">
class WpPost &lt; ActiveRecord::Base

 set_table_name &quot;wp_posts&quot;
 set_primary_key &quot;ID&quot;

 has_many :comments, :class_name =&gt; &quot;WpBlogComment&quot;, :foreign_key =&gt; &quot;comment_post_ID&quot;

 def self.find_by_permalink(year, month, day, title)
   find(:first,
        :conditions =&gt; [&quot;YEAR(post_date) = ? AND MONTH(post_date) = ? AND DAYOFMONTH(post_date) = ? AND post_name = ?&quot;, year.to_i, month.to_i, day.to_i, title])
 end
end
</pre>
<p>app/models/wp_comment.rb</p>
<pre class="brush: ruby; title: ; notranslate">
class WpComment &lt; ActiveRecord::Base

 set_table_name &quot;wp_comments&quot;
 set_primary_key &quot;comment_ID&quot;

 belongs_to :post , :class_name =&gt; &quot;WpBlogPost&quot;, :foreign_key =&gt; &quot;comment_post_ID&quot;

 validates_presence_of :comment_post_ID, :comment_author, :comment_content, :comment_author_email

 def validate_on_create
   if WpBlogPost.find(comment_post_ID).comment_status != 'open'
     errors.add_to_base('Sorry, comments are closed for this post')
   end
 end

end
</pre>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2011/03/01/rails%e3%81%8b%e3%82%89wordpress%e3%81%ae%e6%83%85%e5%a0%b1%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby Twitter Gem</title>
		<link>http://b.ruyaka.com/2011/02/13/ruby-twitter-gem/</link>
		<comments>http://b.ruyaka.com/2011/02/13/ruby-twitter-gem/#comments</comments>
		<pubDate>Sun, 13 Feb 2011 12:15:47 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Rubygems]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=1248</guid>
		<description><![CDATA[require &#8220;rubygems&#8221; require &#8220;twitter&#8221; # ユーザーの所在地を取得します puts Twitter.user(&#8220;sferik&#8221;).location # ユーザーの一番新しいツイートを取得します。 puts Twitter.user_timeline(&#8220;sferik&#8221;).first.text # IDからツイートを取得します。 puts Twitter.status(27558893223).text # ツイート検索クラスを生成します。 search = Twitter::Search.new # @justinbieberのつぶやくから&#8221;marry me&#8221;を含む最新の3件を取得します。 search.containing(&#8220;marry me&#8221;).to(&#8220;justinbieber&#8221;).result_type(&#8220;recent&#8221;).per_page(3).each do &#124;r&#124; puts &#8220;#{r.from_user}: #{r.text}&#8221; end # 検索結果をクリアします。 search.clear # rubyタグに含む日本語ツイートを取得します。 puts search.hashtag(&#8220;ruby&#8221;).language(&#8220;ja&#8221;).no_retweets.per_page(1).fetch.first.text # ↑の次のツイートを取得します。 puts search.fetch_next_page.first.text # Twitter認証設定を行います。 Twitter.configure do &#124;config&#124; config.consumer_key = YOUR_CONSUMER_KEY config.consumer_secret = YOUR_CONSUMER_SECRET config.oauth_token [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>require &#8220;rubygems&#8221;<br />
require &#8220;twitter&#8221;</p>
<p># ユーザーの所在地を取得します<br />
puts Twitter.user(&#8220;sferik&#8221;).location</p>
<p># ユーザーの一番新しいツイートを取得します。<br />
puts Twitter.user_timeline(&#8220;sferik&#8221;).first.text</p>
<p># IDからツイートを取得します。<br />
puts Twitter.status(27558893223).text</p>
<p># ツイート検索クラスを生成します。<br />
search = Twitter::Search.new</p>
<p># @justinbieberのつぶやくから&#8221;marry me&#8221;を含む最新の3件を取得します。<br />
search.containing(&#8220;marry me&#8221;).to(&#8220;justinbieber&#8221;).result_type(&#8220;recent&#8221;).per_page(3).each do |r|<br />
  puts &#8220;#{r.from_user}: #{r.text}&#8221;<br />
end</p>
<p># 検索結果をクリアします。<br />
search.clear</p>
<p># rubyタグに含む日本語ツイートを取得します。<br />
puts search.hashtag(&#8220;ruby&#8221;).language(&#8220;ja&#8221;).no_retweets.per_page(1).fetch.first.text</p>
<p># ↑の次のツイートを取得します。<br />
puts search.fetch_next_page.first.text</p>
<p># Twitter認証設定を行います。<br />
Twitter.configure do |config|<br />
  config.consumer_key = YOUR_CONSUMER_KEY<br />
  config.consumer_secret = YOUR_CONSUMER_SECRET<br />
  config.oauth_token = YOUR_OAUTH_TOKEN<br />
  config.oauth_token_secret = YOUR_OAUTH_TOKEN_SECRET<br />
end</p>
<p># ツイッタークライアントを生成します。<br />
client = Twitter::Client.new</p>
<p># ツイートします。<br />
client.update(&#8220;I just posted a status update via the Twitter Ruby Gem!&#8221;)</p>
<p># 自分の最新のつぶやくを取得します。<br />
puts client.home_timeline.first.text</p>
<p># あなたのフレンドの中から最も人気のあるユーザー名を取得します。<br />
puts client.friends.sort{|a, b| a.followers_count <=> b.followers_count}.reverse.first.name</p>
<p># あなたのフォロワーの中から最も人気のあるユーザー名を取得します。<br />
puts client.followers.sort{|a, b| a.followers_count <=> b.followers_count}.reverse.first.name
</p></blockquote>
<h4>関連記事</h4>
<p><a href="http://b.ruyaka.com/2011/01/30/30%E5%88%86%E3%81%A7%E8%AA%B0%E3%81%A7%E3%82%82%E4%BD%9C%E3%82%8C%E3%82%8Btwitter-bot%E9%96%8B%E7%99%BA%E3%83%BB%E9%81%8B%E7%94%A8%E6%89%8B%E9%A0%86-ruby-twitter-bot/">30分で誰でも作れるTwitter Bot開発・運用手順 – Ruby Twitter bot</a><br />
<a href="http://b.ruyaka.com/2011/01/17/ruby%E3%81%AEtwittergem%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%A4%E3%81%B6%E3%82%84%E3%81%84%E3%81%A6%E3%81%BF%E3%82%8B/">rubyのTwitterGemを使ってつぶやいてみる</a></p>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2011/02/13/ruby-twitter-gem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ImageMagickサムネイル画像生成を10倍速くする方法を試してみたけど・・</title>
		<link>http://b.ruyaka.com/2011/02/10/imagemagick%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4%e3%83%ab%e7%94%bb%e5%83%8f%e7%94%9f%e6%88%90%e3%82%9210%e5%80%8d%e9%80%9f%e3%81%8f%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%e3%82%92%e8%a9%a6%e3%81%97/</link>
		<comments>http://b.ruyaka.com/2011/02/10/imagemagick%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4%e3%83%ab%e7%94%bb%e5%83%8f%e7%94%9f%e6%88%90%e3%82%9210%e5%80%8d%e9%80%9f%e3%81%8f%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%e3%82%92%e8%a9%a6%e3%81%97/#comments</comments>
		<pubDate>Fri, 11 Feb 2011 01:29:35 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[ImageMagick]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=1241</guid>
		<description><![CDATA[ImageMagickが遅いので高速化する方法はないかと調べてみると下記の記事を発見 「本当は速いImageMagick: サムネイル画像生成を10倍速くする方法」 http://d.hatena.ne.jp/mirakui/20110123/1295795409 早速試してみてベンチマークを計ってみたところあまり速くならない。 ん～何かやり方間違ってるのかな・・。 【 1回目 】 $ convert -resize 280&#215;140 sample.jpg new_sample.jpg 　　0.000000 0.010000 8.190000 ( 9.745309) $ convert -define jpeg:size=280&#215;140 -resize 280&#215;140 sample.jpg new_sample.jpg 　　0.000000 0.010000 6.680000 ( 7.947682) 【 2回目 】 $ convert -resize 280&#215;140 sample.jpg new_sample.jpg 　　0.000000 0.000000 8.320000 ( 10.226756) $ convert -define jpeg:size=280&#215;140 -resize 280&#215;140 sample.jpg new_sample.jpg [...]]]></description>
			<content:encoded><![CDATA[<p>ImageMagickが遅いので高速化する方法はないかと調べてみると下記の記事を発見<br />
「本当は速いImageMagick: サムネイル画像生成を10倍速くする方法」<br />
<a target="_blank" href="http://d.hatena.ne.jp/mirakui/20110123/1295795409">http://d.hatena.ne.jp/mirakui/20110123/1295795409</a></p>
<p>早速試してみてベンチマークを計ってみたところあまり速くならない。<br />
ん～何かやり方間違ってるのかな・・。</p>
<blockquote><p>
【 1回目 】<br />
$ convert -resize 280&#215;140 sample.jpg new_sample.jpg<br />
　　0.000000   0.010000   <strong>8.190000</strong> (  9.745309)<br />
$ convert -define jpeg:size=280&#215;140 -resize 280&#215;140 sample.jpg new_sample.jpg<br />
　　0.000000   0.010000   <strong>6.680000</strong> (  7.947682)<br />
【 2回目 】<br />
$ convert -resize 280&#215;140 sample.jpg new_sample.jpg<br />
　　0.000000   0.000000   <strong>8.320000</strong> ( 10.226756)<br />
$ convert -define jpeg:size=280&#215;140 -resize 280&#215;140 sample.jpg new_sample.jpg<br />
　　0.000000   0.000000   <strong>5.060000</strong> (  6.162935)<br />
【 3回目 】<br />
$ convert -resize 280&#215;140 sample.jpg new_sample.jpg<br />
　　0.000000   0.000000   5.750000 (  6.929638)<br />
$ convert -define jpeg:size=280&#215;140 -resize 280&#215;140 sample.jpg new_sample.jpg<br />
　　0.000000   0.010000   <strong>6.840000</strong> (  8.393295)
</p></blockquote>
<p>ちなみに環境は以下の通り<br />
CentOS 5.4<br />
Ruby 1.8.7<br />
ImageMagick 6.6.7</p>
<p>使用した画像は640&#215;480のjpeg画像<br />
<a href="http://b.ruyaka.com/wp-content/uploads/2011/02/sample.jpg"><img src="http://b.ruyaka.com/wp-content/uploads/2011/02/sample-150x150.jpg" alt="" title="sample" width="150" height="150" class="alignleft size-thumbnail wp-image-1242" /></a></p>
<p>今度時間ある時もう一度試してみる。</p>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2011/02/10/imagemagick%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4%e3%83%ab%e7%94%bb%e5%83%8f%e7%94%9f%e6%88%90%e3%82%9210%e5%80%8d%e9%80%9f%e3%81%8f%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%e3%82%92%e8%a9%a6%e3%81%97/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>30分で誰でも作れるTwitter Bot開発・運用手順 &#8211; Ruby Twitter bot</title>
		<link>http://b.ruyaka.com/2011/01/30/30%e5%88%86%e3%81%a7%e8%aa%b0%e3%81%a7%e3%82%82%e4%bd%9c%e3%82%8c%e3%82%8btwitter-bot%e9%96%8b%e7%99%ba%e3%83%bb%e9%81%8b%e7%94%a8%e6%89%8b%e9%a0%86-ruby-twitter-bot/</link>
		<comments>http://b.ruyaka.com/2011/01/30/30%e5%88%86%e3%81%a7%e8%aa%b0%e3%81%a7%e3%82%82%e4%bd%9c%e3%82%8c%e3%82%8btwitter-bot%e9%96%8b%e7%99%ba%e3%83%bb%e9%81%8b%e7%94%a8%e6%89%8b%e9%a0%86-ruby-twitter-bot/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 00:20:23 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[ServersMan]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[VPS]]></category>
		<category><![CDATA[Twitter Bot]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=1098</guid>
		<description><![CDATA[はじめに たまたま仕事でTwitter Botに関連する開発依頼があったので調査・開発手順をまとめてました。 内容としては最低限必要なサーバー環境の構築とRubyを使ったTwitter Bot作成、そして定期実行処理の設定といった流れです。 サーバー構築からTwitter Botの開発までほとんどコピペでできると思うのでサーバー・プログラミングの知識がない方でも頑張ればできると思います。 Twitter Bot開発はウェブに関する各技術に少しづつ触れる事ができて、規模が小さいわりにはちょっとした達成感も得られるのでサーバーやプログラミングの勉強を始めてみたいという方には最適かもしれません。 今回はTwitter Botの開発言語にはRubyを、レンタルサーバーには仮想専用サーバー(VPS)を利用しています。 Rubyは感覚的に書くことができるので初めてスクリプト言語を覚えたいという人には良いかもしれません。 なるべくコピペで進めるように書きました。 30分で誰でも作れる書きましたが、多少馴れている人であればサーバーの申し込みから始めても30分かからないと思います。 また、今回はTwitter Bot作成までに最低限必要なもののみ記述しているので、サーバーのその他の設定に関しては省略している箇所もあるのでご了承ください。 【 対象者 】 ・Twitter Botをとにかく開発したみたい方 ・Rubyはある程度わかるんだけどサーバー周りも少し触ってみたいなと思っている方 ・Rubyもサーバーも覚えてはみたいけど何から手をつけていいかわからない方 ・自分以外つぶやいてくれるフォロワーが一人もいない方。 ・30分間暇なんですけど～って方 などなど 目次 ※1の開発環境が既に整っている人は5から初めてください。 1. 開発環境 2. 作業の前に必要な物 3. 仮想専用サーバー(VPS)をレンタルしよう 4. サーバー開発環境構築 5. Twitterアカウントを取得 6. Twitterアプリケーション登録申請 　　→　「Consumer key」と「Consumer secret」を取得します。 7. Twitter OAuth登録 　　→　「OAuth token」と「OAuth secret」を取得します。 8. Twitter Bot作成 9. Twitter Botの定期実行を設定 [...]]]></description>
			<content:encoded><![CDATA[<h4>はじめに</h4>
<p>たまたま仕事でTwitter Botに関連する開発依頼があったので調査・開発手順をまとめてました。<br />
内容としては最低限必要なサーバー環境の構築とRubyを使ったTwitter Bot作成、そして定期実行処理の設定といった流れです。</p>
<p>サーバー構築からTwitter Botの開発までほとんどコピペでできると思うのでサーバー・プログラミングの知識がない方でも頑張ればできると思います。<br />
Twitter Bot開発はウェブに関する各技術に少しづつ触れる事ができて、規模が小さいわりにはちょっとした達成感も得られるのでサーバーやプログラミングの勉強を始めてみたいという方には最適かもしれません。<br />
今回はTwitter Botの開発言語にはRubyを、レンタルサーバーには仮想専用サーバー(VPS)を利用しています。<br />
Rubyは感覚的に書くことができるので初めてスクリプト言語を覚えたいという人には良いかもしれません。</p>
<p>なるべくコピペで進めるように書きました。<br />
30分で誰でも作れる書きましたが、多少馴れている人であればサーバーの申し込みから始めても30分かからないと思います。</p>
<p>また、今回はTwitter Bot作成までに最低限必要なもののみ記述しているので、サーバーのその他の設定に関しては省略している箇所もあるのでご了承ください。</p>
<p>【 対象者 】<br />
・Twitter Botをとにかく開発したみたい方<br />
・Rubyはある程度わかるんだけどサーバー周りも少し触ってみたいなと思っている方<br />
・Rubyもサーバーも覚えてはみたいけど何から手をつけていいかわからない方<br />
・自分以外つぶやいてくれるフォロワーが一人もいない方。<br />
・30分間暇なんですけど～って方<br />
などなど</p>
<h4>目次</h4>
<p>※1の開発環境が既に整っている人は5から初めてください。</p>
<p>1. <a href="#no1">開発環境</a><br />
2. <a href="#no2">作業の前に必要な物</a><br />
3. <a href="#no3">仮想専用サーバー(VPS)をレンタルしよう</a><br />
4. <a href="#no4">サーバー開発環境構築</a><br />
5. <a href="#no5">Twitterアカウントを取得</a><br />
6. <a href="#no6">Twitterアプリケーション登録申請</a><br />
　　→　「Consumer key」と「Consumer secret」を取得します。<br />
7. <a href="#no7">Twitter OAuth登録</a><br />
　　→　「OAuth token」と「OAuth secret」を取得します。<br />
8. <a href="#no8">Twitter Bot作成</a><br />
9. <a href="#no9">Twitter Botの定期実行を設定</a></p>
<p>おまけ1. <a href="#sub1">vimエディタの基本コマンド</a></p>
<h4 id="no1">1. 開発環境</h4>
<p>今回利用した開発環境です。</p>
<p>【 開発言語 】　<br />
Ruby 1.8.7<br />
　→　まつもと ゆきひろが開発したオブジェクト指向スクリプト言語</p>
<p>【 OS 】　<br />
CentOS 5<br />
　→　ほとんどのVPSサービスで採用されているRPM系Linux</p>
<p>【 Webサーバー 】　<br />
Apache 2.2.3<br />
　→　Twitter OAuthを登録する際に使います。</p>
<p>【 その他 】<br />
RubyGem 1.3.7<br />
　→　Rubyのパッケージ管理システム。<br />
　→　これを使ってRuby用Twitterライブラリ「TwitterGem」を取得します。</p>
<p>TwitterGem 1.1.1<br />
　→　Ruby用Twitterライブラリ<br />
　→　Twitter処理が簡単に行う事できます。<br />
　→　<a href="http://twitter.rubyforge.org/">http://twitter.rubyforge.org/</a></p>
<p>Cron<br />
　→　プログラムを定期的に実行できるLinuxコマンド。<br />
　→　これを使ってTwitter Botで定期的につぶやくように設定します。</p>
<h4 id="no2">2. 作業の前に必要な物</h4>
<p>【 レンタルサーバー 】<br />
　→　Twitter Botを動かすためのサーバー。これがないと何もできません。<br />
　→　共有サーバーだとRubyのバージョンが古かったりスクリプトの定期処理ができなかったりするので自由度の高い仮想専用サーバー(VPS)を利用します。<br />
　→　今回利用したのは国内最安月額490円の<a href="http://px.a8.net/svt/ejp?a8mat=1NYTB5+2T7PMA+1QFI+101KYQ" target="_blank">ServersMan@VPS</a><img border="0" width="1" height="1" src="http://www10.a8.net/0.gif?a8mat=1NYTB5+2T7PMA+1QFI+101KYQ" alt=""><br />
　→　自前でサーバー持っている人はそれでもいいと思います。</p>
<p>【 メールアカウント 】<br />
　→　Twitterアカウント取得用に。。<br />
　→　GmailとかYahooメールとかメールができればなんでもいいです。</p>
<p>【 Telnet/SSH クライアントソフト 】<br />
　→　これを使ってサーバーにアクセスして開発します。<br />
　→　Telnet/SSH クライアントのフリーソフト<a href="http://hp.vector.co.jp/authors/VA024651/PuTTYkj.html" target="_blank">「Putty」</a>を使用します。<br />
　→　ダウンロードは<a href="http://yebisuya.dip.jp/Software/PuTTY/" target="_blank">こちら</a> ([最新版]→[インストーラー]をクリック)</p>
<h4 id="no3">3. 仮想専用サーバー(VPS)をレンタルしよう</h4>
<p>仮想専用サーバー(VPS)と書きましたが、環境が揃っていれば普段使い慣れているサーバーを使えばいいと思います。<br />
仮想専用サーバー(VPS)を選んだ理由としては以下が挙げられます。<br />
・　低価格で高い自由度である。<br />
・　最新バージョンのRubyが使える (共有サーバーの場合はかなり古かったりする)<br />
・　プログラムを定期的に実行できるcronコマンドが使える (ほとんどの共有サーバーでは使えない)<br />
・　サーバー初期化が容易である。 (途中ではまったら初期化してみる。あとはサーバーを1から勉強したい人にはオススメ)</p>
<p>ちなみに今回は「<a href="http://px.a8.net/svt/ejp?a8mat=1NYTB5+2T7PMA+1QFI+101KYQ" target="_blank">ServersMan@VPS</a><img border="0" width="1" height="1" src="http://www10.a8.net/0.gif?a8mat=1NYTB5+2T7PMA+1QFI+101KYQ" alt="">」(月額490円～)を借りてTwitter Botの開発をしていますが、他VPSでは、さくらのVPSもおすすめです。どちらでもほぼ同じ手順でBot構築できると思います。</p>
<div class="clearfix">
<div style="float:left;margin-right:10px;">
<a href="http://px.a8.net/svt/ejp?a8mat=1NYTB5+2T7PMA+1QFI+ZR2VL" target="_blank"><img border="0" width="234" height="60" alt="" src="http://www26.a8.net/svt/bgt?aid=100721633170&#038;wid=001&#038;eno=01&#038;mid=s00000008091006005000&#038;mc=1"></a><img border="0" width="1" height="1" src="http://www13.a8.net/0.gif?a8mat=1NYTB5+2T7PMA+1QFI+ZR2VL" alt="">
</div>
<div style="float:left">
<a href="http://px.a8.net/svt/ejp?a8mat=1O2ONN+805TKI+D8Y+BXIYP" target="_blank"><img border="0" width="234" height="60" alt="" src="http://www22.a8.net/svt/bgt?aid=100902227484&#038;wid=001&#038;eno=01&#038;mid=s00000001717002004000&#038;mc=1"></a><img border="0" width="1" height="1" src="http://www19.a8.net/0.gif?a8mat=1O2ONN+805TKI+D8Y+BXIYP" alt="">
</div>
</div>
<p>スペック詳細、他の仮想環境サーバー(VPS)サービスが気になる方は下記参照。<br />
<a href="http://b.ruyaka.com/2010/09/08/%e3%81%95%e3%81%8f%e3%82%89%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%8d%e3%83%83%e3%83%88vps%e3%81%a8serversmanvps%e3%82%92%e5%be%b9%e5%ba%95%e6%af%94%e8%bc%83/">→　さくらインターネット@VPSとServersMan@VPSを徹底比較</a></p>
<p>もしServersManを利用される場合は登録時にいくつか選択する箇所があると思いますので、以下のように選択してください。<br />
他は登録の指示に従って進んでいれば登録完了できると思います。</p>
<p>【 プラン 】<br />
　→　「Entry」「Standard」「Pro」とありますが、どのプランでもOKです。<br />
　→　今後のサーバー利用用途を考慮して選択すればよいと思います。</p>
<p>【 選択OS 】<br />
　→　「CentOS」を選択します。</p>
<p>【 ソフトウェアパッケージを選択 】<br />
　→　どのパッケージでも大丈夫ですが、今回は「ディスクパッケージ」を選択<br />
　※ もしPHPを他で使う予定がある場合は「ホームページパッケージ」を選択すればいいと思います。</p>
<h4 id="no4">4. サーバー開発環境構築</h4>
<p>ここではサーバー環境の構築をします。<br />
おおまかな流れとしてはPuttyを使ってサーバーにアクセスして下記3点のインストールを行います。<br />
下記(a)から(i)まで作業は一見長そうですが3分程度で終わると思います。<br />
・Ruby1.8.7<br />
・RubyGem 1.3.7<br />
・TwitterGem 1.1.1</p>
<h5>a. Puttyをダウンロード&#038;インストールします。</h5>
<p><a href="http://hp.vector.co.jp/authors/VA024651/PuTTYkj.html" target="_blank">「Putty」</a>からputty-0.60-jp20070603.zipをダウンロード。</p>
<h5>b. putty-0.60-jp20070603.zipを解凍します。</h5>
<h5>c. 解凍後にでてくるフォルダ内にある「puttyjp.exe」をダブルクリックします。</h5>
<div class="clearfix">
<a href="http://b.ruyaka.com/wp-content/uploads/2011/01/puttyアイコン.jpg"><img src="http://b.ruyaka.com/wp-content/uploads/2011/01/puttyアイコン.jpg" alt="Puttyアイコン" title="puttyアイコン" width="70" height="70" class="alignleft size-full wp-image-991" /></a>[画像その1]
</div>
<h5>d. Puttyでサーバーにアクセス</h5>
<p>まず、ServersMan@VPS登録完了後に送られてくるメールに記載されている<strong>「IPアドレス（IPv4）」「SSH用ポート番号」</strong>を確認します。<br />
Puttyを起動すると下記画像のようなウインドウが開くと思います。<br />
※Putty セキュリティ警告がでできたら「はい」を押して進みます。<br />
<strong>「IPアドレス（IPv4）」「SSH用ポート番号」</strong>をそれぞれ<strong>「ホスト名(またはIPアドレス)」「ポート(P)」</strong>に入力して「開く」ボタンを押します。</p>
<div class="clearfix">
<a href="http://b.ruyaka.com/wp-content/uploads/2011/01/Putty画面.jpg"><img src="http://b.ruyaka.com/wp-content/uploads/2011/01/Putty画面-300x241.jpg" alt="Putty画面" title="Putty画面" width="300" height="241" class="alignleft size-medium wp-image-992" /></a>[画像その2]
</div>
<h5>e. サーバーにログインします。</h5>
<p>サーバーアクセスに成功する<strong>「ユーザー名」</strong>と<strong>「パスワード」</strong>を聞いてきます。([画像その3]参照)<br />
下記のように入力してアクセスしてください。<br />
<strong>「ユーザー名」「パスワード」</strong>に関してはServersMan登録完了後に送られてくるメール内にある「rootユーザID」「rootユーザパスワード」を参照してください。</p>
<div class="clearfix">
<a href="http://b.ruyaka.com/wp-content/uploads/2011/01/RubyInstall.jpg"><img src="http://b.ruyaka.com/wp-content/uploads/2011/01/RubyInstall.jpg" alt="PuttyログインからRubyのインストールまで" title="RubyInstall" width="629" height="773" class="alignleft size-full wp-image-1012" /></a>[画像その3]
</div>
<h5>f. 必要なライブラリをインストールします。</h5>
<p>Putty上で下記のコマンドを入力します。 ([画像その3]参照)</p>
<blockquote><p>yum install -y gcc</p></blockquote>
<p><font style="color:green">※補足<br />
「yum」はCentOSのパッケージ管理用コマンドです。yumを使って様々にパッケージをインストールする事ができます。<br />
今回は「yum」コマンドを使って「gcc」というコンパイラをインストールしました。<br />
「gcc」はrubyのインストールに必要なので先にいれておきます。<br />
</font></p>
<h5>g. Rubyをダウンロード&#038;インストールします。</h5>
<p>Putty上で下記のコマンドを入力します。 ([画像その3]参照)</p>
<blockquote><p>
<em># 「sources」ディレクトリを作成します。</em><br />
$ mkdir ~/sources<br />
<em># 「sources」ディレクトリを移動します。</em><br />
$ cd ~/sources<br />
<em># Rubyソースコードをダウンロードします。</em><br />
$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p330.zip<br />
<em># ダウンロードしてきたRubyソースコードを解凍します。</em><br />
$ unzip ruby-1.8.7-p330.zip<br />
<em># 解凍先へ移動します。</em><br />
$ cd ruby-1.8.7-p330<br />
<em># コンパイルします。</em><br />
$ ./configure<br />
$ make<br />
<em># インストールします。</em><br />
$ make install<br />
<em># これでRubyのインストール完了です。</em>
</p></blockquote>
<p><font style="color:green">※補足<br />
各Linuxコマンド簡易説明<br />
「mkdir」 &#8211; フォルダを作成します。<br />
「cd」 &#8211; ディレクリトを移動します。<br />
「wget」 &#8211; ウェブ上からファイルをダウンロードします。<br />
</font></p>
<h5>h. RubyGemをダウンロード&#038;インストールします。</h5>
<p>gと同じように下記のコマンドを入力していきます。<br />
まずRubyGme本体をインストールする前にRubyで圧縮ファイルを操作するためのライブラリ「zlib」を有効にしてあげる必要があります。</p>
<blockquote><p>
<em># Rubyのzlibライブラリをインストールする</em><br />
$ yum install -y  zlib-devel<br />
<em># zlibを有効にする</em><br />
$ cd ~/sources/ruby-1.8.7-p330/ext/zlib<br />
$ ruby extconf.rb<br />
$ make<br />
$ make install<br />
<em># 一旦「sources」ディレクトリを戻ります。</em><br />
$ cd ~/sources<br />
<em># RubyGemをダウンロードします。</em><br />
$ wget http://rubyforge.org/frs/download.php/70697/rubygems-1.3.7.zip<br />
<em># ダウンロードしたRubyGemを解凍します。</em><br />
$ unzip rubygems-1.3.7.zip<br />
<em># 解凍したフォルダに移動します。</em><br />
$ cd rubygems-1.3.7<br />
<em># rubygemをインストールします。</em><br />
$ ruby setup.rb<br />
<em># インストールできてるか確認します。</em><br />
$ gem &#8211;version<br />
<em># 1.3.7と表示されていればRubyGemインストール完了です。</em>
</p></blockquote>
<h5>i. TwitterGemをインストールします。</h5>
<p>下記のコマンドを入力してます。[画像その4]のように表示されればインストール完了です。</p>
<blockquote><p>
$ gem install twitter
</p></blockquote>
<div class="clearfix">
<a href="http://b.ruyaka.com/wp-content/uploads/2011/01/TwitterGemInstall.jpg"><img src="http://b.ruyaka.com/wp-content/uploads/2011/01/TwitterGemInstall.jpg" alt="" title="TwitterGemInstall" width="629" height="617" class="alignleft size-full wp-image-1033" /></a>[画像その4]
</div>
<h4 id="no5">5. Twitterアカウントを取得</h4>
<p>下記サイトからTwitterアカウントを登録してください。<br />
※既にTwitterアカウントを持っている人は飛ばしてください。</p>
<div class="clearfix">
<a target="_blank" href="https://twitter.com/signup"><img src="http://b.ruyaka.com/wp-content/uploads/2011/01/full_logo_blue.png" alt="" title="full_logo_blue" width="200" height="37" class="alignleft size-full wp-image-1036" /></a>
</div>
<h4 id="no6">6. Twitterアプリケーション登録申請</h4>
<p>Twitterにログイン後、下記アドレスからTwitterアプリケーション登録を行ってください。<br />
<a href="http://twitter.com/apps/new">Twitterアプリケーション登録</a></p>
<div class="clearfix">
<a href="http://b.ruyaka.com/wp-content/uploads/2011/01/Twitter-アプリケーションを登録.png"><img src="http://b.ruyaka.com/wp-content/uploads/2011/01/Twitter-アプリケーションを登録-184x300.png" alt="" title="Twitter - アプリケーションを登録" width="184" height="300" class="alignleft size-medium wp-image-1037" /></a>[画像その5]
</div>
<p>各入力フォーム内容は以下の通りです。</p>
<p>[アプリケーションのアイコン] 入力しなくてもOK<br />
[アプリケーション名] あなたの任意のTwitter Bot名<br />
[アプリケーションの説明] あなたのTwitter Botの説明<br />
[アプリケーションのウェブサイトURL] あなたのサイト / Twitterの自分のページでも可<br />
[お知らせ機能] 空白でOK<br />
[所属会社/団体] 空白でOK<br />
[サイト] 空白でOK<br />
[あなたの招待状] クライアントアプリケーションを選択<br />
[コールバックURL] あなたのサイト・ブログのURL<br />
[Default Access type] Read &#038; Writeを選択<br />
[Twitterでログインする] チェックをつけます。<br />
[認証の文字]表示されているのを表示してください。</p>
<p>登録完了後、以下のように表示されます。<br />
「Consumer key」と「Consumer secret」は必要になるのでメモしておきます。</p>
<div class="clearfix">
<a href="http://b.ruyaka.com/wp-content/uploads/2011/01/Twitter-アプリケーション-Rubyツイッターボットテスト.jpg"><img src="http://b.ruyaka.com/wp-content/uploads/2011/01/Twitter-アプリケーション-Rubyツイッターボットテスト-287x300.jpg" alt="" title="Twitter---アプリケーション--Rubyツイッターボットテスト" width="287" height="300" class="alignleft size-medium wp-image-1038" /></a>
</div>
<h4 id="no7">7. Twitter OAuth登録</h4>
<p>OAuthとは外部アプリケーションの認証システムです。<br />
OAuthとはアカウントへのアクセスをより安全に行うための認証システムです。<br />
OAuth認証を行うためには先ほど取得した「Consumer key」とは別に「OAuth key」を取得する必要があるのですが、<br />
取得には少し手順を踏む必要があります。 (OAuthについて詳しく知りたい方は<a href="http://www.itmedia.co.jp/news/articles/0908/10/news015.html"　target="_blank">コチラ</a>)<br />
以下、その手順になります。</p>
<p>まず必要なライブラリをインストールします。</p>
<blockquote><p>
<em># RubyGemのOAuth用ライブラリをインストールする </em><br />
$ gem install oauth<br />
<em># opensslライブラリをインストール </em><br />
$  yum install openssl-devel<br />
<em># Rubyのopensslライブラリを有効にする </em><br />
$ cd ~/sources/ruby-1.8.7-p330/ext/openssl<br />
$ ruby extconf.rb<br />
$ make<br />
$ make install
</p></blockquote>
<p>次にOAuthキーを取得します。<br />
Putty上でirbコマンドを使用します。</p>
<blockquote><p>
$ irb<br />
irb(main):001:0> require &#8216;rubygems&#8217;<br />
<em>=> true</em><br />
irb(main):002:0> require &#8216;oauth&#8217;<br />
<em>=> true</em><br />
irb(main):003:0> ConsumerKey = &#8220;あなたの「ConsumerKey」を入れてください&#8221;<br />
<em>=> &#8220;ConsumerKey&#8221;</em><br />
irb(main):004:0> ConsumerKeySecret = &#8220;あなたの「ConsumerKeySecret」を入れてください&#8221;<br />
<em>=> &#8220;ConsumerKeySecret&#8221;</em><br />
irb(main):005:0> consumer = OAuth::Consumer.new(ConsumerKey, ConsumerKeySecret, :site => &#8220;http://twitter.com&#8221;)<br />
<em>=> #<OAuth::Consumer:0xb7b1f690 @key="ConsumerKey", @secret="ConsumerKeySecret", @options={:request_token_path=>&#8220;/oauth/request_token&#8221;, :authorize_path=>&#8221;/oauth/authorize&#8221;, :site=>&#8221;http://twitter.com&#8221;,:access_token_path=>&#8221;/oauth/access_token&#8221;,:oauth_version=>&#8221;1.0&#8243;, :scheme=>:header, :signature_method=>&#8221;HMAC-SHA1&#8243;, :proxy=>nil, :http_method=>:post}></em><br />
irb(main):006:0> request_token = consumer.get_request_token<br />
<em>=> #<OAuth::RequestToken:0xb7b15604 @token="***************************************", @params={:oauth_token_secret=>&#8220;**********************&#8221;, &#8220;oauth_callback_confirmed&#8221;=>&#8221;true&#8221;, &#8220;oauth_token_secret&#8221;=>&#8221;**************************************&#8221;, &#8220;oauth_token&#8221;=>&#8221;************************************&#8221;,:oauth_callback_confirmed=>&#8221;true&#8221;,:oauth_token=>&#8221;****************************&#8221;},@consumer=#<OAuth::Consumer:0xb7b1f690 @key="ConsumerKey", @http=#<Net::HTTP twitter.com:80 open=false>, @http_method=:post, @secret=&#8221;ConsumerKeySecret&#8221;, @options={:request_token_path=>&#8221;/oauth/request_token&#8221;, :authorize_path=>&#8221;/oauth/authorize&#8221;, :site=>&#8221;http://twitter.com&#8221;, :access_token_path=>&#8221;/oauth/access_token&#8221;,:oauth_version=>&#8221;1.0&#8243;,:scheme=>:header, :signature_method=>&#8221;HMAC-SHA1&#8243;, :proxy=>nil, :http_method=>:post}>, @secret=&#8221;**********************************************&#8221;></em><br />
irb(main):007:0> request_token.authorize_url<br />
<em>=> &#8220;http://twitter.com/oauth/authorize?oauth_token=************************************&#8221;</em><br />
<font style="color:red">↑に表示されたURLにブラウザからアクセスします。[画像その7]参照</font><br />
irb(main):008:0>
</p></blockquote>
<p>下記の画面がでたら「許可する」ボタンを押します。</p>
<div class="clearfix">
<a href="http://b.ruyaka.com/wp-content/uploads/2011/01/TwitterOAuth.jpg"><img src="http://b.ruyaka.com/wp-content/uploads/2011/01/TwitterOAuth-300x170.jpg" alt="" title="TwitterOAuth" width="300" height="170" class="alignleft size-medium wp-image-1046" /></a>[画像その7]
</div>
<p>下記のように暗証番号が表示されます。</p>
<div class="clearfix">
<a href="http://b.ruyaka.com/wp-content/uploads/2011/01/TwitterOAuth2.jpg"><img src="http://b.ruyaka.com/wp-content/uploads/2011/01/TwitterOAuth2-300x170.jpg" alt="" title="TwitterOAuth2" width="300" height="170" class="alignleft size-medium wp-image-1047" /></a>[画像その8]
</div>
<p>暗証番号がわかったらPuttyのirbに戻って以下のコマンドを入力します。<br />
「OAuthKey」と「OAuthKeySecert」を取得できます。</p>
<blockquote><p>
irb(main):013:0> access_token = request_token.get_access_token(:oauth_verifier => &#8216;あなたの暗証番号&#8217;)<br />
<em>=> #<OAuth::AccessToken:0xb7af5bb0 @token="**************************************************", @params={:oauth_token_secret=>&#8220;*************************************&#8221;,&#8221;oauth_token_secret&#8221;=>&#8221;*********************************&#8221;,:user_id=>&#8221;*****************&#8221;,:screen_name=>&#8221;***************&#8221;,&#8221;user_id&#8221;=>&#8221;*******************&#8221;,&#8221;oauth_token&#8221;=>&#8221;**********************************&#8221;,&#8221;screen_name&#8221;=>&#8221;***************&#8221;,:oauth_token=>&#8221;***************************&#8221;},@consumer=#<OAuth::Consumer:0xb7b1f690 @key="************************", @http=#<Net::HTTP twitter.com:80 open=false>, @http_method=:post, @secret=&#8221;********************************&#8221;, @options={:request_token_path=>&#8221;/oauth/request_token&#8221;, :authorize_path=>&#8221;/oauth/authorize&#8221;, :site=>&#8221;http://twitter.com&#8221;, :access_token_path=>&#8221;/oauth/access_token&#8221;,:oauth_version=>&#8221;1.0&#8243;, :scheme=>:header, :signature_method=>&#8221;HMAC-SHA1&#8243;, :proxy=>nil, :http_method=>:post}>, @secret=&#8221;*********************************&#8221;></em><br />
irb(main):014:0> puts access_token.token<br />
<em>******************************************</em> <font style="color:red">← あなたのOAuthTokenが表示されます。</font><br />
<em>=> nil</em><br />
irb(main):015:0> puts access_token.secret<br />
<em>******************************************</em> <font style="color:red">← あなたのOAuthSecretが表示されます。</font><br />
<em>=> nil</em>
</p></blockquote>
<p>これで「ConsumerKey」「ConsumerKey」「OAuthToken」「OAuthSecret」の4つのキーが揃ったと思います。<br />
次はようやくTwitter Botの作成になります。</p>
<h4 id="no8">8. Twitter Bot作成</h4>
<p>Twitter Botのrubyスクリプトを作成します。<br />
作成するといってもこのサイトに置いてある雛型をダウンロードして少し書きかえるだけです。<br />
下記コマンドを順に実行してみてください。</p>
<blockquote><p>
<em># ルートディレクトリに戻ります。</em><br />
$ cd ~/<br />
<em># Twitter Botの雛型をダウンロードします。</em><br />
$ wget http://b.ruyaka.com/lab/ruby_gem_twitter/tweet.rb<br />
<em># ダウンロードしたtweet.rbの一部を置換コマンドsedを使って書き換えます。</em><br />
<em># 下記の「あなたの・・・・」の部分を置き換えてから実行してください。</em><br />
$ sed -i -e &quot;s/YOUR_CONSUMER_KEY/あなたのCONSUMER_KEY/g&quot; tweet.rb<br />
$ sed -i -e &quot;s/YOUR_CONSUMER_SECRET/あなたのCONSUMER_SECRET/g&quot; tweet.rb<br />
$ sed -i -e &quot;s/YOUR_OAUTH_TOEKN/あなたのOAUTH_TOEKN/g&quot; tweet.rb<br />
$ sed -i -e &quot;s/YOUR_TOEKN_SECRET/あなたのTOEKN_SECRET/g&quot; tweet.rb<br />
<em># catコマンドでファイルの中身を確認します。</em><br />
$ cat tweet.rb
</p></blockquote>
<p><font style="color:green"><br />
※補足 sedコマンドについて<br />
sedコマンドはファイル内の文字列を置換することができるコマンドになります。<br />
コマンドのフォーマットは以下のようになります。<br />
sed -i -e &#8220;s/書き変える文字列/書き変えたい文字列/&#8221; ファイル名<br />
つまり先ほどの「sed -i -e &#8220;s/YOUR_CONSUMER_KEY/あなたのCONSUMER_KEY/&#8221; tweet.rb」の場合は、<br />
tweet.rbファイル内の「YOUR_CONSUMER_KEY」という文字列を「あなたのCONSUMER_KEY」に置換するという事になります。<br />
</font></p>
<p>ちなみにダウンロードしたtweet.rbの中身は以下のようになります。(FTPなど使ってアップロードしてもOKです)</p>
<pre class="brush: ruby; title: ; notranslate">
require 'rubygems'
require 'twitter'

CONSUMER_KEY = &quot;YOUR_CONSUMER_KEY&quot;
CONSUMER_SECRET = &quot;YOUR_CONSUMER_SECRET&quot;
OAUTH_TOEKN = &quot;YOUR_OAUTH_TOEKN&quot;
OAUTH_TOEKN_SECRET = &quot;YOUR_OAUTH_TOEKN_SECRET&quot;

Twitter.configure do |config|
  config.consumer_key       = CONSUMER_KEY
  config.consumer_secret    = CONSUMER_SECRET
  config.oauth_token        = OAUTH_TOEKN
  config.oauth_token_secret = OAUTH_TOEKN_SECRET
end

Twitter.update(&quot;TwitterGemテストなう&quot;)
</pre>
<p>tweet.rbを実行してみましょう。<br />
下記コマンドを実行後にツイッターのあなたのページに「TwitterGemテストなう」とつぶやかれていれば成功です。</p>
<blockquote><p>
<em># tweet.rbを実行</em><br />
$ruby tweet.rb
</p></blockquote>
<h4 id="no9">9. Twitter Botの定期実行を設定</h4>
<p>定期的につぶやくように設定しましょう。<br />
定期的に処理を実行させるためには「crontab」コマンドを使用します。<br />
ただ、一点注意点としてcrontabを編集する際にvimというエディタを使用することなるのですが、<br />
このvimエディタはだいぶ癖があり、ある程度コマンドを覚える必要があります。<br />
最低限のvimコマンドを<a href="#sub1">あまけ1</a>に記しました。vimがわからない人は参考にしてみてください。</p>
<blockquote><p>
<em># crontabの中身を編集します。</em><br />
$ crontab -e<br />
<em># 下記一行をコピペします。</em></p>
<blockquote><p>10 10 * * * /usr/local/bin/ruby /root/tweet.rb　<em># 毎日10時10分になったらtweet.rbを実行する</em></p></blockquote>
<p><em># crontabの中身を参照します。コピペした内容が表示されていればOKです。</em><br />
$ crontab -l<br />
<em>10 10 * * * /usr/local/bin/ruby /root/tweet.rb</em>
</p></blockquote>
<p>これで毎日10時10分につぶやかれていれば成功です。</p>
<h4 id="sub1">おまけ1. vimコマンド一覧</h4>
<p>vimが初めての方が一番手こずるのがおそらく「コマンドモード」と「入力モード」の存在でしょうか。<br />
vimの場合は例えば、コピー、ペースト、ファイルの保存、ファイルを閉じるなどは全て「コマンドモード」にしてから行います。<br />
文字列を入力する場合は「入力モードに」変更してあげる必要があります。<br />
vimにはかなりの数のコマンドがありますが、今回最低限必要になるであろうコマンドだけ記載します。</p>
<p>【 モードの切り替え用コマンド 】</p>
<table class="list">
<tr>
<th>ESC(エスケープキー)</th>
<td>コマンドモードに変更します。</td>
</tr>
<tr>
<th>a (「a]キー)</th>
<td>入力モードに変更します。</td>
</tr>
</table>
<p>【 ファイルの操作用コマンド 】<br />
※必ずESCキーを押してコマンドモードにしてから入力してください。</p>
<table class="list">
<tr>
<th>:w　(コロン + 「w」キー)</th>
<td>ファイルを保存します。</td>
</tr>
<tr>
<th>:q (コロン + 「q」キー)</th>
<td>ファイルの編集を終了します。</td>
</tr>
<tr>
<th>u (「u」キー)</th>
<td>一つ前の状態に戻します。</td>
</tr>
<tr>
<th>Ctrl + r (コントロールキー + 「r」キー)</th>
<td>一つ前の状態に戻します。</td>
</tr>
</table>
<p>「9. Twitter Botの定期実行を設定」のcrontabを編集する際にvimを使う事になると思いますが、<br />
その場合は大まかなコマンドの流れとしては以下のようになります。</p>
<p>「crontab -e」 実行後。<br />
1. マウスを使って「10 10 * * * /usr/local/bin/ruby /root/tweet.rb」をコピーします。<br />
2. 「a」キーを押して入力モードに変更します。<br />
3. マウス右クリックを押して1でコピーした部分をペーストします。<br />
4. ESCキーでコマンドモードに変更します。<br />
5. 「:w」を押してファイルを保存します。<br />
6. 「:q」を押してファイルの編集を終了します。<br />
少し回りくどく感じるかもしれませんがこのような流れになります。</p>
<h4>課題</h4>
<p>シンプルなTwitter botの作成ができたと思います。<br />
ただ、今回は最低限必要な基本的な部分のみなので、もっと本格的なTwitter botを作成するにはつぶやく内容やタイミングを工夫してあげる必要があります。<br />
このTwitter bot作成の流れで間違い等ございましたらご指摘いただけると嬉しいです。</p>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2011/01/30/30%e5%88%86%e3%81%a7%e8%aa%b0%e3%81%a7%e3%82%82%e4%bd%9c%e3%82%8c%e3%82%8btwitter-bot%e9%96%8b%e7%99%ba%e3%83%bb%e9%81%8b%e7%94%a8%e6%89%8b%e9%a0%86-ruby-twitter-bot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rubyのTwitterGemを使ってつぶやいてみる</title>
		<link>http://b.ruyaka.com/2011/01/17/ruby%e3%81%aetwittergem%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%a4%e3%81%b6%e3%82%84%e3%81%84%e3%81%a6%e3%81%bf%e3%82%8b/</link>
		<comments>http://b.ruyaka.com/2011/01/17/ruby%e3%81%aetwittergem%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%a4%e3%81%b6%e3%82%84%e3%81%84%e3%81%a6%e3%81%bf%e3%82%8b/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 06:55:14 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Twitter Bot]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=959</guid>
		<description><![CDATA[Twitter Bot作成のより詳しい内容については下記コンテンツをどうぞ 　→　30分で誰でも作れるTwitter Bot開発・運用手順 – Ruby Twitter bot rubygemにはTwitter利用できるパッケージが入っています。 今回しようしたTwitterGemのバージョンはTwitter1.1.1になります。 大まかな手順としては以下の通りです。 ① Twitterアカウントを取ります。 ② Twitterアプリケーション登録申請を行います。 　登録完了後にもらえる「Consumer Key」と「Consumer Secret」が必要になります。 ③ OAuth登録します。 　登録後にもらえる「OAuth Token」と「OAuth Token Secret」が必要になります。 ④ TweetGemでつぶやいてみる。 ① Twitterアカウントを取ります。 これは簡単ですね。下記アドレスからアカウントを取得します。 https://twitter.com/signup ② Twitterアプリケーション登録申請を行います。 下記ページから登録申請を行います。 登録完了後にもらえる「Consumer Key」と「Consumer Secret」はかならずメモしておきましょう。 http://twitter.com/apps/new ③ OAuth登録します。 OAuthに関しては下記サイト参照。 http://route477.net/w/?RubyTwitterJa 「OAuth Token」と「OAuth Token Secret」を取得できたら④へ ④ TweetGemでつぶやいてみる。 ②～③の手順で下記4つが手に入ったらいよいよつぶやいてみます。 「Consumer Key」 「Consumer Secret」 「OAuth Token」 「OAuth [...]]]></description>
			<content:encoded><![CDATA[<div style="border: 1px solid #666666; padding: 12px; background: #FFFFFF; width: 500px;">
Twitter Bot作成のより詳しい内容については下記コンテンツをどうぞ<br />
　<a target="_blank" href="http://b.ruyaka.com/2011/01/30/30%E5%88%86%E3%81%A7%E8%AA%B0%E3%81%A7%E3%82%82%E4%BD%9C%E3%82%8C%E3%82%8Btwitter-bot%E9%96%8B%E7%99%BA%E3%83%BB%E9%81%8B%E7%94%A8%E6%89%8B%E9%A0%86-ruby-twitter-bot/">→　30分で誰でも作れるTwitter Bot開発・運用手順 – Ruby Twitter bot</a>
</div>
<p>rubygemにはTwitter利用できるパッケージが入っています。<br />
今回しようしたTwitterGemのバージョンはTwitter1.1.1になります。</p>
<p>大まかな手順としては以下の通りです。<br />
<strong>① Twitterアカウントを取ります。</strong><br />
<strong>② Twitterアプリケーション登録申請を行います。</strong><br />
　登録完了後にもらえる<font style="color:red">「Consumer Key」</font>と<font style="color:red">「Consumer Secret」</font>が必要になります。<br />
<strong>③ OAuth登録します。 </strong><br />
　登録後にもらえる<font style="color:red">「OAuth Token」</font>と<font style="color:red">「OAuth Token Secret」</font>が必要になります。<br />
<strong>④ TweetGemでつぶやいてみる。</strong></p>
<h4>① Twitterアカウントを取ります。</h4>
<p>これは簡単ですね。下記アドレスからアカウントを取得します。<br />
<a href="https://twitter.com/signup">https://twitter.com/signup</a></p>
<h4>② Twitterアプリケーション登録申請を行います。</h4>
<p>下記ページから登録申請を行います。<br />
登録完了後にもらえる「Consumer Key」と「Consumer Secret」はかならずメモしておきましょう。<br />
<a href="http://twitter.com/apps/new">http://twitter.com/apps/new</a></p>
<h4>③ OAuth登録します。</h4>
<p>OAuthに関しては下記サイト参照。<br />
<a href="http://route477.net/w/?RubyTwitterJa">http://route477.net/w/?RubyTwitterJa</a><br />
「OAuth Token」と「OAuth Token Secret」を取得できたら④へ</p>
<h4>④ TweetGemでつぶやいてみる。</h4>
<p>②～③の手順で下記4つが手に入ったらいよいよつぶやいてみます。<br />
「Consumer Key」<br />
「Consumer Secret」<br />
「OAuth Token」<br />
「OAuth Token Secret」</p>
<p>まずはTwitterGemをインストールします。<br />
「gem install twitter」とコマンドをひとつ打てばOKです。</p>
<blockquote><p>
[]# <strong>gem install twitter</strong><br />
********************************************************************************</p>
<p>  Follow @gem on Twitter for announcements, updates, and news.</p>
<p>https://twitter.com/gem</p>
<p>  Join the mailing list!</p>
<p>https://groups.google.com/group/ruby-twitter-gem</p>
<p>  Add your project or organization to the apps wiki!</p>
<p>https://github.com/jnunemaker/twitter/wiki/apps</p>
<p>********************************************************************************<br />
Successfully installed hashie-0.4.0<br />
Successfully installed addressable-2.2.2<br />
Successfully installed multipart-post-1.1.0<br />
Successfully installed faraday-0.5.4<br />
Successfully installed faraday_middleware-0.3.1<br />
Successfully installed multi_json-0.0.5<br />
Successfully installed multi_xml-0.2.0<br />
Successfully installed simple_oauth-0.1.3<br />
Successfully installed twitter-1.1.1<br />
9 gems installed<br />
Installing ri documentation for hashie-0.4.0&#8230;<br />
Installing ri documentation for addressable-2.2.2&#8230;<br />
Installing ri documentation for multipart-post-1.1.0&#8230;<br />
Installing ri documentation for faraday-0.5.4&#8230;<br />
Installing ri documentation for faraday_middleware-0.3.1&#8230;<br />
Installing ri documentation for multi_json-0.0.5&#8230;<br />
Installing ri documentation for multi_xml-0.2.0&#8230;<br />
Installing ri documentation for simple_oauth-0.1.3&#8230;<br />
Installing ri documentation for twitter-1.1.1&#8230;<br />
Installing RDoc documentation for hashie-0.4.0&#8230;<br />
Installing RDoc documentation for addressable-2.2.2&#8230;<br />
Installing RDoc documentation for multipart-post-1.1.0&#8230;<br />
Installing RDoc documentation for faraday-0.5.4&#8230;<br />
Installing RDoc documentation for faraday_middleware-0.3.1&#8230;<br />
Installing RDoc documentation for multi_json-0.0.5&#8230;<br />
Installing RDoc documentation for multi_xml-0.2.0&#8230;<br />
Installing RDoc documentation for simple_oauth-0.1.3&#8230;<br />
Installing RDoc documentation for twitter-1.1.1&#8230;
</p></blockquote>
<p>TwitterGemのインストールが終わったらコードを書いてみます。<br />
コードはとてもシンプルです。<br />
tweet.rb</p>
<pre class="brush: ruby; title: ; notranslate">
require 'rubygems'
require 'twitter'

CONSUMER_KEY = &quot;あなたのCONSUMER_KEY&quot;
CONSUMER_SECRET = &quot;あなたのCONSUMER_SECRET&quot;
OAUTH_TOEKN = &quot;あなたのOAUTH_TOEKN&quot;
OAUTH_TOEKN_SECRET = &quot;あなたのOAUTH_TOEKN_SECRET&quot;

Twitter.configure do |config|
  config.consumer_key       = CONSUMER_KEY
  config.consumer_secret    = CONSUMER_SECRET
  config.oauth_token        = OAUTH_TOEKN
  config.oauth_token_secret = OAUTH_TOEKN_SECRET
end

Twitter.update(&quot;TwitterGemテストなう&quot;)
</pre>
<p>下記のコマンドを打ってみてつぶやかれていれば成功です。</p>
<blockquote><p>ruby tweet.rb</p></blockquote>
<p><script type="text/javascript"><!--
google_ad_client = "ca-pub-0674525975520699";
/* WinePediaArticleBottom2 */
google_ad_slot = "2924402652";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h4>参考サイト</h4>
<p><a target="_blank" href="http://hueniverse.com/oauth/">http://hueniverse.com/oauth/</a><br />
<a target="_blank" href="http://apiwiki.twitter.com/w/page/22554643/Authentication">http://apiwiki.twitter.com/w/page/22554643/Authentication</a><br />
<a  target="_blank" href="http://oauth.rubyforge.org/">http://oauth.rubyforge.org/</a></p>
<p>　</p>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2011/01/17/ruby%e3%81%aetwittergem%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%a4%e3%81%b6%e3%82%84%e3%81%84%e3%81%a6%e3%81%bf%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Ruby1.9 on Rails] マルチバイト文字列でエラー : incompatible character encodings: UTF-8 and ASCII-8BIT</title>
		<link>http://b.ruyaka.com/2009/07/07/ruby19-%e3%83%9e%e3%83%ab%e3%83%81%e3%83%90%e3%82%a4%e3%83%88%e6%96%87%e5%ad%97%e5%88%97%e3%81%a7%e3%82%a8%e3%83%a9%e3%83%bc-incompatible-character-encodings-utf-8-and-ascii-8bit/</link>
		<comments>http://b.ruyaka.com/2009/07/07/ruby19-%e3%83%9e%e3%83%ab%e3%83%81%e3%83%90%e3%82%a4%e3%83%88%e6%96%87%e5%ad%97%e5%88%97%e3%81%a7%e3%82%a8%e3%83%a9%e3%83%bc-incompatible-character-encodings-utf-8-and-ascii-8bit/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 11:30:27 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby On Rails]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[マルチバイト文字列]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=293</guid>
		<description><![CDATA[前回の続き http://b.ruyaka.com/2009/07/06/ruby19-gem-install-mysql-ではまる/ なんかgem install mysqlでMySQL/Rubyはインスートルできたんですが、 どうやらMySQL/Rubyがruby1.9の「M17N」に対応していない模様。 おかげて、データベースから取り出した文字列は全て「ASCII-8BIT」になってしまいます。 マルチバイト文字列を入れるとASCII-8BITとUTF-8がぶつかりエラーが発生します。 「incompatible character encodings: UTF-8 and ASCII-8BIT」 ほんと困りました。 調べてみたところ解決方法は2通り発見。 ①　MySQL/Rubyではなく、M17Nに対応しているRuby/MySQLを入れる (ややこしい) ②　Rails上で「force_encoding(&#8220;UTF-8&#8243;)」で無理やり「UTF-8」に変更する。 ①の「Ruby/MySQL」はtmtmsさんが作成してくれてました。 RubyコンパイルされているRuby/MySQL 3.0.0がでています。 ただ、アルファ版というのと、いくつか不安な部分もあったので今回は②番で対応することに。 ②の変更点 ちょっと強引ですが、read_attributesの部分で文字列がきたら強制的に「UTF-8」になるように変更。 一応これでエラーはでなくなりました。 def define_read_method(symbol, attr_name, column) cast_code = column.type_cast_code('v') if column - access_code = cast_code ? "(v=@attributes['#{attr_name}']) &#038;&#038; #{cast_code}" : "@attributes['#{attr_name}']) + access_code = cast_code ? "(v=@attributes['#{attr_name}']) &#038;&#038; #{cast_code}" : "(@attributes['#{attr_name}'].class [...]]]></description>
			<content:encoded><![CDATA[<p>前回の続き<br />
<a href="http://b.ruyaka.com/2009/07/06/ruby19-gem-install-mysql-ではまる/">http://b.ruyaka.com/2009/07/06/ruby19-gem-install-mysql-ではまる/</a></p>
<p>なんかgem install mysqlでMySQL/Rubyはインスートルできたんですが、<br />
どうやらMySQL/Rubyがruby1.9の「M17N」に対応していない模様。<br />
おかげて、データベースから取り出した文字列は全て「ASCII-8BIT」になってしまいます。</p>
<p>マルチバイト文字列を入れるとASCII-8BITとUTF-8がぶつかりエラーが発生します。<br />
「incompatible character encodings: UTF-8 and ASCII-8BIT」</p>
<p>ほんと困りました。</p>
<p>調べてみたところ解決方法は2通り発見。</p>
<p><strong>①　MySQL/Rubyではなく、M17Nに対応しているRuby/MySQLを入れる (ややこしい)<br />
②　Rails上で「force_encoding(&#8220;UTF-8&#8243;)」で無理やり「UTF-8」に変更する。</strong></p>
<p>①の「Ruby/MySQL」は<a href="http://d.hatena.ne.jp/tmtms/">tmtms</a>さんが作成してくれてました。<br />
RubyコンパイルされているRuby/MySQL 3.0.0がでています。<br />
ただ、アルファ版というのと、いくつか不安な部分もあったので今回は②番で対応することに。</p>
<p>②の変更点<br />
ちょっと強引ですが、read_attributesの部分で文字列がきたら強制的に「UTF-8」になるように変更。<br />
一応これでエラーはでなくなりました。</p>
<pre><textarea class="html" cols="60" rows="5" name="code">
        def define_read_method(symbol, attr_name, column)
          cast_code = column.type_cast_code('v') if column
-          access_code = cast_code ? "(v=@attributes['#{attr_name}']) &#038;&#038; #{cast_code}" : "@attributes['#{attr_name}'])
+          access_code = cast_code ? "(v=@attributes['#{attr_name}']) &#038;&#038; #{cast_code}" : "(@attributes['#{attr_name}'].class == String) ? @attributes['#{attr_name}'].force_encoding('UTF-8') : @attributes['#{attr_name}']"

          unless attr_name.to_s == self.primary_key.to_s
            access_code = access_code.insert(0, "missing_attribute('#{attr_name}', caller) unless @attributes.has_key?('#{attr_name}'); ")
          end

          if cache_attribute?(attr_name)
            access_code = "@attributes_cache['#{attr_name}'] ||= (#{access_code})"
          end
          evaluate_attribute_method attr_name, "def #{symbol}; #{access_code}; end"
        end
</textarea></pre>
<pre><textarea class="html" cols="60" rows="5" name="code">
vendor/rails/activerecord/lib/active_record/attribute_methods.rb :273行
    def read_attribute(attr_name)
      attr_name = attr_name.to_s
      if !(value = @attributes[attr_name]).nil?
        if column = column_for_attribute(attr_name)
          if unserializable_attribute?(attr_name, column)
            unserialize_attribute(attr_name)
          else
-            column.type_cast(value)
+           (column.type_cast(value).class == String) ? column.type_cast(value).force_encoding("UTF-8") : column.type_cast(value)
          end
        else
</textarea></pre>
<p>上記はActiveRecord周りの文字コードの対応ですが、<br />
テンプレートのほうも対応するようにしてあげる必要があるようです。</p>
<p>vendor/rails/actionpack/lib/action_view/renderable.rb: 69行目</p>
<pre><textarea class="html" cols="60" rows="5" name="code">

      def compile!(render_symbol, local_assigns)
        locals_code = local_assigns.keys.map { |key| "#{key} = local_assigns[:#{key}];" }.join

        source = <<-end_src
+         # encoding: utf-8
          def #{render_symbol}(local_assigns)
            old_output_buffer = output_buffer;#{locals_code};#{compiled_source}
          ensure
            self.output_buffer = old_output_buffer
          end
        end_src
</textarea></pre>
<p>これでなんとか対応完了。<br />
かなり強引ですが、他もっと簡単なやり方があると教えていただけると助かります。</p>
<p>以下、参考サイト<br />
<a href="http://groups.google.co.jp/group/rubyonrails-talk/browse_thread/thread/45cf95921c8fe21f">http://groups.google.co.jp/group/rubyonrails-talk/browse_thread/thread/45cf95921c8fe21f</a><br />
<a href="http://74.125.155.132/search?q=cache:LMULoqmE-SMJ:d.hatena.ne.jp/tmtms/20090201/1233499176+%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%8B%E3%82%89%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%97%E3%81%9F%E6%96%87%E5%AD%97%E5%88%97%E3%81%AF%E3%80%81%E5%85%A8%E9%83%A8+ASCII-8BIT+%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99&#038;cd=2&#038;hl=ja&#038;ct=clnk&#038;gl=jp&#038;lr=lang_ja&#038;client=firefox-a">http://74.125.155.132/search?q=cache:LMULoqmE-SMJ:d.hatena.ne.jp/tmtms/20090201/1233499176+%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%8B%E3%82%89%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%97%E3%81%9F%E6%96%87%E5%AD%97%E5%88%97%E3%81%AF%E3%80%81%E5%85%A8%E9%83%A8+ASCII-8BIT+%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99&#038;cd=2&#038;hl=ja&#038;ct=clnk&#038;gl=jp&#038;lr=lang_ja&#038;client=firefox-a</a><br />
<a href="http://e-words.jp/w/M17N.html">http://e-words.jp/w/M17N.html</a><br />
<a href="http://d.hatena.ne.jp/tmtms/20090322/1237719050">http://d.hatena.ne.jp/tmtms/20090322/1237719050</a><br />
<a href="http://d.hatena.ne.jp/xibbar/20090126/1232946944">http://d.hatena.ne.jp/xibbar/20090126/1232946944</a><br />
<a href="http://qwik.jp/asakusarb/56.html">http://qwik.jp/asakusarb/56.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2009/07/07/ruby19-%e3%83%9e%e3%83%ab%e3%83%81%e3%83%90%e3%82%a4%e3%83%88%e6%96%87%e5%ad%97%e5%88%97%e3%81%a7%e3%82%a8%e3%83%a9%e3%83%bc-incompatible-character-encodings-utf-8-and-ascii-8bit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Ruby1.9] gem install mysql ではまる</title>
		<link>http://b.ruyaka.com/2009/07/06/ruby19-gem-install-mysql-%e3%81%a7%e3%81%af%e3%81%be%e3%82%8b/</link>
		<comments>http://b.ruyaka.com/2009/07/06/ruby19-gem-install-mysql-%e3%81%a7%e3%81%af%e3%81%be%e3%82%8b/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 03:26:28 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[データベース]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[RubyGem]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=285</guid>
		<description><![CDATA[そろそろ各ライブラリも1.9に対応してきたので。rails開発もruby1.8から1.9に移行。 今までのテストでも処理によるけど確実に2倍以上は早くなっている。 このまま1.8だとなにかと不安です。 ruby1.9・rubygems・railsなどのインストールは順調に進んだが、mysqlのインストールではまる。 結論から言うと、 　　「gemでインストールされるmysqlのバージョンが古いまま」 なのが原因でした。 なので1.9の場合は、直接本家にインストールしてあげる必要があるそうです。 エラー内容 gem install mysql Building native extensions. This could take a while... ERROR: Error installing mysql: ERROR: Failed to build gem native extension. /vol1/bin/ruby extconf.rb install mysql checking for mysql_query() in -lmysqlclient... no checking for main() in -lm... yes checking for mysql_query() in -lmysqlclient... no checking for [...]]]></description>
			<content:encoded><![CDATA[<p>そろそろ各ライブラリも1.9に対応してきたので。rails開発もruby1.8から1.9に移行。<br />
今までのテストでも処理によるけど確実に2倍以上は早くなっている。<br />
このまま1.8だとなにかと不安です。<br />
ruby1.9・rubygems・railsなどのインストールは順調に進んだが、mysqlのインストールではまる。</p>
<p><strong><br />
結論から言うと、<br />
　　「gemでインストールされるmysqlのバージョンが古いまま」<br />
なのが原因でした。</strong></p>
<p>なので1.9の場合は、直接本家にインストールしてあげる必要があるそうです。</p>
<p>エラー内容</p>
<pre><textarea class="html" cols="60" rows="5" name="code">
gem install mysql
Building native extensions.  This could take a while...

ERROR:  Error installing mysql:
        ERROR: Failed to build gem native extension.

/vol1/bin/ruby extconf.rb install mysql
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... yes
checking for mysql_query() in -lmysqlclient... no
</textarea></pre>
<p>以下、実行すれば解決。</p>
<pre><textarea class="html" cols="60" rows="5" name="code">
wget http://tmtm.org/downloads/mysql/ruby/mysql-ruby-2.8.1.tar.gz
tar xzvf mysql-ruby-2.8.1.tar.gz
cd mysql-ruby-2.8.1/
ruby19 extconf.rb --with-mysql-config
make
make install
</textarea></pre>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2009/07/06/ruby19-gem-install-mysql-%e3%81%a7%e3%81%af%e3%81%be%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Rails] ruby 1.9.1 VS ruby 1.8.7</title>
		<link>http://b.ruyaka.com/2009/06/14/rails-ruby-191-vs-ruby-187/</link>
		<comments>http://b.ruyaka.com/2009/06/14/rails-ruby-191-vs-ruby-187/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 06:03:36 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby On Rails]]></category>
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=258</guid>
		<description><![CDATA[Railsでruby1.9と1.8って実際にどれくらいパフォーマンスに差があるんだろうか。 ということで簡単なテストを試してみる。 単純にrubyの1.9と1.8でScaffoldで生成した一覧ページを測定してみる。 一覧に登録した件数は5件です。 Ruby1.8 ab -n 100 -c 10 http://ruby18.test.com:3000/articles This is ApacheBench, Version 2.0.40-dev apache-2.0 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright 2006 The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.1.153 (be patient).....done Server Software: Server Hostname: 192.168.1.153 Server Port: 3000 Document Path: /articles Document Length: 1322 bytes Concurrency Level: 10 Time [...]]]></description>
			<content:encoded><![CDATA[<p>Railsでruby1.9と1.8って実際にどれくらいパフォーマンスに差があるんだろうか。<br />
ということで簡単なテストを試してみる。</p>
<p>単純にrubyの1.9と1.8でScaffoldで生成した一覧ページを測定してみる。<br />
一覧に登録した件数は5件です。</p>
<p><strong>Ruby1.8</strong></p>
<pre><textarea class="ruby" cols="60" rows="5" name="code">
ab -n 100 -c 10 http://ruby18.test.com:3000/articles
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.1.153 (be patient).....done

Server Software:
Server Hostname:        192.168.1.153
Server Port:            3000

Document Path:          /articles
Document Length:        1322 bytes

Concurrency Level:      10
Time taken for tests:   4.586803 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      188400 bytes
HTML transferred:       132200 bytes
Requests per second:    21.80 [#/sec] (mean)
Time per request:       458.680 [ms] (mean)
Time per request:       45.868 [ms] (mean, across all concurrent requests)
Transfer rate:          39.90 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:   201  453  69.9    459     708
Waiting:      201  432  67.5    437     662
Total:        201  453  69.9    459     708

Percentage of the requests served within a certain time (ms)
  50%    459
  66%    464
  75%    468
  80%    473
  90%    479
  95%    598
  98%    669
  99%    708
 100%    708 (longest request)
</textarea></pre>
<p><strong>Ruby1.9</strong></p>
<pre><textarea class="ruby" cols="60" rows="5" name="code">
aab -n 100 -c 10 http://ruby19.test.com:3000/articles
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.1.156 (be patient).....done

Server Software:        WEBrick/1.3.1
Server Hostname:        192.168.1.156
Server Port:            3000

Document Path:          /articles
Document Length:        1322 bytes

Concurrency Level:      10
Time taken for tests:   3.279068 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      196507 bytes
HTML transferred:       132200 bytes
Requests per second:    30.50 [#/sec] (mean)
Time per request:       327.907 [ms] (mean)
Time per request:       32.791 [ms] (mean, across all concurrent requests)
Transfer rate:          58.25 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:   125  317  49.1    315     442
Waiting:      120  314  49.1    313     440
Total:        125  317  49.0    315     442

Percentage of the requests served within a certain time (ms)
  50%    315
  66%    316
  75%    317
  80%    318
  90%    411
  95%    411
  98%    420
  99%    442
 100%    442 (longest request)
</textarea></pre>
<p><strong>結果</strong></p>
<p>1秒あたりのリクエスト数はruby1.9のほうがほぼ1.5倍の多くリクエストをこなせるということになる。<br />
かなりシンプルなテストなのでこれを根拠にすることはできないが、もっと複雑にシステムになればなるほど<br />
より顕著に差ができるのではないのかなと思います。</p>
<p>・ruby1.8<br />
　　→　<strong>20.80 request / sec</strong></p>
<p>・ruby1.9<br />
　　→　<strong>30.50 request / sec</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2009/06/14/rails-ruby-191-vs-ruby-187/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Ruby] Sinatra</title>
		<link>http://b.ruyaka.com/2009/04/23/ruby-sinatra/</link>
		<comments>http://b.ruyaka.com/2009/04/23/ruby-sinatra/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 01:50:46 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Sinatra]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=241</guid>
		<description><![CDATA[Rubyフレームワークといえば、誰もが「Ruby On Rails」と答えるでしょうが、 そんな中、Railsではない素敵なフレームワークを発見しました。 用途してはRailsは至れり尽くせりで嬉しいけどちょっとしつこいよね。ってな時でしょうか。 超軽量Rubyフレームワーク 「sinata」 http://www.sinatrarb.com/ サイトのトップを見ただけでどれだけ軽量なのかがわかります。 [Sinatra]環境構築 gemを一発かますだけ。 $ gem install sinatra [Sinatra]Hello World HelloWorldわずか5行。 hello.rb require 'rubygems' require 'sinatra' get '/hi' do "Hello World!" end [Sinatra]勿論テンプレートも分けれます get '/' do erb :index end viewsフォルダを作成 views/index.erb HELLOW WORLD [Sinatra]レイアウトも作成可能 views/layout.erb HELLOW WORLD これはかなりシンプルでいいかも。 Passengerにも対応しているようです。 静的なサイトであればRailsからSinataに乗り換えてもいいと思いました。]]></description>
			<content:encoded><![CDATA[<p>Rubyフレームワークといえば、誰もが「Ruby On Rails」と答えるでしょうが、<br />
そんな中、Railsではない素敵なフレームワークを発見しました。</p>
<p>用途してはRailsは至れり尽くせりで嬉しいけどちょっとしつこいよね。ってな時でしょうか。</p>
<p>超軽量Rubyフレームワーク 「sinata」<br />
<a href="http://www.sinatrarb.com/">http://www.sinatrarb.com/</a></p>
<p>サイトのトップを見ただけでどれだけ軽量なのかがわかります。</p>
<p><strong>[Sinatra]環境構築</strong></p>
<p>gemを一発かますだけ。</p>
<pre><textarea class="ruby" cols="60" rows="5" name="code">
$ gem install sinatra
</textarea></pre>
<p><strong>[Sinatra]Hello World</strong></p>
<p>HelloWorldわずか5行。</p>
<p>hello.rb</p>
<pre><textarea class="ruby" cols="60" rows="5" name="code">
require 'rubygems'
require 'sinatra'
get '/hi' do
  "Hello World!"
end
</textarea></pre>
<p><strong>[Sinatra]勿論テンプレートも分けれます</strong></p>
<pre><textarea class="ruby" cols="60" rows="5" name="code">
get '/' do
  erb :index
end
</textarea></pre>
<p>viewsフォルダを作成<br />
views/index.erb</p>
<pre><textarea class="ruby" cols="60" rows="5" name="code">
<div>HELLOW WORLD</div>

</textarea></pre>
<p><strong>[Sinatra]レイアウトも作成可能</strong></p>
<p>views/layout.erb</p>
<pre><textarea class="ruby" cols="60" rows="5" name="code">
<html>
  <head>HELLOW WORLD</head>
  <body>
    <%= yield %>
  </body>
</html>
</textarea></pre>
<p>これはかなりシンプルでいいかも。<br />
Passengerにも対応しているようです。<br />
静的なサイトであればRailsからSinataに乗り換えてもいいと思いました。</p>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2009/04/23/ruby-sinatra/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Ruby] クローラー作成　スクレイピング scrape</title>
		<link>http://b.ruyaka.com/2009/04/22/ruby-%e3%82%af%e3%83%ad%e3%83%bc%e3%83%a9%e3%83%bc%e4%bd%9c%e6%88%90%e3%80%80%e3%82%b9%e3%82%af%e3%83%ac%e3%82%a4%e3%83%94%e3%83%b3%e3%82%b0-scrape/</link>
		<comments>http://b.ruyaka.com/2009/04/22/ruby-%e3%82%af%e3%83%ad%e3%83%bc%e3%83%a9%e3%83%bc%e4%bd%9c%e6%88%90%e3%80%80%e3%82%b9%e3%82%af%e3%83%ac%e3%82%a4%e3%83%94%e3%83%b3%e3%82%b0-scrape/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 06:05:58 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[scrape]]></category>
		<category><![CDATA[クローラー]]></category>
		<category><![CDATA[スクレイピング]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=232</guid>
		<description><![CDATA[久々にRubyでクローラー作成。 クローラー先は内緒で。 素敵にライブラリがあるので一瞬でデータを取ってこれちゃいます。 まずはgemでscrapiをインストール gem install scrapi rubyファイルを作成。Scrape用のクラスを作成してみます。 scrape_site.rb require File.expand_path(File.dirname(__FILE__) + "/../config/environment") require "rubygems" require "open-uri" require "logger" require "scrapi" require "jcode" require "uri" class ScrapeSite SITE_URL = "http://**********" def scrape ################################################################### # サイトURL生成 ################################################################### url = SITE_URL url = NKF::nkf('-s -m0', url) url = URI.escape(url) ################################################################### # スクレイピング ################################################################### html = NKF::nkf('-w -m0', [...]]]></description>
			<content:encoded><![CDATA[<p>久々にRubyでクローラー作成。<br />
クローラー先は内緒で。<br />
素敵にライブラリがあるので一瞬でデータを取ってこれちゃいます。</p>
<p><strong>まずはgemでscrapiをインストール</strong></p>
<pre><textarea class="ruby" cols="60" rows="5" name="code">
gem install scrapi
</textarea></pre>
<p><strong>rubyファイルを作成。Scrape用のクラスを作成してみます。</strong></p>
<p>scrape_site.rb</p>
<pre><textarea class="ruby" cols="60" rows="5" name="code">
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
require "rubygems"
require "open-uri"
require "logger"
require "scrapi"
require "jcode"
require "uri"

class ScrapeSite

  SITE_URL = "http://**********"

  def scrape
    ###################################################################
    # サイトURL生成
    ###################################################################
    url = SITE_URL
    url = NKF::nkf('-s -m0', url)
    url = URI.escape(url)
    ###################################################################
    # スクレイピング
    ###################################################################
    html = NKF::nkf('-w -m0', open(url).read)
    places = Scraper.define do
      process "table.tbl td.price", "prices[]" => :text
      process "table.tbl td.detail b", "details[]" => :text
      process "table.tbl td.image a img", "images[]" => "@src"
      process "table.tbl span.title", "titles[]" => :text
      result :prices, :titles, :details, :images
    end
    values = places.scrape(html, :parser_options => {:char_encoding=>'utf8'})
  end
end

st = Scrape.new
st.scrape
</textarea></pre>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2009/04/22/ruby-%e3%82%af%e3%83%ad%e3%83%bc%e3%83%a9%e3%83%bc%e4%bd%9c%e6%88%90%e3%80%80%e3%82%b9%e3%82%af%e3%83%ac%e3%82%a4%e3%83%94%e3%83%b3%e3%82%b0-scrape/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>スクリプト言語ランキング (PHP, RUBY, PYTHON, ETC..)</title>
		<link>http://b.ruyaka.com/2009/03/31/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88%e8%a8%80%e8%aa%9e%e3%83%a9%e3%83%b3%e3%82%ad%e3%83%b3%e3%82%b0-php-ruby-python-etc/</link>
		<comments>http://b.ruyaka.com/2009/03/31/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88%e8%a8%80%e8%aa%9e%e3%83%a9%e3%83%b3%e3%82%ad%e3%83%b3%e3%82%b0-php-ruby-python-etc/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 02:00:04 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[その他]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=190</guid>
		<description><![CDATA[EDCからスクリプト言語ランキングが発表されていました。 ・Actionscript ・Flex ・Javascript ・Microsoft F# ・Microsoft Powershell ・Perl ・PHP ・Python ・Ruby ・VB Script 世界中から500人以上の開発者に評価をしてもらったようです。 評価項目は以下13項目。 ・Ease of Use ・Exception handling ・Extensibility ・Maintainability / Readability ・Cross-platform portability ・Community ・Availability of tools ・Quality of tools ・Performance ・Memory management ・Client side scripting ・Security 各言語の総合ランキング。 PHPが一位にランクイン。その後をRuby・Pythonが追う形となっています。 PHP評価。 Python評価。 Ruby評価。 使いやすさランキングはRubyがトップです。 メモリ効率だとPythonがトップですね。 全体的にバランスでいうと、やはりPHPで、どの項目でも上位に食い込んでます。 Rubyはパフォーマンスで見劣りします。Ruby1.9で変化はあるのかな。]]></description>
			<content:encoded><![CDATA[<p>EDCからスクリプト言語ランキングが発表されていました。</p>
<p>・Actionscript<br />
・Flex<br />
・Javascript<br />
・Microsoft F#<br />
・Microsoft Powershell<br />
・Perl<br />
・PHP<br />
・Python<br />
・Ruby<br />
・VB Script </p>
<p>世界中から500人以上の開発者に評価をしてもらったようです。<br />
評価項目は以下13項目。<br />
・Ease of Use<br />
・Exception handling<br />
・Extensibility<br />
・Maintainability / Readability<br />
・Cross-platform portability<br />
・Community<br />
・Availability of tools<br />
・Quality of tools<br />
・Performance<br />
・Memory management<br />
・Client side scripting<br />
・Security</p>
<p>各言語の総合ランキング。<br />
PHPが一位にランクイン。その後をRuby・Pythonが追う形となっています。</p>
<p><img src="http://b.ruyaka.com/wp-content/uploads/2009/03/scripting_languages_2009_all2.gif" alt="scripting_languages_2009_all2" title="scripting_languages_2009_all2" width="644" height="431" class="alignnone size-full wp-image-201" /></p>
<p>PHP評価。<br />
<img src="http://b.ruyaka.com/wp-content/uploads/2009/03/scripting_languages_2009_php1.gif" alt="scripting_languages_2009_php1" title="scripting_languages_2009_php1" width="562" height="394" class="alignnone size-full wp-image-202" /></p>
<p>Python評価。<br />
<img src="http://b.ruyaka.com/wp-content/uploads/2009/03/scripting_languages_2009_python1.gif" alt="scripting_languages_2009_python1" title="scripting_languages_2009_python1" width="569" height="462" class="alignnone size-full wp-image-203" /></p>
<p>Ruby評価。<br />
<img src="http://b.ruyaka.com/wp-content/uploads/2009/03/scripting_languages_2009_ruby1.gif" alt="scripting_languages_2009_ruby1" title="scripting_languages_2009_ruby1" width="589" height="410" class="alignnone size-full wp-image-204" /></p>
<p>使いやすさランキングはRubyがトップです。<br />
<img src="http://b.ruyaka.com/wp-content/uploads/2009/03/scripting_languages_2009_ease_of_use1.gif" alt="scripting_languages_2009_ease_of_use1" title="scripting_languages_2009_ease_of_use1" width="743" height="354" class="alignnone size-full wp-image-205" /></p>
<p>メモリ効率だとPythonがトップですね。<br />
<img src="http://b.ruyaka.com/wp-content/uploads/2009/03/scripting_languages_2009_memory1.gif" alt="scripting_languages_2009_memory1" title="scripting_languages_2009_memory1" width="827" height="379" class="alignnone size-full wp-image-206" /></p>
<p>全体的にバランスでいうと、やはりPHPで、どの項目でも上位に食い込んでます。<br />
Rubyはパフォーマンスで見劣りします。Ruby1.9で変化はあるのかな。</p>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2009/03/31/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88%e8%a8%80%e8%aa%9e%e3%83%a9%e3%83%b3%e3%82%ad%e3%83%b3%e3%82%b0-php-ruby-python-etc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails2.3.2&amp;Ruby1.9　使えない・・・。</title>
		<link>http://b.ruyaka.com/2009/03/30/rails232ruby19%e3%80%80%e4%bd%bf%e3%81%88%e3%81%aa%e3%81%84%e3%83%bb%e3%83%bb%e3%83%bb%e3%80%82/</link>
		<comments>http://b.ruyaka.com/2009/03/30/rails232ruby19%e3%80%80%e4%bd%bf%e3%81%88%e3%81%aa%e3%81%84%e3%83%bb%e3%83%bb%e3%83%bb%e3%80%82/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 10:28:04 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby On Rails]]></category>
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=183</guid>
		<description><![CDATA[乗り換えようと色々試しているのですが、、 全然動きません。 ここらへんの記事を見るとやっぱり早く移行はしたいけれど、 プラグインとか全然ついてこれていないので難しいです。 rails2.3.2でruby1.9サポートとは書いてあるものの、実際に動くのは基本的に部分のみ。 ちょっとライブラリやらプラグインをいれるともう駄目です。 今回スレッド処理用のアプリを開発しているだけあって以下のような検証データもでてるとなおさらruby1.9にしたいところ。 callcc page1 callcc page2 callcc page3 call page1 do call page2 do call page3 end end For 10000 requests (with one thread) Ruby 1.9.1 takes 16 seconds and requires 12 MB of memory. The same example with Ruby 1.8.7 grows to 329 MB of memory and takes 56 [...]]]></description>
			<content:encoded><![CDATA[<p>乗り換えようと色々試しているのですが、、<br />
全然動きません。</p>
<p>ここらへんの記事を見るとやっぱり早く移行はしたいけれど、<br />
プラグインとか全然ついてこれていないので難しいです。<br />
rails2.3.2でruby1.9サポートとは書いてあるものの、実際に動くのは基本的に部分のみ。<br />
ちょっとライブラリやらプラグインをいれるともう駄目です。</p>
<p>今回スレッド処理用のアプリを開発しているだけあって以下のような検証データもでてるとなおさらruby1.9にしたいところ。</p>
<blockquote><p>
callcc page1<br />
callcc page2<br />
callcc page3
</p></blockquote>
<blockquote><p>
 call page1 do<br />
   call page2 do<br />
     call page3<br />
   end<br />
 end
</p></blockquote>
<blockquote><p>
For 10000 requests (with one thread) Ruby 1.9.1 takes 16 seconds and requires 12 MB of memory. The same example with Ruby 1.8.7 grows to 329 MB of memory and takes 56 seconds
</p></blockquote>
<p><a href="http://www.infoq.com/news/2009/03/wee;jsessionid=5F1208787B3DBFCC7BD1651B4F80E044">http://www.infoq.com/news/2009/03/wee;jsessionid=5F1208787B3DBFCC7BD1651B4F80E044</a></p>
<p>ruby1.9早すぎ。というかruby1.8が遅すぎ・・・。(汗)</p>
<p>早く対応してくださいまし。。</p>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2009/03/30/rails232ruby19%e3%80%80%e4%bd%bf%e3%81%88%e3%81%aa%e3%81%84%e3%83%bb%e3%83%bb%e3%83%bb%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[RMagick] ImageList プロパティ一覧</title>
		<link>http://b.ruyaka.com/2009/03/11/rmagick-imagelist-%e3%83%97%e3%83%ad%e3%83%91%e3%83%86%e3%82%a3%e4%b8%80%e8%a6%a7/</link>
		<comments>http://b.ruyaka.com/2009/03/11/rmagick-imagelist-%e3%83%97%e3%83%ad%e3%83%91%e3%83%86%e3%82%a3%e4%b8%80%e8%a6%a7/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 08:40:29 +0000</pubDate>
		<dc:creator>はるかなる熊</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby On Rails]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[ImageMagick]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[restful]]></category>
		<category><![CDATA[RMagick]]></category>

		<guid isPermaLink="false">http://b.ruyaka.com/?p=166</guid>
		<description><![CDATA[RmagickのImageListプロパティ一覧 詳細はこちら http://studio.imagemagick.org/RMagick/doc/imageattrs.html 使用しそうなやつ。 >> img = Magick::ImageList.new("public/images/rails.png") => [public/images/rails.png PNG 50x64 50x64+0+0 DirectClass 8-bit 6kb] scene=0 # 縦幅 >> img.columns => 50 # 横幅 >> img.rows => 64 # ファイルタイプ >> img.format => "PNG" # 縦幅 >> img.class_type => DirectClass=1 # 縦幅 >> img.depth => 8 # カラー総数 >> img.number_colors => 2018 # ファイルサイズ [...]]]></description>
			<content:encoded><![CDATA[<p>RmagickのImageListプロパティ一覧</p>
<p>詳細はこちら<br />
<a href="http://studio.imagemagick.org/RMagick/doc/imageattrs.html">http://studio.imagemagick.org/RMagick/doc/imageattrs.html</a></p>
<p>使用しそうなやつ。</p>
<pre><textarea class="ruby" cols="60" rows="5" name="code">
>> img = Magick::ImageList.new("public/images/rails.png")
=> [public/images/rails.png PNG 50x64 50x64+0+0 DirectClass 8-bit 6kb]
scene=0
# 縦幅
>> img.columns
=> 50
# 横幅
>> img.rows
=> 64
# ファイルタイプ
>> img.format
=> "PNG"
# 縦幅
>> img.class_type
=> DirectClass=1
# 縦幅
>> img.depth
=> 8
# カラー総数
>> img.number_colors
=> 2018
# ファイルサイズ
>> img.filesize
=> 6646
# 画像ファイル数
>> img.length
=> 1
# ファイルネーム
>> img.filename
=> "public/images/rails.png"
# イメージタイプ
>> img.image_type
=> TrueColorMatteType=7
# Mine Type
>> img.mime_type
=> "image/png"
# クオリティ(JPEGのみ1～100)
>> img.quality
=> 0

#おまけ
# リサイズ(フィット)
>> img.resize_to_fit(75, 75)
=> public/images/rails.png PNG 50x64=>59x75 59x75+0+0 DirectClass 8-bit 6kb
# リサイズ(フル)
>> img.resize_to_fill(75, 75)
=> public/images/rails.png PNG 50x64=>75x75 DirectClass 8-bit 6kb
</textarea></pre>
]]></content:encoded>
			<wfw:commentRss>http://b.ruyaka.com/2009/03/11/rmagick-imagelist-%e3%83%97%e3%83%ad%e3%83%91%e3%83%86%e3%82%a3%e4%b8%80%e8%a6%a7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

