java

Play!の黒魔術を読み解こうとしてみる(未完

この記事は、Play! framework Advent Calendar 2011 jp #play_ja : ATNDの11日目の記事です。さて、軽めに行きましょう!(ということにさせてください… 僕とPlay! とあるWEBサービスの受託開発案件があり、自分を含めてメンバー的にJavaプログラマが多かっ…

共通関数継承のデメリットを説明せよ

共通関数継承とは、あるクラスで共通的に使うだろう関数やメンバを、親クラスのメソッドやメンバとして定義するパターンだ。Constant interfaceパターンやimport staticあたりが関係するアンチパターンとされるモノの一つで、神様ルートクラスを嫌い、POJOを…

Javaプログラマが知るべき9のこと

はじめに ソースコードは設計であり、コードの記述は品質に直結するのは言うまでもない。ちなみに、プログラマにとって特に重要なのは保守性だ。コードは書いた直後から保守対象となるからだ。コードは要求文書の範囲で動けばいいと思っている人がいれば今す…

ソースコード改造の発注時に気をつけること

メモメモ。他にあれば、ぜひおしえてください。 ソースコード中の改変コメント("// add 2011.02.03 katzchang start"等)は不要です。 元のソースコードのコメントアウトは不要です。必要ないコードはそのまま削除してください。 ifなどのブロック("{ ... …

MyBatis Schema Migrationを使ってみる

この記事は Java Advent Calendar -ja 2010 の4日目のものです。 はじめに 継続的な開発では、データベーススキーマも段階的変化に耐えることが求められる。マイグレーション・システムが必要だ。 そこで、MyBatis Schema Migrationというのがあるらしいので…

public class GitCommandSpike

import java.io.*; public class GitCommandSpike { public static void main(String...args) { GitCommandSpike spike = new GitCommandSpike("repos"); System.out.println(spike.version()); System.out.println(spike.status()); System.out.println(spi…

hamcrestを使うtest method template.

Java - Editor - Templates から設定する。 まず、既存のtest"test method(JUnit3)"とTest"test method(JUnit4)"は不要なので削除しておく。で、↓を追加する。コピペで大丈夫です。 Name: test Context: Java statements Description: hamcrest test method …

2.5時間で成果を出す、レガシーコードとの戦い方

ポイントは 真っ先にコードをぶっこわせ! いやその前にバージョン管理に突っ込め! 安全にコードをぶっこわせ! 仕様化テスト書こうぜ! で、ようやく機能追加なりリファクタリングなり不具合の改修なりができる状態になります。以下詳細。 …と、続けようと…

LRUCache、一定時間経つと消えるところまで。

仕様変更その2まで対応。 Clockオブジェクトを導入 記事にしやすいよう、モッククラスをテストないに記述してるけど、分けた方がいい。 でも、Clock.SYSTEM_CLOCKは、interface Clock内に定義すべき。通常使うだろう、デフォルトオブジェクトがわかりやすい…

LRUCache、仕様変更その1(事後の容量変更)まで

TDD Boot Campの課題の再挑戦です。 仕様変更その1(事後の容量変更)まで対応。ここまでは大して複雑にはならないのは、前回の通り。スナップショットとして。ポイントは、キー管理を内部クラス"KeyHolder"に委譲していることか。put時の容量超過と、capac…

宗教戦争

発生地域は、以下の2カ所が確認されています。 アクセス修飾子 private vs パッケージプライベート(またはprotected) continue/break 使っても良い vs 禁止 あと、個人的にはBeans否定派です。これも火種。

Javaオブジェクトに対する操作の記録と再生

元ネタ What Kind of Differences? Consider the following class. It defines an object that is able to record all the messages ever sent to it, and then playback those messages to another object. 以下のクラスは、オブジェクトに送られた全てのメ…

interfaceは細かく軽く作るべきなんだろか

public interface Foo { public String foo(); } public interface Bar { public String bar(); } public interface Baz { public String baz(); } public class FooBar implements Foo,Bar { //... } public class FooBaz implements Foo,Baz { //... } 極…

JavaでGenericsを使ってStructual Subtypingできたよー

Structual Subtypingは、OCamlとかScalaとかにもあるらしい、アレです。 方針 一つのインタフェースに一つのメソッドが定義される。 インタフェースの継承は禁止。 利用側(今回はHogeクラスのhogeメソッド)では、必要なメソッドを持つ総称型として引数を受…

Javaのオブジェクトはメッセージではない(追記:?)

このコードが通らないので。 import java.lang.reflect.*; interface A { public String a(); } class A2 { public String a(){return "A2";} } public class Fuga { public static void main(String[] args) throws Throwable{ final A2 a2 = new A2(); Cla…

オブジェクトへの委譲をstep by stepで。

メモ。 素朴に。 public class Person { String name; String zipcode; String address; String phoneNumber; //getters & setters... } 郵便番号のチェックは必要だよね。 public class Person { String name; String zipcode; String address; String phon…

「繰り返し処理中のオブジェクトの生成は最小限にする」

C_CTR009 繰り返し処理中のオブジェクトの生成は最小限にする 繰り返し回数の多いループの内部でオブジェクトを生成することは、生成に時間がかかるため回数によっては、大きなパフォーマンス低下につながることがあります。これを回避するには、ループ外で…

パッケージプライベートはもっと見直されるべき

いやすいません、不当に低く見てたのは自分なんですけどwprivateにする理由の一つに、メソッドを壊す可能性があるから自由に使わせたくないっていう思想があるようだけど、継承したクラスをどう書くかなんてのは書いた人の責任だし、同じパッケージとして定…

replies取得

package twitter4j; import java.util.List; public class MyTwitter extends Twitter { private static final long serialVersionUID = -4218983212013279106L; public MyTwitter(String id, String password) { super(id, password); } public List<Status> getRep</status>…

Twitter上でIokeプログラミングをとりあえず的に

@IokeGround fib = method(n, if(n == 0, 0, if(n == 1, 1, fib(n-1) + fib(n-2)))). fib(10) http://twitter.com/katzchang/status/2450789054 とすると、 @katzchang 55 http://twitter.com/IokeGround/status/2450791565 こう返す。つまり、Twitterで@メ…

file.open()に違和感

file.connectとdisconnectの方がしっくりくる件について。 データストレージ内の特定のID(ファイルパス)を持つ領域ってイメージというか。

java.sqlパッケージについて

java.ioと統合してほしいです。結構マジで。 フレームワークとか使う場合、あんまり意識しないかもしれないけど。

JavaからIokeを使う

コマンド"ioke"から呼ばれるはずのioke.lang.Mainをベースに、とりあえずJavaからIokeを使うテスツ。 r.evaluateString("hogehoge"); で、IokeのRuntimeにメッセージを送る。ioke.lang.Runtimeには他にも、ファイルを受け付けるものがあったりStreamを受け付…

「10分でコーディング」で15分かかった件

これ以上かかった人は 自分はかなりプログラミングができない。 とつらい事実を認識しましょう。 http://ameblo.jp/programming/entry-10001721422.html まぁ、そんなもんですよ。 以下、自分の回答。

集合

メモというか。 内包とかJavaだと苦しいし、無限集合になるとマジどう扱うべきかわからん。 あと、コメントにも書いてあるけど、テストコードのリファクタリング、重複あるテストの削除とか整理とかって重要だと思うけど、その辺りの感覚がつかめない。書い…

同じクラスの違うインスタンスのプライベートフィールドは可視なのが不自然に思えてきた

んー、どういう現象なんだろう。

値保持用のクラス

引数にメソッドの結果を格納させようとして、値保持用のクラスでStringをラップさせるハック。 原因は、char配列のポインタ風にStringな変数を引数に突っ込んで値を格納させようとしてるんだけど、残念ながらStringは不変で、そういうことができないので。 …

thisはメソッドとフィールドで微妙に違う件

JavaScriptのthisではまった - No Programming, No LifeとJava の this について - SiroKuro Pageの話。 Javaでは動的に付けたり外したりできず、class宣言時にすべてが決まってしまうから、thisが参照するインスタンスは固定的にできるわけですね。 JavaScr…

やる夫がAOPを始めるそうです。

guiceでやってみました。 import java.util.Date; import java.util.logging.*; import org.aopalliance.intercept.*; import com.google.inject.*; import static com.google.inject.matcher.Matchers.*; public class やる夫が { static final Logger logg…

単純に委譲しないメソッドのみを定義したアレをProxyクラスで何とかする

id:S_a_k_uとの話の中で、「DI的な感じで委譲させるのはいいけど委譲のコード書くのがやたら面倒だよね」という論点において合意に至り、Proxyで何とかなりそうだよねという話になったので、何とかしてみた。コメントとか書いてません。悪しからず。 test TD…