本日より営業に新人さんが入社。ちょっと話した感じだとかなりしっかりしてそうだ。戦力になりそうな予感。
あああああ いいい ううう ええええ
というのを、
┌─────┬────┐ │あああああ│いいい │ ├─────┼────┤ │ううう │ええええ│ └─────┴────┘
にするルーチンを PHP で作った。メールを書くときに微妙に便利なハズ。。。
タ、タックルされてー。
というわけで、tDiary.Net 全体で Google AdSense が正式スタートとなりました。スタートまでの経緯や使い方などの詳しい内容は「Google AdSenseを始めます」をお読み下さい。
リンク先と繰り返しになりますが「強制ではありません」。気が向いた場合のみ表示して頂ければ結構です。
噂の新型 CLIE、PEG-TH55 が発表された! 39800円だよ、安いよ!
、、、と思ったら、Bluetooth の文字がどこにもないぞ!なんだよ、どうなってるんだよ!世の中には無線 LAN のアクセスポイントがそこらにあるとは限らないだろう! こんなんだから、日本で Bluetooth 搭載ケータイが普及しないんだよ。PDA とケータイと両方のプロダクトを抱えてるんだから、「ウチが Bluetooth 普及させたるわい!」ってな意気込みで組み込まんでどうするんだ?>ソニー
何かを検索していたら、bliki_ja 内の「ドメインロジックとSQL」という記事にたどり着いたのだが、それ以外にも面白そうな記事がいっぱい。。。とは言え、全てが理解できる訳じゃないので、チマチマと読んでみよう。
関心空間のベースとなっている PHP ライブラリが公開。勉強させてもらうしか!
そういえば、27年前の今日、初めて入院したのだった。節分というイベントの日だったので、病院の食事もちょっとだけリッチだった記憶が。
もっとも固形物を与えられたのはその日だけで、翌日からは点滴で生き長らえる生活になり、食事の時間に出てきたのはおも湯。でも、味のないおも湯は子供時代の僕にとっては苦痛以外の何ものでもなく、ほとんど飲めずに残していた。たまに出るオレンジジュースのみが楽しみだったなぁ。
当初はクスリを飲むのも辛くて苦労していたのだけど「これを飲まないと死んじゃうよ」と脅されてからは飲めるようになった。
その時を思い出すと、今の体調が悪くとも、食い物が好き勝手に食えるだけマシというものか。
▽ スズキシゲヲ [私も泣けました。。。 「お疲れさま」]
愛用していた5本指ソックスに穴が空いてしまったので、楽天で検索したところ「靴下メーカーの店レモコロ」で28〜30cmの5本指ソックスが売っていたので買ってみた。あんまりこのサイズを扱っている店は無いので、選択肢は少なかったのだけど。
商品が今日届いたのだが、買ったものとは別に1足入っていた。
一緒に入っていたメッセージカードには「婦人物ですがプレゼントです」と。こういった心遣いは嬉しいね。
ただ、問題は、これを渡す相手がオレにはいないってことだけど(笑)
なぜならWiiがやってきたから。結構部屋が広くなった気がするよ(笑)
で、遊んでみた感想はというと、、、面白い。Wiiリモコンでの操作が予想以上に楽しい。この感覚は今までのTVゲームとは違うねぇ。
ソフトは「Wii Sports」と「エレビッツ」で遊んでいる。「Wii Sports」はボウリングとボクシングが楽しい。ボウリングなんて、本物のプレイ感に結構近いような気がする。ボクシングは実際にやったことはないので、本物感は分からないけど、ウェービングで避けた後にパンチが決まるゲーム感は爽快だ。これらは「スポーツゲーム」なのでかなり単純化されているけど、そのうち「スポーツシミュレータ」みたいなものも出てきても良いのかも。Wiiでプレイするとリアルなスポーツもうまくなる、とかってコンセプトで。
もう一方の「エレビッツ」もWiiリモコンとヌンチャクをうまく使って、独特の操作感を味わえる。リモコンで画面内のモノが掴めるのが楽しい。更に掴んでポイッと投げちゃったりもできるのが良いねぇ。ポイポイ投げてると、部屋の中がどんどんキタナクなってくる。まるでオレの部屋のようで親近感が(笑)
あと、エレビッツを集めると「ワット」が溜まって、そのワットで電化製品のスイッチを入れられるってのも、電化製品大好きなオレにはピッタリ。こちらでも何やら親近感がわいてくるなぁ。
Wiiではゲームキューブのソフトも動くはずなので、ソフトを探し出してきたのだが、コントローラが見当たらなかった。ゲームキューブ本体は見つかったんだけど。どこいっちゃったんでしょうねぇ、僕のコントローラ。。。
バーチャルコンソールでのレトロゲームにも使えるので、なんとか見つけ出さないとなぁ>コントローラ
昨日、出発前の天気予報では「曇りのち雨」だった気がするのだが、いつの間にか雪の予報。で、朝起きてみたらこの通り。
プントちゃんも真っ白け、、、かと思ったら、ボンネットの上の雪はあらかたなかった。勝手に落ちたのか、ホテルの人が落としてくれたのかは不明。絵的には、もっと雪だらけの方が面白かったのにな(笑)
本当は「大谷資料館」あたりに寄ってから帰るつもりだったんだけど、人生初めての雪道運転をしなきゃならないというプレッシャーもあって、真っすぐ帰る事にした。
鹿沼ICから東北道に入った訳だが、走行車線2本はほとんど雪が積もっておらず、割と普通に走れた。1回だけ、先行車を抜かそうとして、薄く雪が残っていた追い越し車線に入ったら、、、怖えぇぇぇ。滑るって訳じゃないけど、ハンドルが取られそうになってビビった。しかし、後戻りできない状況だったので、そのまま走り抜けた。あー、もう二度とあぁいう状態の高速道は走らないようにしよう。と、ビビりながらも走り続けてきた東北道も、結局佐野藤岡ICから先は雪のため通行止で、強制的に下ろされてしまった。
その後は下道でずっと来たのだけれど、板橋あたりで前の車に釣られて首都高に上がってしまった。そのまま本来なら通るはずの無い山手トンネルに入ってしまい、ちょっと遠回りになりながらなんとか帰り着いた。
初の雪道の感想としては、、、高速道はともかく、この位の雪なら幹線道路は割とフツーに走れるなって思った。一番大変だったのは自分トコの車庫入れ。10cmくらい雪が積もってて、バックギアに入れても全然動かず。結構アクセルを踏み込んだらやっと動くという状態に。いや、左右のクルマにぶつけずに入れられて良かった。これ、スタッドレスじゃなくノーマルタイヤだったら全然動かなかっただろうなぁ。
Swift Mailer の実装をつらつら眺めていたら、なんか DKIM を使ったメール送信ができそうだったので試してみた。
DKIM というのはメールの送信者認証技術のひとつで、公開鍵認証を使って、メール送信者のなりすましを防ぐもの。詳しい説明は詳しいところで確認をした方が間違いがないので、間違いがないように確認した方が良い。
今回のシナリオとしては、suzuki@example.com
から送信するメールに DKIM の署名を付けてみようというもの。言うまでもないと思うけど、example.com
は例示用のドメインなので、下記のやり方を実践する場合には、自分で所有しているドメインと読み替えが必要。
まず、公開鍵の作成用に opendkim-tools
パッケージをインストール。あ、OS は Debian wheezy で検証している。
% sudo apt-get install opendkim-tools
opendkim-tools
パッケージの中に opendkim-genkey
コマンドが入っており、これで秘密鍵と公開鍵が作成できる。さらに公開鍵は DNS に設定するフォーマットで作成してくれるので、だいぶお手軽。
-d domain
オプションでドメイン名を指定しておく。ただ、opendkim-genkey のマニュアルを見ると、現状では生成したファイルのコメントに使われるだけのようだ。
% opendkim-genkey -d example.com
実行すると2つのファイルができる。
% ls -1
default.private
default.txt
default.private
が秘密鍵のファイル。中身はこんな感じ。でも、秘密なので普通は公開しちゃダメなヤツ。これはダミーのヤツで、実利用はしていないもの。あと途中を省略しているので使えない。
% cat default.private
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDKawKkF6yEYxyrn+t8P0wF0Ez23UTI4KqM6BAdf1Xu3Bus7/+s
[snip]
TM7rqUwdWpGsjBwtTvy8MY+lsPriw81y5fKMynp2k+p7
-----END RSA PRIVATE KEY-----
もうひとつの default.txt
が DNS の TXT レコードに登録するフォーマットで書かれた公開鍵。
% cat default.txt
default._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0 [snip] IDAQAB" ;\
----- DKIM key default for example.com
この公開鍵は default._domainkey.example.com
の TXT レコードに設定する。example.com
の TXT レコードではないことに注意。
このサブドメイン default
の部分は、selector と呼ばれるところ。ひとつのドメインで複数の公開鍵を設定できるような規格になっている。今回は default という selector 名を使ったということ。
利用している DNS サーバへ default.txt
の記述をよしなに設定して、dig
コマンドなどで default._domainkey.example.com
の TXT レコードを引いて確認する。
オレが試したときは Route 53 を使ったのだけど、設定直後に dig
コマンドで検証しても最初は TXT レコードが返ってこなかった。Web インターフェイスで設定してから、全ての NS サーバへ反映されるまで、ちょっとだけタイムラグがあるのかもね。
% dig default._domainkey.example.com txt +noall +answer
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> default._domainkey.example.com txt +noall +answer
;; global options: +cmd
default._domainkey.example.com. 300 IN TXT "v=DKIM1\; k=rsa\; p=MIGfMA0 [snip] IDAQAB"
ここまでで DKIM の DNS 側の準備が終了。
次に Swift Mailer の準備。今回は Composer でインストールする。使った composer.json
の内容はこれだけ。現時点の Swift Mailer の最新版は 5.0.3 なんだけど、マイナーバージョンが上がった場合にも対応できるように "5.0.*" の表記にしている。
Composer の取得方法はマニュアルにまかせて、Swift Mailer をインストールする。
% ./composer.phar install
これで Swift Mailer の準備は完了。
ようやく PHP のコード。
まずは Swift Mailer を使って、通常のメール送信を行なうコード。メールの送信先は、下記のコードの YOUR_GMAIL_ADDRESS
の部分で指定している。実際の検証時には自分の Gmail アドレスに置き換える。
これを元に DKIM の署名付きメールを送信するように書き換えてみるとこうなった。数行の追加・修正程度。
これを実行し、Gmail で受信したメールのソースを見てみると、メールヘッダに DKIM-Signature
があるのが分かる。
DKIM-Signature: v=1; a=rsa-sha1; bh=bAOD/kGTEevQnIsv2dOuX+gmZhw=;
d=example.com; h=Message-ID: Date: Subject: From: To: MIME-Version:
Content-Type: Content-Transfer-Encoding; i=@example.com; s=default;
t=1391351009;
b=OuC8oU789v943Qkz2GzZ+YP7RFCVhRZkf+rJtR+YUAgoes3FQOvp+3/hE3hyAzDXSs0kBL5fC
kCtFLabd+jAunzL0p8gJ07xYHnTgK0g87zEBVHiolrqr/UXjMYoR2pNl1VdOFy6mBdYbUz4Q0
7vra/FoykWEmMGTaFUnAKUo1c=
これが DKIM の署名。v=1
だとか d=example.com
だとか、各々のパラメータの意味は「送信ドメイン認証技術導入マニュアル第2版」を読むと分かると思う。
更にメールヘッダ内には、Authentication-Results
ヘッダも存在する。
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of suzuki@example.com designates nnn.nnn.nnn.nnn \
as permitted sender) smtp.mail=suzuki@example.com;
dkim=pass header.i=@example.com
こいつは受信サーバによる検証結果を格納するヘッダで、dkim=pass
というのが「DKIM によるチェックで送信者(送信サーバ)にパスしている(問題がない)」という意味になっている。
spf=pass
というのもあるが、これは別途 SPF による送信者(送信サーバ)チェックにパスしている結果を表している。
SPF と DKIM は、双方とも「送信者認証技術」にカテゴライズされるんだけど、それぞれ得意・不得意があるので、「可能ならば両方同時に利用してメール送信した方が良い」というのが、迷惑メール対策推進協議会の意見だったはず。
また、DMARC でもその方針のようだ(こっちは詳しくない)。
元々 Swift Mailer を使っているプロダクトだったら、今までのコードに数行の追加・修正を行なう程度で DKIM 送信ができてしまうので、使わない手は無いんじゃないかな、と思う。
ただし、1通の送信にかかるコストは高くなる(署名する分が重い)のと、DNS に負荷がかかる(受信側サーバからの問い合わせが増える)ので、プログラムだけではなく、システム全体とのバランスは考慮する必要がある。
その辺の負荷が問題なさそうなら、DKIM 署名付きで送信した方が、受信側で spam 判定されにくくなるかもしれない。
▽ Marty Hermsen [Suzuki Thanks for this great example of integration DKIM i..]
▽ あくび [気晴らしに…にうけてしまった :)]
▽ すずき [罫線の太さとか桁数を指定してのセンタリング機能とかも付けてみたにょ。]
▽ あくび [コードきぼー(メール本文にハリツケていただければ)]
▽ すずき [えーと、いろいろあるので、アレなんですよ。以下メールにて。]