2007年6月28日木曜日

OracleシーケンスのNEXTVALとCURRVAL

スズキです。

Oracleシーケンスネタです。
http://suz-lab.blogspot.com/2007/06/oracleid.html

OracleでシーケンスなどでIDを発行してる場合、
発行したIDがプログラムで必要なる場合があります。
(IDをメールで送信したり、など)

まあ、やり方はこんな感じです。

--------データの登録
INSERT INTO XXX (
  ID,
  ...
) VALUES (
  XXX_ID_SEQ.NEXTVAL,
  ...
)
--------発行されたIDの取得
SELECT XXX_ID_SEQ.CURRVAL
FROM DUAL
--------
※シーケンス、XXX_ID_SEQが存在すると仮定

注意事項として、上記二つのSQLは同一セッションである必要があります。
また、同一インサート文内で、何回NEXTVALしても、値は一つしか増えません。

忙しいを理由にブログの更新をサボるのは負けだね。

--
blog: http://suz-lab.blogspot.com/

2007年6月23日土曜日

"Java World Day 2007"参加報告

スズキです。

少し遅くなりましたが、表記イベントの参加報告です。
http://suz-lab.blogspot.com/2007/06/java-world-day-2007619.html

注意して聞いたセッションは下記となります。
私の気になった点も簡単に書いておきます。

▼アジャイル・ソフトウェア開発の現在
http://www.idg.co.jp/expo/jwday/2007/session/#keynote

-ペアプログラミングはお互いで進捗を監視させるため。
※ほとんどのプログラマはほとんどの時間プログラミングしないから。
※皆さん心当たりあるでしょう!?

-"Continuous Integration"ツールは下記のようなものがある。
BuildForge, Cruise Control, Maven/Continuum, Ant/AntHill, Tinderbox
※Maven/Continuumは普通につかってるんだけど、あとは使ったことないなー。

-データベースのリファクタリング/テストもやらなきゃ。
※やったことありません。これから意識していかなくては。
※このあたりは、トリガー、ビュー、制約、...の技術が重要になってきます。

▼Java SE 7でJava仕様はどう変わる?
http://www.idg.co.jp/expo/jwday/2007/session/#ja1

-そういえば、オープンソースになったんだっけ?OpenJDK
※でも、100%オープンではない。(他社技術も利用しているため)

-仕様は結構二転、三転してるらしい。
※まだ、追っかける気にはならないなー。

-"More New IO"は隠れた目玉?
※"New IO"すら使ったことないのに...

-というか、JavaFXが話題の中心
※Appolo / Silver light / Java FX 、どうしよう!?

▼Adobe Apolloが実現するWebの未来
http://www.idg.co.jp/expo/jwday/2007/session/#sb2

-AIRというより、新しいFlexBuilderに関心が行ってしまった。
※リファクタリング機能の強化をうれしいね。
※Advanced DataGridには期待。(かゆいところに手が届くか!)
※デザインビューの機能も強化(これもうれしいね)

-CS3との連携は楽しみです。
※FireWorksはMXMLでの出力ができる。
※FlashでFlexのコンポーネントが作成できる。

7月はCS3がんばろう。

--
blog: http://suz-lab.blogspot.com/

Red5が0.6.2になってた

スズキです。

Red5というFMSみたいなことができる
Webアプリケーション(war提供)があります。
http://osflash.org/red5

ストリーミングができたり、リモーティングできたりと、
昔から注目していたプロダクトでした。

しかし、バージョン0.5のときFlex2でのストリーミングが
うまくいかないような情報を見つけて、
一旦、追いかけるのやめていたのですが、
ふと、思い出して、しらべてみると、バージョンが0.6.2になっていました。
http://osflash.org/blog/2007_06_17_red5_062_released

もう一度、調査してみる価値ありです。
(Flex2やAS3との親和性など)

"Open Source Flash"の情報も追いかけないとなー。
http://osflash.org/blog/

--
blog: http://suz-lab.blogspot.com/

"A.e.Suckが魅せるFlashアニメーションの世界"参加報告

スズキです。

表記イベントの参加報告です。
http://suz-lab.blogspot.com/2007/06/aesuckflash620.html

A.e.Suckさんが、ペンタブレット(WACOM)を用いて
Flashのアニメーション作成を実演するイベントでした。
http://tablet.wacom.co.jp/

まず思ったことは、A.e.Suckさんは楽しそうな人だなー、
ってことです。

次に思ったことは、ペンタブレットって実用的なものなんだ、
ってことです。

最後に思ったことは、俺もペンタブレット買って、アニメーション書きてー、
ってことでした。

でも、イラスト書けません。

ペンタブレットでイラストガンガン書ける、CTOになりたいなー。

--
blog: http://suz-lab.blogspot.com/

SUMするときの注意(Oracle)

スズキです。

Oracleで、SQLの集計関数SUMを使うときの注意点です。

NULLをSUMしてもNULLです。
たぶん、結果として、0を期待するパターンが多いと思います。

その場合は、下記のように、NVL関数を使い、
NULLだったときに返す値を設定します。

--------
SELECT NVL(SUM(AMOUNT), 0)
FROM XXX
--------
※NULLだった場合は0を返してます。

やっぱり最後はSQL頼みか。

--
blog: http://suz-lab.blogspot.com/

INSERT時に現在日時の登録(Oracle)

スズキです。

Oracleでデータの登録(INSERT)時に、
現在日時を一緒に登録する方法です。

といっても、sysdate一発です。
すっかり忘れてました。

--------
INSERT INTO XXX (
  ...
  INSERT_DATETIME
) VALUES (
  ...
  sysdate
)
--------

今やってる案件は、Oracleリハビリ案件だね。

--
blog: http://suz-lab.blogspot.com/

2007年6月22日金曜日

Ajax体験授業終了

スズキです。

昨日デジハリでAjaxの体験授業やりました。
http://suz-lab.blogspot.com/2007/06/ajax621-1930-2130.html

1時間Ajaxの説明して、
1時間Lightbox.jsを使った実習です。
http://www.huddletogether.com/projects/lightbox2/

基本的に、Ajaxの売りの一つである、リッチなUIを感じてもらうことを
前提にした実習となっており、非同期通信の部分はありませんでした。

ただ、受講後のアンケートを見ると、非同期通信の実習についても
皆さん興味があるようです。

1時間でリッチUIと非同期通信を体感できるネタを考えなくては!

--
blog: http://suz-lab.blogspot.com/

2007年6月20日水曜日

7月の予定登録完了

スズキです。

7月の予定で現在わかっているものを、
すべてカレンダーに反映しました。

気になる点は二点。
●デジハリ多いなー
●公開できない予定がないなー

いい、わるいは別として。

--
blog: http://suz-lab.blogspot.com/

"Adobe AIR Developers Night"参加予定(7/10)

鈴木です。

"Adobe AIR Developers Night"に参加予定です。
http://www.adobe-dev-night.jp/index.html

ApolloもAIRとなり、今後が楽しみです。

--
blog: http://suz-lab.blogspot.com/

DBMS_OBFUSCATION_TOOLKIT(Oracle)でデータの暗号化

スズキです。

セキュリティにうるさい昨今、クレジットカード番号などは、
暗号化してDBに保存する必要が多々あります。

まあ、暗号化はJavaとかPHPでやればいいって話もありますが、
今回は、JavaとPHPの両方から、DB(Oralce)をつっつくので、
共通で使える、暗号/復号手段として、
Oracleの関数(DBMS_OBFUSCATION_TOOLKIT)を使ってみました。
(下記参考にした情報です)
ftp://ftp.ashisuto.co.jp/pub/standard/vol81/obfuscation_toolkit.pdf

結局は、上記の組み込みファンクション使って、下記のようなファンクション
を作成します。ただ、下記の場合だと、
8の倍数の文字数しか暗号化できないので、そのあたりを調整するために、
string_encryptのinput_valには"RPAD(input_val, 24, ' ')"を、
string_decryptのreturn_valには"RTRIM(return_val, ' ')"をかけています。

--------暗号化ファンクション
CREATE OR REPLACE FUNCTION string_encrypt(input_val VARCHAR2)
RETURN VARCHAR2 IS
  key_str VARCHAR2(16) := 'ABCDEFGHIJKLMNOP';
  return_val VARCHAR2(40) := NULL;
BEGIN
  DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(
    input_string => RPAD(input_val, 24, ' '),
    key_string => key_str,
    encrypted_string => return_val
   );
  RETURN return_val;
END;
/
--------復号化ファンクション
CREATE OR REPLACE FUNCTION string_decrypt(input_val VARCHAR2)
RETURN VARCHAR2 IS
  key_str VARCHAR2(16) := 'ABCDEFGHIJKLMNOP';
  return_val VARCHAR2(40) := NULL;
BEGIN
  DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
    input_string => input_val,
    key_string => key_str,
    decrypted_string => return_val
  );
  RETURN RTRIM(return_val, ' ');
END;
/
--------

そして、こんな感じで確認できます。
--------
select
  string_decrypt(
    string_encrypt('1234567890')
  )
from dual
--------

PL/SQLも目覚めだしたね。

--
blog: http://suz-lab.blogspot.com/

Oracleで外部キー制約

スズキです。

すっかり忘れていたので、メモしておきます。

たとえば、会員テーブルとクレジットカードタイプテーブルがあって、
クレジットカードテーブルが、両テーブルの主キーを参照している場合です。

(テーブル): (主キー)
MEMBER: MEMBER_ID
CREDITCARD_TYPE: CREDITCARD_TYPE_ID

--------
CREATE TABLE CREDITCARD (
  CREDITCARD_ID NUMBER(10) PRIMARY KEY,
  MEMBER_ID NUMBER(10) NOT NULL,
  CREDITCARD_TYPE_ID NUMBER(1) NOT NULL,
  CREDITCARD_NO  VARCHAR2(40) NOT NULL,
  CONSTRAINT CREDITCARD_FK_1 FOREIGN KEY (MEMBER_ID)
    REFERENCES MEMBER(MEMBER_ID),
  CONSTRAINT CREDITCARD_FK_2 FOREIGN KEY (CREDITCARD_TYPE_ID)
    REFERENCES CREDITCARD_TYPE(CREDITCARD_TYPE_ID)
);
--------

あと、クレジットカード番号は暗号化して挿入しておきたいところですね。

--
blog: http://suz-lab.blogspot.com/

Creditcard関係アップグレード

スズキです。

クレジットカード関係の実装がまた入ったので、
今までの成果物をアップグレードしときました。
http://suz-lab.googlecode.com/svn/trunk/suz-s2-validator/

今回のアップグレードは下記二点です。

まずはsuz-s2-validatorのCreditcardType.javaで定義されている、
クレジットカードタイプの列挙型にIDをつけました。
getId()で取得できます。

IDに関しては独断と偏見で下記のように定義しています。

1: AMEX
2: VISA
3: MASTERCARD
4: DISCOVER
5: DINERS
6: JCB

--------CreditcardType.java
package jp.co.iret.suz.s2.validator.type;
public enum CreditcardType {
  AMEX, VISA, MASTERCARD, DISCOVER, DINERS, JCB;
  public int getId() {
    switch(this) {
      case AMEX: return 1;
      case VISA: return 2;
      case MASTERCARD: return 3;
      case DISCOVER: return 4;
      case DINERS: return 5;
      case JCB: return 6;
      default: throw new RuntimeException();
    }
  }
}
--------
http://suz-lab.googlecode.com/svn/trunk/suz-s2-validator/src/main/java/jp/co/iret/suz/s2/validator/type/CreditcardType.java

次に、上記IDにのっとって、DBのクレジットカードタイプ(マスタ)テーブル
のようなものも用意しておきました。
(INSERT文はSVNにて)

--------suz_creditcard_type-oracle.sql
CREATE TABLE CREDITCARD_TYPE (
  CREDITCARD_TYPE_ID NUMBER(1) PRIMARY KEY,
  CREDITCARD_TYPE_NAME VARCHAR2(16) NOT NULL UNIQUE,
  UNAVAILABLE_FLAG NUMBER(1) NOT NULL,
  DELETE_FLAG NUMBER(1) NOT NULL
);
--------
http://suz-lab.googlecode.com/svn/trunk/suz-s2-validator/src/main/sql/suz_creditcard_type-oracle.sql

使い回しながらアップグレード、の流れが続けば最高だね。

--
blog: http://suz-lab.blogspot.com/

2007年6月18日月曜日

eclipse(WTP)で"Hot Deploy"

スズキです。

今回のTeeda環境は"Hot Deploy"が機能しました。
(S2Flex2とかだと、うまくいかないんですよね。設定!?)

※"Hot Deploy"はクラスなどを更新しても、
アプリケーションサーバの再起動がいらない仕組みです。

"eclisep(3.2.2) + WTP(Tomcat)"環境での"Hot Deploy"についてです。
といっても、reloadable="true"をreloadable="false"に変更するだけです。

じゃあ、どこの?っていう話になりますが、
Eclipseのプロジェクト一覧(左側)に"サーバー"っていうのがあるはずです。
(日本語化してない場合は、"Server"だったかな?)

その下に、各サーバの設定フォルダがあり、
その中に、"server.xml"っていうのがあります。

恐らく、その下あたりに、下記のような起動するコンテキストの記述があります。

--------
<Context docBase="xxx"
    path="/xxx"
    reloadable="true"
    source="org.eclipse.jst.j2ee.server:xxx"/>
--------

ここのreloadable="true"を"false"にすると、
クラスなど更新しても、リロードがかからず、
"Hot Deploy"を確認することができます。

サクサク開発できるかなー?

--
blog: http://suz-lab.blogspot.com/

Pageクラス(Teeda)はやっぱりgetter/setter必要?

スズキです。

Pageクラス(Teeda)のPropertyInterTypeが成功したと思いきや、
やっぱり、必要なことがわかりました。
http://suz-lab.blogspot.com/2007/06/pageteedapropertyintertype.html

Teedaは遷移元と遷移先のpageクラスに同じフィールドがあると、
値を引き継いでくれます。

それが、明示的にgetter/setter書かないと、うまく引き継いでくれませんでした。

残念...

--
blog: http://suz-lab.blogspot.com/

Pageクラス(Teeda)でPropertyInterType

スズキです。

setter/getter撲滅キャンペーン第二弾です。
http://suz-lab.blogspot.com/2007/06/resourceseasar2.html

いろいろPropertyInterTypeの実験をしているのですが、
ついに、しっくりくる、パターンを見つけました。

表記にあるとおり、Teedaで利用するPageクラスのフィールドに対しての適用です。
下記は"Smart Deploy"を想定した設定です。

これでprivate以外のアクセス修飾子のフィールドが
PropertyInterTypeの対象になり、setter/getterを書く必要がなくなります。
(実行時に作成してくれます)

--------customizer.dicon--------
........
<components>
  <component name="propertyInterTypeCustomizer"
      class="org.seasar.framework.container.customizer.InterTypeCustomizer">
    <property name="interTypeName">"propertyInterType"</property>
  </component>
</components>
--------

--------customizer.dicon--------
...
<components>
  <include path="default-customizer.dicon"/>
  <include path="extra-customizer.dicon"/>
  <component name="pageCustomizer"
      class="org.seasar.framework.container.customizer.CustomizerChain">
    <initMethod name="addCustomizer">
      <arg>classLoaderAwareTraceCustomizer</arg>
    </initMethod>
    <initMethod name="addCustomizer">
      <arg>propertyInterTypeCustomizer</arg>
    </initMethod>
  </component>
</components>
--------

--------XxxPage.java
........
public class XxxPage {
  int question01; // PropertyInterType適用
  public String doAction() {
    return null;
  }
}
--------
※privateだと、PropertyInterTypeはききません。

DTOとかにも、うまく適応できるといいんだけどなー。

--
blog: http://suz-lab.blogspot.com/

"第7回RIAコンソーシアムビジネスセミナー"参加予定

スズキです。

表記参加予定です。
http://www.ria-jp.org/information/20070710.html

今回は"すごい地図"や
http://sugoi.doko.jp/
携帯Flashがテーマになってます。

エンタープライズRIAへの道は遠いなー。

--
blog: http://suz-lab.blogspot.com/

"あわせて読みたい"を導入してみました

スズキです。

右の一ブロックに"あわせて読みたい"というブログパーツを追加してみました。
http://awasete.com/show.phtml?u=http%3A%2F%2Fsuz-lab.blogspot.com%2F

--------
「あわせて読みたい」とは、
あなたのブログ読者が「よく読んでいる」ブログを
知ることができる無料サービスです。
--------

というサービスです。
http://awasete.com/indexabout.phtml

集計モードも終わり、何かしら表示していますが、
意外なブログもあります。

右側があふれ出してきた。

--
blog: http://suz-lab.blogspot.com/

2007年6月16日土曜日

シーケンス(Oracle)を用いたID作成

スズキです。

表記の内容は、別に記事にするまでもないことですが、
今、やっている案件がこんな課題だったので、備忘録として。

●既存のテーブルにデータを追加
●ID列(主キー/文字列/10桁)にIDを入れるわけだが下記制約あり
●[制約]最初の5桁は決まっている'11111'
●[制約]残りの5桁は重複しない数字を適当に入れる(まあ主キーだからね)

方針としては、
連番を発行するシーケンスを作成して、
そのシーケンス番号の左側を5桁になるまで0で埋めて、
決まっている文字'11111'と連結して、挿入、
って感じでしょうか?

で、下記が実装です。

▼シーケンスの作成
--------
CREATE SEQUENCE XXX_ID_SEQ;
--------

▼シーケンスを用いた、IDのインサート
--------
INSERT INTO XXX (
  ID,
  ...
) VALUES (
  '11111' || LPAD(XXX_ID_SEQ.NEXTVAL, 5, '0'),
  ...
)
--------
※"左側を5桁になるまで0で埋めて"はLPAD関数使ってます。

SQL勉強しなおしたくなってきた。(分析関数とか)
http://www.atmarkit.co.jp/fdb/rensai/sqlclinic08/sqlclinic08_1.html

--
blog: http://suz-lab.blogspot.com/

Google グループで"Durian Users Group"作ってみた

スズキです。

結構、Durian(4)のノウハウたまってきたので、
表記のとおり、Googleグループに
"Durian Users Group"を作ってしまいました。
http://groups.google.com/group/durian-users-group

suz-lab/Durian関係者は強制的に登録していきます。
また、昔からあるのですが、"suz-lab"グループもとりあえず生きてます。
http://groups.google.com/group/suz-lab

でも、まだ、両方ともコンテンツはないに等しい状態です。
あしからず。

関係者間の質問のやり取りができるといいんだけどなー、
メッセンジャーでやっちゃうんだよねー。

--
blog: http://suz-lab.blogspot.com/

2007年6月15日金曜日

default-customizer.diconってのがあった!

スズキです。

Seasar2のcustomizer.diconの設定についてですが、
今までは、いちいち、DAOとかDXOのAspectCustomizer
を定義していたのですが、s2-framework-x.x.x.jarに
default-customizer.diconというものがありました。

で、このdefault-customizer.diconは
std-customizer.diconをインクルードしており、
ここには、各種AspectCustomizerが設定されていました。
(Kuina-Daoもありました!)

ということで、今まで書いたAspectCustomizerは削除して、
下記のようにdefault-customizer.diconをインクルードする形に、
customizer.diconを変更です。
--------customizer.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
    "http://www.seasar.org/dtd/components24.dtd">
<components>
  <include path="default-customizer.dicon"/>
  <include path="extra-customizer.dicon"/>
  ...
<components>
--------
※extra-customizer.diconはdefault-customizer.diconにない
AspectCustomizerを定義する独自diconです。

調べると、ドキュメントもありました。
http://s2container.seasar.org/ja/stdDicon.html#default-customizer.dicon

Seasar2がストレスなく使えるようになるまでは、もう少しかな?

--
blog: http://suz-lab.blogspot.com/

2007年6月14日木曜日

@Resourceでフィールドインジェクション(Seasar2)

スズキです。

今日は、getter/setter撲滅DAYです。

まず、はじめに、@Resourceを用いたフィールドインジェクションです。
http://s2container.seasar.org/ja/ejb3.html#EJBAnnotation

今までは
--------HogeServiceImpl.java
public class HogeServiceImpl implements HogeService {
  private HogeDao dao;
  public void setDao(HogeDao dao) { this.dao = dao; }
  public String getDao() { return this.dao; }
  ...
}
--------
とgetter/setterをいちいち作っていたのですが、
--------HogeServiceImpl.java
public class HogeServiceImpl implements HogeService {
  @Resource
  private HogeDao dao;
  ...
}
--------
といった具合に、@Resourceをつかうと、フィールドインジェクションしてくれます。
これで、かなりコードがさっぱりします。

次は、(Property)InterTypeに挑戦です。

--
blog: http://suz-lab.blogspot.com/

"Durian4 + Teeda"波ダッシュ(~)問題

スズキです。

よくあることなのですが、案の定、表記の問題が発生しました。
つまり、"~"が"?"と表示される問題です。

で、XML宣言を
--------
<?xml version="1.0" encoding="Shift_JIS">
--------
から
--------
<?xml version="1.0" encoding="Windows-31J">
--------
に変更することで解決します。
※エンコーディング指定の変更です。

もう、表示系の問題は出つくしたかな?

--
blog: http://suz-lab.blogspot.com/

2007年6月13日水曜日

"Durian4 + Teeda"やっぱりHTMLはShift_JIS

スズキです。

以前の記事で、"Durian4 + Teeda"で、
HTMLを正しく表示させるためのTipsを書きました。
http://suz-lab.blogspot.com/2007/06/durian4-teeda.html

その記事では、ソースのHTMLはUTF-8で、
ということにしてましたが、文字によっては、Durian4での
文字コード変換(Shift_JISへ)がうまくいかない場合があるようです。

で、いろいろ調べていると、ソースHTMLをShift_JISにして、
下記のようにすることで、うまくいくことがわかりました。

--------
<?xml version="1.0" encoding="Shift_JIS"?>
<html>
  <head><title>テスト</title></head>
  <body>
    <![CDATA[&i-mode_63647;]]>
    <hr size="1" color="#0099cc"/>
    この文章はテストです。
  </body>
</html>
--------
※ポイントはencoding="Shift_JIS"ですね。

あと絵文字ですが、下記記事では、
絵文字コードとしてCHTMLのものを例に出しています。
http://suz-lab.blogspot.com/2007/06/durian4-teeda_08.html

ですが、今回の書き方に変えるとXHTML扱いになり、
絵文字コードもXHTMLのものを使う必要があります。
http://durian.symmetric.jp/dev/doc/manage/glyph_table.html

やっぱり、文字コード変換は、できるだけなくなるようにしないといけませんね。
ケータイコンテンツなら、ソースもShift_JISってことで。

--
blog: http://suz-lab.blogspot.com/

twitterfeedでブログの更新をtwitterに通知

スズキです。

ひょんなことから、下記の記事に出会い、表記を実現しまいました。
http://torotiti.cocolog-nifty.com/blog/2007/06/p903ix_twitter__80de.html

具体的いいますと"twitterfeed"というサービスがあり、
このサービスは、特定のrss/atomを監視し変更があったら、
twitterに通知するものです。
http://twitterfeed.com/
(久しぶりに、OpenIDみました、使えるのかなー?)

ということで、私のtwitterは下記になります。
http://twitter.com/iretsuzuki

まずは、ブログの更新をtwitterで通知するようにしました。
興味のある方は、友達になってみてください。
ブログに新しい記事がポストされたら、twitterに通知が行くと思います。

とりあえず、自分の中で、twitter復活。

--
blog: http://suz-lab.blogspot.com/

Oracle(10gR2)は空文字とNULLが同じ!?

スズキです。

なんと、Oracle(10gR2)は空文字とNULLを区別しないようです、

なので、こんなテーブルに、
--------
CREATE TABLE ZIP (
  ZIP_CD CHAR(8) NOT NULL,
  ZIP_PNAME VARCHAR(64) NOT NULL,
  ZIP_CNAME VARCHAR(64) NOT NULL,
  ZIP_TNAME VARCHAR(64) NOT NULL
);
--------

こんなインサート文投げると、
--------
insert into zip values('060-0000','北海道','札幌市中央区','');
--------

ZIP_TNAMEにNULLは挿入できないと起こられます。

なので、空文字''はNULLとして扱われるので、
空文字''という概念は存在しないようです。
(where ZIP_TNAME = '' だと、何も検索されない)

ということで、Oracle(10gR2)ではsuz-labの
「String系カラムは必ず"NOT NULL"」
ルールは適用できないことが判明しました。

--
blog: http://suz-lab.blogspot.com/

2007年6月12日火曜日

"S2Mai + Velocity"でメール送信

スズキです。

Seasar2のメール関係のプロダクトにS2Mailというすばらしいものがあります。
インターフェースに抽象メソッド書いて、それに対応するメールテンプレート
(Velocity/FreeMarker)を作っておくと、実装クラス書かなくても、
勝手に該当するテンプレート使って、メール送ってくれます。
(Velocity使えるようにする部分は、私も手伝わさせていただきました)

要は、S2Daoのメール版といった感じで、SQLファイルが
メールテンプレートになってる感じです。

とにかく、ここが総本山。
http://s2mai.sandbox.seasar.org/ja/index.html
※使いたい人は、とりあえず、ここの情報は把握しておきましょう。

最初に注意点ですが、下記jarが存在すると、
geronimo-j2ee_1.4_spec-1.0.jar
メール送信時に、挙動がおかしくなる可能性があります。
(TOがメールサーバに送られず、メールが送信できない!?)

で実際に、どんなコードを書けばよいかですが、
今回は、テンプレートにVelocityを使うこととします。

まずはクラス/インターフェースの作成です。

--------SampleMaiDto.java
package xxx.dto;
public class SampleMaiDto {
  private String from; // メールのFromになります。
  private String to; // メールのToになります。
  private String userName; // 本文に差し込む値です。
  // getter & setter は省略
  ...
}
--------

--------SampleMai.java
package xxx.mai;
import xxx.dto.SampleMaiDto;
public interface SampleMai {
  public void sendSampleMail(SampleMaiDto dto);
}
--------

sendSampleMailメソッドを実行すると、dtoのデータと、
メールテンプレートがマージされてメールができ、それが送信されます。
※From, To, Cc, Bcc, Subject, などの指定はいろいろなやり方(diconなど)があります。

次にメールのテンプレートですがMaiインターフェースと同じパッケージ下に、
配置する必要があります。そして命名規則もあり、
インターフェース名_メソッド名.vm(Velocityの場合)
となります。(S2Daoのsqlと同じですね)

--------SampleMai_sendSampleMail.vm
Subject: サンプルサブジェクト

サンプル本文
${data.userName}
--------

"Subject: "の次にサブジェクト入れて、一行空けて本文を書きます。
引数のdtoの値を参照する場合は${data.フィールド名}となります。
※Subjectの設定方法もいろいろあります。

そして最後にやらなければいけないのが、diconの設定です。
まず用意しなければいけないdiconは、
●mailProperties.dicon : smtpサーバの情報設定
●mailTemplate.dicon : テンプレートの設定(Velocity or FreeMarker)
です。(ダウンロードしたアーカイブにサンプルがあるはずです)

ここで、テンプレートはVelocityにするので、下記のように修正しておきます。

--------mailTemplate.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.3//EN"
    "http://www.seasar.org/dtd/components23.dtd">
<components namespace="mailTemplate" >
  <include path="mailProperties.dicon"/>
  <include path="org/seasar/mai/template/velocity.dicon"/>
</components>
--------

本来なら、次に、SmartDeployの設定して、めでたし、めでたし、
にしたいところですが、なぜかうまくいきません。

なので、現状、僕は、app.diconなどに、下記の記述をしています。

--------xxx.dicon
<include path="s2mai.dicon"/>
...
<component class="xxx.mai.SampleMai">
  <aspect>s2MaiInterceptor</aspect>
</component>
--------
※Mai作るたびに、記述しています。

徒然なる紹介でした。

SmartDeployの勉強もかねて、原因調査してみよう。

--
blog: http://suz-lab.blogspot.com/

AS3の"Physics Engine"

スズキです。

Papervison3DのMLで話題になっていたので、メモです。

▼APE
(本家) http://www.cove.org/ape/index.htm
(デモ) http://www.cove.org/ape/demo1.htm

※結構前から名前は知ってます。(使ったことはないけど)

▼Fisix Engine
(本家) http://www.fisixengine.com/engine.asp
(デモ) http://www.fisixengine.com/demos/mona1.html
(デモ) http://www.fisixengine.com/demos/bikegame.html
(デモ) http://www.fisixengine.com/demos/demo1.html
(デモ) http://www.fisixengine.com/demos/demo5.html

※こちらは初耳です。デモが秀逸です。

物理エンジンと3Dとオブジェクト指向(AS3)を使いこなせる
Flashクリエイターが目標かな。

--
blog: http://suz-lab.blogspot.com/

"ADOBE CREATIVE SUITE 3 Web Edition TOUR"参加予定(7/4)

スズキです。

表記のイベントに参加予定です。
http://www.info-event.jp/adobe/cs3wp/index.html

僕の主戦場である、WEBの世界を対象にした、CS3のイベントです。
ちょっと楽しみなところでもあります。
(6月、7月はCS3強化月ですね)

仕事のスピードをもっとはやくしなくては。

--
blog: http://suz-lab.blogspot.com/

Cacti入れなきゃ!

スズキです。

SNMPで取得できる情報をグラフ化するツールの一つに
Cactiっていうのがあります。

(参考サイト) http://del.icio.us/iretsuzuki/cacti
▼本家
http://cacti.net/
▼プラグイン
http://cactiusers.org/downloads/
▼日本語
http://www.sabakan.info/c/cacti.htm

このあたりのツールはMRTGが有名ですが、
Cactiの方がUIが充実しており、機能が豊富です。
(グラフまわりはRRDtoolを使っています。)

特にCactiでやってみたいことは、下記です。
○Thold(Monitor?)プラグインを利用した、異常状態の通知
○LDAPを用いたユーザー管理

入れるスキ、あるかなー?

--
blog: http://suz-lab.blogspot.com/

commons-langの今度はBooleanUtils(toBoolean)

スズキです。

commons-langネタ(Part2)、BooleanUtils(toBoolean)です。
今日はじめて仕事のコードで使いました。

何に利用したかというと、DBのフラグとして使っているカラム(0 or 1)のデータを
Javaのbooleanにするといった処理です。
(カラムのデータ型も真偽値なら、問題ないのですが...)

使い方はこんな感じです。
--------
boolean flag = BooleanUtils.toBoolean(1);
--------

引数が0ならfalse、0以外ならtrueが戻ります。

やっぱり、DB設計は大切です。

--
blog: http://suz-lab.blogspot.com/

久しぶりのCASE文(Oracle)

スズキです。

久しぶりにSQL書いてます。
で、CASE文(Oracle)使っちゃいました。

--------
CASE
  WHEN XXX = 1 THEN 1
  WHEN COUNT(YYY) <= 0 THEN 1
  ELSE 0
END
--------
※集計関数も使えます。

WHENのあとに条件書いて、THENのあとにtrueだったときの結果を書きます。

でも、やっぱり最初のテーブル設計は重要だとしみじみ感じました。

--
blog: http://suz-lab.blogspot.com/

2007年6月11日月曜日

mod_proxyで別サーバのコンテンツを自サーバのコンテンツと見せかける

スズキです。

Apacheのモジュールのお話です。

よく、インターネットに公開しているApacheは決まってて、
でも、内部の他サーバで、WEBアプリとか作って、
それをインターネットに公開したいときがあります。

その場合は、インターネットに公開しているApacheでmod_proxyを使うと
あっさりできます。設定は下記のような感じです。

--------httpd.conf
ProxyRequests on
ProxyPass /xxx/ http://192.168.0.1:8021/xxx/
ProxyPassReverse /xxx/ http://192.168.0.1:8021/xxx/
--------
※当然mod_proxyがロードされていることが前提です。

こうすることで、インターネットからの/xxx/へのリクエストは、全部、
192.168.0.1:8021の/xxx/にまわされ、レスポンスは
インターネットに公開されているサーバ経由で返されます。

でも、subversionはうまく機能しなかったんだよね。(なぜだろう?)

--
blog: http://suz-lab.blogspot.com/

Ajax体験授業(6/21 19:30-21:30)

スズキです。

表記のとおり、デジハリ秋葉原校で体験授業やります。
http://dhw.weblogs.jp/_akihabara/2007/06/ajaxajax5621_f105.html

FxUG勉強会6/28にならないかなー?

--
blog: http://suz-lab.blogspot.com/

2007年6月9日土曜日

F-SITEのPapervision3D情報

スズキです。

F-SITEでPapervision3Dの情報があったので、まとめておきます。
ソースも公開しているので、ソースも含めて、
じっくり読んでおきたいところです。

▼*Step0*入門編-HelloWorld-
http://f-site.org/articles/2007/05/07162426.html
▼*Step1*マウスイベント等を付けたりしてみる
http://f-site.org/articles/2007/05/07170852.html
▼*Step2*GeometryObject3Dクラス
http://f-site.org/articles/2007/05/11154304.html
※GeometryObject3Dクラスの頂点座標のコントロールは要調査だね。

▼ゲーム風サンプル
http://f-site.org/articles/2007/06/04123001.html
※かなりやばい、びっくりした。

早速RSSリーダーに登録してしまった。
http://f-site.org/atom.xml

--
blog: http://suz-lab.blogspot.com/

"A.e.Suckが魅せるFlashアニメーションの世界"に参加予定(6/20)

スズキです。

表記のFlashイベントに参加予定です。
http://f-site.org/articles/2007/05/29155926.html

Flashも負けない。

--
blog: http://suz-lab.blogspot.com/

2007年6月8日金曜日

Subversionのインストール

スズキです。

Subversionインストールしました。

まあ、何回もインストールしていますが、
今回は、suz-env-server環境の一環としてのインストールです。

でも、今回は負けました。
理由はzlibライブラリを自前で持っているのに、
それを使うことができなかったからです。

zlib.hがない!、といわれ続け、
./configureのオプションを試しても、
LD_LIBRARY_PATH調整してもダメでした。

なので、rootで
# yum install zlib-devel
してからビルドスクリプトを実行しなければいけません。

ビルドスクリプトは下記です。
http://suz-lab.googlecode.com/svn/trunk/suz-env-server/build/neon.sh
http://suz-lab.googlecode.com/svn/trunk/suz-env-server/build/subversion.sh

例のごとく
# cd
# cd bin
# svn update
# cd build
# ./neon.sh
# ./subversion.sh
でインストールできます。
# neon, subversionの順でインストールです。

いつかリベンジしなきゃ。

--
blog: http://suz-lab.blogspot.com/

"Durian4 + Teeda"絵文字編

スズキです。

次は絵文字です。
Duran4は賢くて、絵文字もiMODEベースで作っておけば、
他のキャリアの端末でも、似たような絵文字になるように
変換/調整してくれます。
(PCの場合は、なんと画像として表示します)
http://durian.symmetric.jp/dev/doc/manage/glyph_table.html

ただ、Teedaと組み合わせると、この辺も素直に行きません。
まあ、結果から言いますと、下記のように、
CDATAで絵文字の文字参照を囲む必要があります。

--------
<![CDATA[&#xE63E;]]>
--------
※CDATAで囲わないと、TeedaのHTMパース時にExceptionが発生します。

次は、動的なページや、フォームとそのアクションに関する動作実験だね。

--
blog: http://suz-lab.blogspot.com/

"JAI, JAI Image I/O"のインストール(For Durian)

スズキです。

次は、Durianの画像まわりです。
現状、PCで見ると普通に画像は表示しますが、
携帯(シミュレーター)で見ると、画像は全滅です。

なぜなら、Durianは各携帯端末に適した形に画像を変換するのですが、
変換時に表記のJavaのライブラリがなく、結果、
画像が表示できない状態となります。
(ちゃんと、サーバ側のログにはその旨のExceptionが発生してます)

ということで、下記よりインストールです。
▼JAI
https://jai.dev.java.net/binary-builds.html
▼JAI Image I/O
https://jai-imageio.dev.java.net/binary-builds.html

各プラットフォームに対して、インストーラーが用意されているので、
必要なものをダウンロードして実行します。

で、もう一度、アプリケーションサーバを再起動して、
携帯で対象サイトにアクセスすると、今度はちゃんと画像も表示されます。

ローカル開発環境(suz-env-local)もそろそろ、アップデートどきだね。

--
blog: http://suz-lab.blogspot.com/

3Dロゴ復活

スズキです。

以前作った3Dロゴ(本ブログ上部)復活させました。
http://suz-lab.blogspot.com/2007/03/3d.html

Papervision3Dで作成しています。
http://www.papervision3d.org/
http://blog.papervision3d.org/

なぜ、一旦、やめてしまったかというと、
このロゴは、別サイトで表示して、iframeで取り込む形で表示していたのですが、
気づいたら、広告が入るようになって、ちゃんと表示しなくなってしまったからです。

で、他のサイトに移しました。
http://suz-lab.y7.net/swf/suz-lab.swf

今度は、ちゃんと表示し続けてくれ、頼む。

--
blog: http://suz-lab.blogspot.com/

"Durian4 + Teeda"とりあえず表示

スズキです。

表記の組み合わせの動作検証(その1)です。

導入、設定に関しては、下記情報通りに実施し、
つまづくところはありませんでした。
http://suz-lab.blogspot.com/2007/06/durian4-get.html

teedaに関しても下記のようにexampleプロジェクトが提供されているので、
それを参考にプロジェクト構築したら、問題なし。
http://teeda.seasar.org/ja/

でここからが問題です。
携帯コンテンツの文字コードは普通Shift_JISなので、
それで、HTML作成して、teedaで表示させたら、文字化けしました。
で、UTF-8にしてたらうまく表示します。

TeedaはUTF-8しかダメなのかなー、とおもいつつ。
UTF-8表示のまま、だめもとでDurianフィルターをかけてみると、
なんと、Durianが文字コードをShift_JISに変換してくれていました。
(Durian、かしこい!)

なので、コンテンツはUTF-8で作成して、
出力はTeedaの範囲ではUTF-8、
Durianフィルターで携帯端末にはShift_JISに変換して出力、
そんな仕組みでうまくいきます。

ここで、コンテンツの作成ですが、
携帯コンテンツののりで、HTML書くと、ことごとく、
TeedaのHTMLパースでしかられます。

ポイントは下記となります。
○属性値はダブルクオート(")で囲む
○タグは必ず閉じる(img、metaも)
○文字コードはUTF-8

なので、案件用のHTMLはすでにあるのですが、
上記を満たす形に書き換える必要があります。
(機械処理でできたらカッコいいんだけどなー)

Teeda、予想以上に素人でした。

--
blog: http://suz-lab.blogspot.com/

2007年6月7日木曜日

commons-langのStringUtilsクラスいろいろ

スズキです。

commons-langのStringUtils、
僕がよく使うメソッド(使い方)をまとめておきます。
http://jakarta.apache.org/commons/lang/

まずはパディング、いろいろなところで使いますよね。
http://jakarta.apache.org/commons/lang/api-release/org/apache/commons/lang/StringUtils.html#rightPad(java.lang.String, int)
http://jakarta.apache.org/commons/lang/api-release/org/apache/commons/lang/StringUtils.html#leftPad(java.lang.String, int)

例として、SQLの条件で利用する日付文字列の作成です。
(月がintなので、一桁のときは、左を"0"で埋めます。)
--------
String date = StringUtils.leftPad(String.valueOf(dto.getYear()), 4, '0')
    + "-"
    + StringUtils.leftPad(String.valueOf(dto.getMonth()), 2, '0')
    + "-01";
--------
※dtoにはyear:int, month:intのフィールドがあります。

次は文字列の空チェックです。
http://jakarta.apache.org/commons/lang/api-release/org/apache/commons/lang/StringUtils.html#isEmpty(java.lang.String)
http://jakarta.apache.org/commons/lang/api-release/org/apache/commons/lang/StringUtils.html#isBlank(java.lang.String)

こんなコードがisEmpty、isBlankでいくらか短くなります。
--------
if(str == null str.equals("")) {
  // 空だったときの処理
}
--------
※当然、str:Stringです。

でも、jar入れる手間を乗り越えれるかどうかなんだよね。

--
blog: http://suz-lab.blogspot.com/

Durian4の評価版 GET!

スズキです。

下記に問い合わせて、評価版をGETしました。
http://www.samuraiz.co.jp/product/durian/download/index.html

資料は下記です。
(http://del.icio.us/iretsuzuki/Durian)
▼インストール手順
http://durian.symmetric.jp/dev/doc/manage/install.html
▼ドキュメント
http://durian.symmetric.jp/dev/documentation.html

普通にTeeda(Seasar2)と使えたらいいなー。
(Servletフィルターだから、可能性は高いと思うけど)

--
blog: http://suz-lab.blogspot.com/

"オープンソースカンファレンス2007 .DB"に参加予定(6/23)

スズキです。

表記イベントに参加予定です。
http://www.ospn.jp/osc2007.db/

どういうときに、どういうDBを選ぶべきかの参考になれば、
と思っています。

懇親会も出席したかったなー。

--
blog: http://suz-lab.blogspot.com/

"Durian4 + Teeda(Seasar2)"の評価

スズキです。

TODOにいきなり入っていた仕事です。
(まあ、なんとなく聞いていましたが)

携帯サイト構築案件でTeedaを使い、
さらにマルチキャリア対応のために、Durian4が使えるかの評価です。
http://durian.symmetric.jp/

っていうか、案件あるから、何とか使えるようにしろ!
っていうニュアンスですけど。

Durian4は前身、MCAPと呼ばれ、
"Servlet Filter"のを用いて、CHTML(iMODE)のコンテンツを
各キャリア/端末に対応したコンテンツに変換する技術(製品)です。

MCAP2は使ったことありますので、
それから、どれだけ進化しているか楽しみです。

その前に、Teedaのブランクプロジェクト作成だね。

--
blog: http://suz-lab.blogspot.com/

"SMART Deploy"のdicon見直し

スズキです。

"SMART Deploy"のドキュメントがあがってます。
http://s2container.seasar.org/ja/S2.4SmartDeployConfig.html
(作成者の方、ありがとうございます)

早速、今、進行中のSeasar2案件プロジェクトのdicon見直します。

デフォルトカスタマイザがあるなんて知らなかった...

--
blog: http://suz-lab.blogspot.com/

"Java World Day 2007"に参加予定(6/19)

スズキです。

表記、参加予定です。
http://www.idg.co.jp/expo/jwday/2007/

気になるセッションはJava7とAppoloかな。
知見が増えればいいなー。

--
blog: http://suz-lab.blogspot.com/

2007年6月6日水曜日

各キャリアの携帯コンテンツ作成情報

スズキです。

表記のメモです。

▼NTTドコモ
http://www.nttdocomo.co.jp/service/imode/make/

▼au(KDDI)
http://www.au.kddi.com/ezfactory/index.html

▼SoftBank
http://developers.softbankmobile.co.jp/dp/

--
blog: http://suz-lab.blogspot.com/

携帯シュミレーターいろいろ

スズキです。

表記のメモです。

▼NTTドコモ
http://www.nttdocomo.co.jp/service/imode/make/content/html/tool2.html

▼au(KDDI)
http://developer.openwave.com/ja/tools_and_sdk/openwave_mobile_sdk/SDK62K/

▼SoftBank
http://developers.softbankmobile.co.jp/dp/tool_dl/web/wcv.php

近頃、携帯案件が多いなー。(シンクロニシティ?)

--
blog: http://suz-lab.blogspot.com/

Oracleのリスナー設定とDB作成時の補足

スズキです。

まずはリスナーの設定ですが、
/home/oracle/sbin/oracle/stable/db/network/admin
の下に

○listener.ora
○sqlnet.ora
○tnsnames.ora

を用意。(下記にファイルの内容を記載)

--------listener.ora
SID_LIST_LISTENER =
 (SID_LIST =
  (SID_DESC =
   (SID_NAME = PLSExtProc)
   (ORACLE_HOME = /home/oracle/sbin/oracle/stable/db)
   (PROGRAM = extproc)
  )
 )

LISTENER =
 (DESCRIPTION_LIST =
  (DESCRIPTION =
   (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
   (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  )
 )
--------

--------sqlnet.ora
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
--------

--------tnsnames.ora
ORCL =
 (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  (CONNECT_DATA =
   (SERVER = DEDICATED)
   (SERVICE_NAME = orcl)
  )
 )

EXTPROC_CONNECTION_DATA =
 (DESCRIPTION =
  (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
  )
  (CONNECT_DATA =
   (SID = PLSExtProc)
   (PRESENTATION = RO)
  )
 )
--------

※動いてるものを参考にしており、内容はちゃんと理解してません。

この状態で

# lsnrctl start

でリスナーが起動します。

ただ、これでもうまく接続ができず、
下記のようにデータベースを再度作成しなおしました。

--------
create database orcl
logfile
  group 1 ('/home/oracle/var/dbs/oracle/orcl/redo1.log') size 10M,
  group 2 ('/home/oracle/var/dbs/oracle/orcl/redo2.log') size 10M,
  group 3 ('/home/oracle/var/dbs/oracle/orcl/redo3.log') size 10M
character set JA16SJIS
national character set UTF8
datafile '/home/oracle/var/dbs/oracle/orcl/system.dbf'
  size 50M
  autoextend on
  next 10M maxsize unlimited
  extent management local
sysaux
  datafile '/home/oracle/var/dbs/oracle/orcl/sysaux.dbf'
  size 10M
  autoextend on
  next 10M
  maxsize unlimited
undo tablespace undo
  datafile '/home/oracle/var/dbs/oracle/orcl/undo.dbf'
  size 10M
  autoextend on
default temporary tablespace temp
  tempfile '/home/oracle/var/dbs/oracle/orcl/temp.dbf'
  size 10M
  autoextend on;
--------

※autoextend on がポイントです。

そして、次のSQLを実行

SQL> @?/rdbms/admin/catalog.sql
SQL> @?/rdbms/admin/catproc.sql
SQL> connect system/manager
SQL> @?/sqlplus/admin/pupbld

※pupbldがポイントです。

ようやく、Oracle関係のタスクが終了です。(長かった...)

--
blog: http://suz-lab.blogspot.com/

2007年6月5日火曜日

Shift_JISのOracleデータベース作成

スズキです。

UTF8で作ったら、Shift_JISで作り直せって言われて、
ついでだから、別マシンにOracleのインストールから初めた物語も終盤です。

表記はすでにUTF8で作成した手順を本ブログにメモしていたので楽勝でした。
http://suz-lab.blogspot.com/2007/05/oracle.html

変更点は、"create database"スクリプトで文字コードの部分の調整(下記)です。

-------- create database orcl ...
character set JA16SJIS
national character set UTF8
--------

これで終わりと思ったら、リスナーの設定が残ってた。

--
blog: http://suz-lab.blogspot.com/

Oracleでlibaio.so.1がないよエラー発生

スズキです。

下記のようにsqlplus起動して、connectしようとしたら、
表記のエラーが発生しました。

--------
[oracle@bfsdev ~]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 火 6月 5 22:31:14 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL> connect / as sysdba
oracleORCL: error while loading shared libraries: libaio.so.1: cannot
open shared object file: No such file or directory
ERROR:
ORA-12547: TNS: 接続を失いました。
--------

ググったら、下記情報を発見。(まあ、誰かしらは同じ経験してますね)
http://blog.so-net.ne.jp/nobonobo/2006-10-17

結局、解決策は、libaioの最新のものをインストールでした。

# yum install libaio
# yum install libaio-devel

DB構築までの道のりが遠い...

--
blog: http://suz-lab.blogspot.com/

Oracle環境変数の設定

スズキです。

Oracleのインストールも終わり、
http://suz-lab.blogspot.com/2007/06/oracle10g2.html
これからDB作成するか!、と思ったら、環境変数の設定もやらないと、
sqlplusとかストレスなく使えないことに気づいた。

ということで、.bash_profileに下記を追加。

--------.bash_profile
export ORACLE_BASE=$HOME/sbin/oracle
export ORACLE_HOME=$ORACLE_BASE/stable/db
export ORACLE_SID=ORCL
export NLS_LANG=Japanese_Japan.UTF8
export PATH=$PATH:$ORACLE_HOME/bin
--------

Oracleマスター(PLATINUM)なのにOracleのこと忘れすぎ。

--
blog: http://suz-lab.blogspot.com/

TRUNC関数で日付の切捨て(Oracle/SQL)

スズキです。

日付を持ってるデータを年/月でグルーピングすることはよくあります。
そのときに、Oracle(SQL)の表記の関数(TRUNC)が役に立ちます。
http://jibun.atmarkit.co.jp/lskill01/rensai/bronzesql03/bronzesql01.html

TRUNC(SAMPLE_DATE, 'MM')
とすると、日や時間がどんな値であっても、1日の0時0分0秒になります。
※SAMPLE_DATEはDATE型のカラムとします

なので、データが存在する年/月を降順で抽出したい場合は、

SELECT DISTINCT
  TRUNC(SAMPLE_DATE, 'MM') as YYYYMMDD
FROM SAMPLE_TABLE
ORDER BY YYYYMMDD DESC

で実現することができます。

四捨五入はROUND関数で同じようなことができます。

やっぱり、SQLだね。(O-R Mapping はほどほどに)

--
blog: http://suz-lab.blogspot.com/

Oracle10gリリース2のサイレントインストール

スズキです。

Oracleのサイレントインストールです。
9i(8i)のときは挫折した記憶がありますが、10gはあっさりできました。

やり方は、下記に詳しく書いてあります。
http://otndnld.oracle.co.jp/document/products/as10g/1012/nongeneric/B15936-01/silent.html

ただ次のようにsuz-env-server仕様として少しインストール手順を変更しています。

○oraInst.loc/oratabの作成は行わない。
(上記の情報には作成するように書いてありますが)

○インストールユーザー/グループはoracle/oracle

○それに伴い、レスポンス・ファイル(enterprise.rsp)に記述するグループはすべて"oracle"
UNIX_GROUP_NAME=oracle
s_nameForDBAGrp="oracle"
s_nameForOPERGrp="oracle"

○ORACLE_HOMEは下記(レスポンス・ファイルに記述)
ORACLE_HOME=/home/oracle/sbin/oracle/10.2.0.1.0/db
ORACLE_HOME_NAME=OraDb_10_2_0_1_0

○言語に日本語を追加(レスポンス・ファイルに記述)
COMPONENT_LANGUAGES={"ja","en"}

○インストールタイプはsEntetpriseEdition(レスポンス・ファイルに記述)
INSTALL_TYPE="EE"

○システムのインストールのみ行う(DBの作成は行わない)(レスポンス・ファイルに記述)
n_configurationOption=3

※enterprise.rspの雛形は<メディアディレクトリ>/response/enterprise.rsp
※enterprise.rspの内容は最後にまとめて記載

○oracleユーザーにて下記コマンドでインストール

# cd
# <メディアディレクトリ>/runInstaller -silent -responseFile
/home/oracle/etc/enterprise.rsp

※上記のレスポンス・ファイル(enterprise.rsp)は
/home/oracle/etc/enterprise.rspにあるとする。

※/home/oracle/oraInventoryディレクトリができ、
ログなどのインストール時に作成される各種ファイルがおかれます。

※Oracleシステムは指定どおり、
/home/oracle/sbin/oracle/10.2.0.1.0/dbにインストールされます。

○インストール後の作業として、rootユーザーで下記スクリプトを実行

# /home/oracle/oraInventory/orainstRoot.sh
# /home/oracle/sbin/oracle/10.2.0.1.0/db/root.sh

※下記のように、"local bin"ディレクトリの場所を聞いてくるので、
デフォルト値のまま続行します。

Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...

○最後に、例のごとく、/home/oracle/sbin/oracle/stable
のシンボリックリンク(10.2.0.1.0)を作成して、終了です。

次はShift_JISのDB作成です。

--------enterprise.rsp--------
RESPONSEFILE_VERSION=2.2.1.0.0
UNIX_GROUP_NAME=oracle
FROM_LOCATION="../stage/products.xml"
NEXT_SESSION_RESPONSE=
ORACLE_HOME=/home/oracle/sbin/oracle/10.2.0.1.0/db
ORACLE_HOME_NAME=OraDb_10_2_0_1_0
TOPLEVEL_COMPONENT={"oracle.server","10.2.0.1.0"}
DEINSTALL_LIST={"oracle.server","10.2.0.1.0"}
SHOW_SPLASH_SCREEN=false
SHOW_WELCOME_PAGE=false
SHOW_NODE_SELECTION_PAGE=false
SHOW_SUMMARY_PAGE=false
SHOW_INSTALL_PROGRESS_PAGE=false
SHOW_CONFIG_TOOL_PAGE=false
SHOW_XML_PREREQ_PAGE=false
SHOW_ROOTSH_CONFIRMATION=true
SHOW_END_SESSION_PAGE=false
SHOW_EXIT_CONFIRMATION=false
NEXT_SESSION=false
NEXT_SESSION_ON_FAIL=false
SHOW_DEINSTALL_CONFIRMATION=false
SHOW_DEINSTALL_PROGRESS=false
RESTART_SYSTEM=false
RESTART_REMOTE_SYSTEM=false
REMOVE_HOMES=
ORACLE_HOSTNAME=
SHOW_END_OF_INSTALL_MSGS=false
CLUSTER_NODES=
COMPONENT_LANGUAGES={"ja","en"}
INSTALL_TYPE="EE"
s_nameForDBAGrp="oracle"
s_nameForOPERGrp="oracle"
n_configurationOption=3

--
blog: http://suz-lab.blogspot.com/

2007年6月4日月曜日

FlashRemoingのFaultクラスとJavaの例外クラス

スズキです。

近頃、S2Flex2使って、Flash(AS2)とAMF0で通信する仕事を結構こなしてます。

この通信はデータだけでなくJavaの例外も送ることができます。
Flashの受け側は表記のとおり、Faultクラス(FlashRemoting)となります。
(参考) http://blog.ozacc.com/archives/000971.html

ということで、Seasarのメッセージ管理の仕組み(S2Logger)と組み合わせた、
AS2のFaultクラス用の例外クラスを作ってみました。
(S2Logger) http://s2container.seasar.org/ja/S2Logger.html

--------ServiceForAsException
import org.seasar.framework.message.MessageFormatter;

public class ServiceForAsException extends RuntimeException {

  public ServiceForAsException(String code) {
    this(code, null);
  }

  public ServiceForAsException(String code, Object[] args) {
    this(code, args, null);
  }

  public ServiceForAsException(String code, Object[] args, Throwable cause) {
    super(MessageFormatter.getSimpleMessage(code, args), cause);
  }

}
--------

--------XXXMessages_ja.properties
WXXX0001=AAA
WXXX0002=BBB
WXXX0003=CCC
--------

使い方はこんな感じです。

--------
throw new ServiceForAsException("WXXX0001");
--------

引数にメッセージファイル(XXXMessages_ja.properties)上の
ログコード(WXXX0001)を入力すると、それに対応するメッセージが、
Faultクラス(AS2)のfaultstringに入るようになっています。

次は、認証系がんばろう。

--
blog: http://suz-lab.blogspot.com/

Remember The Milk でタスク管理

スズキです。

作業日誌はBlogger、
スケジュール管理はGoogleカレンダー、
情報収集はGoogleReadar、

このあたりは、我ながら、今のところ、うまく運用できています。
(すべて、Bloggerのブログパーツとなっています)

そうなると、そろそろ、タスク(TODO)管理もやりたくなってきます。
で、見つけたのが"Remember The Milk"です。
http://www.rememberthemilk.com/

これにしたポイントは下記となります。

-日本語化されている
-データをical形式で出力できるので、Googleカレンダーと連動できる
-データをatom形式で出力できるので、Bloggerと連動できる
-タスクを他人と共有できる

上記ポイントに沿って、実際運用しています。
とりあえず、改善したい(してほしい)ことは下記です。

-サイトが遅い
-消したタスクが、atomに残っている(icalは未確認)

また、suz-labタスクは数人と共有していますが、
勝手に、共有者がタスクが追加して、ブログなどで、
いきなり追加タスクが表示され、本人もびっくりしている状況です。
(まあ、それはそれで、今のところ楽しいのですが)

とりあえず、運用実験中です。

--
blog: http://suz-lab.blogspot.com/

2007年6月3日日曜日

PHPのビルドスクリプトを5.2.3に

スズキです。

PHP5.2.3がリリースされました。
http://suz-lab.blogspot.com/2007/06/php-523.html

それに伴い、ビルドスクリプトをアップデートしました。
http://suz-lab.googlecode.com/svn/trunk/suz-env-server/build/php.sh

アップデートが必要なサーバは、
"svn update"して、ビルドスクリプト実行してシンボリックリンク張り替えてください。
(まあ、自分でやるんだけど...)

--
blog: http://suz-lab.blogspot.com/

6月の予定入力完了

スズキです。

現在わかってる6月の予定を入力しました。
(Googleカレンダー/ブログで確認できます。)

デジハリばっかです。(Java/Ajax/Flash)

--
blog: http://suz-lab.blogspot.com/

2007年6月2日土曜日

AdobeCS3製品一挙公開に参加予定

スズキです。

表記のイベントに参加予定です。(6/28)
http://it.otsuka-bs.co.jp/otsuka/event/adobeproduct/

6月はCS3強化月間かな?
仕事忙しくないといいなー。

--
blog: http://suz-lab.blogspot.com/

AdobeCS3ラウンチセミナー参加予定

スズキです。

表記のセミナーに参加する予定です。(6/13)
http://www.too.com/event/2007/06adobecs3/

残念ながら、

Video Production Session
Designer Session
Web Creator Session

と三つあるセッションのうち、Designer Session
が締め切りで申し込みできませんでした。

これを機に、CS3仕様のデザイナーデビュー狙ってます。

--
blog: http://suz-lab.blogspot.com/

WeblogicでSeasar2(JNDI)

スズキです。

表記にニーズがあります。

Oracleのアプリケーションサーバの情報は下記にあるので
真似すればいけるかな?とまだ楽観的です。
http://s2container.seasar.org/ja/oracleAppServer.html

実験は、来週かな。
(どっちかというとWeblogicの勉強が必要かな!?)

--
blog: http://suz-lab.blogspot.com/

2007年6月1日金曜日

PHP 5.2.3 リリース

スズキです。

表記のとおり、PHPが5.2.3としてリリースされました。
http://www.php.net/#8

ざっと変更点を見ましたが、ほとんどがバグフィックスのようです。

suz-env-serverにも反映しなくては。

--
blog: http://suz-lab.blogspot.com/

久しぶりにFxUGの勉強会に参加予定

スズキです。

下記のように6/21・28のどちらかでFxUG主催のFlex2勉強会があります。
http://www.fxug.net/modules/bwiki/index.php?Flex2%CA%D9%B6%AF%B2%F1%C2%E818%B2%F3%A1%F7%C5%EC%B5%FE%BB%B2%B2%C3%BC%F5%C9%D5

僕も久しぶりに参加する予定です。
10分程度、作ったものの発表できるようなので、
エントリーしておきました。

下記サイトの紹介をしようと思っています。

○NIBA COLLECTION
http://www.niba.co.jp/

○HAIR DIMENSION
http://www.hairdimension.co.jp/

広宣活動も少し兼ねてます。

--
blog: http://suz-lab.blogspot.com/