タグ

javaに関するkrrrrのブックマーク (124)

  • Concurrency Utilitiesの「再」まとめ - Java8対応版 - argius note

    以前、このような記事を書きました。 Concurrency Utilitiesを使った並列処理・マルチスレッドのおさらい (2013-12-26) 前回の内容は、Concurrency UtilitiesだけでなくJavaのマルチスレッドの話も一部含んでいましたが、今回は、Concurrency Utilitiesだけにフォーカスして、全体が分かるように整理してまとめ直しました。 目次 概要 準備 タスク・フレームワーク (Executor) 同期キュー シンクロナイザー 並行処理コレクション 時間単位 アトミック値型とアトミック操作 ロック・フレームワーク 概要 今回は、Concurrency UtilitiesのAPIをいくつかのグループに分類し、それぞれのグループの主要な機能を「広く浅く」紹介する、という形式でまとめています。 パッケージ単位で分け、それからjava.util.con

    Concurrency Utilitiesの「再」まとめ - Java8対応版 - argius note
    krrrr
    krrrr 2015/06/07
  • Javaバイトコード入門

    1. わかる !Java バイトコード ― 30 分でわからない ?Java バイトコード入門 筑波大学大学院 システム情報工学研究科 博士後期課程 水島宏太 2. 自己紹介とか Twitter: @kmizu はてな : id:kmizushima github: http://github.com/kmizu/ 大学院生 構文解析の研究とかやってます 特に Packrat Parsing Scala 好き Scala の布教活動をあちこちでやったり JVM 好き JVM 上で動作する言語処理系 Onion を開発 3. Agenda プログラミング言語としての Java バイトコード マシンモデル 型システム 命令セット クラスファイルベリファイア ベリファイアがはじく操作の例 簡単なプログラムを javap で逆アセンブルする 役に立つかもしれない javap のオプション解説 クラ

    Javaバイトコード入門
    krrrr
    krrrr 2015/06/07
  • Javaで1行ずつテキストデータを読み込むイディオムの変遷 - argius note

    テキストデータを読み込む場合、言語にかかわらず1行ずつ読み込んで処理します。ここではこのイディオムを"read-lines"と呼ぶことにします。 スクリプト言語なんかだと大抵、最初からforeachで済んでしまっていたりしますが、初期のJavaではちょっと面倒な手順が必要でした。 新しいバージョンではだいぶ簡単簡潔に書けるようになりましたが、今度はたくさんありすぎて、どれがなんなのかが良くわからなくなっています(大袈裟)。 そこで今回は、"read-lines"の変遷についてまとめてみました。 最近Javaを始めた方がバージョンが古い時に書かれたソースコードを読むときに役に立つ...かも知れません。 目次 基 BufferedReader (Java1.1~) Scannerと拡張for文 (Java5~) java.nio.file.Filesとtry-with-resources(J

    Javaで1行ずつテキストデータを読み込むイディオムの変遷 - argius note
    krrrr
    krrrr 2015/06/07
    “CloseShieldInputStream”
  • #渋谷Java に行ってきた - mike-neckのブログ

    表題のとおりです。 shibuya-java.connpass.com で、発表してきました。 On stream-lazy-computation from mike_neck Mochida www.slideshare.net 実際のプレゼンの内容はもう少し丁寧かつ雑な資料でやりました。 JavaのStreamで学ぶ遅延処理実装パターン from mike_neck Mochida www.slideshare.net で、発表者で欠席した人や怪我でこれない人がいたので、勢いで作った発表もしました。 gradle2.4のルールベースモデルコンフィギュレーション from mike_neck Mochida www.slideshare.net 発表の元ネタは以前の mike-neck.hatenadiary.com と mike-neck.hatenadiary.com です。 La

    #渋谷Java に行ってきた - mike-neckのブログ
    krrrr
    krrrr 2015/05/31
  • Server::Starter を Java で利用する方法。または、System.inheritedChannel() の挙動について - tokuhirom's blog

    Server::Starter を Java でも使いたいなあ、そうすれば LL の場合と同じような運用ができるなあ、という要望をたまに稀によく聞きます。 そんなときに決まって返される答えは、fdopen できないから無理じゃないすかね。。 ということである。 SO_REUSEPORT しよう SO_REUSEPORT なら、java でもちょっとの工夫で使えるんじゃないの? っていう説が出てくる。 で、頑張れば jetty で SO_REUSEPORT 使っていい感じに実装できそうだな、ということはわかって、サンプルコードも書いてみた。 しかし、実装してから指摘されたのだが、弊社では CentOS 6 が標準となっており、CentOS 7 が来るのはいつになるのかさっぱりわからない。 つまり、とりあえずしばらくの間は実践で使える可能性がほぼないということだ。 とりあえず、出来たものは出来

    krrrr
    krrrr 2015/05/27
  • アノテーションプロセッサで AST 変換 - Lombok を参考にして変数の型をコンパイル時に変更 - なんとなくな Developer のメモ

    Java のボイラープレートを補完してくれる Lombok の処理内容が興味深かったので、これを真似た簡単なサンプルプログラムを作ってみました。 Lombok 1.14.8 ソースは http://github.com/fits/try_samples/tree/master/blog/20150117/ はじめに Lombok はアノテーションプロセッサを使って AST (抽象構文木) の変換を実施しています。 Lombok の使い方 まずは Lombok を使って下記のような Java ソースのコンパイルを試してみます。 val や @Value が Lombok の機能を使用している箇所です。 Sample.java import lombok.val; import lombok.Value; public class Sample { public static void mai

    アノテーションプロセッサで AST 変換 - Lombok を参考にして変数の型をコンパイル時に変更 - なんとなくな Developer のメモ
  • Java 8 Streamの挙動を調べたった - mike-neckのブログ

    表記の件について、JavaのListから作るStreamは操作中に変更をするとその後の挙動についてなんら結果を保証しないので、ListからStreamを作った場合は、変更をしないか、あるいは不可変なListに変換してから作るのが良いです。 と、書いておいてからなのですが、こんなツイート見かけました。 これは思わぬ結果 ステートフルな中間操作のsorted()かますと 最終的にListは空になるけどforEachで全て出力される。 なんでだろう? これで今日も眠れないw pic.twitter.com/864kLHyK8K— Yucchi (@Yucchi_jp) May 8, 2015 peekでListの要素を削除するというやってはいけないパターンです。 @Test public void intList() { List<Integer> list = IntStream.range(

    Java 8 Streamの挙動を調べたった - mike-neckのブログ
    krrrr
    krrrr 2015/05/09
  • JavaのString生成方法がボトルネックになっていた話 - WAF Tech Blog | クラウド型 WAFサービス Scutum

    はじめに 先日、私たちが開発しているクラウド型WAFサービス、Scutum(スキュータム)において、予想していなかった箇所の修正によってサーバの負荷が大幅に減るということがありました。原因はこのエントリのタイトルにもあるように、Stringクラスのインスタンスを生成する際の方法にありました。 Stringクラスのコンストラクタとcharset Stringクラスにはいくつかのコンストラクタが用意されています。我々が使っていたのはString(byte[] bytes, String charsetName)です。2つめの引数で、"MS932"や"UTF-8"のような文字集合(以下charset)を明示的に指定するものです。 ScutumのようなWAF(Web Application Firewall)は通常のウェブアプリケーションとは異なり、起動している間にさまざまなcharsetを扱うこ

    JavaのString生成方法がボトルネックになっていた話 - WAF Tech Blog | クラウド型 WAFサービス Scutum
    krrrr
    krrrr 2015/05/07
  • RxJavaでAPIクライアントを作る - Qiita

    RxJavaのモチベーション HTTPクライアントは今ならOkHttp一択なのですが、APIクライアントには非同期に通信をおこなってほしいものですが、非同期処理をおこなうAndroidフレームワークのAsyncTaskやAsyncTaskLoaderは正直使いやすいとは言えません。Volleyは設計は綺麗で拡張もしやすかったのですが、Googleとしての立ち位置がよく分からなかったので OkHttp + 非同期処理を担う何か を探していました。 それでPromiseライクなBoltsと迷ったのですが、個人的な好みでRxJavaを採用してみました。 APIクライアントの設計 以前書いたもの の参考実装としてライブラリを書いてみました。 Octodroid リソースへのアクセスの仕方は以下のようになっています。 // GET /users/rejasupotaro GitHub.client(

    RxJavaでAPIクライアントを作る - Qiita
    krrrr
    krrrr 2015/04/22
  • RxJavaでモデルを取得、キャッシュ、ページネーション、そして - Qiita

    これらの一連の実装をどうするか考えていた。 前提 REST APIを使っている APIはデータモデル+メタデータを返す モデルはメモリキャッシュ、ファイルキャッシュにも対応する モデルとレスポンスの形式 メタデータの中にはページ情報など、サーバ/クライアントでデータをやりとりするのに必要なデータが入っている。 メタデータはモデルの外に持たせたいので、モデル層をResponseクラスでラップした。ここにページネーションのしくみを持たせることにする。 public class Response<T> { private T result; private Extra extra; private Observable<Response<T>> next; public T getResult() { return result; } public Extra getExtra() { retu

    RxJavaでモデルを取得、キャッシュ、ページネーション、そして - Qiita
    krrrr
    krrrr 2015/04/22
  • javaのロガーが多すぎて訳が解らないので整理してみました - 文系プログラマによるTIPSブログ

    最初は誰しもがファッ!?となるんですよねロガーって。 いずれtree-tipsで公開しようと思っている、solrのプロジェクトを今作っています。mavenでjarを管理している訳ですが・・ なんだこのロガーの数は!! commons-logging、log4j、slf4j-api、jcl-over-slf4j、logback-classic・・・・、こいつら一体何が違うんだ!どう使い分けるんだ!そもそも必要なのか!?となりました。 昔はcommons-logging+log4jというのがトレンドだった訳ですが、今はslf4j+logbackがトレンドになり、jdkも1.4から1.7になり、これらトレンドが推移する過程で、いろいろなjarが旧式に依存してしまい、旧式依存を解決するためにアダプタが登場し始め、mavenでjarを収集すると大抵両方入ってしまい、カオスになっているのです。 特にs

    javaのロガーが多すぎて訳が解らないので整理してみました - 文系プログラマによるTIPSブログ
  • 心地良すぎるDependency Injectionライブラリ Guice - nodchipの日記

    etc9さんの"心地良すぎるモックライブラリ Mockito"がとても勉強になったので、似たような形式でGuiceの紹介をしてみます。 Dependency Injection きちんと勉強したわけではないので間違っていたらごめんなさい。Dependency Injection (DI)はユニットテストを書きやすくするためのクラスの書き方の一つです。クラスAが内部でクラスBを使うとき、Aの中でBをnewする代わりに、AのコンストラクタやsetterでBのインスタンスを外部から渡せるしておきます。こうしておくとAのユニットテストを書くとき、Bの動作を真似るモックオブジェクトを渡すことで、Bの中身を考えずにAをのテストを書けるようになります。これはAとBの動作を同時に考えてテストを書くよりずっと楽だと思います。依存性注入とかレポジトリパターンとも呼ばれているっぽいです。 GuiceはDIの補助

    心地良すぎるDependency Injectionライブラリ Guice - nodchipの日記
    krrrr
    krrrr 2015/04/10
  • Double.parseDouble("2.2250738585072012e-308") - a-sanの日記

    実際のソースを見て、解析してみました。 // 問題のコード Double.parseDouble("2.2250738585072012e-308"); これが問題のコードですが、Double.parseDouble()の中身は以下のようになっています。 import sun.misc.FloatingDecimal; public final class Double extends Number implements Comparable<Double> { ... public static double parseDouble(String s) throws NumberFormatException { return FloatingDecimal.readJavaFormatString(s).doubleValue(); } ... } 実際にはsun.misc.Float

    Double.parseDouble("2.2250738585072012e-308") - a-sanの日記
    krrrr
    krrrr 2015/01/21
    “Double.parseDouble("2.2250738585072012e-308")”
  • Java 8 Date and Time API の実践的なチートシートできたよ~ - tokuhirom's blog

    Java8 を使いこなそうとすると、やはり Date and Time API も使いこなす必要がでてくる。 我々 Perl 畑出身の人間からすると、Perl の世界では DateTime/Time::Piece というモジュールが一般的に日付の計算に使われており、iandeth.さんのブログエントリがチートシートとしてよく知られている。このいつも見慣れたエントリの体裁で、一般的な日時の操作を実用的に教えてくれるエントリが欲しくて書いた。 junit のテストケースとして書いてあるので、適当にコピペして QuickJUnit で動作確認するとよい(assertはしてないけど)。 なにかあれば教えていただけるとありがたいです。

  • Concurrent Mark-Sweep Garbage Collection #jjug_ccc

    Re-Introduction: Concurrent Mark-Sweep Garbage Collection @ Japan JUG Conference.Read less

    Concurrent Mark-Sweep Garbage Collection #jjug_ccc
    krrrr
    krrrr 2014/11/17
  • Java SE 7 (1) - 文字列switchのからくり - argius note

    遅れ馳せ乍ら、Java7について自分なりにまとめてみます。 最初は概論から入るのが定石でありましょうが、現状は何時投稿できるか分からない状況ですので、小出しにしていくことにします。 まずは、"Strings in switch Statements"から。 これは珍しくピーンと来たので、確認をしてみます。 final class Main { void f(String s) { switch (s) { case "aa": System.out.println("1"); break; case "bb": System.out.println("2"); break; default: } } } これをコンパイルして、javapでディスアセンブルしてみます。 Compiled from "1.java" final class Main { Main(); Code: 0: alo

    Java SE 7 (1) - 文字列switchのからくり - argius note
    krrrr
    krrrr 2014/11/06
  • Java 起動(Launcher)の仕組み - unnamed

    ※:この記事は下書き中に文ががっつり消えたため、知らずに部分的に端折ってるところがあるかもしれません。(´;ω;`) Java、すなわち JVM (HotSpot) を立ち上げた時、どういった処理が行われているのでしょうか。正確に知りたい場合は OpenJDK のソースコードを読むのが最も確実ですが、概要レベルでどのような処理が行われていて、それがソースコードのどのあたりに書かれているのか案内があった方がすんなりと理解できます。と言うわけで、自分用のメモ書きをちょっとだけ整理してここで公開してみます。 なお、自分の理解をベースに記述しているので間違いが含まれている可能性があります。見つけた場合はそっとコメントか @sugarlife にお教え頂けると大変喜びます。 Java の動作概要について Java、特に HotSpot の動作概要については、OpenJDK コミュニティによって「H

    Java 起動(Launcher)の仕組み - unnamed
    krrrr
    krrrr 2014/11/04
  • Java で統計とか機械学習とか自然言語処理とかをやりたい ときに役立つライブラリ達

    BizReach 社にお邪魔して発表したときのスライドです。

    Java で統計とか機械学習とか自然言語処理とかをやりたい ときに役立つライブラリ達
  • ぬるぽ — 裏紙

    プリミティブラッパーをプリミティブにアンボクシングするときにぬるぽっ! 普通に数字の足し算とかしててぬるぽが出たらこれを疑います。

    krrrr
    krrrr 2014/09/26
  • Log4j2を試してみる - CLOVER🍀

    Javaのロギングライブラリですが、 java.util.logging(JUL) Log4j Commons Logging(+Log4j) SLF4J+Logback と種々あり、最近ではSLF4J+Logbackが主流な気がするのですが、自分の周りでは長らくLog4j、またはCommons Loggin越しにLog4jのパターンが多かったです。というか、今もですが。 Log4jの上に、自作のロギングライブラリを作ることになることも、多々…。 まあ、そんな感じで昨今のJavaのロギング事情にだいぶ置いていかれているのですが、ここでちょっとLog4jの後継であるLog4j2を試してみたくなりまして。 Apache Log4j2 http://logging.apache.org/log4j/2.x/ なんでも、パフォーマンスがかなり良くて有名?らしいのですが。 The Logging O

    Log4j2を試してみる - CLOVER🍀