はなちin

いいコードのにおいのする大人になりたい

こんにちは。 RSpecでテストを書いてリファクタリングし、GitHubでPull Requestを送ってみました。(実際に送ったPull Requestはこちら)

動機

リファクタリング:Rubyエディション をつい先日読みおえました。 あとCodeSchoolRSpecのコースを一通りやりおえました。 Web DB+でGitHubの記事も読みました。 これは実際に書いてみたり、やってみないと、アホな僕には身に付きません。

とりあえず身近な人のプロジェクトで実践してみようと、 @_attonさんが作っている@ngskbotのテストをRSpecで書いて、GitHubでPull Requestを送ってみました。

参考にした記事

WEB+DB PRESS Vol.69 と、GitHubへpull requestする際のベストプラクティス

やってみて

リファクタリング:Rubyエディション にも書いてありましたが、リファクタリングすることで、自分が書いたことがないコードの理解を深めることが出来ました。 あとテストを書いておくとリファクタリングばんばん出来て楽しい。 この変更が何か壊したかびくびくしなくていいし、壊してないか確認するのも一度書けば自動で出来るので心理的にすごく楽です。

TDDについての記事を読んでも結局1回もやったことがなかった気がするので、やってみました。

こういう気持ちよさ、安心感ってやってみないと身に付かない。

今後も実践していきたい。

Okinawarb

先週のOkinawa.rbについて記事を書きます。 気づけば1週間たち、今週のOkinawa.rbの前日になりました。

単項演算子のオーバーライド

@naopontanさんがQiitaのGoogleのプログレスバー作ってみたの記事中のコードについて疑問があったらしい。 具体的には+@メソッドのオーバーライドの部分。 つい前日に僕もExtending Ruby with Rubyの中で、+@メソッドについて調べていたので、理解を深めるためにコードをいくつか書いた。

単項演算子とは?

a + bのようにaとb、2つの項を取る演算子を二項演算子という。 単項演算子は-a+aのように、1つの項を取る演算子のことをいう。

a + bは実はaのインスタンスメソッド+の呼び出しなので、a.+(b)こうい風に書くこともできる。 インスタンスメソッドなので、オーバーライドすることも出来る。

二項演算子の+をオーバーライドするときはdef +; endと書く。 単項演算子の+をオーバーライドするためにはdef +@; endと書く。 詳しくはクラス/メソッドの定義、演算子式の定義を見ましょう。

試したコード

1
2
3
4
5
6
7
8
9
class Fixnum
  def +@
    '+@ override!'
  end
end

# +3はリテラルの3と認識されるため単項演算子の+は呼び出されない。
puts +3 # => 3
puts +(3) # => +@ override!

まとめ

しかし1週間もたつと忘れてしまいますね。 他にはTitanium Studioの話をしたり、KLabのプロトタイピングラボの話を教えていただきました。 今後は毎週記事を書こうと思います。

拝啓@Cloneko様

拝啓@hanachin_様が来てたのでお返事書く。

作りたい時にサービスをぽんぽんと出してるけど、しっかりとは育ててないですね。

最近出したもの

その前に最近、何だしたっけ? 半年前ぐらいまで入れていいなら

  • Favtileはレキサスアカデミー終わるまで頑張って作ったけど更新停止中。
  • きょうのまんこは1万PV稼いだり、勃発的にPVが来るけど基本放置。
  • ひわいったーはOJAG行った後、発作的に作ったけど放置。
  • 無修正パンチラ画像も台風の時にパンチラサービス作りたくて突発的に作ったけど放置。
  • 尻拭いはきみひとさんのアレ。利用者居ない。放置。
  • Twileaksは法的に責任取れないので停止。放置。次ぎたい人が居たからソース渡した。
  • Kaneyaruは金クレのぱくり。アイコンのAPI動いてないっぽい。利用者いない。放置。
  • ギー沖のゴミ捨てお知らせbotはHerokuで動かすのだけ僕がやった。稼働中だけど捨てる人だいたい決まってる。
  • @cota2nfavはcota2nのツイート10分おきに全部ふぁぼる。稼働中。だれとく。
  • TwitterでハッシュタグつけてつぶやくとPivotalTrackerのStoryに入れるスクリプトはわりかし便利そう。稼働中。少しいじればいろいろ使える。
  • heroxflexは作ってたけど未完。
  • おんどぅる語掲示板は未公開。Railsでさくっ。
  • twicひのくまさんのブログみて突発的に作ったけどしょぼいし時間かかりすぎたしで公開してない。
  • XHAGO3で使ってもらったいいねのやつはどっかのPaaSで動かしてたけど、今動いてない。
  • ホモスレbotは僕のローカルで動かしてたやつが死んで今動いてない。次時間あるとき(1hぐらい?)Herokuでやる。

ぐらいか。あとは仕事関連。

質問とか本文への自分なりの考え

こたえていく。

今の時点で@hanachin_の子供達(作ったサービスとか企画したネタ)を育っててますか?

育ててないですね。でも僕は少しだけ育ってます。

  • きょうのまんこ公開後、くちこみで噂され1日で1万PVをたたき出す。はてブやTogetterやTwitterで口コミ的に広がると凄くアクセス伸びることを体感。
    • 「つぶやきたくなる」 要素を入れることが重要なのかも。
      • この場合タイトルが秀逸だったのかも。同様のコンセプトの「無修正パンチラ」はバズってない。
      • 有名な人やネタクラスタに拾われると一気にアクセス増える。
    • はてブのホッテントリや注目のエントリは協力を頼んだりすれば狙って出せる。
    • 最初にTwitterで広まった場合、Togetterでまとめ直して再度Twitter層に届けるのは効果的
      • まだ見ていない層に届けることが出来る。
      • Togetter見てるのもTwitter見てる層と被るので、うけるツボが同じなのかもしれない。
  • アクセスが落ちる前に別のソーシャルメディアで再度話題にしてアクセスかせぐなどする。アクセス解析重要。
    • リアルタイムにアクセス数を見て、落ちてきたところでTogetterのまとめを入れるなどしてアクセスかせいだ。
    • Twitter、Togetter、そして前回足りなかったのはNAVERまとめかな、とおもっている。
  • 一発ネタ系のものは繰り返しアクセスされることなかなかはないが、ネタがソーシャルメディアでぶり返してまたアクセス増えることはある。
    • この点、使ってくれてる人に不便な思いをさせてるのはもうしわけない。Favtileとか
  • その人に合えば、サービスを日常的に使ってくれる人はいる。

    • その人がどう使っているか、もっといいアクセス解析を入れた方がいいかも。
    • 聞いてみることも重要。
  • 自分で使うものはメンテナンスしたくなる

    • botとか特にそう。
    • 基本的に動かした後、手を加えなくてもいいものは、楽。
    • 作ったけど更新してないもの、放置しているものの中には更新する気持ちが全くおきない本当に一発ネタなものもある。
      • プログラミングの勉強には役立ってるかもしれない
        • リファクタリングまでやればその勉強にもなるのか?
        • ただ無意識に書くだけでは役立ってると言えないのでは?
        • Herokuにあげるまでの手順には慣れた感じ

子供とサービスを例えるのはなんとなく違う気がします。 僕に子供が出来たらさすがにそれは育てるとおもいます(僕がおもった以上にクズじゃなければ)。 扶養義務がありますし、親心もある(はず)なので、大切に育てます。 僕は子供に見返りは求めたくないです。

でもサービスを育てるのは子育てとは違う感じがします。

僕が何か作るときは

  • かっとなって作った。
  • 作りたい欲求が溜まってた。
  • 作ってと言われた。
  • 生活のため。

とかそういうことが多いです。 作ったものを育ててもこれ以上得るものがないのに無駄にエネルギーを使うことが出来ません。

それなら、ここに書いてない開発中のサービスのほうにもっとエネルギーを使いたい。

人とちがう行き方をしようとすると学習コストをふつーの人より多くかけないといけないよね?

人と違う生き方をしようとすると、人とは違うところに学習コストをかけることになるとおもいます。

その人が学習コストを多くかけないといけないかどうかは、その人がどう生きたいかによって決まるとおもいます。

でも気を付けてね。自分の正義と反対の正義の人がつっかかってくるといろいろめんどうだから。(例:おいら)

なのでこういうブログは書かない(意見が対立すると面倒だから)。書かないとおもってたのに書いてる…!

とくに某専門学校のエンジニア科のせんせー方はプロセスを大切にしているせんせーも多いのです。そこはいろいろ理解してあげてね。

いろいろとかプロセスとか抽象的すぎてわかりません><

僕も大事にしてますよ。

足りてないのは

  • いつでも僕が作りたいものを作れる力を維持すること。
  • 自分のなかでダメだとおもっているものごとを改善すること。
  • 改善するために考えること。

かな。

まとめる的ななにか

育ててるか?はおっしゃるとおりだと思うので今後に期待してください。 最近は調べものしすぎてアウトプットしてない感じが凄くするので、ブログもいっぱい書いていこうとおもいます。 まずは僕自信のコンテンツを育てたい。

Herokuで日本語環境のword Pressを動かし、Postgre Sql:Devを使う。

fluxflexがサービス終了したので、fluxflexで動かしていたギー沖のWordPressを再度立ち上げるために試してみます。

記事のエクスポートがある状態です。

1.Herokuで動くWordPressの環境

日本語環境のwordpressをherokuで動かす方法を参考にしながらググりつつ進めて行きます。

リポジトリをとってきてHerokuにあげる

GitHubからソースコードをとってきます。

mhoofman / wordpress-heroku

今回はギークハウス沖縄のWordPressなので分かりやすくgeeoki-wpという名前にしとく。

1
2
3
4
5
6
7
8
9
10
git clone https://github.com/mhoofman/wordpress-heroku.git geeoki-wp
cd geeoki-wp
heroku create --stack cedar geeoki-wp
git checkout -b production
cp wp-config-sample.php wp-config.php
echo '' > .gitignore
git add .
git commit -m 'initial commit'
git push heroku production:master
heroku addons:add heroku-postgresql:dev

DB周りの設定

Shared DBは推奨されてなかったとおもうので、Postgresql Devを入れます。容量も1TB程度使えますしこっちがいいでしょう。 heroku addons:add heroku-postgresql:devでエラーが出る場合はgem update herokuしましょう。

無事完了するとHEROKU_POSTGRESQL_ROSE(GOLDの部分は人によって変わる)が追加されているはずです。 忘れた/見えない場合はheroku pg:infoで見ることが出来ます。

次はwp-config.phpファイルを書き換えます。DATABASE_URLHEROKU_POSTGRESQL_ROSE_URL(ROSEの部分は人によって違います)にします。

wp-config.php
1
2
// ** Heroku Postgres settings - from Heroku Environment ** //
heroku addons:add he$db = parse_url($_ENV["HEROKU_POSTGRESQL_ROSE_URL"]);

次にwp-content/pg4wp/driver_pgsql.phpを書き換えます。WordPressはインストール時に、デフォルトだとtemplate1というdbに接続するようです。しかし、Herokuの場合そのDBに接続出来なくて、エラーが出ます。

なので、heroku pg:credentials HEROKU_POSTGRESQL_ROSEして表示されたdbnameを設定します。(もっといい方法あったら教えてください)

wp-content/pg4wp/driver_pgsql.php
1
2
3
  // While installing, we test the connection to 'template1' (as we don't know the effective dbname yet)
  if( defined('WP_INSTALLING') && WP_INSTALLING)
      return wpsql_select_db( 'your_db_name_here');

書き換えたら、git addしてgit commitして、git push production:masterしましょう。

追加しおわったらheroku openで開いてみましょう。 設定画面が現れたら、成功です。

日本語環境の設定

デフォルトだとmbstringが使えないので、エラーが出ることがあるとのこと。 yandod/phpinfo-herokuからmbstringのモジュールをとってきて入れることにします。

mbstringをとってくる
1
2
wget https://github.com/yandod/phpinfo-heroku/raw/master/mbstring.so
wget https://raw.github.com/yandod/phpinfo-heroku/master/php.ini

2.ローカルでの環境を整える

Herokuではファイルの書き込みが出来ないため、ファイルを書き換える動作はローカルで行う必要があります。 例えばWordPress本体のアップデートや、プラグインのインストール・アップデート、テーマのインストールなどなど。

そのために、まずはローカルでWordPressを動かす環境を整えます。 僕はMacを使っているので、MAMPを使います。

試しながら書いてるので一部抜けてるコマンドなどがあるかもしれないです

Herokuにあげてるリポジトリにリンクを張る

/Applications/MAMP/htdocs/の中にシンボリックリンクを張ります。

シンボリックリンクを張る
1
ln -s ~/heroku/geeoki-wp /Applications/MAMP/htdocs/geeoki-wp

DBの接続を書き換える

ローカルだとローカルのPostgreSQLに接続するようにします。dbnameはめんどいのであわせる。 とりあえずPostgreSQLをbrewでインストール

PostgreSQLをbrewでインストール
1
2
3
4
5
6
brew install postgresql
mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
initdb /usr/local/var/postgres
postgres -D /usr/local/var/postgres

WP用のユーザーとデータベースを作ります。

ユーザーとデータベースの作成
1
2
createuser -P wp
createdb geeoki -O wp

WordPressの設定ファイルを書き換えます。

wp-config.php
1
2
3
4
5
6
// ** Heroku Postgres settings - from Heroku Environment ** //
if ($_SERVER['REMOTE_ADDR'] === '::1') {
  $db = parse_url('postgresql://wp:wp@127.0.0.1:5432/geeoki');
} else {
  $db = parse_url($_ENV["HEROKU_POSTGRESQL_ROSE_URL"]);
}

3.データを入れ直す

1と2までやればだいたい大丈夫でしょう。多分うごくはずです。git add .してgit push heroku production:masterしましょう。

WPからエクスポートしたデータを、管理画面からインポートします。

4.細かい設定

  • 日本のタイムゾーンを設定するためにheroku config:add TZ=Asia/Tokyoします。
  • ローカルのWordPressの管理画面から、Multibyte patch入れる。
  • ToolsのImportから、WordPressの記事やBlogger、Tumblrの記事をImportするためのプラグインを入れる。
  • Herokuにpushして、管理画面からプラグインを有効化する。

5.DONE

たぶんこれで動きます! あとは使いながら覚えましょうかね。

プラグイン、テーマのインストール等はローカルで行って、あとはそれをpushして、有効化するなどすれば、Herokuでも動くはずです。

問題がありそうなのは、画像アップロードかな。S3のプラグインを入れれば良さげな感じですがお金がかかるので躊躇。

ここまでいろいろ書き換えたり結構面倒くさいのでもっと楽な方法がないか知りたいですね。 DATABASE_URLは固定で分かりやすいので、PostgreSQL:Devでもそこらへんなんとかならないのかなぁ。

ターミナル関係の環境設定

今日はiTerm2 + zsh + tmux + vim で快適な256色ターミナル環境を構築するを見ながら少し環境設定。

Gitのログ見るためにTigを入れてみた。めっちゃ便利。インストールはbrew install tigでいける。

同じブログ見ながらbrew install tmuxでtmux入れる。設定ファイルは自分で必要な分だけ書く。 まあこんなもんでいいでしょう。

1
2
3
4
5
6
7
8
9
10
# utf setting
set-window-option -g utf8 on

# set the prefix to ^T
set-option -g prefix C-t
unbind-key C-b
bind-key C-t send-prefix

# 256 terminal
set-option -g default-terminal "screen-256color"

最後のまとめの通り、スポーツとおなじで反復練習必要だとおもう。入れただけだと使わなくなりそうだし。出来るだけ脳みそ使わないでよくなるまで体にしみ込ませて行きたい。 zshもtmuxもvimもgitも、スポーツと同じく反復練習で体に憶えさせる必要があります。辛抱強く使っていれば、考える前に勝手に指が動くようになってるので、今まで敬遠していた人もあきらめずに頑張ってみてください。俺も、まだまだ精進しますので。

ついでなのでiTerm2をCommand + W で閉じないようにする

そのまえにスクリーンショットのファイル名をリネームした。ワンライナー可愛い。もっと奇麗に書きたい。

1
ruby -e 'ARGV.each {|f| puts File.rename($&, "#{$1}.png") if f =~ /shortcut.00(\d).png/}' *

設定手順

環境設定からキーボードを選択 キーボードショートカットタブを選択 左側のメニューからアプリケーションを選択 +を押して設定を追加する アプリケーションから、iTerm.appを選択する メニュータイトルからCloseを選択 新しいショートカットを押す 変更前はメニューのCloseの横のショートカットは、⌘W 変更後は^⌘Wになってる

Tuningathon Prepare

各種レポート

チューニンガソンのページからリンクが貼ってある。適宜カンペのように見る。

環境Linux AMI

microでテストする。 とりあえず測定方法を調べる。

レギュレーション

第2回レギュレーション等詳しい

http_loadの使い方など書いてる。

前回のレギュレーション

第2回のblogから引用。

1
http_load -parallel 4 -fetches 100 urlsで、urlsは元のクローンが200を返すURLがランダムに1000件入ったもの。

prepare

SELinuxきる

設定例

1
2
3
getenforce #確認
setenforce 0 # 無効
vi /etc/sysconfig/selinux # 設定ファイルをSELINUX=disabled

各種ビルドする準備

sudo yum groupinstall "Development Tools"

apache関連をインストール

httpd-develを入れるとabが入る

sudo yum install httpd httpd-devel

http.confでいらないモジュールを読み込まないようにコメントインする。

php関連をインストール

sudo yum install php php-mbstring php-mysql php-devel

MySQLをインストール

sudo yum install mysql-server

自動起動

apache,mysqlデーモンの自動起動チェック

1
2
sudo chkconfig --list httpd
httpd              0:off    1:off    2:off    3:off    4:off    5:off    6:off
1
2
sudo chkconfig --list mysqld
mysqld             0:off    1:off    2:off    3:off    4:off    5:off    6:off

apacheの自動起動を設定

1
sudo chkconfig --level 35 httpd on

mysqlの自動起動を設定

1
sudo chkconfig --level 35 mysqld on

apacheデーモン起動

1
/etc/init.d/httpd start

mysql

1
/etc/init.d/mysqld start

測定ツール

前回の優勝者の記事を見ながらすすめる。

ab

apache-develを入れる。

http_load

公式サイト

参考: wgetは保存せずに、直接展開できるんだよ

オプションはhttp load - wikiduccaを参照。

インストール手順

1
2
3
4
5
6
cd
wget -O - 'http://www.acme.com/software/http_load/http_load-12mar2006.tar.gz' | tar zxvf -
cd http_load-12mar2006/
make
sudo mkdir -p /usr/local/man/man1
sudo make install

paralell

測定とうか同時に複数のページにアクセスするツール。 前の優勝者が、キャッシュにページを載せるために使っていた。 詳しい使い方はこのgist参照。

1
2
3
4
5
6
cd
wget -O - http://ftp.gnu.org/gnu/parallel/parallel-20120622.tar.bz2 | tar jxvf -
cd parallel-20120622/
./configure
make
sudo make install

テスト用WordPressで測定

テスト用に

1
2
3
4
5
cd
wget -O - http://wordpress.org/latest.tar.gz | tar zxvf -
mysql -u root
create database wpdb;
grant all on wordpressdb.* to 'wpadmin'@'localhost' identified by 'foobar';

入れ方の参考サイト

1
2
3
4
sudo ln -s ~/wordpress/ /var/www/wordpress
sudo vi /etc/httpd/conf/httpd.conf
sudo chown -R apache:apache wordpress/
sudo chmod 755 ~

テスト測定

before

1
2
3
4
5
6
2.2152 fetches/sec, 67129.3 bytes/sec
msecs/connect: 0.10885 mean, 0.152 max, 0.029 min
msecs/first-response: 1335.43 mean, 7194.22 max, 443.895 min
87 bad byte counts
HTTP response codes:
  code 200 -- 100
1
2
3
4
5
6
7
8
100 fetches, 4 max parallel, 3.16815e+06 bytes, in 89.1417 seconds
31681.5 mean bytes/connection
1.12181 fetches/sec, 35540.6 bytes/sec
msecs/connect: 3.59099 mean, 348.376 max, 0.029 min
msecs/first-response: 2529.95 mean, 7677.19 max, 627.21 min
84 bad byte counts
HTTP response codes:
  code 200 -- 100
1
2
3
4
5
6
7
8
100 fetches, 4 max parallel, 3.14057e+06 bytes, in 125.027 seconds
31405.7 mean bytes/connection
0.799825 fetches/sec, 25119 bytes/sec
msecs/connect: 4.78446 mean, 468.306 max, 0.029 min
msecs/first-response: 3721.56 mean, 7807.18 max, 599.578 min
73 bad byte counts
HTTP response codes:
  code 200 -- 100

after apc

1
2
3
4
5
6
7
8
100 fetches, 4 max parallel, 3.19567e+06 bytes, in 11.2148 seconds
31956.7 mean bytes/connection
8.91681 fetches/sec, 284952 bytes/sec
msecs/connect: 0.10083 mean, 0.143 max, 0.028 min
msecs/first-response: 247.546 mean, 1252.08 max, 160.334 min
90 bad byte counts
HTTP response codes:
  code 200 -- 100
1
2
3
4
5
6
7
8
100 fetches, 4 max parallel, 3.11304e+06 bytes, in 10.6904 seconds
31130.4 mean bytes/connection
9.35417 fetches/sec, 291199 bytes/sec
msecs/connect: 0.09981 mean, 0.14 max, 0.029 min
msecs/first-response: 229.447 mean, 824.92 max, 161.934 min
77 bad byte counts
HTTP response codes:
  code 200 -- 100

5.4.4(no apc)

1
2
3
4
5
6
7
8
100 fetches, 4 max parallel, 3.0304e+06 bytes, in 129.405 seconds
30304 mean bytes/connection
0.77277 fetches/sec, 23418 bytes/sec
msecs/connect: 0.1025 mean, 0.141 max, 0.03 min
msecs/first-response: 4061.1 mean, 10796.7 max, 533.722 min
72 bad byte counts
HTTP response codes:
  code 200 -- 100
1
2
3
4
5
6
7
8
100 fetches, 4 max parallel, 3.05795e+06 bytes, in 124.715 seconds
30579.5 mean bytes/connection
0.801828 fetches/sec, 24519.5 bytes/sec
msecs/connect: 4.78716 mean, 468.183 max, 0.029 min
msecs/first-response: 3942.79 mean, 8519.66 max, 482.801 min
72 bad byte counts
HTTP response codes:
  code 200 -- 100
1
2
3
4
5
6
7
8
100 fetches, 4 max parallel, 3.3334e+06 bytes, in 139.018 seconds
33334 mean bytes/connection
0.719331 fetches/sec, 23978.2 bytes/sec
msecs/connect: 0.10252 mean, 0.141 max, 0.03 min
msecs/first-response: 4370.38 mean, 7944.66 max, 672.311 min
69 bad byte counts
HTTP response codes:
  code 200 -- 100

apc

pearインストール

sudo yum install php-pear

APCをインストール

sudo pecl install APC

apcの設定ファイルを作成

sudo echo “extension=apc.so” > /etc/php.d/apc.ini

apacheリスタート

sudo service httpd restart

php5.4のコンパイル

computed gotoはやるべき。Pythonでもできるぽい。

1
2
3
4
sudo yum -y install libxml2-devel openssl-devel pcre-devel bzip2-devel gmp-devel mysql-devel sqlite-devel
cd php-5.4.4/Zend
php zend_vm_gen.php --with-vm-kind=GOTO
cd ..
1
CFLAGS="-O3 -march=native -pipe" './configure' '--with-zend-vm=GOTO' '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-amazon-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib64' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--disable-debug' '--with-pic' '--disable-rpath' '--without-pear' '--with-bz2' '--with-exec-dir=/usr/bin' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--with-xpm-dir=/usr' '--enable-gd-native-ttf' '--with-t1lib=/usr' '--without-gdbm' '--with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-pcre-regex=/usr' '--with-zlib' '--with-layout=GNU' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--with-kerberos' '--enable-ucd-snmp-hack' '--enable-shmop' '--enable-calendar' '--without-sqlite' '--with-libxml-dir=/usr' '--enable-xml' '--with-system-tzdata' '--with-mhash' '--with-apxs2=/usr/sbin/apxs' '--libdir=/usr/lib64/php' '--enable-pdo=shared' '--with-mysql=shared,/usr' '--with-mysqli=shared,/usr/lib64/mysql/mysql_config' '--with-pdo-mysql=shared,/usr/lib64/mysql/mysql_config' '--with-pdo-sqlite=shared,/usr' '--without-gd' '--disable-dom' '--disable-dba' '--without-unixODBC' '--disable-xmlreader' '--disable-xmlwriter' '--without-sqlite3' '--disable-phar' '--disable-fileinfo' '--disable-json' '--without-pspell' '--disable-wddx' '--without-curl' '--disable-posix' '--disable-sysvmsg' '--disable-sysvshm' '--disable-sysvsem'
1
CFLAGS="-O3 -march=native -pipe" make

export PATH=”~/.rbenv/bin:$PATH” eval “$(rbenv init -)” rbenv install 1.9.3-p194 rbenv install 1.8.7-p358 rbenv global 1.9.3-p194 rbenv global 2.0.0-dev

CFLAGS=”-g -O2 -march=native -pipe” gem install rails mysql therubyracer refinerycms CFLAGS=”-g -O2 -march=native -pipe” bundle install CFLAGS=”-g -O2 -march=native -pipe” gem install thin CFLAGS=”-g -O2 -march=native -pipe” gem install unicorn

きょうはokinawa.Rb

【インタビュー】失敗してもOK、誰でもMakerになれる - Makeファウンダー Dale Dougherty氏 | エンタープライズ | マイナビニュース

1
2
3
4
──失敗してもいい、ということをどう伝えていけば良いのでしょう。
デール氏:どうやってもいい、ということを伝えている。学校では決まったルートを教えてしまうので、そこから外れたものは失敗だと思ってしまうが、実際にはそうではないということを示してやる必要がある。

ルートから外れたものを失敗として排除しない、失敗を再定義することが必要だと思う。

この記事よんでここが好きだった。

Okinawa.rbは人がたくさん来てくれた。ありがとうございます。 KBCでtouharaさんが宣伝してくれたみたい。

今日来てくれた人が継続的にRubyを学んで、ハマってくれて、もっと学内の人にRubyいいよ!っていうのすすめてくれて、Rubyistが増えたらうれしいな。

ねむてー

「日本語がおかしい」ブログの文章を、みんなで書き直して、共有するサービス欲しい。そのサービスに自分の書いた文章を投稿して、おかしなところを直してもらいたい。

作業ログ

見た

http://ushigyu.net/2012/06/04/the_happy_secret_to_better_work/

Titanium

これまで使ったことないモジュールは、ビルドされるとき外されてるので、使おうとするとエラーが出る。 クリーンしてビルドしたら問題なく動く。build/iphone以下を消せばよいらしい。(参考: Titanium.UI.iPhone’ [undefined] is not an object)

今日は有意義だったか?

まだまだ未熟。

Guard

Guard用のgemを入れる。

Gemfile
1
2
gem 'guard-rspec'
gem 'growl'

次にguard init rspecして、Guardfileを作成。

先頭の行を以下のような感じで書き換えた

Guardfile
1
guard 'rspec', :version => 2, :notification => true, :all_after_pass => false do

:notificationは通知のため、:all_after_passはテスト中にこけたらそれ以降のテストを実行しない。(的な感じだったと思う)

後はguardを実行するだけ。specファイルやcontrollerをいじると自動でテストが走り、Growlの通知がくる。

Jenkins

Ruby on Rails Tutorialをちまちま読み進めている。テストも結構書くようなので、ついでにJenkins試してみようという魂胆。

導入

1
2
3
4
brew install jenkins
mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/jenkins/1.464/homebrew.mxcl.jenkins.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

Gitのプラグインを導入したく、Jenkinsの管理からプラグインマネージャを開いた。 しかし、利用可能タブにGit pluginが表示されていなかった。

利用可能タブにいろいろ表示するためには、プラグインマネージャの高度な設定から、アップデートサイトの下の保存ボタンを押す。 Jenkinsの設定画面

するとこのようにGit Pluginが表示される。今回はRailsのカバレッジもはかりたいのでRuby metrics pluginも導入する。 Git pluginが表示される

ダウンロードして再起動後にインストールを選択して、しばらく待つと、プラグインのダウンロードがはじまる。

終わったら再起動する。

再起動する際はhttp://localhost:8080/safeRestartから再起動出来るよう。(参考: Jenkins、Webから再起動する)

システムの設定からRakeのパスを設定する Rakeの設定

RailsにJenkinsを組み込む

Rails開発でJenkinsを使ってみる | TechRacho

上記サイトを参考に進める。

Gemfilesimplecovsimplecov-rcovを追加

Gemfile
1
2
3
4
 group :development, :test do
  gem 'simplecov'
  gem 'simplecov-rcov'
 end

spec/spec_helper.rbの先頭に以下を追記

spec/spec_helper.rb
1
2
3
4
require 'simplecov'
require 'simplecov-rcov'
SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
SimpleCov.start 'rails'

新規ジョブの作成から、フリースタイル・プロジェクトのビルドを選び、プロジェクトを作成。

プロジェクトのGit項目はこんな感じ。ローカルのgitリポジトリを指定してる。 Git repository

シェルの実行でbundle installしてから、Rakeを実行するようにしている。 プロジェクトの設定から、Rakeの設定をする。高度な設定ボタンを押して、Rakefileの場所の指定などを表示する。 db:migrateしてからspecを走らせる。 Rakeの設定

あとは、Gitでcommitした時に自動でテスト走らせたい。 プロジェクトの中の.git/hooks/post-commitに設定を追加した。 このときchmod a+x .git/hooks/post-commitを実行して、post-commitに実行権限をつけるのを忘れないようにする。

.git/hooks/post-commit
1
2
echo 'Jenkins build start...'
wget -q -O - "http://localhost:8080/job/Ruby%20on%20Rails%20Tutorial/build?delay=0sec" > /dev/null

これでいいかな? とりあえず使ってみる。