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 genki genki on Tue 30 May 2006 at 22:42 with 0 comments

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 genki genki on Mon 29 May 2006 at 10:54 with 0 comments

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 genki genki on Mon 29 May 2006 at 10:40 with 0 comments

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

Ruby on Railsでは、URLのマッピングに関する情報を routes.rbファイルに記述します。これを記述する際に、URLを丸ごとパラメータとして渡したい事があります。例えば、はてなブックマークでは、特定のURLに関するエントリーの情報を参照するためのURLは、こんな感じになります:

http://b.hatena.ne.jp/entry/http://foo.bar.com/

これがdel.icio.usの場合、URLを直接指定するのではなく、md5を使ったダイジェストを渡すようになっています。URLの規格としては後者の方が正しいアプローチなのですが、アドレス記入欄にURLを手入力する場合や、グリースモンキーから利用する場合を考えると、md5を使わずに済んで楽なので、前者の方法も捨てがたいわけです。

では、これと同じ事をRailsでやるにはどうしたら良いでしょうか。単純に考えると、routes.rbファイルに;

map.connect 'entry/:url', :controller => 'entry', :action => :list

という感じに書けば良さそうです。しかし、実際にこのコードを実行してみると、URLに含まれる'/'がデリミタだと見なされてしまうため、うまく認識してくれません。

最後の'/'より後に続く部分をまとめてパラメータとして捕捉するためには、下記のように記述する必要があります。

map.connect 'entry/*url', :controller => 'entry', :action => :list

こうする事で、params[:url] には ActionController::Routing::PathComponent::Result オブジェクトが渡されます。このオブジェクトの実体は、デリミタ'/'で区切られたパートを保持する配列です。また、to_sメソッドを呼び出す事で、元のURLを再現できるようになっているので、

url = params[:url].to_s

とすると、パラメータとしてURLを丸ごと渡す事ができます。

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

posted by genki genki on Fri 26 May 2006 at 21:43 with 0 comments

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

Login Generator - ユーザ認証 へのトラックバック

転ばぬ先の杖という事で、login_generatorを初めて使った時にはまりやすい罠の情報。

login_generatorが生成するaccountのfunctional testのコードは、Fixtureのデータを@bob のような感じで参照できる、instantiated_fixturesという機能を使うように書かれています。

しかしながら、Railsのデフォルト設定ではこの機能はOFFになっているので、rake test:functionals を実行すると失敗します。

この機能をONにするには、test/test_helpler.rbの中にある

self.use_instantiated_fixtures  = false

という行を true に変えればOKです。

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

posted by genki genki on Fri 26 May 2006 at 11:32 with 0 comments

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

Debian(sarge)にMySQL5.0を導入する方法のメモです。

/etc/apt/sources.list に下記の2行を追加します。

deb http://ftp.de.debian.org/debian/ testing main contrib non-free
deb-src http://ftp.de.debian.org/debian/ testing main contrib non-free

そして

# aptitude update
# aptitude install mysql-server-5.0

で、質問にYesで答えて完了。

途中で mysql のバージョンを変更すると、下記のようなエラーが出る場合があります。

Lost connection to MySQL server during query: SELECT version FROM schema_info

そのような場合、ここのサイトに書かれている事が解決の助けになるかもしれません。

僕の場合、上記の問題が発生したため、上記サイトの情報と、このあたり ([ruby-list:33513] Re: Mysql/Ruby のコンパイル)の情報を参考にしつつ、下記のように対処しました。

# gem install mysql
# cd /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7
# vim extconf.rb

ここで、extconf.rbの中身(L14)を下記のように修正:

  #while not find_library('mysqlclient', 'mysql_query', lib, "#{ lib }/mysql") do
  #  exit 1 if libs.empty?
  #  have_library(libs.shift)
  #end
  have_library("mysqlclient")

あとは、

# ruby extconf.rb
# make install

でOK!

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

posted by genki genki on Thu 25 May 2006 at 19:03 with 0 comments

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

素人くさいSICP読書会に参加してきました。

今回も、前回に引き続いてサイボウズ・ラボ様にて開催されました。素晴らしい環境を利用させてくださいましてありがとうございます。

参加者数は、だいたい20名前後でした。前回同様、演習問題を黙々と解いていくという形式で進められました。今回の範囲は、演習問題 1.37〜1.39でした。連分数に関するところです。連分数を使って、πや自然対数の底の導出や、正接関数の構成などを行いました。

ということで、今回使ったコードを置いておきます。

; 5/24 sicp#14
;
(define (cont-frac n d k)
  (define (frac i)
    (if (= i k)
        (/ (n i) (d i))
        (/ (n i)
           (+ (d i) (frac (inc i))))))
  (frac 1))
(define (dec n) (- n 1))
(define (cont-frac-i n d k)
  (define (frac i result)
    (if (= i 0)
        result
        (frac (dec i)
              (/ (n i) (+ (d i) result)))))
  (frac k 0))
(define (e-38 k)
  (/ 1 (cont-frac-i
        (lambda (i) 1.0)
        (lambda (i)
          (* (if (= (remainder i 3) 1) 2 1)
             (+ (floor (/ i 3)) 1)))
        k)))
(define (tan-cf x k)
  (define (n i) (if (= i 1) x (- (* x x))))
  (define (d i) (dec (* 2 i)))
  (cont-frac-i n d k))

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

posted by genki genki on Thu 25 May 2006 at 10:09 with 0 comments

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

今月は、各所でRailsアプリケーションの国際化が話題になっていたようですね。

Ruby on Rails > Re: no one cares about i18n (was [OT]: Asking questions on t
Rails i18n Gets a Mailing List

中でも秀逸なのがこちらの記事

InternationalizationComparison

Railsアプリケーションの国際化における選択肢とその比較を行った記事が投稿されていました。

この表を見るかぎり、現時点ではむとうさんのRubyGetTextが良い感じですね。

RubyGetTextの使用法に関しては以下のサイトが詳しいです。

Ruby on RailsへRuby-GetTextの適用
Using Gettext To Translate Your Rails Application

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

posted by genki genki on Tue 23 May 2006 at 15:07 with 0 comments

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

単にヘッダとフッタを消すだけですが。
http://js.gthp.net/gm/ldr/without_header_footer.user.js

headerとfooterというidを使っているサイトなら何でも使えます。

ファイル名の末尾に .user.js ってつけると自動でインストールしてくれるんですね。

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

posted by genki genki on Tue 23 May 2006 at 00:13 with 0 comments

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

5/21日のRails勉強会@東京#6に参加してきました。

今回も前回同様オープンスペース形式で、前半・後半に分かれて7つのセッションが行われました。

■前半
・Rubricksの紹介
・Typo改造(I18N)
・SeaserでRails
・ChangeLogを淡々と読むよ

■後半
・Validation
・Mongrelのソースを読むよ
・AWDwRのテストの章を読むよ

今回は「ChangeLogを淡々と読む」と「Mongrelのソースを読む」に参加しました。
□ChangeLogを淡々と読む
Rails1.1以降の変更を追いかけて面白そうな機能を探すために、Railsのコンポーネントである、ActiveRecord、ActionPack、ActiveSupport、それからRakeのChangeLogを(本当に)淡々と読みました。5人の参加者でそれぞれ分担し、僕はActionPackの最新Logを読んでいきました。

・routesでサブパスのデリミタとして「;」が使えるようになった
・assert_recognizesの第2引数でmethodを指定できるようになった。
・link_to_functionでRJSテンプレートっぽいものをその場で記述できるようになった
・remote_form_for が form_for と同じように使えるようになった
・Prototype 1.5.0_rc0 にアップデート

定期的にChangeLogを追いかけるのは面白いですね。

□Mongrelのソースを読むよ
最近流行のMongrelのソースを読みました。SCGIの開発者がMongrelに移ったらしいという話ですが、確かにMongrelとSCGIは使い方が似ていますね。static file は Lighttpdに任せるという使い方だと、なお更SCGIと似たような立ち位置になります(この辺の図がわかりやすい)

起動が早いので、 development 環境で使用するには持って来いのようです。

□懇親会
懇親会では、荻野さん周辺で数学の話に花が咲いていました。やっぱり数学は面白いですね。数論の話、P≠NP問題の話…。クレイ数学研究所のミレニアム賞金問題の話も出ていました。

・リーマン予想
・バーチ&スウィンナートン・ダイアー予想
・P≠NP 問題
・ホッジ予想
・ポアンカレ予想
・ヤン-ミルズ方程式の質量ギャップ問題
・ナビエ-ストークス方程式の解の存在問題

この問題を解いたらそれぞれ100万ドルですが、全く歯が立たないです。

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

posted by genki genki on Mon 22 May 2006 at 12:02 with 0 comments

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

P2P技術の本当に面白いところは、ランニングコスト0で様々なサービスを提供できる事です。

ランニングコストが0であるということは、放っておいても勝手に存在し続けられるという事です。

例えばWinny は、まるでそれが自立した生命であるかのように、誰も運営していなくても、サービスを提供し続けています。

これはネットワークの上に生まれた新しい高次元の生命なのかもしれません。

生物でいうなれば原始多細胞生物です。

ネットワークの海の中で、二度目のカンブリア爆発が起こる未来を夢想してみました。

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

posted by genki genki on Sat 20 May 2006 at 09:44 with 0 comments

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

今週も、同僚のよしてつさんと一緒に素人くさいSICP読書会に参加してきました。

今回はサイボウズ・ラボ様のセミナールームにて開催されました。
毎度の事ながら、非常に素晴らしい環境を利用させていただいことを感謝いたします。

参加者は、だいたい20名前後だったでしょうか。前回同様、演習問題を黙々と解いていくという形式で進められました。今回の範囲は、演習問題 1.34〜1.36です。ようやく lambda で出てきたところですね。主に、関数の不動点(fixed point)の算出を行いました。

関数 f(x) の不動点とは、f(x) = x となるような x の事です。グラフを(x,y)平面にプロットして考えると、y = f(x) と y = x の交点が全て不動点になります。なので、不動点は一個であるとは限りません。不動点が存在しない f(x) もありえます。

今回使ったアルゴリズムは、初項 x_0 としてある値を設定し、続く数列を x_i = f(x_(i-1)) } で計算した時の、i → ∞ での極限を求める事で不動点に収束させるというものです。

こちらのサイトに図解入りのわかりやすい説明がありますね。

ということで、今回使ったコードを置いておきます。
----
; 5/17 SICP#13
(define (square x) (* x x))
(define (f g)
 (g 2))
(define (average a b)
 (/ (+ a b) 2))
(define (search f neg-point pos-point)
 (let ((midpoint (average neg-point pos-point)))
  (if (close-enough? neg-point pos-point)
    midpoint
    (let ((test-value (f midpoint)))
     (cond ((positive? test-value)
         (search f neg-point midpoint))
        ((negative? test-value)
         (search f midpoint pos-point))
        (else midpoint))))))
(define (close-enough? x y)
 (< (abs (- x y)) 0.001))
(define (half-interval-method f a b)
 (let ((a-value (f a))
    (b-value (f b)))
  (cond ((and (negative? a-value) (positive? b-value))
      (search f a b))
     ((and (negative? b-value) (positive? a-value))
      (search f b a))
     (else
      (error "Value are not of opposite sign" a b)))))
(define tolerance 0.00001)
(define (fixed-point f first-guess)
 (define (close-enough? v1 v2)
  (< (abs (- v1 v2)) tolerance))
 (define (try guess)
  (let ((next (f guess)))
   (if (close-enough? guess next)
     next
     (try next))))
 (try first-guess))
;(define (sqrt x)
; (fixed-point (lambda (y) (/ x y)) 1.0))
(define (sqrt x)
 (fixed-point (lambda (y) (average y (/ x y))) 1.0))
; ex 1.35
(define phi
 (fixed-point (lambda (x) (+ 1 (/ 1 x))) 1.0))
; ex 1.36
(define (fixed-point-v f first-guess)
 (define (close-enough? v1 v2)
  (< (abs (- v1 v2)) tolerance))
 (define (try guess step-count)
  (let ((next (f guess)))
   (display step-count)
   (display "\t")
   (display guess)
   (newline)
   (if (close-enough? guess next)
     next
     (try next (inc step-count)))))
 (try first-guess 1))

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

posted by genki genki on Thu 18 May 2006 at 05:45 with 0 comments

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

新規に開発したサービスを、初期の目標であるアーリーマジョリティにリーチさせる経路は、大体次の3つの方法しかないと思います。

(1)イノベイターやアーリーアダプターを経た口コミ
(2)お金を掛けたプロモーションによるダイレクトアピール
(3)既にアーリーマジョリティに到達している自社サービスから誘導する

(2)を選べるのなら何の問題も無いわけですが、リスクが高めです。(1)を選ぶ場合はリスクはほとんど無いですが、ある程度のユーザ数(5万ユーザぐらいらしいです)を超えてからキャズムを超えるのが大変になります。(3)は一番楽そうですが、そのようなサービスを持っていない新興企業の場合は選択肢に入らないですね。

多くの新興サービス提供者は(1)の道を選び、そしてキャズムの壁に苦しんでいるわけです。

イノベイターに受け入れられるサービスを作れば、ある程度のユーザ数まではすんなり増えて、その後伸び悩む。あるいはマジョリティだけを見てサービスを作れば、ユーザ数が増えるスピードはかなり遅いけれども、キャズムを超えるのは簡単(むしろキャズムは存在しない)。

で、このどちらかしかありえないのかというと、そうでもないわけです。イノベイターに受けるものは一般の利用者には受けないとは限らないわけで、両者に受ける(キャズムの無い)サービスを考えれば良いわけですね。

まあそれは非常に難しい事なのだけれども。

それで何が言いたかったかというと、プロモーションにお金を掛けないのならば、イノベイターやアーリーアダプターを無視してサービスを考える事はありえないという事です。例え本当にサービスを届けたい相手がマジョリティだけだったとしても。

最初から両方に受け入れられるものを作るか、イノベイターに受け入れられるものを作って、それからキャズムを超える努力をするか。

最初からしっかりしたサービスをリリースしていくのであれば前者が、β版やα版のサービスをどんどん作っていくという立場ならば後者の方が良さそうですね。

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

posted by genki genki on Wed 17 May 2006 at 01:21 with 0 comments

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

5月12日、第一回 PlaggerConference に参加してきました。
場所はデジタルハリウッド池袋校です。


Plaggerは、Shibuya.pm会長の宮川さん(SixApart)が中心になって開発を行っているインストール型のFeedAggregatorです。以前から気になっていたのですが、使った事が無かったのでとりあえずConferenceに行ってみることに。

Plaggerは、Feedに限らず、様々なデータの形式を変換したり変更や修正を加えたりする事ができる、非常に拡張性に富んだ万能コンバータですね。

Plaggerを使うと、APIを利用しつつ広告を剥ぎ取ったりするプラグインを、グリースモンキー的な感覚で作れてしまいます。いろんな意味でグリースモンキーに似ています。

現時点ではインストールが難解なため、プログラマ以外には使う人はいない状態です。
しかし、簡単に誰でも使えて、プラグインを多人数でシェアできるような仕組みを作ると、非常に便利である一方で、法的な面で問題に直面する気がします。
なので、考えようによっては現状のままの方が良いのかもしれません。

いずれにしても、インターネットのトラフィックの流れを変えるパワーを秘めた存在として、今後の動向は注目に値します。

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

posted by genki genki on Tue 16 May 2006 at 09:48 with 0 comments

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

今週も、同僚のよしてつさんと一緒に素人くさいSICP読書会に参加してきました。

今回は404 Blog Not Foundでお馴染みの小飼さんのご自宅で開催されました。
非常に素晴らしい環境を利用させていただいことに感謝いたします。

参加者は、だいたい前回と同じくらいで23名。
最近各所で遭遇するようになってきた面々や、CNetブロガーの山下さん、そしてもちろん小飼さんも参加されていました。

今回も前回同様、演習問題を黙々と解いていくという形式で進められました。
実際に解いた演習問題は1.32と1.33です。

何問か問題を解いてみて、ようやく括弧が見えなくなる感覚が芽生えてきました。

演習問題1.33については、過去の演習問題で作成した関数 'prime?' を利用する必要がある(しなくても良いけれど、時間が掛かりそうな)ため、Wikiからコピーしてきました。

filtered-accumulate を構成する問題の答え合わせを行っているときに、filterを使わないで同じ事をする事は可能かどうか、というテーマでいろいろな意見が出て盛り上がっていました。

(define (filtered-accumulate combiner null-value term a next b filter)
 (if (> a b)
   null-value
   (combiner (if (filter a) (term a) null-value)
        (filtered-accumulate combiner null-value term (next a) next b filter))))


combiner が受け取るのは a ではなく (term a) なので、term が全単射でないかぎり、逆写像が存在しないので、元の a の値が何だったのかわからず、combiner の定義の仕方だけでは filter と同等のものを構成できない場合もあるかなー、と思います。
どうでしょう。

というわけで、とても楽しい時間がすごせました。

帰り際に小飼さんの奥様からコーヒーを振舞って頂きました。
ありがとうございます。

小飼さん自身からも、壁面を覆う巨大な書架(うらやましい!)よりお勧めの本を何冊か紹介していただきました。ロジャー・ペンローズ氏の著書は読んだことが無かったですが、機会があったらぜひ読んでみたいですね。恥ずかしながらペンローズ・タイリングのペンローズ氏が同氏と同一人物であると初めて知りました。もっと昔の別なペンローズさんかとばかり思っていました。

ということで、次週は演習1.34から開始。各自写経をすませておくべしとの事。

最後に、今回使ったコードを置いておきます。
----
;; -*- Mode: scheme; indent-tabs-mode: nil; coding: utf-8; -*-

;; 1.2.6 素数性のテスト
(define (square x) (* x x))

(define (smallest-divisor n)
 (find-divisor n 2))

(define (divides? a b)
 (= (remainder b a) 0))

(define (find-divisor n test-divisor)
 (cond ((> (square test-divisor) n) n)
    ((divides? test-divisor n)  test-divisor)
    (else (find-divisor n (+ test-divisor 1)))))

(define (prime? n)
 (if (< n 2)
   #f
   (= n (smallest-divisor n))))

;; Fermatの小定理
;(begin                 ; for gauche
; (define (square x) (* x x))
; (use srfi-27)
; (define random random-integer))

(define (expmod a n m)
 (cond ((= n 0) 1)
    ((even? n)
     (remainder (square (expmod a (/ n 2) m)) m))
    (else
     (remainder (* a (expmod a (- n 1) m)) m))))

(define (fermat-test n)
 (define (try-it a)
  (= (expmod a n n) a))
 (try-it (+ 1 (random (- n 1)))))

(define (fast-prime? n times)
 (cond ((= times 0) #t)
    ((fermat-test n) (fast-prime? n (- times 1)))
    (else #f)))

;; 問題 1.22
;; gauche用runtime (microsecを返す)
(define (runtime)
 (use srfi-11)
 (let-values (((a b) (sys-gettimeofday)))
       (+ (* a 1000000) b)))

(define (timed-prime-test n)
 (newline)
 (display n)
 (start-prime-test n (runtime)))

(define (start-prime-test n start-time)
 (if (prime? n)
   (report-prime (- (runtime) start-time))))

(define (report-prime elapsed-time)
 (display " *** ")
 (display elapsed-time))

(define (search-for-primes beg end)
 (let loop ((i beg))
  (cond ((> i end) #f)
     (else
      (if (odd? i) (timed-prime-test i))
      (loop (+ i 1))))))
;
; ここから下が僕の書いたコード


(define (cube x) (* x x x))
(define (sum-integers a b)
 (if (> a b)
   0
   (+ a (sum-integers (+ a 1) b))))
(define (sum-cubes a b)
 (if (> a b)
   0
   (+ (cube a) (sum-cubes (+ a 1) b))))
(define (pi-sum a b)
 (if (> a b)
   0
   (+ (/ 1.0 (* a (+ a 2))) (pi-sum (+ a 4) b))))
(define (sum term a next b)
 (if (> a b)
   0
   (+ (term a)
     (sum term (next a) next b))))
(define (identity x) x)
(define (inc x) (+ x 1))
(define (integral f a b dx)
 (define (add-dx x) (+ x dx))
 (* (sum f (+ a (/ dx 2.0)) add-dx b)
   dx))
(define (even n)
 (= (remainder n 2) 0))
(define (integral_s f a b n)
 (define h (/ (- b a) n))
 (define (y k)
  (define c (if (or (= k 0) (= k n))
         1
         (if (even k) 2 4)))
  (* c (f (+ a (* k h)))))
 (* (sum y 0 inc n)
   (/ h 3.0)))
(define (sum_i term a next b)
 (define (iter a result)
  (if (> a b)
    result
    (iter (next a) (+ result (term a)))))
 (iter a 0))
(define (integral_i f a b dx)
 (define (add-dx x) (+ x dx))
 (* (sum_i f (+ a (/ dx 2.0)) add-dx b)
   dx))
(define (product factor a next b)
 (if (> a b)
   1
   (* (factor a)
     (product factor (next a) next b))))
(define (product_i factor a next b)
 (define (iter a result)
  (if (> a b)
    result
    (iter (next a) (* result (factor a)))))
 (iter a 1))
(define (factorial n)
 (product identity 1 inc n))
(define (sq x) (* x x))
(define (approx_pi n)
 (define (y k) (/ (sq (+ k 4)) (sq (+ k 3))))
 (define (next x) (+ x 2))
 (* 4 (/ 2.0 (+ n 4)) (product_i y 0 next n)))

; ここから下が今回書いたコード
;
(define (accumulate combiner null-value term a next b)
 (if (> a b)
   null-value
   (combiner (term a)
        (accumulate combiner null-value term (next a) next b))))
(define (accumulate_i combiner null-value term a next b)
 (define (iter a result)
  (if (> a b)
    result
    (iter (next a) (combiner result (term a)))))
 (iter a null-value))
(define (filtered-accumulate combiner null-value term a next b filter)
 (if (> a b)
   null-value
   (combiner (if (filter a) (term a) null-value)
        (filtered-accumulate combiner null-value term (next a) next b filter))))
(define (e_1_33_a n)
 (filtered-accumulate + 0 sq 1 inc n prime?))
(define (e_1_33_b n)
 (define (relatively-prime? i)
  (= (GCD i n) 1))
 (filtered-accumulate * 1 identity 1 inc n relatively-prime?))

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

posted by genki genki on Thu 11 May 2006 at 02:52 with 0 comments

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

javascripts, stylesheets, images などの静的コンテンツを含むRailsのプラグインを作成している所なのですが、問題にぶち当たりました。

本家のこのへんでも議論されているようなのですが、現時点でも良い方法は見つかってないんでしょうかね。

方法は2通りぐらいあって、

(1) install.rb で Rails Root の public 以下にコピーする
(2) RailsEngines プラグインを利用する
 →プラグインローカルにpublicディレクトリを作るとその中を見てくれるようになるらしい。

という感じです。
(2) の仕組みはスマートなのですが、staticコンテンツにアクセスするのにAPを通るようになる気がします。(1)の場合は、uninstallする時にどうするのか、という問題が。

Railsのソースを読む必要が出てきた感じですね。

plugin.rb

で、悩んだ挙句、結局Rails本体に plugins の uninstall hook 機能を追加してみる事に。
片言の英語で頑張って本家の方にもPostしておきました。

[PATCH] Uninstall hook for plugins

これによって、install.rb と似たような uninstall.rb というファイルが出来るので、
その中に静的コンテンツの除去処理を入れればOKです。

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

posted by genki genki on Mon 8 May 2006 at 14:22 with 0 comments

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

Cygwinには dig コマンドがないので、ちょっと不便な時があります。

そこで、こちらのサイトから BIND for Cygwin のバイナリを持ってきて導入します。

その中に dig が入っています。

$ tar -xvjf bind-9.2.2-1.tar.bz2
$ cp -R opt/bind /opt

あとは、/opt/bind/bin にPATHを通します。

最後に、Cygwinには /etc/resolv.conf ファイルが無いので作成します。

これで dig が使えるようになります。

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

posted by genki genki on Fri 5 May 2006 at 05:18 with 0 comments
Contents rssrss
光ファイバーを二次元振動させて走査するAR用ディスプレイ
因果の取り違え
Swift2's defer for CoffeeScript
mongodb-3.0からcreateIndexのdropDupsが無くなったらしい
mongodb-3.0以降のWiredTigerの設定を動的に変更する方法
一般楕円の高速生成アルゴリズムへの道標
farro mantecatoのレシピ
Droonga関連の記事のまとめ
RuntimeErrorの特定のメッセージに限定してrescueする方法
jQueryでscriptタグを実行せずにappendする
Comments rssrss
瀧内元気 瀧内元気: MacOS版は以下にあります genki/ViMouse 01/16 05:40
dsjf dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これでも出... 01/08 23:23
瀧内元気 瀧内元気: おお、チェックしてみます。thx! 12/24 05:23
overisland overisland: Reeder for iPhone もこの UI を実装していますね。 12/24 05:13
瀧内元気 瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 http:... 12/01 12:20
tkawa tkawa: http://devcenter.heroku.com/articles/rails31_herok... 12/01 10:47
瀧内元気 瀧内元気: どもー。いまはgithubに置いてあります https://github.com/genki/irb... 07/10 08:31
ともち ともち: こんにちは! すばらしいプログラムをありがとうございます。しかし、merbiのドメイン、切れているみ... 07/10 02:30
Services from s21g
MagicBag
MagicBagは、Cloudflare R2やS3互換ストレージをMacのFinderから扱えるファイル同期クライアントです。
アンテナショップめぐり
東京にある全国のアンテナショップ、イベント、特産品を地図や条件から探せるサービスです。
YOMU Web小説リーダー
YOMUは、Web小説の読み上げに特化したiPhoneアプリです。
補助探
公開されている補助金・助成金情報を集約し、条件に合う制度を探しやすくするサービスです。
jotter.me
jotter.meは、考えやアイデア、情報を書き留めるためのノートサービスです。