2010-01-24

風呂桶一杯の水道水の脱塩素に必要なビタミンCの量

適当に検索すると、お風呂の脱塩素にはビタミンC粉末を1グラムでOKとあるけど、とりあえず自分でも計算してみました。

計算
日本国の法律で決まっている最低限の塩素濃度すなわち次亜塩素酸ナトリウム濃度は、0.1ppmとあり、200Lの水で考えると、次亜塩素酸ナトリウムの比重を気にしないで計算すれば、0.02g また、次亜塩素酸ナトリウムの式量は77.44

ビタミンCすなわちL-アスコルビン酸ナトリウムの式量は、198.11で、1分子で電子3個分還元できるとのことなので、必要なビタミンCの質量は、(0.02 / 77.44) / 3 * 198.11 = 0.017g

考察
高度浄水処理施設のない給水地域は夏場には結構塩素濃度を上げるみたいですが、ビタミンC粉末は意外と安いので、水200LあたりビタミンCを1グラムほど入れておけば、6ppmくらいまで対応出来るようで一安心です。比重が水に近い普通の粉末1グラムは、小さじ1/5杯です。

備考
ビタミンC粉末はあまり地上のお店ではお手頃な価格で売られていない様ですが、楽天市場などで探したら売っています。
また、お湯を張る前に湯船の底にまいておいた方が、湯張中に蒸気になって鼻がつんとするのを防げます。

2010-01-22

Twitter の Streaming API における日時表現の解析について

目的

DateTime が便利なので、DateTime::Format::* で、Streaming API で流れてくる、こういう表記 "Fri Jan 22 13:52:17 +0000 2010" を上手くパースしたい。
この表記方法は、古き良き時代を感じさせるC言語の ctime() に由来するものであるとのこと。日付の表記に関するノート

現状

DateTime::Format::HTTP, DateTime::Format::Mail は失敗。
ただし、+0000をUTCとかGMTに置換すればDateTime::Format::HTTPでOK
DateTime::Format::DateParse は成功。これを使うべき。
DateTime::Format::Strptime で自作しても可 (DIY派専用)

コード


use DateTime::Format::DateParse;
my $dt = DateTime::Format::DateParse->parse_datetime('Fri Jan 22 13:52:17 +0000 2010');

use DateTime::Format::Strptime;
my $formatter = DateTime::Format::Strptime->new(
    pattern => '%a %b %d %T %z %Y',
    locale => 'en_US',
);
my $dt = $formatter->parse_datetime('Fri Jan 22 13:52:17 +0000 2010');

2010-01-16

[php] 1年後まで有効とする Expires ヘッダを出力する

説明

コピペで世の中に出回っているコードはあまり格好良くないので、改良してみました。パフォーマンス的にはイマイチでも、見た目重視ということにしました。

このようなヘッダは、クライアントにコンテンツを積極的にキャッシュさせるため、期限切れまで全く確認のリクエストなしで使われます。サーバーからコンテンツが更新されたことを通知する方法はないのでアドレスを変化させましょう。

コード


header('Expires: ' . gmdate('D, d M Y H:i:s T', strtotime('+1 year')));

出力例

Expires: Sat, 15 Jan 2011 15:02:20 GMT

2010-01-15

jQuery 1.4 の互換性について

この記事について


jQueryチームのみなさん、リリースおめでとうございます。毎日とても役に立っています。

公式サイトを見に行くと、パフォーマンス改善が素晴らしいとありますが、あまりパフォーマンスで困っている人はいないと思うので、一番欲しい情報はversion 1.3から乗り換える際の互換性についてではないでしょうか。

後方互換性を失う変更の一部


$.ajaxで、複数の値を持つパラメータ(data:{a:[1,2,3]} など)のシリアライズ方法の変更。
$() (引数なし) を$(document)と解釈するのを止めた。
addは単なるaddではなく、同じものが複数入らないように、mergeするようになった。
$.ajaxで、dataType無指定の時の自動判断に、Content-Typeを尊重するコードが追加された。

自分が困ったこと


jQuery.ajaxで、dataType無指定の自動判断のまま1.3.2までなんとか動いていたところが、Content-Type: text/javascriptのJSONを受け取っていたため、1.4からIE8でセミコロンがありませんという変なエラーが出るようになった。

対策:dataType: "json"とする。また、Content-Type: application/jsonで吐き出すようにする。詳しくは、ソースコードを"httpData:"で検索

リンク


Backwards-Incompatible Changes
Version 1.4 - jQuery API 新機能と変更点についての公式ドキュメント
14 Days of jQuery リリース記念ブログ。

[perl] AnyEvent::Handle を使ってみて気づいたこと

AnyEvent::Handle を使って困ったことや気づいたことについて。

on_read や push_read していない場合など、read watcher が止まっている時は、クライアント切断時に on_error や on_eof が即座には呼ばれず、push_write した時になる。さらに、push_write しなければ、ずっとエラーを検出できない。対策: あらかじめ手動で start_read しておく。

AnyEvent::Handle 内に独自の wbuf (write buffer), rbuf (read buffer) を持っているので、いったん使い始めたら、途中で使うのをやめる時には注意が必要。

push_shutdown は on_drain を黙って上書きする。on_read と push_read は別々に存在できて、push_read したキューがなくなったら on_read になるのにちょっと困る。内部に read queue のような write queue が存在しないことを理解すれば仕方ないと分かる。

2010-01-10

[windows] 付属の nslookup をもっと活用してみる

現状
Windowsに付属している唯一のDNSトラブルシューティングツールnslookup.exeは、ドキュメントが不足しているせいで、本来あるべき姿に比べてあまりにも活用されていない状況です。

この記事では、いちいちうざったい対話的インターフェースじゃなくて、コマンドラインインターフェイスの方について使用例を書きます。

基本編
8.8.8.8はGoogleの提供するDNSサーバーなので、必要に応じてISPのDNSサーバーや、DNSコンテンツサーバー(権威サーバー)などに読み替えてください。
nslookup example.com
サーバーを指定しなければ、既定のDNSサーバーに問い合わせをする。
nslookup example.com 8.8.8.8
DNSサーバーをGoogle Public DNS: 8.8.8.8に指定する。デフォルトではAレコードを取得。
nslookup -type=ns example.com 8.8.8.8
必要に応じて-typeで指定する。
nslookup -type=mx example.com 8.8.8.8
MXレコードを確認してメールの配信先を確認する。
nslookup -type=soa example.com 8.8.8.8
SOAシリアルできちんと最新版になっているかを確認する。
nslookup -type=txt example.com 8.8.8.8
TXTレコードを引いて迷惑メール対策用のSPF認証レコードなどを調べる。

応用編
nslookup -debug example.com 8.8.8.8
-debugを付けると詳細情報を表示。TTLなどが分かる。一つ目のGot answerは関係のない逆引きクエリについてなので注意。
nslookup -timeout=10 -type=txt porttest.dns-oarc.net
DNS-OARCのソースポートのランダム性チェックは標準のタイムアウト2秒だと間に合わないので少し延長する。
nslookup -type=ns example.com a.root-servers.net
nslookup -type=ns example.com a.gtld-servers.net
Rootサーバーから手動で再帰的問い合わせをして、委譲状況を確認する。
nslookup -type=txt twitter.wp.dg.cx
WikipediaのDNSインターフェース(笑)で、"twitter" について調べる。

備考
-typeは-qでもOK