2014年5月23日金曜日

[Google I/O 2014] 今年のGoogle I/OはPolymerがアツいっぽいよ。

当選!

幸運にも、Google I/O 2014のチケットが当選したので参加できることになりました。
今年は開発者向け情報ページの各所に、秘密のチケットにつながるURLが隠されてたみたいですね(URLを探しまくった英語圏の人のブログ)。

周りの人はみんなダメだったので、一人旅になります。不安だ。。。
とりあえず、現地からはこのブログかツイッター(@neko_machi)にてできるだけ状況を垂れ流してみたいと思います。
日本から参加される方、ことに同じような境遇の方、どうぞ仲良くしてください。

さ〜て、今年のI/Oは?

さて、セッションスケジュールが公開されたので中身をざらっと見てみました。
おおまかに、以下のようなテーマが幅を利かせてるようです。

  • UX(Design)
  • Wearable(Android Wear, Glass)
  • Polymer
  • Performance
  • How to Success with Your Apps

あとはまあ、言うまでもなくAndroid、Chrome、GCPなどの製品ですね。
公開されたセッションスケジュールについて論評している記事としては、以下の記事がいい感じかもしれません。
http://arstechnica.com/gadgets/2014/05/google-io-schedule-mentions-android-wear-and-camera-api-disses-google/

各所で言われているのは、前までのGoogle+推しはどこ言ったんだ?ってことですね。まー、流行らなかったんじゃないすかね。。。

本命:Wearable

やっぱり今一番注目されてるのはウェアラブルですよね。
ただセッションスケジュールを見るに、ここ何年もバズりまくったGoogle Glass、ではなくてAndorid Wearをメインに据えてくる雰囲気。

Android Wearとはその名の通りウェアラブル端末用のGoogle印のOSで、既に発表されているLGのG WatchやMotorolaのMoto 360などの時計型デバイスに搭載されるもの。
それってGlassに載ってるやつ?と聞きたくなるんですが、いまのところは違うそう。
GlassがiOS/Androidデバイスとはわりと疎な関係であるのに対し、
Android WearはAndroidデバイスと常にペアリングして動作することを想定していて、子機というか出先機関として動くみたいですね。

Googleによるプロモーションビデオは一見の価値ありです。

ウェアラブルってスマホじゃだめなの?というもっともな疑問に対する答えのひとつがここにある気がしますね。iWatchはどう出てくるんでしょうか。。。

対抗:Polymer

私はジャバスクリプターなので、ウェアラブルの次にアツいのはこれだと思います。
一口に言えばHTML5のWebComponents(と同じ動作)をクロスブラウザで実現するライブラリ・・・だと思う(まだきちんと調べてない)。
WebComponentsは、何年か前からWeb界隈を騒がせてきたHTML5のWebXxxsシリーズの中でもわりと最近出てきたニューフェイスです。

最近流行りのJavaScriptリッチなWebページを作成しようとすると、どうしてもHTMLやらJavaScriptやらCSSやら、いろんな記述が跳梁跋扈する複雑怪奇なものになりがちで、
それを整理するためにBackbone.jsをはじめとしたJavaScript画面フレームワークが出てきたわけなんですが、
そういうごまかしじゃなくて、HTMLやDOMそのものを構造化・コンポーネント化されたものにしようというための機能がWebComponentsですね。

WebComponentsについては、このあたりに敏感なLIGさんとこのブログにわかりやすく書かれています。
http://liginc.co.jp/web/html-css/html/58267

ただ、他のWebXxxsシリーズがそうであったように、WebComponentsもまだまだモダンブラウザの最新バージョンに暫定的な実装があるという程度なので、
そのへんを吸収しつつ、WebComponentsに関係する便利な機能を提供するのがPolymerの役割ということのようです。

おみやげはMoto 360を所望

I/Oへのチケットを手にした幸運な開発者にとっての、そしてそれを見守る世界中のギークたちにとっての毎年のお楽しみ、GoogleからのI/O土産。

去年はGoogle Glassへの期待が盛大にふくらんでいたところにChromebook Pixelがきて、(それ自体はけっこう高価なものなんですが)ズコーッというずっこける音がネット上のいろんなところから聞こえてきた気がしたんですが、

今年もたぶん、Google Glassはもらえないんじゃないかなーと思っています。
まだまだちょっと早すぎる気がするんですよね。あと1回はハードウェアのアップデートが必要だと思います。

そのかわり、
  • セッションスケジュールにおけるAndroid Wearの推しっぷり
  • 初のAndroid Wear搭載機Moto 360は7月上旬発売
  • https://www.google.com/events/io/sandboxの中程、いろんなデバイスが並んでるところにしれっとMoto 360とおぼしき丸い輪郭のAndroidウォッチが
というところから今年のおみやげはMoto 360!と予想しておきます。
てか、単純にMoto 360欲しい。。。

でもって、こいつはAndorid4.3機がないとほぼ役に立たないので、なにかAndorid端末がセットになっていると嬉しいですね。
おや、そういえばそろそろNexus6のうわさがありますが、これはもしや・・・?

アホか!と言われそうですが、個人用にAndroid端末を所持していないので(林檎信者なもので)、紳士のたしなみとしても1台持っておきたく、そのへんも期待しちゃいます。

という感じで、いまから皮算用をしているわけです。


さあ、幸せな気分で、無事に帰ってこれることを祈りましょう。南無。


2014年5月11日日曜日

[Gremlin] OrientDBをGremlinから使うとaddEdgeしても反応がない!?

OrientDBは、オープンソースのグラフDB(かつドキュメントDB)である。
グラフDBといえばNeo4jなんだけど、やんごとなき事情によりOrientDBを使ってみることにしたらタイトルの件でハマった。

簡単な用語説明

グラフとは?:

Excelのアレではなく、点と点を線が結ぶアレ。

グラフDBとは?:

いわゆるDBであるところのRDB(MySQLとか)は、データを表形式として扱うようデザインされている。
グラフDBは、データを点と点と線の繋がりとして扱うようにデザインされている。
データの一覧を上から下まで流し見るようなクエリは苦手だが、あなたの買った本を買ったユーザが買った本の・・・みたいに、繋がりをずるずると解決していくようなクエリが得意。

Gremlinとは?:

グラフ処理関連製品を黙々と開発し続ける謎の開発者集団TinkerPopがリリースしたグラフクエリ言語(正確には、スクリプト言語的にグラフクエリを行うためのフレームワークって感じ)。
夜に食べ物を与えてはならず、水を掛けてはいけないアレが名前とキャラクターのモチーフのようだ。

事象

VertexとEdgeをいくらか作成するようなGremlinスクリプトを流すと、Vertexはきちんと増えているんだけど、Edgeの数(g.E.count()の結果)が0と出る。またg.Eの結果がなにも帰ってこない。
公式サイトから落とせるバイナリのバージョンがまだrcなのでバグなのか!?とか、
もしやVertexとEdgeでパーミッションが別で、Edgeの書き込み権限だけないのか!?とか、
いろいろ想像と調査をめぐらした結果、ずばりの事象についてGitHubのWikiに書いてあることがわかった。

要約すると、OrientDBで、設定がデフォルトの状態で、propertyを含まないEdgeを追加した場合、
直接参照できない"LightWeightEdge"、つまり「見えないEdge」が作成されるというのである。

Edgeは追加されていないのではない。見えないだけなのだ。えぇー・・・。

もっと正確に言えば、Gremlinのg.Eから参照できないというだけで、たとえばg.V.outEとかやると、g.Eに期待する結果と同じものが取得できたりする。

回避策

この状況を回避するためには、「見えないEdge」を作ってくれるおせっかいモードを以下のようにオフにすればよい。
g.setUseLightweightEdges(false)

これはaddEdgeするとき等、書き込む場合に効く設定なので、すでに「見えないEdge」を作ってしまった状態でこれを実行しても見えるようにはならない。
この設定を入れた状態でaddEdgeをすると、propertyが空でもg.Eで参照できるEdgeができるというわけだ。
また、この設定は現在のセッションにだけ有効なので、気になる場合には
g = new OrientGraph(...)
g.setUseLightweightEdges(false)

のようにGraphインスタンスの生成とセットにしておくと良いかもしれない。
ただし、propertyのないEdgeを大量に作成するようなスクリプトを流す場合は、この設定は入れないほうが速い。
でもそうすると作成されるのはLightWeightEdgeになっちゃうから痛し痒しである。


以上。なかなかやらかしてくれるわい。