Hatena::ブログ(Diary)

Kinetic Programmer (by Yuji Toyoda) このページをアンテナに追加 RSSフィード

2013-08-22 ラジオの製作 このエントリーを含むブックマーク このエントリーのブックマークコメント

f:id:yujitoyd:20130822162604j:image

4石 レフレックス トランジスタラジオ キット CHERRY | 東京デバイセズ

我が家の子供(小学2年)に電子工作をさせたくて、いろいろ悩んだあげくラジオの製作から入門してみることになりました。鉱石ラジオなどでもよかったのですが、まったく音が鳴らないと興味も引いてしまうと思い、まずは、東京デバイセズさんから販売されているレフレックス方式ラジオを購入することに決定。はたしてうまく受信できるか心配です。

昨日は、電波がどういうものかを説明するのにだいぶ苦労しましたが、これの購入後には各部品の役割や、はんだ付けの説明に苦労しそうです。

2009-10-23 実行時のActiveRecordクラスの変更

ActiveRecordクラスに動的にバリデーションコードを追加する

RailsWay 250ページあたりに出てくる話題として、ActiveRecordレコードを読み出す時に動的にバリデーションコードを定義するという話題があり、場合によっては非常に便利だが、RailsWayのコードそのままだとちょっとアレでうまくいかないので、正しいコードに修正してみた。

もともとは、こんな感じ:

class Account < ActiveRecord::Base 
... 
private 
  def after_find 
    singleton = class << self; self; end 
    singleton.class_eval(config) 
  end 
end 

これで基本は問題ないのだが、configの部分に投入するバリデーションコードは

validates_numericality_of :product_code, :only_integer => true 
validates_length_of :product_code, :is => 10 

ではなく、

ActiveRecord::Base.validates_numericality_of :product_code, :only_integer => true 
ActiveRecord::Base.validates_length_of :product_code, :is => 10 

のようにActiveRecord::Baseを指定してあげないとエラーが出る事もなくバリデーションが正しく実行されないという現象になる。

この例ではafter_findコールバックを使っているけど、before_validationなどで使うほうが一般的かもしれない。

ちなみになんらかの工夫をしないと多重にバリデーションを追加してしまう事態になるので要注意。

2009-01-10 Railsと遅延トランザクション

Railsでの遅延トランザクションと並行性

経験上、楽観的ロックの場合はトランザクションを始める前に対象レコードをすべて読み込んでしまい、必要な処理を施し(カラムデータの変更など)、その後で、ActiveRecord::Base.transactionでトランザクションを開始し、レコードをまとめて保存する(save!を使う)。すると、複数テーブルを同時に更新する際の原子性を確保しやすい。

あらかじめ、関連するレコードをロックしてからレコードの読み出しを行うような場合は(悲観的ロックを併用する場合は)トランザクションブロックで、sample_model = SampleModel.find(:first, :lock => true)のようにロックをかけてからレコードを読み込む。InnoDBの場合、レコード単位にロックがかかり便利。

いずれにせよ、Railsアプリケーションで複数ユーザが同時に共通のリソースにCRUDするなら、常にこういった並行性問題を考えなければならないのだが、作業量として大変な場合が多々あり、しかも並行状態を作るテストが難しい。

2008-12-08 和書 RailsWay 発売開始 このエントリーを含むブックマーク このエントリーのブックマークコメント

長期間の監修作業の末についにRails Way (Obie Fernandez 著, 豊田 祐司 監修)の出版にこぎつけました。先週末あたりから、書店でも並べられているようです。原書はRails 2.0がリリースされる直前に出版されており、2.0で強化されたREST関連のトピックが結構くわしく解説されています。また、ActiveRecordに関しては、アソシエーションの詳細など、かなり高度なトピックまで網羅しています。このあたりが中心で、ページ数もわりと多く取られているのですが、変わったところとしては後半でNginxによるサーバ構築や、Monitの解説が出てくるところなどがおもしろいかもしれません。

Railsの初心者というよりは中級者へのステップアップとして有益な内容が多いと思います。監修作業ではRails 2.0.2を使って検証作業を行っています。

Railsエンジニアとして実力をつけたいと思っている方は是非読んでみてはいかがでしょうか。



2008-04-10

Ruby Way [第2版] 監修作業完了

最近数ヶ月間、Ruby Way 第2版の監修作業に没頭しており、昼夜問わず文章チェック、コードチェックに追われていました。

Ruby Way 第2版の原著は「The Ruby Way, Second Edition」で、著者はHal Fultonという人物です。

前作の第1版は2002年の11月に翔泳社より出版されました。今回はこれの改訂第2版となり、同じく翔泳社から出版されます。来週早々(4月14日の週)には書店に並ぶはずです。

f:id:yujitoyd:20080410154059j:image

原著はRuby 1.8系列を対象に記述されているのですが、翻訳時点で入手可能だったRuby 1.9.0-0ですべてのサンプルコードの動作を確認しています。必要に応じて1.9.0を使う場合の注記やサンプルも記載しました。Railsのことを考えると現時点では1.8.6を使用する読者が多いと思いますが、本書は1.8.6を使う読者でも、最新の1.9.0を使いたいという読者でもどちらでも大丈夫です。ただし、1.9.0は開発バージョンですので、最新仕様の確認をお忘れなく。

目次は次のようになっています。

第1章 Rubyの概要

第2章 文字列の操作

第3章 正規表現

第4章 Rubyの国際化

第5章 数値計算

第6章 シンボルと範囲

第7章 時刻と日付の操作

第8章 配列ハッシュ、そのほかの列挙可能オブジェクト

第9章 高度なデータ構造

第10章 I/Oとデータストレージ

第11章 RubyにおけるOOPと動的機能

第12章 Rubyスレッド

第13章 スクリプティングとシステム管理

第14章 Rubyとデータフォーマット

第15章 テストとデバッグ

第16章 コードのパッケージ化と配布

第17章 ネットワークプログラミング

第18章 分散Ruby

第19章 Rubyの開発ツール

実際の開発業務をカバーできるほど広範囲なトピックを扱っているにも関わらず、結構深い内容も記載されているのが本書の特徴です。興味のある方はぜひ読んでみてください。