はてなブログに引っ越します

http://tech.tanaka733.net/ に引っ越すことにしました。理由は「はてなブログに引っ越します」 にて。

こちら側は当面のこしつつ、一部の主要な記事をはてなブログに移行しつつ、元のURLからは301リダイレクトをすつ予定です。

NLog.Targets.AmazonSNS 0.0.9 をリリースしました

NLog.Targets.AmazonSNS 0.0.9 をリリースしました。引き続き Nugetからどうぞ。

0.0.6からアップデートのお知らせをしていませんでしたが、そこからの追加機能として、SNSのペイロードが最大256KBに増加したことへの対応があります。参考リンク: 【AWS発表】 Amazon SQSとSNSのペイロードを最大256KBに拡張。生のメッセージも利用可能に
以前の最大サイズが64KBでそれを超えるメッセージははみ出た部分を削除していましたが、これにより最大256KBまでメッセージを送れます。ただ、その分4リクエスト分の料金がかかるということで既定では64KBを上限にしています。
maxMessageSize 属性をKB単位で指定することで最大256KBまでのメッセージを送れるようになります。(1~63を指定しても64KB、256以上もしくは0以下の値を指定した場合は256KB)

また、BufferingTargetでWrapしてもバッファリングされなかったため、そこも修正しました。以下のようにBufferingTarget で囲うとBufferingTargetで指定した件数だけログがため込まれ、まとめて1つのSNS通知として送信されます。

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <extensions>
    <add assembly="NLog.Targets.AmazonSNS" />
  </extensions>
  <targets>
    <target xsi:type="BufferingWrapper" flushTimeout="60000" name="sns">
      <target name="sns-inner" xsi:type="SNSTarget"
              maxMessageSize="256"
              awsAccessKey="toarukey"
              awsSecretKey="toarusecretkey"
              endpoint="ap-northeast-1"
              topicArn="arn:aws:sns:ap-northeast-1:2010xxxxxxxxx:Test"
              subject="[テスト][SNSTarget][${level:uppercase=true}]"
              layout="[テスト][${longdate}][${level:uppercase=true}]
[${logger}]${newline}${message}${newline}${exception:format=tostring}" />
    </target>
  </targets>
  <rules>
    <logger name="*" level="Error" writeTo="sns" />
  </rules>
</nlog>

次のようなコードでまとめてエラーログを出すと

private static readonly Logger Logger = LogManager.GetCurrentClassLogger();

static void Main(string[] args)
{
    Enumerable.Range(1, 5)
        .ToList()
        .ForEach(i => Logger.Error(new Exception("error " + i)));
}

こんな感じで1つのメッセージとして届きます。

テスト][2013-07-20 19:31:37.6581][ERROR][SNSTargetSample.Program]
System.Exception: error 1

[テスト][2013-07-20 19:31:37.6691][ERROR][SNSTargetSample.Program]
System.Exception: error 2

[テスト][2013-07-20 19:31:37.6691][ERROR][SNSTargetSample.Program]
System.Exception: error 3

[テスト][2013-07-20 19:31:37.6691][ERROR][SNSTargetSample.Program]
System.Exception: error 4

[テスト][2013-07-20 19:31:37.6691][ERROR][SNSTargetSample.Program]
System.Exception: error 5

ちなみにこのライブラリは弊社でも本番環境で動いています。今後も公開できるライブラリは公開していきたいと考えています。

MSDeploy をAPIとして、C# のコードから実行する

Build Insiderさんで「コードから触るIIS 8」という連載を書くことになりました。1回目の記事「PowerShellによるIIS 8のインストール」が公開されていますのでぜひ読んでください!

さて、最近お仕事の方でASP.NET (C#)なプロジェクトのビルドとデプロイまわりをやっております。C#でビルド & デプロイということで、MSBuild & MSDeployを使っています。
具体的には、MSBuild でターゲットをpackage にしてビルドしてデプロイ用のパッケージを使い、MSDeployを使ってWebサーバーにデプロイしています。(このときWebサーバー側にはMS Deploy がインストール済みという前提)
コマンドプロンプトから実行する分には、パッケージを作成したときに作られる .cmd なコマンドラインスクリプトを呼び出せばいいのですが、デプロイまわりをまとめてC#製のツールから実行することを検討しています。
C# から外部プロセスを実行して云々…となると、プロセスの結果を待機だの、標準出力を取得だのといろいろめんどうなことが増えてきます。じゃあ、直接C# でMSDeployを実行できないのか、というのが今日のお話です。
Read the rest of this entry »

Microsoft MVP for Visual C# を受賞しました

2013年7月度のMicrosoft MVP for Visual C# を受賞しました。今回が初の受賞です。
この1年の主な活動は勉強会でのセッション(とこのブログ)でした。聞いたり、見たり、読んだりしていただいた皆様、ありがとうございます。

引き続き、勉強会でのセッション等、活動を続けていきたいと思っております。
思い起こせば、Active Directory関連のツールを作るときにはじめてC#に触れました。しばらくして、SilverlightでUI開発をC#で行いました。続いて、趣味のWindows Phone開発やWindows Store アプリ開発にKinect… といろいろな場所で動くC#をやってきました。
また、LINQやRx、最近ではasync/await といった機能にも魅力を感じています。
そして、最近では仕事でインフラという立場からASP.NET / IIS を見ています。
次の一年の目標ですが、こういった、いろいろな場所で動く、いろいろな機能を持っている…といったC#の魅力を伝えていきたいなあと、今のところ漠然と思っています。

今後とも、よろしくお願いします。

つくばC#勉強会で「初心者にC#をおすすめする理由」を話してきました

というわけで話しました

ちなみにゆるふわは「おひさまフォント太」です。

つくばまで行くなら何か話してみようということでこのタイトルにしました。ずっと「こういう(技術的な)ネタをやってみました」的な解説が多かったので、今回のような自分の考えを伝えるセッションは久しぶりでした。
C# をおすすめする理由とあわせて「こういうツール、サービスがあるよ」というネタも入れたのですが、「初めて知った」というTweetも見かけたのでよかったかなと思っております。

あと、このあたりの話なんですが

はい、すみません、忘れておりました…
Taskは、Silverlight4のころはRxで、最近はasync/await でラップして使ってその存在を意識せずに使ってしまって….などと言い訳はあるのですががが。
dynamic も「varを動的に型解決されると勘違いしている人もいる」と言ったなら入れておくべきでしたね…

正直、東京の人が多いのにあれだけ人数集まりましたし、もっと遠方から来た人もいたので、ぜひ第2回以降を期待したいです。微力ながら何かして力にはなりたいと思っております。
個人的には「C# はMS系デバイス以外でも動くよ」というあたりを、実際に使った感想を出せるようになるといいなあと思っておりまする。

NLog.Targets.AmazonSNS 0.0.6 をリリースしました

NLog.Targets.AmazonSNS 0.0.6 をリリースしました。引き続き Nugetからどうぞ。
今回の更新では、IAM Roles for EC2 instances に対応しました。このAWSの機能は、指定したIAM Roleを適用したEC2のインスタンスでは、Roleに指定した機能が許可されたAWSのAccessKeyが使えるようになるというものです。
AWS SDKを使っている場合、具体的にはAccessKeyを指定しないコンストラクタを呼び出すことで、SDK内部で自動的にKeyを取得してくれます。

var client = new AmazonSimpleNotificationServiceClient(RegionEndpoint.APNortheast1);

NLog.Targets.AmazonSNS では、NLogのtarget要素に awsAccessKey と awsSecretKey を指定しない場合にIAM Roles for EC2 instancesで提供されるアクセスキーを取得するようになりました。
今までは

<target name="sns" xsi:type="SNSTarget"
      awsAccessKey="Paste your AWS Access Key"
      awsSecretKey="Paste your AWS Secret Key"
      endpoint="e.g. ap-northeast-1"
      topicArn="arn:aws:sns:ap-northeast-1:123456789012:Your-Notification"
      subject="[${level}] Application error"
      layout="${time} - ${level} - ${message}">
</target>

と書いていた設定を、

<target name="sns" xsi:type="SNSTarget"
      endpoint="e.g. ap-northeast-1"
      topicArn="arn:aws:sns:ap-northeast-1:123456789012:Your-Notification"
      subject="[${level}] Application error"
      layout="${time} - ${level} - ${message}">
</target>

と書けばOKです。

NLog.Targets.AmazonSNS 0.0.5 をリリースしました

NLog.Targets.AmazonSNS 0.0.5 をリリースしました。引き続き Nugetからどうぞ。
今回の更新でNLog の Internal Logging を使ってエラー時にメッセージを出すようにしました。
NLog 全体の設定ですのでリンク先の通り、

<nlog internalLogFile="c:\log.txt" internalLogLevel="Trace">
<!--SNS Target などを記述 -->
</nlog>

と言った感じに設定してください。

たとえば、AWSのAPI Keyを誤って設定したとか、メッセージのPublishリクエストに失敗した場合には Internal Logging に出力されるようになりました。
また、メッセージサイズが大きすぎてメッセージの一部しか送信していない場合にもこちらにメッセージが表示されます。

空の ASP.NET MVC 4 プロジェクトに google 認証を追加する (1)

ASP.NET MVC4 を最近やっていますが、認証部分を外部(今回はgoogle)に任せようと考えています。テンプレートにある「インターネットアプリケーション」はよく作りこまれていますが、これを使うと全部入りになってしまうので、今回は空のプロジェクトにgoogle認証を付けてみました。
Read the rest of this entry »

Web Platform Installer (WebPI) を PowerShell からコマンドで操作する

Windows Server 2012 に IIS8 を入れて、もろもろモジュールを入れて…という作業を最近やっています。Windows Serverの場合、資料でもUI経由、特に Web Platform Installer (WebPI)経由での操作で説明されていることが多いように思えます。ただ、その作業を自動化することを考えると、コマンドラインから操作したいところこです。

で見ていたら、WebPI についてはコマンドラインツールが提供されていました。 Web Platform Installer v4 Command Line (WebPICMD.exe) – RTW release に詳細があります。

今回はこのツールを PowerShell からコマンドでインストールして、WebPI経由でインストールするモジュールもPowerShellからインストールしてみたいと思います。
Read the rest of this entry »

イギリスでSIMを購入して、SIMフリースマフォを運用してみた (2)

前回からだいぶ時間がたちましたが、イギリスでの電波状況と HTC 8S (Windows Phone 8) の使い勝手についてまとめてみたいと思います。

まずロンドン市内について。
ロンドン市内では、割りと高級住宅地と呼ばれる地域の近辺に滞在し、観光で都心に行きました。 ※といっても、住宅の一部を貸してくれる宿(ご飯などは全部自分で準備)なので、ホテルより格安。
都心の屋外ではそれなりに電波が入ります。ただ、少し都心から離れた住宅地などでは、場所によっては H, H+ という表示になり遅くなったりつながりにくくなったりします。
また、日本と一番異なると感じたのは屋内で、まず地下鉄では駅構内でさえ地下だと電波は入りません。また、お店とかでも入口近辺では入るものの、奥に入ったり地下にいくとつながらなくなります。
Read the rest of this entry »