1988-07-31

あいぴょんさん、生誕の日。


1998-07-31


2005-07-31 優しいRailsの育て方

[rails] Action Mailer

Eメールサービス層を設計するためのフレームワークです。パスワード忘れのメール、契約時のウェルカムメール、支払い請求メール、といった準備された通知メールを人やシステムに配信することができます。さらにメールの受信処理もできるので、例えば、Eメール経由でweblogを利用したりもできます。

generate mailer

メールの送受信を行うクラスを作ります。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 ですので、日本語のメールを送信する場合は、さらに以下の変換処理が必要です。

  1. 日本語を含むヘッダ部分を iso-2022-jp に変換し、BASE64エンコードする
  2. 本文を iso-2022-jp に変換する

これは汎用性があるので、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"]
本日のツッコミ(全3件) [ツッコミを入れる]

_ gonzolder [ja krevetko! Vsem sasat'!]

_ incest photos [Hi. It's about game.]

_ aarst [higuys!What yourblog powered by?]


2006-07-31 優しいChairの選び方

安西先生・・・、いい椅子が欲しいです

仮に毎日16時間PCの前に居るとすると、椅子は人生の2/3を担う重要な因子である。にも関わらず、このパイプ椅子もどきでの生活を強いられているせいか、最近どうにも腰から全体にかけて体が痛くなってきた。人生の2/3が快適になると考えれば、仮に何十万円だとしても生涯賃金と比較すれば安い買い物である。ということで、今こそいい椅子を買うときだ!とゆいたいです。高級ワークチェアは「アーロンチェア一択」という刷り込みがあったが、他にも候補が色々あるようだ。まずは、椅子選びの注意点から。調べるまで気付かなかったが、試座が重要らしい。

椅子選びの注意点

注意点内容
用途前傾(書き物作業)か後傾(PC作業・リラックス用途)により候補が大きく変わる
試座万人が満足する椅子はないため、実際に座ってみて自分に合うものを選ぶ
体格体格によっても候補が左右されるため、高さ等の調節機能の有無も重要になる
保障高額なため、破損時の保証体制(年数のみならず海外への郵送費用)も考慮する

「ワーキングチェア総合スレッドWiki」 http://www.wikihouse.com/wchair/ より

※ここの全項目は必読である(最低でも「ワーキングチェアの選び方。」)

「ワーキングチェア総合スレッド Part18」より

570 :名無しさん@3周年:2006/07/29(土) 17:23:45 
 試座出来ないじゃなくてしにいけよ。 
 試座無しで椅子買うなんて顔も見たこと無い女と結婚するようなモンだ。 

用途

候補の洗い出しために、まずは「用途」を決定する必要がある。というのも注意点にある通り完全に両用の椅子はないため、前傾か後継のどちらかに決定しないと結局どっち付かずになってしまうのである。現在想定しているメイン作業はアプリケーションの開発作業(プログラミング)である。Wikiによると「PC作業」は後傾に分類されているが、プログラムなどの集中した作業時にはむしろ前傾の方が適しているだろう。しかしながら、せっかくの高価な買い物なので、疲れたときにはハンモックのようにリラックスして眠りたいものである。よって、用途は「前傾」ときどき「後傾」というハイブリッドとする。(ダメじゃん)

試座

恐らく日本で一番の高級ワークチェア試座環境であるヤマギワリビナ(秋葉原)にて実際に試座を行った。以下はそのトップ3の感想である。なお、予算は10〜20万とする。

[アーロンチェア (フル装備)]

前傾なら迷わずこれにしたい!と思わせるのに十分なくらい、最初に座った瞬間の包まれるような心地よさは病み付きになる。売れているのは日本だけ、というアンチも多いが、ハーマンミラー社の製品は安心の12年保証である点も、大きな買い物には重要なポイントだろう。(他社は2〜3年><)。その他にもリクライニングの堅さ調節など、フル装備版では多くの調整機能があるのは重要である。(逆に言うとフル装備版でないと意味がない)。売れ続けているのには確かに訳があると納得させてくれる。

[コンテッサ (ヘッドレスト)]

後傾でリラックスしたいのであれば、コンテッサのヘッドレスト付きは非常に魅力的である。アーロンは前傾用途のためにガンガン仕事をやる時はよいが、ちょっと一息つくときにもたれ掛かると背中にフレームが当たり、もちろんヘッドレストもないので休憩用途には適さない。コンテッサは後傾機なのでそんな心配もなく、さらに、リクライニング固定等の操作レバーが肘掛の手元にあるなど、快適に利用できるようにインタフェース的にも配慮されているのは日本製ならではであろう。(アーロンは座面の下に手を伸ばす必要がある)

[OPEN UP (ハイバック)]

そして、噂には聞いていたが、OPEN UP が凄かった。一言で表現するとヤバイ。二言にするとテラヤバス。三言にすると、おぷなぷ、おぷなぷ、ボクだけのフィット感。最大45℃の後継は完全にリクライニングシートであり、背面にある一軸支柱による稼動性は体を動かすと椅子が背中にフィットしたまま動く爽快感を提供する。座り心地も最高で柔過ぎず硬すぎないシートは上記の特徴と共に長時間の作業を完全にサポートしてくれる。また、後傾機でありながらある程度の前傾にも対応する柔軟性も併せ持ち、その際、類機では弱点になりがちだったヘッドレストも前傾に見事に追従するのは特筆すべき点である。(これも一軸支柱のため?)。ただ、受注生産と輸送のため注文から発送までに3,4ヶ月要してしまうのが難点である。逆に言えば、在庫に左右される点が唯一の弱点だと言ってよいぐらいの完成度である。

候補

候補の一覧

タイプ名前価格メーカー保障座奥上下特徴
前傾アーロンチェア (フル装備)15万ハーマン12年×高級ワークチェアのシンボル、前傾の王道
後傾コンテッサ (ヘッドレスト)15万オカムラ3年日本製で高いCPと人気を誇る、後傾のデファクト?
万能OPEN UP (ハイバック)20万セダス3年×前傾から最大45℃の後傾まで最高の座り心地を提供

(※ 頭:ヘッドレスト、座奥:座奥調整、上下:座面上下調節)

てゆか、もう気持ちは既に、ジリリ、スッペシャルなんちゅう夏 OPEN UP でかっちょえーじゃん!なんだけどね♪ぴーちっちさん、これでいいよね?いいんだよね?

OPEN UP 個人輸入?

2ch の「OPEN UP スレ」では1が個人輸入に挑戦している。相手はドイツであり、幸い代理店では英語が通じるとは言え、非常に手間がかかることは間違いないのであるが、ヤマギワ等の日本代理店経由でオーダーすると3,4ヶ月必要なってしまう所が1ヶ月程度で可能になることと、個人で運送関係を頑張ることで費用を抑える、という2つのメリットがある。しかし、よくよく計算してみると、上記の OPEN UP 単体を購入する場合は、あまりコストは変化がないようだ。恐らく、革張りタイプだったり、work assistant (20万するオットマン)を一緒に買う場合に安くなるのだろう。

OPEN UP (ハイバック)の価格比較

ヤマギワ: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万使ってドイツに移住してあっちで仕事したい><。(椅子だけのために)

参考

本日のツッコミ(全12件) [ツッコミを入れる]

Before...

_ なかお [コクヨのAGATA/Aつかってます.ヘッドレストがいい感じです.]

_ mebius [うちの会社の椅子が全てアーロンチェアだと初めて気付きましたよ・・・]

_ 从 ’w’) [週末の試座リスト(予定) ・エルゴヒューマン ・ウィルクハーン ・リープ V2 ・コクヨのAGATA/A それ何て..]


2007-07-31

[Rails] 検定試験 〜初級〜

問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 のソースを必死に追ってたり。もうね、死にたい。熊井ちゃんの天空踵落としを食らって死にたい。

本日のツッコミ(全2件) [ツッコミを入れる]

_ nom [初級なので、僕にも分かったかも。でも、再帰だと無限にはループしないよね。。。]

_ 舞波 [嘘!そんなの嘘!だって、3桁はもう無限、ってりしゃこが言ってたし。マリオだって、時間制限あるのに無限1UPて言うし。..]


2008-07-31

[Game] ダビスタDS 凱旋門賞

アハハハハー号

アハハハハー号           牝

父 コンマンダーインチーフ
母 アハハハ

競走成績45戦30勝
獲得賞金30億6900万

主な獲得GI
桜花賞 ヴィクトリアマイル 天皇賞・春
安田記念 宝塚記念 エリザベス女王杯
マイルチャンピオンシップ 有馬記念
ジャパンカップ 凱旋門賞

一度は経営破綻に追い込まれた、まいは牧場。

  • ノーリセット
  • 調教もCPU任せ

という微妙なテンションのまま、苦節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

ウォーエンブレムとイディアルダーリンは所謂「面白い配合」。つまり、母父サンデーで、母母が面白配合。

これだけ活躍したのに、牝馬だから今回もサンデーの種付け権利はゲットならず。まだダービーも取ってないのに。というか、牝馬ばっかり生まれるので牡のクラシックはどれも取れてないや。

参考


2009-07-31

ダイエット

走れども 走れども
わが体重軽くならざり
じっと腹を見る
舞波 2009


サイト内検索 (by Google)

| 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

未来

コンタクト