Exif規格に7年ぶりの新バージョンExif 2.3

CIPA、「Exif 2.3」「DCF 2.0」を公開 

http://dc.watch.impress.co.jp/docs/news/20100426_364027.html

    

これは、Exif解析プログラムの作者としてはとてもありがたいバージョンアップになりそうです。
レンズ情報などは以前から各社独自仕様で、PhotoXPでは頑張ってそれぞれに対応したプログラムを用意して解析していたのですが、意外なところではISO感度なんかも各社別々の場所に記録されおり面倒な解析が必要だったのです。
Exif規格自体ここ数年全く更新されてなかったので、デジカメ業界団体にいったい何があったのかと心配してましたが、とりあえず現状追認でも仕様がメンテされてるようで安心しました。

ロードバイク始めました

自分の中で数年ぶりの健康ブーム到来&いいかげん運動でもしないと体重がやばい?!ということで、最近流行ってるらしいロードバイクを始めることにしました。

はじめは最初からロードバイクに乗るのは敷居が高そうだし、とりあえずクロスバイクにしようかなと考えてたのですが、いざお店に行って相談してるうちに勧められたのがこのGIANT DEFY 3
giant-defy-3.jpg
さすが世界最大の自転車メーカーGIANT製、実売7万円台と予想してたよりかなりリーズナブルだったので、いきなりロードバイクから始めることにしました。(マザーボードと自転車は台湾製にしといて間違いない?!)
というわけで、このブログも今後はデジカメとプログラミングと自転車ダイエットがメインになるかもしれません?!
自転車に詳しい人が居たら色々教えてください(^^)

ブログのコメントをDISQUSに移行してみた

このブログも、長いこと放置してる間にSPAMコメントやトラックバックだらけになっていたので、コメント欄を外部サーバで集中管理できるDISQUSというシステムに移行してみました。

コメント内容についてはWeb APIを使って、MT形式からDISQUSにインポートするRubyスクリプトを書いて対応。
スクリプトの内容についても、後ほど紹介します。

戦場より帰還

ここ半年ばかり、戦場と形容されるプロジェクトに派遣されていたのですが、ようやく戦時状態宣言解除されそうな今日この頃。

いろんな方面で不義理をしまくっていた気がするので、徐々に課外活動にも復帰したいと思います。

価格.comの写真共有サイト「PHOTOHITO」はレンズ別検索機能付き

photohito.gif

価格.comが新しく始めた写真共有サイト「PHOTOHITO」は、レンズメーカー別絞込み機能搭載だそうです。

Exifのレンズ情報解析は同一焦点距離の純正レンズとレンズメーカー製とでレンズIDが重複してるようなケースが非常に多いので、どうやってるのか気になって試してみた所、メーカー名や機種名は自動認識されるものの、レンズ名に関しては一度投稿した後「情報編集」画面で手動で入力するようになってました。(でも、なぜか今はプルダウンに登録レンズがありませんと出て入力できない・・・)
全自動は無理だとしても、PhotoXPのexifcodecライブラリ(GPLで公開中)を使えば半自動入力くらいにはなると思うので、ぜひ実現していただきたい:-) >価格.comの中の人

参考:


自分もそろそろPHPについて一言いっとくか

各所*1でPHPがネタになってるので、ここらで自分も一言いっとく事にする。

というのも、ここ最近必要に迫られてPHPのコードばかり(普段はJavaかRubyが多い)書いてた事もあって、PHPが叩かれてる理由は非常によく分かるんですね。

自分的には、PHP5のオブジェクト指向関係での微妙なJavaからのパクリ具合とか、Rubyより新しく出てきた言語にもかかわらず脈絡なく整理されてない標準ライブラリ関数とか言語仕様とか・・・
突っ込みどころを挙げるときりがありません。

だがしかしです、PHP5前夜の2003年、たまたまオリジナルのPHP作者であるRasmus Lerdorfと話す機会にに恵まれ、本人から聞いた所だと以下のような感触でした。

  • PHPはあくまでテンプレートエンジンだよ。

 これは、まつもとさんもRasmusがPHPは言語じゃない(ツールだ)と言ってたと日記に書いてますね。元々はPHP/FI(Personal Home Page/Form Interpreter)と呼ばれてた事からもみてとれます。

  • 大規模なシステムを作るにはC++とかJavaとかStrongly Typedな言語を使うべき。

これも、PHP作るくらいの人なら、もっと大規模なシステムならC++なり何なりで作って、PHPエクステンションにすればいいやといった感覚だと思われます。

Rubyのまつもとゆきひろ、PerlのLally Wallといった人々と比べると、PHPのRasmus Lerdorf はあまりBlogや公演等で語る事が少ないのか、PHPを作った動機とかスタンスについてあまり理解されてない気がするのですが、驚き最小の法則をモットーにシンプルで美しい記述が出来るオブジェクト指向言語を目指したRubyと、最初からApacheモジュールとして実装して、それまでのCGIスクリプトに比べ圧倒的に軽量な動作をするテンプレート言語を目指したPHPとでは、その出自の違いから、PHPの言語仕様が微妙かつ場当たり的になっちゃってるのは、まあ無理もないといった感じでありましょう。

それでも、Ruby以上の速度で世の中に受け入れられて行ったのは、Apacheモジュールに特化した言語という目の付け所の良さ、MySQL等DB接続ライブラリのサポートの良さ、Zend以降の高速化等当時必要とされていた利点が多々あったからであって、大規模システムや複雑なクラスライブラリをPHP言語だけで実装するという事が、そもそもの不幸の始まりなのではと思えてなりません。

その他、印象に残った話題としては、

  • 生まれはグリーンランド(デンマーク領だって初めて知った)
  • 日本のプログラマーの年収を聞いてびっくり!シリコンバレーのプログラマーは大卒初任給でも1000万くらいからスタート、シニアエンジニア級なら2000万以上も普通に居るよみたいな。。。
  • 前の職場はLinuxCare、その前はIBMに勤めてたけどIBMみたいな研究寄りカルチャーの会社ではPHPを作った事とかは全然評価されなくてショボーン、Yahoo!に入ってからはPHPを活用してもらえて嬉しい。

ってな話をしてくれたのを記憶してます。

なにぶん5年前、酒の入った席で僕のつたない英語力で聞いた話なので正確性は保障できませんが、以上が2003年秋@六本木の忍者コスプレ居酒屋にてPHP作者から直接聞いた話でした。

各所:


「デジカメエキスパート検定」受験料無料キャンペーン中

digicam_banner0707.gif
掲示板で知ったのですが、デジタルカメラマガジンがやっているデジカメエキスパート検定1級~3級まで全ての受験料が年内はキャンペーン中で無料だそうです。(公認の証書は有料)

僕も昔3級を受けてみた事があるのですが、これを機会に1級に挑戦してみる予定。


部屋の温度・湿度に続いてアメダスのデータも活用

先日導入した温度・湿度計のデータに加えて、気象庁のサイトからアメダスのデータを取得するスクリプトamedas.rbを作ってみました。
出力はそのままrrdtool updateに食わせる形式になってます。
グラフはまだデータが溜まってないので、またのちほど。
次回は温湿度系ウィジェット(Vista/Yahoo!/iGoogle?)あたりに挑戦してみる予定です。

#! /usr/local/bin/ruby -Ks
# amedas.rb

require 'rubygems'
require 'hpricot'
require 'open-uri'

AMEDAS_URL = 'http://www.jma.go.jp/jp/amedas_h/today-44132.html' # Tokyo

def get_current_data(url)
doc = Hpricot(open(url))
(doc/'table#tbl_list').each do |table|
hour = temperature = humidity = nil
(table/'tr').each do |tr|
tda = tr/'td'
if /^\d+\.\d+$/ =~ tda[1].inner_text
hour = tda[0].inner_text.to_i
temperature = tda[1].inner_text.to_f
humidity = tda[7].inner_text.to_i
end
end
if hour
return [hour, temperature, humidity]
end
end
if /today/ =~ url
return get_current_data(url.gsub('today','yesterday'))
end
return nil
end

d = get_current_data(AMEDAS_URL)
if d
puts "N:#{d[1]}:#{d[2]}"
end

MT4にしてから新着記事がmixiで更新されない件

MovableType 4.0に移行した際にフィードの規格がAtom 0.3からAtom 1.0に変わったため、mixiの外部ブログ設定で認識されなくなっていたらしい。

今回はあえて、MT2の頃から使ってるRSS 1.0のテンプレートをコピーしてきて対応。

やり方は、MT4の管理画面から

  • メニューの「デザイン」→「テンプレート」を選択。
  • 「インデックステンプレートを作成」をクリック。
  • テンプレート名は「RSS 1.0」、テンプレートの種類は「RSS(rss)」、出力ファイル名は「index.rdf」内容は以下の通り。
<?xml version="1.0" encoding="<$MTPublishCharset$>"?>

<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:admin="http://webns.net/mvcb/"
xmlns:cc="http://web.resource.org/cc/"
xmlns="http://purl.org/rss/1.0/">

<channel rdf:about="<$MTBlogURL$>">
<title><$MTBlogName encode_xml="1"$></title>
<link><$MTBlogURL$></link>
<description><$MTBlogDescription encode_xml="1"$></description>
<dc:language>ja</dc:language>
<dc:creator></dc:creator>
<dc:date><MTEntries lastn="1"><$MTEntryDate format="%Y-%m-%dT%H:%M:%S" language="en"$><$MTBlogTimezone$></MTEntries></dc:date>
<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=<$MTVersion$>" />
<MTBlogIfCCLicense>
<cc:license rdf:resource="<$MTBlogCCLicenseURL$>" />
</MTBlogIfCCLicense>

<items>
<rdf:Seq><MTEntries lastn="15">
<rdf:li rdf:resource="<$MTEntryPermalink encode_xml="1"$>" />
</MTEntries></rdf:Seq>
</items>

</channel>

<MTEntries lastn="15">
<item rdf:about="<$MTEntryPermalink encode_xml="1"$>">
<title><$MTEntryTitle encode_xml="1"$></title>
<link><$MTEntryPermalink encode_xml="1"$></link>
<description><$MTEntryExcerpt encode_xml="1"$></description>
<dc:subject><$MTEntryCategory encode_xml="1"$></dc:subject>
<dc:creator><$MTEntryAuthor encode_xml="1"$></dc:creator>
<dc:date><$MTEntryDate format="%Y-%m-%dT%H:%M:%S" language="en"$><$MTBlogTimezone$></dc:date>
</item>
</MTEntries>

</rdf:RDF>

  • 保存したら、「テンプレートモジュール」の「ヘッダー」を開いて編集、既存のRSSやAtomの行の前に以下の1行を追加。

    <link rel="alternate" type="application/rss+xml" title="RSS1.0" href="<$MTLink template="rss 1.0"$>" />

再構築したら完了。


乾燥の気になる季節、部屋に湿度計を導入

USBRH
湿度計といいますか、湿度センサーですね。はい。

どうも、最近風邪をひくと長引く傾向にあったんですが、今年になって耳鼻咽喉科で見てもらった所、風邪は治ってもノドを痛めてるんですよと言われ、なるほど納得。 どうりて咳だけ残るわけだ・・・

それ以来、喉をいたわり部屋の湿度にも気を使っちゃったりしてるわけですが、実際のところ普段の部屋の湿度がどれくらいで、どの程度乾燥すると調子が悪くなるのか、一応湿度計を置いてはいるものの、いまひとつ良く分からない・・・
というわけで、普段の部屋の温度と湿度を継続的に計測してみようと思い立ったというわけです。(計測重要!例: WiiFit)

ちなみに、このUSB温度・湿度計USBRHはストロベリーリナックスというサイトで¥3,980で販売されています。
付属ソフトはWindows用のみなのですが、すでにUNIX系OSでデータを取得するプログラムを開発して公開されている方が居ました。

うちで24時間稼動してるマシンはLinuxサーバのみなので、今回はUSBRH driver for Linuxを使ってみる事にします。
まず、デバイスドライバのコンパイルに必要なkernel-develパッケージをインストールします。(うちのFedora Core 6の例)
また、USB機器の一覧を表示するlsusb等が使えるようにusbutilsパッケージも入れておきます。

$ sudo yum install usbutils
$ sudo yum install kernel-devel

その後、USBRH driver for Linuxのページの説明通りデバイスドライバをインストールし、USBにセンサーモジュールを接続すれば

$ cat /proc/usbrh/0/status
t:24.22 h:51.20

とする事で温度と湿度が取得できるようになります。

ここまで出来たら、次はグラフ化。
データの記録とグラフ化には、ネットワーク機器やサーバ監視の定番、RRDToolを使ってみます。

$ sudo yum install rrdtool

今回は5分(300秒)おきにデータ取得、600秒データが取得できないとエラー、300秒おきの平均値を1200個(100時間)、300秒*12=1時間おきの最小値・最大値・平均値を30000個(3年半くらい?)としてデータファイルを作成。

$ rrdtool create /var/www/html/usbrh.rrd \
--step 300 \
DS:temperature:GAUGE:600:-10:90 \
DS:humidity:GAUGE:600:0:100 \
RRA:AVERAGE:0.5:1:1200 \
RRA:MIN:0.5:12:30000 \
RRA:MAX:0.5:12:30000 \
RRA:AVERAGE:0.5:12:30000

次に以下のようなスクリプトを作成してデータを更新、同時にグラフ生成を行います。

#! /bin/bash
# usbrh.sh
LANG=C
DIR=/var/www/html
rrdtool update $DIR/usbrh.rrd `cat /proc/usbrh/0/status | awk -F" |:" '{print "N:"$2":"$4}'`
rrdtool graph $DIR/usbrh.png \
--width 500 \
--height 120 \
--imgformat PNG \
--vertical-label "C / %RH" \
DEF:temperature=$DIR/usbrh.rrd:temperature:AVERAGE \
LINE2:temperature#FF3000:"temperature[C]" \
GPRINT:temperature:LAST:%.1lf \
DEF:humidity=$DIR/usbrh.rrd:humidity:AVERAGE \
LINE2:humidity#307FFF:"humidity[%RH]" \
GPRINT:humidity:LAST:%.1lf \
> /dev/null

最後にcrontabに以下の1行を追加し、5分おきにデータを取るよう設定。

*/5 * * * *     /home/foobar/usbrh.sh

グラフ完成。こんな感じになります。

usbrh.png
 
これで、風邪の予防(に向けたデータ収集)もばっちり?!ですね。