• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
 
 

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/45

6/15(木)に開催されたGreeLabsのオープンソーステクノロジー勉強会#4に行ってきました。

今回はミラクルリナックスCTOの吉岡さんと、Greeの岩崎さんがスピーカーでした。Postgresのスケールアップに関するボトルネック分析手法の紹介と、エンジニアのキャリアについてを吉岡さんが、ウェブデザインパターンの紹介を岩崎さんがされました。

今回はCPU数を増やしていく、というようなスケールアップの話でしたが、横方向のスケールアウト手法に関心がある人が多かったのかな? エンジニアのキャリアについては、35歳でやめるな、という言葉が印象に残っています。

ウェブデザインパターンについては、呼び方の標準化によってコミュニケーションが円滑になりそうだし、HTMLのid、class名を考えるのが楽になったりと、いろいろ楽しそうなので詳しく調査してみたいです。情報源として、下記のサイトが紹介されていました。

懇親会では、Greeの藤本さんやKBMJの笠谷さん、KLabの富田さん、GaiaXの山口さん、ADWAYSの小関さんらと話しました。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/45

posted by Png genki on Fri 16 Jun 2006 at 00:48

同僚の吉留さんにお願いして、JR恵比寿駅からドリコム東京事務所までの地図を作ってもらいました。

map

だいたい徒歩5分ぐらいです。事務所のビルの前には、雨がしのげる屋根があります。

posted by Png genki on Thu 15 Jun 2006 at 15:03

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/41

6月10〜11日の二日間にわたり開催された、日本Rubyカンファレンス2006(a.k.a. RubyKaigi2006)でRails In Productionというパネルディスカッションのパネラーとして参加させていただきました。

参加者の皆様、スピーカーの皆様、そして何より運営スタッフの皆様、 大変お疲れ様でした。大変楽しい時間がすごせました。ありがとうございます。

それから、僕がプレゼンで使用した資料はこちらになります:


rubykaigi06_takiuchi.ppt

会場が縦に長いスペースと聞いていたので、文字が見やすい高橋メソッドを使わせていただいたところ、スピーカー控え室で本家の高橋さんに添削&ご指導いただけるという幸運に恵まれました(笑) でかいプレゼンを買わなければ。

でかいプレゼン 高橋メソッドの本

それにしても、コメンテーター陣が凄かったですねー。むしろこっちから質問したかった(笑)  DHHさんから質問される、という状況はなかなか考えられないですよね。

2日間ほとんどスピーカー控え室の中におりましたが、Rubyコミュニティの著名な方々が沢山いらっしゃいまして、非常にエキサイティングでした。まつもとさん、DHHさん、西さん(くまくまーの人)ともはじめてお会いする事ができました。

特に、西さんとActiveRecord周りの話や、Patchを書くときに言葉の壁に苦しんでいる事など、いろいろな話が出来て良かったです。ぜひRails勉強会にもいらしてくださいね。Maihaのイラストを描いてくださってありがとうございました!

舞波乙です。

それから印象的だったのは、会場にいらっしゃっていた外国人の皆様は、Zevさん、ストヤンさんといい、なかなかご一緒していて楽しい方が多かった事です。海外で開催されているRubyConfも、こんな楽しい方々がいっぱいいらっしゃるんでしょうね。いつか参加してみたいです。 英語の壁を越えた暁には(いつになるやら…)

今後ともRubyコミュニティの発展をお祈りいたします。願わくは、来年のRuby会議で再会できますことを。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/41

posted by Png genki on Mon 12 Jun 2006 at 01:30

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/39

render_componentの挙動を調査する必要があったので、メモを残しておきます。 render_componentは、いわゆるWidgetのような、再利用可能なGUI部品をレンダリングするメソッドです。以下に、要点だけ抜き出したソースを示します。

長いので先に結論だけ書いておくと、render_componentでレンダリングされるコンポーネントのコードから、呼び出し元の外部コントローラにアクセスするには、ActionController#parent_controllerを介せばOKです。

$ vim vendor/rails/actionpack/lib/action_controller/components.rb
module ActionController
module Components
  base.helper do
    def render_component(options)
      @controller.send(:render_component_as_string, options)
    end
  end
  module ClassMethods
    # Track parent controller to identify component requests
    def process_with_components(request, response, parent_controller = nil)
      controller = new
      controller.parent_controller = parent_controller
      controller.process(request, response)
    end
  end
  module InstanceMethods
    # Extracts the action_name from the request parameters and performs that action.
    def process_with_components(request, response, method = :perform_action, *arguments)
      flash.discard if component_request?
      process_without_components(request, response, method, *arguments)
    end
  protected
    # Returns the component response as a string
    def render_component_as_string(options)
      component_logging(options) do
        response = component_response(options, false)
        if redirected = response.redirected_to
          render_component_as_string(redirected)
        else
          response.body
        end
      end
    end
  private
    def component_response(options, reuse_response)
      klass    = component_class(options)
      request  = request_for_component(klass.controller_name, options)
      response = reuse_response ? @response : @response.dup
      klass.process_with_components(request, response, self)
    end
    # determine the controller class for the component request
    def component_class(options)
      if controller = options[:controller]
        controller.is_a?(Class) ?
          controller :
          "#{ controller.camelize }Controller".constantize
      else
        self.class
      end
    end
    # Create a new request object based on the current request.
    # The new request inherits the session from the current request,
    # bypassing any session options set for the component controller's class
    def request_for_component(controller_name, options)
      request         = @request.dup
      request.session = @request.session
      request.instance_variable_set(
        :@parameters,
        (options[:params] || {}).with_indifferent_access.update(
          "controller" => controller_name, "action" => options[:action],
          "id" => options[:id]))
      request
    end
  end
end

request_for_componentの中身:
with_indifferent_accessは、ActiveSupportによるHashの拡張機能で、Symbolと文字列のkeyを同一視できるようにするものです。instance_variable_setというのは、RubyのObjectクラスのメソッドで、こんな感じにインスタンス変数を外部から設定できてしまいます:

obj = Object.new
p obj.instance_variable_set("@foo", 1)  # => 1
p obj.instance_variable_set(:@foo, 2)   # => 2
p obj.instance_variable_get(:@foo)      # => 2

というわけで、上記のようにcontrolleractionidの指定を挿げ替えてrequestオブジェクトを偽装しているわけです。

そして、最終的にklass.process_with_components(request, response, self)が呼び出され、render_componentの呼び出し元のcontrollerparent_controllerに設定し、制御を実行しています。

したがって、レンダリングされるコンポーネントの内部からは、parent_controllerを介して呼び出し元のcontrollerとやり取りを行う事ができます。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/39

posted by Png genki on Wed 7 Jun 2006 at 01:37

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/38

ふつうのHaskell写経会に行ってきました。サイトはこの辺でしょうか?

12〜14人ぐらい集まって、淡々とペア写経をしました。SICPと比べるとだいぶテンポが速そうですね。3章の始めぐらいまで進みました。

ghci

Prelude> :t length
length :: [a] -> Int

のようにすると出てくる型変数(type variable)の[a], [b], ...というのが26個以上ある場合は枯渇しないんだろうか(ものすごくどうでも良いことなのですが、なんだかとても気になったのです)、という素朴な疑問に遭遇したので、角谷さんと一緒にちょっと調べたりしていました。

しかしよく考えると、この[a]とか[b]というのは、関数の型宣言時に人間がつけた記号をそのまま返しているだけのようなので、そんな心配はするまでも無かったようです。例えば;

foo :: [bar] -> [baz] -> [qux]

というような宣言をされていれば、ghci:tをしたときにはそのまま出てくるだけなんですね。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/38

posted by Png genki on Tue 6 Jun 2006 at 22:18

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/37

RailTies(RailsのCore)への PATCH5003が採用されました。

ちょっと嬉しいです。

これによって、./script/generate pluginuninstall.rb が生成されるので、その中にプラグインのUninstallコードを書けるようになります。

例えば、install.rbでCSSとかJavaScriptとか画像ファイルをpublic/以下にコピーするプラグインなどで、./script/plugin remove時にそれらを取り除くようにする事ができます。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/37

posted by Png genki on Sun 4 Jun 2006 at 15:11

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/36

CentOSにEthnaを導入する手順をメモしておきます。

まず、CentOSにPHP5.1.4を導入します。 RPMを使う場合は「武蔵流プログラマへの道 - CentOSでPHP5のRPMを作ったよ。」が参考になりそうです。ソースから導入する場合は、僕が以前書いた記事も多少は参考になるかも。

PHPの導入が完了したら、こちらを参考に下記を実行します。

# pear install http://ethna.jp/pear/Ethna-2.1.0-preview1.tgz

次に、include_pathの通ったディレクトリに/usr/share/pear/Ethnaを移動します。

# cp -R /usr/share/pear/Ethna /usr/local/lib/php/Ethna

それから、いくつか依存ライブラリがあるので、無い場合は導入しましょう。

# pear install PEAR/DB
# pear channel-discover pearified.com
# pear install pearified/Smarty

これで完了です。非常に簡単ですね。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/36

posted by Png genki on Thu 1 Jun 2006 at 18:09

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/35

Script.aculo.usのバージョンが新しくなって、Ajax.InPlaceCollectionEditorが導入されました。このオブジェクトを利用すると、セレクションボックスに関してInPlaceEditingを行う事ができます。

諸事情により、この機能をRailsから使いたくなったので、いろいろ調べてみました。比較的新しい機能なのでまだEdgeRailsにも入っていないようですが、ruairi氏がpatchをポストしているのを見つけました。

使い方に関しては、同氏がRailsMLに投稿したメールにざっくりと書かれています。プラグインとして作成されているので、利用するのは非常に簡単です。

実はruairi氏のpatchの他にも、in_place_select_editorなどもあります。こちらはRails Recipesの"Making Your Own JavaScript Helper"の項で書かれているものと同じもののようです。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/35

posted by Png genki on Tue 30 May 2006 at 22:42

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/34

5/18(日)にGree勉強会#3に行ってきました。この日は、前半に圏論勉強会、後半はGree勉強会と、勉強会尽くしでした。

今回はRubyの会会長の高橋さんと、Gree CTO の藤本さんがスピーカーです。

微妙にRailsとEthnaのフレームワーク対決みたいな感じでいて、そうでもなく。むしろ、ページコントローラとフロントコントローラの対決のようではありました。

セッションの内容としては、Railsの国際化の話とか、携帯対応の話とかが面白かったです。Railsの国際化はRubyGetTextがお勧めです。日本語化だけであればActiveHeartが便利。ActiveHeartには携帯対応をする時に便利な機能もついてます。

それから、隣にはてなのnaoyaさんが座っていたので色々面白い話ができました。反対側の隣はYahoo!の角田さんで、だいぶお疲れモードっぽかったです。

懇親会では、モバイルファクトリーのtokuhiromさんとか、ウフルの永上さんと話してました。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/34

posted by Png genki on Mon 29 May 2006 at 10:54

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/33

5/28(日)に圏論勉強会#17に行ってきました。

Wiki:CategoryTheory:圏論勉強会

第17回ということで、もうそろそろ終わり間近な感じでした。参加者数は5〜6人。素人くさいSICP読書会の参加者もいました。

やった場所は、p292〜p294のあたり。8:30から開始したのですが、16時からGree勉強会があったので、15時ごろに中座しました。次回までにもっと自習しておかないと。

圏論って何?という方には、この辺の資料がわかりやすいかもしれません:

向井研発表1 〜 圏論への誘い
向井研発表2 〜 圏論への誘い (その2)
向井研発表3 〜 圏論への誘い (その3)
なぜ圏論に興味を持ったかというと、HaskellのMonad関連という事もありますが、Photorealistic Renderingに関するChristensen氏の論文(Adjoints and Importance in Rendering: an Overview)を最初に見たときに、ああ、圏論に関する知識があれば、こういった事柄をうまく記述できそうだなー、と思っていた事が大きいですね。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/33

posted by Png genki on Mon 29 May 2006 at 10:40