2011年4月28日木曜日

ゴールデンウィークなんですか?やったー!

というわけで明日からゴールデンウィークです。
と言っても実家に帰ってゴロゴロしたりするだけだとは思いますけど。

それだとあんまりにもあんまりなので、
気が向いたらAndroidアプリの開発でもやってみますか。

あとはデュエルの申し込みがあったので、
デッキ調整して挑まないとな…(胸熱)

新パックには自分好みのカードがあるのでぜひとも入れておきたいです。
何のことかって?
遊戯王のことです。

2011年4月27日水曜日

マイノリティな質問の行方

StackOverflowでVXMLの質問に回答しました。
本当、IVRは簡単に試せないのが問題だ…

流れ的に自分が答えないと迷宮入りしそうだったし、
敷居ハードルの高さが伺えます。

そんな質問をStackOverflowで解決できたら素敵ですね。
というかそんな質問が集まるっていうのがいいですね。

日本の掲示板では?知りません。

2011年4月26日火曜日

空振りのSOAP実装

とある事情でJAX-WS RIをtomcatに入れて動かそうとしていました。

しかしブラックボックスのクライアントアプリが動かない動かない…
Axis・Axis2を使っているらしいのですが、
もっとログをくれ~っという状態になっていました。
そしてGUIだから何をどう使っているのかが分からない。

勉強する時間が足りないでござる^^

結局別方面で問題があり、
別解にしようということでお蔵入り。

勝利者のいない戦いであった…

2011年4月25日月曜日

統計でニヤニヤ(・∀・)パート3

いつの間にかアクセスカウンタは300を突破しました。

何のキラーコンテンツもないブログにしては、
随分と健闘しているのではないでしょうか?

そろそろ何か作って上げたいところです。

そういえば、
統計でサイト内検索した履歴がちらほらと見えました。

まだ歴史が浅いブログなので、
残念な結果になったと思います。

今後に期待ということで、
どうかお願いいたします。

もう少し趣味に走った記事も書きたいな…

2011年4月22日金曜日

XMLの検証をバージョンごとに行う

XMLの検証にはDTDかXMLスキーマを使うわけですが、
自作しているといつの間にか複数のバージョンが登場しだします。

なので読み込みの部分で、
どのバージョンなのか調べてから検証しなければなりません。

ルート要素の"version"属性にバージョン情報があるとして、
どうやれば実現できるのか考えてみます。

まず最初に言いたいのは、
XMLスキーマに統一する必要があるということです。

"Trang"というツールでDTD→XMLスキーマの変換ができるのでやっておきます。
何かエラーが出たときは…うん、ごめんなさい。

そしたら読み込み部分の処理ですね。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

// 名前空間をサポートするか
factory.setNamespaceAware(true);

// DTD検証を行うか
factory.setValidating(false);

// XMLのパース
Document document = factory.newDocumentBuilder().builder.parse("(XMLのURI)");

// バージョン情報の取得
String version = document.getDocumentElement().getAttribute("version");

if (version.equals("1.0")) {
    Schema schema = SchemaFactory.newInstance(
            XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(
                    "XMLスキーマバージョン1のURL");
    schema.newValidator().validate(new DOMSource(document));

    // バージョン1の処理

} else if (version.equals("2.0")) {
    Schema schema = SchemaFactory.newInstance(
            XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(
                    "XMLスキーマバージョン2のURL");
    schema.newValidator().validate(new DOMSource(document));

    // バージョン2の処理

} else {

    // エラー

}

では軽く解説を…
まずパース時のDTD検証は無効にしています。
検証はパース後にしたいですしね。
XMLスキーマに寄せた理由もここら辺です。

で、DOMでバージョン番号を取得します。
後は各バージョンのスキーマを使って検証を行うだけっと。
例ではif文ですが、Mapとか使ってさばくのが大人の醍醐味。

あ、Schemaオブジェクトはスレッドセーフだから作りっぱなしでOKです。

XMLファイルのスキーマ情報は無視している…はずです。
もし何か悪さをしたらDocumentBuilderにEntityResolverを設定して適当に受け流してください。

これでXMLの後方互換性はバッチリ!
(…例によって誰得情報だ。)

2011年4月19日火曜日

画面レイアウトを変更しました

昨日、StackOverflowのプロフィールアイコンを貼りつけました。

カルマ値が1k超えでもすれば少しは鼻が高いですけど、
そんなのはまだまだ先です。

答えられそうな質問もないし、
尋ねたい質問もない状態だからです。

…そういえば日本人でアイコン貼りつけている人はいるのかねぇ?
自己主張が激しいのは自分だけ?

2011年4月18日月曜日

慣れていくのね…自分でも分かる

ガンダムネタじゃなくて、プログラミングのお話です。

無料で何とかなるIVRを構築しようとしたんですが、
転送やASRがサポート外と聞いて一から作るか~っとなったときです。
(VoiceGlueもJVoiceXMLも気に入らなかったのよさ)

JAIN-SIPのライブラリを落としてきたら、
セマフォの機能がサードパーティー製でライブラリを要求されました。

「今どきのJDKではんなもんいらん!」

ということで、
ソースコード引っ張って…
パッケージ名差し替えて…
メソッド名違う場合は直して…
antで再ビルド~

成功~

うん!JDKのセマフォに差し替わったぞ♪
(未使用の変数やメソッドが多いけど無視しとくか…リフレクションで使われていると恐いし。)

…あれ?
昔はこんなにオープンソースぶん回せたっけ?


ま、雛形できたらGoogle Codeにでも上げようっと。

2011年4月13日水曜日

asteriskに挑め(戦果)

とりあえず、
Ubuntu 10 + Asterisk + VXI* のIVR構築に成功~

一般向けに説明すると、
これを突き進めることでBPSに近いことができるようになります。

流石にキーボード相手に勝つのは難しいですけどね~

仕事場のVM上に入れたから、
今度は自宅のノートPCに入れて色々試してみるぞ~

具体的には、
VXI* → VoiceGlue
にしてみる。

2011年4月12日火曜日

asteriskに挑め

Ubuntu + Asterisk + OpenVXI系の何かでIVRを構築中…

Asteriskまでは簡単だったけど、
VXMLブラウザがどうにも上手く動かない…

日本語用の設定が邪魔していたりするのかねぇ?

2011年4月11日月曜日

Log4jで環境変数を利用する

Log4jと環境変数をキーワードに訪れる方が見られるので、
ちょっとまとめてみることにしました。

まずLog4jの設定ファイルは、
環境変数の値を利用することが可能です。

利用する方法は、

${(環境変数の名前)} まちがいです。システムプロパティです。

とするだけです。
それだけで読み込んだときに環境変数の値に置換されます。
設定値となる場所ならどこでも使えるはずです。

例えばtomcatでLog4jを使う場合は、

${catalina.home}/logs/trace.log

なんて書き方ができます。
これでtomcatのlogsフォルダへログを出力できます。

アペンダの参照を環境変数で定義すれば、
起動方法によってログの出力先を変更するようなこともできます。

地味に応用範囲が広いので、
使い方を練習しておくと得するかも?


2012/08/30追記:
すいませんでしたぁ!!
環境変数ではなくシステムプロパティでした!
手っ取り早い話は、星野政利の日記を参照してください。
一言コメントをもらったら直したというのに…恥をさらしまくっていたよ~

ちなみに起動時のオプション以外でどうにかしたい場合は、
以下のコードとかで環境変数をシステムプロパティに注ぎ込むって手もあります。

// 環境変数をシステムプロパティへ代入する
Properties property = System.getProperties();
Map env = System.getenv();
for (Map.Entry keyValue : env.entrySet()) {
    if (!property.containsKey(keyValue.getKey())) {
        property.setProperty(keyValue.getKey(), keyValue.getValue());
    }
}

え?邪道?

ですよね~

メールアドレスを公開しました

自己紹介の詳細に載っているので、
何かメールしたいことがあれば送ってみてください。

内容は特に指定しませんが、
技術的な質問だと喜ばれる可能性があるかもしれません。

きっと暇なら何らかのレスポンスが返ると思います。

記事的にはlog4jに詳しいと思われているのかね~?

2011年4月6日水曜日

スマートフォンからの投稿(andoroid アプリ編)

今度はアプリを使っての投稿です。
写真は上手く掲載されるでしょうか?




追記:この写真は適当に作った手料理です。
追記2:アプリで投稿すると日本語がエスケープされている…当たり前か。

2011年4月5日火曜日

myBatisのログをLog4jに出力する

そういえば分かりにくそうだったので記載しよう。

○前提条件
多分Apache commons loggingが必要な気がする。

○log4j.xmlの書き方
    <category name="org.apache.ibatis">
        <priority value="trace" />
        <appender-ref ref="(アペンダ名)"/>
    </category>
    <category name="java.sql">
        <priority value="trace" />
        <appender-ref ref="(アペンダ名)"/>
    </category>
多分この2つで十分だと思われる。
ソースはソースコード読んだ結果。

他の場所への出力は…自分は使わないので気が向いたときにでも。

2011年4月4日月曜日

統計でニヤニヤ(・∀・)パート2

参照元チェック!
参照元チェック!
さんしょ…おや?

何やら見慣れないURLがあります。
え?こんなところから?
ポチっとな…

「404 Not found」

…某社内ブログにリンクが貼られた?
(当たり前かもしれませんが)このブログはリンクフリーなので、お好きにどうぞ。

それにしてもLog4jの記事はカウンタが回るな~
そんなに困っている人が多いのかな?

2011年4月1日金曜日

キャストに失敗するとnullを返すメソッド

キャストが失敗したらnullを返すメソッドを作りたいけど、
戻り値がObjectだともう一回キャストしないといけない…

そんな悩みを経て、
総称型で解決させることにしました。

public <T> T castInstance(final Object object, final Class<T> clazz) {
    try {
        return clazz.cast(object);
    } catch (ClassCastException e) {
        return null;
    }
}

これでメソッドの戻り値型が動的に変化します。
ああ、キャストに失敗する可能性が高い場合はinstanceofとかで判定した方がいいかもしれません。

…役に立つの?これ。