JAVA関連のことを調べてみた2020年01月05日

JAVA関連のことを調べてみた2020年01月05日

各種 Web Application Framework メモリ使用量比較調査 (Go, Ruby, Python, Node.js, Java)

## 概要

– 「Hello World な HTML を返す程度の Web アプリケーション」または「それぞれの公式ドキュメントに載っているチュートリアルの初期状態に近いもの」を作成してメモリ使用量を比較する
– Web アプリケーションサーバは現時点でよく使われていると思われるものを使用する
– テンプレートエンジンはフレームワークのデフォルト設定またはフレームワークが推奨しているものを使用する
– macOS Catalina 上でメモリ使用量を計測
– メモリ使用量の計測には ps コマンドの RSS 値を使う (複数のプロセスを使うものはRSS値を単純に足したものをメモリ使用量とした。メモリ共有部分については考慮していないため、もう少しメモリ使用量が少ないかもしれない)

## 調査結果

メモリ使用量が少ない順に並べる。

– 7MB: Go 1.13 + Gin 1.5
– 10MB: Go 1.13 + Revel 0.21
– 24MB: Ruby 2.7 + Sinatra 2.0 + Puma 4.3
– 40MB: Python 3.8 + Flask 1.1

元記事を表示

アルゴリズム体操11

#Remove Duplicates from a Linked List
LinkedListのhead からスキャンしていき、重複するノードがあれば削除して重複がないLinkedListのheadを返します。

##説明
以下のLinkedListが与えられとします。
![Screen Shot 2020-01-04 at 12.00.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/07ae8790-5ace-e8dd-4bd2-ffc5f142032a.png)
データが重複する28 と 14 を削除すると、以下のLinkedListになります。
![Screen Shot 2020-01-04 at 12.00.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/00305d42-6540-f4fa-55fd-0237d5ab3d8a.png)
##Solution
###Runt

元記事を表示

はじめてのSpring Boot

#はじめてのSpring Boot

最近、スキルアップを狙った就職を考えているため、
フレームワーク未経験ではあるが、フレームワークを使用して
ポートフォリオを作成しようと考えいてる。

現在は、退職済みのため1ヶ月程でポートフォリオを作成する予定だが、
その際の備忘録として記事を投稿する。

ポートフォリオの内容として、Spring Bootを使用して簡単な在庫管理システムを構築する。
今後も、DBや画面の設計、AWSへのデプロイなどを行っていく予定であるが、
Spring Bootの仕様を把握する必要があるため、最初に入門書を何冊か読んだ。

ここでは、直近で読んだ書籍でSpring Boot未経験者からでもアプリケーションを
構築する知識を得られるであろう書籍を紹介する。

紹介する書籍を読む上で、必要となる前提知識は大まかに下記の内容である。
・Java8の言語仕様の知識(Oracle資格 Java8 Gold取得レベル)
 紹介する書籍がJava8での実装を行なっているため、
 Java8の知識は必須となる。
 中でも、StreamAPIは頻出するので、Java8 Gol

元記事を表示

JDK 14でPreview ReleaseされるRecordsが素敵なのでJShellで試そう

## はじめに

DZoneで [JDK 14 Rampdown: Build 27](https://dzone.com/articles/jdk-14-rampdown-build-27) を読むと

> One might say that JDK 14 Early Access Build 27 is the “records build.”

と書いており、とうとう試せるようになった **Records** をJShellで試してみました。

なお、 JDK14 のリリース時や、その後の Records の正式リリース時に内容は変わっているかもしれませんので、ご容赦ください。

## JEP 359: Records

[JEP 359: Records](https://openjdk.java.net/jeps/359)[^1] はJavaの文法改善を目的としたProject Amberの1つ [^2] です。

半年ごとにリリースされるようになった Java ですが、当初のもくろみどおり、いろいろモダンな言語も参考に改善が進んでいます。

そんな中で **Record

元記事を表示

AWS Cognitoで認証したユーザのID トークンを Java で検証する

## やりたいこと

[AWS Amplify の Authentication](https://aws-amplify.github.io/docs/js/authentication) で認証したクライアントが id_tokenをサーバに送信し、Javaで実装したサーバで id_token を検証します。

## TL;DR

– 発行者(ペイロードのiss) が対象にしている Cognitoのユーザプールであることを確認する。
– 署名の検証は https://github.com/auth0/java-jwt に丸投げ。
– com.auth0.jwt.JWTVerifier はスレッドセーフなのを前提にして、Cognitoが署名に使用した RSA鍵ペアを取得する回数を減らすために自前でキャッシュする。

## 実装

IdTokenValidator.java

“`Java:IdTokenValidator.java
package com.exampleawsCognito.jwt;

import j

元記事を表示

Windows上のOpenJDKな環境でJava Web Startを使う

\:information_source: この記事は別サイトで執筆した[Windows上のOpenJDKな環境でJava Web Startを使う – ひつじぶどう](https://blog.rumraisin.tokyo/?p=97)の内容を転載しています。

# はじめに
タイトルの通り, OpenJDKな環境でJava Web Startを使いたくなった(外発的動機)のでその時のめもです。

Oracleに頼ることなくJava Web Startを使うにはIcedTea-Webというのを使えば良いみたいですが, Linux環境で使う記事はたくさんあったもののWindows環境で使う記事はあんまり見かけなかったのでまとめました。

# 実行環境
| 項目 | 値 |
|:—–|:—–|
| OS | Windows 10 Pro |
| Build | 1809 |
| JDK Version | OpenJDK 1.12 |

# 導入手順
下記の手順を実施します。
## OpenJDK 12を準備する
そもそもJava Web StartをOpenJDKで使いた

元記事を表示

JavaとJacksonでJSON その③HTMLにJSONを埋め込んでJavaScript から利用する

#はじめに
JSONを使う場合、JavaScriptからAjax経由でデータの送受信を行うケースが多いと思う。しかしながら、サーバからHTMLを受信したタイミングで、JSONデータを受け取ってJavaScriptで利用したいケースもある。この場合、サーバから返却するHTMLの中にJSONデータを埋め込んで、それをJavaScriptのオブジェクトとして読み込むことになる。PHPを利用した場合は、[HTML に JSON データを埋め込んで JavaScript から利用する](https://qiita.com/hoto17296/items/197bdf91f97a33a69dfc)に記載の事例があったが、我らがJava(Servlet/JSP)による事例がなかったため、悪戦苦闘した結果をここに残しておく。
#環境
– Java 1.8
– Tomcat 8.0.53
– Jackson 2.10.1

#まずは何も考えずにやってみよう⇒失敗
## サーバ側
サーバ側は以下の通りとした。”<"や">“については、[前回](https://qiita.com/kimisyo/items

元記事を表示

51歳からのプログラミング 備忘 android ダイアログに複数のViewを表示

ダイアログに複数のViewを表示するには、Viewを配置したLinearLayoutを、ダイアログにインフレートする。後で使いたい機能なのでちょっと備忘メモ。

構成
1.MainActivity.java
2.MyDialog.java
3.dilog_my.xml

“`java:MainActivity
protected void onCreate(final Bundle savedInstanceState){

AppCompatDialogFragment dialog = new MyDialog();
dialog.show(getSupportFragmentManager(),null);
}
“`

“`java:MyDialog.java

public class MyDialog extends AppCompatDialogFragment{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
AlertDialog.Bui

元記事を表示

JavaFXでルートノードから下位ノードに向かって辿る 〜道順は知ってるんだけど〜

現在、JavaFXを使用してアプリを作成しているのですが、動的にノード(コンポーネント)を削除や追加する必要が出てきました。
しかし、ルートノードから下位ノードに向かってノードを辿っていく情報がほとんど無く、試行錯誤した方法を記載します。(ひとまず、調べたコンポーネントのみ記します)

**環境**
OS : macOS X Catalina
統合開発環境 : Eclipse 2019-12
Java : AdoptOpenJDK 11.0.5
JavaFX : 11.0.2
SceneBuilder : 11.0

“`text:NodeTree
1: AnchorPane ←ルートノード ①
2: ┣━━━ MenuBar
3: ┣━┳━ AnchorPane ②
4: ┃ ┗━┳━ SplitPane ←Horizontal(左右分割) ③
5: ┃ ┣━━━ AnchorPane
6: ┃ ┗━━━ PieChart ④
7: ┗━━━ AnchorPane
“`

① ⇢ ② ⇢ ③ ⇢ ④ の順にノードを辿っていきます。

“`java:sample.java

元記事を表示

Javaの木構造ライブラリ

# はじめに
「Google Guavaに無いんだから仕方ない」?まさか。

# 背景
木構造はたしかにグラフなのだが、だからといってグラフを木構造として使おうとすると気をつけないと木構造ではなくなってしまう。

# ライブラリ紹介
さっさと本題に入ろう。

– Search on GitHub: https://github.com/search?l=Java&q=tree&type=Repositories
– Search on Google: https://www.google.com/search?q=java+木構造+ライブラリ
– Search on Bing: [https://www.bing.com/search?q=java 木構造 ライブラリ](https://www.bing.com/search?q=java 木構造 ライブラリ)

## GitHub: Scalified/tree
**URL**: https://github.com/Scalified/tree
使いやすさ: ★★★☆☆
充実度: ★★★★☆
二分木、多分木はもちろんのこと、式木があ

元記事を表示

JavaとJacksonでJSON その②XSS対策

#はじめに
前回の続きとして、XSS対策について触れてみたい。XSSといっても色々あるが、今回JSONの文字列の中にJava Scriptのコードを埋め込まれる場合の問題点にフォーカスしたい。

#環境
– Java 1.8
– Tomcat 8.0.53
– Jackson 2.10.1

#問題となる状況
前回サーバ側は、URLでGETでアクセスするとJSONを返却するサーブレットを作成したが、今回そのままそれを利用する。そして返却するJSONデータの中にJavaScriptのコードを埋め込んでみる。具体的には以下のJSONを返却するようにした。

“`
{“id”:1,”name”:”kimisyo”,”datas”:[“Programmer”,”Data Scientist“]}
“`

うまくサニタイジングされないと、“`“`の部分のJavaScriptのコードが実行されてしまう。

まずは、一般的な方法として、AjaxによりサーバのURLに

元記事を表示

JDKのあれこれ

###Java Development kit
JDKとはJava Development kitの略で、
要はJava開発キットのことである。

JDKには2つの機能が含まれる

– コンパイラー(コマンド javac)
– javaの実行環境(Java Virtual Machine)

###JDKパッケージ
– Java SE (Standard Edition 通常はこれ)
– Java EE (Enterprise Edition サーバー用)
– Java RE (Runtime Edition 実行環境だけ)
– Java ME (Micro edition 家電などの組み込み用)

今後追加予定

元記事を表示

Spring 案件ソルーション 3

#Spring画面系をどう乗り切るか(技術面)その3

##CSS/Jqueryを試してみる。
###趣旨
とんがった案件でなくてもSpring画面系で必要な技術 HTML CSS jQuery Bootstrap
が出てくるのが当たり前になっている状況がある。今回は公開しているページを改良しながら
電卓を作ってみることによりCSS/Jqueryの練習をしてみようと思う。
###参考にしたページ

【jQuery】かんたん・シンプルな電卓の作り方


###修正内容
・ 4則計算記号を変更した。
→ それに伴って正規表現を使用した。
・ gridを使用するようにした。
###モジュール一覧
・calc.html
・calc.css

##学習用アプリの画像貼り付け
![スクリーンショット 2020-01-03 18.28.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271383/2d9c083a-7b93-d300-a0b

元記事を表示

Java8 ラムダ式の filter() で使用する条件をパラメータで渡す

ラムダ式は変数に代入して再利用することができますが、そのフィルタ条件などは固定されています。
[Java8 ラムダ式を変数に代入して再利用する](https://qiita.com/blueskyarea/items/169a04b77a297ead9774)

そのため、そのフィルタ条件を変えたい場合、別々の式を定義する必要があるかもしれません。
例えば、
”文字列の長さが5の文字列のみ”をフィルタするラムダ式と、
”文字列の長さが8の文字列のみ”をフィルタするラムダ式が欲しい場合、以下のように2つの式を定義する方法が考えられます。

“`java:lengthFiveOrEight
// 文字列の長さが5
final Predicate lengthEqualFive = name -> name.length() == 5;
// 文字列の長さが8
final Predicate lengthEqualEight = name -> name.length() == 8;
“`

条件が常に固定であれば問題ありませんが、そのアプリケーションが柔

元記事を表示

Java/SpringでreCAPTCHA v3を実装する

# はじめに
ググってもJava向けの記事がなかったのと、公式サイトは若干わかりづらかったのでまとめてみました。

## 公式リンク
– [Google reCAPTCHA公式](https://www.google.com/recaptcha/intro/v3.html)
– [フロントエンド実装について](https://developers.google.com/recaptcha/docs/v3)
– [バックエンド実装について](https://developers.google.com/recaptcha/docs/verify)

## 参考リンク
– [お問い合わせフォームにreCAPTCHA v3を導入してみました!](https://knowledge.moshimore.jp/entry/recaptcha_introduction)
– 基本的な実装が簡潔にまとまっている
– [reCAPTCHA v3 入れてみた](https://www.techscore.com/blog/2018/12/06/recaptcha-v3/)
– エラー分岐な

元記事を表示

Javaでhttps接続確認する

https接続確認をブラウザからではなく、Javaから行います。
環境はJava8を利用しています。他にはライブラリは利用していません。

# ソース
“`java
package ssltest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
import java.security.cert.Certificate;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLPeerUnverifiedException;

public class Connec

元記事を表示

【2020年1月】令和だし本格的にVSCodeのRemote Containerで、爆速の”開発コンテナ”始めよう

# VSCode の Remote Conainer で”開発環境+プロジェクト全部入りのコンテナ”から開発をスタートダッシュをキメませんかッ!?

開発でVS Code の Remote Conainer使っていますか?単に既存のコンテナに入るだけなら Remote SSH でも構いませんが、”ローカル開発環境の一部”として、いやむしろ**ローカルの開発環境=Remote Container**として、ビンビンにRemote Container使っていきましょう。令和だし!~~(すでに2年だけどね・・・?)~~

特にMacを使っていると最初からPythonやらPHPやらRubyやらが入ってしまっているので**開発環境がある**のですが、これらは割とmacOSのエコシステムに組み込まれているので不要にパッケージの追加削除、できないのですよ。`brew`とか意外とあっさり壊れますしね・・・。特に**バージョンアップなんてもってのほか**です。全然、余裕でおかしくなります。
そんなわけでMacに入っているPythonやRubyでプログラミングをバリバリしていると・・・**ふと、後戻りでき

元記事を表示

Javaで作る自動販売機(ドメイン駆動)

# 経緯
shiracamus様からのアドバイスを元に、DDD(ドメイン駆動)的に書き直しました。
その際、ロジックの見直しも一部行い、よりシンプルになるように致しました。

# 処理フロー
・インスタンス生成
・商品リスト初期化(在庫補充)
・商品一覧表示(陳列商品の表示)
・商品選択(ユーザによる入力)
・入金(ユーザによる入力)
・販売(課金処理)
・おつり(返金処理)

# 動作イメージ
![venderMachine_DDD.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190809/72d04dbd-2453-92b8-8e58-54c70b90304b.gif)

# ソースコード
“`Main.java
package vm;

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
// インスタンス生成
Store vend

元記事を表示

アルゴリズム体操10

#Sum of Two Values
整数の配列とある値を指定して、配列の二つの要素の合計が指定された値に等しくなるかどうかを判別します。

##説明
![Screen Shot 2020-01-02 at 17.09.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/d4d3a856-7828-90f2-27d6-970e48a12701.png)
CASE1: Target = 10の場合は2 + 8 = 10 となるので true を返します。
CASE2: Target = 20の場合は二つのペアが見つからないので false を返します。

##Solution
###Runtime Complexity O(n)
配列全体を1回スキャンして、訪問した要素をハッシュセットに保存します。
スキャン中、配列内の要素 ‘e’について、ハッシュセットに ‘val – e’が存在するかどうか、
つまり ‘val – e’が既にアクセスされているかどうかを確認します。
ハッシュセットで v

元記事を表示

SpringToolSuite4にlombokをインストールする

# STS4にlombokのインストールする方法
久しぶりにSTSでjava開発しようとしたら、lombokのインストール方法を忘れたのでメモ。
## 環境
Ubuntu:16.04.6 64bit
SpringToolSuite4:4.5.0.RELEASE
lombok:1.18.10
## Lombokのインストール
STSを閉じた状態でインストールを開始する。
[lombokダウンロード](https://projectlombok.org/download)
ダウンロードしたlombok.jarを実行ファイルのSpringToolSuite4と一緒の場所に配置。
lombok.jarをダブルクリックで起動し、Specifylocationをクリックして、SpringToolSuite4を指定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558865/aab8b9a8-32a3-dc4f-559a-070e6683afd4.png)
install/Updateをクリック

元記事を表示

OTHERカテゴリの最新記事