2011年11月2日水曜日

Seasar2入門の参考サイトとプロダクト選択のメモ

久しぶりにJava村に帰ってきた浦島さんの玉手箱メモ。


まずは概要を把握。



一口にSeasar2と言ってもたくさんプロダクトがあるので、Webアプリを作る場合にどのプロダクトを使うべきか調査。

  • MVCは、S2Struts or SAStruts or Teedaのどれがいい?
    • S2StrutsかSAStrutsだとどっち?
    • SAStrutsとTeedaでは?
      • Teeda
        • TeedaはJSFの実装
        • Teeda Extensionを使えばHTMLをテンプレートにできる
      • 「Seasarの問題点など」にそろそろ一言いっておくか - ひがやすを blog
        ただ、無責任に何でも自由というのは良くないので、SAStrutsとS2JDBCの組み合わせが、もっとも無難だというメッセージを出しているわけです。
      • SAStrutsとS2JDBCを作ったわけ - ひがやすを blog
        TeedaとS2Daoは、基本的に規約ベースのフレームワークです。規約を知っていれば、本当にさくさく開発できます。でも、規約ベースなので、規約を知らないと、何にもできなくなっちゃう。この辺が、大規模開発には向かないところ。
        SAStrutsとS2JDBCは、大規模案件にも耐えられるように最初から設計されています。
      • 感想:チームでの開発や今後のメンテを考えると、参考情報も経験者も多いStrutsの名前を冠するSAStrutsに比べてTeedaは学習コストがかかりそう
    • 結論:SAStrutsが無難
  • S2JDBC or S2Daoのどっちを使う?
    • HibernateとS2DaoとS2JDBCの考え方 - ひがやすを blogより引用
      • S2Daoについて
        S2DaoはSQLを中心に考えます。とはいえ、すべてのSQLを開発者が書くのは効率が悪いので、挿入、更新、削除は、S2DaoがSQLを自動生成しますが、検索は、開発者にSQLを書いてもらいます。
        デメリットは、SQLを書くのが面倒なことです。また、検索の結果セットごとにDTOを作らなければいけないので、DTOが増える傾向があります。
        Webのフレームワークとの組みあわせでいくと、Teeda Extensionは、S2Dao(DTO)と相性が良いように設計されているので、Teedaを使う場合は、S2Daoが良いと思います。
      • S2JDBCについて
        S2JDBCは、エンティティ(Java)とテーブル(データベース)は、同一のモデルだとみなしています。また、複雑なSQL以外は、すべて自動生成します。
        デメリットは、エンティティの設計が、テーブルに引きずられ、完全にドメインをあらわしたものにならないこと。
    • 感想
      • S2DaoはINSERT/UPDATE/DELETEのSQL自動生成と、手作りしたSQLの実行をしてくれるみたい
      • S2JDBCはDAOではなくApache CommonsのDbUtilsのようなSQLビルダー?
    • 結論:TeedaでないならS2JDBCで



久しぶりにJavaの世界に帰ってきたら、昔使ってたStruts1.3(1.x系は1.3で止まってるとは意外)のラッパーであるSAStrutsと、同じく昔使ってたJakarta Commons(現在は昇格してApache Commons)のDbUtilsに似たS2JDBCが最前線だなんて、奇遇と言うか、あるいは必然なのかな。

2011年10月17日月曜日

Windows XPに Titanium Studioをインストール


開発構築にリトライしたメモ。
インストールからKitchen Sinkを動かすまで。
Titanium StudioもAndroid SDKも重いので、なるべくパワーのあるPCでやった方がよい。


まずはインストール

  • JDK
    • Java SE Downloadsから、Java SE 6の最新版をダウンロードしてインストール
      • 7だとダメらしい
      • インストール時には、pathにスペースを含まないようにする?
    • Windowsの環境変数「PATH」にbinフォルダのpathを追加
      • 環境変数「JAVA_HOME」を登録し、PATHには"%JAVA_HOME%\bin"の形で登録しておくと、JDKのバージョンが変わった時の変更が楽になるし分かりやすい
  • Android SDK
    • Android SDK | Android Developersから、最新版をダウンロードしてインストール
      • インストール時には、pathにスペースを含まないようにする
    • SDK Managerを起動(通常は自動で立ち上がるらしい)
    • 必要なパッケージをインストール
      • SDK Platform Android 2.1は必須
        • これが無いとTitanium StudioがAndroid SDKを認識しないらしい
      • Google APIs by Google Incも必要
        • これが無いとエミュレータがうまく動かない
      • かなり時間がかかる
      • 迷うなら全部入れておけば無難(ただし時間はかかる)
    • platform-toolsフォルダ内のadb.exeを、toolsフォルダにコピー
      • 以前はtoolsフォルダにあり、Titanium Studioがそれに合わせた動きをするため
    • Windowsの環境変数「PATH」にplatform-toolsフォルダとtoolsフォルダのpathを追加
      • JAVA_HOMEと同様に、ANDROID_SDKとか環境変数として登録すると良いでしょう
  • Titanium Studio


動作確認
  • Titanium Studioを起動
    • Work Spaceの場所を訊かれる。スペースを含まないpathを指定する(?)
    • Titanium(appcelerator)のアカウントを訊かれるので入力
    • Firewallが警告を出してきたら許可
    • Gitが無いと言ってきたら、「Use PortableGit」をクリック?
  • Mobileのプロジェクトを作成
  • 実行
    • 実行前にadb.exeが実行されていたら、タスクマネージャからプロセスを終了(?)
    • プロジェクトをRun
    • Firewallが警告を出してきたら許可
  • 「I am Window 1」が表示されればOK!
    • 「[TRACE] adb devices returned 0 devices/emulators」が続いてタイムアウトしたら、タスクマネージャから「adb.exe」のプロセスを終了させてから再実行する


KitchenSinkを動かす


さあ始めよう


参考

2011年10月6日木曜日

スマートフォンのGeolocation API 調査メモ


AndroidやiPhone(そして実はPCでも)のブラウザで位置情報を取得するGeolocation APIについての調査メモ。



Androidではgoogle.gearsを使うという説明が多いけど、手元のAndroid(2.3.3)の標準ブラウザではiPhoneと同様にnavigator.geolocationでGeolocation APIが使えた。
(逆にgoogle.gearsを使おうとするとエラーになった。)



(2011/10/21 追記)

2011年10月3日月曜日

MySQLの dumpと restore


文字コード設定がされていないサーバからダンプする時に文字化けすることの対策のメモ。


dump

mysqldump -u user_name -p --compact --default-character-set=binary db_name > dump.sql

restore
DB(Schema)を作ってから、
sed 's/latin1/utf8/g' dump.sql > dump_utf8.sql
mysql -u user_name -p db_name < dump_utf8.sql

バイナリで出して文字コードの記述を置換してから取り込む。


参考

2011年9月30日金曜日

preg_match()の$は末尾に改行があってもマッチする


$は最後に改行があってもマッチする。(ただし、マッチした結果には改行は含まれない。)

preg_match('/^aaa$/', "aaa\n", $match);
echo '<pre>"', $match[0], '"</pre>';
↓
"aaa"


$の代わりに"\z"(バックスラッシュ+小文字のz)にすれば、改行があるとマッチしない。
preg_match('/^aaa\z/', "aaa\n", $match);
echo '<pre>"', $match[0], '"</pre>';
↓
""


Zが大文字だと$と同様に改行があってもマッチするので注意。
preg_match('/^aaa\Z/', "aaa\n", $match);
echo '<pre>"', $match[0], '"</pre>';
↓
"aaa"


$は改行の後ろに何かあればマッチしない。
preg_match('/^aaa$/', "aaa\n ", $match);
echo '<pre>"', $match[0], '"</pre>';
↓
""


例えそれが改行でも。
preg_match('/^aaa$/', "aaa\n\n", $match);
echo '<pre>"', $match[0], '"</pre>';
↓
""


マッチした結果に改行まで含ませるとこうなる。
preg_match('/^aaa\n\z/', "aaa\n", $match);
echo '<pre>"', $match[0], '"</pre>';
↓
"aaa
"


参考

ブログ アーカイブ

tags