TAG | Boo
チームWordProgressの新着記事一覧です :
(※各記事の内容を閲覧するためには、各記事のタイトルをクリックしてください。)
記事概要の
プレビュー
クラウドの実サービスは、2010年末くらいでいいだろうとタカをくくって、2009年末からクラウドのお勉強を開始した本シリーズ。
=======================
[追記]
本エントリとあんま関係ないが、ホットエントリな、こちらの 「ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない」&「ウェブ業界の15年、これからの10年」のエントリにほぼ全面賛同。
『 中規模(おおよそ、1000万PV/月程度?)までは1台でがんばる覚悟を決める。ある程度以上の規模になると思ったら、コンパイル言語を使ってアプリを書く&必要に応じ十分なスペックのマルチコアマシンを速攻買える予算を用意しておく。』が、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&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 [...]
Boo, Protocol Buffer
Hide
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 ???
Boo, Google App Engine, Python, 涼宮ハルヒの驚愕
Hide
いや、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> .\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.
>>> [...]
Boo, 涼宮ハルヒの消失
Hide