Ruby の Mechanize を使って Yahoo! JAPAN にログインする
mechanize は version 2.3 を使用 (現時点最新).
要約 : 正しいブラウザであると見せかけ .albatross を倒し連続アクセスを避ければ良い
(2012-03-05 追記) 単なる code snippet なんで gist に移しました
login to Yahoo! JAPAN with Mechanize on Ruby - Ruby の Mechanize を使って Yahoo! JAPAN にログインする - Gist
(2012-03-03 追記) Ruby コードは GitHub に置いてみました.
kaosf / login-to-yahoo-jp-with-mechanize-on-ruby | GitHub
課題
- agent.user_agent は何ぞ他にもっと短く書けないのか
- JavaScript は Mechanize では扱えないので Watir や Selenium を検討する
参考
RVM から rbenv + ruby-build に乗り換えました (on Ubuntu 10.04 Server)
複数の Ruby 環境を管理するために今まで RVM を使っていましたが,rbenv と ruby-build を使う方が便利だよとか Bundler あるのに gemset とかオワコンとか聞いた気がするので乗り換えました.
簡単に概念を説明すると,rbenv で複数の Ruby 環境を管理出来,ruby-build を使うことで自分でいちいち Ruby をビルドする手間が省けるようになる,という感じです.
(2012-03-06 追記) 嘘でした.RVM 同様,自分でビルドはさせられます.なので build-essential や zlib1g-dev パッケージは必要です.
前準備 (curl も必要でした)
sudo aptitude install git-core curl
もしかすると,以下も必要かも?必要です.zlib1g-dev がまず必要であり,rails 使おうとするなら libreadline-dev (無いと rails c 出来ない) や libssl-dev (無いとブラウザからアクセスしたときエラー出る) も必要です.後から依存するパッケージをインストールした場合は rbenv install 1.9.2-p290 等でリビルドする必要がある…かと.
sudo aptitude install libreadline-dev libssl-dev zlib1g-dev
さて…
rvm seppuku
なおこのとき,自分で作った随所の .rvmrc ファイルは自動的に消えないので手動で消してねって警告が出ました.別にあっても困りませんので見つけたら消していけばいいかと.あと,.zshrc とか .bash_profile とかその辺に残っている
[[ -s "/home/ka/.rvm/scripts/rvm" ]] && source "/home/ka/.rvm/scripts/rvm"
も消しておきましょう.
ここから rbenv + ruby-build の準備 + 構築です.基本的に GitHub の解説通りにコマンド打っていけば OK です.
sstephenson/rbenv - GitHub
sstephenson/ruby-build - GitHub
このエントリは,GitHub に書いてある解説を見て試した一人の人間の単なる結果です.いずれ古くなるでしょうし,英語読むのしんどいからちょっと参考に… 程度にお使い下さい.
cd git clone git://github.com/sstephenson/rbenv.git .rbenv echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshenv echo 'eval "$(rbenv init -)"' >> ~/.zshenv exec $SHELL mkdir -p .rbenv/plugins cd .rbenv/plugins git clone git://github.com/sstephenson/ruby-build.git
後はインストールしたい Ruby を以下のようにインストール.自分でビルドしないとは言えファイルの展開には結構時間掛かる.
rbenv install 1.9.3-p125 rbenv install 1.9.2-p290 rbenv rehash
デフォルトで使うバージョンを指定するには
rbenv global 1.9.3-p125
どこか特定のディレクトリであるバージョンの Ruby が使いたいなら
cd somewhere rbenv local 1.9.2-p290
Rails とか Bundler とかインストールしたら
rbenv rehash
結構忘れやすいので注意.
参考
ローカルで dump した PostgreSQL のバックアップを Heroku に restore する
ローカルの動作環境は以下の通り.
- sakura VPS 512
- Ubuntu 10.04 LTS
- PostgreSQL 8.4
- heroku-gem 2.16.2
まず heroku で pgbackups という addon を導入しておく.現時点では以下のコマンドで OK*1.
$ heroku update $ heroku addons:add pgbackups
Heroku ではない何処かに既にある PostgreSQL のデータベースを dump しておき,それをどこか DL 可能な場所にアップする.
私の場合は,自前のサーバからバックアップし,自前の web サーバにアップした.
# まずバックアップ $ su - postgres $ pg_dump <DATABASENAME> -F c -f <DUMPFILE> $ cp <DUMPFILE> <どこか> $ exit
で,
そこの URL を
まず heroku pgbackups のヘルプを読んでみる.
$ heroku pgbackups --help Usage: heroku pgbackups list captured backups Additional commands, type "heroku help COMMAND" for more details: pgbackups:capture [DATABASE] # capture a backup from a database id pgbackups:destroy BACKUP_ID # destroys a backup pgbackups:restore [<DATABASE> [BACKUP_ID|BACKUP_URL]] # restore a backup to a database pgbackups:url [BACKUP_ID] # get a temporary URL for a backup
上記のように書いてあるので,pgbackups:restore を試してみる.
$ heroku pgbackups:restore <DATABASENAME> <DUMPFILE_URL>
すると,以下のようなエラーが.
! Could not resolve database <DATABASENAME> ! ! Available databases: ! SHARED_DATABASE (DATABASE_URL) [1]
よく分からないが SHARED_DATABASE が Available とのことなので,以下のコマンドを打ってみる.
$ heroku pgbackups:restore SHARED_DATABASE <DUMPFILE_URL>
すると以下のような出力があり,破壊的な動作だからと警告が出ている.
SHARED_DATABASE (DATABASE_URL) <---restore--- <DUMPFILE> ! WARNING: Potentially Destructive Action ! This command will affect the app: <CUSTOM_DOMAIN> ! To proceed, type "<CUSTOM_DOMAIN>" or re-run this command with --confirm <CUSTOM_DOMAIN> >
ここで入力待ちになっている.処理をするために,
> <CUSTOM_DOMAIN> Retrieving... done Restoring... done
ここで特にエラーも出ずに終了.
そして http://
すごい!
そもそもなんでこんなことになったかって… development 環境で,動作確認のためだったのに本番に入れていいデータを 10 件くらい入力してしまっていて,これをまた入力するのめんどいな… そのまま restore 出来ないのかな… となったからです ^^;
本番環境に restore するって,ちょっとおかしいためなのかその方法を書いてる記事が見つかりませんでした.バックアップの手法の解説は公式のマニュアルも含めて 3 件ほど見つけましたが…
普通に再度入力した方が明らかに早かったですが,いい練習にはなりましたw
ちなみに,db/schema.rb はローカルも Heroku 側も一致してないとダメ…だと思います.私が今回試したこの例では,一致していました.違っていると,restore 時にエラーが出るのかもしれません.
あと SHARED_DATABASE ってのが何のことなのかよく分からないので,どなたかご存知でしたらご教授下さい (他力本願).
あとそもそも外部に PostgreSQL の database があるなら,heroku_external_db なる gem がある (nbudin/heroku_external_db - GitHub) そうなので,これ使う方がいいかもしれません.まだ私は使ってないので詳しくは分かりませんが…←heroku_external_db は MySQL を使うためのもののようです.PostgreSQL ならそもそも gem なんて無くて良かった.そのための方法を以下にまずは簡単に追記.
2011-12-24T23:08:00+09:00 追記
heroku config コマンドで,Heroku のデプロイされた環境における環境変数が確認出来る.ここで,DATABASE_URL という値があるが,これがデフォルトだと
DATABASE_URL => postgres://なんじゃらかんじゃらamazonaws.com/なんとか
となっているはずである.(これは SHARED_DATABASE_URL の値と同じになっているはずである.) 実は,ここを自分で作った DB に接続出来るものに書き換えるだけで,外部の PostgreSQL の DB が使える.変更の方法は以下の通り.
heroku config:add DATABASE_URL=postgres://<USRENAME>:<PASSROD>@<HOSTNAME or IPADDRESS>:<PORT>/<DATABASENAME>
この辺の仕様に関しては,PostgreSQL の領域である.
これで私は今現在,sakura VPS 512 上に用意した PostgreSQL に Heroku から接続してやることに成功している.
追記ここまで
参考記事
- pg_dump
- Heroku | Dev Center | Heroku PG Backups
- HerokuでDBのデータをバックアップする - アインシュタインの電話番号
- HerokuにPG Backupsというアドオンが加わり、Heroku上のPostgreSQLからダンプ取得・リストアが簡単にできるようにな... - Sooey ※情報は古い
追加 2011-12-24T23:08:00+09:00
- Heroku | Dev Center | Heroku PostgreSQL # Specifying and Promoting Databases
- 他ホストから接続するための設定 (PostgreSQL)
- HerokuでWebアプリ開発を始めるなら知っておきたいこと (5)環境変数ENV - アインシュタインの電話番号
*1:半年も経過すると変わっている可能性は非常に高い
Windows 7 で yamy を使ってキー配列を変更 (Windows XP での窓使いの憂鬱の後継)
窓使いの憂鬱は色々な事情から Windows VISTA/7 で使えなくなったようです.で,その後継に yamy なるツールがあるそうです.
とりあえず設定ファイルの書き方は窓使いの憂鬱そっくりなので,助かりました.何とか適当にググってるだけで従来 Windows XP で行なっていたことは実現出来ました.で,後の自分のためにもメモを残しておきます.
実現したいことは,
- 日本語 109 キーボードを US 配列にする
- US 配列にした上で ] キーを Enter キーにする (US 配列ではこの位置が Enter なので)
- CapsLock を Left Control にする
- US 配列にしたせいで Space になってしまう無変換キーを IME 起動キーにする
- US 配列にしたせいで Space になってしまう変換キーを変換キーに戻す
です.手順は以下の通り.
- yamy をダウンロードする.今回 DL したのは "YAMY 0.03 (UNICODE)"
- 何処でもいいので展開する.
- yamy.ini の escapeNSLKeys = 0 を 1 に変更する.
- yamy.exe と同じ階層に .mayu を用意する
- yamy.exe を「管理者として実行」する.
.mayu ファイルの内容は以下の通り.
include "109.mayu" include "104on109.mayu" def subst *RightSquareBracket = *Enter def subst *E0英数 = *E0英数 mod control += E0英数 key *E0英数 = *LControl def subst *変換 = *変換 def subst *E0無変換 = $ToggleIME
注意する点は,窓使いの憂鬱で「英数」「無変換」と書かれていたものを「E0英数」「E0無変換」と書く必要があること.E0 (O (alphabet) じゃなく 0 (zero)) であること注意.
"def subst *E0英数 = *E0英数" の行の設定は無意味に見えるが,その理由は日本語キーボードで英語配列 + 色々な設定 (Windows XP) - かおすふぃーるど - kaosfield Blog (私の過去のエントリ) を参照.
参考サイト
- Windows 7でCtrlとCapsLockを入れ替える方法 - ひとりしずかに。
- チケット #17575: 「英数(CapsLock)」「半角・全角」「ひらがな」の3キーが正しくフックできない - Yet Another Mado tsukai no Yuutsu - SourceForge.JP
- Vista/Windows 7におけるキーボードカスタマイズ問題 - A Successful Failure
ちなみに .mayu ファイルは普通にファイル名変更では作れないので,例えば a.txt を .mayu の内容で編集しておいて,コマンドプロンプトで
move a.txt .mayu
としてやれば良い.
窓使いの憂鬱 for Happy Hacking Keyborad Professional 2 (HHK Pro2)
基本的に高性能過ぎて涎が出そうになる HHK Pro2 ですが,キーが少なくて個人的にはちょっと使い辛いと思うのも事実.(参考 : Happy Hacking Keyboard HHKB Professional2 | 標準モデル | PFU)
ということで,ディップスイッチと窓使いの憂鬱で使いやすいようにしよう!
以下の目的を達成するためのディップスイッチと窓使いの憂鬱の設定ファイルを書き記します.
以前書いた「日本語キーボードで英語配列 + 色々な設定 (Windows XP)」の設定も参考にします.
ディップスイッチは 3 と 5 を ON に,他は OFF に.
(※考えてみたらこの設定って今回の内容と本質的に関係ない気がする.)
dot.mayu とか .mayu とかに書いておくべき設定は以下の通り.
include "109.mayu" include "104on109.mayu" keymap Global def subst *Esc = *$GRAVE_ACCENT def subst S-*Esc = *$TILDE def subst *半角/全角 = *Esc def subst *変換 = *変換 def subst *無変換 = $ToggleIME
Windows XP 側では,普通に日本語キーボードのドライバを使うよう設定しておきます (つまり何もしない).
詳しい解説は… 聞きたい人はコメントして下さい.コメントしてくれたら,やる気が起動して書きます (公約).
でも keymap Global の意味とかもう大方忘れちゃってるなぁ…
まずは窓使いの憂鬱のオンラインマニュアル 7. customizeを読んだ方が早いかも…
Git 練習の件
サポーターが集まるまで毎日やるのはやめときますw
ただ,ミスった commit を無かった事にしたいとか,特定の revision まで戻って別の方向でやり直したいとかいうことを早速やる必要性が出てきたので,また色々実験してます.
そこで試行錯誤した結果は適当にメモってる (手書き) ので,それをまた適当に公開していこうかなと思います.
kezoku.com にて宣言したのは,果てさてどう扱えばいいのか… ^^;
Git を使えるようになるまで頑張る その 1
ここを見ながら適当に色々やってみた結果です.
動作環境は,さくら VPS 512 上の Ubuntu 10.04 です.
$ sudo aptitude install git-core
で Git はインストールされています (RVM のために既にインストールはしていました).
まず,使えるエディタを Vim に変更したかったので,Twitter で軽く質問的な tweet を投げました.そして返って来た返答がこちら.
$ git config --global core.editor vim
※core.editor = vim と誤って記載していたのを修正
もしくは
$ export EDITOR=vim
後者の方は,.bashrc なり .zshrc なりに書いておけばいいでしょう.
とりあえず私は前者を実行しました.このとき,何のレスポンスも無かったので変更されてるのかどうか分かりませんでしたが,Twitter で man git-var で解説を見てご覧と言われたので,見てみたら,どうやら
$ git var -l
で確認出来そうでした.実際 core.editor = vim となっていました.
また,この設定は $HOME/.gitconfig にも記載されていました.
さて,Git のいろはの最初の方だけを見ながら,ひとまず rollback 的な動作はまったく考えず,commit の繰り返しだけとにかくやってみよう,ということで実験.
$ cd ~ $ mkdir -p work/git/test0 $ cd work/git/test0
とりあえず適当に Git 実験用ディレクトリ作ってそこに移動して…
$ git init
はい,なんとこれだけでリポジトリが作られるようです.
ここで Git の幾つかの機能を実験.
$ git status $ git diff $ git log
git status で
# On branch master # # Initial commit # nothing to commit (create/copy files and use "git add" to track)
…と言われますね.
git diff は何も出ません.そりゃ何もしてないのだから差分は何も無いわけですな.
git log も
fatal: bad default revision 'HEAD'
まだログは何も無い.エラー的な文章になってる意味は分かりません.
さて,ファイルを作ってみます.
$ touch a.txt
ここで同様に 3 つのコマンドを実行してみると git status だけ結果が変わってます.
# On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # a.txt nothing added to commit but untracked files present (use "git add" to track)
ははぁ.a.txt を git add でどうにかしなさい,というような感じですね.
git add は,Git のいろはでも「追跡対象に追加する」という説明以外は特に説明もなく出てますね.
じゃあやりましょう.
$ git add a.txt $ git commit
git commit した時点で Vim が起動されたと思います.されてない人は… 環境変数読み直すとかが出来てない可能性が…?
で,この辺 Subversion と同じで私は何となく分かります.要するに,1 行目に commit message を追加すればいいのでしょう.2 行目以降の # で始まる行は,全部コメントとなり無視される…と.ああ,書かれていますね.
Please enter the commit message ... with '#' will be ignored, ...
では早速 1 行目に
add a.txt
とでも書いて,保存して終了します.
すると,おっ?何か出ましたね.
[master (root-commit) 65e64e5] add a.txt Committer: ka <ka@XXX.sakura.ne.jp> Your name and email address were configured automatically based on your username and hostname. Please check that they are accurate. You can suppress this message by setting them explicitly: git config --global user.name "Your Name" git config --global user.email you@example.com If the identity used for this commit is wrong, you can fix it with: git commit --amend --author='Your Name <you@example.com>' 0 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 a.txt
コミット出来たような気がします.
$ git log
で,何やらログが見えますね.
commit 65e64e5cb591a3f4740bf5448ede40ab18c0d812 Author: ka <ka@XXX.sakura.ne.jp> Date: Tue Sep 27 23:43:39 2011 +0900 add a.txt
さて,では a.txt をちょいと編集してみましょう.abcd とでも追記します.
で,
$ git diff
すると
diff --git a/a.txt b/a.txt index e69de29..acbe86c 100644 --- a/a.txt +++ b/a.txt @@ -0,0 +1 @@ +abcd
おっ.差分出ますね.
次は git add しないで commit してみます.
$ git commit
# On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: a.txt # no changes added to commit (use "git add" and/or "git commit -a")
エラーです.add しないと,commit 出来ないんですね.理由はまだよく分かりません.
さて,git commit には -a オプションを付けるとなんだか add をすっ飛ばせそうな雰囲気が Git のいろはの 18 ページから漂ってきます.試しましょう.
$ git commit -a
おお!エディタ開きますね!で,同じく commit message を書いて,保存して終了.
[master 0716bf5] add abcd to a.txt Committer: ka <ka@www8070u.sakura.ne.jp> Your name and email address were configured automatically based on your username and hostname. Please check that they are accurate. You can suppress this message by setting them explicitly: git config --global user.name "Your Name" git config --global user.email you@example.com If the identity used for this commit is wrong, you can fix it with: git commit --amend --author='Your Name <you@example.com>' 1 files changed, 1 insertions(+), 0 deletions(-)
commit message は add abcd to a.txt としてみました.
で,git log を見てみると…
$ git log
commit 0716bf575448159ce6e316eb11881753326e9b2f Author: ka <ka@XXX.sakura.ne.jp> Date: Tue Sep 27 23:51:41 2011 +0900 add abcd to a.txt commit 65e64e5cb591a3f4740bf5448ede40ab18c0d812 Author: ka <ka@XXX.sakura.ne.jp> Date: Tue Sep 27 23:43:39 2011 +0900 add a.txt
ふむぅ.ログ見えますね.
とりあえず,今日はここまで.