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

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

カリー化チートシート

【2020-08-14追記】『[記述例一覧版](https://qiita.com/ytaki0801/items/57649b7a29a9aadee213)』の記事を作成しました.

拙作『[不動点コンビネータを用いた無名再帰関数の実行まとめ](https://qiita.com/ytaki0801/items/596efbbcb07d38630bc9)』の補足説明として書き始めたところ,カリー化関数を記述・利用するための独立したチートシートとした方が少なくとも約1名(自分自身)には役立ちそうだったので,新しく記事にした.なお,カリー化してくれる関数の定義[**ではない**](#%E3%82%AB%E3%83%AA%E3%83%BC%E5%8C%96%E3%81%AE%E6%A6%82%E8%A6%81)ことに注意.複数言語にわたっている都合上,[カリー化の解説部分](#カリー化の概要)を含め,各言語・パラダイムに精通している方々のツッコミ歓迎.

記法のみの一覧は次の通り.`f`は関数,`a`は引数を指す.

| 言語 | 引数の変更 | 引数の指定 | 備考 |
|:-:|:-:

元記事を表示

Javaコミュニティを盛り上げる:アリババがDragonwell OpenJDKをオープンソース化

アリババはOpenJDKのバージョンであるAlibaba Dragonwellをオープンソース化することで、Javaコミュニティを後押ししています。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/alibaba-makes-dragonwell-openjdk-open-source_594624)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

Yuying Zhaoより

InfoQの記者は、アリババがOpenJDKの長期サポート版である[Alibaba Dragonwell](https://github.com/alibaba/dragonwell8?spm=a2c65.11461447.0.0.f5367924I3Bnp2)をオープンソース化しようとしていると独占的に報じています。ご存知のように、オラクルのJavaに対する姿勢は相次いで変化しており、Javaユーザーが多いこともあり、この問題は開発者の間で長い間議論の焦点となるこ

元記事を表示

平面上における2点間の距離と角度の求め方

# 概要

XY座標の2点間の角度と距離の求め方をまとめる。
言語はJava

# 距離の求め方

“`
// 2点の座標
double x = 0;
double y = 0;
double x2 = 1;
double y2 = 1;

// 2点の座標から距離を求める
double distance = Math.sqrt((x2 – x) * (x2 – x) + (y2 – y) * (y2 – y));
“`

# 角度の求め方

“`
// 2点の座標
double x = 0;
double y = 0;
double x2 = 1;
double y2 = 1;

// 2点の座標からラジアンを求める
doble radian = Math.atan2(y2 – y, x2 – x);

// ラジアンから度を求める
double degree = radian * 180 / Math.PI;
“`

元記事を表示

「コメントを全く書かない」プロジェクトに1年従事して思ったこと

# 初めに
私はSESでエンジニアをしています。そのためいろいろな現場に参画して開発をすることが仕事なのですが、**コメントを全く書かない**~~どころかドキュメントもあんまりない~~という思想のチームに1年従事したときに感じた事を書いた記事です。

開発にはJava,Pythonを利用しているので、これらの言語でサンプルを記載しています。

# 良かったこと
まずは良かったことです。大きく分けては

– 自身のコーディングスキルの向上
– 文章力の向上

の2点です。

## 自身のコーディングスキルの向上
コメントがまったくない。という状態でコードを書いていく場合には、**変数名、メソッド名等の命名が非常に重要です。**もはや命名さえちゃんとできればコーディング自体はそんなに大変でないといってもいいかもしれません。
SIerの案件では**コメントは多く書け**という思想が多いです。そのため、これまでのコードは以下のような感じでした。

“`java:Sample1.java
/**
* Listを受け取り、偶数を抽出したListを返却する。

元記事を表示

Gradle依存ファイルをcacheしてdocker buildを高速化する

# 要旨

– Gradle関係ファイルのみ `COPY` した状態で `gradlew build` を行うことで、依存ファイルをダウンロードしたキャッシュ用レイヤを作る
– Docker imageのビルド時間を約70%削減した(※環境・プロジェクトにより差はあります。)

# 動機

Spring BootアプリケーションのDocker imageのビルド時間が5分以上掛かっていました。
このため、検品環境へのビルド・デプロイに時間がかかってしまい、
検品環境でしかできない試行錯誤に時間がかかるという課題がありました。

# Sample Dockerfile

“`Docker
FROM openjdk:11.0.8-jre-slim as builder

WORKDIR /app

# build.gradleに依存するファイルのみを追加し、
# gradle buildを空回しして依存ファイルをキャッシュする
COPY *.gradle gradle.* gradlew /app/
COPY gradle/ /app/gradle/
RUN ./gradlew bui

元記事を表示

ToolKitを使って10分以内にGMSアプリをG+H対応に変換できました

#概要
この前の記事では、既存のAndroidアプリをHMS対応に変換する方法の概要を紹介しました。
この記事ではHuaweiが提供しているコード自動変換ツール(ToolKit)を使ってGMSアプリをGMS、HMS両方の端末で動作できるアプリに変換するやり方を紹介したいと思います。

#ToolKitの紹介
まず、ToolKitの概要、原理を簡単に紹介したいと思います。
##ToolKitとは
ToolKitはAndroid Studioのプラグインツールであり、HMS開発の際のコーディングアシスタント、クラウドデバッグ、クラウドテスティングや自動コード変換などの機能があります。

[ToolKitの自動コード変換ツール(GitHubリンク)](https://github.com/HMS-Core/hms-toolkit-convertor
)は、元のアプリの中で使用されたGMSのAPIを検出してG+H対応に自動変換するツールで、KotlinとJava両方に対応しています。今回は自動コード変換ツール(Convertor)を使用して、既存のGMSアプリをG+H対応に変換してみましたので

元記事を表示

log4jのdiscordとgooglechatのappender作ったからみんな使ってみてよ

ちょっと前に作りました。どんどん使ってくださいませ

## log4j discord appender
https://github.com/modeverv/log4j-discord
## log4j google chat appender
https://github.com/modeverv/log4j-googlechat

元記事を表示

AtCoder Beginner Contest 176 C問題「Step」解説(Python3,C++,Java)

皆さんこんにちは!Ruteです!
この記事は、AtCoder Beginner Contest 176の問題のC問題の解説になります!!
A問題・B問題の解説を見ていない方は、以下の表で示したリンクよりご確認下さい。
##各問題・解説へのリンク

|A|B|C|
|—|—|—|
|[ABC176 A](https://qiita.com/rute_not_route/items/4c3497ca95e0fd75a629)|[ABC176 B](https://qiita.com/rute_not_route/items/d22bafa86bdf1140b217)|この記事です!!|

それでは、C問題の解説を始めます。

#問題概要
$N$人が1列に並んでいて、前から$i$番目の人の身長は$A_i$である。
それぞれの人の足元に、高さ$0$以上の踏み台を設置し、全ての人が以下の条件を満たすようにしたい。

条件:
(自分の身長と)踏み台を込めて身長を比較したとき、自分より前に、自分より背の高い人が存在しない

この条件を満たす

WindowsのUACでファイルの書き込みができないのをJava/Kotlinでチェックする

## TL;DR
Windowsサポートするなら`java.nio.file.Files.isWritable`使っといたほうが良い。

## はじめに
意外とインターネットに知見がなかったので自分用メモ。

Java/Kotlinでファイルの保存処理、特にユーザーにディレクトリを選択させて保存するような処理が対象です。

Javaのクラスの話ですが自分が実際にやったのはKotlinなのでサンプルソースはそれに準じます。

## 書き込み権限チェックのやり方
チェック方法が2通りあります。
古いやり方と比較的新しいやり方。

1. `java.io.File.canWrite`
2. `java.nio.file.Files.isWritable`

1.は古き良き`java.io.File`クラスのインスタンスメソッド。
2.は`java.nio.file.Files`というJava 1.7で追加された比較的新しいクラスのstaticメソッド。
というかそもそも`java.nio.file.Files`クラスはstaticメソッドだけを扱っている。

Windows向きには2.を使っ

thymeleafでHTMLのページを動的にする(spring + gradle)

前回は[spring + gradle でhelloworldを表示してみる](https://qiita.com/kty000/items/ca08f627f9bacecfa34e)で画面にHTMLを表示しました。
今回は画面を動的に動かしてみたいので、入力した文字を画面に表示させてみたいと思います。初心者の備忘録ですのでおかしな点などありましたらご指摘頂けますと嬉しいです!

完成後はこんな感じです↓
![入力前.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550109/247afca5-8a19-ed43-25a0-37487c0775ba.png)
送信を押下すると
![入力後.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550109/01358778-a2f8-d897-6c8a-6e09d4282e1e.png)

前回の記事で使用したコードにそのまま書き足していきますが、今回の記事のみ見ている方のた

LeetCode簡単なのをまとめてみた

#LeetCode簡単なのをまとめてみた
問題文の概要,JavaとPythonのコードを載せてあります.

#Contains Duplicate
##Description
>Given an array of integers, find if the array contains any duplicates.

>Your function should return true if any value appears at least twice in the array, and it should return false if every element is distinct.

Example 1:
>Input: [1,2,3,1]
Output: true

Example 2:

>Input: [1,2,3,4]
Output: false

Example 3:

>Input: [1,1,1,3,3,4,3,2,4,2]
Output: true

##Solution Code
“`java:solution.java
// return true

整数同士の除算演算子の挙動 (C言語、C++、Scala、Java、Rust、Go言語、PHP、JavaScript、Perl、Python、Ruby)

整数での `/` と `%` の演算子の挙動。

整数を整数で割ったら **整数** vs **浮動小数点数** どっち?

– `-5 / 4` は **-1.25**
– PHP
– 割り切れないから浮動小数点数
– Perl
– 割り切れないから浮動小数点数
– `use integer` を宣言するとC言語派に変わる
– Python
– 割り切れるか関係なく割り算したら浮動小数点数
– C言語派のために `//` という演算子もある
– JavaScript
– はじめから整数と浮動小数点数の区別がない
– `-5 / 4` は **-1**
– C言語 / C++ / Scala / Java / Rust / Go言語
– 静的型付けの言語
– `-5 / 4` は **-2**
– Ruby
– 仲間はずれ

負の剰余(割り算の余り `%`演算子)は **正** vs **負** どっち?

AtCoder Beginner Contest 176 B問題「Multiple of 9」解説(Python3,C++,Java)

Ruteです。
この記事は先ほどのA問題の解説の続きになります!

##各問題・解説へのリンク

|A|B|C|
|—|—|—|
|[ABC176 A](https://qiita.com/rute_not_route/items/4c3497ca95e0fd75a629)|この記事です!!|[ABC176 C](https://qiita.com/rute_not_route/items/5f9c1f899cc4b10c23ce)|

それでは、B問題の解説を行います。

#問題概要
$N$が$9$の倍数であるかを判定して下さい。

##制約
・$0 \leq N \leq 10^{200000}$
・$N$は整数

今回は、Python3とC++,Javaで解法が異なりますのでご了承下さい。

#解説
##解法1(Python3の場合)
*後で説明する解法2でも解けます。
Python3の場合は、`int`型で表せる整数に限度がないので、以下のような条件分岐を書くことでACすることが出来ます!
JavaはWord文書を作成します

Wordは強力なワープロ機能を備えており、日常の仕事や生活で広く使用されているツールの1つです。この記事では、Free Spire.Doc for Javaを使用して、JavaアプリケーションでWord文書を作成し、画像を挿入し、フォント形式、配置、インデント、段落の間隔を設定する方法を紹介します。

**JARパッケージのインポート**
**方法1:**[Free Spire.Doc for Java](https://www.e-iceblue.com/Download/doc-for-java-free.html)をダウンロードして解凍し、libフォルダーのSpire.Doc.jarパッケージを依存関係としてJavaアプリケーションにインポートします。
**方法2:**Mavenリポジトリーを介してJARパッケージをインストールし、pom.xmlファイルを以下のように構成します

“`java


com.e-iceblue
e-ic

Android Studio でカスタムキーボードが有効になっているかの判定について(Java)

## カスタムキーボードは作った、が有効判定ができない!
いろいろ合ってカスタムキーボードをAndroid Studioで開発していて、キーボード自体は作ったはいいものの、IMEの有効判定の方法がなかなか見つかりませんでした。

何がしたくてこんなことしようとしていたかというと、某キーボードアプリでは、アプリ内でキーボードが有効になっていないときにアラートを表示して、設定まで飛んで、IMEを有効にさせようとしますよね。

わからない?

…まあ、それなら仕方ない。

とりあえずそういったことがしたかったわけですよ。

その備忘録としてコードを残しておきます。
ちなみに、今さらkotlinじゃなく、javaで開発してしまったのはご愛敬。

## 実はそれほど難しくなかった

早速コードを見ていただきましょう。

“`hoge.java
//インストールされているIMEアプリケーション一覧取得
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
List

コマンド「Java パッケージ名/クラス名」で実行できない時の対処法

概要
=

`java パッケージ名/クラス名`で実行ができなかったのに対して、
`java -classpath . パッケージ名/クラス名`では実行できたことに疑問を感じ、
`java パッケージ名/クラス名`で実行するにはどうすればいいか自分なりの対処法を見つけたので投稿します。

教科書通りに`java パッケージ名/クラス名`(もしくは`java パッケージ名.クラス名`)と入力しているのに実行できなくて困っているという方は本記事の内容を試してみてください。

環境
=
– OS: macOS Catalina 10.15.6
– JDK:14.0.1

実行するファイルについて
=
「Main.java」(「hoge」パッケージに所属させています)

実行するとターミナルに「hello.java」と表示される単純なプログラムです。
格納ディレクトリは「/Users/user/src/Java/sukiri1/Chapter6/hoge/Main.java」です。

“`java:Main.java
package hoge;

public class Main {
p

AWS fargateでkotlin(java)アプリをデプロイする方法

# ポイント
– fargateのタスク定義の「タスクメモリ」で指定したメモリ量を超えた場合、タスクは強制終了されます。
– 従って、タスクメモリを超えないように最大ヒープサイズ等を調整する必要があります。

# 環境
– 言語: Kotlin
– フレームワーク: ktor
– dockerイメージ: openjdk:8-jre-alpine

# Dockerfile

“`Dockerfile
FROM openjdk:8-jre-alpine

ENV APPLICATION_USER ktor
RUN adduser -D -g ” $APPLICATION_USER

RUN mkdir /app
RUN chown -R $APPLICATION_USER /app

USER $APPLICATION_USER

COPY ./build/libs/my-application.jar /app/my-application.jar
WORKDIR /app

CMD [“java”, “-server”, “-XX:+UnlockExperimentalVMOpt

なぜKotlinでsynchronized suspendは機能しないのか

## なにが問題なのか

まずは以下のコードを見て頂きたいです。

“`kotlin
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking

suspend fun doSomething(i: Int) {
println(“#$i enter critical section.”)

// do something critical
delay(1000)

println(“#$i exit critical section.”)
}

fun main() = runBlocking {
repeat(2) { i ->
launch(Dispatchers.Default) {
println(“#$i thread name: ${Thread.currentThrea

Kubernetes利用時のJavaアプリケーションリソースの制限に関するよくある誤解

このシリーズの最初の記事では、**Kubernetes**を使用する際のJavaアプリケーションリソースの制限について、よくある誤解のいくつかを見ていきます。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/kubernetes-demystified-restrictions-on-java-application-resources_594108)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

このシリーズの記事では、企業のお客様が[Kubernetes](https://www.alibabacloud.com/ja/product/kubernetes)を使用する際に遭遇する一般的な問題のいくつかを探ります。

[コンテナ技術](https://www.alibabacloud.com/ja/product/container-service)がますます洗練されるにつれ、アプリケーションプラットフォームの基盤としてDockerとK

【初心者】java開発ツールをcloud9 開発環境にインストールする。

# はじめに

AWScloud9の導入編はこちら
https://qiita.com/tu-kun/items/d7b4f1fa19cc93bc5b75

java開発ツールのインストールにあたって、参考にさせていただいた記事等はこちら
https://qiita.com/tu-kun/items/91efb172f7dd7501602e

わかりやすくて、とても助かりました。ありがとうございます。

#この記事ですること
####【目的】
javaを学習するため、javaの開発ツールをインストールする。
※駆け出しの私が、どんな風に調べて作業していくかを逐一書いています。
※<脱線>:個人的な脱線。即スクロール推奨。

####【開発環境】
筆者:駆け出し(プログラミング学習2ヶ月め。元々Ruby、初java)
MacBookpro
cloud9

#下調べ(インストール作業に移るまで)
####【ぐぐる】
 インストール方法をぐぐる。
 キーワードは「java、cloud9」。
 すると、いくつか検索結果が出てきました。

####【何はともあれAWS公式サイト様】