最近、草花を育てるのがちょっと楽しいです。
昔は草花を育てるのは、まどろっこしくあんまり好きでなかったのです。
水をあげたら、すぐ育つぐらいのレスポンスを求めていたのかもしれないです。
最近は子育てしているせいか、レスポンスがなくても全然平気です。
昨日との違いはなくても、長い目で見れば着実に育っている感じが
子育てと通じるものがあるので、ちょっと草花を育てるのも楽しいのかもしれません。
そんな草花を育てるのをより楽しむために、以下の本を買ってみたりしてみました。
2011-06-25
2011-06-21
オシロスコープがちょっと欲しい
最近、オシロスコープがちょっと欲しくなっています。
あったところで使いこなせるわけではないような気がするし、結構お高いし、
実際は買うことないかなぁと思っていたのですが、
DSO Nano v2
という安い素人が最初に使うにはよさそうな気がするものがあることを知り、
現在ちょっと悩み中です。
う~~ん、どうしよう。
あったところで使いこなせるわけではないような気がするし、結構お高いし、
実際は買うことないかなぁと思っていたのですが、
DSO Nano v2
という安い素人が最初に使うにはよさそうな気がするものがあることを知り、
現在ちょっと悩み中です。
う~~ん、どうしよう。
2011-06-17
ActiveScaffoldでファイルアップロード
ActiveScaffoldで管理しているモデルにファイルアップロード機能をつけたいと思ったわけです。
なんとActiveScaffoldでは、ファイルアップロードを使えるようにするfile_columnプラグインを利用できるようにすれば
勝手にファイルアップロードの画面が現れるのです。
http://wiki.activescaffold.com/wiki/published/FileColumnBridge
というわけで、file_columnプラグインを使えるようにします。
インストールは以下で。
script/plugin install http://filecolumn.googlecode.com/svn/tags/file_column
でも、2.3.11では、
uninitialized constant FileColumn::ClassMethods::Inflector
というエラーがでて動きませんでした。
なので
vender/plugins/file_column/lib/file_column.rb
のエラー発生部分を以下のように修正しました。
http://d.hatena.ne.jp/aki-s-119/20081201/1228168584
さらにデフォルトだと、日本語ファイル名は使えないので、
vender/plugins/file_column/lib/file_column.rb
の一部をいじりました。
http://www.kestrel.jp/modules/tinyd04/content/index.php?id=4
で後は、file_columnを使うことをモデルに記載してやればOKです。
以下の例では、foosテーブルのfilenameカラムにアップロードしたファイルの情報を格納して
実際にはpublic/uploadディレクトリの下にアップロードしたファイルが格納されます。
他にfile_columnに関しての情報は、以下が参考になります。
http://gdgdlog.net/log/show/227
後は、Fooモデル用のActiveScaffoldの画面を用意すれば、勝手にfilenameカラムがファイルアップロードのものになります。
私の環境では一度アップロードしたファイルを別のファイルに更新しようとするには一度、削除してからアップロードしないとダメでしたが、楽チンさを考えたらそれぐらいはよしです。
ActiveScaffoldステキです。
2011/6/24 追記
Railsアプリが
http://www.xxx.jp/
のような感じであれば上記だけで問題ないのですが、
専用のディレクトリの下で以下のような感じでやりたいとき、もうちょっとやることがあります。
http://www.xxx.jp/aaa/
アップロードはできるけど、ダウンロードがaaaを配慮してくれないのでできない情況です。
なのでActiveScaffoldとfile_columnそれぞれにちょっと手をいれます。
まずはActiveScaffoldは以下のファイルを以下のように変更します。
vendor/plugins/active_scaffold/lib/bridges/file_column/lib/list_ui.rb
file_columnは以下のファイルを以下のように変更します。
vendor/plugins/file_column/lib/file_column_helper.rb
2012/3/12 追記
Rails3.0では、ActionController::Base.relative_url_rootが使えなくなっているのでfile_columnは以下のように変更します。
vendor/plugins/file_column/lib/file_column_helper.rb
なんとActiveScaffoldでは、ファイルアップロードを使えるようにするfile_columnプラグインを利用できるようにすれば
勝手にファイルアップロードの画面が現れるのです。
http://wiki.activescaffold.com/wiki/published/FileColumnBridge
というわけで、file_columnプラグインを使えるようにします。
インストールは以下で。
script/plugin install http://filecolumn.googlecode.com/svn/tags/file_column
でも、2.3.11では、
uninitialized constant FileColumn::ClassMethods::Inflector
というエラーがでて動きませんでした。
なので
vender/plugins/file_column/lib/file_column.rb
のエラー発生部分を以下のように修正しました。
def file_column(attr, options={})
options = DEFAULT_OPTIONS.merge(options) if options
my_options = FileColumn::init_options(options,
# Inflector.underscore(self.name).to_s,
ActiveSupport::Inflector.underscore(self.name).to_s,
attr.to_s)
state_attr = "@#{attr}_state".to_sym
state_method = "#{attr}_state".to_sym
これとは別に以下のサイトでも直し方が紹介されています。http://d.hatena.ne.jp/aki-s-119/20081201/1228168584
さらにデフォルトだと、日本語ファイル名は使えないので、
vender/plugins/file_column/lib/file_column.rb
の一部をいじりました。
def self.sanitize_filename(filename)
filename = File.basename(filename.gsub("\\", "/")) # work-around for IE
# filename.gsub!(/[^a-zA-Z0-9\.\-\+_]/,"_")
filename.gsub!(/[^\w\.\-\+_]/,"_")
filename = "_#{filename}" if filename =~ /^\.+$/
filename = "unnamed" if filename.size == 0
filename
end
以下のサイトを参考にさせていただきました。http://www.kestrel.jp/modules/tinyd04/content/index.php?id=4
で後は、file_columnを使うことをモデルに記載してやればOKです。
以下の例では、foosテーブルのfilenameカラムにアップロードしたファイルの情報を格納して
実際にはpublic/uploadディレクトリの下にアップロードしたファイルが格納されます。
class Foo < ActiveRecord::Base
file_column :filename, :web_root => "upload/",
:root_path => File.join(RAILS_ROOT, "public", "upload")
end
他にfile_columnに関しての情報は、以下が参考になります。
http://gdgdlog.net/log/show/227
後は、Fooモデル用のActiveScaffoldの画面を用意すれば、勝手にfilenameカラムがファイルアップロードのものになります。
私の環境では一度アップロードしたファイルを別のファイルに更新しようとするには一度、削除してからアップロードしないとダメでしたが、楽チンさを考えたらそれぐらいはよしです。
ActiveScaffoldステキです。
2011/6/24 追記
Railsアプリが
http://www.xxx.jp/
のような感じであれば上記だけで問題ないのですが、
専用のディレクトリの下で以下のような感じでやりたいとき、もうちょっとやることがあります。
http://www.xxx.jp/aaa/
アップロードはできるけど、ダウンロードがaaaを配慮してくれないのでできない情況です。
なのでActiveScaffoldとfile_columnそれぞれにちょっと手をいれます。
まずはActiveScaffoldは以下のファイルを以下のように変更します。
vendor/plugins/active_scaffold/lib/bridges/file_column/lib/list_ui.rb
def active_scaffold_column_download_link(column, record, label =
nil)
return nil if record.send(column.name).nil?
label||=as_(:download)
- link_to( label, url_for_file_column(record, column.name.to_s), :popup => true)
+ link_to( label, url_for_file_column(record, column.name.to_s, {:absolute => true}), :popup => true)
end
def active_scaffold_column_thumbnail(column, record)
file_columnは以下のファイルを以下のように変更します。
vendor/plugins/file_column/lib/file_column_helper.rb
return nil unless relative_path
url = ""
- url << request.relative_url_root.to_s if absolute
+ url << ActionController::Base.relative_url_root.to_s if absolute
url << "/"
url << object.send("#{method}_options")[:base_url] << "/"
url << relative_path
2012/3/12 追記
Rails3.0では、ActionController::Base.relative_url_rootが使えなくなっているのでfile_columnは以下のように変更します。
vendor/plugins/file_column/lib/file_column_helper.rb
url = ""
- url << request.relative_url_root.to_s if absolute
- url << "/"
+ url << root_url
url << object.send("#{method}_options")[:base_url] << "/"
url << relative_path
2011-06-15
ActiveScaffoldでThe {{key}} interpolation syntax in I18n messages is deprecated. Please use %{key} instead ってエラーが出た時は
ActiveScaffoldを使っていてログを見ていたら
The {{key}} interpolation syntax in I18n messages is deprecated. Please use %{key} instead
というエラーが表示されていました。
ちなみに利用しているRailsのバージョンは、2.3.11です。
別に問題なく利用できているのだけど、なんか気持ち悪いのです。
とりあえずエラーを消すならば
vendor/plugins/active_scaffold/lib/active_scaffold/locale/ja.yml
に書かれている
{{}}
をエラーメッセージどおりに
%{key}
に変えてやればOKでした。
The {{key}} interpolation syntax in I18n messages is deprecated. Please use %{key} instead
というエラーが表示されていました。
ちなみに利用しているRailsのバージョンは、2.3.11です。
別に問題なく利用できているのだけど、なんか気持ち悪いのです。
とりあえずエラーを消すならば
vendor/plugins/active_scaffold/lib/active_scaffold/locale/ja.yml
に書かれている
{{}}
をエラーメッセージどおりに
%{key}
に変えてやればOKでした。
Railsで文字列内のURLにリンクをはる
Railsでテキストの中にURLが入っていたら、リンクを張りたいなぁと思って検索したら、
以下の方法が見つかりました。
これをApplicationHelperにでも書いておいてviewで呼べばOKです。
こちらを参考にさせていただきました。
http://gendosu.ddo.jp/redmine/wiki/rails/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF%E5%86%85%E3%81%AEURL%E3%82%92%E8%87%AA%E5%8B%95%E3%81%A7%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95
以下の方法が見つかりました。
require 'uri'
def url2link_of_string(html_string,options={})
target=options[:target] || '_blank'
URI.extract(html_string).uniq.each{|url|
html_string.gsub!(url,"#{url}")
}
html_string
end
これをApplicationHelperにでも書いておいてviewで呼べばOKです。
こちらを参考にさせていただきました。
http://gendosu.ddo.jp/redmine/wiki/rails/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF%E5%86%85%E3%81%AEURL%E3%82%92%E8%87%AA%E5%8B%95%E3%81%A7%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95
2011-06-14
Railsのモデルをcloneしたときにcreated_atとかはコピーされたくない
Railsのモデルのインスタンスをコピーして、ちょっとだけ内容を変更して別レコードとして保存したいときに
clone
でモデルをコピーして必要部分だけを変更しているのですが、
モデルに
created_at,updated_atがあるときは、この値もそのままコピーされてしまいます。
created_at,updated_atはコピーして別レコードとして保存した日時になって欲しいなぁとか思ったわけです。
なので以下のような感じにしてみました。
created_at,updated_atをnilにしてからsaveしただけです。
他にも方法があるような気がしますが、まぁよしです。
clone
でモデルをコピーして必要部分だけを変更しているのですが、
モデルに
created_at,updated_atがあるときは、この値もそのままコピーされてしまいます。
created_at,updated_atはコピーして別レコードとして保存した日時になって欲しいなぁとか思ったわけです。
なので以下のような感じにしてみました。
a = Foo.find(:first) => #<Foo id: 1, article: "aaa", created_at: "2011-06-10 17:02:21",updated_at: "2011-06-10 17:02:21"> b = a.clone => #<Foo id: nil, article: "aaa", created_at: "2011-06-10 17:02:21",updated_at: "2011-06-10 17:02:21"> b.created_at = nil => nil b.updated_at = nil => nil b.save! => true p b #<Foo id: 2, article: "aaa", created_at: "2011-06-13 14:27:23", updated_at: "2011-06-13 14:27:23">
created_at,updated_atをnilにしてからsaveしただけです。
他にも方法があるような気がしますが、まぁよしです。
ActiveScaffoldで削除するときに独自エラーメッセージを出す
ActiveScaffoldで削除をするときに
before_destroyで削除前にチェックをして条件を満たさないと削除できないようにしようと思ったわけです。
削除自体はできなくなるのですが、エラーメッセージが出なかったり、出たとしても
削除できませんでした。
な感じのそっけないメッセージになります。
できれば削除できない理由をちゃんとメッセージしたいなぁと思ったわけです。
まずエラーメッセージを出すようにするには
before_destroyの中で例外を発生させる必要があります。
でエラーメッセージですが、
do_destroyという関数を書けばよいようです。
以下のような感じです。
以下が参考になりました。
http://groups.google.com/group/activescaffold/browse_thread/thread/3af21f82c1695a57?pli=1
before_destroyで削除前にチェックをして条件を満たさないと削除できないようにしようと思ったわけです。
削除自体はできなくなるのですが、エラーメッセージが出なかったり、出たとしても
削除できませんでした。
な感じのそっけないメッセージになります。
できれば削除できない理由をちゃんとメッセージしたいなぁと思ったわけです。
まずエラーメッセージを出すようにするには
before_destroyの中で例外を発生させる必要があります。
でエラーメッセージですが、
do_destroyという関数を書けばよいようです。
以下のような感じです。
def do_destroy
destroy_find_record
begin
self.successful = @record.destroy
rescue Exception => ex
flash[:warning] = "オリジナルメッセージ"
self.successful = false
end
end
以下が参考になりました。
http://groups.google.com/group/activescaffold/browse_thread/thread/3af21f82c1695a57?pli=1
2011-06-03
2011-06-01
電子工作お勉強中
最近、プログラムだけでなくなんか作りたいなぁとか思って、いろいろと本は読んだりしていたのですが、やっぱり読んだだけではわからんなぁと当たり前のことになってしまいました。
そこで実際に本に書いてあるものを作ってみるのがいいのでしょうが、部品を集めるのがちょっと面倒だったりしたのです。
そんな時、以下の本を見つけました。
部品も入っていて実際に手を動かしながらやってみようというものなのです。
やっぱり実際に手を動かした方が理解できることが多いです。
本を読んだだけでは、あんまりイメージできなかった、どんな感じでどれくらいの電流が流れているのかなぁとかがちょっとイメージできるようになったような気がします。
ちなみに理解を深めるためには、テスターはあった方がよいです。
この本で使う分には、電流と電圧が測れればOKです。
この本のシリーズがまだあるようなので、もうちょっと買ってみようと思います。
(もうちょっと安いとうれしいのですけどね)
そこで実際に本に書いてあるものを作ってみるのがいいのでしょうが、部品を集めるのがちょっと面倒だったりしたのです。
そんな時、以下の本を見つけました。
部品も入っていて実際に手を動かしながらやってみようというものなのです。
やっぱり実際に手を動かした方が理解できることが多いです。
本を読んだだけでは、あんまりイメージできなかった、どんな感じでどれくらいの電流が流れているのかなぁとかがちょっとイメージできるようになったような気がします。
ちなみに理解を深めるためには、テスターはあった方がよいです。
この本で使う分には、電流と電圧が測れればOKです。
この本のシリーズがまだあるようなので、もうちょっと買ってみようと思います。
(もうちょっと安いとうれしいのですけどね)
WBS「トレたま」で放送された商品をAmazonで検索してみた(201105放送分)
WBSのコーナーの「トレたま」で放送された商品をAmazonで検索してみました。
iPhoneでもブレない (放送:2011.05.31)
amazonにありました
ステディカム スムージー
ワンプッシュで冷凍おしぼり (放送:2011.05.30)
見つかりませんでした
新レンタル太陽光発電 (放送:2011.05.27)
見つかりませんでした
新感覚!おかずゼリー (放送:2011.05.26)
見つかりませんでした
車もメーキャップ (放送:2011.05.25)
見つかりませんでした
光る画板? (放送:2011.05.24)
見つかりませんでした
スマホで動かすミニ四駆 (放送:2011.05.23)
見つかりませんでした
懐かしのジャケット復活! (放送:2011.05.20)
見つかりませんでした
熱で動くエンジン! (放送:2011.05.19)
amazonにありました
スターリングエンジン発電機付き (SE-905GR)
スターリングエンジン (SE-905NB)
スターリングエンジン (SE-905NR)
鼻歌が名曲に! (放送:2011.05.18)
見つかりませんでした
飛び出るボード! (放送:2011.05.17)
バックボード ウォーリー
見つかりませんでした
!!!!!amazon検索失敗2
変化する印刷! (放送:2011.05.16)
見つかりませんでした
偽りの着信 (放送:2011.05.13)
見つかりませんでした
つるして隠す (放送:2011.05.12)
見つかりませんでした
エコハンガー (放送:2011.05.11)
amazonにありました
ウェットスーツに最適!画期的なペットボトルハンガー RETHINK HANGER <イエロー> 乾きやすく型崩れなし
ウェットスーツに最適!画期的なペットボトルハンガー RETHINK HANGER <グリーン> 乾きやすく型崩れなし
落書きクッション (放送:2011.05.10)
amazonにありました
お絵かきクッション『Note me』 Pillow (レッド)
非常用めがね (放送:2011.05.09)
amazonにありました
災害緊急用オールマイティメガネ「アドレンズ・エマージェンシー」
災害などの予測不能なアクシデントやもしもの時に!度数が調節できる緊急用メガネ。【ADLENS EMERGENSEE】アドレンズエマージェンシー
電動自転車 変身キット (放送:2011.05.05)
見つかりませんでした
押す?回す?爪切り (放送:2011.05.04)
見つかりませんでした
刀削麺ロボット (放送:2011.05.03)
見つかりませんでした
飛んで飛んで飛んで~ (放送:2011.05.02)
見つかりませんでした
iPhoneでもブレない (放送:2011.05.31)
amazonにありました
ステディカム スムージー
ワンプッシュで冷凍おしぼり (放送:2011.05.30)
見つかりませんでした
新レンタル太陽光発電 (放送:2011.05.27)
見つかりませんでした
新感覚!おかずゼリー (放送:2011.05.26)
見つかりませんでした
車もメーキャップ (放送:2011.05.25)
見つかりませんでした
光る画板? (放送:2011.05.24)
見つかりませんでした
スマホで動かすミニ四駆 (放送:2011.05.23)
見つかりませんでした
懐かしのジャケット復活! (放送:2011.05.20)
見つかりませんでした
熱で動くエンジン! (放送:2011.05.19)
amazonにありました
スターリングエンジン発電機付き (SE-905GR)
スターリングエンジン (SE-905NB)
スターリングエンジン (SE-905NR)
鼻歌が名曲に! (放送:2011.05.18)
見つかりませんでした
飛び出るボード! (放送:2011.05.17)
バックボード ウォーリー
見つかりませんでした
!!!!!amazon検索失敗2
変化する印刷! (放送:2011.05.16)
見つかりませんでした
偽りの着信 (放送:2011.05.13)
見つかりませんでした
つるして隠す (放送:2011.05.12)
見つかりませんでした
エコハンガー (放送:2011.05.11)
amazonにありました
ウェットスーツに最適!画期的なペットボトルハンガー RETHINK HANGER <イエロー> 乾きやすく型崩れなし
ウェットスーツに最適!画期的なペットボトルハンガー RETHINK HANGER <グリーン> 乾きやすく型崩れなし
落書きクッション (放送:2011.05.10)
amazonにありました
お絵かきクッション『Note me』 Pillow (レッド)
非常用めがね (放送:2011.05.09)
amazonにありました
災害緊急用オールマイティメガネ「アドレンズ・エマージェンシー」
災害などの予測不能なアクシデントやもしもの時に!度数が調節できる緊急用メガネ。【ADLENS EMERGENSEE】アドレンズエマージェンシー
電動自転車 変身キット (放送:2011.05.05)
見つかりませんでした
押す?回す?爪切り (放送:2011.05.04)
見つかりませんでした
刀削麺ロボット (放送:2011.05.03)
見つかりませんでした
飛んで飛んで飛んで~ (放送:2011.05.02)
見つかりませんでした