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

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

【Android / Java】ホストFragmentにDialogFragmentからイベントをコールバックさせる

# はじめに
Android Studio(java) でアプリを開発していて、
「ダイアログのボタンクリックイベントをコールバックして呼び出し元のフラグメントで処理させたい」という場面がありました。
もう少し具体的に言うと、ダイアログでAPI通信+画面遷移の処理を実装したところスレッドが異なるためか画面遷移ができない、ことがありコールバックを実装しました。
こんな感じのエラーが出た “android illegalstateexception: fragment not attached to activity“

学んだ内容を書きます。

# 作成したサンプルアプリの概要
アクティビティにボタンがあるフラグメントを表示し、ボタンを押すとダイアログを表示。ダイアログOKボタンを押すとボタンのテキストを変更する。
だけのシンプルなアプリ

1. フラグメントを表示
2. ボタンをクリックする

あえてJavaでKaggleに挑む(1)

# 概要

Javaのみを使用してKaggleで戦うことはできるのでしょうか?あえてやってみました。

# この記事でやること

Kaggleの初心者向けの課題として有名な[タイタニックの生存者予測(「Titanic: Machine Learning from Disaster」)](https://www.kaggle.com/c/titanic)をJavaのみで実装してみたいと思います。この課題は、タイタニックに乗船した顧客の名前、性別、年齢、チケットの情報などから生存したかどうかを予測するというものです。

![titanic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43869/2e9e8d6d-f0b1-a25b-d8b5-9c8af93c35b9.png)

与えられた学習用のデータ(`train.csv`)から学習したモデルを構築し、テストデータ(`test.csv`)に含まれる人の生存を予測し、その結果の正解率を争うというのがこのコンペになります(ゲーム感覚で生死を予測するのって.

元記事を表示

Doma入門 – Criteira APIで射影を使う

## はじめに

SELECT句で特定のカラムだけを指定して取得することを射影と呼びますが、全てのカラムを取得すると都合が悪い場合(カラムの数が多すぎる、LOBのような容量の大きなカラムが存在するなど)に便利な手法です。

今回は、[Doma](https://github.com/domaframework/doma) のCriteria APIで射影を表現する方法を説明します。

Criteria APIで射影を実現する方法は2つあります。

* エンティティクラスを使って取得する
* タプルクラスを使って取得する

ここで使うDomaのバージョンは2.43.0です。

DomaやCriteria APIの概要については[Doma入門](https://qiita.com/nakamura-to/items/deaff05ba530317f3cf8)の他の記事もお読みください。

## この記事で使うサンプルコード

簡略化したコードで説明します。完全なサンプルコードをについては下記のプロジェクトを参照してください。

* https://github.com/domaframew

元記事を表示

【Java】for文, while文

ループ文について学んだことのメモです。

#for文
ループカウンターなどを使用して **定められた回数だけ同じ処理を繰り返したいときに使う。**
fizz buzzのような**「1〜100まで出力せよ!」**みたいな命令に使われることが多い。
また添字による配列要素のアクセスと相性がよろしく、配列の中身を1つずつ参照することにも向いている。

##【書式】

“`
for (初期化式; 条件式;変化式){
実行する文;
実行する文;

}
“`
##【for文を使った例】

“`
(String配列の宣言と初期化)
String[] fighter = {零戦, スピットファイア, メッサーシュミット, ラヴォーチキン};

(配列arrの中身を全て表示する)
for (int i = 0; i < fighter.length; i++) { System.out.println("fighter[" + i + "] … " + arr[i]); } ``` ##【実行結果】 ```

元記事を表示

JavaからRubyへ!!

#【JavaからRubyへ!!】

Javaを学びつつ、Rubyを習得することが現時点の目標です。
[Ruby 公式リファレンス](https://www.ruby-lang.org/ja//) にJavaとRubyの比較がされていました。
公式リファレンスの「JavaからRubyへ」を参照し、自分用メモとして残します。

##JavaからRubyへ

Javaは成熟は成熟しており、処理速度は高速であるが、とても冗長である。
JavaからRubyへ移行すると、コードの量を大幅に削減することが可能になる。

##Javaとの類似

メモリはGC(ガベージコレクション)によって管理される。
オブジェクトは強い型付けがされる。
メソッドにpublic、private、protectedの指定可能。

埋め込み型のドキュメントツールが用意されている。
Ruby用のツールRDocで生成されたドキュメントは、javadocで生成したドキュメントにとてもよく似ている。

※ガベージコレクションとは、コンピュータプログラムの実行環境などが備える機能の一つで、実行中のプログラムが占有していたメモリ領域

元記事を表示

完全限定名と正規名とバイナリ名

Java やってたらたまに遭遇する以下3つの名前について整理する。

– 完全限定名 (fully qualified name)
– 正規名 (canonical name)
– バイナリ名 (binary name)

※説明資料によっては「完全修飾名」「完全指定名」「正準名」のように翻訳がバラついているが、ここでは上記表記で統一する。

# 環境
**OS**

“`
Windows 10
“`

**Java**

“`
> java –version
openjdk 11.0.8 2020-07-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.8+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.8+10, mixed mode)
“`

# 定義
Java 言語仕様(Java Language Specification) に書いてある、それぞれの名前の定義を確認する。

## 完全限定名
[Chapter 6. Names](https://

元記事を表示

テストで無闇にAllMatch的な処理をするのはやめよう

# なんの話?
テストを書いていることは大前提として、 **そのテストが失敗した時のことまで考えて書いていますか?** という話です。
具体例に関しては諸説あります。

# どういう状況?
例えばユーザー一覧を取得した時に、 **IDが50以下のユーザーだけ取得できていること** をテストしたいとします。
(実際にこんなテストをするかどうかは今は気にしない)

ユーザーは `id` を持ちます。

“`java
public class User {
private final Integer id;
// コンストラクタ・ゲッターは省略
}
“`

# allMatchを使った実装
いざ、 `getUserList` というメソッドを使いユーザーを取得して、IDが50以下であることをアサートしましょう!

“`java
public class UserListTest {
@Test
public void test_getUserList() {
List userList = getUserList();

元記事を表示

簡易LISP処理系の実装例【各言語版まとめ】

この記事は,様々なプログラミング言語で,最低限のS式入出力およびリスト処理を実装した上で,John McCarthy氏の[原初のLISPインタプリタ記述](http://www-formal.stanford.edu/jmc/recursive/recursive.html)をPaul Graham氏がCommon Lispで実装した[“McCarthy’s Original Lisp”](http://paulgraham.com/lispcode.html)(`jmc.lisp`)について,各言語向けに移植・動作確認してみた記述例のリンク集および共通解説をまとめたものです.

* [Python版](https://qiita.com/ytaki0801/items/12c0b1bda1e0452048db)
* [Scheme版](https://qiita.com/ytaki0801/items/2d2a1edf371c103711bd)(`jmc.lisp`の書き直し)
* [C言語版](https://qiita.com/ytaki0801/items/5d56a2ba0b

元記事を表示

簡易LISP処理系の実装例(Java版)

【他言語版へのリンク記事】[簡易LISP処理系の実装例【各言語版まとめ】](https://qiita.com/ytaki0801/items/dcb0fe48cbeab30ac40d)

この記事は,下記拙作記事のJava版を抜粋・修正したものを利用した,簡易LISP処理系([“McCarthy’s Original Lisp”](http://paulgraham.com/lispcode.html))の実装例をまとめたものです.

* ~~[『括弧文字列』簡易パーサ実装例まとめ](https://qiita.com/ytaki0801/items/b8d7d4c778fe98966ce5)~~(Java版はS式入出力を先行作成しました))
* [リスト処理関数(cons,car,cdr,eq,atom)実装例まとめ](https://qiita.com/ytaki0801/items/a11c8143c5c63a406c7f)

最低限の機能をもったLISP処理系の実装の場合,本体である評価器(eval)実装はとても簡単であり,むしろ,字句・構文解析を行うS式入出力やリスト処理実

元記事を表示

自作サービスを動かしてみたら失敗したのでタスクスケジューラにねじ込んだ話

Oracle HTTP Server 12cをサーバの再起動にあわせて毎度手動で起動するのが面倒だったので、自動実行できないかと考えたのが始まりです。

# ねじ込んだ理由
・「Oracle HTTP Server 12c」が乗っているサーバを利用している
・サーバが再起動するたびに、HTTPを起動させるのが面倒臭い…
 →サーバ起動時に自動でHTTPを立ち上げるようにしよう!
・サービスを作成して自動実行に設定できた…!
 →サービスの状態「 」。
・タスクスケジューラでいけるのでは?

# 作成したサービス
・Oracle HTTP Server 12c を起動する際に必要なNodeManagerを起動するサービス
・Oracle HTTP Server 12c 本体を起動するサービス

# 全体の流れ
1. サービスの作成と自動設定
本来HTTPを起動するためには、NodeManagerの起動→HttpServerの起動という手順を踏みます。
これらを実行するサービスを作成します。

2. 1.が失敗したのでサーバ起動時にサービスを実行するようタスクスケジューラを設定

## サ

元記事を表示

リスト処理関数(cons,car,cdr,eq,atom)実装例まとめ

【追記】[簡易LISP処理系の各プログラミング言語実装例](https://qiita.com/ytaki0801/items/dcb0fe48cbeab30ac40d)の記事作成に伴い,『[7行インタプリタ実装まとめ](https://qiita.com/ytaki0801/items/f56bf2c84b522b51b64a)』は更新無期延期としました.

拙作記事『[7行インタプリタ実装まとめ](https://qiita.com/ytaki0801/items/f56bf2c84b522b51b64a)』について,そろそろSchemeとPython以外にも対応しないとなあと思っていろいろ整理した結果,『S式入力の実装部分がほとんどじゃないこれ?』→『あと,リスト処理内容に基準を設けてないと言語ごとに実装方針がバラバラになりそう』となり,とりあえず『`cons` `car` `cdr` `eq` `atom`が使える』ようにする記述例を先にまとめていくことにした次第.ホスト言語上での[純LISP](https://ja.wikipedia.org/wiki/%E7%B4%94LI

元記事を表示

[Java]メソッド内で引数を変更する方法(値渡し・参照渡し・参照の値渡しで混乱した人へ)

#初めに
メソッドに値を渡してメソッド内で値を加工する

という処理を行う際ポインタやC++ のような参照渡しがないJavaではどのようにすればよいかわからなかったので、調べたことや調べる中でこんがらがったこと(主に参照渡し・参照の値渡し)などについてまとめておきます。

なお、記事を書いているが当人はJavaに触れてまだ3か月程度なので間違い等あれば指摘していただければ幸いです。

#値渡し

例えばメソッドに引数とした値をメソッド内で2倍にするコードを下記のように書いてみます。(このコードは意図したとおりには動きません)

“`Java:java
public class Main{
/*メソッド内で値を2倍にする*/
public static void twice(int n){
n *= 2;
}
/*メイン関数*/
public static void main(String[] args){
int num = 2;
twice(num);
System.out.pr

元記事を表示

Amazon Linux2 でJava8の環境構築をしてみる

## 全体の流れ
1. [EC2]Amazon Linux2 でJava8の環境構築
2. [ローカル]ローカルでSpringプロジェクトを作成する
3. [EC2]Springプロジェクトを起動する

## Amazon Linux2 でJava8の環境構築
### 1.sshでEC2インスタンスに接続
`$ ssh -i .pem ec2-user@<パブリックIPアドレス>`

### 2.JREのインストール
`$ sudo yum search java | grep jdk`
`$ sudo yum install -y java-1.8.0-openjdk.x86_64`

“`
$ sudo yum search java | grep jdk
ldapjdk-javadoc.noarch : Javadoc for ldapjdk
java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.7.0-openjdk-accessibility.x86_64 : OpenJDK accessi

元記事を表示

【初学者】Javaで簡単なRPGゲームを作ってみる①

自己満の備忘録ですのでご容赦ください。

# JavaでRPGゲームを作ってみる
Javaの勉強をしていたらRPGゲームの記事を見つけたので、自分流にアレンジして作ってみたいと思います。
## 構想
敵が現れる→ジャンケンする→勝ち:ダメージ大与える、あいこ:ダメージ小与える、負け:ダメージ食らう→倒す
という流れです。
まあ行き詰まったら変えていくかもしれません。笑

## 実践
### ジャンケンゲームの作成
とりあえず最初にジャンケンゲームを作ってみます。

“`Janken.java
import java.util.Scanner;

class Janken {
public static void main(String[] args) {

System.out.println(“最初はグー!じゃんけんぽん!”);

String[] cpuhands = {“グー”, “チョキ”, “パー”};

System.out.println(“出したい番号を選んでください\n[0]グー\n[1]チョキ\n[2]パー”);
Int

元記事を表示

【Java】配列について

Javaの配列について勉強したことのメモです。

###配列の宣言
“`
(int方の場合)
int[] arr = new int[5];
“`
###配列arrに値を代入
“`
arr[0] = 3; // 1番目(先頭)の要素に 3 を代入
arr[1] = 1; // 2番目の要素に 1 を代入
arr[2] = 6; // 3番目の要素に 6 を代入
arr[3] = 0; // 4番目の要素に 0 を代入
arr[4] = 4; // 5番目の要素に 4 を代入
“`
###arrを簡略化
“`
int[] arr = {3, 1, 6, 0, 4};
“`
###配列arrの要素数を出力
“`
(要素数が3の場合)
System.out.println(“配列arrの要素数…” + arr.length);
結果:配列arrの要素数…3
“`

元記事を表示

Doma入門 – Criteira APIで結合を使う

## はじめに

[Doma](https://github.com/domaframework/doma) 2.43.0のCriteria APIで結合を使う方法を説明します。

DomaのCriteira APIでは、「単純に結合をするだけの場合」と「結合した上で関連エンティティを取得する場合」の2つのパターンをサポートします。後者については意味合いとしてはJPAのjoin fetchに少し似ています。

DomaやCriteria APIの概要については[Doma入門](https://qiita.com/nakamura-to/items/deaff05ba530317f3cf8)の他の記事もお読みください。

## この記事で使うサンプルコード

ここでは、簡略化したコードで説明します。
完全なサンプルコードをについては下記のプロジェクトを参照してください。

– https://github.com/domaframework/simple-examples/tree/master/dsl-style-java

データベースには部署を表すdepartmentテーブルと従業

元記事を表示

コードカバレッジの種類について

# コードカバレッジ

## 本記事の概要
本記事では、下記3種類のカバレッジについて記載する。

– ステートメントカバレッジ(C0:命令網羅)
– ブランチカバレッジ(C1:分岐網羅)
– 単純条件カバレッジ(C2:条件網羅)

## 説明で用いるサンプルコード

if (条件文a1 || 条件文a2) { //判定条件A
命令文1
} else{
命令文2

} if (条件文b1 && 条件文b2) { //判定条件B
命令文3
}

## ステートメントカバレッジ(C0:命令網羅)
### 結論
– 実行可能なステートメント(命令)のうち、**テストで実行された命令の割合**のこと
⇒カバレッジを100%にするには、実行可能なステートメントを全て少なくとも1回は実行する必要がある

### 上記サンプルコードの場合
– 命令文1~3のステートメントを行う3つのテストケースが必要

## ブランチカバレッジ(C1:分岐網羅)
### 結論
– 全ての判定条件のうち、**テストで実行された判定条件の割合**のこと
⇒カバレ

元記事を表示

【Java】データ型・文字列のクラスのチートシート

個人用メモにJavaのデータ型をメモりました。

とりあえず最初は

– String(文字列)
– int(整数)
– double(小数点を含む数)

この三つは確実に抑える。
データ型・文字列のクラス
=

| 種類 | 型名 | 扱える範囲 |
| ———— | ——- | ——————————————————- |
| 整数型 | int | -2147483648 ~ 2147483647 までの整数 |
| 文字列クラス | String | “Java”、”自分”、”Mac” などの複数の文字 |
| 浮動小数点型 | double | ± 1.8 × 10308 ~ ± 3.4 × 10 – 324 さらに細かい数字 |
| 論理型

元記事を表示

Microsoft Azure SDK For SQL API of Azure Cosmos DB Service 4.6 を使ってみる

Azure CosmosDB Java SDK version 4.x が2020年に公開されております。

以下ドキュメントに使い方が公開されているのですが、最低限のHello Worldコードとしてはどうなるのかを作ってみました。
https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sdk-java-v4

# pom.xml
“`xml


com.azure
azure-cosmos
4.6.0

“`

接続に必要な情報はAzure Portalで取得できます。

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

元記事を表示

Processing(Java)からSwiftで書いたプログラムを呼び出す

[Processing](https://processing.org/) を使ってユーティリティ系のソフトを作っていると、どうしてもかゆいところに手がとどかない(システム環境設定系とか)

Swiftで実装すればAPIを叩くのに苦労はしないが、
Java側で `Runtime#exec` とか `ProcessBuilder` を使うのはなんか違う気がするので、
どうにかしてして、Javaで実装されたメソッドのようにSwiftで実装した関数を叩きたい!

# JNA(Java Native Access)
Processingの実体はPAppletクラスを継承したJavaクラスであるため、
Javaの文法、資産を利用することができる

Javaには、JNI(Java Native Interface)と呼ばれる、C/C++などで実装されたネイティブコードと連携する仕組みがある。
このJNIを利用すれば、Swiftで実装したネイティブコードを呼び出されるのではと思うが、
このJavaとC/C++を繋ぐJNIを書くのがマヂ無理
(パッケージ名を含めた関数名をつけた関数をつくったり…)

元記事を表示

OTHERカテゴリの最新記事