PGP 公開鍵とメールアドレス

Xbox Friends

小物類

  • Webスカウター

    スカウター : YuO's weblog @ JUSTBLOG

  • あわせて読みたい

    あわせて読みたいブログパーツ

  • フィードメーター

    フィードメーター - YuO's weblog @ JUSTBLOG

Windows

2009年9月 2日 (水)

επιστημηさんの「こんなのもあっていいかなーと」に触発されてみた

元記事:こんなのもあっていいかなーと

個人的には,initialに対しての拡張メソッドにしたいかな,というわけで作ってみました。

using System;
using System.Collections.Generic;

namespace Yuo.Extensions
{
    public static class SystemExtensions
    {
        // 初項:initial 公差:stride の等差数列
        public static IEnumerable<int> MySequence (this int initial, int stride)
        {
            for (; ; )
            {
                yield return initial;
                initial += stride;
            }
        }
        // initialから1刻み
        public static IEnumerable<int> MySequence (this int initial)
        {
            return initial.MySequence(1);
        }
    }
}

項数はTake 拡張メソッドに丸投げしたので,引数が減っています。 また0からcount - 1までは,Enumerable.Range メソッドでできるので作っていません。


比較用。

using System;
using System.Collections.Generic;
using System.Linq;
using Wankuma.Extensions;
using Yuo.Extensions;

public class Program
{
    public static void Main ()
    {
        // 初項2, 公差3 で 5つ。
        var seq = 5.Sequence(2, 3);
        var seq2 = 2.MySequence(3).Take(5);
        Console.WriteLine(seq.SequenceEqual(seq2)); // 比較

        // 要素数10コ、ぜんぶ-1で埋める
        var array = new List(10.Sequence(-1, 0));
        var array2 = new List((-1).MySequence(0).Take(10));
        Console.WriteLine(array.SequenceEqual(array2)); // 比較
    }
}

結果

True
True

2009年5月 7日 (木)

ExcelのPrintOutメソッド

ExcelのWorksheetオブジェクトやWorkbookオブジェクトにあるPrintOutメソッドですが,Excel内部の印刷処理が終了するよりメソッドから戻るのが先のようです。 内部の印刷処理が終了するより前にClsoeメソッドなどを呼び出してWorkbookを閉じたりすると,印刷処理がキャンセルされるという……。

で,同期用のイベントとかメソッドとかプロパティとかは……ない……。BeforePrintイベントじゃなくてAfterPrintイベントがほしいんだけどなぁ……。

2009年4月 3日 (金)

WPFのデータバインドとマルチスレッド

WPFのプロパティにバインドしているプロパティを,別スレッドから弄ってみた。PropertyChangedイベントは別スレッド側で実行。結果は,

  • 通常のバインド:プロパティの取得は,UIスレッドで行われた
  • ICommand.CanExecuteChanged:イベントの実行は,別スレッド側で行われるために例外発生

でした。 なので,CanExecuteChangedイベントの呼び出し時のみ,Dispatcher経由が必要なようです。 System.Windows.Application.Current.Dispatcuer経由,ということになりそうです。


ちなみに,Windows Formsでは別スレッド側でプロパティ取得が行われます。 よって,PropertyChangedイベントをUIスレッドで実行する必要があります。

2009年3月29日 (日)

テキストボックスとInt32型のバインディング

M-V-VM関係の話をよく聞くのでテスト。

TextBoxふたつはっつけて,ボタンを押すと割り算の結果をTextBlockに表示するだけの簡単なプログラム。

あれ?intを直接バインドすると,"a"とかの時に,確認するすべがない……というのは困るのでさがしていると,八巻さん@グレープシティデブサミ資料を発見。 変換は,ViewModelでやるのか。なるほど。

やってると,Windows Formsアプリケーションとも共通化したくなりますが,ICommandインターフェースがWPFのものだし,いろいろ対応していないので断念。 ここらへんだけは,WinFormsでは手で書かないといけなさそうです。 でも,WinFormsでも,M-V-VMっぽいことはできそう。

2008年11月 4日 (火)

XNA GS 3.0

XNA Game Studio 3.0が出たということで,インストールしてみました。

で,.NET Framewok 3.5ベースなので,LINQが使えるはず。試してみました……LINQ to Object,XBox 360実機でもOKでした。どこで使うんだ……。

XNAなのにSQL Server Compact実装して,LINQ to SQLが使えたら……笑うしかないですけどね。

2008年9月 8日 (月)

Connectにあげた

%入りのフォントはWPFで使えないの内容ですが,WPFとExpressionの両方にフィードバックしました。 あまりこれに引っかかる方はいないでしょうけれど,引っかかっている方 (一太郎をお使いの方など) は,是非ともVoteをお願いします。

2008年9月 2日 (火)

%入りのフォントはWPFで使えない

一太郎などに付いてくるフォントに,"%Century Oldstyle"というものがあります。 これを,WPFでFontFamilyに指定すると,System.UriがUriFormatExceptionを起こします。

%をUri用にエスケープして,"%25Century Oldstyle"としてやると,何事もなかったように通ります。 例外スタックを見る限り,Uri使ってキャッシュしているようです。


それはそうと,Expression Blendのフォントの指定,上記の理由から全て落ちます。 原因は,ほぼ%Century Oldstyleで確定なのですが……。

2008年8月13日 (水)

UriのQueryのパース

ExtremeSwankとOpenIDとHttpListenerRequest書いた時は見つけていなかったので,Uriのクエリ部分のパースを自力で書いたのですが,実は,HttpUtility.ParseQueryStringという便利なメソッドがありました。 これを使えば,件のコードよりもまともな解析ができるはずです。

2008年5月27日 (火)

re: リンクいろいろ

元ネタ:リンクいろいろ


Windows限定かつ曖昧な知識で。

ハードリンク
  • ファイルの実体に複数の名前を付ける為の方法。片方のファイルを開いて修正すると,もう一方も変更される。ディレクトリには作れない
  • Windows NT 4.0時代はBackupWrite APIを使って頑張って書いていたが,Windows 2000でCreateHradLink APIが追加され,気軽に作れるようになった
  • Windows XP以降ではfsutilでコマンドプロンプトから作成可能。Vistaではmklinkコマンドでさらに簡単になった
リパースポイント (再解析ポイント)
パスの解析の途中に別の処理を割り込ませる方法。シンボリックリンク~マウントポイントの実装に使われている。
シンボリックリンク/ジャンクション/マウントポイント
  • 他のファイルやディレクトリ,ボリューム名を内部 (BACKUP_REPARSE_DATA) に持っていて,それぞれへのアクセスを置き換える物。 早い話が,ファイルシステムネイティブなショートカットファイル/ディレクトリ。
  • 違いは,
    ジャンクション/マウントポイント
    • 実は一緒の物。絶対パスで保持していて,Windows 2000以降で利用可能
    • 作成するにはDeviceIoControl APIを使う
    • Windows Vistaのmklinkまで,コマンドプロンプトから作成する方法はなかった
    • 対象は,同一PCのみ
    • ネットワーク越しでジャンクションにアクセスした場合,サーバー側で再解析が起こる
    • ファイルへのジャンクションは,不可能ではない物の,BackupWrite API使うとか,パッチ当てるとか,裏技でしかできない
    シンボリックリンク
    • 絶対パスまたは相対パスで保持していて,Windows Vistaで利用可能
    • 作成するにはCreateSymbolicLink APIを使う
    • mklinkを使って,コマンドプロンプトから作成可能
    • 対象は,同一PCの他,ネットワーク越しのファイルへのリンクも可能
    • ネットワーク越しでシンボリックリンクにアクセスした場合,クライアント側で再解析が起こるので,本来のリンク先にネットワーク越しではアクセスすることができない
    • 管理者権限が必要
subst
リパースポイントと違い,ドライブにディレクトリを割り当てる方法。

こんなんでよいっすかね?>シャノンさん