2009年11月25日水曜日

Visual Studio 2008 Tools for Office (VSTO V3) とOffice2007

先回Excel2003で作ったアプリをExcel2007に作り変え、運用PCで動作したので備忘録へ。

アプリの変更は、元となるExcel2003(拡張子.xls)をExcel2007(拡張子.xlsx)で作り直し、新規ソリューションを作成。内部処理は全てコピペで終了。特に違いは何もありません。唯一の違いは・・・

 配置

2003Officeソリューションは.msiを使って配置しましたが、2007OfficeソリューションだとClickOnce配置を推奨している様に見えますね?(ClickOnceの説明が多い)。ClickOnceはdllプログラム類を共有し、ドキュメントは利用者毎に管理するようです。
http://blogs.msdn.com/tsmatsuz/archive/2008/03/31/vsto-v3-windows-installer.aspx

しかしClickOnceは、客先環境を設定/テストするだけで結構面倒な気がします。ClickOnceのバージョン管理も良いとは思いますが、どんどんバージョンが出来てしまう、客には扱いづらそう、こちらからのコントロールもやりにくい感じ。IISも出てきます。


WindowsInstallerによる.msiセットアップが全てにおいてやり易いと考え、今回も.msiセットアップを選択しました。結果、何の問題なく簡単に配置PCでインストール→問題なく動作。それは上記サイトのお陰です。大変参考になりました。
 
ただ動きが異なっていた部分があり、参考サイトでは中盤でエラーが発生します。Inclusion List の問題とされています。そのため、8.でInclusion List 更新ロジックを、プロジェクト追加し解決を図っています。
しかし・・・、このロジックを追加する前に、試しに配置PCでインストールしてみたところ、エラーなく動いてしまいました。何かのパッチで動きが変わった?不明です。
 
理由の調査は行っていません。今回は一先ず、結果オーラオイ、と言う事で次の開発へ進みます。問題が出た時点で調べてみようと思います。
 
 
ちなみに今回2007Excelへ作り変えの原因となった、配置先PCにインストールされているOfficeのエディションですが、VSTO V3アプリと言う事で、2007OfficeParsonal(パーソナルエディション)で、無事稼働できました。


必須コンポーネント
  (配置プロジェクト→右クリック→プロパティ→必須コンポーネント)
・Windowsインストーラ3.1
・.NetFramework3.5
・MicrosoftOffice2007PrimaryInterropAssemblies
・VisualStudioTools for the OfficeSystem3.0RuntimeSP1(言語パック含む)

上記必須コンポーネントをチェックすると、以下がないとコンパイラーが警告を出力。
・.NetFrameworkClientProfile
しかし以下理由1.4により無視しました。
http://download.microsoft.com/download/e/3/2/e3240f7a-9d38-4da0-9228-dbe73e7b9d61/NETFX35_ClientProfile_Readme.htm



ちなみに今回、新たなソリューションを作成しベースは拡張子.xlsxの2007Excelとしましたが、何かあっては困るので、並行して拡張子.xlsの2007Excelソリューションも作成しています。どちらも問題なく動作します。2007Excel拡張子は特に問題にはならないという事を、机上ではなく確認出来ました。

2009年11月23日月曜日

Visual Studio 2008 Tools for Office (VSTO SE) と Office2003

EXCEL起動時にWindowsフォームを表示し、フォーム内でSQLSERVERからデータ取得するSQLを動的生成し、EXCELグラフのネタ数値を設定するだけの単純なプログラムです。運用PCで動作したので一旦、備忘録へ。

今回EXCELを扱いますが、周りで2007Officeを使用している人が皆無に近いので、2003Excelで作成しました。しかし現在新たにPCを購入するとOffice2007しか選択出来ません。今後を考えると2007で作れば良かったかも知れません。
しかし・・・
大問題が発生し、結果、2003(.xls)と2007(.xlsx)の2つのアプリケーションを作成してしまい・・事前準備に不備があったようで、丸2日無駄にしてしまいました。が、両方覚えられたので、良かったかもしれません?



= 開発環境 =
VS2008 Pro, VSTO Excel 2003 Book, C#, SqlServer2005(2008) Std, XP Pro SP3(VISTA Pro)
注意点:
 試していませんがVSTO開発は、VS2008エディションPRO以上でないと作れないそうです(STD、EXRESS、はNG。VSのPRO以上を購入する必要あり)。VS2005の場合はどうなのか不明ですが、多分Pro以上と想像されます。

= 動作環境 =
PC:XP SP3,Office2003Std,Windowsドメイン参加(Windows認証)
DB Server:ドメイン上のSqlServer2005 STD
注意点:
 動作するPC上(配布先のPC)の、Officeエディションは、Office2003 Pro以上のエディションか、EXCEL単体パッケージでないと動かないそうです。


 要するに、Office2003スタンダードやOffice2003パーソナルエディションがインストールされたPCで、VSTOで作ったExcel 2003Bookアプリケーションは、動作しません。当該Excelをダブルクリックしても、普通にエクセルが立ち上がり、普通にExcelとして使えるだけです。書いたコードはウンともスンとも言いませんので、この事を知らないと、相当時間or日数、悩み続けます。怖いです・・。
アドインなら、配布先PCで、VSTO SEのインストールで、Office2003STDで動くとの事です。
(参考)http://www.microsoft.com/japan/msdn/vstudio/office/productinfo/faq/ 下から2つ目のQA

 これが発覚した大問題で、結局、全く同じ内容の2007Excelアプリを作らなければならなくなった原因でした。VSTO V3であれば、動作させるPCのOfficeエディションによる制約は、なくなったそうです。実際、Office2007STDで動作確認しています。という事は、VSTO V3(2007Office)以外の選択肢はないのでは?と思います。


= 肝 =
VSTOで作るOfficeソリューションの肝は、配置です。
アプリケーション自体、ただのC#アプリですが、配置は中々厄介。アセンブリやらマニフェストやら配置モデルやら、職業プログラマが、普段あまり意識しない要素が色々と面倒。MSDNの説明も、細かく、多く、何処まで読めば良いのか?全てか?。チュートリアルだけで事が済めば幸せですが、どんな風になっているかを理解するには、少しの苦しみが必要です。そして使用するPC側のセットアップも。配布先PCで、動作させる事が、最初は一苦労です。



= 制作 =
プログラム自体は単純。元となるExcel2003のBook(.xls)は予め作成済みでした。まずVS2008でOffice2003のExcelBookプロジェクト作成をクリック。アプリケーションのドキュメント選択で既存のドキュメントをコピーするをクリックし、既存のドキュメントの完全パスは、予め用意したxlsを指定。

最終的には、こんな感じ。配置は手作業(バッチファイルを利用)
※エクセルにSheet2,3がないのは、元のExcelになかったから。シートが1枚だけでも、特に問題は出ません。

 上記の仕様は、Excel起動時のsutartupイベントで(ThisWorkbook.cs)、Winフォームを開き、フォームにあるボタンpushをトリガーとし、フォームで入力された値を元に、DBへクエリします。楽をするため、データ取得は、テーブルアダプタにお任せして、データセットへデータを取得してもらいます。それをエクセルの折れ線グラフが参照する、複数のセルへ、取得したデータをセット。するとExcelが勝手にセルの数値を元に、グラフの折れ線を作ってくれる。たったこれだけ。(設定値のないセルには #N/A と設定すると、グラフの線が途切れず繋がります)

以下は、配置パターン2のケースで、Windowsインストーラ(.msi)を使って配置します。カスタムアクションを追加して、インストール処理をオーバーライドして、マニフェストを設定しています。
(参考)http://msdn.microsoft.com/ja-jp/library/ms268758.aspx


 色々書こうと思いましたが、、、私的には、2003Officeは、パーソナル・エディションやSTDを使っている人しか知らないため、VSTOで作ったOffice2003Excelアプリは・・・99%使い物にならない、と言う印象です。プロ以上を買ってくれ、でないと動きません。そう客に言えばOKでしょうが、、、

 一応、手作業配置で使った、バッチファイルを添付します。CasPol.exe(コード アクセス セキュリティ ポリシー ツール)を利用し、事前設定を行うことで、Excel実行時のエラーを回避します。
例)caspol -u -ag All_Code -url "C:\インストール・フォルダ\ConditionGraph.dll" FullTrust -n "ConditionExcelGraph"


 要は、インストールしたフォルダ、・・・利用者のPCの、何処かのフォルダ:インストールフォルダ:に、一式(ビルドしたソリューションの、\bin\Debugか、\bin\Releaseフォルダの中の全て:.pdpはイラナイ)をCOPYするだけ・・・、内のアセンブリ対し、完全信頼(Full Trust)アクセス許可を付与すれば、エラーは消え、動きます。



絵で見ると、以下になります。


「Microsoft Office ソリューションを配置して実行するには、各エンド ユーザーまたはコンピュータのセキュリティ ポリシーで、アセンブリに完全な信頼を付与する必要があります。」by MS


それと、配布先のPCに、以下をお忘れなく。
1.1 Microsoft .NET Framework Version 2.0 再頒布可能パッケージ
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5
1.2 Microsoft .NET Framework 2.0 日本語 Language Pack
http://www.microsoft.com/downloads/details.aspx?familyid=39C8B63B-F64B-4B68-A774-B64ED0C32AE7&displaylang=ja
2. Office 2003 製品用のプライマリ相互運用機能アセンブリ(officeをフルインストールしていれば、既にインストールされています)
http://www.microsoft.com/downloads/details.aspx?FamilyId=3C9A983A-AC14-4125-8BA0-D36D67E0F4AD&displaylang=en
3.1 Microsoft Visual Studio 2005 Tools for Office Second Edition Runtime (VSTO 2005 SE)
http://www.microsoft.com/downloads/details.aspx?familyid=F5539A90-DC41-4792-8EF8-F4DE62FF1E81&displaylang=ja
3.2 Microsoft Visual Studio 2005 Tools for the Microsoft Office System (VSTO2005) 再頒布可能パッケージ Language Package
http://www.microsoft.com/downloads/details.aspx?familyid=D64BA959-82C5-42CD-9AF7-BD57F6EFF12C&displaylang=ja

(詳細)
http://msdn.microsoft.com/ja-jp/library/2ac08ee2.aspx



 と言う事で、上記、= 制作 =の(参照)にあるチュートリアルの通り行うだけで配置先PCで動いてしまったので、少々拍子抜けでした。
 手動配置の場合も、ソリューションのビルドで出来たフォルダ内を配置先PCへコピペし、そのフォルダ下にFullTrustを与えるだけで動いたので、VSTOの配置は難しい・・と言う通説?は何だったのだろう・・と言う印象です。

しかしFullTrustは名前の通りFullTrustですから、最小限のファイルにのみ与える方が気持としては良いと思います。ただ本気で来られたら、なすすべないようにも思いますので、FullTrustは所詮FullTrustだと思います。


2009年11月19日木曜日

新機導入



先日、散々悩んだ挙句、安定性を求め購入に至りました。(本体のみ)
これはWSですが、価格が非常に魅力的で、いまのPCはまだ使えるのですが、つい・・。 開発用環境とその他全てを全て賄うために利用します。

現在のパソは2年前に作った手作り機。オンボードRAIDでえらい目に合ったPCです。なるべく安く導入しようと手作りですが、結局DELLで買うのと大してスペックは変わらず、目標ならずでした。
しかも電源付きの安いケースにしたのが間違いで、突然リブートする等の電源トラブルのため電源を買い換えたり、VGAを買い足したりと、結局結構足が出てしまいました。未だ安定性がイマイチです。
速度も、π21秒と納得できませんが、年に1回全HDDを新品交換してwindowsをクリーンインストールするので、手間はかかりますが、そこそこを維持しています。


新機ですが、レノボのワークステーションです。
IBM、レノボは自作マザーや自作BIOS、その他余計なハード寄り?機能がてんこ盛りで、どのPCもスペックにしては速度が出ません。ノートを持っていますが、このWSも例外ではなさそうで、ビスタビジネスが入っているので余計に・・・。

CPUはXeonE5430と、かなり古く低クロックです。ビスタは64BIT仕様で、64ビット機としてテストに使えます。良い点はVGAにQuadroFX1700を使っています。画像もAdobeで扱うので、良いですね。
ただメモリが2Gしか積んでおらず・・・中身はサーバーを静音仕様にしたような仕様で、ラックマウントキットも販売されており・・・廃れつつあるFB-DIMM、更にECC付きのため非常にレアで高価です。1M:1.5万~と言ったところで、ポチッとしてからその事に気づき・・・

システム開発には正直オーバースペックで必要ないマシンと思いますが、WSと言う事でCAD等に使うマシンであり、安定性は高いと思います。なるべくソフトを入れないよう頑張ります。



しかしこれで私1人が使うマシンがまた増えてしまい・・・
PC2台
WS1台
ノート2台
サーバー4台

このうち時間がなく箱を開けていないマシンが3台。狭い事務所が箱とパソだらけです。通販用のダンボール群も多量にあり、人の居所がありません。

未開封品はいっそオクに出してしまうか・・・。

2009年11月13日金曜日

.net 開発

今更ですが、LINQ 面白そうですね。

今回、LINQ to SQL、を使ってみました。データの取得は、あのクエリが面倒なので・・・これまで通りsqlを書いていますが、感想は更新がとても楽です。インテリセンスを使えるので、これまでの様に画面を沢山立ち上げ、Ctrl+Tabで切り替え、コピペを多用し、・・・の一連の動作が必要なくなりました(笑)

LINQ は、まずオブジェクトモデル(モデル)を作らないとですが、作成には、O/Rデザイナ、SQLMetal、コードエディタ!?、を利用しますが、私はSQLMetalを使いました。

まれにDBの項目を変更しながら開発をしているので、VSのデザイナは作成後の動的変更がどうもいまいちで、そもそも以前はconnection、command、SqlDataAdapterをデザイナを使って作っていましたが、結局tableAdapterに取って代わられ、その変更が非常に大変だった事もあり(全く関係ありませんね・・)、それ以来デザイナ嫌いです。型はDBに入っている・・と、無理に解釈していますが・・。

そのためSQLMetalを使いましたが、これが楽!テーブル項目が変更になれば、再度SQLMetalを実行した結果を、VS上でそっと入れ替え(古い.csを削除し、すぐさま新しい.csを追加)、リコンパイルでさっと新verのテーブルが使えます。削除された項目があれば、コンパイラーがエラーを見つけてくれます(当たり前ですが)。
sqlmetal /code:"c:\xxx\xxx\xxdb.cs" /language:csharp /server:サーバ名 /database:xxdb

ただ上記の方法で、LINQ to SQLを使っていても、全くLINQの勉強になっていません。職業プログラマとしての、楽して作れ、時間削減による経費削減、には良いですが、LINQの本質やその他、力が全く付いていない感覚です。

以前、オブジェクト指向に乗り遅れ、未だ乗らずに走っているのと、同じ状態になります。汎用機には必要ないですから・・今でも、でしょう・・。


今日、たまたま、LINQ to DATASET、を見ました。すると、これはなかなか色々な勉強になります。無理にでも新機能?(私の知らない機能は新機能)を使わなければなりません(必須ではないですが、私的に使います)。

今まで見向きもしなかった、ジェネリック、デリゲート、匿名関数、ラムダ、、。ラムダなんて言葉自体、今日初めて知りました・・。やはり、たまにだけのoyajiプログラマですね。



ちなみに私事ですが、
PCやWEBのソフトは殆どC#で作ります。多少PHPを、今更ながら使い初めました。もうかなり枯れているかな?と思い。

C#の良い所は、言語云々ではなく、VBと比べ、技術者のレベルが、ある程度の技術レベルを持った人材が揃いやすい事です。要するに当たり外れが少ない。これがC#の一番の利点です。VB人材は幾らでもいますが、ピンキリで、当たり外れが多く、選別に結構の労力を使います。外れた人が来てしまうと、短期で帰しても、その分の持ち出しと、その人の開発遅れ(何も開発していない?)による持ち出しが発生し、誰かを使って穴を埋める。下手をすると2倍以上の経費がかかってしまったり、開発自体が赤字になる恐れが、簡単に発生します。とは言え、他言語のWEBスクリプト開発程、怖い状態にはなりません。

DBはSQLSERVERのみで他は使いません。Oracleは金と時間が必要でしたし、ACCESSを使うならSQLserverのEXPRESSエディションを使います。ただネットワーク対応(ファイル共有)の必要な場合や、サーバーを用意出来ない顧客の場合は、仕方なくACCESSを使います。DBサーバー導入には、認証サーバーの導入や、維持費を含め、やはりある程度の費用が必要です。

また今回、見栄えの良いグラフを楽に作る必要があり、初めてTOOL for OFFICEを使いました。するとこれも、結構面白いです。
が、感想としては、使いづらい部分やPCが不安定になる事もあり、MSが¥を入れていないと思います。しかし未だにCOMが入っていますし、凄いですし、やはり扱いづらいです。ただ新鮮です。もしかすると、私的に流行る開発手法になるかも知れません。

2009年11月12日木曜日

ML115 G5 の余談

余談ですが、
このML115G5には、オンボード・レイドが付いています。
私は以前、その辺で売っているオンボードraid付きのPCマザーを購入して、reidを組みました(intelベース)。
が、あっという間に(2週間程)酷い目に合い、二度とオンボードraidは使わない!と誓いました。

しかしフィールドSEによれば、G5のraidは使えるらしいです。
PC用マザーのおもちゃraidとは別物で、わざわざカードを購入せずとも、普通に使えると言っていました。
私は勇気がないので試しませんが、何方か、試されてみては?



余談その2は、価格の話。
わずか1.7万のサーバーですが、HPに限らずdellにも激安サーバーは存在します。
この激安サーバーですが、完全に赤で出しているそうで、売れれば売れるほど、赤になるそうです。 と言ってもあの企業規模からすると、それ程気になる額とも思えませんが、販売台数が桁違いですので、億、もしや数十億単位の赤も出ているかも知れませんね。ですが、未来へ繋がるシェア争いです。

この手法ですが、これはnetショップの、初回購入させ手法と同じです(数ある手法の1つ)。*あくまで私の周りで起きている話ですので、それなりとご理解下さい。

スーパーの目玉商品の内情は知りませんが、netショップの目玉商品は通常であれば赤字です。
何故なら・・リピーターが欲しいから。
1度買ってもらわない事には、リピーターは存在し得ません。
この1度買ってもらう行為が、どれだけ大変か。大昔から企業は、この最初の一歩に辿りつくまで、どれだけの経費を使っていることか・・・

ドモホルンなんかの再春館製薬は無料で配ってますよね・・初回セット。そう言う事です。 後はトークで10万以上するセット商品を定期的に売り、太いリピーターへと繋げます。

リピーターって、何故良いと思いますか?
それは購入させるための経費が、新規顧客と比べ非常に低いからです。
購入は、転換率と言う言葉で表せますが、新規客+リピーターの転換率は、せいぜい1%~2%、良くて3%~。ここから新規顧客の転換率を出せば・・・目も当てられない率になるかも知れません。

この転換率ですが、これは100人が店に来て、そのうちの1人(1%)が顧客になる事を表しています。酷い場合は、0.3%(3千人に1人)と言う事もあります。
この100人の来店客に対して、1人当たり7千円の経費(広告費・集客費・転換費・・・)がかかっているとすると、このケースでは1人の新規顧客を得るに、少なくとも70万の経費かかるわけです。 しかしお客さんは1度に70万も買い物しませんよね?だから持ち出しの大赤字。 脱サラしてnetショップをやりたい方は、この辺の事情を知らないと、大変な目に合うかも知れませんね。

しかしリピーターから再度商品を購入してもらうには、通常であれば経費は70万もかかりません。 中々販売に結びつかづとも、ある程度の値引きで何とかなったりもします。この店から1度買い物をしたと言う、信頼もあります。

どうです?新規顧客1人に商品を販売するのと、1度売ったことのある顧客に商品を販売するとでは、これだけの費用の違いが出ます。


あとは、少しずれますが・・・
例えばnetショップや会社のHPを経費沢山使ってカッコよいものを作り、独自ドメインを取って公開したからと言って、一般的には誰も訪れてはくれません。月間アクセス数0~1。年間アクセス数30なんて、もしかするとザラではないでしょうか?
これは太平洋の真ん中に一坪の店(会社)を開くようなものです。既存のショップや会社がこれだけ苦労して来客を集め、その中の一握りに販売している訳ですから、開いただけでは誰も見てくれませんし、何の営業力も発揮してくれません。

おいしい話をする業者に騙されないで下さいね。netショップの方は、怪しいSEO業者にもですかね。必ず、全ての質問の返答を用意し、ニコニコとあなたを待っていますよ。あー言うと、こう説得されます♪

*詳しい事情は専門のサイトを探されてください。



・・・完全に趣旨の違うブログになってしまいましたが・・・

と言う事で、激安サーバーは非常にお買い得と思いますよ。
(PCのOSがインストール出来、PCの代わりとして使えれば、です)

2009年11月10日火曜日

HP ML115 G5 + XP

昨日の作業で結果、環境を破壊してしまったので新環境を構築。

皆さん使われている、HPの激安サーバ+WindowsXP
わずか1万7千円で強固なサーバーベースのパソコンが作れるとは凄いです。

こちらのサイトを参考にさせていただきました。
http://www26.atwiki.jp/ml115_g5/pages/27.html


(2009/11/9)
ドライバ類は参考サイトの通りにDL(チップセット、内蔵VGA、イーサネット、不明デバイス1、2)
マシンスペックは、G5に追加メモリを1G、計2G。それ以外は吊るしの状態。

a.XPインストール
 インストールCDを入れ何も問題なく最後まで。

b.XP起動
 参考サイトに「ディバイスマネージャに不明なディバイスが5つ」とありますが、
 オンボードLANを認識しなかったため(ドライバなし)6つありました。

 初期状態:
  1680*1050のディスプレイに、1280*1024で表示。
  マウスはカクカク、ドラッグもカクカク、反応が遅くこれではとても使えない。
  加えてLANなし。

c.ドライバインストール
 チップセット : 問題なくインストール
 内蔵VGA : 問題なくインストール
 イーサネット : 問題なくインストール
 不明デバイス1 : 問題なくインストール
 不明デバイス2 : server用なのでインストールできないとのメッセージが表示されインストール不可

d.再起動
 画面のカクカク解消。
 1680*1050でディスプレイ表示可能に。
 オンボードLAN認識 → ネットワーク設定完了。
 ディバイスマネージャの不明ディバイスは1つだけに。
 不明ディバイスは上記、不明デバイス2なので特に気にせずほおっておきました。


結構まともなPCへ変貌しました。全く普通に使えます。
クリーンインストール直後なので、動作が非常に速いですね。
これがあっという間に遅くなるのでしょうが・・・

音は出ませんが開発機なので必要ありません。
音の出し方はこちらのサイトが参考になります。
合わせて起動時の爆音対策も参考になります(物凄い爆音です)
http://kinokoart.seesaa.net/article/107753452.html

上記インストールしながら平行して行った、開発環境を壊してしまったPCの修復が出来たので、このマシンは一先ず休止状態となりました。
折角なのでWindows7(OEM)64bitをインストールしようと考えています。

2009年11月9日月曜日

Visual Studio 2008 Tools for Office (VSTO) と office2007試用版

現象:
office2007試用版をアンインストールした環境で、2003officeプロジェクト(tool for office)を開くと、アップグレードウィザードが出現し2007プロジェクトへ強制的に変換しようとする


問題:
office2007をアンインストールしているのに何故ウィザードが出現してしまうか?

解決:
vs2008 [ツール] → [オプション] → [officeツール] → [プロジェクトのアップグレード]
プロジェクトの移行スキームで、インストールされている Officeのバージョンに常にアップグレードする
このチェックボックスを外す

解決までの所要時間:
3時間

単純なだけに、3時間は痛い。余計な回り道をし過ぎタイムロス。