第13回いたばし産業見本市

第13回いたばし産業見本市
http://www.itabashi-industryfair.jp/

img_1771

に行ってきました。3日間の開催なのですが、明日/明後日と都合が悪くて初日のみ。
本当は土曜日のロボット大会に行きたかったのですが、えーと、誰か写真/ビデオをアップしたら教えてください!

img_1776

img_1790

IT屋さんなので、こういうハードな祭りには出たことがないのですが、これからはハードもできなくちゃね、ということで行ってきました。

第1の目的は、ロボトマ/関東ロボット連合の岡田氏に会うことです。これは結構あっさり。ロボトマ(だったか?)のサイトにある写真を見て、同じくらいの歳かなぁ、と思っていたのですが、私よりもう少し若そう。若き経営者ってところです(ロボマニアでもあるのかな?)

ロボット関係と動体認識の話を少しさせて頂きました。私としては、店舗のデモンストレーション、デジタルサイネージ、デジタルマネキン、ジェスチャー認識、道路標識認識などなどに絡めて、ロボットで使うセンサ/フィードバックの機構(ジャイロ系)、圧電センサ、組み込みlinuxの情報を求めて、というところです。時間を作って、志村坂上のお店

ロボトマ
http://robotma.com

にも行きますので、そのときには宜しくお願いします。
# 電通大学の方にもよろしく(名前を聞き忘れてしまいました)

第2の目的は、写真を撮りまくって、silverlight のデモに使うことです。
勿論、まわるだけでは面白くないので、いくつかの会社でお話をさせて頂きました。

ハードとソフトの組み合わせで最初に考えられるのが、CAD/CAM、NC旋盤加工です。
3D造形や金属加工に使われます。ええと、ガンダ○の盾を作っている会社もありました(笑)。洒落がっ聞いていていて面白いです。

株式会社スガヌマ
http://www2.odn.ne.jp/aas30940/

店頭ディスプレイ、少量ロットのプレゼントに使えそうです。

そんな訳で、ばしばし撮った写真を今整理中してアップ。
http://moonmile.net/sl/1119/
20091119_01

カテゴリー: 起業塾 | 第13回いたばし産業見本市 はコメントを受け付けていません

第42回いたばし起業塾 大林浩氏

株式会社SEメディアパートナーズ代表取締役 大林氏の講義でした。
http://www.itabashi-kigyou.jp/seminar_juku.html
http://www.semp.jp/index.html

サラリーマン(証券)から退職後、社長に就任、その後、合併により上場している社長(株主のいる会社の社長)を経験していらっしゃいます。
で、早速ですが聴講した結論としては、

・構想は楽観的に
・計画は悲観的に
・実行は楽観的に

に尽きる、という話でした、、、で、いいんですよね>大林社長

私はご存じIT業界に勤めているので、主に製造業、時にサービス業なわけですが、私の主体としては「製造業」。製造業、それもプログラミングの世界は「家内制手工業」に近いものがあります。
まぁ、IT業界の場合、怪しいものから/不明なものまで、色々あるわけで、他の業種から見ると怪しいところだらけなんでしょうけど、理系で突っ走ってきている私の場合は、断然「製造/研究」という頭で、プログラミングしています。

なので、逆に言えば、銀行/証券の仕組みのほうが、私にとっては怪しい世界で(笑)、大林氏も話していましたが、証券の世界は「手数料」で成り立っています。株式を売買する、株式を上場する、M&Aをする、という「株」が動くたびに「手数料」が発生し、それが証券会社/社員を養っています。
同様に、銀行も手数料の世界で、ATMの手数料、他銀行への送金の手数料など、お金が動けば「手数料」が発生します。なので、銀行にお金があるだけでは、銀行は儲からないのです。あっちへこっちへお金を動かすことにより、銀行はもうかる仕組みになっています。勿論、お金とは言っても、実際にモノがあるわけではなくて、数値をあっちにやったり、こっちにやったりするだけです。システム屋さんから見ると、「なんでそんなに手数料がかかるの?」(と言ってはいけないような気も)というものなのですが、まぁ、そういう世界です。そうそう、「当座預金」というのをご存じでしょうか?一般人は使わないのですが、小売の世界ではよく使われます。この当座預金は、一般的に使われている普通預金とは違って、利子は付きませんが、手数料が掛かりません。まあ、このあたりのは話は別途、簿記の話ということで。

さて、この「手数料」ですが、所謂、一般に流通という言われう業界では「マージン」とも言います。ゼネコンIT業界でもご多分に洩れず、「マージン」があります。派遣業界、個人事業主の紹介料、孫会社への開発スルーなど、色々なマージンがあります。「営業費用」と言ったりもします。他の言い方として、「管理費」(笑)もあります。「マネージメント費用」(笑)とも言ったりします。

流通、営業、小売、卸問屋の関係は、それぞれがマージンの世界です。本来ならば(?)、製造→顧客の直販によれば、中間マージンが取られませんが、製造場所が遠方であったり、特殊な世界(美術界など)であったり、そもそも製造側が売ることを考えていなかったりすると、中間経路が発生します。商業というのはそういうものです。

日商簿記の場合、商業簿記と工業簿記の2種類に分かれていますが、この商業にあたるのが商業簿記です。商業簿記の場合は、「仕入れ」と「販売」が重要になります。当然、安く仕入れて、高く販売するのが理想的です。これがマージン=営業利益です。
資金に任せて、大量購入し販売をこなすのが、所謂「商社」です。大量に仕入れることで、購入価格が下げられます。何故下げられるのかというと、サプライチェーンというのがあって、それを勉強すると分かります。

ええと、かなり脱線していますが。

逆に、製造業の場合は、工業簿記を使います。工業簿記では「原価」と「売価」が重要です。原価は直接費用と間接費用がありますが、人件費は直接費用に入ります。間接費用は主にシステムや経理の管理費を示します。
製造業(実は農業も同じ)の場合は、原価と売価の差分が利潤になります。

さて、この2つを見比べると、

・商業の利潤=販売-仕入
・工業の利潤=売価-原価

になり、一見似ているように見えますが、実情はかなり違います。

利潤を多くとるためには、販売/売価を上げる、あるいは、仕入/原価を下げるの2つの方法があります。
どちらも高く売れれば良い、というのは共通しています。しかし、この不況下においては「高く」売るのは至難な技です。
なので、いきおい利潤をあげるためには、仕入を下げる、あるいは、原価を下げる。ということになります。

さて、この「仕入を下げる」あるいは「原価を下げる」というのは、具体的に何を示すのかを考えてみましょう。

■仕入を下げる

仕入というのは、できあがった商品を仕入れることです。装飾などはするでしょうが、ほとんど加工はしません。なので、仕入を下げるということは、仕入先の業者に対して支払う金額を下げる、ということになります。つまり、「会社の外へ」の圧力が強まるということです。

■原価を下げる

原価の場合、材料費などもあり、商業で言う仕入に似たところもありますが、工場のように製造工程を含む場合には、人件費を多く含みます。なので、原価を下げるということは、人件費を減らす。つまり、「会社の内へ」の圧力が強まるというとになります。

単純に考えると、圧力の向きの違いになります。圧力=企業努力という言い方で考えれば、仕入を下げることは外部の会社に企業努力を求め、原価を下げるということは会社の内部で企業努力をする(リストラも含む?)ということです。

さて、どちらが経営者にとって楽なことなのでしょうか?

この答はそれぞれの方が考えて欲しいのですが(私の中での答えは既に出ています)、まあ、会社によって様々でしょう。

そんな訳で、大林氏の話を聞いて私が思ったのはこんなところです。
# 起業塾での話の内容は全く違うんですけどね。

参考文献としては、以下になります。

ゴールドラット著
「クリティカルチェーン」
リチャード・セイラー、キャス・サスティーン著
「実践行動経済学」

カテゴリー: 起業塾 | 第42回いたばし起業塾 大林浩氏 はコメントを受け付けていません

チェンジ・ザ・ルール!#8

ゴールドラット著「クリスタルボール」発売記念、という訳ではないのですが、チェンジ・ザ・ルールの会(でいいのかな?)に行ってきました。というか

鳥一代
http://www.toriitidai.com/index.html

に行ってきました。まるごと鶏一匹が入っている、参鶏湯(サムゲタン)という鍋ものが有名で、お酒は焼酎関係が中心です。最近、TV番組(ぶらり途中下車)で紹介されたらしく、月曜日なのに満席という込みよう。
でも、久々に行けて良かった~。美味しかった~。
http://shoppingfeed.jp/media/miid-2387254/item/
なぞと、店の宣伝だけで終わってはいけません。
テーブル席2つだったのですが、ノートパソコンを広げて、発表(らしきもの)をしたので資料を載せておきます。向こうのテーブルでは別の話で盛りがっていたし(笑)。

チェンジ・ザ・ルールの会は、ゴールドラット氏の提唱するTOC(制約理論)の派生の会です。

ザ・ゴール
http://www.amazon.co.jp/dp/4478420408
チェンジ・ザ・ルール!
http://www.amazon.co.jp/dp/4478420440

TOC(制約理論)については、

TOC 制約理論の広場
http://www002.upp.so-net.ne.jp/toc-jp/

を参照してください。
また、IT関係であれば自前ですが、

スループット会計とソフトウェア開発工程の関係
http://www.moonmile.net/mymy/solution/001.html

を参考にしてくれるとありがたいです。

で、以下は、チェンジ・ザ・ルールの会で話した事柄。

さて、この TOC(Theory of Constraints なので、正確には、制約のセオリー/習慣/現象 が正しい)ですが、ある流れを持つときに「制約」があるというのが肝です。制約というのは絞り込みがあるところです。岸良さんが話しているように、流れが悪いところが「フン詰まり」になります。なので、この流れ=スループットを上げるためには、制約=フン詰まり、を解消するか、バッチを小さくする=フン詰まりになりにくいようにする、という方法を取ります。

制約自体を強化するというのは、いわゆるレバレッジ(梃の原理)の話で、梃を動かすとき支点が弱いとすぐに壊れてしまいます。なので、この視点を強くします。会社を例にとれば、

・社長の決断力
・会社が持つ製品開発力(コア・エンジニアリング)
・決済のスムーズさ

などです。逆に言えば、この制約に関係ないところをいくら強化しても無駄です。TOC の場合、スループットを第一に考えますから、制約でない場所を強化しても、制約が弱い限り、その流量は限られてしまうのです。

# 当然、スループット会計を第一としない場合は、この制約の強化は別の意味になります。
# ゴールドラット氏の云うのは「儲け続けること」。対して、ドラッカー氏の云うのは「存続すること」ですからね。

さて、私は普段の活動は執筆が主な訳で、最近は秀和システムの逆引きシリーズの改版に追われています。この本は、tips 集と行って、逆引きのヒントが非常にたくさん集まった本です。なので、ひとつの本に 300 tips があり、執筆期間が2か月だとすると。

・300 tips(サンプルコード込み)
・期間は、2か月間(40日間)
・1日は8時間、ゆえに、320時間で仕上げる

という計算になります。これは、大体1時間に1個仕上げるということです。
これをどのように進捗管理していくのか、というのが問題です。

<001>
20091117_01bmp

これが私の進捗管理表です。見るべきポイントとしては、

・tips 単位に分かれている
・文章の完了日を入れる
・サンプルコードの完了日を入れる
・進捗率を自動計算する

ところです。昔は、バーンダウンチャートを表示するために、グラフを使っていましたが、最近は進捗率でだいたい分かるようになったので使っていません。
一見、どこにでもある進捗管理方法です。これをIT業界の場合は、関数単位だったりクラス単位だったり、あるいは機能単位だったりします。

ですが、この進捗管理には重要な意味があります。
それをひとつひとつ解説しましょう。

■tips単位で完了を管理

章単位などではなく、tips単位という細かい単位を使っています。もう少しまとめてと思うかもしれませんが、駄目です。これは、TOCで言う「バッチを小さくする」ところと、デマルコ氏の云う「計測できるもので進捗管理する」という両方を組み合わせています。
これを、プログラミングに置き換えると、機能単位のように大きな単位にしたいところですが、そうすると「いつ完了したのか」が判別できなくなります。また、ひとつの機能を完了させるために数日/数週間かかるために、「進捗率」という計測できない数がでてきます。それを排除するために、「計測できる数」を使います。

ゆえに、プログラミングであれば、1日以内で終わる

・関数単位
・UnitTest単位
・web ページ単位

をお勧めします。勿論、1年に渡るような大きいプロジェクトの場合は、関数単位にすること自体が非常に手間で時間がかかります。このあたりは、WBS風にブレークダウンする、あるいは概算値を使う(ファンクションポイント法など)があるので、それを利用します。機会があれば、後日話します。

■完了日を入れる

さて、細かい tips(バッチ)に分けたので、1個1個のバッチがスムースに流れやすくなります。この流量(スループット)を計算するために、完了日が必須になります。この完了日を「済」や「完了」だけにしておくと、どの位の流量があったのか計算できません。
この執筆の例では、1日8tips仕上げれば、予定通りに終わるという計算になりますが、tips によっては難易度のばらつきがあります。半日かかるものもあれば、10分ぐらいで終わってしまうものものあります。
ですので、1日単位の進捗度に一喜一憂しないために、週単位での進捗度が出せる、また工事進行基準を適用できるように、進捗度合が予測できるようにします。
これは、CCPMで云う「アラーム領域」と同じです。

■完了を明確にする

いわゆる、TODOリスト化(GTD)することです。これは、長期の同じ形式で仕事をする場合、モチベーション(動機)を保ち続けるためのコツです。300 余りもある tips は、当然1日では終わりません。また1習慣でも無理です。2か月間、ひとりでコツコツと作業をするためには、それなりに根性(笑)が必要です。ですが、なにも無いと根性が挫けますよね~。なので、こんな風に「終わった!」を演出します。

ひとつの tips が終わったら、完了日を書き込む。チェックを入れる。

という作業を挟みます。一見、無駄に見える作業ですが、これが気持ちの切り替えにいいのです。
確か、百式ブログで(IDEA*IDEAだったかも)、今日やることのTODOを手帳に書いておいて、終わったら大きく×(あるいは○)を付ける、という動作を勧めていました。大きな仕事は、大きめに書いて、小さな仕事は小さめに書く。そして「達成感」を得る、という方法です。それと同じです。
「所詮、仕事だから」と、黙々とやるのだけではなく、仕事とはいえ人生の貴重な時間を使っているわけですから、何かの実り/達成感/楽しさを得ましょう。ニコニコカレンダーや振り返りの儀式もそれに似たようなものです。

ちなみにチェンジ・ザ・ルール!の会は google グループで誰でも参加が可能です。如何ですか?
http://groups.google.co.jp/group/changetherule?hl=ja

カテゴリー: プロジェクト管理 | チェンジ・ザ・ルール!#8 はコメントを受け付けていません

ASP.NET MVC は使えるのか?

VB が ASP.NET MVC から強力な後押しを得るかもしれない
http://www.infoq.com/jp/news/2009/02/MVC-VB
ASP.NETディベロッパはASP.NET MVCを習得すべきか?
http://www.infoq.com/jp/news/2009/05/should-devs-learn-aspnetmvc

~~
Web Formsは偽物です。注意をそらせる手品でいっぱいの皿に置かれた詐欺包み偽コードソースの空事です。Web Formsでなにをやってもウェブでなにもできません。ただ自分のためにWeb Formsを使うのです。
~~

なことが書いてあるのですが、「Web Formsは偽物」になってしまった、というのが正しいところです。
そもそも、ASP.NET 1.0 の頃に Webフォームを作った理由は、Windows アプリケーションと同じように Web アプリケーションを作る、というのが発端なのです。当時、vbscript で *.asp を作っていた頃は、ページに html タグと vbscript が混在していました。この書き方は java の *.jsp と同じでしたし、perl のヒアドキュメントと似たものでした。
これの解決策として、microsoft は windows アプリに似た方式で web サイトを作れるように asp.net の webfroms を作り、一方で java は struts やタグライブラリを充実させました。

その後、何故か microsoft は asp.net 関係の啓蒙をやめています。というか、ほっておいたんですね。というのは、iis 6/7 を開発する一方で、ブラウザアプリケーションではなく、click once を使った「スマートアプリケーション」に力を入れてきたわけです。

が、その思惑とは逆に、javascript で web アプリケーションを拡張する方式が広まり始め、google map や google apps が出てくると、microsoft はブラウザアプリケーションを無視できなくなりました。現に、スマートアプリケーションの路線は、消えつつあります。

こうなると、再びブラウザアプリケーションが主流となるため、生き残ってきた MVC が再び注目を浴び始め、lamp 環境での cakephp や java の struts、途中の ruby on rails の MVC スタイルが流行り始めます。これを microsoft が無視できなくなって asp.net mvc をリリースし始めた、というのが、2000年頃からの歴史的な流れで、今から見ると、タグライブラリ風にコントロールが充実した(ステート=状態を隠した)web forms が「偽物」っぽく見えるわけですね。

ちなみに、私の目からみると、java のタグライブラリ(weblogicなど)や asp.net の web コントロールは、コンポーネント技術に則って、MVC スタイルを維持できる貴重な技術です。
MVCのスタイルでプログラミングをすると、いくつか利点がありますが、大きなものは、

・View が分離されるので、デザイナと分業ができる。
・Model が分離されるので、UnitTest がやりやすい。

ところです。実は web forms を使った場合も view と model が分離されているため、上記のことが可能です。というかですねぇ、そもそも asp.net の web froms は view と model を分離するために、コードビハイドという仕組みを入れたわけだし、それは、ちょうど、「 mv○モデルになっている」とも言えます。
さて、来春に発売予定の Visual Studio 2010 には ASP.NET MVC 2 が最初から導入されています。Visual Studio 2008 の場合は、後から ASP.NET MVC を入れる必要がありましたが、2010 からは、新しいプロジェクトで MVC のプロジェクトを直接作成できます。

<004>
20091116_04

これで ASP.NET MVC プロジェクトを作って、サンプルのログイン画面を起動したのが、下の図です。

<001>
20091116_01

ちなみに、デザイン時とコードも載せておきます。

<002>
20091116_02

<003>
20091116_03

ここで、実行時とデザイン時を見比べてください。ログイン用のテキストボックスがデザイン時にありませんよね。これは、view のコード(*.aspx)の中で、下記のように visual basic あるいは c# のコードで、テキストボックスを表示しているからです。

    <% using (Html.BeginForm()) { %>
        <div>
            <fieldset>
                <legend>Account Information</legend>
                <p>
                    <label for=&quot;username&quot;>Username:</label>
                    <%= Html.TextBox(&quot;username&quot;) %>
                    <%= Html.ValidationMessage(&quot;username&quot;) %>
                </p>
                <p>
                    <label for=&quot;password&quot;>Password:</label>
                    <%= Html.Password(&quot;password&quot;) %>
                    <%= Html.ValidationMessage(&quot;password&quot;) %>
                </p>
                <p>
                    <%= Html.CheckBox(&quot;rememberMe&quot;) %> <label class=&quot;inline&quot; for=&quot;rememberMe&quot;>Remember me?</label>
                </p>
                <p>
                    <input type=&quot;submit&quot; value=&quot;Log On&quot; />
                </p>
            </fieldset>
        </div>
    <% } %>

この記述が良いかどうかの議論は別にしておいて、次に従来の web forms で同じものを記述した例を載せます。

実行結果は、こんな感じ。ASP.NET MVC と変わりませんね。

<005>
20091116_05

デザイン時とコードは、こんな感じです。

<006>
20091116_06

<007>
20091116_07

ASP.NET MVC と見比べると分かるのですが、デザイン時にテキストボックスが表示されています。これは、実行しなくても外観が分かるので、非常に重要です。
また、コードを見るとすぐにわかるのですが、

    <asp:Login ID=&quot;Login1&quot; runat=&quot;server&quot;>
    </asp:Login>


のところが、ログインのユーザー名、パスワードを指定しているところです。
この asp:Login は java で言うところの「タグライブラリ」で、標準的な html タグをまとめて記述するタグです。これらは実行時に html タグに展開されます。

さて、web ページを作成するときに ASP.NET MVC と Web Forms で、どちらが優れているでしょうか?私には、どう考えても Web Forms のほうが優れているようにしか見えません。
従来の asp.net アプリが優れているのは、これらの「テスト済みの豊富なコントロール」があるからです。また、「デザイン時に外観を検査できる」ことです。

なので、「Web Formsは偽物」(WebForms is a lie.)というのは、Rob Conerey氏(Microsoft社員)にしては、随分とビックマウスな話だと思うのですが。どうでしょう?

ただし、java を始めとして、他の web 技術が MVC モデルを採用しているのに asp.net だけが web forms で突き進んでいるというのが、これらの問題ですね。おそらく、路線としては、WPF と windows フォームと似たようなところです。microsoft が自社内で、相反する技術を抱え込んで沈んでいくのは、知ったこっちゃないのですが。

私としては web 技術では、こっちのほうが重要だと思いますね。

Web開発者が知っておくべき八つの分離レベル
http://www.infoq.com/jp/articles/eight-isolation-levels

カテゴリー: 開発 | ASP.NET MVC は使えるのか? はコメントを受け付けていません

Deep Zoom でポラロイド風に写真を配置

Silverlight on PHP を考えていて、何か良いサンプルはないかと探していたのですが、最近

Deep Zoom
http://msdn.microsoft.com/ja-jp/library/cc645050(VS.95).aspx
http://www.atmarkit.co.jp/fdotnet/special/deepzoom/deepzoom_01.html
http://itpro.nikkeibp.co.jp/article/COLUMN/20080617/308438/

ってのを見つけました。
技術自体は、去年の夏(2008年8月頃)に発表になっていて、当時の Silverlight 2 で
話題になっていたのですが、今のところ鳴かず飛ばず(?)って感じの microsoft の技術です。

と、言うのも、画像をどんどん拡大できる、ってのは面白い技術なんでしょうが、これって、
google map と似たようなもので、だからどうなの? という気がしないでも無いわけで。
一体、何に使ったらよいのやら、って感じの代物なのです。実際、microsoft の公式サイトやブログでは、
silverlight 3 と deep zoom を絡めた記事はありません。

ですが、ちょっと考えてみるとですね。

Deep Zoom Composer
http://www.microsoft.com/downloads/details.aspx?FamilyID=457b17b7-52bf-4bda-87a3-fa8a4673f8bf&displaylang=en

<001>
20091112_01

というものがあって、結構簡単に、画面に写真が配置できます。
で、もう少し話を進めると、この deep zoom は、MultiScaleImage コントロールで扱えます。
MultiScaleImage コントロールは、.NET Framework 3.5 に入っているコントロールです。

そんな訳で、次なるサンプルページを考えてみたわけです。

<002>
20091112_02

よく flash や ajax でありますが、ポラロイド風に商品の写真が並べてあるページですね。
重なったところをクリックしたり、下の画像を見たりすることができます。web サイトの定番の画像です。
gif 画像の場合は、固定なので、クリッカブルマップにするしか方法はないのですが、今回は
silverlight and deep zoom で作るので、拡大縮小がスムーズにできます。deep zoom 自体、
マウスホイールに対応してるので(それ用のコードを吐き出すので)、なかなか面白い動きができます。

それで、早速 Deep Zoom Composer をダウンロードして作ってみようと思った訳ですが、
ありゃ、残念ながら Deep Zoom Composer は、斜めの画像に対応していないんですよね~。
縦横に配置することはできるのですが、画像を傾けるのは無理なんです。このあたり、仕様的に無理なのか、
実装的に難しいのか、よくわからないのですが、現状ではできません。

なので、断念、、、しては詰らないので、もう少し考えます。

deep zoom 自体は MultiScaleImage コントロール上で動いているので、普通の xaml のコントロールと
同じようにできます。ですから、MultiScaleImage コントロールの上に、普通に textbox や image(?)
のコントロールを貼り付けても行けるわけです。実際、textblock を重ねると、半透明やらなにやら、回転やら
ができます。なるほど!

そんな訳で、先の完成予想図を元に、サンプルプログラムを作成中です。
このサンプルは、

.NET ラボの11月の勉強会(11/21)
http://dn-lab.net/
http://www.atmarkit.co.jp/event/calendar/detail.php?event_id=25157
http://japan.internet.com/event/

で発表します。
# 「~ 時々 deep zoom」のところのサンプルですね。
# 実は、こっちに力を入れているという。

そんな訳で、ポラロイド風silveright(silverlight polaroid photo)を作る際の難点として、

・deep zoom の座標は、ViewportOrigin, ViewportWidth, AspectRatio を駆使して使う。
http://msdn.microsoft.com/ja-jp/library/system.windows.controls.multiscaleimage.viewportorigin(VS.95).aspx
・マウスのクリックは、ElementToLogicalPoint メソッドで変換(0~1の間になる)
・子画像は、MultiScaleSubImage クラスで扱う

っていう、ちょっと複雑な事情があります。

回転関係が入るので、回転行列にも、お世話になります。
http://imagingsolution.blog107.fc2.com/blog-entry-151.html

そんな訳で、できがったら、ソースコードとか解説とかノウハウとかをアップしていきます。

カテゴリー: 開発 | Deep Zoom でポラロイド風に写真を配置 はコメントを受け付けていません

設計の事始め(その2)~論理的なシステム設計のために

設計の事始め(その1)
http://www.moonmile.net/blog/?p=427

の続きです。

先のエントリでは図を使ってチェックポイントを洗い出しました。簡単なシステムならばこの程度でいいのですが、二重化を考えたり、多数のクライアントが参加している場合は、もう少し論理的な(数値的な)計算が必要になります。

というわけで、典型的なWEBサイトを例に、4つのチェックポイント(CPU/DISK/MEMORY/NETWORK)を調べていきます。

<001>
20091106_01

この図を Excel の表に直します。

<002>
20091106_02

いくつかのチェックポイントが増えているのは、表にしたときに考えた直したものです。
図には無かった、HUBやルータが入っています。インターネットを媒介しているので、ネットワーク速度が不明なところがあるのですが、大まかな数値を入れておきます。

これをハードの現状とします。

さて、これに対して要求仕様から「機能外要件」を入れます。機能外要件は、毎分何回の応答数を返すのか、1回につきどの位のデータ量が流れるのか、という要件です。
実は、この機能外はソフトウェア構成が決まらないと、正確に決定できません。たとえば、WEBサイトからダウンロードするデータ量なんてのは、Flashで組んだときと、典型的なHTMLで組んだときとは大きく違います。システムを Flash で組むのか、HTML で組むのかを要件定義の段階で決めることも可能なのですが(大抵は顧客の要望として、どちらかが決められます)、「言語に依存せずにシステム設計を行う」という(わたくし的な)指針に従えば、ここで Flash か HTML かを決めるのは適切ではありません。

ですが、現実問題として、

・どのくらいのサーバーが必要なのか?
・どのくらいのネットワーク容量を必要とするのか?

を決めないと、ハードを購入する手続きが間に合わないことが多いのです。
なので、ここは大雑把にでも決めないと仕方がないことがあります。

また、既存システムを移行する場合は、ネットワークの回線がそのままだったり、サーバーがそのままだったりすることがあります。そのような場合は、「制約」としてハードの現状が決まってきます。

さて、この「制約」としてのハードの現状に合わせて、ソフトの要件が満たせるのかをチェックします。あるいは、その制約を活かした形で、ソフトウェアを設計するための土台を作ります。

<003>
20091106_03

この表が、ソフトウェアが要求するハード要件になります。

少し詳しく表を見ていきます。

クライアントのPCは、決して非力ではありません。CPU 2.0GHz でブラウザを使って閲覧する(あるいは、専用のブラウジングソフトをインストールする)場合でも、そんなに小さいものではありません。ですが、考慮しないといけないのは、

・CPUパワーは 10% 以下に抑える
・メモリの使用量は、100MB 以下に抑える。

というところです。また、ネットワーク回線も 100KB/s 程度に抑えたほうがいいでしょう。

これらの上限は、本ソフトが動いている間でも他のソフト(Wordなど)が快適に動く条件を示しています。大抵、これを忘れてしまうので落とさないために表にします。

同様に、クライアントPCの回線は、ADSLルータの速度に縛られることを忘れないでください。
いきおい、重たいFTPなどを行った場合、ADSLルータは 100KB/s を確保できないかもしれません。その場合に備えた、ソフトウェア設計が必要になります。

逆にWEBサーバーのほうは、同時接続数(プロセス数)を計算に入れます。
ここでは100台のPCがアクセスすることを考えます。

そうなるとクライアントPCから100KB/sの要求を受けるので、サーバー側のネットワークは、10MB/sぐらいは必要ってことになります。
WEBサーバーのCPUを早くしたり、MEMORYを積んだとしても、ここのNETWORKが遅ければ、このシステムは成り立たないことが「すぐに」分かりますね。
逆に、10MB/s のネットワークが確保できない場合は、別なソフトウェア設計が必要になります。

・瞬間風速時にはシーケンシャルに100台をこなす。
・瞬間風速時には、50台分はエラーを返す。

最近のチケット販売やオークション受付のシステムは上記のどちらかを取っています。
もうひとつ、忘れてならないのは、

・ネットワークのデータ量を100KB/sから 1KB/sに減らす

という方法です。100分の1に減れば、ボトルネックはnetworkでは無くなりますね。
この方法は、ソフトウェア設計でしか解決できません。
# どう解決するかは、ご自分の頭で、・・・というか、ソフトウェア設計のエントリまで待っててください。

さて、もう少し表を詳細に見ていくと、WEB Server の両方に HUB が入っているのが分かります。
この HUB はネットワーク的に同じものを示しています。

つまり、

ルータ → HUB → WEB Server
     ↓
     DB Server
    
という構成を想定しているわけです。

そんな訳で、このHUBにも結構な負荷がかかりますね、ってことです。

構成的には、スイッチングHUBを入れるのが普通なのですが、

ルータ → HUB → WEB Server → HUB → DB Server

のように WEB サーバーにネットワークボードを2枚差しにするのもアリですよね。
あるいはルータ直結にして、

ルータ → WEB Server → HUB → DB Server

という構成も考えられます。

これらの発想は、先の図だけでは分かりません。
ここに示した Excel シートのように実際に数値を書かないとボトルネックが分からないものです。

そんな訳で、システム構成/設計はおしまいです。
値段とかネットワークの取り回し、OSライセンスの購入などについては専門のSEにお願いするといいでしょう。
値段については、いくつかのHPやDELLなどのいくつかの購入サイトを押さえておけば、そんなに難しくはありません(って言っていいのか?)。ただし、安い構成、切り替えの可能な構成などを考える場合には、マザーボードの種類やメモリの種類、HDDの種類まで関わってくるので、専門のSEにお願いしたほうがよいでしょう。

というわけで、次回はソフトウェア設計について書く予定です。

カテゴリー: 設計 | 設計の事始め(その2)~論理的なシステム設計のために はコメントを受け付けていません

時にはワンピースのように

仕事をしながらワンピースを観ているのですが。
# 30分区切りで仕事ができるので便利、ってのは言い訳。

プログラミングやる前に先お風呂はいっちゃいなさい ≫ アクセス解析を入れようとして挫折
http://da.rkome.me/2008/09/06/%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E8%A7%A3%E6%9E%90%E3%82%92%E5%85%A5%E3%82%8C%E3%82%88%E3%81%86%E3%81%A8%E3%81%97%E3%81%A6%E6%8C%AB%E6%8A%98/

ドラゴンボールは最初のほうだけ知っているけど、ワンピースは読んだことがありませんでした。
ジャンプ特有の「パワーのデフレ現象」が、ワンピースにあるかどうかは知らないのですが、たまたま10巻まで

ビジネスホテルつじ井
http://www.hoteltsujii.com/

で読む機会がありました。漫画本がずらっと並んでいる休憩室があるのです。

ワンピースは、ジャンプ特有の「努力・友情・勝利」の中で「努力」の部分が抜けている、と wikipedia には書かれていますが、いえそんなことはありません。少なくとも、10巻ぐらいまでは、主人公ルフィ以外、子供の頃の不遇な環境が描かれているよね~。このあたりの仲間意識は明日のジョーに通じます。それなりに貧乏臭いってのも同じ。

さて、先にリンクした「アクセス解析を入れようとして挫折」を見ると、ワンピースをチーム編成に例えています。私もそう思います。この手の漫画の登場人物のポジションってのは結構あなどれなくて、それぞれの得手不得手がうまくかみ合っていかないと、話が面白くならず長く続きません。
単純な感情移入とか販売手法というだけでなく、漫画の中のキャラクタの個性(悪役も含めて)の相互関係が、読者にとってうまく納得できるものでないと、それなりの支持は得られない訳です。同時に、支持が得られないと売上が上がらないだろうし、売上が上がらなければ打ち切りになるだろうし。

そう、一方で「ケロロ軍曹」が長く続いているのに対して、ワンピースも10本の映画を出している訳で、それぞれ漫画の中の主人公の売りは違いますが、構成は似ていると思います。

つまり、会社で言えば、社長・営業・経理がいないとうまく廻らない、と言われていると同じように、必要な人員の組み合わせってのは鉄板があるわけです。
逆に言えば、開発メンバの鉄板もあるわけで、それを土台にして、人員を割り当てたり、人員を募集したりすればいいわけです。
# 一人でやっている場合は、先の社長・営業・経理の「顔」を切り替えます。

会社で例えるならば、

社長 ルフィ(船長)
営業 ゾロ(剣士)、ウソップ(?)
経理 ナミ(航海士)、サンジ(コック)

な感じ。商業の場合は、仕入を営業に入れる訳ですが、ソフトウェア開発=製造業とした場合は社長/製造/開発と考えます。大手SEの場合に下請けに出す場合は、仕入なので営業に含めます。
経理のほうは、いわゆる日常のベースになるもので地味なところ、だけでも会社/グループにとって必須なもので、庶務/航海士/コックなどが当てはまります。
そうなると、ウソップが4番目なのも頷けるでしょう?
# その他の登場人物は、まだアニメのほうが38話なので出て来てない。
# まだ10巻に至らないのも、アニメとしてはいいペースです。うる星やつらが1話=15分、タッチあたりと連載・アニメと似たペースだと思います。これぐらいにしないと、アニメが連載に追いついてしまうからね。営業的にミスっているとも云う。

そんな訳で、え~と、メンバとか仲間内ってのは大切なんだよねぇという話をワンピースに絡めてしたかったのです。ワンピース面白いよね。というのも含めて。

カテゴリー: 雑談 | 時にはワンピースのように はコメントを受け付けていません

CakePHP祭2009あとがき

「CakePHP祭2009」
http://matsuri.cakephp.jp/
のカンファレンスに参加してきました。

.NET関係やXP関係は色々参加してきたのですが、PHPのほうは初めてです。
ちなみに、私はPHPのプログラミングをしたことがありません。まして、CakePHPがあることすら先月までは知りません。なわけで、ざっとPHPのコードを見て参加してみたわけですが、雰囲気が全然、若いですね。かつて、2000年頃にあったXPのユーザ会を思い出します。CakePHPが作られ始めたのは、2002年頃(かな?}らしいのですが、日本で流行り始めたのは、2,3年前みたいです。丁度 java が流行った頃の活気のある雰囲気が味わえました。

さて、私が CakePHP に注目しているのは、

・一般的なホスティングサーバーで動く。
・利用者が多い(習得が楽にできる)PHPを使っている。
・テストが可能な MVC モデルを採用している。

ところです。実際、CakePHP(前身はcake)のアイコンであるケーキは、3層構造であるMVC(あるいはシステムのn層構造?)を示しているそうです。

CakePHPのケーキ
<001>
20091102_01

苺が挟んであるケーキは美味しゅうございました。

PHPのフレームワークと言えばsmartyが有名ですが、ここ2年ぐらいはCakePHPがgoogleなどでよく検索されているそうです。smarty のほうは、java の struts に似ていてい、テンプレート(HTMLを作成するための雛型のようなもの)をタグベースで作ります。java のタグライブラリを更新するに使う、と思うのですが smarty のほうはよく分かりません。

現在まで CMS(コンテンツ・マネージメント・システム)が多く作られ、実際に業務用のサイトで多く使われています。ですが、CMS の場合は、コンテンツ(文章や画像、時にはHTMLのページそのもの)を管理するために、web サーバ上にあるデータベースを検索したり、web サービスを利用する部分については、(多分)別途プラグインという形で作る必要がありました。このため、動作試験自体のフレームワークは皆無といっても過言ではありません。
これに対して、CakePHP のような MVC モデルに焦点を当てたものは、データベース検索等にターゲットを絞り、単体テスト可能(UnitTest可能)な環境を作り出そうとしています。

なわけで、CakePHP を使ったときにユーザーによるコンテンツ自体の管理(ユーザーとはいえ、IT技術者の可能性も多いのですが)が、どのようにしていくのか。あるいは、CMS の機能と CakePHP のモデリングとうまく融合していくのか、という疑問はあるのですが、ひとまず、

・動的なページを作成する。
・動的なページをテスト可能にする。

という開発が多い場合は、CakePHP が極めて有効に機能します。

Joomla CMSにCakePHPアプリを組み込む
http://cakephp.seesaa.net/article/33692804.html

という記事が2007年にあるので、現在のCMSではすでにCakePHPをベースにしたものがあるのかもしれません。

さて、この CakePHP 祭りですが、開発者の方(オーストラリアとカナダの方)が来ていました。
左が Graham Weldon さん、右が Joel Perras さんです。会場にも外国の方も幾人か居られて、なかなか国際的な感じがしました。手に持っているのは CakePHP ケーキです。

<002>
20091102_02

そうそう、Perras さんの講演は実に大学講義風で、、、眠くなっちまったよ~。生真面目な方なんでしょうなぁ。

そして、日本側の立役者の安藤さん

<003>
20091102_03

そんな訳で、私にとって実に情報量の多い1日でした。
PHP なので、開発事例は WEB 開発に限られることになりますが、私の使いどころとしては WEB サービスなのです。さて、CakePHP と WEB サービスとをどのように繋げるか、かつテストが簡単に作れるようになるか(先行き拡張しやすくなるか)なのですが、ざっと考えたものをupします。give and take ということで。

<004>
20091102_04

WEB サービスが model なのか view なのか、という議論はあると思うのですが、WEB サービスもひとつのユーザーインターフェース(マシンインターフェース)ということを考えると、view 相当としたほうがよさそうです。つまり、WEB サービスを MVC モデルで作る場合には、

・model をデータアクセスに使う。
・view を公開する web サービスのインターフェースにする。
・model と view の繋ぎを controller とする。

のような感じです。

そして実装上は、php の NuSOAP + CakePHP の組み合わせを使う。

ひとまず、http://cakephp.jp/ のフォーラムから始めてみようかと思います。
以後よろしくお願いします>cakephpの皆様

カテゴリー: 雑談 | CakePHP祭2009あとがき はコメントを受け付けていません

設計の事始め(その1)

ソフトウェア設計コンサルタント、っていう職種があるかどうかは怪しいのですが、そういう名刺を作ろうかなと画策中です。それで、コンサルタントって名乗るからには、何かをサポートできないといけないですよね。当然ですが。
設計というのが何処の部分を示すのかというと、ウォーターフォール的に言えば、要件定義と開発/実装の間です。そして、重要なのは先のエントリで説明しましたが、プログラム言語に依存しません。勿論、プログラム言語特有のメリットを使う場合もあるでしょうが、システムをトップダウンで見たときは、特定のプログラム言語、ライブラリに依存しないほうが、実装上の選択肢が多くなり、開発費等のコスト削減に寄与できます。当然、スケールも柔軟に考えることが可能です。

そんな訳で、最初は「システム設計」から入りましょう。

システム設計なんて大層な名前がついていますが、所謂、どんなシステム構成にするの?ってのを図示します。
システム構成のパターンは、ほぼ決まっています。

・スタンドアローンのアプリケーション(インストールアプリ、ゲーム)
・クライアント/サーバー型
・不特定多数のWEBサイト
・特定人数のWEBサイト(SNS)
・UIを持つWEBサービス(ブログツール)
・UIを持たないWEBサービス(金融、株式データサービス)

などです。この他にもいくつかあるでしょうが、大抵のものはこの範囲におさまってしまいます。
これにデータベースの有無が関係します。データベースの有無は、既存のデータ/テーブルを使うのか、新規にデータベースを使って良いのか、に関係してます。
これらを図に書くと、

■スタンドアローン型
20091031_01

■クライアント/サーバー型
20091031_02

■不特定多数のWEBサイト
20091031_03

■特定人数のWEBサイト
20091031_04

■UIを持つWEBサービス
20091031_05

■UIを持たないWEBサービス
20091031_06

となります。
新規システムの場合は、ネットワーク回線速度も含めてすべて設計する訳ですが、ほとんどの場合は既存のリプレースになります。なので、それぞれの箱や線について、既存の制約を書きだしていきます。

例えば、不特定多数のWEBサイトを再構築する際のチェックポイントを抜き出します。

20091031_07

チェックポイントの抽出は簡単です。

・接続点
・動作点(コンピュータそのもの)

にマークを付けます。動作点については、

・CPU
・DISK
・MEMORY

を調べます。この根拠は microsoft のパフォーマンスチューニングのwebページにあります。
# ちょっとリンク先を失念。

と言う訳で、システム構成を決めるときには、

・CPU
・DISK(永続化の容量)
・MEMORY(必要メモリ、推奨メモリなど)
・NETWORK(回線速度)

を決定します。これはシステム要件(応答速度、1分間の応答数)から来るもので、そのままシステムを構築するときのハードの値段に関わってきます。

# SE的に見れば、二重化の問題もありますが、ここでは
# ソフトウェア開発の視点で見ています。

と、ここまでできればシステム設計の基本は完成です。
逆に言えば、先の要件(CPUやDISKなど)を満たさないシステム設計は意味を為さないので注意が必要です。

なところで、その1はおしまい。事始めなのでこれくらいにしておきます。
その2は、先にシステム設計/構成を、もっと論理的に考える方法を説明します(予定)。

カテゴリー: 設計 | 2件のコメント

Microsoft Expression Subscription

MSDN/Expression Media Subscriptions Shipment Notification
なるメールが来ているなぁ、と思ったら、Expression サブスクリプションが開始されたようです。
Expression シリーズはデザイナ向けということで、Expression Blend や Expression Media などがあって(Blendしか使ったことがありませんが)、Expression 3 になってから、「Expression Studio 3」ってのにまとめられました。

私の場合 MSDN を持っているから、一緒に Expression も付いてきたんですかね?よくわかりませんが。

Expressoion サブスクリプション
http://expression.microsoft.com/ja-jp/subscriptions/default.aspx
<001>
20091028_01

MSDN サブスクリプション
http://msdn.microsoft.com/ja-jp/subscriptions/default.aspx
<002>
20091028_02

ちなみに、送られてきたメールのURLがですね、

MSDN Subscriptions: http://msdn2.microsoft.com/en-us/subscriptions/aa948874.aspx
Expression Subscription: http://expression.microsoft.com/subscriptions/TBD

なことになっていまして(笑)、「TBD」って何だよおぃ!って状態です。
当然「ご指定のページはありません」になります。

カテゴリー: 開発 | Microsoft Expression Subscription はコメントを受け付けていません