サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
体力トレーニング
mike-neck.hatenadiary.com
やんくさんに頼まれたので、誰かが書くだろうと思って待ってたけど誰も書かない Gradle の kotlin-dsl プラグインについて書きます。 @mike_neck mikeさんアドベントカレンダー書くネタあったりしませんか?👉👈https://t.co/ZDwmyBpbC0— やんく (@yy_yank) 2020年12月12日 まず、先日(2020/12/11)開催された JJUG ナイトセミナーにて、時間がないのでほぼ飛ばしてしまった、こちらの話題について解説します。 build.gradle(build.gradle) の中で if 文(Kotlin だと式ですね)とか for 文(こっちは式だったっけ?)を書くと、宣言的なコード(例えば依存ライブラリーの宣言など)と命令的なコードが混在してしまいます。そのため、ビルドスクリプトを読むために頭の切り替えが必要になるのでメンテナ
TL で Enumeration が使いづらいというツイートが流れてたら、鮮やかに解決するツイートも流れてきた。 なるほどなー、これ実際にはそのままダイレクトには書けないですけど、明示的にキャストしてあげれば書けますね for (String name : (Iterable<String>) request.getHeaderNames()::asIterator) { ... }https://t.co/NTL5iUFzL9— がくぞ (@gakuzzzz) November 28, 2019 Enumeration<String> enumeration = ...; Iterable<String> iterable = enumeration::asIterator; asIterator というメソッドが Java9 から生えていたらしい。 残念なことに 拡張 for 文のソー
表題の通りの勉強会に参加してきた。 jjug.doorkeeper.jp 今回も参加したときにはキャンセル待ちで、参加申し込みの段階で 50人待ちオーバー、2日前の時点で 45 人待ち、前日 26人待ちの状態でしたが、当日に参加できるようになりました。キャンセルしてくださった皆さんありがとうございます。 有志(僕)が togetter をまとめておりますので、当日のツイートはこちらを参照してください。 togetter.com VM言語の動き方・動かし方 by 宮川 拓 基本的なプログラミング言語のコンパイル→実行までの概要と、JVM言語でのプログラム実行の話と、宮川さんが作っているKinkを題材にJVM言語の実際の作り方の3本立ての話。わかりやすい資料で丁寧に解説されており、プログラマーになりたいと思っている人や、初心者の方にもこの資料はおすすめしたい。各テーマの区切りで、「CPU/OS
JSUG 勉強会 Spring Boot ベースの DDD サンプル徹底解説 に行ってきました。 jsug.doorkeeper.jp DDD については、考え方的にはわかっているところもあるのですが、実際のコードを見てがっかりしたり、コードの例が理想的すぎて現実味がないといったことから、理解から遠いところにある印象があったので、この勉強会のアイデアがあると増田さんがツイートしていたときから興味を持っていました。しかし、最近 jsug や jjug の勉強会の募集を開始した旨のメール/ツイートを見逃してしまうことがあり(ここ2〜3回見逃している)、この勉強会もその一つで実際に見逃していて、申し込んだときにはキャンセル待ちが発生していました。前世での徳が高かったのか、前日の夕方くらいになって参加できることになり、キャンセルしていただいた方には非常に感謝しております。 さて、当日のツイートなど
年末年始に書いていたコードで気になったことがあったので調べた。 結論だけ先に書くと、 try-with-resources に選択したリソースの順番の逆順になる。 Java9 以降で使えるようになった effevtively-final variables in try-with-resources の実行順がどうなるのかちゃんと理解していなかったが、 Java 言語仕様には書かれていた。 JEP-213 Milling Project Coin の 2 JLS(Java11 の) 14.20.3 引用すると次の箇所 Resources are initialized in left-to-right order. ... リソースは左から右の順番に初期化される Resources are closed in the reverse order from that in which the
これは Java Advent Calendar 2018 の 7 日目のエントリーです。 Java をラムダで動かす Lambda SDK を使って、チュートリアルどおりに作成します。以上。 そうではないですね。 今回やりたいのは AWS Lambda のカスタムランタイムで Java のカスタムランタイムで動く関数を動かすことです。これを会社の同僚に言ったところ、「おまえは何を言っているんだ」というような顔をされました。 おまえは何を言っているんだ 大事なことなのでもう一度言いますが、「 AWS のカスタムランタイムで Java のカスタムランタイムを動かしたい!」、これが今回のエントリーの目標です。 Java 9 のモジュールシステムと jlink によって、アプリケーションが利用する必要最低限のモジュールだけを選別したカスタムランタイムイメージが作れるようになりました。カスタムラン
普段 vim は h/j/k/l/d/x/0/$/:wq くらいしか使わないのですが、ひょんなことから Vim で Web サーバーがたてられると聞いたので、サーバーが建てられるなら、 http クライアントも動くのだろうと考えて、 ラムダで動くかどうか試してみることにしました。 使用する vim おそらく lambda を動かしている vm には、必要がないから vim は入ってないだろうと考え、 vim をビルドします。なお、このビルドは Amazon Linux 2 で実行しています。 yum install -y git ncurses-devel yum groupinstall "Development Tools" git clone https://github.com/vim/vim cd vim ./configure --with-features=normal --
Java 10 の Class Data Sharing で Spring Boot の起動を速くしてみます。 Class Data Sharing は異なるJVM上で同一のクラスの情報を共有する仕組みです。 Java 8 の時点ですでに組み込まれていましたが、コマーシャルな機能であったため、 使っている人は少ないと思います。 Java 10 からはこの機能が OpenJDK でも利用できるようになったため、早速試してみたいと思います。 Spring Boot アプリケーション 実行対象とするアプリケーションを作るために次のコマンドでプロジェクトを作ります gradle init --type=java-library curl https://start.spring.io/build.gradle \ -d dependencies=webflux,actuator,data-jpa,
infrastructor は Groovy でできたサーバープロビジョニングツールで、まあ、 Chef とか itamae とか Ansible の類のツールです。2018/06/07 現在のバージョンは 0.1.8 ということで、まだ開発が始まってから1年くらいの若いツールです。 github.com この記事では infrastructor のチュートリアルをやってみます。 インストール インストールは sdkman を使います。sdk は古いバージョンのものだと、新しい candidate の名前を判断できないので、最新版(2018/06/07 時点で 5.6.4+305)を使ってください。なお、 Java 9 以降にしているといろいろと警告がうるさいので(groovyさん…) Java 8 にしておきます。 $ sdk i infrastructor Downloading: i
Gradle4.6 がリリースされ、 JUnit5 に対応しました。以下にGradle から JUnit5 のテストを実行するための build.gradle を示しますが、特殊なことをするわけではありません。 build.gradle plugins { id 'java' } repositories { mavenCentral() } test { useJUnitPlatform { includeEngines 'junit-jupiter' } } dependencies { testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.1.0' testRuntime group: 'org.junit.jupiter', name: 'junit-jupiter-engine
JUnit4まででは増えすぎたテストを整理するために、スタティックなメンバークラスを作って整理してきたかと思います。 @RunWith(Enclosed.class) public class Foo { public static class Bar { @Test public void baz() {} } } JUnit5 ではネストしたクラスを用いる場合、 スタティックでないメンバークラスを用いるようになりました。 class Foo { class Bar { @Test void baz() {} } } このような構造のクラスの場合、メンバークラスからルートにあるクラスのフィールドにアクセスできます。 class Foo { private String name; @BeforeEach void setup() { this.name = "foo"; } @Neste
G* Advent Calendar 2017 の 6日目は groovy.lang.Closure のインスタンスを Kotlin で生成・取得する方法です。 Groovy! 3分くらいで読み終われます。 groovy.lang.Closure のインスタンスを Kotlin で生成・取得する方法です。Kotlin コードの中で Closure を作って Groovy に渡すということを指しています。 生成方法 早速ですが生成方法です。 ある A というクラスがあって、 Closure の中で用いるプロパティを A から取得したい場合は次のような関数を書きます。 fun <A> closure(a: A, cl: A.() -> Unit): Closure<Unit> = object: Closure<Unit>(a) { fun doCall() = this@closure.cl
Gradleは元々Groovyで書かれてたツールで、バージョン2の頃にほぼすべてをJavaに置き換えられたという経緯があるのですが、未だに古い一部の実装ではGroovyでスクリプトを書くことを前提にしている箇所があります(と断言していいかどうかは自信がない)。 maven プラグインの uploadArchives まわりもGroovyで書くことを前提としているフシがあり、 MavenDeployer -> MavenPom#project の後のブロックは delegate オブジェクトが groovy.lang.GroovyObject というまさに groovy なDSLになっている 先日、mavenにリリースするライブラリーのdslをkotlinで書いていたが、この部分のdslを最初次のように書いていた。入れ子構造になっている部分を書き始めようとした時に、どのように書くのかわからず
JUnit5でわりと便利だと思っているのが、JUnit5に標準でついてくる Assertions#assertAll と @TestFactory で返す Iterable<DynamicTest> です。 エンタープライズな現場でよく見かけるテストとして、こういうのがあるかと思います。 @Test void firstTest() { final Map<Long, UserEntity> map = getUsers(); final UserEntity u1 = map.get(1L); assumeTrue(u1 != null); assertEquals(1L, u1.getId()); assertEquals("ユーザー1", u1.getName()); assertEquals("test1@example.com", u1.getEmail()); final Us
Java Day Tokyo 2017に数年ぶりに参加しました。そのメモです。僕が参加したのは次のセッションです。 基調講演 Java 9 and Beyond: Java Renaissance in the Cloud Modular Development with JDK 9 Tuning G1GC Java SE 9のすすめ 緊急開催!Java技術メモ三銃士が語るエンジニア道 スペシャルパネルセッション - 海外Javaコミュニティ・エンジニアは今どんな活動をしているのか? 基調講演 Javaの現状と今後についてのポジショントーク。Java9/10についていろいろと情報がありましたが特に目新しい情報はありませんでした。目新しい情報がないということはJigsawがRejectされたことについても特に言及なしでした。Java9は7月にリリースできるのでしょうか…??? まあ、僕のよう
ディレクトリ構成やmodule-info.javaで少々ハマったので(10分)、ノート。 Java SE9から公式のやっと面倒くさくないHttp Clientが出るので試してみた。 試してみたのは jdk.incubator.httpclient モジュールの jdk.incubator.http.HttpClient とその関連クラス。 1. ディレクトリー構成 Java9からはモジュールを定義しておかないと、使いたいクラスがうまく利用できない。したがって、まずモジュール名を決定した後にモジュール名と同じ名前のディレクトリーを作り、その下に src ディレクトリーを作る。 まずモジュール名は com.example とした。 ディレクトリーを次のように作る。 root/ └── com.example └── src 2. モジュールの定義 src ディレクトリーの下に module-i
JSUGの勉強会に参加したので、そのメモ。 jsug.doorkeeper.jp 資料は公開されるだろうから、ここでしか聞けないことを中心にメモ(ツイート)したつもりだが、資料に盛り込まれている可能性は十分にある。なお、資料は以下の通り。 ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring from 亨 増田 www.slideshare.net 個人的な感想 ドメイン駆動のセッションや話は「ドメイン駆動はいいぞ」という感じで抽象的な話になりがちなことが多いのだが、今回はフレームワークが限定されたこともあってどのようなオブジェクトをどのように作っていくという具体的な話が聞けて満足だった ビジネスルールとドメインロジック ビジネスルール(契約・法令・明文化されていない商習慣)などがソフトウェア開発の分析対象(もちろん、ビジネスルールがゲームのルールだったりサー
JetBrainsユーザーグループにて「IntelliJとYouTrack」というタイトルにて発表してきましたが、グダグダな発表をしたのでちゃんとまとめた記事を書きます。 jbugj.connpass.com 要点 JetBrains系IDEでは、標準に付属しているツールを用いることで、スマートに作業ができます。(なお、一部のIDEについてはリポジトリーからインストールしないといけなさそうです(GoglandにはTaskManagementプラグインが付属していないようだった)) Task Management プラグイン ITS(イシュー管理システム)とIDEを連携させてTask と Context を管理できるプラグイン Task - イシュー管理システムのチケットに該当する、作業の単位をあらわす Context - 開いているファイルのカーソルの位置や、プロジェクトツリーの開いている
テストを流したらデータベースを起動していなくて、テストが全部コケさせることがよくあり、悩んでましたが、 @making さんに testcontainers を教えてもらったので試してみました(経緯は若干違う)。 github.com testcontainersはテスト時にのみ使う使い捨てのデータベースなどをテスト時だけにDockerを用いて起動するライブラリーです。コンテナの設定値などをプログラムで記述できるため、うまく使えば設定を誤っていたがためにテストが落ちるなどのトラブルを回避できるかもしれません。 概要 この記事で書く内容は次のとおり。 testcontainers をtest compileスコープで用いる JUnit4の ClassRule の Container オブジェクトにてコンテナを起動する ClassRule の Container から接続するデータベースの接続
年末にかけてJUnit5(junit-jupiter)をいじったのでまとめ。 使い方的な話はQiitaにある記事のほうが詳しいかもしれない… qiita.com qiita.com qiita.com qiita.com JUnit5ライブラリーの導入 テストコンパイルスコープにjunit-jupiter-api、テストランタイムにjunit-jupiter-engineを用いるようにする。 build.gradle repositories { mavenCentral() jcenter() } dependencies { testCompile "org.junit.jupiter:junit-jupiter-api:5.0.0-M3" testRuntime "org.junit.jupiter:junit-jupiter-engine:5.0.0-M3" } pom.xml <
職場のプロジェクトがメインで指定するIDEはeclipseですが、IntelliJ IDEAが大好きなのでIntelliJ IDEAで仕事しています。 するとどうしても問題が出てきます。 importの順番が異なるために無駄なdiffが出てくる コードスタイルが異なるのでレビューしづらい インスペクションのレベルが違うのでレビューしづらい/チェックしづらい importの順番 importの順番は気合で直します(嘘) eclipseからコードスタイルフォーマットを出力してIntelliJで取り込んでもImportの順番は出力できないようです。 したがって下のQiitaの記事を参考に Code Style > Java > Impors > Import Layout にてImportの順番をeclipseのそれに合わせます。 qiita.com しかし、時折ですが、eclipseで書いたコ
結構前のことですが、 sdkman でJavaをインストールできるようになったとのことで、Javaの更新をsdkmanでやるようにしてみた。 sdk list java まず、どのバージョンのJavaが利用できるのか確認してみます。 $ sdk list java ================================================================================ Available Java Versions ================================================================================ 8u111 7u79 6u65 =================================================================
KuickCheckを作った時にKotlinのリフレクションを一通り触ったが、完全に忘れてしまったのであらためてメモ。 ここではクラスを表すKClassとそのプロパティ、およびそれらが適用できるクラスをまとめてある。 Kotlinコンパイラーが生成するクラス KClassのプロパティなどについて確認する前に、Kotlinコンパイラーが生成するクラスについてまとめておきます。 クイズ 次のKotlinファイルSample.ktをコンパイルして生成されるクラスの数はいくつか。 @file:JvmName("Comp") import java.io.Closeable fun foo(bar: String): String = bar.toUpperCase() val baz: Int = foo("baz").length class Qux { val prop: String = "
FizzBuzzをするのにTensorFlowというネタツイートがあったので、「機械学習 FizzBuzz」で検索したらすでにいくつかあったので、真似してみたくなった。ちなみに機械学習のことは全然わかってません。 qiita.com blog.amedama.jp IT会社面接官:「数字を列挙し、3の倍数ならfizz、5の倍数ならbuzz、15の倍数ならfizzbuzzを出力するプログラムを書いてください。」 面接を受けている人:「では、まずTensorFlowをインポートします…」https://t.co/UNk2jH5rfn— Graham Neubig (@neubig) 2016年5月24日 github.com ライブラリー/フレームワーク EncogというJavaの機械学習ライブラリーを使いました(TensorFlow使いたかった…)。 EncogはJeff Heatonという
動機 金曜日くらいにPlay-Slickに入門しようと、ドキュメントを漁りつつ一からいじっていたのですが、Slickがそもそもまったくわからないので(Playも当然まったくわかっていませんが…)、Slick3.1のチュートリアルをやろうと思い立ちました。 Getting started ところで、activatorで入門用のプロジェクトを作ると、サンプルコードがすでに完成していて、チュートリアルをやりたいのにチュートリアルがないということがよくあります。 たとえば、Play-Scalaをはじめてやりたいであろう人用のactivatorのテンプレート、play-scala-introですが、その紹介ページにこんなコメントが有ります。 www.typesafe.com Where is the tutorial? (私訳) で、チュートリアルはどこにあるん? これは、Hello Slick(S
POSTDというサイトに次のようなエントリーがあった。 postd.cc で、この記事の中でParsecライブラリーの紹介としてJSONパーサーを作るという動画が紹介されていた。 www.youtube.com Haskellをまだ始めたばかりなので、練習になるかなと思って、動画を見ながらJSONパーサーを書いてみた。 以下、上記の動画の再現 1.まず文字列"true"にマッチングするパーサーを作る import Text.ParserCombinators.Parsec hiding((<|>, many) import Control.Applicative import Control.Monad matchTrue:: Parser String matchTrue = string "true" この関数を文字列に対して適用すると文字列が"true"だった場合はRightが返され
久々にパソコンの前に座ったので、リハビリ代わりに先月にリリースされたGradle2.10のリリースノート意訳というか、中途半端に翻訳した。分量が多かったので訳してないところがありますが、引き続き入院してるので、翻訳の続きはありません。 オリジナル(英文)はこちら 新機能と変更 ネイティブコンパイルのパフォーマンス改善 Gradleはインクリメンタルビルドする場合に、すべての入力値、入力ファイル、出力ファイルを必要としている。それによってGradleは入出力ファイルの変更がない場合にタスクをスキップできる。 ネイティブコンパイル系のタスクの場合、ディレクトリー構造も考慮しているため、インクルードされるディレクトリーが多い場合や、ルートディレクトリーがインクルードされている場合にパフォーマンス上の問題が発生した。UP-TO-DATEチェックを速くするために、以下の変更をおこなった。 インクルー
これはほとんどネタです。 ここ最近、マルクスを再読していました。貧富の格差、貧困の問題とかワーキングプアーなどがニュースになっていることを見るにつけ、マルクスが気になっていたからです。マルクスが資本論を書くための準備していた時期の『経済学・哲学草稿』などに、貧富の格差、ワーキングプアーといった今とまったく同じ問題が記述されていたので、マルクス経済学は超克したとかいいつつ、実は全く何も超克していないのだと思いつつ有ります。 時折、話題になる労働に関するテーマなどがあり、それらについてもマルクスの著書ですでに述べられていることがあったりします。 例えば、エンジニアが勉強し続けることについてです。 今年、このことの元になった記事はこれだと思います。 101回死んだエンジニア: 業務時間外で勉強をしなければいけない理由 簡単にまとめると、技術者は技術だけが武器であり、それが通用しなくなると歪んだ環
Gradle3におけるJavaプロジェクトのビルド入門の一連の記事ではJVM component modelによるJavaプロジェクトのビルド方法について紹介してきた。その過程でJDK9より導入されるJigsawとの関連も指摘しておいた。 この記事では実践的なJVM component modelによるJavaプロジェクトのビルドについて、(簡単ではあるが)若干複雑な例を紹介していく。例題としてはJava8で随分とおなじみになっているOptionalの再実装をおこなう。 コンポーネントの設計 Optionalを使う場合、主に使われるのが次のような機能群である。 例外(ライブラリー名:exceptions) - Javaなので、完全に関数型スタイルでのプログラミングができないため、Optional自体にmapやfmapなどのメソッドを定義することになる。その際にnullを渡してしまった場合な
次のページ
このページを最初にブックマークしてみませんか?
『mike-neckのブログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く