知らない間にMySQL5.1がRCになってた

で、日本語マニュアルもあるみたいですね。
http://dev.mysql.com/doc/refman/5.1/ja/index.html

で、この5.1で一番気になるのClusterあたりを見てみると

MySQLクラスタディスクデータ:5.1.6以前のMySQLバージョンでは、NDBClusterストレージエンジンは必ずメモリ内に保存されていましたが、MySQL 5.1.6からはディスク上のクラスタデータ(ただし、インデックスではない)に保存されることが可能になりました。このことで、MySQLクラスタは以前よりも少ないハードウェア(RAM)で拡大できるようになりました。項14.11. 「MySQL Cluster ディスク データ ストレージ」 を参照してください。

ディスク上のクラスタデータ(ただし、インデックスではない)に保存されることが可能になりました。
う〜ん。なんでインデックスはだめなんだろう・・・

「Appty::GroupMail」というWEBサービスをリリースしました

去年に引き続き、Award on Railsに参加しました。
1週間ほどで実装したのですが、やりたいことの半分も実装できなかったのが残念。

というわけで、どんなアプリか説明します。

Appty::GroupMail(アプティ・グループメール)

概要

メーリングリストとかにCCにgm@appty.comというアドレスを入れて投稿すると、

  1. 件名をキーにスレッドを作る
    1. Re:とかを取り除いたとき、同じ件名になればスレッドの下に本文がアーカブされていきます
  2. 件名をキーにWikiページを作る

といった機能です。

目的

web2.0とかマッシュアップとか色々いっているけど、仕事とかでは今も昔も情報共有にはメーリングリストですよね?
でも、メーリングリストにはアーカイブ機能がついてないことも多いので、このサービスを使えば、メンバーとメールアーカイブを共有できます。

こんな時に便利かも

  1. 最近は違う会社の人とプロジェクトを組んで仕事をすることも多いと思いますけど、そんなときに、メーリングリストアーカイブ共有ができます。
  2. 新しくプロジェクトに参加してきた人も昔のアーカイブを読める
  3. 件名でスレッド化してwikiページを生成しているので、誰かがメールの内容を纏めてくれると助かります^^
  4. ちなみに最初にスレッドが立つメールはその本文でwikiページを作るのでhikiフォーマットで本文を書くと、いきなり整形されたwikiページが作れます。メールで報告書とか書くときにどうでしょうか?

使い方

未会員なら
  1. 会員登録 or 会員から招待
  2. グループを作成し、そこにメーリングリストのアドレスを登録
  3. そのメーリングリストに投稿するときにCCに「 gm@appty.com 」を入れる
会員なら
  1. オープンなグループに参加 or 会員から招待 or グループを作成
  2. そのメーリングリストに投稿するときにCCに「 gm@appty.com 」を入れる

ログインして、公開グループの一覧でご意見を募集しています。
http://www.freeml.com/appty?sid=7092b606fec3edc3cb507c098cd12ae5
でオープンなメーリングリストを作っているので、ご意見とかメールに投げてみてください。

わけあり物件

すごいどうでもいい話なんですが、現在引越しを考えてます。
色々探して、非常に良い条件の物件を見つけました。

マンション名と部屋番号がわかったので、なんとなくググってみたら

強盗殺人
がありました。

いやあGoogleは便利ですね(違

irbの便利な小技

Rubyでプログラムを書いているとき、ちょっとオブジェクトの中身を見たいときとかに便利なのがirbです。
Railsだと

script/console

とすればRails環境で使うことができます
usersというテーブルがあるとします

id integer
name text

とあれば、コマンドライン

u = User.new
u.name = "ああああ"
u.save

みたいに使えます。

この便利なirbですが、より便利に使う方法を紹介します。


history

shellには↑を押すと、履歴を追っていけます。irbは同じセッション内でしか履歴を追っていけません。そこで自分のホームディレクトッリに.irbrcというファイルを作ります

.irbrc

IRB.conf[:SAVE_HISTORY]=100

としただけで、一度quitしても、いつでも履歴を追えます。


補完

これもshellと同じでtabキーを押した時に、候補を一覧で出すことができます

.irbrc

require 'irb/completion'

irb(main):001:0> 1.d [ここでtabキー]
1.denominator 1.display 1.div 1.divmod 1.downto 1.dup


what

たとえば、3.14を4にするメソッドが思い出せない/分らない場合、どうしたらいいでしょう?

gem install what_methods

.irbrc

require 'what_methods'

下記のように使います

irb(main):002:0> 3.14.what? 4
3.14.ceil == 4
=> ["ceil"]


参考

僕のirbrcは

require 'rubygems'
require 'irb/completion'
require 'what_methods'
require 'pp'
IRB.conf[:AUTO_INDENT]=true
IRB.conf[:SAVE_HISTORY]=100

Ruby on Railsの開発環境3

先週、Macを買おうと思い、ヘタれてThinkPadX60を買ってしまった・・
やっぱり重いのはイヤですね。
core2duoのB5モバイルノートにメモリを3G積んでも17万円弱で買えたので、モノ自体は満足しています。
僕としてはこの夏は青空プログラミングを推奨したいと思います^^;
emobileも勢いで契約したので、外からでもVPNで社内のサーバにはアクセスできます。天気の良い日は公園とかで仕事しようかとたくらんでます)

このノート1台で開発用とクライアント用とで併用して使うにはVMPlayerにCentOS5.0を入れておけば十分かと思っています。

現在の問題点

  1. Windows Vistaの動きがあやしい
    1. スリープモードから復帰しないことが結構ある
    2. なぜかディスクに書き込みするのが遅い
  2. 開発環境
    1. Radrailsからemacsに乗り換えてますが、なかなか馴染めない・・・

Railsからbigintを使用する時の注意点

idとかの AUTO_INCREMENTのカラムをbigintで使用している時、特に32bitを超える数値の時(自分のPCは32bitマシン)は明らかに挙動がおかしい。
例えば

id bigint
title text
body text

というテーブルがあり

alter table posts auto_increment = 100000000000000;

と設定し

post = Post.new
post.title = "aaa"
post.body = "bbb"
post.save!

とした場合、MySQL C API の関数 mysql_insert_id()を実行します。
この関数は、直近の INSERT クエリにより AUTO_INCREMENT カラム用に生成さ
れたIDを取得します。が、mysql_insert_id() の返り値の型を long 型に変換します。
AUTO_INCREMENT カラムが BIGINT 型である場合、返される型は不正確になります。

なので、

redirect_to :action=>:show,id=>post

saveのあとに詳細ページへリダイレクトすると、modelのidの数値が不正なのでRecodeNotFoundとなります。

解決方法は

module ActiveRecord
  module ConnectionAdapters
    class MysqlAdapter < AbstractAdapter
      def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) #:nodoc:
        execute(sql, name = nil)
        id_value || @connection.query("SELECT LAST_INSERT_ID();").fetch_row()[0].to_i
        #id_value || @connection.insert_id
      end
    end
  end
end

をenviroment.rbとかに書けばOK!
いや〜これで軽く半日はハマった^^;

でも、これは他の言語でも同じ現象起こしそうだ・・・