- 1. アルゴリズム体操6
- 2. java 変数宣言
- 3. java コメントの書き方
- 4. Spring WebFluxのチュートリアルをやってみる
- 5. Java リストをイテレートする5つの例から省略形に辿り着く
- 6. AndroidアプリにOpenCVを導入してみる
- 7. JavaでExcelデータの取り込み3
- 8. ソースコード解析をやってみた
- 9. Java Vs. PHP Vs. Python
- 10. アルゴリズム体操6
- 11. java エラー対策編
- 12. Spring Boot のコントローラーを MockMvc でユニットテストするサンプルコード
- 13. Spring-Batchのテストでハマった
- 14. テスタブルなコード
- 15. テスト困難なコードを書く
- 16. androidアプリのdebugビルド署名をリリース署名に変更すると、色々便利だ
- 17. SpringBoot + JODConverter で OnlineConverter を使ってみた
- 18. [Heroku] SpringBootにNginxのビルドパックを実装してみた。
- 19. 【JAVA】interfaceとabstractの違いって???
- 20. SpringBoot1.5 + Gradle4.4 + Java8 + Docker 環境を Java11 に対応させる
アルゴリズム体操6
#Move zeros to left
##説明
一つの整数型の配列が渡されます。
配列内の他の要素の順序を維持しながら、0に等しいすべての要素を左に移動させるアルゴリズムを実装しましょう。
次の整数配列を見てみましょう。すべての0に等しい要素を左に移動すると、配列は次のようになります。(0以外の要素の順序を維持する必要があります)
変数宣言についても書きます。
# Javaの変数宣言(識別子)
Javaのプログラムの中で変数を使うためには
まずはじめに「変数の宣言」というものを行わなければならない。プログラムの中で、変数を使うためには名前が付けられていなければならない。
この変数の名前のことを識別子と読んでいる。また、変数には扱うデータの種類によって型が決まっている。この型を指定しなければならない。
## 基本
基本の書き方はこちら“`bash
型名 識別子;
“`例:年齢の場合
intで数字の型を指定
ageで変数名(識別子)を指定“`java
int age;
“`## 変数に値を代入する
Javaの場合は以下のように記号「=」(イコール)を使用して
左側に宣言した識別子で表される変数名を、右側に式を記述する。尚、変数と「=」の間のスペースはあっても無くてもどちらでも問題ない。
“`bash
変数名(識別子) = 式;
“`例:30と指定
ageという変数に、30という値を代入することを意味している。“`java
age = 30;
“`## 変
java コメントの書き方
今日はちょっと時間がないのでコメントの書き方だけ
さらっと書きます。# コメントアウト1行のみ
1行だけのコメントは次のように書くことができる。“`java:一行のみ
// (コメント内容)
“`# コメントアウト複数行
/* ~ */で囲んだ部分がコメントとなる。
「/*」がコメントの開始で、「*/」がコメントの終了という意味です。“`java:複数行
/*
コメント内容
*/
“`
Spring WebFluxのチュートリアルをやってみる
## はじめに
初投稿ということで拙い記載となっている点はご容赦ください。:bow_tone1:
『Spring WebFlux』というワードを最近知ったので、チュートリアルを通して触れてみようと思います。## WebFluxとは
[Spring WebFlux](https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#webflux)はSpringが提供するWebフレームワークであり、ノンブロッキングな処理を行うことができます。
ざっくりですが、『スレッドを節約しつつ、効率よく処理ができる仕組み』だと理解しました。## 今回やること
以下のページにあるチュートリアルをやってみたいと思います。
[Building a Reactive RESTful Web Service](https://spring.io/guides/gs/reactive-rest-service/#initial)開発環境
・Visual Studio Code
・AdoptO
Java リストをイテレートする5つの例から省略形に辿り着く
リストのイテレートについて、シンプルなリストを使って書き方を見ていきます。
今回は以下の文字列のリストを使います。“`java:list
final Listmonths =
Arrays.asList(“January”, “February”, “March”, “April”, “May”, “June”, “July”, “Augast”, “September”, “October”, “November”, “December”);
“`これらの要素を順番に標準出力させたいだけです。
### 命令型のスタイル
まずは、for ループを使ってみます。
for ループは命令型のスタイルで、外部イテレータです。
命令型のスタイルでは、「どのように」処理を行うかの多くをプログラマ側で考える必要があります。#### 1. for ループ(インデックス指定)
特に難しいことはないと思います。1番目の要素から順番に出力しています。
インデックスをわざわざ一つずつインクリメントしながら指定する必要があります。“`java:for-with-ind
AndroidアプリにOpenCVを導入してみる
#はじめに
AndroidStudioのデフォルトだけで完結するアプリ作りにも飽きてきたので、
OpenCVを使って画像をあーだこーだしてアプリの幅を広げてみる。
手始めにインストールして試しに使ってみる。[Androidアプリで端末の画像を取り込む](https://qiita.com/satodayo/items/0dd592f6d92c87ee0ac4)の続き
#環境
OpenCV 4.1.2
AndroidStudio 3.4.1#インストール
こちらの記事を参考にさせていただきました。
特に支障なくインストールとインポートは完了。[Android StudioでOpenCVを使う](https://qiita.com/tifa2chan/items/a2ec4f5d90eeb9cf1802)
#Mat形式で取り込む
前回の記事でデバイスの画像データをbitmapで取り込むところまでやりました。
このbitmapをOpenCVで扱うためのMat形式に変換します。OpenCVのLibraryに含まれているandroid.packageのUtilsクラスに以下の
JavaでExcelデータの取り込み3
またもや前回の続きでApachePOIです。
https://qiita.com/Mk-4000/items/5d52b4b92ed5f8bf23f5#今回の内容
前回はセルタイプごとの取得方法を書いていましたが、
**CellType.FORMULA(数式タイプ)**
のときのメソッド
**getCellFormula()**
ではセル内の数式そのものがString型で取得できることがわかりました。
ではその数式の結果が欲しいときは?
と言ったときの対象方。#具体的にどうするか
色々とどうにかできないものか探してこちらの方の記事を参考にしました。
http://shin-kawara.seesaa.net/article/159878953.html**FormulaEvaluatorインターフェイス**
と言うものがありました。これは数式セルを評価する。値にする。といったもので、要は計算後の値にするために色々助けてくれるものです。
また、
**CreationHelperインターフェイス**
も使用するそうです。
こちらは、具象クラスのインスタンス化を処理するオ
ソースコード解析をやってみた
# きっかけ
今年、私が所属している[大学の部](https://oucc.org/)でアドベントカレンダーをやってみよう!という呼びかけがあったので、僕も参加してみました。(ほかの部員の記事は[こちら](https://adventar.org/calendars/4650)をご覧ください)
…で、何をしようか考えたのですが、単純に今の自分がやっていることを紹介しようかと思い、Javaソースコードの解析について書くことにしました。今回の記事に関しては、Javaという言語というよりもソースコードそのものを解析するということを目的としているので予めご了承願います。# 概要
今回、タイトルに有るようにソースコード解析を行うわけですが、解析対象となるのは前述の通りJavaという言語です。更に有名なIDEであるEclipseと構文木であるAST(Abstract Syntax Tree)を作成するためのプラグインを用いてコードの解析を行います(詳しい手順は[こちら](https://sdl.ist.osaka-u.ac.jp/~s-kimura/jdtdoc/jdt.html)のサイト
Java Vs. PHP Vs. Python
##古き良きツールはいまだに顕在
ITの世界は日々色々なものがリリースされてワクワクしますが
同時に**古き良きツールがなくなるか改悪化されることもしばしあります。**私の中で改悪されたサービスは**Google finance**([リンク](https://www.google.com/finance))です。
以前は高機能チャートがついていて、様々なテクニカル指標を載せることができました。
しかし今はそのころの原型を留めておらず、検索エンジンの1便利機能になってしまいサービスとも呼べない代物になってしまいました。
今回は古き良き[Google Trend](https://trends.google.com/trends/explore?geo=JP)でIT界隈を調査したので共有させていただきます。
##Java Vs. PHP Vs. Python5年間のこの3言語を比較すると以下のようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280363/
アルゴリズム体操6
#Find Low or High Index
##説明
整数型のソートされた配列と、指定された要素(key)が位置する最も低いインデックス(low index)と高いインデックス(high index)を返す。もし、指定された要素がその配列にない場合は-1を返します。配列の長さは数百万単位で、多くの重複要素を許します。##例
次の例では、low index と high index は次のようになります。key:1 low = 0 および high = 0
key:2 low = 1 および high = 1
key:5 low = 2 および high = 9
key:20 low = 10 および high = 10
java エラー対策編
今回はjavaで出るエラーについて書いて見ます。
# コンパイルエラー
ます初心者にありがちなコンパイルエラーと対処方法を紹介します。* セミコロン「;」が不足
* ダブルクオーテーション「”」が不足
* 全角空白文字
* ファイル名とクラス名が異なる
* 閉じ括弧「}」などあります。
## セミコロン「;」が不足
Javaの記述ルールは、1つの命令ごとにセミコロン「;」をつける決まりです。“`java:セミコロン「;」が不足
public class HelloWorld {
public static void main(String[] args) {
System.out.println(“Hello World!”) // ← セミコロン(「;」)が足りない
}
}
“`## ダブルクオーテーション「”」が不足
文字列の終わりのダブルクオーテーション「”」が不足していると、こんなエラーが起きます。“`java:ダブルクオーテーション「”」が不足
public class HelloWorld {
public static void
Spring Boot のコントローラーを MockMvc でユニットテストするサンプルコード
## 今回の環境
– Java 11 (OpenJDK 11.0.2)
– Spring Boot 2.2.2
– Thymeleaf 3.0.11
– JUnit 5.5.2
– Hamcrest 2.1## テスト対象のコントローラーと Thymeleaf テンプレート
“`java
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;@Controller
public class FooBarController {@GetMapping(“/”)
public ModelAndView topPage(ModelAndView mav) {
mav.setViewName(“index”);
mav.addObject(“userName”, “Alice”);
Spring-Batchのテストでハマった
# Spring-Batchのテストでハマった
## ハマった内容
– あるバッチにパラメーターを与えて実行する
– 1回目は成功するのだが、2回目以降は実行できない## ハマりの原因
– Spring-Batchにはジョブの実行結果を保存しておく機能がある
– ジョブ成功後に前回と同じパラメーターを与えて実行することはできない
– [Spring Batch – Rerun Job with same Job Parameter
](https://stackoverflow.com/a/44432024/2565527)“`
Going by the concept of Job Instances and Job Executions in Spring Batch,
you can’t start a COMPLETED job instance again
though you can launch same instance of job again &
again till its not COMPLETE ( and few more job
テスタブルなコード
# 概要
この記事は、以下に投稿したソースをリファクタリングするという記事です。テスト困難なコードを書く
https://qiita.com/oda-kazuki/items/bac33094e82b0f51da41# テスタブルなコードの結論
以下のようにコーディングしましょう。* クラスはどんどん分割する
* 最終的にひとつのことだけに専念させるようにする
* 特にグローバルなリソースへのアクセスは一箇所にまとめる
* メンバ変数の初期化やSingletonの利用はDependency Injectionで行う
* 外部ライブラリの生成箇所は場合によってはラップするファクトリクラスを作る
* 読みやすさを重視 (処理を簡単に理解できるようにするため)
* 早期リターンを心がける
* 変数のスコープは最小限に
* メソッド名や変数名にはこだわる
* Mapはなるべくは利用しないこれらをやることで、テストは非常に容易になります。それでは、前回のコードをリファクタリングしていきます。
# 凝集度を高める
[前回](http
テスト困難なコードを書く
# 概要
今回、ユニットテストしづらいコードの書き方を紹介したいと思います。
コードの言語はJavaです(他の言語は読み替えて下さい)。この記事に書いた内容をリファクタリングする記事も書きました。
https://qiita.com/oda-kazuki/items/b66fe3d4efec822497e6# 結論
* 可読性を悪くする
* 結合度を高くする
* 循環的複雑度を10以上にする
* 凝集度を低くする凝集度・結合度・循環的複雑度については以下でもまとめてます
https://qiita.com/oda-kazuki/items/a16b43dc624429de7db3# テスト困難なコードサンプル
今回、以下のような処理を想定します。* **ログイン処理**
* 入力:アクセストークン(指定しない場合、キャッシュがあればそれを利用する)
* 出力:ログインしたユーザー情報 (問題があった場合はnullを返却する)
* 処理:以下の処理を最大3回行う (スマホでのログインを想定し、通信でタイムアウトした場合時間を置いてリトライする
androidアプリのdebugビルド署名をリリース署名に変更すると、色々便利だ
##はじめに
androidアプリのdebugビルド署名、普通はリリースビルド署名と違いますね。まあリリースビルド署名のキーストアは重要なので、利用制限したほうがいいんですが、debugビルド署名をリリースビルド署名に変更すると、開発が色々楽になります。
リリース版にdebug版を上書きインストールしたりできますからね。
##やりかた
“`
signingConfigs {
//DEBUG版をリリースビルド署名したいときに、これを有効にする
debug {
storeFile=file(project.properties.storeFile)
storePassword=project.properties.storePassword
keyAlias=project.properties.keyAlias
keyPassword=project.properties.keyPassword
}
}
“`こんなんを追
SpringBoot + JODConverter で OnlineConverter を使ってみた
# 概要
jodConverter を OnlineConverter で利用した際のメモ。
SpringBoot を利用していたため、JODConverter Spring Boot Starter を利用しての実装となっている。# 環境
* SpringBoot:2.1.3.RELEASE
* JODConverter:4.1.0
* JODConverter Spring Boot Starter# OnlineConverter呼び出し側の実装
* 基本的にはLocalConverterを利用する時と変わらないが、application.yml に OnlineConverterサーバーのURLを指定する
* リクエスト時のURLは“`【ymlに設定したURL】/lool/convert-to/【変換先の拡張子】“`という形で送信される“`yaml:application.yml
jodconverter:
online:
enabled: true
url: 【OnlineConverterサーバーのURL】
“`# Onli
[Heroku] SpringBootにNginxのビルドパックを実装してみた。
#[Heroku] SpringBootにNginxのビルドパックを実装してみた。
HerokuはDynoのポートをHerokuルータにバインドして、WebプロセスがHTTPリクエストを受け付けています。そのため、Webサーバーの手前に、Reverse Proxyサーバーを立てることができません。
しかしながら、NGiNXのようなソフトウェアをDynoと組み込むことにより、アプリケーションサーバーへ到達する前に、リクエストをさばくことができます。
今回はHerokuのレポジトリから参照できるこちらの[ビルドパック](https://github.com/heroku/heroku-buildpack-nginx)を使用することにします。
[Github](https://github.com/heroku/heroku-buildpack-nginx) にあるドキュメントですと、
1. /tmp/nginx.socketのUNIXドメインソケットに接続する。
2. /tmp/app-initializedにtouchにてファイル作成をするとあります。しかしながら、Javaで
【JAVA】interfaceとabstractの違いって???
#ざっくり違いを解説
######interface ・・・クラスじゃない(重要)######abstract ・・・クラス等の修飾子
##interfaceについて
######①変数
変数の宣言および実装ができる。
ただし、暗黙的に「public static final」が付く。“`java
interface noTsukaikata {
int Num = 6; //finalが付くので初期化できない。→実質的に定数扱いになる。
}
“`######②メソッド
抽象化メソッドのみ宣言できる。“`java
interface noTsukaikata {
void method(); //抽象化メソッドの宣言(interface内のメソッドはabstract句が付与される)
// abstract void method();に自動変換される。
}
“`実は、default句かstatic句を使うことで実装もできる。
“`java
interface deJisou{
//default句を使うことで、interface内にメソッドを
SpringBoot1.5 + Gradle4.4 + Java8 + Docker 環境を Java11 に対応させる
この記事は、[Java Advent Calendar 2019](https://qiita.com/advent-calendar/2019/java) 15日目の記事です。
## はじめに
Java8の無償サポートが2019年1月に切れてから一年ほど放置してましたが、
今回時間ができたので8以降初のLTSであるJava11への更新を行いました
その時のメモですと書き始めようとしましたが、OpenJDK8は2023年6月までサポートされるらしいので、
OracleJDKからOpenJDKに変えるだけでよかったのでは……
でもやってしまったので記録しときます## JDKのアップデート
### AdoptOpenJDK11をインストール
以下のコマンドを入れると最新のJDKがインストールされる
“`
brew cask install adoptopenjdk
“`しかし、現状ではJDK13が入ってしまうので、LTS版であるJDK11を入れるにはバージョンを指定する必要がある
ということで公開されているバージョンを検索“`
$ brew searc