- 0.0.1. Javaでメソッドをオーバーライドしたとき、オーバーライドされたメソッドを使用する親クラスで定義されたメソッドの挙動
- 0.0.2. Springで@Transactionalを付与したメソッドを別のメソッドから呼んでみる。ロールバックされるか?されないか?
- 0.0.3. MultipartFileについてメモ
- 0.0.4. auカブコム証券のkabuステーションPUSH APIを受信してCSVファイルへ保存する(フラッシュ間隔を調整)
- 0.0.5. try-with-resourceについて
- 0.0.6. Struts2のOGNL式について
- 0.0.7. VSCodeでJava&PostgreSQLの環境を構築しようとした件
- 0.0.8. 【Spigotプラグイン】公式の様なTab補完機能を作る
- 0.0.9. pg_auto_failoverによるPostgreSQLサーバの冗長構成をさわってみた
- 0.0.10. ABC269A~Eの解答[Java]
- 0.0.11. リアルタイムにテクニカル指標を計算する
- 0.0.12. 複数の分足のテクニカル指標を計算する
- 0.0.13. リアルタイムに4本値とチャートデータをマージするツール
- 0.0.14. 複数の分足の4本値とチャートデータをマージするツール
- 0.0.15. CalcIndicatorクラスの依存性を切る
- 0.0.16. Facadeパターンでの開発
- 0.0.17. 【Spring】@Controllerと@RestControllerの違い
- 1. @Controllerと@RestContollerの違い(備忘)
Javaでメソッドをオーバーライドしたとき、オーバーライドされたメソッドを使用する親クラスで定義されたメソッドの挙動
確かめたかったことは以下のコードと結果が全てです。
`Parent`クラスの`greet()`メソッドでは内部で`say()`メソッドを呼び出しています。
`Child`クラスでは`say()`メソッドをオーバーライドしています。その結果`Child`クラスの`greet()`メソッドでは`Child`クラスの`say()`メソッドが使用されています。これは`Parent childParent = child;`のようにして`Parent`クラスのインスタンスとして扱って` childParent.greet();`のように呼び出した場合も`Child`クラスの`say()`メソッドが使われます。(こっちは参照の流れを考えると当然な気もしてきた。)
`Parent`クラスのインスタンスだと思って`greet()`メソッドを呼び出したら、実は`Child`クラスの`say()`メソッドが裏で使われていたとなるとコードリーディングしづらくなりそうですね。
“`java
public class Main {
public static void main(String[]
Springで@Transactionalを付与したメソッドを別のメソッドから呼んでみる。ロールバックされるか?されないか?
## 疑問
`@Transactional`アノテーションをつけたメソッドを同じクラス内の別のメソッドから呼び出した時に、途中で例外が発生した場合ロールバックされるのか?されないのか?気になったので調べてみました。結論から言えという方はこちら
@Transactional
アノテーションをつけたとしても、同じクラスの別のメソッドからの呼び出された場合、@Transactional
アノテーションがない場合と全く同じ挙動になる。
## 手を動かしてみる
まず、公式チュートリアルからコードを拝借してきましょう。
チュートリアル完了後のコードをVSCodeで開いてみます。“`
# コードをクローンしてくる
git clone https://github.com/spring-guides/gs-managing-transactions.git
# VSCodeでプロジェクトを開く
code ./gs-managing-transactions/co
MultipartFileについてメモ
## はじめに
`MultipartFIle`について整理しておきたいので、自分用にメモ。## about
・`form`から「`multipart/form-data形式`で送られてきたファイル」を受信した際の表現。・データ内容は、メモリかディスクに保存される。
## チェーンできるメソッド一覧
・`getBytes()`
バイトの配列に変換できる・`getContentType()`
ファイルのタイプを返してくれる・`getInputStream()`
ファイルの内容を読み取る・`getOriginalFileName()`
ファイル名を返してくれるまだまだ色々とある。
[参考](https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/web/multipart/MultipartFile.html)
auカブコム証券のkabuステーションPUSH APIを受信してCSVファイルへ保存する(フラッシュ間隔を調整)
# はじめに
前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)
5. [auカブコム証券のkabuステーションREST APIのテスト用モック
try-with-resourceについて
try-with-resources 文は、1 つ以上のリソースを宣言する try 文である。
ここで言うリソースはプログラムで読み込みや書き込みなどを行った後に、閉じなければならないオブジェクトを指す。try()の()の中に使用するオブジェクトを宣言することで書くことができる。
書き方の例として以下、オラクルのドキュメントの例を引用“`例.java
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
“`ちなみにオブジェクトは複数宣言可能みたいで、宣言する際は;で区切ることが必要である。
try文の()の中にリソース宣言して処理を書いていくことができ、処理終了後はリソースは自動的に閉じられる。例を見ただけではなんなので、通常のtry文と比較してみた。
以下は、5分に1
Struts2のOGNL式について
# Struts2のOGNL式について
## 概要
Struts2ではJSPやvalidation.xmlにOGNL式が記述できる。OGNL式は他にもstruts.xmlのresultにも記述できたり、JSPではJakartaEEのEL式、スクリプトレットと組み合わせて使用できる。
OGNL式、スクリプトレット、EL式の違い、組み合わせ、OGNL式のstrutsタグ以外での使用について述べる。### 調査環境
– Ubuntu 22.04.1 LTS
– openjdk version “11.0.12” 2021-07-20 LTS
– struts-2.5.26
– Tomcat 9.0.64## JSPにおけるOGNL式、スクリプトレット、EL式の解析タイミング
JPSではOGNL式、スクリプトレット、EL式が記述可能だが、それぞれ解析のタイミングが異なる。
### スクリプトレット
スクリプトレットはJSPの初回呼び出し時にJasperコンパイラによってJavaクラスにコンパイルされる。そしてJavaクラスのメソッド、コードの一部として実装される。
いつ解析する? J
VSCodeでJava&PostgreSQLの環境を構築しようとした件
# 前提
1. プロキシ設定が必要
2. DBはPostgreSQL
3. VsCodeで以下の環境を構築
“`conf:構成 ※意外と躓いたので備忘録
・サーバーサイド:Java(SpringBoot)
・クライアントサイド:Node.js(Nuxt.js)
“`# 手順
## 下準備
1. Dockerの設定にProxy設定を行う
ID、パスワードが必要な場合は以下を参考に設定
「http://[Proxy-ID]:[Proxy-Password]@[Proxy-URL]:8080/」
2. Gitに適当なリポジトリを作成
3. そのリポジトリをCloneしておく
4. コマンドプロンプトでCloneしたディレクトリに移動
5. VSCodeを起動
“`code .“`と入力すれば、カレントディレクトリを開いて起動してくれる## 開発用コンテナとPostgreSQLコンテナを準備
1. 「.devcontainer」フォルダを作成し、その中に
「devcontainer.json」「docker-compose.yml」を作成
“`json:devcontaine
【Spigotプラグイン】公式の様なTab補完機能を作る
# Tab補完機能とは
tabComplete (practice#Spigot pic.twitter.com/dNxLiGejHk
— Aruka Sakaki (@yt0f1) September 19, 2022
↑の様な、文字を入力したら候補が表示され、Tabを押すと補完してくれる機能のことです。
(上の動画のものは入力された文字に対してリアルタイムで反応するタイプ)# 普通のTab補完機能を作る
いきなりリアルタイムで入力された文字に反応するタイプを作るのは難しいので、入力された文字列に関わらず決められた候補を表示するTab補完機能から作ってみましょう。## TabCompleterの実装
Tab補完機能はCommandExecuterやListenerを実装するときのようにimplementsに`implements TabCompleter`と記載します。
コマンドと別のClassに実装しても良いですが、共通化させる予定がないようでしたらCommandExecuterを実装したクラスに追加で実装するのが得策だと思います。Tab補完機能はonTabCompleteインターフェースに記載
pg_auto_failoverによるPostgreSQLサーバの冗長構成をさわってみた
PostgreSQLサーバの冗長構成を検討することになりました。
AWSなどのクラウドサービスで運用するなら、そのようなPaaSが提供されているので、ほぼ、それ一択なんでしょうが、今のところVPSを使う案件が中心なので、候補の対象外です。
また約5年前に、Pacemakerを使ったPostgreSQLサーバの評価に関わったことがあるのですが、PacemakerがいろいろなMWの制御ができるだけに、覚えることも多かったので、今回はちょっと敬遠。
そして見つかったのが[pg_auto_failover](https://github.com/citusdata/pg_auto_failover)でした。
* 以下の内容は多分に推測が混ざってますので、ご注意ください。
# 評価環境の準備
まずは簡単に動作を確認したいので、リポジトリにある docker-compose.yml を使います。
そのままの設定だと、
* PostgreSQLサーバのコンテナ3台 (以下、DBノード1, DBノード2のように表記)
* PostgreSQLクラスタを監視するコンテナ1台 (以下、監視ノー
ABC269A~Eの解答[Java]
## はじめに
今回は初の5完でしたので、Eまで載せようと思います。では、見ていきましょう。
## A – Anyway Takahashi
問題文は[こちら](https://atcoder.jp/contests/abc269/tasks/abc269_a)問題文そのままですね。
“`A.java
class Main{static Library System = new Library(java.lang.System.in,java.lang.System.out);
public static void main(String[] args)throws IOException{
//各値の受け取り
int a = System.in.nextInt();
int b = System.in.nextInt();
int c = System.in.nextInt();
int d = System.in.nextInt();//計算結果の出力
System.out.println((a+b)*(c-d));
リアルタイムにテクニカル指標を計算する
# はじめに
前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)
5. [auカブコム証券のkabuステーションREST APIのテスト用モック
複数の分足のテクニカル指標を計算する
はじめに
前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)
5. [auカブコム証券のkabuステーションREST APIのテスト用モックサー
リアルタイムに4本値とチャートデータをマージするツール
はじめに
前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)
5. [auカブコム証券のkabuステーションREST APIのテスト用モックサー
複数の分足の4本値とチャートデータをマージするツール
はじめに
前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)
5. [auカブコム証券のkabuステーションREST APIのテスト用モックサー
CalcIndicatorクラスの依存性を切る
# はじめに
前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)
5. [auカブコム証券のkabuステーションREST APIのテスト用モック
Facadeパターンでの開発
開発の初案件が終わったので、何回かに分けてアウトプットします。
今回はFacadeパターンでの実装の流れについてです。
以下のような前提で開発をしました。
ファイル名やクラス名は実際のものと変えています。## Facadeパターン
複数のクラスが集まってできたプログラムは、様々なクラスのメソッドを呼ぶので処理が複雑になります。
このような場合に処理を依頼する側から見た際に窓口となるファイルを用意するのがFacadeパターン。
Facadeに当たるファイルには実際の処理は書かず、メソッドの呼び出しをメインにします。
今回は携帯電話の支払い履歴を閲覧するような処理を実装しました。
処理としては電話番号とIDで顧客情報照会をした後、顧客情報に紐づく履歴情報を取得するという流れです。
中身の処理は今回は省略します。
WB0_01が窓口となるFacadeにあたり、顧客情報照会をするクラスがClient、履歴情報を取得するクラスがPaymentHistoryとします。![スクリーンショット 2022-09-17 17.35.02.png](https://qiita-image-store.s
【Spring】@Controllerと@RestControllerの違い
@Controllerと@RestContollerの違い(備忘)
@Contorollerは戻り値にHTML(View)を返却するためのアノテーション。
@RestControllerはJSONやXMLを返却するためのアノテーション。
参考
Java 推奨されるnullチェックについて
本日も実務の実装の中で、学んだことがあったので備忘録として書き残しておこうと思います。
人知れず変数の中に入ってしまうnullの対処についてです。
Java歴の浅い方や古いバージョン(8以前)を中心に実装していた方もためになるかと思います。## 僕の知っていたnullチェック
僕が研修などで学んだチェックは一般的な以下でした。“`java
String a = null;
String b = “あいう”;if (a != null) {
System.out.print(a);
} else {
System.out.print(b); //こっちが実行される
}“`
!= または == これで比較してif文の分岐でヌルポで落ちないようにすることしか知りませんでした。
今でもシステム内では結構使われていましたが、、、## 推奨されるnullチェック
nullの考慮ができるメソッドやOptionalを利用することで、nullチェックの数は減るとは思いますが、
どうしてもnullチェックをしたい時があります。
そんな時にjava8以降で推奨される
Python,Ruby,PHP,Java,JavaScript,Perlのファイル・ディレクトリ操作の比較
Python,Ruby,PHP,Java,JavaScript,Perlのファイル・ディレクトリ操作の比較
# Python
https://qiita.com/supersaiakujin/items/12451cd2b8315fe7d054
# Ruby
https://qiita.com/prgseek/items/38f74d99b74baa3b42f7
# PHP
https://qiita.com/daichi87gi/items/111cd922991e4a18d1ef
# Java
https://qiita.com/suema0331/items/03330a663773204afc5f
# JavaScript
https://qiita.com/turmericN/items/28e8bc8fca07285ddffc
# Perl
https://perlz
【Java】コンパイル時にpackage文に関するエラーが出た場合の対処法
## 環境
+ Microsoft Windows 10.0.22000.856
+ PowerShell 7.2.4
+ Java 18.0.2.1## はじめに
Javaのpackage文を使用した際に、コンパイル( `javac Main.java` )で `エラー: シンボルを見つけられません` あるいは `error: cannot find symbol` のようなエラーが出た場合の対処法について説明する。“`:ディレクトリ構成
6-1/(カレントディレクトリ)
├ Kouhan.java(commentパッケージに所属する)
├ Main.java
└ Zenhan.java(commentパッケージに所属する)
“`各ファイルの中身
[『スッキリわかるJava入門 第3版』](https://sukkiri.jp/books/sukkiri_java3)の練習問題6-1のコードを一部引用する。
“`java:Main.java
import comment.Zenhan;public