JAVA関連のことを調べてみた2021年12月08日

JAVA関連のことを調べてみた2021年12月08日

MacでEclipse環境にlombokをインストールする

備忘録です。

# lombok.jarをダウンロード

https://projectlombok.org/download

ここから最新をダウンロードします。

# lombokをEclipseにインストールする

lombokがダウンロードフォルダにあると仮定して

“`bash
$ java -jar ~/Downloads/lombok.jar
“`

起動するとこんな画面が出てくるので自分がインストールしたいIDEのみチェックをつけて`install/update`を実行します。

![スクリーンショット 2021-12-08 11.19.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493116/6a9fa971-42a2-6951-3b61-d4bb2fd99c8b.png)

その後、一度Eclipseを`⌘Q`で終了して起動しなおしエラーが出ているプロジェクトをビルドすれば通るはずです。

元記事を表示

脆弱性検出ツール「Snyk Vulnerability Scanner」 vs. 脆弱性だらけのWebアプリケーション「EasyBuggy」

# はじめに

脆弱性検出ツール[「Snyk Vulnerability Scanner」](https://plugins.jetbrains.com/plugin/10972-snyk-vulnerability-scanner)は、脆弱性だらけのWebアプリケーション[「EasyBuggy」](https://github.com/k-tamura/easybuggy/blob/master/README.jp.md)の脆弱性をどの程度検出できるでしょうか?

![vs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43869/52332422-03da-5339-606b-6ca9bd3dd568.png)

Snyk Vulnerability Scannerには、以下のIDEのプラグインがありますが、今回はIntelliJのプラグインで検証してみました。

– Eclipse
– JetBrainsのIDE(GoLand、IntelliJ、PhpStorm、PyCharm等)
– Vi

元記事を表示

[JavaSilver受験対策] 非検査例外と検査例外の違い 

この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting “Advent Calendar 2021”)の8日目の記事です。
こんにちは、シアトルコンサルティングの村田です。
## はじめに
Javaの例外クラスに関して非検査例外と検査例外の内容と違いを解説しており、下記の方を対象としています。

* 非検査例外と検査例外ってなに
* Javaシルバーの勉強中で例外についての問題が分からない

## 1. 例外は2種類に分けられる
 Javaには例外処理をしなくてもコンパイルエラーにならないクラスがあります。
これを**非検査例外**と呼び(コンパイラが検査しないから「非検査」)
try-catchやthrowsで例外ハンドリングをする必要がありません。
反対に例外ハンドリングが必要なクラスが**検査例外**です。
検査例外はハンドリングしなければコンパイルエラーになります。
 例外クラスは大きくEr

元記事を表示

Minecraft Java Edition 1.18 サーバ側のバージョンアップの備忘録

# はじめに
こんにちは withでエンジニアをしているhayatonです。(最近入社したのでピチピチの若手です。)
withでは サーバ周りのお仕事をさせてもらっています。

今回、アドベントカレンダーで記事を書かせていただくこととなり、何を書こうかと悩んでいたところに、
Minecraftの大型アップデートがきた。ということもあり、その内容を記事にさせていただきました。

:::note info
このドキュメントはマイクラサーバの構築手順ではありません。バージョンアップ作業にフォーカスをおいたものです。
:::

https://www.minecraft.net/ja-jp/article/the-caves—cliffs-part-ii-update-here-jp

私は、マイクラ(Minecraft JavaEdition 1.11ぐらいから)にハマっています。(公共事業大好き勢)
一人だけでは飽き足らず、自前でサーバを構築し友人同士と同じ世界で楽しんでおります。(鯖管兼任)
そのサーバのアップデートについて

– 自分の作業備忘録
– 気づいたポイント(3つ)

元記事を表示

azure batch 使った機能を自社アプリケーションに組み込んでみた

# 基礎知識
azureバッチの概要はこちら↓
[azure Batch ってなんなん?](https://qiita.com/sho-yamashita/private/1eb736edcee38b4a86ad)

# はじめに
私が管理しているアプリケーションで同じ処理を大量に並行で実行したい要件があり、Azure Batchを使って、計算する機構をつくりました。

# アプリ概要
あるWebアプロで指定された複数のパラメータを元に各パラメータごとに計算用アプリを実行します。
## 仕込み
– 元々Spring で作った自社Webアプリケーションがあります。
– 今回計算用にSpringでCliアプリケーションを用意しました。(引数を2つ受け取って計算結果をDBに保存する)

## 仕組み
1.計算用のCliアプリケーションをazure storageに配置(batchCli.jar)
2.自社アプリ本体から、Azure Batchのリソースを作成するように指示
3.指示を受けて、プール、ノード、ジョブ、タスクが作られる
4.作られたノード上でタスクが実行され、DBに結果書き出し、

元記事を表示

【Elixir】ElixirとOOP、プログラミングスタイルの違い

https://qiita.com/advent-calendar/2021/fukuokaex

2021/12/08の回です。

昨日は [Koyoさん](https://qiita.com/koyo-miyamura) の [Elixir + SendGrid でメール送信してみる](https://qiita.com/koyo-miyamura/items/34e369200fe1aeafb0af) でした。

# はじめに

私はfukuoka.exを通じて、Elixirに関わってちょうど1年になります。
普段は~~O社を憎みながら~~Javaでお仕事をするエンジニアなんですが、知人の紹介でElixirを触り始めました。

当然JavaとElixirのパラダイムは大きく違うので、最初は戸惑うことがありました。
今回は振り返りとして、それぞれのプログラミングスタイルの違いを書いていこうと思います。

# ループ処理の取り扱い

**Elixirではfor文などを使う必要がありません。**
「何を言っているんだ?」と思いますが、階乗を計算するソースコードを見てみましょう。

まず

元記事を表示

AndroidのJavaで任意関数を一定間隔で実行する方法

⚠ 昔書いた記事の流用です。

“`java
final int delayMilli = 10000; // 定期実行間隔をミリ秒で指定する.
final Handler handler = new Handler();
final Runnable r = new Runnable() {
@Override
public void run() {
// f(); 定期実行したい関数.
// invalidate(); 再描画する場合は,これを有効にする.
handler.postDelayed(this, delayMilli);
}
};
handler.post(r);
“`

元記事を表示

RxJava概要メモ

■RxJavaの特徴

– Observerパターンをうまく拡張している
– データの通知 + データストリームの完了の通知・エラー発生時の通知
– 非同期処理が行いやすい
– Observable契約というガイドラインにしたがって実装している限り、直接的なスレッドの管理がなくなり実装もシンプルになる
– 同期処理・非同期処理で実装方法が大きく変わらない
– 関数型プログラミングの影響を受けている
– 処理の多くを関数型インターフェースを受け取るメソッドを使って実現している
– 入力と結果のみ決めてあれば具体的な処理に関しては開発者に委ねられる
– 関数型プログラミングの原則に従うことで、処理の影響範囲を狭めることができ非同期処理の複雑さを回避できる

■非同期処理

– RxJavaでは、開発者が直接スレッドを扱い管理をしなくて良いように、各処理の用途に合ったスレッド管理を行うSchedulerを用意している
– そのSchedulerを指定することで、スレッドの制御ができる

– Schedulerを指定できる箇所
1.生産者(Observable)

元記事を表示

基本から学ぶJava – 変数について –

# 初めに
今回から執筆させていただく初心者です。
備忘録という意味合いも強いのですが、第一に、私自身が**「他人に説明できるかどうか」**を目的に執筆していこうと思います。

今回はJavaどころかプログラミング自体よくわからないという方に配慮して執筆してみます。
ですので、JVMがどうとかメモリがああだとか処理速度がどうとか等は触れずに、あくまでも**Javaというプログラム言語を扱う**事に焦点を当てていきます。

そういう意味では一番大切なことではあるのですが、Javaのインストールについては事前に済ませおり、コンパイルも出来、実行も出来る。という前提で進んで行きます。 ~~ぶっちゃけそこは他の方の記事を見ればいいんじゃないかと思います。~~
需要があればインストール方法からコンパイル方法等書こうとは思います。

元々はJavaの型について書こうと思っていたんですが、変数について書いていると大分長くなったので今回は変数のみの解説とします

## 環境について
私はjdk-11を使用し、開発環境はJavaではeclipseを使用していますが、現在は諸事情によりVscodeを使用し

元記事を表示

【LeetCode】アルゴリズム体操 21. Merge Two Sorted Lists

# LeetCode – Merge Two Sorted Lists

#### 問題文
>You are given the heads of two sorted linked lists list1 and list2.

>Merge the two lists in a one sorted list. The list should be made by splicing together the nodes of the first two lists.

>Return the head of the merged linked list.

#### だいたいの日本語訳
引数:`ListNode list1, ListNode list2`
戻り値:ListNode型のリンクしてるリストのいっちゃん最初

list1、list2っていうリンクしてるリストのいっちゃん最初をそれぞれあげるね。ちなみにソートされてるよ。
この2つのリス

元記事を表示

【LeetCode】アルゴリズム体操 1920. Build Array from Permutation

# LeetCode – Build Array from Permutation

#### 問題文
> Given a zero-based permutation nums (0-indexed), build an array ans of the same length where ans[i] = nums[nums[i]] for each 0 <= i < nums.length and return it. > A zero-based permutation nums is an array of distinct integers from 0 to nums.length – 1 (inclusive).

#### だいたいの日本語訳
引数:`int[] nums`
戻り値:int型の配列

与えられた配列(nums)と同じ要素数の配列(ans)を返してほしいんだけど、`ans[i] = nums[nums[i

元記事を表示

ABC168を解いてみた(C問題まで)

こんにちは!!

今回はAtCoderのコンテストに向けて過去問を解いたので、C問題までの各問題について方針と解答コードを投稿していきたいと思います。

#A問題-∴ (Therefore)
https://atcoder.jp/contests/abc168/tasks/abc168_a

###方針
1. 与えられる入力値(Nとする。Nは999以下の正整数)を文字列方で受け取る。
2. 一の位を比べれば良いので、1.で受け取った文字列から末尾の文字を取り出して数値型に変換
3. 2.で変換した値を問題文に従って判定して分岐させる。

###コード
if文の分岐をswitch文に変えても良かったかもしれません…?

標準入力と出力に関しては下記サイトから拝借しています。

https://qiita.com/p_shiki37/items/a0f6aac33bf60f5f65e4

“`Main.java
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
impor

元記事を表示

Javaを利用してWordテキストボックスでテキストの回転方向を設定する方法

##Javaを利用してWordテキストボックスでテキストの回転方向を設定する方法

##背景
Word文書にテキストボックスを追加し、テキストボックスを水平方向のテキスト配置または垂直方向のテキスト配置に設定するか、テキストボックスでテキストの回転方向までも設定できます。Javaプログラムコードにより、上記のテキストボックスの操作も実現できます。以下は、具体的な実装手順を示すJavaコード例です。

プログラムテスト環境は以下のとおりです。
Wordテストドキュメントバージョン:.docx 2019
Word Jarパッケージツール:**[free spire.doc.jar 3.9.0](https://www.e-iceblue.com/Download/doc-for-java-free.html)**
コードコンパイルツール:IDEA
JDKバージョン:1.8.0
ドキュメントの操作に必要なjarパッケージツールをインポートし、結果は以下の通りです:
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.

元記事を表示

Java変数のスコープ(有効範囲)について

この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting)の7日目の記事です。
こんにちは、シアトルコンサルティングの小泉です。
##はじめに
今回は変数のスコープ範囲についてまとめました。
プログラミングを学び始めた際に、変数の有効範囲がどこまでかわからずエラーが出ることがよくありました。
そんなプログラミング初学者に向けて作成いたしましたので、変数のスコープについて知りたい方はぜひ活用してみてください。

##ゴール
変数のスコープについて理解した上でコードを書けるようになる。

##Java変数のスコープ(有効範囲)とは
文字通り定義した変数の有効な範囲のことです。
(変数の宣言した場所によって、その変数を使用できる範囲が制限されます)

・ローカル変数
・インスタンス変数
・static変数

宣言する場所によって、呼び名も複数種類に分かれています。

## ローカル変数
{ } ブロック単位で有効範囲が変わり、ブロック

元記事を表示

起動時に初期化されてしまうクラスの振舞

#TL;DR
起動時に初期化が走ってその後の挙動が固定されてしまうクラスがマルチバンドル環境下でどんな問題を引き起こすのかを解説します。

#まえがき
前にもやりましたが、主にOSGiでシングルVMマルチバンドルの環境で起こるできごとについて書きます。SecurityManagerが(あっさりと)[なくなってしまう](https://openjdk.java.net/jeps/411 “JEP 411”)ことが決定した今になってなんやねん、という感じですが、そうは言ってもまだ生き残っているシステムもありますので、実感するもよし、他山の石とするもよし、でお願いします。

#起動時に初期化って
起動時に初期化、すなわちstatic initializerです。というのは嘘ですが、ほぼそんな感じです。主に、クラスローダーがクラスを読み込むと同時に初期化されてしまうようなクラスの話です。

#それって
まあいろいろと例はあるのですが、ここでは分かりやすい?例として[ImageIO](https://docs.oracle.com/javase/8/docs/api/javax/imageio/

元記事を表示

マインクラフトでトロッコの自動運行をする

#概要

CIBPluginは、Minecraftサーバ(SpigotMCサーバー)上でトロッコの自動運行を行うプラグインです。
本記事ではCIBPluginの開発背景と技術的概要を説明し、現在の問題点とその改善案について説明する。
添付資料として、プラグインによるトロッコ走行時のYouTube動画とGitHub上のコードを提示する。

#プラグインの開発背景

スタッフをしていたMinecraftサーバー内でトロッコ鉄道網を整備した人がいたが、ほとんどのプレイヤーがアイテムのトロッコを持ち歩くのが面倒で利用頻度が低かった。
トロッコの配布を駅で行うなどしてみたが補充の手間がかかり、また線路上にエンティティ化したトロッコが放置されるなどの問題が発生した。
またMinecraftのトロッコ鉄道にはつきものだが、加速用レールの効率的な配置を考えるのも手数がかかっていた。

#主な解決方法

トロッコの生成:
自動で線路上に配置する駅設備を用意する。
トロッコの自動運行:
線路上に配置されたトロッコが自動的に発車する

元記事を表示

STSでStarterProjectを作成しようとしたら「unsupported class file major version 61」でこけた

###「unsupported class file major version 61」ってなに?
Java17非対応だよ!と怒られている。
classファイルのversion61は、Java17を示す。

### 対策方法
(プロジェクトのビルドツールがGradleなら)Gradleのバージョンを上げる必要がある。
STSの preference >> Gradle を開くと、初期状態では「Gradle Wrapper」にチェックが付いているはず。

Gradle Wrapper is 何? を知りたければぐぐると色々出て来るので読みましょう。
とりあえず今すぐ動かしたいなら、「Specific Gradle version」にチェックを入れて、GradleのバージョンをJava17サポート済みのものに変更すればOK。

元記事を表示

楕円曲線暗号の鍵をJavaで読み込む

OpenSSLで生成した楕円曲線暗号の鍵をJavaで読み込む方法。RSAはあるけど楕円曲線が無かったので。

# 手順

## OpenSSLで鍵生成

“`bat
$ openssl ecparam -genkey -name secp256r1 -out keypair.pem
$ openssl ec -in keypair.pem -outform PEM -pubout -out public.pem
$ openssl ec -in keypair.pem -outform PEM -out private2.pem
$ openssl pkcs8 -topk8 -nocrypt -in private2.pem -out private.pem
“`

できたもの

– `public.pem`:公開鍵
– `private.pem`:秘密鍵(PKCS#8形式)

いらないもの

– `keypair.pem`
– `private2.pem`

ポイント1:`-name` で指定する楕円曲線の一覧は `openssl ecparam -list_curves` で出

元記事を表示

Javaを使った関数型プログラミング

[Javaのカレンダー | Advent Calendar 2021](https://qiita.com/advent-calendar/2021/java)の6日目の記事です

# 概要

手続き型のこれを

“`java
@GetMapping(“/items”)
public List get(@RequestParam(name = “name”, defaultValue = “”) String name) {
// 入力チェック
if (name.length() <= 10) { throw new IllegalArgumentException("name"); } // 商品をDBから検索 List itemDataList = repository.findByNameLike(“%” + name + “%”);
List result = new ArrayList

元記事を表示

Javaアクセス制御について

この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting)の5日目の記事です。
こんにちは、シアトルコンサルティングの小泉です。
##はじめに
今回はプログラミングを学び始めた際に苦戦したアクセス制御についてまとめました。
プログラミング初学者の方に向け作成いたしましたので、アクセス制御について知りたい方はぜひ活用してみてください。

##ゴール
アクセス修飾子の役割と使用場面を理解できるようになる。

## フィールドとメソッドに対するアクセス制御
Javaでは、それぞれのフィールド及びメソッドに対してアクセス制御を行うことができます。
以下の4段階からアクセス制御のレベルを選ぶような仕組みになっています。

| 制限のレベル | 名称  | 指定方法 |アクセスを許可する範囲|
|:—:|:—|:—|:—|
| 制限が厳しい |private|private|自分自身のクラスのみ|
|

元記事を表示

OTHERカテゴリの最新記事