タグ

2013年4月14日のブックマーク (54件)

  • Google Sites: Sign-in

    Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode

  • アーキテクトの審美眼

    MS萩原さんのセッション。同名の書籍(元ネタはDBマガジンの同名の連載)が元になっていて、そのダイジェスト版+最新の動向の補足、という形。とても示唆に富んでいるんだけど、抽象的な上に、1つ1つのトピックがめちゃめちゃ重たいので、きちんと理解しようとすると調べる量がとても多くなってしまう上に、そもそも理解しきるのが難しすぎる。とりあえずは現段階の自分の稚拙な理解をもとに、こんなことじゃないかなーと補足しながら書いていく。 アーキテクチャの原則アーキテクトにとっては、アーキテクチャの原則を理解することが重要。アーキテクチャの原則は、インフラなどが変化しても変わらず、クラウドでも通用する。 アーキテクチャ先行定義の原則アーキテクチャは先行定義せねばならぬ、という原則。アーキテクチャ設計を含むソフトウェア開発は、こんな風な流れになるはず。 モデリングとアーキテクチャ設計の双方のインプットとして、シ

    アーキテクトの審美眼
  • A Life in Shinjuku.

    DDD Sample Application version1.1.0: ユースケーススライスから見たアプリケーション構造の確認(2)

    A Life in Shinjuku.
  • DDD Sample Application version1.1.0: ユースケーススライスから見たアプリケーション構造の確認(2)

    前回は、シンプルな参照の機能が、サンプル上でどのように構成されているかを確認した。今回は、積荷の一覧・詳細表示で参照機能の構成を確認しつつ、積荷の新規登録・状態更新まで確認してみたい。 配送状況の詳細表示積荷の一覧・詳細表示 積荷の新規登録積荷の状態更新配送ルート候補検索積荷への配送ルート設定配送状況の更新配送状況の更新(バッチ) 積荷一覧・詳細表示の概要 これは、商品発送側が現在管理対象になっている積荷の情報を確認するためのもの。おなじみの一覧・詳細表示アプリだ。アプリケーション内では、Booking と呼ばれている。Booking (Trackingもそうだが)はコンテキストなのだろうか? この機能は、一見すると配送状況の詳細表示と同じように思えるが、内部的には異なった作りになっており、Web層の Controller からリモートサービスとして構成された BookingService

    DDD Sample Application version1.1.0: ユースケーススライスから見たアプリケーション構造の確認(2)
  • DDD Sample Application version1.1.0: ユースケーススライスから見たアプリケーション構造の確認(1)

    前回まででユースケース、アプリの全体構造までを確認したところで、今回はユースケースごと(ユーザーイベントごと)のアプリケーション構造を追っていく。ユーザーイベントを再掲する。 配送状況の詳細表示積荷の一覧・詳細表示 積荷の新規登録積荷の状態更新配送ルート候補検索積荷への配送ルート設定配送状況の更新配送状況の更新(バッチ)まとめてやろうかと思っていたが、思った以上に長くなったので1イベント per 1エントリで進めることにした。今回は一番上、配送状況の詳細表示。 配送状況詳細表示の概要 主に、顧客が発注商品の配送状況を確認するために使う機能。アプリケーション内では、Tracking という言葉で呼ばれている。 Web インタフェースから情報を参照するだけの機能なので、Spring WebMVCのコントローラから Repository 経由でデータを取得して表示するだけのシンプルな作りになって

    DDD Sample Application version1.1.0: ユースケーススライスから見たアプリケーション構造の確認(1)
  • DDD Sample Application version1.1.0: アプリケーション全体構造の確認

    続いては、アプリケーション全体構造の確認。ここからようやく、ソースコードレベルでの確認に入っていく。単にソースを見るだけならダウンロードページからダウンロードすればいいが、効率よく読んでいくためには Eclipse 等 IDE のサポートが必要だろう。Maven を使っているので多少面倒くさいが、ダウンロードページには IDE で使うための情報も書かれているので、(特に Eclipse ユーザーは)参考にすると良い。 インフラストラクチャが依存するテクノロジ 実際のアプリケーションに入る前に、まずはインフラが依存する基的なテクノロジ(ライブラリやフレームワーク)を確認しておく。採用するテクノロジは列挙にとどめる。 IoC (DI)コンテナSpring 2.5.6WebフレームワークSpring WebMVC 2.5.6ORMHibernate 3.3.1ロギングlog4j 1.2.14

  • DDD Sample Application version1.1.0: ユースケースの確認

    さて、まずは Sample Applicatin のユースケースを確認する。これには、実際に動かしてみるのが一番だが、そこまでするのが面倒な人のために、丁寧にもビデオが用意されている。なので、確認はこのビデオに沿って進めていきたい。 概要 細かい説明に入る前に断っておきたいのだが、このアプリケーションは the book(Evans の DDD)で何度も例としてあげられている、積荷の出荷とトラッキングを扱ったアプリケーションがもとになっている。イメージとしては、DELL やら Amazon やらで商品を買った際に通知されてくる、配送状況確認ページを思い浮かべてもらうとわかりやすいと思う。 このアプリケーションではさらに、上記のような商品を買った側(Customer)からの配達状況の確認だけでなく、商品提供側(DELLAmazon)による配送の手配や、配送業者による配達状況の更新まで

  • DDD Sample Application version1.1.0 を確認する

    アーキテクチャパネルディスカッションとラウンジ・ビアパーティでの雑談から、主にDDDに関して興味深かった話をいくつか。聞き取り能力は低いので抜けている部分もあると思いますがご容赦を。 ビジネス的な有用性はどこにあるのか Evans氏発言要旨 経営層など意思決定を行う人たちに対して、ドメイン駆動設計の有用性をどう訴えかけるのか?という問いに対して、Evans氏は主にコアドメインへの注力によって競争上の優位、市場優位につなげる部分を強調。ここから一段階細かいレベルとして、ビジネスパーソンにとって理解できるソフトウェアへと進んでいくとのこと。ただし、常に労力に見合う価値が得られるわけではないことも忘れずに付加。 雑感 この質問はなかなか難しく、聴衆の反応も微妙なものだったように思う。これは、DDDをオブジェクト指向設計方法論として受け取っている人が多く、こうした部分の有用性についての回答を期待し

  • ユビキタス言語と日本語

    数ヶ月前から社内でDDD勉強会を実施していて、最近「ユビキタス言語(Ubiquitous Language)」まで来たんだけど、ここでやっぱり「日語を使ったら1つの言語、モデルになるのか?」という疑問が出てきた。JavaEE勉強会でも同様の意見が(確かhirataraさんから)出てきていたものの、残りの部分に答えが書いてある可能性もあったので、その時点では「まぁ、用語の一覧みたいなのを作ってなんとかすればいいんじゃないの?」と流したものの、あらためて同じ問題に直面してみると、なかなかやっかいな問題だ。先に進む前に、この時点での自分なりの結論を書いておく。 DDDの世界観まずは、DDDにおけるユビキタス言語やモデルの扱いについて簡単にまとめておく。# 断るまでもないと思うけど、もちろん個人的な理解。 ユビキタス言語はドメインモデルに基づく言語であり、ドメイン専門家と開発者の双方が作り、双方

  • モデル上に明示されたトランザクションとしてのAggregate

    最初に読んだ時には今ひとつ理解できなかったAggregate。社内のDDD読書会で読み返してみて感じたのは、「Aggregateは、従来の手続き的な一貫性維持に関する情報(トランザクションスコープ含む)をモデル上に明示したものである」と捉えることで理解しやすくなる、ということ。以下もう少し詳しくみていく。 Aggregateの定義と位置づけ DDDのGlossaryを見るとAggregateは、 A cluster of associated objects that are treated as a unit for the purpose of data changes. External references are restricted to one member of the AGGREGATE, designated as the root. A set of consiste

  • Re: 流れるようなインターフェイス+ジェネリクス - kmizuの日記

    出来るよ! class Rows {} interface Query<E extends Query<E>> { E findAll(String str); E where(String pred); E orderBy(String col); E limit(int n); Rows execute(); } class MyQuery<E extends MyQuery<E>> implements Query<MyQuery<E>> { public MyQuery<E> findAll(String str) { return this; } public MyQuery<E> where(String pred) { return this; } public MyQuery<E> orderBy(String col) { return this; } public My

    Re: 流れるようなインターフェイス+ジェネリクス - kmizuの日記
  • イレイジャではジェネリクスの何が消えるのか

    Javaのジェネリクスはコンパイル時に解決され、classファイルになった時にはジェネリクスの型情報は残されていません。そのためイレイジャ(型消去:type erasure)方式と呼ばれます。 と、ひとくちで言っても意味がよく分からないのでちょっと掘り下げてみましょう。 インスタンスからジェネリクスの型情報は拾えない リフレクションを用いたとしても、インスタンスからジェネリクス型パラメータが何であるかを取得することはできません。 List<String> stringList = new ArrayList<String>(); のような変数stringListがあったとして、ここから<String>を取得するということができないのです。これが消えてしまった部分。 この変数stringListに対する各種操作において、その型の安全はコンパイル時に精査され、 実行時にはあくまでObject型

  • 型パラメータで指定されたクラスを取得する。 - うなの日記

    クラス定義の段階で型パラメータが決まっている場合(以下のようなクラスが該当)、Classから型パラメータで指定された型を得ることができます。(↓のクラスだと、HogeSet.classからSetの型パラメータであるString.classがとれる。) // クラス定義の段階でSetのパラメータを決めているSetの実装。 class HogeSet implements Set<String> { ... 手順 Class#getGenericInterfaces(),Class#getGenericSuperclass()で親クラスのTypeを取得できます。 戻り値は親クラスやインターフェイスがパラメータ化されている場合ParameterizedTypeになります。 そうでない場合は、Classが返されます。 ParameterizedTypeの場合、ParameterizedType#g

    型パラメータで指定されたクラスを取得する。 - うなの日記
  • 再帰型のジェネリクス型変数の境界

    先日ジェネリクスで引っ掛かった点をメモ。 自己言及するジェネリクスで述べたような具象型に具象型自身の型を扱わせることをもくろんだ型を作った場合の話。 public class GenericsTest { static abstract class S<T extends S<T>> {} static class A extends S<A> {} static class B extends A {} static class C extends S<A> {} static class X1<T extends S<T>>{} static class X2<T extends S<?>>{} static class X3<T extends S<? super T>>{} public static void main(String[] args) { X1<A> x1A; //

  • 型推論の正解が分からない - しげるメモ

    自分めも。だけどわかる人教えてください。 public static void main(String...args) { Integer a = 1; Long b = 2; Object result = method(a, b); // resultの型は? } static <T> T method(T a, T b) { return null; } このmethod(a, b)の型推論で、Tはどのような型に算出されるかという問題。 15.12.2.8 Inferring Unresolved Type Argumentsを追いかけながら進んでいく感じ。ただし、型推論の後半部分だけ。 おさらいしておくと、Integer, Long はそれぞれ下記のような宣言。 class Integer extends Number implements Comparable<Integer>

    型推論の正解が分からない - しげるメモ
  • 型パラメータつきクラスの中から指定された型パラメータを知る方法 - Skirnirnismal

    型パラメータつきクラスHoeがあるとして、指定された型パラメータをHoeクラスの中から知る方法。 public class Hoe<E> { private Class<E> type; public Hoe(E... e) { @SuppressWarnings("unchecked") Class<E> type = (Class<E>) e.getClass().getComponentType(); this.type = type; } public Class<E> getType() { return type; } } こうすると、具体的な型パラメータを取得できる。 例えば Hoe<Fuga> hoe = new Hoe<Fuga>(); という文があった場合、hoe.getType()はFuga.classになる。 かなり裏技的だけど。

    型パラメータつきクラスの中から指定された型パラメータを知る方法 - Skirnirnismal
  • 捕捉変換に関する覚え書き - しげるメモ

    まじめにJavaの型推論書いてるのでメモ。capture-#xとか分かるようになるかも。 レビューに付き合ってくださる方は Java SE Specifications からPDFをダウンロードしておくとよいかと*1。 捕捉変換の概要 捕捉変換(capture conversion)は言語仕様の「5.1.10 Capture Conversion」にあります。5回くらい読まないとまともに理解できないので趣旨だけ簡単に パラメータ化型*2に出現する型引数にはワイルドカード*3を含めることができる ワイルドカードは型そのものではなくて型の範囲(集合)を表現する*4 変数の参照などの式には捕捉変換が適用され、パラメータ化型からワイルドカードが除去される ワイルドカードを含むパラメータ化型に捕捉変換を適用すると、すべてのワイルドカードが一時的な型変数に置き換えられる コンパイルエラーの時によく出る

    捕捉変換に関する覚え書き - しげるメモ
  • キャストしないでサプタイプの型に変換する - taediumの日記

    ジェネリクスねた。 Java Generics and Collections: Speed Up the Java Development Process の9.4 Strategy に出てくる話です。 @Test public void test() throws Exception { Aaa<Bbb> hoge = new Bbb(); Bbb bbb = hoge.asSubtype(); Aaa<Ccc> foo = new Ccc(); Ccc ccc = foo.asSubtype(); } interface Aaa<T extends Aaa<T>> { T asSubtype(); } static class Bbb implements Aaa<Bbb> { public Bbb asSubtype() { return this; } } static clas

    キャストしないでサプタイプの型に変換する - taediumの日記
  • 複数通貨のMoneyをジェネリクスで作る

    Kanazawa.processではテスト駆動開発入門を読んで、テスト駆動開発を学びました。そのでのテスト駆動開発のサンプルとして挙がっていたテーマは複数通貨のMoneyを作るというものでした。 Dollarという米ドルを表現するオブジェクトを作り、Francというスイス・フランを表すオブジェクトを作り、そしてMoneyというオブジェクトに統合していくというリファクタリングの過程を経ています。 これをジェネリクスを使って設計したらどうなるでしょうか。 public abstract class Money<T extends Money<T>> { public abstract T add(Money<?> m); } Moneyオブジェクトに演算用のメソッドadd()を定義します。引き算や掛け算など要求に合わせて各種用意するといいでしょう。 Money<T extends Money

  • Genericsではまった - 矢野勉のはてな日記

    Java, メモ複合的な総称型にキャストするにはどうしたらいいんだろう? というのでちょっとはまったのでメモ。 こんなインターフェースがあります。インターフェースの内容自体は今回はどうでもいいのですが。 public interface Loggableextends MyClass> { Class getLogClass(); void setLatestLog(T log); } で、このLoggableインターフェースを実装していてなおかつMyClassのサブクラスであるインスタンスだけを処理するstaticメソッドがあります。 public static extends MyClass, T extends MyClass & Loggable> L create(T obj) { Class logClass = obj.getLogClass(); Object newObj

  • isocchi.com

    This domain may be for sale!

  • Java総称型メモ(Hishidama's Java Generics Memo)

    メソッドの総称型 メソッドのみに総称型を適用した定義を行うことも出来る。[2007-06-12] 戻り値の型の直前に「<仮型引数, 仮型引数…>」を置くだけ。後はクラスの場合と同様。 public static <T> T notNull(T arg1, T arg2) { T ret; if (arg1 != null) { ret = arg1; } else { ret = arg2; } return ret; } このメソッドを呼び出す側は、クラスの場合とは異なり、明示的に型引数を指定する必要は無い。 指定した引数の値に応じて、自動的に型が判断される。 String s = notNull("abc", "def"); //型引数はString Long l = notNull(new Long(1), new Long(2)); //型引数はLong int i = notNu

  • ジェネリクス型変数と型階層 - プログラマーの脳みそ

    @masaru_b_cl とジェネリクスの話をしていて、継承の際に型変数に具体的な型をバインドして単純化したりするんだよ、みたいな話をしていたのだけど、コード例がないとイメージしにくいと思うのでちょっと書いておこう。 二つの型変数 I, O をもつinterfaceがあったとする。 public interface Executor<I, O> { O exec(I in); } この実装クラスとしてListを受け取って合計を返すSumIntegerクラスを考えよう。 public class SumInteger implements Executor<List<Integer>, Integer>{ public Integer exec(List<Integer> in) { int ret = 0; for (int value : in) { ret += value; } re

    ジェネリクス型変数と型階層 - プログラマーの脳みそ
  • ジェネリック型配列は作れるか? - かとじゅんの技術日誌

    ごきげんうるわしゅぅ。 さて、今回はジェネリックスの話題。 ジェネリックスになれてくるとうっかり書いてしまうのが、以下のコード。 public class MyArray<E>{ private E[] elements; public MyArray(int n){ elements = new E[n]; } public E get(int index){ return elements[index]; } public void set(int index, E value){ elements[index] = value; } } これは機能しそうですが、実際には以下でコンパイルエラーになります。 elements = new E[n]; え?なぜできないの?って考えてしまうのですが、Eなどの具象化不可能型*1は配列を生成できないのです。 回避方法その1 えぇい、Listにして

    ジェネリック型配列は作れるか? - かとじゅんの技術日誌
  • どうしても型パラメータを取得したい。 - たかふーのブログ

    こうすれば、取れない事もないのではないかと。。。 public class GetGenericsTest { @Test public void test() throws SecurityException, NoSuchFieldException, ClassNotFoundException { // 通常 Field field1 = TestBean1.class.getDeclaredField("value"); System.out.println(field1.getName() + "::" + field1.getType().getName()); Field field2 = TestBean2.class.getDeclaredField("list1"); System.out.println(field2.getName() + "::" + field

  • Java変態文法最速マスター - プログラマーの脳みそ

    Java基礎文法最速マスター - いろいろ解析日記をリスペクト。 Javaの変態文法・技法一覧です。Javaの基礎をある程度知っている人はこれを読めばJavaの変態をマスターしてJavaを書くことができるようになっています。簡易リファレンスとしても利用できると思いますので、これは足りないと思うものがあれば教えてください。 1.基礎 エンクロージング型内部classの作成 外部classのインスタンスに紐付くインスタンスを生成します。外部クラスのインスタンス - 内部クラスのインスタンス間に、クラス - インスタンスのような関係を持たせることができます。 public class Outer { public class Inner { } } というようなクラスを作った場合、 Outer o = new Outer(); Inner i = o.new Inner(); となります。new

    Java変態文法最速マスター - プログラマーの脳みそ
  • Effective Java 読書会 7 日目 「PECS! PECS! PECS!」 - IT戦記

    はじめに 今日読んだところ 126 ページ〜 142 ページ 前回はこちら Effective Java 読書会 6 日目 「ジェネリクス!」 - IT戦記 Object を使ったその瞬間が ジェネリック型を使うチャンスなのです!!! たとえば、以下みたいな public class Stack { /* snip */ public Object pop() { /* snip */ } public void push(Object e) { /* snip */ } } こうなる public class Stack<E> { /* snip */ public E pop() { /* snip */ } public void push(E e) { /* snip */ } } Object を使わなくすると キャストがなくなる キャスト良くない!例外でるからね! どうしてもキ

  • ジェネリクスの共変性・反変性(C# によるプログラミング入門)

    概要 Ver. 4.0 C# 4.0 で、ジェネリクスの型引数に共変性・反変性を持たせることが可能になりました。 (共変性・反変性という言葉の意味は「covariance と contravariance」参照。) ジェネリックの共変性・反変性 ジェネリクスの共変性・反変性というものがどういうものかというのを説明する前に、まず背景を。 ジェネリックコレクションに関して、昔から以下のようなことをしたいという要望がありました。 List<string> strings = {"aa", "bb", "cc"}; List<object> objs = strings; これを認めてしまうと何がまずいかというと、 以下のような不正な値の書き換えが起こり得る。 // strings と objs は同じオブジェクト objs[0] = 5; // int に書き換えられたらまずい string s

    ジェネリクスの共変性・反変性(C# によるプログラミング入門)
  • JavaとScalaとC#のジェネリクス機能比較表 - Onion開発しつつ、PEGEXを開発する日記

    JavaScalaとC#のジェネリクスは、いずれも継承を持ったオブジェクト指向言語においてParametric Polymorphismを実現するための手段であり、それぞれ異なった特性を持っている。というわけで、それぞれの言語においてジェネリクスがどのようにサポートされているかを比較した表を用意してみた。後で気が向いたら、各項目の説明を追加するかも。 Java(5.0以降) Scala C#(4.0) ジェネリックなクラス ○ ○ ○ ジェネリックなメソッド ○ ○ ○ 型パラメータの上限 ○ ○ ○ 型パラメータの下限 × ○ × 型パラメータの推論 ○ ○ ○ 全ての型のサブタイプ(ScalaにおけるNothing) × ○ × definition-site variance × ○ ○ use-site variance ○(Wildcard) ○(Existential Typ

    JavaとScalaとC#のジェネリクス機能比較表 - Onion開発しつつ、PEGEXを開発する日記
  • Javaの型パラメータ境界指定を使って型を合成する話 - 矢野勉のはてな日記

    Javaはい。開発者のあいだでAdvent CalendarがはやってるみたいなのでJavaでもやろうという話があり、早速はじめることにしました。Java Advent Calendar -ja 2010 : ATNDほんとは1日からはじめるものらしいんですが、いいじゃないですかそんなこと。5分で考えて5分でかけるものでOK、ということで、最近遊んでた、Javaで型を合成する話を書いてみようと思います。ネタがぱっと思いつかなかった…あらかじめ書いておくと「できるかなと思ったけどやっぱりできなかったね」という話に過ぎませんのでよろしく。戯れ言です。真剣に読むと損します。あと5分で書けませんでした。型合成Javaでインターフェイスをきるとき、メソッドの引数はおおむねすべてインターフェイスになるように設計するのがよいとされているようです。そうしてると「このメソッドの引数はMapだけど、このMap

  • Class.cast()について調べてみた - よしだ’s diary

    ジェネリクスと同じくJDK1.5で導入された、Class.cast()について調べてみた。 Class.cast()とは うまい事型を変換してくれる便利機能かと思ったら、全然違った。 Objectで表されているけど実は中身はInteger、とかそういう時に使う。 キャスト演算子。 import java.util.*; public class CastTest { public static void main(String[] args) { Object obj = 123; Integer i = Integer.class.cast(obj); } } キャスト演算子との違い やりたい事はキャスト演算子もClass.cast()も同じ。 何事もない時は、キャスト演算子と同じ。 でも、キャストに失敗した時の挙動が違う。 Class.cast()を使うと、キャスト出来なかった場合は、

    Class.cast()について調べてみた - よしだ’s diary
  • Java言語で固定要素のListを初期化する際のイディオム - 達人プログラマーを目指して

    Generics(総称型)のプログラミングはJava言語(バージョン5以降)で最も習得が困難な文法*1の一つです。私自身、時々どうやって文法エラーを修正すべきか悩むこともあるくらいで、実際かなり複雑です。Genericsの導入は賛否両論なので、実際Javaに導入したのは間違いだったという議論もある一方で、静的な型安全性を重視するプログラマーもいます。 好き嫌いはともかくとして、Javaプログラマーとしては、一度きちんとGenericsの正しい使い方(=使い勝手のよい総称型やメソッドの正しい定義方法)について勉強しておいてもよいと思います。 Java Generics and Collections: Speed Up the Java Development Process 作者: Maurice Naftalin,Philip Wadler出版社/メーカー: O'Reilly Media

    Java言語で固定要素のListを初期化する際のイディオム - 達人プログラマーを目指して
  • Javaによる高階型変数の実装 - プログラマーの脳みそ

    高階関数というものをご存知か。関数自身を引数あるいは戻り値に取る関数のことである。「高階」は「こうかい」と読む。その昔「たかしな」と読んだ人がいたとか、いないとか。 先のエントリ「HttpSessionを型安全にする」では「javax.servlet.http.HttpSessionのsetAttribute()/getAttribute()のようなモノをどうやって型安全にするか」という動機付けから、 public class KeyValue<K> { public <T> void put(K<T> key, T value){} } といったことをやろうとして、Javaの言語仕様上、型変数に型変数を持たせることができないので実現できないと述べた。 簡単に解説すると、ここでKayValueはHashMap的なキーを渡せば値を返すオブジェクトで、型変数Kはキーの集合体を表現している。ty

    Javaによる高階型変数の実装 - プログラマーの脳みそ
  • https://ryoasai.hatenadiary.org/entry/20110321/1300696942

  • Java5の型システムを理解するにはリフレクションAPIを使ってみるのが最短の近道になる - 達人プログラマーを目指して

    Java5における総称型(generics)の導入に伴い、Javaの型システムは以前と比べて高機能になった反面、理解するためのハードルが高くなっています。もちろん、Javaの型についてきちんと理解するためには言語仕様を勉強すればよいのですが、手っ取り早く理解するための方法としてリフレクションAPIを使ってみるというのが有効です。リフレクションAPIの先祖はJava1.xのころから存在しており、フィールド、メソッド、クラスなどの情報を実行時に取得するためのものですが、総称型に合わせてJava5から新しいAPIが追加されています。ここではリフレクションAPIを使い、Java5の新しい型システムについてまとめてみたいと思います。 JDK1.4までの型はすべてClassクラスのインスタンスに一対一対応する JDK1.4までに存在していた型はパターンに分けると以下の3通りに分類できます。 基型(i

    Java5の型システムを理解するにはリフレクションAPIを使ってみるのが最短の近道になる - 達人プログラマーを目指して
  • 異型のオブジェクト比較 - プログラマーの脳みそ

    異なる型のオブジェクトの順序比較が今回のテーマ。 Javaの場合、オブジェクトの順序を比較する王道はふたつある。 ひとつはjava.lang.Comparable *1(こんぺあらぶる)を実装する「自然順序付け」と呼ばれる方法。 public class A implements Comparable<A> { int a; @Override public int compareTo(A o) { return this.a - o.a; } } もうひとつはjava.util.Comparator (こんぱれーたー)を用いる方法。*2 public class MyComparator implements Comparator<A> { @Override public int compare(A o1, A o2) { return o1.a - o2.a; } } 見て分かるよう

    異型のオブジェクト比較 - プログラマーの脳みそ
  • はてなブログ | 無料ブログを作成しよう

    理解はできるけどそれだけだな 「ピザ屋の匂いって、全部他人が注文したものから香る匂いだと思うと、悔しいよな」と友人に言ったら「理解はできるけどそれだけだな」と言われた。全く持ってその通りだ。この言葉を発する時、自分は日語のテクニックだけで言葉を作っていて、伝えたい想いとかそう…

    はてなブログ | 無料ブログを作成しよう
  • 『qpstudy3周年記念LT大会』でLTしてきた! - mikedaの日記

    『qpstudy3周年記念LT大会 〜新人さん、業界にようこそ!〜 with ビール』に参加&LTしてきました! 14時から始まって簡単なメインセッションの後、20人くらいのLTが19時近く?まで! いやー、さすがに飲み疲れましたw 自分のLT資料です qpstudy3周年記念LT大会 from Tomohiro Ikeda 今回のやりたかったのはこのへんでした なにか新人さんが参考になる話をする ライブオペレーション ライブオペレーションについては、開発系の勉強会の『ライブコーディング』と同じ感じで、 みんなでだれかのオペレーションを見て それについていろいろ議論する と楽しいかなーと。 初挑戦だったので、テキパキ行かずに何やってるかうまく伝えられなかったですが、なかなか楽しかったのでまたやりたいと思います! あとはライブオペレーションでやったことについて、ザッと解説しておきます! ライ

    『qpstudy3周年記念LT大会』でLTしてきた! - mikedaの日記
  • git merge に関するメモ - Cube Lilac

    前回、git の運用指針 - Life like a clown と言う記事を書きましたが、git の事をよく理解しない状態のまま取り急ぎ作成したために、やはりいろいろとまずい所があったようです*1。指摘された点としては、「merge や rebase の理解がまずい」、「git-flow はしんどいから GitHub Flow の方が良い」等がありました。これらに関しては一つずつ調べながら、自分が理解した範囲で一度まとめてみようと思います。取りあえず、今回は git merge から。 尚、merge や rebase について調べていると こわくない Git と言う非常に分かりやすくて良い資料(スライド)が見つかりました。git 上で何らかのブランチ戦略を取って開発を行う場合、ひとまずこの資料に目を通す(通させる)と良いかもしれません。 git merge (Non Fast-Forw

    git merge に関するメモ - Cube Lilac
  • 今日からすぐに使えるデプロイ・システム管理ツール Fabric 入門 - 科学と非科学の迷宮

    Fabric は、Python 製のデプロイ・システム管理ツールです。 最近、構築や運用を自動化するための様々なツールが出てきています。 構成管理ツールの Puppet や Chef が有名ですが、使うまでに覚えることが多いのが欠点です。 しかし、Fabric は非常にシンプルなツールで、今からすぐに使うことができます。 Fabric はデプロイ・システム管理ツールで、類似のツールとして Ruby 製の Capistrano があります。 Fabric の最大の特長は、シェルスクリプトを書き慣れた人がいきなり利用できるところです。 シェルスクリプトとしてまとめていたコマンドをそのまま run() メソッドや sudo() メソッドで囲むだけで、使うことができます。 シェルスクリプトを使っていていると、いくつもの問題に遭遇します。 名前空間の管理 変数の扱い 複雑なデータ構造がない(せいぜい

    今日からすぐに使えるデプロイ・システム管理ツール Fabric 入門 - 科学と非科学の迷宮
  • 「オンプレミス・システムの終わり」の始まり〜AWSでのミッションクリティカルシステムの稼働 - 急がば回れ、選ぶなら近道

    個人的には割と大変だったので、その辺をまとめておきます。 ニュースリリースはこちら。 http://www.nautilus-technologies.com/topics/20130409.html 要するに部系バックエンド基幹システムの「一式」のクラウド移行です。完全なミッションクリティカルシステムで、止まった段階で業務に確実に影響が出ます。 システムの機能概要 1.売上の確定処理と債権管理 POSデータの直結です。売上確定処理を行います。同時に債権管理も行い、F/Bからの入金データをそのままつなぎ込み、入金処理・債権の消し込み処理を実行します。マッチングは自動処理できるものは処理を行い、ヒューリスティックなものはユーザー判断に従います。 2.仕入・費用の計上と確定処理、および支払いデータの作成 費用・在庫の計上確定処理です。当時に支払データの確定処理を行います。EDI(BMS)との

    「オンプレミス・システムの終わり」の始まり〜AWSでのミッションクリティカルシステムの稼働 - 急がば回れ、選ぶなら近道
  • ライトニングトークの勉強会・第2回Light Lightning Talk(LLT)は大盛況、参加者に良いモノを得て頂けた! #lightlt

    イベント主催 ライトニングトーク ライトニングトークの勉強会・第2回Light Lightning Talk(LLT)は大盛況、参加者に良いモノを得て頂けた! #lightlt このエントリーの流し読みっ! 主催したライトニングトーク勉強会は盛況のうちに終了 人の話を真剣に聞くこと。自分の話を真剣にすること。新たな繋がりも生まれた! 第三回、ぜったいにやります! 私が主催している第2回のライトニングトーク勉強会「Light Lightning Talk」が2013/04/13 14:00から新宿のトラベラーズ・コワーキングで行われ、無事盛況のうちに終了しました。 ▼お世話になったトラベラーズ・コワーキングさんはこちら 新宿トラベラーズ・コワーキング - 電源コンセント・無線LANが使えるノマドワーキングスペース ▼第2回LLTの告知ページです。主催や参加者、テーマ概要はこちらをどうぞ。 第

    ライトニングトークの勉強会・第2回Light Lightning Talk(LLT)は大盛況、参加者に良いモノを得て頂けた! #lightlt
  • 【実践FuelPHP】FuelPHPを今使いはじめる8の理由 | DevelopersIO

    FuelPHPとは FuelPHPとは、PHPのフレームワークの一種です。2010年に開発開始、2011年に提供開始してから、何かと耳にはするのですが、なかなか使ってる人を見かけません。純粋に知名度が低いのでしょうか。日ではCakePHPを使ってる人がまだまだ多いです。 なぜFuelPHPなのか FuelPHPを使おうと思った経緯はいくつかあるのですが、他のフレームワークと違って「これだ!」と思った点(あくまで自分基準)で列挙してみます。 1.MITライセンスである ライセンスがMITライセンスで提供されているため、制約が少ないという利点があります。これから業務で使う際も、ライセンスをあまり気にせず使うことができそうです。 ごちゃごちゃ考えるのとか調べるのがめんどくさい場合、MITライセンスだと楽ですね。 2.PHP5.3以降にしか対応していない 正直これは自分の問題なのですが、PHP5

  • USP 友の会 LT 資料 20130413

    サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016Kohei Hoshi

    USP 友の会 LT 資料 20130413
  • サービス終了のお知らせ - NAVER まとめ

    サービス終了のお知らせ NAVERまとめは2020年9月30日をもちましてサービス終了いたしました。 約11年間、NAVERまとめをご利用・ご愛顧いただき誠にありがとうございました。

    サービス終了のお知らせ - NAVER まとめ
  • サービス終了のお知らせ - NAVER まとめ

    サービス終了のお知らせ NAVERまとめは2020年9月30日をもちましてサービス終了いたしました。 約11年間、NAVERまとめをご利用・ご愛顧いただき誠にありがとうございました。

    サービス終了のお知らせ - NAVER まとめ
  • 【保存版】 eclipseを入れたら必ず導入している設定方法 【初期設定&プラグイン】 - NAVER まとめ

    サービス終了のお知らせ NAVERまとめは2020年9月30日をもちましてサービス終了いたしました。 約11年間、NAVERまとめをご利用・ご愛顧いただき誠にありがとうございました。

    【保存版】 eclipseを入れたら必ず導入している設定方法 【初期設定&プラグイン】 - NAVER まとめ
  • サービス終了のお知らせ - NAVER まとめ

    サービス終了のお知らせ NAVERまとめは2020年9月30日をもちましてサービス終了いたしました。 約11年間、NAVERまとめをご利用・ご愛顧いただき誠にありがとうございました。

    サービス終了のお知らせ - NAVER まとめ
  • サービス終了のお知らせ - NAVER まとめ

    サービス終了のお知らせ NAVERまとめは2020年9月30日をもちましてサービス終了いたしました。 約11年間、NAVERまとめをご利用・ご愛顧いただき誠にありがとうございました。

    サービス終了のお知らせ - NAVER まとめ
  • インフラエンジニアに贈るAmazon VPC入門 の記事一覧 | DevelopersIO

    DevelopersIOは、AWS、iOS/Androidアプリ、ビッグデータ、Alexa等の最新技術情報からリモートワークや働き方に関する記事まで多彩なトピックを紹介するクラスメソッドのオウンドメディアです。

    インフラエンジニアに贈るAmazon VPC入門 の記事一覧 | DevelopersIO
  • 命令プログラミングから関数プログラミングへ

    A slide for the hands-on session at Scala Kansai Summit 2018, originally presented by Kitora-san in 2017. 15.7.11 HiRoshima.R #4 Lightning Talks @imyuaotiの発表資料です。 ※注意※(2015.7.19追記) Rでは処理速度が遅いという理由で for関数の使用は避けるべきと考えられています。 来は,処理を高速化をしたい場合,以下をうまく活用してください。 ・apply関数 ・foreachパッケージ,pforeachパッケージ 【参考資料】 「勝手に添削:for関数を使った繰り返し処理によるヒストグラムの一括出力 #rstatsj」 http://qiita.com/hoxo_m/items/5127c31f3eafd6be7428 (h

    命令プログラミングから関数プログラミングへ
  • Perl QA Hackathon 2013 Tokyo Satellite - Kentaro Kuribayashi's blog

    Today I participated in Perl QA Hackathon 2013 Tokyo Satellite held at FreakOut. I and id:shiba_yu36 have made up some features for PrePAN and Cinnamon: Fixed several problems on PrePAN Fixed workers which didn't work well Some issues about notifications due to connections between Redis Released email notification feature using Amazon SES Added concurrent execution support into Cinnamon (0.13_01)

  • QA Hackathon at Tokyoに参加してPrePANとCinnamonの開発をしました - $shibayu36->blog;

    QA Hackathonが東京であったので、PrePANとCinnamonの開発をしてきました。 PrePAN id:antipopさんと相談して、とにかくレビューをちゃんとしてもらわないと話にならないから、コメントがついたりしたらアプリケーションの通知と一緒に、メールでも通知しようという話になり、それを実装しました。 PrePAN New Feature: Email Notification | kentaro [blogs.perl.org] 上のような感じで、自分の投稿したモジュールや自分のコメントしたモジュールに新しくコメントがつくと、メールで通知が来るようになりました。通知をやめたい場合はプロフィール画面から設定が可能です。 あとついでにユーザページのURLを変えたりしました。これまではuserのidをbase58 encodeしたURLになっていたのですが(http://pr

    QA Hackathon at Tokyoに参加してPrePANとCinnamonの開発をしました - $shibayu36->blog;
  • ログ解析で楽をする話 #qpstudy でしてきました。

    ログ解析というのはインフラエンジニアの基礎の基礎です。アプリケーションが定まればそれなりのログ解析ツールは存在します。Debianのstableですら数十のツールがあります。 とはいえ、実際のログというのは往々にしてアプリケーション毎に全然ちがっているのでツールは役に立ちません。結果としてgrepを駆使したり、はたまたRDBに突っ込んだりして試行錯誤することになります。 見事に解析できたとしても、それを可視化することを考えると楽できることを考えておきたいわけです。 そこで役に立つのはログ解析SaaS.Sumologic, SplunkStorm, Logglyなどけっこうありますが、qpstudyではSumoLogicを紹介してみました。GUIでログを横断的に絞り込めますし、その処理構文はいつでも繰り返すことのできるすぐれものです。 無料で使えるサイズでかなりのことができますので、ちょっと

    ログ解析で楽をする話 #qpstudy でしてきました。