タグ

ブックマーク / rakuto.blogspot.com (17)

  • Google Maps Recent EditのユーザインタフェースをGoogler達は不気味と思うのか?

    BloggerやGoogle Mapで編集された場所のプレイスマーカーをリアルタイムで表示するGoogle Maps Recent Editが公開された。(*1) Google Maps Editの利用シーンが今ひとつピンとこないが、この眺めるユーザエクスペリエンスは、ユーザのアクション無しに画面遷移が発生する。このGoogle Maps Recent Editに不快感を覚えるのは、たとえ拡大や縮小といった操作をしている途中であっても、強制的に次のプレイスマーカーに移動させられる事だろう。 「当に、テレビにでも移して眺めるだけのインタフェースだ!それにしては、何とも退屈な映像だ。各地の美しい写真が表示され、クリック一つで旅行プランが購入できるとか、もっと楽しませてくれ。」 少し技術的な事に触れておくと、この仕組みは、headタグ内にSCRIPTタグを書き出し、実行後に削除するJSONPで

  • [Ruby] Ruby-GetText-1.10.0をRails 2.x系erubyテンプレートに対応させるパッチ

    むとうさん作の、Ruby-GetText-1.10.0をRails 2.0.2で使っていたのだが、GetText.update_pofiles(内部では、GetText.rgettextを呼び出し)によるmsgidの抽出がうまく動作しなかったので、ソースを見た所、パース対象のファイルの拡張子で適用すべきパーサーを識別しているが、lib/gettext/parser/erb.rbでは、.rhtmlのみ適用となっていたため、Rails 2系の*.html.erb拡張子はパース対象に入っていなかった。.erb拡張子もerubyパーサーに追加するパッチです。 /gettext-10.0.0/lib/gettext/parser/erb.rbに適用して下さい。 % cd RUBY_GETTEXT_INSTALL_PATH % sudo patch lib/gettext/parser/erb.rb

  • [Javascript] クロージャを利用したイベントリスナの登録

    時々、特定のイベント間で値を共有したい事があります。 以下の例は、選択されているボックスの状態をどこかに保存しておいて、別のボックスが選択されたら選択を取り消すサンプルです。選択されているエレメントの値を保存する場所としては、グローバル変数か、エレメントのプロパティ(IEで使用するためには、Element.extendされている必要がある。event.targetは、Element.extendされている。)がありますが、イベントリスナにクロージャーを利用すると名前空間も汚染されません。 Source Code selected変数に、現在選択されているボックスをバインドしている。 document.observe('dom:loaded', function() { $('selection').observe('click', (function() { var SELECTED_CL

  • [Javascript] Prototype.jsのEventオブジェクトを拡張する

    prototype.js 1.6では、Element#observeで登録したイベントハンドラに渡されるEventオブジェクトが、Event.extendを呼び出したPrototype.js独自のEventオブジェクトで拡張されていますが、Eventオブジェクトに任意のメソッドを追加する方法です。 例えば、親ノードの座標からの相対座標を取得する、Event#relativeX, Event#relativeYをEventオブジェクトに追加する際は次のようになる。コードは単純だが、Event.addMethodsの引数に渡されるオブジェクトで定義されている要素が、eventを参照可能にするため、Event.extend内で再びメソッドを定義し直して、eventをスコープに加える必要がある。クロージャーを用いるメソッドの再定義は、関数のスコープを自由に変更できるので便利である。 ※ Firef

  • ダムの水は決して漏らさず、溜め続け、勢いよく放流するのがCEOの役割である

    この件でこのブログにもトラヒックが流れているので触れるべきだろう。 情報統制に関して思い出すのが次のエピソードである。(*1) ジョブスは社員を集め、アップル最大級のキャンペーンThink differentのスタートを集う野外パーティーを開いた。席上、アップルの広告に対するThink differentを力説した。 さて、この日初めてジョブスと間近で接した一人の女性エンジニアは深く感銘し、以下に素晴らしいスピーチだったかを興奮しながら友人にメールした。 彼女のメール相手は、ソフトウェア企業家のデイブ•ワーナーという人物で、業界でもっとも影響力のある数百人の読者にメールマガジンを配信していた。そこには、マイケル•デルやビル•ゲイツといった面々も含まれていた。 翌日彼女の元には、ジョブスから「ハイ、スティーブです。話したい事があるんだけど」と留守電が入っていたようだが、幸い、彼女は、Quic

  • jQuery - PrototypeにインスパイアされたJavascriptライブラリ

    jQuery jQuery is designed to change the way that you write Javascript. jQueryはあなたのJavascriptプログラミングの方法に変化をもたらすように設計されている。 というわけで、jQueryを使ったJavascriptプログラミングにチャレンジしてみよう。 What is jQuery? jQuery is a Javascript library that takes this motto to heart: Writing Javascript code should be fun. jQuery acheives this goal by taking common, repetitive, tasks, stripping out all the unnecessary markup, and leav

  • [rails] activesupport-1.4.0 CHANGELOG

    Rails 1.2では、activesupport-1.4.0にアップデートしています。 activesupport-1.4.0/CHANGELOG * Add ActiveSupport::Multibyte. Provides String#chars which lets you deal with strings as a sequence of chars, not of bytes. Closes #6242 [Julian Tarkhanov, Manfred Stienstra, Thijs van der Vossen & Jan Behrens] ActiveSupport::Multibyteをrequireすると、String#charsメソッドが追加されます。charsメソッドはマルチバイト文字列への操作のプロキシ的な役割を果たします。 ActiveSupport

  • 全く、お前の頭はイカれてるぜ!

    MicrosoftによるaQuantiveの買収価格は$6B(7292.17307億円)EbayによるSkypeの買収価格は$2.6B(3159.94166億円)。GoogleによるYoutubeの買収価格は$1.65B(2005.34759億円) Microsoftが買収したaQuantiveは時価総額が$2.8B 2006年度の収入高は$442M 純利益は約$54Mだが2倍のプレミアムがつき$6Bでの全額現金による買収となった。(現金による買収と株式交換による買収のメリット・デメリットや株主や市場への影響についてはバフェットからの手紙が勉強になる。)GoogleのDoubleclickの買収に慌てたYahoo!のRightMediaの買収に後を追った形ではあるが大きな買収額だ。 上記の例はアメリカンドリームだ。 ジャパニーズドリーム?なんだそれは?新興市場に上場することか? 日がSk

  • RSpec 0.7.5.1 + Ruby-GetText-1.8.0 + Rails 1.2.1でRSpecがエラーを吐くので

    先日Rails1.2にバージョンアップしたら、controllerに対してrails_specを実行すると全てエラーを吐くようになった。get, postでリクエストを発行するところでエラーが発生している。 specify "should render 'login'" do get 'login' controller.should_render :login end % ./script/rails_spec spec/controllers/accounts_controller_spec.rb .F 1) NoMethodError in 'When requesting /accounts/login with controller isolated from views should render 'login'' You have a nil object when you

  • [RSpec] Mock API

    Mock Object Mock Objectの作成 my_mock = mock(<name>) my_mock = mock(<name>, <options>) person = mock('person', :null_object => true) Mockは名前を引数に取る。仕様の検証が終わった際に全てのMockが検証される。 option引数をハッシュで与えることでMockの振る舞いを調整できる。現在、:null_objectのみがサポートされている。:null_object => trueを引数に渡すとMockに対する全てのメソッドがMock自身を返すようになる。 Mockに対してスタブメソッドを定義する person.should_receive(:name) # person.name => nil person.should_not_receive(:name) #

  • [rails] 実践RSpec on Rails - コントローラとモデルのBehaviourを書く

    先日RSpec on Rails0.7(0.7.1も)が出ました。 まだまだ枯れていないので実際のプロジェクトで採用するのは難しい面もありますが、isoration from Databaseを支えるmock/stub frameworkや、isoration from viewsは強力なので、それほど影響の無い作成済みの社内アプリにRSpec on Railsを適用してみました。 maihaさんがやっておられるように、自作で作るのもすごく楽しそうなのですがとりあえずは使ってみます。mock/stub frameworkの実装の詳細をあとでみる。 BBDでは、Behaviourを書いてからコードの実装を行うのですが、今回は以前にうみがめで作った社内用情報共有ツールBasecamp(某signalsのパクリ)にBehaviourを書いていくことになります。 BasecampのSpec 社内で

  • Young risk taker.: [Rails] Unit::TestかRSpecのSpecファイルを実行しボトルネックとなるクエリを書き出すSlowQueryLoggerを作った

    久々に面白いモノを作った。 SlowQueryLogger RailsではActiveRecordを利用してガンガン富豪プログラムを書きがちなため、適切にインデクスを張っていないとすぐに重たくなるので、Rails中で発行された遅いクエリをロギングするプログラムを作った。 ActiveRecordの参照系クエリを発行するメソッドをEXPLAINにより実行解析情報を取得しロギングしてから通常の参照クエリを発行するように拡張し、Rails付属のUnit::TestのfunctionalテストまたはRSpecのコントローラーのSpecファイルを実行する。最終的には、filesortか一時テーブルを使用しているクエリがログファイルに書き出される。 つまり、functional testを定義したファイルかRSpecのcontrollerのスペックファイルがあれば特に何も用意する必要はない。 現在My

  • [Rails] 絵文字変換などの携帯サイト開発をサポートするMobile on Railsを作った

    卒論を書いていたため、久々の技術ネタです。 携帯サイトの開発をサポートするプラグインを作りました。 Mobile on Rails API ドキュメント インストール方法 レポジトリをRuby forgeに移しました。 % ./script/plugin install http://mor.rubyforge.org/svn/trunk 更新履歴 以下のパッチを適用しました。ありがとうございます。 Mobile on Rails をSoftBank のあれな絵文字仕様に対応させた 主な機能は次の通り。 キャリア間の絵文字の変換メソッドキャリア内での絵文字表記の変換 ユーザエージェントに応じて絵文字を変換携帯サイト開発のための便利なメソッド フォームからの入力を内部エンコーディング(可読文字列)に変換するセッションIDをURLに付加携帯からのリクエストの際は携帯用のViewを読み込むリクエ

    uchiuchiyama
    uchiuchiyama 2007/08/03
    jpmobile と比べてみたい
  • [Rails] RSpec on Railsを始めてみた - インストールと実行

    RSpec on Railsのさわりだけ。 おそばせながら今頃、BDD(Behaviour Driven Development)を知りました。。。 これからはきちんとBDD or TDDで開発を進めます。 BDDはテスト駆動開発と言葉の言い回しが大きく異なっている。 「ベヒイビアを書いて仕様を設計する。」これが大きなポリシー。 BDDでは必ず仕様コード(spec)を書いてから実際のコーディングを行う。 Rubyには、RSpecというツールがありこれを利用する。 gemパッケージが用意されているので簡単。 $ gem install rspec 次にRSpec on Railsプラグインをインストール。 REL_X_Y_Zの部分をrspecのバージョンとあわせる必要がある。 $ cd RAILS_ROOT $ ruby script/plugin install svn://rubyfor

  • [Rails] ActiveRecord::QueryCacheにキャッシュの削除に関する指定を実装した。

    はてぶやdel.icio.usで意見をもらったので、ActiveRecord::QueryCacheにキャッシュの削除に関する設定をできるように実装した。 使用方法 :expire_methodsでキャッシュを削除するメソッドを指定する。指定できるメソッドは、ActiveRecord#after_○○のメソッド名。 class Person query_cache :expiry => 3.minutes, :expire_methods => [:create, :update, :destroy] end 実装 def query_cache(options) options.assert_valid_keys([:expiry, :expire_methods]) write_inheritable_attribute('query_cache_expiry', options[:e

  • MemoizationのRubyによる高機能な実装Memoizeを作った。

    Memoize (src) memoize-0.1.0.tgz gemだと敷居が高い事も十分に承知なのでページ下部にソースコードも晒しておきます。ご自由にご利用ください。 MemoizationはDonald Michieにより1968年に作られた言葉でその歴史は古い。最初の実装はCommon Lispのようだ。(参照: Wikipedia - Memoization) 既に十分に古い概念なのでRubyにもMemoizationの実装は存在するが随分と低機能で無駄なIOが発生するので高機能なMemoizationの実装をつくった。 Memoizationは簡単に言えば次のような機能である。 関数呼び出しの結果を引数をキーにして保存する。元の関数をキャッシュが存在すればキャッシュを返しキャッシュが存在しない場合には値を導出してからキャッシュするように再定義する。 つまり、グローバル変数の値に

  • [Rails] ActiveRecord::QueryCacheを実装した。CacheStoreにはmemcachedを使用。

    ActiveRecord::QueryCache ActiveRecordの富豪っぷりに困っている。キャッシュの仕組みが用意されているみたいだが過去の遺物となり使用されていない様子。(See Class::ActiveRecord::QueryCache) だから作った。 ActiveRecordの富豪っぷり ActiveRecord#findではフレーム関数を大量に呼び出し深いスタックを生成する。毎度引数+同じ値で呼び出されるのに毎度SQLの生成を行う。 そこでキャッシュ戦略でも比較的基的な、クエリ単位でのキャッシュをおこなうクエリキャッシュとしてActiveRecord::QueryCacheを実装した。引数をキーにしてキャッシュを保存するため、SQLの生成も行わず高速に結果をフェッチすることができる。今後は、エンタープライズでのO/R Mapplerのキャッシュ戦略などを調べてもう

    uchiuchiyama
    uchiuchiyama 2007/07/31
    finder のクエリ単位でキャッシュ(using memcached)
  • 1