ページ

2013年8月5日月曜日

FDT.exeがインストールされているか自動判定する


PCと接続されている機器のファームウェアのバージョンアップを自動化したいという要求は多々あると


Renesas FDT.exe

レジストリのUninstallリストを見る方法

レジストリのUninstallプログラムリストを見れば、既にインストールされているプログラムの一覧を取得できる。
以下がそのレジストリ名。

  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{プロダクトID}

FDTのプロダクトIDを調査した。

  • V409 {376379F3-E708-453E-B5C1-FB60675C513C}
  • V408 {0776792E-F51C-4CE5-A4FB-86E126DB9C81}
  • V403 {29170013-CC82-4D81-BEB3-970662DD7A98}
  • V401 {287BC16B-9185-4E2B-B713-557A1ADF9590}
手元にあるいくつかのバージョンを
ということで、各バージョンのプロダクトIDが異なるため、全てのバージョンをのプロダクトIDを事前に調べて、全部を検知するのは、賢いやり方では無さそう。


関連付けファイルの情報などのレジストリを見る方法

そこで、別の方法を考えてみる。
FDTのインストール時にデフォルトでは拡張子に関連付け処理が適応される。
ということは、関連ファイルが起動される際の、起動プログラム情報がレジストリに追加されているはずである。
レジストリを調査していると、以下のレジストリ名を発見した。

  • HKEY_CLASSES_ROOT\FDT4.Config\shell\open\command

この中を見ると

  • "C:\Program Files\Renesas\FDT4.09\fdt.exe" "/DISCRETESTARTUP" "w4fRun \"%1\""

と書いてあった。バージョンによってフォルダ名が違うものの、インストールされた痕跡はこれで分かる。痕跡と書いたが、アンインストールされてもこの情報は残っている為、実態があるかどうかは別途調べなければならない。

レジストリの値を抽出する方法

バッチファイルでレジストリの値を抽出すること自体はとても簡単。

【レジストリの値を抽出する】

SET FDT_REG_KEY_CONF=HKEY_CLASSES_ROOT\FDT4.Config\shell\open\command
FOR /F "TOKENS=2,3,* delims= " %%I IN ('REG QUERY "%FDT_REG_KEY_CONF%"') DO (
IF "%%I"=="REG_SZ" SET FDT_EXE_CMD_VALUE=%%J
)


ここまでは簡単。
しかし環境変数FDT_EXE_CMD_VALUEに入る文字列は

  • C:\Program Files\Renesas\FDT4.09\fdt.exe"

となっている。最後のダブルクォーテーションが余分だ。

文字列からダブルクォーテーションを削除する方法

色々試してみたが、テキストのテンポラリファイルに一旦掃き出すがのもっとも簡単だと思われる。

ECHO %FDT_EXE_CMD_VALUE%>tmp.txt
などで、テキストに掃き出してから以下のバッチファイルを呼び出す。

【ダブルクォーテーションを削除する.bat】

REM BATファイルのパラメータ
REM %1 対象テキストファイル名
if "%1"=="" goto end
set fname=%~1
copy %fname% org >nul
type nul >%fname%
for /f "delims=" %%a in ( org ) do (set line=%%a&& call :sub)

del /f org
goto end

:sub
set l=%line:"=%
>>%fname% echo %l%
goto :EOF

:end





バッチファイルで文字列からダブルクォーテーションを削除する。


バッチファイルで文字列からダブルクォーテーションを削除する。

バッチファイル制御を試みると、この問題にぶち当たることがあります。
例えばレジストリの内容を見て、プログラムフォルダを検索するなど、PATH名に空白がある場合は文字列がダブルクォーテーションで囲まれている。
そこにプログラムパラメーター等の文字列がさらに書き込まれている場合、for文で区切り文字処理がうまくできず、片方だけダブルクォーテーションが残ってしまってガックリ来たりします。
そうなると意外に面倒くさい。
ダブルクォーテーションが残ってしまった文字列をテキストファイルに吐き出して、そのテキストファイルから、ダブルクォーテーションを削除するバッチファイルを作成してみた。



2013年7月31日水曜日

Google API を使って自動的に記事を投稿する サンプルサイト

Google API を使って自動的に記事を投稿する サンプルサイト

今月は、Google API を使ってBloggerに投稿するプログラムについて勉強しました。
集大成として、サンプルサイトを作成しました。

http://p-mans.blogspot.jp/


サイト構築の要領

  • 専用のBloggerアカウントを用意
  • Azure仮想デスクトップを用意
  • 特定のサイトから過去記事を検索するロボットを作成
  • このロボットを複数用意して、タイムスケジューラーで定期的に起動
  • タイムスケジューラーはAzureの環境に用意
  • ロボットは記事の日付、タイトルを認識、不要なタグの削除などを行い、特定のbloggerへ自動投稿する

問題点

bloggerへの自動投稿には以下の問題点があります。
  • 1日に投稿出来る件数の制限
  • 利用できるタグの制限

総評

問題点が見えれば、回避方法が見つかりますので、なんとか構築に成功しました。
この構築に掛かった工数は試行錯誤もあるので、約10人日でした。
今回は仕事に関係するパチンコ業界の記事を中心にしたサイトを作ってみました。



2013年7月29日月曜日

Google API で Bloggerに投稿する際に、ラベル、スケジュール日付を付加する。

Google API で Bloggerに投稿する際に、ラベル、スケジュール日付を付加する。
Google.GData.Clientを参照する。
using Google.GData.Client;
以下がサンプルコード。

schemeに"http://www.blogger.com/atom/ns#" を指定するのが重要なポイントになります。

static AtomEntry PostNewEntry(Service service, Uri blogPostUri
 , string Title, string HtmlContent, DateTime Update
 , string Name, string Email)
{
    Console.WriteLine("\nPublishing a blog post");
    AtomEntry createdEntry = null;
    if (blogPostUri != null)
    {
        // construct the new entry
        AtomEntry newPost = new AtomEntry();
        newPost.Title.Text = Title; //タイトルはダブってもエラーにならない
        newPost.Published = Update;   //日付
        newPost.Content = new AtomContent();
        newPost.Content.Content = HtmlContent;
        newPost.Content.Type = "xhtml";
        newPost.Authors.Add(new AtomPerson());
        newPost.Authors[0].Name = Name;
        newPost.Authors[0].Email = Email;
        newPost.Categories.Add(new AtomCategory(
            "Label1"   //term
            , "http://www.blogger.com/atom/ns#" //scheme
            ));
        try
        {
            createdEntry = service.Insert(blogPostUri, newPost);
            if (createdEntry != null)
            {
                Console.WriteLine("New blog post created);
            }
        }
        catch
        {
        }
    }
    return createdEntry;
}


Service.Insert()でエラーが発生する場合は、HTMLのタグに不整合がないか確認してみよう。

Service.Insertのエラーについて

Service.Insertで発生するエラーについてはいくつか考えられる。

  1. HTMLのタグに不整合
  2. 投稿件数オーバー・セキュリティーロック

HTMLのタグに不整合

いつか使えないタグ、というか古い仕様は受け付けない。
例えば<br>は×、</ br>出ないとだめ。
その他にも対応しないタグが有るようです。

投稿件数オーバー・セキュリティーロック

1日の投稿件数が、ある一定数(?)を超えると、セキュリティーロックが掛かる。
ハッカーが他人のブログをのっとって、ロボットが書き込んでいると判断されるようだ。
手動での各込は出来るが、投稿時にセキュリティ画像に表示される文字の入力が必要になる。
APIではそれが困難である為、エラーが発生する。
セキュリティーロックは翌日になると、解除されるようだが、セキュリティーロックが掛かった日はAPI投稿は中断し、一日に投稿する数を調整する必要がある。
ある一定数(?)というのが分からないが、100投稿もすればセキュリティーロックが掛かるのも当然だと言える。

2013年7月23日火曜日

Visual Studio 2010 多言語対応時、デザイナーでエラーが発生する!

Visual Studio 2010 で作成したWindow Form アプリケーションを、中国語対応することになったので、いろいろとやり方を調べた。

既存ソースで試すのは不安だったので、新規アプリケーションを作成し、FormのLocalizableプロパティを「True」に設定し、Languageプロパティを「中国語」に設定してみた。

あれ?
Form.zh.resxができると思いきや、できないではないか。

で、わかったことは、この時点では自動作成されない。
Form上のコントロールのTextを変更するなど、デフォルトの設定との違いが発生した時点で、自動作成される。
また、違いのある箇所だけ、Form.zh.resxにリソースが追加される。

フー。
無事作成された。

参考サイト:Windowsフォームを多言語対応にするには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/314winmultilang/winmultilang.html


Form上のコントロールはこれでよいか、MessageBoxのメッセージ文字列は直接コード上にあるので、どうすぺきかを調べた。

どう考えてもメッセージ文字列をResourceファイルにしておく必要がありそう。

参考サイト:
C#でのアプリケーション設定の取得・保存方法
http://d.hatena.ne.jp/seraphy/20120708

多言語対応アプリ作成
http://hshimaji.web.fc2.com/mui/project.html


で、上記2点の作業を本番のアプリケーションソースに修正を加える。


順調に作業を進めていたが、ところがどっこい。
デザイナでエラーが発生した。


少々パニック。
ソースを元に戻しても、発生する。


よくよく調べると、Form.Designer.csの中で、Form上のコントロールのプロパティ[ImageKey]に、メッセージ文字列をリソース化した際の文字列の名称を代入しようとして、エラーになっている。

ご丁寧に、すべてのLabelとButtonの[ImageKey]プロパティーに代入しようとしてくれる。

この仕様は不具合なのか良くわからない。

とにかく、このままではコンパイルもできないので、Form.Designer.csの中の[ImageKey]プロパティーに、不要な代入をしようとする記述を削除する。

何とかデザイナー編集が表示されるようになった。


しかし、またデザイナー編集で、コントロール上のテキストを変更すると発生する。
なんだこれは!



2013年7月22日月曜日

ヤンゴン向けコンテナ輸送について

ヤンゴン向けのシッピングサービスを行っている会社を調べてみる。



ジー・ティー・シー エイシア
http://www.gtc-asia.co.jp/

中古車輸出が盛んになって来ているので、その手の情報も提供してくれている。




日本郵船
http://www.nyk.com/

やるやると言っているが、サービスはスタートしたのだろうか。
シンガポールからの振替だとか。


2013年7月20日土曜日

CString をprintf で使ってハマッた

例えば次のような単純なコードのようにCString をprintf()を使って出力しようとする。

CString buf = "abcd";
printf_s("%s\n", buf);


で、出力結果が
a
となってしまって、1文字しか出ない。


この問題、色々なサイトに記事があるが、「printfはCStringにAFXが対応しているぜ。」と書いてあって、なかなか解決方法が見つからなかったが、答えは簡単だった。

printf_s("%S\n", buf);

のように%sを%Sの大文字にしてあげると出た!

あー、1日はまってしまった。
でもこれで「スッキリ」。

2013年7月18日木曜日

最近の扇風機について考える

最近、電器量販店に行くと、新型の扇風機が並んでいる。

ダイソンの羽の無い扇風機のデビューは衝撃的だった。

その影響もあるが、やはり震災の影響で、電力の消費に関心が増えた事によるところは大きいと思う。

ミストが出る扇風機なんかも出てきてる。
なんかすごい進化している気がするね。


これからは、エアコンより扇風機か?

エアコンの原理はフロンガスの気化熱により、冷えるわけですが、このミストも水分が扇風機の前で蒸発するので、よりひんやりと涼しい風が得られるって訳です。

なるほど、良く考えたものだ。


そこでアイデア。

  • レース布のようなものを常時湿らせて、扇風機の風の吸入側に装着して、水分の蒸発を促して涼しい風を得る。
  • 水分の補給はペットボトルでOK。
  • あらゆる扇風機に装着可能。

で、風の温度が0.5度下がります!とか、体感温度で1度下がります!とかで、1000円ぐらいの簡単なものがあれば、そこそこ売れないかな?
特に東南アジアで売れないだろうか。



Renesas FDT.exeをサイレント実行してみる

ファームウェアのアップデートを行う場合、Flash-ROMの書込みプログラムをから実行する事が最近多いのですが、GUIが表示される為、人的操作を介さずに自動的に行いたい場合、少々悩みます。

RenesasのFDT.exeでサイレントインストール(サイレント実行)する為のBATファイルを作成してみました。
BATファイルをゴリゴリ書くのは久々です。
DOS時代を思い出します。おっさんぐらいの年齢だと、バリバリMS-DOSを使っていた時代があるので、BATファイルはお手の物です。

変にプログラムを書くよりは、工数も少なくて済みますし便利です。



FDT_Write.bat


@ECHO OFF
REM このBATファイルの説明
REM
REM RenesasCPUのFLASH-ROMにRS232C経由でプログラムを書込みます。
REM Renesas FDT.exeをWindow表示させずに、サイレントインストール(実行)します。
REM FDT.exeを実行する前にスクリプトファイルを作成します。
REM 作成するスクリプトファイル拡張子:.w4f .fsf .aws .fwp .hsf
REM  FDT_[COM名].* というファイルを作成します。実行後は不要ですので削除しても構いません。
REM
REM 利用条件
REM  Renesas FDTがProgramフォルダにインストールされている事
REM  作業フォルダにはHD64F2378.fcfも格納されている事
REM  対応バージョン FDT4.08
REM  対応CPU HD64F2378
REM
REM BATファイルのパラメータ
REM  %1 Updateフォルダ(作業フォルダ兼MOTファイル格納フォルダ)
REM  %2 COM名
REM  %3 MOTファイル名
REM
REM 実行例
REM  COM3で通信して、カレントディレクトリで実行する場合
REM  &gt;FDT_Write . COM3 NewFarmware.mot
@ECHO ON


@ECHO OFF
REM w4fファイルを作成する。
REM %1 Updateフォルダ
REM %2 COM名
REM %3 MOTファイル名
@ECHO ON
ECHO [FDT Wait For File Config v1.0]&gt; %1\FDT_%2.w4f
ECHO Desc=&gt;&gt; %1\FDT_%2.w4f
ECHO ScriptFile=%1\FDT_%2.fsf&gt;&gt; %1\FDT_%2.w4f
ECHO PollTime=1000&gt;&gt; %1\FDT_%2.w4f
ECHO WaitTime=100&gt;&gt; %1\FDT_%2.w4f
ECHO LogDir=%1\Log\&gt;&gt; %1\FDT_%2.w4f
ECHO LogFile=%%M%%D%%T&gt;&gt; %1\FDT_%2.w4f
ECHO LogAppend=TRUE&gt;&gt; %1\FDT_%2.w4f
ECHO StatusEnable=TRUE&gt;&gt; %1\FDT_%2.w4f
ECHO StatusDir=%1\Log\&gt;&gt; %1\FDT_%2.w4f
ECHO StatusFile=status %2 %%U%%M.txt&gt;&gt; %1\FDT_%2.w4f
ECHO ErrorHandler=abort&gt;&gt; %1\FDT_%2.w4f
ECHO ErrorScript=&gt;&gt; %1\FDT_%2.w4f

@ECHO OFF
REM スクリプトファイルfsfを作成する。
REM %1 Updateフォルダ
REM %2 COM名
REM %3 MOTファイル名
@ECHO ON
ECHO # %date%&gt; %1\FDT_%2.fsf
ECHO # ワークスペースおよび関連するプロジェクトを開く&gt;&gt; %1\FDT_%2.fsf
ECHO workspace %1\FDT_%2.aws&gt;&gt; %1\FDT_%2.fsf
ECHO #&gt;&gt; %1\FDT_%2.fsf
ECHO # デバイスと非接続する(前の状態によっては非接続になっていないことも考えられるので)&gt;&gt;%1\FDT_%2.fsf
ECHO disconnect&gt;&gt; %1\FDT_%2.fsf
ECHO #&gt;&gt;%1\FDT_%2.fsf
ECHO # デバイスと接続する&gt;&gt;%1\FDT_%2.fsf
ECHO connect COM3&gt;&gt;%1\FDT_%2.fsf
ECHO #&gt;&gt;%1\FDT_%2.fsf
ECHO # フラッシュROM にS レコードデータを書き込む&gt;&gt;%1\FDT_%2.fsf
ECHO download %1\%3^|user &gt;&gt;%1\FDT_%2.fsf
ECHO #&gt;&gt;%1\FDT_%2.fsf
ECHO # フラッシュROM のチェックサム計算を行う&gt;&gt;%1\FDT_%2.fsf
ECHO #checksum device&gt;&gt;%1\FDT_%2.fsf
ECHO #&gt;&gt;%1\FDT_%2.fsf
ECHO # 100 ミリ秒間、スクリプトファイルの実行を中断する&gt;&gt;%1\FDT_%2.fsf
ECHO pause 100&gt;&gt;%1\FDT_%2.fsf
ECHO #&gt;&gt;%1\FDT_%2.fsf
ECHO # デバイスと非接続する&gt;&gt;%1\FDT_%2.fsf
ECHO disconnect&gt;&gt;%1\FDT_%2.fsf
ECHO #&gt;&gt;%1\FDT_%2.fsf
ECHO # スクリプトファイルを削除する&gt;&gt;%1\FDT_%2.fsf
ECHO #delete $script&gt;&gt;%1\FDT_%2.fsf
ECHO #&gt;&gt;%1\FDT_%2.fsf
ECHO # スクリプト処理を中止し、FDTを終了する&gt;&gt;%1\FDT_%2.fsf
ECHO exit&gt;&gt;%1\FDT_%2.fsf

@ECHO OFF
REM WORKSPACEファイルAWSを作成する。
REM %1 Updateフォルダ
REM %2 COM名
@ECHO ON
ECHO [HIMDBVersion]&gt;%1\FDT_%2.aws
ECHO 2.0&gt;&gt;%1\FDT_%2.aws
ECHO [DATABASE_VERSION]&gt;&gt;%1\FDT_%2.aws
ECHO "5.0" &gt;&gt;%1\FDT_%2.aws
ECHO [WORKSPACE_DETAILS]&gt;&gt;%1\FDT_%2.aws
ECHO "%2" "%1" "%1\FDT_%2.aws" "All Flash Devices" "" &gt;&gt;%1\FDT_%2.aws
ECHO [SHARED_WORKSPACE_CONTROL_STATUS]&gt;&gt;%1\FDT_%2.aws
ECHO "" "" "" &gt;&gt;%1\FDT_%2.aws
ECHO "" "" "" &gt;&gt;%1\FDT_%2.aws
ECHO [PROJECTS]&gt;&gt;%1\FDT_%2.aws
ECHO "%2" "%1" "%1\FDT_%2.FWP" 0 &gt;&gt;%1\FDT_%2.aws
ECHO [INFORMATION]&gt;&gt;%1\FDT_%2.aws
ECHO "No workspace information available" &gt;&gt;%1\FDT_%2.aws
ECHO [SCRAP]&gt;&gt;%1\FDT_%2.aws
ECHO [PROJECT_DEPENDENCY]&gt;&gt;%1\FDT_%2.aws
ECHO [WORKSPACE_PROPERTIES]&gt;&gt;%1\FDT_%2.aws
ECHO [VCS]&gt;&gt;%1\FDT_%2.aws
ECHO "" "" "" 0 &gt;&gt;%1\FDT_%2.aws
ECHO [VCS_PROJECT]&gt;&gt;%1\FDT_%2.aws
ECHO [HELP_FILES]&gt;&gt;%1\FDT_%2.aws
ECHO [GENERAL_DATA_PROJECT]&gt;&gt;%1\FDT_%2.aws
ECHO [SYSMENUTOOLS]&gt;&gt;%1\FDT_%2.aws
ECHO [USERMENUTOOLS]&gt;&gt;%1\FDT_%2.aws
ECHO [CUSTOMPLACEHOLDERS]&gt;&gt;%1\FDT_%2.aws
ECHO [MAKEFILE_BUILD_INFO]&gt;&gt;%1\FDT_%2.aws
ECHO "$(WORKSPDIR)\make\$(PROJECTNAME).mak" "" 0 0&gt;&gt;%1\FDT_%2.aws
ECHO [VD_CONFIGURATION_OPTIONS]&gt;&gt;%1\FDT_%2.aws
ECHO [VD_CONFIGURATIONS]&gt;&gt;%1\FDT_%2.aws
ECHO [END]&gt;&gt;%1\FDT_%2.aws

@ECHO OFF
REM PROJECTSファイルFWPを作成する。
REM %1 Updateフォルダ
REM %2 COM名
REM %3 MOTファイル名
@ECHO ON
ECHO [HIMDBVersion]&gt;%1\FDT_%2.fwp
ECHO 2.0&gt;&gt;%1\FDT_%2.fwp
ECHO [DATABASE_VERSION]&gt;&gt;%1\FDT_%2.fwp
ECHO "2.5" &gt;&gt;%1\FDT_%2.fwp
ECHO [PROJECT_DETAILS]&gt;&gt;%1\FDT_%2.fwp
ECHO "%2" "%1" "%1\%1\FDT_%2.fwp" "All Flash Devices" "" "FDT Project Generator" &gt;&gt;%1\FDT_%2.fwp
ECHO [INFORMATION]&gt;&gt;%1\FDT_%2.fwp
ECHO "No project information available"&gt;&gt;%1\FDT_%2.fwp
ECHO [TOOL_CHAIN]&gt;&gt;%1\FDT_%2.fwp
ECHO "" "" &gt;&gt;%1\FDT_%2.fwp
ECHO [CONFIGURATIONS]&gt;&gt;%1\FDT_%2.fwp
ECHO "Default" "%1\Default" &gt;&gt;%1\FDT_%2.fwp
ECHO [BUILD_PHASES]&gt;&gt;%1\FDT_%2.fwp
ECHO [DEFINITION_PARSERS]&gt;&gt;%1\FDT_%2.fwp
ECHO [TOOL_ENVIRONMENT]&gt;&gt;%1\FDT_%2.fwp
ECHO [EXTENSIONS]&gt;&gt;%1\FDT_%2.fwp
ECHO "FDT DDI Files" "DDI" &gt;&gt;%1\FDT_%2.fwp
ECHO "S-Record Files" "MOT" &gt;&gt;%1\FDT_%2.fwp
ECHO "S2 Files" "S2" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT Binary Files" "CDE" &gt;&gt;%1\FDT_%2.fwp
ECHO "Binary Files" "BIN" &gt;&gt;%1\FDT_%2.fwp
ECHO "IAR A20 Files" "A20" &gt;&gt;%1\FDT_%2.fwp
ECHO "IAR A37 Files" "A37" &gt;&gt;%1\FDT_%2.fwp
ECHO "REC Files" "REC" &gt;&gt;%1\FDT_%2.fwp
ECHO [FILE_GROUPS]&gt;&gt;%1\FDT_%2.fwp
ECHO "FDT DDI Files" "BIN" "EDITOR" "" &gt;&gt;%1\FDT_%2.fwp
ECHO "S-Record Files" "BIN" "HEX_EDITOR" "" &gt;&gt;%1\FDT_%2.fwp
ECHO "S2 Files" "BIN" "HEX_EDITOR" "" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT Binary Files" "BIN" "HEX_EDITOR" "" &gt;&gt;%1\FDT_%2.fwp
ECHO "Binary Files" "BIN" "HEX_EDITOR" "" &gt;&gt;%1\FDT_%2.fwp
ECHO "IAR A20 Files" "BIN" "HEX_EDITOR" "" &gt;&gt;%1\FDT_%2.fwp
ECHO "IAR A37 Files" "BIN" "HEX_EDITOR" "" &gt;&gt;%1\FDT_%2.fwp
ECHO "REC Files" "BIN" "HEX_EDITOR" "" &gt;&gt;%1\FDT_%2.fwp
ECHO [ASSOCIATED_APPLICATIONS]&gt;&gt;%1\FDT_%2.fwp
ECHO [TOOLCHAIN_PHASE]&gt;&gt;%1\FDT_%2.fwp
ECHO [UTILITY_PHASE]&gt;&gt;%1\FDT_%2.fwp
ECHO [CUSTOM_PHASES]&gt;&gt;%1\FDT_%2.fwp
ECHO [CUSTOM_PHASE_INPUT_GROUP]&gt;&gt;%1\FDT_%2.fwp
ECHO [BUILD_ORDER]&gt;&gt;%1\FDT_%2.fwp
ECHO [BUILD_PHASE_DETAILS]&gt;&gt;%1\FDT_%2.fwp
ECHO [SCRAP]&gt;&gt;%1\FDT_%2.fwp
ECHO "Project Generator Setup File" "" &gt;&gt;%1\FDT_%2.fwp
ECHO [MAPPINGS]&gt;&gt;%1\FDT_%2.fwp
ECHO [PROJECT_FILES]&gt;&gt;%1\FDT_%2.fwp
ECHO "%1\%3" "User" "S-Record Files" 0 &gt;&gt;%1\FDT_%2.fwp
ECHO [FOLDER]&gt;&gt;%1\FDT_%2.fwp
ECHO "S-Record Files" "S-Record Files" &gt;&gt;%1\FDT_%2.fwp
ECHO [GENERAL_DATA_PROJECT]&gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_BlockProtectConnect" "1" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_DoSecurityProtection" "Prompt" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_Comments" "" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_BaseDevice" "Generic BOOT Device" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_DoSecurityProtectionLevel" "00" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_ResetPinLowOnDisconnect" "FALSE" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_UseDefaultBaudRate" "FALSE" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_Interface" "Direct Connection" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_McuId" "ffff" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_ResetOnDisconnect" "No" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_ConnectionResetSuppression" "FFFFFFFF" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_ResetPinOutputs" "FFFFFFFF" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_ResetPinSettings" "FFFFFFFF" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_UPMPinSettings" "FFFFFFFF" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_KernelResident" "FALSE" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_KernelPath" "%1" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_UserPinSettings" "FFFFFFFF" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_UserPinOutputs" "FFFFFFFF" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_ClockMode" "0" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_CKM" "1" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_InternalClock" "FALSE" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_SerNumConfigString" "" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_BlockProtectDisconnect" "1" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_UseInternalKernel" "TRUE" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_BlockLockDisconnect" "1" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_BlockLockConnect" "1" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_Port" "%2" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_CKP" "-127" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_MessageLevel" "1" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_BootMode" "TRUE" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_FileOverRomSizeOption" "Yes" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_BaudRate" "115200" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_IDWriteSecurityLevel" "1" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_IDWriteEnable" "TRUE" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_PinOutputs" "FFFFFFFF" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_ErasureOfUserBootArea" "No" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_PinSettings" "FFFFFFFF" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_Protocol" "C" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_Protection" "0" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_ClockType" "" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_ClockSync" "00000000" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_ReinterrogateGenericDevice" "No" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_IDWriteDisconnect" "1" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_DoReadbackVerification" "No" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_Frequency" "2500.0000" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_AutoConnect" "0" &gt;&gt;%1\FDT_%2.fwp
ECHO "FDT_Device" "HD64F2378" &gt;&gt;%1\FDT_%2.fwp
ECHO [ON_DEMAND_COMPONENTS_LOADED]&gt;&gt;%1\FDT_%2.fwp
ECHO [SYNC_SESSION_NAMES]&gt;&gt;%1\FDT_%2.fwp
ECHO [SESSIONS]&gt;&gt;%1\FDT_%2.fwp
ECHO "Default" "Default.hsf" 0 &gt;&gt;%1\FDT_%2.fwp
ECHO [GENERAL_DATA_SESSION_Default]&gt;&gt;%1\FDT_%2.fwp
ECHO [OPTIONS_Default]&gt;&gt;%1\FDT_%2.fwp
ECHO "" 0 &gt;&gt;%1\FDT_%2.fwp
ECHO [SESSION_DATA_CONFIGURATION_SESSION_Default_Default]&gt;&gt;%1\FDT_%2.fwp
ECHO "MEMORY_MAPPING_OPTIONS" "" &gt;&gt;%1\FDT_%2.fwp
ECHO [EXT_DEBUGGER_INFO] &gt;&gt;%1\FDT_%2.fwp
ECHO 0 "" "" "" ""  &gt;&gt;%1\FDT_%2.fwp
ECHO [EXCLUDED_FILES_Default] &gt;&gt;%1\FDT_%2.fwp
ECHO [LINKAGE_ORDER_Default] &gt;&gt;%1\FDT_%2.fwp
ECHO [GENERAL_DATA_CONFIGURATION_Default] &gt;&gt;%1\FDT_%2.fwp
ECHO [GENERAL_DATA_CONFIGURATION_SESSION_Default_Default] &gt;&gt;%1\FDT_%2.fwp
ECHO [END] &gt;&gt;%1\FDT_%2.fwp

@ECHO OFF
REM SESSIONファイルHSFを作成する。
REM %1 Updateフォルダ
REM %2 COM名
REM %3 MOTファイル名
@ECHO ON
ECHO [HIMDBVersion]&gt;%1\Default.hsf
ECHO 2.0&gt;&gt;%1\Default.hsf
ECHO [DATABASE_VERSION]&gt;&gt;%1\Default.hsf
ECHO "1.3" &gt;&gt;%1\Default.hsf
ECHO [SESSION_DETAILS]&gt;&gt;%1\Default.hsf
ECHO "" &gt;&gt;%1\Default.hsf
ECHO [INFORMATION]&gt;&gt;%1\Default.hsf
ECHO "" &gt;&gt;%1\Default.hsf
ECHO [GENERAL_DATA]&gt;&gt;%1\Default.hsf
ECHO "{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineWndInstanceKey0" "{WK_00000001_CmdLine}" &gt;&gt;%1\Default.hsf
ECHO "{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlViews" "1" &gt;&gt;%1\Default.hsf
ECHO "{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlWindowProperties" "17" &gt;&gt;%1\Default.hsf
ECHO "{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlBatchFileName" "" &gt;&gt;%1\Default.hsf
ECHO "{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlLogFileName" "" &gt;&gt;%1\Default.hsf
ECHO [WINDOW_POSITION_STATE_DATA_VD1]&gt;&gt;%1\Default.hsf
ECHO [WINDOW_POSITION_STATE_DATA_VD2]&gt;&gt;%1\Default.hsf
ECHO [WINDOW_POSITION_STATE_DATA_VD3]&gt;&gt;%1\Default.hsf
ECHO [WINDOW_POSITION_STATE_DATA_VD4]&gt;&gt;%1\Default.hsf
ECHO [TARGET_NAME]&gt;&gt;%1\Default.hsf
ECHO "" &gt;&gt;%1\Default.hsf
ECHO [DEBUGGER_OPTIONS]&gt;&gt;%1\Default.hsf
ECHO "" &gt;&gt;%1\Default.hsf
ECHO [DOWNLOAD_MODULES]&gt;&gt;%1\Default.hsf
ECHO [CONNECT_ON_GO]&gt;&gt;%1\Default.hsf
ECHO "FALSE" &gt;&gt;%1\Default.hsf
ECHO [DOWNLOAD_MODULES_AFTER_BUILD]&gt;&gt;%1\Default.hsf
ECHO "TRUE" &gt;&gt;%1\Default.hsf
ECHO [COMMAND_FILES]&gt;&gt;%1\Default.hsf
ECHO [DEFAULT_DEBUG_FORMAT]&gt;&gt;%1\Default.hsf
ECHO "" &gt;&gt;%1\Default.hsf
ECHO [FLASH_DETAILS]&gt;&gt;%1\Default.hsf
ECHO "2500.000000" 1 -127 "C" 0 "%2" 115200 0 "HD64F2378" 1 0 0 0 1 0 0 "%1\" "" "" "" "" &gt;&gt;%1\Default.hsf
ECHO [BREAKPOINTS]&gt;&gt;%1\Default.hsf
ECHO [END]&gt;&gt;%1\Default.hsf

@ECHO OFF
REM FDT.exeを実行する。
@ECHO ON
start /d "%ProgramFiles%\Renesas\FDT4.08" /b FDT.exe /DISCRETESTARTUP "w4fRun \"%1\FDT_%2.w4f""


HD64F2378.fcf


[Header]
Description=Flash Development Toolkit Configuration File (Generic Generation)
File Type=1.2
[Device Info]
Protocol=2 ;Protocol C: 0.18um devices.
Device Code=0a01
Product Code=HD64F2378
BOOT Mode Auto Erase=True
SupportsIDWrite=FALSE
EVB Clock MHz=8.75
FLASH ROM Size=524288
User Boot Area Size=8192
Memory Area Count=2
Erase Block Count=16
SupportsLocking=FALSE
[Kernel Info]
Base Device=Generic BOOT Device
Compiler=GENERIC
Short Base Device Name=Generic BOOT Device
Compiler Version=GENERIC
Kernel Version=GENERIC
Protocol=C
USBDirect=No
E8Direct=No
E8aDirect=No
E1Direct=No
E20Direct=No
[Valid Clock Modes]
Clock Modes=0
[Clock Mode 0]
CKM=1|2|4
CKP=
Crystal Frequency Range=8.00|35.00
[Memory Area 0]
Block Name=UA0
Start Address=0
Start (Hex)=0x00000000
Block Size=524288
Size (Hex)=0x00080000
Area Type=User Flash
Overlay=0
[Memory Area 1]
Block Name=UB0
Start Address=0
Start (Hex)=0x00000000
Block Size=8192
Size (Hex)=0x00002000
Area Type=User Boot Flash
Overlay=1
[Erase Block 0]
Block Name=EB0
Start Address=0
Start (Hex)=0x00000000
Block Size=4096
Size (Hex)=0x00001000
EBR0=1
EBR1=0
EBR2=0
Overlay=0
[Erase Block 1]
Block Name=EB1
Start Address=4096
Start (Hex)=0x00001000
Block Size=4096
Size (Hex)=0x00001000
EBR0=2
EBR1=0
EBR2=0
Overlay=0
[Erase Block 2]
Block Name=EB2
Start Address=8192
Start (Hex)=0x00002000
Block Size=4096
Size (Hex)=0x00001000
EBR0=4
EBR1=0
EBR2=0
Overlay=0
[Erase Block 3]
Block Name=EB3
Start Address=12288
Start (Hex)=0x00003000
Block Size=4096
Size (Hex)=0x00001000
EBR0=8
EBR1=0
EBR2=0
Overlay=0
[Erase Block 4]
Block Name=EB4
Start Address=16384
Start (Hex)=0x00004000
Block Size=4096
Size (Hex)=0x00001000
EBR0=16
EBR1=0
EBR2=0
Overlay=0
[Erase Block 5]
Block Name=EB5
Start Address=20480
Start (Hex)=0x00005000
Block Size=4096
Size (Hex)=0x00001000
EBR0=32
EBR1=0
EBR2=0
Overlay=0
[Erase Block 6]
Block Name=EB6
Start Address=24576
Start (Hex)=0x00006000
Block Size=4096
Size (Hex)=0x00001000
EBR0=64
EBR1=0
EBR2=0
Overlay=0
[Erase Block 7]
Block Name=EB7
Start Address=28672
Start (Hex)=0x00007000
Block Size=4096
Size (Hex)=0x00001000
EBR0=128
EBR1=0
EBR2=0
Overlay=0
[Erase Block 8]
Block Name=EB8
Start Address=32768
Start (Hex)=0x00008000
Block Size=32768
Size (Hex)=0x00008000
EBR0=0
EBR1=1
EBR2=0
Overlay=0
[Erase Block 9]
Block Name=EB9
Start Address=65536
Start (Hex)=0x00010000
Block Size=65536
Size (Hex)=0x00010000
EBR0=0
EBR1=2
EBR2=0
Overlay=0
[Erase Block 10]
Block Name=EB10
Start Address=131072
Start (Hex)=0x00020000
Block Size=65536
Size (Hex)=0x00010000
EBR0=0
EBR1=4
EBR2=0
Overlay=0
[Erase Block 11]
Block Name=EB11
Start Address=196608
Start (Hex)=0x00030000
Block Size=65536
Size (Hex)=0x00010000
EBR0=0
EBR1=8
EBR2=0
Overlay=0
[Erase Block 12]
Block Name=EB12
Start Address=262144
Start (Hex)=0x00040000
Block Size=65536
Size (Hex)=0x00010000
EBR0=0
EBR1=16
EBR2=0
Overlay=0
[Erase Block 13]
Block Name=EB13
Start Address=327680
Start (Hex)=0x00050000
Block Size=65536
Size (Hex)=0x00010000
EBR0=0
EBR1=32
EBR2=0
Overlay=0
[Erase Block 14]
Block Name=EB14
Start Address=393216
Start (Hex)=0x00060000
Block Size=65536
Size (Hex)=0x00010000
EBR0=0
EBR1=64
EBR2=0
Overlay=0
[Erase Block 15]
Block Name=EB15
Start Address=458752
Start (Hex)=0x00070000
Block Size=65536
Size (Hex)=0x00010000
EBR0=0
EBR1=128
EBR2=0
Overlay=0
[Checksum]
Checksum=


Visual stuido VC でのシェル実行



void BatchFileExecute(TCHAR CurrentDirectory
 , TCHAR ComName, TCHAR motFileName)
{
 TCHAR szBuf[_MAX_PATH];
 swprintf(szBuf, sizeof(szBuf), _T("FTD_Witer.bat %s %s %s")
  , CurrentDirectory, ComName, motFileName);
 ShellExecute(NULL, _T("open"), szBuf, NULL, NULL, SW_SHOWDEFAULT);
}


2013年7月17日水曜日

香港経由でヤンゴンに渡航するには


香港に用事があるので、香港経由でヤンゴンに行く方法を検討してみる。

香港-ヤンゴン間では、香港ドラゴン航空、KA250(香港-ヤンゴン)、KA251(ヤンゴン-香港)便を利用するしかなさそう。


KA250の時刻表

  • 月,水,金,日 21:20 Hong Kong (HKG) 1 23:35 Yangon (RGN) 
  • KA 250 Non-stop Airbus A321 (321) 3:45 Effective 2013-10-27 through 2014-03-28


  • 月,水,金,日 21:45 Hong Kong (HKG) 1 23:30 Yangon (RGN) 
  • KA 250 Non-stop Airbus A321 (321) 3:15 Valid until 2013-10-25


  • 月,水,金,日 21:45 Hong Kong (HKG) 1 23:30 Yangon (RGN) 
  • KA 250 Non-stop Airbus A321 (321) 3:15 Effective from 2014-03-30

KA251の時刻表

  • 月,火,木,土 01:00 Yangon (RGN) 06:00 Hong Kong (HKG) 1
  • KA 251 Non-stop Airbus A321 (321) 3:30 Effective 2013-10-28 through 2014-03-29
  • 月,火,木,土 01:10 Yangon (RGN) 06:00 Hong Kong (HKG) 1
  • KA 251 Non-stop Airbus A321 (321) 3:20 Valid until 2013-10-26
  • 月,火,木,土 01:10 Yangon (RGN) 06:00 Hong Kong (HKG) 1
  • KA 251 Non-stop Airbus A321 (321) 3:20 Effective from 2014-03-313-30

成田-香港の時刻表

便名曜日成田発香港着所要時間備考 コードシェア便等
CX509毎日09:4013:254時間45分JL7041
CX501毎日10:5514:504時間55分JL7043
CX521毎日16:5520:454時間50分JL7047

宿泊しないたらCX509かCX501が良いか。5、6時間は仕事が出来そう。
前泊するなら、先に香港で用事を済ませるなら、一泊しても良いかも。

2013年7月13日土曜日

ミャンマー投資について考えてみる

昨今、日本の閣僚もミャンマーに赴き、ODA出資予算を決めるなど、ミャンマーへの投資に関して関心が増している感じがします。 

投資と言えば、不動産か株式になるかと思いますが、そのどちらも現在は投資し難い情況。

  • 不動産は外国人が直接買えない。
  • 株式市場は規模が小さく、ほとんど動きが無い。 

などが理由になります。 

しかしながら、そのどちらも今後は開放的な方向に向かうのは間違いないようです。

株式市場は情報インフラ整備に日本の証券会社が協力して推進しているようです。 

不動産市場は外国人による売買が可能になる、一部規制緩和の流れがあるようです。 

リスクとインカムについては、「ミャンマー不動産投資」 が参考になるかと思います。



現在の日本の当時状況を鑑みると、直接投資、つまり生産拠点とか、販売店づくり、などの事業投資が先行してきました。

そこに、スモールビジネスのチャンスとして、「日本人相手のミャンマービジネス」というのが盛んになります。
日本人ビジネスパーソン旅行者のための、ホテルやらレンタカーやら、事務所開設コンサルティングやらです。

これはこれで良いビジネススタンスだと思います。
現地の消費者向けに物を売るよりは、日本人相手にサービスを売った方が、利益率は高いのだと思います。

今後、直接投資として、魅力的な産業としては

  • ソフトウェア
  • 自動車関連
  • 食品加工

などではないかと考えます。

ソフトウェア産業は成果物の輸送・ロジスティックがないので、収益性が良いのと、IT人材の豊富さと給与の安さ、日本語の相性、初期投資の低さ。などがあげられるようです。
ソフトウェア業界では「オフショア開発」と呼びますが、ミャンマー国外からの仕事を請け負う事業が先行する事になります。
ミャンマー国内の情報サービスは増していく事でしょうし、今後の伸びが期待できます。
ただ、現在は情報・電力インフラの整備の点で、苦労をするのではないかと思われます。

自動車関連産業は、「日本車がすき」なお国柄という事もあり、日本の中古車の販売は盛んなようです。だた猫も杓子も感があり、中古車販売向けの輸出入はもはや供給過多な情況と思われます。
従って、自動車の普及率は非常に高いと考えられます。
自動車のパーツが伸びるのではないかと考えられます。
特に日本車のパーツの卸売ネットワークを構築できると、将来性があると思います。
イエローハット、オートバックスのような店舗の発展性が期待できます。

食品加工産業は、経済・ロジスティック発展と食文化の多様化が進んだ情況になれば、日本食向け食品加工は増してくると考えらます。少々長い目で見た方が良いでしょう。



2013年7月11日木曜日

Google API をC# で使うための .NET library for the Google Data APIをインストールしてみる

Google API は .NET 用Client Libraryが用意されている。

.NET Client Library Developer's Guide
https://developers.google.com/gdata/client-cs?hl=ja#Tutorial

ダウンロードサイトにアクセスします。



現在、2.2.0が最新のようです。
Google_Data_API_Setup_2.2.0.0.msiをダウンロードしてみます。

インストールしてみます。

Next>で進んでインストールします。

無事インストールが完了しました。










IIS 500 エラー 内部サーバーエラーを調査する

前日は、IISの500エラー詳細について調査するために、ログファイルのフィールド追加をしました。
その結果サブエラーコードがログファイルに記録されました。

500.0 - モジュールまたは ISAPI のエラーが発生しました。

のサブエラーコードが記録されました。

以下を参考にさせて頂きました。



IIS 上で動作する Web アプリケーションの応答が停止する場合やエラーになる場合にトラブルシューティングする方法

IIS や Web アプリケーションの応答が停止または遅延する現象、プロセスが異常終了する現象、エラーが発生する現象などは "ハングアップ" と "クラッシュ" に分類することができます。
  • ハングアップ : IIS や Web アプリケーションの応答が停止する、または正常時に比べて遅延する。
  • クラッシュ : IIS や Web アプリケーションでエラーが発生する、またはアプリケーションの実行プロセスが異常終了する。
ハングアップ

次のいずれか、またはいくつかの傾向が見られる場合、発生している問題がハングアップであると判断することができます。
  • ブラウザに要求したページが何も表示されない。
  • 正常時に比べて要求したページの表示に時間がかかる。
  • 正常時に比べて要求したページの表示に時間がかかり、かつ、ブラウザにタイム アウトのエラーが表示されたり、IIS アクセス ログに ASP_0113 エラーが記録される。
  • 正常時に比べて要求したページの表示に時間がかかり、かつ、HTTPERR ログに Connection_Dropped が記録される。
  • パフォーマンス モニタの Web Service オブジェクトの Current Connections カウンタや Active Server Pages オブジェクトの Request Queued カウンタが正常時に比べて高い値のまま推移し、ASP アプリケーションに対する HTTP 要求の応答が返らない。
  • IIS Admin Service や World Wide Web Publishing Service の停止に時間がかかり、サービスが正常に停止できない。
  • Web サーバーのシステム イベント ログに以下のエラーが記録される。
    イベントの種類 : 警告
    イベント ソース : W3SVC
    イベント カテゴリ : なし
    イベント ID : 1010
    説明 :
    アプリケーション プール 'DefaultAppPool' を提供しているプロセスが ping の応答に失敗しました。プロセス ID は 'XXX' です。
  • アプリケーション プールのリサイクルが終了せず、Web サーバーのシステム イベント ログに以下のエラーが記録される。
    イベントの種類 : 警告
    イベント ソース : W3SVC
    イベント カテゴリ : なし
    イベント ID : 1013
    説明 :
    アプリケーション プール 'DefaultAppPool' を提供しているプロセスはシャットダウンの最中に時間制限を超えました。プロセス id は 'XXX' でした。
クラッシュ

次のいずれか、またはいくつかの傾向が見られる場合、発生している問題がクラッシュであると判断することができます。
  • ブラウザに HTTP 500 内部サーバー エラーが表示される。
  • IIS アクセス ログの sc-status に 500 が記録される。
  • IIS アクセス ログに ASP_0115 エラーが記録される。
  • Web サーバーのシステム イベント ログに以下のエラーが記録される。
    イベントの種類 : 警告
    イベント ソース : W3SVC
    イベント カテゴリ : なし
    イベント ID : 1011
    説明 :
    アプリケーション プール 'DefaultAppPool' を提供しているプロセスは、World Wide Web 発行サービスで致命的な通信エラーを検出しました。プロセス id は 'XXX' でした。データ フィールドにはエラー番号が含まれています。
    イベントの種類 : エラー
    イベント ソース : W3SVC
    イベント カテゴリ : なし
    イベント ID : 1039
    説明 :
    アプリケーション プール 'DefaultAppPool' を提供しているプロセスがエラーを報告しました。プロセス ID は 'XXX' でした。データ フィールドにはエラー番号が含まれています。
    イベントの種類 : エラー
    イベント ソース : W3SVC
    イベント カテゴリ : なし
    イベント ID : 1017
    説明 :
    ワーカー プロセスの失敗により World Wide Web 発行サービスが終了しました。
    イベントの種類 : エラー
    イベント ソース : W3SVC
    イベント カテゴリ : なし
    イベント ID : 1005
    説明 :
    エラーにより、World Wide Web 発行サービスは終了します。データ フィールドにはエラー番号が含まれています。
  • Web サーバーのアプリケーション イベント ログに以下のエラーが記録される。
    イベントの種類 : エラー
    イベント ソース : Active Server Pages
    イベント カテゴリ : なし
    イベント ID : 5
    説明 :
    エラー: スクリプト エンジンの例外が発生しました. ScriptEngine が例外 'E06D7363' ('IScriptDispatchEx::InvokeEx()' 内の 'CScriptingNamespace::InvokeEx()' で) の発生原因です。


なるほど。
イベントログを確認してみたところ、「アプリケーション プール 'DefaultAppPool' を提供しているプロセスはシャットダウンの最中に時間制限を超えました。プロセス id は 'xxxxx' でした。」が記録されていました。

これが起因しているのかもしれません。

対処法について調査してみると、以下のサイトが詳しいようです。




ASP.NET アプリケーションから Web サービス要求を行うと、競合、パフォーマンスの低下、およびデッドロックが発生する

解決方法として「Machine.config ファイル内の以下のパラメーターを調整します」とあります。


現在利用しているサーバーのプロセッサは4個なので、「推奨事項」にあるサンプル設定内容をMachine.configに記述してみます。


<system.web> <processModel maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50"/> <httpRuntime minFreeThreads="704" minLocalRequestFreeThreads="608"/> </system.web>
<system.net> <connectionManagement> <add address="[ProvideIPHere]" maxconnection="96"/> </connectionManagement> </system.net>


2013年7月10日水曜日

IISのエラー詳細について調査してみる

IISに限ったことではないが、HTTPサーバーの多くにログ記憶機能が実装されている。
HTTPサーバー内部でエラーが発生した場合の原因調査には必須な機能ではないでしょうか。

以下はIIS7のIISマネージャメニューのログ記録設定画面。


形式はW3Cが一般的、というかデフォルトです。
ディレクトリに指定されたところにログファイルが作成されます。
サイトの番号順に「W3SVC」というサブフォルダの中に、「u_ex######.log」(#は日付)という名前のログファイルが作成されます。
HTTPクライアントからのリクエストに対して、1行ログが記録されます。
正常だとHTTPサーバーは200を返して終了します。

HTTPサーバー 500だと「サーバー内部エラー」ですが、それだとざっくり過ぎて詳細がわかりません。
詳細を知りたい場合は、「フィールドの選択」で、「プロトコルの副状態」を追加しておきます。


  • [日付 (date)]: 要求が発生した日付です。
  • [時間 (time)]: 要求が発生した時刻 (協定世界時 (UTC)) です。
  • [クライアント IP アドレス (c-ip)]: 要求を発行したクライアントの IP アドレスです。
  • [ユーザー名 (cs-username)]: サーバーにアクセスした認証済みユーザーの名前です。 匿名ユーザーはハイフンで示されます。
  • [サービス名 ( s-sitename )]: 要求を処理したサイト インスタンス番号です。
  • [サーバー名 (s-computername)]: ログ ファイルのエントリが生成されたサーバーの名前です。
  • [サーバー IP アドレス (s-ip)]: ログ ファイル エントリが生成されたサーバーの IP アドレスです。
  • [サーバー ポート (s-port)]: サービスに対して構成されているサーバー ポート番号です。
  • [メソッド (cs-method)]: 要求された操作 (GET メソッドなど) です。
  • [URI ステム (cs-uri-stem)]: 操作の Universal Resource Identifier (ターゲット) です。
  • [URI クエリ (cs-uri-query)]: クライアントが実行しようとしていたクエリです (存在する場合)。 Universal Resource Identifier (URI) クエリは、動的なページでのみ必要です。
  • [プロトコルの状態 (sc-status)]: HTTP または FTP 状態コードです。
  • [プロトコルの副状態 ( sc-substatus )]: HTTP または FTP 副状態コードです。
  • [Win32 の状態 (sc-win32-status)]: Windows 状態コードです。
  • [送信バイト数 (sc-bytes)]: サーバーが送信したバイト数です。
  • [受信バイト数 (cs-bytes)]: サーバーが受信したバイト数です。
  • [所要時間 (time-taken)]: 操作にかかった時間 (ミリ秒単位) です。
  • [プロトコル バージョン (cs-version)]: クライアントが使用したプロトコルのバージョン (HTTP または FTP) です。
  • [ホスト (cs-host)]: ホスト名です (存在する場合)。
  • [ユーザー エージェント (cs(UserAgent))]: クライアントが使用したブラウザーの種類です。
  • [Cookie (cs(Cookie))]: 送受信された Cookie の内容です (存在する場合)。
  • [参照者 (cs(Referer))]: ユーザーが直前にアクセスしたサイトです。 このサイトから現在のサイトにリンクされていました。



  • エラーの詳細コートと対処法については以下のMicrosoft サポートサイトを参考にします。

    IIS 7.0、IIS 7.5、および IIS 8.0 の HTTP 状態コード




    今回は、500エラーだけ、集中的に調査したいので、一覧を記載しておきます。


    500.0 - モジュールまたは ISAPI のエラーが発生しました。
    500.11 - Web サーバーでアプリケーションがシャットダウンしています。
    500.12 - Web サーバーでアプリケーションが再起動のためビジー状態になっています。
    500.13 - Web サーバーが非常にビジーです。
    500.15 - GLOBAL.ASA に対する直接要求は許可されていません。
    500.19 - 構成データが無効です。
    500.21 - モジュールが認識されません。
    500.22 - ASP.NET httpModule 構成は、マネージ パイプライン モードでは適用されません。
    500.23 - ASP.NET httpHandler 構成は、マネージ パイプライン モードでは適用されません。
    500.24 - ASP.NET 偽装の構成は、マネージ パイプライン モードでは適用されません。
    500.50 - RQ_BEGIN_REQUEST 通知の処理中に再書き込みエラーが発生しました。構成または受信規則の実行エラーが発生しました。
    注: ここでは、受信規則および送信規則の両方について、配布された規則の構成が読み込まれます。
    500.51 - GL_PRE_BEGIN_REQUEST 通知の処理中に再書き込みエラーが発生しました。グローバル構成またはグローバル規則の実行エラーが発生しました。
    注: ここでは、グローバルな規則の構成が読み込まれます。
    500.52 - RQ_SEND_RESPONSE 通知の処理中に再書き込みエラーが発生しました。送信規則の実行エラーが発生しました。
    500.53 - RQ_RELEASE_REQUEST_STATE 通知の処理中に再書き込みエラーが発生しました。送信規則の実行エラーが発生しました。この規則は、出力ユーザー キャッシュが更新される前に実行されるよう構成されています。
    500.100 - 内部 ASP エラー。8.0 の HTTP 状態コード

    2013年7月9日火曜日

    Amazon APIを C# プログラムで呼び出してみる

    C#を使って、サクサクとアマゾンの商品情報を取得してみようと思い調査を開始。


    まず、Amazon アソシエイト(アフェリエイト)のアカウントを作成します。
    https://affiliate.amazon.co.jp/
    もちろん料金は掛かりません。


    Amazonアソシエイトの登録が完了すると、アソシエイトIDが発行されます。


    次に、クラウド業界を独走する、あのAmazon Web Service、通称ASWのアカウントを取得します。
    http://aws.amazon.com/jp/
    無料のアカウント(Free)に参加します。
    一応、クレジットカードの情報入力がありますが、有料サービスを使わない、限り請求はありません。
    アクセスキー、シークレットキーを取得します。
    アカウントサービスにアクセスします。
    https://affiliate.amazon.co.jp/gp/advertising/api/detail/your-account.html
    「アクセスキー情報」の「こちらのリンク」をクリックします。
    アカウント画面が表示されたら、アクセス証明書を表示させます。
    アクセス証明書のユーザーアクセスキー一覧の「新しいアクセスキーを作成する」をクリックして、アクセスキーを作成します。

    アクセスキーが作成されると、ユーザーアクセスキー一覧に追加されています。
    セキュリティーキーは「表示」をクリックすると、別ウィンドウで表示されます。
    以上でAmazon APIのアクセス必要な
    Access Key, Secret Key, アソシエイトIDをそろえることができました。


    2013年7月8日月曜日

    Blogger でソースコードを見易く表示する

    Blogger でソースコードを見易く表示する方法を探してみたところ、以下のサイトが参考になりまいた。
    ありがとうございました。


    Jump into!

    http://moririn-web.blogspot.jp/2010/03/bloggersyntax-hilighter.html



    SyntaxHighlighter
    を使わせて頂くことにしました。
    もっともポピュラーな方法だと思います。

    Windows プログラムをサイレントインストールするための START コマンド Tips

    Windows プログラムをサイレントインストトールさせたい。
    Updateプログラムを実行させたい要求では良くある話。

    STARTコマンドに /B を付けることで簡単に実現出来る。
    以下にSTART /?のヘルプテキストを引用する。



    START /? の内容

    2013年7月6日土曜日

    ArduinoでBluetoothを使ってスマホと通信するには?RFduinoを注文してみる!

    Arduinoを使ってBluetooth(BLE)通信でスマホと通信をしたい!

    という人はたくさんいると思いますが、そんな方に朗報です。


    それが、「RFduino」というプロジェクト。
    http://www.rfduino.com

    プロジェクトの方針はArduinoのポリシーに準拠しており、Open source Hardwareであり、多くの人が利用しやすいように配慮されている。

    RFduinoのシールド基板はArduinoよりコンパクトで、大人の男性の指先に収まるサイズ。
    スマホと連動した製品作りの実験機に持ってこいだ。

    作った製品の操作パネルを、ユーザーのスマホのパネルを利用できれば、製品のコストダウンが出来る可能性が広がる。

    そのまま実装した製品アプリケーションも出てきたりして。

    現時点で、目標を大きく上回る注文が入っているらしい。
    2013年8月ぐらいに発送らしい。

    オイラも注文してみようっと。
    http://www.rfduino.com にアクセスしてProducts一覧を表示させてみる。





















    「Teaser Kit」 は最低限必要なセットの様です。
    I/O入出力が無いと、面白くもなんともないので、おっさん的には「Project Dev Kit」を購入したい。
    Project Dev Kitをポチリ。























    $99ね。
    1セット注文をします。
    Qtyを「1」にして[ADD TO CART]をポチリ。


















    Subtotal : $99.00
    [CHECK OUT]をポチリ。




















    US Postal Service にDomestic(国内)/International(国際)の選択があるので、米国から日本への発送なのでInternationalを選択します。
    $20になります。割と高い気がするが仕方が無い。
    はやり、シッピングは2013年8月ごろ頃とのこと。
    8月といっても31日ありますけど、そこはアバウト大国アメリカですし、気長に待つことにします。

    Shipping Informationを入力します。
    電話番号は+81を付けて0を取った番号090なら90から入力します。
























    カードはVisa,Master,Discover,Amexが使えるようです。




















    内容、金額を確認して[PLACE ORDER]をポチリ。





















    オーダーに成功しました。

    RFduinoはOpenSource RFが進めているプロジェクトです。
    OpenSource RFはカリフォルニア、Hermosa Beach にあります。
    Hermosa Beach は昨年、2012年に遊びに行きました。とても気候が良いところで住みやすい町です。
    西海岸で仕事するなんて、オッシャレーですね。

    それはさておき、RFduinoが到着したら遊んでみます。

    2013年7月5日金曜日

    System.Net.WebClient で https(SSL) サイトへのアクセスを簡単に成功させる方法

    System.Net.WebClient で httpsのURLを指定してアクセスると


    「基礎になる接続が閉じられました: SSL/TLS のセキュリティで保護されているチャネルに対する信頼関係を確立できませんでした」

    というメッセージのエラーが発生します。

    これを成功させるためには以下のコードを実行しておきます。

    try
    {
        ServicePointManager.ServerCertificateValidationCallback =
            new RemoteCertificateValidationCallback(
                delegate
                { return true; }
           );
    }
    catch ()
    {
    }
    
    



    2013年7月4日木曜日

    Team Foundation Serviceのプロジェクトの削除

    Team Foundation Serviceは気軽に使えるサービスで大変助かりますが、クラウド版Team Foundation Serviceでサイトからプロジェクトを削除しても実際には削除されません。
    見た目は消えたように見えますが、Visual Studioでチームサーバーに接続するとプロジェクトが残ったまま表示されます。
    気軽で便利な分、不要なプロジェクトがボコボコ増えてしまうと、消したくなります。

    MSDNに記事が有りますので、こちらを参考にします。

    MSDN チーム プロジェクトの削除 [TFSDeleteProject]

    Visual Studio 2012のコマンドラインツールを使います。
    Visual Studio 2010では削除出来ないって事になりますかね。

    WebUIから削除出来ると便利なのですが...

    2013年7月3日水曜日

    Visual Studio 2010で Team Foundation Service を使ってみる

    Visual Studio 2010で Team Foundation Service を使ってみよう。

    で、いきなり壁にぶち当たった。

    Visual Studioのメニュー>チーム>Team Foundation Severへの接続、を表示してサーバーを追加しても、認証エラーで接続出来ない。

    Team Foundation ServiceはTeam Foundation Sever 2012をベースにしている為、そのままでは使うことが出来ないのだ。

    解決方法が日本語サイトに情報が少ないので、記事にしておきます。

    これを解決する為には、
    Visual Studio 2010 SP1 Team Foundation Server 2012 Compatibility GDR - 日本語
    をインストールする。

    Visual Studio 2010 は、そのままではTeam Foundation Server 2012 に接続出来ないのだ。
    当たり前だが、Visual Studio 2012なら、問題無く接続出来る。

    Team Foundation Severに接続したあと、Team Foundation Service への自動的サインオン処理に以降する。初めてサインオンするPCだと、その際Microsoftのアカウントを使ってアクセスするための許可登録を促される場合がある。この数が多いのなんの。根気よく登録する。


    まず参考にしたいサイトは以下
    http://d.hatena.ne.jp/hatsune_a/20120511/1336731773