hIDDEN bLOG » .NET

2011/9/20 火曜日

Mashup Weekend in Fukuiに参加してきた

このエントリをはてなブックマークに追加
Filed under: .NET,IT系 — @ 15:19:54

Mashup Awards 7のキャラバンイベント、Mashup Weekend in Fukuiに参加してきた!

前日からのエクストリーム進行の都合上、セミナーセッションを断念してミートアップ・アイデアソンからの合流になってしまったが、そこから全力疾走!

初日~ミートアップ・アイデアソン~

翌日のハッカソンをいっしょに進めるチームが運営さん主導で無作為にえらばれたのだが、蓋をあけてみるとなんと馴染みの@omyu氏と@shoito氏。これは勝てる布陣だ。ショイトォ!

さてまずはアイデアソンの結果、Kinectを使って、◯×クイズをジェスチャーで答えるゲームを作ってみることに決まり、そのまま翌日に突入。
MA7的には、クイズ研のAPIKinect SDKをマッシュアップするということで開発の方向が決まった。

これまで参加してきたハッカソンだと、アイデアソンから当日まで1週間のインターバルがあったのだが、今回は翌日すぐにというはじめての体験。 前日のエクストリー(ry の都合上、初日終了後すぐ気絶してしまったのだが、そのあいだにショイトォ!が完璧な下調べをすすめてくれていた。
マジリスペクト。

二日目~ハッカソン~

明けてハッカソン当日。
滑り出しはKinectアプリ開発環境の構築からなのだが、これがなかなか一筋縄にはいかなかった。主に自分のポカで(^ω^;)
およそ午前中いっぱいを使って、どうにかKinect SDK付属のサンプルコードが動くところまでを完了。

~めしめし~

そして昼食を挟んで、◯と×のポーズ認識を実装するところにとりかかった。
Kinectは頭や肩・肘・手首・手など 20点の骨格ジョイントの位置が取得できるので、今回は上半身のジョイントを活用してモーション認識を実現した。
ちなみにSDKの利用方法などに関しては、@ITこの記事を全面的に参考にさせていただいており。@k1ha410さんありがとうございます!!
あそこよりこっちが上で左~のような条件をいくつか組み合わせ、簡単な判定ではあるものの、それなりの精度で認識を実装できたところで、次はUIの体裁を整えるステップだ。

デザイナーの確保に失敗した我々はUI面で大きなハンディを抱えていたのだが、ここでもショイトォ!が大活躍してくれた。
こちらの要望を的確にキャッチアップし、クールな画像素材を次々提供してくれたのだ。
さらに雰囲気を大いに盛り上げる音素材まで揃えてもらえたので、アプリ全体のクオリティがぐっと向上した。

完成したアプリのイメージがこんな感じ。
※顔は後でレタッチしてますw

よしこれで勝つる!?と思っていたら、ここで終わりじゃないよMA7で待ってるよという意味で今回投票はなし。
よかろう1M円獲得してやろうじゃないかMA7で会おうということでめでたく全スケジュールが完了
みなさんほんとお疲れ様でした!

さて反省

ハッタリのトッピングも含めてそれなりのクオリティで完成にこぎつけられたのは、先生とてもよかったと思います。
ハッカソン慣れしてきた賜だと思いますが、でもそこに慣れすぎて、1日で実現できる程度のアイデアに小さくまとまってしまう傾向が否定できません。クソでかい風呂敷をひろげて血反吐をはいてハックするのも 、先生いいんじゃないかと思います。
あとXbox持ってなくてすいません。
以上!

大事なことは最後にもっかい

わざわざ遠方から来ていただいたゲストのみなさん、運営のみなさん、当日お会いできたみなさん、お疲れ様でした。ありがとうございましたー!!

ONE MORE THING

このアプリで本戦エントリーいたしますことをここで公言しておきますー。
つぎはMashup Battleで会いましょうー!

2011/9/12 月曜日

DevQuiz2011ソース晒し祭り

このエントリをはてなブックマークに追加
Filed under: .NET — @ 13:59:17

今年もGoogle Developer Day参加のためのハンター試験が無事終了。
ある程度で見切りつけちゃったんで参加できる自信がすげく薄いんですが…
スライドパズルの探索部分だけ、ソース晒してみますよー。

using System;
using System.Collections.Generic;
 
namespace SlidePuzzle
{
    class StageBreaker
    {
        // ctors
 
        public StageBreaker( Stage stage )
        {
            this.stage = stage;
            this.startTime = Environment.TickCount;
         }
 
        // Public Methods
 
        public string Break()
        {
            GC.Collect( GC.MaxGeneration );
 
            List<Stage> nextStages = new List<Stage>();
 
            string[] movables = stage.GetMovables();
            foreach ( string movable in movables )
            {
                Stage nextStage = stage.MakeClone();
                nextStage.Move( movable );
 
                this.snapShots[ nextStage.Data ] = true;
 
                if ( nextStage.Check() )
                {
                    return stage.MovedOperations;
                }
 
                nextStages.Add( nextStage );
            }
 
            return this.BreakRecursive( nextStages.ToArray(), 1 );
        }
 
        // Private Methods
 
        private string BreakRecursive( Stage[] stages, int step )
        {
            if ( Environment.TickCount - this.startTime > 30 * 60 * 1000 || stages.Length > 800000 )
            {
                return null;
            }
 
            List<Stage> nextStages = new List<Stage>();
            foreach ( Stage stage in stages )
            {
                string[] movables = stage.GetMovables();
                foreach ( string movable in movables )
                {
                    if ( movable != stage.GetRevert() )
                    {
                        Stage nextStage = stage.MakeClone();
                        nextStage.Move( movable );
 
                        if ( !this.snapShots.ContainsKey( nextStage.Data ) )
                        {
                            this.snapShots[ nextStage.Data ] = true;
 
                            if ( nextStage.Check() )
                            {
                                return nextStage.MovedOperations;
                            }
 
                            nextStages.Add( nextStage );
                        }
                    }
                }
            }
 
            string result = this.BreakRecursive( nextStages.ToArray(), step + 1 );
            nextStages = null;
            GC.Collect( GC.MaxGeneration );
 
            return result;
        }
 
        //=========================================================================================
        // Fields
 
        private readonly Stage stage;
        private readonly Dictionary<string, bool> snapShots = new Dictionary<string, bool>();
 
        private readonly int startTime;
    }
}

2011/6/1 水曜日

MonoTouchからWCFを利用する

このエントリをはてなブックマークに追加
Filed under: .NET,iPhoneアプリ,IT系,MonoTouch — @ 17:09:58

MonoTouchからWCF(Windows Communication Foundation)を利用するための方法を、これが結構苦労したのでまとめておく。

WCFを使えばサーバの機能呼び出しを抽象化して扱えるので、開発効率を大きく向上できる。
またせっかくC#を使っているのだから、サーバサイドも.NETテクノロジにしておけば、ソース共用もしやすくなってなお効率よし。

今回はWindows Azure上のWCF Webロールで動作させてみたが、通常のWCFでも同様に動くはずだ。

おおかたの手順は、MonoTouch公式の資料が参考になる。 (続きを読む…)

2010/9/9 木曜日

iPhoneアプリ開発勉強会 2010/9/3 in 福井高専

このエントリをはてなブックマークに追加
Filed under: .NET,iPhoneアプリ — @ 13:52:52

2010年9月3日、母校である福井高専の一室をお借りしてiPhoneアプリ開発勉強会が開催され、そこでMonoTouchのセッションを担当してきました。

主催者の@monobyteさん、ありがとうございました。

セッション内容

嗚呼、素晴らしき哉 MonoTouch<p><em>There is embedded content here that you cannot see. Please <a href="http://hidden.vis.ne.jp/blog/?p=569">open the post in a web browser</a> to see this.</em></p>
View more presentations from hIDDENxv.

発表したのはMonoTouchの紹介と簡単なデモ。それとC#ならではのおすすめポイントを数点。

参加者の中には割とVisualStudioやC#経験者がいらっしゃったので、C#の開発効率の良さがiPhoneでも発揮できる実感を得ていただけていれば嬉しいなと。

デモ

XcodeとMonoTouchで、ボタンを押した回数をカウントする簡単なアプリのデモを作成しました。
途中Interface Builderの操作で、画面解像度が低いがために見づらくなってしまったのが申し訳なかったです。

ポイントは、やはりInterfaceBuilderをつかった開発リズムがXcodeと比べて格段にいいこと。
ヘッダファイルなんて書きたくありません。

当日作ったデモアプリは、以下からダウンロードできます。
Xcode版のソース ダウンロード
MonoTouch版のソース ダウンロード

またMonoTouchのチュートリアルはこちらの記事でも紹介しているので、参考までにどうぞ。
手前味噌を重ねると、MonoTouchカテゴリの記事もよろしくです。

おまけ

最後におまけで紹介したAR関連、参考リンクをどうぞ。

ARToolKit

「攻殻機動隊」「電脳コイル」の世界を実現! – 工学ナビ
http://kougaku-navi.net/ARToolKit.html

ARToolKit
http://www.hitl.washington.edu/artoolkit//ARToolKit.html

Haar検出@OpenCV

OpenCVで学ぶ画像認識 – gihyo.jp
http://gihyo.jp/dev/feature/01/opencv/

OpenCV.jp
http://opencv.jp/

Fern特徴点検出検出@OpenCV

Fern-ベースの点分類器,平面物体検出器 – 毛の生えたようなもの
http://d.hatena.ne.jp/gomi-box/20100523/1274614584/

【AR】はちゅねにネギでたたいてもらった【MMD】‐ニコニコ動画
http://www.nicovideo.jp/watch/sm11781115/

PTAM:マーカーレスAR

あのマーカレスARの研究がついにソース公開!
http://kougaku.blog28.fc2.com/blog-entry-317.html

マーカーレスAR技術「PTAM」をDVカメラで動作させてみる
http://turi2.net/cont/program/ptam.html

PTAMソース
http://www.robots.ox.ac.uk/~gk/PTAM/

2010/4/14 水曜日

MonoTouchでビューのアニメーション

このエントリをはてなブックマークに追加
Filed under: .NET,iPhoneアプリ,MonoTouch — @ 16:42:41

今回はUIViewのアニメーション機能を使ってみる。

前回のプロジェクトに、UIImageViewへのアウトレット接続と、アニメーションのトリガーを与えるためのボタン配置・アクションの記述までを行う。
アウトレット名をimageView、アクション名をAnimationTouchedとしておく。
mt04-01.png

mt04-02.png
mt04-03.png

続いてアニメーションのコードを記述。
AnimationTouchedメソッドを実装するのだが、ここはMonoDevelopのコード補完機能を使うのが吉。冒頭の「partial(スペース)」までをタイプした時点で候補がドロップダウン表示されるので、適切に選んでEnter。
mt04-04.png

1
2
3
4
5
6
7
8
9
10
11
using System.Drawing;       
 
partial void AnimationTouched( UIButton button ) 
{ 
    UIView.BeginAnimations( "" ); 
    UIView.SetAnimationDuration( 1 );               
 
    this.imageView.Frame = new RectangleF( 100, 400, 50, 30 );               
 
    UIView.CommitAnimations(); 
}

上記のコードをタイプして実行。
(RectangleFの名前空間が見えていない可能性があるので、その場合はソース冒頭にusingの追加を。)
ボタンをタップすると、画像がずわっと下のほうへ縮むはず。
mt04-05.png

UIView.BeginAnimations()からUIView.CommitAnimations()までに記述した内容を、アニメーションする。
内部で記述しているのはたった2項目。
UIView.SetAnimationDuration()でアニメーションを行う時間、この場合は1秒間に指定する。
動かしたい対象はimageView。それのFrame属性をコードの通り設定している。
これにより、imageViewは現在位置から指定された位置まで、1秒間かけてスムーズにアニメーションしてくれる。

非常に簡単にアニメーションできてしまった。

Pages: 1 2 3 4 5 6 Next

HTML convert time: 1.131 sec. Powered by WordPress