アプリなら、コメントが見やすい!
トップへ戻る
タイムマネジメント
blog1.mammb.com
はじめに 概要 目標 非目標 動機 1リクエスト-1スレッド方式 非同期方式 仮想スレッドによる1リクエスト-1スレッド方式 説明 仮想スレッドとプラットフォームスレッドの使い分け 仮想スレッドの有効化 仮想スレッドにスレッドプールは不要 仮想スレッドの監視 仮想スレッドのスケジューリング 仮想スレッドの実行 メモリの使用とガベージコレクションとの相互作用 変更点の詳細 java.lang.Thread Thread-local variables java.util.concurrent Networking java.io Java Native Interface (JNI) Debugging (JVM TI, JDWP, and JDI) JDK Flight Recorder (JFR) Java Management Extensions (JMX) java.lang.Th
キャスト null 除外 否定フィルタ Streamから配列へ 配列からStreamへ リストの集約 リストからマップへ変換 任意キーでグルーピング 任意キーでソート カンマ区切り オブジェクト型の合計 BigDecimal の合計 グルーピングして集計 開発の現場でよく使う Java Stream イディオムです。 キャスト List<String> studentNames = people.stream() .filter(Student.class::isInstance) .map(Student.class::cast) .map(Student::getName) .collect(Collectors.toList()); null 除外 List<String> names = people.stream() .map(People::getName) .filter(O
Volta とは インストール 公式インストーラ(*nix) Homebrew 公式インストーラ(Windows) volta install で Node エンジンを導入する volta list で現在のツールチェーンを一覧する volta pin でバージョンを固定する コマンドラインツールのグローバルなインストール まとめ Volta とは 数ある Node バージョン管理ツールの一つ 2020年12月にVolta1.0がリリースされ、現在のバージョンは v1.0.5 で比較的新しい Rust 製で早い package.json の内容を読み、自動でバージョン切り替えを行う node や yarn のバージョンをプロジェクト毎に固定できる グローバルパッケージを安全に使うことができる インストール 他の Node バージョン管理ツールを使っている場合は、あらかじめアンインストールし
はじめに Convenience Script を利用したインストール インストールに必要なパッケージ導入 docker パッケージリポジトリの登録 dockerEngineのインストール docker デーモンの起動 docker コンテナの実行 一般ユーザで docker コマンドを利用する docker-compose のインストール docker デーモンの起動 はじめに Docker Desktop for Windows の代替として、WSL2 上の Ubuntu-20.04 に docker を導入する手順です。 short version は以下となります。 # 事前準備 $ sudo apt update $ sudo apt install -y apt-transport-https # dockerパッケージリポジトリ追加 $ curl -fsSL https://
はじめに スクリプトファイルの命名 Kotlin と Groovy の言語上の考慮事項 Gradle init によるプロジェクト生成 プラグインの適用 プラグインの設定 タスクの構成 タスクの作成 依存の指定 よくある設定 はじめに Gradle 5.0 よりGradle Kotlin DSL が提供され、groovy によるビルドスクリプトを Kotlin で記載できるようになりました。 Kotlin でビルドスクリプトを書くことで、IDEによるサジェストやコードジャンプなどの恩恵を十分に受けることができますし、タイプセーフでありリファクタリングなども容易となるので、これから Groovy のビルドスクリプトを書くのであれば Gradle Kotlin DSL を使うべきです。 ここでは、Groovy DSL と Kotlin DSL の違いと Kotlin DSL でビルドスクリプト
はじめに JDK 16 で導入された stream.toList() Collectors.toList() の API と実装 stream.toList() の API と実装 stream.toList() には安易に切り替えられない はじめに JDK 16 で追加された stream.toList()。 タイプ量が減るのは良いのですが、API 設計から見た場合、多少の気持ち悪さが残ります。 そして、.collect(Collectors.toList()) から .toList() へは、単純に置き換えることができないよ という話です。 JDK 16 で導入された stream.toList() JDK 16 で Stream に stream.toList() が追加されました。 今までは Collectors を使う必要があり、以下のように書いてきました。 List<Strin
はじめに Java Object Layout (JOL)とは JOL の導入 JOL の使い方 GraphLayout ClassLayout VM まとめ はじめに Java にはオブジェクトが使用するメモリ容量を得る演算子がありません。 例えば、C や C++ における sizeof であったり、Rust における std::mem::sizeof を使えばオブジェクトのサイズを照会でき、メモリ効率に関する情報を得ることができます。 一方、Java ではオブジェクトのメモリ使用量を得ることは簡単ではありません。 Java ではポインタ演算を使用しないため、オブジェクトのメモリ構造を意識する必要は現実的には少ないです。 しかし、例えばオブジェクトをキャッシュした場合のメモリ使用量については、具体的なヒープメモリへのインパクトを見積もりたいといった場合もあるでしょう。 Java オブジェ
はじめに sonatype で JIRAアカウント作成 New Project の issue 登録 GnuPG の導入 GnuPG による鍵の生成 公開鍵を鍵サーバへ登録 秘密鍵をエクスポート Gradle プラグインの導入 build.gradle の設定 リポジトリへの公開 まとめ はじめに Maven Central Repository へライブラリを登録する手順です。 意外と古い情報しか見当たらなく、少し面倒な作業なのでこちらで紹介します。 大きくは、以下の流れになります。 sonatype の JIRA で issue を通してリポジトリ作成を依頼 GnuPG で jar を署名できる環境を作成 Gradle プラグインでリポジトリへ登録 Repository Manager で Maven Central Repository へリリース 順に見ていきましょう。 sonat
はじめに プログラミングモデルの変遷 ソケット ソケットによるサーバ実装 スレッドプールを利用したサーバ実装 ブロッキングI/Oの課題 ノンブロッキングI/O I/O多重化(multiplexing) バッファ操作 I/O多重化を使ったサーバ実装 非同期チャネル NIO2 によるエコーサーバ まとめ はじめに Java でネットワークプログラミングを行うのであれば Netty を使えば良いのですが、Netty に至るまでの標準APIの変遷についての話題は知っておいて損はない内容だと思います。 いまさら書く必要のある内容では無いかもしれませんが、とりまとまった情報源も乏しいため、Java標準APIを利用したネットワークプログラミングについて説明していきます。 プログラミングモデルの変遷 Java でネットワークプログラミングを行うには、JDK1.4 以前では Socket を使ったシンプ
JEP 286: Local-Variable Type Inference ローカル変数宣言型推論の注意点 4つの原則 7つのガイドライン 「インターフェースを使ったプログラミング」についてはローカル変数では重視しなくてよい ダイヤモンド<> やジェネリックメソッドにおける var 利用は注意すること リテラルにおける var 利用は注意すること var の利用例 まとめ blog1.mammb.com JEP 286: Local-Variable Type Inference Java 10 によりローカル変数宣言で型推論(type inference)が可能となり var により型定義を省略できるようになりました。 C++ での auto、C# での var、Scala での var/val、Go での := のように大抵の言語ではローカル変数型推論をサポートしており、Java は
JSR 376: JavaTM Platform Module System モジュール宣言 モジュールの定義 ServiceLoader の依存関係 システムモジュール Automatic Module(自動モジュール) と Unnamed Module(無名モジュール) Gradle における Java Platform Module System blog1.mammb.com JSR 376: JavaTM Platform Module System Project Jigsaw の成果として Java 9 で Java Platform Module System (JPMS) が導入されました。 モジュールシステムによる目標は以下となります。 信頼性の高い設定 脆弱でエラーが発生しやすいクラスパスメカニズムを、プログラムコンポーネントが互いに明示的に依存関係を宣言する手段に置
はじめに Node のインストール プロジェクトの初期化 TypeScript コンパイラの導入 TypeScript の設定 Hello TypeScript DOM 操作 まとめ はじめに 簡単なサンプルを交えて TypeScript の始め方について紹介します。 Node のインストール Node (と npm ) がインストールされているものとします。未導入の場合は以下を参照してください。 blog1.mammb.com ここでは現在の最新の LTS(Long Term Support) 版として以下を使います。 $ node -v v12.18.0 $ npm -v 6.14.4 プロジェクトの初期化 TypeScript コンパイラは npm パッケージとして公開されています。 最初にプロジェクトディレクトリを作成し、npm で初期化(package.jsonファイルを作成)し
はじめに データベースの準備 SchemaSpy の準備 SchemaSpy の起動 SchemaSpy のドキュメント Redmine のデータベースドキュメント まとめ はじめに SchemaSpy は、既存のデータベースからデータベースのドキュメントをHTMLで出力するJava製のツールです。 ここでは SchemaSpy の使い方について簡単に紹介します。 データベースの準備 何でもいいのですが、ここでは Spring petclinic を例にしてデータベースドキュメントを生成してみます。 リポジトリから git clone します。 $ git clone https://github.com/spring-projects/spring-petclinic.git $ cd spring-petclinic Docker で MySql を起動します。 $ docker ru
はじめに 依存 ワークブックの新規作成 既存ワークブックのオープン ブックの保存 シートの作成 シートの取得 行の取得 行と列の移動 セルの取得 セルへの値設定 セル値の文字列取得 行とセルの走査 値が設定されている範囲の取得 罫線の設定 セルスタイルプロパティ フォントの設定 背景色の設定 入力規則(プルダウンリスト)の設定 式の設定 カラム幅の自動調整 はじめに Apache POI のよく使う API の簡易チートシートです。 3 系、4系 で API 使い方が変わってきています。 ここでは 4系 を対象とします。 依存 拡張子 xlsx 形式を扱う場合は poi-ooxml が必要 implementation 'org.apache.poi:poi:4.1.2' implementation 'org.apache.poi:poi-ooxml:4.1.2' ワークブックの新規作成
はじめに 匿名クラスの this 参照 lambda の this 参照 lambda コードの展開 lambda で自身を参照する はじめに lambda は、匿名クラスの単なる構文糖ではなく、その実現方法の違いから発生するいくつかの違いがあります。 ここでは、lambda ブロックにおける this 参照の違いについて説明します。 匿名クラスの this 参照 匿名クラス内部で this 参照をすれば、それは匿名クラス自身を指し示します。 public class Main { public void run() { Runnable r = new Runnable() { @Override public void run() { System.out.println(this.getClass().toString()); } }; r.run(); } public stati
ANTLR とは ANTLR の導入 ANTLR の実行 ANTLR による構文解析 ANTLR の文法ファイルと生成ファイルの関係 まとめ ANTLR とは ANTLR (ANother Tool for Language Recognition) は構文解析器を生成するパーサジェネレータで、yacc や JavaCC などと同じ類いのものです。 BNF のような文法定義から、ソースコードなどを処理するコードを生成します。 プログラム言語の入力部であったり、DSL や コード解析、設定ファイルの読み込みなどの構造を持った入力テキストの処理を簡単に実現することができます。 例えば、Hibernate の HQL(Hibernate Query Language) では ANTLR による構文解析が使われています。 ここでは、ANTLR 4 の使い方について簡単に見ていきます。 ANTLR
はじめに テンプレート デフォルトの ファイル インプット カスタム・ファイル・インプット bs-custom-file-input を使う ラベルの変更 取消ボタン 取消イベントのマルチブラウザ化 まとめ はじめに Bootstrap の Forms コンポーネントは、デフォルトだと file input だけ統一感がなく残念な感じです。 custom-file-input を使って以下のような file input を作る手順を見ていきます。 なお、ここでは Bootstrap 4 を使います。 テンプレート 以下のような html を出発点とします。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=
はじめに Github 管理の .gitignore テンプレート .gitignore の作成 まとめ はじめに Git を利用する際 .gitignore にファイルやディレクトリを指定することで、リポジトリ管理の対象から除外することができます。 例えば Windows の場合のThumbs.db や macOS の .DS_Store といったプラットフォーム別の制御ファイルであったり、各種エディタの一時ファイルやログ・ファイルなどは、うっかりリポジトリに登録しないように予め .gitignore に定義してリポジトリ管理の対象から除外すべきです。 色々な環境やツールを考慮した .gitignore ファイルを定義するのも以外と大変です。 ここでは、Github の公開するテンプレートから簡単に .gitignore ファイルを作成する方法を紹介します。 Github 管理の .gi
はじめに <input> 要素の disabled 属性 と readonly 属性の違い readonly 属性が有効なのはテキストコントロールに限られる <select> 要素の readonly 属性 readonly 属性が効かないコントロールで readonly を模倣する4つの方法 (1) option 要素を disabled 指定する (2) select コントロールの操作を無効化する (3) disable 指定して hidden で値を送信する (4) disable 指定して Submit 時に有効化する まとめ はじめに HTML 要素の disabled 属性と readonly 属性は、うっかりと間違った使い方をしてしまいがちです。 この記事では属性の挙動の違いを説明し、編集不可コントロールの正しい扱い方について見ていきます。 なお、ここでは以下の HTML
mdBook とは mdBook の導入 mdBook の始め方 mdBook でビルドする mdBook のコマンド mdBook での作業 mdBook で Rust コードを実行 mdBook とは Markdown 形式できれいなドキュメントを作成するためのツールです。 チャプター別に執筆した Markdown ファイルから、以下のようなオンラインドキュメントを簡単に作成することができます。 mdBook でビルドすると book ディレクトリに HTML や CSS、JS ファイルが生成されるので、ディレクトリごと Github Pages などに配備すればオンラインでドキュメントを公開することもできます。 同様のツールに gitbook-cli という Node ベースのものがありますが、mdBook は Rust 製で、なにしろ速いのがメリットです。 mdBook の導入 R
はじめに プロジェクトの作成 最初のアプリケーション 画面レイアウトの設計 レイアウト構築の概要 レイアウトの実装 エンティティの準備 アカウント一覧コンポーネントの作成 アカウント一覧のフィルタリング AccountService の追加 アカウント編集フォームの作成 アカウント編集ダイアログの作成 アプリケーションの実行 まとめ はじめに Java でプロダクト構築時に一番悩むのは、フロントエンドに何を採用するかです。 React (や Vue.js や Angular ) で作ってサーバ側は JAX-RS で受けるか、成熟した JSF で作るか、Thymleaf などのテンプレートエンジンとMVCで作るか。 いずれにしてもつらいのが、機能追加やリファクタリング時にフロントエンド側を合わせて変更する場合で、どうしてもサーバ側を変更した後でフロントエンド側を対処的に修正しなければいけない
まえがき はじめに Java Beans の誕生 サーバサイドの台頭 Struts と BeanUtilsの興起 Enterprise JavaBeans ORM の台頭 getter/setter は良くない習慣です なぜ getter/setter は悪なのか 悪の囁きに対する処方箋 まとめ まえがき 以下のコードを見てください。 Car car = new Car(); car.getEngine().getFuelContainer.setFuel(Fuel.litreOf(30)); もしあなたが、このコードに違和感を感じたのであれば、以下の記事を読む必要はありあません。 はじめに 開発の現場では今なお、疑問を挟む余地なく Bean という言葉が使われ、それに付随する getter/setter の呪縛に囚われ続けた状態が続いています。 この慣習は広く蔓延し、多くの開発者の思考を
はじめに bash の初期化ファイル ログインシェルとは インタラクティブ(対話的)シェルとは ログインシェルとインタラクティブシェルの分類 各種環境における初期化ファイル CentOSの初期化ファイル Ubuntuの初期化ファイル macOS(Catalina以前)の初期化ファイル macOS(Catalina)の初期化ファイル 各環境におけるデフォルトの初期化ファイル 単一ファイル管理(~/.bashrc) 標準的管理(環境変数は~/.bash_profile) 厳格管理(~/.profile 利用) macOS Catalina の場合 まとめ はじめに 本記事では bash の初期化ファイルとそれにまつわる運用方法について説明します。 シェル(bash)の初期化ファイルには .profile .bashrc, .bash_profile などがありますが、どこに何を定義すべきかにつ
Node のバージョン管理ツールである「n」を紹介します。 はじめに n のインストール n 利用準備 node のインストール node のバージョン切り替え node のバージョン削除 はじめに Node のバージョン管理ツールは、nvm nodenv 日本だと nodebrew など色々ありますが、最近は n がお気に入りです。 github.com ここでは Mac 環境 OSX への導入と利用方法について紹介します。 n のインストール brew で以下のようにインストールできます。 $ brew install n バージョンを見てみましょう。 $ n -V 6.0.1 なお、既に node がインストール済みの場合は以下のように npm でインストールすることもできます。 $ npm install -g n n 利用準備 n はデフォルトで /usr/local/n 以下を
はじめに Project Starter アプリケーションの起動 プロジェクトの構成 ネイティブ・ビルド ネイティブバイナリの実行 JVM モードのコンテナ作成 RestAssured によるテスト まとめ はじめに クラウドネイティブなアプリケーションフレームワークである Quarkus の バージョン 1.0 リリースが間近ですが2019年11月25日にリリースされました。 現在(2019年11月20日時点)は 1.0.0.CR1 が出ている状況です(と思った矢先に 1.0.0.CR2 が出た模様ですね)。 1.0 リリース記念として Quarkus の Project Starter の使い方と Gradle での実行について見ていきます。 「Quarkus とは」については以下を参照してください。 blog1.mammb.com Project Starter Quarkus は、
はじめに REST とは RESTful とは RESTish とは まとめ はじめに REST と RESTful 、さらに最近では RESTish という用語についてのまとめです*1。 REST とは REST(REpresentational State Transfer)という言葉が何を指すかは、かなり発散する話題です。 元となるのは Roy Fielding により示されたアーキテクチャスタイルで、アーキテクチャによる制約により以下のように導出されました。 このようなアーキテクチャの制約により導出された REST は、以下のスタイル(制約)を持つものとされています。 Client-Server Stateless Cache Uniform Interface Layered System Code-On-Demand ほとんどは読んだままですが、Code-On-Demand は
はじめに Nginx でロードバランサを構成する Webサーバ1号機の作成 Webサーバ2号機の作成 ロードバランサの作成 ロードバランサとWebサーバの起動 Web アプリケーションの準備 Docker でアプリケーションをビルドする DBサーバの準備 ロードバランサとアプリケーションサーバの起動 まとめ はじめに 前回は Docker のインストールからイメージビルド・コンテナ起動・Compose までの流れをみてきました。 blog1.mammb.com 今回は以下のような、一般的な Web アプリケーションの開発環境を構築していきます。 前回の記事とあわせて、Docker の活用方法を理解いただければと思います。 Nginx でロードバランサを構成する 最初に、単純な Web サーバを Nginx でロードバランシングする環境を作成して動作を見てみます。 このような構成となります。
はじめに Docker のインストール Docker の起動 コンテナの起動 Docker Hub から nginx のイメージを取得 取得したイメージから ws-nginx という名前でコンテナを作成 作成したコンテナを起動 コンテナの操作 動いているコンテナの一覧 コンテナの停止 停止しているコンテナを含めて一覧 コンテナの削除 イメージの一覧 イメージの削除 Dockerfile からイメージ作成 Nginx の設定ファイルの準備 Dockerfile の作成 Dockerfile のビルド イメージの実行 Docker Compose docker-compose.yml の作成 docker-compose up まとめ はじめに Docker の OSX への導入からコンテナ起動までを見ていきます。 Docker のインストール DockerHub からインストーラをダウンロー
Rust とは Rust のインストール rustup のインストール バージョンの確認 アップデート アンインストール Hello World Hello Cargo ビルド 実行 check リリースビルド クレート 依存の追加 ドキュメント Rust plugin for IDEA Rust の文法以前、環境構築と使い方を簡単に。 Rust とは 比較的若く近代的な言語仕様(2006~) マルチパラダイム 手続き型、関数型、オブジェクト指向 静的型付 型推論あり null がない ジェネリクスはある C++ のスマートポインタを発展させたメモリ安全 安全な並列性 所有権・借用・ライフタイムによる GC 不要なメモリ管理 この概念により学習難易度は高い Firefox のレイアウトエンジン Servo が Rust 製 自転車の車輪がモチーフのロゴが・・ダサい Rust のインストール
次のページ
このページを最初にブックマークしてみませんか?
『A Memorandum』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く