<?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; Boo</title>
	<atom:link href="http://wordprogress.org/archives/tag/boo/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>本気のクラウド・アプリを１年半後に作り上げるためのお勉強メモ(略して「本気クラウド勉」)　その１</title>
		<link>http://wordprogress.org/archives/858</link>
		<comments>http://wordprogress.org/archives/858#comments</comments>
		<pubDate>Thu, 24 Dec 2009 03:37:36 +0000</pubDate>
		<dc:creator>kyon</dc:creator>
				<category><![CDATA[クラウド]]></category>
		<category><![CDATA[Boo]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[涼宮ハルヒの驚愕]]></category>

		<guid isPermaLink="false">http://wordprogress.org/?p=858</guid>
		<description><![CDATA[2009年後半はまさしくBuzzwordとして盛り上がったクラウド。
コンサルの人々などが精一杯語った後で訪れるであろう失望期にこそ、真の普及が始まる(・・・かもしれないし、Web2.0のような末路をたどるかもしれない)。
自分としては、2010年末のクラウドは、少なくともオードリー春日よりも売れているのではと思っているので、そろそろクラウド・アプリの構築を開始しようかと。

オードリーは嫌いでないというかむしろ好きだし、レイザーラモンHG同様、長く応援したいのだが・・・2011年頃には、「消失」映画化後に角川がブレークさせようとするであろう「佐々木」よりマイナーキャラとなっているのではと思う今日この頃。佐々木祭りは2010年のイブに期待。 

ということで、調べたもの :
◆Google App Engine(GAE)
・for Python　　　・・(1)
・for JavaVM　　　・・(2)
◆Windows Azure　　　・・(3)
ずばり、今の自分なら(1)のPythonを使う。(2)でScalaやClojureも魅力なのだが、自前でフレームワークを作る暇がなさげなので、ちょっと断念(Scalaは従来型で使い続ける)。
以下、Google App Engine for Pythonを選んだ理由を少しだけ。
まずは、永遠のパソコン少年中島氏のさすがのエントリ『Google App Engine入門：実行効率を犠牲にせずに開発効率だけを上げるテクニック』がある。Google謹製の簡易フレームワークに必要なものだけを付け加えるというセンスがlazyで素敵。・・・といって結局Djangoなんかを使うのかもだけれど。
加えて、クラウドで業務アプリに近いものを開発しようと思った場合、リッチクライアントとの組み合わせが不可欠となるのだが、この1～2年くらいでは、自分的に最高のリッチクライアント開発環境は、Boo on Silverlightであることが判明していることが大きい。

 前もどっかで書いたけど、Booは、.NET(CLR)上のPython激似のコンパイル言語。でもって、NAntなんかと組み合わせて、さくっとSilverlight開発ができる。・・・あんま勉強していないが、コンパイル言語だけあって、Booはけっこう速い(Scala並みというか、少なくともC#並み？)のでは、とも思っている。・・・勝手に最強実用言語かもしらんと思っていたり。

『Python やっちゃうけどイイよね？』とかを参考に、PythonとBooを同時に入門しちゃえば効率いいでしょ的なノリ。GAEでPythonした後、2010年の下期くらいには、AzureでBooできるならばなお良し、と。
=============
[追記] 　あ、本エントリは、クラウドの「本気のお勉強」にGAE for Pythonを使うといっているだけ。本気でアプリ実装するときが来た時には、その場で一番いけてるフレームワークを採用する予定・・・ひょっとして、GAE for Golang ???
]]></description>
			<content:encoded><![CDATA[<p>2009年後半はまさしくBuzzwordとして盛り上がったクラウド。<br />
コンサルの人々などが精一杯語った後で訪れるであろう失望期にこそ、真の普及が始まる(・・・かもしれないし、Web2.0のような末路をたどるかもしれない)。</p>
<p>自分としては、2010年末のクラウドは、少なくともオードリー春日よりも売れているのではと思っているので、そろそろクラウド・アプリの構築を開始しようかと。</p>
<ul>
<li><span style="color: #888888;">オードリーは嫌いでないというかむしろ好きだし、レイザーラモンHG同様、長く応援したいのだが・・・2011年頃には、「消失」映画化後に角川がブレークさせようとするであろう「佐々木」よりマイナーキャラとなっているのではと思う今日この頃。<strong>佐々木祭りは2010年のイブに期待</strong>。 </span></li>
</ul>
<p>ということで、調べたもの :</p>
<p><strong>◆Google App Engine(GAE)<br />
・for Python　　　・・(1)<br />
・for JavaVM　　　・・(2)<br />
◆Windows Azure　　　・・(3)</strong></p>
<p><strong>ずばり、今の自分なら(1)のPythonを使う</strong>。(2)でScalaやClojureも魅力なのだが、自前でフレームワークを作る暇がなさげなので、ちょっと断念(Scalaは従来型で使い続ける)。<br />
以下、Google App Engine for Pythonを選んだ理由を少しだけ。<br />
まずは、永遠のパソコン少年中島氏のさすがのエントリ『<a href="http://satoshi.blogs.com/life/2009/11/gdispatch_kwargs.html">Google App Engine入門：実行効率を犠牲にせずに開発効率だけを上げるテクニック</a>』がある。Google謹製の簡易フレームワークに必要なものだけを付け加えるというセンスがlazyで素敵。・・・といって結局Djangoなんかを使うのかもだけれど。<br />
加えて、クラウドで業務アプリに近いものを開発しようと思った場合、リッチクライアントとの組み合わせが不可欠となるのだが、この1～2年くらいでは、自分的に最高のリッチクライアント開発環境は、Boo on Silverlightであることが判明していることが大きい。</p>
<ul>
<li> 前もどっかで書いたけど、Booは、.NET(CLR)上のPython激似のコンパイル言語。でもって、NAntなんかと組み合わせて、さくっとSilverlight開発ができる。・・・あんま勉強していないが、コンパイル言語だけあって、Booはけっこう速い(Scala並みというか、少なくともC#並み？)のでは、とも思っている。・・・勝手に最強実用言語かもしらんと思っていたり。</li>
</ul>
<p>『<a href="http://d.hatena.ne.jp/hamatsu1974/searchdiary?word=%2a%5bPython%20%b2%f2%c0%e2%b5%ad%bb%f6%bc%d0%a4%e1%c6%c9%a4%df%5d">Python やっちゃうけどイイよね？</a>』とかを参考に、PythonとBooを同時に入門しちゃえば効率いいでしょ的なノリ。GAEでPythonした後、2010年の下期くらいには、AzureでBooできるならばなお良し、と。</p>
<p>=============</p>
<p>[追記] 　あ、本エントリは、クラウドの「本気のお勉強」にGAE for Pythonを使うといっているだけ。本気でアプリ実装するときが来た時には、その場で一番いけてるフレームワークを採用する予定・・・ひょっとして、GAE for Golang ???</p>
]]></content:encoded>
			<wfw:commentRss>http://wordprogress.org/archives/858/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2010年のAzureなら、Booでしょう</title>
		<link>http://wordprogress.org/archives/722</link>
		<comments>http://wordprogress.org/archives/722#comments</comments>
		<pubDate>Wed, 25 Nov 2009 13:49:55 +0000</pubDate>
		<dc:creator>kyon</dc:creator>
				<category><![CDATA[Windows Azure]]></category>
		<category><![CDATA[Boo]]></category>
		<category><![CDATA[涼宮ハルヒの消失]]></category>

		<guid isPermaLink="false">http://wordprogress.org/?p=722</guid>
		<description><![CDATA[いや、Windows Azureで開発だというなら、PHPではなくBooだと思うな。
というわけで、なぜだかwikipedia日本語版にはページがない.NET上の静的PythonのBooを試してみる。

はじめに白状しておくが、元ネタはこちら。まじめにBooに興味を持った方は本家にどうぞ。以下は、例によって駄文。

.NETの言語なので、PowerShellで。PowerShell2.0はまだだったはずなので、PowerShell初号機で :
まずは、例によって文字列操作。
Windows PowerShell
Copyright (C) 2006 Microsoft Corporation. All rights reserved.
PS C:\boo-0.9.2.3383-bin\bin&#62; .\boo.exe
boo command line utility 0.9.2.3383
The following builtin functions are available:
dir(Type): lists the members of a type
help(Type): prints detailed information about a type
load(string): evals an external boo file
globals(): returns the names of all variables known to the interpreter
Enter boo code in the prompt below.
&#62;&#62;&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>いや、Windows Azureで開発だというなら、PHPではなくBooだと思うな。<br />
というわけで、なぜだかwikipedia日本語版にはページがない.NET上の静的PythonのBooを試してみる。</p>
<ul>
<li>はじめに白状しておくが、元ネタは<a href="http://www.asahi-net.or.jp/~sy7a-ht/diary/tut_boo.html">こちら</a>。まじめにBooに興味を持った方は<a href="http://boo.codehaus.org/">本家</a>にどうぞ。以下は、例によって駄文。</li>
</ul>
<p>.NETの言語なので、PowerShellで。PowerShell2.0はまだだったはずなので、PowerShell初号機で :<br />
まずは、例によって文字列操作。</p>
<p>Windows PowerShell<br />
Copyright (C) 2006 Microsoft Corporation. All rights reserved.</p>
<p>PS C:\boo-0.9.2.3383-bin\bin&gt; .\boo.exe<br />
boo command line utility 0.9.2.3383</p>
<p>The following builtin functions are available:<br />
dir(Type): lists the members of a type<br />
help(Type): prints detailed information about a type<br />
load(string): evals an external boo file<br />
globals(): returns the names of all variables known to the interpreter</p>
<p>Enter boo code in the prompt below.<br />
&gt;&gt;&gt; n1 = &#8220;Nagato&#8221;<br />
&#8216;Nagato&#8217;<br />
&gt;&gt;&gt; n1[1] +&#8221;ri&#8221; +n1[2:4] + 10<br />
&#8216;ariga10&#8242;</p>
<p>ふむ、ありがとうが言えた。Javaと同じくStringは不変(immutable)で、Scalaぽく位置指定して１文字取り出せる。[n:m]はn文字目以上m文字目未満なので、気をつけておこう。+10しているので、一瞬動的言語と思ってしまうが、これはScala やF#などと同様に型推論のおかげ。</p>
<p>[大括弧]で宣言するリストは、mutableかつ複数要素の混在ができる。<br />
&gt;&gt;&gt; SOS= ["Haruhi",'Kyon']<br />
['Haruhi', 'Kyon']<br />
「+=」演算子でメンバーを追加できる。<br />
&gt;&gt;&gt; SOS += ["Nagato", "Mikuru", "Koizumi"]<br />
['Haruhi', 'Kyon', 'Nagato', 'Mikuru', 'Koizumi']<br />
単一の要素はaddではなく、、、<br />
&gt;&gt;&gt; SOS.add(&#8220;unknown world person&#8221;)<br />
&#8212;&#8212;&#8211;^<br />
ERROR: &#8216;add&#8217; is not a member of &#8216;Boo.Lang.List&#8217;.<br />
Addで追加。メソッドが大文字ではじまるのはちょっと萌えないのだが、C#をリスペクトしたのかな。<br />
&gt;&gt;&gt; SOS.Add(&#8220;unknown world person&#8221;)<br />
['Haruhi', 'Kyon', 'Nagato', 'Mikuru', 'Koizumi', 'unknown world person']<br />
メンバーの除去は、場所を指定してRemoveAt<br />
&gt;&gt;&gt; SOS.RemoveAt(1)<br />
['Haruhi', 'Nagato', 'Mikuru', 'Koizumi', 'unknown world person']<br />
&gt;&gt;&gt; SOS.RemoveAt(0)<br />
['Nagato', 'Mikuru', 'Koizumi', 'unknown world person']<br />
おっと、１人よけいだったが、団長は消失した。<br />
リストの先頭メンバーへは、小括弧ではなく、、、<br />
&gt;&gt;&gt; SOS(0)<br />
&#8212;-^<br />
ERROR: It is not possible to invoke an expression of type &#8216;Boo.Lang.List&#8217;.<br />
大括弧でアクセス。<br />
&gt;&gt;&gt; SOS[0]<br />
&#8216;Nagato&#8217;</p>
<p>リストの個々の要素には拡張forでアクセスできる。ブロックはPython流に字下げで行う。<br />
>>> for s in SOS :<br />
&#8230;  print s,len(s)<br />
&#8230;<br />
Nagato 6<br />
Mikuru 6<br />
Koizumi 7<br />
unknown world person 20</p>
<p>括弧をここまで省略できるのは、がんばってるなぁ。あと、printだけで改行するのも潔いぞ。<br />
番号でループさせるなら、rangeを使う。<br />
>>> for i in range(len(SOS)) :<br />
&#8230;   print i,SOS[i]<br />
&#8230;<br />
0 Nagato<br />
1 Mikuru<br />
2 Koizumi<br />
3 unknown world person</p>
<p>なんだか、ハルヒが消失したままなのはあれだが、もうちょっと続けよう。<br />
rangeは、どうやら、C#流のイテレータであるIEnumearatorインタフェースの子孫・・・・ということでMoveNextやCurrentが使えるはず・・・が動かない・・・。団長の怒りか？？</p>
<p>まぁ、団長がへそを曲げたせいかもしれないので、気を取り直して、関数定義の基本を。このあたりはほとんどPython。</p>
<p>>>> def Greeting(name as string):<br />
&#8230;     return &#8220;First off, ${name}.&#8221;<br />
&#8230;<br />
>>> print Greeting(&#8220;ordinary people don&#8217;t interest me&#8221;)<br />
First off, ordinary people don&#8217;t interest me.<br />
(テキスト出典　<a href="http://animetrans.blog85.fc2.com/blog-entry-2.html">こちら</a>)</p>
<p>で、こんな挨拶をしそうなのはひとりだけなので、クラスのメソッドとしよう・・・と思ったのだが、Booのクラス定義は、けっこうくせがあるなぁ。REPLでなくコンパイルした方が良さそう。<br />
ということで、単発ネタのつもりだったが、続く。</p>
<hr/>
おまけ。<br />
複数代入が括弧をつけずに可能なのは、ちょっとgoっぽく思った。<br />
&gt;&gt;&gt; a,b,c = 1,2,3<br />
3<br />
&gt;&gt;&gt; a<br />
1<br />
&gt;&gt;&gt; b<br />
2<br />
&gt;&gt;&gt; c<br />
3</p>
]]></content:encoded>
			<wfw:commentRss>http://wordprogress.org/archives/722/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
