2015年09月05日

TortoiseSVN 1.9.0でcommitエラー Stream doesn't support this capability ...

前回、
api-ms-win-crt-runtime-l1-1-0.dll がない
http://sanahi.seesaa.net/article/425062516.html
で問題になった
TortoiseSVN 1.9.0 ですが、

今度はSSH経由でcommit出来なくなっていました
commit_error.jpg

エラー: Stream doesn't support this capability
エラー: Polling for available data on filestream failed: Bad file descriptor
完了:


commitするソフトなのに!
使い物になりませんがな!!

どうやらTortoiseSVN 1.9.0は色々やらかしたようで。。。
Bad file descriptorとかファイルが壊れたかと焦りますが、バグのようです

結論としては、最新(TortoiseSVN 1.9.1)にすれば直りました
http://tortoisesvn.net/downloads.html

ChangeLogに気になる事が書いてあります
http://tortoisesvn.net/Changelog.txt

Version 1.9.1
...
- CHG: static linking to CRT and MFC. (Stefan)
- CHG: Update TortoisePlink. (Stefan)
...

CRT,MFCがstatic linkに変わったようです

前回の
api-ms-win-crt-runtime-l1-1-0.dll がない
http://sanahi.seesaa.net/article/425062516.html
で、わざわざVCランタイムを入れなくても良くなったかも。。。

あ、言語パッケージの更新もお忘れなく



posted by sanahi at 15:16| 滋賀 ☁| Comment(0) | TrackBack(0) | Develop | このブログの読者になる | 更新情報をチェックする

2009年06月25日

Subversion導入メモ(クライアント側)

今更ながらSubversionをインストール2

[クライアント側]

方針

  • OS:Windows
  • TortoiseSVNを使用
  • ssh経由で鯖へ接続
  1. TortoiseSVNインストール
    本体と、日本語パッケージを入れて再起動

  2. Putty Pagentインストール
    http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
    よりpagent.exeをDownload
    適当なディレクトリに置く(このファイルだけでよい)

  3. 「エクスプローラ適当に右クリック」-「TortoiseSVN」-「設定」-「ネットワーク」のSSHクライアントに
    「C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe」
    を設定
    ログインユーザ名と秘密鍵はpagent.exeでやるので不要
    # ここでログインユーザ名と秘密鍵を指定するとpagent.exe不要で運用可能ですが、
    # パスフレーズ入力地獄が体験できる
    # パスフレーズを空にできるなら指定してもいいかもしれない?
    その他オプションは必要に応じて設定(私はsshのポートを変更しているので、-P オプションを指定)

  4. pagent.exeを起動して、ssh経由でログインする秘密鍵(*.ppk)を指定してパスフレーズ入力
    (鍵作成作業は省略)

  5. 「エクスプローラ適当に右クリック」-「TortoiseSVN」-「リポジトリブラウザ」
    URLに「svn+ssh://username@mydomain/home/svn/repos」
    を設定して起動
    リポジトリが参照できたら、書き込み等確認して完了

posted by sanahi at 23:00| 滋賀 ☔| Comment(0) | TrackBack(0) | Develop | このブログの読者になる | 更新情報をチェックする

2009年06月24日

Subversion導入メモ(鯖側)

今更ながらSubversionをインストール

[鯖側]

方針

  • OS:FreeBSD
  • クライアントからはssh経由で接続するため、svnserveは起動しない
  • Webからリポジトリ参照可能にする
  1. subversionインストール
    # cd /usr/ports/devel/subversion
    # make
    # make install
    

    設定は以下の通り
    (apacheをリビルドしないようにDB4なし(FSFS?))
      x x [X] MOD_DAV_SVN       mod_dav_svn module for Apache 2.X        x x
      x x [X] APACHE2_APR       Use APR from Apache 2.X                  x x
      x x [X] NEON              WebDAV/Delta-V repo access module (neon) x x
      x x [ ] SERF              WebDAV/Delta-V repo access module (serf) x x
      x x [ ] SASL              SASL2 authorization support              x x
      x x [ ] BDB               db4 repository backend                   x x
      x x [ ] ASVN              Build and install Archive SVN (asvn)     x x
      x x [ ] MAINTAINER_DEBUG  Build debug version                      x x
      x x [ ] SVNSERVE_WRAPPER  Enable svnserve wrapper                  x x
      x x [ ] BOOK              Install the Subversion Book
    
    configやり直しは、 make config

  2. リポジトリ作成
    まー、適当に
    # cd /home/svn
    # svnadmin create repos
    
    ssh経由でアクセスするため、ファイル、ディレクトリのパーミッションは ログインアカウントでアクセスできるように適度設定
    svnクライアントからのアクセス(ssh経由)だけならこれでおわり

  3. apacheの設定を変更する(httpd.conf)
    webからリポジトリを参照できるように設定
    cvswebと違い、subversionは標準で付いてるみたい
    とりあえず、apacheをrestartすると、ワーニングが出るようになった
    [warn] module dav_module is already loaded, skipping
    
    これは、
    /usr/local/etc/apache22/httpd.conf の
    LoadModule dav_moduleが重複してるため
    ...
    LoadModule dav_module libexec/apache22/mod_dav.so <-----これと
    LoadModule status_module libexec/apache22/mod_status.so
    LoadModule autoindex_module libexec/apache22/mod_autoindex.so
    LoadModule asis_module libexec/apache22/mod_asis.so
    ...
    LoadModule php5_module        libexec/apache22/libphp5.so
    #LoadModule dav_module         libexec/apache22/mod_dav.so <----これが重複(コメントアウトする)
    LoadModule dav_svn_module     libexec/apache22/mod_dav_svn.so
    LoadModule authz_svn_module   libexec/apache22/mod_authz_svn.so
    <IfModule !mpm_netware_module>
    
  4. apacheの設定を変更する(svn.conf)
    参照設定用に以下のファイルを作成した
    /usr/local/etc/apache22/Includes/svn.conf
    <Location /svn>
      <IfModule mod_dav.c>
        Dav svn
        SVNParentPath /home/svn
        SVNListParentPath on
      </IfModule>
      <LimitExcept GET PROPFIND OPTIONS REPORT>
        Deny from all
      </LimitExcept>
    </Location>
    
  5. /usr/local/etc/rc.d/apache22 restart
    ブラウザより http://[mydomain]/svn/ でアクセス
    なんだかCvsWebよりショボイ。。。
    これで鯖側終了
posted by sanahi at 23:00| 滋賀 ☔| Comment(0) | TrackBack(0) | Develop | このブログの読者になる | 更新情報をチェックする

2008年12月24日

SetupAPIでcabファイル展開

Win2000Pro以降であればSetupAPIを使って、外部のDLL等を必要せず、cabファイルが展開できる

MSDN SetupIterateCabinet
http://msdn.microsoft.com/en-us/library/aa377404(VS.85).aspx
サンプルもある
http://support.microsoft.com/kb/189085/en-us

ちょっとサンプルわかりにくいので、自前で書くとこんなもんかな。
#include <windows.h>
#include <setupapi.h>
#include <string>

#pragma comment (lib, "setupapi.lib")

using namespace std;

LRESULT WINAPI CabinetCallback( IN PVOID pMyInstallData, 
                                IN UINT Notification, 
                                IN UINT Param1, 
                                IN UINT Param2 );

//-------------------------------------------------------------------
//! キャビネットファイルの展開(SetupAPI版)
/*! 
    @param[in] cabinet_fname : キャビネットファイル名
    @param[in] extract_dir   : 展開先ディレクトリ名(末尾'\\'付き)
    @remarks 動作環境は SetupIterateCabinet APIの動作環境に依存する
*/
bool extract_cabinet3( std::string cabinet_fname, std::string extract_dir )
{
    // 参考情報
    // SetupIterateCabinet cabファイル展開サンプル
    //   http://support.microsoft.com/kb/189085/en-us
    // MSDN SetupIterateCabinet
    //   http://msdn.microsoft.com/en-us/library/aa377404(VS.85).aspx
    BOOL r = SetupIterateCabinet(cabinet_fname.c_str(), 
                                 0, 
                                 (PSP_FILE_CALLBACK)CabinetCallback, 
                                 (void *)extract_dir.c_str()         );
    return (r == TRUE);
}

//-----------------------------------------------------------------------------
LRESULT WINAPI CabinetCallback ( IN PVOID pMyInstallData, 
                                 IN UINT Notification, 
                                 IN UINT Param1, 
                                 IN UINT /*Param2*/ )
{
    LRESULT lRetVal = NO_ERROR;
    string out_dir = (char *)pMyInstallData;    // ユーザーデータ
                                                // (SetupIterateCabinetの第4パラメータ)

    switch(Notification) {
      case SPFILENOTIFY_FILEINCABINET:
          {
              string full_target_name;
              FILE_IN_CABINET_INFO *pInfo = (FILE_IN_CABINET_INFO *)Param1;
              full_target_name = out_dir + pInfo->NameInCabinet;
              lstrcpyn(pInfo->FullTargetName, 
                       full_target_name.c_str(), 
                       sizeof(pInfo->FullTargetName)/sizeof(pInfo->FullTargetName[0])-1 );
              lRetVal = FILEOP_DOIT;  // Extract the file.
          }
          break;

      case SPFILENOTIFY_FILEEXTRACTED:
          {
#ifdef _DEBUG
              FILEPATHS *pFilePaths = (FILEPATHS *)Param1;
              OutputDebugString( pFilePaths->Target );
#endif
              lRetVal = NO_ERROR;
          }
          break;

      case SPFILENOTIFY_NEEDNEWCABINET: // Unexpected.
          lRetVal = NO_ERROR;
          break;
    }

    return lRetVal;
}
posted by sanahi at 02:41| 滋賀 ☀| Comment(0) | TrackBack(0) | Develop | このブログの読者になる | 更新情報をチェックする

2008年12月11日

hoge

やっぱ、hoge使うよね!

hoge
「Delphiでのマルチスレッドプログラミング」
http://dn.codegear.com/article/39112
ラベル:hoge
posted by sanahi at 18:26| 滋賀 ☁| Comment(0) | TrackBack(0) | Develop | このブログの読者になる | 更新情報をチェックする

2008年10月29日

別アプリのコントロールを操作する

作業メモ

別アプリのコントロールをいぢる関数
最終手段的な実装なのですが
これでいいかな
#include <windows.h>
#include <string.h>

//---------------------------------------------------------------------------
struct FindWinInfo {
  char ClassName[512+1];  // Window ClassName
  char WindowText[512+1]; // Window Title(部分一致可能)
};
//---------------------------------------------------------------------------
//! 別アプリのコントロールを取得する
/*!
  @param[in] parent 検索開始親HWND(=NULL デスクトップから)
  @param[in] inf    子ウィンドウの関係リスト(parentからの親子関係)
  @param[in] count  リストの数
  @return           HWND
*/
HWND __fastcall GetExtWindowHandle(HWND parent, FindWinInfo *inf, size_t count)
{
  char buff[1024+1] = {0};
  HWND hwnd_pre = NULL;
  HWND hwnd_cld = NULL;
  HWND hwnd_cur = parent;
  char *class_name;
  char *window_text;

  for( size_t i=0; i<count; i++,inf++ ) {
    class_name  = (inf->ClassName[0] != '\0')  ? inf->ClassName  : NULL;
    window_text = (inf->WindowText[0] != '\0') ? inf->WindowText : NULL;
    hwnd_pre = hwnd_cur;
    hwnd_cur = NULL;
    do {
      hwnd_cld = hwnd_cur;
      hwnd_cur = FindWindowEx(hwnd_pre,hwnd_cld,class_name,NULL);
      if( hwnd_cur == NULL ) break;
      SendMessage( hwnd_cur, WM_GETTEXT, (WPARAM)(sizeof(buff)-1), (LPARAM)buff );
    } while( (window_text != NULL) && (strstr(buff, window_text ) == NULL) );
    if( hwnd_cur == NULL ) break;
  }

  return hwnd_cur;
}

ちなみに、IE6のアドレスバー場合、こんな感じで取得,設定可能
(第一引数は使えるのか未検証)
{
  FindWinInfo inf[] = {
    {"IEFrame",      " - Microsoft Internet Explorer"},
    {"WorkerW",      ""},
    {"ReBarWindow32",""},
    {"ComboBoxEx32", ""}
  };
  char buff[1024+1] = {0};

  HWND hwnd = GetExtWindowHandle(NULL, inf, sizeof(inf)/sizeof(inf[0]));

  if( hwnd != NULL ) {
      // 別プロセスはGetWindowTextでは取得できない
      SendMessage( hwnd, WM_GETTEXT, (WPARAM)sizeof(buff)-1, (LPARAM)buff );
      printf("%s\n", buff );

      SendMessage( hwnd, WM_SETTEXT, (WPARAM)0, (LPARAM)"about:blank" );
  }
}
部分一致に正規表現使えるとよさげ
ついでに配列もvectorにして文字列もwstringあたりにするとさらによさげ?
ラベル:C++ win32
posted by sanahi at 23:00| 滋賀 ☁| Comment(0) | TrackBack(0) | Develop | このブログの読者になる | 更新情報をチェックする

2008年09月27日

JavaScript文字バイト数取得

メモ

かなり雑な文字バイト数取得
escapeして半角判断する

//---------------------------------------------------------
//! 文字バイト数取得
//  かなり雑
//  @param[in] str 対象文字
//  @return    文字バイト数
function GetLengthByte( str )
{
    var count = 0;
    for( var i=0; i<str.length; i++ ) {
        if ( escape(str.charAt(i)).length > 3 ) {
            // 非escape文字=そのまま
            // 半角escape文字="%xx"
            // 全角文字="%uxxxx"
            count += 2;
        }
        else {
            count++;
        }
    }
    return count;
}
posted by sanahi at 14:49| 滋賀 ☁| Comment(0) | TrackBack(0) | Develop | このブログの読者になる | 更新情報をチェックする

2008年08月21日

7-zip32.dllでパスワード付自己解凍書庫

7-zip32.dllでパスワード暗号化+自己解凍書庫を作ろうとしてるのですが
うまくいかないなぁ

自己解凍書庫自体は出来るのですが、EXEを実行してみると。。。

7z_pwd_sfx1.jpg

7z_pwd_sfx2.jpg
となるんですよねえ

作り方まずいのかな〜

作者様へ問い合わせ中〜
ttp://akky.cjb.net/cgi-bin/cbbs.cgi?mode=one&namber=993&type=0&space=0
[解決]
posted by sanahi at 10:47| 滋賀 ☁| Comment(0) | TrackBack(0) | Develop | このブログの読者になる | 更新情報をチェックする

2008年06月06日

WSH(JScript)でYYYYMMDDhhmmss形式

激超メモ
JScriptでYYYYMMDDhhmmss形式文字列生成

var dt = new Date();

var str = dt.getFullYear() +
GetFixWidthStr(dt.getMonth() + 1, 2) +
GetFixWidthStr(dt.getDate(), 2) +
GetFixWidthStr(dt.getHours(), 2) +
GetFixWidthStr(dt.getMinutes(), 2) +
GetFixWidthStr(dt.getSeconds(), 2);
WScript.Echo( str );


//-------------------------------------------------------------
//! 固定文字列長ゼロ埋め処理
/*!
@param src_str[in] 対象文字列
@param width[in] 有効桁数
return 有効桁数未満の場合はゼロ埋めした文字列
*/
function GetFixWidthStr( src_str, width )
{
var str = "";
for( var i=0; i<width; i++ ) {
str += "0";
}
str += src_str;
return str.substr( str.length - width, width );
}


ラベル:WSH JScript
posted by sanahi at 00:00| 滋賀 ☔| Comment(0) | TrackBack(0) | Develop | このブログの読者になる | 更新情報をチェックする

2008年05月29日

Oracle10gのシステム要件

Oracle Database 10gを使うことになり、
開発環境を構築していたんです。

で、
システム要件が知りたいのですが、見つからないんですよねこれが。
カタログにもない。
http://www.oracle.co.jp/database/doc/DB10g_R2_0905.pdf

昔は?記述があったようなのですが404です
http://www.oracle.co.jp/products/system/index.html

どこかに日本語ページがあるとおもうんですが、私は検索下手なんですかね。

んで、ふつうはココにたどり着く
http://www.oracle.com/technology/global/jp/software/products/database/index.html

そこから、「動作環境」のリンクからここに来る
http://www.oracle.com/technology/support/metalink/index.html
ここから目的のページまでたどり着けません。
英語分かりません。日本語ページください。

ありました。
発想の転換です。

「製品情報 - Oracle Database 10g」
http://otn.oracle.co.jp/products/database/oracle10g/index.html
   「Oracle 8、8i から Database 10g へのアップグレード」(PDF)
   http://otndnld.oracle.co.jp/products/database/oracle10g/pdf/10gUpgrade.pdf
その後...
posted by sanahi at 01:00| 滋賀 ☁| Comment(2) | TrackBack(0) | Develop | このブログの読者になる | 更新情報をチェックする

Remarks
記事中にソースコードが含まれる場合、ソースコードの再利用、改変、「オレのものにする」等は自由ですが、
ソースコードを利用して起こった問題は一切責任を負いません。(自己責任での利用となります。)