【告知】JavaOne 2012 San Francisco 報告会 in 富山

1/26 (土) JavaOne 2012 San Francisco 報告会 in 富山寺田さん、櫻庭さん、太一さんの豪華キャストでお送りします。今回はサンフランシスコのJavaOneの報告会です。2012年のJavaの技術動向について理解を深めることができる会にしたいと思います。

Javaのジェネリクスとリフレクション

今回のテーマはジェネリクスとリフレクション。Javaのジェネリクスはイレイジャ方式なのでリフレクションでは何も得られないと思ってはいまいか。 public void hoge(List<String> list) {} といったメソッドがあったとして、リフレクションでこのメソッドの情報を得</string>…

再帰ジェネリクスのthisとTの互換性

再帰ジェネリクスを用いて以下のようなコードを書いたとする。 Hogeを継承した型を作った場合に具象型を得るgetThis()メソッドを使えるようにしたいわけだ。 public class Hoge<T extends Hoge<T>> { @SuppressWarnings("unchecked") public T getThis() { return (T) this; } </t>…

ジェネリックな設計 再帰編

11/10に開催されたJJUG CCC 2012 Fallでジェネリクスについてセッションを行いました。このエントリはセッション内容を補足するものです。基礎的な内容はJavaジェネリクス再入門 - プログラマーの脳みそ ジェネリックな設計 基礎編 - プログラマーの脳みそな…

ジェネリックな設計 基礎編

11/10に開催されたJJUG CCC 2012 Fallでジェネリクスについてセッションを行いました。このエントリはセッション内容を補足するものです。本セッションはジェネリックなクラスの設計を行えるようになって欲しいという狙いで話をしました。ジェネリックなクラ…

オワコンであるVectorとListの同期の話

JJUG Night Seminarへ行ってきました - 虎塚にあったjava.util.Vectorの話。java.util.Vectorは随分前にオワコン化していて、今、新たにVectorを使ってコードを書く人がいたら優しく諌めてあげるべきシロモノ。「VectorとArrayListだとArrayListの方が同期化…

事業統合のお知らせ

私が代表を務める株式会社凪瀬アーキテクツは7月より株式会社Abbyと事業統合しAbby富山事業所となります。代表は id:yone098 です。Abbyは東京にある会社なのですがよねさんがもともと富山の人で、富山に事業所を作りたいと言っていたところに乗っかった形で…

ジェネリクスによるVisitorパターン拡張の考察

先日twitterで "Expression Problem" という問題を知った。 静的な型付けの下で、場合分けのデータ構造に対して、新しい場合分けとその場合に対する新しい処理を、元のソースコードに手を加えることなく拡張定義すること 2009-05-16 この問題が意図するとこ…

Semicolonless Java 2012

JavaOne Tokyo 2012でLTをしてきました。内容は寺田さんの要請でSemicolonless Java(セミコロンレス・ジャバ)です。当日は風邪で喉をやられたので音声が聞き取りにくかったと思います。申し訳ないです。公式のフォトライブラリーがあるので当日の会場の雰…

アジャイルのための第一歩に僕が選んだこと - アジャイルジャパン2012富山サテライト

3/16にアジャイルジャパン2012が開催されました。本講演は今年は大阪会場で、大阪以外にも各地でサテライトが開催されました。僕は富山サテライトで参加です。 セッションのテーマ 僕のセッションのテーマは今の開発現場にどうやったらアジャイルを組み込め…

AsyncTaskの使い方考察

Androidでの開発ではAndroid OSをある種のフレームワークと捉えてその作法に則ってうまく「使われる」プログラムを書かなくてはならない。なのでそのフレームワークがどういう仕組で、どういう流れで僕らの書いたコードを呼び出すのかということを理解するこ…

Javaのクラス宣言5種+α

Javaのクラス宣言には5種類ある。 トップレベルクラス・ネストしたクラス・内部クラス・ローカル内部クラス・匿名クラス(無名クラスとも言われる)の5種類だ。 今回はこの5種類のクラス宣言のおさらい。 トップレベルクラス これは普段使っているクラス。拡張…

Minecraft「木材収集機を作ってみた」解説

2015年8月 追記 本エントリは2012年の古いものではあるがしばしば参照されているようなので後に改良されたローコスト版を公開しておく。といってもこちらも2012年の10月末のものなので、今となっては随分古い。現在の1.8系で動かす場合にリピーターの遅延設…

ProxyパターンとProxyクラスと黒魔術

Java Advent Calendar 2011 の18日目です。17日目の記事は JavaEE使ってウェブアプリケーションつくろうよ - 水まんじゅう2、 19日目はJavaエバンジェリストの寺田さんですよ。乞うご期待。 プロローグ 後:「先輩、いまさらなんですけど上からSQLの遅いとこ…

寝てる場合じゃねぇ!

Javaの型パラメーターに対してstaticメソッドを呼び出した場合の挙動 - 達人プログラマーを目指してを見ていて思いついた。 public class NoSleep <Thread extends NoSleep.Hoge> { public static void main(String[] args) { NoSleep n = new NoSleep(); n.start(); } private void start</thread>…

Threadの割り込みを活用する

確実に一定時間スリープする - terazzoの日記ではThreadの割り込みがあっても確実に一定時間の停止を試みているが、そもそもこのようなコードは書いてはいけない。Thread.sleep()は一定時間止まるための便利メソッドとしてよく知られているが、そのときに発…

二重ループのバグ

太郎くんはJavaでコマンドラインから渡された英文字("zero", "one", "two", "three")をアラビア数字(0, 1, 2, 3)に置き換えるコードを書いた。 public class Sample { static String[] values = {"zero", "one", "two", "three"}; public static void main(S…

僕の知らない論理

いつも通りのある日のこと、彼は突然声高に言った。嫌だ!は充分に論理的だと。*1 彼が主張し心理学者がまさにまさにと肯定*2した僕の知らない論理に僕は興味を持った。 それはこういう理屈なのだろうか?と考えた仮説を書いたら*3ある人が解説をしてくれた…

「嫌だ!」が論理的という話

(注意)以下は、ある人物の主張を正しいとするならばこのような解釈になるのだろうかという仮説であったことを断っておく。現在、僕はこの仮説を放棄した点も断っておく。論理的とは何か、といえば論理・的なのだから、 1 論理に関するさま。 2 論理にかな…

セミコロンレスJavaの構造化&オブジェクト指向

昨日、Java 7th moon 富山が開催されました。参加者21名と小規模ながら、会場は非常に盛り上がりました。ああ、凄く楽しい。こんなに楽しいのは久しぶりだ。スピーカーをしてくださった皆さん、参加してくださった皆さん、本当にありがとうございます!LT(ラ…

Java 7 イベントやりますよ

Java7 リリース記念で勉強会を開催します。 Java 7th moon 富山 : ATND豪華ゲストが来てくださることに! 寺田さん ([twitter:@yoshioterada]) 桜庭さん ([twitter:@skrb]) ヨシオリさん ([twitter:@yoshiori]) ナガタさん ([twitter:@ngtyk]) 近郊の人はぜ…

Java7 ジェネリクスのダイアモンド・オペレータ

Java 7がリリースされました。もう随分前から7の話題はあったものの、ずっと延期されてたんで出た事自体が不思議な気がしますが、皆様いかがお過ごしでしょうか。Java 6が2006年12月ですからほぼ5年も経ってしまったのですね。Java 7のリリースノートは Java…

Android用アニメーションの考察メモ

自分メモ。UIに単純なアニメーションエフェクトを付けるだけであればandroid.view.animationパッケージあたりの機能を使えばいい。Androidアプリで“アニメーション”するための基礎知識あたりを参考。フリックやピンチイン/アウトでのズームイン/アウトなど…

異型のオブジェクト比較

異なる型のオブジェクトの順序比較が今回のテーマ。Javaの場合、オブジェクトの順序を比較する王道はふたつある。ひとつはjava.lang.Comparable *1(こんぺあらぶる)を実装する「自然順序付け」と呼ばれる方法。 public class A implements Comparable<A> { in</a>…

Javaパフォーマンス計測 JITとの闘い

前回の文字列操作編では適当に文字列操作のパフォーマンスを測定しようとしたらGC様とJITコンパイラ様に阻まれた、という話だった。モヒカン族*1が「てめえの計測はなっちゃいねー!ひゃっはー!」と殴りかかったらケンシロウみたいなのが出てきて「あべしっ…

Javaパフォーマンス計測 文字列操作編

前回でパフォーマンス計測に用いるタイマーについての理解を深めたので、やっとパフォーマンスの計測を始めることができる。今回のテーマはJavaの文字列連結だ。タイムリーだね。 文字列連結についての基礎知識 Javaの文字列連結についての言語仕様まわりは …

Javaパフォーマンス計測 そんなタイマーで大丈夫か?

駄目だ。大問題だ。 long t1 = System.currentTimeMillis(); long t2 = System.currentTimeMillis(); System.out.println(t2-t1); 結果はなんとでるか? 99.9%以上の確率で0が表示される。そもそもSystem.currentTimeMillis()は時刻をミリ秒で返す。1行のプ…

Java 30byte FizzBuzz

なっちゃん(以下な)「なんかさー。タイトルが無理すぎない?」 ぎぃくん(以下ぎ)「まあ流行りだからね」 せっちゃん(以下せ)「流行りって言ってもFizzBuzzを30バイトで - Togetterが1/24だし、1週間経ってるけど。どちらかと言えばオワコン?」 な「…

Javaによる高階型変数の実装

高階関数というものをご存知か。関数自身を引数あるいは戻り値に取る関数のことである。「高階」は「こうかい」と読む。その昔「たかしな」と読んだ人がいたとか、いないとか。先のエントリ「HttpSessionを型安全にする」では「javax.servlet.http.HttpSessi…

HttpSessionを型安全にする

Servletをやった人はおなじみのjavax.servlet.http.HttpSessionのsetAttribute()/getAttribute()のようなモノをどうやって型安全にするかというのが今回のテーマ。擬似的にはjava.util.Map型へのput/getだと思ってもらっていい。通常、Mapを使う際はキーの型…