Posts Tagged ‘JavaScript’
Hoodie – noBackend実装のJavaScriptフレームワーク
進化の早いJavaScript界隈に新しいアプローチのフレームワークが登場しました。Jan Lehnardt氏が中心になって開発されているHoodieはフロントエンドとバックエンドを完全に分離する事でそれぞれの開発効率を最大限にするnoBackendの実装の一つです。Hoodieはサーバーサイド用のモジュールとクライアント用のライブラリの2つから成っており、サーバーサイドが起動している状態であればクライアント側からは例えば下記のコードだけでユーザの登録ができます。
hoodie = new Hoodie('http://localhost:6007/_api'); hoodie.account.signUp('joe@example.com', 'secret');
すでに登録されたデータを取得する場合は下記のようになります。
var type = 'task'; hoodie.store.findAll(type) .done(function (tasks) { // Do something with the tasks });
またHoodieはオフラインデフォルトという設計になっており、データはローカルに保存されてからバックグランドで転送されるようになっています。これによりモバイルアプリケーションなどで快適に動作するようになっています。
クライアントライブラリとサーバーサイドモジュールのセットで構成されたこのプロジェクトを「フレームワーク」と呼んでいいのかは少し迷ったところなのですが、どのような実装ができるのかを見たほうがわかりやすいでしょう。
またnoBackendのAPIを再実装すれば別の言語とデータベースを使いつつ、同一のクライアントライブラリを利用するという未来もありえそうです。現時点ではAngularJSとRESTの組み合わせの方が優勢かと思いますが、ユーザ登録やメール送信といったハイレベルな機能を定義した標準的なAPIが定着するとさまざまな問題が少なくなるのではないでしょうか。
関連:
Hood.ie: "noBackend & Off-line first" という考え方 – ワザノバ | wazanova
via:http://hood.ie/
TogetherJS – 埋め込むだけでサイトにチャットなどの機能を追加する
Hacker Newsを見ていたらMozillaの公開しているプロジェクトが話題になっていました。内容はシンプルかつ強力です。JavaScriptのコードを埋め込むだけでWebサイト上でチャットやカーソル位置の共有、音声チャットといったコラボレーション機能が使えるようになります。
TogetherJSは次のような機能をサポートしています。
- ビデオと音声のチャット
- テキストチャット
- カーソルとクリックの共有
- 共同ブラウジング
- ユーザ情報の共有
- リアルタイムコンテンツ同期
埋め込むだけで使えるというのはどういうことかと思いますが、実際にはJSで書かれたサーバサイドモジュールとクライアントサイドのスクリプトで構成されています。サーバーサイドを自分自身で稼働させる事も勿論できますが、サンプルとして貼り付けるコードについてはMozillaがホスティングしているhubというサービスをサーバーサイドとして実行されるようになっています。
プロジェクトに大きな貢献をしているIan Bicking氏はさまざまなJavaScriptのモジュールを公開しておりTogetherJSについても拡張可能な構成などに気をつけているようです。単純にサービスとして埋め込むだけではなく、リアルタイムコミュニケーションが肝になるサービスの実装などに利用できるかもしれません。
EmberJSに混乱している人が話題
EmberJSを頑張って理解しようとしたけど無理だったという苦労話のブログ投稿が話題になっていました。このブログ投稿を書いたのはハイクオリティなスクリーンキャストを集めているTekPubを運営しているRob Conery氏で、RubyやJavaScriptを中心に幅広い活動をしているようです。
彼は自分自身の努力が足りなかったか、飲み込むまでの時間に達していなかったという謙虚さを示しつつもTekPubにEmberのタイトルを掲載する為に努力をしていたようです。彼がEmberで理解できなったという点として下記のような点を挙げています。
- MVCだというけれど、なんか違う
- Controllerが結局、Viewをコントロールしてる
- ModelがController的である
- ルーティングとオブジェクトが複雑
- 命名規則が複雑(ネーミングガイドとケーシングガイドがある)
元記事ではコードの引用も多くされていますが、MVCの分離のアプローチとメリットに納得がいかないという様子です。Emberに触ったことの無い方も多いと思うのですが、一読してみると参考になるかもしれません。
via:http://wekeroad.com/2013/03/06/ember-confuses-me
C言語より高速なJavaScriptによるバイナリ操作が話題
JavaScriptなどのスクリプト言語は動作が遅く、最適なパフォーマンスを得るにはC/C++で実装しなければならないという常識に挑んだ先進的な講演が話題になっています。この話題の発端は2012年10月7日から10月8日までベルリンで開催されたJSConf.euでFelix Geisendörfer氏が行った講演です。
彼の講演の題材はnode.jsからMySQLに接続する為のバインディングのパフォーマンスに着目しています。2010年当時、node.jsにはMySQLのバインディングが存在しておらず、増井さん作のnode-mysqlモジュールが開発中の状態でした。このモジュールはJavaScriptでバイナリを解析しておりJavaScriptのみで開発されていました。この状況を受けてFelix氏が新たにnode-mysqlモジュールを新規に開発を始めました。このモジュールもJavaScriptでMySQLのプロトコルを処理しています。
続いて発表されたのがOleg Efimov氏のmysql-libmysqlclientバインディングです。こちらの場合はその名の通りC言語で実装されたlibmysqlを利用しておりパフォーマンスが大きく向上しています。
この圧倒的な性能差はちょっとした最適化で埋まるものではなさそうです。これにはFelix氏も心が折れかけ、「マテ、V8 ってコードをアセンブラにするんだろ?それってめちゃめちゃ速いんじゃないか?それになんだかんだいっても Node ならどんな問題でも解決できるんじゃないの?なに騙されてたの?(But wait … wasn’t V8 supposed to turn my code into assembly? And was it not supposed to be insanely fast? And wasn’t node going to solve all of my problems anyway? Had I been lied to?)」弱気になりつつも、気合を入れ直します。そして才気溢れるFelix氏はNode.jsの底力を信じてパーサーの改良を努力し、なんとlibmysqlを越えるパフォーマンスを実現します。
素晴らしい改善です。しかしなんと更に彗星の如く現れたバインディングがさらに圧倒的なパフォーマンスを見せつけます。それがBrian White氏が公開したnode-mariasqlです。
この性能差にはFelix氏の心も折れかけ、「もうCのバインディングに勝つなんて無理だよ…( maybe it’s time to finally give up and accept that I cannot compete with a well engineered C binding.)」と弱音を吐きかけますが、彼の更なる努力がJavaScript実装でmariasqlを越えるパフォーマンスを引き出します。
彼のパーサーの再実装から得られた知見は元記事の後半部分に記載されています。V8の特性に配慮したJavaScriptを書くことでの極限のパフォーマンスを実践したい方にとっては参考になるのではないでしょうか。というか、彼スゴすぎますね。
via:https://github.com/felixge/faster-than-c
変な日本語 in the web: 鉄棒.org
変な日本語シリーズ第二回は、Motorola Mobility(Google 傘下)がお送りする、JavaScript Tech Community 鉄棒.org です。
明後日の方向を向いたブランド名もさることながら、ど真ん中のプロダクト名: Ninja ですよ!しかも内容は昔の Flash の雰囲気をモダンなフロントエンド(HTML5 / JavaScript / CSS3)で実現し、Google Chrome App として実装。
Ninja とそれを実現している JavaScript フレームワークの Montage を中心にした、open-source community を立ち上げたいみたいですね。サイトの構造やドキュメントにはまだちぐはぐな部分があったりしますが、Github 上でかなり活発に開発は行われています。
このサイトが人気になったら、今後は job requirement に tetsubo experience とか書かれるようになるんでしょうか?日本体操協会は今から英語で FAQ ページを作るか、ドメイン紛争の準備すべきではないでしょうか。何れにしても目が離せません!
Google I/O 2012発 JavaScript高速化Tips集の日本語訳
既に「Google I/O 2012で公開されたJavaScript高速化Tips集 | IDEA*IDEA」や「JavaScriptパフォーマンスを上げるシンプルな13の最適化 | Act as Professional – hiroki.jp by HIROCASTER」で紹介されて話題になっていたJavaScriptの高速化TIPSがhosikitiさんによって和訳されています。
リストでまとめられたリストを日本語で見たいという要望に見事に応えてくれていました!
1.コンストラクタ関数内ですべてのオブジェクトメンバを初期化する
2.常に同じ順番でオブジェクトメンバを初期化する
3.Numeric型(31bitで表現される符号付き整数)を出来るだけ使う
4.0から始まる連続した値を配列のキーとして使う
5.巨大な配列(64000個以上の要素を持つもの)は予め確保せず、必要になったら随時追加する
6.配列要素を削除しない(特に数値配列の場合)
7.初期化されていない、あるいは削除済の要素を読み込まない
8.小さな固定サイズの配列の初期化には配列リテラル[]を用いる
9.小さな配列は予めそのサイズ分領域を確保しておく
10.数値配列に数値以外の値(オブジェクト)を格納しない
11.関数の中の動きが単一になるようにする(ポリモーフィズムは避ける)
12.try {} catch {} ブロックは使用しない
13.関数作成後に構造を変えない(Chromeが実行時に作成するクラスが変わってしまう)
元記事ではもう少し詳しい説明と動画などへのリソースもまとまっています。是非hosikitiさんの記事にもブックマークやコメントをどうぞ!
via:http://www.jonefox.com/blog/2012/07/10/13-javascript-performance-tips/
Zoomooz でズーミング・インターフェース
ジェフ・ラスキン氏の息子である、エイザ・ラスキン氏 (@aza) が twitter への投稿で zooming インタフェースを簡単に実現する JavaScript ライブラリを紹介していました。
Zoomooz.js: Make any web page zoom.
そしてそれを旨く使ったインフォメーション・グラフィックをフランス社会党が掲載しています。
内容ごとのブロックをクリック、矢印キー、あるいは、画面下部のテーマセレクタを使ってナビゲーションできます。
フランス語で詳しいことはわからないかもしれませんが、こういうインタラクティブなページは見て楽しいし、ひとつひとつの論点が明確なので、記憶に残りやすいです。近年のオンラインメディアでは静的/動的なインフォ・グラフィックスが盛んに使われています。インタラクティブなものだと NYTimes はだいぶ前からいろいろと話題を提供してきましたが、今までそれらはみんな Flash で作られていました。最近はやはり JavaScript ですね。
ちなみに製作は Datagif というクリエイティブスタジオで、使われているフォントはフランス社会党オリジナル(!)の Jaures ファミリーのようです。
正しいJavaScriptの変数名の話をしよう
「var π = Math.PI;
が文法的に正しいJavaScriptだと知っていますか?」という書き出しで始まるJavaScriptの変数名についてのエントリが話題になっていました。エントリーを書いたのはベルギーのフリーランスWEB開発者のMathias Bynensさんです。彼はUnicodeのどんなグリフが識別子として利用できるのかECMAScriptの仕様を見てみることにしたそうです。
ECMAScript 5.1によれば:
識別子は予約語ではない識別できる名前
となっており、直接記号やグリフについての制約には言及していません。元記事ではさらに予約語や識別子に使用できる文字の例外などについて解説した後に、下記のようなコードが有効なJavaScriptの変数名であるとして紹介しています。
// How convenient! var π = Math.PI; // Sometimes, you just have to use the Bad Parts of JavaScript: var ಠ_ಠ = eval; // Code, Y U NO WORK?! var ლ_ಠ益ಠ_ლ = 42; // How about a JavaScript library for functional programming? var λ = function() {}; // Obfuscate boring variable names for great justice var \u006c\u006f\u006c\u0077\u0061\u0074 = 'heh'; // …or just make up random ones var Ꙭൽↈⴱ = 'huh'; // While perfectly valid, this doesn’t work in most browsers: var foo\u200cbar = 42; // This is *not* a bitwise left shift (`<<`): var 〱〱 = 2; // This is, though: 〱〱 << 〱〱; // 8 // Give yourself a discount: var price_9̶9̶_89 = 'cheap'; // Fun with Roman numerals var Ⅳ = 4, Ⅴ = 5; Ⅳ + Ⅴ; // 9
最後にもう一個あったのですが、うまくペーストできなかったので割愛しています。ブラウザ固有の不具合などで動かない場合もあるようです。これらの知見を元に作成されたと思われる変数名チェッカーもあるので触って試すこともできます。
このような先鋭的な変数名を使う機会は無いかと思いますが、デバッグなどには役に立つ知識ではありそうです。
via:Valid JavaScript variable names · Mathias Bynens
2011年の定番オープンソースソフトウェアリスト(開発編)
日常の開発に欠かす事の出来ないソフトウェアといったら何が思いかびますか?数多くのソフトウェアの中から昨今のトレンドを元にInfoWorldがセレクトした2011年のオープンソフトウェアランキングが発表されていました。10本のソフトウェアに選ばれたのは下記のソフトウェアです。
- CakePHP
Ruby on Railsの影響を受けたPHP用のフレームワーク。習得の容易さとコミュニティの活発さで人気。 - CoffeeScript
インターフェースやサーバーサイドに欠かす事のできないJavaScriptをより記述しやすくする中間言語 - git
バージョン管理の標準になりつつある分散型SCM - hadoop
大規模分散処理を実現するフレームワーク - Hudson / Jenkins
継続的ビルド(Continuous Integration)を行う為のサーバーソフトウェア - jQuery mobile / Sencha Touch
スマートフォン向けのUIを実装する為のフレームワーク - MongoDB
NoSQLデータベースの中でも抜きん出ているスキーマレスデータベース。 - Node.js
サーバーサイドまでもJavaScriptで記述しスレッドを使わない事で効率的なメモリ利用を実現する。 - Web2py
デポール大学のMassimo Di Pierro氏が開発した使いやすくパワフルなWEBアプリケーションフレームワーク
どのソフトウェアも大きな知名度を持ち、実際の活用を聞く事が増えて来たようなものではないでしょうか。選定の条件はいまひとつ不透明ではありますが、この中で利用した事がないものがあれば一考の価値はありそうです。なおリンク先にはデスクトップアプリケーションやデータセンターソフトウェアなどのランキングも掲載されており、7ZipやEucalyptusなどが選定されています。
iOSにものすごくそっくりなJQuery Mobileのテーマ
最近話題になることの多い、JQuery Mobileを使ってiOSにそっくりな外観のテーマが作成されたようです。そのそっくり具合はデモを見れば一目瞭然です。ネイティブアプリケーションに限りなく近いUIを独自に再現する際には使えるかもしれません。
また簡単なモックアップをPCベースで作るというような応用もできそうですね。
作者のTait BrownさんはメルボルンのUIデザイナーでコードとサイトはgithubで公開されています。
via:http://taitems.tumblr.com/post/7240874402/ios-inspired-jquery-mobile-theme-jquery-mobile