8月 062015
 

記事のメモ。

Windows の HTTP スタックには他にも HTTP.sys があるが、基本 IIS 向けのカーネルモードドライバとして動作する HTTP リスナーで、クライアントアプリには超使いにくいやつなんで今回は省略。
なお .NET Framework の System.Net.HttpListener の中身は HTTP.sys なので、アレもサーバー以外では超絶使いにくい。

7月 212015
 

仕様的な

  • Analyzer を使う際、Analyzer の依存アセンブリも Analyzer として参照追加する必要がある
    • 通常の参照追加じゃダメ
  • NuGet を用いた Analyzer のインストールは install.ps1 で行われる
  • RTM 版テンプレートの install.ps1 では、nupkg 解凍直下の analyzers ディレクトリにある dll を Analyzer として登録する
  • ので、上手いことそこにアセンブリが配置されるよう nuspec を書く必要がある
  • だがどうやら lib 配下以外に配置すると pack 時に怒られるので、-NoPackageAnalysis オプションが必要
  • この仕様では、Analyzer の依存アセンブリは同梱配布しかできないのではないか疑惑 (PowerShell頑張ればなんとかなるんだろうか)

とりあえずどうすればいいのか

  • csproj を使って nuget pack する前提の nuspec を書くパターン
  • bin\$configuration$\ 直下の dll を全部 analyzers ディレクトリに突っ込むようにする(Analyzer 開発用アセンブリは除外)
  • Analyzer が依存してるアセンブリの「ローカルにコピー」を True にして含まれるようにする
  • プロジェクト新規作成時点で指定されている packages.config の中身は開発時しか使わないので developmentDependency=”true” にして利用時の依存を除外

こんな感じ。

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <id>$id$</id>
    <title>$title$</title>
    <version>$version$</version>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
    <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$description$</description>
    <language>ja-JP</language>
    <tags>analyzers</tags>
    <frameworkAssemblies>
    </frameworkAssemblies>
    <dependencies>
    </dependencies>
  </metadata>
  <files>
    <file src="bin\$configuration$\*.dll" target="analyzers\" exclude="**\Microsoft.CodeAnalysis.*;**\System.Collections.Immutable.*;**\System.Reflection.Metadata.*;**\System.Composition.*" />
    <file src="tools\*.ps1" target="tools\" />
  </files>
</package>

で、こう

nuget pack Hoge.csproj -NoPackageAnalysis -Properties Configuration=Release
9月 222014
 

知らなかったので少しだけ試したメモ。

概要

  • FlashPlayer 10 から追加された機能っぽい
  • Stage に描写されるモノを sRGB とみなして、モニタプロファイルのカラースペースに変換する機能があるっぽい
  • ソースプロファイルは無視っぽい
    • flash.display.Loader とかにも機能が見当たらないけど、使うリソースを全部sRGBにしておけってことなんですかね
    • Flash Professional に取り込んだ画像は、プロファイル削除されると書いてあるので、つまりそういうことなのかな…sRGBに変換されるかは謎いけど、サンプルではGBR画像の色が狂ってしまってるので、変換なしでプロファイル削除だけの予感

If you import an image with an embedded profile into Flash Professional, the color profile is removed and the image on the Stage appears without its embedded color profile.

  • Linux/Unixは非対応っぽい

Currently, SWF file color correction is not supported on Linux/Unix systems or systems with less than 32-bit color resolution.

バグっぽい?

環境

  • Firefox 32.0.2 + FlashPlayer 15.0.0.152 + CMS有効
    • colorCorrectionSupport: defaultOff
    • colorCorrection: on の時のみカラマネが動作
    • 参照するモニタプロファイル: gfx.color_management.display_profile に設定されたやつ
  • デスクトップ版IE 11 + FlashPlayer 15.0.0.152
    • colorCorrectionSupport: defaultOff
    • colorCorrection: on の時のみカラマネが動作
    • 参照するモニタプロファイル: 「色の管理」で設定したプライマリモニタのプロファイル
  • ストア版IE11 + FlashPlayer 15.0.0.152
    • colorCorrectionSupport: unsupported
    • colorCorrection: うごかないっぽい
9月 092014
 

概要

  • L-02F で W4-820 を用いてインターネット通信をした場合、断続的に無通信状態が発生する
    • 途切れまくるので、正直そのままでは使いものにならない

環境

  • 使用ルーター : LG L-02F
  • 使用PC : Acer Iconia W4-820 (以下W4)
  • 使用SIM : ぷららモバイル LTE 定額無制限プラン

再現条件

  • 他 W4 端末でも再現する
  • PC側に iPod touch 5G, MacBook Pro, Nexus7, iPad mini 等を用いても再現しない
  • ルーター側に URoad-Aero, WR8700N を用いても再現しない
  • L-02F の PWLAN を利用して URoad-Aero 経由でインターネット接続しても再現しない
  • L-02F の Wi-Fi を用いて他PCと通信した場合も再現しない
  • L-02F の設定、W4 の NIC 設定、NIC ドライバで影響があるものは発見できなかった
  • W4 がバッテリ駆動の時は再現し、電源接続時は再現しない

回避策

powercfg -setdcvalueindex 381b4222-f694-41f0-9685-ff5bb260df2e 19cbb8fa-5279-450e-9fac-8a3d5fedd0c1 12bbebe6-58d6-4636-95bb-3217ef867c1a 0
パラメータ 説明
-setdcvalueindex バッテリ駆動 時の設定
381b4222-f694-41f0-9685-ff5bb260df2e バランス プラン
19cbb8fa-5279-450e-9fac-8a3d5fedd0c1 ワイヤレス アダプターの設定
12bbebe6-58d6-4636-95bb-3217ef867c1a 省電力モード
0 最大パフォーマンス(1~3は省電力 (低/中/高))
  • この回避策を用いても、Bluetooth にて Arc Touch Mouse Surface Edition を使用している際には不安定となった
    • Bluetooth と Wi-Fi の干渉はよく知られている問題
    • L-02F で 802.11b のみを用いることで多少改善された(割り込みタイミングの問題?)
    • URoad-Aero, WR8700N を使用している場合は問題ない(たまたま?)
    • どうやら 5GHz で接続していても切れることが分かったが、どうせ屋内でしか使えないモードなので放置……
7月 232014
 
  • 調べた分だけ。
  • 割とわかりやすかった:Overview of Custom Storage Providers for ASP.NET Identity | The ASP.NET Site
  • 「ASP.NET Webアプリケーション」テンプレートの認証「個人ユーザーアカウント」で作成されたコードを眺めれば何となく分かる。
  • Microsoft.AspNet.Identity.EntityFrameworkとかはEFのCodeFirstでテーブル初期化とかDB読み書きとかやってくれるやつだけど、CodeFirstが嫌でIUserStore自作するなら不要な感じ。
  • UserManagerがASP.NET Identityの中心的存在の予感。
    • OWIN startup classの中でCreatePerOwinContext()にて初期化用Funcを設定する。

PasswordHasherの入れ替え

[csharp]

public class ApplicationUserManager : UserManager
{
public ApplicationUserManager(IUserStore store) : base(store) { }

public static ApplicationUserManager Create(IdentityFactoryOptions options, IOwinContext context)
{
var manager = new ApplicationUserManager(new UserStore(context.Get()));
manager.PasswordHasher = new HogePasswordHasher();
return manager;
}
}

public class HogePasswordHasher : IPasswordHasher
{
public string HashPassword(string password)
{
// 塩を振ったりストレッチングしたりしよう
throw new NotImplementedException();
}

public PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword)
{
if (hashedPassword == HashPassword(providedPassword))
return PasswordVerificationResult.Success;
else
return PasswordVerificationResult.Failed;
}
}
[/csharp]

ちなみに、ASP.NET vNext のデフォルトっぽいPasswordHasherは以下の様な実装。

  1. Rfc2898DeriveBytesでSaltサイズのみ指定(128bitでRNGCryptoServiceProviderによって生成されるランダムSalt)にしてパスワードハッシュ生成(1000回ストレッチング)
  2. Salt + パスワードハッシュな文字列を返す(DBとかに保存する文字列になる)

検証時は

  1. DB保存的文字列からSaltとパスワードハッシュを切り離し
  2. そのSaltを利用して、入力されたパスワードからパスワードハッシュを計算
  3. 照合

2.0.0のMicrosoft.AspNet.Identity.PasswordHasher.VerifyHashedPassword()も、vNextのコードで生成したハッシュを使って検証したら成功したので、多分同じロジック。

参考:Identity/src/Microsoft.AspNet.Identity/Crypto.cs

Roleによる認可的な

Controllerで

[csharp]
if(this.User.IsInRole(“Admin”))
{
}
[/csharp]
とか
[csharp]
[Authorize(Roles=”Admin”)]
public ActionResult Index()
{
return View();
}
[/csharp]
とか。

Viewで

[csharp]
@if (this.User.IsInRole(“Admin”))
{
}
[/csharp]
とか。