- 1. Java入門メモ
- 2. 【初心者向け】JavaのAbstractの使い方
- 3. Springbootでメッセージの管理とバリデーション処理を行う
- 4. Excelの書式文字列(文字列、数値)
- 5. Visual Studio Code で java spring framework 開発環境設定
- 6. 並列処理(マルチスレッド)についての備忘録③
- 7. 並列処理(マルチスレッド)についての備忘録②
- 8. 並列処理(マルチスレッド)についての備忘録①
- 9. [Java] AWS Lambda + API gateway + S3でjsonファイルをいじるだけ (2)
- 10. Spring 処理を定期的に実行する
- 11. ぼくたちのKotlinにはonEachがある
- 12. 【Java入門】Handling Exceptions(例外処理)
- 13. 【画像処理解説】判別分析法(Javaソース付き)
- 14. VSCodeでTomcat for Javaが起動できない
- 15. 【画像処理解説】二値化(Javaソース付き)
- 16. gRPCのEnumを必須チェックしたい
- 17. [Java] AWS Lambda + API gateway + S3でjsonファイルをいじるだけ(1)
- 18. Java入門[インスタンス化]
- 19. 【画像処理解説】グレースケール変換(Javaソース付き)
- 20. @RunWith(PowerMockRunner.class)と@RunWith(SpringRunner.class)の共存方法
Java入門メモ
![JDK_JRE_JVM-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755874/89db1601-fb77-aaf0-5fca-b1305aac5cdb.jpeg)
# Javaの分類* JavaSE
Javaのスタンダード版、簡単なゲームやデスクトップアプリの開発に使われる、基礎の基礎。
* JavaME
携帯や小型電気などの開発に使われる。今ほとんど死んでる
* JavaEE
Webなどの開発に使われる。Javaといったら、この版のことさしてるのが多いでしょ。
# JDK、JRE、JVM
* JDK(Jvav Development Kit)
中身は開発用に必要なツールキット及びJRE,JVMが含まれてる。* JRE(Java Runtime Enviroment)
javaを動かす環境のことです* JVM(Java Virtual Machine)
JavaはMACでもWindowsでも動けるのはJVMがあるから。例えば、hello.javaをコンパイルする
【初心者向け】JavaのAbstractの使い方
# はじめに。
どうも初めまして、にかわみかんです。私が半年ほどJavaを学んでいて結構引っかかりやすい部分だなぁと感じたAbstract(抽象化)についてなるべくわかりやすく解説していきたいと思います。
私は職業訓練校にてJavaを勉強させていただいたのですが、抽象クラスを継承して子クラスを作成する。という事自体が正直言って最初はまったく意味がわかりませんでした。
クラスを抽象化したところで直接インスタンス生成できなくなるだけで何のメリットがあるのかが全く理解できなかったのです。
ですが、私が今まで書いてきたコードにはAbstractは既に欠かせないものになっています。
そんなわけで、抽象化のメリットと書き方を解説していきたいと思います。
# Abstractのメリット
まずクラス継承のメリットとして共通の変数を定義したり、共通の処理を記述したりすることで、
同じ処理を記述する必要がなくなりコーディング速度やメンテナンス性の向上などのメリットがあります。さらに抽象化によって以下のようなメリットがあります。
## 繰り返し処理の共通化
まず以下のようなコードがあ
Springbootでメッセージの管理とバリデーション処理を行う
以下の内容について記載します
* メッセージファイルの利用について
* 単一項目チェック
* 複数項目チェック事前準備
GitHub
https://github.com/jirentaicho/springbootsample
※メッセージの表示はコントローラーのアノテーションをRestControllerに変更します。application.propertiesを
application.ymlとして、ymlファイルで記載を行う。既存のpropertiesファイル
“`properties:application.properties
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/misaka
spring.datasource.username=misaka
spring.datasource.password=mikoto
“`ymlファイルに置き換えた例
“`yml:
Excelの書式文字列(文字列、数値)
文字列の書式文字列は”@”ですが、数値の書式文字列は”0_ “(ゼロ、アンダーバー、半角スペース)です。Excelで書式を数値にしてからユーザー定義を選択すると、確認することができます。
Apache POIで書式文字列を指定する際にも使用可能です。
Visual Studio Code で java spring framework 開発環境設定
## まえがき
VSCode が評判いいので Java (Spring MVC) の開発環境が移行できるか試行錯誤してみました。
結果的に割と使えるっぽい感じです。
Eclipse の方が色々揃ってる気がしますが、何しろ軽いです。
Eclipse で開発中のソースを移行する想定です。
普通にデバッグボタンを押して tomcat デバッグがしたい!## 環境
Windows10 64bit
VSCode 1.59.0
JDK 1.8(プロジェクト用) , OpenJDK 11(Javaの拡張機能用)
maven 3.6.3
tomcat 7 (古い…)## 準備
#### VSCode のインストールhttps://code.visualstudio.com/download
https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-ja
#### Javaの拡張機能のインストール
https://marketplace.visualstudio.com/item
並列処理(マルチスレッド)についての備忘録③
## コレクションの注意点
– 拡張for文を用いてremove()メソッドで要素の削除をするとConcurrentModificationException例外が発生する
– 反復処理中にコレクションの変更の可能性がある場合は、例外を投げる仕様“`java
package cp8.no7;import java.util.HashMap;
import java.util.Map;public class Main {
public static void main(String[] args) {
Map
map = new HashMap<>();
map.put(1, “test1”);
map.put(2, “test2”);
map.put(3, “test3”);// 例外が発生する(ConcurrentModificationException)
for (Integer key : map.keySet()) {
map.remove(key);
}// 順番に一つずつ
並列処理(マルチスレッド)についての備忘録②
## スレッドの状態
– start()メソッドが呼ばれると実行可能状態(スレッドが作成され、実行を待っている)に移る
– スレッドが実行される実行状態に次に移る。このときrun()メソッドが実行される
– run()メソッドが終わり、終了する※一つのスレッドに対して2回以上start()メソッドは実行できない→IllegalThreadStateExceptionが発生する
## スレッドの優先度
– スレッドには実行の優先順番が存在し、getPriority()メソッドで取得できる
– setPriority()メソッドで優先順位を変更できる## スレッド制御
– sleep()メソッド→このメソッドを実行したスレッドはミリ秒休止する
– interrupt()メソッド→休止中のスレッドに割り込む“`java
package cp8.no4;public class Main {
public static void main(String[] args) {
Thread threadA = new Thread(() -> {
System
並列処理(マルチスレッド)についての備忘録①
## スレッドとは
– プログラムを実行した処理の最小単位
– javaコマンドを実行すると新しいスレッドを作成し、そのスレッド上で指定したクラスのmain()メソッドを実行している## スレッドを作成する方法
#### Threadクラスを継承してサブクラスを定義
– run()メソッドをオーバーライド
– メインメソッド内でstart()メソッドを実行“`java
package cp8.no1;public class Main {
public static void main(String[] args) {
// スレッドの作成
ThreadA threadA = new ThreadA();
ThreadB threadB = new ThreadB();// スレッドの実行開始
threadA.start();
threadB.start();
}
}// 1つめのクラス(Threadクラスを継承)
class ThreadA extends Thread {@Override
public void run
[Java] AWS Lambda + API gateway + S3でjsonファイルをいじるだけ (2)
[前回](https://qiita.com/regaeve/items/f5863d7d059782f9c2a9)はlambdaでeventを受け取るところまでやりました。
今回はAPI gatewayとの連携をやっていきます。(S3は次回で。。疲れちゃった。)
# 環境
– windows 10
– java11
– gradle
– intelij idea community# API gatewayからlambdaを呼び出す
## API gatewayでAPIを構築する
1. AWSコンソールから`サービス`⇒`ネットワーキングとコンテンツ配信`⇒`API gateway`を選択
![スクリーンショット 2021-08-12 170811.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240124/b31f1a24-ebb8-6f43-acf9-bd6467639f87.png)1. `APIを作成`⇒REST APIを`構築`を選択(僕はプライベートじゃない方で作りました
Spring 処理を定期的に実行する
@Scheduledを使ってメソッドを定期的に動かす実装をしたので備忘録として
####実装自体はとても簡単!
[@SpringBootApplication](https://spring.pleiades.io/spring-boot/docs/current/reference/html/using.html#using.auto-configuration)アノテーションが使用(ルーティング処理)されているアプリケーションクラスに
※Springでよく使うアノテーションまとめ(見やすかったのでリンク)→https://www.sria.co.jp/blog/2021/06/5712/
“`MyApplication.java
@SpringBootApplication
public class MyApplication {public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}}
“`@En
ぼくたちのKotlinにはonEachがある
#Javaでたまに見る
“`java
Listupdated = list.stream().map(ele -> {
ele.setFoo(“bar”);
return ele;
}).collect(Collectors.toList());
“`
なるほど、
1. listの各要素のプロパティを更新
2. **変更後の要素そのもの**を格納したリストを返す
ということがやりたい訳ですね。**…コットリ~~~~~ン!!!!!!!**
# KotlinにはonEachがある
“`kotlin
val updated = list.onEach{ ele -> ele.setFoo(“bar”) } // { it.setFoo(“bar”) } でもイケる
“`
####Kotlinの世界に来たら1行や!!
**onEach** は返り値ナシ相当の `forEach` とは違い、実行後にメソッド呼び出し元のcollectionのインスタンス(の参照)を返してくれます。**スゴイ・ステキ**#####Kotlinにもmap
【Java入門】Handling Exceptions(例外処理)
![2021-08-12_14h33_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/a72b8d6c-edb3-23e0-b02e-0f1dc79baafd.png)
#もくじ
>**1,Handling Exceptions
2,Another example
3,Using a finally Block
4,Catching FileNotFoundException
5,Throwing Your Own Exceptions**#1, Handling Exceptions
**Here’s a program that divides two number and uses a try/catch statement to catch an exception if the second number turns out to be zero.**
“`java:Main.java
public class Main {public static v
【画像処理解説】判別分析法(Javaソース付き)
#はじめに
画像処理を簡単に解説していきます。
下部にはJavaでのソースコードも載せているのでぜひご参照ください。
不定期にはなりますが、随時更新していく予定です。#判別分析法とは?
二値化のしきい値を自動で決める手法の一つです。
別名として大津の二値化という名称もよく知られています。どういう方法かというと、二値化した時の画像の白黒のバランスが良くなるように計算します。
具体的には白画素と黒画素のクラス内分散を小さく、かつ、クラス間分散を大きくするようにしてくれます。
画像ヒストグラムを想像するとわかりやすいと思います。#画像ヒストグラムとは?
画像ヒストグラムとは画像内の画素数を、画素値ごとにカウントしたグラフです。
グレースケール画像の場合、横軸が0から255になり、縦軸がそれぞれの画素数です。
つまり、山が右寄りなら明るい画像、左寄りならば暗い画像となります。
これを知っていると、イメージがしやすくなるので覚えておくことをお勧めします。二値化というのは、画像ヒストグラム状に一本の縦線を引くという処理です。
引いたうえで、線の左は黒、右は白にしてしまうというわけで
VSCodeでTomcat for Javaが起動できない
#vscodeでTomcat for javaが起動できない
Tomcat for Java で下記のようなエラーが出て解決策を見つけたので書きます。
![スクリーンショット (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/893794/d1c0c54e-9c96-4927-6141-924ffb092ad5.png)
これは、java.home(vscodeの設定)のjavaファイルが**OS(C:)**の下に置いていないのが、原因です。
windowsのファイルパスがTomcatサーバーでうまく読み込まれないのが主な原因みたいです。
>上記の文は、https://teratail.com/questions/291816より引用なので、
**<修正前>**
![スクリーンショット (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/893794/9d2f5236-d5b1-c324-f20d-
【画像処理解説】二値化(Javaソース付き)
#はじめに
画像処理を簡単に解説していきます。
下部にはJavaでのソースコードも載せているのでぜひご参照ください。
不定期にはなりますが、随時更新していく予定です。#二値化とは?
名前の通り、画像を0と1の二値に変換する処理です。
なお、処理によっては1ではなく255を設定することもあります。二値化された画像は白と黒の二色だけで構成されます。
下部の例を見て頂いた方が理解しやすいかと思います。この変換は領域分割や境界線抽出などの前処理としてよく用いられます。
白黒はっきりつけることで、画像の解析がしやすくなると理解しておけば十分です。#どうやって二値にするの?
画像を二値化するにはしきい値というものを用います。
処理としては単純で、画素値がしきい値より大きければ白、小さければ黒とするのが一般的です。
カラー画像のままでは処理ができないため、前処理として(2)で示したグレースケール変換が用いられます。余談ですが、二値化には2つ以上のしきい値を用いるものも存在します。
応用として実装してみても面白いかもしれませんね。#しきい値の決め方は?
しきい値の決め方について
gRPCのEnumを必須チェックしたい
人の欲は尽きない。
# やりたいこと
gRPCのリクエストでEnum型のフィールドが送られてきたかどうか、必須チェック(Nullチェック)したい。# 前提
Enumのfield number 0番は、Nullとして弾く。
⇒なぜなら、リクエスト内部でNull/未設定の場合に初期値として0番が入ってくるので、0番にプログラム上の意味を持たせると、0番が明示的に送られてきたのか空だったのか区別がつかないから。# 準備
Enum値を持ったAPIを用意します。“`Sample.proto
syntax = “proto3”;package sample;
option java_package = “jp.co.your.project”
option java_outer_classname = “SampleProto”import “google/protobuf/empty.proto”;
service SampleService {
rpc getType (SampleRequest) returns (google.protobuf.Empty)
[Java] AWS Lambda + API gateway + S3でjsonファイルをいじるだけ(1)
# やりたいこと
自分のS3バケット上にjsonファイルを作ったり、中身を書き換えたりできるapiをlambdaとapi gatewayつかって作る予定です!!言語はjava11です!!!
**といっても今回はlambda動かすところまで。**~~s3とか~~api gateway周りは[次回](https://qiita.com/regaeve/items/23ba1a883a87adf92365)(~~あるといいな~~あった)
# 環境
– windows 10
– java11
– gradle
– intelij idea community# リージョンについて
僕の場合、lmabda、api gatewayはオハイオ(us-east-2)で作成しました。
場所は多分どこでもよいと思いますが、**両方とも揃えないと連携できない**気がします。
S3はリージョン指定できないので気にする必要ないです。![Inkedスクリーンショット 2021-08-12 104325_LI.jpg](https://qiita-image-store.s3.ap-northeast
Java入門[インスタンス化]
##オブジェクト指向
私は`部品化していく考え方`と認識しています。
例えばラーメン屋をつくるのであれば
最低でも– ガスコンロ
– 冷蔵庫
– 炊飯ジャー
– 作業台
– 洗浄機
– 茹で麺機などなどが必要になってきます。
ラーメン屋というものから、一つ一つ部品化していくことも、オブジェクト指向の考え方に繋がるのではないかと思います。
「オブジェクト指向とはなんぞや」を考えるのも大事ですが、定期的に思考を見直すくらいでいいのかなと個人的には考えています。
今回はオブジェクトのつくり方を簡単にまとめていきます。
###インスタンス
`クラス名 変数名 = new クラス名();`で生成できます。
そもそも`インスタンス`とは、クラスという型を`具現化`したものになります。
以下の記事は視覚的にもわかりやすいです。
https://atmarkit.itmedia.co.jp/ait/articles/0803/12/news148.html
たいやきの型(クラス)があるからこそ、同じ形のたいやきを作れる。
更には味を変えることだってできますね。では、サ
【画像処理解説】グレースケール変換(Javaソース付き)
#はじめに
画像処理を簡単に解説していきます。
下部にはJavaでのソースコードも載せているのでぜひご参照ください。
不定期にはなりますが、随時更新していく予定です。#グレースケール画像とは?
一言でいうと白黒画像です。
プリンターなどで白黒印刷を選択すると出てくるあの画像です。前回、カラー画像は3チャネルで構成されると説明しました。
グレースケール画像はチャネル数が1つとなります。
すなわち、8bitのみで画像を表示することができます。ただし、画像処理で扱う場合、チャネル数は3のままで表示のみグレースケールにすることもあります。
具体的には各画素値のR, G, Bにそれぞれ同じ値をセットすることで表現できます。
この辺りは画像処理を扱う言語やライブラリなどに依存するので、実装前に確認が必要です。#公式はあるの?
単にRGB値の平均を取ることでもグレースケール化はできます。
しかし、一般的には以下の式が用いられています。グレースケール値 = 0.213 * R + 0.715 * G + 0.072 * B
人間の視覚は緑に対して敏感な一方、青に対して鈍感となって
@RunWith(PowerMockRunner.class)と@RunWith(SpringRunner.class)の共存方法
## 概要
`@RunWith(PowerMockRunner.class)`と`@RunWith(SpringRunner.class)`を同時に使いたい。
しかし、`@RunWith`には複数クラスを指定することはできない。
そのため、以下のように`@PowerMockRunnerDelegate`を使う。“`gradle:build.gradle
dependencies {
testImplementation ‘org.powermock:powermock-module-junit4:2.0.9’
testImplementation ‘org.powermock:powermock-api-mockito2:2.0.7’
}
“`“`java
@PrepareForTest({SampleServiceImpl.class})
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringRunner.class)
@SpringBootTest
public class Sa