Java

Play!触ってみた

1.2.3を使いました。 はまった crud用のhtmlを編集しようとして、マニュアルにあるとおり以下のコマンドを実行したところ、、 play crud:ov --template Users/list こんなエラーが。 Invalid command: crud:ov アプリケーションの場所を明示することでうまく…

Javaでの文字のバイト列の表示

作る必要があったので、メモがてら残しておく。 なお、String#codePointAtで返ってくる値は常にUTF-16BEとしてのコードポイントという点に注意。 public static void main(String[] args) { String string = "あいうえお"; for (int i = 0; i < string.lengt…

JSPでのスクリプトレット内での注意事項

Tomcat5.5.27からは以下のような書き方はできなくなったようだ。。 <input type="text" name="sample" value="<%= varA + ", " + varB %>"> こんな例外が出る。 Attribute value varA + ", " + varB is quoted with " which must be escaped when used within the value 対応方法は以下にありました。素晴らしい。 http://amebl…

タイマー実行

1.4まではjava.util.Timerを使うところでしたが、5.0からはconcurrentパッケージに導入されたScheduledExecutorServiceを使うべし!とEffective Javaにあります。 ということで、ちょっとお勉強。 ScheduledExecutorServiceの生成 基本的には以下のどちらか…

エスケープ処理

Java上で文字列のエスケープ処理がしたい場合は、commons-langのStringEscapeUtilsを使うのがおススメ。 String escapeXml = StringEscapeUtils.escapeXml("xml"); String escapeHml = StringEscapeUtils.escapeHtml("html"); String escapeSql = StringEsca…

selenium

遅ればせながらSeleniumを触ってみたのでメモ。 最終的にやりたいのは、JUnitとして実行すること。 そのための手順として、 Selenium IDE(これはfirefoxプラグイン)を使って、ブラウザ操作からテストシナリオを作る JUnit上で実行 となります。 環境準備 S…

ant中からgroovyを呼び出す〜あれこれ〜

Antからgroovyが呼び出せるようにする設定はこちらを参照してください。 http://d.hatena.ne.jp/mtoyoshi/20071125/1195955576 基本編 タグ中はgroovyプログラミングが可能。Antで用意した変数はgroovy側でも利用可能です。 <target name="some_target"> <antcall target="func"> <param name="sample.flag" value="true" /> </antcall> </target> <target name="func"> <groovy> println prop…</groovy></target>

空白で区切るんだけど、"で囲まれている中の空白は無視する

@kompiroさんのつぶやきに触発されてtryしてみた。 growlnotify -n "Quick JUnit"」をProcessBuilderに食わせるために"growlnotify","-n","Quick JUnit"と分割して上げたいのだけれど、いい方法が見つからない><。もしかしてさくっと出来たりしないのかな…

guava

いつのまにやら、google-collectionsがguavaに統合されていた。現時点でのバージョンはr06。guavaはGoogleの多くのJavaベースのプロジェクトで使用されているjava core libraryとのこと。 パッケージ名を見れば大体の機能について想像がつく。 com.google.co…

Windowsサービス起動のTomcatのプロセス番号を調べる

startup.batで起動したTomcatに関してはコマンドプロンプトでjpsとやれば表示されますが、Windowsサービスから起動したTomcatは表示されません。jstatでメモリ状況調べる時に困った。 現在のログインユーザーではないユーザーとして起動されているために表示…

List#subListの罠

String#subStringって結構メジャーなメソッドだと思うんですけど、List#subListって知名度どれくらいかなー。subStringの感覚で使ったら痛い目あうよー・・・ってそんなことどれだけの人が知ってるんだよ!!というお話です。 このシンプルなプログラムの実…

Google Collections Libraryステキというお話。

Javaしか知らなかった時はまぁ多少冗長だなー位にしか思っていなかったんですが、rubyを知ってからはJavaプログラミング中に「rubyならもっと簡潔にかけるのに・・・」なんて思ったりすることが増えてきました。 例えば、 List<String> animals = new ArrayLists<String>(); </string></string>…

URL→URI→File

よく忘れるのでメモ。クラスと同じ場所にあるファイルを読み込む方法。 URL url = this.getClass().getResource(fileName); URI uri = new URI(url.toString()); File file = new File(uri);

コマンドの実行

全然知りませんでした。危ない危ない。 http://d.hatena.ne.jp/tomo_snowbug/20090128/12331541881.6でも直っていない。。

新しい技術メモ

あまり最近は新しい技術などを追いかけられてないですが、いくつか見つけたのでメモ。TOEICが終われば時間を見つけて勉強する。 T2 play! DOMA apt

floatとdouble

Effective Java 第2版 (The Java Series)作者: Joshua Bloch,柴田芳樹出版社/メーカー: ピアソンエデュケーション発売日: 2008/11/27メディア: 単行本(ソフトカバー)購入: 77人 クリック: 936回この商品を含むブログ (261件) を見る 項目48「正確な答えが…

コンカレンシーユーティリティの練習

10スレッド同時実行して、スレッド間の分布を見るサンプルです。 単にjava.util.concurrentパッケージを使ってみたかっただけですw。 public static void main(String[] args) throws InterruptedException { int max = 10000; final CountDownLatch start …

不変クラスのキャッシュ

Java5からInteger#valueOf(int)メソッドが増えました。 これの利点は、-127〜128については、内部でキャッシュされたものが返されるため、生成コストが低いということ。ということで、Integerが欲しい時は、new Integerではなく、必ずInteger.valueOfを使う…

配列をカンマ区切りで

以前、文字列配列をカンマ区切りの文字列にするというのを書きましたが、自分で作るんじゃなくて単に利用したいだけならこんな方法があります。 int[] ary = new int[] { 1, 3, 5, 7, 9 }; System.out.println(Arrays.toString(ary)); // [1, 3, 5, 7, 9] Sy…

Strutsのtilesのバグ

tilesで子供側のjspから例外が出てもその例外が上にうまく伝播されず、そのまま中途半端なhtmlがクライアント側に返ってしまうみたい。global-exceptionsの設定が効かない(泣)。その中途半端なhtmlは場合にによっては画面が真っ白になっているように見えた…

10章 並行性

今回もEffective Javaより。10章読んでいて気になったけど、Javaは5になってから、GenericsやAnnotation、Enum、Auto Boxing、staticインポート、可変長引数など文法的に大幅な変更が加えられたことでその点が大きくクローズアップされるものの、java.util.c…

Joshua Bloch

本blogでも何度か取り上げたEffective Javaですが、その著者のJoshua Blochさんが実際にauthorになっているプログラムを見つけてびっくり! Java5からenumが導入されましたが、enum型の集合を表すのに特化したjava.util.EnumSet(もちろんSetインタフェース…

AntタスクからVisual Studioのソリューションをビルドする

後輩に教えてもらった。 以下のようにすることで、eclipseからビルドできるので、いちいちVisual Studioを起動しなくても済む! <exec executable="cmd.exe"> <arg line="/c &quot;${dotnet.dir}/msbuild.exe ${src.dir}/Sample.sln&quot; /p:Configuration=Release"/> </exec> ちなみにdotnet.dirはほとんどの場合「C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727」だと思います。

項目28 APIの柔軟性向上のために境界ワイルドカードを使用する

今日もEffective Java第二版より。なかなか難しかったが、理解できてスッキリ! Effective Java 第2版 (The Java Series)作者: Joshua Bloch,柴田芳樹出版社/メーカー: ピアソンエデュケーション発売日: 2008/11/27メディア: 単行本(ソフトカバー)購入: 77…

境界・非境界

現在、部署のみんなとEffective Java 第2版を輪読している。本当いい本!難易度は結構高めだけど。 Effective Java 第2版 (The Java Series)作者: Joshua Bloch,柴田芳樹出版社/メーカー: ピアソンエデュケーション発売日: 2008/11/27メディア: 単行本(ソフ…

URL fetch

GAEからWEBサービスを呼び出す時はURL fetchなるものを使うらしい。 http://code.google.com/intl/ja/appengine/docs/java/urlfetch/ よって、以前このようにしていた部分は、 URL url = new URL("http://api.iknow.co.jp/items/matching/" + translateForm.…

GAE/JではStrutsは使えないっぽい

嘘です。使えました。 2009/4/25 こちらのblogを参考にさせてもらってGAE/JでStruts環境を構築。 http://googleappengine.seesaa.net/article/117110106.html blankアプリケーションはローカルでもサーバー上でも動作した。 で、次に簡単なStruts ActionとSt…

GAE/JではHttpClientは使えないっぽい

smart.fm(旧iKnow!)のWEB APIを使ったアプリケーションを作ろうとして、WEB APIの実行部分をcommons HTTP Clientを使ってやってみたんですが、ローカル環境ではうまく動かず。 java.security.AccessControlException: access denied (java.net.SocketPermiss…

GAE for Javaのサンプルソースの解析

プロジェクトを新規作成したときのサンプルソースをちょっと解析してみたので簡単に解説。 といってもまだドキュメントをちゃんと読んでないので、あくまでソースコードを解析してみての個人的な予想。 まずサンプルアプリケーションは次のような画面で、ボ…

GAE Java!

もう無理かと思いましたが、メールでアカウントの用意ができたという連絡が来ました。 実際の登録時に、携帯電話のアドレスを登録するところがあるんですが、@以前は20文字までしか入力できません。俺のアカウントは21文字だったので、登録できませんでしたY…

昔のJDK

たまーにインストールする必要が出てきて、いつも探すのにちょっと時間がかかってしまう。 http://java.sun.com/products/archive/

Google App Engine

先週いつの間にやらGAEでJavaサポートが開始されていた。 ここに利用可能なクラス一覧が掲載されている。いくつか削られているとの事。 http://code.google.com/intl/ja/appengine/docs/java/jrewhitelist.html 遊んでみよう。

日付の繰上げ禁止

以下のプログラムでは「2009/3/33」というありえない入力値をパースしようとしているので、エラーが出ることを期待する。しかし実際は繰り上がって「2009/4/2」という日付オブジェクトが生成されてしまう。 SimpleDateFormat simpleDateFormat = new SimpleD…

eval

今日初めてJavaを組んでいる時に、JRubyもしくはJava6のVM上でjavascriptが動くやつが使いたいと思った。理由はタイトルにあるように、Javaでevalが使いたい!と思ったから。eval相当を自分で組むのは嫌だ〜。

Ajax通信。でもProxy認証が・・・

XMLHttpRequestを利用したAjax通信では、同一ドメイン以外へのHTTPリクエストの発行が許可されていない。例えば自ドメインがlocalhostなのに、http://www.google.co.jpにアクセスするなんてことは一足飛びにはできないわけです。 というわけで通常はクライア…

ジェネリクス便利♪

ジェネリクス便利だけど、まだすらすら手が動くわけじゃぁない。というわけでメモっておこう! blogにメモっておくと仕事中に必要になったときに、「あ、確か過去に書いたな」と不思議とすぐに思い出せるし、検索機能ですぐ見つかるので便利なのだ。 public …

Java7のNullチェック

ひがやすをさんのJava7はしょぼくなりそうを読んで。 nullチェックが入ったのは良いんだけどね。 ん?なんだろう、nullチェックというのは。「入る機能」として引用されている部分を読んでみると・・・ Null dereference expressions - Null checks with '?'…

csWindows31J

HTTPレスポンスヘッダのcontentType JSPの先頭には次のような1行を書くのが通例だ。 <%@ page contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %> このcontentTypeの部分が最終的にはHTTPレスポンスヘッダに展開される。 機種依存…

preparedstatementにハマッた!

create table A ( id char(32) );こんなテーブルがあったとして、 insert into A (id) values('aaa'); insert into A (id) values('bbb'); insert into A (id) values('ccc');という3件のレコードが存在するとき、 PreparedStatement pstmt = connection.pre…

Strutsタグの備忘録

FormBeanに設定された値をStrutsタグで利用する場合はよくあるんですが、requestに直接設定した値を利用したい場合もあります。 ただ、よく「あれ、どうやるんやったかな」と考えてしまうので、一度まとめます。 サーバーサイド request.setAttribute("hoge"…

Javaの正規表現の扱いはC#よりイイ!

以前「C#の正規表現の扱いはJavaよりイイ!」というエントリを書きましたが、訂正。Javaの方がやっぱ良かったです。自分が知らなかっただけでした。すんません。前回の例はエスケープ記号がつきすぎてしまうので、前回よりもう少し簡単な例として、以下のよ…

配列の動的生成

後輩がはまっていたので。でも確かに面白い問題だった。 次のプログラムは、第一引数の配列のうち第二引数に含まれないものを出力する差分取得プログラムで、期待値は「A」「C」と表示されること。しかし実行するとmain文の1行目でString[]にキャストすると…

staticメソッドのリフレクション

後輩から質問されたのでアップしときます。確かに一瞬どうやるんだ!?ってなるかも。 まず対象のクラス。 public class Target { public String aaa() { return "instance method"; } public static String bbb() { return "static method"; } } staticメソ…

文字化け

しょーもないプログラムなのに、文字化けしてしまう。一応うまくいく方法も分かったけど、その理由がよく分からん。。■jsp <%@ page contentType="text/html; charset=UTF-8"%> <html> <head></head> <body> <form name="f" action="http://localhost:8080/MyApp/servlet/myservlet" method="GET"> <input type="text" name="hogehoge"> <input type="submit" value="送信"> </form> <…</body></html>

Struts×JSON.simple×jQueryでJSONオブジェクトをajaxでやり取り

今更感ありありですが、これらの組み合わせでやったのは初めてだったのでメモしておきます。 やり取りするのはこんなJSONデータ。 [{"name":"太朗", "age":27}, {"name":"花子", "age":25}]想定としては検索ボタンをクリックすると、上記データがサーバーか…

instanceofとisInstance

obj instanceof String と String.class.isInstance(obj); という書き方がある。通常はinstanceofでいけるけど、下の書き方も覚えておくと便利。な時があるかも。

Java VMが確保するヒープサイズを調べる

javaの実行引数に-Xmxっていうオプションを追加することで明示的にヒープサイズを確保するわけですが、確保できる上限ってのがどうやらOSとかCPUとかに依存して一意じゃないということを会社の同期のT君に教えてもらいました。じゃぁ使っているPCはどこまで…

javascriptの縮小化

ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール作者: Steve Souders,スティーブサウダーズ,武舎広幸,福地太郎,武舎るみ出版社/メーカー: オライリージャパン発売日: 2008/04/11メディア: 大型本購入: 32人 クリック: 676回この商品を含むブロ…

文字列配列をカンマ区切りの文字列にする

課のメンバーで簡単なプログラミングコンテスト。 お題は、「dog」「cat」「pig」という文字列配列の各要素をカンマで区切った文字列に変換せよ、です。 回答1 String[] ary = new String[]{"dog", "cat", "pig"}; StringBuilder builder = new StringBuilde…

ソートされた連想配列

javaだとMapインタフェース、C#だとIDictionaryインタフェースで実現されている連想配列。 HashMapやDictionaryでは例えばfor文でレコードを取り出す際の順序が保障されない。そんな時は実装系を変えてjavaならTreeMapを使用し、コンストラクタにComparator…