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

JAVA関連のことを調べてみた2020年06月08日
目次

maven-formatterを使ってformatを自動化

# はじめに
元々はチームメンバー各々で、IDEにformatの設定をしてformatを行ってました。
githubにpushしたときに自動でformatされたら嬉しいよね。という話になり導入を行ったので、その方法をまとめます。
# 1.mavenの設定
今回は[formatter-maven-plugin](https://code.revelc.net/formatter-maven-plugin/)を使います。
## 1.1. pom.xmlにpluginを追記。
“` net.revelc.code.formatter
formatter-maven-plugin
2.11.0
“`

設定を行うと、以下

元記事を表示

SARS-CoV-2の流行によって暇になった学生がTwitter Appを作ったら最終的にTwitter APIの制限をくらった話

#はじめに
何か問題にブチ当たった時、皆さんググりますよね?
今回、APIの制限を受けた時もググったのですが出てくる日本語の情報がまー少ない少ない。。。

そのため、私と同じ状況に陥ってしまった人の一助になればと思い、この記事を書くことにしました。
(**恥を晒すことにもなりますが**)
(**にも関わらず自分が書きたいからっていうのも結構あったりする**)
(**つまり要らん話がとても多い**)

この話は「**他山の石以て玉を攻むべし**」を皆さんに実行していただくための記録です。
くれぐれも私と同じような轍を踏むことがないようにお祈りいたします。。。

(**Twitter APIの制限解除方法だけ知れればいい**という方は`まとめ`だけ読めば十分です)

#2020年3月
[SARS-CoV-2](https://www.google.com/search?q=SARS-CoV-2)なる新型コロナウイルスが流行しました。
これを読んでる人が「そんなことあったなぁ」となっていることを願いますが…
このウイルスの影響で全国の学校が休校の措置をとりました。

そのため、高校2年生(2

元記事を表示

Java ラムダ式の使いどころ

#概要
Java8からラムダ式が導入された。
本ページは、Javaのラムダ式の使いどころについてのメモページ。
ラムダ式は、StreamAPIと組み合わせて使用すると、使い勝手が良い。

##リストから一定の条件で値を取り出し
###ラムダ式、StreamAPIの使用なし
“`java
List list = Arrays.asList(2, 9, 5, 7, 4);

for (Integer i : list) {
if (i >= 5) {
System.out.println(i);
}
}
“`
###ラムダ式、StreamAPIを使用あり

“`java
List list = Arrays.asList(2, 9, 5, 7, 4);

list.stream()
.filter(i -> i >= 5)
.forEach(System.out::println);
“`

ラムダ式、StreamAPIを使用したほうがスッキリと可読性良く記載ができる。
以下、ラムダ

元記事を表示

Eclipse(Java)のダウンロードとインストール(Mac版)

最初に、Pleiades-Eclipse,IntelliJなどの日本語化プラグインのサイトをクリックします。

スクリーンショット 2020-06-07 22.22.31.png

クリックしたら、この画面に行きます。最新のEclipse2020をクリックします。

スクリーンショット 2020-06-07 22.22.50.png

その次に、Mac 64bit, full Editionをクリックします。

Minecraft Java Mythicmobs プラグインを使用してMOBを作る|準備編1

#はじめに
早起きして、急ぎながらも読んで下さっている方はおはようございます(*^o^*)(*^O^*)
昼にのんびりとこの記事を読んで下さっている方はこんにちは( ノ゚Д゚)
夜に学校 仕事終わりにのんびりと読んでいる方はお疲れ様です。こんばんは\(^▽^)/!

と言う事でどうも、何度も言いますが当記事を読んでいただきありがとうございます!!
当記事では、MinecraftJavaのプラグイン__Mythicmobs__を誰にでも、そして分かりやすく、楽しく教えよう!!エンジョイisエンジョイ(?)元気があれば何でも出来る!!と言う事で急に始めました(=・ω・)ノ

筆者は基本的にテンションが高い明るい人です!!ビックリマーク 顔文字 草 ww 等を多様すると思いますw
ですが、ふざけてないです。真面目に解説しているつもり\_( ゚ロ゚)ここ重要//
ですのでよろしくお願いしますー
誤字が1個114514%あると思います。その時は指摘してくださると助かります!!
まだ助かる…そう!!こ↑こ↓マダガスカル!!
##用語
因みにこれから当記事は以下の用語を使用します。
当記事=この

元記事を表示

PKCEのCode_VerifierとCode_ChallengeをJMeterリクエストに組み込む方法

# はじめに
OAuthでの認可コード横取り攻撃対策としてPKCE([RFC 7636](https://tools.ietf.org/html/rfc7636))という仕様が策定され、クライアント側でCode_VerifierとCode_Challengeと呼ばれるコードを生成し、リクエストのパラメータに埋め込む仕様になっている。

PKCE対応したAPIサービス開発でJMeterを利用した負荷試験を実施することになり、クライアント側のコード生成処理をJMeterに組み込むことなったため、その時に組み込んだ方法や手順について解説する。

## Code_Verifier、Code_Challengeの生成
JMeterでリクエストに埋め込むコード(Code_Verifier、Code_Challenge)を生成するため、コード生成するクラスを含むjarを生成する。
コード生成アルゴリズムは[RFC 7636](https://tools.ietf.org/html/rfc7636#page-8)にて下記の通り定義されているので、仕様に従ってコード生成を行うJavaプログラムを実装する

元記事を表示

[Java/Kotlin]画像の向きを考慮してリサイズする

# 概要
– iPhoneのカメラで画像を作成した場合、画像の向きはEXIFのorientationに保存される。
– EXIFはimagemagicの`identify`コマンドで確認できる。

“`
$ identify -verbose IMG_1046.png | grep Orient
Orientation: TopLeft
“`
– 画像をリサイズする場合はEXIFを考慮する必要がある。
– 自分で実装するのは大変なのでライブラリを使う。

# 使用するライブラリ

– [sksamuel/scrimage](https://github.com/sksamuel/scrimage) – Java, Scala and Kotlin image processing library

# 実装

“`build.gradle
dependencies {

implementation “com.sksamuel.scrimage:scrimage-core:4.0.4”

}
“`

“`ImageResiz

元記事を表示

ReactでLIFFアプリケーションをつくる 〜その3 買い物リスト(tobuy)アプリを作る〜

# はじめに

前回[ReactでLIFFアプリケーションをつくる 〜その2 herokuにデプロイしたReactアプリをLIFF連携する〜
](https://qiita.com/kaad/items/893e0657e9746681e2c3)の続きです。

今回は**LIFFアプリケーションを作る**というより、**Reactで買い物アプリを作る**に近いです。
フロント初心者なので、いったん1つアプリっぽいのが作れたので記事にしました。

# Tobuyアプリを作る(フロント)

## 準備(Bootstrapをインストール)

あまりcssは得意ではないので、楽にそれっぽく作れる`Bootstrap`を利用しました。
[React-Bootstrap 本家](https://react-bootstrap.github.io/)から利用方法を確認できます。

まずは以下コマンドでインストールします。

“`
docker-compose run –rm –service-ports node sh -c “yarn add react-bootstrap bootstra

元記事を表示

【Android→WEB】円マーク・バックスラッシュのコードポイント変換(コードポイント:A5 or C2A5 ⇔ C5)

# 概要
“円マーク(半角¥)”をAndroidで用いていた際に、
Windowsで”バックスラッシュ(半角/)”として、文字コードが扱われてしまった為、
円マークとバックスラッシュとの文字コードポイントの違いと、本対策について纏めました。

※ソースコードは、全てJavaを用いております。

# 各環境でのコードポイントの違い(円コード・バックスラッシュ)
各環境でのUTF-8で、
円コードとバックスラッシュは、以下のコードポイントが使用されます。
> Windows Web
円マーク: 5C
バックスラッシュ: 5C

> Mac・iOS・Android Web
円マーク: A5
バックスラッシュ: 5C

> iOS・Androidネイティブアプリ
円マーク: C2A5
バックスラッシュ: 5C

[参考URL]
[円マークとバックスラッシュの文字コード](https://qiita.com/alt_yamamoto/items/578cb9da6a2225030632)

# 対策
対策としては、円マークのコードポイントを全て、
Windows Web(コードポイント:A5

元記事を表示

Automation Anywhere A2019 の共通開発部品であるパッケージを作成する #1~まずはSDKサンプルをそのままビルドして使う

Automation Anywhere A2019では、「パッケージ」という共通開発部品を作成、配布することでBot作成を効率化することができます。
先日オンラインで開催された[Automation Anywhere社主催Developer Meetup Vol.2](https://rpasouken.com/event-2/webinar/2488/)でも解説されていた内容を参考にしながら概要をまとめてみました。パッケージはJavaのテクノロジーを使ってビルドされていますので、開発にはJavaのビルド環境を整えます。

環境として使うのは以下のものです。

* Automation Anywhere Enterprise A2019.12 (ビルド4111) 商用版
* JDK 11
* IntelliJ IDEA Community Edition (Java等の統合開発環境、Eclipseでもよい)+Gradle plug-in v.5.x.x
* Gradle (オープンソースビルド自動化システム)

※ スクリーンショットはDeveloper Meetup Vol.2のウェ

元記事を表示

Spring Boot 2.3のApplication Availability

[Spring Boot Features – 1.6. Application Availability](https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/reference/html/spring-boot-features.html#boot-features-application-availability)を動かしただけのメモ。

“`gradle:build.gradle
plugins {
id ‘org.springframework.boot’ version ‘2.3.0.RELEASE’
id ‘io.spring.dependency-management’ version ‘1.0.9.RELEASE’
id ‘java’
}

sourceCompatibility = ’11’
repositories {
mavenCentral()
}
dependencies {
implementation ‘org.springframework.boot:spring-boot-

元記事を表示

Java/Google Sheets API V4/APIキー認証の場合はデータの更新処理(update)は401エラー(OAuth認証が必要)さらにSheetsオブジェクトにcredentialを渡すインタフェースが無い

できないならできないと書いておいて欲しい。=>Googleさん

# 環境

| 項目 | バージョン等 |
|:–|:–|
| java | 1.8 |
| Sheets API Version | 4 |
| スプレッドシートの所有状態 | 所有かつURLを知っていれば誰でも編集可能 |

# 症状

– スプレットシートを所有しているアカウントでGoogle API Projectを作成
– Sheets APIを有効可
– APIキーを作成(Sheet API使用を割り当て)
– APIキーを使ってスプレッドシートにアクセス
– 読み込み(get)はOK
– 書き込み(update)で401エラー
– 例外は`GoogleJsonResponseException`
– エラーメッセージ:`401 Unauthorized`

# 原因

(どこにも書いてないが)書き込みの場合は、APIキー認証では不可でOAuth2認証が必要な模様。

どこにも書いてないのに、この結論を得られたのは`API Explorer`のおかげ

元記事を表示

Spring BootでDynamoDBのquery methodを使う

# 状況

“`java:TweetRepository.java
package com.pontsuyo.anyiine.domain.repository;

import com.pontsuyo.anyiine.domain.model.Tweet;
import java.util.List;
import org.socialsignin.spring.data.dynamodb.repository.EnableScan;
import org.springframework.data.repository.CrudRepository;

@EnableScan
public interface TweetRepository extends CrudRepository {
@Override
List findAll();

List findAllByType(String type); // <- これはダメという話をします } ``` これはSpringアプリケーションのDBとしてDyn

元記事を表示

昔ながらのプログラマが躓いた Android アプリ開発のポイント

# これって何の話?

私は元々 C/C++ や Java で PC のデスクトップまたはコマンドラインで動作するアプリケーションを主に書いていたのですが、いまは Android アプリを書くことが多いです。
昔ながらのデスクトップアプリやコマンドラインアプリの開発から入ったプログラマから見ると、Android アプリの開発には大きなカルチャーギャップがあります。それが原因で Android 開発が思うように行かなかったり挫折しちゃってる人もいるんじゃないかなと思ったりします。
そこで、そんな昔ながらのプログラマのために、押さえておきたい Android 開発のポイントを書いてみたいと思います。

# エントリポイントはどこだ?

昔ながらのプログラマにとってコンピュータプログラムは「始まりと終わりが明確にあるもの」です。
たとえば以下のような C のプログラムを見てみましょう。

“`c
#include

int main(int argc, char* argv[]){
printf(“Hello, world!”);
return 0;
}

元記事を表示

【Java】わざわざインターフェースを使うのはなぜか(Springもあるよ)

# はじめに
javaを学んでいるけれども、インターフェースの使いどころがわからないという方は多いのではないでしょうか。
実際、インターフェースがなくてもプログラムは動きますし、単に動かすだけならない方が楽だと思います。
この記事では、そんな一見すると不要に思えるインターフェースについて書いていきます。

以下、通常のJavaのコードとSpringを使ったコードが交互に出てきます。
インターフェースを理解する上で、Springは非常によくできたフレームワークのため、あえて今回併記しました。
どちらも実行結果は同じなので、お好きな方をご覧ください。

# サンプルプロジェクト
gradleがよしなにいろいろやってくれます。
実際に実行しないなら、ここはスキップして大丈夫です。

“`
$ git clone https://github.com/reta-ygs/interface-demo.git
$ cd interface-demo
“`

通常のjavaとして実行

“`
$ ./gradlew pojo
“`

Springを実行

“`
$ ./gradlew sp

元記事を表示

Spring Boot と Let’s Encrypt でHTTPS

# はじめに

Spring Boot でHTTPS対応のWebアプリを作ります。アプリケーションサーバーは、Spring Bootのアプリ内に自動的に組み込まれるTomcatを使用します。
サーバー証明書はLet’s Encryptを使用してインターネットで信頼される正式な証明書を作成します。

なお、HTTPSを利用するには自サーバーがインターネットからアクセスできる必要がありますので、ドメイン名(FQDN)が必要です。私の場合、試験用に使用したサーバーでは以下のDDNSを利用しています。

[私的MyDNS.JP](https://www.mydns.jp/)
https://www.mydns.jp/

※ AWSでEC2のサーバーを立ち上げるとパブリックIPアドレスに紐づいたドメイン名が与えられますが、Let’s Encryptのポリシーによりこの名前で証明書を作成することはできません。

### 開発環境

Open JDK 14.0.1 (※)
Spring Boot 4 4.6.2.RELEASE
開発PC Windows 10 Pro 1909
サーバー AWS EC

元記事を表示

学んだこと②〜Mock〜

#はじめに
単体テストでMockを使用しているので、振り返りも兼ねて簡単にまとめたいと思います。

#Mockとは
簡単に説明すると、
**「テスト対象クラスから呼び出される、
     部品(他のソース)の代わりになってくれるもの」。

例えば、計算結果を出力するテスト対象クラス、
実際に計算をしてくれるサブクラスがあったとする。

このサブクラスの代わりをしてくれるのがMock。ということ。

##Mockまとめ

####1.モックオブジェクトの生成

“`java
Sub sub = Mock(Sub.class);
“`
Mockメソッドを使用してモックオブジェクトを生成

####2.Mockito.when().thenReturn();
“`java
//aは部品の呼び出し処理
//bは呼び出された部品が返す値
Mockoito.when(sub.getAns()).thenReturn(b);
“`
テスト対象ソースでSubクラスを呼び出しているが、
テストを通すにあたって、Subという部品が完成していない場合、
呼び出し部分でテストが落ちてしまい、最後まで通

元記事を表示

学んだこと①~DJUnit~

#はじめに
私がテスト作業をするにあたって使用している**「DJUnit」**について、
簡単にまとめたいと思います。

この記事がこれからテストを初めてやるという方の**入口**として、
少しでも力になれたらと思います。

#DJUnitについて
「JUnitとは違うのか?」と最初戸惑いましたが、
どうやらほとんど同じと考えて良いみたいです。

1つJUnitと違う点を挙げるとするならば、
DJUnitを実行すると、カバレッジレポートというのが使えるということ。
↓こんなの
![カバレッジ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641913/9182a4d6-d4ef-45ee-798e-8d193266ffad.jpeg)
テストにおけるカバレッジとは何か、、、
簡単に解釈すると、
テスト対象となるソースの全体の何%を確認できたかな(網羅できたかな)ということ!

つまりDJUnitは機能的に見ると、
**カバレッジレポートを視覚的に見ることが簡単にできるJUnit**ということになります。

元記事を表示

flywayのコールバックをJavaで書く

## はじめに

Gradleとflywayを使ってデータベースマイグレーションをしているアプリで
コールバックをJavaで書いた時に試行錯誤しました。

結論からいうと、flywayのタスク実行前にCallbackクラスをコンパイルすれば良いです。

今回検証したコードは以下のリポジトリを参照してください。
https://github.com/mahaker/flyway-callback-java

## 環境

Java: OpenJDK 11
Gradle: 5.2.1
flyway: 6.4.2
Postgres: 12

## コールバックをJavaで書く

`org.flywaydb.core.api.callback.Callback`インターフェースを実装したクラスを作って
flyway.callbacksプロパティに完全修飾名を設定します。
https://flywaydb.org/documentation/api/hooks#java-based-callbacks

また、flywayのタスクより先にclassesタスクを実行するようにします。※これ大

MySQLのINSERT … ON DUPLICATE KEY UPDATEでレコードの挿入/更新を便利に実行

## 概要
MySQLのINSERT文には”INSERT … ON DUPLICATE KEY UPDATE”という構文があります。レコードを挿入または重複があった場合は更新したい場合に、INSERT文とUPDATE文を別個に書くよりはるかに便利になります。
本記事ではそんな”INSERT … ON DUPLICATE KEY UPDATE”の使い方、便利なポイント、その他仕様についてまとめます。

## 準備

以下のようなテーブルを使います。

“` sql
select version();
+———–+
| version() |
+———–+
| 8.0.17 |
+———–+

CREATE TABLE users (
id INT(8) NOT NULL,
name VARCHAR(128),
age INT(3),
registered_timestamp timestamp not null default current_timestamp,
updated_times