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

仕事をしながらワンピースを観ているのですが。
# 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 はコメントを受け付けていません

設計コンサルタントという職種と設計工程

とある就職サイトで「設計コンサルタント」という名称を知りました。
常々、ITの設計のことを「アーキテクト」=「設計者」という割には、詳細設計は大手若手SEに任せていたり、職種自体も雑誌の名を冠しているぐらいで怪しい感じがするし、と思っていて「アーキテクト」ってのはどんなもんなんですかね~、と思っていたわけですが。

なるほど、建築関係や三次元の意匠デザイン(かな?)の場合、「設計コンサルタント」という職名があるようです。

龍菜の3次元CAD活用相談室(1)私の設計、変ですか?
http://monoist.atmarkit.co.jp/fmecha/articles/dragon/01/dragon01a.html
http://www.page.sannet.ne.jp/gah01300/

本来、ITシステムを構築するときには、要件定義、設計、開発/実装、試験、運用、なる流れが必要なのですが(ウォータフォール形式的に言えばね)、受託開発を多くやってきたので、

・大手の要件定義
・大手の設計

が良く分かりません。つーか、見ていて不安なんですけど。
要件定義のほうは、提案/営業活動/製品説明/予算/納期などなど、顧客からの要望を引き出す技術(あるいは製品を押しつける技術)が必要になるので、いわゆるIT関係とは離れたノウハウがが必要です。あるいは他の業界とは同じような活動の仕方があります。
また、受託開発をする会社の場合は、設計が落ちてくるのを待つことが多いので(この体制が問題だと思うのですが)開発/実装/単体試験/結合試験/納品までのプロセスをいかに効率よくやるのか/コストを掛けないか、という「オフショア開発」的なノウハウに長けてきています。

なので、真ん中にある「設計」が抜けていることが度々あります。というか、設計とは名ばかりで、中身がいきなり細かい詳細設計をやっていたり、逆に要件定義で設計をやっていたりします。
設計の大まかな分類/種類を並べると、

・システム設計
・ソフトウェア設計
・概要設計
・外部設計
・内部設計
・詳細設計

というものがあります。他にもデータベース特有の

・概念設計
・論理設計
・物理設計

なるものもあり、オブジェクト指向で言えば

・ユースケース
・クラス図
・シーケンス図

などのUML関係があります。他にもデータフローチャートなんてのもあります。

本来、これらの設計工程は、建築業界の設計業務と同じように、三面図/見取り図などの図面と変わらない意味を持つはずですが、なかなかそうは行きません。
実際、CASEツールの筆頭としてUMLが持て囃されたころから10年経ちますが、未だにUMLで統一された設計書を出す会社を見たことがありません(部分的には使うことは多いのですが)。
UMLの場合は、所詮ツールですので、本来の目的は要件を如何に実装へ繋げるかという「設計」のサポートが本来の役割です。なので、UMLからJavaやC#のコードがはきだされるのは、補助的な機能に過ぎないんですよね~(というのを数年前に気付いた)。

と、改めて先のITの設計工程を見直してみると、実はこれらはプログラム言語に依存しません。当たり前といえば当たり前なのですが、予算/期間/製品/技術スキル/可搬性などを考慮するので、設計自体にjavaだのc#だのという制限は入ってきません。勿論、制約として現在のシステムがjavaで組んであるので流用を含めてjayaにしたいとか、フリーの環境で揃えたいので ruby や php を使うとか、組み込みシステムなので c 言語以外は使えないとか、があるので、これらは「制約事項」として設計工程に盛り込みます。

そういう訳で、しばらく

「プログラム言語に依存しない設計工程」

を考えていこうかな、と思っています。
言語に依存しないといえば真っ先に思いつくのは、UML でしょうが、これだけが設計ではありません。

DBA(データベース管理者)やオブジェクト指向/サービス指向/データ指向を交えて、考えていきたいと思います。

余談

と、前振り完了。
実はこの話2年前に考えていたことなのですが、ごたごたがあって立ち消えになっちゃんたんだよね~。
なので、再開しよかなっと。

カテゴリー: 設計 | 設計コンサルタントという職種と設計工程 はコメントを受け付けていません

ソフトウェア開発の超概算見積もり

(誰も待っていないと思うけど)お待ちかねの「3分間見積もりクッキング」の時間です。

結局のところ「概算見積もり」というのは、QCD(機能、コスト、納期)の枠を決めることで、その範囲内で、

・人員を確保する。
・機能を配分する。
・社員を育てる。
・できるだけ、利益を出す。

を行います。
なので、以上を踏まえたときに、大まかな見積もりは以下の点のみ決めます。

発注会社サイド

・全体の開発予算(コスト)
・開発期間(納期)

機能が抜けているのは、作らなければいけない機能よりも、予算や期間が優先されることが多いためです。
特に発注会社の場合は、

・開発予算から利用するアプリケーションの減価償却
・利用開始時期から、開発期間

が決まるために、ある意味で「機能」のほうが調節可能な場合が多いのです。

# 現に、予算が少ない場合は、機能削減で凌ぎますし、
# 予算が多い場合は「機能を盛り込み」ます。

# ただし、官庁系のように入札が行われる場合は、かなりの程度まで要求仕様=機能が
# 決まっているために、別な概算予算の立て方が必要です。

IT会社サイド

IT会社(受託請負)の場合は

・単価(コスト)
・確保できる人員(人)

が決まっています。
ソフトウェア開発の場合、必要経費のほとんどが人件費のため、概算予算を立てるときに「人の単価」と「人」が最大のボトルネックになります。

さて、この単価、と人はどこから決まるのかと言うと、

・給与(コスト)
・技術スキル(勤続年数など)

に依ります。
技術スキルを勤続年数に掛けるかどうかは疑問が多いところでしょうが、
若干でも「年功序列制の給与体系」をIT会社がしている場合は、勤続年数を考慮したほうがよいでしょう。また、年棒制など序列がない場合は、ITSSなどを利用したレベルを考慮するとよいでしょう(個人的にITSSは反対ですが、外部的な指標としてはアリです)。

IT会社サイド(その2)

さて、IT会社としては、先の人員(開発要員)だけで廻るわけではありません。
ここを、発注会社/IT会社ともに忘れてしまうことがあるので問題です。

・リスク(保険)
・管理費用
・営業費用

リスクは、いわゆる「保険」です。受注してはみたものの、要求仕様が膨らんだり、予期せぬ事情が発生したとこのバッファのためにお金を積み上げます。ここの「保険」の部分は、色々事情があるでしょうが、現実問題として無くすことはできません!。発注会社から「保険分をうちで持つから(仕様変更等は後で積んでもらえばいいから)」という理由で「保険」を外そうとする動きをしたとしても、必ず「保険」は積まれます。
ですので、外せないものであれば、あらかじめ積んでおくのがいいでしょう。

同様に、管理費用も積まれます。
一見、提出された見積もりに管理費用の項目が載っていない場合であっても、それは単価(人月)に積まれています。発注会社は「管理費用はそちらもちではないか?」と文句を付けたとしても、その項目が無くなっただけで新しい見積書には「薄く」管理費用は積まれています。
ですので、外せないものであれば、あらかじめ積んでおくのがいいでしょう。

同じく、営業費用も薄く積まれます。
営業費用自体は、営業部のあり/なし、受注した時の形態などを加味する必要がありますが、
「その営業の人はどこから給与を捻りだしているのか?」
を考えると、ソフトウェア開発費用のどこかに積むしかありません。
ですので、これも考慮に入れておきます。

実例

さて、実例を示してこれを計算してみましょう。

20091026_011

Excel シートはここから。
http://moonmile.net/mymy/solution/011.zip
発注会社からは、予算2000万円、期間6か月で発注をしました。
このときに、IT会社が概算見積もりをするときの内容です。

・開発者(社員)の単価が100万円/月(給与から算出します)
・リスクを10%
・管理費用を50万円/月
マネージャは他プロジェクトとの掛け持ちです。
・営業費用を100万円
歩合の場合が多いので、100万円/プロジェクトで計算

これから、使える開発者の人数が計算できます。

C12の式は
=((C4-C11)*100/(100+C9)-C10)/C8
です。

・人員が、16.8人月
・期間が6か月なので、2.8人の張り付き

と計算できます。

さて、ここで問題ですが、ソフトウェア開発で 2.8 人の貼り付けをすることは難しいです。と言いつつ、そうやっている会社が多数なのですが、現実問題として、2.8人なんていう半端な割り振りはできません。プロジェクトが終わってみれば、3人の開発者が張り付いているのが普通です。

そうなると、プロジェクト終了予定時から逆算すれば、

・人員が、18人月
・人員が、3人貼り付け

がベターなわけです。

そうすると、差分1.2人月(金額にして120万円)が出ます。

ここで、発注側が予算額を 2,120万円に挙げれば、おそらくプロジェクトは安泰に終わります。
同様に、120万円分に機能を削り(5%程度の機能削除)をすれば、プロジェクトは安泰です。

ですが、これをIT会社に持たせようとする、2.8人という変な数字のために、無理矢理 1.2 人月分の効率化を社内でしようとします。採算確保のためですね。ですが、大抵はこの変な「効率化」のためにプロジェクトが破綻します。

また、この概算見積もりのように、リスク/管理費用/営業費用を見積もっている場合は、その分を引いていますのでスケジュールを縮めることは少ないのですが、これを忘れている(特にIT会社側が忘れていることが多い)と、これも変な「効率化」を始めてプロジェクトが破綻します。

経験上ですが、こういう変な端数に人は縛られてしまうようです。特にマネージャあるいは上司が採算を求められている場合は、このような 2.8 人という 0.2 人分を減らそうとして、プロジェクトから人を引き抜きます。そうすると、プロジェクトの最後で引き継ぎをすれば良かったのに、途中でプロジェクトを引き上げるために引き継ぎの作業が途中に入ってしまいます。これは全く無駄なことです。

そんな訳で、これぐらいの概算見積もりを出してから、見積もりを出しましょう。
という提案なんですが、どうなんでしょうねぇ?
いきなりボトムアップで作っているところが多いだけど。

追記 2019/01/11

10年ぶりに追記をしたので、こちらもあわせて もっと簡単に超概算見積もりver2 

 

カテゴリー: プロジェクト管理 | 2件のコメント

Windows 7 のタスクバーを小さくする/細くする

Windows 7 が昨日発売、ってことで、VMWare に入れてみました(MSDN版なので、手元にあるやつですが)。
日経新聞には Vista の3か月分の予約が入っていて売れ行き抜群だそうですが、XP->Win7の移行は進むんでしょうか?

さて、うちの家庭用PCもWindows 7にしました。Vaioの古いデスクトップを7年間使い続けてきたのですが、最近HDDの調子が悪くて。中身を空けてHDDの電源ケーブルを抜き差しすると、動くようになるので接触不良な気もするんですけど。いまいち、HDDのコネクタが悪いのか、電源のほうのケーブルが悪いのか判断がつかないので、かれこれ1年程。

で、新しいPCを買って Windows 7 を入れました。起動は早いですね~。が、あちこちのブログで書かれている通り、

・起動は早いが、そのあとのログインが遅い

ので、起動→ログインして使う、までの時間は Vista と変わりません。か、むしろ Vista より遅い気がします。
また、スタートメニューのデフォルトの「電源アイコン」(○のやつね)の動作が、

・Vista ではスリープ状態(休止状態だったかな?)
・Windows 7 ではシャットダウン

になっており、エコロジー対策?が為されています。まぁ、休止状態が楽なんですけど。

さらに言えば、スタートメニューの一番上に鎮座していた IE と Windows メール が無くなっています。
これは EU 向け対策(IE無しの Windows 7)と、メーラーが Windows Live メールに変わったためです。
IE/Outlookを使っている私には、不便ですねぇ~。
というわけで、「本当にUI/UXのプロが考えている」のであれば、プロではないね、と言いたくなる UI なんですが。
今、私が最も気に入らないのが、タスクバーが太くなってしまったことです。
Windows 7 の標準のタスクバー
<001>
snapshot20091023091250

これを見るとわかるんですが、XP/Vista のものより随分太くなっています。
とある記事には「スタートボタンの○がはみ出さなくなって、よくなった」なぞとフザケタことを書いてありましたが、このタスクバーは太すぎます。これがどれだけ使いにくいかと言うと。

・最近の液晶TVはワイド画面が多いので、横に細長い。
・Microsoft Office 2007 にはリボンが付いていて、編集画面が横に細長い。
・Windows 7 はタスクバーが太くなって、横に細長い。

ってな訳で、編集するところがどんどん横に細長くなってしまいます。

# タスクバーを隠すオプションもありますが、タスクへのアクセスを考えると、
# 常に出したままのほうが使いやすいのです。
# また、右に置くっていう方法もあるけど(マウスを右手で扱うので、タスクバーは右にほうが使いやすい)

というわけで、この太い Windows 7 のタスクバーをせめて Vista 並みに細くします。

タスクバーを右クリックして「プロパティ」を選択します。
<002>
snapshot20091023091329

「小さいアイコンを使う」にチェックを入れます。
<003>
snapshot20091023091345

そうすると、ほら、タスクバーが細くなりました。
このほうが、画面の圧迫感が少ないですよね。
<004>
snapshot20091023091407

カテゴリー: 雑談 | 14件のコメント

.NETからMySQL5のストアドプロシージャ呼び出しの落とし穴

別に落とし穴シリーズ化としている訳ではないのですが、諸にハマってしまったので。
# 英語圏の方も結構苦労している模様なので

.NET言語(C#やVBなど)からMySQL5のストアドプロシージャを扱うときには、
2種類のクラスライブラリを選択します。

・MySQL Connector/ODBC 5.1
 http://dev.mysql.com/downloads/connector/odbc/5.1.html
・MySQL Connector/NET 6.0以降
 http://dev.mysql.com/downloads/connector/net/6.0.html
 
で、今回は MySQL Connector/NET の方を使っていきます。
上記のクラスライブラリをダウンロードしてインストール。そして、参照設定までいけます。

さて、MySQL側のストアドプロシージャを

DELIMITER $$

DROP PROCEDURE IF EXISTS `StoredProc238` $$
CREATE <a href="mailto:DEFINER=`dbuser`@`%">DEFINER=`dbuser`@`%</a>` PROCEDURE `StoredProc238`( in i_age integer, out o_count integer)
BEGIN
  SELECT count(*) into o_count FROM t_person
   WHERE age < i_age;
END $$

DELIMITER ;

とします。

t_person テーブルを検索して、i_age を渡して、件数を o_count で返して貰うストアドプロシージャですね。

これを、Visual Basic 2008 から呼び出すようにします。

    'ストアドプロシージャを実行する
    Private Sub Button1_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Button1.Click

        Dim cn As New MySqlConnection( _
            "Data Source=xp-db;Database=sampledb;User ID=dbuser;password=dbpass")

        Dim age As Integer = Integer.Parse(TextBox1.Text)
        Dim count As Integer

        Dim cmd As New MySqlCommand("StoredProc238", cn)
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.Add("i_age", MySqlDbType.Int32 ).Value = age
        cmd.Parameters.Add("o_count", MySqlDbType.Int32).Direction = _
         ParameterDirection.Output

        cn.Open()
        cmd.ExecuteNonQuery()
        cn.Close()

        count = cmd.Parameters("o_count").Value
        '結果を表示
        TextBox2.Text = String.Format("{0}件", count)
    End Sub

■mysql.proc の参照権限を付ける

先のストアドプロシージャを MySQL Query Browser で動かして「うんうん動くね」と確かめてから、
いざ、vb から実行すると、cmd.ExecuteNonQuery() で例外が発生します。

“SELECT command denied to user ‘dbuser’@’ホスト名’ for table ‘proc'”

なにやら良く分からない英語なのですが、どうも proc テーブルを SELECT できないそうです。
う~ん、なんでしょうね?これは?

というわけで、結構探しました。

24.2.4.3. Connector/NET のストアド プロシージャにアクセスする
http://dev.mysql.com/doc/refman/5.1/ja/connector-net-using-stored.html

によると、Connector/.NETからストアドプロシージャを呼び出すときには、mysql.procへのアクセス権限が必要なんですね。
先のサンプルの場合、制限をきつくして、dbuserが sampledb しか見れないようにしているので、mysql データベースが検索できないために、このエラーが出ています。

本当は mysql.proc だけ grant すればよいのですが、mysql の場合テーブル単位でできたか分からないので、SELECT 権限を付与。
# ただし、すべてのテーブルの SELECT 権限を与えると、他のユーザーの権限とかも見れちゃうので、mysql.proc のみにしたほうがよさそう。ちなみに、ストアドファンクションのほうは mysql.func です。

■outputのパラメータの書き方

ストアドプロシージャから値を受け取るときは、Direction を「ParameterDirection.Output」をにします。
正解は↓なのですが、

    cmd.Parameters.Add("o_count", MySqlDbType.Int32).Direction = _
     ParameterDirection.Output

ここに至るまで小一時間ぐらい掛かりました。

実は、connector/.net 5 のときは、

   cmd.Parameters.Add("o_count", 0).Direction = _
     ParameterDirection.Output

な書き方が許されていたんですね。
Parameters コレクションに名前を値を与える。
Direction のデフォルトは「Input」なので、入力値の場合はそのまま。出力の場合は  ParameterDirection.Output を設定する。
というお手軽な方法が。

ですが、6.0以降、何故かこの書き方が「旧来」になってしまいました。おそらく ADO.NET の書き方(こっちも旧来になってしまっている)に合わせたと思うのですが。ここで私は悩んでしまって、次な書き方をしました。

   cmd.Parameters.Add("o_count", MySqlDbType.Int32, _
     ParameterDirection.Output)

実は Oracle の場合、この書き方が許されるのですが、MySQL の場合は違った!
3つめの引数は、size を示すのでした。

それで「落とし穴」なんですが、この Enum ParameterDirection。Enum なんですが Visual Basic の場合、自動的に integer に変換されてコンパイルが通ってしまうんですよ~。試しに C# で書きなおすとコンパイルエラーになるという。。。
vb 限定の落とし穴です。

カテゴリー: 開発, MySQL | .NETからMySQL5のストアドプロシージャ呼び出しの落とし穴 はコメントを受け付けていません

Visual Studio 2010 Bate 2 をインストール

Visual Studio 2010 Bate 2 をインストール

ひとまず、MSDNからダウンロードしてインストールしました。

お馴染みのインストール画面です。
001

続いてセットアップ

002

VCの9.0と10.0のランタイムがインストールされます。

003
インストールするときに、「Full」と「Custom」を選べます。
中身を確認するために Custom を選択します。

004

Visual F# があるところがおちゃめです。
005

次へを押して、どんどんインストールします。
例によって SQL Server Express Edition もインストールされます。
.NET Framework は ver.4 ですね。

006

長々とやって、やっとインストールが終わり。
途中、.NET Framework 4 を入れた後に再起動します。なので、他のアプリケーションは落としておいてください。

007

Service Release はないので無視して「終了」します。

008

最初の起動時に開発環境の選択をします。
開発環境に「Visual F#」がありますね。

009

起動すると「ようこそ」画面が出ます。ベータ1とは全然違います。

010
新しいプロジェクトダイアログを開いたところです。
Silverlight アプリケーションが最初から導入されています。

011

VC++のほうは変わり映えしません。
ATLやMFCも健在です。健在じゃないと困るけど。

012

VBでWindowsフォームアプリケーションを作成したところです。
ツールボックスは詳しく調べてませんが、あまり変わり映えしません。

013

という訳で記念インストール終了っと。
「Visual Studio 2010」の第2ベータ公開、最終版は2010年3月に発売へ
http://www.asahi.com/digital/cnet/CNT200910200031.html
マイクロソフト2010年マーケティングカレンダー–主要製品計画を明らかに
http://japan.cnet.com/news/biz/story/0,2000056020,20397152,00.htm

な訳で、Visual Studio 2010 は来春にリリースになるそうです。
う~む、Microsoft Office 2010 も来春なんですよね~。悩む…

カテゴリー: 開発 | Visual Studio 2010 Bate 2 をインストール はコメントを受け付けていません

Google AppsとOffice Web Apps

遠隔地の人と文書ファイルを共有しようとする場合、メールでやり取りをしてもいいのですが、最近は Web 上の Office があります。

無料かつ手軽なところと言えば、Google Apps がいいでしょう。

Google Apps
http://www.google.co.jp/apps/intl/ja/business/index.html

最近は有償版があって、何が有償でどこまで無料なのか分かりにくいのですが、

無償のStandard版は「50人まで共有」できます。なので、数名の会社/グループであれば、Google Apps の無償版で十分でしょう。まぁ、そうかと言って、デスクトップにある MS-Office製品を全廃することはできそうもないのですが。

そう、Google appsの場合は「ドメインを持っていること」という制限があります。
具体的には、登録時に「googlehostedservice.html」というファイルを、公開ドメインのルートに置く必要があります。
なので、ドメイン&ホストを持っていないとダメなのですが、サブドメインも使えるのでロリポップなどの安いところを借りて、ひとまず運用ってのも手ですね。

対抗馬、ということで Microsoft のプレビュー版が発表されました。
Office Web Apps
http://internet.watch.impress.co.jp/docs/news/20090918_316581.html

まだ、限定だそうなので、使える機能が限られています。。。って Word が使えないんで、限られているどころではないんですが。

Windows Live SkyDrive
http://skydrive.live.com/?mkt=ja-jp

を使っていると、Excelシートを使えるので試してみてください。

で、どれだけ使える/早いものか、試してみました。

Google Apps
20091019_02

Office Web Apps
20091019_01

OpenOffice3.1
20091019_03

比較として、OpenOffice3.1でも同じものを作ってみました。
すると、使うときの体感スピードとしては、

Google Apps > OpenOffice > Open Web Apps

の順ですね。なぜか、ブラウザ上の Google Appls のほうが若干速いという。
まぁ、ざっくりと「見積書っぽいもの」(そのうち中身をブログで説明します)を作っただけなので、複雑な図形や請求書の類を作ったらどうなるのかは分かりません。使い勝手は、デスクトップアプリのほうが有利でしょう。

ただ、ちょっとした計算や文書、そして共有/配布、の手間を考えると Web アプリケーションのほうが手軽で、回覧などが楽だと思います。文書をメールに添付して回覧するよりも、Web 上にアップしておいて誰でも見られる状態のほうが、閲覧性は上ではないかと。
これらは、Outlook/ExchangeやNotesが担っていた分野なので、もう少し押してくるとサイボウズなどのグループウェアが食われる可能性もあるのかなぁ。それともサイボウズ+Google Apps なんてのを既に考えている?

衰弱堂雑記
なぜ誰もサイボウズのシェアを取りにいかないのだろうか
http://suijackdo.seesaa.net/article/40969901.html

最近はサイボウズ自体も苦戦していて、シェアの伸ばせないそうで(既に中小企業のシェアを食っているから頭打ちのような気もするし)、オープンソースのグループウェアってのはそれなりに需要はあると思う。

が、いま思いつきを並べると、

・国ごとのスタイルが違って、海外に進出しにくい。
・作り手がグループウェア自体に飽きた。
・そもそも、企業とはグループウェアを必要としない体制/体質である?
・作るとき種類が多すぎて手間ばかりかかる。
・ITバブル以降、何かとIT投資を控えてしまい、グループウェアもそのあおりを食った。
・SAPなどと違い、経営層に対してに売りにならず、投資されにくい分野である。
・グループウェアという思想を社内に入れるのが嫌だ。

なので Officeのように部品を社内に導入するのは良いけれど、SAPのように経営層が好きそうなもの(従業員を働かせるという意味でね!)以外への投資は控えられ、

「グループウェアを導入すると、どれくらいコストが削減できるの?」
「グループウェアを導入すると、どれくらい営業業績がよくなるの?」

という基本的な質問に答えられないのが問題ではないかなぁと思う。

Officeの場合は、「1本いくらだから、社員100人でいくらのコストダウンができる」と言えるけれど、グループウェアの場合はそういうことが言えない。これは、言えないのが問題なのではなくて、言えない状態の場合に導入できないという経営判断が問題なんだけどね。

カテゴリー: 雑談 | Google AppsとOffice Web Apps はコメントを受け付けていません