2020-01-01から1年間の記事一覧

InaccessibleObjectException の発生原因とその対処方

リフレクションで発生する InaccessibleObjectException リフレクションを許可する リフレクションで発生する InaccessibleObjectException Java9 で導入された JavaPlatform Module System によりリフレクションを利用するフレームワークで以下のような Ina…

Kotlin製Webアプリケーションフレームワーク Ktor の使い方4 〜ExposedでDBアクセス〜

入力フォームを外部ファイルに抜き出す Exposed でデータベースアクセス データベース操作 データベース操作 実行 blog1.mammb.com の続きです。 入力フォームを外部ファイルに抜き出す 前回の続きから作業しますが、すこしゴチャゴチャしてきたので、入力フ…

Kotlin製Webアプリケーションフレームワーク Ktor の使い方3 〜リクエストパラメータとJSONレスポンス〜

リクエストパスとパラメータ 入力フォームを作成する POST リクエストを処理する JSON を返却する blog1.mammb.com の続きです。 リクエストパスとパラメータ 前回までの例では、Routing にて単純な GET リクエストを処理しました。 POST など他のメソッドを…

Kotlin製Webアプリケーションフレームワーク Ktor の使い方2 〜テンプレートエンジンとHTML DSL〜

FreeMarker で HTML を生成する 静的コンテンツを扱う HTML DSL blog1.mammb.com の続きです。 FreeMarker で HTML を生成する Ktor には、テンプレートエンジン Apache FreeMarker のサポートがあり、簡単に HTML ページを生成できます。 最初に、ktor-fr…

Kotlin製Webアプリケーションフレームワーク Ktor の使い方1 〜プロジェクト作成から Hello World 〜

Ktor とは プロジェクト作成 Hello World Application オブジェクト アプリケーション設定値の抽出 Ktor とは Ktor は、Kotlin の Web アプリケーションフレームワークです。 Kotlin の本山である JetBrains 社により開発が続けられており、2018年末の v1.0 …

macOS で発生する「開発元を検証できないため開けません。」

Gradle のツールチェーンサポートで古いJDKを指定したら実行できなかった。 Kotlin DSL だと以下のような指定。 java { toolchain { languageVersion.set(JavaLanguageVersion.of(9)) } } 「開発元を検証できないため開けません。」となり「キャンセル」しか…

Gradle Groovy DSL から Kotlin DSL への乗り換え方

はじめに スクリプトファイルの命名 Kotlin と Groovy の言語上の考慮事項 Gradle init によるプロジェクト生成 プラグインの適用 プラグインの設定 タスクの構成 タスクの作成 依存の指定 よくある設定 はじめに Gradle 5.0 よりGradle Kotlin DSL が提供さ…

Gradle 6.7 で追加された Toolchain サポート

JVM プロジェクトのツールチェーンサポート ツールチェーン の利用 ツールチェーンのカスタマイズ まとめ JVM プロジェクトのツールチェーンサポート Gradle 6.7 にて New JVM ecosystem features として JVM プロジェクトのツールチェーンサポートが追加さ…

Gradle 6.7 で変更になった gradle init タスクのプロジェクトレイアウトとその使い方

はじめに 旧来のプロジェクト構成 新しいプロジェクト構成 application and library projects buildSrc はじめに 組み込みのタスク gradle init を使うことで新しい Gradle プロジェクトを簡単に作成できます。 Gradle 6.7 では、新しい推奨構成でプロジェク…

Technology Radar Volume 23 要約

はじめに Techniques 1. dependency drift fitness function 2. Run cost as architecture fitness function 3. security policy as code 4. Tailored service templates Platforms Tools 42. Airflow 43. Bitrise 44. Dependabot 45. Helm 46. Trivy Langua…

Java で touch する

ファイルのタイムスタンプを変えるには Files.setLastModifiedTime() が使える。 public static void touch(final Path path) throws IOException { if (Files.exists(path)) { Files.setLastModifiedTime(path, FileTime.from(Instant.now())); } else { Fi…

Docker でRDB環境構築盛り合わせ

 はじめに PostgreSQL PostgreSQL への接続 ロールの作成 データベースの作成 テーブルの作成と操作 オブジェクトの削除 psql の代表的なメタコマンド MariaDB MariaDB への接続 ユーザの作成 データベースの作成 テーブルの作成と操作 オブジェクトの削除 …

Java によるネットワークプログラミングの基礎知識

 はじめに プログラミングモデルの変遷 ソケット ソケットによるサーバ実装 スレッドプールを利用したサーバ実装 ブロッキングI/Oの課題 ノンブロッキングI/O I/O多重化(multiplexing) バッファ操作 I/O多重化を使ったサーバ実装 非同期チャネル NIO2 によ…

実行時の Java バージョン取得方法

Java8 以前 システムプロパティから java.version のキーで取得できます。 String version = System.getProperty("java.version"); Java9からは表記が変わるので注意が必要です。 Java8 まで:1.6.0_23、1.7.0、1.7.0_80、1.8.0_211 Java9 から:9.0.1、11.0…

EditorConfig でエディタのスタイルを統一する

EditorConfig とは 対応IDE/エディタ .editorconfig の配置場所 .editorconfig の書式 .editorconfig による設定 EditorConfig とは .editorconfig というファイルにインデントのスタイルや改行コード、文字エンコーディングの指定を書いておくことで、各種I…

nginx のリバースプロキシ設定

はじめに upstream コンテキストによるバックエンドの指定 リクエストのバランシング タイムアウト リクエストヘッダの追加 バックエンドへの Keep-Alive 接続 はじめに nginx の利用用途として多いリバースプロキシの設定まとめです。 nginx の導入方法につ…

Docker による nginx の導入と基本設定

はじめに nginx のプロセス docker で nginx を導入する nginx の構成 nginx コマンド nginx の基本設定 location ディレクティブのマッチング アクセス制限を行う はじめに Docker による nginx の導入と、nginx の基本設定についての説明です。 nginx のプ…

Java でシンプルなインタプリタを実装する

はじめに プログラミング言語 インタプリタ 字句解析器 Lexer 抽象構文木を生成する Parser 評価機 Evaluator まとめ はじめに Writing An Interpreter In Go を元に、Java を使って 1,000行 以下でインタプリタを作ります。 Go言語でつくるインタプリタ作者…

【Modern Java】Java15で正式リリースとなったテキストブロック(JEP 378: Text Blocks)

JEP 378: Text Blocks テキストブロックの使い方 テキストブロックのインデントの扱い エスケープ・シーケンス 文字列補間(string interpolation) blog1.mammb.com JEP 378: Text Blocks テキストブロックは複数行の文字列リテラルで、ほとんどのエスケープ…

【Modern Java】JEP 330 Launch Single-File Source-Code Programs

JEP 330: Launch Single-File Source-Code Programs Source-file mode Source-file mode の処理の流れ ランタイム・オプション まとめ blog1.mammb.com JEP 330: Launch Single-File Source-Code Programs Java11 より単一のファイルの Java コードを、明示…

【Modern Java】Local-Variable Type Inference

JEP 286: Local-Variable Type Inference ローカル変数宣言型推論の注意点 4つの原則 7つのガイドライン 「インターフェースを使ったプログラミング」についてはローカル変数では重視しなくてよい ダイヤモンド<> やジェネリックメソッドにおける var 利用は…

【Modern Java】java.net.http.HttpClient (JEP 321)

JEP 321: HTTP Client (Standard) Http Client で GET リクエスト Http Client で POST リクエスト 非同期リクエスト Json レスポンスからオブジェクトへマッピング Json の POST HttpRequest.Builder のコピー レスポンスヘッダ Cookie リダイレクト Proxy …

【Modern Java】リリースバージョン別 主要新機能 まとめ

Java8 以降の主な拡張機能まとめです。 Java 9 (2017年9月21日) Java 10 (2018年3月20日) Java 11 (2018年9月25日) Java 12 (2019年3月19日) Java 13 (2019年9月17日) Java 14 (2020年3月17日) Java 15 (2020年9月15日) Java 16 (2021年3月16日) Java 17(202…

Gradle における Java Platform Module System (JPMS) の運用

はじめに Gradle でのモジュールシステムの運用 モジュールの依存関係の定義 非モジュール・ライブラリの利用 複数モジュールから構成されるアプリケーションの例 list モジュール utilities モジュール application モジュール まとめ はじめに Java 9 で導…

【Modern Java】Java Platform Module System (JPMS)

JSR 376: JavaTM Platform Module System モジュール宣言 モジュールの定義 ServiceLoader の依存関係 システムモジュール Automatic Module(自動モジュール) と Unnamed Module(無名モジュール) Gradle における Java Platform Module System blog1.mammb.c…

【Modern Java】JEP 269 Convenience Factory Methods for Collections

JEP 269: Convenience Factory Methods for Collections 旧来のインスタンス生成 コレクションの生成 マップの生成 その他特記事項 blog1.mammb.com JEP 269: Convenience Factory Methods for Collections Java 9 でコレクションとマップのインスタンスを簡…

【Modern Java】Java 14 で正式導入となった Switch 式(JEP 361)

JEP 361: Switch Expressions (Standard) フォールスルー Switch 式 値の生成 まとめ blog1.mammb.com JEP 361: Switch Expressions (Standard) Java 12でプレビュー(JEP 361)として導入された、Switch Expressions が Java 14 で正式導入となりました。 以…

【Modern Java】jpackage ツール(JEP 343) の使い方

JEP 343: Packaging Tool (Incubator) jpackage の使い方 jpackage のオプション Gradle からの jpackage 利用 パッケージのインストール まとめ blog1.mammb.com JEP 343: Packaging Tool (Incubator) Java 14 で追加されたパッケージングツールによりプラ…

Java で暗号化 ZIP を作成する

はじめに zip4j zip4j の利用 暗号化ZIPファイルの作成 まとめ はじめに Java で暗号化ZIP扱うライブラリなんて腐るほどあるだろう。 なんなら標準ライブラリだけで完結できるだろう。 と高を括っていましたが、Commons Compress でも no support for encryp…

「gyp: No Xcode or CLT version detected!」を修正する

No Xcode or CLT version detected npm install や yarn install などで以下のエラーが発生。 gyp: No Xcode or CLT version detected! gyp ERR! configure error gyp ERR! stack Error: `gyp` failed with exit code: 1 ... macOS Catalina でバージョンを…