悩めるSEの雑記です

日々思いつくがままです

Visual Studioハッカソン(ゆるめ)

今回もはてな記法にしていませんが新鮮なうちに。



★勉強会レポート http://goo.gl/WKsTW

 Visual Studioハッカソン(ゆるめ)に参加してきました。

                                                                                                                              • -

 みなさんは「ハッカソン」って何かご存知でしょうか?
 「Hack」と「Marathon」をあわせて「Hackthon」らしいですが、
 要するに集まってプログラミングするイベントです。
  → http://goo.gl/KFPUK
 
 今回はVisual Studioハッカソンです。
 バージョンや言語はバラけるかなあと思っていましたが、結果的には
 みなVS10 C#になりました(一部Win8+VS11betaの方もいましたが)。
 通常はアイディアソンといって、まずアイディア出しを事前にやるこ
 とが多いようですが、今回はTwitter上でブレストし、ある程度ネタ
 を用意しての開催でした。

  # 参加者は19名と場所を提供してくださった
  # IIJ社の方2名でした。

 最初の自己紹介で自分のやりたいテーマを発表し、賛同する者を集め
 てチームを構成。あとは作って発表するだけ。至ってシンプル。
 17時から発表なので、それまでにアプリを作り上げるか、資料を用
 意する必要がありました。お昼ごはんの時間もあるので、実際にプロ
 グラミングできる時間は結構短いです。

                                                                                                                              • -

 私はVisual Studioのアドインを作ってみたいというkmさんチーム
 に参加。最終的にリーダーのkmさん、kwさん、nfさん、私の4
 名体制。アドイン作成の経験は、kmさんの既存コードのメンテを少
 しやったことがある以外は皆未経験でした。

 その上で12時までの1時間弱でアイディア出し。
 まず技術目標としては、ドッキングウィンドウを表示させてそこで何
 かをすることを設定しました。色々アイディアは有りましたが、最終
 的に「アドインでToDo管理」に決定!
 

                                                                                                                              • -

●機能概要

                                                                                                                              • -

 1.ドッキングビューにタスク一覧を表示
   (作成日、タイトル、内容、優先度、期限)

 2.ソースを選択して右クリックで登録画面表示
   ソースファイル名、行番号、選択行のソーステキストに対して、
   タスクの登録が可能

                                                                                                                              • -

 
 なにせ皆アドインの知識があまりなかったのでまずは情報収集から。
  ・アドインプロジェクトの作り方
  ・コンテキストメニューからの機能実行+フォーム画面表示
  ・ドッキングビューの作成方法
 などについて参考になるサイトが見つかり「できそう」ということに。

 ただVSのエディションによって制限があり、Express版ではプロジェ
 クトテンプレートが用意されていませんでした。なのでUltimate版で
 最初にプロジェクトを作ってもらって共有。そしてをExpressで確認
 すると・・・ビルドはできるが他にも制約が!
  ・デバッグできない
  ・デバッグできない
  ・デバッグできない
 そうなんです。デバッグできないんです。
 アドインはそれ単体では実行できない「DLL」として生成されます。
 デバッグ(実行)のためには外部プログラムが必要になります。
 VSのアドインなので今回の場合は、「Visual StudioIDE」が親とな
 るのですが、その際のファイル名が製品版のファイル名になってしま
 うのです。また製品版であれば、外部プログラムを指定できるのです
 が、Expressではそれも出来ません・・・・orz

 仕方ないので役割分担しました。
  kmリーダー(Ultimate版) ・・・ ドッキングビュー
  kwさん(Professional版) ・・・ コンテキストメニュー
  nfさん(Express版)    ・・・ “素敵な”入力フォーム
  私(Express版)       ・・・ タスク情報管理部
 

                                                                                                                              • -

●補足

                                                                                                                              • -

 説明を忘れていました。コードはGoogle Code上にSubversionリポジ
 トリをこさえて作業しました。
 また調べた情報を共有する場が欲しかったので、Twitterのハッシュ
 タグを自分たち用に決めて、そこに流しながらの作業としました。
 この際にはTweetChatというハッシュタグを絞って閲覧および投稿で
 きるサービスを利用しました。これによって結果的に自分たちだけで
 チャットしている状態が作れます。

                                                                                                                              • -

 アドインの仕組みですが、VSの操作に応じたイベントメソッドが定義
 されています。起動時には「接続」が呼び出され、アドインからアプ
 リケーションオブジェクトが利用できるようになります。このオブ
 ジェクトからはドキュメントの情報が参照できます。VSとのやり取り
 を除けば、そこで表示するフォームなどは通常のフォームと何ら変わ
 らないため、その部分は独立して開発することができます。

                                                                                                                              • -

 
 kmさん、kwさんのアドイン側と、nfさん、私のタスク側に別れ、
 作業の進め方とI/Fを確認しながらの作業。
 私は担当部はあまり.NETに依存しない、データ管理機能でしたがそれ
 でも.NET初心者の私は基本的なところで結構躓いちゃいました。

 タスク情報はXMLファイルに保存することにしました。実装方法と
 して「LINQ to XML」が便利という話もありましたが、kwさんより
 「XMLシリアライズが簡単だよ」とのアドバイスを頂き、その方法で
 実装しました。

 ここで少し引っかかりました。タスク管理クラスの中ではジェネリッ
 ク辞書を使ってタスク情報を管理していたのですが、XMLリアラ
 ザは辞書をサポートしていません。仕方ないのでジェネリックのリス
 トに変換しました。

  # それにしても便利ですね、何もき気にしなくても
  # XML保存および復元が実装できるんですから。

 各担当がそれとなく出来てきたので取り敢えず結合することに。
 kmさん環境で試しましたが、外部クラス参照時にファイルが見つか
 らないという例外が発生し、思ったように進まない。原因はDLLの出
 力フォルダでした。プロジェクトをアドインと入力フォームに分けた
 ため、DLLを参照する側と生成する側でパスがずれていたのです。多
 分設定やビルド後処理でコピーしたり、まがGACで登録することで対
 応できると思うのですが、時間がなかったので手動コピーで対応!


 結果的に17時ぴったしで完成!ホントびっくり「やったらでき
 るっ!」です!!

 kwさんが少しあいた時間で発表資料を用意して下さり、いよいよ各
 チームの作品発表に。

                                                                                                                              • -

1番目は「ボスが来たっ」
            by ボスカムチーム
 
 これは「られると困るものを見ていて「ボスが来たっ」時に、一瞬で
 画面を「仕事してるで」なものにきりかえるアプリです。熱のこもっ
 たコント仕立て(笑)の実演が楽しかった!

                                                                                                                              • -

2番目は我々の「アドインでToDo管理」 
            by アドイン初心者の会チーム

 多分今回の一番「真面目」なテーマだったと思います。
 特に笑いもなく終わりました。

                                                                                                                              • -

3番目は「コニコニ動画」
            by コニコニ動画チーム

 「フェードアウト Red」のようにテキストでエフェクトを記述す
 ることで動作をコントロールできるスクリーンセイバー。
 今回は時間がなかったので、フェードアウトおよび色指定のみでした。
 ゴールとしては、画像ファイルの指定や各種エフェクトの指定だそう
 です。
 
 また動作を指定するエディタも作成されました。「ここが一番頑張っ
 た」とアピールされていましたが、作成したファイルを読み込み直す
 と・・・・

    ????Red ・・・ 文字化け(笑)

                                                                                                                              • -

4番目は「シンプルなTwitterクライアント」
            by T3チーム

 認証はブラウザと連携して行い、その後はウィンドウから入力した
 テキストがTwitter上に投稿されるというものです。
 このTwitterクライアント、普通と少し違っていました。
 それは「Tweet」しかできないというところ。

 そう、TLはもちろん、人からの返信を一切みれない一方通行(笑)
 さらになんと隠し機能が!Twitterのホームページにジャンプできる
 んですっ(笑)

  # プレゼンがめちゃ面白かった

                                                                                                                              • -

5番目は「Ping with Metro Style Application」
            by ???チーム(IIJさんとSさん)

 内容はそのままWindows8のMetroでPingというもの。

  # しかし何でPingをわざわざMetroで?(笑)

 でも・・・「Metro StyleではRow Socketをサポートしていない」と
 いうことが判明!そこでHTTPによる監視に変更されたのですが時間が
 足らず完成せず。
 なんせ3名のうち2名は環境がなく、Windows8とVS11betaのダウン
 ロード&インストールするところから(笑)

                                                                                                                              • -

これで発表は終わり、次は最も良かった作品への投票です。

                                                                                                                              • -

接戦の結果、優勝チームは・・・・


 アドイン初心者の会「アドインでToDo管理」!!!!


やりましたっ!優勝しました!!!
主催者殿から表彰状を授与いただきました!!

                                                                                                                              • -

初めてのハッカソン参加でしたが、本当に楽しかったです。
「仕事では出せないパフォーマンス」なんて言っていましたが、短時
間・集中ならでは何でしょうね。
 
  やったらできるっ

正直ちょっと自分でもビックリしました。やり方がわからないところか
ら始めたのにちゃんと完成したんですから。凄い達成感と疲労感。

 # XPとかってこんな感じなのかな?


すこし残念だったのは、他チームと技術的な話ができなかったこと。
きっと色々苦労したこと・その回避策・工夫したところなどが有ったは
ず。まだ出来ていませんが、みなさんの作ったソースをリーディングし
てみようと思います。いい勉強になるはずです。

                                                                                                                              • -

こんな機会を提供して下さった主催者様、スタッフの皆様、IIJ社様、
そして参加者の皆様、ありがとうございました。

                                                                                                                              • -

●番外

 勉強会にはつきものの懇親会。
 今回は主催者様の意向で「焼肉食べ放題懇親会」!
 大いに食べて飲んで話して盛り上がりました。
 

                                                                                                                              • -

おしまい

                                                                                                                              • -


★参考にさせていただいたサイトです。
http://www.kanazawa-net.ne.jp/~pmansato/vs/vs_addin.htm#wizard
http://www.atmarkit.co.jp/fdotnet/special/vsaddinintro01/vsaddinintro01_01.html
http://www.digi-con.co.jp/tech/node/18
http://msdn.microsoft.com/ja-jp/library/dwtd01y4(v=vs.100).aspx?ppud=4
http://d.hatena.ne.jp/tekk/20091030/1256920774