SmallStyle


2011-04-27

_ Win32OLEを利用して多言語が記述された Excel ファイルを読み書きする

Web ページを多言語対応させるために,数十言語の翻訳データを Excel で渡されて,これをプロパティファイルに書き換える必要がでてきた.単純にコピペするというのは,いくらなんでも非効率すぎるので,Win32OLEを利用して Excel を読んでプロパティファイルを生成する変換ツールを作った.きっとコピペ作業ならつまらなさすぎて数日かかる作業が,変換ツールの作成数時間のみでできるんだから,やらない手はない.きっと Excel のマクロとか使えればいいんだろうけど,それよりも普段使い慣れている言語のほうが早く対応できるので,ここはやはりRubyで.

Rubyist Magazine - Win32OLE 活用法 【第 2 回】 Excelを参考に,Excelからの読み込みも問題なくできたし,ファイルへの書き出しも特に問題なくできた.ただ書き出したテキストファイルの一部が"?"になって文字化けしている.文字コードまわりというのはすぐさまピンときて,レファレンスなどを見てみると WIN32OLE.codepage を設定する必要があることがわかった.そこで,UTF-8で文字列を受け取るように以下のように記述しておくと,出力するテキストデータも正しく書きだされることが確認できた.

WIN32OLE.codepage = WIN32OLE::CP_UTF8

Excel を表計算として使っていないときは,こういう手が使いやすいのでいいけど,Excel 方眼紙とかになってたらさすがにしんどそうだな.


2011-04-26

_ ヤマハの機器で iPhone の音声をワイヤレスで再生できる YID-W10 を購入

YID-W10

iPhoneとトランスミッター

iPod や iPhone の音声をワイヤレスでスピーカーから再生が可能な,ヤマハ独自の「AirWired」を利用した YID-W10 を購入.国内で購入しようと思ったら在庫があまりないようで,価格もそこそこするので,ちょうど海外から転送サービスを利用して送る荷物があったので,Amazon.com で購入して一緒に送ってもらうことにした.購入当時は日本円で 8,200 円で買えたけど,今は若干値上がりしてるみたい.

AirWired 対応の製品は一覧にあるようにいろいろあるのですが,家では YRS-700 につないで利用しています.

iPhone にトランスミッターをつけると,ドック側が自動で立ち上がりそれに連携してシアターラックの方も電源が入ります.映像と音声のズレも感じられずに,音楽を聞くだけでなく,ゲームや映像なんかも十分楽しめます.iPhone からトランスミッターを取り外すと,シアターラック側も自動的に電源が落ちるので,これも手軽でいい.

ケースを装着した iPhone でもケース次第だとは思いますが,そのまま利用することができて,ドックに挿せば充電もできます.

トランスミッターを挿せば動く,外せば止まる.難しいことを考えなくても簡単に使える仕組みはやっぱりわかりやすくていいですね.

YAMAHA iPod用ワイヤレスシステム (ブラック) YID-W10B

ヤマハ
¥ 12,780


2011-04-25

_ ActiveResource を使って PUT とかしてみて気になったこと

ここ数日は Rails3 をさわることが多くて,その中で ActiveResource を使って PUT リクエストを送信しようと,まずは API のサンプルを参考にしてリクエストを投げてみた.ドキュメントから PUT のリクエストが実行されると思ったら,以下のような GET と PUT のリクエストが 2 回送信されることになった.

コンソールから以下のように実行すると,

> Person.find( 1 ).put( :promote, :position => 'Manager' )

サーバーでは以下のようなログが出力される.

Started GET "/people/1.xml" for 127.0.0.1 at 2011-04-25 00:00:00 +0900
...
Started PUT "/people/1/promote.xml?position=Manager" for 127.0.0.1 at 2011-04-25 00:00:00 +0900

動作自体はこれはこれで動いてはいるけど,update をするためにリクエストが 2 回送信されるというのは,やっぱり無駄なような.一回で済ませるには以下のように実行すると,動作することがわかった.

> Person.new( :id=>1 ).put( :promote, :position => 'Manager' )

わかったのはいいんだけど,CustomeMethod を利用した場合は,レスポンスを自分で Hash.from_xml なりしてパースをしないといけないのが面倒だなぁ.なんか他にうまいやり方はあるんだろうか…?


about me

いろいろと興味を持ったことを書いてます.ちょっとしたことは hb(@smallstyle) on Twitter で書いてます.

Archive

2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|12|