l'essentiel est invisible pour les yeux

Friday, March 30, 2007

[雑記] コンシューマー事業で闘うということ

コンシューマー事業では、ユーザは製品・サービスを通じて企業を鏡写しに見ることになる。

流行や趣向の変化が激しいこの戦場では、ある時期に出されたサービスだけでなくサービスを通じて形成される企業のブランドを高めることがとても大事である。コンシューマー事業のトップに立つ人間が中途半端なビジョンしか頭になく、自信と信念を持ってビジョンを対外的に示せないとなればコンシューマ市場での勝負は必ず敗北する。

コンシューマ事業では単一の製品やサービスを購入することは、個人が購買を決めた製品を提供する企業を支持することに等しい。その戦場でユーザを虜にし勝つために必要な 事は「自分達が提供するビジョンを信念を持ってプロモーションできるリーダー」と「不可能に思えるビジョンを可能にしてしまう情熱溢れる天才エンジニア」である。

自分の作るサービスや製品が市場でどのように普及し使われるかを一番理解し示さなければいけないのはコンシューマー事業を率いるトップだが、皮肉にもユーザの方が企業の価値やブランドを企業内部の人間より正確なものさしで見ていたりする。

Monday, March 26, 2007

ActiveRecordには最適化する余地がたくさんある。

UIEJでもisamu136さんと盛り上がっていたのですが、ActiveRecordが富豪過ぎる件。えぐちさんも同じことを書いているのを発見。

ActiveRecordのupdateが富豪過ぎる件

  • AR#saveやAR#update_attributesはレコード数が増えるとインデクスの更新がバカにならない。
  • :stringでは無駄に可変長カラムを使用する。
  • replace構文の使用
  • デフォルト値をなるべく設定する。

複数のDB間の差異を埋めるための抽象化で犠牲になっている部分も多くて、個人的にはほぼMySQLのみを使用するのでMySQLに特化させるAR拡張が欲しいところ。

参考
MySQLの最適化

[EffectiveRails] Vary(多様)なキャッシュに対応するcache_on_rails.rbを作った。




昨日買ったBeauty Flowを聞いているとカッコよくて気分がのってきたので、イマイチ使いづらいRailsのキャッシュ周りをEffectiveにしてみた。

cache_on_rails.rb
cache_on_rails API



使用方法

上記のスクリプトを#{RAILS_ROOT}/lib以下に設置してconfig/enviroment.rbの下のほうに次の一行を追加するだけ。


require 'cache_on_rails'


詳しくはソース中のコメント参照。

次の二点を拡張した。
  • HTTPリクエストヘッダの値を用いてキャッシュするコンテンツを切り替える。
  • ブロックを評価した値をキャッシュのキーとして利用する。返り値が同じ場合は同一のキャッシュされたコンテンツが利用される。


一つ目はHTTPリクエストヘッダの値をキャッシュを生成する際のキーとして利用する。例えばユーザエージェント毎に異なるキャッシュを生成する際は次のように指定する。

ユーザーエージェント別にキャッシュを生成する。

class IndexController < ActionController::Base
caches_action_with_vary :index, :vary => :UserAgent
end

class IndexController < ActionController::Base
caches_action_with_vary :index, :vary => [:UserAgent, :AcceptLanugage]
end


:vary => #{リクエストヘッダ名 or リクエストヘッダ名の"-"を削除して大文字で接続したもの}でキャッシュのキーに影響を与えるヘッダ名を指定する。:vary => [:UserAgent, :AcceptLanguage]のように配列で指定することで複数のリクエストヘッダが一致するリクエストに応じたキャッシュを生成できる。

レスポンスヘッダには、:vary => #{HTTPリクエストヘッダ名}で指定したHTTPリクエストヘッダ名がVaryヘッダに指定して返される。Varyヘッダは大文字・小文字を考慮しない。

Vary: user-agent, accept-language


しかし、これだけではRailsのキャッシュの使い心地はまだまだなので、ロケール別・PCのキャリア別・PC/携帯別といった感じに自由にキャッシュを生成できるようにした。ブロックを評価した値をキャッシュのキーとして利用する。ブロック引数にはコントローラが渡される。

以下の例は、gettext/railsと組み合わせて、ロケール毎にキャッシュが生成されるようにする。

class IndexController < ActionController::Base
caches_action_with_vary :index do |controller|
Locale.current.language
end

end

次の例は、Mobile on Railsを使用して携帯とPCのそれぞれでキャッシュを生成する。

class IndexController < ActionController::Base
caches_action_with_vary :index do |controller|
!! controller.request.mobile? # => true or falseがキャッシュのキーとして利用される。
end

end
ブロックの評価値をキャッシュのキーとして利用するので、キャリア毎のキャッシュを保存する事も簡単である。

Cache on Railsの実用性はこれから拡張していくけど、アイデアとしては面白いと思うがどうかな?

絵に描いた餅

大学も卒業し生まれ育った京都も今月一杯。

チャーチルの「過去にこだわる者は未来を失う」という言葉があるが、現在自分が何をすべきかに焦点を合わせて最高の力を注ぎ込めない人間は大きな事を成し遂げられない。



人の精神は非常に繊細にできている。
過去の事を引きずり悩み迷う。周りの人の気持ちや受けた恩義などが意思決定において影響を及ぼす。それらの過去が生活におけるありとあらゆる所で影響し判断を鈍らせる。これらの答えもゲーム理論が明快な答えを示してくれるだろうか?

「大学4年間で何を失ったか?」と聞かれれば「大人になったこと」。

  • 人の気持ちを考え発言するようになった。
  • 一歩引くことも覚えた。
  • キツイ言葉もオブラートにつつんで言えるようにもなった。
  • いい奴と思われるように行動する。
  • 周りに合わせる。
大学4年間で「他の人が扱いやすい人間」へと成長した。
全くつまらない人間だ。組織の中で歯車として働くならいい歯車になれるかもしれない。
真に大切な事は、周りの人に気を使うことではなく、絶対目標において貢献することだ。
わりかし自己を抑えて遠慮して生きてきましたが、4月からこういったつまらない振る舞いは全て辞めることにします。

中途半端では何一つ楽しめない。
何かを成し遂げるには、周りから異常者とも見られるくらいとことんやらなければいけない。過去の経験や感情など周りの外的要因に惑わされている人間に誰が惹かれるだろうか。未来を見て信念を持ち、楽しいと思える事に向かって異常なエネルギーも持って突き進まなければならない。


昔、クラブの顧問の先生とよく言い争いをした。闘争することが大好きだったが、その時にいつも言われたのが、「絵に描いた餅」だった。顧問に屈しないその姿もあって、ヒトラーと冗談じみたあだ名がついた。「絵に描いた餅」にならないように4年間プログラムを書き続けてきた。本当のお楽しみはこれからだ。

Friday, March 23, 2007

TBWA - 1984の製作を手がけた広告代理店

memo.

TBWA
TBWA Japan

1984の製作を手がけた広告代理店。

via Wikipedia
新会社にはTBWAが40%、博報堂ジーワンが60%出資している。
なるほど。

アメリカは悪の帝国と戦うヒーローが好きだね。オラクルでもアップルでもマイクロソフトを悪の枢軸扱いして自分達はヒーローを演出する。会社の演出はとても大事。自社のプロモーションのために、敵を作り悪役に仕立てるところはとってもステキ。

敵が強ければ強いほどヒーローの活躍が目立つ。
オフライン上の全ての情報までも自社に集めGoogle政府をもくろむGoogle帝国も敵としては申し分ないと思う。

Thursday, March 22, 2007

[Rails] SoftBank携帯からの制御文字を含む入力の変換に関するバグFix (Mobile on Rails)

SoftBank携帯からフォームを通して入力された文字列中に制御文字列が含まれる際に変換がおかしくなるバグを直しました。(Revision 49)

Mobil on Rails

また、SoftBank(Vodafone)の3G携帯にはSJISの外字領域を使用して絵文字を送出する機種が存在します。それらの機種については現在未対応(絵文字は全て削除される)です。

SoftBankの絵文字のSJIS(hex)データを載せたドキュメントがPDFしかなくセキュリティ上の理由でテキストに変換することもできないため、現在キャプチャを取って画像として起こしてOCRでテキストデータへの変換をするというバッドノウハウで対応中。


Index: lib/mobile/emoji/softbank.rb
===================================================================
--- lib/mobile/emoji/softbank.rb (レビジョン 48)
+++ lib/mobile/emoji/softbank.rb (レビジョン 49)
@@ -13,9 +13,15 @@
bytes = str.unpack('C*')
len = bytes.length
ret = ''
while i < len do
- if bytes[i] != 0x1b
- ret += [sprintf("%x", bytes[i])].pack('H2')
+ if bytes[i] != 0x1b # Not emoticons
+ # Multibyte characters
+ if (bytes[i] > 0x80 && bytes[i] < 0xa0) || (bytes[i] > 0xdf && bytes[i] < 0xf0)
+ ret += [sprintf("%x%x", bytes[i], bytes[i+=1])].pack('H4')
+ else # Single byte character
+ ret += [bytes[i]].pack('C')
+ end
else
emoji_bytes = []
emoji_bytes << bytes[i] while bytes[i+=1] != 0x0f




Index: test/emoji_test.rb
===================================================================
--- test/emoji_test.rb (レビジョン 48)
+++ test/emoji_test.rb (レビジョン 49)
@@ -81,6 +82,7 @@

def test_softbank_convert_internal_encode
assert_equal Emoji::SoftBank::Convert.convert_internal_encode(@sb_binary), @sb_internal
+ assert_equal Emoji::SoftBank::Convert.convert_internal_encode(@sb_binary_with_ascii), @sb_internal_with_ascii
assert_equal Emoji::AU::Convert.convert_internal_encode(@m_sb_binary), @m_sb_internal
end

Tuesday, March 20, 2007

[Rails] WILLCOMの絵文字入力&変換に対応(Mobile on Rails)

Mobile on Rails

Mobile on Rails RDoc

Mobile on RailsをWILLCOM絵文字の入力と各キャリアへの絵文字の変換に対応させて、いくつかのバグFixを行いました。絵文字の変換は完全に私の主観です。

WILLCOMは絵文字数が少ないため、他のキャリアからの変換の際にゲタ文字になることが多いです。
Mobile on Railsの絵文字変換表を更新し次のRakeタスクを実行することで更新された絵文字変換テーブルを使用できます。


% rake updatedat


絵文字変換表のみ使用される場合にはこちらよりダウンロードしてください。
そういえば、WILLCOMもウノウの人が作っていたかな?

参考

WILLCOM コンテンツ作成マニュアル(リファレンス編)

Thursday, March 15, 2007

ドリコムズと飲み会

本気でスカウター開発合宿しませんか? > ドリコム

主な論点。
・DB Hacks (ダンボールハック)
・次の10年のキラーアプリはスカウター
・集中力マネージメント
・人の無意識の行動の可視化

-------------------------------------
ダンボールプロトタイピング 2.0
を出版するとかしないとか。

監修
・ダンボールハウスの人
・ダンボールガンダムの人

目次
・ダンボールの歴史
・ダンボールを安く仕入れる方法
-------------------------------------

-------------------------------------
スカウター

アクセサリーのようにスカウターをガジェットとして持ち歩く時代がきっと来る!
プロモーションは、CanCamで。
-------------------------------------

-------------------------------------
集中力マネージメント

プログラマのアウトプットの量は集中力をどれだけ持続できるかの差だよね。という話。
ここからここは集中時間のように決めると、その時間帯での個人へのあらゆる割り込みが一旦キューにエンキューされて一切割り込みが入らなくなる。プライオリティ付けも可能。

コンシェルジェ・キュー。
-------------------------------------

-------------------------------------
無意識行動の可視化

それキーロガーで。
-------------------------------------

Sunday, March 11, 2007

Happy Birthday songs

東京で迎える誕生日。22歳になりました。
今まで出会った人達全てに感謝。

Happy Birthday (Bonus Track)

Celebration

Happy Birthday (Bonus Track)は、内装が面白いCELEBで流れていました。かっこいいハッピバースデーソング。(iTunes Music Storeで買えます。)
バラガン邸宅でもいいなぁと思ったけど、建物の中に水面があって水が流れている音がする感じいいよな。

「方向を定めて迷わず見失わずがむしゃらに突き進む事で本当にやりたい事を実現できる」って言葉が頭に残っていて「俺、迷いがあるな」と気づきました。残り少ない人生を迷いを振り切りバカになって突き進むのみです。

ごちさそうさまでした。

Saturday, March 10, 2007

[Rails] 携帯からのリクエストの際に呼び出すアクションを切り替える

Mobile on Railsでは、携帯からのリクエストの時には、#{RAILS_ROOT}/app/views_mobile/以下からテンプレートを読み込みますが、呼び出すアクションも変更したい時があるのでアクションの切り替えを試しに実装してみました。

携帯からのリクエストの際の仕様

  • __mobile_#{action_name}というメソッドがコントローラ内に定義されている場合はそちらを呼び出す。
  • __mobile_#{action_name}を呼び出した際もviewのテンプレートパスは通常通り#{RAILS_ROOT}/app/views_mobile/#{action_name}.rhtml
  • __mobile_#{action_name}が定義されていない際は、action_nameが呼び出される。

携帯からのリクエストの際に別のアクションを実行したい場合のみ、__mobile_#{action_name}を定義することでそちらのアクションが実行されます。定義しない際は通常のアクションが呼び出され、携帯用のviewが表示されます。

インストール方法

% ./script/plugin install -x http://shindaita.stiq.net/svn/mobile_on_rails/trunk/mobile_on_rails/


変更箇所は、コントローラのActionController::Base#perform_actionとActionView::Base.full_template_path.


Index: mobile_on_rails/lib/mobile/controller.rb
===================================================================
--- mobile_on_rails/lib/mobile/controller.rb (revision 166)
+++ mobile_on_rails/lib/mobile/controller.rb (working copy)
@@ -7,15 +7,27 @@
module ActionController #:nodoc:
# This module is offer fixtures for perform request from mobile.
module Mobile
+ # prefix which is add action method name when request is from mobile
+ PREFIX_OF_REQUEST_FROM_MOBILE = "__mobile_"
+
def self.included(base)
base.class_eval do
after_filter :after_filter_for_mobile
before_filter :before_filter_for_mobile
alias_method_chain :rewrite_options, :session_id
+ alias_method_chain :perform_action, :mobile
end
end

protected
+ def perform_action_with_mobile
+ if request && request.mobile?
+ _action_name = "#{PREFIX_OF_REQUEST_FROM_MOBILE}#{@action_name}"
+ @action_name = _action_name if self.class.action_methods.include?(_action_name)
+ end
+ perform_action_without_mobile
+ end
+



--- mobile_on_rails/lib/mobile/view.rb (revision 166)
+++ mobile_on_rails/lib/mobile/view.rb (working copy)
@@ -3,7 +3,8 @@
protected
def full_template_path_with_mobile(template_path, extension)
if controller.kind_of?(ActionController::Base) &amp;& controller.request.mobile?
- full_template_path_without_mobile("../views_mobile/#{template_path}", extension)
+ _template_path = template_path.sub('/__mobile_', '/')
+ full_template_path_without_mobile("../views_mobile/#{_template_path}", extension)
else
full_template_path_without_mobile(template_path, extension)
end

Mobile on Railsでぐぐってもこのブログが全くヒットしないのが面白い。
ξ;゜ー゜)ξ { 遅レス。強し。

Thursday, March 08, 2007

STARZ FILE - Freewayがイイ




STARZ FILE

iTunes Music Storeでダンスミュージックのニューリリースを聞きながら、気に入ったのを買っていた時に見つけたアルバムSTARZ FILEがカッコイイ。中でも1曲目のFreewayがかなりイイ!先週旅行行く前に作ったドライブ用のプレイリストが、STUDIO APARTMENT, FPM, Clazziquai Projectなどで夜っぽい感じだったのでFreewayを追加した。

Freewayの心地良い音とラップ好きだな。

Wednesday, March 07, 2007

[Rails] Mobile on Railsの変更

卒論も終了したので、
絵文字変換をメインに作っていてコントローラ等のソースが"とりあえず実装"だったため書き直しました。
ディレクトリ構成が変わっています。

Mobile on Rails

バージョンアップしましたのでアップデートよろしくお願いします。
レポジトリのパスが変わっているのでご注意ください。

TODO

  • WILLCOMの絵文字への対応
  • セキュリティ周りの対応
    • 基本はルーターでゲートウェイのIPチェック
    • アプリレベルでゲートウェイのIPチェックはパフォーマンスが心配
    • アプリレベルでは外部サイトへのリンクはセッションIDを付加しない
  • キャッシュなど


Tips: 携帯からのリクエストとPCのリクエストでレイアウトを切り替え

layout lambda { |controller| controller.request.mobile? ? 'chtml_main' : 'pc_main'}