2007年11月アーカイブ

今まででちょっと詰まったところとかをまとめ。

○Generation Gapパターン
Hibernateの入門用のこのページの4.2にGeneration Gapパターンについて紹介してある。

前提として既存のデータベースを使うという状況を想定。

詳細は省くとして、あるテーブルにアクセスするJavaオブジェクト(クラスA、通常は自動生成される)ってテーブル構造の変化によって変更しなきゃいけないんだけど、ユーザークラスがクラスAを直接使う場合、その都度ユーザクラスも変更しなければならない。それに対して、クラスAを継承したクラスBを作りユーザークラスはクラスBを使うようにすれば、テーブル構造の変化(=クラスAの変化)をクラスBで吸収できる、という感じ。

先ほどのページは通常のHibernateの場合だけど、Hibernate Annotationsを使った場合はどうなるか。

例えばこのページの用にデータベーススキーマからHibernate Annotationsを使ったコードを自動生成させるとして、でもそのクラスを直接ユーザークラスからは使わせたくない場合。

FlexではCSSが使えるんだけど、HTMLで使えるのとちょっと違うってのが結構えぐい。

Flexではbackground-repeatが使えなくて困った。結構基本的な機能だから当然入っていてもよさそうなんだけど。同じような事を思った人は結構いる。ここの122番とか。

今やってるプロジェクトでは既存のDBがあるので、そっからHibernate Toolsを使ってJavaクラスとかを自動生成しようと思ったが、NoClassDefFoundErrorが発生。

結論から言うと、Hibernate Tools 3.2はEclipse 3.2では動かず。詳しくはここ参照(英語)。

プロジェクト途中でEclipseをアップグレードしたりとかは面倒なので、とりあえず今回はHibernate Toolsは使わずに行こうと思う。テーブル数はそれ程多くないので、手書きでやっても何とかなるし。

Flexは非常に便利なんだけど、プログラマじゃないとなかなか使いこなせないと思う。でもやっぱりデザイナーの作ったかっこいいFlashアニメーションとかも使いたかったりする。

そう言う時には通常のFlashをFlexで作るflaファイルの中に埋め込む。ただ埋め込むだけなら画像を埋め込むのと一緒だけど、Flexから埋め込まれたFlashのAction Scriptを呼び出したり、その逆をしたり。

Flexも大ざっぱに言えばFlashなので、やることはFlashファイル同士の通信と同じ。このページが参考になると思う。(Flashの場合はファイルを2つに分ける意義が少ないけど、FlexとFlashなら前述のようにプログラマーとデザイナーが共同作業ってのもよくあることだと思う)

で、前ページに書いてあるLocalConnectionで2つのswfファイルが通信できるんだけど、同じページを同時に2つ以上のウィンドウで起動すると上手くいかなかったりする。それに対する解決方法が
ここに書いてあった。LocalConnectionで指定する名前を動的に生成するという方法。まだ試してないけど。

実行可能なjar

| コメント(0) | トラックバック(0)

jarファイルをダブルクリックするだけでJavaアプリケーションを起動させるための方法。

必要な物はjarファイル内にMETA-INF/MANIFEST.MFというファイルを用意するだけ。
例えばこんな感じ。

Manifest-Version: 1.0
Main-class: tv.kazu.sample.jar.AppMain

あとはjarファイルをダブルクリックすればAppMainが実行される。

基本的な情報はきしださんのこのページとかを参考に。

さて、Javaで開発をしててclasspath関係で一度も悩んだこと無い人はいないと思う。

では上記のAppMainが他のjarファイル(以下外部jarファイルと呼ぶ)に依存しているとする。JDBCドライバーだったりLog4jだったり。その場合にはどういう解決方法があるだろうか。

setSchemaで例外

| コメント(0) | トラックバック(0)

最近XML SchemaでXML文章の検証ってのをJava上でやっている。数年前のプロジェクトのメンテナンス+新機能追加って感じのプロジェクトなので新旧いろんなのが混じってる。

さて本題。XMLのパースにはSAXを使ってる。XML Schemaを使うには大体こんな感じ。

// Schemaオブジェクトの作成

SchemaFactory sf =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
sf.setErrorHandler(new MyErrorHandler()); // *1
Source schemaFile = new StreamSource(new File("schema.xsd"));
Schema schema = sf.newSchema(schemaFile);

// パーサーの作成
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(false);
factory.setSchema(schema);

SAXParser parser = factory.newSAXParser();

*1 MyErrorHandlerはDefaultHandlerをオーバーライド

これで普通に動いてたんだけど、antでビルドしてパッケージ作って起動すると、factory.setSchema(schema)の行で以下の例外が…

java.lang.UnsupportedOperationException: This parser does not support spe
cification "null" version "null"

価格差

| コメント(0) | トラックバック(0)

1~2週間前にネットで面白いネタを見つけた。

都内のパチンコ屋で使われてる景品(換金用のやつ)はプラスチックの容器の中に純金1gが入ってるんだって。

パチンコ屋の金の流れとしてはこんな感じ。
・客がパチンコ屋で2500円分の玉をカウンターに持って行く。
・カウンターで純金入りの景品をくれる。
・その景品をパチンコ屋のそばの交換所に持ってくと2500円くれる。
・景品交換所は回収した景品をまたパチンコ屋に持ってく。

で、ネタの本題なんだけど、最近の金価格の上昇により金1gの値段が2500円を遙かに超えてる事で、それに目を付けた人がこんな事やり始めた。

・等価交換の店でパチンコの玉を買う。(例として2500円)
・全く遊ばずにそのままカウンターに持って純金入りの景品をもらう。
・プラスチックのケースを壊して、中の金だけ取り出す。
・景品交換所に持って行かずに、取り出した金を金属商に売る(3000円位)。
・約500円の利益。

頭いいと思った。時給換算だと大したことないけど、もし自分が今東京に住んでる大学生だったらやってたかも。

先月位からこういうのをやり出した人がいるらしく、パチンコ屋でも遊ばずに商品に交換する人をかなり警戒してるらしいけど。
http://blog.livedoor.jp/zero2235/archives/54864724.html

ちょっとだけ似たような事がこっちでもあった。米ドルは過去数年 $1 = 105円~125円位なのに対し、カナダドルは3年前位の$1 = 70円台に対し、2週間前には$1 = 120円を一時期超えた。

カナダ国内の店では便宜的にUS$1 = CA$0.8とかの簡易レートを使って、アメリカドルで買い物とか出来る店とかがあったり、本の値段とかも US$13, CA$15とか書いてある(例は適当)。なのでこういった場合はカナダドルをアメリカドルに替えてから買った方が理論上はお得。まぁ面倒だからやらないけど。

前述のパチンコの例だと、金(gold)は換金性があるから500円の利ざやを稼ぐ方法が成り立つけど、本とかだと換金性がないからなぁ。

このブログの作者

名前:kazu
仕事:IT関係の何でも屋
メール:kazu 後幕 kazu どと tv
詳しくはこの辺

このアーカイブについて

このページには、2007年11月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2007年8月です。

次のアーカイブは2007年12月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ