- 1. 「javadoc エラー – input length = 1を読み込めません」の解決法
- 2. SpringBoot2.2.4の内蔵TomcatでSSIServletを使う
- 3. JavaでABNF書いてメールアドレスのぱーす
- 4. 五目並べゲーム(作成中)
- 5. JAXB Reference implementation と DatatypeConverterImpl の行方
- 6. Java のバイト配列を16進数表記の文字列に変換する
- 7. JavaアプリケーションのMBeanの情報一覧を取得する
- 8. java 選択ソート
- 9. 【Java】MySQLを絶対に接続させたい!!!~JDBCドライバの取得とJARファイル位置について~
- 10. COTOHA API の構文解析 を Java で利用してみる
- 11. GCSにアップロードされているCSVファイルを扱う
- 12. OpenCV+AndroidStudioで顔認識アプリ
- 13. java バブルソート
- 14. mutable(可変な)オブジェクトとimmutable(不変な)オブジェクト
- 15. Java 14新機能まとめ
- 16. Java Integerの比較(==)が正しく動作しない
- 17. 配列 vs ArrayList vs HashMapの拡張for文レース
- 18. 【WireMock】Javaでスタブ・モックサーバを立ててE2Eテストを行いたい
- 19. 「=」を使わずにFizzBuzzを書く
- 20. Apache-Tomcat連携サーバで、Chrome 80のSameSite挙動が変わっても、セッションが切れないように設定する。
「javadoc エラー – input length = 1を読み込めません」の解決法
eclipseからjavadocを出力しようとしたとき、「javadoc エラー – input length = 1を読み込めません」のエラーが発生する場合があるが、検索しても解決方法が出てこなかったため、私が解決した方法をここに記載しておく。
# 解決方法
私の場合、javadocを出力する際にjavadocコマンドを指定するが、そのjavadocコマンドのJavaバージョンと、プロジェクトのJavaバージョンが違っていた。
これを、プロジェクトのJavaバージョンのjavadocコマンドを指定するように修正するとエラーが発生しなくなった。# あとがき
こんなことは当たり前過ぎるかもしれないが、古いJavaバージョンのJavaプロジェクトの修正等を最新のeclipseでやろうとした場合はjavadocコマンドがデフォルトで最新のJDKで設定されているため、盲点だった。
SpringBoot2.2.4の内蔵TomcatでSSIServletを使う
## 対象読者
SpringBootを使ったWebサービスを開発しており、内蔵Tomcatを利用している。
また、SSI (Server Side Include) を利用しているため、`SSIServlet`を使用している。## TL;DR
Tomcat 9.0.30ではSSI関連のモジュールが外部ライブラリ化していますので、
以下のTomcat SSIライブラリも依存関係に追加しなければならなくなりました。https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-ssi
## 経緯
JVNVU#98104709 Apache Tomcat の複数の脆弱性に対するアップデート
http://jvn.jp/vu/JVNVU98104709/index.html
により、SpringBootの内蔵Tomcatをバージョンアップする必要が出てきました。そこで、SpringBootのバージョンを最新のリリースバージョン`2.2.4.RELEASE`へと更新することにしました。
## SpringBoot 2.
JavaでABNF書いてメールアドレスのぱーす
プログラム中でメールアドレスのパースは難しいとか言われているのでABNFのフル機能のほんものを実装してみた。
いろいろ詰め込んだ結果、JSONやJSON Pointer、JSON Patchまで簡単に実装できる。IETFのRFCではABNFがよく使われている。メールだったりJSONなんかが有名で、IPアドレスやURLの書き方までABNFだったりする。
その割にあまり一般的なツールやライブラリとして出回っているのは数えるほどしかみたことないのでさっくりと作ってみた。構造はParserを拡張してびるだー的なものを作って、びるだーでテキストからオブジェクトに変換するだけ。
ABNF自体もABNFで書かれているが、これは最初なのでビルダーだけで作る。
JSONなども書式を指定すればパーサができるので出力されるパーツを組み上げるビルダー的なところを組み込めばできあがり。SoftLibRFC にRFCの一部ABNFをまとめているのでそれを使ってみるところの紹介。
必要なのは、SoftLibRFC,SoftLibABNF,SoftLib の3つ。SoftLibJSONは使わない。
現状ソ
五目並べゲーム(作成中)
####(ルール)
・5×5(変更可)のマス目に黒と白が交互に石を置いていく
・縦、横、斜めのマスが同色石によってすべて埋まった時点で勝利####(各ファイル)
・Stoneクラス
→石の情報を管理
・Boardクラス
→碁盤情報を管理
・Judgeクラス (うまくいかないため現在作成中)
→勝利判定を管理
・Constantインターフェイス
→定数を管理
・Gameクラス
→ゲームとしてまとめる“`Stone.java
package Gomokunarabe;public class Stone implements Constant{
Board board = new Board();//石が正常に置けたらtrue,置けなかったらfalse
private boolean active;
public boolean getActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}//石の位置に関するフィー
JAXB Reference implementation と DatatypeConverterImpl の行方
## 概要
– JAXB (Java Architecture for XML Binding) の公式に近い Reference implementation (参照実装) の jar とソースコードをバージョン毎に追いかける
– 動作確認環境: Java 11 (AdoptOpenJDK 11.0.6+10) + Gradle 6.1## 一覧表
|バージョン|パッケージ名|Gradle implementation 記述|
|—–|—————-|———————————————–|
|2.3.1|javax.xml.bind |javax.xml.bind:jaxb-api:2.3.1 |
|2.3.2|javax.xml.bind |jakarta.xml.bind:jakarta.xml.bind-api:2.3.2 |
|2.3.3|javax.xml.bind |?
Java のバイト配列を16進数表記の文字列に変換する
## 方法
JAXB の javax.xml.bind.DatatypeConverter クラスを利用する。
[DatatypeConverter \(Java Platform SE 8 \)](https://docs.oracle.com/javase/jp/8/docs/api/javax/xml/bind/DatatypeConverter.html#printHexBinary-byte:A-)
> public static String printHexBinary(byte[] val)
> バイト配列を文字列に変換します。## JAXB は Java 11 から Java SE 標準ライブラリに入っていない
JAXB は Java SE 6 以降の標準ライブラリに入っていた。
[JAXB Release Documentation – Frequently Asked Questions](https://javaee.github.io/jaxb-v2/doc/user-guide/ch06.html)
> Q: Which version of
JavaアプリケーションのMBeanの情報一覧を取得する
Scala 2.12
“`scala
import java.lang.management.{ManagementFactory, PlatformManagedObject}import javax.management.{MBeanInfo, ObjectName}
import scala.collection.JavaConverters._
val mbeanInterfaces: Seq[Class[_ <: PlatformManagedObject]] = ManagementFactory.getPlatformManagementInterfaces.asScala.toSeq val mbeanObjects: Seq[_ <: PlatformManagedObject] = mbeanInterfaces.flatMap(ManagementFactory.getPlatformMXBeans(_).asScala.toSeq) val mbeanObjectNames: Seq[ObjectName] = mbeanObjects.map(_.
java 選択ソート
#選択ソート
今回は選択ソートについてコードを書いていく。
※自分のアウトプット用の記事です。間違いなどがあったら指摘してください。“`SelectionSort.java
public class SelectionSort {
public static void main(String args[]) {
int[] array = {2,3,5,4,1};
sort(array);
for(int i=0;i
【Java】MySQLを絶対に接続させたい!!!~JDBCドライバの取得とJARファイル位置について~
#MySQLをプロジェクトで使いたい….
今回のWebアプリケーション制作では、**MySQL**というデータベースを使ってのアプリ制作です。
Eclipseを使用してJavaでプログラムを書いていたのですが、MySQLってどうやって接続して使うの?という疑問….そこで今回は**JavaのプログラムからMySQL(データベース)を利用する手順**をまとめました。手順は以下の通りです:point_down_tone2:
**1. JDBCドライバの取得(Connector/J)**
**2. JARファイルをプロジェクトに入れる**
**3. データ接続を試してみる**##JDBCドライバとは?
手順1に入る前に…JBDCドライバについて簡単に説明しておきます:wink:
JDBCドライバとは、**データベースを操作するために必要となるクラスやインターフェース群です。**それぞれのデータベース開発元が**JARファイル(クラスやインターフェースをまとめて格納したファイル)**として提供しています。
今回使用するデータベースはMySQLなのでMySQL専用ののJBD
COTOHA API の構文解析 を Java で利用してみる
# COTOHA API とは
NTTグループが提供している、構文解析、照応解析、キーワード抽出、音声認識、要約など、様々な自然言語処理・音声処理APIを提供しているサービスです。
> COTOHA API | NTTコミュニケーションズが開発した日本最大級の日本語辞書を活用した自然言語処理、音声認識APIプラットフォーム
https://api.ce-cotoha.com/contents/index.html「NTTって電話の会社では?」と思われてる方もあるかもしれませんが、NTTの研究所ではコンピュータでの日本語処理も何十年も前から研究されているのです。(私も学生時代にNTTコミュニケーション科学基礎研究所に見学に行ったり論文を読んだりしてお世話になりました)
最近になってクラウドの技術が進み、従来はローカルのコンピュータで動かしていたような処理をAPIサービスとしてインターネット経由で提供できるようになってきたのです。ロジックそのものの開発はNTTのどの会社・部門が提供しているのかは公開されていないようですが、APIの提供はNTTコミュニケーションズさんでされているよ
GCSにアップロードされているCSVファイルを扱う
# csvファイルを読み込む
blob.getContentでファイルの中身が取得できるが、ファイルサイズが大きい場合は困ってしまう“`
Bucket bucket = getBucket(bucketName);
Storage.BlobListOption option = Storage.BlobListOption.prefix(directory);Page
blobs = bucket.list(option);
Iteratoriterator = blobs.iterateAll().iterator(); List
csvList = new ArrayList<>();
while (iterator.hasNext()) {
Blob blob = iterator.next();
byte[] content = blob.getContent(Blob.BlobSourceOption.generationMatch());
csvList.add(new String(conten
OpenCV+AndroidStudioで顔認識アプリ
##やりたいこと
OpenCVを使った顔認識アプリの作成
・目標
・とりあえずAndroidStudioの導入、使い方を学ぶ(初心者)
・OpenCVをAndroid上で動かす
・カメラで撮影した画像、ギャラリーに保存されている画像のどちらも使用可能に## 参考
OpenCVを使って、簡単顔認識Androidアプリを作ってみた
https://qiita.com/Kuroakira/items/094ecb236da89949d702
インテントでカメラを呼び出す方法の補足(主に、Xperia 2.1問題対応)
## 使ったもの
Android Studio 3.5.3
OpenCV 4.2.0## 大まかな流れ
実装についてはほぼ上記の先人たちを参考にしているのでざっと書きます。カメラ、ギャラリーボタンを押下
↓
カメラ、ギャラリーから画像を取得
↓
取得した画像をbitmap→Mat形式に変換
↓
OpenCVへMat形式の画像を渡す
↓
顔認識情報を取
java バブルソート
#ソート
今回からソートについて投稿していこうと思います。
※自分のアウトプット用の記事です。間違いなどがあったら指摘してください。
#バブルソート
“`BubbleSort.java
public class BubbleSort {
public static void sort(int[] array) {
for(int i=0;iarray[j+1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
public static void main(String args[]) {
int[] array = {5,4,3,2,1};
sort(array);
for(int i=0;i
mutable(可変な)オブジェクトとimmutable(不変な)オブジェクト
Java Silver SE11の学習をしていて、「Stringオブジェクトは不変なオブジェクトである」の意味がよくわからなかったので、覚書ついでに。
# mutableとimmutableの違い
そもそもmutable(可変)とimmutable(不変)の違いとはなんぞやから。
簡単に言うと、一度セットした値を**後から変更できるオブジェクト**がmutableオブジェクト。
一度セットした値を**後から変更できないオブジェクト**がimmutableオブジェクト。そのままですね。immutableオブジェクトの定義方法は下記らしいです。
– すべてのフィールドをprivateで修飾する
– オブジェクト内部の状態を変更可能なメソッド(setterなど)を提供しない
– クラスをfinalで宣言し、メソッドがオーバーライドされないことを保証する(サブクラスから変更させない)
– 内部に可変オブジェクトを保持している場合、そのオブジェクトを外部に提供(getterなど)しない次項より、immutableなクラス:Hogeを作成することでそれぞれの詳細を確認します。
(その他
Java 14新機能まとめ
Java 14もRCフェーズに入りました。
うまくいけば2020/3/17にリリースされます。
https://jdk.java.net/14/# JEP
大きめの変更はJEPでまとまっています。
https://openjdk.java.net/projects/jdk/14/今回は、16ものJEPが取り込まれました。影響が大きいものも多いです。
305: [Pattern Matching for instanceof (Preview)](https://openjdk.java.net/jeps/305)
343: [Packaging Tool (Incubator)](https://openjdk.java.net/jeps/343)
345: [NUMA-Aware Memory Allocation for G1](https://openjdk.java.net/jeps/345)
349: [JFR Event Streaming](https://openjdk.java.net/jeps/349)
352: [Non-Volatile Mapped B
Java Integerの比較(==)が正しく動作しない
# 現象
“`java
import java.util.*;public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // 「2 10000000 10000000」が入ってくる
int n = sc.nextInt();
Listlist = new ArrayList<>();
for (int i = 0; i < n; i++) list.add(sc.nextInt()); for (int i = 0; i < n-1; i++) { if (list.get(i) == list.get(i+1)) { System.out.println("等しい"); return; } }
配列 vs ArrayList vs HashMapの拡張for文レース
# 訂正
比較演算子間違ってました(修正済み)# つかったもの
・Java9
・eclipce# 動機
何が最適かは置いといて拡張for文で回したらどれが一番早いのかなと。# 結果
“`ruby:ForEaerVs.java
public class ForEaerVs {
public static void main(String[] argS) {Integer mm;
// 配列
Integer[] arry = new Integer[1000000000];for (Integer i = 0 ; i < 1000000000; i++) { Integer arryInt = i; arry[i] = arryInt; } long staetTimeArry = System.nanoTime(); for(Integer iA : arry) { mm = iA; } long endTimeArry = System.nanoTime(); System.out.print
【WireMock】Javaでスタブ・モックサーバを立ててE2Eテストを行いたい
# 連携先システムが検証系では使えないけどE2Eテストがしたい
世はマイクロサービス時代なので、HTTPリクエスト・レスポンスのモック・スタブの需要が高まっているみたいですね。
私の参加しているプロジェクトはマイクロサービスなんて関係ないのですが、
表題のとおりの目的で、Javaで動くAPIサーバを探していたところ教えていただきました。# WireMock
HTTPベースのAPIのシミュレータ、mockサーバー。
http://wiremock.org/
https://github.com/tomakehurst/wiremockほかのAPIServerとの比較は下記サイトで確認できます
[Comparison of API simulation tools](https://en.wikipedia.org/wiki/Comparison_of_API_simulation_tools)## ThoughtWorksのTECHNOLOGY RADARに2018年にTRIALで選ばれてました
https://www.thoughtworks.com/radar/tools
「=」を使わずにFizzBuzzを書く
#「=」を使わずにFizzBuzzを書きたい
特に意味はない
20までのFizzBuzzを「=」を使わずにいろんな言語で書いてみよう#C言語
“`c:c_fizzbuzz.c
#includeint main(void) {
int n;
n++;
while (1) {
if (n%3 && n%5) {
printf(“%d”, n);
}
else{
if (!(n%3)) {
printf(“Fizz”);
}
if (!(n%5)) {
printf(“Buzz”);
}
}
printf(“\n”);
n++;
if (n>20) {
break;
}
}
return 0;
}
“`初期化しないと0が入るのを利用(ただしコンパイラによる)
0がFalse、それ以外がTrueになる性質を使って条件分岐する#Python
“`python:pyth
Apache-Tomcat連携サーバで、Chrome 80のSameSite挙動が変わっても、セッションが切れないように設定する。
リンク型決済サイトについて、
2/17以降にChrome決済サイトから決済完了後の画面にPOSTで遷移するとセッションが切れる事が判明したので、
対応方法をメモ。#発生する現象
Cookieに「SameSite」という属性がありますが、これは現行ではデフォルトが「None」で動作しています。
この状態では、別ドメインのサイトから遷移する場合でもCookieを送信してくれるので、サーバ側でセッションタイムアウトでもしていなければ、遷移前のセッションが保持されます。
その属性が、2/17日以降、Chrome 80ではデフォルトで「Lax」になり、これは「GETの場合は送信しても良いが、POST等、特定の条件ではダメ」という挙動になるようです。
その結果、リンク型決済サイトで別ドメインのページから決済完了画面にPOSTで遷移されると、
Cookieの中のJSESSIONIDが、決済サイトへの遷移する前とは異なる値になってしまい、「別セッション」として扱われます。#事前の検証方法
1:Chromeで以下の設定ページを開きます。
chrome://flags/
2:設定の中から、「S