12月 182013
 

Windows が画面の端を正確に検出できるようにするために、調整点をタッチするときには画面の少し中央寄りをタッチするようにしてください。

調整の意味ない!!
Win7時代からの機能のようなので、Win8との整合性低いんですかねぇ…

11月 222013
 

参考:IISマネージャーからアプリケーションインポートしたら、アプリケーションプールのエラーが出た – minato128のブログ

まさにこれ。

  • msdeployはデプロイ先のアプリケーションプールの.NETバージョンとデプロイ対象アプリのバージョンが一致しているかチェックする
  • IISに4.5をインストールしていたとしても、設定できるのはv4.0
  • VS2010のtargetは4.5に対応していないのか、この状況ではエラーを吐いてデプロイできない

使用しようとしているアプリケーション プールでは、’managedRuntimeVersion’ プロパティが ‘v4.0’ に設定されています。このアプリケーションには ‘v4.5’ が必要です。

  • /t:Packageでデプロイパッケージを作る際のmsbuildオプションに/p:VisualStudioVersion=11.0 (2013は12.0なのかな?)をつければVS2012のtargetを使用するようになるらしく、エラーを吐かずに正常にデプロイ出来るようになる
11月 222013
 

ODACの11g、12cにはOracle.ManagedDataAccessというのが追加されており、ネイティブコードが無くなったのでサーバー環境へのデプロイ時にODP.NETやOracleClientのインストールが不要になる!ということで、やり方を調べてみたメモ。

参考:oracle – Deploying and Configuring ODP.NET to work without installation with Entity Framework – Stack Overflow

これのBのパターンでうまく行った。

  • WCFサービスのホストプロジェクトなどDB接続が必要になるプロジェクトの参照にEntityFramewrokとOracle.ManagedDataAccessを追加し、ローカルコピーをTrueに
  • Web.config/App.configを以下のように設定
[xml]




















[/xml]

  • 適当にデプロイ

Oracle.ManagedDataAccessDTC.dll が必要な場合

  • TransactionScope を使う場合など、Oracle.ManagedDataAccessDTC.dll が必要な時がある
    • 無いと実行時にFileNotFoundExceptionで死ぬ
  • Oracle.ManagedDataAccess.dllと同様に、実行パスかGACに入ってればOK
  • Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ を必要とする点に注意 (SP1じゃなくても大丈夫だとは思うが…)
    • これも同様に、インストールされていないと実行時にFileNotFoundExceptionで死ぬ
  • Oracle.ManagedDataAccessDTC.dll も Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ も32bit版と64bit版があるので、実行環境に合わせたものを使おう
10月 312013
 

DbContextでの話。

普通はDbContextから取得したデータを更新すれば良い。
[csharp]
using (var context = new Entities())
{
var hoge= context.Hoge.Find(“id的な”);
hoge.Fuga = “New!”;
context.SaveChanges();
}
[/csharp]

これはDbContextに変更追跡機能があるため可能な事。
DbContextのライフサイクル外から受け取ったEntityオブジェクトなんかはただのPOCOであり、どう変更されたかなんてDbContextは知らない。
DataSetなんかは、DataTable自体が変更追跡機能持っててシリアライズもできたのだけど…

自己追跡エンティティ(STE)なんかもあるけど、Not Recommendedとされているし、EF6やVS2013ではもう使えない。
EF4から導入されたばかりなのに短い寿命でしたね…

んで、WCFなんかで外部から受け取ったデータは当然変更追跡の対象外なため、Attachとかしないとダメなことは想像付く。
でもAttachしただけではUnchangedな状態なので、変更してくれない。
ではどうすれば良いかというと、どうやらModified状態に変更してしまえば勝手に更新してくれるようだ。
[csharp]
public void Update(Hoge hoge){
using (var context = new Entities())
{
context.Hoge.Attach(hoge);
context.Entry(hoge).State = EntityState.Modified;
context.SaveChanges();
}
}
[/csharp]
削除はAttachしてからRemoveすればOK。
[csharp]
public void Remove(Hoge hoge){
using (var context = new Entities())
{
context.Hoge.Attach(hoge);
context.Hoge.Remove(hoge);
context.SaveChanges();
}
}
[/csharp]

ちなみにナビゲーションプロパティでIncludeされてる関連オブジェクトがある場合で、外部キーの値を変更したのに、関連オブジェクトは変更前のままとかいう場合、Attachすると死ぬ。
[csharp]
//どっかで読み込んだ
context.Hoge
.AsNoTracking()
.Include(x => x.Piyo)
;
[/csharp]
[csharp]
//どっかで外部参照のキー値を更新した
hoge.PiyoId = “new id”; //※hoge.Piyoは変更前のまま
[/csharp]
[csharp]
//そのままAttachすると死ぬ
context.Hoge.Attach(hoge);
[/csharp]
この場合、どうやらナビゲーションプロパティをnullにしてしまえばAttachできる。
関連オブジェクトを再取得してきてちゃんと値を合わせてやってもうまくいくんじゃないかな?(試してない
[csharp]
hoge.Piyo = null;
//これなら大丈夫。取得時にIncludeしてないのと同じ状態になる。
context.Hoge.Attach(hoge);
[/csharp]

7月 112013
 

日記というかメモです。

概要
  1. グラボ1枚に2つのモニタを繋いでる
  2. 手持ちのグラボのDisplayPort(以下DP)に、DVIモニタをつなげてトリプルディスプレイにしたい
  3. アクティブ変換アダプタで繋いでみる →映らず
  4. 諦めてグラボ1枚追加(2枚刺し)してDVI接続 →できた
事前環境
  • グラボ:H775P1GD (HIS製RADEON HD7750 ファンレス)
  • モニタ1:NEC MultiSync LCD2190UXi
  • モニタ2:NEC MultiSync LCD2490WUXi
  • 繋ぎたいモニタ:NEC MultiSync LCD2690WUXi
買ったもの
知ったこと
  • DVI/HDMI出力には、1出力に付きクロックジェネレータが1つ必要。らしい。
  • RADEONはそれを大体2つしか積んでない。(SapphireのFlexシリーズはリファレンスより多いっぽい)
  • DisplayPortはクロックジェネレータ無しに出力可能。
  • DP->DVI変換アダプタにはパッシブとアクティブの二種類ある。
    • パッシブは物理形状を変えるだけ。
    • アクティブはクロックジェネレータを内蔵している。
    • アクティブアダプタは相性等のトラブルが多いとパーツショップの店員が言ってた。
  • DisplayPort自体スリープ時の認識等でトラブルが多い雰囲気?
変換アダプタを使った時の症状
  • 基本的に刺しても無反応。
  • 稀にハードウェア追加の音がして認識されることがある。
  • 認識されてもモニタを判別できない事が多い。
  • 極希にモニタも判別できて映ることがあるが、長続きしない。
  • 一旦見失うと、全ての主電源を落として再度立ち上げるまで全く認識しないことが多い。
  • 無反応なのを刺しっぱなしにしておくと、突然認識されることも稀にある。
追加グラボの選定
  1. ファンレスがいい。
  2. できれば1スロットがいい。
  3. 安い方がいい。
  4. 既にRADEON使ってるのでRADEONしかない。
  5. EDIDベースの色補正機能の精度的にHD6xxx以降が良い。
  6. これらの条件を満たすのはHD6450しかない。
  7. 安いのはSapphireか玄人志向。
  8. Sapphireは上部にせり出すタイプのヒートシンクらしく、1つ上のスロットが使えなくなる問題がある。多分2枚目に刺す位置には向かない。
  9. 玄人志向のにはその問題がないので決定。
  10. だが玄人志向のもヒートシンクが思ったより厚く、1つ下のスロットに干渉したので結果的にほぼ同じだったかも。
7月 112013
 

同じコピー元ディレクトリにexamplefilename.txtexampl~1.txtというファイルがある場合、コピー先で同一視されて上書きとなり、いずれかのファイルがコピーされないという問題。

8.3形式を無効にすることで回避可能。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreation1にすれば無効となる。

6月 282013
 

環境:Windows Server 2003 Standard SP2

vmdkをNASからコピーしてる時に発生。
以下を試したら直った。

いずれも巨大な/大量のファイルを扱う(コピーなど)ときに出るものです。
コピー先の場合は前者、コピー元の場合は後者が出てきます。
関連ドキュメントは:

http://support.microsoft.com/KB/304101
http://support.microsoft.com/KB/312362

など、いくつか存在していますが、効果があるのは下記でしょう。

http://support.microsoft.com/KB/285089

6月 142013
 
現象
  • Windows Server 2003 R2 SP2
  • 起動中に「システム スタートアップの最中、少なくとも1つのサービスまたはドライバにエラーが発生しました。」というエラー
  • イベントビューアには以下のエラー
    • ソース: Service Control Manager
    • イベントID: 7000
    • 説明: パラレル ポート ドライバ サービスは次のエラーのため開始出来ませんでした:
      指定されたサービスは無効であるか、または有効なデバイスが関連付けられていないため、開始出来ません。
原因

パラレル ポート (Parport) サービスが有効になっているが、パラレル ポートが接続されていない場合に発生することがあります

参照:パラレル ポートを搭載していない Windows Vista ベースまたは Windows Server 2008 ベースのコンピュータでエラー メッセージ "パラレル ポート ドライバ サービスは開始できませんでした" が表示される

回避策

上記URLの通り、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Parport\Start3に変更し、Parport サービスを無効にする事で回避可能

6月 142013
 

メモリ要求が行われず、スタートアップRAMのままの容量となってしまう。

Hotfixが提供されている。

参考:Hyper-V の動的メモリ構成ガイド