$ rake cucumber 
/Users/iwazawa/.rvm/rubies/ruby-1.9.3-p194/bin/ruby -S bundle exec cucumber  --profile default
Using the default profile...
.==> Waiting for Selenium RC server on port 4444... Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
Ready!
==> Waiting for rack application server on port 3001... Ready!
15:45:47.092 ERROR - Failed to start new browser session, shutdown browser and clear all session data
org.openqa.selenium.server.RemoteCommandException: timed out waiting for window 'null' to appear
    at org.openqa.selenium.server.FrameGroupCommandQueueSet.waitForLoad(FrameGroupCommandQueueSet.java:569)
    at org.openqa.selenium.server.FrameGroupCommandQueueSet.waitForLoad(FrameGroupCommandQueueSet.java:526)
    at org.openqa.selenium.server.BrowserSessionFactory.createNewRemoteSession(BrowserSessionFactory.java:373)
    at org.openqa.selenium.server.BrowserSessionFactory.getNewBrowserSession(BrowserSessionFactory.java:124)
    at org.openqa.selenium.server.BrowserSessionFactory.getNewBrowserSession(BrowserSessionFactory.java:86)
    at org.openqa.selenium.server.SeleniumDriverResourceHandler.getNewBrowserSession(SeleniumDriverResourceHandler.java:733)
    at org.openqa.selenium.server.SeleniumDriverResourceHandler.doCommand(SeleniumDriverResourceHandler.java:399)
    at org.openqa.selenium.server.SeleniumDriverResourceHandler.handleCommandRequest(SeleniumDriverResourceHandler.java:370)
    at org.openqa.selenium.server.SeleniumDriverResourceHandler.handle(SeleniumDriverResourceHandler.java:129)
    at org.openqa.jetty.http.HttpContext.handle(HttpContext.java:1530)
    at org.openqa.jetty.http.HttpContext.handle(HttpContext.java:1482)
    at org.openqa.jetty.http.HttpServer.service(HttpServer.java:909)
    at org.openqa.jetty.http.HttpConnection.service(HttpConnection.java:820)
    at org.openqa.jetty.http.HttpConnection.handleNext(HttpConnection.java:986)
    at org.openqa.jetty.http.HttpConnection.handle(HttpConnection.java:837)
    at org.openqa.jetty.http.SocketListener.handleConnection(SocketListener.java:245)
    at org.openqa.jetty.util.ThreadedServer.handle(ThreadedServer.java:357)
    at org.openqa.jetty.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
2012-05-15 15:45:13 +0900 selenium-client received failure from selenium server:
requested:
    cmd=getNewBrowserSession
    1=*firefox
    2=http://localhost:3001
    3=
    4=
received:
    "Failed to start new browser session: Error while launching browser"
    called from /Users/iwazawa/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/timeout.rb:68:in `timeout'
F-......

(::) failed steps (::)

Failed to start new browser session: Error while launching browser (Selenium::CommandError)
/Users/iwazawa/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/timeout.rb:68:in `timeout'
/Users/iwazawa/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/timeout.rb:99:in `timeout'
./features/step_definitions/movie_steps.rb:10:in `/^I create a movie Caddyshack in the Comedy genre$/'
features/create_movie.feature:9:in `When I create a movie Caddyshack in the Comedy genre'

Failing Scenarios:
cucumber features/create_movie.feature:7 # Scenario: Create movie in genre

3 scenarios (1 failed, 2 passed)
9 steps (1 failed, 1 skipped, 7 passed)
0m40.775s
rake aborted!
Command failed with status (1): [/Users/iwazawa/.rvm/rubies/ruby-1.9.3-p1...]

Tasks: TOP => cucumber => cucumber:ok
(See full trace by running task with --trace)

Qiitaに投稿しました。

最高だと思う小説を3つあげるとしたら・・を見て、自分なら

十二国記

ハイペリオン

陋巷に在り

かな。全て長編。しかし3つだけ選ぶのは難しいですね。





会社ではGitHub、GitHub Enterprise、社内のGitリポジトリの3つ、家でもGitHub、個人Gitリポジトリの2つのGitリポジトリを使っています。

それぞれ違うsshキーを使いたいので、ssh-keygenするときにファイルを分けた場合、ssh-addコマンドで追加しておくと自動的に使ってくれるようです。

ssh-keygen -t rsa -C 'your@address.com' -f ~/.ssh/specified_filename

できた公開キーをリポジトリに登録。

ssh-add ~/.ssh/specified_filename

こうしておけば自動的に使ってくれます。

テスト。

ssh -vT git@github.com





ぴよ盛りというiPhoneゲームアプリが面白いです。

IMG_1534.png

黄色と赤のひよこを鍋の中に投げ入れて積んでいくゲームなのですが黄色4つの次に赤が来て黄色と赤はくっつくのでそれを利用して鍋の外まではみ出していくことができます。

最初の頃は適当にやっているとすぐに40個くらいからすぐに崩れてしまうのですが、だいたい80〜100はコンスタントに行ける方法が分かったのでご紹介。

序盤

まず、最初の15個までが結構大事です。

赤を2個端に1つ芯として真ん中、もしくは3個端に寄せて置くのどちらかにしたいところです。後者の場合は4個目の赤を真ん中に置いて芯にします。

図のは最高の状態にはできなかったのですが、まぁまぁ悪くない。

IMG_1538.png

端に近い二つの赤に黄色をひっつけながらフチ(縁)に乗せていきます。フチは不安定なように見えますけど、下に何もないより全然、安定していて崩れにくいのです。赤の場合も黄色二つの間に見えているフチを狙ってくっつけます。

IMG_1539.png

投げ方にもコツがあって、くっつけたい場所をまっすぐに位置合わせすると上にくっつきすぎて早々に破綻してしまいます。

左右のヘリに目がけて投げるようにすると低い場所をキープしやすいです。ただ赤がない場所でそれをやると全部落ちてしまうので端の赤に2つ黄色を横にひっつける、または黄色2つの間に赤をひとつひっつける感じです。

中盤

ある程度横に広げられたら真中付近にも、たまに赤を置いて、あまり上に早く行き過ぎないよう注意しながら周りを黄色で囲みます。真ん中に重さがあると、最後の段階で横に横に伸ばしていってもなかなか崩れなくなります。

IMG_1541.png

中心の重さをキープしながら周りに肉付けしていくイメージでやっていきます。

この中盤の上手さが中級と上級の別れ目みたいで、私もまだそれ以上の有効な戦略を見つけられてはいないです。

終盤

終盤になると画面がほとんどぴよこさんで埋まってきますが、上の方をよく見ると幅が空いていて、向こう側にスペースがある場所が残ってたりします(というかそういう場所を残すように拡張できるのがベスト)そこを目がけて高めに黄色を投げるとどんどん真ん中に放りこめ数を稼げます。

この絵のピンクリボンぴよこさんの上辺りです。

IMG_1547.png

終盤の赤ですが、最も揺れてなくて飛び出してない場所に着け、大丈夫そうなら黄色をその周りに少し着け、黄色が余ったら上記の真ん中に放り込むor捨てるかします。慎重にそれを繰り返していると、重さで少し周りが垂れてきて、また真ん中に放り込む隙間が生まれていることがあるので、諦めずにぐるぐる回しながら探してみましょう。

こんな感じでやれば常に80以上は余裕で行けるようになると思います。

私もまだそれより上はツキがないと行けないので頑張ります!(`・ω・´)

最後に大事なことを言いますよ。
色を間違えない!
これが一番大事です( ´Д`)=3 フゥ




テーブルの行を長押しして、その行に対する特別な処理を行いたくてTableViewのlongpressイベントを使おうとしました。

プログラムはCoffeeScriptで書いてますので自分で試す場合はJavaScriptに変換して下さい。

出力結果:

[DEBUG] longpress> undefined undefined

行の情報が渡ってこねー(-ω-)

そこで何が呼ばれてるのかtouch系のイベントを並べて見てみると、

出力結果:

[DEBUG] touchstart> 1 TITLE-2
[DEBUG] longpress> undefined undefined
[DEBUG] touchend> 1 TITLE-2
[DEBUG] click> 1 TITLE-2

touchstartでindexやrowを覚えて、longpressが起こったときに使えれば良さそうです。 覚えた情報はtouchendで初期化するとよさげ。

ところがよく見ると余計なことにclickも呼ばれている(-ω-)

longpressのでclickイベントの発火を抑えるいい方法が見つからず、結局longpressの処理内でフラグを立てclick処理で判断するというコードに落ち着きました。

あまりカッコよくはないですね。Titanium側でlongpressが検知されたらclickは呼ばない仕様にしてもらえたほうが自然な気がします。

ひょとしたらclickが呼ばれないと何かできなくなる操作があるのかなぁ。





link_to_if は第1オプションに真偽値を与えて、trueならそれ以降のオプションをlink_toにそのまま与えたリンクの表示を、falseならラベルのみを表示するヘルパーです。

しかし表示自体を消して空文字を出力したい場合もあります。

link_to_if はブロックを取ることができ、第1オプションがfalseの場合、ブロックが実行され結果が表示されます。

したがって、空ブロックを与える事によって目的が達成できますよ。





git log --graph --decorate --oneline

20120314_01.png

ではコミット日が表示されなくて、でも欲しかったのでカスタマイズしたオプションを考えた。

20120314_02.png

ただし見てお分かりのとおりフォーマットを指定すると--decorateで付くタグやブランチの色を独立して指定できないのが残念。

%dがタグやブランチ情報を出すフォーマットオプションですが色を指定すると全てその色になってしまうのです。

しかし、概ね目的は達成したのでよしとします。.gitignoreには私はこんなふうにalias設定しています。





iPhoneがiOS5.1にアップデートされて嬉しい(設定無限ループバグには泣かされましたが...)のもつかの間、私の所有しているMacBook AirはSnow Leopardのため対応しているXcodeが4.2でiOS5.1をサポートしていない事が判明(-ω-)

事情があり、まだしばらくLionには上げられないのです。

こまった、こまったといろいろ検索していてこのページを見つけてこれは?!っと思ってやってみたのです。

上記のページに載っている手順ですとiPhone Simulatorが漏れているので、それも加えた手順を紹介します。

  1. 起動しているXcodeがあれば終了しておきます。

  2. もし入ってなければApple Developer Connection(以下ADC)からSnow Leopard用の最新Xcodeである4.2を普通にインストールしておきます。 インストールが終わったら、デスクトップにあるXcodeフォルダのマウントを捨てて消しておきましょう。 (この後、コピーコマンドを実行するときにパスが変わってしまいますので)

  3. Xcode 4.3.1 for LionはSnow LeopardでもADCから問題なくダウンロードできますのでしてください。

  4. ダウンロードしたxcode_4.3.1_for_lion.dmgをマウントします。 マウントするにはFinderからダブルクリックするなりして開くだけです。

  5. ターミナルを起動して、Xcode 4.3.1に含まれるiOS5.1 SDKをコピーしていきますww 下記のコマンドをコピペして実行すればできるはずです。

一部シンボリックリンクのコピーがエラーとなりましたが、とりあえず無視しました(汗)

これでXcodeを起動すればiOS5.1としてコンパイル&実行できました。 シミュレータも5.1のものが選択でき動きます。 iOS5.1のiPhoneに実機転送もできますし、ステップ実行も出来ました。

ただ、こうやって作ったiOS5.1のアプリがアップルの審査を通るかどうかは分からないので、Lionにアップデートできるまでの繋ぎと考えたほうがいいかも知れません。

また、複雑なコードで動作確認などはしていないため、根本的にどこかおかしい可能性も否定できませんので、実行する場合は自己責任でお願いします(・ω・;)






サイドバーに表示するリンクはコンテンツビューの内容によって変わることが多いはずです。

Railsにはそういう時に使える仕組みがあらかじめ用意されているので簡単です。

新しいRailsプロジェクトを作ってサイドバー上に自由にリンクを設定する方法を説明していきます。

$ rails new sidebar-sample
$ cd sidebar-sample

レイアウトを自分で書くのもタルいのでBootstrap,from Twitterを使いましょう。

Gemfileに1行追加してbundleを実行します。

$ vi Gemfile
#↓これを追加
gem "twitter-bootstrap-rails"
$ bundle
$ rails g bootstrap:install
$ rails g bootstrap:layout application fluid
    conflict  app/views/layouts/application.html.erb
Overwrite /Users/iwazawa/tmp/sidebar-sample/app/views/layouts/application.html.erb? (enter "h" for help) [Ynaqdh] Y
       force  app/views/layouts/application.html.erb
$ rails g scaffold Book name:string asin:string author:string price:float
$ bundle exec rake db:migrate
$ rm public/index.html
$ vi config/routes.rb
  #↓これを追加
  root :to => 'books#index'
$ rails s
$ open http://localhost:3000/

ここまでで、こういうレイアウトでページが表示されるはずです。

20120311_01.png

まずはレイアウトファイルapp/view/layouts/application.html.erbを開いてサイドバー部分をそれぞれのビューから置き換えられるようにします。

具体的にはul.nav-list内の既存の行をカットして<%= yeld :sidebar %>に置き換えるだけです。

$ vi app/view/layouts/application.html.erb

続いてそれぞれのビューを編集します。まずはapp/view/layouts/books/index.html.erbから。

先頭にsidebarに挿入するためのコードを追加します。Rails Helperのcontent_forを使って、エイアウトファイルに書いたyeildの名前(シンボル)を指定し、ブロック内にリンクコードを列挙するだけです。

$ vi app/view/books/index.html.erb

せっかくBootstrap,from Twitterを使っているのでコンテンツ内の機能リンクはボタンっぽいUIに変更しちゃいましょう。

link_toヘルパーに:classHTML属性を追加します。CSSでbtn btn-primaryと指定することによってメインのボタンの見栄えに変わります。

ここまでで、books/indexページがこういうふうに表示されるようになりました。

20120311_02.png

app/view/layouts/books/の残りのビューも同様に変更します。

20120311_03.png

全部のメニューが同じようなのでは、気分が出ないのでapp/view/books/show.html.erbにはDB項目に入っているASINを使ってAmazonに飛ばすリンクを追加しましょう。

20120311_04.png

テーブルはBootstrap,from Twitterのスタイルを当てると非常に見栄えが良くなりますので、ちょいちょいと指定します。

ポイントはERBのコメントにも書いてあるとおり下記スタイルの適用です。

  • table.table
  • td.span<N>
  • a.btn-mini

一覧も綺麗になってちゃんとした(?)アプリっぽくなりました!

20120311_06.png
※↑クリックすると大きな画像が表示されます

Railsって知らないとハマるけど、知ってると非常に楽なフレームワークですよね。

初期状態ではirbやpryで日本語を入力やペーストしてもとうまくできません。

コード書きながら試してるとやはりどうしても日本語で入力したくなることが多いです。

readlineライブラリを導入して、Rubyにもそれを含めてコンパイルすれば可能なのですが全てをソースからビルドするのはなかなか大変です。

RVMのpkgを使ってreadlineを導入し、Rubyをreinstallするのが楽だったので紹介します。

RVMでRubyをreinstallする際に、--with-readline-dirオプションに、readlineを入れるとき出力された最後の行に表示されているパスを設定すれば大丈夫です。