Windows端末でIPルーティングさせる
上記ネットワークにおいて、
開発端末(VM)(Win7)からサーバー(VM)(XP)へ接続できるようにネットワーク設定した時のメモ
通信の流れ
開発端末(VM)(Win7) → ルーター → ホスト端末(Win7) → ホスト端末(Vista) → サーバー(VM)(XP)
ルーターのルーティングテーブル設定
ルーターに 192.168.1.0/24 は 192.168.111.104へルーティングする設定を追加する
Windows端末で別ネットワーク間のルーティングを有効にする
以下Webページを参照。これで192.168.111.0と192.168.1.0間のルーティングが行えるようになる。
@IT:Windows TIPS -- Tips:IPルーティングを有効にする方法(レジストリ設定編)
ホスト端末(Win7)のルーティング設定
ルーターに 192.168.1.0/24 は 192.168.1.101へルーティングする設定を追加する
javascriptで再帰処理
こんな感じで書きました。
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <title>再帰呼び出しサンプル</title> </head> <body> <p id="msg_aisatu1">おはよう</p> <p id="msg_aisatu2">こんにちは</p> <p id="msg_aisatu3">おげんきですか</p> <p id="msg_aisatu4">調子はどうだい?</p> </body> <script type="text/javascript"> var Sample = function(){ var _getUniqId = function(id){ //javascriptはvoid関数が無いため、このように対応した var result = id; var func = function(id, cnt){ var searchId = id + (cnt ? cnt : 1); var tgtEle = document.getElementById(searchId); if(tgtEle !== null) func(id, cnt ? ++cnt : 1); else result = searchId; } func(id); return result; } return{ getUniqId : _getUniqId } }; var obj1 = new Sample(); var result = obj1.getUniqId("msg_aisatu"); //検索結果:msg_aisatu5 console.log("検索結果:" + result); </script> </html>
オブジェクト思考のキモを体感するには
このエントリーを読んで。
突破すると一気に学習が加速する「オブジェクト指向学習の壁」を突破する鍵となる知識を、中学生でも分かるように図解してみた(初学者向け) - @fromdusktildawnの本館
「壁」を突破できたと思ったのは、デコレーターパターンとコマンドパターンを実際に使いこなせる様になった時でしょうか。
対象のエントリーでは、優しく図解していることが逆にややこしくなっている気がする。(矢印大杉)
個人的経験から言うとロギング関係クラスをお題にしてオブジェクト指向を説明すると受け入れてもらえることが多かったです。
たとえば、下記のILoggerを実装するクラスたちは利用方法が統一されているため、実装の詳細関係なくロガーとしては同じように使用することができます。これがポリモーフィズムと呼ばれるものです。また、ILogger型の値として各ロガーを扱うこともできます。
(この話題より前のクラス、オブジェクト、メソッドというのは参考書などを読めば理解できるはず。これが理解できないとお話にならないと言わざる得ない。)
これらをさらに拡張して、ログレベルによるフィルタリングを行うようなデコレーターやスレッドセーフ対応を行うためのデコレーターなどを作ることで
実際に体感できるかなと。
//ロガーインターフェイス interface ILogger { //ログ書き込みをする際に呼び出すメソッド名とパラメーターを定義 void WriteLog(string msg); } //標準出力へログ出力 class ConsoleLogger : ILogger { void WriteLog(string msg){ System.Console.WriteLine(msg); } } //指定ファイルへログ出力 class FileLogger : ILogger { private string filePath; public FileLogger(string filePath){ this.filePath = filePath; } void WriteLog(string msg){ //ファイルをオープンし、そこへ書き込む using(var fs = new FileStream(filePath)){ fs.WriteLine(msg); } } } //複数のロガーをまとめて使用する。 class MultiLogger : ILogger { private List<ILogger> loggers = new List<ILogger>(); public void Add(ILogger logger){ loggers.Add(logger); } void WriteLog(string msg){ for(var i=0;i<loggers.Count;i++){ loggers[i].WriteLine(msg); } } } //使用方法 class Program { static void Main(string[] args){ //ConsoleLoggerもFileLoggerもILoggerの実装クラスなため、ILogger型変数に代入することができる。 //(ただしインターフェイスで定義されている操作のみ呼び出し可能) ILogger logger = new ConsoleLogger(); logger.WriteLog("標準出力へログ出力"); logger = new FileLogger("c:\access.log"); logger.WriteLog("ファイルへログ出力"); //MultiLogger.Addメソッドの引数はILogger型。このインターフェイス実装クラスであれば、 //実装の詳細関係なくロガーとして引き渡すことができる。 MultiLogger multiLogger = new MultiLogger(); multiLogger.Add(new ConsoleLogger()); multiLogger.Add(new FileLogger("c:\access.log")); //ConsoleLogger、FileLoggerに "ログ出力!!!" と出力される。 mlogger.WriteLog("ログ出力!!!"); } }
Jenkinsによるテストの自動化
はじめに
Jenkinsの話(CIの話)を聞き、テストの自動実行がとても魅力的に感じたので、
空きPCに環境構築して体験してみた。
やりたいこと
- VisualStudioのソリューションファイルをビルドする。
- MSTestを使ったユニットテストの実行。
- ユニットテストの失敗時に通知する。
※Jenkins端末はインターネットに接続できないローカルLANに配置する予定な為、
通知の手段にIPMessenger(IP Messenger 開発研究室)を使用することにした。メール通知は今回は試してません。
インストール
今回はTracLightningというプロジェクト管理ツールを使用した。(これにJenkinsが含まれている)
Trac Lightning プロジェクト日本語トップページ - SourceForge.JP
プラグインのインストール
ソリューションファイルをビルドするために、Jenkins MSBuild Plugin
MSTestでの失敗を検出するために、Log Parser Plugin
をインストールしました。
※画像ではインストール済タブに表示されていますが、未インストール時には利用可能タブに表示されています。
チェックを入れてページ最下部のインストールボタンクリックでインストールされます。
プラグインの設定
Jenkinsの管理を選択し、管理ページを表示させる。
管理項目にインストールしたプラグインの設定項目が追加されている。
ジョブの登録
ジョブ=ビルド単位といったところでしょうか。ビルドしたいソリューションごとにジョブを作成する必要があります。
ジョブカレントディレクトリは、C:\TracLight\projects\hudson\.hudson\jobs\<ジョブ名>(デフォルト)です。
2,ジョブ名と種類を選択する。種類はフリースタイル・プロジェクト
3,今回はSubversionからソースコードを取得してビルドを行うので、設定する。
使用しない場合は"なし"を選択する。
4,リポジトリの更新確認を定期的に行う場合の設定
画像だと、毎時0分(15:00、16:00、、、) にチェックを行いリビジョンが更新されている場合にビルドを行う。
5,ビルドするソリューションファイルの設定
はじめにMSBuild用のビルド設定項目を追加。
[
追加された項目へ対象のソリューションファイルを指定する。
ソース管理を使用しない場合は、ソリューションファイルのフルパスを指定する。
6,テスト実行の設定
はじめにMSTestを実行するバッチ設定項目を追加。
MSTest実行バッチは下記の通り。失敗時にIPMessengerを使用した通知も行なっている。
setlocal set MS_TEST_DIR="C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\" set IPMSG_DIR="C:\Program Files\IPMsg\" set PATH=%PATH%;%MS_TEST_DIR%;%IPMSG_DIR% rem Jenkinsジョブルートを起点とした相対パス set TEST_DLL_NAME="TestProject1\bin\Debug\TestProject1.dll" set TRX_FULLPATH="TestResults\TestResults.trx" set NOTICE_TARGET_HOST=192.168.111.104 set NOTICE_MSG=JenkinsSampleのテストに失敗しました! rmdir /S /Q TestResults mkdir TestResults MSTest.exe /testcontainer:%TEST_DLL_NAME% /resultsfile:%TRX_FULLPATH% if not %ERRORLEVEL% == 0 ( IPMsg.exe /msg %NOTICE_TARGET_HOST% %NOTICE_MSG% echo "UnitTest is Failed" ) endlocal EXIT \B %ERRORLEVEL%
Jenkinsジョブではバッチファイルの実行結果が検出できないようなので、Log Parser Pluginで検出させる必要がある。
保存ボタンクリックしないと設定情報が反映されないので注意。
プラグインの設定で指定した空ファイルへ、テスト失敗時に出力される文字列を指定する。
error /^"UnitTest is Failed"$/
あとでやるリストを抽出&出力するemeditorマクロ(ハッシュタグ機能追加バージョン)
これの派生バージョンとして
ハッシュタグ別にリストを出力する機能を追加しました。
公式サイトに登録しているもの(本流バージョン)はこれで完成形かなと思います。
出力結果も微妙に違ってくるので派生バージョンの公開は独自に行うことにします。
こちらからダウンロードしてください。
ファイル構成やマクロの登録方法は本流バージョンと同じです。
ハッシュタグについて
- タイトルの末尾に"#ハッシュタグ名"をつけます。。
- 認識されるハッシュタグは、1タイトルにつき1つまでです。複数つけると最後につけたハッシュタグで認識されます。
- 未指定の場合、"(なし)"というタグで認識されます。
非表示対象文字列について
- デフォルトでは下記の文字列を含むタイトルは出力対象外としています。
- #済
- #済み
- #すみ
- #end
非表示対象文字列の設定について
AtodeAlert_Parsers.jseeのcreateParser関数で設定しています。
例えば、ハッシュタグ形式と同じがイヤなので別形式に変えたい場合は下記のように変更します。
これで、非表示対象文字列が "#~" から "<~>" に変わります。
function createParser(addCallback){ var p = { atodeMark : "【あとで】", detectedCallback : addCallback, itemMng : new AtodeYaru(document.FullName), targetFilter : new ParseTargetANDFilter([ new NotExistKeywordFilter("<すみ>") , new NotExistKeywordFilter("<済>") , new NotExistKeywordFilter("<済み>") , new NotExistKeywordFilter("<end>") ]) }; return new AtodeMultiParser([ new OneLineAtodeParser(p), new AtodeListParser(p) ]); }
あとでやるリストを抽出&出力するemeditorマクロ
テキストファイル内に書かれている"あとでやる"リストを表示するマクロです。
私個人で、テキストファイルに日々の作業実績記録&あとでやるメモを書き出しています。
これらタスクの消化を忘れないために、タスクのリスト抽出&表示するマクロを作りました。
自分用に作ったのですが、他の人も使えるかも?と思い公開しました。
公式サイトに登録させてもらいましたので、下記URLから取得できます。
http://jp.emeditor.com/modules/mydownloads/
使用方法
決まったフォーマットで書かれている"あとでやる"リストの各項目タイトルを抽出してアウトプットに出力します。
記述行へタグジャンプできるように出力内容を調整しています。*1
あとでやるリストについて
開始・終了
"【あとで】"だけの行~空白行を1リスト範囲とします。
リスト範囲内には任意数のリストアイテムを含めることができます。
リストアイテム
現在は項番ありスタイル、無しスタイルのどちらかの書き方で記述します。
リストアイテムフォーマット(項番ありスタイル)
- 内容詳細行の先頭はタブ(\t)で開始してください。
- タイトルは必須ですが、内容詳細は任意項目です。
1、タイトル1 内容詳細 内容詳細 2、タイトル2 内容詳細 3、タイトル3 4、タイトル4 内容詳細内容詳細 ...
リストアイテムフォーマット(項番なしスタイル)
- 内容詳細行の先頭はタブ(\t)で開始してください。
- タイトルは必須ですが、内容詳細は任意項目です。
・タイトル1 内容詳細 内容詳細 ・タイトル2 内容詳細 ・タイトル3 ・タイトル4 内容詳細内容詳細 ...
単一行の"あとでやる"リストアイテムフォーマット1 (追記:01/06)
- "【あとで】"位置はどこでもよい
◎◎について対応した。 【あとで】タイトル1&内容詳細1 △△の調査&回答 【あとで】タイトル2&内容詳細2 ...
単一行の"あとでやる"リストアイテムフォーマット2 (追記:01/06)
- "【あとで】"位置はどこでもよい
◎◎について対応した。 【あとで】タイトル1&内容詳細1 △△の調査&回答 【あとで】タイトル2&内容詳細2 ...
マクロの拡張について
拡張しやすいように作成したつもりです。
通知処理をAtodeAlert_ResultViewers.jseeに書いていますが、
デフォルト動作以外にアイテム毎にアラートを出すことができるようにもなっています。
ソースコード確認していろいろやってみてくさだい。
*1:アウトプット領域でダブルクリックまたはF10で記述行へスクロール
行列逆転するemeditorマクロ
アプリ開発時、エクセルを使ってダミーデータを作成するときによくやる操作を自動化できるようにと思い、このマクロを作成しました。
※DBにSQLServerを使ったときのダミーデータ作成方法。他はよくわかりません。
- select雛形をSQLManagementStudioから取得*1
- 取得したSQLをエディタに貼り付け、",\r\n"を"\t"に置換。
- 置換文字列をエクセルに貼り付けダミーデータ作成。
- 作成データをSQLManagementStudioのテーブル編集機能使って貼り付ける。
公式サイトに登録させてもらいましたので、下記URLから取得できます。
http://jp.emeditor.com/modules/mydownloads/