Posted by & filed under 開発.


今月から開発部に配属された川野です。

自社製品のモバイル用UIを刷新する調査をひとりで細々とやっていて、そのなかで Sencha Touch について、ある程度情報がまとまったので記事にさせて頂きました。

Sencha Touch 概要

Sencha Touch は、モバイル WEB アプリを開発するための、JavaScript フレームワークです。

HTML5 と CSS3、JavaScript を駆使して、ネイティブアプリケーションっぽい見た目と操作感を、ブラウザ上で実現しようとしています。

iOS(iPhone とか iPad)と Andoroid に対応。(※正確には、WebKit 系のブラウザにのみ対応)

ExtJS で有名な Sencha が開発を行っています。Sencha Touch は無料で商用利用可能です。

どんなことができるの?

百聞は一見に如かず、ということで、、

Sencha Touch で作られた GitHub を閲覧するアプリです。

# iPad での利用を想定したものですが、PC上でも Chrome や Safari であれば利用できました。

Sencha Touch を使うことで、上記のようなネイティブアプリライクなモバイルWEBアプリを比較的簡単に開発することができます。

Sencha Touch が提供してくれる機能

  • タッチイベントのハンドリング
  • ネイティブアプリライクな UI コンポーネント
  • オフライン機能(localstorage などを利用)のサポート
  • Ajax を使った画面遷移をブラウザの履歴に残す機能
    => 具体例で言うと、Ajax の遷移が戻るボタンで戻れる
  • 複雑なプログラムのサポート(Sencha Touch MVC)
  • ネイティブアプリに変換することも想定(PhoneGap との相性がよい)
  • Ajax関連、その他いろいろ便利なユーティリティ

などなど

列挙されても、何のことかよく分からないと思いますが、とにかくモバイルデバイスに最適化された WEB アプリを開発するために必要なものが一通り揃っている、ということで。。

# jQuery Mobile との違い
モバイル用の JavaScript ライブラリで語られることの多い jQuery Mobile は、モバイル用の WEB「ページ」作成に適しているのに対し、Sencha Touch は、モバイル用の WEB「アプリケーション」作成に適している印象です。

Sencha Touch を利用したプログラミング

いわゆる、「コンポーネントをレゴブロックのように積み上げていく」スタイルです。

ライブラリのコアは ExtJS と同じものを使っているので、ExtJS を使ったことのある人には取っ付きやすいと思います。コンポーネントにコンフィグオブジェクトを定義して、振る舞いを指定していきます。

コンポーネントが HTML を出力して UI を構築していくため、HTML ファイルに直接 タグを記述することはありません。

Sencha Touch 独自の MVC 構成でアプリケーションを実装していきます。

ざっくり言うと、

  • Model では、アプリケーション内で使うモデルの定義
  • View では、UIコンポーネントの定義と、イベントハンドリング => Controller へのディスパッチ
  • Controller では、ディスパッチされたイベントの具体的な処理

を記述していく感じです。

Sencha Touch MVC の詳細は、以下のページで説明されています。

その他周辺技術

Sencha Touch では、効率よく高品質なアプリを開発するために、比較的新しい技術を採用しています。

SASS、Compass
CSS の作成に、「SASS」と「Compass」を利用しています。SASS は CSS を生成するためのメタ言語、Compassは SASS を便利に使うためのフレームワークライブラリです。
SASS、Compass を使うことで、Sencha Touch が提供してくれているテーマを、簡単にカスタマイズすることができます。

Jasmine
JavaScript のテストフレームワークに「Jasmine」を利用しています。Jasmine は TDD(テスト駆動開発)の概念に基づいて設計されています。

その他、JavaScript の圧縮には、YUI Compressor が使われており、「JsBuilder」というビルドツールがフレームワークに同梱されています。

まとめ

Sencha Touch を使う魅力は、WEBアプリの開発効率の良さ・クロスプラットフォーム性を維持しつつ、ネイティブアプリのようなユーザーエクスペリエンスを提供できる点にあると思います。

また、Sencha Touch + PhoneGap の組み合わせは、モバイルアプリ(ネイティブ)のプロトタイプ開発にも適しているような気がしました。

まだまだ日本語の情報は少ないですが、将来有望なフレームワークだと思います。

お役立ちリンク


関連文書:

Posted by & filed under 開発.


 土地柄 Ruby が熱いです。matz 信奉者はもちろんのこと、matz を育てたのは俺だと称するおじいちゃんまで居ます。
 会社に matz 直筆サインの入った O’reilly の Ruby 本がありました。

 昨今では、著者のサインが入った本がブームのようです (どこが火種か言うまでもないですが) 。
 しかし同じ本と比べてみて、有難味が増しているような感じはしますし、なんか読んでみたくなる気分になります。
 同僚の @m2ym さんは、RMS のサインが入ったエッセイ集を持ち歩いていますが。彼を敬虔な GNU 信者たらしめるのは、こういう教祖のサインの入った本がそうさせるのかなと思ったりしました。

 というわけで Ruby を触ってみました。
 ブロックによるコレクション処理で lisp を感じられたり、オープンクラスで動的に機能を追加したり上書きしたりとオモロい言語です。
 ただ調べるだけではつまらないので。遺伝的アルゴリズム (以下、GA [Genetic Algorithm]) を使った、為替予想プログラムを Ruby で書いてみました(Ruby の練習とは言いながら、Ruby のオモロい機能はあんまり使えてないですが。まぁ暖かい目で見てくれるとくれしいです)。

 GA は、実時間で解けなかったり、最適解があるかどうかが計算でわからないような場合に、ヒューリスティックに解を求める有名な手法ですが。こいつを、円-ドルの為替レートの予測に適応させてみます。
 
 大学の経済学の講義にて、経済学者の先生曰く。銀行や証券会社の人は、製造業の受発注件数とかの遅延指数とか、政府や役所が出す経済指標に応じて、為替や株価の予測をしているみたいです。
 例えば「 P 社の株価は、液晶パネルの原材料を大量輸入したら、2ヶ月後に上がる」といった感じです。
 これはジンクスとか願掛けとった類ではなく「原料輸入」→ 「新製品を開発しているかも?」→ 「株価が後で上がるかも?」といった因果関係がこの理論のバックにあります。

 このプログラムでは、GA を使って上述のような因果関係の指標を見つけ、明日の為替の終値の予想を行います。
 以前、自然言語系の先生が日経新聞の内容と某社の株価との相関を解析的に見つけて、小金を得たという逸話を耳にしたが。ここでは外的な情報によらず、過去の為替情報のみから、この因果関係を見つけます。

 では、さっそく設計してみましょう。
 GA の世界では、被演算処理の個体 (オブジェクト) を「染色体」と言います。
 ここでは各染色体が、次の遺伝子情報を持つようにします。

  1. [ ある日の為替銘柄は n 日前に価値が上がる/下がる ] * 50 (この数字は適当で構いません。)
  2. 前日の価値との割合
  3. 適応度

 (1) は過去の現象の為替推移の予測になり、こいつが DNA 配列を模したデータ構造になり GA の演算対象になります。こいつはあくまで「予測」なので、必ずしも当てはまるとは限りません。なのでこいつを GA によって解析解を見つけます。
 (2) は前日の価値と比較した値で “事実” なので、不変です。
 (3) の “適応度” というのは生物学の言葉で、ある雌が子供を生む数の事を言うみたいで、その個体の貴重性を表すみたいです。GA の世界では、ある染色体が特定の視点からみて優秀かどうかを判定する度合いで、評価関数の出力値になります。

 評価関数は、渡された染色体の (2) の前提の基で (1) の予測が、どれだけ現実の為替推移に適合するかを計算します。
 要するに何やってるのかというと、過去の為替チャートから過去 n 日に遡って、明日の為替レートが上がる (もしくは下がる) 予兆 (経済学的には “遅延指数” と言うみたいです) を解析的に見つけようという取り組みです。

 さて。以上を踏まえて、為替予測プログラム (azumi くん) を作ってみたの話。

 [ 次回 につづく ]
 
 なお、この azumi くんによると、明日の 円ードル の終値は『前日(10/07)より下がります』


関連文書:

  • 関連文書は見つからんがな

Posted by & filed under .


今日、久しぶりにミスターHTML5の浜辺さんに会いました。

有名人にパーフェクトJavaScriptを献本してくださいと依頼したら、Douglas CrockfordとRyan Dahlのどちらがいいですか、と聞かれました。さすがにミスターHTML5はスケールが違います。

浜辺さんは既に10冊以上のパーフェクトJavaScriptにサインをしたとのことです。ぼくなんてまだ1冊もサインしていません。なぜなら、誰もサインを求めに来ないからです。人徳の差でしょうか。

パーフェクトJavaは、過去10冊以上サインしてきましたが、実は著者3人のサインが揃ったサイン本はほとんど存在していません。記憶する限りでは世の中に2冊だけです。

「パーフェクトJavaScript」も著者3人が揃うサイン本はかなり希少になりそうです。

しかし、そんな希少本を手にするチャンスが来週のありえるえりあ勉強会です。冗談ではなく、最初で最後のチャンスかもしれません。本はたいして重くないようなので、当日持ってきてくれれば喜んでサインします。


関連文書:

  • 関連文書は見つからんがな

Posted by & filed under 開発.


第7回のありえるえりあ勉強会の募集を始めました。今回はJavaScriptで大規模開発です。10月13日19時から溜池山王の近くであります。詳細はこちらを参照してください。

今回はまだ、発表者や発表内容は確定していませんが、いつも通り、”濃いもの”になる予定だそうです。詳細が決まりましたら、再度お伝えします。

 


関連文書:

  • 関連文書は見つからんがな

Posted by & filed under 開発.


 前回 は非常にザックリとした OpenFlow の基本的な話に終始しました。
 OpenFlow を知るために、スタンフォードの人が書いた WihtePaper [1] を読んだり、スイッチの仕様 [2] を読んだりでもいいんですが。まずは動作環境を作って、使ってみるのが一番よく理解できますし、動かしてみると先の文献に書いてある内容もスイスイ頭に入ってきます。
 なのでまず、OpenFlow についての文書を読んでみる前に OpenFlow について実際に動かして、使ってみることをお勧めします。

 ではまず、VMware を用いて以下の仮想ネットワークを構築します。
 最終的にやりたいことは、Switch 部分で Firewall を動作させることです。
 各 VM に GNU/Linux を入れて、仮想敵に以下のネットワークトポロジーをつくります。

 ネットワーク構成

 ここでは VM を5台書いていますが、今回使うのは Host1 と switch と controller の3台の VM を使います。
 まずは OpenFlow switch (以下、スイッチ) 用の VM インスタンスです。VMWare Server には OpenFlow スイッチの機能を提供する仮想デバイスみたいなモノは無いので、OpenFlow スイッチをエミュレーションするソフトウェアスイッチ [3] を GNU/Linux に入れて、スイッチの代替にします。
 ネットワーク 1,2,3,4 は、それぞれ別々の HostOnly ネットワークで、ネットワーク 5 は NAT ネットワークに設定してます。VMWare Server のデフォルトの設定では、一つの HostOnly ネットワークしかありませんが、vmware-config.pl で増やせます。
 ネットワークが分離し、各ホスト間は物理的(?)に繋がっていないので、このまま何も設定しないと、各ホストはインターネットに出れません。スイッチにどのパケットフロー(もしくは、各パケット)を通したり、転送したり、破棄したりするのかを決定するのが OpenFlow controller (以下、コントローラ) です。
 コントローラとスイッチの間は、セキュアな通信路でなければなりません(スイッチが乗っ取られるとこのネットワーク環境を好き放題いじれてしまうので)。なので、他のネットワークとは独立させています。
 Host1 はただの GNU/Linux の VM です。

 次に Firewall の定義と実装について見ていきます。
 この辺りの話は OpenFlow と全然関係なく、「Firewall 定義ファイルを Python で解析するプログラムを作ったぜ」という話なので、OpenFlow についてのみ知りたい人は、軽くスルーしてください。

 Firewall の定義ファイルは、以下に示すフォーマットで記述します。

 [ Firewall 定義ファイルのフォーマット ]

 なにやらぐちゃぐちゃしてますが。以下の記述例は以下のような感じになります。

 [ Firewall 定義ファイルの記述例 ]

 1行目は、192.168.0.1 から 74.125.31.104 (www.google.co.jp) への http アクセスを許可しています。
 2行目は、MACアドレス 00:16:d3:3e:2d:25 から 00:19:7e:4b:03:50 へのあらゆるアクセスを許可しています。
 IPv6 への対応はしてないです(まぁ NOX コンポーネントの実装の練習プログラムみたいなものなので、細かい仕様の不備は許しください)。

 ではいよいよ実装 [4] を見ていきます。
 ソフトウェア構造は以下の用になっています。

 Rule ディレクトリ以下のファイルで定義してあるクラス群で、上述の Firewall 定義ファイルを解析し、内部オブジェクト (Rule オブジェクト) に変換してます。そして、パケットがコントローラに到着する度に、これらのルールを参照し、転送/破棄を決定しています。

 ではいよいよ動かしてみましょう。
 実効する VM (Host1) の Firewall 定義ファイル (/etc/firewall.conf) には以下を記載します。

 各 IP が何を表すかは以下のとおりです。

 ここでは Host1 からアリエルの web サーバへの http アクセスと、DNS サーバへのアクセス、そして DNS サーバからのアクセスを許可しています。その他の内から外及び、外から内へのすべての通信はコントローラによって破棄されます。フローテーブルに定義が無いパケットがくると、パケットはコントローラに流れます、フローテーブルにその他全部を破棄するような行を入れとくと、スイッチ側で破棄してくれます(面倒くさかったので実装てません)。
 では Host 1 から www.google.co.jp とアリエルの公式サイト www.ariel-networks.com へ wget してみます。

 動作写真

 最初に firewall.conf で許可した www.ariel-networks.com (219.94.131.163) へ wget しています。次に、何の記述も無い www.google.com に対して wget を試みますが、繋がりません。
 ちゃんと Firewall の内-外の設定が機能していますね。

[1] http://www.openflow.org/documents/openflow-wp-latest.pdf
[2] http://www.openflow.org/documents/openflow-spec-v1.1.0.pdf
[3] http://yuba.stanford.edu/foswiki/bin/view/OpenFlow/Deployment/HOWTO/LabSetup#3_1_1_Stanford_Software_Referenc
[4] http://dev.ariel-networks.com/wp/wp-content/uploads/2011/09/my_firewall.tar.gz


関連文書:

  • 関連文書は見つからんがな

Posted by & filed under いろいろ, 開発.


「新卒向けカリキュラムを考え中」の話ですが、始めることにしました。受講者がまじめにノートをとれば、ぼくが死んだら、ソシュールのように受講者が講義ノートを元に出版してくれるでしょう。

講義を聞くだけでプログラマにはなれないので、毎回課題を出す予定です。とりあえず手を動かすのは重要です。写経(コードの書き写し)でもいいから手を動かすべきです。次の課題を出す予定です。


基礎
– リンクトリスト
– ハッシュマップ
– ツリー(binary, B-tree)
– 各種ソート
– バイナリサーチ
– 8クイーン
– ハノイの塔
– ライフゲーム
– GoFデザインパターンの実装(使えるモノのみ)
– 文字列パーサ
– グラフ探索
– [コードリーディング] コレクションライブラリ(Java Standard library, Apache Commons, Google Guava)

実践
– 自作HTTPクライアント
– 自作HTTPサーバ
– 自作マークアップ言語
– 自作Webアプリのフレームワーク

余力があれば
– テトリス作成
– 動的計画法
– 文字列検索(BM法)
– 転置インデックス
– suffix array
– 画像処理(フィルタ、陰線消去、座標変換)


一応誤解なきように書きますが、コンピュータサイエンスの研究者ではなく、実戦で使えるプログラマになってもらうための課題です。この程度の課題でコンピュータサイエンスを分かった気になるなというツッコミは的外れですのでご遠慮ください。

「なんだリンクトリストの実装か、随分易しい課題だな」と思った人、甘いです。最初の課題は8クイーンの実装です。簡単な課題から始めるとは言っていません。

「プログラミング初学者の最初の課題が8クイーンは厳しすぎるだろう」と思うかもしれません。ぼくもそう思います。最初に8クイーンの課題を与えるのは覚悟があるかを確認する目的もあります。そもそも本当にプログラミングが好きなら他人に教わる必要はありません。他人に教わる時点で既にマイナス1点です。更に本気でプログラミングをしようとする覚悟もなければ、たぶん続きません。結局、いつか、できない言い訳をするだけです。その判断は最初にしたほうが本人のためです。

参加者はふたりです。人数はどうでもいいのですが、ひとり脱落するとひとりしか残らないので綱渡りです。これはこれで緊張感があって良いかもしれません。落後者がいるリスクを見込んで3、4人ぐらいで始めたかったのですが希望者がいなかったので仕方ありません。

上記の課題のコードが書ければ、あとは、ソースコードの読み方のコツを伝えて、よく使うJavaのクラスライブラリの知識を伝達すれば、普通の現場で標準的Javaプログラマにはなれるのではないでしょうか。アリエルではスタート地点にすら立てないレベルですが。アリエルのスタート地点は、Javaと聞いて、ふっと鼻で笑える地点です。


関連文書:

  • 関連文書は見つからんがな

Posted by & filed under .


パーフェクトJavaScript (PERFECT SERIES 4)

過去の2冊にならって、「パーフェクトJavaScript」の振り返りを書きます。

パーフェクトJava
実践JS サーバサイドJavaScript 入門

参考:
パーフェクトJavaScriptの目次

Part1 概論

「サーバサイドJavaScript」本と内容が一部被っている、かつそんなにぶっ飛んだことも書いていません。序章として軽く読み飛ばしてください。

Part2 JavaScript言語仕様

このパートから本題です。

Part2はJavaScriptの言語仕様の解説です。最初の2章でざっと広く浅く流して、その後の3章から7章でもう一度深く説明する構成にしました。「パーフェクトJava」には本書の2章に当たる広く浅く流す章はないので、少し違うスタイルを試してみました。予備知識の少ない人には「パーフェクトJavaScript」スタイルのほうが良い気がします。欠点は同じ説明を微妙に繰り返す必要がある点です。

3章から7章の各論をどういう順序にするかはプログラミング本を書く時に頭を悩ます部分です。説明する順序は重要です。個人的には下から積み上げる説明がもっともわかりやすく感じます。なるべく前提が不要な原理原則の説明が先にあり、その説明を元に積み上げるように説明が続く構成です。何かを読む時、前提知識が可能な限り少なく済むのが脳に優しいと思うからです。本の前半の内容を前提に後半が書かれていて、その傾斜がなだらかであればあるほど易しく感じます。

ただこの理想的な構成にこだわると前半が抽象的になりすぎる危険があります。そして、抽象論と具体例のバランスの取り方を誤るとてんで意味不明の本になります。すごく頭が良ければ抽象論だけの本でも構わないかもしれませんが、ぼくは抽象論だけで理解できるほど頭がよくありません。抽象だけで説明されると腑に落ちません。しかし具象だけだと話がつながらない感じがして気持ち悪く感じていらいらします。そんなわけで、基本的には抽象と具象を同時並行で一緒に説明します。一緒に説明と言っても、頭の中身を一気にコピーはできません。言語にシリアライズして伝達しないといけないので説明には順序が発生します。抽象だけが続くとぼんやりし、具象だけが続くといらいらします。難儀です。

結果として次の構成になっています。

  • 3章 JavaScriptの型
  • 4章 文、式、演算子
  • 5章 変数とオブジェクト
  • 6章 関数とクロージャ
  • 7章 データ処理

変数とオブジェクトより先に型の説明は変だろう、と言う人もいるかもしれませんが、2章で全体を軽く流しているので成り立っていると思っています。

ただ結局のところ、伝達が正しくできているのかはわかりません。

Part3 クライアントサイドJavaScript

土江さんによるパートです。DOMの話、イベントの話、AJAX、クロスオリジン通信と盛りだくさんです。ライブラリはfeaturing jQueryです。

Part4 HTML5

ミスターHTML5の浜辺さんのパートです。パーフェクトJavaScriptはHTML5本として後発だと思いますが、後発の良さとして、おおよそHTML5の主要な部分をきれいに切り取れていると思います。HTML5関連で抜けている大きなトピックはCSS3ぐらいでしょうか。

Part5 Web API

Web APIってJavaScriptと関係あるの?、と言われそうですが、クライアントサイドJavaScriptからクロスオリジン通信でかつOAuth使って、認証が必要なWeb APIを叩くのが201x年代のトレンドです。AJAXのようなキャッチコピーがないのと、本の中でも書きましたが、高度にAPIが進化するとJavaScriptの存在が隠蔽されるので目立ちませんが、トレンドです(たぶん)。

20章の実例ではTwitter、FacebookなどのWeb APIの実例を載せて大衆に媚びました。でも少し内容が薄いかもしれません。雰囲気をつかんだら自分でリファレンスを調べてください。

Part6 サーバサイドJavaScript

「実践JS サーバサイドJavaScript 入門」のリベンジ(?)でNode.jsを2章書きました。この2章を読んだだけでNode.jsマスターにはなれませんが、その辺の女子大生に語れるぐらいにはNode.jsに詳しくなれると思います。

非同期プログラミングと言うか、イベントドリブンプログラミングは昔から好きですが、Webアプリに向いているかは実は微妙に思っています。Webアプリのコードの構成そのものは、単純化するとHTTPのリクエストを受けてレスポンスを返す一本道の構成です。単純なのは悪い話ではなく、むしろ利点ですが、この構成のコードにイベントドリブンが適しているかはだいぶ微妙です。Node.jsを擁護しておくと、Node.jsはWebアプリだけのためのプログラミング環境ではないですし、WebもHTTP一本やりの世界から変わっていく可能性もあります。


関連文書:

  • 関連文書は見つからんがな

Posted by & filed under 開発.


 僕がこの業界の敷居を跨いだのは5年前のことですが。当時、ネットワーク管理者というのは、遊惰放逸と日々暮らし、滅多に起きない問題を対処するための予備役みたいな存在かと思っていました。
 しかし、業務を通してネットワークの構築は誰にでも出来ることだけど、メンテナンスは高いスキルを要すると気づき、ネットワーク管理者の仕事の真髄はメンテナンスにあると理解して以降、一旦は考えを改めましたが。最近、当時の考えは究極的にはそれほど間違っていなかったのではないかと思いはじめました。ただ一つ「問題」は常時起き、ひたすら複雑化し続け、決して無くならないという点を除いて。

 ここで言っている「問題」とは、機能の整備及び管理、スケーリングといった比較的簡単で緊急度の低いものから、謎のトラフィックや外部からの攻撃の検知・解析・対策といった、高度なスキルと緊急性を要するものまで様々なものをひと括りに「問題」と言っています。また、これらの問題に対処する為に事前に講じる作業についても考慮すると、ネットワーク管理者が対処しなければならない「問題」は尽きることがはありません。

 某 A 社の場合。そこには非常に優秀な情報管理部門の責任者(以下、マスター)が居て、独自のノウハウで社内のリソースを一元管理し、JPCERT のメールが届くや否や、速攻で既知の脆弱性が潰されます。また、某社にサイバー攻撃をしかけようものなら、その企ては一瞬にしてマスターの超人的探知能力によって察知され、わずかでも成功を夢見た哀れな攻撃者は、その後マスターの謎の攻性能力によって、己れの愚行を激しく後悔する事になります。

 このような人物は、業界を探してもそう多くはいないでしょうが。現存する様々なセキュリティ技術やそれを実装したツールを利用することで、ネットワーク管理者が直面する多くの「問題」に対処することはできると思います。
 しかし、あまり多くのツールを導入し、同時並列に運用する事は、メンテナンスコストの観点から避けたいところです。

 今回は、OpenFlow [1] を用いた「問題」解決方法の一例を紹介をします(「問題解決」とか言うと、某社が唄う宣伝文句のようで、安っぽく聞こえたり、嫌悪感を抱いたりとアレルギー反応を起こす方が居るかもしれませんが。別に他意は無いので、ぜひ最後まで聞いてください)。

 OpenFlow はスイッチの制御プロトコルで、OpenFlow 制御下のスイッチ (以下、OpenFlow スイッチ) を通過するパケットをプログラマブル制御する事で、仮想ネットワークを構築できたり、ネットワークリソースへのきめ細かいアクセスコントロールを実現できたり、各ネットワーク毎といった細かい粒度でのネットワークモニタリングが実現できたりと、とってもオモロいしろものです。

 仕組みを1行で説明すると、OpenFlow スイッチに流れるパケットをスイッチ外で動作する別のアプリケーション(以下、コントローラ)で、l2 から l4 のヘッダを見てマルチプロトコル制御するというものです。
 これだけ聞くと『何や、パフォーマンスはエラい悪そうやな』と思われてしまうかもしれませんが、コントローラで定義したパケット制御のルール(以下、フロー定義)は、スイッチ側に送り、以降スイッチ単独でパケットをさばくことが出来るので、OpenFlow スイッチがハードウェア制御されているものであれば、高いスループットが期待できます(若干お高いですが…)。

 『んで。これを使ってどんな事ができるの?』については、後で紹介します。
 僕の知る限り、「これを使えばネットワークの根底がひっくり返る」とか「サイバーテロが一掃される」「中国が情報統制から開放される」といった類の劇的な変化はありません(おそらく僕の一生が終わるまで)。
 
 『じゃあどうやって使うの?』については、ここ [2] で丁寧に解説してくれています。
 ただ NOX を git でダウンロードし、運用中に “Invalid Ethernet Address” というエラーが出現する場合、[3] のパッチを当てる必要があるかもしれません。
 
 さて。ここで本題の『何ができるのか?』について。
 答えとしては「いろいろ出来る」というものですが。『どのようにできるのか?』というと、L3 スイッチをプログラマブルに制御するようにします。これによって、高いフレキシビリティのネットワークが構築可能になります。

 今回は、実運用例の一例として、OpenFlow スイッチに Firewall を組み込むソフトウェアを OpenFlow コントローラのソフトウェア実装である NOX のコンポーネントで実装します。

 [ 次回 に続く ]

 [1] http://www.openflow.org/
 [2] http://yuba.stanford.edu/foswiki/bin/view/OpenFlow/Deployment/HOWTO/LabSetup
 [3] http://noxrepo.org/cgi-bin/gitweb.cgi?p=nox;a=commitdiff;h=c3fa89a8e5c55e66efbcee3ee32523c9eb5d76c9


関連文書:

  • 関連文書は見つからんがな

Posted by & filed under .


パーフェクトJavaScript

目次を公開します。紹介文は後日書きます。

はじめに 3

□□□□Part1 JavaScript〜overview 13
■■■1章 JavaScriptの概要 14
■■1-1 JavaScriptの見方 14
■■1-2 JavaScriptの歴史 15
■1-2-1 JavaScriptのトピック 15
■■1-3 ECMAScript 16
■1-3-1 JavaScriptの標準化 16
■1-3-2 見送られたECMAScript第4版 17
■■1-4 JavaScriptのバージョン 18
■■1-5 JavaScript処理系 18
■1-5-1 クライアントサイドJavaScriptコードの移植性 19
■■1-6 JavaScript実行環境 20
■1-6-1 コア言語 20
■1-6-2 ホストオブジェクト 21
■■1-7 JavaScript周辺環境 21
■1-7-1 ライブラリ 21
■1-7-2 ソースコード圧縮 22
■1-7-3 統合開発環境(IDE) 22

□□□□Part2 JavaScript言語仕様 23
■■■2章 JavaScriptの基礎 24
■■2-1 JavaScriptの特徴 24
■■2-2 表記について 25
■2-2-1 Print関数 26
■■2-3 変数の基礎 26
■2-3-1 変数の使い方 26
■2-3-2 varの省略 28
■2-3-3 定数 28
■■2-4 関数の基礎 29
■2-4-1 関数とは 29
■2-4-2 関数宣言と呼び出し 29
■2-4-3 関数リテラル 30
■2-4-4 関数はオブジェクト 32
■■2-5 オブジェクトの基礎 32
■2-5-1 オブジェクトとは 32
■2-5-2 オブジェクトリテラル式とオブジェクトの利用 32
■2-5-3 プロパティアクセス 33
■2-5-4 プロパティアクセス(ブラケット) 34
■2-5-5 メソッド 34
■2-5-6 new式 35
■2-5-7 クラスとインスタンス 35
■2-5-8 クラス機能の整理方法 36
■2-5-9 オブジェクトと型 36
■■2-6 配列の基礎 37
▽▽コラム イディオム 38

■■■3章 JavaScriptの型 39
■■3-1 型とは 39
■3-1-1 型に関してJavaとの比較 39
■3-1-2 基本型と参照型 40
■■3-2 組み込み型の概要 40
■3-2-1 JavaScriptの基本型 41
■■3-3 文字列型 41
■3-3-1 文字列値リテラル 41
■3-3-2 文字列型の演算 42
■3-3-3 文字列型の比較 44
■3-3-4 文字列クラス(Stringクラス) 45
■3-3-5 文字列オブジェクト 45
■3-3-6 文字列値と文字列オブジェクトの混乱の回避 47
■3-3-7 String関数呼び出し 47
■3-3-8 Stringクラスの機能 48
■3-3-9 非破壊的なメソッド 49
■■3-4 数値型 50
■3-4-1 数値リテラル 50
■3-4-2 数値型の演算 51
■3-4-3 浮動小数点数の一般的注意 51
■3-4-4 数値クラス(Numberクラス) 52
■3-4-5 Number関数呼び出し 53
■3-4-6 Numberクラスの機能 53
■3-4-7 境界値と特別な数値 54
■3-4-8 NaN 56
■■3-5 ブーリアン型 57
■3-5-1 ブーリアン値 57
■3-5-2 ブーリアンクラス(Booleanクラス) 58
■3-5-3 Booleanクラスの機能 59
■■3-6 null型 60
■■3-7 undefined型 60
■3-7-1 undefined値 61
■■3-8 オブジェクト型 62
■3-8-1 関数型 62
■■3-9 型変換 62
■3-9-1 文字列値から数値の型変換 63
■3-9-2 数値から文字列値の型変換 64
■3-9-3 型変換のイディオム 65
■3-9-4 ブーリアン型への型変換 66
■3-9-5 その他の型変換 67
■3-9-6 オブジェクト型から基本型への型変換 67
■3-9-7 基本型からオブジェクト型への型変換 68
▽▽コラム JavaScriptのプロファイラ 69

■■■4章 文、式、演算子 70
■■4-1 式と文の構造 70
■■4-2 予約語 70
■■4-3 識別子 71
■■4-4 リテラル表記 72
■■4-5 文とは 73
■■4-6 ブロック文(複合文) 73
■■4-7 変数宣言文 74
■■4-8 関数宣言文 74
■■4-9 式文 74
■■4-10 空文 75
■■4-11 制御文 76
■■4-12 if-else文 76
■■4-13 switch文 79
■■4-14 繰り返し文 82
■■4-15 while文 82
■■4-16 do-while文 84
■■4-17 for文 85
■4-17-1 for文のイディオム 86
■■4-18 for in文 87
■4-18-1 配列とfor in文 88
■4-18-2 for in文に関する注意点 89
■■4-19 for each in文 89
■■4-20 break文 90
■■4-21 continue文 90
■■4-22 ラベルを使ったジャンプ 91
■■4-23 return文 92
■■4-24 例外 93
■■4-25 その他 94
■■4-26 コメント 95
■■4-27 式 95
■■4-28 演算子 96
■■4-29 式の評価 96
■■4-30 演算子の優先順序と結合規則 97
■■4-31 算術演算子 98
■■4-32 文字列連結演算子 100
■■4-33 同値演算子 100
■■4-34 比較演算子 101
■■4-35 in演算子 102
■■4-36 instanceof演算子 103
■■4-37 論理演算子 103
■■4-38 ビット演算子 104
■■4-39 代入演算子 105
■■4-40 算術代入演算子 105
■■4-41 条件演算子(3項演算子) 105
■■4-42 typeof演算子 106
■■4-43 new演算子 106
■■4-44 delete演算子 106
■■4-45 void演算子 107
■■4-46 カンマ(,)演算子 107
■■4-47 ドット演算子とブラケット演算子 108
■■4-48 関数呼び出し演算子 108
■■4-49 演算子と型変換の注意点 108

■■■5章 変数とオブジェクト 109
■■5-1 変数の宣言 109
■■5-2 変数と参照 110
■5-2-1 関数の引数(値渡し) 112
■5-2-2 文字列と参照 113
■5-2-3 オブジェクトと参照にまつわる用語の整理 113
■■5-3 変数とプロパティ 114
■■5-4 変数名の解決 115
■■5-5 変数の存在チェック 115
■5-5-1 プロパティの存在チェック 116
■■5-6 オブジェクトとは 117
■5-6-1 抽象データ型とオブジェクト指向 117
■5-6-2 インスタンスの協調とオブジェクト指向 118
■■5-7 オブジェクトの生成 118
■5-7-1 オブジェクトリテラル 118
▽▽コラム 関数の多値の返り値を受け取るJavaScript独自拡張 121
■5-7-2 コンストラクタとnew式 121
■5-7-3 コンストラクタとクラス定義 123
■■5-8 プロパティのアクセス 124
■5-8-1 プロパティ値の更新 124
■5-8-2 ドット演算子とブラケット演算子の使い分け 125
■5-8-3 プロパティの列挙 126
■■5-9 連想配列としてのオブジェクト 126
■5-9-1 連想配列 127
■5-9-2 連想配列としてオブジェクトの注意点 128
■■5-10 プロパティの属性 129
■■5-11 ガベージコレクション 130
■■5-12 不変オブジェクト 131
■5-12-1 不変オブジェクトとは 131
■5-12-2 不変オブジェクトの有用性 131
■5-12-3 不変オブジェクトの手法 131
■■5-13 メソッド 133
■■5-14 this参照 134
■5-14-1 this参照の規則 134
■5-14-2 this参照の注意点 135
■■5-15 applyとcall 136
■■5-16 プロトタイプ継承 137
■5-16-1 プロトタイプチェーン 138
■5-16-2 プロトタイプチェーンの具体例 139
■5-16-3 プロトタイプ継承とクラス 141
■5-16-4 プロトタイプチェーンのよくある勘違いと__proto__プロパティ 142
■5-16-5 プロトタイプオブジェクト 142
■5-16-6 プロトタイプオブジェクトとECMAScript第5版 143
■■5-17 オブジェクトと型 144
■5-17-1 型判定(constructorプロパティ) 144
■5-17-2 constructorプロパティの注意点 144
■5-17-3 型判定(instanceof演算とisPrototypeOfメソッド) 145
■5-17-4 型判定(ダックタイピング) 146
■5-17-5 プロパティの列挙(プロトタイプ継承を考慮) 146
■■5-18 ECMAScript第5版のObjectクラス 148
■5-18-1 プロパティオブジェクト 148
■5-18-2 アクセッサ属性 150
▽▽コラム その他の型判定 152
■■5-19 標準オブジェクト 152
■■5-20 Objectクラス 153
▽▽コラム オブジェクトの互換性 155
■■5-21 グローバルオブジェクト 155
■5-21-1 グローバルオブジェクトとグローバル変数 156
■5-21-2 Mathオブジェクト 156
■5-21-3 Errorオブジェクト 157

■■■6章 関数とクロージャ 159
■■6-1 関数宣言文と関数リテラル式 159
■■6-2 関数呼び出しの整理 159
■6-2-1 関数宣言文の巻き上げ 159
■■6-3 引数とローカル変数 160
■6-3-1 argumentsオブジェクト 160
■6-3-2 再帰関数 161
■■6-4 スコープ 162
■6-4-1 Webブラウザとスコープ 163
■6-4-2 ブロックスコープ 163
■6-4-3 letとブロックスコープ 164
■6-4-4 入れ子の関数とスコープ 167
■6-4-5 シャドーイング 168
■■6-5 関数はオブジェクト 168
■6-5-1 関数名とデバッグ容易性 169
■■6-6 Functionクラス 170
■6-6-1 Functionクラスの継承 171
■■6-7 入れ子の関数宣言とクロージャ 172
■6-7-1 クロージャの表層的な理解 172
■6-7-2 クロージャの仕組み 173
■6-7-3 クロージャの落とし穴 177
■6-7-4 名前空間の汚染を防ぐ 178
■6-7-5 クロージャとクラス 181
▽▽コラム 式クロージャ 182
■■6-8 コールバックパターン 182
■6-8-1 コールバックと制御の反転 182
■6-8-2 JavaScriptとコールバック 183
▽▽コラム イベントリスナ風の実装 186

■■■7章 データ処理 187
■■7-1 配列 187
■7-1-1 JavaScriptの配列 187
■7-1-2 配列の要素アクセス 188
■7-1-3 配列の長さ 189
■7-1-4 配列の要素の列挙 190
▽▽コラム 配列の長さの上限 191
■7-1-5 多次元配列 192
■7-1-6 配列はオブジェクト 192
■7-1-7 Arrayクラス 194
■7-1-8 配列オブジェクトの意味 196
■7-1-9 配列のイディオム 196
■7-1-10 配列の内部 200
■7-1-11 配列風のオブジェクト 201
■7-1-12 イテレータ 202
■7-1-13 ジェネレータ 204
■7-1-14 配列の内包 206
■■7-2 JSON 207
■7-2-1 JSON文字列 207
■7-2-2 JSONオブジェクト 208
■■7-3 日付処理 209
■7-3-1 Dateクラス 210
■■7-4 正規表現 212
■7-4-1 正規表現とは 212
■7-4-2 正規表現の用語 213
■7-4-3 正規表現の文法 214
■7-4-4 JavaScriptの正規表現 216
■7-4-5 正規表現プログラミング 218
■7-4-6 文字列オブジェクトと正規表現オブジェクト 219
▽▽コラム ECMAScript第5版のstrict mode 222

□□□□Part3 クライアントサイドJavaScript 223
■■■8章 クライアントサイドJavaScriptとHTML 224
■■8-1 クライアントサイドJavaScriptの重要性 224
■8-1-1 Webアプリケーションの発達 224
■8-1-2 JavaScriptの高速化 225
■8-1-3 JavaScriptの役割 225
■■8-2 HTMLとJavaScript 226
■8-2-1 Webページを表示するときの処理の流れ 226
■8-2-2 JavaScriptの記述方法と実行タイミング 226
■8-2-3 実行タイミングまとめ 230
■■8-3 実行環境と開発環境 231
■8-3-1 実行環境 231
■8-3-2 開発環境 231
■■8-4 デバッグ 231
■8-4-1 alert 231
■8-4-2 console 232
■8-4-3 onerror 235
■8-4-4 Firebug, Web Inspector (Developer Tools), Opera Dragonfly 235
■■8-5 クロスブラウザ対応 237
■8-5-1 対応すべきブラウザ 238
■8-5-2 実装方法 239
■■8-6 Windowオブジェクト 242
■8-6-1 Navigatorオブジェクト 242
■8-6-2 Locationオブジェクト 242
■8-6-3 Historyオブジェクト 244
■8-6-4 Screenオブジェクト 244
■8-6-5 Windowオブジェクトへの参照 244
■8-6-6 Documentオブジェクト 245

■■■9章 DOM 246
■■9-1 DOMとは 246
■9-1-1 DOM Level 1 246
■9-1-2 DOM Level 2 247
■9-1-3 DOM Level 3 247
▽▽コラム DOM Level 0 248
■9-1-4 DOMの記述 248
■■9-2 DOMの基礎 248
■9-2-1 タグ、要素、ノード 248
■9-2-2 DOM操作 249
■9-2-3 Documentオブジェクト 249
■■9-3 ノードの選択 250
■9-3-1 IDによる検索 250
■9-3-2 タグ名による検索 251
■9-3-3 名前による検索 256
■9-3-4 クラス名による検索 256
■9-3-5 親、子、兄弟 257
■9-3-6 XPath 259
■9-3-7 Selectors API 262
■■9-4 ノードの作成・追加 263
■■9-5 ノードの内容変更 263
■■9-6 ノードの削除 264
■■9-7 innerHTML/textContent 264
■9-7-1 innerHTML 264
■9-7-2 textContent 264
■■9-8 DOM操作のパフォーマンス 265

■■■10章 イベント 266
■■10-1 イベント駆動型プログラミング
■■10-2 イベントハンドラ/イベントリスナの設定 266
■10-2-1 HTML要素の属性に指定する 267
■10-2-2 DOM要素のプロパティに指定する 268
■10-2-3 EventTarget.addEventListener()を利用する 269
■10-2-4 イベントハンドラ/イベントリスナ内でのthis 271
■■10-3 イベント発火 272
■■10-4 イベントの伝播 272
■10-4-1 キャプチャリングフェーズ 272
■10-4-2 ターゲットフェーズ 273
■10-4-3 バブリングフェーズ 273
■10-4-4 キャンセル 273
■■10-5 イベントが持つ要素 275
■■10-6 標準イベント 276
■10-6-1 DOM Level 2で定義されているイベント 276
■10-6-2 DOM Level 3で定義されているイベント 277
■■10-7 独自イベント 280

■■■11章 実践 クライアントサイドJavaScript 281
■■11-1 スタイル 281
■11-1-1 スタイル変更方法 281
■11-1-2 位置の指定 287
■11-1-3 位置 288
■11-1-4 アニメーション 290
■■11-2 Ajax 290
■11-2-1 非同期処理の利点 291
■11-2-2 XMLHttpRequest 291
■11-2-3 基本的な処理の流れ 292
■11-2-4 同期通信 293
■11-2-5 タイムアウト 294
■11-2-6 レスポンス 295
■11-2-7 クロスオリジン制限 296
■11-2-8 クロスオリジン通信 297
■11-2-9 JSONP 297
■11-2-10 iframeハック 298
■11-2-11 window.postMessage 301
■11-2-12 XMLHttpRequest Level 2 303
■11-2-13 クロスオリジン通信のセキュリティ問題 303
■■11-3 フォーム 303
■11-3-1 フォーム要素 304
■11-3-2 フォームコントロール要素 305
■11-3-3 内容の検証 306
■11-3-4 検証に利用できるイベント 307
■11-3-5 フォームを使ってページ遷移を発生させない方法 308

■■■12章 ライブラリ 310
■■12-1 ライブラリを使うべき理由 310
■■12-2 jQueryの特徴 310
■■12-3 jQueryの基本 311
■12-3-1 記述例 311
■12-3-2 メソッドチェーン 312
▽▽コラム メソッドチェーンのデメリット 314
■■12-4 $関数 314
■12-4-1 セレクタにマッチする要素を抽出する 314
■12-4-2 新しくDOM要素を作成する 314
■12-4-3 既存のDOM要素をjQueryオブジェクトに変換する 315
■12-4-4 DOM構築後のイベントリスナを設定する 315
■■12-5 jQueryによるDOM操作 315
■12-5-1 要素の選択 315
■12-5-2 要素の作成・追加・置換・削除 317
■■12-6 jQueryによるイベント処理 318
■12-6-1 イベントリスナの登録・削除 318
■12-6-2 イベント専用のイベントリスナ登録メソッド 320
■12-6-3 ready()メソッド 321
■■12-7 jQueryによるスタイル操作 321
■12-7-1 基本的なスタイル操作 321
■12-7-2 アニメーション 322
■■12-8 jQueryによるAjax 324
■12-8-1 ajax()関数 324
■12-8-2 ajax()のラッパー関数 325
■12-8-3 グローバルイベント 326
■■12-9 Deferred 326
■12-9-1 Defferdの基本 327
■12-9-2 状態遷移 328
■12-9-3 後続関数 329
■12-9-4 並列処理 331
■■12-10 jQueryプラグイン 332
■12-10-1 jQueryプラグインの利用 331
■12-10-2 jQueryプラグインの作成 333
■■12-11 他のライブラリとの共存 334
■12-11-1 $オブジェクトの衝突 334
■12-11-2 $オブジェクトの衝突回避 335
■■12-12 ライブラリの利用方法 336

□□□□Part4 HTML5 337
■■■13章 HTML5概要 338
■■13-1 HTML5の歴史 338
■13-1-1 HTML5の登場の経緯 338
■■13-2 HTML5の現状 339
■13-2-1 ブラウザの対応状況 339
■13-2-2 Webアプリケーションとネイティブアプリケーション 340
■■13-3 HTML5の概要 341
▽▽コラム ブラウザベンダーのHTML5情報ポータル 342

■■■14章 Webアプリケーション 343
■■14-1 History API 343
■14-1-1 History APIとは 343
■14-1-2 ハッシュフラグメント 343
■14-1-3 インターフェース 345
■■14-2 ApplicationCache 350
■14-2-1 キャッシュ管理について 350
■14-2-2 キャッシュマニフェスト 350
■14-2-3 ApplicationCache API 354
■14-2-4 オンラインとオフライン 356

■■■15章 デスクトップ連携 357
■■15-1 Drag Drop API 351
■15-1-1 Drag Drop APIとは 351
■15-1-2 インターフェース 358
■15-1-3 基本的なドラッグ&ドロップ 359
■15-1-4 表示のカスタマイズ 361
■15-1-5 ファイルのDrag-In/Drag-Out 364
▽▽コラム DataTransferItemList 366
■■15-2 File API 366
■15-2-1 File APIとは 366
■15-2-2 Fileオブジェクト 367
▽▽コラム <input type=”file”>のvalueについて 368
■15-2-3 FileReader 369
■15-2-4 data URL 373
■15-2-5 FileReaderSync 375

■■■16章 ストレージ 376
■■16-1 Web Storage 376
■16-1-1 Web Storageとは 376
▽▽コラム オリジンとは 377
■16-1-2 基本操作 378
■16-1-3 storageイベント 380
■16-1-4 Cookieについて 380
■16-1-5 ネームスペースの管理 381
■16-1-6 バージョンの管理 382
■16-1-7 localStorageのエミュレート 383
■■16-2 Indexed Database 384
■16-2-1 Indexed Databaseとは 384
▽▽コラム Web SQL Databaseについて 384
■16-2-2 インフラストラクチャ 384
■16-2-3 データベースに接続 385
■16-2-4 オブジェクトストアの作成 386
■16-2-5 データの追加・削除・参照 387
■16-2-6 インデックスの作成 389
■16-2-7 データの検索と更新 389
■16-2-8 データのソート 390
■16-2-9 トランザクション 391
■16-2-10 同期API 392

■■■17章 WebSocket 393
■■17-1 WebSocket概要 393
■17-1-1 WebSocketとは 393
■17-1-2 既存の通信技術 393
■17-1-3 WebSocketの仕様 397
■17-1-4 WebSocketの動作 397
■■17-2 基本操作 398
■17-2-1 コネクションの確立 398
■17-2-2 メッセージの送受信 399
■17-2-3 コネクションの切断 399
■17-2-4 コネクションの状態確認 400
■17-2-5 バイナリデータの送受信 401
■17-2-6 WebSocketインスタンスのプロパティ一覧 401
■■17-3 WebSocket実践 402
■17-3-1 Node.jsのインストール 402
■17-3-2 サーバサイドの実装 403
■17-3-3 クライアントサイドの実装 404
■17-3-4 クライアントサイドの実装2 405

■■■18章 Web Workers 408
■■18-1 Web Workers概要 408
■18-1-1 Web Workersとは 408
■18-1-2 Web Workersの動作 408
■■18-2 基本操作 409
■18-2-1 ワーカの生成 409
■18-2-2 メインスレッド側のメッセージ送受信 410
■18-2-3 ワーカ側のメッセージ送受信 410
■18-2-4 ワーカの削除 411
■18-2-5 外部ファイルの読み込み 411
■■18-3 Web Workers実践 412
■18-3-1 ワーカの利用 412
■18-3-2 ワーカの処理を中断する 414
■■18-4 共有ワーカ 416
■18-4-1 共有ワーカとは 416
■18-4-2 共有ワーカの生成 416
■18-4-3 共有ワーカのメッセージ送受信 417
■18-4-4 共有ワーカの削除 418
■18-4-5 共有ワーカの応用例 419

□□□□Part5 Web API 420
■■■19章 Web APIの基礎 422
■■19-1 Web APIとWebサービス 422
■19-1-1 Web APIが想定するシステム 422
■■19-2 Web APIの歴史 423
■19-2-1 スクレイピング 423
■19-2-2 セマンティックWeb 424
■19-2-3 XML 424
■19-2-4 Atom 425
■19-2-5 JSON 425
■19-2-6 SOAP 425
■19-2-7 REST 426
■19-2-8 簡単なまとめ 427
■■19-3 Web APIの構成 427
■19-3-1 Web APIの形態 427
■19-3-2 Web APIの利用 428
■19-3-3 RESTful API 429
■19-3-4 APIキー 430
■■19-4 ユーザ認証と認可 431
■19-4-1 Webアプリのセッション管理 431
■19-4-2 セッション管理とユーザ認証 432
■19-4-3 Web APIと権限 433
■19-4-4 認証と認可 435
■19-4-5 OAuth 436

■■■20章 Web APIの実例 439
■■20-1 Web APIのカテゴリ 439
■■20-2 Google Translate API 440
■20-2-1 準備 441
■20-2-2 動作概要 441
■20-2-3 Web APIの利用コード 442
■20-2-4 ウィジェット(Google Translate Element) 444
■■20-3 Google Maps API 445
■20-3-1 Google Static Maps API 445
■20-3-2 マイマップ 446
■20-3-3 Google Maps APIの概要 447
■20-3-4 Google Maps APIの簡単な例 447
■20-3-5 イベント 448
■20-3-6 Geolocation APIとGeocoding API 451
■■20-4 Yahoo! Flickr 452
■20-4-1 Flickr Web APIの利用 453
■20-4-2 FlickrのWeb APIの利用例 454
■■20-5 Twitter 456
■20-5-1 検索API 456
■20-5-2 REST API 457
■20-5-3 Twitter JS API @anywhere 458
■20-5-4 Twitter Widget 460
■■20-6 Facebook 460
■20-6-1 Facebookアプリの変遷 460
■20-6-2 FacebookのJavaScript API 463
■20-6-3 Facebookのプラグイン 464
■■20-7 OpenSocial 464
■20-7-1 OpenSocialの基本アーキテクチャ 465
▽▽コラム OpenSocialスペックの読み方とActivity 470

□□□□Part6 サーバサイドJavaScript 471
■■■21章 サーバサイドJavaScriptとNode.js 472
■■21-1 サーバサイドJavaScriptの動向 472
■■21-2 CommonJS 473
■21-2-1 CommonJSとは 473
▽▽コラム ホストオブジェクトに依存しないライブラリ 473
■21-2-2 CommonJSの動向 474
■21-2-3 モジュール機能 474
■■21-3 Node.js 477
■21-3-1 Node.jsとは 477
■21-3-2 nodeコマンド 482
■21-3-3 npmとパッケージ 482
■21-3-4 consoleモジュール 483
■21-3-5 utilモジュール 484
■21-3-6 processオブジェクト 485
■21-3-7 グローバルオブジェクト 487
■21-3-8 Node.jsプログラミングの概要 487
■21-3-9 イベントAPI 489
■21-3-10 バッファ 494
■21-3-11 ストリーム 498

■■■22章 実践 Node.jsプログラミング 502
■■22-1 HTTPサーバ処理 502
■22-1-1 HTTPサーバ処理の基本 502
■22-1-2 リクエスト処理 503
■22-1-3 レスポンス処理 505
■22-1-4 POSTリクエスト処理 506
■■22-2 HTTPクライアント処理 507
■■22-3 HTTPS処理 509
■22-3-1 opensslコマンドを使う自己証明書の発行方法 509
■22-3-2 HTTPSサーバ 509
■■22-4 Socket.IOとWebSocket 510
■■22-5 低レイヤのネットワークプログラミング 511
■22-5-1 低レイヤネットワーク処理 511
■22-5-2 ソケットとは 512
■22-5-3 ソケットプログラミングの基本構造 513
■22-5-4 ソケットプログラミングの具体例 515
■■22-6 ファイル処理 516
■22-6-1 本節のサンプルコード 516
■22-6-2 ファイルの非同期処理 517
■22-6-3 ファイルの同期処理 518
■22-6-4 ファイル操作系の関数 518
■22-6-5 ファイル読み込み 519
■22-6-6 ファイル書き込み 520
■22-6-7 ディレクトリ操作 521
■22-6-8 ファイルの変更監視 522
■22-6-9 ファイルパス 522
■■22-7 タイマー 523
▽▽コラム Node.jsのデバッグ 523
■■22-8 Express 524
■22-8-1 URLルーティング 524
■22-8-2 リクエスト処理 525
■22-8-3 レスポンス処理 526
■22-8-4 scaffold作成機能 526
■22-8-5 MVCアーキテクチャ 526
■22-8-6 テンプレート言語Jade 527
■22-8-7 MongoDB(データベース) 529
■22-8-8 Mongooseの実例 531
■22-8-9 ExpressとMongooseを使うWebアプリ 533

索引 536
おわりに 542


関連文書:

  • 関連文書は見つからんがな

Posted by & filed under いろいろ.


2週間ほどインドに行ってきました。目的はインドの若者の技術レベルの調査です。

日本の若者との技術レベル比較、インドではvim派とEmacs派のどちらが優勢か、Android派とiPhone(iOS)派のどちらが優勢か等々、書きたいのですが日本での野暮用で時間が作れないので後日書きます。それからパーフェクトJavaScriptも見本誌ができました。発売日は明後日です。これの紹介記事も書きたいので、インドレポートはその後になります。

今日は、インドの写真と動画のみ挙げておきます。暇つぶしにどうぞ。

ellora cave

spiderman vs. ganesha

動画のURL(動画の縦横比がPCで綺麗にならなかったらAndroid端末で視聴してください)。
http://dev.ariel-networks.com/misc/kolkata.mp4 (サイズは100MBぐらい)


関連文書:

  • 関連文書は見つからんがな