• 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
  • 31
 

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

   1  % su
   2  # cd /usr/local/src
   3  # wget http://kernel.org/pub/software/scm/git/git-1.6.0.tar.bz2
   4  # tar xvjf git-1.6.0.tar.bz2
   5  # cd git-1.6.0
   6  # make
   7  # rm -rf /usr/local/bin/git-*
   8  # make install
   9  # make install-doc

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

updated by Png genki on Wed 20 Aug 2008 at 00:24

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

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

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

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

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

posted by Png genki on Mon 18 Aug 2008 at 23:56

RubyでMarkdown記法というと、BlueClothが有名なのではないかと思いますが、rdiscountとrpeg_markdownという新しいライブラリが Daring Fireball氏のこちらの記事で紹介されていました。

Better Markdown Libraries for Ruby: RDiscount and rpeg-markdown

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 で使ってみようと検証していたのですが、上述の二つのライブラリには、 エスケープの仕方でMARKDOWN記法の解釈に以下のような違いがあるようです。

   1  source = "[test](http://foo.com/?x%3Dx%2B5%2B2y)"
   2  RDiscount.new(source).to_html
   3  #=> "<p><a href=\"http://foo.com/?x%253Dx%252B5%252B2y\">test</a></p>\n"
   4  Markdown.new(source).to_html # rpeg-markdown
   5  #=> "\n\n<p><a href=\"http://foo.com/?x%3Dx%2B5%2B2y\">test</a></p>"

RDiscountの方は、エスケープ済みのQuery Stringをもう一回エスケープしてしまっているようです。

posted by Png 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 Png genki on Mon 18 Aug 2008 at 00:36 with 3 comments
16th Sat

pagination_scope

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

pagination_scope

使い方

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

   1  class Post
   2    include PaginationScope
   3  end

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

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

   1  class PostsController < ApplicationController
   2    def index
   3      @posts = Post.not_deleted.paginate(params[:page], 10)

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

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

   1  <%= paginate @posts %>

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

posted by Png genki on Sat 16 Aug 2008 at 23:14

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

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

   1  named_scope :paginate, proc{|page, per_page|
   2    {:offset => per_page*((page || 1).to_i - 1),
   3     :limit => per_page}} do
   4      def count
   5        proxy_scope.count(:group => 'posts.id').size
   6      end
   7      def num_pages
   8        (count.to_f/proxy_options[:limit]).ceil
   9      end
  10      def page
  11        proxy_options[:offset]/proxy_options[:limit] + 1
  12      end
  13      def pages(window = 5, left = 2, right = 2)
  14        (1..num_pages).inject([]) do |result, i|
  15          i <= left || (num_pages - i) < right ||
  16            (i-page).abs < window ? result << i :
  17              (result.last.nil? ? result : result << nil)
  18        end
  19      end
  20    end

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

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

   1  @posts = Post.paginate(params[:page], 5)

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

   1  <% if @posts.page > 1 %>
   2    <%= link_to '&laquo; Newer',
   3        url_for(:page => @posts.page - 1) %>
   4  <% else %>
   5    &laquo; Newer
   6  <% end %>
   7  <% @posts.pages.each do |i| %>
   8    <% if i.nil? %>
   9      ...
  10    <% elsif i == @posts.page %>
  11      <%= i %>
  12    <% else %>
  13      <%= link_to i, url_for(:page => i) %>
  14    <% end %>
  15  <% end %>
  16  <% if @posts.page < @posts.num_pages %>
  17    <%= link_to 'Older &raquo;',
  18        url_for(:page => @posts.page + 1) %>
  19  <% else %>
  20    Older &raquo;
  21  <% end %>

posted by Png genki on Sat 16 Aug 2008 at 20:57

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

   1  _cap () {
   2    compadd `cap -T | grep '^cap ' | sed 's/^cap //' | sed 's/ .*//' | xargs`
   3  }
   4  
   5  compdef _cap cap

posted by Png genki on Wed 13 Aug 2008 at 17:45

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

  • RSS Builder等を使っている場合も、renderでOk
       1  render 'articles/index.rss.builder'
    
  • renderはデフォルトではlayoutを伴わないので、必要に応じて明示的に指定する。
       1  render 'articles/index', :layout => 'application'
    
posted by Png genki on Wed 13 Aug 2008 at 15:19

Formulaは、 数式をブログにはりつけて共有するコミュニティサービスです。

このたび、FormulaでXyMTeX記法による化学構造式が利用できるようになりました。 以下のような化学構造式を簡単にブログに埋め込むことができるようになります。

XyMTeXの記法については、以下のサイトを参照ください。

See Also

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

posted by Png genki on Mon 11 Aug 2008 at 21:36

Formulaは、 数式をブログにはりつけて共有するコミュニティサービスです。

このたび、Formulaで利用できるLaTeX記法が増えました。 具体的には、eqnarray*環境で利用可能なLaTeX記法をほとんど全て利用することができます(セキュリティ上の観点から、一部のコマンドは無効化されています)

以下のように、複数行の数式を記述することもできるようになりました。

連立方程式も変数を揃えて記述できます。

posted by Png genki on Sun 10 Aug 2008 at 16:03 with 1 comment
Contents
Git-1.6をインストールしてみる
FormulaにコメントPreview機能をつけました
rdiscountとrpeg_markdown
Rails勉強会#32レポート
pagination_scope
named_scopeによるpagination
capコマンドのZsh補完関数改訂版
RSpecのViewのスペックに関するメモ
Formulaが化学構造式に対応しました
Formulaで使用できるLaTeX記法が増えました
Tags
Comments
瀧内元気: **See Also** * [**Moving Past BlueCloth**](ht... 8/19
瀧内元気: おお、紹介どうもありがとうございます! 8/18
瀧内元気: **追記** rpeg_markdownをインストールするにあたって、 * pkg-co... 8/18
Koichiro Ohba: 先日はお世話さまでした。 Charlesの記事もどぞ。 <a href="http://b... 8/18
瀧内元気: Dubyという言語に関する情報が得られた。 こんな感じの言語らしい。 <http://sv... 8/18
Trackbacks
Google App Engine Markdown - ウェブ検索 02:43
with_named_scope: named_scopeを古き良きwith_scope風味に利用する - Hello, world! - s21g 02:04
named_scopeによるpagination - Hello, world! - s21g 02:04
XML rails のウェブ検索結果 @search:@nifty 23:06
はてなブックマーク - toshyon bookmark / thin 20:46
Writings
Job Board