- 0.0.1. auカブコム証券のkabuステーションPUSH APIを受信してCSVファイルへ保存する(フラッシュ間隔を調整)
- 0.0.2. try-with-resourceについて
- 0.0.3. Struts2のOGNL式について
- 0.0.4. VSCodeでJava&PostgreSQLの環境を構築しようとした件
- 0.0.5. 【Spigotプラグイン】公式の様なTab補完機能を作る
- 0.0.6. pg_auto_failoverによるPostgreSQLサーバの冗長構成をさわってみた
- 0.0.7. ABC269A~Eの解答[Java]
- 0.0.8. リアルタイムにテクニカル指標を計算する
- 0.0.9. 複数の分足のテクニカル指標を計算する
- 0.0.10. リアルタイムに4本値とチャートデータをマージするツール
- 0.0.11. 複数の分足の4本値とチャートデータをマージするツール
- 0.0.12. CalcIndicatorクラスの依存性を切る
- 0.0.13. Facadeパターンでの開発
- 0.0.14. 【Spring】@Controllerと@RestControllerの違い
- 1. @Controllerと@RestContollerの違い(備忘)
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の環境を構築しようとした件
VsCodeでサーバーサイドはJava(SpringBoot)、クライアントサイドにNode.js(Nuxt.js)の開発環境を
Remote Developmentで構築しようとしたら、意外と躓いたので備忘録1. Gitに適当なリポジトリを作成
1. そのリポジトリをCloneしておく
1. コマンドプロンプトでCloneしたディレクトリに移動
1. “`code .“`と入力
1. VSCodeに「Remote Development<ms-vscode-remote.vscode-remote-extensionpack>」
「日本語パック<MS-CEINTL.vscode-language-pack-ja>」をインストール
1. 画面左下の「><」をクリックして「Remote-Containers: Open Folder in Container」を選択 1. あとは設問に従って、「Java」と「Gradle」と諸々をインストール この時に「Java & PostgreSQL」を選んでおくとラク
【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
Javaの文字列操作
Javaの文字列操作に関するメモ書きです
## 文字列調査
### equals
equalsメソッドは2つの値が等しいかを調べるメソッドです。
下記サンプルコードのように、2つの文字列が等しいか判定するのに利用します。“`java
public class Main {
public static void main(String[] args) {
String s1 = “iamcat”;
String s2 = “iamcat”;
String s3 = “IAmCat”;
if (s1.equals(s2)) {
System.out.println(“s1とs2は等しい”);
}
// equalsは大文字と小文字を区別する
if (s1.equals(s3)) {
System.out.println(“s1とs3は等しい”);
}
}
}
“`
実行結果
“`java
s1とs2は等しい
“`
数値の比較では ==演算子 を使用しますが、文字列の比較ではequ
Java:複数のExcelドキュメントをマージする方法
Excelドキュメントを操作する際に、複数のExcelドキュメントを1つのドキュメントにマージするのは非常に実用的な機能です。この機能は、関連ドキュメントを一緒に配置するのに役立ち、後で検索するのに便利です。[Free Spire.XLS for Java](https://jp.e-iceblue.com/introduce/free-spire-excel-for-java.html)は、複数のExcelファイルのマージを簡単に実行するのに役立ちます。具体的な操作の詳細は次のとおりです。
## Spire.XLS.Jarのインストール
方法1:
mavenを使用している場合は、次のコードをプロジェクトのpom.xmlファイルに追加することで、JARファイルをアプリケーションにインポートできます。
“`ruby:qiita.rb
com.e-iceblue
e-iceblue
https://repo.e-icebl
オーバーロードとはなにか〜Java編〜
## オーバーロードとは
オーバーロードとは、クラス内に同じ名前のメソッドを複数定義するときに用いる考え方。
## オーバーロードする時のルールは?
引数の型や引数の数が異なる必要がある。
## 引数の数が異なる場合のオーバーロード(OK)
“`java
public class Practice {//引数の数がaの1つ
public void result(int a){
System.out.println(“int a=”+a);//int a=1
}//引数の数がa,bの2つ
public void result(int a, int b){
System.out.println(“int a=”+a+”,int b=”+b);//int a=2,int b=3
}public static void main(String[] args) {
Practice practice = new Practice();
practi