僕は発展途上技術者

Joker Racer と行ったカリフォルニア

うーむ、題名が微妙なんですが、サイドフィード赤松さんの


» where2.0 2009 に参加した理由と感想 : a++ My RSS 管理人ブログ


にならい、Joker Racer と Where 2.0 の感想などを書きたいと思います。


» Joker Racer


僕はサイドフィードには所属しておらず、Joker Racer はいまのところサイドフィードのサイドプロジェクトという位置づけなので、以降の文章は僕個人の視点として受け止めていただきたいと思います。特に、赤松自身に対する記述は、あくまで個人として正直に感じたことを書いているだけであり、メンバーが代表を持ち上げるとか社員が社長を持ち上げているといった類のものではないので。。。(書くまでもないかなとも思ったのですが、まあ一応)


きっかけ


3月始め、赤松さんから、Joker Racer が Where 2.0 に出展することになったのでその準備を手伝ってくれないかというお誘いを受けました。


最初からターゲットを世界に置いていることに大きな魅力を感じ、そして「あとで行く」が「あとで読む」に対するオマージュであることからもうかがえるようにかねてからリスペクトしている赤松さんの誘い、ということもあって二つ返事でお手伝いさせていただくことになりました。


iPhone アプリ


Joker Racer をコントロールする iPhone アプリを開発できる、というのも大きな魅力の一つでした。


知識全くゼロからの開発でしたが、Erica Sadun 女史による iPhone デベロッパーズ クックブックかなぶん を開発していただいている id:Kanta さんに大いに助けていただき、なんとか Where 2.0 までにプロトタイプとよべるものが完成しました。


Where 2.0 で紹介されているほかのプロダクトでも、Web + iPhone という組み合わせが多く、うまくそのトレンドにはまっていたように思います。Nintendo コントローラーには操作性の上ではまだまだ及ばないのですが、「iPhone でも動く」ということはデモに来ている人たちの反応を見る限り、結構なインパクトを与えていたように思います。


ただ「え、これって App Store からダウンロードできる??」と聞かれることが多かったので、欲を言えば App Store からダウンロードできる状態にまで作り込んでおけばよかったかな。


偶然と努力



自分で書くのもなんですが、このプロジェクトは本当に強運で、いろんなことがなぜかすべてうまくいくのですw。

調子の悪かったマシンが本番の大舞台だけはシャキンと動いたり、今回の Launch Pad の発表の件しかり、結果的に良い方向になるということが多く、つまりは、なんでもポジティブに捕らえている状態なので、えっと、えっと、where2.0 もすばらしかったです(笑)。


と赤松さん自身、冒頭に紹介したエントリーに書いているのですが、その運をひきよせた裏には赤松さんと大森さんの大きな努力と、チャンスを最大限に生かそうとするどん欲さの両方があったということは、今回一緒にプロジェクトに関わることがなかったら知るよしもなかったでしょう。


Launch Pad のプレゼンでは、ご本人は謙遜しておられますが、英語で堂々とプレゼンをおこない、きっちり笑いと賞賛の拍手を獲得していました。赤松さんならクールにスマートに、練習なんてそこそこにさらっとあのくらいできてしまうのだろう、というのがいままでの僕のイメージでした。


そのかっこいいスーパーマンなイメージをひっぺがしてしまうようで、赤松さんには申し訳ないのですが、いやいや実はその裏には、何度も何度もストーリーを書き直し、暗記するためにホテルで繰り返し繰り返しリハーサルをされている赤松さんの姿があるのです。


僕の好きな言葉にルイ・パスツールの le hasard ne sourit qu'à l'esprit préparé というのがあります。「偶然(あるいはチャンス)は準備のない者に微笑(ほほえ)まない」と訳されることがあるのですが、まさにその通りのことが次々と起こっていったのを目の当たりにしました。


当然のごとく偶然とともに良い結果も努力をおこなった人のところにしか訪れないのだということも。。。



Joker Racer の楽しさ


プロトタイプのかなり初期の段階のものを触らせてもらったときにその楽しさを実感しました。遠隔のものをコントロールするというのは、たぶんそれだけで楽しいことなのですが、その対象との距離が遠くなれば遠くなるほどドキドキします。見えない場所、危険な場所、あるいは遠いどこか別の国にあっても操作できるのが、Joker Racer の楽しさなんじゃないかと思っています。


それを端的に表しているのが、以下の動画です。僕も会場を一周させてみたのですが、車がブースの裏側にまわり自分の視界から消えた瞬間から楽しさが一気に倍増するのです。(下の動画だと 1:40 あたりから)


Joker Racer はこれからも確実にどんどん楽しくなっていくと思います。


» Joker Racer



懐かしきカリフォルニア


さて、最後に Joker Racer からちょっと離れた個人的な話を。。。


2000年 - 2004年の間生活した後、帰国して以来初めてサンフランシスコベイエリアを訪れました。


Where 2.0 を終えたあと一日時間をもらい、勤めていた会社のオフィスを訪ねたり、その後転職した元同僚や友人の家を訪ねてまわりました。


僕の後任として呼んだ韓国人の同僚であり友人の奥さんは会計士の資格をとるべく主婦業のかたわらコミュニティカレッジに通っていたり、転職した元同僚は次のステップを考えて Bio Informatics の学位を Distance Learning (いわゆる通信教育)で取得中だったり、ジュエリーショップを購入して自分のビジネスを立ち上げつつある友人女性など、ここではだれもが前向きに一生懸命に努力して生きているのです。


また、仕事だけではない、ゴルフや BBQ の焼き方、庭で本格的に野菜を育てていたり、あるいはネイティブインディアンの美術に興味を持っていたりと、それぞれのやりたいこと好きなことに対してものすごい入れ込みようで、彼らの話を聞いて、カリフォルニアのあるいはアメリカ文化独特のエネルギーを注入された気がします。


かつて僕も持っていたものが、日本に帰ってきて生活するうちに、すこし忘れかけ、薄れていたのかもしれません。それを今回 Joker Racer に関わることで、また Where 2.0 のためにカリフォルニアを訪れたことで呼び覚ますことができたのはとても価値あることでした。


mp4 から avi への変換など、動画編集に役立つフリーウェア

ゴールデンウィーク最終日は、悲しくも雨。


というわけで今日は外出せず、インドアでなにかこども達を喜ばせようと、映画撮影のまねごとをしてみました。


以前


» 「ダースベーダー vs ヨーダ」 本編では描かれなかった闘い (ホームビデオです。悪しからず) : 僕は発展途上技術者


こんなものを作ったことがあるのですが、2年経って僕も子供達もちっとも進歩せず、あいかわらず僕らにとっては、映画 = スターウォーズ なのです。


というわけであいも変わらず、スターウォーズの名シーンをいくつか再現し、撮ったビデオに本編の音声を合成したりして楽しんだのですが、毎回毎回動画ファイルの変換をおこなうソフトウェアを探したり、手順を思い出すために無駄な時間を使っている気がするので、手順を自分のためにもメモしつつ、使ったフリーウェアを紹介します。


1. MPEG4形式のファイルをAVI形式のファイルに変換


xacti で撮ったビデオのファイル形式が MPEG4 で、後述する Windows ムービーメーカーで編集できる形式が AVI なので、MPEG4 -> AVI の変換をおこないます。


以前は、MPG2AVIというフリーウェアを使っていたのですが、なぜか動かなくなっており、しかもダウンロード元のページがなくなってしまっていたので、


» Free MP4 to AVI Converter 1.3 - Convert MP4, M4V, MP4V files to AVI or MPEG, iPod MP4 to AVI converter - Jacek Pazera


に切り替えました。


MPEG4 -> AVI の変換にしか使わないので、マニュアルを読むことなく操作できましたが、もっと高度なことがやりたい方は適当にググッてみてください。


2. DVDから音声を抽出


映画のDVDから音声を切り出してくるために僕がいつも使っているのが、


» Audacity: Free Audio Editor and Recorder


です。


DVD を再生し、Audacity の音源を選ぶセレクトボックスで「Stereo Mix」を選択し録音したあと、wav 形式で書き出します。


3. 動画や音声ファイルを編集


動画や音声ファイルを編集するときに使うのが、Windows ムービーメーカー。Windows XP に最初から入っていたソフトウェアですが、こいつが結構便利で使えるのです。


以上のフリーウェアがあれば、とりあえずそれっぽい動画を作ることができます。


番外として、「スターウォーズ好き」にしか役立たない情報ですが、


» スターウォーズのライトセーバー動画を無料ソフトウェアだけで自作する方法 : 僕は発展途上技術者


を紹介しておきます。


実は上記記事、rails や ruby、プログラマー向けの話題が多い僕のブログの中にあって、他を圧倒してダントツで読まれている記事だったりするのです。


passenger を使うときは .htaccess を削除!

サーバー周り、環境構築でここ数日よくはまる。


以前はまったことがあったのに、またまた同じところではまってしまった自分に厳重注意。


passenger を使うときは .htaccess を削除


皆さんもはまってます。


» Passenger を使う時は public/.htaccess に注意! - yuum3のお仕事日記

» Passenger(mod_rails)と.htaccessではまる - 仙台Rails社長


Ubuntu Hardy に ImageMagick と RMagick をインストールする

わかってしまえば超簡単なのですが、2時間近くはまってしまいました。


Slicehost 上の Ubuntu Hardy に ImageMagick と RMagick をインストールするには



% sudo aptitude update

% sudo aptitude install imagemagick libmagick9-dev

% sudo gem install rmagick


であっさり出来てしまうのですが、最初の sudo aptitude update をやっていなかったために、sudo gem install rmagick で



Building native extensions. This could take a while...

ERROR: Error installing rmagick:

ERROR: Failed to build gem native extension.


/usr/bin/ruby1.8 extconf.rb install rmagick

checking for Ruby version >= 1.8.2... yes

checking for cc... yes

checking for Magick-config... no

Can't install RMagick 2.9.1. Can't find Magick-config in /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin


というエラーに悩まされ、ああでもこうでもないと散々パッケージのインストール、アンインストールを繰り返してしまいました。


sudo aptitude update は、man の記述



Updates the list of available packages from the apt sources (this

is equivalent to "apt-get update")


の通り、aptitude でインストールするパッケージ情報を最新に更新するコマンドです。これまで特に更新しなくても問題が起こらなかったため、甘く見てました。今度からは aptitude install でなにかパッケージをインストールするときは、事前に必ず aptitude update をおこなうことにします。


aptitude update 超重要ということはもっと認識されるべきです。(どこにもあまり書かれてない)


あと、sudo aptitude install imagemagick libmagick9-dev がなにごともなく通っているように見えて、ImageMagick が正常にインストールされている、と勝手に思い込んでしまったことも問題がどこにあるかわからなくなってしまったことの原因。


ImageMagick がインストールされているかどうかは、



% which convert

/usr/bin/convert


で確認できるということが、インストールがうまくいった後わかりました。


HTMLカラーコードで表された色を濃く(暗く)する Javascript

任意に指定された HTML カラーコードで表された色と、それを少し濃くした色とのペアを取得するという必要にせまられた。これを実現する Javascript のコードを探したのですが、適当なものがみつからなかったので自分で書いてみました。


エントリー末尾の Javascript コードを読み込み、


darken('ff0000', 0.8)


のように darken 関数を呼んでください。2つ目の引数は濃くする度合いで、1に近いほど濃くする度合いは弱く、0に近いほど度合いが強くなります。


以下、実際どのように濃くなるかの例です。


  ff0000

  darken('ff0000', 0.8) = cc0000


  ffccff

  darken('ffccff', 0.8) = cca3cc


» Miscellaneous : True Color Darkening and Lightening / The JavaScript Source


のコードを参考にしました。


上記は逆数を取ったりとちょっとややこしいことをしているのですが、#ff0000 のような原色をうまく変換してくれなかったので、


» Darken and lighten color? - Usenet Forums




To lighten, increase RGB values by 10% each. To darken, decrease RGB values by

10% each. Maybe replace 10 with whatever the "certain amount" is.


(RGBの各色を10%ずつ増やせば色を薄く、10%ずつ減らせば色を濃くできる)


という発言を参考にして書き直しました。


不備があったり、もっと良い方法がありましたら、コメントなどでお知らせください。



世界中のどこからでもラジコンを遠隔操作 - JokerRacer

あとで読むフレッシュリーダーを開発されたサイドフィードの赤松さんに誘っていただき、一ヶ月ほど前から参加しているプロジェクトなのですが、これがかなり良い感じで進行しています。


いろいろ説明するより見てもらった方が早いです。



Linux サーバーを積んだラジコンを無線経由でインターネットに接続し、iPhone から操作!


車の前面に搭載されたカメラからリアルタイムに配信される動画が映し出されているので、ネットにつながりさえすればラジコンが世界中のどこにあっても、また操作する側も世界中のどこにいても可能なのです。(理論的には、という話ですが。。。)


ラジコンのスピードに比べて、オンボードカメラから映し出される動画から感じられる体感速度が超高速に感じられ、テンションがあがります。


速く数台を表で走らせ、競争したい!


詳しい情報は、以下のリンク先にあります。


» Joker Racer - remote drive our real racing car


» iPhone からラジコンを操作してみる : a++ My RSS 管理人ブログ


長野新幹線に乗っている間に Rails プラグインを作ってみる

東京 - 長野間は約1時間40分。その間に Rails プラグインを作り、公開して、ブログまで書けるかやってみました。


作るプラグインはとても簡単。


帳票などの機能を作っていると、日付や時刻を年度で考えなければならない、ってときがあります。

そこで、DateやTimeクラスを拡張し、fiscal_yearというメソッドを追加して、



% script/console

Loading development environment (Rails 2.2.2)

>> Date.new(2009, 3, 31).fiscal_year

=> 2008

>> Date.new(2009, 4, 1).fiscal_year

=> 2009


のように年度を返すようなことをやっていたのですが、これをプラグイン化してみました。


13:24 東京駅出発。


パソコンをリュックから取り出し、準備万端。


上野駅到着。


script/generate plugin fiscal_year


でプラグインのひな形を作成。


う、emobile つながらない。ま、いいや。とりあえずすでに config/initializers 以下に置いて利用していたコードをコピーします。


ほとんどコピペですむので早くもプラグイン完成。



% script/console

Loading development environment (Rails 2.2.2)

>> Date.new(2009, 3, 31).fiscal_year

NoMethodError: undefined method `fiscal_year' for Tue, 31 Mar 2009:Date

from (irb):1


ありゃ NoMethodError。


init.rb に



require 'fiscal_year'


と書き忘れてました。



% script/console

Loading development environment (Rails 2.2.2)

>> Date.new(2009, 3, 31).fiscal_year

=> 2008

>> Date.new(2009, 4, 1).fiscal_year

=> 2009


OK。ほぼ完成。


README を書く。


大宮駅でやっと emobile つながった。


github にレポジトリを作り、表示された以下の指示の通りに実行。



mkdir fiscal_year

cd fiscal_year

git init

touch README

git add README

git commit -m 'first commit'

git remote add origin git@github.com:champierre/fiscal_year.git

git push origin master


git push origin master で、公開準備も整った。


写真をぱしゃり。


20090403135648.jpg


サンプルアプリから、githubに置いたプラグインをインストールして実行してみる。



script/plugin install git://github.com/champierre/fiscal_year.git


テストを書き足す。


» The Complete Guide to Rails Plugins: Part II | Ruby on Rails for Newbies


を参考に。


A surprisingly large number of plugins have no tests at all.


と揶揄されている。僕は書くぞー。


なんの進展もないまま高崎に着いちゃった。


山がみえてきた。トンネルも多いし、これはやばい。emobile 切れそう。


軽井沢につくころ、ようやくテストが通った。


テストの冒頭に書く



require 'test/unit'

require 'test/test_helper'

require File.dirname(__FILE__) + '/../lib/fiscal_year'


あたりでつまづいていた。


レポジトリに再度プッシュ、サンプルアプリからもう一回プラグインをインストールして、テストまで通るか試す。



% script/plugin install git://github.com/champierre/fiscal_year.git

Initialized empty Git repository in /Users/ishihara/rails/sample/vendor/plugins/fiscal_year/.git/

remote: Counting objects: 19, done.

remote: Compressing objects: 100% (15/15), done.

remote: Total 19 (delta 1), reused 0 (delta 0)

Unpacking objects: 100% (19/19), done.

From git://github.com/champierre/fiscal_year

* branch HEAD -> FETCH_HEAD

% cd vendor/plugins/fiscal_year

% rake test

(in /Users/ishihara/rails/sample/vendor/plugins/fiscal_year)

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -Ilib:lib:test "/Library/Ruby/Gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" "test/fiscal_year_test.rb"

Loaded suite /Library/Ruby/Gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader

Started

..

Finished in 0.00118 seconds.


2 tests, 2 assertions, 0 failures, 0 errors


ok。完成。


残り時間は急いで、このエントリーの下書きを書く。酔いそう。


エントリーも完成。


15:04 長野駅到着。


FiscalYear プラグインは以下で公開しています。


» champierre's fiscal_year at master - GitHub


「かなぶん」iPhone 版クローズドベータのご案内

「かなぶん」というゲームを作りました。いまから3年前です。


» かなぶん(α版) - 僕は発展途上技術者 2.0


残念ながら、ウノウ退社とともにサイトはクローズしたのですが、昨年 id:Kanta さんに全面的に協力いただいて、Ruby on Rails 版で復活しました。


» かなぶん。


» かなぶん。公開中。 - KCLAB


そして、今、同じ id:Kanta さんに iPhone 版を開発いただいており、クローズドベータテストを開始しました。


僕を個人的に知っている方に限らせていただくのですが、iPhone または iPod Touch を持っていて、試してもいいよ、という方がいましたら、僕宛に UDID を送ってください。


UDID の調べ方については


» iPhone/iPod Touch の UDID(Unique Device Identifier) の調べ方 : 僕は発展途上技術者


を参考にしてください。


photo.jpg


日付のカレンダー入力を可能にする calendar_date_select プラグイン

日付の入力は、プルダウンよりもカレンダーから入力したほうが楽です。特に日付に加えて時刻まで入力する場合にはなおさらです。


calendar_date_select はそのカレンダー入力を可能にする Rails プラグイン。prototype.js ベース、Javascript で書かれたカレンダーピッカーと連動します。


» calendardateselect - Google Code


ただ、日本語環境で使用するには多少手を入れることが必要です。その手順も含め、Rails 2.3 での導入方法を記しておきます。


追記

calendar_date_select プラグインを fork し、以下延々と書き記した追加点を含めておきました。せっかちな方は、



% script/plugin install git://github.com/champierre/calendar_date_select.git


で calendar_date_select + Japanese support プラグインをインストールし、README_JA の指示に従ってください。


» champierre's calendar_date_select at master - GitHub


インストール


まず本家ページの説明どおり、gem でのインストールを試みて使用してみようとしたところ、



undefined method `calendar_date_select_tag' for #


というエラーがでます。検索して調べてみたところ、同様の問題に対する解決方法として、プラグインでのインストールが推奨されていたので、



% script/plugin install git://github.com/timcharper/calendar_date_select.git


でインストールします。


layout ファイルに、



<%= javascript_include_tag :defaults %>

<%= calendar_date_select_includes "red" %>


カレンダーを表示したい部分には、



<% form_for(@model) do |f| %>


で囲っている場合には



<%= f.calendar_date_select "date_and_time", :time => true, :popup => :force %>


そうでない場合には、



<%= calendar_date_select_tag "model[date_and_time]", Time.now, :time => true, :popup => :force %>


といったように記述することで、以下のようなカレンダー入力が可能となります。


calendar.png


カレンダーアイコンをクリックすればカレンダーがテキストフィールドの下に開きます。


calendar2.png


各オプションの役割を知るには、CalendarDateSelect Demoを参考にするとよいでしょう。テキストフィールド内の自由入力を許してしまうと、日付フォーマットのチェックが必要になってしまうので、これを禁止してしまう :popup => :force をつけるのがおすすめです。


さて、これでひとまず動作はするのですが、このままだと日付のフォーマットやインターフェースが英語のままで具合が悪いです。順に日本語化していきます。


表示の日本語化


public/javascripts/calendar_date_select/locale 以下に ja.js というファイルを新規作成し、以下をそのままコピー & ペーストします。



次に、layout ファイル内の記述を



<%= javascript_include_tag :defaults %>

<%= calendar_date_select_includes "red", :locale => 'ja' %>


のように変更、:locale => 'ja' を付け足しています。


これで曜日などの表示が日本語化されるはずです。


日付フォーマットの日本語化


2009/01/31 13:30 のような YYYY/mm/dd HH:MM というフォーマットを日本式とみなします。


別の形式を使いたい場合には、以下の説明を適当に読み替えてください。


public/javascripts/calendar_date_select 以下に format_japanese.js というファイルを新規作成し、以下をそのままコピー & ペーストします。



次に、config/environments.rb に以下を追記します。



以上で日付のフォーマットも変更できました。


微調整をいくつか


カレンダー内の時刻のプルダウンとそれに続く 現在 | OK | 閉じる のメニューの一行が長くなってしまって、レイアウトが乱れてしまいます。


そこでこれを修正するため、public/javascripts/calendar_date_select/calendar_date_select.js の 220 行目に br タグを挿入する処理を追加します。



次に、細かい話なのですが、IE などのブラウザでカレンダーアイコンにカーソルをあてると、「Calendar」とツールチップに表示されます。これを「カレンダーから入力」という日本語表示に変更します。


vendor/plugins/calendar_date_select/lib/calendar_date_select/form_helpers.rb の 202 行目に alt 属性を追加します。



以上、日本語化した結果は以下の通り。


calendar3.png


DateHelperJa プラグインを Rails 2.3.2 上で動作確認

date_select/datetime_select を日本語表示させる Rails プラグイン DateHelperJa が Rails 2.3.2 でも動作することを確認しました。


Rails のバージョンがあがるたびにテストアプリケーションを作って、DateHelperJa プラグインをインストールして、date_select を使うようなモデルを作成して、といったルーチンワークをいちいちおこなうのは面倒です。


そこで、Rails 2.3 より使用可能になったアプリケーションテンプレート機能を使い、以下のコマンドを実行することで即座にサンプルアプリを作成できるようにしておきました。



% rails sample -m http://github.com/elm200/date_helper_ja/raw/master/templates/date_helper_ja.rb


参考:

» DateHelperJa プラグインで date_select/datetime_select を和暦に対応させる : 僕は発展途上技術者


プロフィール

株式会社まちクエスト代表、つくる社LLC代表。

Scratchで楽しく学ぶ アート&サイエンスRaspberry Piではじめる どきどきプログラミングを書きました。

オンラインコンテンツ: 大人のためのScratch

Amazonから図書館検索 Libron、iPhoneアプリ ひらがなゲーム かなぶん を作っています。

Email: webmaster at champierre dot com

Twitter @jishiha

最近のエントリー

アーカイブ