2013年5月23日木曜日

android ndk と java から sqlite3 でアクセスするとどうなる?備忘録

 ndk からsqlite3 データベースを読みだしている状態で、android sdk の java が、データベース更新時に、時々例外を発生する事がある。どんなカラクリになっているのか気になって調べてみるとtwo connection to sqlite from java application and from ndkの情報が正確そうだ。Android SDK のJavaコードでは、1000mm sec 待っても応答が無ければ例外を送出する仕様であるらしい。言わせてもらえると、例外が発生するようなケースは、レアケースじゃね〜Ze。こんちくしょう。 自分の ndk でのレコードアクセスでは
#pragma once
#ifndef SQLITE_ACCESS_HPP
#define SQLITE_ACCESS_HPP

#include <sqlite3/sqlite3.h>
#include <functional>
#include <memory> // unique_ptr
#include <log.hpp>
#include <unistd.h>

namespace sio {

  template <class Container, class ReadOpe>
  bool read_rows(
    sqlite3*    db, 
    const char* sql, 
    Container&  container,
    ReadOpe     ope,
    const char* target_name
  ) {
    sqlite3_stmt* stmt = nullptr;
 int res = sqlite3_prepare_v2(db, sql, -1, &stmt, nullptr );
 if( SQLITE_OK != res ) {
      __android_log_print(ANDROID_LOG_ERROR, target_name, "Fail to read rows: %d", res );
      return false;
 }
    std::unique_ptr<sqlite3_stmt,std::function<void(sqlite3_stmt*)> > stmt_holder( stmt, sqlite3_finalize );
 while(true) {
      while( res = sqlite3_step(stmt), SQLITE_BUSY == res ) { usleep(10); }
   switch( res ) {
   case SQLITE_ROW:  ope( stmt, container );  break;
   case SQLITE_DONE: return true;
      default:
        __android_log_print(ANDROID_LOG_ERROR, target_name, "Fail to get row: %d", res);
        return false;
   }
 }
  }

} // namespace sio

#endif // SQLITE_ACCESS_HPP
こんな感じで処理していて、他のプロセスやスレッドによって書き込みが阻害されている場合には、何mm sec スリープさせれば良いかわからないけど、とりあえず10mm sec 休ませる事にしているのだが、Android SDK は問答無用で1秒タイムアウト。 詰んだ\(^o^)/ まぁ、1秒にでもしとかないとデッドロック等のケースに対処できないから、しょうがないのかもしれない。  多分、例外が発生したら、もう一回同じ更新をJavaの方でかけに行くのが、いいのかなぁ?

2013年5月21日火曜日

HDRにはまってるのだ

 はい、HDR(High Dynamic Range)写真にはまってます。Photomatrix Pro を買いました。まぁ、色々とやってるんですが、大阪の実家の近くに「大阪芸術大学」なんてのがありまして、小学校の頃、よくここで遊んだんです。ここの建物、コンクリートむき出しの打ちっぱなしで、当時、奇天烈なデザインで印象深く、HDRやるなら是非ここをモチーフにしたいと思っていました。HDRの仕上げも、色々あると思いますが、自分は、どちらかというと頭の中の源風景を再現した自然な仕上がりが好きです。若干、カリッと仕上がっていると思いますが、コンクリートの黒ずんだ感じは、個々のパーツをよく観察すると、ほんとに、こんな風になってます。
 1枚目は、芸大正面口からの眺め

正面口から、先ほどの建物の方に向かって坂を登っていきます。


開けた所で特徴的な、この建物


その脇を当時としては変わった天窓付きの宙2階のようなスペースがあります。


こちらは、上の風景の反対側。庭園になりますが、昔はもう少し雑だったような気もします。


入り組んだ、コンクリート打ちっぱなしの建物があります。


コンサートのできる彫り込んだような庭のスペースもあるのですが、写真にパープル・フリンジが起こっていて、やむなく断念しました。まだまだ、新しい建物も面白いのですが、自分が小学生だった頃は、だいたい、ここら辺の建物までで、後は部活用のプレハブだったり、石膏を固めた彫刻模型のようなものが無造作に打ち捨てられていたりと、そんな感じでした。池があったスペースも、今では、だいぶ埋め立てられているようです。
写真の出来には満足してます。

2013年5月20日月曜日

android Intent で画像編集、備忘録

 android.net.Uri の作成の仕方によっては、「ファイルが見つかりません」と、つれなくあしらわれるので備忘録。 以下のようなやり方だと、ファイルを認識できない。
  public void editImage( String path, String filename ) {
    Uri imageUri = Uri.parse( path + "/" + filename );
    Intent launchEditor = new Intent();
    launchEditor.setAction(Intent.ACTION_EDIT);
    launchEditor.setDataAndType(imageUri, "image/jpeg");
    activity.startActivityForResult(launchEditor, 0);            
  }
 ちゃんと、File クラスを通じて生成する事
  public void editImage( String path, String filename ) {
    Uri imageUri = Uri.fromFile( new File( path, filename ) );
    Intent launchEditor = new Intent();
    launchEditor.setAction(Intent.ACTION_EDIT);
    launchEditor.setDataAndType(imageUri, "image/jpeg");
    activity.startActivityForResult(launchEditor, 0);            
  }
2014/09/09 追記:編集するアプリケーションによっては、ファイル名を勝手に書き換えて、新しいファイル名の取得方法が用意されていないという問題が発生する場合がある。これに対する処方箋は、見つかっていない。

2013年5月2日木曜日

室蘭散策街中編

 朝起きて、ホテルから昨夜の風景をパチリ、工場は眠らない。時間もあるので街中を散策する事に…

 東室蘭の高架橋から、いたるところから工場が望めます。

 工場の方から鉄パイプが!さすが室蘭
 テツプロさんにやってきました。





 ここで、テツプロさんをあとにし、近所のスーパー、その名も「ぷらっと・てついち」に。

 さすが鉄の街!アートな鉄の看板










 いやはや、なんともオシャレですね!
外には、こんな鉄のオブジェまであります!
 お昼には少し早かったのですが、カレーラーメンを食べました。
 大王ではなく、蘭たん亭さんです。
 地味に福神漬けが良かったです。
帰りは、時間の都合で、東室蘭駅までタクシーにのり登別へと移動しました。随所に鉄を生かしたモチーフがあり、味があります。

2013年5月1日水曜日

室蘭散策ナイトクルージング編

ゴールデンウィーク前半で室蘭に行ってきました。お目当ては、焼き鳥と工場写真です。
もう完全にGoogle+で写真に毒されてきてまして、はまってます。
とは言え、家族旅行なんで、あまりじっくり写真を撮ってる暇はありません。三脚も持参して、あわよくば…と思っていたのですが、ホテルからと、苫小牧駅でしか三脚を使うチャンスはありませんでした。
工場ナイトクルージングに出かけたのですが、車が無くて難儀しました。バスに乗ったら、白鳥大橋の袂まで行くのに、ぐるぐると、あっちこっち寄り道をして、なかなか近づかない。親子3人だったらバス代と時間を考えても、室蘭駅からタクシーに乗った方が安上がりでした。船着場近くで撮った白鳥大橋が上下2枚。上はハレーションを起こしてます。構図的にも、もっと引いて撮りたい感じです。
風は強くて、かなり寒い中、ナイトクルージングに出発です。風が強くて、寒い上に結構上下しました。
見えてきました!工場です!
海上からだと、やっぱ、ハッキリ見えます。
徐々に日は暮れて
刻々と変化していきます。

この辺りから、ピンぼけ&ブレまくりの失敗写真が多くなります。
ふぉおおおお
 ほぇえええ
 ふぉおおおお
そんな感じで、通り過ぎてゆきます。
橋にも明かりが灯ってきました。
間近で見る白鳥大橋は、本当に綺麗でした。
素晴らしい!夢の世界のようです。
フレアスタックが見えますが、9割9分は、これよりもひどい状態でピンぼけかブレブレでした。残念です。
また、リベンジしたいです(>_<)
 雰囲気は伝わるでしょうか?
 奇跡的に撮れた写真その1
奇跡的に撮れた写真その2
終始こんな感じでブレてますが、さらば室蘭!白鳥大橋!

 さて、帰りですが、タクシーで室蘭駅に向かうのが正解です。東室蘭から室蘭間の方がJRの本数は多いです。崎守駅の方は魅力的ですが、家族連れには向いてませんorz JRが来ないのです。

 飯は、またまた鳥辰に行ってしまいました。
ホテルに帰って部屋から三脚使って夜景を撮りました。見えないものを撮るので、ホワイトバランスの調整に悩むところです。オートにするとこんな感じです。ナイトクルージングでは、状況がわからないので、NEX-5RYの標準ズームレンズを使用しました。この写真も同じレンズで、ISO100のシャッター速度が20〜30秒ぐらいで撮影しました。
こちらは、SEL50F18の単焦点レンズで、ホワイトバランスを蛍光灯で撮影しました。なんと、こちらのレンズだとISO100のシャッター速度12秒ぐらいで撮影しても明るすぎて白飛びします。なので、-ev 調整しました。ナイトクルージングでは、高感度がものを言いそうなので、こちらのレンズで勝負すべきだったと思いました。ただ、こちらのレンズの場合、標準ズームレンズに比べてピントを合わせるのが難しいんですね。そういう不安はあります。