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

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

まいくろさーびすあーきてくちゃメモ

# 概要

とあるマイクロサービス開発に携わることになり、取り巻く技術要素について調査した内容から良TIPSをブックマーク。サマリを追記。

## とあるサービスの特徴
– Javaベースのマイクロサービス
– 今後別言語のサービスを追加する可能性もあるためREST APIベースのインターフェース
– Javaにおいては高速ながDI必須
– Dockerコンテナの利用
– Gradleによるマルチプロジェクトビルド
– 設計思想はドメイン駆動設計を採用

# ?マイクロサービス
– 複数の小さなサービスをAPIを介することで連結させたシステム
– サービス間の依存がないため、言語や基盤に関係なくサービスを追加・削除可能
– 代表的なAPIはREST APIで、http通信にてJsonを介したデータのやり取りを行う
– サービスが複数となるため、以下の課題をどう解決していくかが求められる
– サービスごとに参照する永続化層(DB、ファイルなど)をAPIを介してしか通信できないためスキーマ構成に悩む。もしそこを許容してしまうと、一番最下層で依存が発生し、マイクロサービスの意

元記事を表示

スッキリわかるサーブレット 第13章のdocotsubuがPostgreSQLに繋がらない問題

#起きた問題
スッキリわかるサーブレット 第13章 docotsubuがSQLに繋がらない
(一番下にエラーを書いておく)

エラー内容の冒頭
“`java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost:5432/docotsubu “`
から、ダウンロードしたはずのpostgresqlのドライバのパスが通っていない感じ。

#解決方法
postgresqlのドライバをダウンロードした後、そのjarファイルを
C:\pleiades-2020-03-java-win-64bit-jre_20200322\pleiades\tomcat\9\lib フォルダに、置く、というか移動させる。
その後、eclipseでビルドパスを通す。
**<方法>**
➡docotsubu3のパースペクティブ右クリック
➡ビルドパス
➡ビルドパスの構成
➡(左の)javaのビルドパス
➡(上の)ライブラリ
➡モジュールパス
~~➡(右の)クラス・フォルダの追加~~
~~➡WebContent/

元記事を表示

#1 世知辛い初心者エンジニアの壁 ~エンジニアになりたい君へ~

初投稿になります。あつぎです?

未経験新卒で入社したものの、初っ端から自宅学習を強いられております。
「あっ、これ前にやったやつだ!」みたいなこともなく、事前に自分で勉強していたjavaやマークアップ言語、Web系言語も意味をなしておりません。

まず初心者の方に伝えたいのは、入社する会社が
【SIer】なのか【Web系】なのか知っておきましょう。
なんとなく開発したいは、悪くもないですが、良くもないです。はい。

#■C言語めちゃくちゃムズイ
題名の通りです。
研修でC言語を学ぶのは「普通」なのでしょうか?
挫折率の高い言語を研修にするのは、なんとも言えない気持ちです。

開発環境はEclipse IDE(統合開発環境)で作業してたのですが、
Javaのようにサクサク実行ができず詰んでおります:scream:

##■詰んでるところ
プログラミングというのは、

❶コードを書いて
❷コンパイルして(PCが読める言葉に翻訳して)
❸実行結果(画面に表示される)
のですが、Eclipseの環境だと、なぜかコンパイルできずに死亡し

元記事を表示

ウイルス性肺炎と診断されたエンジニアの約2か月の在宅勤務記。

# 序:某渡辺さんの手記を読んだ。
 4月1日実名公開の『[これで「軽症」と言うのか。新型コロナ感染で入院中、渡辺一誠さんの手記](https://forbesjapan.com/articles/detail/33415/1/1/1)』を読んだ。もちろん存じ上げない方だが六本木勤務らしい。いろいろと辛そう。。緊急宣言が出されることで、IT業界の方々も、これからいろいろな影響を受けることがあることだろう。
 ということで、参考になればと、参考情報として、2月下旬に自室で悶絶(もんぜつ)しつつも保健所で門前払いされたのち3週間後に、自費で受けたCTスキャンでウイルス性肺炎と診断された私(中年♂)のこの二月ほどを振り返るポエムを書くことにした。恥ずかしいのだけれども。。
 状況としては、病状が悪かったはじめの1月は在宅でいろいろとやらかした。回復後の1月弱で、いくつかを取り戻せたと思っている。勤怠については、(理解ある勤務先のおかげで)2か月間皆勤とさせてもらっている。

## (付記) CTによる診断と血液検査
(その他の検査での陽性反応を経て別途の投薬を受けるも)発熱してから1月たって

元記事を表示

MySQL に UUID のデータを 16 byte で保存する

似たような話は各所にあるのですが、自分の理解向け、備忘録向けに書きます。

# UUID について
https://ja.wikipedia.org/wiki/UUID

もとの起こりはWikipediaなどを見るとして、実運用的には開発時にデータに一意なIDを割り振る際によく用いられる。

UUIDには複数のバージョンがあり、最も開発で用いられていると思われるのは **UUIDバージョン4(ランダム生成)** 、その他に **バージョン1(MacアドレスやTimestamp情報を用いて生成)** などがある。

ビット幅は **128ビット(16バイト)** で、文字列表現では16進法で以下のような形で表現する。
(32バイト+バウンダリ4バイト=36バイト。 “-” がバウンダリ文字列)
> 550e8400-e29b-41d4-a716-446655440000

# SQL を用いて 16バイトで MySQL に保存する (8.0 以前 )
MySQL に16バイトで保存する場合には、16進数の文字列表現のUUIDからバウンダリ文字列を取り除いたものを、Binary に変換して

元記事を表示

Jersey+Spring FrameworkでRESTfulAPIの最小構成サンプル

こちらの記事の続きです。

Mavenでマルチモジュール構成にする(Jersey RESTful)
https://qiita.com/kasa_le/items/db0d84e3e868ff14bc2b

# 目的
**Jsersey**と**Spring Framework**(not Boot)でRESTfulAPIを実装する。

`Java Spring`で調べると**Spring Boot**の例ばかりで、多分Boot使ったほうがいろいろ楽なんでしょうが、大人の事情で使えない(かもしれない)ので、**Spring Framework**の方を使ったサンプルを目指します。

# ゴール
Jersey+Spring Frameworkの最小構成のプログラムでHello World的なものが動く。

# 環境など

|ツールなど|バージョンなど|
|:–|:–|
| MacbookPro |macOS Mojave 10.14.5|
|IntelliJ IDEA |Ultimate 2019.3.3|
|Java |AdoptOpenJDK 11|
|apache maven

元記事を表示

mDNSでAndroidからRaspberryPiを探す

##Raspberry Pi

### avahi-daemonの設定

avahi-daemonのインストール(入っていなければ)

“`
sudo apt-get install avahi-daemon
“`

設定変更

“`
sudo vi /etc/avahi/avahi-daemon.conf
“`

noになっているとAndroid側で探索が出来なかった

“`avahi-daemon.conf
[publish]
publish-workstation=yes
“`

avahi-daemon.service再起動

“`bash
sudo systemctl restart avahi-daemon.service
“`

### host名確認

“`bash
cat /etc/hostname

“`

## Android

これをみた方が早いとは思う(参考)
https://developer.android.com/training/connect-devices-wirelessly/nsd.html

許可取り

元記事を表示

初心者がスッキリわかるシリーズでJavaを学んでみた

# はじめに
プログラミング初心者のスッキわかるシリーズのレビューです。
これからJavaの勉強をする方の参考になれば幸いです。

##読んだ本
スッキリわかるJava入門 第3版
スッキリわかるJava実践編 第2版
スッキリわかるSQL 第2版
スッキリわかるサーブレット&JSP入門 第2版

#スッキリわかるJava入門 
###**おすすめ度 ◎**

###良かった点
新入社員の男の子が先輩社員と一緒にRPGゲームを作っていくという流れで学習が進む。コンパイルや実行など、プログラミングのプの字も知らないような初心者向けに丁寧に書かれており、とても分かりやすかった。
ページ数は700ページを超えており、中々のボリュームだが、その分細かく、丁寧に解説してくれたのでスラスラと読むことができた。
理解が難しいと言われているオブジェクト指向を特に丁寧に解説しており、イメージを持ちながら学習することができた。
docojavaという開発環境を整えなくてもJavaを使える機能もあり、本を買っていきなりプログラミング学習を開始できるのも、この本の強みだと思う。
そもそもは、通販サイトやほとん

元記事を表示

Mavenの基本勉強メモ

ずっと Gradle 使ってたけど、お仕事で Maven をゴリゴリに使わないといけなくなったのでお勉強。

# Maven とは
Java のビルドツール。OSS。
Apache Ant に代わるものとして作られたらしい。

読み方は「メイヴン」または「メイヴェン」(自分はメイヴン派)。

結構昔からあるけど[^1]、現在も開発が続けられているし、 Maven を採用しているプロジェクトも多い印象。
2020年現在、Java のビルドツールといえば Maven か Gradle が選ばれることが多い(と思う)。

[^1]: Maven 1.0 が 2004 年、Maven 2.0 が 2005 年、Maven 3.0 が 2010 年([Maven – Maven Releases History](http://maven.apache.org/docs/history.html))

2020年現在のメジャーバージョンは3。
Maven 1 と 2 は互換性が無いが、2 と 3 は互換性が保たれている。

# 環境
“`
>mvn –version
Apache Maven

元記事を表示

【Java】カレントディレクトリの取得方法

#きっかけ#

Javaで同階層のファイルを開こうと相対パスを与えたのだが開いてくれなかった
そこで絶対パスを与えてやろうと検索してみたら記事が少なかったので覚書

#簡単#

あまりにも簡単だから誰も書かないのか
常識の範囲だから書かないのか
わからないけどとっても簡単でした

##それがこちら##

“`Dir.java
import java.io.File;

class Dir {
public static void main(String[] args) {
String path = new File(“.”).getAbsoluteFile().getParent();
System.out.println(path);
// 例:C:\Users\xxxxx\Documents\java
}
}
“`

もうひとつ

“`Dir.java
class Dir {
public static void main(String[] args) {
String path = S

元記事を表示

stack の pop() と peek() の違い

# java.util.Stack の pop() と peek() 動作確認メモ

挙動確認に関するブログ等が無かったため、メモ。

API 上で確認出来ることを以下に。

## public E pop()
> スタックの先頭のオブジェクトを削除し、そのオブジェクトを関数の値として返します
> 戻り値:スタックの先頭にあるオブジェクト(Vectorオブジェクトの最後の項目)。
> 例外:EmptyStackException – このスタックが空の場合
> (https://docs.oracle.com/javase/jp/8/docs/api/java/util/Stack.html#pop–)

## public E peek()
> スタックの先頭にあるオブジェクトを取り出します。このときオブジェクトはスタックから削除されません。
> 戻り値:スタックの先頭にあるオブジェクト(Vectorオブジェクトの最後の項目)。
> 例外:EmptyStackException – このスタックが空の場合
> (https://docs.oracle.com/javase/jp/8

元記事を表示

オブジェクト指向(Java)基本

#オブジェクト指向について
Androidアプリを作成しようと思いましたが、javaの理解が薄くて進みが悪かったので、Javaについてもう一度学び直す必要があると思いました。

特にオブジェクト指向について分かっていなかったので、そこについて分かりやすく説明してくれてたサイトをあげます。

– [オブジェクト指向再入門](http://kmaebashi.com/programmer/object/index.html)
– [オセロを例にした,C言語とオブジェクト指向の違い](http://kmaebashi.com/programmer/object/othello.html)
– [オブジェクトに仕事をさせるとは](http://kmaebashi.com/programmer/object/shigoto.html)

元記事を表示

CUIとGUIの違い

##CUIとは
Character User Interface(キャラクターユーザーインターフェース)の略。

文字だけで操作するアプリケーション。
コマンドプロンプト等で見られる。対話式の処理。
最近はあまり使われない。

###ex

コマントプロンプトで ver で Enter おすと、新しい行にうつる。

##GUIとは
Graphical User Interface(グラフィカルユーザーインターフェース)の略。

ボタンや入力欄が表示されて、マウスやタッチで操作する入力方式。
普段見ているパソコンの表示もGUI。

元記事を表示

javaが動く手順について

##javaが動く仕組み

1.プログラムを記述
2.javaコンパイラがプログラムを変換
3.Java用ファイルが作られる
4.java仮想マシンがファイルを読み取る
5.プログラムとして動作する

2〜5を自動でしてくれる。

元記事を表示

[Logback]ローテーション時に不要ファイルが消えない時の対処方法

Logbackのローテーション設定の妥当性を検証していた時に、不要ファイル(=保存切れとなったアーカイブファイル)が消えなくて「なぜだ〜」となった時に調べた時のメモ。

> **NOTE:**
>
> 検証時は、デバッグログを1つだけ出力するmainメソッドを作って、システム日付をずれして実行していました。

# バージョン

* Logback 1.2.3

# なぜ不要ファイルが消えなかったのか!?

細かい条件は調べていませんが、実行時間が短命なスタンドアロンアプリ(=ログ出力後にすぐにプロセスが終了するようなアプリ)の場合、ログファイルのローテーション後に行われるはずの不要ファイル(=保存切れとなったアーカイブファイル)削除処理が行われる前のJVMが終了してしまうことがあるようです。

# どうすればよい?

アプリ起動時に不要ファイル(=保存切れとなったアーカイブファイル)を消す処理を呼び出すためのオプションを有効化しておくことで、次回の実行タイミングで不要なファイルを削除することができます。

“`xml:起動時に不要ファイルを削除する処理を実行する際の設定例

元記事を表示

【Java】StreamAPIでズンドコキヨシ

# はじめに

少し前に流行った「ズンドコキヨシ」を久しぶりに[こちらの記事](https://qiita.com/Okocchi/items/6477bdc63eee4787cd58)で見つけたので、私もJavaを使ってズンドコキヨシを作ってみることにしました。
ついでにfor文を封印して、StreamAPIの復習をしてみました。

# 作成したコード

* 「ズン」もしくは「ドコ」のいずれかを格納した長さ5のListを作ります。
* `Stream.generate()`を使う場合、Streamが無限に続かないように`limit`を付ける必要があります。
* Listを半角スペースでJoinした結果が「ズン ズン ズン ズン ドコ」になるまで、`do~while`のループを繰り返します。
* 必ず1回はループに入るので、最初に終了条件を判定する`while`ではなく、最後に終了条件を判定する`do~while`を使いました。
* 最後に「キヨシ!!」を付け足して標準出力します。

“`java:ZundokoStream.java
package zundoko;

impo

元記事を表示

Bluetooth PC-PC/Android-PC間通信(RFCOMM)

BluetoothのプロトコルRFCOMM([RFCOMM ‐ 通信用語の基礎知識](https://www.wdic.org/w/WDIC/RFCOMM))での通信を試した。

– クライアント-サーバ
– PC-PC
– Android-PC

## PC-PC間 通信
– サーバ
– Ubuntu 18.04
– Python 3.7.4
– クライアント
– Windows 10
– Python 3.6.8

### 導入(Ubuntu)
“`shell
sudo apt install libbluetooth-dev
pip3 install pybluez
“`

### 導入(Windows)
“`
# ref: https://github.com/pybluez/pybluez/issues/279
pip3 install PyBluez-win10
“`

### ペアリング
ペアリングはOSのUIを使って手動で行った。

Ubuntu:Settings>Bluetooth
Windows:設定>デバイス>Bluetoo

元記事を表示

ScalaはJVM上で動くんだよ

## JREとJDK
JREは(Java Runtime Environment) で実行環境
JDKは(Java Development kit) で開発ツール
のことである。
scalaではJDKを使用する。

コンパイル済みのプログラムを実行するだけであればJREでOK
プログラムをコンパイルする必要があるのならJDKが必要となる
JDKはJREも同梱するのでscalaではJDKをインストールすれば問題ない。

## コマンドの種類
JavaコマンドはJavaアプリケーションを起動するコマンド
Javacコマンドはjavaソースコードをコンパイルするためのコマンド

## scalaがJVM上で動くメリット
・OSの差異などに左右されずポータルな実行プログラムである。

・java標準ライブラリをはじめ、既存のjavaモジュールを呼び出すことができる。
今まで蓄積されたjavaのナレッジの恩恵を受けることができる

・実行時パフォーマンスがある程度高速である。

## JVM上で動くデメリット
メリットがあれば当然デメリットがあるというもの
・サーバアプリケーションなどの常時稼働

元記事を表示

【Java】 Stream(filter, map, forEach, reduce)

# 概要
「streamで書いて!」と言われてメリットがわからなかったのでまとめる。

# わかったこと
– streamめっちゃ便利。
– for文やif文のネストが減って見やすい。
– リストのインスタンス化をしなくてもよくて良い。
– .addとかも書かなくて良いから、コード量が減って良い。

# filter : 条件の絞り込み

“`
List tanakaList =
list.stream
.filter(item -> item.getName.equals(“田中”))
.collect(Collectors.toList());
“`

##### <解説>
– 「list」をstreamで分解する。
– 「item」の中に「list」から要素を一つずつ取得して入れる。
– `filter`で名前が”田中”のオブジェクトだけに絞り込む。
– 分解していたstreamを集めて、collectでリストに変換する。
– 戻り値「tanakaList」にセットする。

##### <使って良かっ

元記事を表示

Java Gold SE8 に合格したお話

###はじめに
***
やっとこさ「Oracle Certified Java Programmer, Gold SE 8」を取得できました。
結果としては正答率87%でした。(65%以上で合格) 受ける前不安でしたが案外やれましたね…。

Javaの資格取るメリットとか、実際の試験に関する所感など書いていきます。

###Java Gold SE8 ってなんぞや?
***
Oracleが認定するJavaプログラマの資格です。Bronze、Silver、Goldと3つあり
難易度は[Bronze < Silver < Gold] となっています。
受験料は税込みで3万ペリカくらいします。 これじゃ地上に出られない!!
あとGoldには取得条件があり、事前にSilverの資格を取得していることが必要条件となります。

ちなみにSE8っていうのはJavaのバージョンのことを指しています。

###Goldをの資格を取得する(学習する)メリット
***
Javaのクラスやメソッドの具体的な使い方等を網羅している感じですね。
あと、「Stream API」<