Rubyでtwitterbotを作る

手順メモメモ

1.プロジェクト準備
必要なライブラリのインストール

$ gem install heroku sinatra bundler get-twitter-oauth-token --no-rdoc --no-ri

それぞれ何かと簡単調べる
・heroku
Rubyアプリケーションのクラウドプラットフォーム(PaaS)
gitを使用してデプロイが可能

sinatra
→軽量のWebフレームワーク
 マニュアルを読むと本当に簡単にできそうな。感じはする。

・bundler
→gemパッケージの管理をしてくれるツール
 正直よくわかんない。。勉強しよう。

・get-twitter-oauth-token
TwitterOAuth認証に必要なトークンをゲットできるライブラリかな。。

Bot用フォルダ作成
Bot用フォルダを作成して、git initしてリポジトリに登録。

$ mkdir iwamobot
$ cd iwamobot
$ git init

~/iwamobot/.gitフォルダが作成される。
今後git関連のものはこのフォルダに格納されるとのこと。


2.Twitter認証
teitter developersページにてアプリケーション登録を行う。
入力した情報は
Application Details
Name:iwamobot
Description:bot for I
Web Site:http://twitter.com/iwamobot

アプリケーション登録してからSetteinタブを選択して以下を選択
Application TypeのAccess:Read and Write

ここで表示される「Consumer key」と「Consumer secret」をメモっておく。


OAuth認証に必要なトークンを取得する
下記コマンドを実行

$ get-twitter-oauth-token

したらopensslが見つからないエラー

in `require': no such file to load -- openssl (LoadError)

いろいろ調べるとrubyインストール時に引数でopensslのパスを渡しておくらしい。。。。。
いちどrubyを削除

$ rvm remove ruby-1.9.2-p290

opensslをインストールしてから、rubyを再インストール。

$ rvm pkg install openssl
$ rvm install 1.9.2 --with-openssl-dir=/home/hoopfuyu/.rvm/src

インストール中調べてたら再度etc/opensslへ行ってから最終的にmakeすればよかったよう。
なんだかなー。

そして再度トークンを取得。get-twitter-oauth-tokenコマンドを実行すると、
「Consumer key」と「Consumer secret」の入力が求められるので入力する。
すると認証用ページに飛ぶので必要情報を入力するとPINコードが得られる。
ターミナルに貰ったPINコードを入力するとTOKENとSecret+がもらえる。
この情報も後に必要らしいのでメモ。


3.プログラム
やっとプログラムできる。。
1で作成したiwamobotフォルダにファイルを作成。
作成後はこのような感じ
$ ls -a
. .. .git Gemfile app.rb config.ru tweet.rb

それぞれのファイルの内容は以下
config.ru

require 'app.rb'
run Sinatra::Application

Gemfile

source :rubygems
gem 'sinatra'
gem 'twitter'

app.rb

require 'rubygems'
require 'sinatra'
require './tweet.rb'

get '/' do
'under construction'
end

get '/tweet' do
Tweet.new.tweet
end

tweet.rb

# coding: utf-8
require 'rubygems'
require 'twitter'

class Tweet

def initialize
@text = "幸せのハードルは低い方がいいんだよ"

Twitter.configure do |config|
config.consumer_key = '前の手順で入手したもの'
config.consumer_secret = '前の手順で入手したもの'
config.oauth_token = '前の手順で入手したもの'
config.oauth_token_secret = '前の手順で入手したもの'
end
end

def tweet
tweet = @text
update(tweet)
end

private
def update(tweet)
return nil unless tweet

begin
Twitter.update(tweet.chomp)
rescue => ex
nil # todo
end
end

end

4.heroku登録
herokuコマンドを使って、Heroku上にWebアプリを新規作成する。重複しない名前だとOKらしい。
まー重複するわけもなく。

$ heroku create iwamobot
Enter your Heroku credentials.
Email: '入力'
Password:'入力'
Creating iwamobot... done, stack is bamboo-mri-1.9.2
http://iwamobot.heroku.com/ | git@heroku.com:iwamobot.git
Git remote heroku added

正常終了。これでgitコマンドのremote先にHerokuが追加された。

$ bundle install

ローカルリポジトリにコミットを行う。

$ git add .
$ git commit -m 'My first commit!'

ローカルへのコミットが完了したら、それをHerokuにプッシュする

$ git push heroku master

ちょっとエラーがでた。
SSH鍵を作成して、herokuに登録する

$ ssh-keygen -t rsa -C "メールアドレス"
(省略)
$ heroku keys:add ~/.ssh/id_rsa.pub

再度Herokuへプッシュする。今度はうまくいった。

$ heroku open

するとブラウザが起動して、「under construction」と表示される予定が、Application Error発生。
「An error occurred in the application and your page could not be served. Please try again in a few moments.
If you are the application owner, check your logs for details.」

ログを確認してみる

$ heroku logs
(省略)
Unexpected error while processing request: no such file to load -- app.rb
Error H13 (Connection closed without response) -> GET iwamobot.heroku.com/ dyno=web.1 queue= wait= service= status=503 bytes=
(省略)

app.rbが見つからないらしい。
config.ruを下記に修正する。

require './app.rb'
run Sinatra::Application

ファイルを修正したので、gitでcommitを行う。
その前にstatusの確認

$ git status
# On branch master
# Changes not staged for commit:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: config.ru
#
no changes added to commit (use "git add" and/or "git commit -a")

gitは初めて使うけど、ここで修正されたものがもう確認できるのか。

$ git commit -m 'config.ru update'

再度再度Herokuへプッシュする。
heroku openすると「under construction」と表示された。
アドレスのおしりに/tweetを追加してアクセスしてみる。

BotTwitterアカウントのタイムラインを確認してみると、、ツイートできてる!!

長かったーー。

railsをインストール

手順メモメモ

rvmのインストールは終わっているのでgemset作成。
そして買った本はrails3.0.5だったので初心者としてそのバージョンをインストール

$ rvm gemset create rails305
$ rvm gemset use rails305
$ gem install rails -v 3.0.5

したら下記エラー

ERROR: Loading command: install (LoadError)
no such file to load -- zlib
ERROR: While executing gem ... (NameError)
uninitialized constant Gem::Commands::InstallCommand

足りてないなー。zlibとやらがみえてないのかしら。
で下記を実行

sudo apt-get install zlib1g-dev

Ruby on Rails on Ubuntu 11.04を参考に他のものもapt-getしておく。

で、再度トライしてみてもエラーが消えない。
あー、すいません、足りないとかじゃないのね。ちゃんと考えますよ。。

調べてみると、rubyインストール時に足りない状態だったのが原因っぽい。
再度makeする

$ cd .rvm/src/ruby-1.9.2-p290/ext/zlib/
$ ruby extconf.rb
$ make; make install

完了してから、再度railsインストールを実施。
今度は、、、、、、、、、完了した!!

rails -vを実行したらバージョンが出てくれたので大丈夫かな。
今日はここまで

ubuntu11.04にrubyインストール

手順メモメモ

curlが必要とのことでinstall
rvmのために必要らしい

$ sudo aptitude install curl

続いてgit

$ sudo aptitude install git

続いてrvm
Ruby Version Managerの略
 Rubyの使用するVersionの切り替えやgemの管理が行なえるとのこと
マニュアルを参考にしてInatall
参考というかマニュアル通りだけど
rvmでRuby1.9.2をインストールでデフォルトで1.9.2を使用するように。

$bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

$echo ' -s "$HOME/.rvm/scripts/rvm" && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile

$rvm install 1.9.2
$ rvm --default use 1.9.2

ついでにrvmの基本的なコマンドをメモ
rvm list known :インストール可能なrubyバージョンの一覧を表示
rvm list :インストールされているrubyバージョンの一覧を表示
rvm install 1.9.2 :ruby-1.9.2の安定版をインストールする
rvm use ruby-1.9.2-p290 :ruby-1.9.2の環境に切り替える

vmware playerにubuntu11.04を入れる

手順メモメモ
1.CDイメージのダウンロード(http://www.ubuntulinux.jp/products/JA-Localized/downloadより)
11.04をダウンロード
2.ダウンロードしたらvmware playerで環境作り
 気をつけたのは以下
①簡易インストールすると英語で入るらしいので後でインストールにチェック
②初回起動時にインストールするので、ハードウェアのDVDドライブにダウンロードしたisoファイルを接続するようにしておく。
3.vmware playerにubuntuをインストール
 たんたんとインストール。キーボード設定でjapanを選択したけどちょっと不安。
 (1回目はインストール後にリブートしたら起動しなくなった....
  vmkdのファイルができてなかったからのようだけどなんでかは分からん)

 インストール中に
 突然のプロポーズに感激する女性たちの、TOP25
を見る。
 喜んで飛び跳ねたり泣いたりってどんななんだろ。でも見てて気持ちいい。
 

4.Vmware toolsインストール

$ cp -r /media/"Vmware Tolls" /tmp
$ sudo tar zxvf /tmp/"Vmware Tolls"
$ cd /tmp/VMware Tools/vmware-tools-distrib
$ sudo ./install.pl
あとはEnterを押し続ける

5.とりあえずのパッケージ

$ sudo apt-get install aptitude

次はrubyをいれてみよー

Windows7にnode.jsを入れました

手間取ってしまったので、後々のためにメモ。。

1.Cygwinのインストール
WindowsではCygwinを入れてあげないとダメとのこと。
Cygwin何それなのですが、WindowsGNUツール使用可能になる感じ?
最初ネットワークでインストールしたのですが、ちょっと心配だったのでlocalからインストール。
(参考) Cygwin の インストール(Windows 7 編)

2.node.jsインストール
基本的には下記を参考。
(参考)Building node.js on Cygwin (Windows)
cygwinを起動
②下記コマンドを入力

$ bash
$ cd ~
$ git clone git://github.com/joyent/node.git
$ cd node
$ git fetch --all
$ git tag
$ git checkout [latest stable tag from previous command, e.g., v0.2.5]

git cloneでれポジとるの複製を作成してから、作成したディレクトリに移動、
git fetchで変更の読み込み?ですかね。
でcheckoutすると。

よく分からないながらも、とりあえずv0.4.1にしました。
コンパイル前に、Makefileを作成するためにconfigure
(各種システムコールやライブラリなどが揃っているかどうかを自動的にチェックして、適切な Makefile を生成するとのこと)

$ git checkout v0.4.1
$ ./configure

ここまで、比較的サクサクと進めたんですが、上記参考HPのBuild Problemにある下記メッセージでエラー。

fatal error – unable to remap \\?\C:\cygwin\lib\python2.6\lib-dynload\time.dll to same address as parent: 0×360000 != 0×3E0000

これはnode.jsマターではないとのことらしい。
%cygwinインストールフォルダ%\bin\ash.exeからコマンドを実行すればいいとのこと
コマンドプロンプトを起動して下記コマンドを実行。

cmd >cd c:\cygwin\bin
cmd >ash
$ rebaseall -v

しかしここでエラー発生。メッセージは

FixImage (/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgcc_s_sjlj-1.dll) failed with last error = 13

cygwin失敗してるのかしらーーと思ってcygwinを一回綺麗にしてやり直したりしたけど変わらず。もーMacで入れちゃおうかなーと思っていたけど、google先生に頼ってみたらありました。


Node.js on Windows 7 under Cygwin, "FixImage error 13" problem

Cygwinで FixImage (/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgcc_s_sjlj-1.dll) failed with last error = 13

Windows7でnode.jsを使おう

ということでフォルダ名を変更。
(変更前)%cygwin%/usr/x86_64-w64-mingw32/sys-root/mingw/
(変更後)%cygwin%/usr/x86_64-w64-mingw32/sys-root/mingw_bak/

この後で再度ashを起動して
$ rebaseall -v
でエラーなく終了した!!

cygwin再起動して

$ ./configure
$ make
$ make install

でインストール完了!!
長かったー。
sampleのchatを実行してみてる最中です。

OpenFlowとな。。

グーグル、マイクロソフト、Yahoo!、Facebookらが新しいネットワーキング技術の実現へ「Open Networking Foundation」を結成

仮想技術ってのはどこまでも続いていくんですね。
自分は現在アプリケーション基盤Grなるところで働いているのですが、将来は基盤の仕事って無くなっちゃうん気がしてなりません。
社内でも顧客環境は仮想化が進んでいて、自分も結構楽しみながらESXiで環境作成してましたけど、
楽になっていく分人はいらなくなってくんだよなーー。

というわけで併せて考えたい
20代で人生の年収は9割決まる
もうそろそろ3年目に突入なので。。



という訳でしれっとブログ再開。
なにげにFacebookも始めたので、ブログ再開。
ちまちまやっていこうそうしよう。

エンジニアの未来サミット 0905に行ってきたよ

昨日秋葉原へ行ってきました。
去年はUstで鑑賞していて次回あるなら行きたいと思っていましたし(バイト遅刻しました)、
今年はさらに新社会人向けな雰囲気を感じましたので、お邪魔させて頂きました。

この様なイベントに参加することは初めて参加したので、ドキドキするやら不安になるやらでした。
議事録に関してははもう詳しいものを皆さん書いているので僕は反応した言葉と簡単な感想をば…
ただメモの書く過程で発言通りに書いてはいないかもしれません。


【第一部】教えてアルファギーク


・吉岡さん「正解を求めると危ないよ」「意思さえあればできる環境は凄いよ」
 →吉岡さんはよく自分の意思ってこと大切って考えてるのは分かってたけど、
  今回ワンクッションおいてた。
  気使ってるのかなと思った。

  
・谷口さんの社内に目指す人がいた話。
 →自分はまだ社会人一年目、先輩社員を見なくてはいけないと思った。
  駄目だとしても外を見ればいいってのはやっぱ恵まれているんだろーな。


・ひがさんはブログ書くのあんま好きじゃない。
・楠さん「どこに敵がいるか分からないより、どこに味方がいるか分からない方が恐い」
 →意外だった。ブログを書く人=好きな人だと思ってた。
  ブログを書くのがあまり好きではなかったがちょっと頑張ってみようと思った。


・ひがさん「自分に何が向いているか分からない人は、いろんなチャンスがあるんだと思ってトライする」
・谷口さんの居心地良いところから転職後「楽しくて仕方なかった」。
 その後の「情報発信する人に吸い寄せられるよね」
 →楽しくて仕方なかったってのが羨ましすぎる。そうゆう人がいるってのを忘れないように。


上流下流の話(SIer1年生だったので耳ダンボだった)
・ひがさん「上流、下流どっちかしかやってない人はダメ」
・楠さん「これから何年かで変わるんじゃないか」
・吉岡さん「発信によって会社の淘汰が始まる」
 →問題は分かりました(頭では)。ただどうすればいいのかは全然分からんです。
  ただそんな状態でも自分がどうなりたいか、どうするかを考えながら時間使っていかないと。
  

ITの未来
・ひがさんと楠さん「クラウドバズワードではなくなってきた」
・谷口さん「この業界は急激に人口が増えている。サバイバルはもう始まっている」
・「今は新しいものに対してのノウハウは蓄積されてないんだからほぼ横一線に並んでる。」
 →未来の話ってのはジャンル問わず楽しい。
  いつでもそうなんだけど「今」でも変化が起きていることを忘れずにいようと思った。
  あと楽しそうだけどやっぱ変化って怖ーーー!!


第一部について
今回はすっきりまとまっていた印象です。
ブログを読んでる人達を生で見れて、天の人から同じ地上の人って捉えることができるようになりました。
みなさんの歴史というか今までの話を聞いて、一番はやっぱり行動力なんだなと。
勉強するのも行動力、環境変えるのも行動力、他人との繋がりを作るのも行動力、
自分変えるのも行動力だと思いました。
あと老ガイって言えるパワーが凄かったです。日本頑張りたいです。
ここ一週間で一番スッキリしたかもしれんです。

【第二部】弾 vs 個性派エンジニア
・井上さん「エンターテイメントとして伝えられるっては理想的」
・山崎さん「トラブルの時が一番経験値が上がる」
・弾さん「人に答え合わせをする感じで質問するのがいい」
・閑歳さんの1週刊perl学んだ話の中での「責任感が強い人が伸びる」
・みなさんの勉強方法
・山崎さん「なんとかなるの経験はいるかもね」
・こういうエンジニアは駄目だで米林さん「非エンジニアを否定的にとらえる人」
などなど


第二部について
第二部はやたらはっちゃけてる感じだったので心底楽しかったです。
山崎さんの話は新人には何言ってるかよく分からないとこもあったけど、
大変だった時期をあんな風に話せるようになれたらいいなーーって思いました。
あと隠れたMVPはモデレータのフォンさんだったように思います。
流れをぐいぐい導いていましたよね。
最後のパネルでも名言たくさん出てたと思います。


登壇者、関係者のみなさんお疲れ様でした!!!


参加できて気持ちいいだけじゃなくて目標を決めなくてはいけないですね。
今年は勉強会に参加することを目標にしようかなと思います。
あとはブログを書くことかな…。
あと自分メソッドと「幹」の部分を勉強したいです。まだ「幹」ってどのへんだか見えないんだよなぁ。
半径5mから、できることからコツコツと。自分に都合のいい言葉だけ聞こえる耳を持ってます。


そしてそして第三回も期待してます!!
ありがとうございました。