タグ

ブックマーク / nowokay.hatenablog.com (13)

  • Java 13のDynamic CDSで想像以上に起動速度が速くなった - きしだのHatena

    Java 13で、読み込み済みのクラスデータを終了時に保存するDynamic CDSが導入されました。 https://openjdk.java.net/jeps/350 で、試してみたら結構起動速度が変わっていました。 Micronautで試してみます。 追記: Java 10でApplication Class-Data Sharingが入っているので、自分でクラスリストを作ってダンプすれば同等のことができていたのだけど、面倒さが低減された感じです。LTSであるJava 11ではAppCDSを使うといいと思います。 追記2: 自分でダンプしたほうがかなり速かった Dynamic CDSよりJava10からある自力ダンプの方が起動が速い - きしだのHatena 準備 インストールは全部SDKMAN!で行います。(Windowsの場合はCygwinかWSLを使います) $ curl -s

    Java 13のDynamic CDSで想像以上に起動速度が速くなった - きしだのHatena
    dann
    dann 2019/10/17
  • JUnit5で変わるテストの書き方 - きしだのHatena

    JUnit5が案外よさげなので、JUnit5を使うとどんな感じでテストが変わるのか考えてみます。 実際にどこが変わったかとか、使い方自体はいろいろまとめられたブログがあるし、公式ドキュメントも読みやすいのでそちらを。 http://junit.org/junit5/docs/current/user-guide/ メソッドごとのテスト JUnit5でいいのは、Nestedですね。 いままで、いろんなメソッドを対象にしたテストが入り混じってたと思います。 import org.junit.Before; import org.junit.Test; public class PurchaseTest { @Before public void setup() { // 全体のセットアップ // purchase()用のセットアップ // history()用のセットアップ } @Test p

    JUnit5で変わるテストの書き方 - きしだのHatena
    dann
    dann 2017/10/13
  • 作って理解するDIコンテナ - きしだのHatena

    DIコンテナ使ってるけど、アノテーションってなんなの!って聞かれて、作ってみたらわかるよと答えてみたので、自分でも作ってみました。 よくわかった。 「DIコンテナ使うと何がいいの?」ということも、作ってみるとわかります。あと「DIって何がいいの?」に関しては、「DIはちょっとコードを書くのが楽になるだけで、それだけあっても仕方ない、大事なのはコンテナ」と答えるようにしてますが、コード比率からもそれがよくわかります。 続編としてWebフレームワークも作っているので参考まで。 作って理解するWebフレームワーク - きしだのHatena まずはコンテナを作る とりあえず1ソースの状態で。 こんな感じで、管理する型を登録できるようにします。 static Map<String, Class> types = new HashMap<>(); static void register(String

    作って理解するDIコンテナ - きしだのHatena
    dann
    dann 2016/04/07
  • Java SEバージョンアップでのトラブルの話が面白かった - きしだのHatena

    Java Day Tokyo 2015で、NECJava SEバージョンアップでのトラブルの話が面白かった。 Java EEアプリケーションサーバの開発現場で見たJava SEの実際 資料はこちらで公開されてるので、資料に書かれてることはそちら参照という感じで、どんな話だったか書いてみます。 Java Day Tokyo 2015 アプリケーションサーバーを提供する中でJava SEをバージョンアップしたときに出て来たさまざまなトラブルの話と、Java SE 8から導入されたMetaspaceの話が主でした。 Java EEは機能が標準化されているので、アプリケーションサーバーはカスタマーサポートで差別化をはかるしかない、顧客から見ると、Java SEやOSまで全て含めてアプリケーションサーバーなので、全部対応していく、という話をされていました。 Javaにもそれなりにバグはあって、アプ

    Java SEバージョンアップでのトラブルの話が面白かった - きしだのHatena
    dann
    dann 2015/04/28
  • Java8のOptionalがモナドになったよ! - きしだのHatena

    Java8にはOptionalクラスが導入されたのですが、5月にエントリを書いた時点ではモナドではありませんでした。 Java8でのプログラムの構造を変えるOptional、ただしモナドではない それが、5月末にどうもソースにモナドに必要なメソッドが追加されたらしいということになって、いつ使えるようになるか待っていたら、いつの間にか使えるようになっていました。 Optional (Java Platform SE 8 b101) こちらからダウンロードできます。 JDK8 Early Access Releases ― Project Kenai 他にもいくつか便利メソッドが追加されたおかげで、このようなコードが書けるようになりました。 String str = "abcd"; Optional.ofNullable(str) .map(st -> st.toUpperCase()) .f

    Java8のOptionalがモナドになったよ! - きしだのHatena
    dann
    dann 2013/11/25
  • Java SE 8 lambdaで変わるプログラミングスタイル - きしだのHatena

    JavaOne2013報告会福岡第二段で話したlambdaの資料に加筆して公開しました。 lambdaの詳細な構文は適当に調べてもらうとして、lambdaでどのようにプログラミングスタイルが変わるかということに重点おきました。 追記「用意されたFuncationalInterface」のリンクはここです。 Java8 Lambdaの文法拡張まとめ - きしだのはてな

    Java SE 8 lambdaで変わるプログラミングスタイル - きしだのHatena
    dann
    dann 2013/11/18
  • Java8で強化されたMapと、書きやすくなったメモ化再帰 - きしだのHatena

    Java8のlambda構文の話を書くと、旧来の書き方でいいというコメントがつくのですが、それでも便利になったMapの恩恵を受けることは多いんじゃないかと思います。 ※ 2018/5/31 Java9からはメモ化再帰には使えなくなっています ※ 2019/2/15 なんか問題ない? Mapには、lambda式を使ったメソッドが多く追加されていますが、たとえばgetOrDefaultメソッドのようなlambda式を使わないメソッドも追加されていて、これも便利です。 そして、このようなlambda式を使わないメソッドも、間接的にはlambda構文サポートでの言語拡張のおかげです。 Mapはインタフェースなので、Java7までの構文でメソッドを追加しようとすると、Mapを実装しているすべてのクラスに新しいメソッドの実装を追加する必要がありました。そしてそれは現実的に不可能なので、今までMapなど

    Java8で強化されたMapと、書きやすくなったメモ化再帰 - きしだのHatena
    dann
    dann 2013/05/25
  • Java8のStreamの目的と書きやすさや可読性、並行処理の効果について - きしだのHatena

    さて、前回Java8のStreamの使い方をざっと見てみたのですけど、はてなブックマークのコメントで「Javaが使われている領域でこんな言語拡張は必要か」「可読性が損なわれていて単なる自己満足ではないか」のようなコメントがついていました。 実際どうなのか考えてみます。 Java8のStreamの目的 では、いまJavaが使われている領域を考えてみましょう。 Javaがいまよく使われているのは、クライアントサイドではなくサーバーサイドです。とくに、直接アクセスをうけつけるサーバーではなく、分散データ処理のためのHadoopやHBase、全文検索エンジンのLuceneなど、バックエンド処理を行う製品のシェアが大きいように見えます。 TwitterGoogleでも、Javaで書かれたバックエンドが動いているようです。Facebookも分析系ではJavaを使っているようです。 大手サービスでバッ

    Java8のStreamの目的と書きやすさや可読性、並行処理の効果について - きしだのHatena
    dann
    dann 2013/05/13
  • Java 8を関数型っぽく使うためのおまじない - きしだのHatena

    やあ、3月に延期になったとはいえ、Java 8リリースが具体化してきましたね。 もうこれで、Lambdaがはずれるとかいうことはなさそうです。 ところで、Java 8で関数型っぽいことができるようになってうれしいのですが、ちょっと記述が冗長です。ということで、短く書けるおまじない考えてみました。 Function型 さて、まずはJava 8で標準で入ったFunction型をみてみましょう。パッケージ名まで含めるとjava.util.funciton.Functionです。 こんな感じで使います。 Function<String, String> enclose = s -> "[" + s + "]"; Genericsでの型指定の最初が引数、あとが戻り値の型です。ここではStringをとってStringを返す関数としてencloseを定義しています。 これを呼び出そうとすると、こんな感じ

    Java 8を関数型っぽく使うためのおまじない - きしだのHatena
    dann
    dann 2013/05/01
  • Windows64bitでJNAでJavaからC++コード呼び出そうとしてハマった話 - きしだのHatena

    Javaからネイティブコード呼び出そうと思ったんです。 で、あんまりやる気もないんで、JNIじゃなくてJNAでやろうと思ったんです。 Windows7 64bitで。 ということで、まずMinGWインストールしたんです。 http://www.mingw.org/ んで、NetBeans7.1で「オプション」の「C/C++」のところの「ツールコレクション」で「ベースディレクトリ」に「MinGW\bin」を指定したんです。 それから「C/C++動的ライブラリ」プロジェクト作って、「newfile.c」って名前でこんなコード書きました。 #include <stdio.h> void hello(){ printf("test\n"); } それから「構築」ってやるとDLLができたんです。 あとはJavaからの呼び出しコード書こうと思って、まずはJNAのサイトからjna.jarをダウンロードし

    Windows64bitでJNAでJavaからC++コード呼び出そうとしてハマった話 - きしだのHatena
    dann
    dann 2012/06/23
  • MapReduceのパターン、アルゴリズム、そしてユースケース - きしだのHatena

    Ilya Katsov氏による「MapReduce Patterns, Algorithms, and Use Cases」の翻訳 http://highlyscalable.wordpress.com/2012/02/01/mapreduce-patterns/ (下書きに入れて推敲するつもりが、なんか公開されてしまっていたので、あとでいろいろ修正すると思います) February 1, 2012 この記事では、Webや科学論文で見られる異なるテクニックの体系的な視点を与えるために、数々のMapReduceパターンとアルゴリズムをまとめた。 いくつかの実用的なケーススタディも提供している。 すべての説明とコードスニペットでは、Mapper、Reducer、Combiner、Partitionaer、ソーティングにおいてHadoopの標準的なMapReduceモデルを利用します。このフレー

    MapReduceのパターン、アルゴリズム、そしてユースケース - きしだのHatena
  • Servlet3.0でcometチャットを作ってみる - きしだのはてな

    Cometとは? ブラウザベースのチャットをつくろうとする場合、以前は定期的にクライアントからリクエストを送信して更新を確認するという手法がとられました。そうすると、平均して更新間隔の1/2の遅延が発生し、更新がないときの問い合わせが無駄になるなど、ユーザーにもサーバーにもうれしい手法ではありませんでした。 そこで使われるようになったのがCometです。 Cometは、HTTPでクライアントからの接続への返答を保留して、サーバーからデータを送信する必要がでたときに返答を返すことで、サーバーからのリアルタイムデータ送信を行う手法の総称です。 Servlet3.0でのComet対応 Cometでは、クライアントからの接続を保持しつづけるので、これまでのServletの仕組みをつかって実現しようとすると、各接続にスレッドを割り当てることになり、スレッド数が多くなりすぎるため、多くのユーザーには対

    Servlet3.0でcometチャットを作ってみる - きしだのはてな
  • HadoopでのMapReduceを気軽に試すサンプル 2009-02-15 - きしだのはてな

    Googleの分散処理技術であるMapReduceを、そのオープン実装のHadoopを使って試したいと思っても、なんか設定がめんどくさそうで二の足を踏んじゃう人は多いはず。 そこで、並列計算をせずにサーバーなしで動かせるサンプルを作ってみた。 ただ、設定は不要なんだけど、Windowsの場合はCygwinがやっぱり必要で、PATHにCYGWIN_HOME\binを追加しておく必要がある。残念。 今回は、Javaソース中のimportされたクラスを数えるっていう処理をMapReduceでやってみる。 Hadoopは、こっからダウンロード。0.17.2.1を使った。 http://hadoop.apache.org/core/releases.html コンパイル・実行には、解凍してできる次のJARをクラスパスに追加しておく必要がある。 HADOOP_HOME/hadoop-0.17.2.1-

    HadoopでのMapReduceを気軽に試すサンプル 2009-02-15 - きしだのはてな
    dann
    dann 2009/02/16
  • 1