ホーム

ka.taoka.info

マルチプラットフォームで.NET

最近Monoをいじっています。
http://www.mono-project.com/Main_Page
Visual Studioは高いのでMonoDevelopを使って、なんとなく書けるようになってきました。
Gtk#のGUIがまだよくわからない状況。

画像処理関係の処理をOpenCVSharpから使ってみて遊んでました。
USBカメラからの取得とか顔認識とか、一通り遊んでみました。

.NETで画像を扱う時って、画像フォーマットに悩む。特に動画として扱うとき。
GDI+だとBitmapDataいちいち作るのめんどいし、リソース食う割に遅い気がする。
Cで直にポインタ使えば処理は速いけど、できればManaged使いたいし、ManagedとUnmanageとのやりとりがややこしいから嫌。
Managedな配列を使うと一番バランスいいかな。。
でもOpenCVとかはIplImage.ImageDataでポインタ返してくるから、いちいちMarshal.Copyしなきゃいけなくなっちゃう気がする。
WPFはGDI+より使いやすくて速いみたいだけど、勉強するのめんどくさい。
うーん

近況

最近は残業が多いです。
と言っても、好きに帰れることがほとんどだけど。
仕事はそれなりに楽しくやってるけど、ぺーぺーに似付かわしくない仕事が回ってきてたりして、マネジメント大丈夫かなぁとは思う。

そんなことより趣味無し生活が続いていることが心配です。もっと昔の繋がりに縋ろうと思います。
なのに最近メールのやりとりが続かないのは、糞携帯のせいです。
emobileのemonsterです。
http://emobile.jp/products/ht/s11ht/
WindowsMobileの古いやつはそのままだと使えないし、使い倒そうとすると不安定です。今日もソフトリセットの日々です。ちなみにソフトリセットは数分要します。オススメしません。買わないでください。

今月はやっとモバイル通信生活を諦めてネットを引きました。
ここの存在を思い出した記念に書いておきました。

実家で花見

昨日今日と実家を満喫した。
昨日は両親とちゃんとした昼ご飯食べに行って、今日は大学周りで花見兼散歩。
近くの桜がきれいな公園でおにぎり食べた後に、長年在籍して探検し倒した大学内の隠れ散歩スポットを案内した。今後両親が大学に現れるかもしれないw

職場の花見は運よく有給申請しといた日だったから行けなかったし、今年はこれが最初の花見。久しぶりに大学ののんびりした空気を満喫できて良かった。

行き付けのカフェに寄れなかったのが残念。また行こう。

グラフ描画

学生時代は特に、.NET Framework上で作ってるソフトでちょっとしたグラフを表示したい事がたまにあった。Office Web Componentsとかを使ったり、他のグラフ描画ソフトやExcelで楽なようなCSVを吐いて誤魔化したりしていたけど、どうも巧い方法が無かった。
最近はもう自分である程度のものは作って持っとこうかと思い始めていたけど、久しぶりに調べてみると、なんかMicrosoftがコントロール作ってた!

チャート・コントロールを使うには? − @IT

まだドキュメント少ないけど、プロパティ名見ればいろいろわかるし、OWCでできていた事はたいていできそう。機能を端折って描画を速くした散布図(FastPoints)とかあるっぽい。

3軸の3D散布図とか、ベクトルが描けるといいんだけどなー。まだいじってないからわからん。
あとWPFで同じような機能欲しいな。。探せば有るかな。。なさそうだな。。
この辺必要な人種はMicrosoftのFrameworkなんか使わないんだろうね、きっと。

日本の代表

今日はなんとなくカーリングを見たりしてた。
カーリングは駆け引きが面白いですね。あんまりルール知らないけど面白かった。
今日の試合は特に凄かったらしく、解説者が大変なことになってた。

前回の五輪でもチーム青森が頑張っていたなぁとか考えてたら、前回の五輪で本橋選手が変顔していたのを思い出した。
そういえば今回は国母が問題だと騒ぎ立てられてたけど、変顔には世論は寛容だったなぁ。
もし、マリリンがだらしない服装で空港に降り立ち、国母が変顔してても、責められる人は変わらないのではないかと思う。

ちなみに僕は腰パンでも変顔しててもオリンピックで楽しくやってたら良いと思う。どっちかといえば、ステッカー貼ってなくて出場できないのとかはスタッフが責められてしょうがないかも。その辺のケアが仕事なんだろうし。。
でも、基本的には暖房の効いたお茶の間で感動できる身分の人たちは、選手にあんまり妙な責任をかけるべきじゃないと思う。

たまにはだらだらオリンピック見るのもいいねって話。

関係ないけど、Googleが買収したFeed BurnerってサービスでFeedをいろいろいじれるらしいね。
あとで試してみよう。

複数のRSSを統合

ずーっと前に、いろんなサイトのRSSをマージして1つのRSSにして配信するサービスを探して、うまく見つけられなかった覚えがあるんだけど、Google Readerで出来ることに気付いた。
Twitterも、はてブトップ記事も、友人の日記もまとめてモバイルのRSSリーダで読めたりして便利。
Google Readerはフィードの無いページのRSSを自動生成する機能も付きそうだし、これは使えるかも。

フィード統合したRSSの見かた

  1. Google Readerでフォルダを作成し、フィードをぶち込む
  2. フォルダをクリック
  3. 画面右上らへんにある”詳細を表示”をクリック
  4. RSSのURLが表示されます。

Stopwatchって普通ラップタイム計測できるよね

でも、.NET FrameworkのSystem.Diagnostics.Stopwatchはちょっと不便。

  • ラップタイムが計測できない。
  • ElapsedMillisecondsプロパティがlong型で、精度が悪い。
  • 精度よく計測するために毎回ElapsedTicksとStopwatch.Frequencyを使ってごにょごにょしないといけない。

というわけで、最初にNewしてStartして、プログラム上のいろんな位置でLapTimeを測って、後で全部をミリ秒単位のdouble配列で取り出すサンプル。
実行速度検証にどうぞ。

public class k2kLapStopwatch : Stopwatch
{
    private long[] LapTicks;
    private int LapCounter;
 
    public k2kLapStopwatch(int MaxLapCount)
    {
        LapTicks = new long[MaxLapCount];
        LapCounter = 0;
    }
 
    public void StoreLap()
    {
        LapTicks[LapCounter] = base.ElapsedTicks;
        LapCounter++;
    }
 
    public double[] GetLapElapsedMilliseconds()
    {
        int i;
        double[] ret = new double[LapCounter];
 
        ret[0] = TicksToMilliseconds(LapTicks[0]);
        for (i = 1; i < LapCounter; i++)
        {
            ret[i] = TicksToMilliseconds(LapTicks[i] - LapTicks[i - 1]);
        }
        return ret;
    }
    private double TicksToMilliseconds(long Ticks)
    {
        return (double)Ticks / Stopwatch.Frequency * 1000.0;
    }
}

目的上速さが重要なので、System.Collections.Generic.Listとかは使わないし、オーバーフローしても無視ってことで。
早速↑が正しいか検証するために、List、容量指定のList、ふつうの配列の速度測ってみると、やっぱり配列が容量未指定のListの2倍ぐらい速い。

細かいことだとLapTicksはpublicでもいいかも。あとStartNewをオーバーライドしたりして使おうかな。。

private void button1_Click(object sender, EventArgs e)
{
    const int n = 1000000;
    int i;
 
    k2kLapStopwatch sw = new k2kLapStopwatch(5);
 
    List<long> list1 = new List<long>();
    List<long> list2 = new List<long>(n);
    long[] array1 = new long[n];
 
    sw.Start();
    for (i = 0; i < n; i++) list1.Add(i);
    sw.StoreLap();
    for (i = 0; i < n; i++) list2.Add(i);
    sw.StoreLap();
    for (i = 0; i < n; i++) array1[i] = i;
    sw.StoreLap();
    for (i = 0; i < n; i++) ;
    sw.StoreLap();
 
    sw.Stop();
 
    double[] ret = sw.GetLapElapsedMilliseconds();
    Console.WriteLine(string.Join(",", Array.ConvertAll<double, string>(ret, d => d.ToString())));
}

冬休み

年末は忘年会続き。
会社の忘年会はただの苦行だが、昔からの友達と飲むのは楽しい。いやべつに飲む必要はない。ゆっくり話すのがいい。
自分はいつまでたっても自分の酒は自分で注ぎたいと思う。あと、なるべく残って捨てる飯を食おう。無理だろうけど。
アパートで適度なご馳走で年越しして、正月は実家に帰った。
実家では相変わらず過保護気味なおばあちゃんと両親、そして多すぎるご馳走。
会社の飲みほどではないが、多すぎた。食いすぎた。
でも実家ののんびり感はやっぱたまらんね。
その後はスケート行ったりして今帰り中。
デスクワークをする暇がなかったのが心残り。

作りたいソフト

最近コード書いてません。
微妙に欲しいものはあるんだけど。

  • 複数画像のバッチ処理 : 複数画像に同じような画像処理をすることが多い。
  • 画像Viewer : PicasaのViewerが惜しい。殆ど文句無いから作んないかもな。
  • WindowsMobile用家計簿 : PCと同期。大きなテンキーインターフェースが欲しい。
  • 回転LEDディスプレイ : なんとなく。

新年のご挨拶

あけましておめでとうございます。
昨年は長い学生生活を終えたり、就職したり、友人が亡くなったり、同棲生活を始めたり、本当に色々ありました。
自分の人生の中で、内面的にも外面的にも大きな変化があった年でした。

今年も色々あると思いますが、元気にやっていきたいと思います。

1 2 3 4 5

ホーム

カレンダー
« 2018 年 10月 »
S M T W T F S
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
最近の反応
メタ情報

ページの上部に戻る