- 1. progateにてjava学習
- 1.0.1. IntelliJ IDEAとGradleでのJavaFXアプリケーション開発 〜環境構築からサンプルコードまで〜
- 1.0.2. java初級編 4
- 1.0.3. Streamの終端処理
- 1.0.4. Streamの中間処理
- 1.0.5. if文の書き方のまとめ(Scala、Java、Rust、C言語、C++、Go言語、PHP、Perl、Python、Ruby)
- 1.0.6. Watson SDK for Javaでサービスの呼び方を調査した
- 1.0.7. 1000000007の書き方(Java)
- 1.0.8. herokuCLIを通したherokuの開始(入門者用)
- 1.0.9. 【AndroidStudio】ERROR: Failed to install the following Android SDK packages as some licences have not been accepted.
- 1.0.10. MyBatisのforeachエラーに悩まされた
- 1.0.11. Spring Boot + Spring Security で BASIC 認証を実現する
- 1.0.12. Java HTTP ClientでHTTP Keep Alive Timeoutを設定する
- 1.0.13. new interface
- 1.0.14. 数値のキーボード入力について質問です
- 1.0.15. JavaのBigDecimalでハマらないために
- 1.0.16. 【Android/Kotlin】UIまとめ
- 1.0.17. Spring Security OAuth2はあと数年でサポート終了、その代替策
Gradle を完全に理解した人が、何も分からなくなるための第一歩
## 自己紹介
– opengl-8080
– 主に Qiita で技術メモを書いたり
– 関西の SIer 勤務—
## タイトルの元ネタエンジニア用語の「完全に理解した」「何も分からない」「チョットデキル」は「ダニング・クルーガー効果」で簡単に説明ができます。これは一種の認知バイアスで能力の低い段階では自分の能力の低さを認識できないためです(過大評価しがち)。その反面で能力が高くなると過少評価しがちです。 pic.twitter.com/LGaJ4E5hWo
— おちゃめ (@ochame_nako) MyBatisのMapperXMLでresultTypeが珍妙な動きをした
# またしてもMyBatisがやってくれやがった
[前回に引き続き](https://qiita.com/genkai_desu/items/40d7bce85b4ca5e9a71a)、またしてもMyBatisのヘンテコな動きにハマったという話です。
とは言うものの、基本的に私自身がおっちょこちょいなのと、どう考えても間違えたやつが悪い案件なので
MyBatisは何も悪くないと思います(いや、やっぱ悪いと思う)
意外と自分自身では間違いを見つけられずに、無駄な時間を過ごしてしまうって事が
まれによくあると思うのでいつか誰かが同じようなことで悩んだときにすぐに解決できるように残しておきますMyBatisのバージョンは3.2です。
# 発生したこと
DBの`NUMERIC`なカラムに対して、Javaの`Integer`で保持しているデータが何故か入らなかった。
(実際に吐き出されたエラーをとっていなかったので、後でちゃんと貼り付けます!)
たしか、**`String`なデータを`NUMERIC`なカラムに入れるなら、明示的にCASTしてね!**
というようなエラー内容だった
java学習1日目
progateにてjava学習
javaⅠコース「コードの書き方,データの型,変数」.
Ⅱコース、演算子やプログラミングの論理の組み方.
Ⅲコース、メソッドとクラス、別のクラスからメソッドを呼び出す方法.
そして、それらの総復習としてⅣ(道場コース)まで学習した。
初投稿でいまいちqiitaの使い方がわからないのでとりあえずここまで:frowning2:
IntelliJ IDEAとGradleでのJavaFXアプリケーション開発 〜環境構築からサンプルコードまで〜
#0.はじめに
いま、私は絶賛GUIツールを使ったソフトウェアを作る必要に迫られています。
~~ずっと放置していて~~最近着手したのですが、思いの外環境構築に手間取ったので備忘録を兼ねてここに書いておきます。#1.JavaFXって何ぞ?
「JavaでGUIと言ったらAWT!Swing!」と思っている方はいませんか?
実は最近、JavaFXというフレームワークが出てきてかなりGUIツール開発のハードルが下がったと聞いています(聞いているだけ)。筆者はたまたま、「あー、GUIかー、どうやって作るんだろうなー」とネットをさまよっていたら見つけました。
今日はそんな便利~~そう~~なJavaFXの入り口を少しだけご紹介します。#2.筆者の環境
– MacBook Pro (Early 2015)
– macOS Mojave (10.14.6)
– IntelliJ IDEA Community Edition (2018.3.1)
– OpenJDK (13.0.1)#3.環境構築
##3.1.OpenJDKのインストール
###3.1.1.ダウンロード
[OpenJDKのサ
java初級編 4
こちらを読んでいただく前にまずjava初級編3がありますのでそちらを拝見ください⬇️⬇︎^^
https://qiita.com/shinpachix/items/6f6f972e7980f4c59d3d
##continueとbreak
continue – 繰り返しの最初に戻って次の周回へ行く
break – 繰り返しを終了して次へ“`
int x = o;
while(true) {
//xが1の時ここへ戻る(printlnは実行されない)
x++;
if(x==1)continue;
System.out.println(x);
if(x==10)break;
}
//breakするとここへ
“`##配列
“`
String[] a = new String[3];
a[0] = “こんにちは”;
a[1] = “おはよう”;
a[2] = “さよなら”;for(int i = 0; i < 2; i++) { System.out.pintln(a[i]); ``` 一つの変数を複数の変数の列のように扱える []の中を添字と言う。 0から始まる。
Streamの終端処理
[Streamの生成処理](https://qiita.com/key_sleep/items/758067cde4f054d61010)および[Streamの中間処理](https://qiita.com/key_sleep/items/e1684f2e12532f37f507)
で処理をあたえたあとのStreamをどのような要素として終えるのか処理する## find系
検索および要素がのこっているかどうかの確認に使用“`java
Listlist = Arrays.asList(“a”,”b”,”c”,”d”,”e”); // findFirst
String a = list.stream().filter(s -> s.equals(“a”)).findFirst().orElse(null);// findAny
String any = list.stream().filter(s -> s.equals(“a”)).findAny().orElse(null);
“`## match系
指定した条件式にあてはまるものがあるかどうかを
Streamの中間処理
[Streamの生成処理](https://qiita.com/key_sleep/items/758067cde4f054d61010)
で生成したStreamの対して様々処理を与える部分。ここではまだListを生成したり、文字列として出力したりなどは行わない。
この記事では例として、すべての終端処理にListを再生成させておく## map
ラムダ式や関数を用いて要素を変換したい場合に用いる。“`java
// ラムダ式
Listactual = list.stream().map(s->s.length()).collect(Collectors.toList()); // メソッド参照
Listactual = list.stream().map(String::length).collect(Collectors.toList());
“`## filter
条件式によってStreamの要素の絞りこみを行いたいときに用いる“`java
Listactual = list.stream().fi
if文の書き方のまとめ(Scala、Java、Rust、C言語、C++、Go言語、PHP、Perl、Python、Ruby)
いろんな言語を触っていると、言語の重要な特徴はともかく、細かい文法や記号の使い方などがだんだんごっちゃになってきてしまいます。あれ、これってこの言語だとどう書くんだっけ?ってなることがよくあります。前はよく使っていた言語なのに、ちょっと離れただけでもう忘れてしまった、とショックに感じることもあります。なので、こういうメモを作っていこうと思います。
# Scala
“`scala
if (x >= 30) {
…;
} else if (x >= 0) {
…;
} else {
…;
}// 文ではなく式
val max = if (a > b) a else b;
“`– 条件式は論理値であることが必要
– C言語と同様に`{ }`の中の式が1つの場合は`{ }`を省略可能
– 文ではなく式[Conditional Expressions – Expressions | Scala 2.13](https://scala-lang.org/files/archive/spec/2.13/06-expressions.html#c
Watson SDK for Javaでサービスの呼び方を調査した
##元ネタはこれ
https://github.com/watson-developer-cloud/java-sdk##なにがはまったのか
ぱっとみて、「はいはい、API_Keyを渡すんでしょ」っていうこのコード部分に誘導された・・“`Sample.java
// letting the SDK manage the IAM token
Authenticator authenticator = new IamAuthenticator(““);
Discovery service = new Discovery(“2019-04-30”, authenticator);
“`##基本的な考え方
IBM CloudにDeployするなら、VCAP変数が使えるから、Authenticatorを指定せずにサービスのインスタンスを作ればいい。
(難しいことを考えた方が負け)##単体テストをするとき
Credential Fileをとってきて読み込ませるのが楽(VCAP変数がないけど、あるのに近い感じでできる)>Credential fil
1000000007の書き方(Java)
# 1000000007の書き方
競技プログラミングでよくあるのが、以下の指定
**”$10^9+7$で割った余りを答えてください。”**$10^9+7$の書き方として、4種類紹介します。
自分は科学表記法が短くて、間違いにくくて好きです。1. 普通に書く
“`java
int mod = 1000000007; //0の数がややこしい
“`2. “_”を利用して書く
“`java
int mod = 1_000_000_007; //分かりやすい
“`3. 科学表記法
“`java
int mod = (int)1e9+7; //デフォルトではdoubleなので必要に応じてキャスト
“`4. Mathクラスのpowメソッドを利用する
“`java
int mod = (int)Math.pow(10,9)+7; //ちょっと長い。デフォルトはdouble
herokuCLIを通したherokuの開始(入門者用)
# Herokuとは?
`Herokuは はアプリの構築、提供、監視、スケールに役立つクラウドプラットフォームで、アイデアを出してから運用を開始するまでのプロセスを迅速に進めることが可能です。また、インフラストラクチャの管理の問題からも解放されます。`–[公式フォムページ](https://jp.heroku.com/home)から抜粋補足するとHerokuはPaaS(Platform as a Service)として開発者はアプリケーション開発のみ集中すれば、アプリケーションの配布と運用が出来るということです。[GitHub](https://github.com)と連動されているのでgitにpushだけでデプロイが可能なのでCI/CDに適切なプラットフォームです。現在`Node.js`,`Java`,`PHP`,`Go`などの言語を対応しています。
# Heroku-CLIのダウンロード
Heroku-CLIはターミナル上でHerokuアプリをよりやすく扱えるツールです。
[こちら](https://devcenter.heroku.com/articles/heroku-
【AndroidStudio】ERROR: Failed to install the following Android SDK packages as some licences have not been accepted.
Windows10にAndroidStudio(3.5.2)をインストール。
gitからプロジェクトをclone。
Make Projectしたら以下のエラー。“`bat
ERROR: Failed to install the following Android SDK packages as some licences have not been accepted.
platforms;android-27 Android SDK Platform 27
build-tools;28.0.3 Android SDK Build-Tools 28.0.3
To build this project, accept the SDK license agreements and install the missing components using the Android Studio SDK Manager.
Alternatively, to transfer the license agreements from one workstation to anoth
MyBatisのforeachエラーに悩まされた
# MyBatisのforeachでハマった件
MyBatisの`
`を利用して、複数データのバルクINSERTしようと思ったのですが
何故かこんなエラーが発生。
MyBatisのバージョンは3.2です。“`
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘__frch_item_0’ not found. Available parameters are [addItems, param1]
“`# 実装
“`ItemMasterMapper.java
void addItems(@Param(“addItems”) List- addItems);
“`“`ItemMasterMapper.xml
INSERT INTO item_master(name, price, option) VALUES
Spring Boot + Spring Security で BASIC 認証を実現する
## 概要
– Spring Boot と Spring Security を使って BASIC 認証を実現する
– 今回の環境: Java 11 + Spring Boot 2.2.1 + Spring Security 5.2.1 + Gradle 6.0.1## BASIC 認証とは
[Basic認証 \- Wikipedia](https://ja.wikipedia.org/wiki/Basic%E8%AA%8D%E8%A8%BC)
> Basic認証では、ユーザ名とパスワードの組みをコロン “:” でつなぎ、Base64でエンコードして送信する。このため、盗聴や改竄が簡単であるという欠点を持つが、ほぼ全てのWebサーバおよびブラウザで対応しているため、広く使われている。
[HTTP 認証 \- HTTP \| MDN](https://developer.mozilla.org/ja/docs/Web/HTTP/Authentication)
> ユーザーIDとパスワードはネットワークを介してクリアテキスト (base64 でエンコードされていますが、base6
Java HTTP ClientでHTTP Keep Alive Timeoutを設定する
# はじめに
Open JDK 11から導入されたHTTP ClientでHTTP Keep Alive Timeoutを設定するサンプルです。サーバー側からのコネクションクローズとクライアントからのリクエストが同時処理されたタイミングでの通信エラーを防止するため、クライアント側のKeep Alive Timeout値をサーバー側より短くするのは鉄則です。
そのため、クライアント側の設定方法を押さえておくことは、重要です。
# 利用するJDK Version
執筆時点で最新のOpen JDK 13を利用します。
また、コードの実行にはjshellを利用します。
余談ですが、jshellはまじで便利ですね。“`shell-session
~ $ java –version
openjdk 13.0.1 2019-10-15
OpenJDK Runtime Environment (build 13.0.1+9)
OpenJDK 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)
“`# 設定方法
HTTP
new interface
接口可以通过直接new来实例化?先说结论:
接口、抽象类,不可以被new!
接口、抽象类可以理解成是模糊不定的东西,要使用它的特质必须要实例化,实例化不能直接通过new,而是通过实现接口方法、继承抽象类等。
上面的代码,与Object A = new Object(); 不同,因为还忽略了一个重要的地方:大括号!!!new__接口__大括号{ 。。。};
后面加花括号这种写法,实际是new了一个实现接口的匿名类,开发人员需要在匿名类内部(花括号内)实现你那个接口。
数値のキーボード入力について質問です
以下のコードの文字入力部分をBufferedReaderにすると正常に入力できないのですがなぜでしょうか
Scannerだと正常に動きます
“`BufferedReader br = new
BufferedReader(newInputStreamReader(System.in));double max = Double.NEGATIVE_INFINITY;
double min = Double.POSITIVE_INFINITY;
double dat = 0;System.out.println(max + ” ” + min);
for(int i = 0;i < 4;i++) { System.out.println("数値入力"); dat = br.read(); //ここ if(dat > max) {
max = dat;
}
if(dat < min) { min = dat; } } System.out.println
JavaのBigDecimalでハマらないために
同僚がBigDecimalの扱いでハマったのでメモ。
# イミュータブル(Immutable)とは
~~変数の値~~オブジェクトを操作するとき、その~~変数~~オブジェクト自身の値を書き換えれることを「ミュータブル」、書き換えれないことを「イミュータブル」といいます。Javaの場合、~~intやdouble~~Calendarはミュータブル、Stringはイミュータブルになります。
# BigDecimalはどっち?
BigDecimalのAPIドキュメント
https://docs.oracle.com/javase/jp/8/docs/api/java/math/BigDecimal.html足し算をする add メソッドについて見てみましょう。
“`java
/**
値が(this+augend)でスケールがmax(this.scale(), augend.scale())であるBigDecimalを返します。
パラメータ: augend – このBigDecimalに加算する値。
戻り値: this + augend
*/
public BigDecimal a
【Android/Kotlin】UIまとめ
## 目次
1. パスワード非表示
2. addTextChangedListenerの書き換え
3. enum書き換え## 1. パスワード非表示
![undefined]()– java
“`MainActivity.java
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
“`
– kotlin“`activity_main.xml
“`
## 2. addTextChangedListenerの書き換え
– java“`MainActivity.ja
Spring Security OAuth2はあと数年でサポート終了、その代替策
# Spring Projectからの発表
https://spring.io/blog/2019/11/14/spring-security-oauth-2-0-roadmap-update重要な点は下記2点です
– 世の中に認可サーバー製品がたくさんあるので、Spring Securityではサポートしないことを決定しました
– Spring Security OAuth2は、2.3.xは2020年3月でEOL、2.4.xはFeature Parityに達してから(?)1年はサポートしますということで、Spring Security OAuth2を使っている方は、なるべく早く移行することをおすすめします(下記)。
# クライアントおよびリソースサーバーの移行
Spring Security 5.x本体のOAuth2機能を使いましょう。# 認可サーバーの移行
Keycloakなど、他の製品に移行しましょう。# 参考資料
– [基礎からのOAuth 2.0とSpring Security 5.1による実装](https://www.slideshare.net/ma