Java 言語でつくるインタプリタ 〜パーサ#3〜

「Go 言語でつくるインタプリタ」では、Monkey という小さな言語のインタプリタを Go で実装する過程が書かれています。 あくまで教育目的として、字句解析〜構文解析〜評価 までをシンプルな実装で丁寧に解説しています。 Go言語でつくるインタプリタ作者: …

Java 言語でつくるインタプリタ 〜パーサ#2〜

「Go 言語でつくるインタプリタ」では、Monkey という小さな言語のインタプリタを Go で実装する過程が書かれています。 あくまで教育目的として、字句解析〜構文解析〜評価 までをシンプルな実装で丁寧に解説しています。 Go言語でつくるインタプリタ作者: …

Java 言語でつくるインタプリタ 〜パーサ#1〜

Java 言語でつくるインタプリタ 「Go 言語でつくるインタプリタ」では、Monkey という小さな言語のインタプリタを Go で実装する過程が書かれています。 あくまで教育目的として、字句解析〜構文解析〜評価 までをシンプルな実装で丁寧に解説しています。 Go…

Java 言語でつくるインタプリタ 〜レキサー〜

「Go 言語でつくるインタプリタ」では、Monkey という小さな言語のインタプリタを Go で実装する過程が書かれています。 あくまで教育目的として、字句解析〜構文解析〜評価 までをシンプルな実装で丁寧に解説しています。 Go言語でつくるインタプリタ作者: …

今始めずにいつやるの? Rust の始め方

Rust の文法以前、環境構築と使い方を簡単に。 Rust 比較的若く近代的な言語仕様(2006~) マルチパラダイム 手続き型、関数型、オブジェクト指向 静的型付 型推論あり null がない ジェネリクスはある C++ のスマートポインタを発展させたメモリ安全 安全な並…

Java Stream におけるソートのお作法

ソート対象 以下のような 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 i…

Windows PowerShell で wget

PowerShell 2.0 の場合 (new-object System.Net.WebClient).Downloadfile("https://example.com/", "C:\tmp\example.html") PowerShell 3.0 以降の場合 標準インストールだと Windows 8 から。 Invoke-WebRequest -Uri https://example.com/ -OutFile C:\tmp…

Micronaut で Hello World するだけしてみる

Micronaut とは マイクロサービスベース用のフルスタックフレームワーク 低フットプリント JVMベースで、Java・Kotlin・Groovy などで書ける GraalVM の native image の実験的サポートがある コンパイル時に DI 解決(annotation processor)するため起動が早…

Kotlin/Native で Hello World するだけしてみる

Kotlin/Native で Hello World してみる。Kotlin なので IDEA で。 Plugin 最新化 Kotlin Plugin を最新化しておきます。 Update ボタンで更新。プラグインのインストールが終わると再起動を求められる。 Restart IntelliJ IDEA で再起動。 プロジェクトの作…

AdoptOpenJDK のインストール

Mac mini 2018 が来たのでセットアップ Homebrew $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" Homebrew version $ brew --version Homebrew 1.8.2 Homebrew/homebrew-core (git revision 4d0d; …

普通の Spring Boot 2.0 Web Applicatrion 〜 Spring Boot DevTools で Automatic Restart 〜

Spring Boot 2 で、なるべく標準的なやり方で、トラディショナルな Spring MVC による Web Application を作成するチュートリアルを数回に分けて。 の5回目です。 目次 Spring MVC で Hello World Spring Data JPA でデータベースアクセス 登録・更新処理と …

普通の Spring Boot 2.0 Web Applicatrion 〜 Bootstrap と Thymeleaf でページネーション 〜

Spring Boot 2 で、なるべく標準的なやり方で、トラディショナルな Spring MVC による Web Application を作成するチュートリアルを数回に分けて。 の4回目です。 目次 Spring MVC で Hello World Spring Data JPA でデータベースアクセス 登録・更新処理と …

普通の Spring Boot 2.0 Web Applicatrion 〜 登録・更新処理と Bean Validataion 〜

Spring Boot 2 で、なるべく標準的なやり方で、トラディショナルな Spring MVC による Web Application を作成するチュートリアルを数回に分けて。 の3回目です。 目次 Spring MVC で Hello World Spring Data JPA でデータベースアクセス 登録・更新処理と …

普通の Spring Boot 2.0 Web Applicatrion 〜 Spring Data JPA でデータベースアクセス 〜

Spring Boot 2 で、なるべく標準的なやり方で、トラディショナルな Spring MVC による Web Application を作成するチュートリアルを数回に分けて。 の2回目です。 目次 Spring MVC で Hello World Spring Data JPA でデータベースアクセス 登録・更新処理と …

普通の Spring Boot 2.0 Web Applicatrion 〜 Spring MVC で Hello World 〜

Spring Boot 2 で、なるべく標準的なやり方で、トラディショナルな Spring MVC による Web Application を作成するチュートリアルを数回に分けて。 Web Application 作成の流れを、細か過ぎる説明は省き、ざっくりと一通り見ていきます。 目次 Spring MVC で…

Java EE Spec 一覧

Java EE Spec Version JSR リリース JavaEE1.3 JSR-58 2001年9月 JavaEE1.4 JSR-151 2003年11月 JavaEE5 JSR-244 2006年5月 JavaEE6 JSR-316 2009年12月 JavaEE7 JSR-342 2013年5月 JavaEE8 JSR-366 2017年9月 バージョン一覧 太字が前バージョンからの変更…

JVM主要オプション

コンパイラフラグ JVMチューニングで最初に検討するのがコンパイラの選択となる。 ただ、近年は階層的コンパイルが有効になっていたり、プラットフォーム別で適した設定がデフォルトで有効になっていることもあり、改めて設定するケースは少ない。 フラグ 説…

開発用 Windows マシンの SSD が ディスクフル なので色々消す

Maven のローカルキャッシュ削除 $ mvn dependency:purge-local-repository または HOME\.m2\repository をバッサリ削除。 Gradle のローカルキャッシュ削除 $ gradlew cleanBuildCache またはHOME\.gradle をバッサリ削除。 Oracle Database Express Editio…

Java7 と Java8 ランタイム配備の違い、または如何にして CurrentVersion has value '1.8', but '1.7' is required エラーが起こるか

はじめに Windows 環境での話し。 いまさらの話し。 Java7 と Java8 でライタイムの配備方法が変更され、以下のエラーで起動できないことがある。 Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion' has value '1.8', but …

glassfish.org は消滅したので DTD が読み込めなくなったのですケド

TL;DR Java EE の Oracle から Eclipse Foundation への移管に伴い以下のような DTD の URL は今や存在しないので XML 操作時には注意 http://glassfish.org/dtds/glassfish-resources_1_5.dtd とあるプロジェクトで 久しぶりの改修。 Gradle スクリプトがエ…

商用環境で設定しておきたいセキュリティ関連 HTTP ヘッダまとめ

TL;DR X-Content-Type-Options MIME スニッフィングの無効化 X-Frame-Options(XFO) フレーム表示を制限しクリックジャッキングを予防 X-XSS-Protection XSSフィルタの有効/無効 Content-Security-Policy (CSP) XSSなどの攻撃を軽減するセキュリティレイヤー …

NetBeans の JDK は netbeans.conf で設定する

単なるメモ。 JDKの設定 NetBeans自身の JDK は以下の定義ファイルで変更する。 C:\Program Files\NetBeans 8.0.2\etc\netbeans.conf # Default location of JDK: # (set by installer or commented out if launcher should decide) # # It can be overridde…

20行ぐらいでリッチなテキストエディタをJavaFXで

Nashorn スクリプトで作る ace.js として以下のスクリプトを作成します。 #!/usr/bin/jjs -fx var 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>" + "</body></html>

Kotlin 1.1.60 周辺ライブラリの導入

November 13, 2017 に Kotlin 1.1.60 がリリースされました。 だからって訳ではないですが、以下について最初の一歩として簡単な導入部分を見ていきます。 kotlin-dsl によるGradle プロジェクトのビルド Kotlin でサーブレット Kotlin の SQLライブラリ Exp…

Java におけるタイプセーフとジェネリクスの微妙な関係

ジェネリクスの 不変・共変・反変 といった話は、なんとなく分かった気になって流してしまう方が多いのではないでしょうか? Java に限った話ではないですが、実際、ジェネリクスが絡んだタイプセーフ性の話題は混乱しやすく、理解しにくいものだと思います…

知らなくても困らない Javaクラスのバイトコードの読み方

普段使いでは困ることはないですが、昨今はバイトコードマニピュレーションによる黒魔術が謳歌しているため、知っていると役に立つ場合もあるバイトコードの最低限の読み方を説明します。 クラスファイルの中身 以下のような簡単なソースコードを考えましょ…

Java8 lambda の裏舞台は、きっとあなたが考えているより強かだ

前回、Stream の裏舞台について見てみました。 etc9.hatenablog.com ついでなので、今回は Lambda 式の裏舞台について見てみましょう。 はじめに 有名な話ではありますが、以下の匿名クラスを含むコードをコンパイルすると、2つのクラスファイルが生成されま…

Java8 Stream の裏舞台は、きっとあなたが考えているより忙しない

Java9 も出た昨今でいまさらですが、Stream パイプラインが裏でどのように動いているのかをコードを交えて紹介します。 以下の単純な例を元に、内部処理を追っていきましょう。 Arrays.asList("a", "b", "c") .stream() // (1) Stream の生成 .filter(String…

JavaEE Code探索 その3 〜 トランザクション属性 〜

前回はEJBにおけるトランザクションの開始と終了の流れを見てきました。 etc9.hatenablog.com 今回は、トランザクション属性による動作を少しだけみてみましょう。 はじめに TransactionAttributeType.REQUIRED のEJBメソッドから、TransactionAttributeType…

JavaEE Code探索 その2 〜 トランザクション 〜

前回は Glassfish 4.1.2 のソースコードを元にして EJB のメソッド呼び出しの概要を見ました。 etc9.hatenablog.com 今回は、この流れの中でトランザクションの開始と終了について見ていきます。 前回と同様に今回の説明のために不要な箇所は大幅に省略また…