« 2010年5月 | トップページ | 2010年7月 »

2010年6月の7件の投稿

2010/06/18

NetBeans6.9でgroovyファイルが含まれているとテスト実行できない

NetBeans6.9にアップグレードしたのですが、以前まで問題なかったJavaプロジェクトのJUnitテストが実行できなくなりました。エラーメッセージは以下の通り。

nbproject/build-impl.xml:725:
Unknown attributes [apgeneratedsrcdir, processorpath]

ちなみにバグレポートは既に挙がっているようです。Bug185686 - Adding groovy class to Java Project - bad ant file build-impl.xml

Subversionで管理していたプロジェクトでしたので、nbprojectディレクトリ以下をrevertしてアップグレード前に戻してだましだまし使用してきましたが、今回新規プロジェクトを作成したので昔のバージョンに戻すという手段が取れず、根本的な解決を探りました。

 

nbproject/groovy-build.xmlの中にある-groovy-init-macrodef-javacターゲットの記述が、自動生成されるJava側のAntファイル(nbproject/build-impl.xml)に追従できていないのが問題のようです。

エラーメッセージにある2つのattributeの宣言(これはbuild-imple.xmlの中にもあります)

<attribute default="${javac.processorpath}" name="processorpath"/>
<attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>

を、groovy-build.xml中の

<macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">

の下あたりに挿入することで、エラーが出なくなりました。(注:この対策が本当に正しいのかどうかは、実のところ自信はありません)

[追記: 現在ではバグレポートに上記のことが書いてあります(どうも巡り巡ってこのエントリが英語文章化されたみたいなので、やっぱりこの回避策で良いのかは確信が持てませんが)。]

余談ですが、groovyで記述したテストケースをNetBeansで実行するには、Running Groovy tests in NetBeans 6.7.1というエントリが参考になります。

2010/06/11

nicoroid/lite ver.0.2.2 他Androidアプリとの連携強化

ダウンロードはこちらから。またAndroid Marketへの直接リンクはこちら: nicoroid, nicoroid lite

 

前回の認証機能対応で久しぶりにAndroid Marketへアクセスしたのですが、ニコニコ動画関連アプリが増えているのに気づきました。

以前、coroidはWebインタフェースなので遅い、これを改善してほしい、という要望を聞いていましたので、今回、他作者の方のアプリでこれを補完することにしました。

具体的には、ニコ動RSS(Market)とUz Nico Viewer(Market)から、nicoroidの機能であるマイリスト登録&変換要求が行えるようになります。

ちなみにこの対応で通常版とlite版の機能差が縮まりました(通常版には元々あった機能です)…通常版はdonationだ、というふうに考えてもらえると幸いですが。

さて、これで遅さは改善できるでしょうか…というか、ネイティブアプリだから速い、と思われるでしょうか。確かにWebベースよりネイティブアプリの方がキャッシュは制御しやすいので(Android Webブラウザのキャッシュコントロールはイマイチ、モバイル端末向けだから仕方ないのでしょうが)、一度見たページに再度アクセスすることについてはメリットがあると思います。個人的には、1画面に100個画像を表示させてもそんなに重くならないのだなあ、というのが驚きでした。さすがにバックグランドに回ると(HT-03Aでは)すぐ殺されてしまうようなので、その辺りはトレードオフが発生していますが。

あと、遅いと感じられる原因のひとつとしては、coroidは(致命的な部分は除いて)あまり積極的にキャッシュを行わないようにしている、というのも挙げられます。つまり、逐一ニコニコ動画サービスへアクセスを行っています。なるべくニコニコ動画サービスのサービス提供状況と同期させたい意図からです。ニコニコ動画が落ちてるときは、やっぱりcoroidでも視聴できないし、削除された動画はcoroidでも見られない、というようにしようというのが当初の設計方針です。が、遅いと感じられる方が多いようでしたら方針変更するのはやぶさかではないです。

 

その他、ニコニコ動画を視聴できるアプリもいくつか登場していました。上記のUz Nico ViewerとNicoRo α版(Market)です。どちらもAndroid端末で処理が完結するので、対応している端末だとcoroidを使用するメリットは激減します。ただ、Uz Nico ViewerはAnroid2.2(Froyo)以降のFlash再生環境が無いと駄目、NicoRoはそれなりのCPU処理能力が必要そう(私の持っているHT-03Aでは今のところ視聴できた動画はありません…)なので、まだ一応coroidの存在意義は無くなってはなさそうです。

NicoRoについて、開発が進めばHT-03Aでも再生できるようになるのか、という点についてはおそらく無理だと思います。以前試したことがあるのですが、HT-03Aで再生できる動画のサイズ(ピクセル数の方です)には上限があるようで(上限は動画によって微妙に異なっていたので、きっちり決まっているわけではなくハードウェアデコーダの処理上限みたいなものかと)、基本的に再生するためにはリサイズが必要です(この点について、coroidではver.0.2.0でサイズを最適化するように対応しました)。

で、そのリサイズ処理をAndroid端末(特にHT-03A)で行うのには無理があるかと。PCで行っても結構時間がかかるので…この点、FroyoのFlahプレーヤではどうなっているんでしょうね。ハードウェア的なサポートがあるのでしょうか。

ちなみに、Android端末で完結してHT-03Aでも再生できるアプリとしては、以前こんなもの(動画)を作りかけたことがありますが、iPhone/iPod touch公式アプリの不評具合を見て開発は継続していません…

 

そんなわけで、

  • Froyo対応端末を持っている ⇒ Uz Nico Viewer、あるいはWebブラウザ
  • Froyo未対応だけどCPU性能の高い端末(Xperia(Desireも?))を持っている ⇒ NicoRo
  • CPU性能のあまり高くない端末(HT-03A)しか持っていない、あるいは端末の消費電力をなるべく抑えたい ⇒ coroid

みたいに住み分けができる、のか?

2010/06/08

Androidでオレオレ証明のサーバへSSLアクセスする

正確には自己署名証明しているサーバへのHTTPS通信、というのでしょうか。

 

私はJavaでHTTP通信を行う際にはApache HttpClientを利用していました。AndroidのSDKにもHttpClientが組み込まれていましたので、Android上のHTTP通信もこのAPIを利用していました。

HttpClientでオレオレ証明を受け入れるには、Customizing SSL in HttpClientに記載されているようなコーディングを行います。でないと”javax.net.ssl.SSLException: Not trusted server certificate”といった例外が出ます。

ここに記載されている説明のうち、MySSLSocketFactoryクラスインスタンスはどうやって作成するのか、というと、こちらに実コードがあります(上記サイトの説明とは少し異なりますが)。このコードでは、669行目辺りで、SSLContextインスタンスを引数にとるorg.apache.http.conn.ssl.SSLSocketFactory(javax.net.ssl.SSLSocketFactoryではないことに注意)クラスコンストラクタで生成しています。

そんなわけでAndroidでもSSLSocketFactoryのコンストラクタを利用するか、と考えたのですが、AndroidのSSLSocketFactoryクラスコンストラクタにはそのようなものがありませんでした…

 

そこで、方向転換して、Java標準APIに含まれているHttpURLConnectionを利用することにしました。

こちらもコードの例がMLに流れていました。”Trusting all Certificates using HttpClient over HTTPS”というトピックがそれです(タイトルに反してHttpClientは使っていません)。

そんなわけで、私はHttpsURLConnectionを用いてnicoroidでHTTPS通信を行っています。

 

…今APIリファレンスを見直してみると、android.net.httpパッケージにそれっぽいクラスがありますね。もしかするとこれを使えばHttpClientでも同様のことができるかもしれません。

 

[追記 2011/3/1]

最近仕事用のPCからと思われるこのページへのアクセスが多くなっているようです。お疲れ様です。アクセスが増えた時期から考えるに、Android Market関連でしょうか…

ここに記載したものより、以下のcrckylさんのエントリの方が詳しく説明されていますので、ご参考に。

その他、こちらでもサンプルコード書かれている方がいらっしゃいました。

kanatokoさんの書かれたエントリの内容も、昔やろうとして中座していたことなので試してみたいです。

…というか、ここに追記していかなくても現在では普通に検索すればたくさんヒットしますね。

[追記 20011/6/14]

本文では諦めた、”MySSLSocketFactory”の作り方について説明されています。

といか本文、リンク切れまくってて既に全く役に立っていませんね…まあ、現在では色んな方が解説されているので更新しなくても良いっすよね?

coroid ver.0.5.1, nicoroid ver.0.2.0 認証機能対応

coroid, nicoroidのダウンロードはそれぞれのページで。

 

前回の宣言どおり、認証機能を追加しました。今回の変更点は以下の通りです。

  • coroidのサービスを利用するのにログインID, パスワードの入力が必要になりました。
    • デフォルト設定ではニコニコ動画のID,パスワードですが、変更も可能です(参考)。
  • 変換要求履歴ページを追加しました。
    • どの動画が今見られるのかを一覧できるようにすることを意図したページです。

Grailsバージョンが変わっていたり、起動コマンドが変わっていたりするので、アップグレードする方はダウンロードページの説明を再度見直してみてください。

ちなみに、nicoroidのlite版ははまだ対応中です。対応できたらAndroid Marketから通知が来ると思います…

 

coroidについて、今回からGrails1.3.1を利用するようにしました(今までは1.2.1)が、Grailsが原因と思われる不具合が出ています。

  • Windowsのコマンドプロンプトで日本語が化ける
    • 気持ち悪いですが、動作に支障はありません。
    • [追記] 詳細はこちらに記載しましたが、コマンドオプションに-Dfile.encoding=MS932を追加することで暫定対応できそうです。
  • 起動コマンドを実行した際、例外を出力して終了してしまう
    • “WARNING: Dependencies cannot be resolved for plugin [hibernate] due to error: null”というようなメッセージが出ていれば、これです。([hibernate]の部分は、他の文字列の場合もあります)
    • もう一度(あるいは何回か)コマンドを入力すると起動すると思います。
    • レポートはこれだと思います。1.3.2で解消?

2010/06/07

coroid-server 少し高度な設定の説明

ver.0.5.0以降対応の説明です。

接続ポートを変更する

デフォルトではhttpが8080番、httpsが8443番のポートを使用します。

これを、例えばhttpのポートを80番に変更する場合、以下の2点の設定が必要です。

  1. configの書き換え
    grails-app/conf/Config.groovy をテキストエディタで開き、grails.plugins.springsecurity.portMapper.httpPort と書かれた行を探します(最後の方です)。この設定値を80に書き換え保存します。
  2. 起動コマンド
    通常の起動コマンドに、-Dserver.port=80 を加え、以下のコマンドでサーバを起動します。
    grails run-app –https –Dserver.port=80

httpsのポートを変更する場合も上記と同じようにConfig.groovyのgrails.plugins.springsecurity.portMapper.httpsPort を書き換え、起動コマンドに –Dserver.port.https=[ポート番号] を追加指定してください。

 

coroidのログインID, パスワードを変更する

デフォルト設定では、coroidのログインID,パスワードはニコニコ動画サービスのID,パスワードと同一です。

これを変更するには、grails-app/conf/Config.groovy から coroid.user.id, coroid.user.password と書かれた行を探し、それぞれID,パスワードを設定してください(他の行と同様、文字列をシングルクォーテーションでくくってください)。

 

https通信を利用しない

何らかの理由でhttpのポートしか利用できない場合、以下の設定を行ってください。ただしこの設定を行うとcoroidログインID,パスワードは平文(暗号化されていない状態)でネットワークを流れるので、ニコニコ動画サービスのID,パスワードを共用しないことを推奨します(変更方法は上記「coroidのログインID,パスワードを変更する」参照)。

grails-app/conf/Config.groovy から grails.plugins.springsecurity.auth.forceHttps と書かれた行を探し、false に設定して下さい。起動コマンドは-httpsオプションを付けず、 grails run-app となります。

 

ユーザ認証を利用しない

ver.0.4.x までと同様、認証を行わずにcoroidを利用したい場合の設定ですが、推奨しない運用方法ですので詳細は記載致しません。設定方法はこちらを参照してください。

2010/06/05

さきゅばすのNicoBrowser拡張 ver.1.4.4 不具合修正 その2

ダウンロードはこちらから。

指摘があった不具合のピンポイント対応です。

今回の変更点は以下の通り。

  • 起動時、入力コメントの設定「コメント取得数は自動で調整する」の設定値と、フォルダ/ファイル名選択ラジオボタンの設定値を逆に読み込んでいた不具合を修正しました。
  • 過去ログ取得用URLを更新しました。
    • ただし、プレミアム会員専用のオプションなので、テストできていません。
    • ver.1.4.2で記載している、URL変更に伴うものです。今回変更した箇所は、http://www.nicovideo.jp/api/getthreadkey の部分で、http://flapi.nicovideo.jp/api/getthreadkey に書き換えています。
  • デフォルト変換オプションの変更
    • ver.1.4.3で変更したオプションはWMPで再生できないようなので、元に戻しました…

2010/06/04

coroid ver.0.4.1 検索機能の実装

ダウンロードはこちらから。

以前記載していた追加したい機能の対応第一弾です。

ver.0.3.2からの変更点は以下の通りです。

  • 検索を行い、検索結果の表示からコンテンツ視聴が行えるようになりました。
  • コンテンツ説明文中の、リンクと思われる文字列からリンク先へ飛べるようになりました。
    • デフォルトでは動画コンテンツ及びマイリストへのリンクのみ有効です。
    • 外部へのリンクを有効にするにはgrails-app/conf/Config.groovycoroid.externallinkをtrueに設定してください。

…実はまだバグがあることが分かっているのですが、ちょっと調査・対応の時間が取れそうに無い(し、昔のバージョンも同様だと思う)ので、このタイミングでリリースしました。

以下のようなエラーが出て変換エラーになった場合、再現手順を教えていただけるとありがたいです。

ERROR events.PatchedDefaultFlushEventListener  - Could not synchronize database state with session
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)

[追記] [GRAILSPLUGINS-1776]Changes to an unsaved domain object on a background thread causes a hibernate exception に、発生条件も含めて似たような障害報告が挙がっていました。ただ、Fixedとなっているんですよね…

 

今回追加したリンク機能で外部リンクをデフォルトで無効にしているのは、外部へ飛ぶとそちらのアクセスログにリファラが残るためです。外部へ公開していないホストでcoroidを動作させている場合は問題無いのですが、公開しているホストで動作させている場合、不正アクセスのリスクが更に高まると考えています。

 

どうやら公開サーバで動作させている方が少なからずいらっしゃるようなので、次は認証機能を実装しようと思います。認証機能実装後は、今回追加したオプションは不要になるでしょう。また、次バージョンではおそらく対応Grailsバージョンを最新版にすることになると思います。

« 2010年5月 | トップページ | 2010年7月 »

other sites

  • follow us in feedly
  • github
  • stackoverflow

ソフトウェアエンジニアとして影響を受けた書籍

  • Christain Bauer: HIBERNATE イン アクション

    Christain Bauer: HIBERNATE イン アクション
    理論と実践が双方とも素晴らしい製品であるHibernate。本書はそのプロダクトを書名に冠していますが、Hibernateを使うつもりがなく、ORマッピングの解説書として読むにしても十分な良書です。Second EditionとしてJava Persistence With Hibernateという書籍も出版されていますが、残念ながら現在のところ 和訳はされていません。-インアクションは2.xの、Java Persistence-は3.1の頃のものなので、最新版とはちょっと違うところもあることに注意。 (★★★★★)

  • アンドリュー・S・タネンバウム: 分散システム 原理とパラダイム 第2版

    アンドリュー・S・タネンバウム: 分散システム 原理とパラダイム 第2版
    クライアント/サーバシステムを構築する上で必要となる知識が総論されてます。Web技術者も、フレームワーク部分を開発するのであれば必読。 (★★★★★)

  • Joel Spolsky∥著: ジョエル・オン・ソフトウェア

    Joel Spolsky∥著: ジョエル・オン・ソフトウェア
    前述の書籍「ソフトウエア開発プロフェッショナル」をより砕いたもの、という感じでしょうか。 前書きではプログラマでなくSE向けの本のように書かれているが、プログラマが読んでも面白い本であると思われます。 SEになった新人(あるいはそういう会社に入る/入りたての人)にとっては、これからどういったことが仕事を遂行していく上で起こりえるのか、どのように考えて行なっていけばいいのか決定する助けになると思います。 元は″Joel on Software″というブログの記事で、web上でも一部日本語で読めます。 http://japanese.joelonsoftware.com/ (★★★)

  • ドナルド・C・ゴース,ジェラルド・M・ワインバーグ: ライト、ついてますか

    ドナルド・C・ゴース,ジェラルド・M・ワインバーグ: ライト、ついてますか
    問題解決(一昔前のの流行語で言うところの『ソリューション』)能力は、システムエンジニアのスキルとして備えるべきもののうちのひとつです。しかし、これは難しい。学校で出されるテストと違い、唯一の、(問題提出者が想定している)解を求めるだけが「問題解決」では無いからです。そもそも、何が問題なのか、それは本当に問題なのか、それは本当に解決すべき問題なのか、その問題解決方法は正しいのか、などを解決しなければ、「その解は正しいのか」に辿りつくことができません。この本の最も良いところのひとつは、本があまり厚くないこと。すぐに読めるし、何回も読み返す気になるでしょう。 (★★★★★)

  • スティーブ・マコネル: ソフトウエア開発プロフェッショナル

    スティーブ・マコネル: ソフトウエア開発プロフェッショナル
    コードコンプリートで有名なスティーブマコネルの著書。新人SEに読んで欲しい。個人として業界の中でどうあるべきか、組織としてどうあるべきか、SEのプロ意識とは?SEの心構え概論、といったところでしょうか。また、業界における資格の重要性についても説かれています。この業界では資格が特に軽んじられる傾向がありますが、この傾向はどんな弊害をもたらすのか、将来的にこの業界は資格に対してどのような姿勢で臨んでいくべきなのか。日経BP社では(他の出版社もだが)最近、似たような類いのあまり面白くない書籍が乱出版されていますが、この本は別格だと思うので安心して購入して欲しいと思います。 (★★★★★)

無料ブログはココログ