*** ogr/ogrutils.cpp Fri Nov 2 10:47:34 2012
--- ../gdal_new/ogr/ogrutils.cpp Fri Nov 2 12:28:33 2012
***************
*** 754,760 ****
/* -------------------------------------------------------------------- */
else
{
! papszReturn = CSLAddString( papszReturn, papszArgv[iArg] );
}
}
--- 754,762 ----
/* -------------------------------------------------------------------- */
else
{
! char* pszTmp = CPLRecodeCommandInput( papszArgv[iArg] );
! papszReturn = CSLAddString( papszReturn, pszTmp );
! CPLFree(pszTmp);
}
}
*** port/cpl_string.h Fri Nov 2 10:47:29 2012
--- ../gdal_new/port/cpl_string.h Fri Nov 2 12:29:27 2012
***************
*** 177,182 ****
--- 177,184 ----
const char *pszDstEncoding ) CPL_WARN_UNUSED_RESULT;
int CPL_DLL CPLIsUTF8(const char* pabyData, int nLen);
char CPL_DLL *CPLForceToASCII(const char* pabyData, int nLen, char chReplacementChar) CPL_WARN_UNUSED_RESULT;
+ char CPL_DLL *CPLRecodeCommandInput( const char* pszSource ) CPL_WARN_UNUSED_RESULT;
+ char CPL_DLL *CPLRecodeCommandOutput( const char* pszSource ) CPL_WARN_UNUSED_RESULT;
CPL_C_END
*** port/cpl_recode.cpp Fri Nov 2 10:47:30 2012
--- ../gdal_new/port/cpl_recode.cpp Fri Nov 2 12:16:08 2012
***************
*** 324,329 ****
--- 324,372 ----
return -1;
}
+
+ /************************************************************************/
+ /* CPLRecodeCommandInput() */
+ /************************************************************************/
+ /**
+ * Convert a string from a platform encoding to UTF-8, effects only windows platform.
+ *
+ * There is a I/O problem in windows command line character arguments.
+ * Unfortunately, Run batch file written in UTF-8 fails some case.
+ *
+ * @return a NULL terminated string which should be freed with CPLFree().
+ */
+
+ char CPL_DLL *CPLRecodeCommandInput( const char* pszSource )
+
+ {
+ #ifdef _WIN32
+ return CPLRecode( pszSource, "CP0", CPL_ENC_UTF8 );
+ #else
+ return CPLStrdup(pszSource);
+ #endif
+ }
+
+ /************************************************************************/
+ /* CPLRecodeCommandOutput() */
+ /************************************************************************/
+ /**
+ * Convert a string from UTF-8 to a platform encoding, effects only windows platform.
+ *
+ * There is a I/O problem in windows command line character arguments.
+ *
+ * @return a NULL terminated string which should be freed with CPLFree().
+ */
+ char CPL_DLL *CPLRecodeCommandOutput( const char* pszSource )
+
+ {
+ #ifdef _WIN32
+ return CPLRecode( pszSource, CPL_ENC_UTF8, "CP0" );
+ #else
+ return CPLStrdup(pszSource);
+ #endif
+ }
+
/************************************************************************/
/* CPLClearRecodeWarningFlags() */
/************************************************************************/
*** port/cpl_recode_stub.cpp Fri Nov 2 10:47:29 2012
--- ../gdal_new/port/cpl_recode_stub.cpp Fri Nov 2 11:43:30 2012
***************
*** 166,172 ****
&& strcmp(pszDstEncoding,CPL_ENC_UTF8) == 0 )
{
int nCode = atoi( pszSrcEncoding + 2 );
! if( nCode > 0 ) {
return CPLWin32Recode( pszSource, nCode, CP_UTF8 );
}
}
--- 166,172 ----
&& strcmp(pszDstEncoding,CPL_ENC_UTF8) == 0 )
{
int nCode = atoi( pszSrcEncoding + 2 );
! if( nCode >= 0 ) {
return CPLWin32Recode( pszSource, nCode, CP_UTF8 );
}
}
***************
*** 178,184 ****
&& strncmp(pszDstEncoding,"CP",2) == 0 )
{
int nCode = atoi( pszDstEncoding + 2 );
! if( nCode > 0 ) {
return CPLWin32Recode( pszSource, CP_UTF8, nCode );
}
}
--- 178,184 ----
&& strncmp(pszDstEncoding,"CP",2) == 0 )
{
int nCode = atoi( pszDstEncoding + 2 );
! if( nCode >= 0 ) {
return CPLWin32Recode( pszSource, CP_UTF8, nCode );
}
}
2012/11/05 追記:やっぱ、GDAL-dev ML に投下しました。
2012年11月2日金曜日
GDAL patch 投下
とりあえず、QGisのコミュニティのCavaliniさんに、パッチを渡してみましたが、QGis の問題というよりもGDALの問題なんで、GDAL-developer ML に投下した方が良いのかも?
ただ前回、短いpatchだからOKかも?と思ってGDAL-dev MLにパッチ投稿したら、MLへのpatch投下は、やっぱり遠慮して欲しいと言われたので、説明をした上で、どなたかにパッチを送るという手順になりそう。 アカウントは登録されているはずなんだけど、OSGeo の track にログインできないので、track に直接投下できなくて、困ってるのだ…。
パッチは、version 'gdal-2.0dev'
https://svn.osgeo.org/gdal/trunk/gdal
のもので、新しくコマンドライン引数を管理するクラスが生成されていたので、ちょこっと直すだけで、コマンドライン型アプリ全部に適用されそうです。
Windows CMD args character conversion problem.
ウィンドウズ環境におけるコマンドプロンプトの問題を説明するために、簡単なプログラムを書いてみました。ここが理解できないと、パッチが受け入れられないだろうとおもったので・・・
//
// 'Command Prompt Argument' check program
//
// To compile, type below
//
// cl /EHa /GR /MD chkarg.cpp
//
#include <iostream>
#include <iomanip>
void showHex(const char* str) {
for( const unsigned char* p = reinterpret_cast<const unsigned char*>(str); *p != 0; ++p ) {
std::cout << std::hex << "0x" << (int)*p << " ";
}
std::cout << std::endl;
}
int main(int argc, char* argv[]) {
if( argc <= 1 ) return 1;
showHex(argv[1]);
return 0;
}
これを実行するバッチファイルは、こんなんです。
@echo off echo Bad case UTF-8 arg command check echo This text file was written in UTF-8 with Kanji. echo result must be echo 0xe5 0x85 0x88 echo ===> run chkarg. chkarg 先実行結果は
Bad case UTF-8 arg command check This text file was written in UTF-8 with Kanji. result must be 0xe5 0x85 0x88 0xe5 0x85 0x81 0x45となります。chcp 65001 を行なっても状況に変わりはありません。
2012年10月26日金曜日
android proguard support.v4 error 対処 備忘録
なんか、久々に apk ファイルを作成しようと思ったら、
Proguard returned with error code 1. See consoleというメッセージが出て、失敗する。 エラーの原因は、 android.support.v4 を処理しようとしているからって感じ。 対処法は、プロジェクト直下に作成した proguard.cfg ファイルに以下の2行を追加してやる
-dontwarn android.support.v4.**
-keep class android.support.** { *; }
と、これだけ。
参考:http://stackoverflow.com/questions/8723088/error-when-proguard-android-project
2012年10月3日水曜日
今時廃れた ISAPI Extension dll ではまる。
Visual Studio 2005 から IIS の ISAPI Extension のウィザードが消失しました。しかし、一応 CHttpServer が残ってたんで、そっちを使ってたんですが、リソースのロードができない。
デバッガで追ってると、AfxGetResourceHandle() が NULL を返してきます。なんじゃこれ?
DLLMain は既に定義されていて、自前で、ここの制御が不可能な状態に持ってきて、hInstance が、どこにも保存されていないなんて、何の罰ゲームだよ?とぼやきながら、なんやかんやと、半日潰しました(環境整えたり、原因調べたりで)。
結局、Hoge.dll という ISAPI Extension だったとすると、
static HINSTANCE g_hInstance;
HINSTANCE AhoGetResourceHandle() { return g_hInstance; }
...
CHogeExtension::CHogeExtension() {
...
g_hInstance = GetModuleHandle("hoge.dll");
}
と、こんな感じの対応でいけました。
2012年10月1日月曜日
近況
なんか、ブログの更新が滞ってます。というよりも、GDAL/OGR のMLにも投稿しとこうと思いつつも、そっちも滞ってます。室蘭にキャンプに行った話や、登別伊達時代村が思ってたよりも面白かった話なども書きたいのですが、滞ってます。趣味のプログラミングでも、試してみたい事はあるんですが、現在、全く手をつけられません。家庭を御座なりにしても、ディスられてしまいます。仕事の方も、やっぱ案件抱えながら、色々やると破綻してる気がします。リソースの配分が難しいです。
個人情報管理責任者、重たいです。ついこの間、審査を受けて、口頭では、色々と改善点を指摘されました。まず、何がシンドいかと言うと、国語が徹底的に苦手な自分が、文章管理をするというのは、徹底的にダメです。そして、今回の定期審査を受けて理解したのですが、自分が引き継ぐ前の状態のマネージメントレビュー関連の記録文書の整理がされていないので、何に使うのかサッパリわからない意味不明な様式が混ざっていたり、一度、自分なりにPマークの要求事項と照らし合わせて整合を取りながら、リファクタリングしないとダメです。国語の試験は、文章題の意味がわからず、論理的に答えたつもりでも、いつも50点前後しか取れた事が無いので、規格の要求する意味の理解が、めっちゃシンドいです。そして、このJISQ15001:2006を元に作成された社内文書のマニュアルと規定は、マネジメントの問題が絡むので、他の人に手伝ってもらう事はできても、やってもらうわけにもいきません。ざっと見積もっても、なんだかんだと丸々1週間は飛んで行きます。
次にクリティカル・パスの多さ、社内システムのライブラリの脂っこいところは他に書ける人がいません。C++わかる人間いません。それでも、やらせてみるんですが、新しい機能とかデッサン力の必要な部分は、濃すぎて、しょうがないかな?と思える点。で、こういう部分にリソース取られると、あっという間に時間消費します。
加えて、現在開発中の仕事。やらなければならない事は山ほどあって、やりたいのですが、足りないリソースを補って、食うための仕事を片付けないといけません。他には、お客さんから、あれこれ言われると、そちらも放置できないので、何か考えて対応していかないと、やっぱダメです。
そして、ちょこまかとイベントが発生するので、そちらにもリソースを取られます。
俺も出来ま専務、わかりま専務とか、言ってみたいぜ…。
皆さん、どんなに忙しくても読書しましょうね。読書しないと阿呆になりますよ?特に、こういう厳しい時代、変化の激しい時代は、読書が大切です。ダメになっていった人は、100%読書で勉強なんてしていませんから。勉強会に興味の無いプログラマーもダメです。だいたい、今の技術はトレンドも変化も速くて、直ぐに勢力が変わります。ひとつの技術でやっていけると思っているシステム系の人、生き残れませんよ。
ちょっと愚痴っぽくなってしまったか?
2012年9月13日木曜日
vc proj4 libgeotiff 忘備録
書かないと忘れるので…
関連: libtiffのコンパイル
まずは、proj4 から… これを書いてる時のバージョンは、proj-4.8.0
nmake.opt を編集し、INSTDIR="C:\libs\proj" とかインストールしたい場所に設定しておく。後は、簡単に
次は、geotiff の方。
geo_config.vc を geo_config.h として利用する。
関連: libtiffのコンパイル
まずは、proj4 から… これを書いてる時のバージョンは、proj-4.8.0
nmake.opt を編集し、INSTDIR="C:\libs\proj" とかインストールしたい場所に設定しておく。後は、簡単に
C:\Downloads\proj-4.8.0> nmake -f makefile.vc C:\Downloads\proj-4.8.0> nmake -f makefile.vc install-allでオッケー
次は、geotiff の方。
geo_config.vc を geo_config.h として利用する。
C:\Downloads\libgeotiff-1.4.0> copy geo_config.vc geo_config.hmakefile.vc を編集する。デフォルトは、C:\OSGEO4W というオープンソースGISのセットとして設定されているが、まじめにライブラリを利用する場合は、proj の設定が省略されているので、以下のような感じで編集する
# # Typically the only thing that needs to be changed are the paths to the # TIFF tree. Note that we expect an existing build tree, in part because we # need private include files from libtiff, but also we need access to getopt.h. # in the ports directory. # # You may want to add optimization options to the CFLAGS macro as well. # OSGEO4W = C:\OSGEO4W LIBTIFF_DIR = C:\libs\libtiff PROJ_DIR = C:\libs\proj TIFF_INC = -I$(LIBTIFF_DIR)\include -I$(PROJ_DIR)\include TIFF_LIB_DLL = $(LIBTIFF_DIR)\lib\libtiff_i.lib $(PROJ_DIR)\lib\proj_i.lib # 必要に応じて、インストール先の prefix も設定します ... ... ...そして、
C:\Downloads\libgeotiff-1.4.0> nmake -f makefile.vc C:\Downloads\libgeotiff-1.4.0> nmake -f makefile.vc devinstall以上。
2012年9月10日月曜日
C++Now読書会に参加した
とりあえず、たまたま、うちの坊ちゃんと嫁さんが2週連続で出かけたので、C++Now読書会に参加できました。
一人で読むより効率的です。ゆるーい感じで、やっているので、我こそは!と思う方は、ROMでもいいから参加しましょう。
metaparse の方は、まだ Type, Value を map に登録する辺りが、もやっもやっとして納得できてません。mac 環境で、何故か g++ や clang++ が、まともにコンパイルできなかったので、手足をもがれたような状況も、ちょっと辛かったです。
で、コンパイルができない原因が、どうやら、ライセンス認証処理をしていなかった事にあるみたいでした。わかんねぇーよ。Moutain Lion になってから、どうも c++のコンパイルができないよーと嘆いている方は、多いのではないでしょうか?
これをやらないと、iostream のヘッダーが見つからんとか、x86_64 アーキテクチャの iostream 系ライブラリが見つからんとか、いろいろと怒られます。
登録:
投稿 (Atom)