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

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

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

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

幼児に歯を磨かせるためのいくつかの施策

3歳児に歯を磨かせるのは大変だ。「歯を磨かないと、口腔内に残った糖分が酸に変化してエナメル質を溶かすんだよ」とか、「歯はまだいい、歯肉炎にかかりだしたらヤバいぞ」などの脅しは通じないのが、奴らの欠点だ。そこで、いくつか試している施策を紹介す…

「クラスはオブジェクトの集合である」についての疑問

Aクラスは全てのAクラスのインスタンスの集合である かつ、 Set<A>のインスタンスは特定のAクラスのインスタンスの集合である ⇒ Set<A>のインスタンスはAクラスの部分集合である…となるが大丈夫か?というのが自分の疑問です。継承は害悪か。 - Togetterや、TDDBC</a></a>…

Don't Tell, Ask - 求めよ、命じるな

えーと、どんな因果か、レビューされる側よりもする側になることが多くなってしまった。対象となる生産物の欠点を指摘することは、レビューの大事な役割の一つであるとされている。だが、レビュアーとして一番怖いのは、間違った指摘や無意味な指摘をしてし…

TDDでLiftのバリデータを実装していく

この記事はScala Advent Calendar jp 2010の13日目です。12/19予定だったけど、日付超えてしもたわ…。この記事の全てのコードは https://github.com/katzchang/TDD-with-Lift にあります。 はじめに LiftはScalaで最も有名なフレームワークだろう。Scalaの能…

MyBatis Schema Migrationを使ってみる

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

XSS Challenges 登山会に参加してきた

12/4から5にかけて、XSS Challenges 登山会に参加してきた。合宿ですよ!内容は、http://xss-quiz.int21h.jp/の課題をクリアしていくというもの。よかったら挑戦してみてください。以下、思い出して列挙します。 結論 基本 小手先で変換するよりも、エスケー…

HelloLift 2.1

Liftについて調べたことをまとめていきたい。LiftについてはLiftの情報 - @katzchang.contextsも参照のこと。 事前に用意するもの Maven2 Java6 インストールの詳細は他のサイトの解説を参照。執筆時点で Maven 2.2.1 / Java 1.6.0_22を使っている。 作る環…

HelloSBT

2章に挑む前に、sbtの設定をする。sbtはSimple Build Tool。http://code.google.com/p/simple-build-tool/ セットアップ http://code.google.com/p/simple-build-tool/wiki/Setup を参照。 OutOfMemory対策(追記) sbt ~jetty-runをしばらく続けていると、O…

Boxについて調べてみた

Boxはオブジェクトのコンテナの一つで、要するにscala.Optionっぽいもの。Liftアプリケーションでは頻出なので、調べてみた。 Lift 2.1前提。 object Box class Box Box.apply Boxインスタンスを作るファクトリ。 Box(someValue) *1で、boxな何かが返ってく…

ピッチブランチ

git

まずは作業ブランチを作って移る。「ピッチブランチ」と呼ぶことにする。以下では、元ブランチはmasterとしているが、もちろん作業ブランチでもよい。 git branch pitch git checkout pitchして、有効にしてjunit実行。実行しながら細かくコミットしていく。…

現在の課題

日時型のマッピング model.MappedDatetimeのformat/parseは、object LiftRulesのdateConverter(うろ覚え)を経由して、JavaのSimpleDateFormatで処理してるわけだが、date.toStringのような「日本人的には馴染みのない」形式なので、切り替えたい。 が、そ…

Liftの情報

結論としては、本家サイトの情報が最も確実で、ゴールが近い。ので、大した情報ではないが、載せておく。自分用リンク集。 http://liftweb.net/ 本家。今日現在、最新は2.1-RC3。 http://liftweb.net/getting_started 取りあえずここから始めよ http://www.a…

初めてのscalaで戸惑ったことをつらつらと書く

"=>"ってなんやの パターンマッチングとか、関数リテラルのパラメータを渡す的な場面でつかう。 "->"ってなんやの つまるところ、2要素のタプルを作っているようだ。 ↓みたいなコードってなんやの db.use(param) { con => hogehoge(con) } openOr false つま…

sbtを使ってScalaを継続的テスト(ついでにmaven連携もすこし

James Strachan's Blog: Using SBT on your Scala Maven project for continous testingの意訳です。 本文 継続的テストは大事だ。ソースコードが変更されたらすぐにテスト。テストファーストはいいことだし、コードの変更への素早いフィードバックが得られ…

なぜギークは「プログラム」を「コード」と呼ぶか?

十分に意味が伝わり、かつ短いから。

チーム立ち上げのプラクティス「病気自慢」

開発チームの立ち上げの際、互いに自己紹介しあうのは大事です。社内だとしても、同じチームで仕事しない限りはあまり交流がなかったりするのは弊社だけじゃないはず。で、その場で名前とか開発経験とかを言い合うわけだけど、合わせて「今までの仕事で、一…

娘ちゃんは3歳と3ヶ月くらいになりました

自分を振り返っていたら、「子供が2歳になりました - @katzchang.contexts」というエントリを見つけたので、続きを書こうかと思い付きました。 「何歳?」と聞くと「さんさい」と答える。ただしジェスチャーは、2本指より難易度が高いため、相変わらずニジニ…

誰でもできるように設計書を作成するという仕事の価値

誰でもできるように設計書を作成する人の月単価:80万円 その設計書に基づいて実装する何処かの誰かの月単価:50万円 どう考えても後者の方がお得です。以上、よろしくお願いいたします。

OCaml Boot Camp

TDD Boot Camp名古屋一日目の成果を、2週間経過した今更まとめる。 環境設定 OCaml-3.11.2 findlib-1.2.5 OCamlのパッケージ管理的な何か。 ocamlfind -listでインストールされているパッケージを確認できる oUnit-1.0.3 OCaml用ユニットテストライブラリ ex…

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時間で成果を出す、レガシーコードとの戦い方

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

↑のタイトル変えました。

はてなB-Twitter連携記念で、タイトル変えました。Twitter投稿ありでブクマすると、Mentionでチェックできるという寸法です。文字数がオーバしたら多分切られる。このまま、ちょっと試してみます。以前のタイトル"self contexts"はIoke言語風だったけど、今…

デスマーチで生き抜くために

デスマーチが始まるためには、かならずそこに至る原因がある。短い納期、少ない予算、ブレるスコープ、多発する不具合、増大する改修稼働…。一般論として、起こった問題を解決したいなら原因を突き止めて取り除く、もしくは無効化させることが必要となる。つ…

それはアートであるか

あなたにとって新しい視点を与えるものであれば、それはアートである。で、考えてみれば良いよ。例えば「ある人が、『これアートである』と主張している」こと自体は自分には関係ない。としても、自分がそれを見た/体験したときに「新しい視点」を特に感じな…

Eclipse 3.5 GalileoのXMLエディタにてでエラーが出る場合の対処

Eclipse 3.5 GalileoのXMLエディタにてでエラーが出る場合、直前のコメント閉じタグの手前にスペースが入っているか確認すること。

katzchangはTDDBC名古屋に参加します。

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

我々はいつリファクタリングに着手すべきか。

「リファクタリングが必要だと感じたときに、リファクタリングすべきである」 2009年12月のTDD Boot Campにて、"Test Driven"の著者であるLasse Koskela氏に頂いた回答。必要だと感じてから時間が経過したあとでは、リファクタリングすべき(つまり汚い)コ…