LLfutureこと、
Lightweight Language Future

サイコー?!フレームワーク
のセッションで、Ruby on Rails担当ということで講演いたしました。
お聞きくださった皆様、ありがとうございました。

プレゼンで使った資料を公開いたします。

llfuture.pt

ファイル形式は自作のPuTTY用プレゼンテーションアプリ(Ruby製)
のものですが、テキストファイルとして読めるようになっています。
プレゼンテーションアプリは、そのうちGitHubにUpします。

それでは、よろしくお願いします。

posted by genki genki on Sun 31 Aug 2008 at 00:42 with 0 comments

rabbitのソースコードハイライトをするために必要なruby.stを探していたのですが、
各所でデッドリンクになっていたので、見つけたファイルの場所をメモしておきます。

http://support.rubyforge.org/svn/trunk/support/ruby.st

See Also

posted by genki genki on Thu 28 Aug 2008 at 19:45 with 0 comments

やっつけで作ってみました。

Gist Ubiquitifier

Gist上のJavaScriptコードをUbiquityコマンド化してインストール可能にするサービスです。これを利用することで、Ubiquityコマンドインストール用のHTMLファイルを設置するサーバを持っていない場合でも、
コマンドを公開することができます。

USAGE:

まずは、Gist上でUbiquityコマンドをJavaScriptで登録します。
例えば、Gist上のURIが

http://gist.github.com/7630

の場合、

http://ubiquity.s21g.com/7630

がインストールページなります。
コマンド名は、nameパラメータで指定できます。

http://ubiquity.s21g.com/7630?name=s21g-blog-search

使えそうであれば、もうちょっとちゃんとしたデザインにしようと思います。

posted by genki genki on Thu 28 Aug 2008 at 13:40 with 0 comments

自分用にUbiquityコマンドを登録する場合は、Ctrl+SpaceでUbiquityを起動してから、command-editorコマンドを実行し、コマンドを実装するためのJavaScriptを登録すればOkです。
これを一般に公開するためには、以下のようなLINKタグをHEAD内に含むHTMLページを用意する必要があります。

html>>

<<--

このjsファイルは、'application/x-javascript'のMIME TYPEで配信される必要があります。'text/javascript'の場合は無視されてしまいます。
jsファイルの中には、自分用のコマンドで作ったものと同じ形式のJavaScriptを記述可能です。

上述のHTMLページを閲覧した閲覧者は、コマンドをインストールするかどうか質問され、Subscribeボタンを押すと購読画面に遷移します。
いまのところ、購読する気がない場合に「×」ボタンを押して無視しても、
次回訪問時に何度も確認されてしまうため、
Ubiquityコマンドのインストールページは、通常のページとは別に用意したほうがいいかもしれません。

See Also

posted by genki genki on Thu 28 Aug 2008 at 07:33 with 0 comments

s21gブログの検索を
Ubiquity
から行えるようにしました。
Ubiquity commandのSubscribeは以下のページから行えます。

フッタのリンク「Ubiquity」からJumpすることもできます。

コマンドをインストールした後は、
Ctrl+SpaceもしくはAlt+Spaceキーを押してUbiquityを立ち上げた後、
以下のようなコマンドでs21gブログ内の記事をどこからでも検索できるようになります。

pre>>
s21g-blog-search search word
<<--

コマンド名は省略可能(abbrev)なので、
pre>>
s21g search word
<<--
のように使うこともできます。

s21g blogのubiquity commandを利用するためには、Ubiquityをインストールする必要があります。

See Also

posted by genki genki on Thu 28 Aug 2008 at 07:20 with 0 comments

Rails 2.1より前では、Polymorphicアソシエイションを
Eagerローディングするのは面倒でした。
しかし、Rails 2.1以降では、Eagerローディングの方法が変わったため、
自分でEager Loadingが行われるタイミングを決める方法
を使って簡単にPolymorphicなアソシエイションをEagerロードすることができます。

rails>>
trackbacks = Trackback.all(:limit => 10)
Trackback.send :preload_associations, trackbacks, :trackbackable
<<--

このように、事後にpreload_associationsを呼ぶだけです。

posted by genki genki on Wed 27 Aug 2008 at 09:30 with 0 comments
技術評論社さまより献本いただきました。ありがとうございます。
WEB+DB PRESS Vol.46
WEB+DB PRESS Vol.46
posted with amazlet at 08.08.26

技術評論社
売り上げランキング: 99
今号で印象に残ったのはこんな感じです。 1. **AIR開発入門** 基礎から応用までまとまっているので、これからAIRを使いたい人には非常に便利だと思います。 2. **ALPHA GEEKに逢いたい(よしおかさん)** よしおかさんの喋りっぷりに脱帽。あの弾さんが無口な人に見える。そして代表作に期待! 3. **プロトコルバッファ** 深追いしていなかったので参考になりました。分散レンダラを作る時に使えるかな…? しかし全部自分でプロトコル設計するだろうなぁ…。 安藤さんのRuby版プロトコルバッファにはGAE的な意味で期待。
posted by genki genki on Tue 26 Aug 2008 at 20:54 with 0 comments

LLVM勉強会以来、バックグラウンドプロセスでずっとyak shavingしてました。
debian/etchでllvm-2.3をソースからインストールする方法のメモです。

  1. gcc-4.3.1をソースからインストールする。
    最新のllvmは、コンパイルするのにgcc-4.3以降が必要らしい。
    全部入れようとするとgfortranのコンパイルあたりで
    symbol \fstat64' is already defined`というようなエラーが出てしまったので、
    色々解決策を探していたけれど、llvmをインストールする上では必要ない
    ことに気がついたので、gcc-coreとgcc-g++のみソースからmakeしてインストール
  2. llvm-2.3をソースからインストール。

で完了です。

See Also

posted by genki genki on Tue 26 Aug 2008 at 15:58 with 0 comments

ruby-lang.orgより、REXMLの脆弱性に関する報告がありました。

REXMLのDoS脆弱性

RailsでXMLリクエストのパースに使用されているREXMLに、DoS脆弱性が発見されました。XML entity explosion attackと呼ばれる攻撃手法により、ユーザから与えられたXMLを解析するようなアプリケーションをサービス不能(DoS)状態にすることができます。大部分のRailsアプリケーションはこの攻撃に対して脆弱です。

問題に対処するためのGemがリリースされているようなので、
以下のように対処しました。

  1. Gemをインストール
    pre>>

gem install rexml-expansion-fix

<<--
2. ライブラリを読み込む
ruby>>
require 'rexml-expansion-fix'
<<--

また、RailsのPlugin Gemとして機能するものも作ってみました。

genki-rexml-expansion-fix

Gemをインストールした後、以下のようにconfig/environment.rb似記述します。

ruby>>
config.gem 'genki-rexml-expansion-fix',
:lib => 'rexml-expansion-fix',
:source => 'http://gems.github.com'
<<--

See Also

posted by genki genki on Mon 25 Aug 2008 at 07:15 with 2 comments
[Formula](http://formula.s21g.com/)は、数式や化学構造式をブログに貼り付けて共有するサービスです。 このたび、出力形式が透過PNGになりました。 以下のように、背景色が白以外の環境でもお使いいただけます。
ブラウザがIE6の場合、透過PNGを正しく扱えないため、 従来の非透過PNGと同様の出力となります。 [IEPNGFix 2](http://ajaxian.com/archives/iepngfix-2-now-supports-css-background-position-and-repeat)等を使うことで、IE6でも透過PNGを扱えるようになるようです。 今後の方向性としましては、 * 黒背景用の白文字画像の生成 * JavaScriptが利用不可能な環境で、IE6でも利用できるようにするために任意の背景色と前景色を指定して非透過PNGを生成する 等を予定しております。 今後ともよろしくお願いいたします。
posted by genki genki on Mon 25 Aug 2008 at 03:08 with 0 comments

Capistrano-2.1を使って、Gitリポジトリからデプロイする為のレシピファイルの書き方のメモです。

config/deploy.rb

ruby>>
set :application, "goodstuff"
set :scm, :git
set :repository, "git.foo.com:/path/to/#{application}.git"
set :branch, 'master'
set :deploy_via, :copy
set :deploy_to, "/mnt/app/#{application}"
set :user, "app"
(--snip--)
<<--

/path/to/goodstuff.gitがベアリポジトリだと仮定しています。
:branch:deploy_viaを指定しているところがポイントでしょうか。
後は

pre>>
% cap deploy
<<--

するだけ。

posted by genki genki on Sat 23 Aug 2008 at 02:33 with 1 comment

Amazon EBSを使う方法のメモ。

Elasticfox拡張
を使い、
EBSボリュームを作成し、適当なインスタンスにアタッチする。
仮にここでは、/dev/sdhにアタッチしたとする。

その後、ボリュームをアタッチしたインスタンスにSSHでログインし、
以下のコマンドでボリューム上にファイルシステムを構築する。

pre>>

yes | mkfs -t ext3 /dev/sdh

<<--

続いて、適当なディレクトリを作成し、マウントする

pre>>

mkdir /mnt/foo

mount /dev/sdh /mnt/foo

<<--

後は普通に/mnt/fooにアクセスすればOk。

See Also

posted by genki genki on Fri 22 Aug 2008 at 21:40 with 0 comments

EC2でパッケージのRubyではなく、srcからRubyを入れて使う場合、
イメージの状態によってはAMI-toolsがLOAD_PATH不足で正しく起動できない場合がある。

その場合、以下のようにAMI-toolsのスクリプトを書き換える。

/usr/local/bin/ec2-bundle-vol

sh>>
#!/bin/bash
ruby -I/usr/lib/site_ruby /usr/lib/site_ruby/aes/amiutil/bundlevol.rb $*
<<--

-IオプションでLOAD_PATHを補っている。

posted by genki genki on Fri 22 Aug 2008 at 04:14 with 0 comments

Git-1.6がリリース
されたようなので、手元の環境をアップデートしてみました。

sh>>
% su

cd /usr/local/src

wget http://kernel.org/pub/software/scm/git/git-1.6.0.tar.bz2

tar xvjf git-1.6.0.tar.bz2

cd git-1.6.0

make

rm -rf /usr/local/bin/git-*

make install

make install-doc

<<--

1.6からgit-xxxxxというサブコマンド系のコマンドが無くなったようなので、
古い実行ファイルを削除してみました。

posted by genki genki on Wed 20 Aug 2008 at 00:24 with 0 comments

Markdownをpreg-markdownに切り替える
ついでに、
Formula
コメントのプレビューができるようにしました。

コメント中に $x=y$ のように記述することでインライン形式で数式を記述できます。
また、

\\[
f(x)=\int_0^x g(t)\,dt
\\]

のように書くことで、ディスプレイスタイルで数式を含めることも出来ます。

そのうちこちらのブログでもこの記法を使えるようにする予定です。

posted by genki genki on Mon 18 Aug 2008 at 23:56 with 0 comments
RubyでMarkdown記法というと、BlueClothが有名なのではないかと思いますが、rdiscountとrpeg_markdownという新しいライブラリが Daring Fireball氏のこちらの記事で紹介されていました。 [**Better Markdown Libraries for Ruby: RDiscount and rpeg-markdown**](http://mac.blogdig.net/archives/articles/August2008/17/Better_Markdown_Libraries_for_Ruby__RDiscount_and_rpeg_markdown.html) >Ryan Tomayko has solved this with two new Ruby extensions that wrap extremely fast (and accurate) C libraries for Markdown: David Loren Parsons’s Discount and Jon MacFarleane’s peg-markdown. 早速 [Formula](http://formula.s21g.com/) で使ってみようと検証していたのですが、上述の二つのライブラリには、 エスケープの仕方でMARKDOWN記法の解釈に以下のような違いがあるようです。 ruby>> source = "[test](http://foo.com/?x%3Dx%2B5%2B2y)" RDiscount.new(source).to_html #=> "

test

\n" Markdown.new(source).to_html # rpeg-markdown #=> "\n\n

test

" <<-- RDiscountの方は、エスケープ済みのQuery Stringをもう一回エスケープしてしまっているようです。
posted by genki genki on Mon 18 Aug 2008 at 23:23 with 2 comments

Rails勉強会@東京第32回
に参加してきました。
お盆の最中だったせいか、いつもの半分ぐらいの参加者でした。
そのせいか、いつもとちょっと違ったRails勉強会となりました。

  • シングルトラック
  • 3セッション
  • 自己紹介が最後

これがなかなか良かったです。
ただ、人数が多いとできない形式でしょうね。

IMG_0139.JPG

実際に行われたセッションは以下の通り。

  • YuguiさんによるRedmineの話(実質は高橋会長によるRESTトーク)
  • 大場さんによるJRubyで拡張を作る話
  • 西さんによるgitの話(入門から仕事で使えるレベルまで)

いずれもハイクオリティなセッションで面白かったです。
僕はgitの話でちょっと話をしました。
リポジトリ間で相互のpush/pullするのが出来たので満足。
それから、git-instawebやgit-guiという、
Git用のGUIツールがある事を教わりました。

posted by genki genki on Mon 18 Aug 2008 at 00:36 with 3 comments

named_scopeによるPagination
を行うためのGemを作りました。
通常はwill_paginateを利用するほうがいいと思いますが、
:joinsを含む複雑なnamed_scopeを介してpaginationを行いたい場合には、
利用すると便利かもしれません。

pagination_scope

使い方

まず、モデルクラスの中でincludeします。

rails>>
class Post
include PaginationScope
end
<<--

これによって、Postクラスにpaginateというnamed_scopeが作成されます。

続いて、Paginationを利用したいコントローラのアクションメソッド内で、

rails>>
class PostsController < ApplicationController
def index
@posts = Post.not_deleted.paginate(params[:page], 10)
<<--

のようにScopeを取得します。

続いて、Viewで以下のようにPagination用HTMLを生成します。

html>>
<%= paginate @posts %>
<<--

paginateメソッドは PaginationScope によって導入されるViewヘルパーです。

posted by genki genki on Sat 16 Aug 2008 at 23:14 with 0 comments

Railsアプリケーションでpaginationといえば、
will_paginate等のプラグインやGemを使うのが一般的だと思います。
しかし、named_scopeでjoinsを使った場合にうまく
paginationができなかったので、
named_scopeだけを使ってpaginationする方法を考えてみました。

まずは以下のようなnamed_scopeを作ります。
以下の例はPostクラスで宣言される事を想定しています。

rails>>
named_scope :paginate, proc{|page, per_page|
{:offset => per_page*((page || 1).to_i - 1),
:limit => per_page}} do
def count
proxy_scope.count(:group => 'posts.id').size
end
def num_pages
(count.to_f/proxy_options[:limit]).ceil
end
def page
proxy_options[:offset]/proxy_options[:limit] + 1
end
def pages(window = 5, left = 2, right = 2)
(1..num_pages).inject([]) do |result, i|
i <= left || (num_pages - i) < right ||
(i-page).abs < window ? result << i :
(result.last.nil? ? result : result << nil)
end
end
end
<<--

countを再定義しているのは、:joinsを含む別なnamed_scopeをチェーンした時に、正しいcountを求めるためです。

コントローラでは、以下のようにScopeを取得します。

rails>>
@posts = Post.paginate(params[:page], 5)
<<--

Viewでは以下のように記述します。

rails>>
<% if @posts.page > 1 %>
<%= link_to '« Newer',
url_for(:page => @posts.page - 1) %>
<% else %>
« Newer
<% end %>
<% @posts.pages.each do |i| %>
<% if i.nil? %>
...
<% elsif i == @posts.page %>
<%= i %>
<% else %>
<%= link_to i, url_for(:page => i) %>
<% end %>
<% end %>
<% if @posts.page < @posts.num_pages %>
<%= link_to 'Older »',
url_for(:page => @posts.page + 1) %>
<% else %>
Older »
<% end %>
<<--

posted by genki genki on Sat 16 Aug 2008 at 20:57 with 0 comments

以前一度紹介しましたが、本来入るべきでないcompadd
が補完候補に出てしまっていたので、
xargsコマンドを使うように書き直しました。

sh>>
_cap () {
compadd cap -T | grep '^cap ' | sed 's/^cap //' | sed 's/ .*//' | xargs
}

compdef _cap cap
<<--

posted by genki genki on Wed 13 Aug 2008 at 17:45 with 0 comments

RSpecを使ってViewのスペックを書く時のメモ。

  • RSS Builder等を使っている場合も、renderでOk
    ruby>>
    render 'articles/index.rss.builder'
    <<--
  • renderはデフォルトではlayoutを伴わないので、必要に応じて明示的に指定する。
    ruby>>
    render 'articles/index', :layout => 'application'
    <<--
posted by genki genki on Wed 13 Aug 2008 at 15:19 with 0 comments
[Formula](http://formula.s21g.com/)は、 数式をブログにはりつけて共有するコミュニティサービスです。 このたび、FormulaでXyMTeX記法による化学構造式が利用できるようになりました。 以下のような化学構造式を簡単にブログに埋め込むことができるようになります。 XyMTeXの記法については、以下のサイトを参照ください。 **See Also** * [XyMTeX Ver 4.03](http://homepage3.nifty.com/xymtex/fujitas3/xymtex/xym403/xymup403.html) * [XyMTeX 化学構造式描画システム](http://homepage3.nifty.com/xymtex/fujitas3/xymtex/index.html) 本サービスに関する各種お問い合わせは までお気軽にお寄せください。
posted by genki genki on Mon 11 Aug 2008 at 21:36 with 0 comments
[Formula](http://formula.s21g.com/)は、 数式をブログにはりつけて共有するコミュニティサービスです。 このたび、Formulaで利用できるLaTeX記法が増えました。 具体的には、`eqnarray\*`環境で利用可能なLaTeX記法をほとんど全て利用することができます(セキュリティ上の観点から、一部のコマンドは無効化されています) 以下のように、複数行の数式を記述することもできるようになりました。 連立方程式も変数を揃えて記述できます。
posted by genki genki on Sun 10 Aug 2008 at 16:03 with 1 comment

Rubyに複数の脆弱性

Rubyに複数の脆弱性が発見されました。最新バージョンへのアップグレードを推奨します。

ということで、EC2で使ってるRubyをruby 1.8.7 (2008-08-08 patchlevel 71) [i686-linux]にアップデートしました。

よろしくお願いします。

posted by genki genki on Fri 8 Aug 2008 at 16:24 with 1 comment

Redmineで2203年の予定を立てようとしたところ、エラーが出たので原因を調べていました。
どうやら、Railsのdistance_of_time_in_wordsでエラーが出ているようです。

ruby>>
def distance_of_time_in_words(
from_time, to_time = 0, include_seconds = false)
from_time = from_time.to_time if
from_time.respond_to?(:to_time)
to_time = to_time.to_time if
to_time.respond_to?(:to_time)
distance_in_minutes =
(((to_time - from_time).abs)/60).round
distance_in_seconds =
((to_time - from_time).abs).round
<<--

8行目あたりの減算でエラーが出ているようです。
実際、以下のような減算をしようとするとエラーが出ます。

ruby>>
Time.now - Date.parse("Mon, 01 Aug 2203").to_time
#=> RangeError: time - 7371010800.000000 out of Time range
<<--

ということで、あまりにも長い時間である場合には、
以下のような例外処理で対処するようにしました。

ruby>>
module ActionView
module Helpers
module DateHelper
def distance_of_time_in_words_with_limit(
from_time, to_time = 0, include_seconds = false
)
distance_of_time_in_words_without_limit(
from_time, to_time, include_seconds)
rescue
'a long time'
end
alias_method_chain :distance_of_time_in_words, :limit
end
end
end
<<--

これで23世紀の予定も思いのままです。

posted by genki genki on Fri 8 Aug 2008 at 06:44 with 0 comments

セキュリティ強化のために、管理画面のURLを若干変更いたしました。
管理画面での各種操作については、
特にこれまでと変わりなく利用できます。

ブラウザ上で管理画面を開いた状態にしている場合は、
お手数ですが一度開きなおしていただけますようお願いいたします。

posted by genki genki on Wed 6 Aug 2008 at 16:34 with 0 comments

secondlifeさんのご指摘の通り、
この方法ではうまくいかない事がわかりました。

代案を探してみたところ、
とりあえず以下のようにすることで目的を果たせるようです。

  1. 空ディレクトリとしたいディレクトリ(例えばtmp/)の中に.gitignoreファイルを置く
  2. tmp/をROOTの.gitignoreファイルの中でignoreする
    pre>>
    tmp
    <<--
  3. git add tmp/.gitignoreをする。

.gitignoreファイル自体は含まれてしまいますが、
実用上は問題なさそうですね。
しかし、完全な方法は無いものか・・・。

See Also


log/tmp/ディレクトリの中身はignoreしたいけれど、ディレクトリそのものの存在はリポジトリに含めたい場合は、以下のように.gitignoreを書けば良いみたいです。

.gitignore

pre>>
log//
tmp/
/
<<--

Zshで特定のディレクトリ以下のrbファイルを全部開きたい時などに、

sh>>
vim **/*.rb
<<--

などとやりますが、そんな感じですね。

posted by genki genki on Wed 6 Aug 2008 at 09:34 with 2 comments

このところ、named_scope関係のバグの原因と対処法を調べるために
ActiveRecordのEager Loadingの実装を調べていました。
ActiveRecordのEager Loadingは、
Rails2.1から、若干生成するSQLが変化しています。

Rails 2.1 Eager Loading

上記サイトでも紹介されているように、
今まではLEFT OUTER JOINを使って、
一回のクエリで全て読み込むようなSQLを生成していたのですが、
Rails2.1からは、複数回のクエリに分割するようになりました。

ということで、Eager Loadingを実際にやっているコードを調べてみたのですが、自分で好きなタイミングでEager Loadingを行う方法を見つけたので紹介します。

ActiveRecord::BaseクラスのprotectedメソッドActiveRecord.preload_associationsを利用します。

ruby>>
articles = Article.all(:limit => 5)
Article.send :preload_associations, articles, [:user => :face]
<<ruby

1行目は普通にEager LoadingせずにArticleリストを取得していますが、
二行目を実行することで、各ArticleのアソシエイションがEager Load
されます。あとは、

ruby>>
articles.first.user.face
<<--

などを実行してもSQLクエリは発行されません。
実質的に発行されるSQLは通常の:include
を指定した場合と同じになるので、好きなタイミングでEager Load
を実行できるようになったといえます。

posted by genki genki on Mon 4 Aug 2008 at 20:23 with 4 comments

SQLのログを見ていて気がついたのですが、
最近のActiveRecordは以下のようにEagerLoadingしようとすると、
こんな感じのSQLを発行します。

rails>>
?> Article.find(:all, :include => [:user => :face]);1
=> 1

Article Load (0.005234) SELECT * FROM articles
User Load (0.000645) SELECT * FROM users WHERE (users.id IN ('13','9','37','17','1','3'))
Face Load (0.002931) SELECT faces.* FROM faces WHERE (faces.user_id IN (1,3,9,13,17,37))
<<--

以前のようにJOINを使わずに、3回に分けるようになっているのですね。

しかしながら、条件が複雑になってくると、
:limitオプションとの相性が悪いケースがあるようで、
まだ若干バグがあるようです。
そんな時は手で:joinsを書いています。

posted by genki genki on Sun 3 Aug 2008 at 22:11 with 0 comments

いくつか要望をいただいていた、
コピー&ペーストする時に行番号は邪魔になるという問題を解決するために、
コピー&ペーストモードを実装いたしました。
ソース部分をクリックすると、行番号が隠れるようになります。
ソース部分の外をクリックすると元に戻ります。

以下テスト用。

rails>>
class User < ActiveRecord::Base
has_many :comments
end
<<--

  • インデント対応テスト
    ruby>>
    def foo
    puts "foo"
    end
    <<--

一行テスト。

ruby>>
Hash.new({})
<<--

posted by genki genki on Sun 3 Aug 2008 at 11:37 with 0 comments

iPhoneやiPodTouchでホームのボタンに登録する時に利用される、
AppleTouchIconとして、登録された画像を利用できるようにしました。

iPhone/iPodTouchをお持ちの方は、ぜひお試しください。

posted by genki genki on Fri 1 Aug 2008 at 22:16 with 0 comments

named_scopeは大変素晴らしいRailsの新しい機能ですが、
おなじみのwith_scopeのように、
スコープつきのブロックを伴った利用ができないという問題がありました。
例えばこんな感じに利用しようとしてもうまくいきません。

ruby>>
User.active do
User.count # => Not run
end

User.active.with_scope do
User.count #=> Not scoped
end
<<ruby

そこで、昔ながらのwith_scopeと同じようにnamed_scopeを使えるようにする
Gemプラグインを作りました。

with_named_scope

これを使うと、以下のように期待通りに動きます。

ruby>>
User.active.with do
User.count #=> User.active.count
end
<<--

なかなか便利だと思うので、Rails本家にパッチを送っておきました。

Improved named_scope to be used like as with_scope

posted by genki genki on Fri 1 Aug 2008 at 21:09 with 0 comments

以下の記事は、調査の結果現状のRuby on Rails
では期待通りに動かないことがわかりました。


Rails-2.1の新機能であるnamed_scopeを使うと、従来のwith_scope
では綺麗にかけなかったスコープの選択を簡潔に記述することができます。

rails>>
def gadgets_on_sidebar(place = 'index')
case place.to_s
when 'index'; Gadget.on_index
when 'show'; Gadget.on_show
else Gadget.all
end.with_scope{active_gadgets + Gadget.mandatories}
end
<<--

各スコープメソッドは、ActiveRecord::NamedScope::Scope
オブジェクトを返すので、
これを条件にしたがって選択し、最後に.with_scope
を呼んでスコープを適用します。


そこで、
with_named_scope
というGemプラグインをつくり、
上述のように処理できるようにしました。
以下のようになります。

rails>>
def gadgets_on_sidebar(place = 'index')
case place.to_s
when 'index'; Gadget.on_index
when 'show'; Gadget.on_show
else Gadget.all
end.with{active_gadgets + Gadget.mandatories}
end
<<--

ということで、Rails本家にもpatchを送っておきました。

posted by genki genki on Fri 1 Aug 2008 at 16:06 with 3 comments

昨日ぐらいからdeliciousのBookmarkカウンターの画像が取得できなくなっていたのですが、このたびv2のAPIに対応することで問題を解決いたしました。

delicious/help/feeds

今までは画像を使っていましたが、今回はJSONPを使ってtotal_posts
の値を取得しています。
以下のようなURLをSCRIPTタグで読み込めば良いようです。

http://feeds.delicious.com/v2/json/urlinfo/{md5}?callback={method}

methodで指定したJavaScriptのメソッドが呼び出され、
第一引数としてmd5に関連づけられた情報(urlinfo)の配列が渡されます。
今回は一つ目のurlinfototal_posts
をブックマーク数として表示するようにしました。

posted by genki genki on Fri 1 Aug 2008 at 11:07 with 0 comments

James Moore氏の
sqlup
を使って、従来のmusqldumpによるスナップショットの取得にくわえて、定期的にMySQLのバイナリログのバックアップを取るようにしました。

ログの取得間隔は1時間としています。
しばらく様子を見て調整する予定です。

今回の変更に際して、オリジナルのsqlupに若干修正を加える必要があったため、修正版をこちらに公開いたします。

よろしくお願いします。

posted by genki genki on Fri 1 Aug 2008 at 03:49 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する
Tags
memoお知らせrailsblog21formulagemgitubiquitycappluginrubyEBSEC2edgeeventgisthackllvmmarkdown
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
YOMU Web小説リーダー
小説投稿サイトの公式ページを開き、WebView表示と読み上げ向け表示を切り替えて、移動中や作業中にもWeb小説の続きを聴きやすくするiPhoneアプリです。
補助探
公開されている補助金・助成金情報を集約し、条件に合う制度を探しやすくするサービスです。
jotter.me
個人開発者のためのホスティング一体型ノートサービス
ハンドミラー
iPhone向けの手鏡アプリ
ツイプロ(twpro)
Twitterプロフィールの高速検索エンジン