流行に流されて10日ほど前にMacを買ってしまいました。MacBook AirじゃなくてあえてMacBook Pro 15inch。
買った後なんだかんだで忙しく遊ぶ暇が無かったのですが、今日ようやく1日かけてVAIOからデータを移行したりヤフオクに出したり、Leopard上の開発環境構築したり出来ました。
以下しばらく使ってみた感想。
- 色んな意味でOSがVistaより軽快
- Safari 3速い
- マルチタッチトラックパッド快適、2本指でスクロールとか3本指で進む戻るとか
- フォントの綺麗なUNIX
- Ruby on Rails標準装備
- eclipseもあるし
- VMware Fusionの出来がまたいい
- ハードウェア的というか、物理的にもう少し液晶パネルを後ろに倒せるようにして欲しかった
一時期、Mac OS Xが出てすぐの頃にMacを使ってたんですが、その頃と比べるとWindowsじゃないと困る事が激減してる事にあらためて気付かされますね。
いやしかし、あらためてMacとMac OS Xいいわー
価格.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 (思っているよりもずっとずっと人生は短い。)
近頃開発停滞中なPhotoXP 2.0αをRuby on Rails 2.0に対応させてみました。
参考までに、以下に移行に必要になった作業をメモしておきます。
1. デフォルトではセッションをCookieに格納するようになったため、config/environment.rbに設定を追加。
参考URL: http://d.hatena.ne.jp/idesaku/20071210/1197260363
3. Reloadableモジュールは廃止されたので、明示的にinclude Reloadableしている場合削除する。
今回はGoogle Mapsプラグインがそれに当たりました。
4. scoped_accessプラグインをRails 2.0対応版に更新。
参考URL: http://wota.jp/ac/?date=20060704
一言感想を言うとしたら、メジャーバージョンアップした割には意外とすんなり動いてびっくり。:-)
参考までに、以下に移行に必要になった作業をメモしておきます。
1. デフォルトではセッションをCookieに格納するようになったため、config/environment.rbに設定を追加。
config.action_controller.session = { :session_key => "_photoxp_session", :secret => "ba41124efc149ce2f17a85b4b206a" }
2. pagenate機能はプラグインに分離されたので、classic_paginationプラグインを導入。参考URL: http://d.hatena.ne.jp/idesaku/20071210/1197260363
3. Reloadableモジュールは廃止されたので、明示的にinclude Reloadableしている場合削除する。
今回はGoogle Mapsプラグインがそれに当たりました。
4. scoped_accessプラグインをRails 2.0対応版に更新。
参考URL: http://wota.jp/ac/?date=20060704
一言感想を言うとしたら、メジャーバージョンアップした割には意外とすんなり動いてびっくり。:-)
あけましておめでとうございます。
しかし、新年早々あまりめでたくないネットワークトラブルのお話から・・・
昨日1/7 21時頃~1/8 0時頃まで、PhotoXP掲示板やこのblogの表示が非常に遅い状態が続いていたのですが、どうやら1年半ほど前に帯域制限かけられた時と同じく、プロバイダーの帯域制限にひっかかってしまったようです。
グラフで見ると、月曜日(Mon)はきっかり帯域1Mbpsで抑えられてるのが分かりますね・・・
最近は投稿画像の枚数も増えてきて、1日のデータ転送量が十数GBに達する事もあるので、個人向けのBフレッツで運用している以上文句も言えないのかなと思い、急遽別のISPを契約して1つのサーバに2個の固定IPアドレス/PPPoEセッションを持たせて乗り切る事にしました。
以下、その記録です。(Linux/Fedora Core 6での例)
まず固定IPの使えるISPを調査(DynamicDNSでも良いのですが、一応安定性を考えて固定IPで)。EditNetという所が安そうだったのでここに決定。オンラインサインアップでBフレッツのPPPoE用アカウントとパスワードを発行してもらい準備完了。
まず、サーバに2本目のPPPoE設定を行う。ppp0の設定を元にppp1用の設定ファイルを作るため、まずはコピー
次に、以下の設定項目をppp1用に編集、default routeやDNS(resolv.conf)はnoと書いてppp1接続確立時にppp1のISPに書き換えないようにするのがポイントです。
これで、ppp1用に割り当てられたIPへのアクセスのみ2つ目のプロバイダー回線を通るようになります。
さらに、パスワードは/etc/ppp/pap-secrets, chap-secretsに記述して設定完了。
adsl-startコマンドでPPPoE接続を有効にします。
ifconfigコマンドで確認。
ppp1インターフェースが表示されて、inet addrに正しくIPアドレスが表示されていれば繋がっているはず。
別のネットワークから、ブラウザに直接 http://[IPアドレス]/と入力してみたり、pingを打ってみたりして疎通確認をしてみましょう。
うまく行かない場合は、/var/log/messages にエラーが出力されているはずなので確認します。
これで、2つのIPのどちらでも同じ自宅サーバにアクセスできるようになったので、PhotoXP掲示板の画像は全てhttp://[ppp1のIPアドレス]/image/foo/bar.jpgといった名前でアクセスするようにphotoxpのconfig.rb内のIMAGE_URLを変更して完了です。
以上、負荷分散や片方のISPの障害時の対応等を考えると、もう少しやれる事はあるかと思いますが、
Bフレッツで自宅サーバを運用している人向けの、安く簡単に自宅サーバの回線増強をする方法でした。
追記:
しかし、新年早々あまりめでたくないネットワークトラブルのお話から・・・
昨日1/7 21時頃~1/8 0時頃まで、PhotoXP掲示板やこのblogの表示が非常に遅い状態が続いていたのですが、どうやら1年半ほど前に帯域制限かけられた時と同じく、プロバイダーの帯域制限にひっかかってしまったようです。
グラフで見ると、月曜日(Mon)はきっかり帯域1Mbpsで抑えられてるのが分かりますね・・・最近は投稿画像の枚数も増えてきて、1日のデータ転送量が十数GBに達する事もあるので、個人向けのBフレッツで運用している以上文句も言えないのかなと思い、急遽別のISPを契約して1つのサーバに2個の固定IPアドレス/PPPoEセッションを持たせて乗り切る事にしました。
以下、その記録です。(Linux/Fedora Core 6での例)
まず固定IPの使えるISPを調査(DynamicDNSでも良いのですが、一応安定性を考えて固定IPで)。EditNetという所が安そうだったのでここに決定。オンラインサインアップでBフレッツのPPPoE用アカウントとパスワードを発行してもらい準備完了。
まず、サーバに2本目のPPPoE設定を行う。ppp0の設定を元にppp1用の設定ファイルを作るため、まずはコピー
$ cd /etc/sysconfig/network-scripts
$ sudo cp -p ifcfg-ppp0 ifcfg-ppp1
次に、以下の設定項目をppp1用に編集、default routeやDNS(resolv.conf)はnoと書いてppp1接続確立時にppp1のISPに書き換えないようにするのがポイントです。
これで、ppp1用に割り当てられたIPへのアクセスのみ2つ目のプロバイダー回線を通るようになります。
NAME=DSLppp1
DEVICE=ppp1
PIDFILE=/var/run/pppoe-adsl-ppp1.pid
DEFROUTE=no
PROVIDER=DSLppp1
USER=userid@yourprovider.ne.jp
PEERDNS=no
さらに、パスワードは/etc/ppp/pap-secrets, chap-secretsに記述して設定完了。
adsl-startコマンドでPPPoE接続を有効にします。
$ sudo /sbin/addl-start ifcfg-ppp1
ifconfigコマンドで確認。
$ /sbin/ifconfig -a
...
ppp0
...
ppp1 Link encap:Point-to-Point Protocol
inet addr:218.219.148.133 P-t-P:218.219.145.35 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1454 Metric:1
RX packets:431220 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:28049357 (26.7 MiB) TX bytes:54 (54.0 b)
ppp1インターフェースが表示されて、inet addrに正しくIPアドレスが表示されていれば繋がっているはず。
別のネットワークから、ブラウザに直接 http://[IPアドレス]/と入力してみたり、pingを打ってみたりして疎通確認をしてみましょう。
うまく行かない場合は、/var/log/messages にエラーが出力されているはずなので確認します。
これで、2つのIPのどちらでも同じ自宅サーバにアクセスできるようになったので、PhotoXP掲示板の画像は全てhttp://[ppp1のIPアドレス]/image/foo/bar.jpgといった名前でアクセスするようにphotoxpのconfig.rb内のIMAGE_URLを変更して完了です。
以上、負荷分散や片方のISPの障害時の対応等を考えると、もう少しやれる事はあるかと思いますが、
Bフレッツで自宅サーバを運用している人向けの、安く簡単に自宅サーバの回線増強をする方法でした。
追記:
ある日突然ppp1回線が使えなくなったのでいろいろ試してみたところ、
以下を参考にソースルーティングの設定をする事で復旧しました。
http://dsas.blog.klab.org/archives/50326299.html
しかし、今まで何故ソースルーティング設定無しで動いてたのだろう。。。
以下を参考にソースルーティングの設定をする事で復旧しました。
http://dsas.blog.klab.org/archives/50326299.html
ip route add dev ppp1 table 100 ip rule add from www.xxx.yyy.xxx table 100 pref 100
しかし、今まで何故ソースルーティング設定無しで動いてたのだろう。。。
PPPoEマルチセッションで回線増強の続きを読む
約1年ぶりの1.7系であるPhotoXP 1.7.5をリリースしました。
主な変更点は以下の通り。
あと、ruby 1.9.0になってString#[](引数が数値1つの場合)の戻り値が文字コードから長さ1の文字列に変わってるようで、[0,1]のように書くことで1.8と1.9で同じ動作を期待できるのですが、逆に1.9で文字コードを取得したい場合はどうすればいいのだろう。。。
主な変更点は以下の通り。
- オリンパスの新しいMakerNote(E-410以降)に対応。
- レンズデータの追加。
- Ruby 1.9.0でのエラーを修正。
あと、ruby 1.9.0になってString#[](引数が数値1つの場合)の戻り値が文字コードから長さ1の文字列に変わってるようで、[0,1]のように書くことで1.8と1.9で同じ動作を期待できるのですが、逆に1.9で文字コードを取得したい場合はどうすればいいのだろう。。。
# ruby-1.8.6 p "a"[0] => 97 p "a"[0,1] => "a" # ruby-1.9.0 p "a"[0] => "a" p "a"[0,1] => "a"
現在の最新バージョンは1.7.5(2007-12-31)です。
- photoxp-1.7.5.tar.gz 81,271( byte)
掲示板で知ったのですが、デジタルカメラマガジンがやっているデジカメエキスパート検定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

最近のコメント
Hiroshiです。 on メンテナンスリリース PhotoXP 1.7.5: 管理人様お騒がせいた
PhotoXP管理人 on PhotoXPのインストール: はい、一度投稿した内
お願いします。 on PhotoXPのインストール: お返事有難うございま
PhotoXP管理人 on PhotoXPのインストール: 「写真一覧」をクリッ
お願いします。 on PhotoXPのインストール: フォトXPにアップロ
PhotoXP on 価格.comの写真共有サイト「PHOTOHITO」はレンズ別検索機能付き: コンピュータ・デジカ
Kiske on 価格.comの写真共有サイト「PHOTOHITO」はレンズ別検索機能付き: トラックバックありが
PhotoXP on メンテナンスリリース PhotoXP 1.7.5: この部分は以前から変
Hisroshiです。 on メンテナンスリリース PhotoXP 1.7.5: お世話になります。