2013年12月22日日曜日

ASP.NET発行できない時

ASP.NETでファイルシステムとしてWeb発行する場合に失敗するのは、
セキュリティソフトのリアルタイム保護が原因かもしれません。

発生する条件:
    「プリコンパイル済みサイトを更新可能にする」にチェックを入れると発生

発生するエラー: 
    ファイルをコピーできません。要求された操作はユーザーマップセクションで開いたファイルは実行できません

aspnet_compiler の出力先ディレクトリを保護対象から外す設定などすれば
うまくいくことがありますが、勿論セキュリティの観点から問題ないか
会社などに確認の上、実施してください。
(出力先ディレクトリは、「Web発行アクティビティ」の「詳細を表示」を
クリックすれば発行時のアウトプットが表示されるのでそこから
見つけることができます。)

それでもだめなら上記ログ中のaspnet_compiler のコマンドをコピーして、
末尾に「 -f」オプションを付与してコマンドプロンプトで実行する手もあります。

※Visual Studio上で発行しても、ごく稀に発行が成功します。
また、コマンドライン上で実施して失敗したことは今のところありません。
もしかすると、セキュリティソフトとはまた別の原因なのかもしれません。

環境
Windows 7
Visual Studio 2012 update 4

(VS2012 update 4にしてから調子が悪いような気がする。
(Webアプリではなく)Webサイトの発行もウィザード形式になっちゃったし。
update 4 にする前は細かい設定ができる形式だったと思うが。。)

ASP.NET が Internet Explorer の検出に失敗する

ASP.NET (IIS7.5)上のページをIE10で見ようとしたら、「_doPostBack」でエラーが発生。

調べたらユーザーエージェント判定スクリプトの問題だった。
IE10が検出できず、ASP.NETで自動生成する_doPostBack」を含むJavascriptが
取得できてなかったということ。

http://msdn.microsoft.com/ja-jp/library/ie/hh869299(v=vs.85).aspx

パッチ当てて解決。

環境:
Windows Server 2008 R2
IIS7.5
.NET framework 2.0
.NET framework 3.5
.NET framework 4.0

なお、Windows Server 2008 R2 に SP1 を当ててしまうと、上記パッチが
当てられなくなります。

.NET 4.0を使用してるASP.NETページはSP1当てる前からか、SP1当ててからか、
どの段階で対応されてるか調査してませんが、IE10は検出できてました。

しかし、.NET 2.0ページだとSP1当ててからIE10対応パッチを当てようとしても
当てられず、取り残されます。

解決策としては、MSの言うとおり
・適用済みパッチ(SP1)を削除して、上記パッチを当てて、SP1を当てなおす。
とするか、
・.NET 2.0 の ie.browser ファイルをIE10対応版に置換して、
 aspnet_regbrowsers -i コマンドを発行する。
とするか等です。

Service Packとなると、さすがに消すのは怖いので今回は後者を実施しました。
手順:
・SP1未適用マシン(試験機など)にIE10対応パッチ(.NET 2.0用)を適用。
・以下のファイルをノートパッドなどで開き、IE10対応版になってるか確認。
   C:\windows\Microsoft.NET\Framework\v2.0.50727\Config\Browsers\ie.browser

 ※ファイル中、「IE10plus」などの記述があればOK。

・以下のフォルダごとコピーして何処かへ退避。
   C:\windows\Microsoft.NET\Framework\v2.0.50727\Config\Browsers
 (32bitも64bitも一緒でしたのでどちらでもよいです。違ってたらそれぞれ
  取得してください。v2.0.xxx の箇所は.NET 2.0 の実際のフォルダを指定
  してください。)
・IE10対応させたいマシンの「Browsers」フォルダを、前手順で取得した
 もので置き換える。(32bit, 64bit 両方とも。)
 32bit :    C:\windows\Microsoft.NET\Framework\v2.0.50727\Config\Browsers
 64bit :    C:\windows\Microsoft.NET\Framework64\v2.0.50727\Config\Browsers

・コマンドプロンプトを開き、以下のコマンドを実行。
cd C:\windows\Microsoft.NET\Framework\v2.0.50727
aspnet_regbrowsers -i

cd C:\windows\Microsoft.NET\Framework64\v2.0.50727
aspnet_regbrowsers -i

以上。

2013年11月28日木曜日

ASP.NET + Enterprise Library + Oracle 文字化け mojibake

ASP.NET + Enterprise Library でoracle を使用する際に文字化けする場合は、
レジストリかシステム環境変数かレジストリに NLS_LANG が設定されてるか
確認しましょう。

Oracle 10.2.0.4 を windows server 2008 (x64) にインストールすると
レジストリにNLS_LANG が設定されないバグがあるようです。
(krown:138062)

Enterprise Library に限らずシステムユーザーやIIS_IUSRSなど
他のユーザー権限で実行されるプログラムを動作してる
環境全般に言えることですが。

2013年4月21日日曜日

GnuCash MacOSX 日本語化

MacOSXのOSは英語を使用しているけど、
GnuCash(2013年版)は日本語で使いたい時の対処方法。

Terminalで以下を実行。
# テキストやメニューを日本語化(GnuCash Manualに乗ってるやり方)
# System Preferences の "Language & Text" の "Language" に相当
defaults write $(mdls -name kMDItemCFBundleIdentifier -raw /Applications/GnuCash.app) AppleLanguages "(ja_JP, en)"

# 勘定科目などを日本語化(これはGnuCash Manualには乗ってなかった。要進言。)
# System Preferences の "Language & Text" の "Formats" の "Region" に相当
defaults write $(mdls -name kMDItemCFBundleIdentifier -raw /Applications/GnuCash.app) AppleLocale "ja_JP"

あと、日本語が直接入力できないのでText Editorで入力し Copy & Paste して使ってます。
入力欄によっては Cmd + v で張り付かないので右クリックメニュー→Paste で貼り付けます。

入力関係の設定があるのかもしれませんが未調査です。
あと、帳票が日本語が全く表示されないので、次の確定申告までに
解決しなければなりません。。

(2014.1.13追記)
帳票ですが、「エクスポート」するとHTML形式で保存でき、それは正常に
日本語が出力されてました。
取り敢えずこれを印刷すればよさそうです。
Gnucashアプリ表示上の問題は、内部で使用しているブラウザ
(gtkhtml? webkit?)のデフォルトロケールあたりの設定でしょうか。

(2014.3.21追記)
随分前の話ですが、GnuCash 2.6でMacOX でも日本語入力は
直接できるようになってました。
ご対応ありがとうございます。

2013年4月13日土曜日

Bloggerブログスタイル変更

Bloggerのブログスタイルを「動的」(レスポンシブ)なものに
変更しました。

標準で各種SNSのLIKE/TWEET/+ボタンが付いているので。

代わりに「Syntax Highlighter」が効かなくなって
しまいました。

一応経過を記しておきますと、他のページで
「Google Sites」を使っているのですがLIKEボタンを
配置し動作確認すると「Confirm Like」にもならず
「Error」になってしまうので変えました。
(「Google Sites」でも「できる」とかいてるページでも、当時ではできていた
のかもしれませんが、知ってる限り同様に「Error」が発生してしまってました。
(この記事は2013年4月13日に書いてます。調査はここ一週間を通して
行なっているので少なくともそれくらいの時点でのものになります。)

HTMLを書いたXMLを外部リンクで読み込ませるとか
Google Apps ScriptのUrlFetch()を使ってみるとか
FacebookのAPP_IDを作成・登録するとか色々試したが、最終的に
Google Sitesで第三サイトとの通信に関するポリシーに
引っかかるので無理でした。
(今となってはGoogle Appsサイトも有償になってしまったし。)
(完全に通信を中継するサイトを経由すればできるのか?
 それはそれで、そもそも中継サイトが怪しいが。)

OfficialにはGoogleとFacebookでGoogleユーザーが同意書
を書いてLIKEを開放してもらう方向でしょうか?

時間の問題と思って待つのが賢明でしょうか?


BloggerでもLIKEボタンは「動的なもの」で標準で
有効なので「Google Sites」でも標準ウィジェットと
して有効にして欲しいです。

2013年4月3日水曜日

WindowsのフォントのClearType設定

MacOS X の「Bootcamp」上で動作させている、
WindowsXPの画面が見づらいと思ったら、
ClearTypeが効いてなかった。

設定方法: 
コントロールパネル → 画面 → デザイン → デザイン → 効果 → 
「次の方法で…」 → ClearType
で設定する。

2013年3月19日火曜日

(VB.NET) Windows 7ブート時起動アプリにSplashScreen (HideSplashScreen)を使った場合の問題

Windowsの起動時にスタートアップメニューに登録して
起動するアプリで、VB.NETのSplashScreen (HideSplashScreen)を使った場合の問題 。

いつもではないが、時々、InvalidOperationExceptionが発生する。
インターネットを調べると、同じ症状にあってる人たちがいた。

http://connect.microsoft.com/VisualStudio/feedback/details/769497/hidesplashscreen-causing-invalidoperationexception
(Microsoftもこれはバグと認識しているようである。)

対策・回避策としては以下。
1.VB SplashScreen architectureの使用をやめる。
  (Microsoftがバグフィックスを出すまで待つ。)
2.インターネットで知りえた情報をもとにコードを組む。(としか言えません。。)

上記くらいしか対策・回避策がないのだが、
いったいどういった条件でこの事象が発生するのか知りたかった。

どうすれば分かるだろうか?
「process explorer」を使って徹底的に調べる?
Mr.Russinovich氏に問い合わせる?

Windows Maximum handles. Windowsの1プロセスあたりの最大ハンドル数

Windowsの1プロセスが作成できる、
最大ハンドル数は、256*256*256個。

Maximum handles which one process can make is 256*256*256.

2013年3月18日月曜日

(VB.NET) Invoke時はIsHandleCreateを確認して、Handleを参照した方がよい

言語: Visual Basic .NET

Invoke時はIsHandleCreateを確認して、Handleを参照した方がよい。
そうしないと、InvalidOperationExceptionが発生することがある。

2013年3月12日火曜日

Windows版Oracleアラートログローテーションバッチ

Windows版Oracleアラートログローテーションバッチ。
日次で動かして、アラートログを日付つきでバックアップしていく。
rem Oracle alert log rotation sample for windows batch script
rem アラートログのフルパス
set LOG_FILE=D:\oracle\product\10.2.0\admin\SID\bdump\alert_SID.log

rem バックアップファイル名を決める処理
rem アラートログは1ファイルだが、変数処理のため敢えてfor文を使う。

for /f "usebackq" %%I in ( '%LOG_FILE%' ) do (
  set BACK_FILE=%%~dpnI_%DATE:/=%%%~xI
  set LOG_DIR=%%~dpI
)

rem バックアップ処理

copy %LOG_FILE% %BACK_FILE%

rem アラートログを0リセット

copy NUL %LOG_FILE%

rem 古いファイルを削除

for %%I in ( '%LOG_DIR%' ) do (
  rem ファイルの日付をチェックして、保存期間を過ぎてたら削除
  rem 他の仕組みが楽だったら他の仕組みでやる。

)

ファイル名をきれいにしたいと思う方にどうぞ。
それにしてもやっぱりバッチは可読性が。。

例ではバックアップファイル名に日付文字列を使用したが、
通番方式の方が処理は簡単。
なにせバッチでは日付計算が簡単にはできないし。

あと、forループ使う時はsetの遅延問題にも注意。

(オラクル)古いDBから新しいDB へのデータ移行時に表やカラムを変える場合

オラクルについて、古いDBから新しいDB へのデータ移行時、
表やカラムが変わった場合は、expdp/impdpでは外部表を
使えばよさそう。