サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
世界禁煙デー
blog1.mammb.com
はじめに 匿名クラスの 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 以下を
はじめに 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 のインストール
ソート対象 昔ながらの読みにくいソート Lambda を利用した冗長なソート Java8 Stream における正しいソート thenComparing による複合キーのソート ソート条件の指定 null コンパレータ Comparable Map のソート まとめ ソートキーの指定 ソート条件の指定 ソート条件 Map のソート ソート対象 以下のような id と name プロパティを持った Item を考えます。 public class Item { private Integer id; private String name; public Item(Integer id, String name) { this.id = id; this.name = name; } public Integer getId() { return id; } public String ge
Spring Boot 2 で、なるべく標準的なやり方で、トラディショナルな Spring MVC による Web Application を作成するチュートリアルを数回に分けて。 の4回目です。 目次 Spring MVC で Hello World Spring Data JPA でデータベースアクセス 登録・更新処理と Bean Validataion Bootstrap と Thymeleaf でページネーション Spring Boot DevTools で Automatic Restart Spring Security でログイン認証 ファイルアップロード T.B.D 今回は 「Bootstrap と Thymeleaf でページネーション」の回となります。 前回までで以下のような登録更新画面を作成しました。 一覧画面から遷移可能とし、一覧画面のページネーション表示をやってい
Spring Boot 2 で、なるべく標準的なやり方で、トラディショナルな Spring MVC による Web Application を作成するチュートリアルを数回に分けて。 の5回目です。 目次 Spring MVC で Hello World Spring Data JPA でデータベースアクセス 登録・更新処理と Bean Validataion Bootstrap と Thymeleaf でページネーション Spring Boot DevTools で Automatic Restart Spring Security でログイン認証 ファイルアップロード T.B.D 今回は 「Spring Boot DevTools で Automatic Restart」の回となります。 Spring Boot DevTools spring-boot-devtools を使うと Aut
Spring Boot 2 で、なるべく標準的なやり方で、トラディショナルな Spring MVC による Web Application を作成するチュートリアルを数回に分けて。 Web Application 作成の流れを、細か過ぎる説明は省き、ざっくりと一通り見ていきます。 目次 Spring MVC で Hello World Spring Data JPA でデータベースアクセス 登録・更新処理と Bean Validataion Bootstrap と Thymeleaf でページネーション Spring Boot DevTools で Automatic Restart Spring Security でログイン認証 ファイルアップロード T.B.D 今回は 「Spring MVC で Hello World」 の回となります。 環境 Java は LTS の 1.8 を使い
コンパイラフラグ GC戦略 GCログ ヒープ関連 設定しておきたい Java 起動オプション まとめ コンパイラフラグ JVMチューニングで最初に検討するのがコンパイラの選択となる。 ただ、近年は階層的コンパイルが有効になっていたり、プラットフォーム別で適した設定がデフォルトで有効になっていることもあり、改めて設定するケースは少ない。 フラグ 説明 -client クライアントコンパイラ(C1)を使用する -server サーバコンパイラ(C2)を使用する -server -XX:+TieredCompilation 階層的コンパイルを使用する コンパイラは、クライアントコンパイラ(C1)、サーバコンパイラ(C2)の2種類があり、JVM起動オプションで指定する。 C1コンパイラはデスクトップアプリケーションのように起動時の速度が重要な場合に、早期にJIT(just-in-time)コンパイ
TL;DR X-Content-Type-Options X-Frame-Options(XFO) X-XSS-Protection Content-Security-Policy (CSP) Upgrade-Insecure-Requests Strict-Transport-Security (HSTS) Public-Key-Pins (HPKP) 設定 TL;DR X-Content-Type-Options MIME スニッフィングの無効化 X-Frame-Options(XFO) フレーム表示を制限しクリックジャッキングを予防 X-XSS-Protection XSSフィルタの有効/無効 Content-Security-Policy (CSP) XSSなどの攻撃を軽減するセキュリティレイヤー Strict-Transport-Security (HSTS) HTTP の代わり
Nashorn スクリプトで作る Ace Editor とは 50行ぐらいでファイル処理 実行 Nashorn スクリプトで作る ace.js として以下のスクリプトを作成します。 #!/usr/bin/jjs -fx var html = "<!DOCTYPE html>" + "<html><head>" + "<style type='text/css' media='screen'>" + " #editor { position: absolute; top: 0; right: 0; bottom: 0; left: 0; }" + "</style>" + "</head>" + "<body>" + "<div id='editor'></div>" + "<script src='https://cdnjs.cloudflare.com/ajax/libs/ace/1.2
はじめに 当たり前な話 ジェネリック型の継承関係 共変(covariant)の問題点 共変(covariant) が妥当なケース 反変 (contravariant) の問題点 反変 (contravariant) が妥当なケース ここまでのまとめ ジェネリクスが不変だと、、 ジェネリクスに共変性を持たせる ジェネリクスに反変性を持たせる 境界ワイルドカード型のまとめ ジェネリック型のキャスト 境界型パラメータ 配列は共変 ジェネリクスの 不変・共変・反変 といった話は、なんとなく分かった気になって流してしまう方が多いのではないでしょうか? Java に限った話ではないですが、実際、ジェネリクスが絡んだタイプセーフ性の話題は混乱しやすく、理解しにくいものだと思います。 ここでは Java を題材に ジェネリクスの 不変・共変・反変 について、なるべく分かりやすく説明してみたいと思います。
Gradle 4.0 向けに以下の記事の更新版です。 blog1.mammb.com 試験的な提供なので将来が計画されていますが、Gradle 4.0 時点でどのようなになるかメモしておきます。 Build Init Plugin Build Init Plugin を使うと Gradle build プロジェクトの作成をタイプに応じて自動でやってくれます。 タイプ タイプ指定 basic $ gradle init java-application $ gradle init --type java-application java-library $ gradle init --type java-library groovy-application $ gradle init --type groovy-application groovy-library $ gradle init
クラスファイルの中身 クラスファイルの構造 javap コマンド javap 出力の概要 型とメソッドの読み方 オペランドスタック コンストラクタの実行 加算メソッド invoke 系命令 条件判断 for ループ まとめ 普段使いでは困ることはないですが、昨今はバイトコードマニピュレーションによる黒魔術が謳歌しているため、知っていると役に立つ場合もあるバイトコードの最低限の読み方を説明します。 クラスファイルの中身 以下のような簡単なソースコードを考えましょう。 public class Class1 { public int add(int x, int y) { return x + y; } } このソースコードをコンパイルして作成された Class1.class の中身のダンプを見てみます。 $ hexdump -C Class1.class 00000000 ca fe ba
前回、Stream の裏舞台について見てみました。 blog1.mammb.com ついでなので、今回は Lambda 式の裏舞台について見てみましょう。 はじめに 有名な話ではありますが、以下の匿名クラスを含むコードをコンパイルすると、2つのクラスファイルが生成されます。 public class Main { public static void main(String... args) { Logger.getGlobal().info(new Supplier<String>() { @Override public String get() { return "hello"; } }); } } 以下のようなクラスファイルになります。 Main.class Main$1.class では、lambdaで書いた場合はどうなるでしょう。 public class Main { pub
Java9 も出た昨今でいまさらですが、Stream パイプラインが裏でどのように動いているのかをコードを交えて紹介します。 以下の単純な例を元に、内部処理を追っていきましょう。 Arrays.asList("a", "b", "c") .stream() // (1) Stream の生成 .filter(String::isEmpty) // (2) パイプライン .forEach(System.out::print); // (3) 終端処理 (1) Stream の生成 (2) パイプライン (3) 終端処理 まとめ (1) Stream の生成 最初はストリームを取得する stream() の中身から見ていきます。 stream() は Collection インターフェースのデフォルトメソッドとして以下のように定義されています。 public interface Collect
前回は Glassfish 4.1.2 のソースコードを元にして EJB のメソッド呼び出しの概要を見ました。 blog1.mammb.com 今回は、この流れの中でトランザクションの開始と終了について見ていきます。 前回と同様に今回の説明のために不要な箇所は大幅に省略または改編したものとなりますので注意してください。 コードは Glassfish 4.1.2 系のものです。 はじめに トランザクション開始のアウトライン トランザクションの初期化 トランザクションの開始 BaseContainer.preInvoke() トランザクションマネージャ トランザクションの begin トランザクション終了のアウトライン トランザクションの後処理 トランザクションマネージャ トランザクションマネージャの commit まとめ はじめに EJB 呼び出しは(コンテナ管理トランザクションの場合)、ト
Rust のインストール Hello World ビルドと実行 IntelliJ Rust Rust のインストール brew 使う場合は以下。 $ brew install rust ただ、公式通り rustup を使った方が複数バージョンの管理できたりするので、以下でインストールする。 $ curl https://sh.rustup.rs -sSf | sh 以下のように表示される。 Welcome to Rust! This will download and install the official compiler for the Rust programming language, and its package manager, Cargo. It will add the cargo, rustc, rustup and other commands to Cargo's
みなさんは Markdown エディタは何を使っているでしょうか? Atom や Visual Studio Code のプラグインでプレビュー表示していたり、Windows だったらMarkdownPad 、Mac だったら MacDown などの専用エディタを使っている方が多いのではないでしょうか。 そんな方へTypora を紹介します。 Typora は無駄なプレビュー領域を使いません Typora には便利なショートカットがあります Typora ではテーブル書くのが楽しくなります Typora はドラッグ&ドロップで画像を貼り付けられます Typora はテーマもコードハイライトもあります Typora は PDF や HTML など多くの形式にエクスポートできます Typora はマルチプラットフォームで今の所 Free です まとめ Typora は無駄なプレビュー領域を使い
次のページ
このページを最初にブックマークしてみませんか?
『A Memorandum』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く