[java] androidの2系でFragmentを使うときにちょっとハマったこと.v4support-library

v4support-libraryを使おうとしてはまりんぐ
FragmentTransactionを使ってFragmentをaddするときにException発生.

以下のコードはダメな例

        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        Fragment fragment = new Fragment();
        ft.add(mainLayout, fragment);
        ft.commit();

サポートライブラリじゃなくて,メインのFragmentMnagerが呼ばれていたらしい.
次のように明示的に書いて一端解決

        android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
        android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
        Fragment fragment = new Fragment();
        ft.add(mainLayout, fragment);
        ft.commit();

多分importの設定直せば明示的に書かなくてもちゃんと動くと思うけど,慣れてないのでいまは明示的に書こうと思う(どうせサジェスト出るし

pdoでlimit句に対してbindParam, bindValueするとエラー

例えば

 

$sth = $dbh->prepare('SELECT name, colour, calories

    FROM fruit

    WHERE calories < :calories LIMIT :limit');

$sth->bindValue(':calories', $calories);

$sth->bindValue(':limit', $limit);

$sth->execute();

 

のように,limit句に名前付けプレースホルダなどで値をバインドした場合,executeの結果がfalseになってしまう.

 

これはlimit句に渡す値が文字列扱いになっているためらしい.

ということで次のように書き換えて実行したところ通った.

 

$sth = $dbh->prepare('SELECT name, colour, calories

    FROM fruit

    WHERE calories < :calories LIMIT :limit');

$sth->bindValue(':calories', $calories);

$sth->bindValue(':limit', (int)$limit, PDO::PARAM_INT);

$sth->execute();

 

limitに値をバインドするときは,明示的に数値に変換するのと,パラメータのタイプ定数を渡して指定しましょう.

androidカメラコンポーネントのstartPreviewについて

最近androidでカメラコンポーネントを使ってアプリ開発していたときにハマった事.

 

androidの2系と4系で動き(使い方?)がまあまあ違うっぽい.

 

4系ではカメラオブジェクトに対して setPreviewDisplay せずに  startPreview をかけると

 

 

android::status_t android::QCameraHardwareInterface::startPreview():  received startPreview, but preview window = null 

 

のエラーが出るカンジがする.

とりあえずここ見たカンジ,displayがセットされてないとエラーになるっぽかったので,setDisplayしてからstartPreviewしたらエラーは消えた.

https://android.googlesource.com/platform/hardware/qcom/camera/+/0096374269b64612d83c8d91f296aad8c7875ed1/QCameraHWI.cpp

 

2系だと setPreviewDisplay しなくても動いてたんだけどなぁ..

 

で,setPreviewDisplay すると,引き数に渡したsurfaceholderのcanvasがロックされて

そこをいじりにいくと落ちるので,ダミーのsurfaceholderをかませてそこから

描画用のsurfaceholderのcanvasにPreviewを描画してみるっていうのを明日やってみる予定.

 

うまく行ったらまたblogに書こう.

Cannot open "なんとか.xcodeproj" because it is already open in another workspace.

Xcodeでこのエラーが出た時の対処法

 

1. おもむろにXcodeをシャットダウン

2. 起動したいプロジェクトの.xcodeprojファイルをダブルクリック

 

これで起動できるカンジ

XcodeからOpenでファイルを開こうとした時に起きるバグらしい。

謎である。

ruby の require が失敗する

久々に休日エンジニアリングしようと思い,自作ウェブアプリのバッチをいじることに.

 

試しにバッチ動かそうとすると,こんなエラーが

 

/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- ../lib/******** (LoadError)

 

 

該当箇所はこれ

 

require '../lib/*******'

 

 

どうやらrubyのバージョンアップでrequireの仕方が変わったらしい..

次のように書き換えて解決.

 

 require File.dirname( File.expand_path(__FILE__) ) + '/../lib/*******'

 

 

ただ,一々かくのもめんどいので,次のようにディレクトリを読み込んじゃう方法もあるようだ

export RUBYLIB=$RUBYLIB:ライブラリがあるディレクトリ


こっちのがすっきりしそう!

配属から1週間

配属発表が18日木曜日で,19日金曜日から正式に配属先での仕事が始まったので,

1週間ほど働いた事になります.ちなみに配属先は自分の希望通りになりました.

 

結論としては,配属先で希望通り,チャレンジングな仕事ができて満足してるなーと思う.

とはいっても,まだ,何も成し遂げてはいないんだけど.

 

 

先週のアウトプットは,iOSアプリのアップデート一本と,開発環境構築の下準備.

iOSの件はiPhone5対応しただけなので大した仕事じゃなかったけど,学んだ事は「独特な構成のプロジェクト,独特な書き方のコードを理解するのはやっぱ大変」ってこと.

 

自分もコレからプロダクトを作って運用して下に引き継ぐ事があると思うので,そのときに???ってならないようなプロダクトを残していこう!と強く思いました.

 

開発環境構築の準備では,

githubの導入と運用方法を考える(サーバ構成,デプロイの方法など)

まとめた物をmtgでアウトプットする

というカンジでした.

 

githubをあんまり使った事無い上に,ちゃんとチーム開発を経験してない自分には,なかなかチャレンジングな課題で良かったです.

ここで学んだ事は「自分のオリジナリティとかまだいらんよ」ってこと.

最終的にわりと納得感のあるアウトプットを出す事はできたけど,実際に自分のオリジナリティが加わっているとこって2%とか..

他の事業部の先輩とか,同期とかも含めていろんな人に,「こんな構成でやるといいかも」「こんなツールを使ってるよ」といったことを教えていただきました.感謝.

アウトプットの場にも見に来てくれて,「ここってどうなってんの」「ここはもっとこうしたほうがいいよ」とかフィードバックもいただきました.

 

結局最初に自分が考えてた構成とか,ツールとか,ほとんど残らず,先輩方のやり方をそのまま落とし込んだ形になりました.

その時は「うーん,ほぼパクリだけどいいのかな」ってなったけど,昨日室長と話してて色々気づきました.

 

先輩方は自分よりも明らかに出来る人であり,ぶっちゃけ自分がやるより先輩方にやってもらったほうがいい.

でも,人のリソース上そんなことはできないので,先輩たちのまねをして,先輩たちの代わりに自分がやってんだなと.

でも,運用とか続けて色々問題出てくるだろうし,それは当事者の自分にしかわからないことが多い.

そこで,当事者としてその問題にどう立ち向かっていくか,そこできっとオリジナリティが発揮されるんだなと.

今後は,真似して得た知識に現場で考えた事が加わって,自分オリジナルのスキルや考え方が身に付いていくんだろうな〜

ただただ真似して,先輩と同じ事が出来るようになるだけだったら嫌だし!.

 

ま,いまやるべき事は,成功例をバンバン模倣して発射角(精度)の高い土台を作ること.

発射してから角度を維持する為に色々問題が出てくるだろうから,それをいまのうちに想定した準備をしておくことかな.

初任給の使い道

親へ

1. iPad mini 16GB

2. Nexus7 16GB

自分へ

1. ちょっとクール目の小銭入れのついてない長財府

 

親に何を買うかいろいろ考えた結果、上記で落ち着きました。

理由は、「自分のプロダクトを親に直接見てもらえるから」ですね。

 

先輩のエンジニアが、自分のプロダクトに対して父親からレビューをもらっていた(Google play上で)のをみて、いいなそれと思ってこれにしました。

普段家に帰らないし、あまり連絡もしないほうなので、何かプロダクトを作るたびに連絡するキッカケになるかなとも思ってます。

 

結果として、決行喜んでもらえたのでよかったかなと思います。

おやじはずっと端末を触ってました。

おふくろは10分くらい触ったらもう韓流ドラマを見てました。

 

きっと両方おやじがいじり倒すんだろうなー笑

 

 

自分には財布を。

人生初の長財布で、まあまあ値段のするもんをかってやりました。

今まで、大学の頃に彼女にもらった財布をずっと大事に使っていたので、そろそろかえ時かなと。

これが金運につながるといいなあ。