サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Appleイベント
qiita.com/opengl-8080
シンクロナイザとは 自身の状態を使ってスレッドの進行を制御(調停)するオブジェクトのことをシンクロナイザ (synchronizer) と呼ぶ。 例えば、次のような実装があったとする。 package synchronizer; import java.util.concurrent.TimeUnit; public class SynchronizerTest { public static void main(String[] args) { runThread(() -> { System.out.println("Thread 1 start"); System.out.println("Thread 1 end"); }); runThread(() -> { System.out.println("Thread 2 start"); System.out.println("Th
Mockito とは Java のテストでモックを簡単に扱えるようにするためのフレームワーク 指定されたクラスのモックを作成し、任意のメソッドをスタブ化して指定した値を返すようにしたり、モックのメソッドが期待した通りに呼び出されたかどうかを検証したりできる static や final なメソッドのモック化もできたりする(昔はできなかったはずだけど、いつの頃からかできるようになってた) モックの振る舞いの定義を型安全に定義できるのが大きな特徴(だと思う) 読み方は「もきーと」 環境 > gradle --version ------------------------------------------------------------ Gradle 7.4.2 ------------------------------------------------------------ Bu
ずっと Gradle 使ってたけど、お仕事で Maven をゴリゴリに使わないといけなくなったのでお勉強。 Maven とは Java のビルドツール。OSS。 Apache Ant に代わるものとして作られたらしい。 読み方は「メイヴン」または「メイヴェン」(自分はメイヴン派)。 結構昔からあるけど1、現在も開発が続けられているし、 Maven を採用しているプロジェクトも多い印象。 2020年現在、Java のビルドツールといえば Maven か Gradle が選ばれることが多い(と思う)。 2020年現在のメジャーバージョンは3。 Maven 1 と 2 は互換性が無いが、2 と 3 は互換性が保たれている。 環境 >mvn --version Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) Maven h
長くなるので、図の書き方はクラス図とシーケンス図だけで。 PlantUML とは テキストで UML 図を記述できる DSL の一種(たぶん) 本体は Java で書かれていて、単一の jar ファイルを落としてきてコマンドラインから実行できる plantuml/plantuml: Generate UML diagram from textual description ただし、実際に使うときは Visual Studio Code とかのプラグインを入れて実行することが多いと思う ライセンスは GPL v3 plantuml/license.txt at master · plantuml/plantuml 環境構築 OS は Windows10。 Java > java --version openjdk 11.0.6 2020-01-14 OpenJDK Runtime Envir
package sample.junit5; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.DisplayName; class JUnit5Test { @Test void fail() { Assertions.assertEquals(10, 8); } static class StaticClass { @Test void fail() { Assertions.assertEquals(10, 8); } } static class StaticTest { @Test void fail() { Assertions.assertEquals(10, 8); } } class InnerTest { @Te
自己紹介 opengl-8080 主に Qiita で技術メモを書いたり 関西の SIer 勤務 タイトルの元ネタ エンジニア用語の「完全に理解した」「何も分からない」「チョットデキル」は「ダニング・クルーガー効果」で簡単に説明ができます。これは一種の認知バイアスで能力の低い段階では自分の能力の低さを認識できないためです(過大評価しがち)。その反面で能力が高くなると過少評価しがちです。 pic.twitter.com/LGaJ4E5hWo — おちゃめ (@ochame_nako) April 8, 2019 ※スライドモードでは画像が表示されないみたいなので、スライドモードを解除して記事本文を直接参照してください。 お話しすること 「Gradle 完全に理解した」レベルの人が、「Gradle 何も分からん」レベルになるためのお話 自分自身、最近 Gradle のことが何も分からなくなって
※この記事には独自研究が含まれています。 流れるようなインターフェース (fluent interface) とは 流れるようなインタフェース | Martin Fowler's Bliki (ja) 流れるようなインターフェース(fluent interface)とは、メソッドチェーンを利用して DSL 的な仕組みを実現するテクニックのことを指す。 身近な例で言うと、 mockito や AssertJ、 jOOQ、そして Spring のコンフィギュレーションなどで利用されている。 protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests(authorizeRequests -> authorizeRequests .anyRequest().authenticated(
暗号解読 | サイモン・シン | Amazon サイモン・シンの「暗号解読」を読んでいたら、エニグマの仕組みについて説明があり、意外と実装できそうだったので作ってみた。 ソースコードは GitHub にあげています。 ※以降、識別がしやすいように平文は小文字、暗号文は大文字で表記している 単一換字式暗号 エニグマは、キーボードで入力された1文字を別の1文字に変換して暗号化する。 このように入力された文字を別の文字に変換する暗号を換字式暗号という。 同じ換字式暗号としては、シーザー暗号が有名。 シーザー暗号では、文字を一定数だけずらすことで暗号化する。 たとえば、3文字ずらすシーザー暗号では、「a -> X」「b -> Y」「c -> Z」「d -> A」のように文字を変換する。 3文字ずらすシーザー暗号の変換表 変換表が一種類しか存在しないので、シーザー暗号のような暗号は単一換字式暗号と呼
JCA (Java Cryptography Architecture) を学ぶための前提知識として、暗号技術の基本的なところを勉強したときのメモ。 JCA の使い方についてはこちら。 用語 暗号について説明する際に利用される用語について、先に整理しておく。 平文 暗号化されていないメッセージのこと。 暗号化 平文に暗号処理を施して、第三者から内容がわからないようにすること。 暗号化後のメッセージを暗号文と呼ぶ。 復号 暗号文を元の平文に戻す処理のこと。 「復号化」というと怒られる。 アリスとボブ 暗号について説明するときに慣例的に使用される仮の名前。 アルファベットの A, B, C... の順番で名前が考えられており、 Alice, Bob, Carol(もしくは Charlie)... のような感じになっている。 名前ごとに役割が決まっていて、アリスは送信者、ボブは受信者、キャロルは
JCA とは Java Cryptography Architecture(Java 暗号化アーキテクチャ)の略。 Java で暗号技術を使うための API、フレームワーク。 環境 openjdk 11.0.2 OS Windows 10 (64bit) 前提知識 JCA を使うには、暗号技術についての基礎知識(どういう技術があるのか、どういう仕組なのかとか)が必要になる。 これを知っておかないと、クラス構成の意味や正しい使い方が理解できない恐れがある。 最悪、実際の利用シチュエーションでは問題のある使い方をしてしまい、セキュリティホールを埋め込んでしまうかもしれない。 なので、まずはそもそもの暗号技術について勉強しておく必要がある。 暗号技術についての説明は こちら を参照。 事前定義している関数 検証には jshell を利用している。 よく利用する処理はあらかじめ関数として定義してお
plugins { id 'org.springframework.boot' version '2.1.4.RELEASE' id 'java' } apply plugin: 'io.spring.dependency-management' sourceCompatibility = '11' targetCompatibility = '11' compileJava.options.encoding = "UTF-8" repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' } package sample.jul; import org.slf4j.LoggerFactory; import org.sprin
非推奨の警告 最近の Gradle (自分の環境は、 4.10.2)で注釈処理を利用していると、次のようなメッセージが出る。 > gradle compileJava ... Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0. Use '--warning-mode all' to show the individual deprecation warnings. See https://docs.gradle.org/4.10.2/userguide/command_line_interface.html#sec:command_line_warnings Gradle 5.0 で非互換になる機能を利用しているので、詳細を確認したければ --warning-
Gradle のタスクについて、基礎から応用までいろいろメモ。 前提知識 Groovyを知らない人のためのbuild.gradle読み書き入門 - Qiita に書いていること Groovy の基本知識 各種シンタックスシュガーとか基本文法とか 環境 Gradle 5.0 Java openjdk 11.0.1 OS Windows 10 タスクの実体 Gradle でタスクを定義するには、次のように記述する。
自己紹介 opengl-8080 主に Qiita で技術メモを書いたり 関西の SIer 勤務 現場はまだまだ Java 8 が多い? Java 9 以降の変化に警戒 リリースサイクルの変更 サポートポリシーの変更 Java 8 でしのぐ その Java 8 も、来年1月で無償のサポートが終了 Java 11 からは LTS 付きの JDK がいくつか Oracle JDK AdoptOpenJDK Amazon Correto etc ? そろそろ本格的に Java 11 へ移行? 立ちはだかるモジュールシステム ビルド設定の不備に起因するエラーが増えた Java 8 以前 「パッケージ...は存在しません」 「シンボルを見つけられません」 java.lang.ClassNotFoundException java.lang.NoClassDefFoundError java.lang
|-build.gradle `-src/main/ |-java/ | |-module-info.java | `-foo/ | `-Foo.java `-resources/ `-resource.txt apply plugin: "application" sourceCompatibility = 11 targetCompatibility = 11 compileJava.options.encoding = "UTF-8" mainClassName = "foo/foo.Foo" compileJava { doFirst { options.compilerArgs = [ "--module-path", classpath.asPath ] classpath = files() } } run { doFirst { jvmArgs = [ "--module-
Gradle を使って Spring Boot 2 のマルチプロジェクトを作る方法。 環境 Java openjdk 10.0.2 2018-07-17 Gradle 4.10 Spring Boot 2.0.4 対象のマルチプロジェクト |-settings.gradle |-build.gradle | |-foo/ | |-build.gradle | : | `-bar/ |-build.gradle : buildscript { ext { springBootVersion = '2.0.4.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") }
>java -version java version "1.8.0_151" Java(TM) SE Runtime Environment (build 1.8.0_151-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode) Scene Builder JavaFX Scene Builder 8.4.1 Gluon が開発してるやつ JavaFX プロパティ JavaFX では、オブジェクトのプロパティを表現する方法として JavaBeans を拡張した JavaFX プロパティ というものが使用されている。 JavaFX プロパティでは、オブジェクトのプロパティを次のように実装する。 package sample.javafx.property; import javafx.beans.prop
Gradle の dependencies で指定する compile, api, implementation についての勉強メモ。 compile は非推奨 Gradle 3.4 で Java Library Plugin が追加されたことで、 dependencies で compile を使用することは非推奨となってたらしい(runtime, testCompile, testRuntime も)。 4.7 の Java Plugin の説明では、ガッツリ Deprecated と書かれている。 (4.6 のドキュメントだと Deprecated って書いてないけど、明確に非推奨となったのは最近?) 代わりに implementation と api を使用することが推奨されている。 compile と implementation の違い compile の場合 実装 |-set
今まで何となくで使ってた Jigsaw (モジュールシステム)をしっかり学ぶ。 環境 OS Windows 10 java 10.0.1 モジュールの解決 モジュールの解決 | java.lang.module (Java SE 10 & JDK 10 ) Java 9 で追加されたモジュールシステムでは、複数のパッケージやリソースをモジュールと呼ばれる単位でまとめることができるようになった。 モジュールでは、次のようなことを定義できる1。 どのパッケージを外部から見えるようにするか 他のどのモジュールに依存するか これらは module-info.java という専用のファイルを使い、次のように記述する。 この例では、 foo というモジュールを定義している。 そして、 exports foo.api で foo.api パッケージを外部に公開し、 requires bar で bar
Gradle で Java 9 から追加された Jigsaw (モジュール)を使う方法のメモ。 環境 OS Windows 10 4.7 Jigsaw のサポート状況 While Gradle version 4.7 doesn’t have first-class support for Java 9 modules yet, this guide shows you how to experiment with them before that support is complete. 【訳】 Gradle の version 4.7 では、 Java 9 のモジュールについてのファーストクラスでのサポートはまだありません。 このガイドでは、サポートが完了するまでの間にどのようにしたらモジュールを試せるのかについて説明します。 Building Java 9 Modules ということ
Spring Shell とは REPL ツールを簡単に作れるようにするためのフレームワーク Web アプリのようなリッチな UI が必要ない場合で、インタラクティブな CUI のみで十分な場合などに利用できる ベースには JLine が使用されている(jshell でも利用されているライブラリ) 環境 OS Windows 10 buildscript { ext { springBootVersion = '2.0.0.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } apply plugin: 'java' apply plugin: 'org
buildscript { ext { kotlin_version = '1.2.10' } repositories { mavenCentral() // kotlin 用 jcenter() // dokka 用 } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.dokka:dokka-gradle-plugin:0.9.15" } } apply plugin: 'kotlin' apply plugin: 'org.jetbrains.dokka' package sample.kdoc /** * クラスの説明. */ class TopLevelClass { /** * コンパニオンオブジェクトの説明
自己紹介 opengl-8080 主に Qiita で技術メモを書いたり 関西の SIer 勤務 Spring Boot とは Spring ベースのアプリケーションを簡単に作れるようにした仕組み・フレームワーク ビルド結果が単一の jar ファイルにまとめられる 単一 jar のメリット AP サーバーが同梱されているので、環境ごとに AP サーバーを用意する必要がない java -jar で起動できる楽さ 単一 jar のデメリット AP サーバーも含め全ての依存ライブラリを内包するため、ファイルサイズが大きくなる jar サイズをがんばって減らしてみた 結果 結果 サイズ比較 どうやったのか? Java で Hello World はどうやりますか? 1.コードを書く
Java で正規表現を使う方法を色々メモ。 String クラスの正規表現を使うメソッド String には正規表現を受け取るメソッドがいくつか存在する。 matches(String) replaceAll(String, String) replaceFirst(String, String) split(String, int) split(String) matches(String) package sample.regexp; public class Main { public static void main(String[] args) { String text = "abc123"; System.out.println(text.matches("[a-z0-9]+")); System.out.println(text.matches("[a-z]+")); }
Spring Security は 5.4 以降、設定の書き方に大幅な変更が入っています。 詳しくは @suke_masa さんの Spring Security 5.7でセキュリティ設定の書き方が大幅に変わる件 - Qiita を参照してください。 基礎・仕組み的な話 認証・認可の話 Remember-Me の話 CSRF の話 セッション管理の話 レスポンスヘッダーの話 メソッドセキュリティの話 CORS の話 Run-As の話 ACL の話 テストの話 番外編 Spring Security にできること・できないこと Spring MVC や Spring Boot で Spring Security を使う方法とか、なんかその辺の話。 Spring MVC との連携 リクエストパスの Matcher まずは普通に統合させてみる apply plugin: 'war' sourc
Java 9 の Project Jigsaw を勉強したときのメモ。 環境 OS Windows 10 >java --version java 9 Java(TM) SE Runtime Environment (build 9+181) Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode) |-main/ | |-class/ | `-src/ | |-module-info.java | `-sample/main/ | `-Main.java | `-sub/ |-class/ `-src/ |-module-info.java `-sample/sub/ |-api/ | `-Foo.java |-internal/ | `-FooImpl.java | `-FooFactory.java
Thymeleaf とは 読み方は「タイムリーフ」 テンプレートエンジンの1つ Spring Boot で使用が推奨されている 純粋な HTML としてテンプレートを記述することができる 動作環境 Spring Boot 上で Spring MVC のビューテンプレートエンジンとして動かすことを前提で調べる。 Hello World buildscript { repositories { mavenCentral() } dependencies { classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.5.6.RELEASE' } } apply plugin: 'java' apply plugin: 'org.springframework.boot' sourceCompatibility = '1.8'
package sample.javaparser; import com.github.javaparser.JavaParser; import com.github.javaparser.ast.CompilationUnit; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { Path source = Paths.get("src/main/java/sample/javaparser/Main.java"); try { CompilationUnit unit = JavaParser.parse(source); System.out.pr
Spring Security は 5.4 以降、設定の書き方に大幅な変更が入っています。 詳しくは @suke_masa さんの Spring Security 5.7でセキュリティ設定の書き方が大幅に変わる件 - Qiita を参照してください。 基礎・仕組み的な話 認証・認可の話 Remember-Me の話 CSRF の話 セッション管理の話 レスポンスヘッダーの話 メソッドセキュリティの話 CORS の話 Run-As の話 ACL の話 MVC, Boot との連携の話 番外編 Spring Security にできること・できないこと Spring Security のテスト Spring Security には、 JUnit によるテストをサポートする仕組みが用意されている。 例えば、テストのときに使用するユーザを固定したり、権限を指定したりすることができる。 Hello
次のページ
このページを最初にブックマークしてみませんか?
『@opengl-8080のマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く