- 1. 【Java】Scanner・三項演算子・配列操作 (AOJ①)
- 2. 備忘録11/13
- 3. 使用したクーポンコードを指定したエンドポイントにポストバックする
- 4. SpringBootのWebアプリケーションにMicrosoft IDプラットフォームでサインインさせる
- 5. 無限くら寿司ガチャを作ってみた
- 6. Visitor Pattern
- 7. 【Java】モジュール
- 8. 【Java】アノテーション
- 9. 【Android】NavigationViewを使わないで、スライドするメニューをつくる
- 10. Don’t work Python with OpenCV on AMD Ryzen CPU on WSL2 Ubuntu 18.04 And 20.04
- 11. 【Java】オブジェクトの中のキーでdistinctを行いたい
- 12. Spring Security の BCryptPasswordEncoder でハッシュ化された password を Perl で扱う
- 13. 【Java】toString()メソッドの使い方
- 14. Java の SimpleDateFormat で日時のパース・フォーマットをするサンプルコード
- 15. Decorator Pattern
- 16. 【Java】マルチスレッド処理 – 排他制御
- 17. Composite Pattern
- 18. 【Java】マルチスレッド処理
- 19. JUnit単体テストの前処理と後処理の順番
- 20. 【Java】Stream API – ストリーム終端処理
【Java】Scanner・三項演算子・配列操作 (AOJ①)
AIZU ONLINE JUDGE の教材を使って勉強していきます#AIZU ONLINE JUDGE とは
* AOJ(Aizu Online Judge:onlinejudge.u-aizu.ac.jp)は誰でも無料で利用できるプログラミング問題のオンライン採点システムです
* http://judge.u-aizu.ac.jp/onlinejudge/
* 開発者の渡部有隆さんによる機能・使いかた解説
https://book.mynavi.jp/manatee/series/detail/id=88273
* JavadではClass名をMainにしないと通らないので注意>オンラインジャッジとは、多くの演習問題にチャレンジすることができ、オンラインでコードを採点してくれるサービスです。各問題には、テストデータが準備されており、提出されたコードの正誤とその効率の判定を即座に行ってくれます
#入力を受け取る方法(Scanner)
* **nextLineメソッド**:改行までの1行分の入力を取得
* 単語間のスペースを含む入力を読み取ります(\
備忘録11/13
・macでスクリーンショットのショートカットキー
command + shift + 3 を同時押し → 画面全体を画像としてデスクトップに保存
command + shift + 4 を同時押し → 画面の一部の範囲を選択して画像としてデスクトップに保存・HTMLファイルのひな形(テンプレート)の自動入力
html:5 → tab・MacでVScodeの文字を大きくしたり小さくしたりする(JISキーボード)
command(⌘) + シフト(⇧) + プラス(+)
command(⌘) + シフト(⇧) + マイナス(-)・ ul>*6 → tab で、ulタグの中に(子要素として)liタグを6個いれるという意味
・ 崩れたコードがあったら、bodyタグ全体をマウスのドラッグで選択し、右クリックのメニューから選択範囲のフォーマットを選択する(フォーマットとは、崩れたコードを読みやすく整形すること)すると自動的にソースコードを整形できる。
進捗 04.さまざまなHTMLタグまで
#引用、参考
[N予備校](https://www.nnn.ed.nico
使用したクーポンコードを指定したエンドポイントにポストバックする
広告の成果計測等のために、使用されたクーポンコード等の情報を含めて計測システムのエンドポイントへポストバックする必要がある際の成果通知の仕方です。
今回はHttpURLConnectionを利用しました。
# security configの設定とmanifestの設定
設定するポストバック先のURLがhttps://〜であればこの設定は不要です。
Android 9(Pie)では暗号化されていない通信はできない、つまりhttp://ではじまるURLへの通信はデフォルトでは不可能です。
※設定するURLがhttps://で始まればこの手順は必要ありません。
## security config設定app/xmlディレクトリに以下のファイルを作成します。
“`network_security_config.xml
SpringBootのWebアプリケーションにMicrosoft IDプラットフォームでサインインさせる
##概要
Microsoftの公式ドキュメントが混乱していたり、ライブラリの更新が追いついていなかったりで最新のSpringBootからMicrosoftアカウントでサインインさせることが難しくなっています。
現状でサインインを実装するためのあれこれをまとめました。– Azure AD用のSpringBootStarterはそのままでは起動できない
– Microsoftのドキュメントも大体更新が追いついておらず、古い
– 認証のみならSpring SecurityのOAuth2だけで可能
– ほとんど日本語資料がない
– 認証後にMicrosoftGraphを通じて各機能にアクセスするなら[Microsoft Graph SDK for Java](https://github.com/microsoftgraph/msgraph-sdk-java#microsoft-graph-sdk-for-java)を使用する[^1]##前提条件
– Java11
– SpringBoot2.3.5(最新は2.4)
– 基本の依存性はSpring Initialzrで書き出す
– Gr
無限くら寿司ガチャを作ってみた
10月からスタートしたGoToEatキャンペーン皆さんは使用していますか?
[農林水産省 GoToEatキャンペーン](https://gotoeat.maff.go.jp/)私はちょくちょく使用していたのですが、なんでも巷で「無限くら寿司」というものが流行っているらしい。
GoToEatでもらえるポイントで食事をして、その食事でまたポイントが貰えるので、くら寿司を何回もお得に食べられるといったものです。(モラル的な話はおいておきます)
[くら寿司公式GoToEatキャンペーンページ](https://www.kurasushi.co.jp/topic/000971.html)GoToEatでポイントをもらうためには、くら寿司で一人あたりランチは税込み500円、ディナーは税込み1000円以上食事をする必要があります。
そこで、くら寿司のメニューを該当価格を超えるくらいでランダムで表示される「無限くら寿司ガチャ」を作ってみました。作ったwebアプリはこちら↓
[**無限くら寿司ガチャ**](http://ec2-13-231-170-155.ap-northeast-1.co
Visitor Pattern
Composite Patterの要素を取得する
[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)
以下のクラス構成で確認します
|クラス|説明|
|—–|—-|
|interface
face|型とaccept()を定義する|
|faceImple.class|faceを実装する|
|faceList.class|faceを実装する
Listを持つ
Listのiteratorを発行するメソッドを持つ|
|Visitor.class|Visitor Patternを提供する|
|user(Main.class)|動作を確認する|*user 他の開発者がこのパターンを利用する、という意味合いを含みます
“`java:interface_face
interface face{
void accept(Visitor visit);
}
“`
“`java:faceImple.class
【Java】モジュール
#モジュールとは
* パッケージの上位概念
* 構成
* **パッケージ群と関連するリソース**
* 自身の構成情報を規定する**モジュール定義ファイル**#従来のパッケージ問題点
##パッケージ単位でアクセス権限を設定できない
* ライブラリ内部での利用を想定したパッケージの場合、ライブラリ外部からアクセスできないようにしたい
* しかし内部用途の**publicクラスを不可視にする手段はない**##.jarファイルは依存関係を表現できない
* 複数のパッケージを.jar形式の圧縮ファイルとしてまとめ、ライブラリとして提供
* しかし.jarではライブラリ間の依存関係は表現できない
* .jarの中で**どの型のAPIが外部からの利用を想定しているのか、動作のためにどのライブラリが必要かわからない**###モジュール利用で解決!
* **特定のライブラリ、フレームワークをグループにして束ねる**
* モジュール化されたライブラリではpublicクラスもより細かな管理が可能
* **現在のモジュールの中だけでpublic**
* **特定
【Java】アノテーション
#アノテーション
* クラス・インターフェースなどの型、メンバーに付与できるマーク
* **アプリ本来のロジックとは直接関係しない付随情報をコードに追加**できる
* 対象となる宣言の先頭に記述##@Override
* 標準ライブラリで提供されるアノテーション
* 対象メソッドが**基底クラスのメソッドをオーバーライド**していることを宣言
* 引数のミスでオーバーライドできてない時もコンパイラが警告してくれる“`java
public class Person {
private String firstName;
private String lastName;public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}@Override
public String toString() {
return String.format(“名前は、%s %s です。”,
【Android】NavigationViewを使わないで、スライドするメニューをつくる
スライドするメニューは`DialogFragment`で作成しました。
Activityの上に、DialogFragmentが被さるイメージです。# アニメーションの作成
## 左から右へスライドするアニメーション(res/anim/slide_in.xml)“`xml
“`
## 右から左へスライドするアニメーショ
Don’t work Python with OpenCV on AMD Ryzen CPU on WSL2 Ubuntu 18.04 And 20.04
MAIN BOARD
ASUSTek COMPUTER INC.
PRIME X570-PRO
Rev X.0xCPU
AMD Ryzen 7 3700XMEM
G.Skill DDR4 3600GPU
RTX 3900It’s looks like this error.
Don’t work.“`
$ python
>>>import cv2
WARNING: CPU random generator seem to be failing, disable hardware random number generation
WARNING: RDRND generated: 0xffffffff 0xffffffff 0xffffffff 0xffffffff
“`Maybe it.
https://askubuntu.com/questions/1264439/warning-cpu-random-generator-seem-to-be-failing-disable-hardware-random-numberI update bios. It
【Java】オブジェクトの中のキーでdistinctを行いたい
## 概要
JavaもStreamの機能が実装されてから、Listから重複削除(distinct)が行えるようになりました。ただ、[【Java8】Streamで重複削除(& 重複チェック)](https://qiita.com/wrongwrong/items/02c03de086c2e46c1390)の記事にある通り、標準の機能ではListの値のみで重複削除が可能であり、Listがオブジェクトの場合にオブジェクトの中の指定したキーで重複削除が行えません。
ということで、今回はどのようにしたらオブジェクトの中の指定したキーで重複削除を実現できるか、というのを書いてみます。## 対応候補
[Stream.distinctをフィールド・プロパティなどで行うには](https://qiita.com/duffelcat/items/70bf2a21f0465e9c18ca)の記事にある通り、distinctを使わずにfilterとHashSetを組み合わせて重複削除を実現する方法が紹介されています。また、[Java 8 Distinct by property](https://stac
Spring Security の BCryptPasswordEncoder でハッシュ化された password を Perl で扱う
Spring Security の BCryptPasswordEncoder でハッシュ化された password などの文字列を、Perl から使って認証とかに使いたい時だってあるじゃない?
いや、ねーよな。
# 前提
こんな出来事がありました。
## DB に保存されたハッシュ値
“`
$2a$10$Cc6/UiniMuKkyVsVM.FUt.rmgDm0UOQxuhuGSSuL/LzZUGrNeGvxq
“`こんな値が保存されていた。
Spring Security の仕業らしい。
見慣れぬこのハッシュ値は一体どういう値なんだい。という状況にハマっていた時、色々ググったが、コレって情報が出てこなかった。
## 生パスワード
“`
JscxAX:5[4Q]NYoK
“`とあるログインユーザは
「こいつが俺のパスワードなんだけど合ってる?」
などと、Perl の私に尋ねてきた。えっ、さっきの Spring Security がハッシュ化して保存されてるあのヘンテコな文字列とこのパスワードの検証?
Perl の私にはわかんないよ?## いやい
【Java】toString()メソッドの使い方
#プログラミング勉強日記
2020年11月12日
数値を文字列に変換するためのtoStringメソッドについてまとめる。#toStringメソッドとは
数値型などをString型に変換するために使う。引数にString型の文字列に変換したい引数を指定し、戻り値はString型の文字列を返す。“`java:数値を文字列に変換する
public class Main {
pubic static void main(String[] args) {
int num1 = 1234;
int num2 = 5678;
System.out.println(num1 + num2);// 数値を文字列に変換する
String str1 = Integer.toString(num1);
String str2 = Integer.toString(num2);
System.out.println(str1 + str2);
}
}
“`“`:実行結果
6912
12345678
“`#toStrin
Java の SimpleDateFormat で日時のパース・フォーマットをするサンプルコード
## 概要
– Java の SimpleDateFormat クラスで日時文字列をパースして Date オブジェクトを文字列化する
## サンプルコード
“`java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/**
* SimpleDateFormat でパース・フォーマットするサンプル。
*/
public class Sample {public static void main(String[] args) {
String[] sourceList = {
“1-2-3 4:5:6”,
“99-2-3 4:5:6”,
“999-2-3 4:5:6”,
“2000-12-31 12:34:56”,
“9999-12-31 12:34:56.0001”,
“9999-12-31 12:34:56.000001”,
“10000
Decorator Pattern
オブジェクトをラップし、ラップしたオブジェクトの機能を拡張する
[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)
サンプルコードでは、新しく機能を追加する代わりに、Stringオブジェクトをカッコでラップします
以下のクラス構成で確認します
|クラス|説明|
|—–|—-|
|abstract
Display.class|各クラスの共通型とする
抽象メソッドを定義|
|Message.class|Displayを拡張
このクラスのStringフィールドがラップ対象|
|Decorator.class|Displayを拡張
Decoratorを実装する|
|user(Main.class)|動作を確認する|*user 他の開発者がこのパターンを利用する、という意味合いを含みます
以下はサンプルコードです
“`java:abstract_class_Display
abstract cl
【Java】マルチスレッド処理 – 排他制御
#マルチスレッド処理ではデータ共有に注意
* マルチスレッド処理では**データがスレッド間で共有されているかどうかを意識する**
* 共有データに複数のスレッドが同時に処理実施すると**データ矛盾が発生してしまう!**###NG例
* メインスレッドで用意したvalueフィールドを10万個のスレッドで並行してインクリメントする例(結果は10万を期待)“`java
//NG例
public class SynchronizedNotUse {
//複数スレッドで共有するデータ
private int value = 0;//10万個スレッド実行
public static void main(String[] args) {
final int TASK_NUM = 100000;
var th = new Thread[TASK_NUM];
var tb = new SynchronizedNotUse();
//スレッド生成、実行
for (var i = 0; i < TASK_NUM; i++) { th
Composite Pattern
#
再帰的にメソッドを呼び出す
Composite Patternは木構造を表現できる
(木構造になるのならCompositeを検討できる)[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)
以下のクラス構成で確認します
|クラス|説明|
|—–|—-|
|interface
face|異なるオブジェクトをface型で扱う|
|sam.class|faceを実装する|
|samList.class|faceを実装する
Listを保持し、再帰呼出しする|
|user(Main.class)|動作を確認する|*user 他の開発者がこのパターンを利用する、という意味合いを含みます
下記にサンプルコードを記載します
“`java:interface_face
interface face{void print();}
“`
“`java:sam.class
class sam imple
【Java】マルチスレッド処理
##結論
* プロセスとスレッドの違いは重要
* マルチスレッドの意義は**独立に動かし、かつ同じプロセス内のメモリ空間を共有する**ことができること##スレッドとは
* プログラムを**実行する処理の最小単位**
* アプリは**メインスレッド**という単一スレッドで動く
* しかし**単一スレッド**では、ネットワーク通信時などで、アプリ利用者は次の操作を通信終了まで待たないといけなくなる
* スレッドが複数ある(=**マルチスレッド**)と、
ネットワーク通信はバックグラウンドで他のスレッドが実行し、**通信中でもメインスレッドで処理を並行して実行することができる**##プロセスとは
* **プログラムのインスタンスそのもの**
* 新**プロセス起動にはCPUとメモリの割り当てが必要**
* プロセスは**1つ以上のスレッドを持つ**
* 1対1..n(1以上のn)関係
* UML表記では、プロセス側から見てスレッドは 1…n 個プロセス 1
|
スレッド 1..n##メモリ構成
* **プロセス**:Main関数で動いているプ
JUnit単体テストの前処理と後処理の順番
# はじめに
単体テストを実装する間が空くたびに、コンストラクタ、テストクラス前処理とテストクラス後処理、テストメソッド前処理、テストメソッド後処理の順番を忘れるので個人参照用に残しておく。# 環境
– JREシステム・ライブラリー[JavaSE-11]
– JUnit 4.13# テスト対象
– コンストラクタ
– テストクラス(@BeforeClass, @AfterClass)
– テストメソッド(@Before, @After)# テストサンプル
![スクリーンショット 2020-11-12 9.15.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189557/d9ba609b-d8f2-a85f-066b-f179d757a25b.png)# 結果
![スクリーンショット 2020-11-12 9.15.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189557/874f3af1-e
【Java】Stream API – ストリーム終端処理
#ストリーム終端処理
* ストリーム処理で加工/フィルタされた値を最終的に出力したり集計する
* **ストリームは終端処理をトリガーにまとめて処理される**
* 終端処理は**省略不可**
* cf:中間処理は省略可能
* 終端処理後にストリーム再利用は不可能(IllegalStateException)##要素を順に処理
* **forEachメソッド**
* `System.out::println`メソッド参照をそのまま渡す以外にラムダ式で渡すこともできる“`java
import java.util.stream.Stream;
public class StreamForEach {
public static void main(String[] args) {
Stream.of(“Munchkin”, “Siamese”, “Persian”, “Tama”)
.forEach(v -> System.out.println(v));
}
}
“`* forEachメソッドは**並列ストリームでは順序を保証しない!**
*