Ruby会議2008の会場で利用するためにマイナーチェンジしたvimouse Ruby会議2008 Editionをリリースいたします。

vimouse 1.1 setup.exe

以前のバージョンからの変更点

  • vimouseモードへの切り替えHotKeyが、Ctrl+;から変換キーに変わりました

よろしくお願いします。

See Also

posted by Png genki on Fri 20 Jun 2008 at 17:54 with 1 comment

Ruby会議2008会場より

P1000166.JPG

Rails勉強会ブースの片隅より撮影

posted by Png genki on Fri 20 Jun 2008 at 13:35

http://drnicwilliams.com/2008/06/18/what-is-gitjour-gemjour-starjour/

USではRailsCampという合宿みたいな、田舎で数日籠ってhackして遊んだりなんかするというのが流行しているようですが、田舎ではインターネットがないことも多く、それで共同作業したりなんかするのに困ったという経験からいろいろツールが出てきたみたいです。

インストールの手順(必要なgemとか)はDrNicのサイトにありますので、そちらを参照してくださいね。

始まりはBonjour(Macの通信プロトコル)のオープンソース化

http://en.wikipedia.org/wiki/Bonjour_(software)

gitjour

Chad Fowlerさんたちが作ったこのツール、ローカルでgitリポジトリを共有するツールです。
http://github.com/chad/gitjour

pastejour

今度はJohn Barnetteさんが作ったpastejour。これはInternet(pastie)がなくても、コードのsnnipetを送れる仕組み。
http://github.com/jbarnette/pastejour

gemjour

さらにEvan Phoenixさんが、gemのサーバ機能を提供。誰かのローカルにあるgemを取ってこれるようになります。
http://github.com/evanphx/gemjour/tree/master

appjour:Macオンリー

Lachie Cox作。appをみんなで共有できます。
http://github.com/lachie/appjour

dejour:Macオンリー

Aaron Patterson作。Growl(Macの通知バルーン?)の仕組みを使った、ローカルネットワークでtwitterみたいな感じ?のようです。
http://github.com/aaronp/dejour/tree/master

stajour:Macオンリー

Lachie Cox作。上の通知を一覧にして表示できるアプリ。
http://github.com/lachie/starjour

最後のほうはMacオンリー。残念です... あとあと、USのギークたちはみんなでGuitar Hero3やったりするみたいですね...

posted by Png satoko on Thu 19 Jun 2008 at 13:31

rails tipsコンテストの流れで出会った記事。
http://scoop.cheerfactory.co.uk/2008/04/25/5-rails-tips/

上記で紹介されていた「Use of to_param for cheap seo」というのを実践してみました。これはAmazonで以前から実施されているSEOなのですが、ARのクラスでto_paramメソッドを用意すればいいだけだったのでやってみました。(コントローラではparam[:id]でIDを取得できるようです)

上記サイトで上がっていた例

   1  class ArticleActiveRecord::Base
   2    def to_param
   3      "#{id}-#{headline.gsub(/[^a-z0-9]+/i, '-')}".downcase
   4    end
   5  end
コードの詳細は下記をどうぞ。

一方、dummyパラメータを送ってもid=5の記事が見れてしまうという問題もあります:下記のどのURLを要求しても同じarticleが表示される。
http://myaceapp.com/articles/5
http://myaceapp.com/articles/5-railscasts-rocks
http://myaceapp.com/articles/5-ANYTHINGHEREATALL

s21gブログでのコード

   1  class ArticleActiveRecord::Base
   2    def to_param
   3      "#{id}-#{CGI.escape(title)}".downcase
   4    end
   5  end
(注) titleが長い場合もあるので短く切ってからのほうが良いかも
(注) タイトルに数字が入っている場合うまくparams[:id]が取れないこともあるみたいです

気づいたSEOやってるサービス

結論:cheapなのでやめました

一昨日昼くらいから、昨日の昼くらいまで使っていたのですが、結局cheap SEOはとりやめました。理由としては、

  • RSS中のURLがすべて新しくなるため、読者の人に良くない(瀧内さん指摘)
  • 運営し始めてある程度時間経過しているので、URLが変わるページが多く、逆にSEO的にやさしくない → 異なるURLに対して同じ内容のページが二つ存在するとスパムとみなされることがある
  • URLが長くなるのはSEOにはやさしいが、人間にはやさしくない

というわけで、サービス運営初期時でもcheap SEOは効果的ですが、すでに運営を開始して時間が経っているサービスには良くないですという結論です。
RSSを購読下さっている読者の皆様、ご迷惑をおかけしました...

posted by Png satoko on Thu 19 Jun 2008 at 06:01

Twitterで参加表明してる人の顔ぶれがおもしろそうだったので、 Erlang分散システム勉強会 に参加してきました。 以下にメモしてきたことを。

懇親会はなぜか検索系の話を。 それにしても最近話題が狭くなってきた。 もうちょっと統計とか関数解析方面のおさらいをしておかなくては。

See Also

posted by Png genki on Wed 18 Jun 2008 at 17:09

Rails-2.0以降に追加されたmigrationの記法についてまとめておきます。

  1. t.<data_type> という書き方が可能になった。 t.string :foo, :bar, :baz のように併記もOK
  2. t.timestamps created_at, updated_atを追加
  3. t.references :foofoo_id を追加。:polymorphic => true オプションをつけると、foo_typeカラムも追加される。
posted by Png genki on Tue 17 Jun 2008 at 11:18

普段はDebianやUbuntuを主に使っているので、 たまにCentOSを使ったりすると、生活必需品のGNU screenで、 なぜか kill (Ctrl+a k) や quit (Ctrl+a \) が使えずに、困っていたのですが、原因がわかったのでメモ。

単純な話で、CentOSのGNU screenパッケージの設定では、 /etc/screenrc のなかで上記のバインディングが 無効化されてしまっているようです。 以下の部分を適当にコメントアウトすればOK。

   1  #remove some stupid / dangerous key bindings
   2  bind k
   3  bind ^k
   4  bind .
   5  bind ^\
   6  bind \\
   7  bind ^h
   8  bind h
   9  #make them better
  10  bind 'K' kill
  11  bind 'I' login on
  12  bind 'O' login off
  13  bind '}' history

CentOSに慣れてないせいか、 あまり"make them better"になってない気がします。 quitが完全に使えないのは辛くないのかな。

posted by Png genki on Sun 15 Jun 2008 at 18:42

Passengerを設定する手順のメモ。

  1. まずはsudo gem install passenger
  2. apacheの設定ファイルに以下を記述
       1  # for Passenger
       2  LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-1.0.5/ext/apache2/mod_passenger.so
       3  RailsSpawnServer /usr/local/lib/ruby/gems/1.8/gems/passenger-1.0.5/bin/passenger-spawn-server
       4  RailsRuby /usr/local/bin/ruby
    
    Ruby Enterprise Edition とかを使う場合は、RailsRubyを切り替えたりしたら良いのかな。 まだ試してないですが、すんなりいけそうな気がします。
  3. VirtualHostの設定
       1  NameVirtualHost *:80
       2  <VirtualHost *:80>
       3    ServerName foobar.com
       4    DocumentRoot /mnt/app/<app_name>/current/public
       5  
       6    (--  snip  --)
       7  
       8    <Directory /mnt/app/<app_name>/current/public>
       9      Options FollowSymLinks
      10      AllowOverride None
      11      Order allow,deny
      12      Allow from all
      13    </Directory>
      14  </VirtualHost>
    

あとはApacheを再起動するだけ。簡単ですね。

posted by Png genki on Sun 15 Jun 2008 at 12:50

SVNリポジトリ上に存在する複数のブランチやtrunkの間で、 変更点をマージしたりする方法のメモです。

まず、これからSVNリポジトリをgit svn cloneすると言う場合は、以下のような オプションを指定して実行します。

   1  git-svn clone http://svn.repos.com/foo -T trunk -b branches -t tags

これで、SVNリポジトリ上のtrunk, branches, tagsをGitのbranchとして全て取り込んだ状態でcloneが実行されます。

git-svnでcloneした既存のWorking copyが手元にあって、 そこに別なbranchやtrunkを追加したい場合は、以下のように.git/config ファイルに項目を加えます。

   1  [svn-remote "svn"]
   2    url = http://svn.repos.com/foo/branches/bar
   3    fetch = :refs/remotes/git-svn
   4  [svn-remote "trunk"]
   5    url = http://svn.repos.com/foo/trunk
   6    fetch = :refs/remotes/git-svn-trunk

下の方が今回追加したものです。 あとは、以下のコマンドを実行してSVNからfetchしてきます。

   1  % git svn fetch trunk

そうすると、以下のようなブランチが作成されます。

   1  % git branch -r
   2    git-svn
   3    git-svn-trunk

ここから先は、普通にGitのbranchとしてmergeすればOKです。

See Also

posted by Png genki on Fri 13 Jun 2008 at 15:50

PassengerのPhusionから、「Ruby Enterprise Edition」なる製品がリリースされたようです。

Ruby Enterprise Edition

Ruby Enterprise Edition is a drop-in, transparent solution for improving your Ruby on Rails website's scalability and performance, while decreasing memory usage.

Railsアプリの動作を高速かつメモリ消費を抑えることができるように チューニングされたRubyのようです。 こちら でtarballが配布されていますね。

以下のような特徴があるようです。

  • Passenger上でのRailsアプリのメモリ使用量を平均33%少なくします
  • 普通のRuby-1.8.6と100%互換性を持っています
  • きちんとテストされていて、非常に安定しています
  • 付属のインストーラで、Linuxのパッケージとおなじぐらい簡単にインストールできます
  • 普通のRubyと共存させることができます。100% self-contained, 0% installation risk!

とのこと。Ruby自体に手を加えるというのは興味深いアプローチですね。

posted by Png genki on Fri 13 Jun 2008 at 10:27