タグ

ブックマーク / higelog.brassworks.jp (21)

  • Rails3でパンくずリスト - ひげろぐ

    今まで不細工な自前実装をしていたけど、シンプルでお手頃なものがあった。 zachinglis/crummy – GitHub 導入 Gemfileに以下の行を追加してbundle install gem 'crummy' 基的な使い方 コントローラーでadd_crumbしてビューでrender_crumbs。 あとは家のExampleを眺めるとなんとなく分かると思う。 といっただけで終わらずのもなんなので、以下は動作に関するちょっとしたメモ。 パンくずリストの表示 – render_crumbs ビューのパンくずリストを表示したい場所にrender_crumbsを埋める。 多くの場合はレイアウトファイルに書けばいいと思う。 <%= render_crumbs %> render_crumbsにはオプションがいくつかあるが、おそらく使いたいのはセパレータの指定くらい。 (デフォルトのセパ

  • RubyMotionのプロジェクトでアプリの設定画面を作る - ひげろぐ

    主に以下のサンプルを参考に。基的な考え方はObjective-Cでやるときと変わらない。 mordaroso/rubymotion-settings · GitHub resources以下にSettings.bundleを置けばiOSの設定アプリに自作のアプリの設定画面が追加される。Settings.bundleの詳細については情報がいくらでもあるので省略。 アプリ内での設定や取得、初期化などは以下のようにして行う。詳細についてはNSUserDefaultsでググるといろいろ出てくるので基的な操作のみ。 値の設定 NSUserDefaults.standardUserDefaults["key_a"] = "A" ハッシュと同様に操作できる。 数値などもそのまま設定できるのはなかなか素晴らしい。 値の取得 NSUserDefaults.standardUserDefaults["ka

    rochefort
    rochefort 2012/05/31
    設定画面
  • しばらく見ぬ間にXcodeも進歩していた - ひげろぐ

    このところ昔Xcodeを使ってObjective-Cで書いたアプリをRubyMotionで書き直してみたりしている。とても楽しくて仕方が無い。 一方で長い間Xcodeとはご無沙汰だったので、そちらは今どうなっているのだろうかとRubyMotionと比較する上で気になった。そこで一年ぶりくらいにXcodeをちょっとだけ触ってみたが、どうやらこちらもけっこうよろしくなっている。 メモリ管理が不要になった Xcode 4.2.1以降ではプロジェクト作成時に「Use Automatic Reference Counting (ARC)」にチェックを付けると自前でメモリ管理しなくてもよくなった。 Objective-CをRubyMotionに書き換えるときメモリ管理に由来するコードをバッサリ削るのが楽しかったが、Objective-Cでも今ならバッサリいける。 メモリ管理の煩わしさがなくなると同時に

    rochefort
    rochefort 2012/05/16
    Xcode4.4から各種リテラルが導入される
  • RubyMotion Weekだった今週 - ひげろぐ

    かなりの盛り上がりでGitHubには雨後の筍のように新しいプロジェクトが次々できている有様。 個人的にも昔Objective-Cで書いたものをRubyで書き直してみたりしていてRubyMotion成分濃い目のエキサイトした週だった。 正直勢いがありすぎて自分では追い切れてないが、公式ブログにリリース後一週間の熱狂が綴られていたので抄訳してみる。 RubyMotion’s Blog — What a week! コミュニティ 今日までにユーザーによる約55のRubyMotion関連リポジトリがGitHubにできている GLKit/OpenGL, Facebook, Parse, cocos2d等の特殊なフィーチャーやフレームワークのサンプルデモ CoreDataやUIKit等の抽象化 Redcar、TextMate、Vimのコード補完を含むRubyMotionサポート RailsFactor

  • RubyMotionでCocoaPodsを使う - ひげろぐ

    CocoaPodsはRubyで言うとBundlerみたいなもの。 Objective-Cのプロジェクトにおいてライブラリの依存性を管理して使いやすくしてくれる。 podとして提供されているライブラリの一覧はここにまとまっている。 RubyMotionでもこのCocoaPodsを利用できる。 以下だいたい公式のドキュメント通り。 CocoaPodsのインストール まずはCocoaPodsを入れてセットアップする。sudoはRVMを使っているなら不要。 $ [sudo] gem install cocoapods $ pod setup motion-cocoapodsのインストール 次にRubyMotionからCocoaPodsを使うためのmotion-cocoapodsを入れる。 $ [sudo] gem install motion-cocoapods Rakefileの修正 RubyM

  • Titanium MobileとRubyMotionの比較 - ひげろぐ

    双方とも脱Objective-Cを実現してくれるプロダクトだけど性格はけっこう違う。 共通で興味を持っている人が多そうなので思うところをとりとめもなく書いてみる。 取っつきやすさ iOS SDK開発未経験者がとっつきやすいのはTitanium。おそらくRuby経験者でも。 逆にiOS SDK経験者ならばRubyMotionの方が入って行きやすいかもしれない。 RubyMotionはiOS SDKのAPIをタイトになぞっているためにiOS SDKのAPIに関する知識が必要だが、iOS SDKのAPIには直感的じゃない部分が多々あって、それに馴染むまでけっこう時間がかかる。その学習コストがけっこう高い。 TitaniumのAPIはTitanium独自のものだが整理されていて扱いやすい。学習コストは皆無ではないがiOS SDKに比べればずっと楽。 またObjective-Cよりマシとは言えRub

  • RubyMotionがすごい - ひげろぐ

    RubyMotionを使うとObjective-Cの代わりにRubyでiOSアプリを作ることができる。 有料版しかなく無償で試したりはできないがRubyMotionのサイトやサンプルコードを見てすぐに購入した。これはいいものだ。 日語での概要は以下に良くまとまっている。 Rails Hub情報局: MacRubyがiOSに来た!RubyでiOSのネイティブアプリ開発ができる「RubyMotion」登場 RubyMotion、はじめの一歩 – Watson’s Blog 一言で言うと今までObjective-Cで我慢して書いていたものをすべてRubyでサクッと書いちゃおうぜ、というノリのものだ。 JavaScriptに対するCoffeeScriptの関係に似ているかもしれない。 個人的には以下の利点だけで値千金。 配列や文字列の処理がとてもとても楽ちん メソッド定義およびメソッド呼び出しが

    rochefort
    rochefort 2012/05/05
    どうしようか迷ってたけど、これ見て買ってみた。
  • Rubyのマジックコメントを自動で付加する - ひげろぐ

    VimRubyMine等のエディタやIDEで新しくファイルを作成した時にマジックコメントを付加することはできるが、既存のファイルに対して適用することができないので別途手段を講じる必要に強くかられた。 有り体に言うとRailsのジェネレータが作成したファイルに日語を含めたときにエラーになるという状況を繰り返すのにそろそろ飽きてきたという。 そこでまず自作しようとディレクトリを切ったところで、いやいや誰か作ってるのではないかと思い当たり、検索してみると案の定見つかった。 magic_commenter magic_encoding 両方ともコマンドラインツールとして使用する。コマンドを打つとそのディレクトリ以下のRubyファイルを検索してマジックコメントを付加してくれる。 まず最初にmagic_commenterを試してみたが、こちらはマルチバイト文字列が含まれているファイルにしかマジック

    rochefort
    rochefort 2012/01/17
    マジックコメント追加
  • 『リファクタリング』 - ひげろぐ

    マーチン ファウラー Martin Fowler 児玉 公信 平澤 章 友野 晶夫 梅沢 真史 ピアソンエデュケーション 売り上げランキング: 13707 Rubyエディションの方も買ってみたけれど、JavaのコードがRubyに書き直されているだけで、特にRubyの特色を活かした内容になっているわけでもないので、ちょっと買う意味なかったかも。 まだどっちも持ってない人ならどっちを買ってもいいと思う。 というわけでもし未読の人がいたら年末年始読んでみるというのはどうでしょう。 すごい勢いでリファクタリングしたくなると思いますよ。 高いけど値段分の価値はあります。10年で割ると年額500円です。

    『リファクタリング』 - ひげろぐ
    rochefort
    rochefort 2011/12/20
    年末読んでみよう
  • ShowOffでプレゼンテーション作成をためした - ひげろぐ

    schacon/showoff – GitHub なんだか今年のRubyKaigiで使っていた人が多かったらしい。と聞いて興味がわいたのでちょっといじってみた。 なんぞや テキストベースでプレゼンテーションスライドを作成できるツール。Sinatra製。 ページ遷移やリスト表示のアニメーションなどを手軽に定義することができるので、簡単にそこそこ動きがあって見栄えのするものが出来上がる。 Markdownの文書を !SLIDE という行で区切っていくとスライドができちゃいます、と言うことが理解できればShowOffの半分は制覇したと言える。たぶん。 JavaScriptやスタイルシートを埋め込むことができたり、コードのシンタックスハイライトも備えていて、プログラマ向けのプレゼンツールとしてはなかなかよさげに思える。 またテキストなので バージョン管理と相性が良い 別のプレゼンでのスライドの再利

    rochefort
    rochefort 2011/09/03
    http://localhost:9090 これはよさげ
  • Unicornのダウンタイムなし再起動は考え無しに使うと危険 - ひげろぐ

    UnicornのプロセスにUSR2シグナルを送ると古いプロセスを残しつつ新しいプロセスが起ち上がるので、ダウンタイムが発生しない。 というのはUnicornの利点の一つとして数えられているが、実は罠なんじゃないだろうかと思い始めた。 USR2を送った直後の状態でプロセスのリストを見ると以下のようになる。(行が長いのでプロセス名の部分だけ抜粋) akahige:# ps aux |grep unico unicorn_rails master -E production -D --path /hoge-app -l0.0.0.0:8080 unicorn_rails worker[0] -E production -D --path /hoge-app -l0.0.0.0:8080 unicorn_rails master (old) -E production -D --path /hog

  • nginx+Unicornでサブディレクトリでアプリを動かす - ひげろぐ

    Passengerだと簡単だったけどUnicornだとちょっと手こずった。 nginx側 ディレクトリの準備 nginxのroot以下に任意の名前のサブディレクトリを作る。 これはRalisアプリケーションのpublicディレクトリのシンボリックリンクにする。 cd /var/www/root ln -s /var/www/my-app/current/public my-app (Capistranoを使っているのでこの例ではcurrentがついている) nginxの設定 nginxのupstreamとserverの設定を抜粋。 upstream unicorn-of-my-app { server www.example.com:8080; } server { listen 80; server_name www.exemple.com root /var/www/root; err

    rochefort
    rochefort 2011/08/19
    nginx+Passengerでもいいならそっち使った方がかなり楽
  • Titaniumの非同期なイベントのテスト - ひげろぐ

    非同期なイベントというか、イベントは非同期なのでテストに工夫を要する。 以下はそれをCoffeeScriptとJasmineで書いたスペック。 ブックマークをテーブルビューに表示する画面のイベントに関するテストをJasmineのruns,waitsFor,waits等を駆使して書いている。 describe("BookmarkViewController", -> beforeEach(-> @bvc = new BookmarkViewController(Ti.UI.createWindow()) @item = {id:1, name:"HOGE"} ) describe("編集ボタンをクリックした場合", -> beforeEach(-> afterEventState = => @bvc.tableView.editing == true runs => @bvc.buttonE

  • nginx+UnicornでRailsのページキャッシュを使おうとしてはまった話 - ひげろぐ

    ここやここを参考に設定してみたが、nginx+Unicornの組み合わせでページキャッシュが効かなかったので、ちょっと試行錯誤。 最終的には以下を参考にしてなんとかなった。 RubyonRailsMongrel 原因 nginxがキャッシュファイルを見つけてくれなかった 状況を調べてみるとキャッシュファイル自体は作られている。 しかしRailsがキャッシュファイルを作るときにパス名に「index.html」か「.html」を付加したものをファイル名とするが、nginxはこの事情を知らないので、キャッシュファイルを見つけられなかった。 なので都度Unicornの方へリクエストを振っていた。 一方Unicornは静的ファイルへのアクセスをnginxに一任していた Rails3からはProduction環境ではデフォルトで静的ファイルへのアクセスを受け付けていない。 以下デフォルトのconfig

  • RSpecでモックとスタブ - ひげろぐ

    きちんと理解してなかったのでいろんなページを参考にいじくりまわしてみた。 そのメモ。 モックとはスタブとは Martin Fowler’s Bliki in Japanese – TestDoubleの定義がわかりやすいので引用。 スタブは、テスト時の呼び出しに対して、あらかじめ用意された結果を返す。 通常、テスト用にプログラムされたところ以外には応答しない。 スタブは呼び出しの情報を記録することもある。 例えば、Eメールゲートウェイスタブは「送られた」メッセージを記録するような場合だ。 単に「送られた」メールの数を記録する場合もあるだろう。 スタブによってデータベース接続やネットワークIOなどの要素をテストから分離することができる。 また時間のかかる処理をスタブで置き換えることによってテスト時間を短縮することにも使われる。 モックは、エクスペクテーションが事前にプログラムされたものである

  • Jasmine用のVimスニペット - ひげろぐ

    Jasmineを一通り使えるようにした後で「毎回 describe(“ほげほげ”, function() {〜とかいちいち書くのって実用的に無理じゃね?」と思い、やっぱり使うのやめようかと考えたりした。 が、そこでVimのスニペットの存在を思い出し踏みとどまった。 ~/.vim/snippets/javascript.snippetsに以下を追記。 # describe for jasmine snippet d describe("${1:comment}", function() { beforeEach(function() { }); }); # it for jasmine snippet it it("${1:comment}", function() { }); スニペット激しく便利すなあ。 2011/01/10追記 プラグインあった。 Jasmine snippets (f

  • Titanium Mobileを二ヶ月くらいさわってみた感想。 - ひげろぐ

    今年に入ってからほぼ毎日触ってました。でもほとんどiPhone開発しかしてない感想。 主観的なところをだらだらと書いてみましょう。 とりあえず気に入っているところイマイチと思うところを挙げてみたい。 合わせて総評など。 気に入っているところ さくさく開発できる Objective-Cとは段違いの開発効率。 冗長なメソッド名とメモリ管理の煩わしさからの解放がうれしい。 ちょっとしたモックアップ程度ならさくっと作れてしまう。 そこから開発者が作り込みに注力できる環境が見事にできあがっているのではないかと。 JavaScriptはくせもあるけどおおむね使いやすい言語。 CoffeeScriptとの組み合わせでさらにいいかんじ。 TDDできる Jasmineで気持ちよくTDD出来ている点が非常にポイント高い。 おかげでTitaniumラブですよ。 Objective-CでもTDD可能だけど、OCU

  • Jasmine TitaniumをGithubで公開しました - ひげろぐ

    akahigeg/jasmine-titanium – GitHub お得意のヤク毛刈りの延長でまとめたものをついでなので公開してみました。 fork歓迎です。 specs.shを見ると分かりますがけっこう強引な手段で実現しているので、あまりお行儀のいい感じのものではないのですが、ひとまずlibとspecにソースを放り込んでいくだけでJasmineがTitanium上で動くようになっているはずです。 READMEの英語が少々インチキだと思うので、日人の方はREADME.jaの方をどうぞ。 Markdownとか初めて書きましたよ。というかそういう記法があることを初めて知りましたよ。 これまでのあらすじ 興味ある方は以前の取り組みも参照してみてください。 あれ、これあらすじって言わねえ。 Titaniumでユニットテスト | ひげろぐ Titaniumでユニットテスト Jasmine再び編

  • Titaniumでユニットテスト Jasmine再び編 - ひげろぐ

    いちいちiPhoneシミュレータを起動して結果を確認するのはだるいのではないか、単体テストが有効なクラスならばTitanium外で作ってもいいんじゃない?と思いこないだはNode.jsを利用したテストに走ったわけだけど、TitaniumのAPIを利用したクラスのテストをしたくなりTitanium内に舞い戻った。 スタブとかモックを使えばいいじゃないって? いやー、それもなかなかしんどいしね。それに特に問題なかったら物使った方がいいと思いますよ。 2011/02/17 追記 試行錯誤の成果をまとめたJasmine Titaniumを公開しました。 出力を見やすく調整 個別のスペックのみ実行できるように といった改良が図られているのでこの記事の内容よりオススメです。 追記終わり。 準備 次のものはすべてResource以下での出来事。 Jasmineのコアを準備。 以前作ったTitanium

  • CoffeeScriptでjasmine-node - ひげろぐ

    CoffeeScriptでもさくさくBDDできるぞ! この記事はCoffeeScriptとjasmine-nodeの記事の続きっぽいです。 準備 srcディレクトリの作成 CoffeeScriptファイルを置くディレクトリを作成する。 mkdir src specs.jsの編集 CoffeeScriptでスペックを書くためにspecs.jsの先頭行に以下を追加。 require('coffee-script') コンパイルの設定 実コードもCoffeeScriptで書くが、テストはjsファイルに対して行う。 CoffeeScriptの実コードを更新したら自動的にコンパイルされるように以下のコマンドをターミナルのひとつで実行しておく。 coffee -w -b -o lib/ -c src/ 新しいファイルを作ると、そのファイルはコンパイル対象に含まれていないのでコマンド実行し直す必要あり。