30th Wed

障害報告

先ほど数分間のあいだ、ブログシステムでエラーが発生しておりました。 現在は復旧しておりますが、ご迷惑をおかけしたことをお詫びいたします。

原因は、deployの高速化のために行った vendor/railsの削除が正しく適用されなかった事です。

git-svnを利用している場合、rm -rf などで直接ファイルを削除した後にcommitを行っても、 SVN上のディレクトリが消えない事があるようです。 今回は、直接svnコマンドを利用してremoteのディレクトリを削除することで修復いたしました。

今後ともよろしくお願いします。

posted by Png genki on Wed 30 Jul 2008 at 09:39 with 2 comments

続いては、作表の仕方を紹介します。 このブログシステムは、BlueStoleを参考にして作った作表機能があります。

BlueStole - BlueCloth Wrapper

Ruby の Markdown ライブラリ、 BlueCloth に幾つかの機能を付け足した私家拡張版です。

こんな感じに RTtool を使った作表を行うことが出来ます。

Rendering Algorithm
WhatWhoWhen
Ray TracingWhitted1980
Path TracingKajiya1986
Photon MappingJensen1995
Metropolis Light TransportVeach1997

ソースはこんな感じです。

   1  |caption=Rendering Algorithm
   2  |
   3  |What                      , Who    , When
   4  |
   5  |Ray Tracing               , Whitted, 1980
   6  |Path Tracing              , Kajiya , 1986
   7  |Photon Mapping            , Jensen , 1995
   8  |Metropolis Light Transport, Veach  , 1997

Rttoolを使っているので、以下のようにちょっと複雑な表も作成可能です。

AlphaBravo
CharlieEcho
Delta

ソースはこんな感じです。

   1  |Alpha,==,Bravo
   2  |Charlie,Echo,||
   3  |||,Delta,==

また、このようにCaptionとHeader部分は省略可能です。

posted by Png genki on Tue 29 Jul 2008 at 08:40

このブログシステムには、いままで外向けのドキュメントが無かったのですが、(潜在)アカウント数が徐々に増えてきた事もあり、利用法を書いておこうと思います。

とりあえずわかりにくい所から。 Syntax Highlightつきでソースコードを書くときは、

ruby>>
class Foo
  def foo; puts "bar" end
end
<<ruby

のように、lang>> <<langで囲んで行頭から書きます。 結果はこの通り。

   1  class Foo
   2    def foo; puts "bar" end
   3  end

langに使えるのは、UltraVioleteで利用可能なもの全てです。 よく使いそうな rails、js、shell もショートカットを用意しています。

あとは、以下のように数式もかけます。

[math]
f(x)=\frac{1}{x}
[/math]

結果は以下の通り。


f(x)=\frac{1}{x}

この2つはコメントを書くときにも有効です。

posted by Png genki on Mon 28 Jul 2008 at 00:01

Controllerのアクションのテストを書くときに、 通常は以下のようにgetメソッドなどを使い、 アクションのメソッドを指定します。

   1    get :index

しかし、config/routes.rbの中でmap.root :formulae のようにルートのPathをindexアクションにマッピングしている場合でも、 get :indexを呼び出した結果、Controllerに渡されるrequest.request_uri の値は正しいルートのPathになっていません。

そのような場合には、以下のようにすると正しい結果が得られます。

   1    request.set_REQUEST_URI '/'
   2    get :index

posted by Png genki on Sat 26 Jul 2008 at 00:41

数式をブログに貼り付けて共有するサービス、 Formula を公開いたします。

formula
http://formula.s21g.com/

Formulaをご利用いただくことで、 誰でも簡単に数式をブログに貼り付けることができるようになります。

例)

Formulaのトップページのフォームから、 LaTeX形式で数式データを入力いただくことで、 Previewを確認しながら好みの数式の画像を生成することが出来ます。

生成された画像は、以下のようなHTMLをブログの記事に記述することで、 埋め込むことができます。

   1  <a href="http://formula.s21g.com/?f(x)=\int_0^{x}g(t)\,dt">
   2    <img src="http://formula.s21g.com/?f(x)=\int_0^{x}g(t)\,dt.png" />
   3  </a>

また、数式画像をクリックすると、 その数式に関してコメントを投稿することが出来るページにジャンプします。思い入れのある数式にコメントを寄せてみてください。

本サービスに関する各種お問い合わせは、 email までお気軽にお寄せください。

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

posted by Png genki on Fri 25 Jul 2008 at 16:30

近頃は、GitHubやcutagemのお陰で、 Gemを作ったり公開したりするのがどんどん簡単になってきています。

そうなると、今までRailsプラグインとして作っていた機能についても、 バージョン管理機能を持ったGemの形で公開したほうが便利かも知れません。 そんな時は、RailsプラグインをGemとして公開することができます。

方法は非常に単純で、Gemの中にrails/init.rbを含めるだけです。 あとは、Gem pluginを利用するRailsアプリケーションの中から、 config.gemでGemの参照を設定すればすぐに利用できます。

rails/init.rbの中身は、通常のプラグインのinit.rbと同様です。

posted by Png genki on Thu 24 Jul 2008 at 16:51

Gitでpatchを作成するには、git-format-patchコマンドを使うと便利です。 メール送信用に整形された状態でpatchが作成されます。 こんな感じでリビジョンを指定して実行します。

   1  % git-format-patch -r HEAD~

0001-Changed-capitalization-of-exts-of-header-files-of-FL.patchのようなファイル名でpatchが作成されます。

作成されたpatchはメール送信用のヘッダ情報などを含んでいますが、 メール送信せずにローカルでgit-am コマンドを使ってpatchを当てることができます。

   1  % git-am ../path/to/patch/0001-Changed-capitalization-of-exts-of-header-files-of-FL.patch

posted by Png genki on Thu 24 Jul 2008 at 01:01

RailsのXMLのレンダリングが遅い。 これは、String#to_xsが遅いのが原因らしい。

そこで、これを高速化するためのライブラリfast_xsを使うと、 XMLのレンダリングが速くなります (手元の環境で試したところでは、若干速くなったような気がしました。)

Rails-2.0以降では、fast_xsがインストールされている場合に、 自動的にそれを利用するようになっています。

[Changeset 7774] Reference current fast_xs URL

インストールは、いつものようにsudo gem install fast_xsでOK。

See Also

posted by Png genki on Mon 21 Jul 2008 at 08:52

masuidriveさんとmemcachedを落とすとエラーが出るのが困るね、という話していて、 fiveruns-memcache-client を使うと解決しそうという結論に至ったので、ためしに使ってみました。

fiveruns-memcache-clientはGitHubで公開されているので、GitHubからGemをインストールします。

   1  $ sudo gem install fiveruns-memcache-client

つづいて、Railsの環境設定をします。

config/environment.rb

   1  Rails::Initializer.run do |config|
   2    (..snip..)
   3    config.gem 'fiveruns-memcache-client',
   4      :lib => 'memcache',
   5      :version => '>1.5.0',
   6      :source => 'http://gems.github.com'
   7    gem 'fiveruns-memcache-client'
   8  end

gemメソッドをもう一回呼ぶ必要があるのが若干冗長ですね。 これを呼んでおかないと、手元の環境ではオリジナルの memcache-clientがloadされてしまいました。

さて、あとはデプロイするだけなのですが、 残念ながらfiveruns-memcache-clientを利用しただけでは、 memcachedが落ちている場合にエラーを出さずにcacheを無視してレンダリングするというような挙動はしない模様。 複数のMemcachedを立ち上げておいて、どれかが落ちてる場合は別なサーバにつなぎにいくようにはなるみたいですね。

posted by Png genki on Mon 21 Jul 2008 at 03:42

以前Hash#sliceが欲しいと書いたことがありましたが、 Rails-2.1のActiveSupportがHash#sliceを実装したようです。

しかし、以前紹介した実装ではValueの配列を返すようになっていたのですが、 Rails-2.1のHash#sliceは以下のような挙動をします。

   1  >> {1 => 2, 2 => 3}.slice(1)
   2  => {1=>2}

そう、以前紹介した Hash#only と同じですね。

posted by Png genki on Mon 21 Jul 2008 at 02:07