1、Script Debugger for Windows NT 4.0 and Laterをインストール
2、コマンドラインで実行
1 |
wscript //d //x myscript.vbs |
vmdkファイルのエンコードでエラーになる場合がある。vmdkファイルのサイズの小さいディスクリプションファイルを開いてencodingの行を削除したなら直った。壊れるかもしれないので注意。
1 |
encoding="windows-1252" |
https://www.sqlite.org/lang_conflict.html
・REPLACEとINSERT OR REPLACEは同じ
ここでいうORは制約エラーが発生した場合でUNIQUEやPRIMARY_KEYもしくはNOT NULL制約
UNIQUEやPRIMARY KEYの時はその行を削除してからINSERTが行われる。
NOT NULLの時はデフォルト値で置き換えられる。
とのことなのでREPLACEが使えるのはコラムを全部指定したときで一部しか指定しないと
他のコラムが消えるかデフォルト値で置き換えられるのだろう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Use ".open FILENAME" to reopen on a persistent database. sqlite> create table mytable (cp integer primary key, c1,c2); sqlite> .table sqlite> insert into mytable values(1,'aaa','bbb'); sqlite> insert into mytable values(2,'xxx','yyy'); sqlite> insert into mytable values(3,'ccc','ddd'); sqlite> sqlite> select * from mytable; 1|aaa|bbb 2|xxx|yyy 3|ccc|ddd sqlite> insert into mytable values(1,'sss','ttt'); Error: UNIQUE constraint failed: mytable.cp sqlite> insert or replace into mytable values(1,'sss','ttt'); sqlite> select * from mytable; 1|sss|ttt 2|xxx|yyy 3|ccc|ddd sqlite> sqlite> insert into mytable(cp,c1) values(1,'vvv'); Error: UNIQUE constraint failed: mytable.cp sqlite> insert or replace into mytable(cp,c1) values(1,'vvv'); sqlite> select * from mytable; 1|vvv| 2|xxx|yyy 3|ccc|ddd sqlite> |
一部しか指定しないと他のコラムが消えてしまう。
1 2 3 4 5 6 7 8 9 |
sqlite> insert or replace into mytable ...> values(2,'AAA', ...> (select c2 from mytable where cp=2) ...> ); sqlite> select * from mytable; 1|vvv| 2|AAA|yyy 3|ccc|ddd sqlite> |
こう書けばOKだが、コラムが増えたとき対応できない。
やる方法もあるのかも知れないが返って複雑になりそうだから素直にUPDATEとINSERTに分けたほうがいいのか
/repodir/repos/conf/svnserve.confでauthz-dbを有効にする
1 |
authz-db = authz |
/repodir/repos/conf/passwdにリードオンリーユーザを加える
1 2 |
normal = normalpass readonly = ropass |
/repodir/repos/conf/authz-dbでリードオンリーに設定する。セクションのパスはレポジトリのパス
1 2 3 4 5 6 7 |
[groups] okgroup = normal rogroup = readonly [/] @okgroup = rw @rogroup = r |
svnサーバを再起動して実験
svnコマンドに–username readonlyをつければreadonlyユーザでのアクセスになる。
1 |
svn --username readonly co .... |
コミットしようとすると以下のエラー
1 2 3 4 |
svn: E170001: Commit failed (details follow): svn: E170001: Authorization failed svn: E170001: Your commit message was left in a temporary file: svn: E170001: '/pass/svn-commit.tmp' |
1 2 3 4 5 6 7 8 9 |
BOOL SetMenuItemString(HMENU menu, UINT id, LPCTSTR pStr) { MENUITEMINFO miiset; miiset.cbSize=sizeof(miiset); miiset.wID = id; miiset.fMask = MIIM_STRING; miiset.dwTypeData = (LPTSTR)(LPCTSTR)pStr; return SetMenuItemInfo(menu,id,FALSE, &miiset); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
#pragma once template<class T> class CSessionGlobalMemory { public: explicit CSessionGlobalMemory(LPCSTR pName) { h_=NULL; p_=NULL; m_=NULL; size_t len=lstrlenA(pName); m_pName = (LPSTR)LocalAlloc(LMEM_FIXED, len+sizeof(char)); lstrcpyA(m_pName, pName); m_pMutexName = (LPSTR)LocalAlloc(LMEM_FIXED, len+sizeof("_Mutex")-1+sizeof(char)); lstrcpyA(m_pMutexName, pName); lstrcatA(m_pMutexName, "_Mutex"); } ~CSessionGlobalMemory(){ release(); } operator T() { return get(); } void operator =(const T& t) { set(t); //return t; } private: class Locker { public: HANDLE m_; Locker(HANDLE m) { m_=m; WaitForSingleObject(m,INFINITE); } ~Locker() { ReleaseMutex(m_); } }; void release() { if(p_) { UnmapViewOfFile(p_); p_=NULL; } if(h_) { CloseHandle(h_); h_=NULL; } if(m_) { CloseHandle(m_); m_=NULL; } LocalFree(m_pName); LocalFree(m_pMutexName); } void ensure() { if(!m_) { m_=CreateMutexA(NULL,FALSE,m_pMutexName); } bool first=false; if(!h_) { h_=CreateFileMappingA( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0,sizeof(T), m_pName); if(h_ && GetLastError()!=ERROR_ALREADY_EXISTS) { first = true; } } if(!p_) { p_=MapViewOfFile( h_, FILE_MAP_READ|FILE_MAP_WRITE, 0,0, sizeof(T)); } if(first) { Locker l(m_); if(first) { memset(p_,0,sizeof(T)); first=false; } } } T get() { ensure(); Locker l(m_); T t; memcpy(&t,p_,sizeof(t)); return t; } void set(const T& t) { ensure(); Locker l(m_); memcpy(p_, &t, sizeof(t)); } bool first_; HANDLE h_; void* p_; HANDLE m_; LPSTR m_pName; LPSTR m_pMutexName; }; |
最初に0クリアする方法がいまいちわからなかった。
カーネルオブジェクトの名前にLocal/やglobal/をつければセッション間でもできるみたいだがスルー
結果
ファイル一式
Eclipse IDE for Java Developersをダウンロードして展開、起動する。
このバージョンはVersion: Luna Service Release 1 (4.4.1)
メニューからHelp Install New Softwareを選択
Work withからLuna を選択
リストからCollaboration Subversive SVN Team Providerを選択
適当に進んで、Eclipseを再起動してインストール完了
SubversiveはConnectorもインストールしないと使えないのでインストールする。
使うときになるとインストールダイアログが出るのでプロジェクトを新規作成でSVNからつくる。
Windowsの場合はJavaHLがいいようだ。
適当に進んでインストール完了
つぎにPyDevのインストール
Help Install New Softwareを選択
Work withのAddをクリック
PyDevを選択してインストール