- 1. Javaで何か作ってみる(2022/12/13 Day54)
- 2. SwiftとJavaを比較してみた Swift:Java互換表
- 3. JavaのDIについてまとめ+ おまけ(よく使ってた機能)
- 4. JPAでストアドプロシージャから複数のResultSetを受け取る
- 5. 関数
- 6. カプセル化の演習(setterに戻り値つけて笑われた話)
- 7. MacによるJavaのセットアップ
- 8. JavaをMacで開発してたときのメモ
- 9. Java初心者が不具合を発生させたことで、自動テストを書くようになった話
- 10. Text CAPTCHAを解決する方法
- 11. SolveMediaの突破方法
- 12. Rotate Captchaの突破方法
- 13. トークンを理解すれば、勝手に入力スキップしちゃうScanner.nextXxx()三兄弟と仲良くなれる気がする
- 14. reCAPTCHA V3の突破方法
- 15. reCAPTCHA V2 Invisibleの突破方法
- 16. reCAPTCHA V2コールバックの突破方法
- 17. 通常のCAPTCHAを突破する方法
- 18. Centos7 LAMPJ &tomcat redis
- 19. 【Java】初めてのJava環境構築(windows)
- 20. Scalaで一方向ハッシュ関数を使いたかった
Javaで何か作ってみる(2022/12/13 Day54)
## 今日やった事
– オブジェクト指向の動画教材を見た。(**J2-99_さいごに** まで見た。)
– Springの動画教材を見た。(**セッティング~学習環境を準備しましょう~** まで見た。)
## 参考にしたもの
– [Spring 入門 ~ SpringBoot 2 を使ってお問い合わせアプリとToDoアプリを作る ~](https://www.udemy.com/course/java_spring_beginner/)
– [【超初心者も必見】Javaプログラミングの「オブジェクト指向」が絶対理解できる講座【プロ講師が丁寧解説】](https://www.udemy.com/course/uz-java-obj/)
## 所感
– オブジェクト指向は完璧ではないものの、ある程度は理解出来たと思う。
– Springは、動画教材だと、Eclipseをインストールする方法しか紹介されていなかったから、
Eclipseをインストールしなくてもいい方法を模索したい。## 明日の予定
– 引き続き、動画教材を進めていく。
SwiftとJavaを比較してみた Swift:Java互換表
# はじめに
普段はiOSエンジニアとしてSwiftを使用してアプリ開発をしています。
サーバーはJavaメインで書かれているので勉強がてらSwiftとJavaの互換表を作ってみます。
基礎的なところから少しづつ更新していきたいと思っています。
ただSwift歴も浅いのでJavaは勿論、Swiftも間違いや、より良い書き方、こんな書き方もあるよ! といった際はコメントでご教示いただけますと幸いです。# 変数
## 変数
“`swift:swift
// 宣言
var num: Int
// 代入
num = 0
// 初期化 (var 変数名 = 値)
var num = 0var str = “もしもし”
var bool = true
“`
“`java:Java
// 宣言
int num;
// 代入
num = 0;
// 初期化 (データ型名 変数名 値;)
int num = 0;String str = “もしもし”;
boolean bool = true
“`
・Javaには;セミコロンが付きます。忘れそうですね。
・Stringは大文字から始ま
JavaのDIについてまとめ+ おまけ(よく使ってた機能)
### DIとは
– Dependency Injection(依存性注入)の略
– オブジェクトの成立に必要なコードを分離し、プログラム実行時に注入する手法
– 例:2つのクラスの間に依存関係があり、そのうちの1つのクラスが完成していない場合
完成済みのクラスをテスト(単体テスト)はできない
しかし、依存性注入によってクラスの依存関係が解消され、完成済みクラスをテストすることが可能
– このため、システムを改修する場合も最低限の変更で済ませることができ、開発が楽になる今回の学習では以下の手順でDIを導入(DIの有無で動作確認の為)
1. 非DIのプロジェクトをコピー
2. 以下を3つをBean化
1. コントローラー
2. サービス
3. リポジトリ## 実例
例:2つのクラスの間に依存関係があり、そのうちの1つのクラスが完成していない場合
### DIなし
![スクリーンショット_2022-04-06_14.35.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co
JPAでストアドプロシージャから複数のResultSetを受け取る
# 概要
JPAでストアドプロシージャ(SQLServer)から複数のResultSetを受け取る方法です。# 実装内容
“`gradle:build.gradle
dependencies {
implementation ‘org.springframework.boot:spring-boot-starter-web’
implementation ‘org.springframework.boot:spring-boot-starter-data-jpa’
runtimeOnly ‘com.microsoft.sqlserver:mssql-jdbc’
}
“`## シンプルなストアドの例
– SingleStoredProcedureはINPUTパラメータ名がParameterで、1つのResultSetを返却します。“`java
public interface SingleStoredProcedureRepository extends JpaRepository{ @
関数
## 関数とは
何らかの入力を受け、処理を行い、出力を返すもの。
このため、メソッドも関数の一種になる。### 戻り値を返す関数の代入
関数は変数に代入できるという特徴を有しています。そのため、関数の一種であるメソッドを変数に代入することができます。“`java
import java.util.function.Function;public class Main {
// 文字を受け取り、その文字数を返す関数
public static Integer len(String word) {
return word.length();
}public static void main(String[] args) {
// 変数funcにlenメソッドへの参照を代入
Functionfunc = Main::len;
// applyで代入された関数を適用
int a = func.apply(“Tokyo”);
System.out.println(a);
}
}
“`*Function
カプセル化の演習(setterに戻り値つけて笑われた話)
# 問題
口座から引き出す機能のみをもったシステムを実装してください。“`java
public class ATM {
public static void main(String[] args) {BankAccount myAccount = new BankAccount();
myAccount.setWithdrawal(800);//800円を引き落とす。
myAccount.setWithdrawal(-800);//不正に残高を増やそうと試みるw
System.out.println(“現在の預金残高:” + myAccount.getBalance() + “円”);
}
}
//演算結果
//入力された数値が正しくありません。
//現在の預金残高:9200円class BankAccount {
//預金残高を保存するプライベートなインスタンス変数balanceを定義
private int balance;public BankAccount() {
this.balance = 1000
MacによるJavaのセットアップ
# Homebrewをインストール
“`bash
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
“`# Javaインストール
“`console
brew tap homebrew/cask-versions# Java8
brew install –cask temurin8# Java11
brew install –cask temurin11# Java17
brew install –cask temurin17
“`# インストール済みバージョン確認
“`console
/usr/libexec/java_home -V
“`# Javaのバージョン切り替え
“`vim:~/.bash_profile
export JAVA_HOME=`/usr/libexec/java_home -v “<バージョン番号>“`
PATH=$JAVA_HOME/bin:$PATH
“`“`con
JavaをMacで開発してたときのメモ
### macOSでのJDKのインストール
https://docs.oracle.com/javase/jp/16/install/installation-jdk-macos.html#GUID-2FE451B0-9572-4E38-A1A5-568B77B146DE
### STS(Spring Tool Suite)のポート番号変更
application.propertiesを編集
![スクリーンショット_2022-04-01_20.53.29.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051129/5756a74b-8482-b6b7-88bf-5b869d02b44d.jpeg)
![スクリーンショット_2022-04-01_20.54.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051129/d2ecb63d-a78b-2807-a59c-a294945b953e.png)##
Java初心者が不具合を発生させたことで、自動テストを書くようになった話
WHIの山﨑です。
私は2022年の1月にWHIに転職したのですが、転職して早々に不具合を発生させてしまったことで、自動テストを書くようになったので、その時の失敗談と学びについてまとめてみました。
「この人みたいな失敗をしないように、自動テスト書くようにしよう。」と思ってもらえれば幸いです。
## ぬるぽとの出会い
私は前職ではPythonを利用していたので、もちろんぬるぽなんぞ意識せずに開発をしてきました。
しかし、WHIではJavaをメインで利用しています。
慣れない言語、特にオブジェクト指向と静的な型付けに苦労しつつも開発を行っていました。
そんなある日のこと、自分の修正したプログラムで不具合が発生しました。
内容としては、以下の通りです。
“`
ClassA a = variable.getAItem();ClassB b = a.getBItem();
“`上記のようなコードがあったとします。(もちろん、業務コードはちゃんとした命名がされています。)
基本的には、`varibale.getAItem()` からは必ずClassAの値が帰ってきま
Text CAPTCHAを解決する方法
1. Find captcha question.
2. [API](/api-docs#solving_text_captcha)に質問を送信してください。
## SDKを使用する場合 (推奨):PHP
“`php
// https://github.com/2captchacom/2captcha-phprequire(__DIR__ . ‘/../src/autoloader.php’);
$solver = new \TwoCaptcha\TwoCaptcha(‘YOUR_API_KEY’);
try {
$result = $solver->text([
‘text’ => ‘If tomorrow is Saturday, what day is today?’,
‘lang’ => ‘en’,
]);
} catch (\Exception $e) {
SolveMediaの突破方法
1. CAPTCHA画像をダウンロードします。
2. 画像を[API](/api-docs#solving_solvemedia)に送信します。
## SDKを使用する場合 (推奨):
PHP
“`php
// https://github.com/2captchacom/2captcha-phprequire(__DIR__ . ‘/../src/autoloader.php’);
$solver = new \TwoCaptcha\TwoCaptcha(‘YOUR_API_KEY’);
try {
$result = $solver->normal(‘path/to/captcha.jpg’);
} catch (\Exception $e) {
die($e->getMessage());
}die(‘Captcha solved: ‘ . $result->code);
“`
<
Rotate Captchaの突破方法
1. CAPTCHA画像をダウンロードします。
2. 画像を[API](/api-docs#solving_rotatecaptcha)に送信します。
## SDKを使用する場合 (推奨):
PHP
“`php
// https://github.com/2captchacom/2captcha-phprequire(__DIR__ . ‘/../src/autoloader.php’);
$solver = new \TwoCaptcha\TwoCaptcha(‘YOUR_API_KEY’);
try {
$result = $solver->rotate([
‘file’ => ‘path/to/captcha.jpg’,
‘angle’ => 15,
]);
} catch (\Exception $e) {
die($e->getMessage());
トークンを理解すれば、勝手に入力スキップしちゃうScanner.nextXxx()三兄弟と仲良くなれる気がする
Javaでコンソールアプリを作ると、ScannerクラスのnextXxx()を使って入力値を得るところがうまく制御できないことがある。なんか知らんけど、勝手に入力をスキップされて、処理が終わってしまったりして。
しれっと入力をスキップしてやり過ごす`Scanner`インスタンスに対して、「お願い、怠惰なScannerクラスさん、もっと働いて!! [^1]」とか思ったり思わなかったりして……知らんけど!!
そんなくだらないこと言うのはこれくらいにして、さて本題へ。
今回は特に
`Scanner.next();`
`Scanner.nextInt();`
`Scanner.nextLine();`
の違いに関して、トークン[^2]とバッファーというものに注目しながら、挙動をみていきます。# よくあるお悩み: `nextInt()`や`next()`の直後に、`nextLine()`を呼ぶと思ったように動きません!
よく目にするのは、こんなコードの例。
“`java
private static void tryToNextLineExample() {
Scanne
reCAPTCHA V3の突破方法
1. ウェブサイトのソースコードを調べて、`grecaptcha.execute`コールを検索します。このコールは、ウェブサイトのコードのどこにでも、含まれているJavaScriptファイル内のページの `