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

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

posted by Png genki on Wed 6 Aug 2008 at 16:37

railsのcheck_buttonタグで選択済(checked)にするには、最後に:checked=>'checked'を追加する。

   1  radio_button("myform","category",1, :checked=>'checked')

すると下記のようなHTMLが出力される。

   1  <input checked="checked" id="myform_category" name="myform[category]" type="radio" value="1" />

posted by Face ysakaki on Wed 6 Aug 2008 at 15:39

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

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

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

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

See Also


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

.gitignore

   1  log/**/*
   2  tmp/**/*

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

   1  vim **/*.rb

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

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

電脳コイルを見てからというもの、電脳メガネが欲しくてたまらない。 ほんとは電脳メガネを作りたいのだけど、共通のVR空間を構築するには現在の技術ではハード・ソフトともにハードルが高い。

なので、比較的簡単なヴァーチャルキーボードがまず欲しい。

仕様

  • キーボードがVR空間に出現
  • タッチすることで、外部デバイスに信号を送信

まずはこれだけで。もっとも、何もない空間上でタッチすることがUI的に優れているかどうかという問題はある。机に投影するタイプのヴァーチャルキーボードはすでにあるがこちらは普通に使いやすそう。だがしかし、空間に浮かぶキーボードという見た目、デザイン、雰囲気・・・などがエンジニア魂に火が付かざるを得ない、たとえ使い心地が悪いとしても!

超えるべきハードル(思いついたもの)

  • 描画するデバイスの選定
  • 3D空間への描画
  • 「手」の認識
  • 手が触れたかどうかの判定(誤差数ミリ程度)
  • レンダリングスピード
  • デバイスへの出力

ヴァーチャルキーボードからの入力で、普通のPC・液晶ディスプレイを用いて操作できたら良いな

posted by Png yoshitetsu on Tue 5 Aug 2008 at 21:16 with 2 comments

モジュール内で、関係ないモジュールのクラスを定義してもいいんですね。 まぁ、やらん方がいいとは思うけど。

   1  module Foo
   2  end
   3  
   4  module Baz
   5    class ::Foo::Bar
   6      def xyzzy
   7        'hoge'
   8      end
   9    end
  10  end
  11  
  12  Foo::Bar.new.xyzzy #=> 'hoge'

posted by Png technohippy on Tue 5 Aug 2008 at 20:43

CMSで改行入力したものを出力時に
として出力するヘルパタグ。 application_helper.rbに追加する用。

   1  def hbr(str)
   2    str = html_escape(str)
   3    str.gsub(/\r\n|\r|\n/, "<br />")
   4  end

VIEW側では<%=hbr textarea_value %>のように使う。

posted by Face ysakaki on Tue 5 Aug 2008 at 15:15

このところ、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を利用します。

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

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

   1  articles.first.user.face

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

posted by Png genki on Mon 4 Aug 2008 at 21:10

cloneしようとしたら、下記のエラーが出て失敗します。何度retryしても、VMWareのNATサービス再起動してもだめ。

   1  RA layer request failed: REPORT request failed on '/!svn/vcc/default': REPORT of '/!svn/vcc/default': Could not read response body: Secure connection truncated (https://svn.s21g.com) at /usr/local/bin/git-svn line 3833

ぐぐっても情報が乏しいのでわかりませんが、大量のログがあるcloneだとエラーになる気がします。

Make sure your connection did not timeout. This is usually a client side connection problem.
https://dev.openwrt.org/cgi-bin/trac.fcgi/ticket/3563

リビジョン番号を取得

s21gではsvnを使っています。

   1  svn log https://svn.s21g.com/blog/trunk | head -n 10

リビジョンを指定してclone

すぐにclone完了しました!

   1  git svn clone https://svn.s21g.com/blog/trunk blog.git -r 1798
   2  Checking out files: 100% (1632/1632), done.
   3  Checked out HEAD:
   4    https://svn.s21g.com/blog/trunk r1798

posted by Png satoko on Mon 4 Aug 2008 at 17:08

なんでClass#superclassはあるのに#subclassesはないんだろう?

   1  class Class
   2    def subclasses
   3      ret = []
   4      ObjectSpace.each_object(Class) do |cls|
   5        ret << cls if cls.superclass == self
   6      end
   7      ret
   8    end
   9  end

posted by Png technohippy on Mon 4 Aug 2008 at 01:42 with 5 comments

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

   1  ?> Article.find(:all, :include => [:user => :face]);1
   2  => 1
   3  >>   Article Load (0.005234)   SELECT * FROM `articles`
   4    User Load (0.000645)   SELECT * FROM `users` WHERE (`users`.id IN ('13','9','37','17','1','3'))
   5    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 Png genki on Sun 3 Aug 2008 at 22:18