- 1. Gradle でプロジェクトファイル一式を ZIP アーカイブするタスクを定義する
- 2. クリーンアーキテクチャでブロック崩しゲームを設計・実装
- 3. AtCoder Beginner Contest 175 B問題「Making Triangle」解説(C++,Python3,Java)
- 4. AtCoder Beginner Contest 175 A問題「Rainy Season 」解説(C++,Python3,Java)
- 5. Gradle で JAR ファイル名にタイムスタンプを付加する
- 6. javaでAtCoder Beginner Contest 175を解く
- 7. JREにjstack.exeとtools.jarをコピればJREでもスレッドダンプは取れる
- 8. 2言語でアプリ開発してみた
- 9. javaでアルゴリズム入門 – 辞書式順序・組み合わせ雑食(part1)
- 10. 非同期でも分散トーレス! CloudTasksとCloudTraceを連携させる
- 11. LocalDateとTimestampを変換する方法
- 12. ParseException: Unparseable dateとなった時の対応方法
- 13. javaでブロック崩し作ってみた(1)
- 14. VSCode の Remote-Containers Extension v0.131.0 から、選べる Java の Configuration は1つになりました
- 15. ゼロからVSCode+WSL+Java+Gradle環境を構築する
- 16. Javaでsftp (JSchラッパ)
- 17. java 固定長文字列の中身の有無を調べる方法
- 18. 【JDBC ③】プレースホルダと引数を使ってmainメソッドから入力してみた。
- 19. 大量データを扱うとSQLRecoverableExceptionに苛まれる
- 20. ヒープソートの実装(javaで)
Gradle でプロジェクトファイル一式を ZIP アーカイブするタスクを定義する
## 概要
– Gradle でプロジェクトファイル一式を ZIP アーカイブするタスクを定義する
– 動作確認環境: Gradle 6.6 + Java 14 (AdoptOpenJDK 14.0.2)## build.gradle
“`groovy
plugins {
id ‘java’
}repositories {
mavenCentral()
}version = ‘1.2.3’
dependencies {
// 使うライブラリなどを指定
implementation ‘com.google.guava:guava:29.0-jre’
testImplementation ‘org.junit.jupiter:junit-jupiter-api:5.6.2’
testRuntimeOnly ‘org.junit.jupiter:junit-jupiter-engine:5.6.2’
}// プロジェクトファイル一式を ZIP アーカイブするタスクを定義
task myZip(type: Zip) {// ZIP ファイ
クリーンアーキテクチャでブロック崩しゲームを設計・実装
※ 一度記事を公開したのですが、設計を見直して再投稿します。
# はじめに
クリーンアーキテクチャの勉強をしていまして、いろいろな設計・実装に挑戦しています。
題材に良さそうな記事があり、クリーンアーキテクチャを意識して再設計・再実装に挑戦してみました。
元記事のコメント欄に設計案と実装案をコメントしたのですが、更にブラッシュアップしましたので、設計の過程なども整理して記事にします。
題材: [java簡素なブロック崩し作ってみた – Qiita]()![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29070/f1fab751-0f66-93a6-c402-684a0e66381c.png)
# 設計
## クリーンアーキテクチャ
クリーンアーキテクチャでは下図のようにレイヤーを分けます。
![clean.jpg](https://qiita-image-store.s3.amazonaws.com/0/293368/7ce1fb10-504e-16e0-8930-278b8
AtCoder Beginner Contest 175 B問題「Making Triangle」解説(C++,Python3,Java)
Ruteです。
AtCoder Beginner Contest 175 B問題「Making Triangle」の解説を行います。
>問題URL:
https://atcoder.jp/contests/abc175/tasks/abc175_b#問題概要
$N$本の棒のうち、三角形を作ることのできるような長さの異なる$3$本の棒を選ぶ方法は何通りあるかを求めよ。##制約
・$1 \leq N \leq 100$
・$1 \leq L_i \leq 10^9$
・入力は全て整数#解法
ans = 0と初期化しておきます。
以下の様な繰返し処理を実装すれば良いです。
・以下の繰返し処理を$(0,n)$の範囲で行う(カウンタ変数を$i$とする)
・以下の繰返し処理を$(i+1,n)$の範囲で行う(カウンタ変数を$j$とする)
・以下の繰返し処理を$(j+1,n)$の範囲で行う(カウンタ変数を$k$とする)
`L[i] == L[j]である` or `L[i] == L[k]である` or `L[j] == L[k]である`を満たしているかを判定す
AtCoder Beginner Contest 175 A問題「Rainy Season 」解説(C++,Python3,Java)
Ruteです。
AtCoder Beginner Contest 175 A問題「Rainy Season」の解説を行います。
>問題URL:
https://atcoder.jp/contests/abc175/tasks/abc175_a#問題概要
`”R”`が最大何文字連続しているかを出力しなさい。##制約
・ $|S| = 3$
・$S$の各文字は`’S’`または`’R’`である#解説
ls = []と定義します。
$S$を文字列として受け取ります。
now = 0とします。 これは後で利用します。
以下の様な繰返し処理を行います。
・もし`S[i](Sのi文字目)`が”R”だった場合
now に1を加算します。
・そうでない場合
lsにnowの値を挿入し、nowの値を0とします。
最後に、lsに繰返し処理が終わった後のnowの値を挿入します。
lsにある数のうち、最大の数が答えなのでこれを出力すれば良いです。もしくは、制約がかなり小さいので、全ての文字列について`’R’`が何文字あるかどうかをあらかじめ計算して、条件分岐でその都度出力してもよさそう
Gradle で JAR ファイル名にタイムスタンプを付加する
## 概要
– Gradle で JAR ファイルを作成する際、ファイル名にタイムスタンプを付加する
– 動作確認環境: Gradle 6.6 + Groovy 2.5.12## build.gradle
build.gradle ファイルにて project.version に日時文字列を付加する。
“`groovy
plugins {
id ‘java’
}project.version = ‘1.2.3’ + ‘_’ + getTimestamp()
def getTimestamp() {
// 年月日_時分秒_ミリ秒
return new Date().format(‘yyyyMMdd_HHmmss_SSS’)
}
“`jar タスクや build タスクで JAR ファイルを作成する。
“`
$ gradle build
“`build/libs に以下のようなファイル名で jar が生成されているのを確認できる。
“`
$ ls build/libs
myapp-1.2.3-20200815_220925_236.jar
javaでAtCoder Beginner Contest 175を解く
AtCoder Beginner Contest 175お疲れ様でした!
[公式ページ](https://atcoder.jp/contests/abc175)今回の自分の書いたコードは[こちら](https://github.com/ko-flavor/atcoder-java/tree/master/atcoder/src/abc/abc175)
結果はA-CまでACできました。DもEもなんか難しかった・・・以下簡単に解説します。
##[問題A](https://atcoder.jp/contests/abc175/tasks/abc175_a)
文字列が最大で何回連続しているかを答える問題。
`String.charAt()`
で指定文字取得して、愚直に条件文書きました。##[問題B](https://atcoder.jp/contests/abc175/tasks/abc175_b)
3辺の長さが与えられて、それが三角形になるかどうかを出力する問題。
注意点として、同じ長さの辺は使用してはいけないことです。計算量は気にせず3重ループでも十分間に合います。
JREにjstack.exeとtools.jarをコピればJREでもスレッドダンプは取れる
JREでアプリを動かしてるWindowsサーバで、スレッドダンプを取得する要件が発生した。
考えること、多い– JDKなら普通に取れるけど、JREだとjstackは存在しないので、JDKインストールしないといけない?
– JREで動いてるアプリを、別のパスでインストールしたJDKでスレッドダンプ取れんのか?
– アプリをJDKで動かさないといけないんじゃ?
– JREはそのままにしてJDKを追加でインストールする? Pathとか気を付けないと
– JREとJDKはver合わせないとだよね色々わからないので、ためしにどういうエラーメッセージでるのかなーと、適当なJDKダウンロードしてきて、適当なJavaアプリにjstack仕掛けてみる
と思ったが、適当なJavaアプリがないので、EclipseがJavaで動いてることを思い出して、試しにEclipse (eclipse.exe) にやってみる
#動いた
(スレッドダンプ取れた)
↑見出しの間違った使い方 (でかい文字にしたかったが方法がこれしかない残念)eclipse.exeがどのverのどういうJava実行環境なのか全
2言語でアプリ開発してみた
# アプリ、開発しました!
## アプリの概要
**メンバーとグループ数を入力するとグループ分けするアプリ**
機能の詳しい説明 : [はてなブログ](https://sato-na.hatenablog.com/entry/2020/08/15/205239)
## 開発環境 / コード
– エディタ : AndroidStudio
– java版 : https://github.com/sato-na/guruwake_java
– kotlin版 : https://github.com/sato-na/guruwake_kotlin
# なぜ、2言語で同じアプリを開発したのか
kotlinとjavaの共通点 = アンドロイドアプリが開発できる
だけど、書き方が少し違う…
なので、
同じアプリを開発して同じ機能を実装しようとしたときに、
どのように違うのかが気になって作りました!
ですが、2言語を照らし合わせながらコードを書いてみると…
**ただコードをあわせるだけじゃまだ振り返りにくいな…**
# ということで…
**今日から7日間毎日記
javaでアルゴリズム入門 – 辞書式順序・組み合わせ雑食(part1)
# 記事の概要
自分の勉強兼メモでまとめている記事シリーズです。第七弾。
今までの記事はこちら。|#|記事|
|:—————–:|:—————–|
|6|[javaでアルゴリズム入門 – しゃくとり法](https://qiita.com/aja_min/items/77f43ad114a0dbea88e3)|
|5|[javaでアルゴリズム入門 – 累積和](https://qiita.com/aja_min/items/3a334fb03749d8f42a25)|
|4|[javaでアルゴリズム入門 – 探索編(bit全探索)](https://qiita.com/aja_min/items/2a94758cf58fc1ea6f65)|
|3|[javaでアルゴリズム入門 – 探索編(幅優先探索)](https://qiita.com/aja_min/items/5f25e73086b2f3c720bb)|
|2|[javaでアルゴリズム入門 – 探索編(深さ優先探索)](https://qiita.com/aja_min/items
非同期でも分散トーレス! CloudTasksとCloudTraceを連携させる
## はじめに
Googleの分散トレースモニタリングのCloudTraceはOpenCensusをベースというかその元になっているので、同様に非同期処理であってもちゃんとトレーシング出来ます。
なので、CloudTasksを使って非同期処理を今回実装したのですが、マニュアルとかにやり方が書いてなくて少し嵌ったのでメモ。
## やり方
まずはCloudTasksをJavaで実行するコード。これは基本的にはチュートリアル通りです。
“`java
try ( var client = CloudTasksClient.create()) {
var queuePath = QueueName.of(projectId, locationId, queueId).toString();var traceparent = getTraceparent();
var taskBuilder = Task.newBuilder()
.setHttpRequest(HttpRequest.newBuilder()
LocalDateとTimestampを変換する方法
`LocalDate`と`Timestamp`を変換するには間に`LocalDateTime`を挟んで変換していく。
– 参考
– [Timestamp (Java Platform SE 8)](https://docs.oracle.com/javase/jp/8/docs/api/java/sql/Timestamp.html)
– [LocalDate (Java Platform SE 8)](https://docs.oracle.com/javase/jp/8/docs/api/java/time/LocalDate.html)# LocalDateをTimestampへ変換する方法
“`java
/**
* TimeStampで現在日時を取得する.
* @return 現在日時.
*/
public Timestamp getTimestamp() {
// LocalDateで現在日時.
var localDate = LocalDate.now();
// 日付の開始時のLocalDateTimeを作成.
ParseException: Unparseable dateとなった時の対応方法
# 事象 : f:convertDateTimeを使ったらエラーになった
– 環境
– CentOS Linux release 7.8.2003 (Core)
– Eclipse IDE for Enterprise Java Developers.Version: 2020-03 (4.15.0)
– openjdk version “11.0.7” 2020-04-14 LTS
– JSF 2.3.9“`bash
java.text.ParseException: Unparseable date: “sampleBean.timestamp”
at java.base/java.text.DateFormat.parse(DateFormat.java:395)
at javax.faces.convert.DateTimeConverter$FormatWrapper.parse(DateTimeConverter.java:489)
at javax.faces.convert.DateTimeConver
javaでブロック崩し作ってみた(1)
#やること
前回の記事は以下にありますhttps://qiita.com/strict39275/items/41da2ad3bb8fd60228e0
じっくり考えても、自分の理想には届かなかったコードですが、これから改善をしていきたいと思います。今回の記事はそれぞれのクラス説明をしていきたいと思っております。いきなり全部説明すると途方にない時間になりそうなので、次回は別のクラスを一つずつ丁寧に説明した方が良さそう。やったるぞ。
#クラス構造の図
shiracamus様が作りましたクラス構造図です。breakoutクラスをメインにして、その中にクラスのインスタンス変数を作った感じですかね。
![java1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680378/280702e7-5a7f-bda3-c0d2-1100757f589d.png)
#プログラムコード一つずつ、反省も含めて説明をしていきたいと思っております
“`java
import javax.swing.*;
imp
VSCode の Remote-Containers Extension v0.131.0 から、選べる Java の Configuration は1つになりました
Java を Remote-Containers 拡張でやろうと思って導入したら、いきなり詰まったのでメモ。
# 詰まった点
`VSCode Remote Containers Java` とかのキーワードでググると、いくつか記事が出てくる。
参照すると、「`Remote-Containers: Add Development Container Configuration Files` から `Java (8|11|14)` を選んで〜〜」というように説明されているが、実際に試すとバージョン別のConfigurationが見つからない。
下図のように、`Java` だけがあり、あとは Azure Function 向けの Configuration だ。![スクリーンショット 2020-08-15 0.39.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66988/5e7f4c71-52ad-7c7f-176f-fa38c2b7f0d4.png)
これを選ぶと、JDK 11 の `.d
ゼロからVSCode+WSL+Java+Gradle環境を構築する
# WindowsにJDKをインストールする
– JDKがインストール済みかコマンドラインから確認する“`
C:\Users\ユーザ名> javac -version
javac 11.0.7
“`– JDKがインストールされていない場合、インストーラーでインストールする
https://adoptopenjdk.net/
「OpenJDK 11 (LTS)」「HotSpot」
※インストール時に環境変数「JAVA_HOME」を設定するようにチェックを入れる– 環境変数「JAVA_HOME」が設定されているか確認する
“`
C:\Users\ユーザ名>echo %JAVA_HOME%
C:\Program Files\AdoptOpenJDK\jdk-11.0.7.10-hotspot
“`
空欄が出力された場合は、環境変数「JAVA_HOME」を設定する# WindowsにVSCodeインストール
– インストーラー
https://azure.microsoft.com/ja-jp/products/visual-studio-code/# VSCo
Javaでsftp (JSchラッパ)
“`SftpService.java
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.ChannelSftp.LsEntry;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;import lombok.extern.slf4j.Slf4j;
@Slf4j
public class SftpService {
private static final String SFTP_ERRMSG_NO_SUCH_FILE = “No such file”; // 環境依存かも?
private Session session = null;
java 固定長文字列の中身の有無を調べる方法
“`java
String sti = ” “;
//スペースをtrimする
//その結果、ブランクであるかどうか
if(sti.trim().isEmpty()) {
System.out.println(“blank”);
}else {
System.out.println(“notBlank”);
}
“`
【JDBC ③】プレースホルダと引数を使ってmainメソッドから入力してみた。
[前回の記事](https://qiita.com/tsweblabo/items/a3e37bc439bacfe6c5c5)では、SQLのINSERT文・UPDATE文・DELETE文・SELECT文ごとにメソッドで分けて、mainメソッドでSQL文を実行することに成功しました。
追加や変更・削除したいデータをSQL文の中で固定していたため実用的ではありませんでした。そこで、mainメソッドからSQL文の各メソッドを呼び出す際に追加したいデータ等も渡すことができれば、より有用性の高いソースコードになると考えたので挑戦してみました。
## 環境
今回の環境については以下のとおりです。– Ubuntu 18.04 LTS
– OpenJDK 11.0.8
– SQLite3 3.20.0—
## 前回の振り返り
まずは前回のコードのINSERT文のメソッドを見てみます“`java:前回のINSERT文のメソッド
/**
* INSERT文
*/
public static void insertData() {
try {
// cr
大量データを扱うとSQLRecoverableExceptionに苛まれる
数万単位のデータをデータベースから参照、更新を行うと、まれに `SQLRecoverableException` に遭遇します。
こいつほんまなんやねん…って感じて、再現の仕方もさっぱりだったのですが、つい先日再現もできたので調査内容をシェアしてみます。# 実行環境
|項目|バージョン|
|:-:|:-:|
|Java| amazon Corretto-11.0.3.7.1 |
|Spring Batch| 4.2.2.RELEASE |
|データベース| Oracle Database(ドライバはojdbc8) |
|mybatis| 3.3.0 |
|mybatis-spring| 1.2.3 |アプリは、定期的にデータベースを参照・更新するバッチ処理です。
サーバ上でマルチスレッドで動作し、1スレッド上で数千件ずつ処理が走ってます。# 状況
Javaから、ORMに関わらず以下の例外に遭遇します。“`
Caused by: java.sql.SQLRecoverableException: クローズされた接続です。
at
ヒープソートの実装(javaで)
##### ディレクトリ構造
> heap/
> ├ Heap.java
> └ Main.java##### 実行
“`
$ javac Heap.java
$ javac Main.java
$ java Main
“`##### ソースコード
“`java:Heap.java
import java.util.*;
/**
* ヒープソート用のクラス
*/
public class Heap {
int[] origArray;
int[] origHeap;
int[] forSortHeap;
int[] sortedHeap;
int arrayLength;
/**
* ヒープソート用の配列を取得する.
*/
public void getForSortHeap(){
for (int i: forSortHeap){
System.out.print(i+”, “);
}
System.out