コラムの最近のブログ記事
価格.comが新しく始めた写真共有サイト「PHOTOHITO」は、レンズメーカー別絞込み機能搭載だそうです。
Exifのレンズ情報解析は同一焦点距離の純正レンズとレンズメーカー製とでレンズIDが重複してるようなケースが非常に多いので、どうやってるのか気になって試してみた所、メーカー名や機種名は自動認識されるものの、レンズ名に関しては一度投稿した後「情報編集」画面で手動で入力するようになってました。(でも、なぜか今はプルダウンに登録レンズがありませんと出て入力できない・・・)
全自動は無理だとしても、PhotoXPのexifcodecライブラリ(GPLで公開中)を使えば半自動入力くらいにはなると思うので、ぜひ実現していただきたい:-) >価格.comの中の人
参考:
Exifのレンズ情報解析は同一焦点距離の純正レンズとレンズメーカー製とでレンズIDが重複してるようなケースが非常に多いので、どうやってるのか気になって試してみた所、メーカー名や機種名は自動認識されるものの、レンズ名に関しては一度投稿した後「情報編集」画面で手動で入力するようになってました。(でも、なぜか今はプルダウンに登録レンズがありませんと出て入力できない・・・)
全自動は無理だとしても、PhotoXPのexifcodecライブラリ(GPLで公開中)を使えば半自動入力くらいにはなると思うので、ぜひ実現していただきたい:-) >価格.comの中の人
参考:
各所*1でPHPがネタになってるので、ここらで自分も一言いっとく事にする。
というのも、ここ最近必要に迫られてPHPのコードばかり(普段はJavaかRubyが多い)書いてた事もあって、PHPが叩かれてる理由は非常によく分かるんですね。
自分的には、PHP5のオブジェクト指向関係での微妙なJavaからのパクリ具合とか、Rubyより新しく出てきた言語にもかかわらず脈絡なく整理されてない標準ライブラリ関数とか言語仕様とか・・・
突っ込みどころを挙げるときりがありません。
だがしかしです、PHP5前夜の2003年、たまたまオリジナルのPHP作者であるRasmus Lerdorfと話す機会にに恵まれ、本人から聞いた所だと以下のような感触でした。
Rubyのまつもとゆきひろ、PerlのLally Wallといった人々と比べると、PHPのRasmus Lerdorf はあまりBlogや公演等で語る事が少ないのか、PHPを作った動機とかスタンスについてあまり理解されてない気がするのですが、驚き最小の法則をモットーにシンプルで美しい記述が出来るオブジェクト指向言語を目指したRubyと、最初からApacheモジュールとして実装して、それまでのCGIスクリプトに比べ圧倒的に軽量な動作をするテンプレート言語を目指したPHPとでは、その出自の違いから、PHPの言語仕様が微妙かつ場当たり的になっちゃってるのは、まあ無理もないといった感じでありましょう。
それでも、Ruby以上の速度で世の中に受け入れられて行ったのは、Apacheモジュールに特化した言語という目の付け所の良さ、MySQL等DB接続ライブラリのサポートの良さ、Zend以降の高速化等当時必要とされていた利点が多々あったからであって、大規模システムや複雑なクラスライブラリをPHP言語だけで実装するという事が、そもそもの不幸の始まりなのではと思えてなりません。
その他、印象に残った話題としては、
ってな話をしてくれたのを記憶してます。
なにぶん5年前、酒の入った席で僕のつたない英語力で聞いた話なので正確性は保障できませんが、以上が2003年秋@六本木の忍者コスプレ居酒屋にてPHP作者から直接聞いた話でした。
各所:
というのも、ここ最近必要に迫られてPHPのコードばかり(普段はJavaかRubyが多い)書いてた事もあって、PHPが叩かれてる理由は非常によく分かるんですね。
自分的には、PHP5のオブジェクト指向関係での微妙なJavaからのパクリ具合とか、Rubyより新しく出てきた言語にもかかわらず脈絡なく整理されてない標準ライブラリ関数とか言語仕様とか・・・
突っ込みどころを挙げるときりがありません。
だがしかしです、PHP5前夜の2003年、たまたまオリジナルのPHP作者であるRasmus Lerdorfと話す機会にに恵まれ、本人から聞いた所だと以下のような感触でした。
- PHPはあくまでテンプレートエンジンだよ。
- 大規模なシステムを作るにはC++とかJavaとかStrongly Typedな言語を使うべき。
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作者から直接聞いた話でした。
各所:
- PHP使いの反論 (Matzにっき 2008-01-29)
- 「PHPなめんな」と「(Perl|Python|Ruby)をなめんな」の違い (404 Blog Not Found)
- 唯一の言語に囚われるリスク (ratio - rational - irrational)
- 自分の経験の枠組みは自分で変えられるか? (アンカテ)
- MatzはSHOCK (思っているよりもずっとずっと人生は短い。)
掲示板で知ったのですが、デジタルカメラマガジンがやっているデジカメエキスパート検定1級~3級まで全ての受験料が年内はキャンペーン中で無料だそうです。(公認の証書は有料)僕も昔3級を受けてみた事があるのですが、これを機会に1級に挑戦してみる予定。
先日導入した温度・湿度計のデータに加えて、気象庁のサイトからアメダスのデータを取得するスクリプトamedas.rbを作ってみました。
出力はそのままrrdtool updateに食わせる形式になってます。
グラフはまだデータが溜まってないので、またのちほど。
次回は温湿度系ウィジェット(Vista/Yahoo!/iGoogle?)あたりに挑戦してみる予定です。
出力はそのまま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
MovableType 4.0に移行した際にフィードの規格がAtom 0.3からAtom 1.0に変わったため、mixiの外部ブログ設定で認識されなくなっていたらしい。
今回はあえて、MT2の頃から使ってるRSS 1.0のテンプレートをコピーしてきて対応。
やり方は、MT4の管理画面から
再構築したら完了。
今回はあえて、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"$>" />
再構築したら完了。
湿度計といいますか、湿度センサーですね。はい。どうも、最近風邪をひくと長引く傾向にあったんですが、今年になって耳鼻咽喉科で見てもらった所、風邪は治ってもノドを痛めてるんですよと言われ、なるほど納得。 どうりて咳だけ残るわけだ・・・
それ以来、喉をいたわり部屋の湿度にも気を使っちゃったりしてるわけですが、実際のところ普段の部屋の湿度がどれくらいで、どの程度乾燥すると調子が悪くなるのか、一応湿度計を置いてはいるものの、いまひとつ良く分からない・・・
というわけで、普段の部屋の温度と湿度を継続的に計測してみようと思い立ったというわけです。(計測重要!例: 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
グラフ完成。こんな感じになります。
これで、風邪の予防(に向けたデータ収集)もばっちり?!ですね。この秋は各社中位・上位機種の発売ラッシュでした。 PhotoXP掲示板にもさっそく新機種で撮った写真が出揃ってきたので、以下に紹介しておきます。ご参考まで。
ソニー α700 (11月9日発売)
オリンパス E-3 (11月23日発売)
ニコン D300 (11月23日発売)
ニコン D3 (11月30日発売)EOS-1Ds Mark III (11月29日発売)については、今のところ投稿は無いようです。
最近発売された一眼レフデジカメの続きを読む
部屋の隅でカオスの様相を呈していたACアダプタ達を整理するため、充電ステーションを自作してみました。
といっても、適当なサイズのカゴにACアダプタを放り込んだだけのシンプル仕様。
最初はEngadgetで見たMultiPotやマホガニー製充電ステーションのような市販品を探してみたのですが、日本で普通に買える物は無さそうな感じ。
同様な悩みに、もっと凝った充電ステーションを自作した方も見つけたので、自分でも自作する事に。
一応簡単に作り方を書いておくと、
- 適当なサイズのカゴにタコ足配線用のマルチタップを入れて、コードを引っ張り出す。
- 途中に中間スイッチを付けて、1箇所で電源をOn/Off出来るようにする。
- カゴの中に各種ACアダプタを放り込む。
- ガジェットを置く部分として皮のカバーを用意。ハトメ穴を開けてフックでかごの端にひっかける。
- カバー左右の部分から各種コードを引っぱり出す。

こいつで対応する機器は以下の通り。
- au携帯用2種
- ニンテンドーDS
- FinePix F30
- FinePix S5 Pro
- シェーバー
- eneloop/ニッケル水素充電池
- その他汎用ACコンセント

試しに消費電力を測ってみた所、無負荷時で1W程度。携帯1台、ニンテンドーDS、eneloopを同時に充電した場合で10W程度。 今回作成した物は、あまり通気性が良くないのだが、消費電力の少ない物しか繋いでないのと使うときしか通電しないため熱がこもる事もなく問題はなさそう。
しかし、消費電力の大きいノートPCのACアダプタ等は、発熱もすごいのでこうやって一箇所に固めるのはやめたほうが良いでしょう。
追記:
blogを書いた後に、5月16日の家電Watchの記事を発見。MultiPotがディノスの通販で31,500円と書かれているが、オンラインショップでは見つかりませんでした。カタログ通販には載ってるのかも。
師走ですねー。 ここ2、3年はふと気づいたらもう12月、1年も終わりかよって感じで時間が流れていきます。
今年は全くPhotoXPの改良に手をつけられなかったのですが、Ruby on Rails使ってあれこれやってたので、来年はRailsでサクっとPhotoXP大改良!(に着手)したい所。

