<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Go towards a Word-Progress &#187; Protocol Buffer</title>
	<atom:link href="http://wordprogress.org/archives/tag/protocol-buffer/feed" rel="self" type="application/rss+xml" />
	<link>http://wordprogress.org</link>
	<description>　～言霊とプログラム言語の共進化!?</description>
	<lastBuildDate>Fri, 22 Jan 2010 03:37:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>「本気クラウド勉」その2 BooなsilverlightでprotocolBufferをホゲるまで</title>
		<link>http://wordprogress.org/archives/879</link>
		<comments>http://wordprogress.org/archives/879#comments</comments>
		<pubDate>Sun, 27 Dec 2009 14:53:43 +0000</pubDate>
		<dc:creator>kyon</dc:creator>
				<category><![CDATA[クラウド]]></category>
		<category><![CDATA[Boo]]></category>
		<category><![CDATA[Protocol Buffer]]></category>

		<guid isPermaLink="false">http://wordprogress.org/?p=879</guid>
		<description><![CDATA[クラウドの実サービスは、2010年末くらいでいいだろうとタカをくくって、2009年末からクラウドのお勉強を開始した本シリーズ。
=======================
[追記]
 　　本エントリとあんま関係ないが、ホットエントリな、こちらの 「ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない」&#38;「ウェブ業界の15年、これからの10年」のエントリにほぼ全面賛同。
『　　中規模(おおよそ、1000万PV/月程度？)までは１台でがんばる覚悟を決める。ある程度以上の規模になると思ったら、コンパイル言語を使ってアプリを書く&#38;必要に応じ十分なスペックのマルチコアマシンを速攻買える予算を用意しておく。』が、2010年代のCOST-EFFECTIVEな考え方なのでは、と。で、それ以上になる or 負荷の変動がかなり大きいと見込まれる場合には、クラウドというソリューションを採用することになるかと。(おそらく、大多数のweb案件ではクラウド対応が必須となることは当面ない。なので、コスト面にあまり差がなければ、当座、普通のサーバかクラウドかは気分で選んでいいくらい、かと)。
 　　なんだかんだいって、cpuのマルチコア化やバス周りの高速化はまだまだ進むわけで、、2015年くらいになると、中途半端な複数台構成技術は、「滅多に必要とならない」のかなと思う。。その頃になると、Map-ReduceやNOSQLを使いこなす技術もそこそこ枯れてきて、「自分好みのクラウドを、大きく外さず使うテクニック」が、大多数のWeb屋にとって普通のスキルとなるんだろうな。
 ・・・もちろん、クラウドなんて自前でもっといいの作るぜ、とか「普通な奴らをぶっ飛ばせ」とかいう勢いのあるWeb屋がいちばんかっこいいんだけど。
 
 =======================
2010年末に「まぁ、あり」だと思われるサービスの提供形態のひとつが、
 サーバ側Google App Engine で、クライアントがsilverlightというRIA型クラウドアプリ。
(Windows Azureの話はそのうちに。)
これを、Google App Engine for Python + silverlight on Booで組むと、だいたいスクリプトっぽいし、実行速度もそこそこでいけるのではと狸の皮算用中。
ついでに、両者の通信プロトコルは、Google protocol Bufferにしておけば、他の言語への取替えもきいていい感じかなと
 ＊あと、もちろん、SOAPなんかを使う場合と比べて、実用上十分に早いぞ、と。
ということで、今回ははじめてまともに触るBooでSilverlight&#38;Protocol Bufferしてみた。
大きくはまることはなかったが、寄り道・脱線しまくりで半日かかってしまった。。
[1] BooとPythonの違い
Python激似と、たまに話題となる.Net上のコンパイル言語Boo。とりあえず、Booのチュートリアルなんかをヒントにbooiでいろいろ試してみる。
# Booのスライス　日本語の扱いを除くとPythonと完全互換
str ="こんにちは。Hello, World"

print str[0:6]
print str[6:11]
print str[:-5]
# BooのmutableかつAnyなリスト　AddはC#風
lst = [1, 'two', 3.0, "four"]
lst.Add(5)
lst.Add("six")
for c in lst:
    print c
わかったこと :


Pythonと命令や関数なんかはかなり似ている。
が、Booは静的型付けな言語なので、関数の引数やジェネリックへの対応は必要である他、メソッドがC#風(例、appendでなくAdd)。
Python使いな人はここでBooにいらつくんだろうか(個人的にも、pythonと同様のメソッド名も採用してほしい・・・)。
とはいえ、C#より圧倒的にスクリプト風味なBoo。もしかするとPython以外のスクリプト言語ユーザーにおすすめかもしれない。


[2] Boo+NAntでSilverlight
日本語プログで唯一、Booをきちんと書いているのではと思われるこちらの方のエントリで、速攻動いた。
NAntも勉強させてもらったので、感謝。ただ、NAmtは今では、完全にMSBuildにくわれてしまったのかなぁ。。
[3] Boo+protobuf-netでProtocol Buffer
Google謹製のProtocol BufferにC#界隈の人々がけっこう熱心に取り組んでいるのは前からしっていた。ので、C#がわかれば、あとは、protobuf-netあたりを使えば、そっこうBooでもProtocol Bufferできるだろうと思ったのだが、、、Boo言語入門をまともにしていないので、ちまちまはまった・・・が、なんとかなった。。。
はじめに、protobuf-netについてくるprotogen.exeをつかって、以下の.protoファイルからC#ソースを生成
package tutorial;

message Person [...]]]></description>
			<content:encoded><![CDATA[<p>クラウドの実サービスは、2010年末くらいでいいだろうとタカをくくって、2009年末からクラウドのお勉強を開始した本シリーズ。<br />
=======================<br />
<em><span style="color: #800000;"><strong>[追記]<br />
</strong><span style="font-style: normal;"> 　　本エントリとあんま関係ないが、ホットエントリな、こちらの 「</span><a href="http://d.hatena.ne.jp/kazuhooku/20091226/1261838127"><span style="font-style: normal;">ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない</span></a><span style="font-style: normal;">」&amp;「</span></span><a href="http://d.hatena.ne.jp/kazuhooku/20091227/1261900135"><span style="color: #000080;"><span style="font-style: normal;">ウェブ業界の15年、これからの10年</span></span></a><span style="color: #800000;"><span style="font-style: normal;">」のエントリにほぼ全面賛同。<br />
『</span><strong><span style="font-style: normal;">　　中規模(おおよそ、1000万PV/月程度？)までは１台でがんばる覚悟を決める。ある程度以上の規模になると思ったら、コンパイル言語を使ってアプリを書く&amp;必要に応じ十分なスペックのマルチコアマシンを速攻買える予算を用意しておく。</span></strong><span style="font-style: normal;">』が、2010年代のCOST-EFFECTIVEな考え方なのでは、と。で、それ以上になる or 負荷の変動がかなり大きいと見込まれる場合には、クラウドというソリューションを採用することになるかと。(おそらく、大多数のweb案件ではクラウド対応が必須となることは当面ない。なので、コスト面にあまり差がなければ、当座、普通のサーバかクラウドかは気分で選んでいいくらい、かと)。</span></span></em></p>
<p><span style="color: #800000;"> 　　なんだかんだいって、cpuのマルチコア化やバス周りの高速化はまだまだ進むわけで、、<strong>2015年くらい</strong>になると、中途半端な複数台構成技術は、「滅多に必要とならない」のかなと思う。。その頃になると、Map-ReduceやNOSQLを使いこなす技術もそこそこ枯れてきて、「<strong>自分好みのクラウドを、大きく外さず使うテクニック</strong>」が、大多数のWeb屋にとって<strong>普通のスキル</strong>となるんだろうな。</span></p>
<p><em><span style="color: #800000;"> ・・・もちろん、クラウドなんて自前でもっといいの作るぜ、とか「普通な奴らをぶっ飛ばせ」とかいう勢いのあるWeb屋がいちばんかっこいいんだけど。<br />
</span> </em><span style="color: #800000;"><br />
</span> =======================</p>
<p>2010年末に「まぁ、あり」だと思われるサービスの提供形態のひとつが、<br />
<strong> サーバ側Google App Engine で、クライアントがsilverlightというRIA型クラウドアプリ</strong>。<br />
(Windows Azureの話はそのうちに。)</p>
<p>これを、<strong>Google App Engine for Python + silverlight on Boo</strong>で組むと、だいたいスクリプトっぽいし、実行速度もそこそこでいけるのではと狸の皮算用中。<br />
ついでに、両者の通信プロトコルは、<a href="http://code.google.com/p/protobuf/">Google protocol Buffer</a>にしておけば、他の言語への取替えもきいていい感じかなと<br />
<em> ＊あと、もちろん、SOAPなんかを使う場合と比べて、実用上十分に早いぞ、と。</em></p>
<p>ということで、今回ははじめてまともに触るBooでSilverlight&amp;Protocol Bufferしてみた。<br />
大きくはまることはなかったが、寄り道・脱線しまくりで半日かかってしまった。。</p>
<h2>[1] BooとPythonの違い</h2>
<p>Python激似と、たまに話題となる.Net上のコンパイル言語Boo。とりあえず、<a href="http://boo.codehaus.org/Tutorials">Booのチュートリアル</a>なんかをヒントにbooiでいろいろ試してみる。</p>
<pre class="brush:python"># Booのスライス　日本語の扱いを除くとPythonと完全互換
str ="こんにちは。Hello, World"

print str[0:6]
print str[6:11]
print str[:-5]
# BooのmutableかつAnyなリスト　AddはC#風
lst = [1, 'two', 3.0, "four"]
lst.Add(5)
lst.Add("six")
for c in lst:
    print c</pre>
<p><span style="text-decoration: underline;">わかったこと :</span></p>
<blockquote>
<ul>
<li>Pythonと命令や関数なんかはかなり似ている。</li>
<li>が、Booは静的型付けな言語なので、関数の引数やジェネリックへの対応は必要である他、メソッドがC#風(例、appendでなくAdd)。<br />
Python使いな人はここでBooにいらつくんだろうか(個人的にも、pythonと同様のメソッド名も採用してほしい・・・)。</li>
<li>とはいえ、C#より圧倒的にスクリプト風味なBoo。もしかするとPython以外のスクリプト言語ユーザーにおすすめかもしれない。</li>
</ul>
</blockquote>
<h2>[2] Boo+NAntでSilverlight</h2>
<p>日本語プログで唯一、Booをきちんと書いているのではと思われる<a href="http://d.hatena.ne.jp/coma2n/20090206/1233904958">こちらの方のエントリ</a>で、速攻動いた。<br />
NAntも勉強させてもらったので、感謝。ただ、NAmtは今では、完全にMSBuildにくわれてしまったのかなぁ。。</p>
<h2>[3] Boo+protobuf-netでProtocol Buffer</h2>
<p>Google謹製のProtocol BufferにC#界隈の人々がけっこう熱心に取り組んでいるのは前からしっていた。ので、C#がわかれば、あとは、<a href="http://code.google.com/p/protobuf-net/">protobuf-net</a>あたりを使えば、そっこうBooでもProtocol Bufferできるだろうと思ったのだが、、、Boo言語入門をまともにしていないので、ちまちまはまった・・・が、なんとかなった。。。<br />
はじめに、protobuf-netについてくるprotogen.exeをつかって、以下の.protoファイルからC#ソースを生成</p>
<pre class="brush:python">package tutorial;

message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phone = 4;
}

message AddressBook {
  repeated Person person = 1;
}</pre>
<hr />ん～、protobuf-net、ぜんぜん、ドキュメントが整備されてないなぁ。とりあえず、protogen &#8211;helpしてコマンドの打ち方をクリア。</p>
<p>で、生成されたcsファイルからdllを生成。お試し用の以下のような.projファイルを作って、msbuildする。</p>
<pre class="brush:xml">&lt;!-- ======== MsBuild .projファイル(文字コードはutf-8) ========= --&gt;
&lt;Project DefaultTargets="build"   xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&gt;
    &lt;!-- =========== プロパティ ========== --&gt;    &lt;PropertyGroup&gt;
        &lt;ProjectName&gt;MyProtoBuf&lt;/ProjectName&gt;
    &lt;/PropertyGroup&gt;
    &lt;!-- ======= アイテムグループ ======== --&gt;
    &lt;ItemGroup&gt;
        &lt;CSFile Include="**\*.cs"/&gt;
        &lt;Reference Include="*.dll"/&gt;
    &lt;/ItemGroup&gt;
    &lt;!-- =========== ターゲット ========== --&gt;
    &lt;Target Name="build" &gt;
        &lt;CSC   Sources="@(CSFile)"   References="@(Reference)"  OutputAssembly="$(ProjectName).dll"  TargetType="library" /&gt;
    &lt;/Target&gt;&lt;
/Project&gt;</pre>
<p>.\protobufsrc\test&gt;msbuild msbuild.proj</p>
<p><em>Microsoft (R) Build Engine Version 3.5.30729.1<br />
[Microsoft .NET Framework, Version 2.0.50727.4200]<br />
Copyright (C) Microsoft Corporation 2007. All rights reserved.</em></p>
<p><em>2009/12/27 18:24:15 にビルドを開始しました。</em></p>
<p><em>ビルドに成功しました。<br />
0 警告<br />
0 エラー</em><br />
よし,MyProtoBuf.dllがでけた。ということで、いよいよBooでいじくってみる。まずは、REPLなbooishで<br />
.\protobufsrc\test&gt;booish -resource MyProtoBuf.dll protobuf-net.dll</p>
<p><em>Welcome to booish, an interactive interpreter for the boo programming language.<br />
Running boo 0.9.2.3383 on CLR 2.0.50727.4200.</em></p>
<p><em>Enter boo code in the prompt below (or type /help).<br />
Adding reference to &#8216;MyProtoBuf.dll&#8217;<br />
Adding reference to &#8216;protobuf-net.dll&#8217;</em></p>
<p>・・・あれ、これ、・・・といろいろ悩むがもはやドキュメントはあてにせず、protobuf-netのソースをたどりつつ、以下の感じで、まずはProtocol Bufferベースのシリアライズ・デシリアライズができた。</p>
<pre class="brush:python">import tutorial
import System.IO

person = Person()
person.id = 1234
person.name = "My name is  Hige."
person.email = "hige@example.com"

#バイナリで書き出し
file = File.Create("person.bin")
ProtoBuf.Serializer.Serialize(file, person)
file.Close()
#バイナリからオブジェクトを復元
f2 = File.OpenRead("person.bin")
newPerson = ProtoBuf.Serializer.Deserialize[of Person](f2)
print newPerson.name</pre>
<p>その後は、これとほぼ同様に、</p>
<ul>
<li>インタプリタ環境で実行<br />
#booi -r:ProtoBuf.dll -r:protobuf-net.dll person.boo</li>
<li>コンパイルして実行<br />
#booc -r:ProtoBuf.dll -r:protobuf-net.dll -r:Boo.Lang.dll person.boo</li>
</ul>
<p>おおっはじめて、booでexeを作った。</p>
<p>ということで、<br />
「[4] いよいよsilverlightでProtocolBuffer」、クラウドとsilverlightでバイナリ通信するぜ・・・といくところなのだが、まともなアプリにするには一晩かかりそうな気がするので、このあたりで、いったん休憩。</p>
<p><strong>今回の成果 :</strong><br />
C#とBooの関係は、予想通り、JavaとScalaの関係に近い。≒まぁ、なんとかなる。<br />
問題は、C#やBooを扱っているブロガーな人々がだいぶ少ないこと。<br />
ん～、自分が人柱になれってことかぁ。まぁ、2010年の楽しみができたと。<br />
=====================<br />
[おまけ]<br />
気力がつきた時のあいまにやった。PythonでProtocol Bufferについて。実行ログだけ。ほとんど、<a href="http://d.hatena.ne.jp/Voluntas/20080711/1215736060">こちらの方</a>のいいなりでできた。多謝。<br />
まぁ、Boo版と比較してみると、Python v.s. Booぽくなってちょっといいかも。</p>
<p>$ cd protobuf-2.2.0a<br />
$ ./configure &#8211;prefix=/opt/google<br />
$ make<br />
$ sudo make install<br />
$ cd python<br />
$ export PATH=/opt/google/bin:$PATH<br />
$ sudo python setup.py install<br />
$ protoc -I=. &#8211;python_out=. addressbook.proto<br />
$sudo easy_install ipython</p>
<p>以下、ipythonでしばしばホゲる。<br />
$ipython -cl</p>
<pre class="brush:python">import addressbook_pb
person = addressbook_pb.Person()
person.id = 1234
person.name = "My name is  Hige."
person.email = "hige@example.com"
phone = person.phone.add()
phone.number = "555-4321"
phone.type = addressbook_pb.Person.HOME
#書き込み
f= open('adr.pb','w')
f.write(person.SerializeToString())
f.close() #()はpythonでは省略不可
#読み出し
str = open('adr.pb').read()
tmp = addressbook_pb.Person()
tmp.ParseFromString(str)</pre>
<p>当然ながら、PythonでもProtocolBufferのシリアライズ・デシリアライズできた、と。</p>
]]></content:encoded>
			<wfw:commentRss>http://wordprogress.org/archives/879/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Scala視点からのGo　その１　Goの変数　&amp;Protocol Bufferサポート</title>
		<link>http://wordprogress.org/archives/386</link>
		<comments>http://wordprogress.org/archives/386#comments</comments>
		<pubDate>Wed, 11 Nov 2009 04:33:35 +0000</pubDate>
		<dc:creator>アルケー</dc:creator>
				<category><![CDATA[Go]]></category>
		<category><![CDATA[Protocol Buffer]]></category>

		<guid isPermaLink="false">http://wordprogress.org/?p=386</guid>
		<description><![CDATA[C++プログラマのためのGo より  Goの変数はScalaよりストイックな感じ　・・　:で区切ったりしない。
Go                           C++
var v1 int;               // int v1;
var v2 string;    [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://golang.org/doc/go_for_cpp_programmers.html">C++プログラマのためのGo</a> より  Goの変数はScalaよりストイックな感じ　・・　:で区切ったりしない。</p>
<pre style="font-size: 9pt; background-color: #f8f8ff; margin-top: 1em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 15px; overflow-x: auto; overflow-y: auto; word-wrap: break-word; padding: 0.99em;"><strong>Go                           C++</strong>
var v1 int;               // int v1;
var v2 string;            // const std::string v2;  (approximately)
var v3 [10]int;           // int v3[10];
var v4 []int;             // int* v4;  (approximately)
var v5 struct { f int };  // struct { int f; } v5;
var v6 *int;              // int* v6;  (but no pointer arithmetic)
var v7 map[string]int;    // unordered_map&lt;string, int&gt;* v7;  (approximately)
var v8 func(a int) int;   // int (*v8)(int a);</pre>
<p>また、<br />
var a uint64 = 1;<br />
と書く代わりに、<span style="color: #800000;"><strong>:=</strong></span>をシンタックス・シュガーとして使えるもよう。<br />
a <span style="color: #800000;"><strong>:=</strong></span> uint64(1);</p>
<h3>Protocol Bufferサポート</h3>
<p><a href="http://golang.org/doc/go_faq.html#Does_Go_support_Google_protocol_buffers">FAQに書いてある</a>とおり、次のProtocol Bufferのリリースから、Google本家でProtocol BufferからGoコード生成に対応する模様。これは良い。</p>
<h3>Goの並列処理アプローチについて</h3>
<pre style="font-size: 9pt; background-color: #f8f8ff; margin-top: 1em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 15px; overflow-x: auto; overflow-y: auto; word-wrap: break-word; padding: 0.99em;">このあたりは、自らのリテラシーのなさにちょっと涙。。
変数にvalみたいなのはないのか？　・・・これは、better Cだからたんにconstか。
並列処理のサポートはどうしているんだろう？・・・valは普通に変数名で使われているから、なさげ。<a href="http://golang.org/doc/go_mem.html#tmp_39">Lockを使うみたい</a>、だ。</pre>
<pre style="font-size: 9pt; background-color: #f8f8ff; margin-top: 1em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 15px; overflow-x: auto; overflow-y: auto; word-wrap: break-word; padding: 0.99em;">ということで、<a href="http://golang.org/doc/go_lang_faq.html#csp">FAQのGoの並列処理アプローチ部分の記述</a>について読んでみる　。　Actorの文字はなく、代わりに、<strong>Communicating Sequential Processes</strong>（<strong>CSP</strong>）の文字が。</pre>
<pre style="font-size: 9pt; background-color: #f8f8ff; margin-top: 1em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 15px; overflow-x: auto; overflow-y: auto; word-wrap: break-word; padding: 0.99em;">CSP、全くしらなかったが、Erlangに影響を与えている・・・のか？ 並列処理のリテラシーに乏しいので、ひとまず断念。。。どなたか、CSPに詳しい方、help me!!</pre>
]]></content:encoded>
			<wfw:commentRss>http://wordprogress.org/archives/386/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google謹製JavaScript開発ライブラリ「closure」のProtocol Bufferサポートがシンプルな件</title>
		<link>http://wordprogress.org/archives/373</link>
		<comments>http://wordprogress.org/archives/373#comments</comments>
		<pubDate>Wed, 11 Nov 2009 03:17:04 +0000</pubDate>
		<dc:creator>アルケー</dc:creator>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[closure]]></category>
		<category><![CDATA[Protocol Buffer]]></category>

		<guid isPermaLink="false">http://wordprogress.org/?p=373</guid>
		<description><![CDATA[「Gmailを作っているJavaScriptライブラリを公開」(後藤氏のちょっと扇情的な解説記事)。
なるほど、こう言われると、Google謹製JavaScript開発ライブラリ「closure」、気になるわな。でも、ほんとに 「Gmailを作っているJavaScriptライブラリを公開」なのか？
ということで、google codeからソースコードををダウンロード・・・jsライブラリなのに126MBもある。
中身 をチェックする前に、これだけ大物だと・・ライブラリAPI文書を読んだ方がよさそうだ。
個人的には、
proto.Serializer Extends goog.json.Serializer
が，かなり気になる。そう、jsonのしりあらいざーを拡張して、JavaScriptでGoolge Protocol Bufferを使えるようにしてくれている、と。
ソースを斜め読みするかぎり、
まず、goog.json.Serializer側でJsのobjectをArrayに直して、
次にArrayからProtocolBuffer向けの文字列を生成するっぽい。
ProtocolBuffer向けの文字列を生成のところは３０行もない。Protocol Bufferの仕組みを理解して復習しなきゃだけれど、これだけシンプルな作りなら使いどころがあるかもしれない。
]]></description>
			<content:encoded><![CDATA[<p>「Gmailを作っているJavaScriptライブラリを公開」(後藤氏の<a href="http://journal.mycom.co.jp/news/2009/11/09/005/index.html">ちょっと扇情的な解説記事</a>)。<br />
なるほど、こう言われると、Google謹製JavaScript開発ライブラリ「closure」、気になるわな。でも、ほんとに 「Gmailを作っているJavaScriptライブラリを公開」なのか？</p>
<p>ということで、google codeからソースコードををダウンロード・・・jsライブラリなのに126MBもある。</p>
<p>中身 をチェックする前に、これだけ大物だと・・<a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/docs/index.html">ライブラリAPI文書</a>を読んだ方がよさそうだ。<br />
個人的には、</p>
<p><span style="font-size: 35px; font-weight: bold; color: black;"><a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/docs/class_goog_proto_Serializer.html">proto.Serializer</a></span> <span>Extends</span> <span><a style="text-decoration: none; color: #3355cc; font-weight: bold;" href="http://closure-library.googlecode.com/svn/trunk/closure/goog/docs/class_goog_json_Serializer.html">goog.json.Serializer</a></span></p>
<p>が，かなり気になる。そう、jsonのしりあらいざーを拡張して、JavaScriptでGoolge Protocol Bufferを使えるようにしてくれている、と。</p>
<p>ソースを斜め読みするかぎり、<br />
まず、<span><a style="text-decoration: none; color: #3355cc; font-weight: bold;" href="http://closure-library.googlecode.com/svn/trunk/closure/goog/docs/class_goog_json_Serializer.html">goog.json.Serializer</a>側で</span>JsのobjectをArrayに直して、<br />
次にArrayからProtocolBuffer向けの文字列を生成するっぽい。</p>
<p>ProtocolBuffer向けの文字列を生成のところは３０行もない。Protocol Bufferの仕組みを理解して復習しなきゃだけれど、これだけシンプルな作りなら使いどころがあるかもしれない。</p>
]]></content:encoded>
			<wfw:commentRss>http://wordprogress.org/archives/373/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
