|
|
|
|
Eメールサービス層を設計するためのフレームワークです。パスワード忘れのメール、契約時のウェルカムメール、支払い請求メール、といった準備された通知メールを人やシステムに配信することができます。さらにメールの受信処理もできるので、例えば、Eメール経由でweblogを利用したりもできます。
メールの送受信を行うクラスを作ります。model, controller, scaffoldなどと同様に mailer にも generator がありますので、generate コマンドでクラスを作成することができます。例として、MLの登録用メーラクラス(RegisterMailer)を考えます。
% ruby script/generate mailer RegisterMailer → app/models/register_mailer.rb
作られたクラス定義ファイルは、model 同様中身はからっぽです。ここに、これからメール作成メソッドや受信メソッド(receive)を追加していきます。
実際の送信処理はライブラリがやってくれますので、我々がやることは、送信メールを作成する適当なメソッドを定義するだけです。メソッド名には好きな名前をつけて大丈夫です。引数の形式も完全に自由です。このメソッドの中では、本文以外のヘッダ情報に関する詳細を設定します。例えば、subject, recipients, sender, timestampなどを以下のように設定していきます。
def welcome (recipient)
recipients recipient
subject "[WELCOME] #{recipient}"
from "berryz-ml@wota.jp"
body :recipient=>recipient, :now=>Time.now
end
メール本文は ActionView の template で作成します。これまでの controller と view の関係と同じ感覚です。なお、body で指定した情報はインスタンス変数で参照することができます。
Hello there, Mr. <%= @recipient %> --- # received at <%= @now %>
これらの設定から、受信者が "risyako@example.com" の場合は、以下のようなメールが作成されます。
Date: Sun, 12 Dec 2004 00:00:00 +0100 From: berryz-ml@wota.jp To: risyako@example.com Subject: [WELCOME] risyako@example.com Hello there, Mr. risyako@example.com --- # received at Sun Jul 31 06:32:41 JST 2005
メールを送るときは、今定義したインスタンスメソッド(welcome)を直接実行せずに、クラスメソッドの deliver_* と create_* を呼び出します。('*'に今作成したメソッド名が入ります)。各メソッドに応じて自動的にインスタンスが作成されます。
RegisterMailer.deliver_welcome("risyako@example.com") # 配送される
RegisterMailer.create_welcome("risyako@example.com") # => tmail object が返ります(配送はされません。テスト用)
RegisterMailer.new.welcome("risyako@example.com") # 動きません
ActionMailer のデフォルト文字コードは UTF8 ですので、日本語のメールを送信する場合は、さらに以下の変換処理が必要です。
これは汎用性があるので、Iso2022jpMailer というクラスにしておきます。
# app/model/iso2022jp_mailer.rb
require 'nkf'
class Iso2022jpMailer < ActionMailer::Base
@@default_charset = 'iso-2022-jp' # これがないと "Content-Type: charset=utf-8" になる
@@encode_subject = false # デフォルトのエンコード処理は行わない(自分でやる)
# 1) base64 の符号化 (http://wiki.fdiary.net/rails/?ActionMailer より)
def base64(text, charset="iso-2022-jp", convert=true)
if convert
if charset == "iso-2022-jp"
text = NKF.nkf('-j -m0', text)
end
end
text = [text].pack('m').delete("\r\n")
"=?#{charset}?B?#{text}?="
end
# 2) 本文を iso-2022-jp へ変換
# どこでやればいいのか迷ったので、とりあえず create! に被せています
def create! (*)
super
@mail.body = NKF::nkf('-j', @mail.body)
return @mail # メソッドチェインを期待した変更があったら怖いので
end
end
# app/model/register_mailer.rb
class RegisterMailer < Iso2022jpMailer
def welcome (recipient)
recipients recipient
subject base64("ご登録ありがとうございます")
from base64("Berryzファンクラブ") + " <berryz-ml@wota.jp>"
body :recipient=>recipient
end
end
# app/views/register_mailer/welcome.rhtml 以下のメールアドレスを登録しました。 E-mail: <%= @recipient %> ...
# app/controllers/berryz.rb
class BerryzController < ApplicationController
def register
RegisterMailer.deliver_welcome(@params["email"])
# render :text => RegisterMailer.create_welcome(@params["email"]) # デバッグ用
end
end
もしかしたら、Subjectやbodyの変換処理は ActionMailer や TMail でやれるのかもしれません。この辺の変換処理(どこでやるのか)は理解がまだまだで怪しいので、情報をお持ちの方がいましたらよろしくお願いします。
メールを受信するには、public なインスタンスメソッドの receive を定義します。これは TMail インスタンスを1つ引数にとります。クラスメソッドの receive が生のEメール文字列を引数に起動されると、自動的にインスタンスが作成され、定義したインスタンスメソッドの receive が呼び出されます。
class Mailman < ActionMailer::Base
def receive(email)
page = Page.find_by_address(email.to.first)
page.emails.create(
:subject => email.subject, :body => email.body
)
if email.has_attachments?
for attachment in email.attachments
page.attachments.create({
:file => attachment, :description => email.subject
})
end
end
end
end
この Mailman は postfix 用ですが、以下のように実行します。
./script/runner 'Mailman.receive(STDIN.read)'
ActionMailer::Base クラスで全てのオプションが設定できます。主要なオプションは以下の通りです。(とりあえず、localhost で smtp が動いてれば、何も設定しなくて大丈夫です。気になるものだけ追加しましょう)。
# SMTPサーバ利用時のオプション
ActionMailer::Base.server_settings = {
:address=>'smtp.yourserver.com', # default: localhost
:port=>'25', # default: 25
:domain=>'smtp.yourserver.com', # HELO domain を指定する場合
:user_name=>'user',
:password=>'pass',
:authentication=>:plain # :plain, :login or :cram_md5
}
# 配送に失敗したら例外を出す
ActionMailer::Base.raise_delivery_errors = true
# 配送手段を :smtp か :sendmail から明示する。
# :sendmail の場合は "/usr/sbin/sendmail"(変更不可) が利用される。
ActionMailer::Base.delivery_method = :sendmail # default :smtp
# 実際の配送処理を行うかどうか。(ほぼテスト用)
ActionMailer::Base.perform_deliveries = false # default: true
# テスト時に配送したメールの配列を保存する。
ActionMailer::Base.deliveries = []
# subject と body のエンコードに利用される文字コード。@charset でも指定可能。
# (今回は Iso2022jpMailer の @@default_charset で設定してるので不要)
ActionMailer::Base.default_charset = 'iso-2022-jp' # default: 'UTF-8'
# デフォルトの content-type を指定する。@content_type でも指定可能。
ActionMailer::Base.default_content_type = ... # default: 'text/plain'
# 暗黙的に multi-part が作成されたときの並び順。@implicit_parts_order でも指定可能。
ActionMailer::Base.default_implicit_parts_order =["text/html", "text/enriched", "text/plain"]
仮に毎日16時間PCの前に居るとすると、椅子は人生の2/3を担う重要な因子である。にも関わらず、このパイプ椅子もどきでの生活を強いられているせいか、最近どうにも腰から全体にかけて体が痛くなってきた。人生の2/3が快適になると考えれば、仮に何十万円だとしても生涯賃金と比較すれば安い買い物である。ということで、今こそいい椅子を買うときだ!とゆいたいです。高級ワークチェアは「アーロンチェア一択」という刷り込みがあったが、他にも候補が色々あるようだ。まずは、椅子選びの注意点から。調べるまで気付かなかったが、試座が重要らしい。
| 注意点 | 内容 |
|---|---|
| 用途 | 前傾(書き物作業)か後傾(PC作業・リラックス用途)により候補が大きく変わる |
| 試座 | 万人が満足する椅子はないため、実際に座ってみて自分に合うものを選ぶ |
| 体格 | 体格によっても候補が左右されるため、高さ等の調節機能の有無も重要になる |
| 保障 | 高額なため、破損時の保証体制(年数のみならず海外への郵送費用)も考慮する |
「ワーキングチェア総合スレッドWiki」 http://www.wikihouse.com/wchair/ より
※ここの全項目は必読である(最低でも「ワーキングチェアの選び方。」)
570 :名無しさん@3周年:2006/07/29(土) 17:23:45 試座出来ないじゃなくてしにいけよ。 試座無しで椅子買うなんて顔も見たこと無い女と結婚するようなモンだ。
候補の洗い出しために、まずは「用途」を決定する必要がある。というのも注意点にある通り完全に両用の椅子はないため、前傾か後継のどちらかに決定しないと結局どっち付かずになってしまうのである。現在想定しているメイン作業はアプリケーションの開発作業(プログラミング)である。Wikiによると「PC作業」は後傾に分類されているが、プログラムなどの集中した作業時にはむしろ前傾の方が適しているだろう。しかしながら、せっかくの高価な買い物なので、疲れたときにはハンモックのようにリラックスして眠りたいものである。よって、用途は「前傾」ときどき「後傾」というハイブリッドとする。(ダメじゃん)
恐らく日本で一番の高級ワークチェア試座環境であるヤマギワリビナ(秋葉原)にて実際に試座を行った。以下はそのトップ3の感想である。なお、予算は10〜20万とする。
前傾なら迷わずこれにしたい!と思わせるのに十分なくらい、最初に座った瞬間の包まれるような心地よさは病み付きになる。売れているのは日本だけ、というアンチも多いが、ハーマンミラー社の製品は安心の12年保証である点も、大きな買い物には重要なポイントだろう。(他社は2〜3年><)。その他にもリクライニングの堅さ調節など、フル装備版では多くの調整機能があるのは重要である。(逆に言うとフル装備版でないと意味がない)。売れ続けているのには確かに訳があると納得させてくれる。
後傾でリラックスしたいのであれば、コンテッサのヘッドレスト付きは非常に魅力的である。アーロンは前傾用途のためにガンガン仕事をやる時はよいが、ちょっと一息つくときにもたれ掛かると背中にフレームが当たり、もちろんヘッドレストもないので休憩用途には適さない。コンテッサは後傾機なのでそんな心配もなく、さらに、リクライニング固定等の操作レバーが肘掛の手元にあるなど、快適に利用できるようにインタフェース的にも配慮されているのは日本製ならではであろう。(アーロンは座面の下に手を伸ばす必要がある)
そして、噂には聞いていたが、OPEN UP が凄かった。一言で表現するとヤバイ。二言にするとテラヤバス。三言にすると、おぷなぷ、おぷなぷ、ボクだけのフィット感。最大45℃の後継は完全にリクライニングシートであり、背面にある一軸支柱による稼動性は体を動かすと椅子が背中にフィットしたまま動く爽快感を提供する。座り心地も最高で柔過ぎず硬すぎないシートは上記の特徴と共に長時間の作業を完全にサポートしてくれる。また、後傾機でありながらある程度の前傾にも対応する柔軟性も併せ持ち、その際、類機では弱点になりがちだったヘッドレストも前傾に見事に追従するのは特筆すべき点である。(これも一軸支柱のため?)。ただ、受注生産と輸送のため注文から発送までに3,4ヶ月要してしまうのが難点である。逆に言えば、在庫に左右される点が唯一の弱点だと言ってよいぐらいの完成度である。
| タイプ | 名前 | 価格 | メーカー | 保障 | 頭 | 腰 | 座奥 | 上下 | 特徴 |
|---|---|---|---|---|---|---|---|---|---|
| 前傾 | アーロンチェア (フル装備) | 15万 | ハーマン | 12年 | × | ○ | ○ | ○ | 高級ワークチェアのシンボル、前傾の王道 |
| 後傾 | コンテッサ (ヘッドレスト) | 15万 | オカムラ | 3年 | ○ | ○ | ○ | ○ | 日本製で高いCPと人気を誇る、後傾のデファクト? |
| 万能 | OPEN UP (ハイバック) | 20万 | セダス | 3年 | ○ | ○ | × | ○ | 前傾から最大45℃の後傾まで最高の座り心地を提供 |
(※ 頭:ヘッドレスト、座奥:座奥調整、上下:座面上下調節)
てゆか、もう気持ちは既に、ジリリ、スッペシャルなんちゅう夏 OPEN UP でかっちょえーじゃん!なんだけどね♪ぴーちっちさん、これでいいよね?いいんだよね?
2ch の「OPEN UP スレ」では1が個人輸入に挑戦している。相手はドイツであり、幸い代理店では英語が通じるとは言え、非常に手間がかかることは間違いないのであるが、ヤマギワ等の日本代理店経由でオーダーすると3,4ヶ月必要なってしまう所が1ヶ月程度で可能になることと、個人で運送関係を頑張ることで費用を抑える、という2つのメリットがある。しかし、よくよく計算してみると、上記の OPEN UP 単体を購入する場合は、あまりコストは変化がないようだ。恐らく、革張りタイプだったり、work assistant (20万するオットマン)を一緒に買う場合に安くなるのだろう。
ヤマギワ:195,300円 現地価格:168,414円 (1151*146.32) 日本持込:148,541円 (1151*146.32*0.84*1.05 # ドイツ国内の消費税が免税後、日本の消費税を付与) 国際輸送: 29,264円 (ドイツ→日本の空輸20kgを200ユーロと試算) 国内輸送: 3,750円 (ヤマト便:重量216kg換算(0.69 * 0.8 * 1.4 * 280)の千葉→23区) 個人輸入:181,555円 |
(※ 現地価格:1151ユーロ、ドイツの消費税(付加価値税):16%、1ユーロ:146.32円)
てゆか、国際送料高すぎ。こうなったら、送料の4万使ってドイツに移住してあっちで仕事したい><。(椅子だけのために)
問1) scaffold で作った update アクションを下記のように修正したところ、無限ループするようになりました。原因を探してください。
def update
Company.transaction do
@company.save!
flash[:notice] = '取引先情報を更新しました'
if request.xhr?
update do |page|
page.redirect_to :action => 'show', :id => @company
end
else
redirect_to :action => 'show', :id => @company
end
end
end |
兎にも角にも、俺俺ハックのせいでtransaction も associations も save! にも心当たり満載な現実。切ないけど、あちこち探して原因究明に半日かかったよ、熊井ちゃん。てか、灯台下暗し。その手は全く見えませんでした。(島八段)。最後はずっと Mongrel とか HasOne のソースを必死に追ってたり。もうね、死にたい。熊井ちゃんの天空踵落としを食らって死にたい。
|
アハハハハー号 | |||
|
一度は経営破綻に追い込まれた、まいは牧場。
という微妙なテンションのまま、苦節232年目にしてようやく凱旋門賞をゲット。 2〜9歳までフル活躍。合計G1は15勝くらい。末脚が凄くて、どんな後方からでも追い一閃。凱旋門も2馬身差ほど。ディープの全盛期とぶつからなかったのが残念。どれだけ印を奪えるか見たかった。 |
| アハハハハーの血統 | |||
|
父
コマンダーインチーフ Commander in Chief 1990 鹿毛 |
ダンシングブレーヴ Dancing Brave 1983 鹿毛 |
Lyphard | Northern Dancer |
| Goofed | |||
| Navajo Princess | Drone | ||
| Olmec | |||
| Slightly Dangerous 1979 鹿毛 |
Roberto | Hail to Reason | |
| Bramalea | |||
| Where You Lead | Raise a Native | ||
| Noblesse | |||
|
母
アハハハ (まいは牧場) |
サンデーサイレンス Sunday Silence 1986 青鹿毛 |
Halo | Hail to Reason |
| Cosmah | |||
| Wishing Well | Understanding | ||
| Mountain Flower | |||
|
アハハ (まいは牧場) |
ウォーエンブレム | Our Emblem | |
| Sweetest Lady | |||
| イディアルダーリン | Fabulous Dancer | ||
| Mercalle | |||
ウォーエンブレムとイディアルダーリンは所謂「面白い配合」。つまり、母父サンデーで、母母が面白配合。
これだけ活躍したのに、牝馬だから今回もサンデーの種付け権利はゲットならず。まだダービーも取ってないのに。というか、牝馬ばっかり生まれるので牡のクラシックはどれも取れてないや。
| JRuby | Rails | Berryz | ℃-ute | エッグ | jQuery |
| 前 | 1992年 7月 |
次 | ||||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |
_ gonzolder [ja krevetko! Vsem sasat'!]
_ incest photos [Hi. It's about game.]
_ aarst [higuys!What yourblog powered by?]