#include <boost/any.hpp>
#include <string>
#include <functional>
#include <iostream>
#include <exception>
template < class T, class OPE = std::binary_function<T,T,bool> >
bool in_type_ope( boost::any data, boost::any value, OPE ope ) {
try {
return ope( boost::any_cast<T>(data), boost::any_cast<T>(value) );
} catch( std::exception& e ) {
return false;
}
}
int main() {
boost::any a = 1;
boost::any b = 2;
std::cout << in_type_ope<int>( a, b, std::less<int>() ) << std::endl;
std::cout << in_type_ope<int>( b, a, std::less<int>() ) << std::endl;
a = 2;
std::cout << in_type_ope<int>( a, b, std::equal_to<int>() ) << std::endl;
return 0;
}
2013年5月1日水曜日
boost::any で比較
データベースのデータを透過的に扱おうとすると、型が〜型が〜って、結構面倒くさい。
なるべくなら、楽をしたいです。もっとスマートな書き方無いのかな。
sqlite3でオンメモリDB
sqlite3 でスキーマ関係なく操作したい。オンメモリDBが便利。
#include <iostream>
#include <string>
#include <sqlite3.h>
int main() {
sqlite3* db = nullptr;
int resdb = sqlite3_open(":memory:", &db );
std::cout << resdb << std::endl;
sqlite3_stmt* stmt = nullptr;
sqlite3_prepare_v2( db, "select datetime('now','localtime')", -1, &stmt, 0 );
sqlite3_step( stmt );
std::cout << "type = " << sqlite3_column_type( stmt, 0 ) << std::endl;
std::cout << "value = " << sqlite3_column_text( stmt, 0 ) << std::endl;
sqlite3_finalize( stmt );
sqlite3_close( db );
return 0;
}
2013年4月26日金曜日
C++ レガシー文字列変換で気をつける事
今更、何を書いてはんの?だとは思いますが、ついつい、うっかりしがちなんで
#include <iostream>
#include <string>
std::string get_string( const char* str ) {
std::string result = str;
return result;
}
int main() {
std::cout << get_string( nullptr ).size() << std::endl;
std::cout << " OK? " << std::endl;
return 0;
}
実行結果
terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid Abort trap: 6
2013年4月25日木曜日
eclipse ADT で、jar ファイルの依存関係をコントロールする。
プロジェクトの規模が大きくなってくると、パッケージを分離してライブラリを再利用する事になると思います。
ところが、この依存関係の設定の自由度が低くて頭にきます。
今回は、Android プロジェクトで、jar ファイルの依存関係をコントロールする方法を書きます。
プロジェクト・ディレクトリ直下にある .project という XML ファイルを開きます。
そして、linkedResources 要素の下に link 要素を追加、または、修正します。
$%7BPARENT-2-PROJECT_LOC%7D という怪しい呪文に関しては、こちらを参考にしてください。
こんな感じです。
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>YourApplicationProject</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
<dictionary>
<key>?children?</key>
<value>?name?=outputEntries\|?children?=?name?=entry\\\\\\\|\\\|?name?=entry\\\\\\\|\\\|\||</value>
</dictionary>
<dictionary>
<key>?name?</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.append_environment</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildArguments</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildCommand</key>
<value>ndk-build</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
<value>clean</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.contents</key>
<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
<value>false</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableFullBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.stopOnError</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
<value>true</value>
</dictionary>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.core.ccnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
<linkedResources>
<link>
<name>libs/acra-4.3.0.jar</name>
<type>1</type>
<locationURI>$%7BPARENT-2-PROJECT_LOC%7D/Ref/Java/acra-4.3.0.jar</locationURI>
</link>
<link>
<name>libs/android-support-v4.jar</name>
<type>1</type>
<locationURI>$%7BPARENT-2-PROJECT_LOC%7D/Ref/Java/android-support-v4.jar</locationURI>
</link>
<link>
<name>libs/calc.jar</name>
<type>1</type>
<locationURI>$%7BPARENT-2-PROJECT_LOC%7D/Ref/Java/calc.jar</locationURI>
</link>
</linkedResources>
</projectDescription>
2013年4月8日月曜日
中華PAD mac で adb devices にリストアップされない備忘録
Android でパケットキャプチャしたくて、root 取ろうとしたんですが、IS03 は、バージョン上がりすぎてて取れず。試行錯誤したけど、どの方法もダメでした。Nexus7 は、一度文鎮化しますた。手順は間違えてないと思うのですが、個体差なのか、仮想マシンのWindows7上で作業したのがまずかったのか?どうも祟られているようで、クラッカーでもないのから、脆弱性を探して root 取るとか、そんな事にリソース(自分の時間)を使うのも、いかがなものかと思いまして、中華Pad を購入しました。
友人に「赤札天国」なるものを紹介してもらい、そこからゲットです。
さて、USBに接続しましたが、adb devices で、中華Pad がリストアップされません。困った。adb shell を使えないと、戦力ダウンも甚だしい。ググって、StackOverflow からの情報でデバイスを認識させる事ができました。
「このMacについて」を選択し、「詳しい情報」を選択し、以下のダイアログを表示したら、「システムレポート...」を選択します。
続いて、USB を選択し、中華PADだと思われるハブを選択し、「製造元番号」に書かれている値をメモります。
そして、この場合だと製造元IDが 0x10d6 なので、
$ echo 0x10d6 >> ~/.android/adb_usb.ini
として、
$ /opt/android-sdks/platform-tools/adb kill-server $ /opt/android-sdks/platform-tools/adb usb $ /opt/android-sdks/platform-tools/adb devices
でリストアップされるようになります。
2013年4月3日水曜日
GeoTIFFにやられまくり
TIFFTAG_GDAL_NODATA でハマった事を書きましたが、続きがあります。
GeoTIFF では、GDAL_NODATA に設定された値がアルファ値0、つまり透過として扱われる事になります。
RGB3バンドあった場合に、R == 255 && G == 255 && B==255 なら透過扱いなんかなぁ?と思ってたんですが、どうも実装する人によって解釈が違ってて、RGB(255,0,0) が透過色に設定されてたりしました。こうなってくると、RGB(254,255,255) は透過扱いなのか、透過扱いでないのか?これすら怪しいです。
じゃあ、インデックス・カラーの場合は、どうか?というと、カラーインデックス番号 255 が透過扱いでした。いや、もうカオスで、嫌になってきます。
GDAL_NODATA が設定されてるんだから、もちろん、タイル内のブロック全てに、この値が適応されてるんですよね?と思ったら、画像高を越えた領域には、設定されていませんでした。お陰で、黒い領域が出現して何事かと思いましたよ。
関係ないですけど、なんか、ブログの RSS フィードがおかしくなって出力されないですし、Blogger サービスもいつまであるかわからないので、引越しを検討した方がいいのかなぁ?なんて考えてます。
GeoTIFF では、GDAL_NODATA に設定された値がアルファ値0、つまり透過として扱われる事になります。
RGB3バンドあった場合に、R == 255 && G == 255 && B==255 なら透過扱いなんかなぁ?と思ってたんですが、どうも実装する人によって解釈が違ってて、RGB(255,0,0) が透過色に設定されてたりしました。こうなってくると、RGB(254,255,255) は透過扱いなのか、透過扱いでないのか?これすら怪しいです。
じゃあ、インデックス・カラーの場合は、どうか?というと、カラーインデックス番号 255 が透過扱いでした。いや、もうカオスで、嫌になってきます。
GDAL_NODATA が設定されてるんだから、もちろん、タイル内のブロック全てに、この値が適応されてるんですよね?と思ったら、画像高を越えた領域には、設定されていませんでした。お陰で、黒い領域が出現して何事かと思いましたよ。
関係ないですけど、なんか、ブログの RSS フィードがおかしくなって出力されないですし、Blogger サービスもいつまであるかわからないので、引越しを検討した方がいいのかなぁ?なんて考えてます。
写真にはまってます
iPadとか、スマフォとかデジカメとか、今まで、おまかせで写真を撮ってたんで、雪の日に「こんなに降ってきたぞー」というのを表現したくても、いざ撮れた写真を見ると、そうでもなかったりして、まぁ、写真とは、こんなもんかな?と思ってました。
そこそこ良いカメラを手にすると、写りが綺麗で、テンション上がります。色々と深堀りしていくと、シャッタースピードの違いで動いているものがどういう風に映るかが変わってくるみたいなんですよ。
まぁ、基本体育会系プログラマは、もちろん全部試してみるわけですな。いやー、面白いです。チャリで出かけたのに、雪がワシワシ降ってきて、酷い目にあったというのを表現したくて、G+ の投稿には、1/50s のやつを採用しました。表現に偽りもなく、帰りは、目を開けてられないぐらい雪がバシバシ当たって悲惨でしたorz
ちなみに写真に記録されたタグだと 1/200s 1/125s となってますが、記憶では、設定が逆のような気がしてます。見た目も、逆じゃないかなぁと。

シャッタースピード 1/50s

シャッタースピード 1/200s

シャッタースピード 1/125s

シャッタースピード 1/600s

シャッタースピード 1/800s

シャッタースピード 1/1000s
そこそこ良いカメラを手にすると、写りが綺麗で、テンション上がります。色々と深堀りしていくと、シャッタースピードの違いで動いているものがどういう風に映るかが変わってくるみたいなんですよ。
まぁ、基本体育会系プログラマは、もちろん全部試してみるわけですな。いやー、面白いです。チャリで出かけたのに、雪がワシワシ降ってきて、酷い目にあったというのを表現したくて、G+ の投稿には、1/50s のやつを採用しました。表現に偽りもなく、帰りは、目を開けてられないぐらい雪がバシバシ当たって悲惨でしたorz
ちなみに写真に記録されたタグだと 1/200s 1/125s となってますが、記憶では、設定が逆のような気がしてます。見た目も、逆じゃないかなぁと。
シャッタースピード 1/50s
シャッタースピード 1/200s
シャッタースピード 1/125s
シャッタースピード 1/600s
シャッタースピード 1/800s
シャッタースピード 1/1000s
登録:
投稿 (Atom)

