- 1. 美大生のためのプログラミング入門:四角形に関する様々な関数(その 1)
- 2. Javaの基本2
- 3. Android開発アプリ_準備編
- 4. 【Spring】コントローラの例外出力テスト
- 5. 【VBA】Hibernate ORMで生成したEntityクラスのプリミティブ型を対応する参照型に変換するツールを作ってみた
- 6. java(カプセル化)
- 7. Facadeパターンって何の役に立つの?
- 8. 【Spring Batch】Spring Batchのchunk stepとtasklet stepの実現検証
- 9. 【Java】標準入力を使いこなせないとpaizaのスキルチェックはDで詰む
- 10. Androidアプリ個人開発キックオフ
- 11. Spring Boot の Docker Image を小さくする方法
- 12. JMHでGraalVMの速度測定・比較してみた
- 13. レイヤードアーキテクチャにおける依存管理
- 14. 【Java】 独自アノテーションの作成
- 15. Visual Studio CodeでJavaプログラム開発環境構築
- 16. Visual Studio CodeでJava + SpringでWebAPP開発環境構築
- 17. 【備忘録】NPOIでExcelのシートにパスワード保護を掛ける
- 18. Java Silver 勉強1日目
- 19. 【Grails】設定領域とapplication.ymlの設定項目について
- 20. 同一と同値について
美大生のためのプログラミング入門:四角形に関する様々な関数(その 1)
※ Qiita では、本文部分のみの印刷に苦労します。そのため、同じ内容を以下のページにも掲載しています。プリンツアウトしたり PDF 化したい人は、こちらのページを利用して下しさい:
http://gurakura.sakura.ne.jp/hellomondrian/rect2/
一覧はこちら:
http://gurakura.sakura.ne.jp/series/美大生のためのプログラミング入門/Qiita 版の総合目次:
https://qiita.com/iigura/items/37180d127da93d0b8abb# 自由な四角形の描き方
関数 rect で描画される四角形は、水平・垂直の線分にて構成される長方形でした。
しかし、長方形だけが四角形というわけでもなく、四角形という定義にはもっと自由な形の四角形も含まれます。quad 関数は、このような自由な四角形を描くための関数です。
引数は、quad(x1,y1, x2,y2, x3,y3, x4,y4) であり、それぞれx1,y1: 第 1 頂点の x 座標および y 座標
x2,y2:
Javaの基本2
## はじめに
前回コンパイラとインタープリタの違いを…と書いたが変数がの書き方が私の知っているものとだいぶ違ったので(やりたいことはわかる)今回は変数について書くことにする。
## 変数について
Javaで変数を定義するためには、
①変数にいれる値のデータ型を指定する、
②変数の名前を決める、
という2つが必要“`kane.java
//データ型 変数名
int number;//データ型 変数名
String name;“`
データ型と変数名の間は半角スペース ※.(コロン)ではないデータ型はまず
文字列はString型 **S**は大文字
整数はint型 **i**は小文字## 代入は
“`kane.java
//まずデータ型と変数名は定義する
String name;
//そして変数名に入れたい値は代入する
name = “banana”;
“`
## 出力は
“`kane.java
System.out.println();
//の()の部分に先ほどの変数名を書き込む
System.out.println(name);
Android開発アプリ_準備編
# テーマ決め
下記のアイデアを出して、”オンライン飲み会の終了時間管理”アプリを選定。– オンラインジェスチャーゲーム ×
”VS嵐”の番組で人気のジェスチェーゲームをオンラインでできたら楽しそうと思い発案。
既存のアプリは1台のスマホを使って行うものだったので、手元のスマホにそれぞれがアプリをダウンロードして行うやり方で考えたが、iPhoneの人がいた場合そちらのアプリ開発も必要なため断念
– 複数人でゴルフに行くときの最適なゴルフ場決定 △
趣味のゴルフのいつも迷う問題から発案。複数人でゴルフに行くときに、みんなの移動距離ができるだけ短くなる最適なゴルフ場を決定できるアプリがあればありがたい。しかし、最近ゴルフに行っていないので意欲がわかず断念。
– オンライン飲み会の終了時間管理 〇
コロナの影響でオンライン飲み会を行うことが増え、みんながしみじみ感じている問題。
既存のアプリでは、この機能をもったオンライン会議はあったが、既存のオンライン会議に+αするものはなさそうだったでそのアプローチで作成したい。# 機能洗い出し
最低限下記の機能を
【Spring】コントローラの例外出力テスト
リクエストを受け付けるコントローラのテストは基本的に`MockMvc`を使って書くことが多い。
例外を出力をさせる場合、その例外出力のテストは`org.assertj.core.api.Assertions.assertThatThrownBy`で実装できる。## 例
### プロダクトコード
“`java
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class TestController {@GetMapping(value = “exception”)
public void throwException() {
throw new IllegalStateException(“例外です”);
}
}
“`### テストコード
“`javaimport org.junit.T
【VBA】Hibernate ORMで生成したEntityクラスのプリミティブ型を対応する参照型に変換するツールを作ってみた
テーブル定義やVIEW定義をもとに対応するEntityクラスを瞬時に作成できるHibernate ORM。
とても便利なのですが、デフォルトでは数値型はプリミティブ型で作成されてしまいます。
DBの値にnullが入りうる場合、これだとNG。
対応する参照型(プリミティブ型と違ってnullも許容)に変換できる設定がないか探してみるも出てこない、、
これなら作ってしまったほうが速い!というわけで、上を実現するツールを作ってみました。## 環境
– OS:Windows10
– VBA:7.1
– IDE:Eclipse2020-03
– Java:8
– MySQL:5.7
– Hibernate ORM:5.4
– Spring Boot:2.3.1## Entityクラスの作成
Hibernate ORM(EclipseのHibernate Tools使用)でのEntityクラスの作成方法は– [Hibernate Toolsを使ってJPAのEntityクラスを生成する | Qiita](https://qiita.com/rubytomato@github/items/c
java(カプセル化)
#カプセル化
・フィールドに不正な値が入らないように防ぐ
・「矛盾しないクラス」を作る
・「現実世界を忠実に真似る」オブジェクト指向の本質と直結している#フィールド、メソッドに対してアクセス制限を行う
**アクセス修飾子(しゅうしょくし)**
| 名称 | 指定方法 | アクセスを許可する範囲 |
|:—————–|——————:|:——————:|
| private | private| 自分自身のクラスのみ |
| package private |(何も書かない)| 自分と同じパッケージに属するクラス |
| protected |protected|自分と同じパッケージに属するか、自分を継承した子のクラス |
| public | public |
Facadeパターンって何の役に立つの?
# 目的
Facadeパターンが何の役に立つのかを簡単に説明する(コード有り)# Facadeパターンはどんな役に立つか?
簡単にいうと、**複数の処理のまとめ役**。
なので、依頼1つでいろんな仕事をやってくれる点で役に立つ。# Facadeパターンの要件
– Facadeクラスはあくまでサブシステム内部に仕事を投げるだけで複雑な実装は持たない。
– Facadeクラスをサブシステム自体が利用する事はない。
– Facadeパターンはサブシステムの直接使用を妨げない。# クラス図
## Facadeパターンのクラス図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190809/8dc7125b-3a8c-03c1-71a2-d4be2533b4cd.png)
> 引用元:[Wiki – Facadeパターン](https://ja.wikipedia.org/wiki/Facade_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3)## 今回説明
【Spring Batch】Spring Batchのchunk stepとtasklet stepの実現検証
#はじめに
Spring Batchの二つステップの種類に実現方法を検証します。今回はJava のアノテーションで実現します。
—
#ステップの種類
ステップには主に2つの種類があります。
「taskletのみのステップ」と「チャンクによるステップ」です。
以下ではそれぞれについて簡単に見ていきます。1. taskletのみのステップ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480807/751e61bb-06b7-c42f-1d1c-9ac62337af07.png)
2. チャンクによるステップ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480807/8c3c9e43-20a1-c83c-f92c-d71c6c96822f.png)
—
#環境
Windows 10
JDK 1.8.0_251
STS 4.6.2—
#
【Java】標準入力を使いこなせないとpaizaのスキルチェックはDで詰む
##概要
Progateを軽くやったくらいでJavaの経験がないため、研修でpaizaのスキルチェック問題を解いているのですが、初日に予想外の所で詰まったのでメモします。スキルチェックを始めると早々に
>文字Nが入力されるのでNを出力せよ的な内容を指示されます。
System.out.print~で出力して終わりじゃん!と思うのですが
そのまま書くのは間違いとなります。色々フォローされるProgateと違い
スキルチェックでは入力される値もこちらで読んであげる必要があります。
ここで「入力値を読み込む」方法を知らないと、paizaはDランクすら取れません。
##方法
簡単なのでyoutubeに投稿されている[Java標準入力解説](https://www.youtube.com/watch?v=nxd4CLklcfY)を見るか
[paizaラーニング](https://www.youtube.com/watch?v=nxd4CLklcfY)を見る事で理解できますが、せっかくなので使い方を書いてみます。冒頭のような問題の場合、文字なので
“`Java
//変数を定義
Androidアプリ個人開発キックオフ
# はじめに
学んだこと整理するためにもブログでまとめていこうと思います。
他の人の役に立てれば幸いです。間違いなどあれば指摘して頂ければと思います。
また、アドバイスなどもあればコメントいただけると助かります。# 背景
残業禁止となり、副業を探していたが下記の理由から、個人開発で1個実績を作り副業につなげたいと思う– C,C++(現保有スキル)で勤務日数が少ない案件がない
– アプリ開発の案件が多い
– 以前からAndroidアプリ開発に興味があった
– C以外の言語を学ぶいい機会である# 目標
自作でアプリ開発を行い、GooglePlayストアで公開する。– RA~ITを一通り自分で実施できること
– アプリ開発に必要なjavaの知識を理解する# 開発に使用する言語選定
下記候補から、将来的な汎用性を考慮してJavaで行うことに決定。(Koltinと迷いましたが。)– C/C++
– 現業務のスキルアップにも使えるが、AndroidStudio(アプリ開発の環境)を使用するとjavaなどに比べて工数がかかりそう。
– Java
– Andr
Spring Boot の Docker Image を小さくする方法
# 要約
– カスタム JRE とマルチステージビルドを利用すれば Spring Boot の Docker Image を削減することができます。
– 以下が結果の要約になります。公式の AdoptOpenJDK の Docker Image よりも 1/5 以下の容量になっていることがわかります。| AdoptOpenJDK | AdoptOpenJDK-Alpine | Custom Runtime |
| ——- | ————– | ————– |
| 436 MB | 358 MB | **85.5 MB** |# サンプルコード
– 今回説明するサンプルコードは以下に格納しています。こちらのサンプルコードをもとに以降の説明を行っていきます。
– [java-container-build-sample (Github)](https://github.com/Takaichi00/java-container-build-sample)# 手順① jdeps で必要なモジュー
JMHでGraalVMの速度測定・比較してみた
## 環境
– macOS Mojava 10.14.4
– Scala 2.13.1
– sbt 1.3.8
– GraalVM 20.1## この前の測定の大雑把な問題点
[前回の記事](https://qiita.com/kinshotomoya/items/39a821dd6a6a52202c0a#%E5%AE%9F%E9%9A%9B%E3%81%AB%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B)で、GraalVmと標準JVMの速度比較を行った。
しかし、コンパイル時間・ウォームアップ時間・純粋な実行時間をごちゃ混ぜにして測定していたので、Graal自体の純粋な速度比較ができていなかった。
今回やりたいことは、GraalVMのGraalと、標準JVMのC2コンパイラでの速度比較。
なので、コンパイル(クラスファイル生成)・ウォームアップ・純粋な実行時間をそれぞれ区別して、純粋な実行時間の比較を行う。
## 具体的な問題点
### 1.コンパイル(クラスファイル生成)時間も含めていた。
sbtで実行する場合、実行する
レイヤードアーキテクチャにおける依存管理
# このページはなにか?
新規プロジェクトにて導入した、ビジネスロジックの管理方法を整理したページです。
「SpringにあるようなWeb API用の巨大DIコンテナまではいらないな」って状況で、関連するクラスをどう構造化、利用するか?がフォーカスポイントです。# 前提
本プロジェクトは、エントリーポイントになる単一メソッドに引数を渡すと結果が返ってくる、シンプルな共通ライブラリでした。
エントリーポイントから、複数のエンティティに紐づくビジネスロジックが定義される(いわゆるMVCに近いアーキテクチャ)。ビジネスロジックに変更が走る場合、エントリーポイントではなくビジネスロジックを抱えるサービスが増えたり変更したりする想定で今回は検討しました。
# 呼び元が直接サービスのインスタンスを生成、実行するのはなんだか気持ち悪い
エントリーポイントから参照するサービスレイヤーのクラスはせいぜい4とか5なので、直接インスタンスを生成してもいいんだけど…
1. クラスからインスタンスを生成する必要の有無。状態を持たないのに生成するんだっけ?究極staticコンテキストに押し込めてもよ
【Java】 独自アノテーションの作成
# 経緯
当初のmodelに、多くのアノテーションを使って実装していたら、「見にくいから独自でアノテーション作って使えば見やすくなるよ」とレビューいただいたのでやってみた。## before
`contollerクラス`“`java
@Slf4j
@AllArgsConstructor
@RestController
@RequestMapping(path = “/sample”)
public class SampleController {/**
* サンプルデータ取得API
*
* @param id サンプルデータID
* @return サンプルデータの詳細情報
*/
@GetMapping(path = “{id}”, produces = “application/json; charset=UTF-8”)
@ResponseStatus(HttpStatus.OK)
public Response getSampleDataDetails(@Nonnull @Pattern(regexp = “[0-9]{8}”
Visual Studio CodeでJavaプログラム開発環境構築
# Visual Studio CodeでJavaプログラム開発環境構築
今回の記事で VSCodeを利用してJavaプログラム開発環境構築について説明します。
手順は以下の通りです。## 1、JDKインストール
端末に既にJDKが入っている方、2へ
上記以外の方以下の記事通りJDKインストールしてから2へ– [WindowsへのJDKインストール方法](https://qiita.com/ko2a/items/69fa8a5366d7449500ca)
## 2、拡張機能インストール
`Ctrl+Shift+x`で拡張機能検索画面を開き、`Java Extension Pack`拡張機能を検索してインストールする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148710/f932ff0e-1251-00d1-ca37-c9fa0579353d.png)## 3、VSCodeでJavaのパス通す
`Ctrl+,`の組合キーでVScodeの設定画面を開き、`Java.hom
Visual Studio CodeでJava + SpringでWebAPP開発環境構築
# Visual Studio CodeでJava + SpringでWebAPP開発環境構築
今回の記事でVSCodeを利用してSpring Webアプリケーション開発環境構築について説明します。
手順は以下の通りです。## 1、Java実行環境構築
前提条件としてVSCodeにJava実行環境必要なのでまだできてない方は記事[Visual Studio CodeでJavaプログラム開発環境構築](https://qiita.com/drafts/da54e5db258bc9d2538a)を参照して構築してください## 2、拡張機能インストール
`Ctrl+Shift+x`で拡張機能検索画面を開き、`Spring Boot Extension Pack`拡張機能を検索してインストールする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148710/a5a97ccc-e5ed-3b39-1a17-6952fe17e6ea.png)## 3、Spring Mavenプロジ
【備忘録】NPOIでExcelのシートにパスワード保護を掛ける
# やりたかったこと
とある案件でExcelが改竄されていないか、簡易的にわかるような方策を講じなければなりませんでした。
「それならブックにパスワードを掛ければいいじゃないか!」
と思い立ち、調べ始めたのがきっかけです。## 結論
…と思って調べ始めたものの、**ブックにパスワードを掛ける方法はわかりませんでした。**
ただし、シートを保護する方法は分かったので、備忘録として残しておきます。# Apache POI 4.1.2の場合
JavaからPOIを扱ってみたところ、Worksheet、Workbookともにロックを掛けることができました。“`Java:filename.java
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet(“Sample”);WriteCell(sheet, 0, 0, “Hello”); // 参考記事:【C#】NPOIを使ってExcelファイルを作成・編集する
// ワークシートの保護
sheet.protectShe
Java Silver 勉強1日目
はじめまして。snbmsn03です。
目下目標:Java SE8 Silver 合格
実務経験:C# 1年### 勉強方法
こちらの問題集を購入しました。
> text徹底攻略 Java SE 8 Silver 問題集[1Z0-808]対応 志賀 澄人
https://www.amazon.co.jp/dp/4844339931/ref=cm_sw_r_tw_dp_U_x_N3y5EbAHQYKDT @amazonJPより
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/470434/8e2843d7-627a-8d94-9983-5c9fedf08daf.png)自分の理解度の確認、アウトプット目的のため、
どんな人が読むかは特に決めずに書いていきます。
同じようにJava Silverを勉強している人が見つけて参考にしてもらえたら嬉しいな、程度です。もし間違い等ございましたら、お手数ですがご指摘いただけますと幸いです。
###Javaのfinal修飾
【Grails】設定領域とapplication.ymlの設定項目について
最近、仕事でGrailsを使う機会があって、公式ドキュメント読んでいたのでConfig関係について、書く(自分用の備忘録も含めて・・・)
#Grailsの設定領域
主にビルドの設定とランタイムの設定の2つの領域に分かれているビルド設定は一般的にGradleとbuild.gradleで行う。
ランタイム設定は、デフォルトでは grails-app/conf/application.yml ファイル内で行われる※Grails 2.0スタイルの設定を使用したい場合は、GroovyのConfigSlurper構文を使用して設定する。
なおGrails 2.0スタイルには2つの設定ファイルが用意されている
・grails-app/conf/application.groovy
・grails-app/conf/runtime.groovy
アプリケーションクラスに依存しない設定は、application.groovy、
アプリケーションクラスに依存する設定は、runtime.groovyを使用。#application.ymlの設定項目
###grails.enable.nati
同一と同値について
今回はJavaにおいて「同じ」という概念についての話です。
# 同じという言葉の2つの異なる意味
– 同じインスタンスを参照していること
– インスタンスは異なるけれど、値は同じであること前者を「同一」であると呼び、後者を「同値」であると呼びます。
# 同一について
“`java
Object hoge = new Object();
Object huga = hoge; //hogeの参照をコピーしてhugaに代入
“`
このとき、hogeとhugaは同一である、と言います。
同一性の判定は ==演算子で判定します。例えば、
“`java
Object hoge = new Object();
Object huga = new Object();
huga = hoge;
“`
としても、hogeとhugaは同一ではありません(異なるインスタンスだから)。# 同値について
“`java
public class Cat{
private String name;
public Cat(String name) {
this.name =