プログラマとプロマネのあいだ

プログラマもやるし、プロマネもやるし、たまに似非アーキとか営業っぽいこともやる

Java

HornetQでクラスタ構成にしたとき、HQ212034が出続ける場合の対処法

事象 下記のように、HQ212034のワーニングメッセージが繰り返し表示される。下記の通り、1回だけ表示されるなら無視してよいが、繰り返し表示される場合は問題がある。 20:59:08,455 WARN [org.hornetq.core.client] HQ212034: There are more than one serv…

HornetQでクラスタプロパティを有効にしたとき、NumberFormatExceptionが出る場合の対処法

HornetQ 2.4.0Finalrun.batのCONFIG_DIRの"non-clustered"を"clustered"に変更して、CLUSTER_PROPSの行をコメントインする。 クラスタプロパティを有効にしたrun.bat @ echo off setlocal ENABLEDELAYEDEXPANSION set HORNETQ_HOME=.. IF "a%1"== "a" ( set …

spring bootでapplication.propertiesにオリジナルのプロパティを作ったときに"'xx' is an unknown property."が出るときの対処方法

spring bootで複数のDataSourceにアクセスするサンプルを書いていたのですが、 http://docs.spring.io/spring-boot/docs/1.2.0.BUILD-SNAPSHOT/reference/htmlsingle/#howto-two-datasources を参考にまあ普通に出来ました。しかしその際、application.prope…

Spring Dataを使って、自動的に監査証跡を保存する

業務アプリケーションを作っていると、監査証跡ということで、作成者、作成日時、更新者、更新日時を保存するということがあると思います。Spring Dataのアノテーションを使うと、自動でセットしてくれるので、アプリケーションで決まりきったコードを書かな…

gitやsvnで管理しているpom.xmlのproject.versionはいつどうやって上げるのか

https://github.com/Jasig/sass-maven-plugin/commits/master/pom.xml とか https://github.com/apache/maven-surefire/commits/master/pom.xml とか見ると、以下のようにするのが良いらしいです。 まず、始まりのproject.versionは0.0.1-SNAPSHOTとか。 pom…

テスト対象クラス内でnewで生成されている依存オブジェクトをモックする

テスト対象クラス(DateUtil.java) import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { public static String getCurrentDate() { Date d = new Date(); return new SimpleDateFormat("yyyy/MM/dd").format(d); } } テス…

Verifications/FullVerificationsの違い

FullVerifications モックオブジェクト/クラスのリプレイフェーズでの呼び出し全てを検証する Verifications モックオブジェクト/クラスのリプレイフェーズでの呼び出しについて、Verificationブロックで指定したもののみ検証する テスト対象クラス(Hello.j…

Expectations/Verificationsの違い

Expectations 記録フェーズで使う。モックの振る舞い記録と、リプレイが行われたことの検証に使われる。 Verifications 検証フェーズで使う。行われたリプレイの検証に使われる。Expectationsと違い、モックの振る舞い記録ができない。(result変数への代入…

Expectations/NonStrictExpectations/StrictExpectationsの違い

Expectations 最低一回は呼ばれる、順番は関係ない NonStrictExpectations 回数、順番関係なし StrictExpectations 呼び出し回数と順番がマッチしないとダメ ということですね。 テスト対象クラス(Hello.java) public class Hello { public static String …

@Mocked/@Injectableの違い

@Injectable 特定のインスタンスのみモックする @Mocked 全てのインスタンスをモックする テスト対象クラス(Hello.java) public class Hello { public static String helloStatic() { return "helloStatic()"; } public String helloInstance1() { return …

@Mocked/@Capturingの違い

@Capturing テスト実行の間にJVMによってロードされる追加のクラスについてもモックする @Mocked テスト実行の間にJVMによってロードされる追加のクラスはモックしない テスト対象クラス(Hello.java) import java.io.File; import java.io.FileFilter; pub…

JMockitでprivate static finalな定数を書き換える

設定ファイルにするまでもないものは定数で定義したりしますが、違う値でテストしたいときがあります。 jmockitを使うと(使わなくても)簡単にできるのですが、一点ワナがあったのでメモしておきます。 テスト対象クラス(Hello.java) public class Hello …

log4j(1.2.14以前)でRollingFileAppenderを使うと、ログ切替時にログが消失する場合がある。

log4jの問題というよりは、パーミッション設定の問題で、ログファイル自体には書き込み権限はあるが、ログファイルを出力するディレクトリに書き込み権限がない場合に起こります。 ■ログファイルには、書き込み権限がある taka@taka-VirtualBox:~/log4jtest$…

FindBugsで"static な java.text.DateFormat のメソッドを呼び出しています。"が警告される件

まあ、日本語を読んだだけでは意味が分からなくて、色々ググってたら以下を見つけた。 Call to method of static java.text.DateFormat not advisable? - Stack Overflow つまり、java.text.DateFormatはスレッドセーフじゃないのに、staticなメソッドから呼…

S2DaoでEDAO0024が出る場合

なんでS2Dao? 次に参加するプロジェクトで使うかも知れなかったから。 しかしドキュメントが分かりづらい。。 S2Dao - S2Dao-Tigerリファレンスを読みつつやってたわけですが、 まずは動くところまでのクイックスタートがあって、その上で、詳細の説明がある…

終了しないプロセス

以下が再現用のプログラム。 public class test { public static void main(String[] args) throws Exception { new Thread(new Runnable() { public void run() { while(true) { try { System.out.println("Hello!"); Thread.sleep(1000); } catch(Interrup…

switch文は、case式の書き方によって、lookupswitch命令か、tableswitch命令のいずれかにコンパイルされる模様。

確かにString.equalsは文字を1つずつ評価していてハッシュ値が使われてないですね。switchでは文字列をインターン化するかも? @taka_2 @ryoasai74 if文はif_icmpneなどの命令に、switch文はtableswitchという命令に置き換わる2011-09-22 23:45:20 via Tween…

Google Apps の OpenID 連携ログイン サービスを使ってみる(今度は成功)

GoogleアカウントのOpenID連携ログインに比べて、やることがいくつかあります。 1. ドメインを取得する 2. サーバを用意して、http://example.com/でアクセス可能にしておく。 3. Google Appsに登録する(無料版で(for Businessじゃなくても)OK) 4. OpenI…

Google Apps の OpenID 連携ログイン サービスを使ってみる(失敗)

前回の openid4javaを試すなど で、GoogleアカウントのOpenID連携をやったんですが、 今回は、Google Appsアカウントでやってみようという企画です。 結論から言うと、 Google AppsのアカウントでOpenID認証するためのURL - 森薫の日記 に書いてある、 https…

VB.NETでは、Returnの後の実行されない処理書いても、コンパイルエラーにならない。

VB.NETの場合 ソース Imports System Class Test Public Shared Sub Main Hoge() End Sub Public Shared Function Hoge As Integer Return 0 Console.WriteLine("abc") End Function End Class コンパイル結果 >vbc Test.vb Microsoft (R) Visual Basic Comp…

openid4javaを試すなど

openid4java openid4java - OpenID 2.0 Java Libraries - Google Project Hosting ファイルの配置 EclipseでTomcatプロジェクト作って、以下のように配置します。 OpenIDTest │ index.jsp │ index2.jsp │ ├─src │ LoginWithGoogle.java │ └─WEB-INF │ web.xm…

シンプルなJPDA(Java Platform Debugger Architecture)のサンプル

参考図書 Eclipse 3.6 完全攻略作者: 宮本信二出版社/メーカー: ソフトバンククリエイティブ発売日: 2010/11/24メディア: 大型本購入: 4人 クリック: 62回この商品を含むブログ (6件) を見る 準備 public class Main { public static void main(String[] arg…

if-elseの最適化(フラットなif-else if-elseを、二分木に展開)

テキスト ハイパフォーマンスJavaScript作者: Nicholas C. Zakas,水野貴明出版社/メーカー: オライリージャパン発売日: 2011/03/20メディア: 大型本購入: 9人 クリック: 1,176回この商品を含むブログ (34件) を見る お題 4.2.2 if-elseの最適化に載ってるの…

ダフズデバイスでループ回数を減らす

テキスト ハイパフォーマンスJavaScript作者: Nicholas C. Zakas,水野貴明出版社/メーカー: オライリージャパン発売日: 2011/03/20メディア: 大型本購入: 9人 クリック: 1,176回この商品を含むブログ (34件) を見る お題 4.1.2 ループのパフォーマンスよりル…

OmegaTでJavaソース(javadoc)を翻訳するときの設定(訳文ファイルを生成したときに改行コードが消える問題の対策)

1.OmegaTを起動し、メニューより、設定→ファイルフィルターを選択します。 2.テキストファイルを選択し、編集ボタンをクリックします。 3.追加ボタンをクリックします。 4.原文ファイル名の構成例に「*.java」を入力し、確定ボタンをクリックします…

ext-docでSencha Touchのドキュメントを作ってみる

ext-docとは Ext JS/Sencha Touchのソースに特定の形式で書いてあるコメントから、 HTMLのドキュメントを作成するツールです。 ext-docのインストール ext-doc - Project Hosting on Google Code から最新版をダウンロードできます。 が、ここで公開されてい…

Windows Script Host Framework(wshf)見て、ラッパライブラリとはなんぞやと考えた。

前々からWSHを便利に使えたらいいよなーと思いつつ、 作ったスクリプトのコピペで大体の用は足りてたので、 共通フレームワークを作るというところまでは行ってませんでした。 が、たまたまTwitter上でWSHの話題になって、教えてもらったのが、 wshfというラ…

JavaのSwingとSencha Touchが似ているという根拠薄弱な理由。

結論 コンポーネント作って、レイアウトマネージャで配置を決めるのは、Sencha TouchもSwingも同じ。 そんだけ。 Sencha Touchの場合 三つのPanelをhboxでレイアウトする Ext.setup({ onReady : function() { new Ext.Panel({ fullscreen: true, width: 400,…

Javaでは定数が呼び出し元に埋め込まれるが、.NET(C#)はどうか?

概要 あるdll内で定義されている定数を変更した場合、 呼び出し元を再コンパイルする必要はあるか?という質問。 常識的に考えたら、dllが変わったからといって、 呼び出し元を再コンパイルする必要はないのだが、 Javaでは、定数は呼び出し元に埋め込まれる…

FetchOptions#setDeadlineは正しく動作しない@Google App Engine SDK for Java1.3.5。

フィードを読んで、フィードを吐き出すっていうのをGAE/Jでやっているときに、 フィードの読み込みで時間がかかると、タイムアウトエラーを吐き出すという事象に遭遇しました。 フィードを読むところのソースはこんな感じ。 DocumentBuilderFactory dbf = Do…

jmemcachedに多言語のmemcachedクライアントがつながるか

結論 Pythonクライアントはつながった(他は試してない) インストール http://pypi.python.org/pypi/python-memcached/ から python-memcached-1.45.tar.gz をダウンロード ソース import memcache mc = memcache.Client(['127.0.0.1:11211'], debug=0) mc.se…

jmemcachedを動かしてみる

サーバ側 □サイト jmemcached http://sourceforge.jp/projects/freshmeat_jmemcached/ □インストール http://thimbleware.com/maven/com/thimbleware/jmemcached/jmemcached-cli/0.9.1/ から jmemcached-cli-0.9.1-main.jar をダウンロード □起動 java -jar …

アナログな超かんたんデジカメ写真整理法をやるためのツール

最初は、 指定した8枚の写真にそれぞれに撮影日を入れる 指定した8枚の写真を2x4のタイル状に配置して、1枚の画像ファイルとして出力する だけで良いかと思ってました。 うちのデジカメはIXY DIGITAL 20 ISという800万画素のもので、 何も考えずに撮ると3264…

Graphics2D#drawStringせずに、文字列を描画した際の幅と高さをピクセル単位で取得する。

概要 下のサンプルは、 "2009/11/11"という文字列を、DialogのPLAINフォントで描画した場合に、 どのくらいの幅と高さが必要か、ピクセル単位で表示するものです。 1ptから200ptまでループして、その変化を見ています。 ソース 結果 Font size = 1(pt), Widt…

JPEGファイルから撮影日を取得する

metadata extractorというのを使うと簡単にできます。 ダウンロードはこちらから ソース 結果 撮影日(Date/Time Original) = 2009:09:13 18:45:11 参考ページ こちらのページを参考にしました。 http://www.kyotosanga.com/gaku/2004/11/exif_reader_for_jav…

トイプログラム作成支援ツール for Java デスクトップにあるjar/zipをクラスパスに追加するようにしました。

なので、実行手順はこうなります。 必要なjarをデスクトップにコピーする。 ツールを開く ソースを書く 実行ボタンを押す 以降、3,4を繰り返す。■ソース(gistに置きました)

トイプログラム作成支援ツール

トイプログラムとは、未知のプロダクトやAPIの検証を行うための小さいプログラムのことだそうです。 正確な定義は下記ページ参照。 いがぴょんの日記v2: キーワード: トイプログラム・デザインパターン 私もAPIとかいちいち記憶していないので、 未知でない…

Google App Engine for Java使ってみた

以前書いた、読書ポートフォリオを表示するのをWebアプリ化できないかと思って、 せっかくなのでGAE/Jを使ってみました。 一応できたのがこれ。 http://ssbstat.appspot.com/ssbstat/taka_2 が、むちゃくちゃ遅いです。 (2009/7/29追記) 遅い上に、Amazon Ad…

Amazon Web Serviceを使って、ASINから本のトップカテゴリ名一覧を取得する

昨日書いた、読書ポートフォリオという考え方の続き。 便利なラッパーとかありそうだと思ったのだが、意外になかった(探し足りないだけ?)ので、とりあえずASINから本のトップカテゴリ名一覧を取得するところだけ作ってみました。 ここでは、図解入門業界研究…

複数プロセスから同一ファイルに同時書き込み

こないだ問題になった件。となりの同僚の人が書いた再現プログラムを脳内で再現する。 import java.io.*; public class test { public static void main(String[] args) throws IOException { PrintWriter writer = new PrintWriter(new FileWriter("aaa.txt…

Thread#runを直接呼び出し

もちろん非同期実行されないわけですが、FindBugsでも、 Ru: Invokes run on a thread (did you mean to start it instead?) (RU_INVOKE_RUN) みたいなメッセージで検出されます。 っていうか、プロダクトコードにこんなのがあるなんてありえない。。

SELECTリストにバインド変数

こんなことができるのかとビックリした。想像力が足りないと反省。 しかも、それにある条件が加わると、Oracleのバグを呼び起こすらしい。 JDBC-ODBCブリッジで書いた例 import java.sql.*; public class test { public static void main(String[] args) thr…

二重ループを抜けるやりかたにも色々ありますけどね。。

同僚の人の話。まあ、普通はラベル付きのbreakを使ってこんな感じ。 public class DoubleLoop1 { public static void main(String[] args) { out_of_loop: for(int i=1; i<=10; i++) { for(int j=1; j<=10; j++) { System.out.println("i = " + i + ", j = "…

Hudson + SventonをTomcatに乗せてみた

それぞれのwarをwebappにコピーしてTomcat起動するだけ! Hudsonのホームディレクトリは、デフォルトでは、 System.getProperty("user.home") + "/.hudson" になるらしく、VB.NET側でやや不都合があったので、変えてみました。 環境変数HUDSON_HOMEで設定でき…

Hudson + Sventonが相性よさげ

コメント欄で教えてもらったSubversion用リポジトリブラウザですが、 sventonってのが良さそうです。 いくつか選択できるのですが、ViewSVNとWebSVNはPHPだから改めて環境を作るのがめんどくさい、FishEyeはタダじゃないらしいからヤダ、でSventonに落ち着き…

Hudsonを使ってみてます。

今の現場は、自由に色々やれるので、最近ちょっとキテる感のあるHudsonを試してみました。 つか、ひげオヤジかよーと思ったけど、なかなか使えることが判明。 最初の印象は、 ビルドするだけだったらAntでも出来るじゃん そんなに頻繁にコミットしないから、…

EclipseのJavaコンパイラとSunJDKのJavaコンパイラは違う

という事実を今さらながら知りました。へー。 以前Java開発をやっていたときは、IBMのEclipse拡張版(?)を使っていたので、実はEclipseを仕事で使うのは初めてだったりします。 Tomcatプラグインとか便利だねと。 で、今回リリース作業をやらせてもらった中で…

JSPでBSFを使うのは廃れた?

JSP2.1の仕様(jsp-2_1-fr-spec.pdf)読んだら、 In JSP 2.1, the only defined and required scripting language value for this attribute is java (all lowercase, case-sensitive). This specification only describes the semantics of scripts for when …

JRuby on Java6 Scripting

参考URL1: JRuby Engine 参考URL2: Java Scripting Programmer's Guide とりあえずjrunscriptで動かしてみる https://scripting.dev.java.net/servlets/ProjectDocumentListからjsr223-engines.zipをダウンロードして、解凍する。 jruby/build/jruby-engine.…

JRuby on BSF

コマンドラインからbsfで用意されたMainを使って実行 E:\jruby-1.1.4\lib\ruby\gems\1.8\gems\rubeus-0.0.6-java\examples>java -Djruby.ho me=%JRUBY_HOME% -classpath %JRUBY_HOME%\lib\jruby.jar;%JRUBY_HOME%\lib\bsf.jar;. org.apache.bsf.Main -in rub…