2009年10月28日水曜日

XML の Preference で Intent 呼び出し

ちょっとハマったのでメモ
    <PreferenceScreen
android:title="[タイトル]"
android:summary="[サマリ]">
<intent android:action="android.intent.action.VIEW"
android:targetPackage="[パッケージ名]"
android:targetClass="[パッケージ名].[クラス名]" />
</PreferenceScreen>

2009年8月14日金曜日

android ソース入手。(CentOS 5.3 yum git-1.5.4)

簡単なことですが、すぐ忘れるのでメモ投稿です。

android ソースを入手したくて repo コマンド実行しようとすると、git 1.5.4 以上が必要なんですって。
repo init -u  git://android.git.kernel.org/platform/manifest.git
fatal: git 1.5.4 or later required


私は yum(rpm)派なんですが、rpmforge には 1.5.2 しかなくてどうしようと思ってたら git 本家に yum リポジトリがあったのでそれを使いました。
git は 1.5.4 の最新と思われるものを指定してます。
wget http://kernel.org/pub/software/scm/git/RPMS/git.repo -O /etc/yum.repos.d/git.repo
yum install git-1.5.4.6-1


あとは repo というスクリプトをダウンロードして
mkdir ~/bin
wget http://android.git.kernel.org/repo -O ~/bin/repo
chmod 755 ~/bin/repo


git config で user.email, user.name を設定して、repo init、repo sync でソースコードのダウンロードがはじまります。
git config --global user.email "メアド"
git config --global user.name "名前"
repo init -u git://android.git.kernel.org/platform/manifest.git
repo sync

2009年7月3日金曜日

論理削除とユニークキー制約

ども。久々に時間ができたのでぼちぼち日記書いてみようかなと。
技術ネタですが。。

データベース設計を行うとき、論理削除を採用することが多いです。
論理削除用のカラムとしては boolean 型もしくは小さい数値型を使います。
create table item (
id int not null,
code varchar(40) not null,
name varchar(240) not null,
removed boolean not null default false,
constraint item_pk primary key (id) /* ,
constraint item_code_uk unique key (code) 本当はユニークキー制約をつけたいが。。 */
);

item(商品)テーブルに一意な code(商品コード)という人が認識しやすい番号を任意に設定できるテーブルを設計するとき、ユニークキー制約をつけてしまうと一度論理削除した商品コードが使いまわせない問題が発生します。仕方なくデータベース側のユニークキー制約は外していました。

このテーブルを使うアプリケーション側では、挿入、更新前にユニークキーチェックを行いますが、アプリケーションサーバが複数台あったり、バッチ処理が平行して実行される可能性があったりでなかなか厳密な整合性はとりづらいです。

最近になってふと、論理削除用のカラムをユニークキー制約に含めてインクリメントすればいいじゃんと思いつきました。そして、主キーが 1つあるタイプならばインクリメントとかしなくてそのまま使えるなーと。
create table item (
id int not null, -- 0 以上の主キー
code varchar(40) not null,
name varchar(240) not null,
removed int not null default 0,
constraint item_pk primary key (id) ,
constraint item_code_uk unique key (code, removed)
);

論理削除するときは、
update item set removed = id where id = ?

通常の検索時には where 句に removed = 0 を指定します。
select * from item where removed = 0

まだ実践で使ってないですが多分大丈夫なはず。
いやースッキリした。

2009年4月6日月曜日

起業して1年

1年が早いです。去年の4月に起業してから過去お付き合いのある会社、知人から仕事をいただいて何とかやってこれました。ありがとうございます。

今年は大きな仕事を受注し、社員を増やしたいと思います。

2009年1月20日火曜日

Java のフレームワークどうしましょ

あけましておめでとうございます。

次の受託開発案件で Java を使うことになりそうなのでフレームワークの比較検討しています。

私が今まで使ったことのあるフレームワークは
・Struts 1、2系 → EC など
・Tapestry 3系 → 業務システム
・Click Framework → 自社サービス(openidea.jp)
の 3つです。

一言にフレームワークといっても色々な役割がありますが、私は次の 4つが主要な機能だと考えます。
・URI マッピング
・フォームのバリデーション
・テンプレート
・データベースアクセス

表にするとこんな感じでしょうか。かなり昔の記憶で書いているものあって、正確でなかったり、当時スキル不足や調べ切れなかったものもありますが。。


URI マッピングバリデーションテンプレートデータベースアクセス
Strutsサーブレットフィルタ *.do 標準独自JSP 2.0 標準なし
Tapestryサーブレットを /app などにマッピング独自独自 + ognl 形式なし
Click Frameworkサーブレットフィルタ *.htm 変更不可独自Velocity 標準Cayenne、Spring サポート


この 3つはどれもぴったりハマることなく、気に入らないところは色々いじって使ってました。それぞれの使った感想を簡単にあげます。

Struts:
・設定ファイルが面倒。設定ファイルにして便利だったことはほとんどない。
・*Form, *Action とたくさんのクラスができて管理が面倒。
・学習は比較的容易?情報がたくさんある。

Tapestry:
・業務システムで採用したのが間違いだったかもしれないが、複雑な画面になるとイベントの制御がかなり難解になる。
・カスタムコンポーネントを作り始めると面白い。
・ページ制御側の学習コストは非常に高くつく。HTML テンプレートはスッキリ。

Click Framework:
・拡張子 *.htm が固定で変更できないのが痛い。
・学習は容易。

ほとんどのフレームワークはテンプレート部分や、データベースアクセスは他のプロダクトに変更することが可能です。実はここの選定が肝だったりします。別途テンプレートやデータベースアクセス部分のことは書きたいなと思います。

これらの今まで使ってきたフレームワークの追加調査に加え、Wicket も調査したいです。Spring Framework、S2 など DIコンテナを含むものは今回はパスしようと思います。

ここ 2、3年は Perl、PHP 案件がほとんどだったので忘れていましたが、Java 案件は
→ 新しいフレームワークの選定
→ 開発スタートしてから新しいフレームワークの細かい部分の調査ハマる
で遅延しがちなので要注意ですねー。

2008年12月22日月曜日

仕事でつながるサービス

どもどもー。起業して半年以上たちますが、未だに一人で受託案件こなしてます。
今期は何とか黒字でしたが、そろそろこの一人受託開発スタイルから脱却しないとだめですね。

つまり、社員を雇ったり仕事の一部を外注していきたいのですが。。

そんなときに見つけたサービス「ランサーズ」さん。最近できた様子です。
http://www.lancers.jp/

楽天ビジネスっぽい仕組みは、世の中に無ければ作りたいなーと思ってましたが、これ大変分かりやすくて良いです。どんどん発展していきそうな予感です。

試しに仕事の依頼をしてみようかなー。

2008年11月12日水曜日

mod_ktai バージョンアップ

mod_ktai がバージョンアップしたようです。

前回は mod_ktai おしいなぁという感想だったんですが、今度のバージョンは VirtualHost に対応しています。UTF-8 の PCサイトと Shift_JIS の携帯サイトが共存する環境でも問題なく使えるようになりました。

よかったよかった^ ^

これによって表示は mod_ktai に任せることができるので、あとは入力される 3キャリアの絵文字をノーマライズすればいいですね。