Friday, July 10, 2009

pony += attachment files + TLS


I don't have any other servers, I mean real hardwares, apart from the server my web applications reside. However, I need to keep backup files of database dump or something precious safe from destructions. So I decide to send backup files to a gmail account.

pony makes easy to write a script sending mails, but it can't attach files nor use TLS transport.

Using Tmail, it's easy attaching some files to a mail. And Net::SMTP, included in ruby 1.8.7 or latter, can use TLS/SSL transport without hustle (for ruby 1.8.6 or earlier, there is the smtp_tls gem). So I forked and patched pony.

I sent a pull request to the author of pony, but for now, you can use my fork:

Web アプリケーションの DB のバックアップをとりたいけど、サーバーが1台しかないのでバックアップファイルをメールに添付して gmail のアカウントに送ることにしました。

pony を使うと簡単に送信することができます。 Pony はSMTP 経由で送信もできるんですけど、今回必要なファイル添付と gmail の SMTP サーバーが要求する TLS/SSL 通信も対応してません。

ファイル添付は TMail で簡単にできるし、TLS/SSL も ruby 1.8.7 以降の Net::SMTP なら実装され、 1.8.6 以前でも smtp_tls gem をインストールすることにより利用できるので、それらに対応できるよう Pony を fork して変更してみました。

Pull リクエストを pony の作者に送ったんですが、マージしてくれるかわからないのでこれを使って下さい。



$ gem sources -a http://gems.github.com
$ sudo gem install hiroshi-pony



Here is a sample:

メールを送るスクリプトはこんな感じ




require "rubygems"
require "pony"
Pony.mail(
:to => "example@gmail.com",
:subject => "DB backup",
:via => :smtp,
:smtp => {
:host => "smtp.gmail.com",
:port => "587",
:auth => :plain,
:user => "example",
:password => "********",
:tls => true
},
:attachments => {"database_name.sql.gz" => `pg_dump database_name | gzip`}
)

Monday, June 15, 2009

annotates where partial code come from

Rails アプリケーションの view で partial を多用しているときに、どこからどこまでがどの partial でレンダリングされているのか知りたいことがあるのでプラグイン partial_annotation というものを作ってみました。


<%= render :partial => "/foo" %>


がレンダリングされるとこうなります。


<!-- begin partial "_foo.html.erb" -->
content of the partial....
<!-- end partial "_foo.html.erb" -->


ちなみに、development 以外では無効になるようにしてます

Friday, June 5, 2009

Safari hanging up due to Dropbox contextual menu plugin

最近、気がついたら、 Safari の Contextual Menu を開こうとするとしばらくハングするようになったので犯人探しをしてみました。
Dropbox にバグ報告をしようと思って英語で書いたものです。

Recently I got Safari hanging up when I try to pop up contextual menu in Safari.
So I sampled with Activity monitor.app when Safari got hang.

...
1724 TContextualMenuPlugin::LoadCMPluginsFromCFPlugin(FSRef const&, __CFArray*)
1724 DropboxPluginFactory
1724 AllocDropboxPluginType
1724 reconnect
1724 connect$NOCANCEL$UNIX2003
1724 connect$NOCANCEL$UNIX2003

I found a suspect.

~/Library/Contextual Menu Items/DropboxPlugin.plugin


After removing DropboxPlugin.plugin, Safari's contextual menu is popped up as smoothly as ever.
However, every time Dropbox.app is started, it places the plugin. As I'm a programmer I can't bear torment of removing the plugin every boot time of Mac by hand. So I renamed the plugin:

$ mv /Applications/Dropbox.app/Contents/Resources/DropboxPlugin.plugin \
/Applications/Dropbox.app/Contents/Resources/DropboxPlugin.disabled.plugin


I'v used Dropbox for most half a year. Until this problem happened, it works great. I couldn't remind when I upgraded Dropbox app recently, so I suppose other changes of mac caused this problem.

Mac OS X 10.5.7
Safari 3.2.3 (5525.28.3)
Dropbox.app 0.6.402 or 0.6.507

Monday, May 4, 2009

Rechargeable Batteries

Lifehacker の記事のリンクから、 Coding Horror: Adventures in Rechargeable Batteries を読んで、乾電池型充電池について勉強になりました。というか、おすすめの充電器が欲しくなった。

箇条書きに要約すると、

  • アンペア時(mAh) の大きさに踊らされるな、エネループ(または同等品)を買え。ニッカド(Ni-Cd)電池の10-20%、(従来の)ニッケル水素(Ni-MH)電池の20-30%の容量が一ヶ月で自己放電する。(eneloop - wikipedia によると15%/年なのでおよそ1.4%/月の自己放電)

  • 低電流で充電すると充電に時間はかかるが、電池を痛めない。高電流で急速充電すると、電池の寿命が縮まる。

  • 安い充電器(とくに急速充電タイプ)は電流や充電済みかどうかのチェックをしないので電池を痛める。(ほとんどの電池とセット売りのものはゴミ)

  • La Crosse Technology BC-900 AlphaPower battery chargerを買え。充電電流を設定できたり、現在の容量(mAh)を確認できる。


まあ、もっと奥が深いのでしょうが、そんなに深追いはしたくないので。

ちなみに、 BC-900 の安価版 BC-700 は充電電流を高く設定できないだけで他の機能は同じ、余計なケースや充電池が付いていなので、それを amazon.com で注文しようとしたら、米国内のみ出荷可能でした。

元記事にあるように米国より日本のほうが乾電池型充電池は出回っているようなのですが、日本では電池メーカーの専用充電器でないものはほとんどみあたりませんね(ミニ四駆向けの高価な特殊なやつは除外)。TECHNO CORE という会社が作っていたみたいですが、今は販売していないようですし、液晶で容量などを表示できるやつが欲しい。

ほとんど、受け売りなので間違いなどの指摘は大歓迎です。

Saturday, April 18, 2009

9 life lessons

ちょっと普通のブログみたいなこと書いてみます。

よく知らないんですけど、有名なクライマーの9つの教訓は他の分野でも当てはまるいい話のようでした(ちゃんと聴き取れてない)。
Matthew Childs: Hang in there! 9 life lessons from rock climbing

1. Don't let go - 手を離すな
2. Hesitation is bad - ためらいは良くない
3. Have a plan - 無計画ではだめだ
4. The move is the end - 進む限り辿り着く
5. Know how to rest - 休む方法を知る
6. Fear sucks - 恐れは人を無能にする
7. Opposites is good - 対称的な力は良い
8. Strength ≠ success - 力だけでは成功しない (バランンスが重要)
9. Know how to let go - 撤退(失敗)する方法を知る

適当に意訳してみましたが、わかりにくいのは 7 の対称性についてで、岩壁の割れ目に体が入る場合は突っ張るようにして登り、逆に指先しか入らない割れ目では自動ドアをこじ開けるようにして体を支えるので、その左右対称な力のことを言っているようです。

1, 9 は矛盾するように見えますが、状況によってはって感じですよね。変な例ですけど、満員電車の車内に自力で立とうとしない奴っていますよね。ドアが閉まったら、完全脱力で他人に寄りかかるのではなく人として自力で立とうとする努力が欲しいと思います。逆にドアが空いたら、無理に社内に留まろうとせずに流れに身を任せる感じで一旦ホームに出る潔さ。

6 もアレですね、電車がホームに到着したときに降りる人がまだいるのに乗ろうとする奴。利己的に座りたいからという人が大半かとは思うのですが、乗り遅れてしまうのではないかという恐怖を克服できない人もいるんじゃないかなと思います。

ルールにより制約が生じる大半のスポーツと違い、環境と肉体が制約となるフリークライミングならではの原理に近い教訓だと思いました。

Sunday, April 12, 2009

using SyntaxHighlighter

SyntaxHighlighterを試してみました。


class FooController < ApplicationController
before_filter :set_foo

# 詳細
def show
end
end

EMOBILE H11LC with Mac - a review

イーモバイルの小型通話+データ通信端末 H11LC を買ってしまいました。
Mac につないで実際に利用した場合のレビュー記事が見つからなかったのでちょっと書いてみます。

まだ一週間も経っていませんが、いまのところは、まあ、いいんじゃないですかね。

使う前は、一度何かをインストールすればあとは、USBで接続したらもうネットに接続されると勝手に思い込んでいましたが、実際は、
1. USBで接続すると、"Modem" という名のボリュームがマウントされる
2. そのボリュームに含まれる "H11LC_utility_mac_V1_00.app" または /Application にインストールされる "EMOBILE H11LC Utility.app" を起動する
3. その Utility で接続をクリックするとモデムで発信してネットに接続する
最低でも3アクション必要で、(自分の環境では) utility の起動に数秒かかります。

勝手に接続すると、接続料金が知らずに加算されていたりしそうなので、考えてみればあり得ないですね。
でも、USBに挿したらメニューバーの常駐アプリケーションの表示が変わり、メニューから「接続」を選択できたりするといいのに。

あとは文章にするのが面倒なので箇条書きに列挙します。

他に気づいた点を列挙すると、
* microSD のボリュームも utility 起動にちょっと遅れてマウントされるので USBメモリと同じ感覚では使えない
* 有機ELだからなのか?ディスプレイは日中の太陽光の下では非常に見にくい
* なぜか試供品扱いのストラップになる USBケーブル2 はかっこ悪いが便利なので外せない

音楽プレイヤーに関しては、(音質を気にするなら使わない前提で)
* utf-8 の日本語ファイル名は表示できている
* スペック通り mp3 以外は再生できないので m4a などは変換する必要あり
* mp3 の(ID3などの)タグ情報は参照されないのでファイル名でのみ識別
* mac 接続してユーティリティーを起動すると音楽再生は停止する
* イヤホンを接続するためには黒くダサイ専用イヤホンマイクを利用するか、ありえないデザインと大きさの黒いアダプタを利用する必要がある (pdfマニュアル p21 参照) => 他の携帯向けの変換アダプタが使えるか?
* 背面スピーカーからの音量は以外と大きいのでポケットに入れて、フロ掃除したりするときのBGMには使えるかも
* プレイリストの編集はメモリカードでなく本体のメモリ?に保存され、本体からでしか操作できない
現実的にはmp3を厳選するか、たくさん入れて全曲プレイリストのランダム再生?

Mac と他のシステムとファイル共有したりするときのいつもの問題だが、
* Finder を利用してコピーするとリソースフォークが ._ファイル名 として保存されるてしまい、音楽再生時に ._ファイル名.mp3 を無視してくれないので、いちいち「ファイルが壊れています」と表示されウザイ
* Spotlight 環境設定で除外しないと Spotlight の index が作成されて容量がムダになる (._ ファイルと同様、 Mac OS X 側の問題)

プログラマの視点からのどうでもいいこととしては、
* Utility はいちおう Cocoa アプリケーションのため、連絡先編集などのテキスト入力で emacs binding は使えるが、コスト削減のためか Windows 版と同じ設計(デザイン)で非常に格好悪い(スプラッシュ画面が出るようなアプリケーションに共通の格好悪さがある)。

あとは、参考資料
* イーモバイルのダウンロードページに H11LC の マニュアル(pdf)があります。
* ASCII.jp でのレビュー
* 小暮祐一という方のブログ記事
* みんぽす (先のリンクに複数のレビューあり)
などを参考にしてください。