数式をブログに貼り付けて共有するサービス、 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

Rails2.1以降

2.1以降はview以外からhelpersにアクセスできるようになるようです。via 瀧内さん

   1  ApplicationController.helpers.simple_format(text)
http://www.nomedojogo.com/livro/carlosbrando-rubyonrails21_en.pdfより

Rails2.1以前

私の現状の環境では2.1でないので、ぐぐってみたらいい感じのがありました。
http://snippets.dzone.com/posts/show/1799

ApplicationControllerに挿入すればok

   1    def help
   2      Helper.instance
   3    end
   4  
   5    class Helper
   6      include Singleton
   7      include ActionView::Helpers::TextHelper
   8  
   9      def h(string)  
  10        ERB::Util.html_escape(string)
  11      end
  12    end
(注)オリジナルのsnippetにdef hを追加しています。

posted by Png satoko on Fri 25 Jul 2008 at 05:51 with 2 comments

近頃は、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

このブログシステムをRails-2.0.2からRails-2.1に移行する作業をしています。 このエントリはその作業ログです。

  • benchmark_for_rails でエラーが出るようになったので、 最新版 をGitHubからもってくる。
       1  % ./script/plugin install git://github.com/cainlevy/benchmarkforrails.git
    
  • ActiveSupportでエラーが発生。

    wrong number of arguments (0 for 1) /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:301:in `desc'

    ソースを見てみると、

       1    def will_unload?(const_desc)
       2      autoloaded?(desc) ||
       3        explicitly_unloadable_constants.include?(to_constant_name(const_desc))
       4    end
    
    これはおかしい。調べてみたらバグっぽい。

    benchmark_for_railsプラグインのlib/benchmark_for_rails/rewatching.rbのL39を以下のように修正。

       1  #rescue NameError
       2  rescue Exception
    
    プラグイン側ですでに対処されていたのだけれど、 発生する例外のタイプが変わった為にうまく動いてなかったようですね。

  • テストの実行中にTypeError: can't convert String into Integerが発生したので調査。 このへん の問題らしい。パッチを発見。 rails:freeze:gemsしてパッチを当ててみたが、解決せず。

    • その後調べてみると、どうやらacts_as_searchableのDirtyチェック用コードがRailsの仕組みとコンフリクトしてるのが原因のようでした。 (See Rails2.1でacts_as_searchable)
  • ActionView::TemplateError: undefined method `stringify_keys\' for ...というエラーが出る。
    • これは自作のHash#sliceが干渉していた模様。Railsで採用されたほうのHash#sliceにインターフェイスをあわせる。 hash.slice.valuesとすればOk.
  • Viewのテストでundefined method `cache_erb_fragment'というエラーが出る。 cacue_fuのなかで@controller.cache_erb_fragmentが呼ばれているところでエラーが発生しているようだ。
    • Cache関係の自前拡張の影響していたようなので除去。

ここまでで全テストがGreenに。 一通り動作検証をしたのち、Deploy完了。とりあえず問題なく動いているように見えます。

posted by Png genki on Sun 20 Jul 2008 at 20:37

texvcコマンドを使ってLaTeXで記述した数式の画像を取得するためのラッパーユーティリティとして Texvc を作りました。GitHubで公開しています。

インストール方法

まず、texvcを使えるようにする必要があります。texvcmediawiki-mathパッケージに付属しているので、 適宜パッケージマネージャなどを利用してインストールしてください。 あとは、GitHubからsudo gem install genki-texvcでOKです。

使い方はこんな感じです。

   1  require 'rubygems'
   2  require 'texvc'
   3  Texvc.parse('f(x)=\int_0^x \sin(t)\,dt') #=> Magick::Image

結果は以下のようなRMagickのImageになります。


f(x)=\int_0^x \sin(t)\,dt

posted by Png genki on Sun 20 Jul 2008 at 08:51

Rubyで一時ファイルを作成する場合は、 Tempfileを使うのが一般的だと思いますが、 今回は一時ディレクトリを作成する方法を紹介します。

TempDir

Jim Freezeさん作のTempDirです。 sudo gem install tempdirでインストールできて、 以下のようにして使います。

   1  require 'rubygems'
   2  require 'temp_dir'
   3  TempDir.create do |dir|
   4    puts dir # => "/tmp/temp_dir_24463_24509_oxvgf"
   5  end

dirは生成された一時ディレクトリのpathを示す文字列です。 createブロックを抜けると一時ディレクトリは削除されます。

posted by Png genki on Sun 20 Jul 2008 at 08:08 with 4 comments