- 1. 業務用コードの書き方(ver1.0)
- 2. C++で作成したDLLとC#/Javaとで文字列を授受する
- 3. Scanner.nextLine()で一行目の文字列を取得した後に、配列にして、目的の文字を要素で取得する方法
- 4. SpringBoot+JUnit+DBUnitで超簡潔なテスト
- 5. JavaのTreeMap
- 6. 標準入力のScannerを1度closeしたら、2度と標準入力できない理由を調べた
- 7. VSCode の Java 開発環境にフォーマッターを設定する
- 8. ある日突然名前解決ができなくなった時に見ると、助かるかもしれない
- 9. Jasperで帳票PDF出力備忘メモ
- 10. JavaでFizzBuzzを作ってみた
- 11. Spring Cloud Contract メモ – Getting Startedでの気付き
- 12. Javaでグラフを描画する(SpringBoot)
- 13. Spring 案件ソルーション Validation 手順書フォルダ
- 14. GraphQL+SpringDataJDBCを試してみた
- 15. 【Java】CollectionUtilsを使ってコレクション内のnullチェックをする方法
- 16. GoogleMapsPlatformを使用したルート案内
- 17. EclipseでGitを使う方法
- 18. Java アプリで CPUプロファイリング
- 19. 【Java】AtCoderのABC-202に参加しました(レート:272→277)。
- 20. [Java]日付に関する型の変換まとめ
業務用コードの書き方(ver1.0)
# はじめに
初心者から中級者になるためには可読性の高いコードを書く、一般的に業務で製品としてつくるコードが書けることが初心者を脱出する第一歩になります。**製品を提供する**、**納品する**、**保守性の良い**、**誰がみてもわかりやすい**、**バグが出にくい**コードを**高速**で書けますか??本章では一般的にできて当たり前なコードを書くお約束と、わかりやすいコードってなんだろう?をお伝えしていきます。# コメントを書くということ
保守性、可読性といった観点でコメントは重要です。自分のためにではなく、次にこのソースコードを触るひとのために書きます。たまにラップ調で*XXを呼び出す*、*YYを返却する*といったコメントを見かけますが、正直そんなの見ればわかりますよね笑 ぱっと見で次の人のために、なにをするためにあるかを書くくらいでもいいのではないでしょうか。コメントは多ければいいというものではありません。
クラスやメソッドにはブロックコメントを書きますよね。なぜなら後からPHPDOCやJAVADOCといった自動で出力することができるし、IDEによってはマウスオーバーでそ
C++で作成したDLLとC#/Javaとで文字列を授受する
# 目的
諸事情あってC++で作成したライブラリ(DLL)をC#, Javaでも使用したい。
またその処理の都合上、文字列を引数で授受したい。# 方法
ソースコード全体は[GitHub](https://github.com/kurukuruz/demo-common-dll)に配置。
## 前提
– C++, C# のビルドにはVisual Studio 2019を使用
– Java は Open JDK 11 を使用
– 各ソースコードはShift-JISで記述## 呼び出される関数
### 定義
今回呼び出される関数(C++で作成)の定義を示す。
“`cpp:my_common_lib.h
#define MY_COMMON_FUNC_DECL_KWD __declspec(dllexport)
extern “C” MY_COMMON_FUNC_DECL_KWD bool __stdcall my_func_a(
const char* in_str,
char* out_str
);
“`仕様上のポイントは以下の通り。
– 入力
Scanner.nextLine()で一行目の文字列を取得した後に、配列にして、目的の文字を要素で取得する方法
“`
// 入力例:System.in = {A B C}
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
String[] params = line.split(” “); // 配列にしてしまうSystem.out.println(params[0]); // A
System.out.println(params[1]); // B// 蛇足
System.out.println(params); // オブジェクト名が表示される(例:[Ljava.lang.String;@5f184fc6)
“`
SpringBoot+JUnit+DBUnitで超簡潔なテスト
以前に作成した[SpringBoot + MyBatis + Thymeleaf + MySQL で超簡潔なCRUD処理](https://qiita.com/hhujk5/items/a35fab16614164c99718)でテストコードを書いてみたので自分用のアウトプットとして投稿させていただきます。
誤りがございましたらご指摘いただけますと幸いですm(_ _)m##環境
macOS Big Sur
Java 11
Spring Boot 2.4.5
SpringToolSuite4
Maven
MySQL
MyBatis##テスト対象
①GETリクエストで正しくページが表示される(HTTPステータスコード200が返される)こと。
②GETリクエスト時に、Modelのattributeに文字列”hello”が渡されていること。
③GETリクエスト時に、select処理によりModelのattributeにデータベースのUserListが格納されていること。
④ユーザーのIDを引数とした1件のselect処理が成功していること(DBUnit利用)。
⑤データベース全体のse
JavaのTreeMap
Javaの連想配列の使い方の記事です。データベースのデータの受け取り処理、ファイルを読み込む処理の時に良く使います。今回は標準入力、標準出力でのサンプルプログラムです。
“`Java
package sakamichi;import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;public class Sample1 {
public static void main(String[] args) {
Mapdata = new TreeMap ();
Scanner sc = new Scanner(System.in);
System.out.println(“データの個数を入力してください”);
String line = sc.next();
int N = Integer.parseInt(line);
for(int i=0;i
標準入力のScannerを1度closeしたら、2度と標準入力できない理由を調べた
#概要
Javaで標準入力ストリームのScannerを1度close()すると、再度Scannerクラスのインスタンスを生成しても標準入力ができなくなります。
“`Java:Sample.java
Scanner sc1 = new Scanner(System.in);
sc1.close();
Scanner sc2 = new Scanner(System.in);
String input = sc2.nextLine(); // NoSuchElementException
“`理由は、「標準入力ストリームはプログラム開始時に開き、sc生成時に開くわけではない。一方で、sc.close()すると標準入力ストリームが閉じてしまうため」です。
「当たり前じゃん」と思ったらそれでOK。
以下、もう少し詳しく説明します。#私が誤解していた点
私は上述のエラーについて、「Scannerクラスのインスタンスを新しく生成しているんだから、読み込めてもいいのでは?」と思っていました。
これは、Scannerクラスとストリームの関係があいまいだったゆえの誤解です。実際は
VSCode の Java 開発環境にフォーマッターを設定する
# はじめに
本記事では [Google Java Style](https://google.github.io/styleguide/javaguide.html) をサンプルに、フォーマッターを Visual Studio Code に設定する方法を紹介していきます。
# 前提
– 拡張機能 [Japanese Language Pack for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-ja) がインストールされていること。
– 拡張機能 [Java Extension Pack](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack) がインストールされていること。# 設定方法
## 1. フォーマッターファイルを用意
Google Java Style のフォーマッターファイルは、https://ra
ある日突然名前解決ができなくなった時に見ると、助かるかもしれない
#はじめに
こんにちは、黒糖と申します。ブログ(https://kokutoh.com/?p=187)
に書いた内容と同じですが、同じ轍を踏まないようにQiitaにも書いて、供養したいと思います。日々、システムエンジニアとして、とあるECサイトの保守・運用業務を担っております。
※環境としては、一般的な構成(FW、SSLアクセラレータ、LB、Web(AP)サーバ複数台、DBサーバ)で
アプリケーションのミドルウェアはWebshere Application Server 8系
Web(API)サーバのOSはRedhat7、Java1.7です。先日、他社様とのWEB API 部分で、通信に失敗し、
試行錯誤した末に、復帰することができましたので、備忘の意味も込めて、残しておきます。#原因?
結論から申しましょう。
原因としては、APIを受ける他社様サーバはAWS上に構築されており、IPアドレスが可変であったことです。#でも、ちょっと待って・・・
ただ、そのAPIにリクエストを送信するWEB サーバから参照しているDNSサーバは、
他社様指定のもので、名前解決の結果
Jasperで帳票PDF出力備忘メモ
# 1. はじめに
JavaプロジェクトでJasperによる帳票出力方法についてまとめたメモ。# 2. Jasper Studioインストールと設定
帳票テンプレート(jrxml)を作成するためにjrxml編集ツールをインストールする必要がある。
編集ツールの利用方法は下記の2通り。* Jasper Studioを利用する([リンク](https://community.jaspersoft.com/wiki/jaspersoft-studionoinsutorutosetutoatupu))
* IDEにJasperプラグインをインストールする今回はEclipseのJasperプラグインを利用することにする。
Eclipseへのプラグインインストール方法は[Jaspersoftのコミュニテイーページ](https://community.jaspersoft.com/wiki/jaspersoft-studiopuraguinnoinsutoru)に記載されているため、ここでのインストール手順は省略する。
※2021/5時点の最新バージョンは**6.17.0**である
JavaでFizzBuzzを作ってみた
こんにちは。Javaを学習し始めたので早速FizzBuzzを作ってみました。
ちなみに私はRubyを学習していました。“`java
public class FizzBuzz {
public static void main(String[] args) {
for(int i = 1; i < 50;i++) { if((i % 3 == 0)&&(i % 5 == 0)) { System.out.println("FizzBuzz"); }else if(i % 3 == 0) { System.out.println("Buzz"); }else if(i % 5 == 0) { System.out.println("Fizz"); }else { System.out.println(i); } } } } ``` 結果 ![515d8694a15a377205a3c2455cdc4fd9.png](https://qiita-image-store.s3.ap-northeast-1.am
Spring Cloud Contract メモ – Getting Startedでの気付き
## 1. やったこと
– Spring Cloud Contractのサンプルを実装して動かした
– 下記のガイドを参考に実装した
– https://spring.pleiades.io/guides/gs/contract-rest/
– Artifactをローカルリポジトリに配置して、Consumer側からアクセスできることを確認した
– Githubリポジトリに生成されたStubを配置して、Consumer側からアクセスできることを確認した
– 実装したサンプルは下記リポジトリ
– https://github.com/ShigeoTejima/spring-cloud-contract-demo## 2. バージョンなど
– Java 11
– AdoptOpenJDK-11.0.11+9
– Spring Boot 2.4.6
– Spring Cloud Contract 2.2.7.RELEASE
– Spring Cloud Contract 3.0.2## 3. 気づき
### 3.1. Githubリポジトリにssh接続の場合にエラーに
Javaでグラフを描画する(SpringBoot)
日次で資産運用のグラフを管理していますが、エクセルだとブログに簡単に貼れないので自作しようと思います。WEBサービスでよくある、インターネット上にデータを保管するようなものではなく、入力欄にエクセルからデータを貼り付けて、グラフ画像を作るだけのプログラムを考えています。(データを管理するとコストがかかるので・・・)
### 現時点の資産運用グラフ
上記のグラフと推移が一致するグラフ画像をプログラムで作ります。今日はまず分割線とチャートです。
**実際にプログラムで出力したチャート画像**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1535669/8ad1daa8-fce7-f4b8-f0d0-0e30a2d896eb.png)
**プログラム**
https://github.com/jamcookjapan/grapy/commit/567f8b2f444b1ef4a89e622babf3a4
Spring 案件ソルーション Validation 手順書フォルダ
#背景
Springの機能を確認したかった。
特にValidationを一旦なんとかしておきたいなと思っています。
#やって見て・・・
9 Spring Security → 一旦パス
10 Spring Test→ テスト強化の時にやりたいと思います。
#リソース
Spring Boot 2 入門: 基礎から実演まで 原田 けいと https://www.amazon.co.jp/dp/B0893LQ5KY/ref=cm_sw_r_tw_dp_BV9D710FBKGWDJJJ3NF9#TakeAway
## ちゃんと想定通りのJavaバージョンになっているか。
Javaの環境設定
コンパイラー
## lombokの設定
1.サイトからlombok.jarをダウンロードする。2./Applications/SpringToolSuite4.app/Contents/Eclipse/へlombok.jarを配置する。
3./Applications/SpringToolSuite4.app/Contents/Eclipse/SpringToolSuite4.iniへ下
GraphQL+SpringDataJDBCを試してみた
# GraphQLを試してみました
(注意)本記事は2020年09月時点の情報です。## 0. 参考
+ 初めてのGraphQL ―Webサービスを作って学ぶ新世代API– Spring Boot + GraphQLでAPIを作成してみよう!
https://techblog.yahoo.co.jp/advent-calendar-2018/create-springbook-graphql-api/
## 1. GraphQLとは?
+ 数学のグラフ理論に基づく(グラフ理論:一筆書き問題などの学問)
+ Web APIの
【Java】CollectionUtilsを使ってコレクション内のnullチェックをする方法
#はじめに
今週は外部ライブラリである`Apache Commons Collections`を使ってコレクション内のnull・size0チェックをする方法をアウトプットします。#これまでの書き方
これまでは`nullPointerException`を回避するために、以下のように書いてきました。“`java
Listlist = new ArrayList ();
//listはnullが来る可能性があるとします。if (list == null || list.size() == 0) {
return true;
}
“`#CollectionUtilsを使った書き方
`CollectionUtils.isEmpty()`メソッドを使用することで、null・size0チェックをひとまとめにすることが出来ます。
ただし、使用するためには`org.apache.commons.collections4.*`をimportする必要があります。
今後、コレクション内のnull・size0チェックはこの方法を使ってみようと思います。
GoogleMapsPlatformを使用したルート案内
# はじめに
GoogleMapsPlatformを使用してルート案内方法を覚書程度に記載。説明するアプリの概要はMap上に現在地を表示し、クリックした場所にマーカーを設置。
設置したマーカーをクリックすると目的地として設定され、現在地から目的地までのルートが描写される。# 目次
1. マップ画面を生成
2. 現在地を取得
3. 目的地を取得
4. ルート取得API(Directions API)へアクセスするURLを用意
5. 現在地から目的地までのルートを取得
6. 取得したデータをもとにルートを描写事前準備として、GoogleMapsPlatformのAPI使用を使用できるようにする必要がある。
詳細手順は下記参照。
https://developers.google.com/maps/documentation/android-sdk/overview?hl=ja## 内容
### マップ画面を生成
activity画面にid=mapのフラグメントを用意し、onCreate時にsetContentViewする。“`activity_map.xml
EclipseでGitを使う方法
## まえがき
javaについて勉強しているので、アウトプットとして記述していきます。
今回は、Eclipseでgitを使う方法を記載していきます。## gitにニューリポジトリを作る
[github](https://github.co.jp/)ログインし、ニューリポジトリを作成してください。
右上の+ボタンをクリックすると作成画面に移動します。## 作成画面
![スクリーンショット 2021-05-22 17.32.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1053584/6cd993d0-faaf-dce5-2f99-3e56fbb0f986.png)
Repository nameにプロジェクト名を入れます。
好きなプロジェクト名でいいです。PublicかPrivateのどちらかにチェックをします。
・Publicは作った作品を公開します。
・Privateは作品を非公開にします。create repositoryをクリックしたら、作成されます。
## Ec
Java アプリで CPUプロファイリング
## 環境
– Vagrant 2.2.16
– Ubuntu 18.04
– OpenJDK 11
– https://github.com/jvm-profiling-tools/perf-map-agent
– https://github.com/brendangregg/FlameGraph## Linux 環境準備
Vagrant を使って環境を作る。bento/ubuntu-18.04 を使うことにする。Linux perf tools が必要。
Vagrantfile
“`bash
# -*- mode: ruby -*-
# vi: set ft=ruby :Vagrant.configure(“2”) do |config|
config.vm.box = “bento/ubuntu-18.04”
config.vm.synced_folder “./data”, “/vagrant_data”,create:trueconfig.vm.provider “virtualbox” do |vb|
vb.memory = “1
【Java】AtCoderのABC-202に参加しました(レート:272→277)。
こんばんは。
2021/5/22に、AtCoderのABC-202に参加しました。
レートは以下の通りとなっています。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/9d4a93cd-a5f9-a356-040e-21978053067e.png)
C問題まで突破しました。
ただ、B問題が一度TLE、C問題は試行錯誤してしまったのと操作ミスで3回エラーになってしまい減点もあった模様です。
レートは272→277にアップ。しょぼいですね。最高レート(278)を次回は更新したい。###A問題
さいころを3つ振る。
出た目の裏側の数を合計する。おお、これは簡単だと思い、すぐ解けました。
“`Java
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int
[Java]日付に関する型の変換まとめ
# はじめに
今回はJavaの日付に関する型の変換についてまとめようと思います。# Date型とCalendar型
Date型は、日時を扱う際に使用する日付型のクラスです。日時に関するざまざまな処理が可能となります。
Calendar型は、Data型同様日時を扱う際に使用する日付型のクラスです。しかし、Date型よりも加算・減算、日時を比較するなどの処理に特化したクラスになります。# String型とDate型
## String型→Date型
1. はじめにSimpleDateFormatクラスで日付のフォーマットを指定する。
2. parse(String型)メソッドにより変換
3. 例外処理する必要あり(ParseException)“`Java
public class FormatChange {
public static void main(String[] args) throws ParseException{
// 日付の定義
String strDate = “2021/5/21”;
// SimpleDateFormatで日付フォ