るびー めも

Ruby の学習メモを記す

Pull Request が Merge された後でしたこと

前回、github のとあるリポジトリに Pull Request したことを綴りました。

githubでPull Request送られてきたら。

人生初めての Pull Request が Merge されて、
その後に何する必要があるの?ってところを
メモにします。

自分のローカルリポジトリにある、master ブランチが古くなってるはずなので
以下で Pull しましょう。

$ git checkout master
Switched to branch 'master'
$ git branch
  RouletteClass
* master
$ git remote add upstream https://github.com/whitech0c0/LabRoulette.git #fork元
$ git pull upstream master
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 10 (delta 4), reused 9 (delta 3)
Unpacking objects: 100% (10/10), done.
From https://github.com/whitech0c0/LabRoulette
 * branch            master     -> FETCH_HEAD
Updating 4d71127..a97d447
Fast-forward
 README.md   | 48 +++++++++++++++++++++++++++--------------------
 roulette.rb | 77 +++++++++++++++++++++++++++++++++++++++-------------------------------------
 2 files changed, 68 insertions(+), 57 deletions(-)
 mode change 100644 => 100755 roulette.rb
$ git push origin master
Counting objects: 13, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 1.31 KiB | 0 bytes/s, done.
Total 7 (delta 3), reused 0 (delta 0)
To https://github.com/yuji-shimoda/LabRoulette.git
   4d71127..a97d447  master -> master

次は、Pull Request した自分の修正用ブランチを更新する。

$ git checkout RouletteClass
Switched to branch 'RouletteClass'
$ git branch
* RouletteClass
  master
$ git rebase master
First, rewinding head to replay your work on top of it...
Fast-forwarded RouletteClass to master.

これで、Merge 済みの更新リポジトリに追いつけたはずです。

上記の作業は、以下を参考に作業しました。

GitHubでプルリクエスト用ブランチを保守するメモ

github の Pull Request に初挑戦。

git や github の使い方をいまいち分かっていないので、お勉強。

こんなブログ記事を見つけました。
ソーシャルコーディング

実際、複数人でWEB上で開発するとなると github で Pull Request は避けて通れないはず

手順は、以下です。(初心者なので間違ってたら、バシバシ指摘してください)

  1. github のリポジトリで、Fork をクリック
  2. ローカル環境で git clone する
  3. 修正用のブランチを作成
    • $ cd LabRoulette
    • $ git checkout -b RouletteClass
  4. 各種のソースコードを修正したら、ローカルリポジトリに add/commit
    • $ vi roulette.rb
    • $ git add .
    • $ git commit -m "commit message."
  5. github のフォークしたリポジトリに、push
    • $ git push origin RouletteClass
  6. github のページから、pull request ボタンをクリック

とりあえず、はじめての Pull Request に挑戦してみました。

もっと、他にも便利な機能があるんだろーなーと感じた次第

Ruby で RSS Reader の作成(その4)

今回は、すこし趣旨をずらしてみます。

Qiita にこんな情報が落ちてました。
OpenFastladderをherokuにデプロイする方法

最近、ローカル環境で動かしている Fastladder を heroku 環境で動かしたいなぁと
すこし挑戦してみました。

手順は、Qiita の投稿どおりです。


動かしてみた際の、ログイン画面はこんな感じ

f:id:yuji_shimoda:20130520231241p:plain

実際に、フィードを読み込ませた際の画面は、以下

f:id:yuji_shimoda:20130520231351p:plain

こんな簡単に My RSS Reader が出来てしまうのも
オープンソースFastladder と 無料の heroku 環境のお陰ですね。

少しいじって遊んでみます。
#本格的に使いこなすなら、有料を検討したほうが良いと書いているので
#もっと自由度の高い VPS をレンタルしたほうがいいのかな〜

ブログのデザイン変更します。(しました)

初めてブログにコメント貰えたんですが、以前のデザインだと
あまりにもコメントが読みにくかったのでちょっと変えてみました。

レイアウトとか、崩れたりすれかもしれませんが
今後もちょいちょい変えるかもしれません、、、

Ruby で Thread を使う(その2)

RSS Feed を マルチスレッドで取得するテストコードを作成。
ブログにソースコード書いても読みにくいので、github 見てください。
ちなみに、スレッド使ってない方はこっち

処理の概要は、以下です。

 スレッド版
 subscriptions.xml に記載された Feed のアドレスを取得して、
 登録件数分のスレッドを生成。RSS ライブラリで Feed のタイトル、リンク、記事を
 標準出力に対してHTML形式で出力する。

 スレッド使ってない方は、上の作業を地道に24回繰り返す。

なぜ、24件かというと普段チェックするニュースサイトの登録件数が24件だから。

$ grep xmlUrl subscriptions.xml | wc -l
      24

まずはスレッド版のテストコードから。
最初、time コマンドで計測しながら
出力されるHTMLコードの行数を調べてみた。

$ time ./parallel.rb | wc -l
    3294

real	0m3.779s
user	0m1.985s
sys	0m0.152s
$ time ./parallel.rb | wc -l
    3294

real	0m3.220s
user	0m1.963s
sys	0m0.145s
$ time ./parallel.rb | wc -l
    3294

real	0m5.674s
user	0m1.991s
sys	0m0.149s
$ time ./parallel.rb | wc -l
    3294

real	0m3.191s
user	0m1.955s
sys	0m0.158s
$ time ./parallel.rb | wc -l
    3294

real	0m4.874s
user	0m1.974s
sys	0m0.153s
$ time ./parallel.rb | wc -l
    3294

real	0m5.715s
user	0m1.977s
sys	0m0.154s

計測した結果、TAT が安定しない、、、
なんでかなー、なんでかなーと考えていて
はたと気づく。#記事の更新も、そんなに頻繁にしてなさそう

手動で、ぐだぐだ実行してるから
Ruby VM の起動に掛かる時間が、
一定してないんだろう、、、多分

というわけで、以下のような
シェルスクリプトにより連続実行テスト。

$ cat test.sh
#!/bin/sh
# by Yuji Shimoda

COUNTER=0

while :
do
  if [ $COUNTER -ne 10 ]; then
    time ./parallel.rb | wc -l
    COUNTER=$(($COUNTER+1))
  else
    exit
  fi
done

多分、TAT が安定するはず。

$ ./test.sh 
    3286

real	0m5.139s
user	0m1.996s
sys	0m0.150s
    3286

real	0m2.057s
user	0m1.922s
sys	0m0.140s
    3286

real	0m2.083s
user	0m1.948s
sys	0m0.141s
    3286

real	0m2.095s
user	0m1.949s
sys	0m0.140s
    3286

real	0m2.063s
user	0m1.926s
sys	0m0.144s
    3286

real	0m2.466s
user	0m1.949s
sys	0m0.144s
    3286

real	0m2.055s
user	0m1.925s
sys	0m0.141s
    3286

real	0m2.093s
user	0m1.955s
sys	0m0.147s
    3286

real	0m2.094s
user	0m1.960s
sys	0m0.142s
    3286

real	0m2.099s
user	0m1.951s
sys	0m0.141s
$ 

うん、安定した。
1回目のロードで時間が掛かってるけど、2回目以降は
キャッシュに載っかってるんで早い早い。
おおよそ、2 sec 程度

次は、スレッドなし版
test.sh を書き換えてテスト

$ ./test.sh 

real	0m7.561s
user	0m1.938s
sys	0m0.130s

real	0m5.948s
user	0m1.941s
sys	0m0.122s

real	0m7.536s
user	0m1.904s
sys	0m0.120s

real	0m5.093s
user	0m1.918s
sys	0m0.119s

real	0m5.987s
user	0m1.929s
sys	0m0.121s

real	0m5.223s
user	0m1.937s
sys	0m0.124s

real	0m7.301s
user	0m1.907s
sys	0m0.123s

real	0m4.403s
user	0m1.904s
sys	0m0.120s

real	0m4.466s
user	0m1.915s
sys	0m0.125s

real	0m4.907s
user	0m1.933s
sys	0m0.122s
$ 

えらい不安定やな、、、
thread 生成しない分、sys の使用率は若干低いめ
ただし、目に見えて分かるレベルの TAT の悪さ。
早くても 4.4 sec 〜 7.5 sec も処理に時間が掛かる。

最終的には、取得したフィード情報は
標準出力に出力する代わりに、SQL 発行して
データベースに登録する。
PostgreSQL とかDBの処理性能にもよるけど、スレッド版の方が
早く処理出来るということは明らかかな。

以上

Ruby で RSS Reader の作成(その3)

livedoor Reader」の英語版である「Fastladder」のオープンソース版が
github にあります。

https://github.com/fastladder/fastladder.git

livedoor Reader って、あまり使い易いとは思いませんでしたが
Rails ベースのアプリケーションとして Open Source Software として
公開されているというのはすごいです。
#しかも、MITライセンス(`・ω・´)

RSS リーダーを作成するにあたって、
今の設計では、完成するとは思えないので
Fastladder の設計を参考にしたいと思います。

Google reader 終了まで、あと1ヶ月半しかないんだよなー(; ・`д・´)
#間に合うかな、、、

Steve Jobs 読了

タイトルのとおり。








また後日、感想文は書きたいと思いますが
日頃お世話になっている、Apple 製品がどのような思いで作られたのか
この本を通して、凄く感動しました。

Steve Jobs の凄いところは、CEO ってことですね。
本の中に書いてある事実はすべてではないと思いますが
CEO クラスの人間がすることではないと思いました。