2009年7月2日
#
ことの始まり
先日、blogの「連絡をする」から1通の英文メールが届きました。それは「NDepend」のLead DeveloperであるPatrick Smacchiaさんからで、「NDependのProライセンス使わない?」といった内容でした。
このメールで思い出したのが、ナオキさんのこのエントリ。
ナオキにASP.NET(仮) : NDepend(静的コード解析ツール)の Professional ライセンスが条件付きで無料提供中
NDependには興味もあったので、せっかくなので私もProライセンスを頂くことにしました。
#NDependってなんぞや?については、上のナオキさんのエントリや以下のInfoQの記事などをどうぞ。
#InfoQ: NDependおよびコードメトリクスの理解向上
んで、返事を書こうにもTOEIC350点を叩き出したことがある程度の英語力。どうしよっかなーということで、twitter経由でナオキさん(@naoki0311)に「どんな返事書きました?」って聞いたら、テンプレートみたいなのを頂けることに。お陰である程度ちゃんとした返事が書けました。ナオキさん、ありがとうございました。
返事を書いてしばらくしたら、NDependのインストール方法とライセンスキーがメールで届いたので、さっそくインストールしてみました。
NDependの起動
NDependを起動すると、まず以下のような画面が表示されます。
ナオキさんも書いてましたが、Ribbonインターフェイスにすることも可能です。
[Tool]メニュー-[Option]を開きます。
[Menu\Bar\Ribbon Preference]を選択します。
ラジオボタンで[Ribbon]を選択します。そうすると、次のようなダイアログが表示されます。
「この変更は次に起動したときに反映されます」ということなので、Optionsダイアログを[OK]をクリックして閉じた後、NDependを再起動します。
なんかかっちょいい感じになりました。
NDependを使ってアセンブリを解析する
では、さっそくNDependを使ってみましょう。
まずは[Start Page]の[Recent Project]から[Analyze: a set of .NET assemblies]をクリックします。
解析したいアセンブリを[Brows]ボタンをクリックして選択します。
適当なのが見つからなかったので、とりあえずF#のFSharp.Core.dllを食わせてみました。
[OK]をクリックします。
解析が始まり、終了すると既定のWebブラウザに解析結果のページが表示されます。
NDepend本体にも解析結果が表示されます。
色々な解析結果がグラフィカルに表示されているのが分かります。
今回はここまで。次回以降、実際どのような解析結果があり、どう使えるのか、私自身学びながら紹介できればと思います。
2009年6月30日
#
2009年6月29日
#
「nvlddmkm が応答を停止しましたが、正常に回復しました」が発生
「nvlddmkm が応答を停止しましたが、正常に回復しました」のその後
やっぱり駄目・・・なのか?
とりあえずは問題切り分け - GPU温度
とりあえずは問題切り分け - 電源関連
の続き。
結局調子が悪いまま、ドライバを標準VGAにしてノイズの乗った画面で使っていたのですが、PC自作派の友人から使ってないグラボをもらって入れ替えたら、何事もなかったように回復しました。
入れ替えたボードは「ATI Radeon X1300 Pro」のファンレス仕様のバルク品みたいです。ググっても同じボードが見つからないので。
これで本当に解決したかどうかは分かりませんが、とりあえず良かったということで。
ただ、電源もあまり質のいいやつではないとの情報がK5さんだけでなく、グラボもらった友人からも聞きましたので、まだシロと決まったわけでもありませんし、そう遠くないうちに変えようかとも思ってます。
ちなみにWindows エクスペリエンス インデックスのスコアは以下。
前は5.9だからちょっと下がってますが、重い3Dゲームをバリバリやるわけでもないので問題なしです。最初からこのくらいのグレードのグラボにしとけばよかったかな。
2009年6月22日
#
ひょんなことからまとまった文章を書かなくてはならなくなったので、参考にと購入しました。
内容としては言われてみれば至極当たり前のことが並んでいるのですが、それでもよほど気を付けていないと、ついやってしまう誤りなどが実例を交えて解説してあります。
中でも印象的だったところは「パラグラフの定義」でした。以下に引用します。
パラグラフは(中略)全体として,ある一つのトピック(小主題)についてある一つのこと(考え)をいう(記述する,明言する,主張する)ものである.
(中略)
パラグラフには,そこで何について何を言おうとするのかを一口に,概論的に述べた文がふくまれるのが通例である.これをトピック・センテンスという.
(中略)
つまり,トピック・センテンスと関係のない文や,トピック・センテンスに述べたことに反する内容をもった文を同じパラグラフに書きこんではいけないのである.
この視点で今まで書いてきた文章を見直してみると、一つのパラグラフに複数のトピックを持ち込んだり、脇道にそれた文がパラグラフに混じっていたりしていることが、多々ありました。
この他、「意見」と「事実」をしっかりと区別して扱わなければならないといった内容もあり、非常にうなずける主張だと感じました。
我々技術者も、なんだかんだで仕様書を始めとした文章を書く機会にあふれています。そういった文章を書く際の参考として、非常に良い書籍だと思いました。比較的古い本ですが、その内容は現在でも十分通用します。皆さんも手に取ってみてはいかがでしょうか。
最後に、目次を引用してこのエントリを終わります。
1 序章
1.1 チャーチルのメモ
1.2 この書物の目標
1.3 <作文>について
2 準備作業(立案)
2.1 準備作業の必要
2.2 文書の役割の確認
2.3 主題の選定
2.3.1 与えられた課題
2.3.2 一文書一主題
2.3.3 長さの制限
2.3.4 読者
2.3.5 なまの情報
2.4 目標規定文
2.5 材料あつめ
2.5.1 思いつくままのメモ
2.5.2 ジャーナリストの定石その他
2.5.3 図・表
2.5.4 文献
3 文章の組み立て
3.1 記述の順序
3.1.1 起承転結
3.1.2 重点先行主義
3.1.3 新聞記事
3.1.4 序論・本論・結び
3.2 序論
3.3 結び
3.4 本論の叙述の順序
3.4.1 概観から細部へ
3.4.2 細部の記述の順序
3.4.3 論理展開の順序
3.5 文章の構成案のつくり方
3.5.1 構成表を作るやり方
3.5.2 スケッチ・ノート法
3.5.3 カードによる整理・収束法
4 パラグラフ
4.1 パラグラフ序説
4.2 パラグラフのみたすべき条件
4.3 トピック・センテンス
4.4 展開部
4.5 文章の構成要素としてのパラグラフ
4.5.1 パラグラフの立て方
4.5.2 パラグラフの長さ
4.5.3 パラグラフの連結
5 文章の構造と文章の流れ
5.1 レゲットのいうこと
5.2 文の構造-逆茂木型の文
5.3 文章の流れ-逆茂木型の文章
6 はっきり言い切る姿勢
6.1 レゲットのいうこと(続)
6.2 明言を避けたがる心理
6.3 明確な主張のすすめ
6.4 <はっきり言い切る> ための心得
7 事実と意見
7.1 事実と意見
7.2 事実とは何か 意見とは何か
7.3 事実の記述 意見の記述
7.4 事実と意見の書き分け
7.5 事実の持つ説得力
8 わかりやすく簡潔な表現
8.1 文は短く
8.2 格の正しい文を
8.3 まぎれのない文を
8.4 簡 潔
8.5 読みやすさへの配慮
8.5.1 字面の白さ
8.5.2 漢語・漢字について
8.5.3 受身の文
8.5.4 並記の方法
8.6 文章の中の区切り記号
8.7 私の流儀の書き方
8.7.1 漢字の使い方
8.7.2 文末の述語
8.7.3 書きことばと話しことば
9 執筆メモ
9.1 日 付
9.2 辞 書
9.3 単位・量記号
9.3.1 単位
9.3.2 量記号
9.4 文献引用
9.5 原稿の書き方
9.5.1 原稿用紙の使い方
9.5.2 数式の書き方
9.5.3 字体その他の指定
9.5.4 書直しと清書
9.6 図と表の書き方
9.7 読直しと校正
10 手紙・説明書・原著論文
10.1 手 紙
10.1.1 用件の手紙の扱い方
10.1.2 用件の手紙の形式
10.1.3 本文
10.2 説明書
10.2.1 説明書の書き方の教育
10.2.2 使用説明書
10.2.3 説明書の模範例
10.3 原著論文
10.3.1 科学論文の区分
10.3.2 論文のオリジナリティー
10.3.3 原著論文の書き方
10.3.4 再検討・仕上げ
10.3.5 閲読制度について
11 学会講演の要領
11.1 「読む」のではなく「話す」
11.2 話の構成
11.3 スライドの原稿
11.4 手持ち用メモ
11.5 登壇するときの心得
11.6 英語講演の原稿
2009年6月18日
#
2009年6月6日
#
最近は開発言語、開発環境、インフラ、フレームワークなど、生産性を向上させるような仕組みがかなり整備され、実際にプログラムを作成する時間はどんどんと短くなっています。至近の例でいえば、.NET Framework 3.5の登場によってVBでもC#でもLINQが使えるようになり、従来なら面倒なコードをこねくり回していた処理が1行で出来てしまうようになりました。
しかし、実際アプリケーションを作成する時間が短くなったかといえば、そんなことはありません。プログラムはあっという間にできるのになぜでしょう?
その原因の一つが「設計が追いつかない」です。厳密に言えば「要件定義」→「概要設計」の部分が全く追いつきません。その為、「詳細設計」以降を見切り発車せざるを得ず、概要設計のレビューの結果、詳細設計にも結局戻り作業が発生するため、単体テストまで終わっても再び修正が入り、工数も膨らみます。
従って、いわゆるウォーターフォールの枠組みの中では、上流と呼ばれる部分がボトルネックとなり、生産性は頭打ちになってしまいます。ここが生産性向上の限界です。
これを何とかするにはどうしたらよいのでしょうか?私がない頭をひねって考えたのは以下の2つです。
- 「要件定義」→「概要設計」→「詳細設計」という流れをやめ、「要件定義」→「機能仕様」とすることにより、概要設計と詳細設計部分の乖離をなくす。
- 「設計」→「プログラミング」→「レビュー」のサイクルを数回回す。(プログラミングには単体テストも含む)
1.については「仕様の書いていない概要設計書」や「コーディング設計書みたいな詳細設計書」ではなく、がるさんも言ってたMECEかつKISSに書かれた「機能仕様」があれば、それでプログラムを作成することは可能だと考えるのです。
ただし、機能仕様作成にもプログラム作成にも相応のスキルは必要とされることが問題です。本来は仕様策定者=プログラム作成者となるべきですが、大抵のプロジェクトではそうはいきません。コーダレベルのメンバもプロジェクトにはいますし、いなくてはそのメンバ成長も見込めません。
そういったメンバにはやはり先輩(というか相応のスキルを持ったメンバ)がしっかりサポートに着ける体制が必要です。個人的にはペアプロはこういう場合非常に有用でないかなと考えています。(ただ、実行にはまだ移せていません。)
2.についてはいわゆるアジャイルなプロセスがやはり必要かなと感じています。現状は設計とプログラム実装を比べて、設計にかかる時間の割合が大きくなっていて「設計待ち」の状態ができています。ですので、設計の粒度を小さくして段階的に行うようにして、「設計待ち」の時間を短くすることにより、スループットが向上するのではないかと考えました。
ただ、これは「如何に適切な粒度で設計を分けるか」が鍵になり、ある程度こなせるようになるには時間が必要でしょう。また、設計を段階的に行うためにはユーザとの調整が欠かせないでしょうから、政治的な話も出てくるかもしれません。
とりあえず色々と模索してみましたが、なんとかこのボトルネックを回避しなければ、これからの時代システム開発で生き残っていくことはできないでしょう。食いっぱぐれないためにも、今後も個人でできること、できないことを含め、模索を続けていくつもりです。
2009年6月3日
#
今週末の6/6(土)は第7回長岡開発者勉強会です。今回は私は参加できませんが、いつもとは一味違いプログラム関連ではないセッションが揃っています。詳しくは以下。
第7回勉強会(2009/06/06)
日時
2009/06/06(土) 13:00~17:00
場所
長岡市 中央公民館 406教室
「美容室みょんみょん」「花のコメサン」のある交差点の通りを、少し進むと標識があるはずです。
バスを利用する場合
JR長岡駅前または厚生会館前で、
・[ 4番線]中央循環(外回り)
・[10番線]南循環(内回り)
・[ 6番線]西長岡・関原・大積行き
のいずれかのバスに乗り、千手3丁目停留所で下車。(約5分)バス停から徒歩1分。
参加料金
無料
内容
現在予定されているセッションです。(時間の都合や、初スピーカー優先の原則により変更する可能性があります) - 13:00~13:30
準備、説明 - 13:30~15:10
関連法規(セッション60分、質疑応答20分、休憩10+10分) - 15:10~16:00
SEM(Search Engine Marketing)(セッション20分、質疑応答20分、休憩10分) - 16:00~16:50
個人ブログでお小遣いは稼げるか?(セッション30分、質疑応答20分) - 17:00
あと片付け&解散
資料はこちらになります。勉強会の終了後に懇親会を実施します。
懇親会
人数が多くなければ、予約を取らずにブラブラと適当な居酒屋 お店に飛び込んで適当に注文します。
飲酒不可の参加者が多い可能性があるため、食事会形式になる可能性があります。
参加申し込み
参加申し込みはこちらから。
とくに関連法規あたりは、開発者である我々はなかなか普段意識することがありませんので、非常に興味深いものになりそうです。
というわけで、長岡近郊の方々のご参加をお待ちしております。
参加申し込みはこちらから!
2009年5月30日
#
ネタ元→ナオキにASP.NET(仮) : VS ユーザーの開発生産性を大幅アップ無償のアドイン CodeRush Xpress と Refactor!
例えば、CodeRush
・ブロックの見える化(スコープ範囲を薄く線引きし可視化しています)
・Throw とか Exit とかの処理から処理へのジャンプが発生する場合のジャンプ先へのアニメーション表示(どこに飛ぶかが一目でわかる)
・宣言、参照間のジャンプ(わんくま同盟のまさるさんお勧め)
さっとあげるだけで3つ。実際に使ってみると細かな点で恩恵を受けることになります。
というわけで、ナオキさん(id:naoki0311)に呼び出し食らったので、「CodeRush Xpress」の紹介をしてみようかと。
CodeRush Xpressとは
まず「CodeRush Xpress」とはなんぞやということで、上記本家サイトから引用すると次のような感じ。
CodeRush Xpress is freely available to all Visual Studio 2008 developers and offers a comprehensive suite of tools that enable you and your team to simplify and shape complex code - making it easier to read and less costly to maintain.
思いっきりざっくりというと「コーディングをサポートする便利な無償のVS2008アドイン」です。CodeRush Xpressを使うことで、C#、VBのコーディングを楽に進めることができます。
ただし、残念ながらVS2008 Express Editionには対応していません。
CodeRush Xpressの機能
では、どのような機能があるのでしょうか。同じく本家サイトから引用します。
- Duplicate Line
- Highlight All References
- Increase or Reduce Selection
- Smart Clipboard Operations
- Generate from Using (TDD)
- Quick Navigation Window
- Quick File Navigation
では、一つずつ見ていきましょう。
Duplicate Line(行の複製)
カーソル行を複製します。なお、この機能はC#限定のようでした。
まず複製したい行にカーソルを合わせてShift+Enterを押下します。
そうすると、現在の行が複製され、次の行に挿入されます。

この機能によって複製できるのは、using句、フィールド、ローカル変数の定義、Enumの要素などです。
なお、CodeRush XpressのキーバインドとVSのキーバインドがカブっているとき、次のようなフローティングウィンドウが表示されます。

Highlight All References(すべての参照の強調表示)
フィールド、ローカル変数、メソッドなどの定義と参照の全てをハイライト表示します。
ハイライト表示したいものにカーソルを合わせてCtrl+Alt+Uを押下します。
全ての定義と参照に下線が付いてハイライト表示されます。
このときTABキーを押下すると、ハイライト箇所のジャンプを行います。
ちなみに、Ctrl+Alt+Uを押さずに、いきなりTABキーでも定義、参照間のジャンプがされるので、非常に重宝してます。
Increase or Reduce Selection(選択の増減)
選択箇所を増減させることができます。
Ctrl+Alt+"+"で選択を増やします。
Ctrl+Alt+"-"で選択を減らします。





Smart Clipboard Operations(スマート カット コピー)
Ctrl+C(コピー)やCtrl+X(カット)、Ctrl+V(ペースト)の機能を拡張します。
単語の途中にカーソルを合わせてCtrl+CやCtrl+Xを押下すると、単語全体をコピー(カット)します。
また、コードブロックの始めか終りにカーソルを合わせてCtrl+CやCtrl+Xを押下すると、コードブロックをコピー(カット)します。
Generate from Using (TDD)(Usageの生成)
クラス、メソッドなどを自動生成します。例としてメソッドの場合を紹介します。
まず、定義されていないメソッドをコーディングします。
赤波下線が付いている箇所でCtrl+@を押下します。
メソッドを定義する箇所を選択し、Enterを押下します。
メソッドの雛型が作成されるので、必要な実装を行います。
生成できるものは以下の通りです。結構な種類が生成可能です。
- コンストラクタ
- クラス、構造体
- デリゲート
- 列挙体(Enum)とその要素
- イベントハンドラ
- インターフェイス
- プロパティ
- ローカル変数
- メソッド
- プロパティ
Quick Navigation Window(高速ナビゲーション)
Ctrl+Shift+Qで高速ナビゲーションWindowを表示します。
メンバのタイプでのフィルタリングもできます。
Quick File Navigation(高速ファイルナビゲーション)
Ctrl+Shift+Fで高速ファイルナビゲーションWindowを表示します。
上記以外の機能としてはコードブロックの可視化があります。
コードブロックの可視化
コードブロックのスコープに薄い線が表示されます。
コードブロックが崩れると、一目で分かります。
また、リファクタリング機能も追加されます。この点は特にVBだとありがたいですね。
リファクタリング
リファクタリングしたい箇所でCtrl+@を押下します。

その箇所で使用できるリファクタリングの一覧が表示されるので選択します。(1つしかない場合はこの一覧はショートカットされて、リファクタリング機能がすぐに実行されます。)
まとめ
ざっとCodeRush Xpressの機能を見てきましたが、いかがだったでしょうか。個人的には定義、参照のジャンプとコード生成、リファクタリング機能が非常に良いと思っています。
今回紹介しなかった機能もまだまだありますので、詳しくはインストール後に製品に含まれているドキュメントをごらんください。
2009年5月20日
#
というわけで、先日(5/16)行われた、第6回長岡開発者勉強会に参加してきました。
所用で遅れていったため、最初のセッションである@yutacarの「Hello Poken!」は残念ながら見れませんでした。
聞くところによると、Pokenプレゼント企画のためにiPhone SDKでくじ引きアプリを作って、それが好評だったとのこと。
そして、会場に着くと丁度2つ目のセッション、@civicの「Adobe AIR」が始まる直前でした。
でもその前に、Pokenをもったメンバとハイフォー。ようやく@yutacar以外の人とハイフォーできましたw
あと、@fumikohの東京土産「東京ばな奈しっとりクーヘン」をいただきました。
おいしかったです。ありがとう。
そしてセッション。内容としては以下の通り。
- おさらい
- Flashの作成方法
- Flash CS3
- FlexBuilder
- Flash Develop + AS3
- マルチプラットフォーム
- Adobe AIRとは
- 通常のFlashはブラウザ上のFlash Playerで動く
- AIRはデスクっぷ上でFlashを動かす技術
- 動作
- 2つの形態
- Flash/Flexベース
- Flashの作り方とほぼ一緒
- ASなどからAIRのAPIを実行
- HTMLベース
- HTML + JavaScriptで作成
- JavaScriptはjQueryなどのライブラリを利用できる
- Ajaxを使うことでWebサービスを呼び出せる
- デスクトップ上にFlashが必要か?
- ビジュアル重視ならFlash
- マルチプラットフォーム
- インストール/アップデート容易さ
- デスクトップ上にHTMLが必要か?
- ページデザイン、レイアウト
- JavaScriptでクライアントアプリを作れる
- WebAPIとのマッシュアップが容易
- 他の選択肢
- WPF + ClickOnce
- JavaFX + Java Web Start
- どんな時AIRを選択するか
- ビジュアル重視の場合
- Flash開発者が多い
- HTML+JavaScript開発者しかいない
- WebAPIを使いたいとき
- サンプル
- 質疑応答
- AIRでクライアント設定を保存するにはどうする?
- AIRはランタイム必要か?
- AIR開発とWebアプリ開発のコストはどうか?
- Strutsなどと比べるには動きが違いすぎる
- イベントドリブンはクライアントで動作するものの方が楽
- ローカルで動作させるならAIRはいいのでは?
- Google翻訳APIはどのくらいの言語に対応しているのか?
続いて、私のセッション「業務に役立つちょいLINQ」です。
スライドは以下。
また、デモで使ったソリューション(C#、VB両方)は以下。
質疑応答は以下。
- 中身はforeachと言ったが、実際パフォーマンスにはどのくらい影響するのか。
- よっぽど変なことをしなければ、それほど気にしなくていいのでは。
- いざとなったら、自分でキャッシュなどの仕組みを仕込むことも可能。
- パフォーマンスの問題はやはり計測、対処。
- 遅い個所をチューニング。
- LINQを使ったから即重くなるというものでもない。
- 他のコレクションの結合なんかもできるのか。
- Joinで可能。
- 外部結合はGroupJoin。
- ここでライブコーディング。
- GroupJoinのC#でのクエリ式の書き方をどわすれしてVBで書くことに。
- 他にどんなのがあったかは失念しちゃいました。ごめんなさい。
最後に、急遽@fumikohによる「組込みシステム開発技術展の報告」のセッション。
イベントで撮ってきた写真を順に表示して紹介するという形式。
気になったものは以下の通り。
- パンダセキュリティ
- L2ブロッカー
- 不正アクセス防止機器
- ぷらっとホーム社のマイクロサーバー「OpenBlockS」シリーズを使った製品。
- HiGH TECH
- PDX Japan
- DIGITARL-LOGIC
そんなこんなで無事本編は終了し、懇親会へ。
今回は最初4人だけだったので、長岡駅前の居酒屋にて。
- とりあえずビール
- 食べもの注文
- 韓国海苔と水なのサラダ
- おすすめ全部
- 和牛センマイ刺し
- 和牛ユッケ
- レモンソーセージ
- びっくりメンチカツ?
- 色々話が盛り上がる
- 勉強会本編の話
- 会社の話(守秘義務は守ります)
- 子育ての話(@fumikohが子供生まれたて)
- etc…
- 飲み物も2杯目以降に
- 野菜炒め注文
- 店が「ラーメン居酒屋」なので、4人で一杯のラーメン注文
- @fumikoh懇親会に合流
- 一次会お開き
その後、勉強会には来れなかった@yokokick、@junkdjが合流。二次会はドイツビールとソーセージの店。
- まずは改めて乾杯
- @yokokickと@junkdjとは初めてお会いするので名刺を提供
- そしてハイフォー
- 「キュピーン☆の人」って言われるw
- 食い物注文
- 私は早く帰らなきゃならんかったので、一杯飲んだところで早びけ
総括すると、今回も色々な方とお会いして色々と話をしたりと有意義な時間を過ごせました。
セッションは、最後の方のコード紹介になって少しだれてしまったのが反省点。デモももうちょっと見せ方があったかなと。
それでも、従来の手法と比べてLINQは分かりやすく単純に書けるよ、ということを知ってもらえたようで良かったです。
さて、次回は6/6だそうです。私はちょっと参加無理かなぁ。
でも、お近くの方はぜひ次回以降の勉強会へ参観してみてください。楽しいですよ。
今回はプログラム関連が多かったですが、今後は法務関係なんかのセッションも予定されています。開発者でなくてもITに興味のある方はぜひ。
長岡開発者勉強会への参加はこちら↓
参加方法 ?(長岡 開発者 勉強会(NDS))?
また、次回勉強会の案内はこちら↓
第7回勉強会(2009/06/06) ?(長岡 開発者 勉強会(NDS))?
[あわせて読みたい]
第6回レポート! - 新潟系エンジニア
2009年4月29日
#
Windows Update に IE8 が降ってきました。
でも、入れるのはちょっと待とうかな。