タグ

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

  • 自分用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
  • Hadoopとかに入門してみる 〜 分散技術が出てきた背景 - 都元ダイスケ IT-PRESS

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

    Hadoopとかに入門してみる 〜 分散技術が出てきた背景 - 都元ダイスケ IT-PRESS
  • hamcrestのMatcherメモ - 都元ダイスケ IT-PRESS

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

    hamcrestのMatcherメモ - 都元ダイスケ IT-PRESS
  • 難解なSerializableという仕様について俺が知っていること、というか俺の理解 - 都元ダイスケ IT-PRESS

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

    難解なSerializableという仕様について俺が知っていること、というか俺の理解 - 都元ダイスケ IT-PRESS
  • Throwableについて本気出して考えてみた 2nd Season - 都元ダイスケ IT-PRESS

    1st Seasonはこちら。Throwableについて気出して考えてみた - 都元ダイスケ IT-PRESS 以前は、何かをスローする状況を3つに分けてそれに合った設計をした例外を投げましょう、という考え方を示しました。 callerのバグ: RTE calleeのバグ: Error どちらでもない: Exception (非RTE) まぁ詳しくはSeason1の方で。 Seasar2はRuntimeExceptionですね。2004年ぐらいからのフレームワークはRTEをスローしていると思いますよって、ひがさんから情報。 チェックされる例外とチェックされない例外について - じゅんいち☆かとうの技術日誌 ただ、上記のような考え方もあるのも事実。実際.NETRuby, Python, 新鋭のScala等もcatchを強制する例外というものが言語仕様的に存在しません*1。逆に、チェック例

    Throwableについて本気出して考えてみた 2nd Season - 都元ダイスケ IT-PRESS
  • エンジニアとしての歩き方 - 都元ダイスケ IT-PRESS

    これから書くことは決して「これをしなければいけない」とか「他に手段はない」なんてコトを主張したいのではない。色んな道があるはずだぁ。その中の一つの事例として、自分がやってきたことをフレームワーク化し、色々挙げてみようと思う。 当然、俺の主観が入りまくっているので、突っ込みどころは満載だろうなw そもそも「エンジニア」って何?w その辺り、はてブ界隈のミナサマにおかれましてはお手柔らかに願いたいww さて、いきなりどこかの技術系カンファレンスで1時間喋っちゃえ、とか突然は無理なのは分かる。何を話せばいいのやら、どこに喋るチャンスがあるのやらだ。しかし、そういう所で喋るような自分を将来のビジョンとして持っている人は、以下に挙げることを小さなことからコツコツと実践してみるといいかもしれない。という意図で書いていく。 何事にも興味を持とう 興味は勉強の原動力。興味のない勉強は苦痛でしかない。ここが

    エンジニアとしての歩き方 - 都元ダイスケ IT-PRESS
  • Jiemamyってなんぞ(2) - Webアプリの起動準備(DBの準備)を標準化しよう - 都元ダイスケ IT-PRESS

    昨日に引き続き、地豆トーク。 例えば、とあるWebアプリケーションがSVNリポジトリに置いてあるとします。情報はこのリポジトリURLと、そのルートに置いてあるREADME.txt*1。あなたはこのアプリを無事起動できるでしょうか? READMEを覗くと、複雑なインストール手順が書かれています。例えば、 PostgreSQLまたはMySQLをインストールしてください。 hogeユーザを作り、そのパスワードをhogeにしてください。 上記のユーザで PostgreSQLの場合は src/main/database/hoge_postgres.sql, MySQLの場合は… src/main/webapp/WEB-INF/hoge.properties の user を hoge に、password を hoge に設定して下さい… だー。ぼちぼち、やる気が失せて来る頃です。 上記に類似した

    Jiemamyってなんぞ(2) - Webアプリの起動準備(DBの準備)を標準化しよう - 都元ダイスケ IT-PRESS
  • Jiemamyってなんぞ(1) - イントロダクション - 都元ダイスケ IT-PRESS

    Jiemamy 0.2.0をリリースしてから約1週間、デカいバグもなく、とりあえず動いているようです。よかったよかった。 で、Jiemamy(通称、地豆)なんですが、これは一体なんぞ、というのってあんまり書いた事無かったかね、と思い立って書いてみる。なんぞ、どころか、最近Jiemamyについてずっと書いてなかったもんなー。 Jiemamyを見る2つのレベル で、Jiemamyを考えるにあたって、視点は2つあります。 Jiemamy Eclipseプラグイン+mavenプラグイン Jiemamy API とりあえず暫くの間は前者について。前者は、一見したところ「よくあるツール」です。ER図を描いてそれをSQLにしたり、実DBから情報を読み込んでER図にしたり、まぁそんなツールです。 この分野のツールには、Jiemamyの作り始め時期に参考にさせて頂いた AmaterasERD をはじめCla

    Jiemamyってなんぞ(1) - イントロダクション - 都元ダイスケ IT-PRESS
  • Jiemamy v0.2.0リリース - 都元ダイスケ IT-PRESS

    大変お待たせしました。Jiemamy v0.2.0 リリースしました。 出来る範囲でテストはしてありますが、まだバグはあると思います。また、ドキュメント類も頑張ってはいますが、まだまだ書き掛けだったり。その辺りはご容赦下さい。バグ報告・不明点の質問等はjiemamy-usersメーリングリストまでお願いします。 各種リソースには http://www.jiemamy.org/ からアクセスしてください。 Jiemamy Model Editor Jiemamyモデル(DB情報)を編集するGUIエディタ(Eclipseプラグイン)です。 ドキュメント http://docs.jiemamy.org/release/0.2.0/editor-quickstart/ http://docs.jiemamy.org/release/0.2.0/editor-reference/ http://do

    Jiemamy v0.2.0リリース - 都元ダイスケ IT-PRESS
  • DOMとSAXとStAXと。 - 都元ダイスケ IT-PRESS

    こんな名前のAPIがありますね。主にXMLの読み込みを行う為のAPI群であります。SAX以外は、書き出しもできますね。そう、SAXは書き出しできないのですね、基的に。 <foo> <bar>baz</bar> </foo> っていうもの凄い単純なXMLを、これらのAPIでどのように扱うのか。比較なエントリ。 まずはDOM DOMは、パース時にXMLの内容を全てメモリ上に保持し、パース後にどの要素にもいつでもアクセスできるような環境を作り出す。 import java.io.ByteArrayInputStream; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.t

    DOMとSAXとStAXと。 - 都元ダイスケ IT-PRESS
  • interfaceについて本気出して考えてみた - 都元ダイスケ IT-PRESS

    気出す第二弾。 オブジェクト指向を良く知らなかった頃*1、Javaの勉強を始めると、class, field, method, interface などのオブジェクト指向的な概念を覚えていくことになります。 その中で、一番「よくわからんけど、まぁそんなものがあるのね。しっかし、何のためにあるんだか全く分からない存在だな…。」という印象を受けるであろう、というか受けたモノは interface だった。 「プログラミング」=「処理手順を書く」という認識で interface を見ると、全く存在価値が感じられないんだな。だって「処理手順書けない」んだもん。それなら別にわざわざ interface を implements とかしないで、処理手順を記述したclassの方の型で扱えばいいじゃん、と。 そんなこんなが、紆余曲折を経て、なんか interface を使ったコードを書いている。かといっ

    interfaceについて本気出して考えてみた - 都元ダイスケ IT-PRESS
  • 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
  • Apache commonsが便利な件(commons-collections編-2) - 都元ダイスケ IT-PRESS

    http://d.hatena.ne.jp/daisuke-m/20080702/1214982943 前回に引き続きcommons-collections。 Java Collection Framework(JCF)では、大きく分けてCollectionとMapの2系統の概念が定義されています。そして、前回はこれらに加えて Bag, Buffer などの追加された概念を説明しました。それぞれの代表的なタイプを整理したものが以下*1。 Collection List ArrayList ArrayStack (*) 実装はArrayStack。特筆事項なし。 LinkedList Stack Set EnumSet HashSet TreeSet Queue PriorityQueue Bag (*) 実装はHashBag, TreeBag。特筆事項なし。 Buffer (*) 実装はA

    Apache commonsが便利な件(commons-collections編-2) - 都元ダイスケ IT-PRESS
  • Apache commonsが便利な件(commons-collections編-1) - 都元ダイスケ IT-PRESS

    http://d.hatena.ne.jp/daisuke-m/20080702/1214982943 再びユーティリティ系。ということで今回はcommons-collections。 commons-collections は、Javaコレクションフレームワーク(っていうと大仰だけど、要はListとかSetとかMap。以下JCF)まわりのユーティリティ。 ところで、JCFまわりは Java1.4から5.0へのバージョンアップにあたり、ジェネリクスが導入されて、非常に使いやすくなりました。今やジェネリクスのないコレクションなんて、怖くて触りたくない病に罹っている今日この頃です。 しかし、このcommons-collectionsは下位互換を理由にジェネリクス化されていません。ジェネリクス世代としては、敬遠せざるを得ません><。 が、どうやら家Apacheからフォークしてcommons-c

    Apache commonsが便利な件(commons-collections編-1) - 都元ダイスケ IT-PRESS
  • Apache commonsが便利な件(commons-lang編) - 都元ダイスケ IT-PRESS

    http://d.hatena.ne.jp/daisuke-m/20080702/1214982943 やー、前書いたエントリいつだったかな、と思って見たら7月ですよ。コツコツ書いていきますね。まず初回はcommons-lang。 commons-lang は、java.langパケにあるような基的なクラスを追加で提供している感じです。また、既存の基クラス(String,Object,配列等)のメソッドに対してnullチェックを搭載したものが多く提供されています。null対策を内部で行っているので、ぬるぽを恐れる必要があまりありません。こういうのを使いこなせると便利ですね。 StringUtils これはよく使いますかね。もしかしたらcommonsで一番知名度の高いクラスかもしれない。しかしその中でマイナーかもしれないのはまず定数系。下記の例では、後者の方が記述量は多くなりますが、「コ

    Apache commonsが便利な件(commons-lang編) - 都元ダイスケ IT-PRESS
  • ジェネリクスを使いこなそうゼ - 都元ダイスケ IT-PRESS

    というネタでエントリ書けよゴルァ、とid:happy_ryoに脅されて書くエントリー。 ジェネリクスご存知ですか。使ってますか。アノテーションと共にJava5から現れた、<> で囲まれた変な奴。 全くの余談ですが、アノテとジェネリクスの事を理解していなかったその昔。漠然と「たまに見かけるあの@とか、<> とかって何だろう」と思った訳ですよ。で、どうしようもなくて某所で聞いてみたんですね。そしたらさー、「ググれカス」って言われちゃってさwwww 「Java @」とか「Java <>」で検索してみるわけですよw 無理だろww はい、話し始める前から脱線してる都元ですコンバンワ。 ジェネリクス初心者がまず触れるのは、コレクションですかね。Listとかでお世話になる訳ですね。意図しない型のインスタンスを突っ込まれる心配もなく、取り出し時にキャストする必要もなくなる、なんか嬉しい奴、というイメージだ

    ジェネリクスを使いこなそうゼ - 都元ダイスケ IT-PRESS
  • DIのお話を書いてみる。 - 都元ダイスケ IT-PRESS

    まず。この物語はフィクションであり このエントリ上のコードはあくまでもチュートリアル用のコードであり、実用性に関しては(ry という訳で、id:happy_ryoのリクエストにお応えして、DIのお話。Seasar2を使ってみます。 ポリモーフィズムの例をもうちっと実用的に書いてみた。 - 都元ダイスケ IT-PRESSの続きです。 まずはいきなりMain見てみますか。 import org.seasar.framework.container.S2Container; import org.seasar.framework.container.factory.SingletonS2ContainerFactory; public class Main { public static void main(String[] args) { Table table = new Table("T_

    DIのお話を書いてみる。 - 都元ダイスケ IT-PRESS
  • 1