iPhoneアプリのお勉強1
どうも。なんだかんだ、更新をサボりまくっているk_k_yutaです。
ちょっと前からちょいちょい進めていたんですけど、
iPhoneアプリについて少し学ぼうかなと。
空き時間を見つけてちょいちょい勉強しようかと思って、下記のサイトを参考に進めて行こうと思っとります。
メモがてら書いていきます。
http://gihyo.jp/dev/serial/01/iphone/0001
「第一回」
【iPhoneの特色】
・携帯電話には当たり前の方向キーや数字キーが無い。
・アプリ内で使用されるボタンやスイッチ等のパーツが統一されている。
・統一感のあるUIを作成する事が出来る。
・慣れ親しんだパーツを直感的に使えるので操作に戸惑わない。
⇒と書きながら、実のところ僕はiPhoneを持っていないので、
正直、「ふ〜ん、そうなんだ。」くらいにしか理解できません・・
【iPhoneアプリを作るために必要なもの】
・Mac本体(インテルのCPUを使用したもの)
・Mac OS X v10.5(Leopard)以降
【Cocoa TouchとXcodeについて】
・Cocoa Touchとは
Iphone開発で使用するアプリケーションフレームワーク
・Cocoa Touchで使用可能な機能
カメラで写真を撮影
現在位置を取得
・Xcodeとは
Mac付属の開発環境
【Objective-Cについて】
・IPhoneアプリ開発に使用
・C言語を拡張したもの
【いざ,iPhoneアプリへの第一歩】
・各種ツールをそろえれば簡単に始められる・・らしいよ。
とりあえず今日はこんなもんで〜。
海外旅行終了
オーストラリアで{ステーキ昼一枚、ステーキ夜二枚+赤ワイン+オーストラリアビール}をほぼ毎日食らってきたk_k_yutaです。
それでも、まだ食いたいと思う自分がいる。。
今はネタはないですが、これから出てくると思いますので、またちょくちょく更新してこうかな。
と思っています。
では。
結婚式終了!!
結婚式の準備にかこつけてブログの更新をサボりまくっていたk_k_yutaです。
でも、もう終了したので、これからは徐々にまた書いて行こうと思っております。
と、言いつつ、ちょっとしたらすぐに新婚旅行にいってしまい、しばらく更新ができなそう・・
それはさておき、式に来てくださったみなさん。本当にありがとうございました!!
なによりも来てくれた人に「いい式だった。」「泣きそうになった。」という言葉をもらったのが個人的にはかなり嬉しかったですね。
いやはや、ほんとにありがとうございました〜
と、まあ、今日はこんくらいで失礼します。。
気張ってみたものの、さすがに疲れがなかなか抜けなくて眠すぎるので・・
こないだの続き。
昨日書いた日記の続きです。
dbunit + h2 database + domaでテスト環境を構築していてぶち当たった問題について書いた続きです。
問題は、dbunitを使ってテストしたい。データのリストアはトランザクションを使うのでロールバックで実現したい。けど、オートコミットをオフにしてもdomaでエラーが吐かれて実現できない。という事でした。
で、前回はそのエラーを別途、載せると書きましたが、コードを色々いじくっている内に出なくなってしまったので載せません。
なので、新たに調べていて分かった事を書きます。
domaでトランザクションを使おうと思い、ちょくちょく調べていましたが、
aptで自動生成される「xxxxImpl.java」に以下の通り、コネクションをクローズしている箇所がありました。
public int[] execute() { ...中略... } finally { JdbcUtil.close(preparedStatement, query.getConfig() .getJdbcLogger());★ } } finally { JdbcUtil.close(connection, query.getConfig().getJdbcLogger()); } ^^^^^★
予想としては、ここでクローズが走るとコミットも自動的にかかってしまうのでは??
と思ったわけです。いくらオートコミットをオフにしても、ここでコミットされてしまうとトランザクションが実現できないのではないかと。でも、それもおかしい気がするので何か回避策があるのではと思って考え、人に聞き、そして以下の方法にしました。
「プロキシパターン、リフレクションを使って、close()が呼ばれた時のみ何もしなくする。」
ざっくりとコードを以下に載せます。
※処理内容はまだ把握中です。
final SimpleDataSource ds = new SimpleDataSource() { Connection connWrapper; @Override public Connection getConnection() throws SQLException { if (conn == null) { conn = dataSource.getConnection(); connWrapper = (Connection) Proxy.newProxyInstanceUserDaoTest.class.getClassLoader(), new Class<?>[] { Connection.class }, new Java.lang.reflect.InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (method.getName().equals("close")) return null; return method.invoke(conn, args); } }); } return connWrapper; } };
結果としてはclose()が呼ばれた時だけ何もしない処理を書いてあげて、クローズとコミットをさせないようにしています。
これで、close()実行時にコミットが走る事もなくなり、無事にトランザクション処理が実現できるようになります。
本当は、domaで何か回避策が見つかればそちらをやってみようかと思いましたが、今のところ発見できていません。
オートコミットできないのかな
dbunit + h2 database + domaでテスト環境を構築しています。
検証用データとしてどのファイル形式でデータを読み込むかといったところは、結局、検証用データはH2データベースファイルから抽出して比較する事にしました。
試験はトランザクションを使っています。<<簡単な試験フロー>>
テーブルデータを削除 → テストデータを既存のテーブルに投入 →
検証用データと更新後データを比較 → 判定。
テーブルに対するdaoの試験では、
特に試験前のバックアップを取っておく等はせず、SQLで直接データを削除したり、更新したり、検索したりします。
試験終了後のデータリストアは、rollbackさえ実行すれば全て元通りになるので、
それをリストアとしてます。
rollbackを使うので、オートコミット機能はオフにしないといけません。
なのでオートコミットをオフに設定し、そしてテストコードを動かすと、
domaでエラーになってしまいました。
※エラーメッセージは後ほど載せます。
オートコミットをオン(デフォルト)に戻すとエラーを吐きません。
domaがオートコミットをオフにして使えるかどうかを調べる必要がありそうです。
logbackあれこれ1
最近、ちょっとロガーでlogbackを使ったのでその備忘録です。
・インストール
まず必要なjarをlogbackのサイトからインストール。
<DLサイト>
・http://logback.qos.ch/
<DLファイル>
・logback-0.9.18.zip
・logback-access-0.9.18.jar
・logback-classic-0.9.18.jar
・logback-core-0.9.18.jar
<DLサイト>
・http://www.slf4j.org
<DLファイル>
・slf4j-1.5.11.zip
・slf4j-api-1.5.11.jar
これらのjarをクラスパスに通せばOK。
・設定ファイル
ログに関する設定は、直接コードに記載する方法とXMLに記載する方法がある。
・logback.xml
・appenders.xml
・参考ページ
http://kimama2index.info/coolJava/logback/logback.html
http://www.nurs.or.jp/~sug/soft/log4j/log4jlb.htm