上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2010/11/1より渋谷在住無職から改め、社会復帰を果たしました。勤め先が品川になったので品川への引越しを検討中です。

※このエントリは書き掛けで不十分な、或いは誤った内容を含んでいます

node.jsとは



node.js とは何か

node.js とは何か (2)

node.jsとは何か(3)

はい。このブログで敢えて書き足すような事はなくなりましたね。

敢えてまとめるなら、「GoogleChrome等で利用されているV8エンジン、libev・libeioといったライブラリを利用した、非同期I/Oが標準の高速なサーバサイドJavascript環境」なんでしょうか。

Javascript


日本男児たるもの一度はWAフレームワークを作ろうとするもの(出来るものが例え酷い代物だったとしても)だと思いますが、今時のWebアプリケーションを作る上で必ず悩むのはJavascriptについてフレームワークでどうサポートするかだと思います。クライアントサイドで動作する言語となると実質Javascriptが唯一の選択肢となります。(携帯端末等のためjs非対応環境も考慮に入れなければなりませんが)

翻ってサーバサイドJavascriptが広く使われる事は今まで無く、一つのフレームワークの中で二つの言語が混在するしかないという決してスマートとは言えない状況が長く続いてきました。しかし敢えてサーバサイドもjsに変えられる十分な状況が揃えば、Javascriptさえ出来ればサーバサイドもクライアントサイドも出来る・・人材の確保がより容易になる、であるとか諸々相応のメリットがあります。

或いはサーバサイド・クライアントサイドの言語が統一される事によって、新しく美しいWAフレームワークだって産まれるかもしれません。

Ajax時代の、サーバ<->クライアントで協調するMVCフレームワーク

「RESTful MVC」なアーキテクチャの話

ただ、前述した「使わざる得ない状況」を抜きにして果たしてJavascriptが今ほど広く使われるようになったのか、クラスベースの言語に比べてプロトタイプベースの言語が一般受けするか、は良く分かりません。

非同期I/O


Coroが何故重要であるか

軽量スレッドブームだと思うので、そこらへんの情報をまとめてみる

Websocket


Socket.IOライブラリの存在など、node.jsはWebsocketを利用したWebアプリケーションを作りやすい環境だと言えます。PC環境においてはまだまだ限られたブラウザでしか利用出来ないWebsocketですが、HTML5と同様にスマートフォン等では今後存分に活躍出来るかもしれませんし、スマートなCometとしてリアルタイム性の必要なアプリで利用されるかもしれません。

クローラ


リモートのリソースを取得する処理を、普通に書けば逐次処理になります。ファイルIOと違ってネットワークIOはレスポンスまで5秒ぐらいかかるサイトが混ざってるとか普通に有りえるので、より問題になりやすい領域ではあります。PHPであればcurl_multiを使った並列処理等で効率化は可能ですが、より高い効率化が必要であれば非同期I/Oに行き着くのではないかと思います。あとjQueryが使えたり

マッシュアップアプリ


様々なサービスが公開しているWebAPIを組み合わせて利用したアプリでも、前述と同様の理由からnode.jsとは相性が良い分野だと思われます。また一般公開されているAPIを組み合わせるパターン以外に、自社内でのみ完結するアプリであってもマッシュアップアプリのアーキテクチャ(WebAPIの集合体としてアプリを構築する)を採用する事は、技術ライフサイクルを考慮した疎結合・スケールアウト性の確保の上で有用かもしれません。ソーシャルアプリもまたプラットフォーム側が用意したAPIを利用する事から、この区分に属するかもしれません。



DB


データの永続化を考えた場合、しばらくはRDBではなくKVSとセットで使われる事が多いんじゃないでしょうか。現時点で敢えてnode.jsを使う要件だとパフォーマンスの方が重要でしょう。

公開ライブラリ


npm

PEARとかCPANとかGems的な。JSDOMを使えばDOMが作れて、node.jsからjQueryも使えるらしい。

[斜め読み]Charlie Robbins「jsdom.jsとjquery使ったスクレピング」

フレームワーク


express

Sinatra的な。WebAPI作るのにはとりあえず良さそう。

node.js + express + mongoDB + WebSocket などのリンクまとめ

Node.js 用パッケージマネージャ npm と Sinatra ライク軽量フレームワークの express を使ってみた

現時点での暫定的な結論


クローラ書いたりマッシュアップアプリ書いたりWebAPI書いたりチャット作ったり技術研究を除けば、引き続き多くのプロジェクトではLAMP環境が最適解だと思います。
スポンサーサイト
翻訳ブックマークレットのまとめ

以前、@nifty翻訳用のブックマークレットを作っていたんですがこれにはバグ(URLエンコードをかけてなかった)があって、手元では修正していたものの、今の今まで公開していた事を忘れていました。

@nifty翻訳
@nifty翻訳ブックマークレット
 新しいウィンドの作成を使わずに、POST元リファラ問題を解決してTwitterに投稿できるブックマークレットが出来たんですが、これって公開してもいいんでしょうか。Twitterにログインした状態で踏むと勝手にTwitterに「hogehoge」とか投稿されるリンクが作れちゃうんですが。

CSRFっぽい動きはするんですが、これが脆弱性かというと、Twitterの仕様のような気もしますし、仮に脆弱性だとしてもTwitterの脆弱性なのかブラウザ側の脆弱性なのか良くわかりません。

とりあえずIPAに報告してみて、脆弱性だと言われなければ問題ないですかね。
 Twit! ブックマークレットによると、新しいウィンドを作成してその中でPOSTすればFirefoxではリファラーが空になるとの事。という事はリファラーを送る設定にしているFirefoxでも・・。(ウィンドが一瞬表示されるので何かがあった事はユーザにわかるんですが)

というわけでブラウザ設定を弄らなくても使えるバージョンを作りました。


javascript:
(
function(){
if(status=prompt('post to Twitter')){
commit='Update';

w=window.open('','_blank','width=0,height=0');

f=w.document.createElement('form');
f.setAttribute('name','TwitterPostForm');
f.setAttribute('action','http://twitter.com/status/update');
f.setAttribute('method','POST');
f.setAttribute('Accept-charset','UTF-8');

s=w.document.createElement('input');
s.setAttribute('name','status');
s.setAttribute('value',status);
f.appendChild(s);

c=w.document.createElement('input');
c.setAttribute('name','commit');
c.setAttribute('value',commit);
f.appendChild(c);

w.document.body.appendChild(f);
w.document.TwitterPostForm.submit();

w.onunload=
function(){
w.close();
}

}
}
)();



続く
 ここまでAPIを使わずにブックマークレットを作りましたが、折角なのでAPIを使ったブックマークレットも作る事にしました。

Twitter API Documentation

これによると、どうやら送信するデータは全てUTF-8エンコードで無ければならないようです。


javascript:
(
function(){
if(status=prompt('post to Twitter')){
i=document.createElement('iframe');
i.setAttribute('name','TwitterPostIframe');
i.setAttribute('width',0);
i.setAttribute('height',0);
i.onload=
function(){
document.body.removeChild(f);
document.body.removeChild(i);
};
document.body.appendChild(i);


f=document.createElement('form');
f.setAttribute('name','TwitterPostForm');
f.setAttribute('action','http://twitter.com/statuses/update.xml');
f.setAttribute('method','POST');
f.setAttribute('target','TwitterPostIframe');
f.setAttribute('Accept-charset','UTF-8');

s=document.createElement('input');
s.setAttribute('name','status');
s.setAttribute('value',status);
s.setAttribute('type','hidden');
f.appendChild(s);

document.body.appendChild(f);
document.TwitterPostForm.submit();
}
}
)();



formのAccept-charsetでUTF-8を指定するようにしましたが、IEでは無視されるそうなので、IEに対応させる場合はmetaタグの文字コード指定を送信時に入れ替える等の修正が必要になりそうです。レスポンスはXMLで返ってきますが、全く利用していません。

続く
copyright © 2005 The elephant vanishes all rights reserved.
Powered by FC2ブログ.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。