タグ

ブックマーク / daisuke-m.hatenablog.com (21)

  • 前提条件を破った場合、どのような挙動をするのか? - 都元ダイスケ IT-PRESS

    「Nullチェックされている前提の処理」とJavadocに書いたとき、「throws NullPo…」は書くんだろうか。んー、コード上は発生しうるけど、実際発生しないから不要なのかな はてなブックマーク - u1tnkのブックマーク / 2009年12月29日 まぁ、このブログで書いている話は、あくまでも「俺式」ということをご理解いただいた上で。(ここに書いた事が全て、って訳じゃありません。他にも色々ポリシーはあると思うが、自分はこれが一番良いと考えている。) 自分の考えは、契約プログラミングに基づいてます。DbC(Design by Contract)って奴ですね。 あるメソッドが「Nullチェックされている前提の処理」というのは、引数にnullは入ってこない前提、ということですよね。そしてJavadocを書くということは恐らくこのメソッドは公開API(publicかprotected)

    前提条件を破った場合、どのような挙動をするのか? - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2011/11/20
  • ソフトウェア開発者、完売いたしました - 都元ダイスケ IT-PRESS

    転職活動をはじめて2ヶ月弱。ようやく次の落ち着き先を決めました。ちなみに「転職したのに上司が変わらなかった」っていうネタも考えていたのですが、id:j5ik2o と行き先は別々になりました。まぁ、かとうさんは「永久名誉上司」として、永遠にエロ上司扱いしてやろうと思っています。あ、某D社の皆様も、早速エロ呼ばわりしてみると良いと思いますよ。喜ぶと思いますw …さて。 正直、先日のエントリを上げる直前は、もうこの業界に自分の居場所はないかもしれない等と考え、薬屋への撤退戦略などを考えたりしていました*1。しかし、エントリを上げた途端当人らがびっくりするほどの反響を頂き、最初の1ヶ月は一つ一つお話を聞かせて頂くべく東奔西走していました。この真夏の陽気で外回りは結構体力的にも大変*2でしたが、この年になって社会科見学をしているようで、様々な勉強をさせて頂きました。当に皆さん、色んな考えを持ってソ

    ソフトウェア開発者、完売いたしました - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2011/08/21
    おめでとー!
  • オブジェクト指向のソースを読むのが難しい理由 - 都元ダイスケ IT-PRESS

    ダラダラ書かない予定だよ。ざっくり行くよ。あと、分かってる人には当たり前な事だと思うよ。 あるクラスについて知りたかったら、まずその基底クラスを知れ 例えば、Integerクラスについて知りたいと思ったら、Integer.java だけを読んでいてはダメだ。確かに「Integerに特化した責務・構造・操作」は読み取れるかもしれないが、数値としての基的な責務・構造・操作はNumberに書かれている。それを読まずして、Integerが保つ数値という一面を知ることはできない。Integer.javaには「Integer - Number」*1の情報しか書いてないのだよ。差分プログラミング。 さらに、忘れちゃいけない。Object.javaを読め。全ての道は暗黙的にObjectにつながっている。Objectを知らずしてJavaのクラスを知る事は絶対にできない。Objectなんて、みんな「知った気

    オブジェクト指向のソースを読むのが難しい理由 - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2011/06/10
    「下手にオブジェクト指向で書かれるよりベタ書きされたほうが100倍マシ」という釣りタイトルを思い付いた。
  • final厨(=自分w)に関する考察 - 都元ダイスケ IT-PRESS

    Introduction 〜 問題提起 Java魂―プログラミングを極める匠の技 作者: Robert Simmons Jr.,福龍興業,佐藤直生,木下哲也,石井史子出版社/メーカー: オライリージャパン発売日: 2004/10メディア: 単行購入: 10人 クリック: 157回この商品を含むブログ (82件) を見る 以前、このを読んだ。ザックリと要約してしまえば「finalは良いぞ。ミスを浮き彫りにしてくれる。ひたすらfinalじゃ。」という内容のだった気がする。この影響で、自分はfinal厨*1になっていた。の内容を鵜呑みに(しかも、意図を完全に納得せずw)して、とにかくfinalばっかりのコードを書いて来た。 しかしー。その辺のコードを色々読んでみるも、ここまでfinalを積極利用しているコードって、出会ったことがないのであります。そもそもJavaの「final」ってのは、

    final厨(=自分w)に関する考察 - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2011/01/25
    メソッドは気軽にfinalを付けるべきではないと思うけど、インスタンス変数はfinalでいいような気がする。どうなんだろ。
  • 自分用Maven Archetype - 都元ダイスケ IT-PRESS

    さて、Javaで「何か作ろう」って思った時、みなさんどうします? 書き捨てならば、どうでもいいと思うんですが、少々真面目に作っていこうかな、と思ったら、色々な開発環境整備が大変です。 Eclipse+Maven環境で開発をするのが好きな人は、とりあえず mvn archetype:generate でプロジェクトを作り、mvn eclipse:eclipse でEclipse用の基メタデータを生成し、そしてEclipseにインポートする、なんてことをしているかもしれません。 Mavenプロジェクトとして生成 Eclipseの基メタデータを生成 Eclipseにimport 自分用のEclipse,Checkstyle,FindBugs設定を生成 自分用好みのOSSライブラリをpomのdependencyに追加… なんていうステップが基的な手順かな、と思ってます。ただ、これが意外とめん

    自分用Maven Archetype - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2010/11/11
  • 課題追跡システムの勘所(1) - 都元ダイスケ IT-PRESS

    仕事の現場に、新規で課題追跡システム(ITS)を導入する場合、いくつかの障壁があります。これらは主に、システムを使う人の知識と意識の問題ですが、それを列挙して対策をまとめてみます。 ログインしてくれない まず超根。「導入しました」「あっそ」でスルーのパターン。課題を投げても気づいてもらえない。ありがちです。 これはまずトップダウンで「見ろゴルァ」と指令を出す必要があります。これが業務の方針だよ、と。その決定が前提。しかしそれでも習慣にならないウチはみんなITSの確認をしません。ならばシステム的な解決を目論む。 「一定期間ログインしないとアラートのメールを飛ばす」という策に出ます。結構強引な策ですが。ひとまずこれで、全員の意識をITSに向けることができるんじゃないかな。(という試みを現在実行中w) JIRAでは、Jellyスクリプト*1を使って任意のロジックを実行することができます。バッチ

    課題追跡システムの勘所(1) - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2010/10/07
  • Hadoopとかに入門してみる 〜 分散技術が出てきた背景 - 都元ダイスケ IT-PRESS

    調べたメモ。色々思い込みや想定に基づいた事も書いてるので、鵜呑みして騙され注意報発令さしとく。 最近分散技術系の話題をよく聞くようになりました。企業内グループ内で使うような業務システムであれば、そこまで無茶な数のアクセスも無いだろうから、数台〜数十台規模のサーバを立てればだいたい事足りたのだろう。例えば、サーバ構成を「Webサーバ - APサーバ - DBサーバ」という3レイヤにして、各サーバを冗長化していく、等の手法でどうにかなった。 ただ、処理リクエスト数の増大や、処理対象データの増大、そして処理ロジックの複雑化に伴って、大量のデータを逐次処理するだけでは処理が追いつかない世界が出てきた。業務システムではなく、サービスプロバイダの世界では、この現象は顕著。 また、Webサーバ層とAPサーバ層の冗長化は比較的簡単だけども、DBサーバ層は大量のステートを持っているレイヤだから冗長化がめんど

    Hadoopとかに入門してみる 〜 分散技術が出てきた背景 - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2010/09/16
  • ボク、if文。わるいモンスターじゃないよ! - 都元ダイスケ IT-PRESS

    id:aroundthedistance に召還されたぜ。 http://d.hatena.ne.jp/aroundthedistance/20100727/1280227851 …その昔なー。Seasar Conferenceで「あなたのコードからnewとifが消えます、魔法のDI」みたいなセッションをした。今思い出して「釣りすぎたぜサーセン」という気分になったことをまず懺悔しておく。 この doBusinessん中のif〜else ifをなんとかしたい。 …(中略)… ちょっとすっきりした。けどまだifが残ってるよね。 ポリモーフィズムの例をもうちっと実用的に書いてみた。 - 都元ダイスケ IT-PRESS どんだけif文悪者なんだ。そこまで嫌ならば、一度もif文を書かずにコードを書けばいい。無理だがなw と自嘲。 if文に限らず、問題になるのは濫用なのだ。"ある知識"がトッ散らかって

    ボク、if文。わるいモンスターじゃないよ! - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2010/07/28
    同じような条件分岐を分散させないように、という話なわけで。個人的には、XMLにはぶっとばしたくはないんだよなー。
  • インスタンスを抽象的に扱う - 都元ダイスケ IT-PRESS

    まず「抽象的」という言葉が難しいのかな。俺も最初の頃、一体何なのかわからなかった。プログラムに全く縁もゆかりも無い相方に、オブジェクト指向の話をすこしだけ聞かせたことがあって、「抽象的って、要は大ざっぱってこと?」と問われた。なるほど、良い表現だ。 「Android携帯HT-03A」というオブジェクトがあったとする。それを大ざっぱに扱う(いや、別に物理的に雑に扱う訳ではなく)とはどういうことか。結論を言えば、「文脈上、細かい事を気にしなくて良い場合は、細かい事を記述しないこと」だ。 Android携帯として扱う → HT-03Aではなく、DesireやNexusOneで良い場合は、HT-03Aである、という限定をしない 携帯電話として扱う → Android携帯ではなく、ガラケーでも良い場合は、そういう限定をしない 電子機器として扱う → そもそも携帯の話じゃなくて、電子機器の話という文脈

    インスタンスを抽象的に扱う - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2010/07/24
    Javaのnewしたブツに限って言えば、具象型であつかうかなー。メソッドのインタフェースとして、引数は極力抽象で受けて、返り値は極力具象で返す思想もある。面白い部分。
  • クラスがメソッドの実行に必要なインスタンスを手に入れる方法色々 - 都元ダイスケ IT-PRESS

    あるクラスが、メソッドによってある役割を果たすためには、別のインスタンスが必要なことが多い。ここでは、具体的にそのクラスを考え、そのインスタンスのを手に入れる方法を比較していこう。 ここでは、あるクラスをSqlExecutorとしよう。SQL文を受け取って、データベースのConnectionを使って実行するクラスだ。そして、SQL実行結果(ResultSet)をResultHandlerに渡して処理をする。さて、このクラスが責務を果たすためには「SQL文」「データベースConnection」「ハンドラ」の3つのインスタンスが必要だ。このクラスをいくつか書いて、比較してみよう。 どのインスタンスを、どのように受け取るかの違いだ。各インスタンスに対して、「setterで受け取る方法」「コンストラクタで受け取る方法」「メソッド引数で受け取る方法」がある。 A.全てsetterで受け取る方法 im

    クラスがメソッドの実行に必要なインスタンスを手に入れる方法色々 - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2010/07/15
    クライアントコードからみた注入オブジェクトの静的性による。と言えるような気がする。言語が関数オブジェクトのカリー化をサポートしてたら、無駄な心配な気がした。
  • オープンソースプロジェクトの進め方(が難しい、という話) - 都元ダイスケ IT-PRESS

    私は、Jiemamy Projectというオープンソースプロジェクトを運営している。 ある意味、一人で作っている頃は楽だった。Javaにおけるpublicというキーワードの重みも知らず、複数人によるコミュニケーションのオーバーヘッドも気にすることなく、それはそれは勝手気ままにひたすらコードを書くだけだった。 当初、Jiemamyは「そんなに難しいモンじゃないだろw さっさと作って便利にしようぜww」くらいのノリで作っていたのだが、作れば作るほど色々な問題点も浮上し、勉強すればするほど新しい機能も欲しくなった。人の欲とは恐ろしいものだ。一人じゃ、もう作れない、限界がすぐに訪れた。 Jiemamyは、(私の知る限り)今までにあまり無い考え方を打ち出したプロジェクトだ。ただ語られていなかっただけかもしれないが、「私はこうあるべきだと思う」という理想(Jiemamy開発プロセス)を打ち出し、それを

    オープンソースプロジェクトの進め方(が難しい、という話) - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2010/07/09
  • 難解なSerializableという仕様について俺が知っていること、というか俺の理解 - 都元ダイスケ IT-PRESS

    java.io.Serializable …、ある程度Javaに触れて来た人は必ず見たことがあるインターフェイスだと思う。私も何度も見てきたし、必要に迫られて自分の作ったクラスにSerializableをつけたこともある。しかし、こいつは一体何なのか? 継承の便利さ 僕らがまだJava初心者だった頃。継承というメカニズムに助けられながら育って来た。簡単に言えば、HttpServletクラスを継承しさえすれば、自分の作ったクラスがサーブレットとして認識されるのだ。また、abstractメソッドなどという便利な機能もあり、継承にあたって実装しなければいけないメソッドは確実に指示され、言われた通りにそのメソッドを実装すれば良い。 StrutsのActionも然り。そう、多くの場合は「継承さえすれば、望む物がだいたい出来上がる」というのがJavaの世界だと思っていた。 だが、世の中そんなに甘くない

    難解なSerializableという仕様について俺が知っていること、というか俺の理解 - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2010/04/15
    あとで
  • 可視性と公開APIと非公開(内部)APIと - 都元ダイスケ IT-PRESS

    Javaではpublic, protected, default, privateという4種類の可視性がある。 Javaを始めてしばらくの間、この4つの使い分けがよくできていなかった。 「外から呼ぶならpublic、呼ばないならprivate」時代 当時から、なるべく可視性は下げた方が良い(オブジェクト指向は「隠す技術」である → 継承とコンポジット - 都元ダイスケ IT-PRESS参照)ということは理解していたので、「外から呼ぶならpublic、呼ばないならprivate」という指針からスタートした。 上記に加えて「継承先からしか呼ばないならprotected」時代 Template Methodパターンを覚えた頃の話。この時代が一番長かった。 そして残ったひとつ、default(package-private)の使い方が全く分からなかった時代でもある。色々使おうと頑張ってみたが、pa

    可視性と公開APIと非公開(内部)APIと - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2009/12/24
    一番心配してるのはたぶん、利用者から見える下位互換性だよね。
  • オブジェクト指向のプログラムに込める「意図」 - 都元ダイスケ IT-PRESS

    その昔、プログラムを覚えたての頃、プログラムってのは単に「処理」を記述するものだと考えていた。処理を1ステップごとに記述し、場合によってはサブルーチンに切り出し、再利用する。 今振り返ると、オブジェクト指向を覚え始めてしばらくして、その意識は変わっていた。当然「処理」を落とし込まなければプログラムは動かない。だから「処理」はプログラムに込める。ただ、オブジェクト指向言語を使うと、これに加えて「意図」を落とし込むことができる。 オブジェクト指向を学び始めた当初、Javaのインターフェイスの存在意義がわからなかった。プログラムは「処理」を記述するものだという視点で見ると、インターフェイスには「処理」を書くことができない。インターフェイスだけでは何も起こらないからだった。 さらに、IDEを使ってコードを追っていると、途中でインターフェイスのソースを開くことになり、「なんだよ、中で何やってっかわか

    オブジェクト指向のプログラムに込める「意図」 - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2009/10/20
    自分の理想的にはテストコードに込めたいところ。そこまではできてないけど。
  • hamcrestのMatcherメモ - 都元ダイスケ IT-PRESS

    技術ネタじゃないところで盛り上げてしまった。技術ネタいこう、技術ネタ。 さて、JUnitを使う際、hamcrestライブラリを使って、英語として読めるようなassertionを書く、なんてのは流行ってたり流行っていなかったり? JUnit4限定だけれど、assertionの際、assertEqualsとか色々assertionのメソッドはあるけど、全てassertThatで書くことができるはず。assertThatメソッドの第一引数にテスト対象、第二引数にhamcrestのMatcherインターフェイスの実装を与えます。なんのこっちゃですが。 Jiemamyでは、なるべくassertThat以外のassertionメソッドを使わないようにテストを書いています。(もしかしたらもう一つも残ってないかも。) まぁ、以下のように書くと、英語っぽいのが書けますよ、と。 assertThat(aaaa

    hamcrestのMatcherメモ - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2009/09/25
    あとで。
  • お勧めのSyntax Coloring設定 - 都元ダイスケ IT-PRESS

    俺、この設定しないと、もうその単語がクラス名なのか変数名なのか分からなくて死にますw EnableしてBoldをONにする感じ。デフォルトでdisableなんだけども、実は裏側でColorは設定されている。この色分けも便利。Preview で「InterfaceName」「Color」「Object」がそれぞれ太字になっていて、僅かに色が付いている。

    お勧めのSyntax Coloring設定 - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2009/08/29
    いいかも。試してみよう。
  • 10分間でコーディングにチャレンジ - 都元ダイスケ IT-PRESS

    http://ameblo.jp/programming/entry-10001721422.html やってみた。ネタバレになるので「続きを読む」で。 仕様がハッキリしていたので、テストファーストで書いた。テストも含めて6分半。 import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import org.junit.After; import org.junit.Before; import org.junit.Test; public class CardsTest { private Cards cards; /** * テストを初期化する。 * * @throws Exception 例外が発生した場合 */ @Before public void setUp()

    10分間でコーディングにチャレンジ - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2009/06/10
    んー、シンプルだ。
  • 継承とコンポジット - 都元ダイスケ IT-PRESS

    id:happy_ryoに「わかんねーんだよ、説明してみろゴルァ」されたので、書いてみる。 前書き*1 とりあえず、日のエントリのキモを最初に。「オブジェクト指向は、隠す技術である」(俺談w)ということを意識して読んで見てください。隠すとは何か? 公開しすぎない事。分かりやすく言えば、publicをprivateに変える事。これが「隠す」。 んじゃあ、隠すと何が良いのか。あるクラスから、見えるもの(=操作できる可能性の範囲(scope))が狭ければ狭いほど出来る事のバリエーションが減るから、プログラムは単純になる。つまり、隠すと複雑性(complexity)が下がる*2。 要件を満たした上で、いかに型(class, interface, etc.)やメンバ(field, method)の可視性を落とすか。可能な限り可視性を下げ、プログラムを単純化し、メンテナンス性を上げるにはどうしたらい

    継承とコンポジット - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2009/05/21
    「隠す」から一歩進めた「持たない」が高凝集か。Smalltalkはメッセージ処理をクラス定義に委譲しているという立場だったりするし、is-aとhas-aは対比できる関係じゃないのかも。
  • SeasarCon 2009 Whiteで話してきた - 都元ダイスケ IT-PRESS

    一昨日、SeasarConで1コマ話をしてきました。「DIことはじめ」と題して、そもそもDIってどんなもので、どういう時に使って、どうなるのか、という事を、基礎から確認していくセッションでした。 会場は、当初40人部屋だったところ、キャパの倍以上の申し込みがあった(ありがとうございます!)為、いきなり400人部屋に変更*1になりました。 多少の緊張はあったものの、セッション時間も45分ピッタリでおさめることが出来、なかなか上手くいったと感じています。会場の反応からも、手応えを感じました。楽しんでいただけたのではないかと思います。 しかし、感想トラバが身内一件からしか来ないのが非常に寂しいw まぁ、超初心者向けセッションということで、参加者のブログ所有率が少なかったのかなぁ。 事後資料もサイトに掲載しましたので、復習にどうぞ。 Seasar Conference 2009 White - D

    SeasarCon 2009 Whiteで話してきた - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2009/03/17
    「実はStrategyパターン」個人的には分かりやすい。DIとは依存するオブジェクトを利用側に定義させること、というか。利用側の定義をフレームワーク化したのがDIコンテナ。
  • Throwableについて本気出して考えてみた - 都元ダイスケ IT-PRESS

    Throwable、Exception、RuntimeException(RTE)、Errorあたりを整理しながら、色々考えてみた。私見に基づくので、間違っているかもしれないけれど、自分としては頭が整理できたかな、と感じたので晒してみる。異論があったらコメントください。 まず、一番基礎的なところで、継承関係の整理から。こんなツリーになっています。 Throwable Error Exception RuntimeException そして、稿での用語の定義。caller=呼出す側のコード callee=呼出される側(throwする側)のコードとします。 Throwable Throwableは「throw文に指定できる何か」という意味ですね。 Instances of two subclasses, Error and Exception, are conventionally used

    Throwableについて本気出して考えてみた - 都元ダイスケ IT-PRESS
    katzchang
    katzchang 2008/12/18
    いいまとめ。この説だと、RTEがExeptionのサブクラスであるのは間違いとなる?calleeにとって、callerと第三者の区別って明確なんだろか?んー。