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

Xbox Friends

小物類

  • Webスカウター

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

  • あわせて読みたい

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

  • フィードメーター

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

2010年1月18日 (月)

XmlSerializerで配列を要素の直下に展開する

メモ書き

XmlSerializerクラスで,

<Array>
  <Elem></Elem>
  <Elem></Elem>
  <Elem></Elem>
</Array>

のような構造のXMLを作成する場合は,

class Array
{
  [XmlElement(ElementName="Elem")]
  public Elem[] Elements { get; set; }
}

のように,XmlArray属性ではなくXmlElement属性を使う。

2009年11月25日 (水)

twimemo: R流・WPFアプリケーション開発 @ わんくま同盟 東京勉強会 #40

わんくま同盟 東京勉強会 #40中でのセッション,R・田中一郎さんの「R流・WPFアプリケーション開発」で知ったこと。 なぜか元ネタが@nakawankumaさんだったりする不思議。 以下,Twitterでつぶやいたログ。

2009年11月 2日 (月)

VSのセットアッププロジェクトと.NET Frameworkのバージョン

VSのセットアッププロジェクト,最初のバージョン以外に対応させる場合は,マージモジュールを変更するほかに,起動条件でのバージョン変更も必要。

同僚がはまっていたのでメモ代わりに。

2009年10月16日 (金)

System.Net.HttpWebRequestでのPOST

はまったので記録として。

System.Net.HttpWebRequestを使ってPOSTしようとすると,417 Expectation Failed (Studying HTTP様)を返してきた。 Fiddlerで覗くと,確かに

Expect: 100-Continue

というフィールドがある。 自分では書いた覚えがないので,HttpWebRequestが自動で付けていると予想。 探してみると,HttpWebRequest and the Expect: 100-continue Header Problemという記事を発見。 これで解決できた。

var request = (HttpWebRequest)WebRequest.Create(uri);
request.ServicePoint.Expect100Continue = false;
request.Method = "POST";

Phil Haack氏とLance Olson氏に感謝。

2009年10月14日 (水)

re: びっくりした事

びっくりした事 @ えムナウ Blogより

ある計算式とは何でしょう?

式の値がNaNであることは容易にわかったものの,思いついたものはfloat.NaN。 あんまり短くならなかったのですが,えムナウさんのコメントの「4文字」でわかりました。

  • 0 / 0D
  • 0 / 0F

のどちらかですね。これはすぐには思いつかない……。

2009年9月16日 (水)

各種リダイレクトに関するブラウザの挙動の違い

サーバー側のリダイレクト要請には,302 Found,303 See Other,307 Temporary Redirectの3種があります。

302 Foundは元々302 Moved Temporaryで,メソッドを変えてはいけないはずだったのに,UAが守らないから303と307が出来たそうです (ref: [Studying HTTP] HTTP Status Code)。 というわけで,各種ブラウザで挙動を確認してみました。 ベースとなる環境は,Windows Vista 32bitになります。 また,名称はWindowsのタスクバーへの表示を使っています (Safari, Lynx除く)。


Internet Explorer 8.0.6001.18813CO
User-Agent
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30729; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)
結果
302 Found
GET/POSTに対して,どちらもGETでリダイレクトした。
303 See Other
GET/POSTに対して,どちらもGETでリダイレクトした。
307 Temporary Redirect
GETに対してはGETで,POSTに対してはPOSTでリダイレクトした。その間,ユーザーへの問い合わせは存在しなかった。POSTの元のフォーム変数は保持された。
Internet Explorer 8.0.6001.18813CO (互換モード)
User-Agent
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30729; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)
結果
302 Found
GET/POSTに対して,どちらもGETでリダイレクトした。
303 See Other
GET/POSTに対して,どちらもGETでリダイレクトした。
307 Temporary Redirect
GETに対してはGETで,POSTに対してはPOSTでリダイレクトした。その間,ユーザーへの問い合わせは存在しなかった。POSTの元のフォーム変数は保持された。
Mozilla Firefox 3.5.3
User-Agent
Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)
結果
302 Found
GET/POSTに対して,どちらもGETでリダイレクトした。
303 See Other
GET/POSTに対して,どちらもGETでリダイレクトした。
307 Temporary Redirect
GETに対してはGETで,POSTに対してはPOSTでリダイレクトした。POST時のフォーム変数を再送信するかどうか問い合わせがあった。
Google Chrome 3.0.195.21
User-Agent
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.21 Safari/532.0
結果
302 Found
GET/POSTに対して,どちらもGETでリダイレクトした。
303 See Other
GET/POSTに対して,どちらもGETでリダイレクトした。
307 Temporary Redirect
GETに対してはGETで,POSTに対してはPOSTでリダイレクトした。POST時のフォーム変数を再送信するかどうか問い合わせがあった。
Opera Internet Browser 10.00 Build 1750
User-Agent
Opera/9.80 (Windows NT 6.0; U; ja) Presto/2.2.15 Version/10.00
結果
302 Found
GET/POSTに対して,どちらもGETでリダイレクトした。
303 See Other
GET/POSTに対して,どちらもGETでリダイレクトした。
307 Temporary Redirect
GETに対してはGETで,POSTに対しては再送信するかの問い合わせがあり,再送信する場合はPOSTで,しない場合はGETでリダイレクトし,キャンセルした場合は元のページのままであった。
Safari 4.0.3
User-Agent
Mozilla/5.0 (Windows; U; Windows NT 6.0; ja-JP) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9.1
結果
302 Found
GET/POSTに対して,どちらもGETでリダイレクトした。
303 See Other
GET/POSTに対して,どちらもGETでリダイレクトした。
307 Temporary Redirect
GET/POSTに対して,どちらもGETでリダイレクトした。
Lynx 2.8.6 日本語版
User-Agent
Lynx/2.8.6rel.4TH libwww-FM/2.14FM SSL-MM/1.4.1 GNUTLS/1.7.8
結果
302 Found
GET/POSTに対して,どちらもGETでリダイレクトした。
303 See Other
GET/POSTに対して,どちらもGETでリダイレクトした。
307 Temporary Redirect
GET/POSTに対して,どちらもGETでリダイレクトした。

IE8の307の挙動は,localhostでやっているからかもしれません。 それはともかく,Firefox, Chrome, Operaの307に対する挙動はよいでしょう。IEもPOSTで転送するのでまぁ許せます。 ただ,Safariはどうよ,と思いますが……。

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月14日 (木)

別ドメインでのコードの実行

よく忘れるのでメモ。

新しいAppDomainでデリゲートを実行するには,DoCallbackメソッドを使う。引数無し,戻り値の型System.Void。

2009年5月12日 (火)

System.AddIn

System.AddInを使ったアドインに挑戦。 アドインおよび拡張機能に従って作ると,とりあえずのものは簡単にできる感じ。

問題はセットアップかなぁ。 実行時にPipelineSegments.storeとAddIns/AddIns.storeを作る関係で,ユーザーが書き込み権限をもっていないといけないのは,結構面倒かも。

2009年5月 7日 (木)

ExcelのPrintOutメソッド

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

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