コミュニティ: mixi || ☆たるさんのパソコンフィールド | Ando's Processor Information Page | Google IT勉強会カレンダー
番組: || NHK SPECIAL | TOP RUNNER | BSマンガ夜話 | BSアニメ夜話 | NHKアニメワールド | テレビ東京 - Anime X-press
Googleも老舗とはいえ若い会社なのでクラスAどうしたんだー、と思ったんですが、分割分をお買い上げのようですか?
また他にも地域を意識したCDNのような分散DNS網を構築しているようで、興味深い記事になっています。
ということらしいです。
ちなみに私は、リソースを喰うJITを避けインタプリタで勝負するために、現実的なレジスタマシンにしたのではないか、と思っています。
また大半の処理はAPI化され、Native処理されるため、実質上のDalvikの遅さは問題にならないのだという判断だと思います。
Javaは遅いということはよく聞いていたけれど、ここまで差が開くとは思いませんでした。演算結果もあっているので、きちんと動いていそうですし。
マイクロベンチマークは必ずしも実際の性能ではないと思いますが、1つの評価として参考になると思います。
まぁあえて言うと、s/Javaは遅い/AndroidのJavaが遅い/の間違いですね(そういう意味だと思いますが...)。Java全般が遅いみたいに聞こえちゃう。この結果を見ると、Dalvikはあまり実行時最適化は行われていないのかもしれません。
開催しました。大まかにまとめてありますので、ご意見・ご要望などください。
keisuken atmark cappuccino.ne.jp か Twitter: @keisuke_n あたりによろしくお願いします。
もちろんこの日記のコメント欄でも構いません。
CassandraはKey-Valueストアデータベースで、ある意味な古くて新しい技術。
スケーラビリティを考えると、テーブルをJOINするような方向に向かうのはそろそろ限界という見解が多く、このようなKey-Valueストアなデータベースがもてはやされているように思う。
そして問題はこう言った基盤技術(をどうやって構築するか)よりも、どうやって使うかに移りつつある。
このあたりはむしろ古い人間の方が経験豊富だろう(以前ひがさんがそのようなことを日記で言っていた)。
ことTwitterに関しては特に複雑な情報を検索する必要はなく、こう言ったKey-Valueなデータベースでも十分という判断なんだろう。スケーラビリティを優先した結果だと思われる。
Twitterでちょっとだけ議論したのだけど、個人的にはViewのテンプレートにロジックは入れたくない。
テンプレートにロジックを入れるということはたいていの場合、Webデザイナと何がしかトラブルを持つことになる。実際経験している人は多いと思う。
そこで考えたのは、2つの方法を提供すること。
まず1つ目。Scalaで直接書け。
WEB-INF/views/foo/boo/Bar_hello.scala
val title = "Hello, world!"
val nameList = List("Foo", "Boo", "Bar")
<html>
<head>
<title>{title}</title>
</head>
<body>
<h1>{title}</h1>
{
if (nameList.length > 0)
<ul>{
for (name <- nameList) yield <li>{name}</li>
}</ul>
else
<p>No name list</p>
}
</body>
</html>
もう1つは、同じViewをロジックとテンプレートに明確に分ける。
ここでのミソは、テンプレートにロジックは入れないで、文書構造で表現すること。
WEB-INF/views/foo/boo/Bar_hello.scala
nameList = List("Foo", "Boo", "Bar")
render(
'title -> "Hello, world!",
'enableNameList -> nameList.length > 0,
'nameList -> nameList
)
WEB-INF/views/foo/boo/Bar_hello.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:wf="http://cappuccino.jp/webflavor/xhtml"
xml:lang="ja" lang="ja">
<head>
<title><wf:span id="title">title</wf:span></title>
</head>
<body>
<h1><wf:span id="title">title</wf:span></h1>
<wf:if id="enableNameList">
<ul>
<wf:for id="nameList">
<li><wf:span id="name">name</wf:span></li>
</wf:for>
</ul>
</wf:if>
<wf:unless id="enableNameList">
<p>No name list</p>
</wf:unless>
</body>
</html>
これだったら、テンプレートをそのままブラウザでみてもちゃんとサンプルが表示され、POHPテンプレートとして働く。
今までの経験から言うと、Viewでのロジックはそう複雑なことをさせないように、かつさせる必要はないので、
くらいあればいいと思う。
switch文相当は欲しいが、これってよく考えてみると(X)HTML文脈では分離されてしまうので、if/unlessを拡張する方向にする。
... <wf:if id="name" value="Foo"> ふー </wf:if> <wf:if id="name" value="Boo"> ぶー </wf:if> ...
これで十分だと思う。
追記: やはりswitch欲しいかなと思ったけど、よくよく考えてみると、
Scala側(ロジック):
render( ... 'nameCondition -> if (...) "Foo" else if (...) "Bar" else "default" ... )
と分岐条件で何か条件名を渡しておき、
<wf:if id="nameCondition" value="Foo">ふー</wf:if> <wf:if id="nameCondition" value="Boo">ぶー</wf:if> <wf:if id="nameCondition" value="default">それいがい</wf:if>
という風に分岐させればいいかなと。Scala側のロジックではif式を使っていたが、ここはパターンマッチでもよい。
それからViewを階層構造にしたい場合は、
という感じにする。renderメソッドは明示的にテンプレート名も渡せるようにするので、
render(
'title -> "Hello, world!",
'header -> render('header, ...),
'affiliate -> render('affiliate, ....),
'footer -> render('footer, ...),
)
とすると。まぁあんまり複雑になったら対処できないような気もするので、そういう場合はコンポーネント化する。
とりあえず2.8サポートはしないことにしています。これは仕事でWeb Flavorを使いたいことと、新機能を実装したバージョンを近いうちにリリースするからです。
Implicit Conversionやコレクションの継承などは今回排除することにしていますのでこのあたりの問題は解消できると思いますが、コレクション周りの互換性などの問題は相変わらず付きまとうので、両方のコードを共存させるのはあきらめたほうがいいのかもしれませんね。
サポートしないといっても2.8用のポートはしたいので、ブランチしてみますが、品質面での保証は一切しないので少しでも使えるようにするため、バグレポートやテストコードなど皆さんの協力をお願いしたいと思っています。
夏には2.8もリリースされているでしょうから、次次期バージョンでは2.8に正式対応したいですね:-)。
まぁその前にとりあえずレポジトリを立ち上げます。現在sourceforge.netにサイトを立ち上げていいるのですが、重たい、使い方がわからないなど様々な問題を考えると、自前で持っておいたほうがよさそうだという判断になりました。ホームページはsourceforge.netにしますが。
scala> val link = "http://examples.com/index?foo=abc&boo=cde"
link: java.lang.String = http://examples.com/index?foo=abc&boo=cde
scala> <a href={link}>W3C</a>
res2: scala.xml.Elem = <a href="http://examples.com/index?foo=abc&boo=cde">
W3C</a>
当たり前だが、ちゃんとエスケープされてるぜw。
やること、い〜っぱい(´д`)。