エンジニア的なネタを毎週書くブログ

東京でWebサービスの開発をしています 【英語版やってみました】http://taichiw-e.hatenablog.com/

Java

【極論ですけど】JavaでforEachを使ったら負けだと思う

正直使い所がわからないんですよね、forEach. ログとかprintfとかする以外は… コレクションを更新するな 未だに時々見るのがこういうコード。 List<X> list = new ArrayList<>(); 適当なコレクション.forEach() .map(t -> list.add(t.getXXXX())); これとっても</x>…

"Rename Hackathon"をしてみました

チーム内で、お祭り的なイベントとして、"Rename Hackathon"というイベントをチーム内でしてみました。 ルール 参加者は30分間ひたすらプルリクエストを送り続ける 「リネーム」のみ許可。名前を変更する対象は、クラス、メソッド、変数名、パッケージ名 な…

JavaのHashMapは無限ループを引き起こす

知らんかった。理由がぼんやりはイメージ湧くけどしっくり来てないので後でちゃんと調べ…たい。(だいたいやらないパターン…)d.hatena.ne.jp www.atmarkit.co.jp wadahiro.hatenablog.com 回避方法はいろいろあるみたいだけど、ConcurrentHashMapをつかって…

ParallelStreamで外部接続しちゃいかんの? → 独自スレッドプールでParallelStreamを使ってみた

ParallelStreamでI/O待ち状態を作るとプール内のスレッドを食いつぶす? ParallelStreamはアプリ全体で共通で持っているスレッドプールを使う上、CPUのコア数分しかスレッドが無いのでI/O待ちが発生するようなものには使ってはいけない、という話を聞きまし…

SpringBootのアプリで、JMHを使ってみた

メソッドのちょっとした書き方の違いによる速度の計測をしたくて(Micro Benchmarkというらしい。対義語はMacro Benchmark)、JMHで計測をしてみました。JMHのオフィシャルページを見ると、mvn archetype:generate なるものが出てきて「なんじゃこりゃ?」だ…

Mavenで実行しているTestに割り当てるヒープを増やす方法

Maven Surefire Pluginを使う。 https://maven.apache.org/surefire/maven-surefire-plugin/ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine> </configuration> </plugin>ぐぐると、MAVEN_OPTSに書けばいい とか、…

"Fiber" で 100万スレッドが実行可能に!? - Project Valhalla とProject Loom : JavaDayTokyo 2018 参加レポート2 #JavaDayTokyo

Project XXX系の話について、Project ValhallaとProject Loomについて聞きました。 どちらも講演はDavid Buckさん*1。残念ながら、どちらもJava11には入らないので、LTSのリリースサイクルを考えるとまともにサービスで使えるのは早くて2021年… とはいえ、ど…

Java11について : JavaDayTokyo 2018 参加レポート1 #JavaDayTokyo

今年もJavaDayTokyoに参加させていただきました。今年の自分なりのテーマは、以下についての情報収集でした。 半年後にリリースされるLTSバージョンであるJava11の新機能 その他今後追加される機能について 特に、一昨年くらいから聞いているProject Valhall…

続・続・計算量を減らす:Newの回数を減らしたらもっと速く… なるどころか遅くなった!?

前回までのお話 taichiw.hatenablog.com たった一行、乱数の初期化をループの中からクラス生成時に移しただけで5倍も速くなったというお話でした。 じゃあ、クラス変数にしたらNewが減るじゃん!ということでstaticをつけてみました。 private static Rando…

続・計算量を減らす:ループ内の処理を短くすることは効果大

昨日、 taichiw.hatenablog.com なるものを書いたわけなんですが…小細工を考える前にコードそのものの見直しをすべきかも というお話。結論から言うと、一行変えただけで3分弱→30秒、5~6倍、驚きの速さにwwwww 変えたのこれだけ。 github.com従来、打席毎に…

「2番ペゲーロをみんなでやってみる」ために計算量と戦った話 #bpstudy

ありがたいことに、前回に引き続き今回も、Baseball Play Studyで発表させて頂く機会をいただきました。私の発表 Twitter, 私の発表近辺 twitter.comTwitter, 全体のまとめ togetter.com 計算量との戦い 今回、「シミュレータ」をグルグルまわして最適な打順…

Baseball Play Studyで発表してきたんだけど一応ささやかながら技術的な勉強もしているのよ という記録 #bpstudy

今年も野球バカの発表を Baseball Play Study 2017 冬 野球振返りスペシャル(BPStudy#124) - connpass でさせていただきました。 資料はこちら。*1 野球にご興味ある方には、是非内容も見てご一笑いただければ幸いなのですが、このブログでは「一応発表の過…

持論:Application Layerがシンプルなコードは読みやすい

DDDでは全てのビジネスロジックはドメインクラスに、とのことなので当然プログラムの肝はドメインクラスなのですが、コードの読みやすさは8割がたアプリケーションレイヤで決まると思っています。 Springで言えば、Controllerから呼ばれるServiceクラスの、…

『現場で役立つシステム設計の原則』 増田亨さん を読んだ。「データしか持たないデータクラスは作らない!」

こちらの本を読んででのレポートです。現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法【電子書籍】[ 増田亨 ]価格:3175円 (2017/11/4時点)複雑な業務ロジックは「適切な境界」で分離されていれば理解しやすくなる! …が…

(中身まだ無いです) spring-cloud-sockets と言うものを教えてもらったんだけど

GitHub - viniciusccarvalho/spring-cloud-sockets: Reactive socket communication for microservicesこれとSpring WebFlux の関係… というかそもそもWebFluxって何 的なのがさっぱりわかってないので後でちゃんと調べる調べる…… きっと。 多分これも関係あ…

Maven vs Java9のModule(Project Jigsaw) : 依存はどっちが勝つの? (追記:あんまりMaven関係なかった)

無事Moduleを使ったビルドがMavenでできたところで、本当にやりたかった検証へ。Mavenで複数プロジェクトが同一プロジェクトに依存していると、「どれか一つ」が使われることになります。 全て同じバージョンなら問題にならないのですが、それぞれ異なるバー…

MavenでJava9のModule(Project Jigsaw)を使ってみた

探し方が悪いのか、わざわざ書くほどのことでもないのか、mavenでJava9のmoduleを使うとどうなるか という記事が英語でも日本語でもWebで見つからなかったので、試してみました&備忘録としてブログに残しておきます。Project Jigsaw: Quick Start Guide こ…

JavaDayTokyo 2017 Report 2 : Reactive Stream

Reactiveなんちゃらというのがどうもわかりません。という私が、Pivotalの槙さんのお話を聞いて、随分わかったかも!という気持ちになったセッション。 改めてブログにまとめなおしてみるとやっぱりわかってないところが多々あるのですが、ひとまず忘れない…

JavaDayTokyo 2017 Report 1 : Java9 関連

今年もJavaDayTokyoに出席させていただきました。この記事ではJava9関連についてまとめます。Oracle的な目玉はJigsawとjshellでした。が、Jigsawは去年のJavaDayTokyoで集中的に話を聞いたけどあまり使いどころがないなぁ… と感じ、 jshellはあると便利だけ…

レガシーコードを JDK 8 でビルドしようとしたら "The system is out of resources" が出た話

今までJDK7でビルドされていたJavaプログラムをJDK8でビルドしようとしたところ、コンパイル時にこんなエラーが出ました。 The system is out of resources. Consult the following stack trace for details. java.lang.StackOverflowError at com.sun.tools…

Java Day Tokyo 2016 参加レポート2 マイクロサービスについて #javadaytokyo

今回のもう一つの参加目的、 「マイクロサービスの実践例と、支援するようなJavaのアーキテクチャについて」です。 モジュールによるマイクロサービス? はじめに、「1-A Java SE 9 Overview」より。 Project jigsaw によるModulanizeの目的の一つは、「開発…

Java Day Tokyo 2016 参加レポート1 今後のJavaの動向、特にJava9について #javadaytokyo

3年ぶりにJavaDayTokyoに参加しました。今回の自分のテーマは2つ・今後のJavaの動向、特にJava9について・マイクロサービスの実践例と、支援するようなJavaのアーキテクチャについて前者については、Java8導入直前にSan FranciscoでのJavaOneに参加させても…

IntelliJ IDEAハンズオンに参加しました #ideahandson #jbugj

サムライズムさん開催の、IntelliJ IDEAハンズオンに参加してきました。 今月はあと一回、3月24日にも開催されるようです。開催予定イベント一覧 - 株式会社サムライズム | Doorkeeper まとめも兼ねて、特に「へー!」と思ったものをご紹介させていただきま…

jshellを使ってみた

ちょっとしたプログラミングに、jshellを使ってみました。 jshellとは、Java9から導入される、簡易実行環境。REPLっていうらしい。Rubyでいうirbに相当します。 jshell JDK 9 quick peek 使ってみた感想。 良いところ ・ワンラインサクッと書いて動かせるの…

U+FFFF以上の文字ってなんや → サロゲートペアってなんや → Spring Web Services が言うことを聞きません! とかで一日潰れた話

表題のような感じなのですが、これまで理解が曖昧だったUnicodeとか何とかが今までよりわかったのでメモ。 尚、こちらのサイトを非常に参考にさせていただきました。 Unicodeについて コードポイントとは 文字コードとは 今日覚えた単語その一。Unicodeに限…

Javaでequalsを実装するとき -失敗するとcontainsが動かない-

hashCodeはもちろん実装しましょう。 で、 public class 俺のクラス { private String ore; public 俺のクラス (String ore) { this.ore = ore; } public boolean equals(俺のクラス o) { return ore.equals(o.getOre()); } ...} ってやったらダメ。一見まと…

org.junit.Assert.assertEquals って

中で比較してんのは equals じゃなくて == なのね…ただしStringだけはちゃんと比較してる模様。

Linux上で稼動するTomcatが使用しているスレッド数の調べ方

ls -l /proc/{Tomcatのプロセス番号}/task | wc -l でOK 参考:Linux上で稼動するTomcatが使用しているスレッド数は?

GroovyでJUnit用のテストフィクスチャを宣言する を試してみたのだけど

結論から言うと、思ってたのとは違ったかも。 こちらの後半で触れたとおり、テストフィクスチャの外部セットアップをした場合、可読性があまりいけてないという問題を現在抱えておりまして、その解決法として、Groovyがよさそうだという事でTryしてみたいと…

JavaOne2013 総括 : JavaOne2013 レポート6 #j1jp

まだ何件かセッションのレポートを上げる予定ですが、先に全体の総括を書かせていただきます。各セッションレポートはこちらから。 なぜ今回JavaOneに参加したか 今年の自分のテーマの一つが「技術力」。昨年はどちらかと言うと、アジャイルやスクラムがおも…