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

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

Javaで制約プログラミング

# はじめに

[制約プログラミング(Constraint Programming)](https://ja.wikipedia.org/wiki/%E5%88%B6%E7%B4%84%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)はプログラミングパラダイムの一つです。 制約プログラミングにおいては、変数間の関係を制約という形で記述することによりプログラムを記述します。
現在ではAIと言えばディープラーニングと同義のように言われたりしますが、かつてはこの制約プログラミングや数式処理などもAIと呼ばれていました。
Javaで制約プログラミングのライブラリを実装し、エイト・クイーン、覆面算、数独などの問題を解いてみます。

# 対象とする問題

最も単純な問題を対象とします。具体的には以下のような問題です。

* 変数の定義域は整数のみとします。
* 変数の定義域は有限で、その範囲は問題の中で定義されているものとします。

# 簡単な例題

説明のために簡単な例題を考えてみます。

* 式 a + b = c

元記事を表示

【忘備録】Java : 等価判定のequalsのオーバーライドは必要か

## はじめに
[先の記事](https://qiita.com/noytdm1021/items/8ff7a65af25ebda19f08)でも述べているように現在参考書([スッキリわかるJava入門 実践編](https://www.amazon.co.jp/dp/B00O0NIW30/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1))を進めながらJavaを勉強し直しています。(実は既に読み終わっています:blush:)

上記参考書の中でクラスを作成する際には既に備えられているメソッドをオーバーライドして意図しない不具合を引き起こさないようにするように注意喚起をしています。
その一つの例が`equals`メソッドです。

`equals`メソッドは等値ではなく等価であるかどうかを判定してくれるメソッドです。しかし参考書によると、元々備えられているObjectクラスの`equals`メソッドは等価であるかどうかを等値であるかどうかで判定しています。
つまり`equals を呼び出したオブジェクトと equals の引数として渡すオブジェクト

元記事を表示

Fabric-loaderができた経緯と仕組み

# 対象
* Fabricでmod開発をしたい
* Forgeの最新バージョンがないから仕方なくFabricを使いたい
* Javaが分かる

# Fabric-loaderができた経緯

### 1. 既存モッドローダーの問題点
 既存のForgeといったモッドローダーでは直接マインクラフトをデコンパイルしてソースコードを入手し、そのデコンパイルされたマインクラフトに簡単にアイテムなどが追加できるような仕組みが搭載されています。この方法ではモッドローダーがマインクラフトのソースコード全体を弄ることができるという(モッドローダー開発者にとっての)利点もありましたが、一つ大きな問題がありました。マインクラフトのデコンパイルは複雑で、デコンパイルされたものを再コンパイルしようとしてもできないのです。これはデコンパイラ自身によるバグのせいもありますが、コンパイル時に失われる情報(Genericsなど)もあるため仕方のない部分ではあります。この問題がモッドローダーの開発の遅れの原因となっていました。

### 2. SpongePowered/Mixin(Mixinフレームワーク)の誕生
 M

元記事を表示

Spring + MyBatis接続設定方法

#MyBatisとは
SQLとJavaオブジェクトをマッピングすることで、JavaからのDBアクセスを間接的に行ってくれるフレームワーク。
特徴としては、SQLを設定ファイルやアノテーションに宣言的に定義することにより、
Javaで書かれたビジネスロジックからSQL自体の存在を隠蔽出来ること。

MapperインターフェイスがSQLの隠蔽をしており、MyBatisがMapperインターフェイスのメソッドとSQLを紐づけている。
その為、Javaのビジネスロジックからは、Mapperインターフェイスを呼び出すだけで紐づいているSQLを実行出来る。

#前提事項
・Eclipse 2018-09 (4.9.0)
・Windows10
・H2
・MyBatisのSQLの指定方法は「マッピングファイル」「アノテーション」の二通りあるが、
今回は「マッピングファイル」を採用する。

#初期設定
“`xml:pom.xml

org.mybatis.spring.boot

元記事を表示

Java で Amazon Product Advertising API 5.0 (PA-API v5) をコールする

## 概要

– Java で Amazon Product Advertising API 5.0 (PA-API v5) をコールする
– AWS が提供している公式の SDK を使わず API を直接コールする
– AWS 署名バージョン 4 (AWS Signature Version 4) の処理を Java 標準ライブラリのみで実装する
– 今回の実行環境: macOS Catalina + Java 15 (AdoptOpenJDK 15) + Jackson Databind 2.11.1 + Gradle 6.6.1

## サンプルコード

### ファイル一覧

“`
├── build.gradle
└── src
└── main
└── java
├── AwsSignature4.java
├── JsonUtil.java
├── MyApp.java
└── PaApi5Wrapper.java
“`

### build.gra

元記事を表示

Apache Flink Python API: 歴史、アーキテクチャ、開発環境、主要な演算子

この記事では、**Apache Flink Python API**の歴史を紹介し、そのアーキテクチャや開発環境、主要な演算子について解説しています。

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

#Apache Flink Python APIの歴史、現状と今後の展開
###Apache Flink が Python をサポートする理由
Apache Flinkは、統一されたストリームとバッチデータ処理機能を持つオープンソースのビッグデータコンピューティングエンジンです。Apache Flink 1.9.0では、機械学習(ML)APIと新しいPython APIが提供されています。次に、なぜApache FlinkがPythonをサポートしているのかについて詳しく説明します。

– Pythonは最もポピュラーな

元記事を表示

DataStream APIを用いたFlinkの開発

この記事では、分散ストリーム処理の基本をレビューし、FlinkとDataStream **API**の開発を例として探ります。

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

#ストリーム処理の基本概念
ストリーム処理の定義は異なる場合があります。概念的には、ストリーム処理とバッチ処理は同じコインの表裏一体です。それらの関係は、ArrayList, Javaの要素が直接限定されたデータセットとみなされ、添え字(subscripts)でアクセスされるか、イテレータ(iterator)でアクセスされるかによって異なります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64

元記事を表示

エンジニア就職に向けてマッチングアプリ(Androidアプリ)を作ってみた

# はじめに
こんにちは。タイトルにもある通りエンジニア就職のためにマッチングアプリ『Match-com(マッチコン)』を作成しました。
開発期間はおおよそ1ヶ月半です。
1年ちょっと前まではSESに9ヶ月ほど在籍していました。それ以降は少しエンジニアから離れて別のことをやっていましたが最近になってまたこの業界に戻ってきました。(プログラミングの学習自体は続けてました)

# どんなアプリ?
![feature.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534109/049a6384-5c79-55c8-2836-de5d0b7146ff.png)

男性と女性のマッチングアプリです。皆さんも一度は使ったことがあるんじゃないでしょうか。
お互いがいいねをしたらマッチングしてチャットができるようになります。

**主な機能**
・Firebase
・メールログイン/Facebookログイン
・プロフィール登録
・いいね!
・マッチング
・リアルタイムチャット
・ブロック
・写真登録/プロフィール編集

元記事を表示

LocalDateTimeの使用に関連したシリアル化操作時のパフォーマンスの問題

この記事では、アリババのエンジニアがシリアル化処理中に発生した、LocalDateTimeおよびInstant timeフォーマットの使用に関連したパフォーマンスの問題について説明します。

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

Lv Renqi氏より

#パフォーマンスの問題
[Apache Dubbo](https://dubbo.apache.org/en-us/?spm=a2c65.11461447.0.0.18e27d1f7aNxOS) の新バージョンで性能圧力テストを行った際、Transfer Object (TO) クラスの属性に関連する問題を発見しました。`Date`を`Local

元記事を表示

Javaバージョン8以降の機能

この記事では、開発者の視点から**Java**のバージョン8以降の機能を説明し、開発者がパフォーマンスを向上させるためにそれらをどのように使用できるかを記しています。

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

アリババグループのシニア技術専門家、陳利彬(Leijuan)より

PythonやJavaScriptなどのプログラミング言語の人気はますます高まっています。しかし、以前に支配的な言語であったJavaは、多少の好意を失ったにもかかわらず、主要なプログラミング言語のさまざまなランキングでトップの座を維持しています。Javaは、メインストリームのエンタープライズ・アプリケーションのアプリケーション開発の第1位の言語であることに変わりはありません。Java 8の発売以来、Javaはパ

元記事を表示

シンプルに「なぜinterfaceを使うのか」を考察

#それは実装をシンプルにして部品化を促すため
interfaceはカオスな**現実世界**と**実装**をつなぐ、あるいは分離する役割を担っています。
部品化しやすくするために、実装はできるだけシンプルに、複雑さはinterfaceがブロック!

#interfaceでは多重継承を許し、一般クラスでは許さない理由
interfaceはカオスな現実世界に近い業務**仕様**を記述するため、多重継承を許容することで、実装レベルの一般クラスの複雑化を代替します。

※補足
**シンプル化**:問題領域を小さくすることで、問題の連鎖や波及を制限し、部品としての汎用性が向上します。
**多重継承を許容**:言語によって差異はありますが、interfaceの意味を尊重するなら、他の言語でも一般クラスをinterfaceのようにするなどして、多重継承を自主的に制限することがオブジェクト指向の本来の利点を活用することになると考えます。

#おまけ#
interface間の関係性や条件を規定するのは、業務設計者です。
interface内に実装(処理)条件を持ち込まないように注意が必要です。
逆に実装(

元記事を表示

GraphiteとStatsDを使用して、インフラ監視

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/94be852e-dc19-b0f2-a19e-eedacbe0cdb3.png)

#はじめに

サーバー、アプリケーション、およびトラフィックに関するメトリックを収集することは、アプリケーション開発プロジェクトの重要な部分となります。 本番システムでは問題が発生する可能性のある多くの問題があり、データの収集と整理は、インフラストラクチャのボトルネックと問題を特定するのに役立ちます。

この記事では、GraphiteとStatsD、およびそれらがモニタリングインフラストラクチャの基礎を形成するのにどのように役立つかについて説明していきます。 MetricFireの[無料デモ](https://www.metricfire.com/demo/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Monitoring%20your%20infrastruc

元記事を表示

{Java} String型配列の要素一つをInt型に型変換する方法

例えば従業員の情報を、名前、年齢と入力されそれを一つの配列にScannerを使って代入すると
yamada 20

Scanner sc = new Scanner( System.in);
String[] employee = sc.nextLine();

となるが、年齢を変えたいのにInt型にキャストしなくてはならない
そこでInteger.parseIntメソッドを使う

 int age = Integer.parseInt( employee[1]);

これでString型からInt型へのキャストは終了
たとえば1歳年を増やしたければ

 int addAge = Integer.parseInt( employee[1] ) + 1;

となる。
()内は引数なのでもちろん普通の変数でも問題ありません。

元記事を表示

JSFで文字列のリストをカンマ区切りの文字列で出力する方法

– 環境
– CentOS Linux release 7.8.2003 (Core)
– openjdk version “11.0.7” 2020-04-14 LTS
– JSF 2.3.9

![スクリーンショット 2020-09-24 22.48.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159761/08f66c13-a894-b679-d827-870e591bf70a.png)

# 方法1 : Beabでカンマ区切りの文字列用にGettrを作る
参考 : [Javaでカンマ区切りで文字列連結するいくつかの方法 – Qiita](https://qiita.com/shisama/items/b27d16b3aeb1baf055b1)

“`xml:xhtml

文字列のリストをカンマ区切りの文字列で出力する

Oracleの機械学習OSS「Tribuo」を試してみた

# はじめに

先日、OracleがJavaによる機械学習ライブラリーをオープンソースで公開したというニュースを目にしたので、軽く触ってみました。

– [CodeZineニュース – Oracle、Javaによる機械学習ライブラリ「Tribuo」をオープンソースで公開](https://codezine.jp/article/detail/12911)
– [マイナビニュース – Oracle、Java機械学習ライブラリ「Tribuo」を発表 ](https://news.mynavi.jp/article/20200916-1309101/)

これを見ると、機械学習の一般的なアルゴリズムに加えてXGBoostなども使えるようです。

![HeroAnimation_V2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43869/aec7ab21-355f-f4ba-f037-d8dbcc62dae5.gif)

# 特徴

公式サイトのトップページには以下の3つの特徴が挙げられています。

– 来

元記事を表示

SpigotをVSCodeで書く

#SpigotをVSCodeで書く
マイクラのプラグインを作りたい。でもEclipseは使いたくない、VSCodeを使わせろって人向けに[SpigotMC公式wiki](https://www.spigotmc.org/wiki/creating-a-blank-spigot-plugin-in-vs-code/) を雑に日本語訳したものです。
多少の意訳および自分の環境[^1]でうまくいかなかった部分を動くように変更が入っていることをご了承ください。

##前提条件
1. VSCodeに [java Extension pack](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack)がインストールされていること。
2. [OpenJDK](https://openjdk.java.net/)が入っていること。(java Extension packがOpenJDKを必要としています。)
3. [Apache Maven](https://maven.apache.org/)も必要

元記事を表示

2020年で最も需要のあるプログラミング言語

本記事は[Most in-demand programming languages in 2020](https://lampstudy.net/most-in-demand-programming-languages-in-2020/)の日本語訳です。翻訳元に報告していますが、もし苦情が来たら消します。
翻訳は不慣れなので変なところもあると思いますが、ご容赦ください。


![Most-in-demand-programming-languages-in-2020.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321705/bf03a2a8-203a-0198-e24d-8019b794c52d.jpeg)

ソフトウェア開発業界は絶えず変化しており、それは開発者の能力に対する企業のニーズも変化していることを意味します。そのため、あなたが想像できるように、Webアプリケーション、ゲーム、アルゴリズムなどのあらゆる側面の開発をカバーするために、選択できるプログラミング言語はたくさんあります。その

元記事を表示

【Java】二次元配列を拡張for文で回す方法

#拡張for文

“`java
for(型 変数名: 配列){
}
“`
:の右の配列を左の変数に代入しながらループを回すという手法を組み合わせて二次元配列を展開するにはどうしたら良いか、一瞬迷ったのと、PHPのように

“`PHP
foreach($datas as $key => $value){
 for($i = 0; $i < count($value); i++){ $value[i] = 0; } } ``` foreachを使うことも思い浮かべたけど、javaでは別のオブジェクトを生成しないといけないみたいなので、なんとかしたいなと思いました。 #拡張forを2回書けば済む話 ```java public class Control { public static void main(String[] args) { int[][] datas = { {0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,1,1,1,1,1,0}, {0,0,0,0,0,0,1,1,1,1,0}, {0,0

元記事を表示

[Java] PDF閲覧設定

日頃PDFファイルを閲覧する場合、「フルスクリーンモードにするか、メニューバー/ツールバーを非表示にするか、またドキュメントのページレイアウトをどうのように設定するかなど・・・」という個人的な習慣によってプリファレンスを設定しますよね。今日、本文ではFree Spire.PDF for Javaを通してこれらのプリファレンス設定を実現させる方法を紹介します。

**JARパッケージのインポート**
**方法1:** [Free Spire.PDF for Java](https://www.e-iceblue.com/Download/pdf-for-java-free.html)をダウンロードして解凍したら、libフォルダーのSpire.Pdf.jarパッケージを依存関係としてJavaアプリケーションにインポートします。

**方法2:** Mavenリポジトリから直接にJARパッケージをインストールしたら、pom.xmlファイルを次のように構成します。

“`xml


com.e-iceblue

元記事を表示

Dagger Hiltを踏まえたテストのプラクティス

Dagger HiltというGoogleがAndroid開発において推奨するDIライブラリ(JVM言語であれば使える)のこちらのドキュメントについてです。
https://dagger.dev/hilt/testing-philosophy
結構良いテストについて個人的に刺さる概念があったので、書いておきます。
またシンプルな部分以外のHiltの良いところが分かる気がします。

Dagger Hiltを踏まえたテストのプラクティスについて書かれている。
Dagger HiltのAPIや機能は何が良いテストを作るかの暗黙の哲学に基づいて作られている。ただ、良いテストというのが万人に受け入れられているわけではいので、Hiltチームにおいてのテストの哲学を明らかにするためのドキュメントとなる。

### 何をテストするのか
Hiltは外部の”**ユーザーからの観点でテスト**する”ことを推奨する。外部のユーザーとはたくさんの意味がある。本当のユーザーも指すし、クラスやAPIの利用者も指す。
大切なところは”実装の詳細を表現してはいけない”ということ。内部の実装に依存したテスト、例え

元記事を表示

OTHERカテゴリの最新記事