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

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

【Java】package privateなメンバーはその気になれば外部プロジェクトからアクセスできる

# はじめに
Javaにおけるアクセス制御修飾子には以下の4種類があります。

* public
* どこからでもアクセス可能
* protected
* 同じパッケージ内か、もしくはサブクラスのインスタンスからアクセス可能
* アクセス修飾子なし(package private)
* 同じパッケージ内からのみアクセス可能
* private
* 同じクラス内からのみアクセス可能

これらは見ての通り、下に行けば行くほどアクセス可能範囲が狭いです。publicとprotectedが公開API、package privateとprivateが非公開APIとされます。

今回話題にしたいのは、下から2番目のpackage privateです。package privateというのが正式な呼び方かわかりませんが、その呼ばれ方の通り限りなくprivateに近いものなのだろうと思っていたのですが、案外そうでもなかったぜというのがこの記事の趣旨です。

# 結論
package privateが「同じパッケージ内からのみアクセス可能」という理解は正しいが、外部のプロジェクトにおいて

元記事を表示

Java の乱数発生器

# これは何?

[Javaの乱数生成器について速度面から調査してみる](https://qiita.com/penguinsan/items/52a7b76e5570f7cf7e15)
という記事を見て、Java の乱数にも色々あるんだなと思い。

速度面以外を軽く調べた。

# 調べた

## java.util.Random

Knuth 先生の有名なアルゴリズムを使っている。
有名だけど、メルセンヌ・ツイスタなんかと比べるとバラケ具合がしょぼいこともよく知られている。

## java.util.concurrent.ThreadLocalRandom

内部状態は

“`java:java
long rnd;
“`

の一個、64bit だけ。定数が

“`java:java
long multiplier = 0x5DEECE66DL;
long addend = 0xBL;
long mask = (1L << 48) - 1; ``` と用意されていて計算は ```java:java int next(int bits) { rnd = (rnd *

元記事を表示

Couchbase Lite機能紹介:クエリのトラブルシューティング

## はじめに

ここでは、Couchbase Liteデータベースの検索のために利用するクエリについて、トラブルシューティングなどの目的のために調査を行う方法について説明します。

Couchbase Liteは、内部的にSQLiteを利用しており、ここでの解説は、SQLiteの`EXPLAIN QUERY PLAN`コマンドに関係してきます。
SQLiteの`EXPLAIN QUERY PLAN`の詳細については、以下を参照してください。

https://www.sqlite.org/eqp.html

調査方法には、APIを利用する方法と、cbliteコマンドを利用する方法があります。これらのいずれの方法を用いた場合でも、出力内容は同じフォーマットとなります。
出力内容は、クエリのパフォーマンスの問題を診断したり、クエリを最適化したりするときに役立つ洞察を提供します。

## 使用法

### cbliteでの利用例

ターミナル上で、データベースを指定して、インタラクティブモードで、cbliteコマンドを実行します。

“`
cblite

元記事を表示

Timber×Crashlytics でログをクラッシュレポート送信(Timber編)

# はじめに

リリースしたモバイルアプリで、未検出のバグによりクラッシュしてしまう場合、ユーザーが声を上げない限り検知できない・・ということは避けたいですよね。

また、万が一そのような不具合があった場合、再現手順やユーザーの状態を調査・分析するのは骨が折れます。

更には、リリースしたモバイルアプリの動作ログを自前のプラットフォームに集約するような仕組みも敷居が高いです。

それらを踏まえて、

– クラッシュするまでの詳細なログをクラッシュレポートで確認したい
– ログはいい感じに出力したい(`if (Logger.isDebugEnabled()) { … }`みたいな分岐はイヤ)
– 手軽に導入したい

という思いのもと、Timber と Firebase Crashlytics での実装例を紹介したいと思います。

# Timber

[Timber](https://github.com/JakeWharton/timber) は、Android向けのログ出力ライブラリです。

ログと言えば、Androidの標準ロガーとして、`android.util.Lo

元記事を表示

VSCode。。。エディタやめるってよ。

# VS CODEってなんですか?

超高機能な**テキストエディタ** です。最近では統合開発環境(IDE)だと言っても良いぐらいに高機能になりました。

## IDEってなんですか?

ソフトウエア開発のためにプログラムエディタ、コンパイラ呼び出し、テストの実行、デバッグ支援などの機能を統合したソフトウェアのことです。だいたいこんな機能を持っています

NO.|機能|概要
—|—|—
1|任意コンパイル|ユーザーの求めに応じて、プログラムをコンパイルする。
2|オートコンパイル|プログラムの変更の度にコンパルして、問題などがあればエディタ上にわかりやすく表示する。
3|補完|入力された情報から、取り得る選択肢を並べる。開発者はその中から適切なものを選択する。
4|フォーマッタ|インデントなどを適切に整形してくれる
5|シンタックスハイライト|プログラムに色を付けて構文をわかりやすくする
5|依存解決|そのプログラムが利用する外部のライブラリを読み込む
6|多言語対応|自然言語じゃないよ。Javaとかcとかたくさんのプログラミング言語に対応するってことだよ。

元記事を表示

Javaコンパイル・実行時の文字化け対策(windows10)

# 初めに
Javaの勉強を始めてみました。VS Codeを使っているのですが、デフォルトで開くターミナルがpower shellであることに気付かずネットで調べたコマンドが動かないよおおお???となっていました。(コマンドプロンプトとpower shellで動くコマンドが微妙に違うため)
もっと言うと意地を張らずにJavaはShift-JISで書いたほうがいいと思いますが、気になってしまったので少し調べてみました。

# 文字化け対策(windows)
windowsのコマンドプロンプトでJavaを実行すると文字化けした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130321/929f7849-0e6a-2dea-b3d8-1cb9826be8f7.png)

これはJavaファイルをUTF-8で作成したが、コマンドプロンプト(windows)が使用している文字コードはshift-jisであることが原因。
UTF-8を画面に出力するためには以下のコマンドを実行すればよい。

元記事を表示

JAVAのWebサーバーにTLS1.3を適用する方法

古いWebサーバーはTLS1.0を使っていますが、TLS通信の安全性を上がるため、
TLS1.3にアップデートしようと思います。

## 1.暗号化スイートとは
SSL(Secure Sockets Layer)とTLS(Transport Layer Security)は、いずれもインターネット上でデータを暗号化して送受信する仕組み(プロトコル)です。個人情報やクレジットカード情報などの重要なデータを暗号化して、サーバ~PC間での通信を安全に行なうことができます。

## 2.今のTLSバージョンを確認してみて
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1234182/31622957-e9e8-7bfe-5b57-5897e6595899.png)

えぇぇ!TLS1.3までアップデートしてなっかたのに、
なぜTLS1.3になっているでしょうか?

## 3.TLS1.3に変わる原因は?
ネットから調べたんですが、
TLS 1.0および1.1は、安全とは見なされなくなったTL

元記事を表示

演算子いろいろ

論理積 &&
x && y :左辺も右辺もtrueの場合にtrue(左辺 かつ 右辺)
論理和 ||
x || y :左辺か右辺のどちらかがtrueの場合にtrue(左辺 または 右辺)
論理否定 !
!x  :xがtrueの場合にfalse、xがfalseの場合にtrue

元記事を表示

Javaの乱数生成器について速度面から調査してみる

Java17にjava.util.randomパッケージが追加されたので改めて乱数生成器について調査してみることにしました。

ちなみに本記事では特にどの乱数生成器がよいというような検証はしません。(用途によって向き不向きがあるはずなので)

# ベンチマーク環境

* OS
* Windows10Pro
* WSL1
* Ubuntu20.04LTS
* CPU
* Core i7-10700 (8core 16thread)
* Memory
* 32GB
* Java
* OpenJDK17
* Apache Maven
* 3.8.3

# コード

https://github.com/penguinsan/random_bench

# 調査したアルゴリズムについて

各アルゴリズムについてシングルスレッドの場合とマルチスレッドの場合でテストしています。

マルチスレッドは4スレッドとし、実行したPCのCPUコア数内に収めています。

※Java16までを使う場合の参考としてApache Com

元記事を表示

【決定版】継承vsインタフェースのベストプラクティス

こんにちは。歴13年のアプリエンジニアです(iOS/Android、Best of AppStore?受賞歴あり)。

ふだんは自分が手がけているスタートアップと数社の技術顧問をしているのですが、長年さまざまなプロジェクトで目の当たりにしてきたアプリ(ソフトウエア)開発上の問題について、**設計とプログラミング双方の観点からのベストプラティクス**を、**ルーディメンツ(Rudiments)**と名づけシンプルで理解しやすい形で提唱を目指し準備しています。

今日はこの中から最もポピュラーな問題である、「継承vsインタフェース」(Interface as inheritance alternative)を取り上げます。特に初級者の方にとってより理解が深まれば幸いです。

# Interface as inheritance alternative
あるクラスを新しく作り、既存のクラスと共通の型にしたい場合、クラスの**継承を使うべきか、interface(Swiftではprotocol)を使うべきか**は多くのエンジニアにとって常につきまとう問題である。

## 採用基準
筆者は継承と

元記事を表示

よく忘れるチートシート(Java編)

Javaでよく忘れるやつの覚え書き

同確はPCにJavaを入れるか https://paiza.io/ja この辺で
エラーが出たら申し訳bangatです

プログラミング5大要素

1. 変数
Integer

“`IntegerSample.java
import java.io.PrintStream;
import java.lang.Integer;

class IntgerSample {
public static void main(String[] args) throws Exception {
Integer num = 10;

System.out.println(num);
}
}
“`

String

“`StringSample.java
import java.io.PrintStream;
import java.lang.String;

class StringSample {
public stat

元記事を表示

逆引きMicronaut

MicronautフレームワークでのRestful API実装を試してみた際に調べたことを整理した。(作成したプロジェクトは[micronaut-rest-api](https://github.com/unhurried/micronaut-rest-api/)に置いている。)

#### 公式ガイドライン・リファレンス

* Micronaut本体:[User Guide](https://docs.micronaut.io/latest/guide/) [API Reference](https://docs.micronaut.io/latest/api/)
* 周辺ライブラリ(Micronaut Dataなど):[User Guide一覧](https://micronaut.io/docs/)

#### 開発環境 (InteliJ) セットアップ・プロジェクト作成

* Micronaut CLIをインストールする。Windows環境には[Chocolatey](https://micronaut-projects.github.io/micronaut-starter/

元記事を表示

【俺的】COBOL→Java言語移行ガイド(INDEX)

この記事は『[プログラミング学習 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/studying)』の20日目のフライング記事です。

## この記事について

この記事は、年内に書いた「【俺的】COBOL→Java言語移行ガイド」のリンク集です。もうアップもしてしまっていますので、この記事もフライングで公開してしまいます。

## このシリーズを書こうとしたきっかけ

リンクだけ貼っておしまいは味気ないので、ちょっと自分語りさせてください。

私は大学では情報科に在籍し、SIerに就職したのですが、そこでまさかのまさかでCOBOLに出会いました(学生時代は「COBOLなんてもう動いてないでしょw」とか言ってた矢先でしたから驚きですね)。
そんなこんなで入社して数年立ち、現在もCOBOL業務に従事しています。
しかし転機は訪れます。COBOLからJavaへのマイグレーションの話が飛んできたのです。長期計画のためすぐではないですが、いずれはという話でした。
私は大学でご教授頂いたおかげもあり、Javaは自分でサー

元記事を表示

【俺的】COBOL→Java言語移行ガイド(基本文法編)

## 検証環境
|COBOL|Java|
|:—:|:—:|
|cobc (GnuCOBOL) 3.1.2.0|java 14.0.1 2020-04-14|

## はじめに
[前回の記事](https://qiita.com/zama_8722/items/544e049fa7746e3f4ce2)では、「全体構造から見たCOBOLとJavaの違い」を見ていきました。今回はCOBOLとJavaで、「基本文法がどのように変わってくるのか」を書いていこうと思います。最終回です。

### 閲覧してほしい方(前編より)
* これからCOBOLからオープン系へのマイグレーションに従事する方
* COBOLとJavaの言語的違いを知っておきたい方
* COBOL習熟者で、将来オープン言語を触らなければならないがわからない方

COBOL未経験でマイグレーションされる方や、これからCOBOLエンジニアからJavaエンジニアに移る方の駆け出し資料として参考になれば幸いです。

## 1.データID ⇔ 変数
Java等オープン言語でいう変数、COBOLでいうデータIDの定義方法は、根本的

元記事を表示

Apache POIを使って列の幅の自動調整を行う

Excelの列の幅の自動調整に相当することをApache POIで実現したい場合、`Sheet.autoSizeColumn`を利用すると良いです。ただし、とくに日本語が混ざっている場合、`Sheet.autoSizeColumn`がうまく列の幅を調整してくれないことがあります。これを回避したい場合、自動調整したい列のセルのフォントを日本語対応のものに設定してやると、想定通り動くようです。

以下はそのサンプルになります。

“`java
Workbook workbook = …;
Sheet sheet = …;

// 幅の自動調整をしたい列のセルのフォントを日本語対応のものに設定する。
// (ここでは例としてYu Gothic UIを使う)
Cell cell = …;
CellStyle cellStyle = workbook.createCellStyle();
Font font = workbook.createFont();
font.setFontName(“Yu Gothic UI”);
cellStyle.setFont(font);
cell

元記事を表示

Apache POIを使ってセルにリンクを設定する

Apache POIを使ってセルにリンクを設定する場合のサンプルを以下に示します。

“`java
Workbook workbook = …;
Cell cell = …;

// セルにハイパーリンクを設定する
Hyperlink hyperlink = workbook.getCreationHelper().createHyperlink(HyperlinkType.DOCUMENT);
hyperlink.setAddress(“destination!A1”);
cell.setHyperlink(hyperlink);

// セルに値を設定する
cell.setCellValue(“destinationシートのA1へのリンク”);

// 文字色を青色にして、アンダーラインを設定する
CellStyle cellStyle = workbook.createCellStyle();
Font font = workbook.createFont();
font.setColor(IndexedColors.BLUE.getIndex());
font.set

元記事を表示

SpringSecurityとSpringBootでログイン認証と投稿機能を実装する

#概要
SpringSecurityでDBログイン認証後にユーザーの情報を取得し、投稿した際にユーザー情報も投稿用のテーブルに保存するアプリケーションです。

###環境
– SpringBoot 2.5.6
– Java11
– SpringSecurity
– MySQL
– SpringDataJPA
– Gradle

###作成する機能
– ユーザー登録
– ログイン
– ログアウト
– 投稿

#実装

##データベース
###usersテーブル
| id | email | name | password | created_at |
| ———– | ——————- | ——– | ——– | ———- |
| int | varchar | varchar | varchar | datetime |
| NOT NULL | NOT NULL, UNIQUNESS | NOT NULL |

元記事を表示

maven-shade-pluginを使おうとしたら「Unsupported class file major version ○○」って言われてビルドできなくなった話

# コトの発端
`Java 16`で`Maven`使いながらコードを書いていて依存関係を追加する必要があることに気が付いた私は`pom.xml`を開いて`dependency`を書き加えていた。
その依存関係は`relocation`する事を前提としていたので、いつも通り`maven-shade-plugin`のバージョン`3.2.4`を使って`relocate`の処理を書いた。
暫くしてコードを書き終え、ビルドしてみるとなんとエラーが発生!コンソールには

“`console
Unsupported class file major version 60
“`

とかいうわけのわからないエラーが出ていた。

# 結局何が原因だったのさ

使用していた依存関係が`Java 16`を使用していて、かつ`maven-shade-plugin`のバージョン`3.2.4`を使っていたこと、そしてその状態で`relocation`をしようとしていたことが原因だと私の中で結論付けた。(そのままやんけ)

# 解決方法は?

①`pom.xml`の`java.version`を`16`にしておく

元記事を表示

【Java】アノテーション

# @￰JsonProperty
– Javaインスタンスのシリアライズ時のプロパティ名を指定する

# @￰JsonIgnore
– Jsonに含めたくないプロパティを指定する

# サンプルコード
### Javaクラス
“`User.java
package annotations.naming;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;

public class User {
private Long id;

@JsonProperty(“firstName”)
private String name;

@JsonIgnore
private String password;

public Long getId() {
return this.id;
}

public void setId(Long id) {
this.

元記事を表示

[Unity] AndroidのSpeechRecognizer APIレベル30以上で実装する

# はじめに

音声テキスト認識を実装するにあたり、2021年11月からGoogleの規約の方で新規・既存とターゲット API レベル 30(Android 11)以上が必須となってますので、API30での実装のテストをしました。

https://android-developers-jp.googleblog.com/2020/12/new-android-app-bundle-and-target-api.html

過去の実装記事は下記
[[Unity] AndroidのSpeechRecognizer(音声テキスト認識)を実装する](https://qiita.com/atsutama/items/fd8dca4a1e621f4c855b)

## 環境
macOS Catalina: 10.15.7
Unity 2018.4.19f
Android Studio 4.0.1

## APIレベルの引き上げ時にやること
– aarの`targetSdkVersion`を30に変更
– Unityプロジェクトの`AndroidManifest.xml`に`queries`の設定

元記事を表示

OTHERカテゴリの最新記事