姫路IT勉強会でGitの話をしてきた

去る10/20に、姫路市民会館で開催された第10回姫路IT勉強会で、Gitについてセッションをやってきました。
資料は以下

姫路IT勉強会は第1回にお邪魔しただけだったんですが、皆さん覚えていてくださって、あまりアウェー感なかったので、よかった^^;
しかし、しばらく参加してない間に、もう10回も開催されてたんですね・・・コンスタントに開催されているのは、凄いことだと思います。

今回Gitの話をしたのは、Twitter上で @aWebprogrammer さんが、Gitを布教していというようなことをおっしゃっていたので、それなら話しに行けますよ?からの流れ。
@aWebprogrammer さん、ありがとうございます!

意外だったのが、画像の差分についてのニーズが結構あったこと。
自分があまりデザイナーさんと協業するってことがないので、これは盲点でした。
こういった場合はGithubであれば、差分を確認することもできるので、Githubを利用したいですねー

テスラ・ロードスターで行く世界遺産の旅

というわけで前回の試乗編に続き、今回はその試乗コースの目的地だった、石見銀山への旅の記録です。

クルマ受領まで

実は今回の旅、当初は島根の温泉津温泉をスタートし、広島市内の原爆ドームへ行き、その後尾道でクルマ返却というコースでした。ただ、皆さんご存知のように8月6日といえば、広島に原爆が投下された当日。市内では様々な行事が行われ、混雑が予想されるため、急遽予定を変更して「福山発→石見銀山出雲市」のコースに変更しました。

まずは岡山駅で今回の旅に同行してくれる、 id:tech-kazuhisa 氏と合流。その後新幹線で福山まで。
予定では9時に福山城の駐車場ということだったんですが、それらしき駐車場が見当たらず、結局福山城をグルリと一周することに。で、待ち合わせ場所が分からずに途方にくれていたところ、駅前から異様なクルマが一台くるではありませんか!
そう、これがテスラ・ロードスターです!

最初にクルマの取り扱いについて、担当のDさんに説明を受けます。盛り上がってきますね。

キーを受領していよいよ旅のスタート!・・・と行きたかったのですが、なぜかセキュリティがうまく解除できずに、警告音が鳴り響くwww
しかもここ、福山駅を出たばっかりのところで、しかもこのクルマ。
目立つ目立つwwww

慌てて、Dさんに電話してようやくのことでセキュリティを解除して出発することができました。

石見銀山まで


福山から石見銀山までは、福山西ICから尾道自動車道を経由して、国道184号を通り、国道375号を走るルート。
このルートは山間部が中心になるので、適度なワインディングがテスラの実力を試すには持って来いのルートだったように思います。自分にとっては初めての電気自動車であることも忘れて、普通に走りを楽しんでしまいました。
特に尾道自動車道から国道184号は景色も素晴らしくオススメです!


石見銀山にて

石見銀山では龍源寺間歩を見学してきました。
まずは駐車場についてから、遅めの昼食。御前そばというところで、鴨つけそばを頂きました。

ただ近くにはあまり食事をする所がないので、食べてから行ったほうがいいかもしれませんね。

石見銀山周辺には、間歩と呼ばれる、銀を採掘するための坑道があります。大きさも大小様々で龍源寺間歩のようにお寺が管轄していた大きな間歩から、個人で採掘していたであろう小さな間歩まで、たくさんの坑道があります。
龍源寺間歩までの道にも、道路脇に人一人がやっと通れる程度の小さな坑道がいくつもありました。
ちなみに駐車場から龍源寺間歩までは、片道徒歩で約30分ですのでかなり歩きます。なので子ども連れの方の場合は、レンタサイクルを借りるなどしたほうが無難です。
ちなみに自分は普通に歩いていったので、かなり大変でしたw

龍源寺間歩はちょっと見どころが少なかったのが残念。でも、世界遺産としての保護をしつつ、観光地として公開もしてるわけですから、こんなものなのかな?とも思いました。
中は非常に涼しく(半袖だと寒いぐらい!)かつ湿度が凄く高いです。昔の人はこんな過酷なところで作業してたんですねぇ・・・

石見銀山から出雲へ


石見銀山から出雲へは、国道9号線日本海沿いの道を走るルートで。この国道9号も実に爽快です。途中、意味もなく海に寄ったりなどしながら、ゆっくり時間をかけて出雲へ向かいました。左手に日本海を眺めつつ走るテスラ・ロードスターは最高でした!











また、この国道9号線には風力発電の風車がいくつもあります。クリーンな風力発電の風車を眺めつつ、クリーンな電気自動車を走らせるというのも、なかなかの贅沢です!




















まとめ

以上、前回の試乗編と今回を合わせて、テスラ・ロードスターのレポートは終わりです。

まずは、今回このような機会を与えて頂きました、テスラ・モーターズ様と、日程の調整などをして頂きましたDさんに、深く感謝申し上げます。
残念ながらロードスターはそろそろ販売終了してしまいますが、モデルSが日本でもたくさん見られる日を楽しみにしています。

また、今回のTwitterのつぶやきを以下でまとめています。

写真もたくさん撮っていますので、以下からご覧いただけます。

しかしテスラ・ロードスターは楽しいクルマだった!モデルSも乗りたいぞ!!

テスラ・ロードスター1日試乗記

城から走り出す電気自動車

午前9時、待ち合わせ場所の福山駅の北口。駅を出てすぐ前には福山城の城壁が見え、それとなく歴史を感じさせる街並みだ。
そんな歴史の趣を感じさせる街に、否が応でも目立つクルマが一台、スーッと音もなくやってきて、我々の前に止まった。そう、これが今回自分達が試乗するテスラ・ロードスターだ。
低く、かつ少々派手なオレンジの車体も相まって、街なかで走るとやたらと目立つ。しかもほとんど音がしないものだから、街行く人たちからはかなり奇異に見えたことだろう。実際、試乗中でも視線を感じることは度々だった。
ちょっとした休憩のために寄ったコンビニでも、主におじさん達ががもの珍しそうに寄ってきて、興味深そうにクルマを眺めていた。
でも共通して言えるのは、ほとんど(というか全く?)の人がテスラを知らないということだった。まぁ、アメリカで生まれたばかりのベンチャー企業で、なおかつまだこのロードスターしか生産していないのだから、それを知らないおじさん達を責めるのは酷というものだ。

今回はそのテスラ・ロードスターを1日試乗することができたので、その模様をレポートしたい。

概 要


見る人が見ればわかるかもしれないが、テスラ・ロードスターの車体の基本的な部分は、イギリスにあるロータス社のエリーゼがベースになっている。といってもエリーゼの流用ではなく、ほとんどの部分を新たに設計し直しているらしい。シャーシの基本的な素材には軽いアルミ材を使用している。
更にボディは軽量化のために炭素繊維強化プラスチックを使用している。このボディはフランス製。またバッテリーはLGやパナソニックのものが使われているらしく、まさに世界中の様々なメーカーのパーツを結集して作り上げた1台といってもいい。
トランスミッションは1AT。完全にモーターのみで動くテスラにとっては変速機は不要で、ATと書くよりは、変速装置がないといったほうがいいかもしれない。当然、変速機がないことで速度が乗らないことはないし、むしろモーターの出力をダイレクトにタイヤに伝えることができ、かつ軽量化の観点からも、変速機がないということはメリットだ。


また、ここまでの徹底した軽量化をおこなうには訳がある。それはバッテリーの重量だ。
テスラ・ロードスターのバッテリーは一般的なノートPCなどに利用されているリチウムバッテリーを使用し、これを約6000個搭載している。総容量は53kwで、これは三菱i-MiEVの3倍以上の容量。これによって、一回のフル充電で350kmの航続距離を実現している。しかしこのバッテリー、重量は実に450kgもある。
テスラ・ロードスターの全重量が約1,200kgなので、実にその3分の1をバッテリーが占めている計算になる。乱暴な言い方をすれば「電気自動車はバッテリーに車輪を付けた」と言っても過言ではないぐらい、電気自動車にとってバッテリーは重量物なのだ。
しかしテスラ・ロードスターではこの重いバッテリーを車体の中央部に寄せ、可能な限り低くマウントすることで、理想的な重量バランスと、独特のハンドリングを実現している。

ドライブフィール


コクピットの正面には、これが1000万オーバーのクルマとは思えないほど、質素なメータが並ぶ。向かって左が速度計&回転計。先ほど書いたように、テスラ・ロードスターには変速機がないので、回転計と速度が正比例するのだ。よって速度計と回転計を1つにまとめてしまえるのだ。右側にはバッテリーの出力計。真上は0を指し、ここからアクセルを開けると右に傾き、バッテリーからモーターへ電気を送っていることを示す。逆にアクセルを離すと回生ブレーキが効いて、メーターは左に傾く。モーターを逆回転させてエネルギーを回収するこの仕組みは、プリウスなどでもお馴染み。
ただテスラがちょっと違うのは回生ブレーキの効きが凄く強いということだ。これは敢えてそのようにチューニングしているように思える。なので最初のうちは戸惑うかもしれないが、一度慣れてしまえば、信号の停止時などもほとんどブレーキを使うこと無く停車させることもできる。つまりブレーキを踏む代わりに、アクセルを離せばいいのだ。これはちょっとした新感覚。
しかもこの回生ブレーキにはもうひとつの使い方がある。それはワインディングだ。


コーナーの入り口での減速時に、ブレーキの代わりにアクセルを離し回生ブレーキのみで減速し、フロントに車重を乗せながらステアリングを切る。あとは、コーナー出口で少しアクセルを開けながらコーナーから脱出する。モーターからのダイレクトな出力とバッテリーの重心が低いことも相まって、ガソリン車ではちょっと味わえない小気味いいテンポのコーナワークが可能だ。


まとめ


ここまで紹介したテスラ・ロードスターであるが、実は既に生産は終了していて、後はメーカーにある在庫分だけになったそうだ。担当の方にお聞きしたところ、右ハンドル車は残り2台程度とのこと。
スポーツカー好きとしては、こういったモデルを長く販売して欲しいというのが心情だが、テスラでは今セダンタイプのモデルSを販売する準備を進めている。なにぶん小さいベンチャーなので、複数のモデルを扱うのは無理があるらしく、そのためロードスターは生産を終了せざるを得なかった、という事情もあるようだ。

おそらく、そう遠くない将来、クルマは電気で動くのが当たり前の時代が必ずやってくるでしょう。それは一般のクルマだけではなく、モータースポーツの分野でも電気自動車が主流になる時代がくるかもしれない。F1だって、数年後には電気で走ってるかもしれない。それぐらいガソリンエンジンのクルマというのは今後、希少な時代になっていくでしょう。

そんな電気自動車が主流となった近い将来、はたしてテスラがどんなクルマを作り、自分がどんなクルマに乗っているか・・・・
今から凄く楽しみだな、とおもった試乗でした。

アラウンドエイリアスでbefore_destroyの挙動を変える

どうやらこのエントリは変態アドベントカレンダー in Summerの5日目のエントリのようです。
前の日のエントリ | 次の日のエントリ

実はワタクシ、このアドベントカレンダーは参加表明だけして、すっかり忘れてましたww 昨日の夜になって思い出したので、なにも仕込みがない状態で書いています。なので変態成分が薄めなのはマジカンベン。
でも変態分は他の人が補給してくれるから問題ないよね?(チラッチラッ

で本題。今回はなぜかRuby(というかRuby on Rails)の話。
ActiveRecordのbefore_destroyなどで処理をおこなうのは、サバンナ*1ではよくあったりする要求なのですが、これって大概同じような処理になることが多いです。でもコールバックの処理内容は自Modelにしか書けないので、複数Modelに似たような処理が記述されて非常にDRYじゃありません。
そんな時には、アラウンドエイリアスでこのような似通った処理をまとめてしまいましょう。

まずは、config/initializers辺りに以下のようにモジュールを定義します

module BeforeProcessExtension
  def before_process  #1
    define_method :destroy_with_something do
      #destroy前にやっておきたい処理を記述...
      self.destroy_without_something
    end

    alias_method :destroy_without_something, :destroy  #2
    alias_method :destroy, :destroy_with_something       #3
  end
end
ActiveRecord::Base.send :extend, AttachFileExtension

ちょっと解説。

  • #1 ここでこのモジュールをModelに組み込むための入り口になるメソッドを定義します。Modelからはこれをコールしてやります。
  • #2 ここが理解できれば、なんてことはない。alias_methodで本来のdestroyメソッドをdestroy_without_somethingという名前に変更してしまいます。
  • #3 そしてここで、destroy_with_somethingをdestroyメソッドに名前を変えてしまいます。

こんな風にエイリアスを付け替えることで、本来のメソッドにはない処理をすることも可能です。
あとはModel側で

class Employee < ActiveRecord::Base
  ...
  before_process
end

とか書いておけば、このEmployeeクラスのdestroyメソッドだけ、別の処理を行うことができます。

もしModel側から何かパラメータを渡したい場合は、モジュールのbefore_processを

def before_process(hoge)
  #引数hogeを使った処理
  ...
end 

と定義して、Model側で

class Employee < ActiveRecord::Base
  ...
  before_process "fuga"
end

このようにパラメータを渡してもおk

また、元のdestroyメソッドを呼びたい場合はdestroy_without_somethingメソッドを呼び出せばいいわけで、とっても楽ですね!
Rubyだとメソッドの名前も動的に変えられてしまうので、こんなことができちゃうんですねぇ・・・おそロシア
アラウンドエイリアスについては「メタプログラミングRuby」に詳しい*2ので、詳細はそちらで。

メタプログラミングRuby

メタプログラミングRuby

でもこれ既に絶版になってるんですよね・・・増刷してくれないんでしょうかね?(´・ω・`)

さて、次は dproject21 さんのようですよ。どんなド変態ネタが飛び出すか、今から楽しみですね!

*1:と書いてエンタープライズと読む

*2:というかそれ見て書いたw

GlassFishの監視ツール、LightFishを使ってみる

今日はLightFishの紹介です。

GlassFishの監視ツールであるLightFishがリリースされました。
LightFishはJava Championの一人である、Adam Bien氏によって開発されています。興味深いのは、監視ツールのGUIJavaFXで実装されていること。JavaFXのサンプルとしてもいい材料なのではないでしょうか。
というわけで、早速LightFishの導入を行なってみましょう。

サーバ側の準備

まずは、GlassFishにLightFishをDeployします。今回は以下の環境で試してみます。

ここで注意ですが、GlassFishはWeb ProfileではなくFull Platformを使用します。*1 *2
またLightFish本体のwarファイルを、こちらからダウンロードしておきましょう。

GlassFishの導入についてはここでは省略しますが*3、ここでは ~/glassfish3 に解凍したものとします。

まずはじめにGlassFishの組み込みデータベースであるJavaDBを起動します。JavaDBはLightFishから使われているデータベースです。

cd ~/glassfish3/bin
./asadmin start-database

次にdomainを起動します。

./asadmin start-domain

正常に起動すればlocalhost:4848でGlassFishの管理コンソールが使えるようになるので、ブラウザを立ち上げ

にアクセスしましょう。

管理コンソールが表示されたら、左のツリーからアプリケーションを選択し、デプロイボタンを押します。

"サーバーにアップロードされるパッケージ・ファイル"から、さきほどダウンロードしたlightfish.warを選択します。他の項目はデフォルトのままで大丈夫でしょう。その後、一番したの"OK"ボタンでwarをDeployします。
正常にDeployされたら、ブラウザから

にアクセスします。以下のような画面が表示されたでしょうか?

これはGlassFishの監視データをXMLで出力するサーバ側アプリケーションです。では実際に監視データを出力してみましょう。画面の"start"ボタンで監視を開始し、"Live Data"リンクをクリックします。するとXMLが表示されます。*4
これがサーバ側で作成している監視データで、これをJavaFXで作成されたクライアント側から定期的に呼び出して、画面の描画を行なっています。

クライアントの起動

それでは早速クライアントを起動してみましょう。クライアント本体は

  • ~/glassfish3/glassfish/domains/domain1/applications/lightfish/lightview-app.jar

になるので、これをコマンドで起動します。

cd ~/glassfish3/glassfish/domains/domain1/applications/lightfish
java -jar lightview-app.jar

すると、以下のような画面が起動します。

WebStartについて

気付いた方もいるかもしれませんが、サーバの画面でLive Viewというリンクがありましたよね?
あれは、じつはこのクライアントをWebStartで起動させるものなのですが、自分の環境ではうまく動かすことができませんでした。クリックすると以下の画面が表示されます。

最初はコマンドからlightview-app.jarを起動させることに気づかず、Webの画面から起動できないか四苦八苦していたのですがそこに、OracleJavaエヴァンジェリストの寺田氏と、Java Championの櫻庭氏からこんなツイートが・・・

まとめると

  • JavaFXのWebStartを実行するにはランタイムが必須
  • Windows版のJavaFXランタイムは提供されている
  • Mac版のJavaFXランタイムは未提供・・・
  • なので、現状ではJavaFXアプリケーションをWebStartさせることはできない

ということです。しかしその後、こんな情報もいただきました。

JDK7u6は現在Developer Previewが公開されているので、これを導入すればひょっとするとMacでもWebStartで実行できるかもしれませんね。


ということで以上、LightFishの紹介でした。どうぞ、お試しあれ。

*1:EJB Timer ServiceがFull Platformに含まれている

*2:でもWeb Profileでも後付けできる気がする・・・

*3:というか簡単なので説明するまでもないw

*4:うまく表示されない場合は、HTMLのソースを見ましょう

はてダでSlideshareのスライドが埋め込めない時の対処方法

先程遭遇した問題。
Slideshareが出力する埋め込み(Embeded)用HTMLが、はてダでうまく認識されない問題の対処方法

  • HTML中の「style="border:1px solid #CCC;border-width:1px 1px 0"」を削除する

でもこれ他のサイトだとうまくいくみたいだから、はてな側の問題かも?

岡山git勉強会でGithubのこと喋ってきた

タイトルの通り、第1回岡山git勉強会で初心者向けGithubの話をしてきました。

スライドはこちら

また、例によって勉強会の模様も撮影してしてきましたので、こちらからどうぞ。

Togetterのまとめはこちら。

自分は「Githubなら俺に聞け!」といえるほど使い込んでいないので、あくまで機能紹介程度で。
でも、とりあえずGithubがどんな機能を持っているのか、理解していただけたのではないかと思います。*1
GithubOSSに果たした役割は大きくて、特にForkの概念が大きいと思っています。これによって、メンテされない質の悪いOSSは淘汰され、逆にしっかりメンテされた質の高いOSSが提供されます。これはOSSにコミットする人にとっては、活躍の場を広げるチャンスにもなりますし、OSSを使う人にとっても安心できることで、それだけでもGithubの存在価値は大きいといえるのではないでしょうか。

ところで、最近自分は前でしゃべることにも慣れてきたのか、今回はあまり緊張らしい緊張はしませんでした。不思議!
少しづつ、自分も人前で話すスキルがアップしてきてるんでしょうかね・・・*2

*1:多分ね・・・

*2:でも、先日の社内LTのほうが圧倒的に人数が少ないにもかかわらず、スゲー緊張したんだけどね