zephiransasのチラシの裏

とあるJava/Rubyプログラマのメモ代わりブログ

牡蠣駆動勉強会を行いました

これは大都会アドベントカレンダー2013の12/23分のエントリーです。

前日は @mao_instantlife さんの岡山のお気に入りな飲み屋

明日は @kotanin さんです。

大都会岡山には、皆さんご存知のように様々な勉強会が存在します。今回はその一つである牡蠣駆動勉強会を紹介します。

oister

牡蠣駆動勉強会はその名の通り(?)牡蠣を食べる勉強会です。

大都会岡山には牡蠣の産地として有名な日生がありますが、そこにある「五味の市」では、毎日採れたての新鮮な牡蠣を購入することができます。値段はだいたい1kg/¥1,000程度で殻付きの牡蠣を購入できます。某氏は¥2,000分ほど買って、売り子のおばちゃんと交渉してオマケをゲットしたようですがw

またこの牡蠣は持ち帰って食べるだけでなく、現地にあるBBQスペースを借りることで、その場で食べることもできます。今回の勉強会の目的は、そのBBQスペースを使って美味しい牡蠣を食べることです。ちなみにこの時期の牡蠣は身が大きいので、他の場所で食べるときっといいお値段がするんじゃないですかね?

BBQスペースは五味の市の近くにある、海の駅「しおじ」というところでBBQスペースを¥1,000で90分借りることができます。ここでは必要なものがひと通りセットで提供されていて、受付で

  • トング
  • 牡蠣メス(牡蠣を開けたり、貝柱を切る専用のツール)
  • 軍手
  • 割り箸&紙皿

などを渡してくれます。席にはすでに火をおこした炭が準備されているので、特になにも持って行かなくても楽しめますが、上級者になると、ポン酢などのおこのみの調味料や、おにぎりを持ってきて焼きおにぎりにしたり、ビールを飲んだり、更にはワインを飲んだり(!)等々、楽しみかたはいろいろあります。 しおじには牡蠣以外にも、ホタテや海老などの海産物も売っていますので、お子様でも安心です。

というわけで、牡蠣駆動勉強会の紹介でした。ぜひ、シーズン中に行ってみてください!

Illumination Photo Advent Calendar 2013

これはIllumination Photo Advent Calendar 2013の12月21日分のエントリです。

自分にしては珍しく、非技術系のアドベントカレンダーに参加してみました。

ところで自分は大都会岡山在住なのですが、岡山の観光名所といえば「後楽園」です。倉敷の美観地区とならび、有名だと思います。

後楽園は昼間も良いのですが、実は春夏秋冬のそれぞれシーズン始めには園内でイルミネーションをやっていて、夜間も開園していたりします。

今回はその後楽園のイルミネーションを紹介したいと思います。

後楽園では、元旦より後楽園初春祭な行われ、お正月ムードの日本庭園を楽しむことができます。お近くにお越しの際は、ぜひ寄ってみてはいかがでしょうか。

色んなバリエーションのirofさんを紹介しよう

これはirofアドベントカレンダー2013の12月13日分のエントリのようです。

昨日は@akuraruさんの「いろふさんの描かれていない領域には何があるのか」でした。

このアドベントカレンダーは先日、急にJJUGの某幹事からQBKで振られたものです。

正直ネタを思いつかないだろうなーとおもいつつ、昨日の@akuraruさんのネタを見て、衝動的に思いついたので、書いてみます。

皆さんご存知の用にirofさんには様々なインスタンスが存在しますが、それと同時に様々なバリエーションも存在します。BANDAIを始めとするおもちゃメーカーからもこぞってirofさんグッズが発売されていますが、今回はそのバリエーションの一部を皆さんにご紹介したいと思います。

シャア専用irof

char_irof

シャア専用です。赤いです。3倍早いです。通常の3倍の速度でテストを書いてくれます。便利ですね。ぜひうちの会社に欲しいものです。

量産型irof

eva_irof

量産型です。空から降ってきて、人の黒歴史に干渉します。ちょっとイヤですね。

金剛型戦艦99番艦 irof

kongou_irof

金剛型戦艦99番艦のirofデース!!

まとめ

GIMP難しい

JavaOne2013報告会@岡山を開催しました

これはJava Advent Calendar2013の12月7日分のエントリです。

前日は@muraken702さんの「RxJavaを使ってCallback Hellから脱出する( Vert.x がいいね!第5回 )」でした。

次の日は@nabedgeさんの「Mixer2のSpringMVC連携機能がver 1.2.17でさらに進化!」です。

先日12/5に、岡山国際交流会館にて、JavaOne2013報告会@岡山を開催しました。そのレポートです。

DSC_2060

今回は初めて、平日の夜に勉強会を開催しました。というのも、講師の寺田さんが昼間は岡山市内の某SIerにて社内向けにJavaOne報告会を行い、そのまま夜はコミュニティ向けの報告会をやる、といった事情があったためでした。

前日までの参加登録では、9人の予定だったのですが、当日はちょっと増えて、最終的には11人の方にご参加いただきました。ありがとうございます。

2時間という限られた時間のなかで、前半でJavaOne2013の報告と、後半ではWebSocketを活用したより実用的なアプリケーションの開発モデルを紹介していただきました。

DSC_2066

JavaOne2013の報告の中ではRaspberry piなどにも注目が集まっているように、「Internet of Things」をキーワードに、Javaが組み込みにも大きく注力していることが印象的でした。現在は組み込みにはJavaMEというJavaSEのサブセット版が提供されていましたが、これを将来的にはSEとMEの垣根をなくし、統合していく方針であるとのこと。これは次のメジャーバージョンで統一というわけにはいかず、少々時間がかかりそうではありますが、スマートフォンを始め、様々なデバイスがインターネットに繋がる時代においては、組み込み分野でも動かせるJavaの重要性は増していくように思いました。

DSC_2079

最後には、寺田さんのJavaOne土産をプレゼントするじゃんけん大会などもありました。

懇親会で、参加者の皆さんと話をしたときに感じたのは、JavaEEをもっと知りたいという話でした。今後、岡山Javaユーザ会でも、ハンズオンや勉強会などを通じて、JavaEEの啓蒙もしていきたいと感じました。

weinreでiOSのブラウザのデバッグを行う手順

モバイル対応のWeb開発をしている時、iPhoneやiPadのブラウザでのデバッグに苦労したことはないですか?

PCの場合であれば、Chormeのデベロッパーツールとかでかなり簡単にデバッグを行うことができますが、iOSとかのSafariではデバッグツールをつかうことができません。

そんな時に便利なのがweinreです。weinreを使うことで、iOS側で表示されたWebページのデバッグツールの情報を、PCから見ることができる大変便利なツールです。

今回はweinreの使い方を紹介します。

weinreのインストール

まずはweinreをインストールします。weinreはnpmで提供されているので、以下のコマンドでインストールします。 npmをインストールしてない場合は、先にnode.jsをインストールしてください。

1
$ sudo npm -g install weinre

自分の環境ではsudoを要求されたのですが、sudoなしでインストールできれば、それでもいいかと思います。

weinreサーバの起動

次にweinreサーバを、以下のコマンドで起動します。

1
$ weinre --boundHost 192.168.0.x

上記のboundHostにはlocalhostのIPアドレスを設定します。 weinreサーバはデフォルトの状態だとlocalhostからしか接続できません。この後iPad側から接続する必要がありますので、上記のようにboundHostを設定して、他のデバイスからも接続可能にしておく必要があります。

無事、起動できれば

1
weinre: starting server at http://192.168.0.x:8080

と表示され、8080ポートでサーバが起動します。早速これをブラウザから見てみましょう。

weinre_server

上記の画面が表示されれば、サーバが起動しています。

iOSデバイスでブックマークレットの登録

次に、iOSデバイスでweinreサーバへ接続するためのブックマークレットを登録します。直接ブックマークレットを作れればいいのですが、iOSではそれができないようなので、ここでは新規にブックマークを作成して、これを編集することでブックマークレットを作成しています。

まずiOSデバイスのブラウザでweinreサーバ(ex: http://192.168.0.3:8080)を開きます。 そして、以下のjavascriptをクリップボードにコピーしておきます。

bookmarklet

次にiOSデバイスのブラウザで適当なWebページを開き、それをブックマークしておきます。

そしてそのブックマークを編集して、先ほどコピーしたjavascriptをペーストします。

ios_bookmarklet

デバッグの手順

以上で全ての準備が整ったので、実際にデバッグを行ってみます。

まずはPC側のブラウザでweinreサーバを開き、接続中のクライアント一覧を表示します。

client

上記のリンクをクリックすると

client_list

このような画面が表示されます。iOSデバイスから接続されると、上記のTargets一覧に表示されます。

iOSデバイス側からは、まずデバッグしたいWebページを表示し、その後、先に登録したブックマークレットを実行します。するとTargetが以下のようになります。

connect

あとはこの画面から、普通にデバッグツールを使用することができます。

debug

当然、デバッグツール側でHTML要素を変更してやれば、それがそのままiOSデバイス側のブラウザに反映されますので

debug1

と変更してやれば、iOS側も

debug2

といった感じで、即反映されます。

補足

今回はiOSデバイスしか手元になかったため未検証ですが、当然Androidでも同様にデバッグすることができます。

TimeMachineで検証エラーが発生した場合の復旧方法

我が家の環境では、BuffaloのLS-XLシリーズというNASを使って、MBAのTime Machine環境を作っているのですが、最近よくこんなメッセージが出るようになりました。

error

これはApple純正のTime Capsule以外をTime Machine環境に使用すると出てくるらしいです。 しかもこうなってしまうと、「後でバックアップを作成」にしても再度同じメッセージが表示されるし、「新規バックアップを作成」を選ぶと、それまでのバックアップの履歴は全て消えてしまいます。

なので、この場合の復旧手順をメモっておきます。

まずは、Time Machineを一旦「切」にしておきます。

off

次にNASをマウントして、そのマウントポイントまでのパスを確認しておきます。自分の場合は「/Volumes/share/unicorn.sparsebundle」でしたので、以降はこれで説明します。

次にターミナルを立ちあげ

1
$ sudo chflags -R nouchg /Volumes/share/unicorn.sparsebundle

して、ロックを解除しておきます。次に

1
$ hdiutil attach -nomount -noverify -noautofsck /Volumes/share/unicorn.sparsebundle

と入力します。実行すると以下のようなメッセージが表示されます。

1
2
3
/dev/disk2 Apple_partition_scheme
/dev/disk2s1 Apple_partition_map
/dev/disk2s2 Apple_HFSX

この時の/dev/disk? の?部分は実行時の環境によって異なる数値が入っていますので注意。また、この次点でTime Machineイメージに対して修復処理がバックグラウンドで実行されています。そのログが/var/log/fsck_hfs.logに出力されています。復旧が終了したかどうかはそのログで確認するのでtailで眺めてやります。

1
$ tail -f /var/log/fsck_hfs.log

おそらくこんな感じ。

1
2
3
4
5
6
7
8
9
10
11
12
** Checking Journaled HFS Plus volume.
** Detected a case-sensitive volume.
   The volume name is Time Machine バックアップ
** Checking extents overflow file.
** Checking catalog file.
** Checking multi-linked files.
** Checking catalog hierarchy.
** Checking extended attributes file.
** Checking multi-linked directories.
** Checking volume bitmap.
** Checking volume information.
** The volume Time Machine バックアップ appears to be OK.

最後の「The volume Time Machine バックアップ appears to be OK.」が表示されればイメージの復旧は完了です。

終了したら、デタッチしておきます。

1
hdiutil detach /dev/disk2s2

ただこの状態だと、イメージ内部ではまだ壊れたままという情報が残っているため、これを修正します。

1
2
$ cd /Volumes/share/unicorn.sparsebundle/
$ vi com.apple.TimeMachine.MachineID.plist

とし、その内部の

1
<integer>2</integer>

1
<integer>0</integer>

に修正します。

これで全て完了です。Time Machineを「入」にして、バックアップを実行して、エラーが表示されなければ完了です。

え?根本的な解決になってない!ですって? そりゃTime Machineを買うしかありませんがな!!ww

Photo Leafをリリースしました

本日、フォトブック作成サービス「Photo Leaf」をリリースしました。

photo-leaf

Photo Leafは1冊¥500でフォトブックを作成できるサービス「TOLOT」と連携して、flickrにアップした自分の写真からフォトブックを簡単に作成できます。

Photo Leafの利用は無料ですので、ぜひ使ってみてください!

仕組みについて

具体的なPhoto Leafの仕組みですが、実際にはPhoto Leafだけでフォトブックを作れるわけではありません。

Photo LeafはTOLOTの連携ファイルを作り、これをTOLOTアプリに読み込ませることによって、flickrの写真からフォトブックを作成することができるサービスです。

TOLOTの連携ファイルにはフォトブックのタイトルなどの情報と一緒に、各ページに印刷する写真についての情報をセットしています。これには画像へのURLもセット可能ですので、これにflickrの画像ファイルへのURLをセットするようになっています。

この連携ファイルをTOLOTアプリで読み込むと、画像データをflickrからダウンロードし、フォトブックを作成する仕組みになっています。

ちなみに、Photo LeafはTOLOTのマネタイズAPIを使用していますので、皆さんがPhoto Leafからフォトブックを注文すると、その一部が私の収益になります。

実行環境について

サービスの開発には主に

  • Ruby 2.0
  • Ruby on Rails 4.0
  • FlickRaw

などを使用しています。Ruby2.0もRails4.0も最近リリースされたばかりですので、かなり新しいものを使用しています。特にRuby2.0は1.9系に比べるとかなりパフォーマンスが改善されていますので、Rails4.0と合わせることで、かなり高速に動作します。もちろん、自分の勉強がてらというのもあるのですが。

また実行時のプラットフォームとしてはHerokuを使用しています。

最初はSqaleも検討したのですが、まだ収益があがるようなものではないだろうなぁと思っていますので、できる限りコストをかけずに運用するには、現在のところはHerokuが最適と判断しました。

まとめ

最初にこのサービスを思いついたのは、InstgramからTOLOTの連携ファイルを作成するサービスを作られた方がいて、そこからTOLOTのマネタイズAPIを知ったことがきっかけです。

自分自身も写真をかなり撮るので、フォトブックにもかなり興味があったものあります。実際に、カメラのキタムラが運営している「フォト本」などで、フォトブックを作ったこともあります。フォト本は大きめのフォトブックを作るにはかなり良いサービスだと思うのですが、普段のスナップなどを手軽にフォトブックにしたい、といったニーズにはちょっと高い。TOLOTなら文庫本62ページのフォトブックを¥500で作成できるので、かなりコストパフォーマンスはいいと思います。

ぜひ、Photo Leafで自分の写真をフォトブックにしてみてください!

新しい写真の楽しみ方が、見つかると思います。

Java Day Tokyo 2013報告会@岡山を開催してきた

2013年6月15日(土)に、奉還町リブラホールにて「Java Day Tokyo 2013報告会@岡山」を開催してきました。

自分は「Java Day Tokyo2013基調公演より」と題して、報告をさせていただきました。

当日のTwitterのまとめは、こちら

その他、岡山Javaユーザ会の運営メンバーと、@soudai1025氏にはJJUG CCCの感想についてもセッションをしていただきました。また角田さんの会社の同僚お二人にもJava Day Tokyoに参加しての感想を話していただきました。

また東京からは櫻庭さんにも来て頂き、JJUG CCCでセッションされた「Project Lambda Essential」を再演していただきました。Java8で最も注目されている機能、Project Lambdaの大事なところを丁寧にお話をしていただきましたので、参加者の皆さんのLambdaに対する理解が深まったものと思います。

この後の懇親会でも次のネタについて、いくつか話あったんですが、個人的には次はハンズオンをやりたいかなーと思っています。

いまのセッション形式もいいのですが、それだとどうしても参加者同士で交流が深まらないように思っていて、これを改善するためにはハンズオン形式のほうがいいのではないだろうか、と考えています。 で、実際にやるとすればJavaEEとかJavaFXあたりを題材にして、ハンズオンをやろうと考えています。

RubyKaigi2013に参加してきた

5/30〜6/1まで、東京国際交流館で開催されたRubyKaigi2013に参加してきました。

RubyKaigiはRuby界では最大級のイベントですが、一度2011年をもって終了しています。それが今回はいろいろコンセプトを変えて復活した、ということで自分も参加してきました。

RubyKaigiについて

自分は今回が初参加なので、以前のRubyKaigiとの比較はできないのですが、他とは違うなと感じたのは以下のところ。

  • 参加費が(それなりに)高い

自分はSuper Early Birdでの参加申し込みだったので¥20,000でしたが、普通に登録すると¥35,000です。国内で行われるカンファレンスとしては少々高めです。といっても海外に比べたら、まだまだ安いのですが・・・

この値段設定についてもいろいろ意見はあるようですが、RubyKaigiクラスになると、ものすごい人数が参加したいと思うわけです。しかし、そのイベントを運営しているのはあくまでボランティアの人たちですので、そういった状況もあって「この値段を払ってでも参加したい」と思わせるコアなRubyistを呼びたかったのではないかな?と想像しています。

  • メイン言語は英語

@kazuhisa1976氏曰く「世界を対象としたRubyのカンファレンスが、たまたま東京で開催された」

今回のRubyKaigiはインターナショナルカンファレンスとして開催されたので、英語がメイン言語です。公式サイトも英語ですし、セッションのほとんどが英語です。また、参加者も600人ほどいたそうですが、そのうち100人ほどが海外からの参加です。日本人スピーカーの場合に、日本語でセッションを行うこともありましたが、海外の人向けに日本語から英語への同時通訳(!)が準備されていて、このあたりもインターナショナルカンファレンスなんだなーとおもったことろです。

セッションについて

個人的に記憶に残ったセッションは

  • The Future of JRuby?
  • High Performance Rails

の2つ。

JRubyのセッションではJRubyのコアメンバーである、Thomas E. Enebo氏と、Charles O. Nutter氏が登壇。JRubyの高速化などについて話をしていました。で、気になったのがスライド中あったDalvik Generationという文字!将来JRubyでDalvikVMをサポートするような日が来るんでしょうかねぇ・・・

High Performance Railsではクックパッドのエンジニア、成田一成氏によるRailsの高速化の話。超巨大なクックパッドを如何にして、パフォーマンスアップさせているかという内容。

こちらの資料にはセッションで話した内容に、キャッシュの話がプラスアルファされていますので、参考までに。

Conclusion

自分にとってはこれが初めてのRubyの大きなカンファレンスへの参加でした。最初はJavaとはまた違う雰囲気なんだろうなぁと思っていましたが、それほど大きな違いというのは正直感じませんでした。当然、自分はRubyのコミュニティには知り合いがいるわけではないので、ボッチ率高かったのですがw

ちなみにRubyKaigiは2014年も開催されるらしいです。今から楽しみですね。

RubyKaigiで撮った写真はこちらにまとめてます。 http://www.flickr.com/photos/zephiransas/sets/72157633895505417/

GlassFishのアップグレード方法

会社で使ってるJenkinsさんはGlassFish上で動いているんですが、これのアップグレードを行ったので、そのメモ。

具体的にはGlassFish 3.1.1からGlassFish 3.1.2へアップグレードしました。

updatetoolのインストール

まずはアップグレードに使用するupdatetoolをインストールします。

方法はasadminと同じディレクトリにある、updatetoolを実行するだけ。

初めてupdatetoolコマンドを実行した際に、updatetoolをインストールするか聞いてきますので、yを押してインストールするだけです。

ちょっと時間がかかるので、アニメでも見ながらゆっくり待ちましょう。

updatetoolからGlassFishのアップグレード

上記の手順でupdatetoolのインストールが終了したら、もう一度updatetoolコマンドを実行します。するとGUIが立ち上がって来ますので、以下のようにするだけ。

updatetool

あとは

1
$ ./asadmin version

などで、アップグレードできていることを確認しましょう。