Home

cocoa*life

Snow Leopardをインストールしました。

(Up-to-dateプログラムでは到着がだいぶん先のようだったので)Snow Leopardを発売日に購入し、その日の夜にインストールしました。

見た目において目新しい新機能もないので、特に書くことはないといえばないのですが、とても快適に使えているということが何よりもいいことなのかもしれません。

特になにもせずLeopardからインストールすると、クリーンインストールではなく上書きアップデートになります。
上書きアップデートは嫌だなぁと微妙に思ってはいましたが、そんなに調子が悪かったりするわけではなく、むしろMacPortsでインストールしたアプリケーションが、しばらくの間はSnow Leopardではコンパイルできないということもあり、上書きインストールでよかったのではないかと思っているところです。

書くことはないと書きましたが、一つ一つがブラッシュアップされているというのは誇大広告ではないと感じます。

たとえば、iPhoneプログラミングに必須のXcode。これもいろいろと新しくなっていて、新機能の静的アナライザなどを使ってみましたが、メモリリークしそうな箇所をしっかり教えてくれるので、とても感動しました。

64-bit版のSafariを使用していて、Flash Playerが32-bitでも1 別プロセスで動くのでYouTube等問題なく視聴できます。
Windowsでは32-bit版と64-bit版のInternet Explorerが用意されていましたが、こちらはすごくスマートなやり方だなぁと感じました。

いろいろなアプリケーションが64-bit化されましたが、64-bitアプリケーションを使っているという感触がありません。
SIMBLが動かないとか、そういうところで感じることはなきにしもあらずですが(笑)。
それは16-bitから32-bitに移ったときのようなリソースが不足しているというような状況ではないからなのかもしれません。

Snow Leopardでしっかりと地盤を固めてくれたものと思っているので、次のOSアップデートにはさらなる期待がふくらむところです。

P.S.
それにしても皆さん、すごい勢いでアップデートされていますね。
Analyticsで比率を見ていると30日ではMac OS Xを100%とすると、40%を超えています。

  1. インストールされているものは32-bitのものです []

ssl_requirement pluginでssl_required(:all)と書きたい!

  • 2009-08-27 (Thu)
  • Ruby

Ruby on RailsでSSLで通信する必要があるページには、DHH謹製らしい?ssl_requirement pluginを使用すると、以下のようにに簡単にhttpsにリダイレクトしてくれるようにできます。

class Hoge < ApplicationController
  ssl_required(:index)  # インデックスページだけSSLで通信する。

  def index
    # some crazy codes ...
  end

  def show
    # some rotten codes ...
  end
end

残念ながら、このssl_requiredはアクションに:allとか書いてコントローラ全部を対象にするというようなことができません。
allというアクションを定義する場合もあるからこうなっているのかもしれません。

コントローラ全体にSSL通信をさせるようにするための方法については、コントローラ全体をssl強制に – 車輪の再発明というサイトに、trueを返すssl_required?メソッドを定義する方法が書かれています。

現在書いているRailsアプリでも同様のことが行われているものの、いかんせんたびたび見る気がしてきて、クラスメソッドにしようかと思いました。
でも、すでにssl_requiredというメソッドがあるところに、さらなる同じようなメソッドを作るのは避けたいし、やっぱりssl_required(:all)と書きたいと思いました。

そこでalias_method_chainを使用して、ApplicationControllerをこんな風にしてみました。

class ApplicationController < ActionController::Base
  include SslRequirement

  # some codes...

  class << self
    def ssl_required_with_all(*actions)
      if actions.include?(:all)
        class_eval do
          def ssl_required?
            true
          end
        end
      else
        class_eval do
          ssl_required_without_all(*actions)
        end
      end
    end
    alias_method_chain(:ssl_required, :all)
  end
end

まともにclass_evalとかがわかっていないので、かなり怪しいです!!!

FriendFeed、始めました。

なにごとも便利なものに飛びつくのが遅い、というか情報を知るのが遅いような気がしていますが、先日からFriendFeedを始めました。
ブログを書いている人が FriendFeed を始めるべき7つの理由というエントリを読んで、だいぶん便利そうだなぁと思ったので、使ってみることにしました。

自分のFriendFeedはここになります。
milkcocoa – FriendFeed

ただ、最初はどうやって自分のFeedを登録するのかいまいちわからなかったので、UIをブラッシュアップして使いやすくなってくれると最高です。

このblogの更新はもちろん、twittertumblr先に挙げた早起き生活、etc。。。全部集約できているのがいいなぁと思います。

上記のエントリに利点が全部説明し尽くされているので、ここで改めて説明する必要もないのですが、他の人をfollowすればその人がFriendFeedに登録してあるフィードをすべて、同時に見ることもできるのが便利だったり、いろいろグループ分けしてフィルター代わりになったりとかとか。

Imaginary Friendとかをたくさん作って、うまいことフィードを分類して読みたいなぁと思うところです。
いろいろと使い倒せば相当便利なツールになりそうな気がしています。

早起き生活、始めました。

  • 2009-08-05 (Wed)
  • Life

以前は帰りに英語などをやっていたのですが、どうもそれだと疲れてしまって頭が働かない!ということで、朝にずらしてみました。
最近自分の周りで早起きさんが多いこともあり、少しでも仲間はいた方がいいです。

目標の生活としては

5:00 起床
5:00 – 5:30 モーニング・ページを書く。
5:30 – 6:30 入浴や準備など。
6:30 – 8:00 電車。
8:00 – 10:00 英語等。

という流れにしたいところです。
今のところはまだうまくいっていません。
起きるのが5:30以降だったり、今朝は5:00前に起きたのにもかかわらず、MacBook Proに麦茶をぶっかけてしまい一時起動不能になりモーニング・ページどころではなかったとかですね。

そして、そんな生活を支援すべく「早起き生活」というWebサービスに入り、記録を付け始めました。
milkcocoaの早起き日記 – 早起き生活

blogのサイドバー的なものに1週間分の記録を表示できるものを貼りました。
早起き生活
Powered by 早起き生活

これは朝起きてページを開いて、「いま起きた!」ボタンをクリックすればいいだけなので、楽ちんです。
できるだけ長く続けて、8月2日のように休みの日でも遅く起きるというようなことはできる限りなくしていきたいところ。

ちなみにMacBook Proは1時間半後に無事起動するようになり、内部を開けて少したまっていた水分を拭き取りました。
ぶっかけてあっっと思った1秒後、電源が切れ、液晶がぷーんと音を立てるような感じで電気が落ちて暗くなり、本当にオワタ\(^o^)/と思いました。

Apple Push Notification Serviceを利用した、iPhone クライアントと、Rubyによるサーバの作成。

[とりあえず表示しましたが、これからコードをアップロードしたり改変していきます。]

先週から、システム部で何か動くものを作って発表するという企画?が始まりました。
プログラムプレゼンテーションを始めてみたら意外に良かった

第一弾は自分だったので、1週間しかなかったので、ちょこっとやればできそうで今までやってみたかったiPhone OS 3.0の目玉機能の一つ、Push Notification Serviceの実装をやってみることにしてみました。

iPhoneクライアントはほぼObjective-Cしかありませんのでそれを使い、サーバはRubyで実装しました。

以下が発表したスライドを少し改変したものになります。

コードは今回はbitbucket.orgにアップロードすることにしました!
コードはこちらになります。
http://bitbucket.org/milkcocoa/apns-test/

ただしサーバのファイルに関しては

  • デバイスIDとかの部分はxでマスクしています。
  • キーに関してはスライドで指定した方法で記述してください。

[ポイントを書く。]

mislav-will_paginate pluginを使用したページをRSpecでテストする。

  • 2009-07-19 (Sun)
  • Ruby

Webアプリケーションでは、たくさんの項目を一覧表示する場合、1ページに全部見せるのではなくpaginate処理をして数ページに分ける場合があります。
たとえばGoogleの検索結果は通常、1ページに10件しか表示されません。

そういうページをRuby on Railsで作成する場合には、mislav-will_paginate pluginというプラグインを使用するということは割とよく知られていることです。

先日もそういうページを作成する必要があり、作成していましたが、RSpecでテストを作成しようとしたところやり方がわからず詰まりました。
そのため、その方法をここに記しておこうと思います。

ドキュメントを読もう!

実はGitHubのpluginのWikiページに最低限必要なことは書いてありました。
気がついていればもっと早く解決していたところでした。
「I’m getting “undefined method `total_pages’” error when rendering in the view!」という部分ですね。

ポイントはpaginateやtotal_pagesというメソッドをstub!で定義してあげることです。

実際のコード

  • Controller: ArticlesController
  • Model: Article
    • title: string
    • body: text

Controllerのテスト(の一部)

[$RAILS_ROOT/spec/controllers/articles_controller_spec.rb]

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')

describe ArticlesController do
  describe "handling GET /articles" do
    before(:each) do
      article = mock_model(Article)
      article.stub!(:find).and_return([article])

      @articles = [article]
      @articles.stub!(:total_pages).and_return(1)
      @articles.stub!(:paginate).and_return(@articles)
    end

    def do_get
      get(:index)
    end

    it "should be successful" do
      do_get
      response.should be_success
    end

    it "should render index template" do
      do_get
      response.should render_template('index')
    end

    it "should find all articles" do
      Article.should_receive(:paginate).with(:page => nil, :per_page => 100).and_return(@articles)
      do_get
    end

    it "should assign the found articles for the view" do
      do_get
      assigns[:articles].should == @articles
    end
  end
end

ちなみに29行目の:page => nilになっているのは、たぶんassingsとかでparameterを指定していないからこうなるのだと思います。
まだshould_receiveをきちんと理解していないで、まともな説明が書けません。

Viewのテスト(の一部)

[$RAILS_ROOT/spec/views/articles/index.html.erb_spec.rb]

require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')

describe "/articles/index.html.erb" do
  include ArticlesHelper

  before(:each) do
    article_98 = mock_model(Article)
    article_98.stub!(:id).and_return(1)
    article_98.stub!(:title).and_return('MyString')
    article_98.stub!(:body).and_return('MyText')

    article_99 = mock_model(Article)
    article_99.stub!(:id).and_return(2)
    article_99.stub!(:title).and_return('MyString')
    article_99.stub!(:body).and_return('MyText')

    @articles = [article_98, article_99]
    @articles.stub!(:total_pages).and_return(1)
    @articles.stub!(:paginate).and_return(@articles)

    assigns[:articles] = @articles
  end

  it "should render list of articles" do
    render "/articles/index.html.erb"
    response.should have_tag("tr>td", "MyString", 2)
    response.should have_tag("tr>td", "MyText", 2)
  end
end

Mac OS X LeopardでCD-ROMからisoファイルを作成する。

中途半端ではありますがファイルサーバもできたことなので、CD-ROMやDVDなどはできる限りHDDの中に入れておきたいなぁと考えています。
物理メディアはメディアを探すところから始まり、わざわざドライブに入れなくてはならなかったり、速度が遅かったりと面倒です。

そこでCD-ROMからisoファイルを作成することにしました。
目指すはWindowsでも読めるもの。
Windowsから作成してもよいのかもしれませんが、いちいち仮想環境を立ち上げるのは面倒なのでMacでやってみます。

使用するソフトはディスクユーティリティとターミナル。

  1. isoファイルにしたいCD-ROMをドライブに入れる。
  2. ディスクユーティリティを起動する。
  3. ディスクユーティリティの左側でCD-ROMがマウントされていることを確認し、そこをクリック。
  4. メニューの[ファイル] – [新規] – [〜からディスクイメージ]を選択。
  5. 「イメージフォーマット」を「DVD/CDマスター」にして、ファイルの保存先を選択する。これで.cdrというファイルが作成される。
  6. ターミナルで次のコマンドを打つ。
    hdiutil makehybrid -iso -joliet -o 出力したいISOファイルの名前.iso cdrのファイル名

Windowsでは有名な仮想CD/DVDドライブであるDAEMON Toolsで読み込んでみたところ、無事に読み込むことができました。

RubyでArrayの部分集合を作成する。

  • 2009-07-10 (Fri)
  • Ruby

Arrayの部分集合を作成する必要があったので、作ってみました。

class Array
  def subset
    rec = Proc.new do |univ|
      # subset!でポインタが循環しないようにcloneを使う。
      (ret = []) << univ.clone
      univ.each do |e|
        ret += rec.call(univ - [e])
      end
      ret
    end

    rec.call(self).uniq
  end

  def subset!
    self.replace(self.subset)
  end
end

他には同じサイズの配列を作成して、その要素を使用するかどうかtrueかfalseのフラグを立てていくという手法もあるようです。

irbで実行するとこうなります。

>> a = %w(1 2 3 4)
=> ["1", "2", "3", "4"]
>> a.subset
=> [["1", "2", "3", "4"], ["2", "3", "4"], ["3", "4"], ["4"], [], ["3"], ["2", "4"], ["2"], ["2", "3"], ["1", "3", "4"], ["1", "4"], ["1"], ["1", "3"], ["1", "2", "4"], ["1", "2"], ["1", "2", "3"]]

2009/7/20 追記

twitterですばらしい方法を教えていただきました!

ただしRuby 1.8.7で追加されたcombinationというメソッドを使用しているので1.8.7以降限定です。
cf. Ruby 1.8.7で使えるようになったRuby 1.9のメソッドたち – (rubikitch loves (Emacs Ruby CUI))

class Array
  def subset
    (0..self.length).inject([]) do |ret, n|
      ret.push(*self.combination(n))
    end
  end
end

irbでの実行結果。

>> a = %w(1 2 3 4)
=> ["1", "2", "3", "4"]
>> a.subset
=> [[], ["1"], ["2"], ["3"], ["4"], ["1", "2"], ["1", "3"], ["1", "4"], ["2", "3"], ["2", "4"], ["3", "4"], ["1", "2", "3"], ["1", "2", "4"], ["1", "3", "4"], ["2", "3", "4"], ["1", "2", "3", "4"]]

すごくすっきりしました!

ずいぶん時間をかけてtwitterの楽しさがわかりました。

  • 2009-06-29 (Mon)
  • Web

最近、twitterにハマりまくっています。
自分のアカウントはここです。

2年ぐらい前にアカウントを作ったものの、使い方がわからず、放置していました。
でも、最近ようやく楽しくなってきて、よくtwitしています。

何がおもしろいのか?
たぶん新しいことを知ることができるようになったとかそういうことではないかと思いますが、うまいこと説明できません。

あと、以前と比較してフォローする人を選んだということがあるのかもしれません。

ここ数年で、言葉で良さを説明しづらいものが増えてきた気がします。
MacやiPhoneしかり、おいでよどうぶつの森しかり・・・。

これは何を意味しているのでしょうか???

13-inch MacBook Proを購入しました。

自分が使っているコンピュータは2006年5月に発表された初代MacBookです。
これにはメモリを2 GB積むことができて、実際に2 GB積んでいます。

自分は大量のアプリケーションを起動して放置、という使い方をしているため、スワップが発生しまくっていてかなりストレスがたまる状況でした。
以前から、新しいOSであるSnow Leopardが発売されてから新しいものを購入すると決めていたのですが、Snow Leopardが発売されてすぐにインストール、というのは互換性のためなかなかできなさそうな状況になってきたので、先日発表・発売された13-inchのMacBook ProをApple Store Shibuyaで購入しました。

購入したのはCPUが2.53 GHzの方のものです。
USキーボードにしてもらったので、型番がMB991JA/Aという微妙に通常の元は違うものになりました。1

本当はメモリを8 GB積みたいのですが、まだまだ高いので値段が下がるまで待つということに決めています。
ちなみに、8 GBのメモリを積める(公式に)というのは、自分にとって選択の上で重要な基準でした。

質感が本当にいいですね。
いろいろと感動しています。
あまりにもいいので、傷がつかないかと心配になります。2
画面もとても色鮮やかできれいになったのがうれしいです。
が、、、相も変わらずきもい自分の顔が写り込むのにはげんなりしますwww。

使ってみた感想は、メモリがとりあえずスワップしない程度に足りているからか?とにかく快適です。
今使っているMacBookすぐにファンが回り出してうるさくなってしまうのですが、こちらは本当に静かです。


The swap has gone!!!

一つ残念なことがあるとすれば、自分の個体だけかもしれませんがイヤホンで音を再生すると無音時にホワイトノイズが乗ることです。

現在、移行作業をちまちまやっているのですが、だいぶん中がごちゃごちゃしてきたので、今回はTimeMachineを使って巻き戻すということはしませんでした。
未来の自分のためにも、せっかくなので移行手順を以下に記していこうと思います。
まだ途中なのでこれからもアップデートを続けていきます。

  • ユーザー登録
  • アップデートが表示されているので(既にダウンロードは終わっている)インストール
  • ファームウェアのアップデート(Bluetooth、SATA)
  • MobileMeの登録。
  • MobileMeでアドレス帳、カレンダーの転送
  • 細かな設定
    • システム環境設定
      • セキュリティ
        • 「一般」 – 「このコンピュータをスリープ状態またはスクリーンセーバから解除するときにパスワードを要求」
        • 「ファイアウォール」 – 「特定のサービスおよびアプリケーションにアクセスを設定」
      • トラックパッド
        • 「スクロールの速さ」を最大に

        • 「1本指の操作」
          • 「タップでクリック」、「ドラッグ」にチェック
        • 「2本指の操作」
          • 「セカンダリータップ」にチェック
      • キーボードとマウス
        • 「キーのリピート速度」- 「速い」
        • 「F1、F2などのすべてのキーを標準のファンクションキーとして使用」にチェック
      • 「日付と時刻」
        • 「時間帯」 ー 「最も近い都市」を「東京 ー 日本」にチェック
        • 「時計」 ー 「秒を表示」にチェック
    • Finder
      • 「拡張子を変更する前に警告を表示」のチェックを外す
      • 「ゴミ箱を空にする前に警告を表示」のチェックを外す
    • Safari
      • 「一般」- 「履歴からの削除」を手動(履歴は財産)
      • 「自動入力」 – 「自動入力Webフォーム」のチェックをすべて外す
    • Terminal
      • 既存のMacBookのターミナルの設定を書き出し、コピー
  • インストール
    • フォント
      • Bitstream Vera ~
          http://www.dafont.com/search.php?psize=m&q=bitstream+vera
    • 辞書
      • Ruby, Ruby on Rails, jQuery Dictionaryのインストール

        • http://www.priithaamer.com/blog/
    • Adobe Illustrator CS3
      • あらかじめ移行元でライセンス認証を解除しておく。
    • ATOK 2008
      • 「ATOK風の入力」でインストール
      • カスタマイザで「MS-IME風スタイル」を選択
      • 言語環境でことえりのチェックを消す
    • Audium
      • Dock用のアイコンをダウンロード http://www.adiumxtras.com/index.php?a=search&cat_id=1
    • ChemDraw
      • Web上で購入したので購入したメールを検索し、リンクからダウンロードすることができる。
    • Chromium
      • http://build.chromium.org/buildbot/snapshots/chromium-rel-mac/
    • ClipMenu
      • 「一般」 – 「ログイン時に起動」
      • 「一般」 – 「ショートカット」 – 「ClipMenu」をCtrl + Shift + Jに
      • 「メニュー」 – 「記憶する履歴の数」を100項目に
      • 「メニュー」 – 「インライン表示する項目の数」
    • delimport
      • v0.2をインストールしてから、v0.3を上書きする。
      • v0.2をインストールして、すでに一度起動してしまっていた場合(アクティビティモニタで調べられる)、強制終了し、~/Library/Preferences/org.ianhenderson.delimport.plistを削除、v0.3を上書きした後に、再起動する。
    • DivX
    • FileMagnet
    • Growl
      • Extrasにあるgrownotifyを/usr/local/binにコピー
    • Google Earth
    • iPalette
    • iWork ‘09
    • LaTeXit
      • http://www.cocoalife.net/2007/02/post_121.html
    • Lingon
    • MacKeyholeTV
    • Xcode
    • XQuartz
    • MacPorts
      • sudo port install zsh-devel +mp_completion +pcre
        • sudo vi /etc/shells に /opt/local/bin/zsh を追加。
        • 「システム環境設定」の「アカウント」の中の自分のアカウントを右クリックし(あらかじめ、左下の鍵マークをクリックすることで「解錠」しておく)、「詳細オプション」 – 「ログインシェル」を /opt/local/bin/zsh にする。
      • screen
        • http://thug4dev.com/index.php?/archives/217-MacPorts-Screen-4.0.3_3.html
      • ruby +mactk +thread_hooks
      • rb-rubygems
        • sudo gem install nokogiri
        • sudo gem install mechanize
        • sudo gem install rails
        • sudo gem install rspec-rails
        • sudo gem install mysql — –with-mysql-config=/opt/local/lib/mysql5/bin/mysql_config
        • sudo gem install passenger
          • LoadModule passenger_module /opt/local/lib/ruby/gems/1.8/gems/passenger-2.2.4/ext/apache2/mod_passenger.so
          • PassengerRoot /opt/local/lib/ruby/gems/1.8/gems/passenger-2.2.4
          • PassengerRuby /opt/local/bin/ruby
        • sudo gem install rb-skypemac
      • mercurial +zsh_completion
      • sudo port install apache2
        • sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist
      • sudo port install mysql5-server
        • sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist
        • sudo -u mysql mysql_install_db5
      • sudo port install ptex +utf8
      • sudo port install sshfs-gui
      • sudo port install subversion +unicode_path
      • sudo port install vim +ruby
    • RealPlayer
    • Papers
      • あらかじめアクティベーションを解除しておく。
    • Remote Desktop Connection for Mac
    • SIMBL
      • GreaseKit
        • oAutoPagerize
        • pbtweet
      • SafariReloadButton
      • SafariStand
        • Action
      • SafariRefManage
      • SafariTabConfig
      • SafariTabMemento
        • 「閉じたタブを開き直す」にキーを割り当て
      • TerminalColoreopard
    • Skype
      • ~/Library/Applicaiton Support/Skypeに履歴があるのでフォルダを丸ごとコピーする。
    • Firefox 3.5
      • GreaseMonkey
      • Firebug
      • FireMobileSimulator
    • TextMate
      • Railscasts Theme http://railscasts.com/about
    • Carbon Emacs
    • TabExposé
    • Tweetie
    • Parallels Desktop for Mac
    • Perian
    • OmniFocus
    • Mailplane
      • Omnifocusプラグイン
    • Flip4Mac
    • Office 2008 for Mac
      • http://www.microsoft.com/mac/downloads.mspx
  1. 通常モデルはMB991J/A []
  2. でも保護シートとか使うつもりはないw []

Home

Feeds
Meta
Get Adobe Flash playerPlugin by wpburn.com wordpress themes

Return to page top