Home > Academic

Academic Archive

Windows 7 RC (x86/x64) と Vista SP2 お試し

Windows 7 は正式版出てから入れようと思っていたけど、周りが入れ始めたのでVAIO Type P に Windows 7 x86 RC を、テストマシン に Windows 7 x64 RC を入れてみました。VistaベースなのでVistaのドライバでだいたい動き、動かないのはアンチウィルスソフトぐらいでした。

VAIO Type Pの方は、EMOBILE D02HWでの通信もOKでした。

テストマシンの方は、3ware 9650SEでRAID 1構成にしていたのでインストーラが3ware 9650SEを認識しなかったけど、3wareのサイトにあるドライバ(driver-win-9.5.1.zipの中身のx64)を指定すれば正しく認識されて動作OKでした。

Vistaでやや微妙だった点がいろいろ改善されてて良い感じです。それにまだ一度もエクスプローラが落ちていない(^^)。

正式にリリースされたらすぐに乗り換えて問題なさげです。来年の1年生用ノーパソも Windows 7 x64 になると思います。ついでにラボ環境も。

3月から朝から晩までモードだった

3月からずっと朝から晩までモードでしたがやっとひと段落した感じです。3月下旬ぐらいまで作ってたS2JDBC対応版Buriを使ったWEBアプリ(Cubby + S2JDBC + Buri + S2Mai + S2Directory + Mayaa)も元気に稼働中です。

3月下旬から4月頭は昔書いたS2Struts 1.1.xのWEBアプリにデータを入れるためのコンバート用プログラム書いたり、その作業のためにちょっと改修したり、その他、新学期を迎えるための雑用をひたすらこなしてました。昔書いた古いコードを触ると全部書き直したい病になるものの、今回は時間的に無理なのでそんまま使いましたが、意外と昔のままでもそれなりに効率良く書けるなーって思ったりもしました。このS2Struts使ったWEBアプリはその前はS2JSFだったので今ならCubbyで書きなおしでしょうが、数年したらまた違うかもしれないですね(^^;;。

Windows 7 Beta良いね

大学行ったらMSDNに入ったばっかのWindows 7がインストールされたマシンが置いてあった!後輩が昨日、リリース後にすぐに入れたらしい。

休憩の合間にちょっとだけ触ってみたところ、噂通りサクサクなVistaでした。Vistaにあったウィンドウやメニュー、エクスプローラでのフォルダ展開時などのたまにちょっと引っ掛かる時間が無くなっててサクサク。

これは正式版が待ち遠しい。インタフェースはVistaとほぼ同じで細かい改善がされてるだけなので、XPからもうVistaに移行している人ならまったく問題なさそうです。他は、電卓がこれまでの関数電卓以外にもプログラマや科学計算モードがあったり、ペイントが無駄に高機能化したりと、内部・外部ともにVistaから基本機能の完成度を高めたって感じです。UACに関しては批判されたこともあってだいぶ柔らかくなってたけど、個人的には今のVistaの厳しいバージョンで全然良いと思っているので、一番厳しくなる設定が出来るなら、その設定で使いそうです。

というわけでこの調子で正式版がリリースされるならば、MSDNに入ってる方はすぐに移行して良さそうです。たぶん僕はすぐに今のVista 64-bitを7 64-bitに移行させると思います。MSDNに入ってない方やPCにプレインストールされたVistaを使っている方は、無理して7にしなくても、ベースはVistaとほぼ一緒なんだろうし、7の成果をバックポートしてVista SP2でこれくらいサクサクにしてくるんじゃないかなっとか思ったりします。高機能な電卓やペイントはないけどね。

  • 7 = 5 + 2 = V + 2 = Vista 2 =? Vista SP2

[追記] 調べたらSP2はすでにBetaが出てるので大きな変更はもう間に合わないそうでした。

来年度の貸与ノートパソコン

来年度の新入生全員に無償で貸与されるノートパソコンの搭載メモリがついに4GBになった様子。金持ちだなーっと思ったけど今のメモリの値段を見るとDDR2 SODIMM PC2-6400 (DDR2-800)でも2GBが1枚2000円で買える…。そう思うと4GB * 2とかないと全然インパクトがないなって思ってしまった。

もう見た目と重さで勝負で。

京都に行った気がしなかった

先週4日・5日はシンポジウムで京都に行ってました。でも、体調不良でかなり残念な感じにしてしまいました。

ほんとは3日から行く予定だったものの、熱が38度以上あってヤバイと思い3日は自宅で安静にし、4日の早朝に行ったもののやっぱしヤバいままでシンポジウムの受付だけしてホテルで1日中安静。そして5日に自分の発表だったものの、頭が回らずに準備していた内容も出てこず、何を話しているのか良く判らない状況のまま発表してしまい相当ひどい感じの発表に。。発表後も少し話して先に帰宅したため、京都の思い出がほとんどありません。他の方々の発表見たり、話をしたかっただけにとても残念でした。

話した内容は2月に書いた落ちてもリモートですぐに復旧できる仕組みを整理して膨らました内容についてでした。この時の絵とはちょっと違うけど基本この仕組みのものが現在3セット(計6台)動いています。そのうちの1セットはこの日記が動いてるサーバです。旧サーバのリース期限が切れたこともあり、こそーりここのサーバの環境を丸ごと移行しました。その際、長年使ってきたqmail-ldapからpostfix-ldapに移行したりもしましたが、問題無く順調に動いてるようです。

そんな京都だったので、消化不良ということもあり用意したスライドが勿体ないので大学でまた皆に最終版ということで見てもらおうかな。

東京工業大学クローバルCOEプログラム”計算世界観の深化と展開”

12月2日(火)、3日(水)、4日(木)の東工大でのCompViewシンポジウム2008にNVIDIAのCEOであるジェン・スン・ファン氏が来るらしい(2日17時〜18時)。うちの大学のCG関係やってる人達行ってみると良いんじゃないかな。

僕は同じ頃、京都にいる予定。

完成、開発環境紹介

最後のフェーズまで実装して完成。あとは考慮漏れがないことを祈るだけ。開発期間は認証周りなどは以前作ったものを流用してたので1週間ちょい。今回使ったものは次のとおり。

  • 開発環境
    • Jiemamy: テーブル設計 (今回はERダイアグラムエディタとテストデータ管理としてしか使っていない)
    • H2 Database: 初期開発環境でのデータベース、初回リリース後は本番環境のPostgreSQLを使用して開発
    • S2JDBC-Gen: DDL -> Entity, Names, Service
    • Maven: ライブラリ管理、S2JDBC-Gen実行、warファイル生成
  • 作成した Web アプリケーションの環境
    • S2Container: DI x AOPコンテナ
    • Cubby: Web アプリケーションフレームワーク
    • Mayaa: Web テンプレートエンジン
    • S2JDBC: O/R Mapper (初期開発時: H2 Database, 初回リリース後: PostgreSQL)
    • S2Directory: O/D Mapper (開発環境: OpenDS?, 本番環境: OpenLDAP)
  • 本番サーバ環境
    • Apache: 2.2.x系なのでmod_proxy_ajp使用
    • Tomcat: アプリケーションサーバ
    • PostgreSQL: 本番環境データベース

S2JDBC-Genは最初Mavenと別にライブラリ管理するのに戸惑って使うつもりなかったもののid:j5ik2oさんのとこでMavenと連携させる例があって取り入れました。結果これが良くて、さらに途中で新バージョンも出ちゃったりして、既に作ってたServiceを移植してすべてタイプセーフに流れるようなインターフェース使うようになりました。第1フェーズ終えた後に、既にデータ入ってたテーブルを直さないと後のフェーズで処理が面倒になる箇所があって直したけど、タイプセーフだったおかげですぐに直すべきコード中の箇所も判り、かなり助かりました。

今回ほとんどS2JDBCの話題しか日記には書いてなかったけど、Jiemamyはじめ毎度ですがS2ContainerのHOT deploy、Cubby、Mayaaも超役立ってて、これらどれが欠けてても期間的にやばかった。

それぞれについて多少何か書くネタが出来たので気が向いたら日記に書いていくかも(^^)。

第1フェーズ完了

突貫工事だった割にエラー出ることなく第1フェーズ無事完了したようです。残りはフェーズ的には3つ。最後のフェーズでの動作機能はまだ完成していない。

1つ判ったのは、データベースでデータの依存関係を表せてないテーブル設計は後々プログラムでとても面倒な処理をしなければならないことになる。単に期間を表すテーブルだけでなく、その前後の繋がりや階層表現もデータベースの中で表現した方が良さそう。

今回それぞれのフェーズに対応する期間を表すテーブルはあったものの、前後関係をデータベースに持たせていなかったので面倒な判定処理が増えてしまった。フェーズというのはワークフローなので、escafeFlow使うと楽できそうなものの、サンプル動かしてもイマイチ判らず時間もなかったのでまた次回に。

間一髪・・・

あやうく予告してあったURLにPDFファイルを置いといて、「これを印刷して手で書いて出してください」っとなるとこだった。。ここ3日間必死になって作ってたWEBアプリの第1フェーズが完成し、利用開始3時間前にリリースという危ない橋を渡った(汗。次また3日間で全部完成予定。

最後の最後、利用開始6時間前ぐらいにH2 Database相手にしかテストしてなかったアプリを本番DBであるPostgreSQLにして突撃したらエラーが出てもうダメかと思った。。

エラーはPostgreSQLで text 型を使っているフィールドに対応するEntityクラスのフィールドに @Lob があったのがいけなかったらしい。それで、今あらためて検索してみたらkoichikさんが関連してる回答をされていた

  • 例外
org.seasar.framework.exception.SQLRuntimeException: [ESSR0072]SQLで例外(SQL=[], Message=[Bad value for type int : user1], ErrorCode=0, SQLState=22003)が発生しました
    at org.seasar.extension.jdbc.query.AbstractQuery.handleResultSet(AbstractQuery.java:443)
    at org.seasar.extension.jdbc.query.AbstractSelect$6.handle(AbstractSelect.java:413)
    at org.seasar.extension.jdbc.query.AbstractSelect$6.handle(AbstractSelect.java:410)
    at org.seasar.extension.jdbc.query.AbstractSelect$1.handle(AbstractSelect.java:283)
    at org.seasar.extension.jdbc.query.AbstractSelect$1.handle(AbstractSelect.java:281)
    at org.seasar.extension.jdbc.manager.JdbcContextImpl.usingPreparedStatement(JdbcContextImpl.java:144)
    at org.seasar.extension.jdbc.query.AbstractSelect.processPreparedStatement(AbstractSelect.java:278)
    at org.seasar.extension.jdbc.query.AbstractSelect.processResultSet(AbstractSelect.java:407)
    at org.seasar.extension.jdbc.query.AbstractSelect.getSingleResultInternal(AbstractSelect.java:232)
    at org.seasar.extension.jdbc.query.AbstractSelect.getSingleResult(AbstractSelect.java:177)
    at org.example.hoge.entity.AdminUserTest.testFindById(AdminUserTest.java:32)
    ...
  • 対応するEntityのフィールド
/** uidプロパティ */
@Lob
@Column(length = 2147483647, nullable = false, unique = true)
public String uid;

このEntityはS2JDBC-Genで生成したものですが、ソース見てみたら、org.seasar.extension.jdbc.gen.internal.dialect.PostgreGenDialectの225行目でtext型の時はlobをtrueにしているようです。

private static PostgreColumnType TEXT = new PostgreColumnType("text",
               String.class, true);

これをfalseにすれば良いんだろうけど、そうすると、EntityからDBスキーマを生成する時に影響してしまうのかな?

また、そうしたらそうしたらで、H2 DatabaseのCLOB使ってる属性に対応するEntityには@Lobが付くことになるのに、それをそのままPostgreSQLで使えば結局エラーが出るので、そもそも異なるDBサーバをいったりきたりして開発するのが間違いなのかもしれない。

とりあえず仮眠してからまた考えよう。

  • [追記 11:46]
  • DBスキーマ
CREATE TABLE admin_user (
  id BIGSERIAL NOT NULL PRIMARY KEY,
  uid TEXT NOT NULL UNIQUE
);
  • レコード例
INSERT INTO admin_user (id, uid) VALUES (1, 'user1');
  • Entity全体
@Entity
public class AdminUser {

    /** idプロパティ */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(precision = 19, nullable = false, unique = true)
    public Long id;

    /** uidプロパティ */
    @Lob
    @Column(length = 2147483647, nullable = false, unique = true)
    public String uid;
}
  • 例外が発生するテストケース例
    • uidの@Lob外すと例外出ずに正常に実行されるようになります。
public void testFindById() throws Exception {
    jdbcManager.from(AdminUser.class).id(1L).getSingleResult();
}
  • 実行されたSQL
select T1_.ID as C1_, T1_.UID as C2_ from ADMIN_USER T1_ where T1_.ID = 1

[追記 10/14 11:45]

本件、id:taediumさんとこのPostgreSQLのTEXT型はCLOBか否か?に続きがあり、PostgreSQLのTEXT型では@Lobを付けてはいけないということになりました。修正ありがとうございました。

コメントが付けられなかった件、tDiaryの「ツッコミ中でURLを表す文字の占める割合が70%より高いものはspamとみなす」という設定に引っかかってしまったのではないかと思います、すいません。数値を30%に変えておきました。

[追記 10/29 0:39]

すこし時間空いてしまいましたが、id:taedumさんとこのPostgreSQLのTEXT型はCLOBか否か? その2より、@LobつきStringをOID型ではなくTEXT型にマッピングすることになったそうです。

VMwareの中でLinuxデスクトップをPXEブート

MAX約250台な環境のVMwareの中でLinuxデスクトップをPXEブートする環境を作って満足。CentOS 5.2以降のsystem-config-netbootはちゃんと動いた(CentOS 4.7以前、CentOS 5.0のは上手く動かなかった)ので、pxeosとpxebootコマンドを実行するだけでわりと簡単に既にあったクライアントマシンからPXEブート用のマスタを作れた。PXEブートというとサーバ環境とかメンテのユーティリティ用に使うしかイメージなかったけど、今回作ってみてデスクトップ環境でも良い感じ。

後期の講義で機会があれば、同時に90台ぐらい起動して負荷テストしたい。NFS rootをNFSサーバ3台にマシン番号ごとに分散するように構成したのでたぶん良い感じで動くと思う。

ホーム > Academic

検索
フィード
メタ情報

Return to page top