2013年10月28日月曜日

近況などを

 まぁ、もう完全に写真にはまってますね。はまりすぎてて怖いぐらいです。SD-1 Merrill だいぶ価格が下がってきててグラッと来ますね。ちょい前までは、このカメラが良いなぁと思ってたんですけど、ちょっと撮影テンポが悪いのが気になりますよね。というか、ブラケット撮影にはまりすぎてて、撮影スタイルが自分に合わないんじゃないかという懸念材料があります。

 NEX-5Rを使い倒したおかげで、色々とわかってきまして、まずブラケット撮影がリモートでもできないと駄目ですし、5枚ブラケットぐらい出来て欲しいし、露出の値をEXIFに記録しておいて欲しいんですよ。この辺がNEX-5Rでは満たせないので、そろそろNEX-5Rは卒業かなぁと考えてます。

 次に、ファインダー要らないだろうとか思ってたんですけど、やっぱりファインダーが欲しいです。ファインダー無しでピント合わせるのは、無理ゲーに近いです。NEX-5RがiPad からRAW撮影できるんだったら、まだ我慢できたかもしれませんけど、小さいモニターだけでは、雰囲気でピントをあわせるしかなく、撮影した後もピントが合ってるのかどうか、さっぱりわかりませんわ。

 Google+ で「美瑛の青い池」のmac の壁紙で有名な Kent Shiraishi さんが、色々と写真(カメラ)にまつわる事を発信して、教えてくださるので、その影響もあって、自分自身の色彩感覚が鋭敏になってきていると感じてます。そうするとカメラのホワイトバランスの性能とかも気になってくるんですよ。

 最近出た中だと、K-3 がめちゃくちゃ気になります。HDRer がこぞって PENTAXを使っているだけあって、ブラケット撮影に関しては文句無しです。最近、フランジバックの短いカメラは緑被りしやすいのかなぁ?とか、センサーサイズを大きくしてカメラを無理にコンパクトにすると、周辺光量が落ちるなど、あちこちに皺寄せが来るという事がわかってきまして、そういう意味からもK-3は良いカメラだなぁって感じてます。フルサイズのカメラも欲しいんですけど、フルサイズに見合うレンズを揃えるとなると、非常に金がかかりそうなんで、自分は、APS-C サイズでいいかなぁ?と考えてるのもあります。K-3は14bit 階調なんで、ダイナミックレンジも広そうなんですよね。センサーサイズの割には解像度も高いので文句なしです。

 EOS-6D も ISO感度上げてもめちゃくちゃ綺麗で、クラクラするレベルなんです。ただ、作例を見てて思ったのは、あっさりしているかなぁ?というのが気になりました。考えてみたんですけど、ノイズキャンセリングで高周波成分が、ちょっとカットされているのかも知れない(直感で根拠ありません)という部分で、自分の中でひっかかってます。
 
 と、まぁ、こんな感じです。仕事の方は、マネジメントの比重が大きくなっても、プログラミングおよび周辺知識において、他との差が圧倒的すぎて、代替が効かないようです。

2013年10月17日木曜日

Bitcasa を使ってみた

 たまには、なんか書いとかないとね。

 はい、BitCasa を試しもせずに年間契約しました。ばんばん撮影している写真のバックアップ用途として使えればいいかなぁ?というのが動機です。その野心的なサービスに興味があったので、半分応援の気持ちもありました。

 正直、アプリケーションの作りがいまいちです。まず、コピーできたのかどうかがわかりません。mac だと、しょっちゅうエラーでデーモンが止まります。
 $ ps aux | grep Bitcasa
 $ kill -9 xxxx

 これが日課です。Finder がハングしたように止まりまくるので恐ろしく作業効率が落ちます。このデーモンを開発したやつを小一時間問い詰めてやりたい気分です。非同期通信で淡々と負荷をかけずに、バックアップ・タスクをこなしてくれるだけで良いんです。

 TimeCapsule との相性も悪い。ディスクのマウントが外れるもんだから、ここのファイルをバックアップするのは、まず無理です。なので macbook 本体側のディスクにコピーしてから、Bitcasa でファイル転送するのですが、成功したのか失敗したのか皆目わからない。確認しようと Bitcasa 側のフォルダーを見に行くと、ディレクトリ一つをトラバースするのに5分ぐらいかかる。そして、続きのファイルを地道にコピーするんです。おかげで、バックアップ作業が全然進みません。

 ディスクのミラーリング、これは、なかなか安定して動きます。ところが、そんな機能別に欲しくないんです。

  mac 版に比べて、Windows 版は安定している印象があります。けど、動作が重たいですよね。やっぱり、このサービス・アプリケーションを書いたやつを小一時間問い詰めてやりたい気分です。 どうやったら、こんな糞重たいアプリケーションを書けるのか?何かハッシュを計算してサーバ側と重複データが無いかどうかをクライアント・パソコン側で延々と計算してサービス・コストを下げているのでしょうか?こんな糞重たいアプリケーション、書こうと努力しても、なかなか書けるものではありませんので、興味は尽きません。

 自分がサービスする側だったら、ファイル・カタログを別にして、そのファイルの状態を保持するKVSパートと、ファイルが格納されているディスク・パートを分離して、タスクでファイルの相互転送ジョブ・サービスを構築しますね。この手のサービスにリアルタイム性を求めるやつなんて、そんないないと思います。リアルタイム性が必要なら、サービスにもっとお金を払うべきだと思います。

 半分、失敗したかな?と思いつつも、アーリーアダプターの立ち位置を楽しみたいと思いますw

2013年10月5日土曜日

android 画面表示時にIMEの起動を抑制する

忘備録
http://www.erhancetin.com.tr/2013/09/android-activity-ilk-acls-edittext.html
にあるように、android:windowSoftInputMode="stateHidden" を追加しておく
<activity  
       android:name="com.example.MainActivity"  
       android:label="@string/example_activity"  
       android:windowSoftInputMode="stateHidden">  
  </activity>  
# android sdk disable ime

2013年9月8日日曜日

Luminance HDR

  Google+ コミュニティHDR愛好会 - レッツ・ゴリゴリーにて、HDR素材提供 その7 「アッタ」from 駆け出しHDRer というイベントを開催してます。その関係で、Luminance HDR というフリーのHDRソフトを使って処理する方法を書きます。
画像をウィザードを使って読み込みます。それぞれ明るさが 2.0 ev、0.0 ev、-2.0 ev となっているので、修正します。

 次に画像のズレを補正します。イベントで提供している画像では、シャッターを押す時にブレてます。画面のように修正しました。(追記:前の画面で、Autoalign images のチェックボックスをオンにすると、位置合わせは自動で行ってくれるようです)


 同様に -2.0 ev の画像に対しても修正をかけます。


 Operator を Mantiuk '08 でやってみました。調整をしている段階では、「Result Size」を 1024 x 680 ぐらいにして、パラメータのレバーを動かして、「Tonemap」ボタンを押して反映させます。保存する時には、「Result size」を最大にしてから保存すると良いでしょう。



2013年8月29日木曜日

SQL Trigger ではまった

今回のバグは難解でした。Sybase SQL Anywhere のデータベースのバージョンをアップしたら、なんか、変なところでエラーになりました。

伝票 テーブル名 SLIP のレコード新規作成で insert 文を発行しているのですが、別の帳票を印刷すると、レコードの挿入に失敗してしまいます。
帳票のコード中で、現象を引き起こす部分を特定したところ、全く関係のない 日別伝票集計 テーブル名 DSLIP を SELECT * FROM DSLIP WHERE RDATE='2013/8/29'; という極めてシンプルなクエリーをオープンして、クローズするだけで発生していました。
訳がわからなくて、コンポーネントを別にしてみたり、接続をクローズしてオープンしてみたり、SELECT文末に FOR READ ONLY を加えてみたりしましたが、エラーは直りません。もうお手上げに近い感じですが、ふとトリガー?というキーワードが浮かびました。それでも原因がわからなくて、助っ人を頼んで原因を特定できました。
よくある事ですが、日別で伝票番号をシーケンシャルで発生させたいという要望から、DSLIP 中に伝票番号の最大値を持たせて SLIP の INSERT TRIGGER で伝票番号を発生させていました。
問題のトリガーは、こんな感じ
ALTER TRIGGER "insert_slip" before insert order 1
on "DBA".SLIP
referencing new as new_val
for each row
begin
  declare AINC smallint;
  declare thisDSlip cursor for select SCNT from DSLIP where RDATE=new_val.RDATE;
  -- %IF CURRENT REMOTE USER IS NULL THEN
  if new_val.SLIPCD is null then
    if not exists(select* from DSLIP where RDATE=new_val.RDATE) then
      insert into DSLIP(RDATE,LDATE) values(new_val.RDATE,TODAY(*))
    end if
    ;
    open thisDSlip;
    fetch first thisDSlip into AINC for update;
    set new_val.SLIPCD=AINC;
    update DSLIP set SCNT=AINC+1,LDATE=TODAY(*) where current of thisDSlip;
    close thisDSlip
  else
    if not exists(select* from DSLIP where RDATE=new_val.RDATE) then
      insert into DSLIP(RDATE,LDATE,SCNT) values(new_val.RDATE,TODAY(*),new_val.SLIPCD)
    end if
    ;
    open thisDSlip;
    fetch first thisDSlip into AINC for update;
    if AINC<new_val.SLIPCD then
      set AINC=new_val.SLIPCD;
      update DSLIP set SCNT=AINC+1,LDATE=TODAY(*) where current of thisDSlip
    end if
    ;
    close thisDSlip
  end if
  ;
  if(ISNULL(new_val.RENT,0)<>0) or(ISNULL(new_val.EMFLG,0)<>0) then
    set new_val.ACFLG=5
  end if
  -- %END IF;
end;

はい、cursor 宣言がまずくて
  declare thisDSlip cursor for select SCNT from DSLIP where RDATE=new_val.RDATE FOR UPDATE;
というように更新をかけるタイプのカーソルですよと、FOR UPDATE 句が必要でした。これが抜けていたために、データベースの状況により読み取り専用カーソルに対して更新をかけるという事態が発生し、エラーを引き押していたと。

2013年8月8日木曜日

「工場夜景・美の祭典」フォトコンテスト2013に応募しますた

「工場夜景・美の祭典」フォトコンテスト2013に応募しました。 3作品まで登録でき、2作品エントリーしました。
1作品目
2作品目
もう1作品、枠があるので、また撮影に行きたいと思います。
コンテストも視野に入れつつ、最初に大雨の中撮影してきたのが、こちらになります。ゴアテックスの雨合羽を着て自転車で移動してましたが、全身びしょ濡れになって、これ以上の撮影は無理!帰ろうと思ったら、大雨でJRが全面ストップw。帰れないけど、自転車での移動は、もう完全に無理。どうしよう?と悩んだ末、歩いて往復22km移動して撮りました。歩いてる途中も雨が激しく降ってきたり、トラックに水をぶっかけられたりして、精神的にも肉体的にも、かなり疲弊しました。いざ撮影してみると、三脚を使っているにもかかわらず、風が強くてブラケット撮影している明るい画像のシャッター速度が長すぎて、ブレブレの写真しか撮影できません。雨の中のレンズ交換では、ローパス・フィルターが汚れる可能性が高いので、やりたくなかったのですが、このままでは勝負にならないと思い、F値が低い単焦点レンズに交換する決意をしました。さすがに、こちらのレンズだとシャッター速度も短い!神経を研ぎ澄ませて、一番低いF値のコンディションでマニュアル・フォーカスで撮影しました。後から考えれば、シャッター速度も余裕があったので、F値を上げて(もう少し絞りを入れて)撮影すれば良かった。これらの写真ではパープル・フリンジが盛大に発生しています。それに、ISOを上げて捨て写真を撮りピントのレベルをチェックする余裕も欲しかったかなぁと。まぁ、パソコンで写真を確認するまで、どんな風に仕上がってるのか、カメラのモニターだけでは、わからないんですけどね(^^;






エントリーした写真は、リベンジで夕景を狙いに行ったものです。撮り終えて、白鳥大橋の反対側に自転車で移動しよう(東室蘭経由)と思ったら、自転車の後輪がパンクしてしまい、ゲームセットとなりました。予定では、この後、深夜の夜景を撮影して漫画喫茶で仮眠して、朝焼けを狙う予定だったのに…。そんなわけで、残り1作品も撮りに、リベンジしたいと考えております。

2013年8月1日木曜日

boost::spirit grammar 書くのが、めんどくなってきたのでテスト

はい、boost::spirit も コマンドによって、引数となる構文構造が異なってくると、いちいち grammar 作成するのも大変ですよね? てなわけで、ちまちま phrase_parse にかけながら、コードで処理を分岐しても良いんじゃないかと思い、実験くんしてみました。
#include <boost/spirit/include/qi.hpp>
#include <string>
#include <iostream>

namespace qi = boost::spirit::qi;

int main() {
  std::string test = "put 123 aioue";
  
  auto i = test.begin();
  bool res = qi::phrase_parse( i, test.end(), qi::lit("put"), qi::ascii::space );
  std::cout << res << std::endl;
  std::string rest;
  rest.assign(i,test.end());
  std::cout << rest << std::endl;
  
  return 0;
}
出力は
1
123 aioue
いちおう 構文を qi::lit("get") に変えてみたところ
0
put 123 aioue
となりまして、ちまちまとパースしても行けそうですよね?
ちょっとしたものならば、こちらの方がササッと書けそうです。