タグ

ブックマーク / ryoasai.hatenadiary.org (24)

  • 開発チームにアーキテクトがいないなと感じてしまうような、残念なコードスメルの例 - 達人プログラマーを目指して

    まったく個人的なモチベーションの問題から、前回の最終更新から2年以上が経過してしまい、多くの読者のみなさんにはご心配をおかけいたしました。「プログラミングに関して調べたことや日々感じたことをメモとして残していきたいと思います。」というもともとの原点に立ち返って、あまり気負わずに、また今後も時々更新していけたらと思います。今までこのブログの主なテーマとして、JavaEEやSpringといったような、いわゆる業務開発で使われるような技術を中心としてきたわけですが、最近Springを使ったJavaの開発に(アーキテクトではなく)プログラマーとしてちょっと参加する機会があったので、その時気づいたこと、感じたことを書いてみたいと思います。 さて、皆さんはアーキテクチャやアーキテクトという言葉に対してはどのようなものをイメージするでしょうか。システムのセキュリティを確保するための方式であったり、大量の

    開発チームにアーキテクトがいないなと感じてしまうような、残念なコードスメルの例 - 達人プログラマーを目指して
  • Groovyのオーバーロードメソッドの解決はユニークなところがある - 達人プログラマーを目指して

    Java、C#、C++などを含めて現代のほとんどの静的な型付けのプログラミング言語では、異なる型を取る複数のメソッドを同じクラス中に多重定義することができます。これはメソッドのオーバーロード(overload)*1として知られています。たとえば、以下のように同じtestという名前のメソッドを複数定義することができます。 public class Sample { void test(String strParam) { System.out.println("String = " + strParam); } void test(Integer intParam) { System.out.println("Integer = " + intParam); } } この場合、どちらのメソッドが呼び出されるかは、呼び出し側がパラメーターで渡した変数のコンパイル時の型で静的に決まります。ですか

    Groovyのオーバーロードメソッドの解決はユニークなところがある - 達人プログラマーを目指して
  • 実はJUnit4のassertThat()ってしっくりこないんです!(特に、メタプログラミングするレイヤでは) - 達人プログラマーを目指して

    私のように昔からJUnitのコードを書くことが習慣となっていると、値の検証はassertEquals(期待値, 実際値)メソッドで行うというというのがずっと常識となっていました。しかし、4年ほど前にリリースされたJUnit4.4以降では、長年親しんできたassertEquals()に加えて、新しくassertThat()と呼ばれる別の検証メソッドが追加されています。この新しい検証メソッドについては、既にいくつかのサイトで説明されています。 http://journal.mycom.co.jp/articles/2007/07/20/junit1/index.html 林檎生活100: JUnit 4.4 の機能,assertThat と Assumptions,Theories について. hamcrestのMatcherメモ - 都元ダイスケ IT-PRESS hamcrest の Co

    実はJUnit4のassertThat()ってしっくりこないんです!(特に、メタプログラミングするレイヤでは) - 達人プログラマーを目指して
  • Javaの型パラメーターに対してstaticメソッドを呼び出した場合の挙動 - 達人プログラマーを目指して

    以前にJavaの配列関連で調べたことがあったのですが、Javaの総称型は型消去によって直感的でない挙動をする場合があります。 Java言語のClassクラスが持つちょっと不思議な性質について - 達人プログラマーを目指して Java5の型システムを理解するにはリフレクションAPIを使ってみるのが最短の近道になる - 達人プログラマーを目指して 特に、総称型の型パラメーターTについては以下はコンパイルできないという制約があります。 new T() new T[配列サイズ] catch (T ... extends T T.class instanceof T また、staticメソッドやstatic初期化ブロック内でクラスの型パラメータを使えないという制約もあります。 AngelikaLanger.com - Java Generics FAQs - Type Parameters - An

    Javaの型パラメーターに対してstaticメソッドを呼び出した場合の挙動 - 達人プログラマーを目指して
    waman
    waman 2011/11/26
    自分では使わない方が無難そう。
  • JavaのFileクラスは不変(immutable)クラスという点に関する注意点 - 達人プログラマーを目指して

    長年Javaを書いてきた人間としてはちょっと情けないことに、先日、会社で自分の書いたコードが原因でちょっとしたバグを出してしまいました。きちんとテストファーストで単体試験は書いていたのですがテストが不十分でしたね。 バグの原因は、Fileクラスの仕様をちょっと勘違いして使っていたことが原因でした。FileクラスにはrenameTo()というメソッドがあって、このメソッドの呼び出しにより、操作が成功すればもともとFileクラスのオブジェクトに対応していたファイルの名前がファイルシステム上で変更されます。ここで、うっかり、Fileクラスが可変なクラスだと勘違いしてしまっていたのですが、実は、Java Docにも明記されている通り、Fileクラスは不変(immutable)なクラスであり、一度生成したら状態が決して変更されることがない設計となっています。これは、以下のテストケースを見ると確認でき

    JavaのFileクラスは不変(immutable)クラスという点に関する注意点 - 達人プログラマーを目指して
    waman
    waman 2011/07/11
  • 第16回 G*ワークショップ(Groovy勉強会)に参加してきました。 - 達人プログラマーを目指して

    大震災の影響もあるのか、前回(JGGUGの勉強会(G*ワークショップ)に初めて参加してきました - 達人プログラマーを目指して)と少し間が開いていますが、昨日、JGGUGさん主催のG*ワークショップというGroovy勉強会に参加してきました。場所は、東京の勉強会ではおなじみの外苑前のオラクル青山センターです。 やはり、今回の注目ポイントは4月に正式リリースされたGroovy1.8とそれに対応した待望の日語書籍プログラミングGROOVYの出版が間近に迫っているということがあげられますね。 なお、詳しいレポートは、既に、以下でまとめられています。 第16回 G*ワークショップ+JGGUG総会に参加してきた - Diary of absj31 第16回 G*ワークショップ+JGGUG総会に行ってみた - 日々常々 mike、mikeなるままに…: 第16回 G*ワークショップ+JGGUG総会に

    第16回 G*ワークショップ(Groovy勉強会)に参加してきました。 - 達人プログラマーを目指して
    waman
    waman 2011/06/19
    GPars, Groovy1.8 の機能
  • Clojure言語基本の「き」(その2) - 達人プログラマーを目指して

    前回Clojure言語基の「き」 - 達人プログラマーを目指してに引き続き、Clojure言語を新しく覚える際にポイントとなる事柄をまとめていきたいと思います。 逐次実行 (do 式1 式2 ... 式n)の形式を使うことで、処理を逐次実行させることができます。最終的に一番右側の式の結果が全体的な式の結果となります。この方法は副作用の存在を前提としているため、純粋な関数型のプログラムに対する手続き型プログラミングへの抜け道となる危険性がありますが、ClojureからJavaを呼び出す場合などに便利な場合があります。 user=> (do (println "Hello") (println "World") (+ 1 2)) Hello World 3 また、doと似た構造は、(後から説明するように)letやwhenなどClojureプログラムのさまざまな場面で暗黙的に表れるという点も重

    Clojure言語基本の「き」(その2) - 達人プログラマーを目指して
  • EJBコンテナが分散コンポーネントモデルから軽量なDIコンテナに変化してきた歴史を振り返る - 達人プログラマーを目指して

    十年一昔といいますが、文字通り一昔前の書籍ではJ2EEのEJBコンポーネントはプロセスが分散化されたリモート呼び出しにより処理を行う分散コンポーネントとして説明されています。そして、残念ながら現状Java EE関連の日語の書籍はこうした古い時代に書かれたものがほとんどとなっています。それゆえ、 開発効率がきわめて悪い 実行性能が悪い*1 仕様がきわめて複雑で理解が大変 といった悪いイメージが定着してしまっているのではないかと思います。しかしながら、最新バージョンのJava EE6では、Spring、Guice、SeamなどのOSSの軽量コンテナのアイデアを取り込むことにより、以前とは比較にならないくらい開発効率が改善されているという事実があります。 ここでは、Hello WorldのEJBの書き方を以前の古いバージョンから順次振り返りながら比較してみることで、EJBのプログラミングモデル

    EJBコンテナが分散コンポーネントモデルから軽量なDIコンテナに変化してきた歴史を振り返る - 達人プログラマーを目指して
    waman
    waman 2011/05/29
  • Clojure言語基本の「き」 - 達人プログラマーを目指して

    ふと思い立ってClojureの勉強を始めることにしました。 - 達人プログラマーを目指してで書いたように、10日前にClojureの勉強を始めました。まだ勉強を始めたばかりのということもあり、他人に上手く正確に説明できる段階ではないかと思いますが、自分自身超初心者の立場で書くということも有意義であると思うので、間違いを恐れずに今まで理解したことのポイントについて書いてみようと思います。*1 スカラー値のリテラル ClojureはREPL(Read Eval Print Loop)という対話的実行環境を持つので、いきなり大きなプログラムを作成しなくても、一行一行結果を確認しながら勉強することができます。したがって、数値や文字列などのリテラルをREPLのプロンプトに入力すると、値がそのまま結果として返ってくることが確認できます。 user=> 0xff 255 user=> 0377 255

    Clojure言語基本の「き」 - 達人プログラマーを目指して
  • JavaをSEとEEに分類するのは今では無意味になってきている? - 達人プログラマーを目指して

    ご存知のとおり、かなり以前からJavaプラットフォームはJava SEとJava EEとに分かれています。Java EEはJava SEを含んだ拡張APIを含み、エンタープライズ開発向けのプラットフォームということで一般的にはなんとなく理解されていますが、よくよく調べてみると両者の境界線はかなりあいまいで、人によってさまざまな解釈の違いや混乱があるようです。 一応、Java SEとJava EEのJava DOCを調べてみると主なものとして以下のようなAPIが含まれていることがわかります。 プラットフォーム API Java SE 基言語ライブラリー、通信ライブラリー、 GUI関連ライブラリー、JDBC、JNDI、RMI、Java IDL(CORBA)、JMX Java EE サーブレット、JSP、JSF、EJB、JPA、JMS、JTA、JCA Webサービス関連ライブラリー、Java

    JavaをSEとEEに分類するのは今では無意味になってきている? - 達人プログラマーを目指して
    waman
    waman 2011/05/15
  • 普通の業務系Java PGでなくても一度はハマる?JavaScriptのthisの奇妙な振る舞い - 達人プログラマーを目指して

    先日書いた普通の業務系PGには意外と知られていないJavaJavaScriptの相違点10選 - 達人プログラマーを目指してでは、これからJavaScript格的に勉強する層のプログラマーの人を対象に、JavaJavaScriptの違いを理解する上で重要な10個のポイントについて説明しました。いただいたコメントの中には、JavaScriptJavaは当然まったく別の言語で、比較すること自体問題であるという趣旨のご指摘もいただきました。確かにその通りなのですが、実際、業務で格的なプログラムの開発はJavaでしかしたことがないという開発者は結構自分のまわりにはたくさんいますし、時代の流れから言って、これから初めて格的にJavaScriptを書くという人も今後たくさん出てくるのではないかと思います。そういう人にとっては、やはり、違いを意識するところから入っていくというのは学習のアプ

    普通の業務系Java PGでなくても一度はハマる?JavaScriptのthisの奇妙な振る舞い - 達人プログラマーを目指して
  • Java総称型のワイルドカードを上手に使いこなすための勘所 - 達人プログラマーを目指して

    Java5以降では総称型(generics)がJava言語に導入されています。総称型自体は、最近の静的な型付けのプログラミング言語で珍しいことではなく、現在の最新版では.NETのC#やVisual Basicにも導入されています。一般的には総称型をサポートするクラスライブラリを自分で正しく定義することは非常にスキルがいるが、事前に定義されたクラスを使うだけであれば、それほど難しくないとされています。しかし、Java言語の総称型はエントリで説明するように特殊なところがあり、単に利用するだけでも他の言語に比べて遥かに難しいところがあるというのも事実です。特に総称型をパラメータ化する際に指定するワイルドカード型(List<? extends Serializable>など)の意味を正しく理解して使いこなすことは簡単なことではありません。その結果、昔のJDK1.4までのように型パラメーターのない

    Java総称型のワイルドカードを上手に使いこなすための勘所 - 達人プログラマーを目指して
    waman
    waman 2011/03/26
    Java ジェネリクス。 Scala の共変、反変なども絡めて。
  • https://ryoasai.hatenadiary.org/entry/20110321/1300696942

    waman
    waman 2011/03/22
  • ドラゴンボールで学ぶオブジェクト指向 改 - 達人プログラマーを目指して

    ドラゴンボールといえば、大変に人気の高い国民的、いや世界的な漫画、アニメですが、昨日匿名ダイアリーでドラゴンボールをネタにしたオブジェクト指向の解説がホッテントリに入っていました。 ドラゴンボールで学ぶオブジェクト指向 多くの人に親しみやすい題材でオブジェクト指向の考え方を解説するというのは非常に興味深い試みなのですが、オブジェクト指向の説明としては不適切なところがあり、ちょっと残念な内容になっています。私自身ドラゴンボールの専門家(ドメインエキスパート)ではないため、不正確なところがあるかもしれませんが、ストーリーを思い出しながら、私なりにドラゴンボールをネタとしたオブジェクト指向の解説にリトライしてみたいと思います。 なお、オブジェクト指向でもプログラミング言語によって表現できる内容が異なるため、当然設計技法は違ってきます。ここではJavaC++、C#、Visual Basicといっ

    ドラゴンボールで学ぶオブジェクト指向 改 - 達人プログラマーを目指して
  • 業務系のJavaプログラマーが知っておくべき10個のBad Partsとその対策 - 達人プログラマーを目指して

    Java: The Good Partsののタイトルに触発されて、逆にJava言語の使いにくい部分をいくつかピックアップしてみました。Java EEなどの業務系のアプリケーションプログラマーの視点で書いていますので、別の立場ではここで指摘している事項が必ずしもBad Partではないという指摘もあるかもしれませんし、他にもいろいろなポイントがあると思いますが、とりあえず、私の独断で思いついたものを10個説明したいと思います。 1.標準APIのチェック例外が扱いにくい Java言語のチェック例外は当にGood Partなのか? - 達人プログラマーを目指してでも取り上げましたが、Bad Partの第一番目として標準APIのチェック例外が扱いにくいという点を指摘させていただきたいと思います。チェック例外については、理屈上コンパイラーによって例外の処理をプログラマーに強制させることができるす

    業務系のJavaプログラマーが知っておくべき10個のBad Partsとその対策 - 達人プログラマーを目指して
  • Developers Summit 2011参加メモ(2日目) - 達人プログラマーを目指して

    Developers Summit 2011参加メモ(1日目) - 達人プログラマーを目指してに続いて、2日目のレポートです。 【18-B-1】プログラマが知るべき、たったひとつの大事なことがら タイトルはもちろん、以前もすべてのプログラマーに読んでもらいたい - 達人プログラマーを目指してで紹介させていただいた、きのこのタイトルからきています。このを監修された和田卓人 氏(id:t-wada)の講演です。個人的には2日間の中で最も感銘を受けたセッションでした。*1 現時点では講演スライドはアップされていないようですが、以下が参考になります。 #devsumi【18-B-1】プログラマが知るべきたったひとつの大事なことがら - @tmtms のメモ デブサミ2011【18-B-1】プログラマが知るべき、たったひとつの大事なことがら和田卓人 氏 - Togetter プログラマが知るべ

    Developers Summit 2011参加メモ(2日目) - 達人プログラマーを目指して
    waman
    waman 2011/02/20
    若い人から学ぶ。一生プログラマーでいられるかどうかは年下から学べるかどうか。
  • 想像以上にガラパゴス化した日本のIT業界? - 達人プログラマーを目指して

    出版されている技術書のタイトルやネット上での情報を元に、なんとなくシステム開発で使われる技術が国によって差があるように感じるということを、これまでいろいろな記事で書いてきたのですが、はたして実際のところはどうなのでしょうか?300年前なら、Manningのin actionシリーズの表紙に描かれている人物*1のように国ごとにいろいろな衣装があって多様な文化が存在していたのでしょうけれど、文明化された現代では、服装もべ物もそれほど違いがないというところがあります。IT業界は文字通り情報を扱う産業なのですから、世界中の最新の情報が集まってきてしかるべきなわけであり、どの国でも大差がないはずという推測もできないわけではありません。 あくまでも目安なのですが、Google Insights for Searchというサービスを利用すると、単語の検索回数を地域ごとに集計することで、各地域でどういっ

    想像以上にガラパゴス化した日本のIT業界? - 達人プログラマーを目指して
  • Groovy言語とAspectJの人気が今ひとつな本当の理由 - 達人プログラマーを目指して

    先日DevLOVEの主催するぐるぐるGroovyという勉強会に参加してきました。 1月24日 DevLOVE ぐるぐるGroovy -Easy Going Groovy-(東京都) Groovy言語については、構文がJava言語に非常に近い上に、Javaの既存ライブラリーとの相互運用性も高く、さらに、Java言語に比べて非常に簡潔にプログラムが書けるという特徴があります。動的言語のRubyのような柔軟性とJavaプログラマーにとっての学習のしやすさをいう面を兼ね備えた軽量言語であり、私としてはSI業界でもきっと流行るはずに違いない思いと数年前から注目していました。 Groovyイン・アクション 作者: Dierk Konig,Andrew Glover,Paul King,Guillaume Laforge,Jon Skeet,杉浦孝,櫻井正樹,須江信洋,関谷和愛,佐野徹郎,寺沢尚史出版社

    Groovy言語とAspectJの人気が今ひとつな本当の理由 - 達人プログラマーを目指して
    waman
    waman 2011/01/27
    AspectG
  • AJDTを使って規約違反のコードを検出する方法 - 達人プログラマーを目指して

    AspectJというと、メソッドなどに処理を織り込むAOPのイメージが強いと思いますが、AJDTというeclipseのプラグインを使うと強力なコード検証ツールとして利用できることは意外と知られていないようです。(AJDTはSpring Tool Suiteには最初から内蔵されています。) 実際、 コントローラークラスのメソッド内でフィールドの設定を行う サービス層を経由せずに直接DAOを呼び出している 日付オブジェクトを直接newしている*1 などの箇所をコンパイル時に検証して、警告やエラーとして検出できます。 たとえば、Spring MVCのコントローラークラスのメソッド内でフィールドの設定を行っている箇所を警告として検出するには以下のようなアスペクトを書くだけです。 package sample.mvc; import org.springframework.stereotype.Co

    AJDTを使って規約違反のコードを検出する方法 - 達人プログラマーを目指して
  • SI業界(日本)のJavaプログラマーにはオブジェクト指向より忍耐力が求められている? - 達人プログラマーを目指して

    私自身は10年以上も前(JDK1.1の頃)にSJC-Pの認定を取って以来、Javaプログラミング関連の認定試験は受けていないのですが、昨日たまたまネットを検索して、SJC-Pとは別にJavaプログラミング能力認定試験という試験が存在していることを知りました。結構メジャーな認定試験のようですので、現役のJavaプログラマーJavaプログラマーを目指している学生さんで、今後受験に向けて勉強されている方々も多くいらっしゃるのではないかと思います。 試験は難易度に応じて3級から1級までランクが分かれており、2級まではJava言語の知識に関する筆記試験ですが1級の試験では実際のプログラムの修正を行う能力が実技試験として課せられます。試験範囲は以下で公開されています。 Javaプログラミング能力認定試験(試験範囲) 私は(自分で言うのも変ですが)、Javaプログラミングについてはこの道15年近くのキ

    SI業界(日本)のJavaプログラマーにはオブジェクト指向より忍耐力が求められている? - 達人プログラマーを目指して
    waman
    waman 2011/01/10
    『SJC-Pとは別にJavaプログラミング能力認定試験という試験が存在』するらしい