現在編集中ファイルをバックアップするemeditorマクロ

マクロ第二段です。現在編集中ファイルを保存してそのコピーを同フォルダに作成します。
サンプルソースほぼ引用なので、この場で公開するに留めておきます。
このマクロの発展案として、一定数たまったら別の保管用フォルダに移動する処理を入れたりしようかと考えています。

(function(){
	var $d = document;
	var $s = $d.selection;
	try{
		var org = $d.FullName;
		$d.Save(org);
		var bk = org + "_" + new Date().getTime() + ".bk";
		var fso = new ActiveXObject( "Scripting.FileSystemObject" );
		fso.CopyFile(org, bk);
	}catch(e){
		alert("バックアップに失敗(" + e.message + ")");
	}
})();

選択範囲の指定列に連番をInsertするemeditorマクロ

EmEditor既存機能で「番号の挿入」が存在しますが、
自分の思っているのとすこし違っていたので、欲しかった動きをするマクロを組んでみました。
公式サイトに登録させてもらいましたので、下記URLから取得できます。

http://jp.emeditor.com/modules/mydownloads/

ジェネリックな各種リストをスレッドセーフに扱う

その1

System.Collections.ICollectionインターフェイスにキャストすることで、SyncRootにアクセス可能。これでlockを行うことができる。

//こんな感じ
var list = new List<String>();
lock (((System.Collections.ICollection)list).SyncRoot)
{
    list.Add("アイテム1");
}

ASP.NETアプリケーションでデバッグ時の値書き換えを有効にする

WindowsFormアプリでデフォルトでできていた、ブレークポイントで張る→止まる→ソースコード書き換え がASP.NETアプリではソースコード書き換えができない。次の設定を行うことで可能になる。

screenshot

ExpresswebのSQLServerでメンバシップ機能を使用する

クエリのエクスポート

screenshot
この機能で、テーブル定義とレコード設定のクエリを生成することができる。
そのクエリをホスティング先のSQLServerで流す。

web.config設定について

ビルド別に使用DBを分けたい場合(例えば、デバッグ時はローカルの*.MDFを使用。本番環境はホスティングSQLServerを使用する。)
Web.Release.configにホスティングSQLServerへの接続文字列設定を書くことで切り分けができる。

<?xml version="1.0" encoding="utf-8"?>

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="<設定名>"
    connectionString="Server=<サーバー名>;Database=<DB名>;Uid=<ユーザー>;Password=<パスワード>;"
    providerName="System.Data.SqlClient"
    xdt:Transform="SetAttributes"
    xdt:Locator="Match(name)" />
  </connectionStrings>
</configuration>

ExpresswebでSQLServerCe4を使用する

で確認

はじめに

SQLServerは3つまでしかDBを作成することができない。これは嬉しくないのでSQLServerCompact4を使うことにした。
インメモリデータベースを使うのは初めてで、現状はホスティング先で使用可能であることを確認しただけなので、
これから先色々SQLServerCe4に起因する事象が発生すると思われる。

Web.config

コネクション文字列

*sdfを作成してテーブル作成、それを使用してモデル作成しただけなのでVSによる自動生成されたものを使用している。

<configuration>
	<connectionStrings>
		<add name="Database1Entities" connectionString="metadata=res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;Data Source=|DataDirectory|\Database1.sdf&quot;" providerName="System.Data.EntityClient" />
	</connectionStrings>
...
</configuration>
アセンブリバージョン指定

こんな感じで指定する。

<configuration>
...
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" />
        <bindingRedirect oldVersion="4.0.0.0" newVersion="4.0.0.1" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

SQLServerCe4アセンブリファイルの配置

Expresswebにはインストールされていないようなので、アセンブリファイル一式もアップロードしてやる必要がある。
<SQLServerCe4のインストールフォルダ>/private フォルダ以下すべてのファイルをMVCプロジェクトのbinフォルダにコピーする。
ファイルのプロパティ(ビルドアクション,ディレクトリにコピー)は特に変更していない。

配置後作業

アプリケーションデプロイ後jに *sdfのパーミッション設定を行う必要がある。
screenshot
ブラウザからsdfファイルへアクセスはできなさそうなので、とりあえずはこれでよしとする。

TrueCryptでマウント時にフォルダ共有したい

マウント時に行う処理を指定するといったことが、TrueCryptではできなさそうなので、
バッチファイルを作成し、それを実行させることで対応した。

マウント&共有フォルダ作成

<...>は各自環境に置換してください。

cd <ボリュームファイルのフォルダ>
"<TrueCrypt.exeフルパス>" /v <ボリュームファイル> /l D\ /a /p "<パスワード>" /q
net share <共有名>=<共有フォルダパス> /grant:everyone,full

アンマウント

アンマウントすると共有解除されるっぽい。

"<TrueCrypt.exeフルパス>" /d D /q