- 1. 【Jackson】カスタムシリアライザーで、BigDecimal型の返却値を変換した話
- 2. Java業務で使えるレベルになるまでにやったこと
- 3. Maven学習
- 4. SpringBootをVSCodeで使ってみる
- 5. AWSでJavaMailを使用してメール送信する
- 6. NLP4J [005-2] NLP4J+Twitter4J(分析1)
- 7. Javaのインストールは気軽にできるものじゃない!1回で完璧に終わらせるための注意点まとめ
- 8. JavaのStreamで並列化できるのは最上位のStreamだけ。
- 9. Glide4系のDiskCacheについて
- 10. Chrome + KatalonRecorder + vscode + Katalium でUIテストの自動化を体験してみた
- 11. Java 1 1 support from Google App Engine
- 12. forの書き換えなんだろと理解しているStreamAPIを少し深堀する。
- 13. ArrayList配列でwhileによる繰り返し処理でIteratorで全部表示する
- 14. Spring Boot でテーブルのデータをビューに出力するまでの流れ
- 15. SolrJ で JSON をインポートする
- 16. GCPのjavaクライアントライブラリからStackdriver loggingにエラーを投げてもStackdriver ErrorReportingには入らない
- 17. 【java】if文でString型の条件文が無視される
- 18. SolrJ でドキュメントをインポートする
- 19. 【Android】音量変更(=音量ボタン押下)の検出方法
- 20. JScrollBarで自動スクロールしようとしたらイベントハンドラの描画が1度だけだった件
【Jackson】カスタムシリアライザーで、BigDecimal型の返却値を変換した話
## はじめに
SpringBootを用いたWebAPIの開発において、Jacksonを用いているのですが、BigDecimal型の値をレスポンスとして返却する際に課題に直面しました。それは、小数点以下の連続した0が残ったまま表示されてしまうということです。
例えばPostgresSQLのnumeric型(10, 5)のカラムに「99.9」と値が登録されているとして、この値を取得してJSONで返す場合、BigDecimal型で扱い返却すると「99.90000」と表示されてしまいます。
今回はこの事象を解決したので、記事にしました。
##解決法
まず、下記のBigDecimalSerializer.javaのようなBigDecimal型に対するシリアライザーを作成します。作成時には`StdSerializer`クラスを継承し、ジェネリクスに値を操作する対象のクラスを指定する必要があります。“` java:BigDecimalSerializer.java
public class BigDecimalSerializer extends StdSerializer
Java業務で使えるレベルになるまでにやったこと
## はじめに
エンジニア目指してる友達に「Java業務で使えるレベルになるために何したー?」って聞かれたので、自分がJava学習する際、どういう順序・教材で勉強したのかまとめました。
Javaエンジニア目指している人の参考になれば嬉しいです。## やったこと①:ProgateのJavaコース
https://prog-8.com/
当時Java初心者・オススメWEB教材とか検索してProgateと初めて出会い、分かりやすさに感動した記憶があります。
道場コースは時間に余裕がある人だけやればいいと思います。
ちなみにボクはやってないです>< ## やったこと②:ドットインストールのJava入門コース https://dotinstall.com/ Progateで学んだ知識を定着させる目的で通勤時間に動画流してました。 動画は見るだけで特に手は動かしてないです。 ## やったこと③:わかりやすいJavaシリーズ 以下の2つの書籍をやりました。 新わかりやすいJava入門編 川場 隆 https://www.amazon.co.jp/dp/4798042773
Maven学習
# 1.インストール
## 1-1. ダウンロード
以下のサイトから「apache-maven-3.6.2-bin.zip」をダウンロード
https://maven.apache.org/download.cgi## 1-2.導入
展開し、binにパスを通す。
今回は「D:\apache-maven-3.6.2\bin」とした。## 1-3.確認
“`
mvn -version
“`
で起動したらOK。今回は以下が表示されたのでJDKをインストールした。“`
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE
“`ダウンロードしたJDKは「Amazon Corretto 8」
“`
Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bc
SpringBootをVSCodeで使ってみる
# 1. 導入
## 拡張機能のインストール
以下の拡張機能をインストールします。Javaを使うのでJava系の拡張機能がまとまっている[Java Extension Pack](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack)と、SpringBootの拡張機能がまとまっている[Spring Boot Extension Pack](https://marketplace.visualstudio.com/items?itemName=Pivotal.vscode-boot-dev-pack)を入れます。必要に応じて不要な拡張機能は無効にしてください。
– Java Extension Pack
– Language Support for Java
– Debugger for Java
– Java Test Runner
– Maven for Java
– Java Dependency Viewer
– Visual Studio Intel
AWSでJavaMailを使用してメール送信する
#AWSでJavaメールを使用してみる
今回は、前回の記事で立ち上げたAWSのEC2を使用してJavaメールをgoogleのSMTP経由で送信してみる
*前回までの記事は下記を参照ください。
https://qiita.com/ktkt11122334/items/36f950670e5952d7d17e##EC2でJavaを動かす
EC2にJavaが入ってるか確認する
前回立ち上げたEC2にssh
ssh -i [pemファイル] ec2-user@ec2-54-65-248-190.ap-northeast-1.compute.amazonaws.comJavaが入っていないことを確認
java -version
-bash: java: コマンドが見つかりません
javac -version
-bash: javac: コマンドが見つかりません
yum list installed | grep java
**なにも表示されないopenJDKをyumで落としてくる
sudo yum update
sudo yum -y install java-1.8.0-o
NLP4J [005-2] NLP4J+Twitter4J(分析1)
[Indexに戻る](https://qiita.com/oyahiroki/items/ba79a759c599d3459d29) : [[005-1] NLP4J+Twitter4J(データ収集)](https://qiita.com/oyahiroki/items/32bd2573138883b46aa4) > this > 次のページ
#結果を眺めてみる
出力結果全文は[こちら](https://github.nlp4j.org/nlp4j/output/output-20191029-001318.txt)に配置しております。
さて、結果を見ていきましょう…。
#処理時間
“`
処理時間[ms]:34586
“`34秒かかっています。結構遅いです。
合計90件の文書ですが、1文書につき2回YahooのAPIをコールしていて合計180回なのでこんなものだと思います。Yahooの自然言語処理APIはお手軽に使えるものの、回数制限とパフォーマンスを考慮するとローカルでガンガン叩けるライブラリを使うことも検討が必要だと思います。NLP4Jでは他の自然言語処理
Javaのインストールは気軽にできるものじゃない!1回で完璧に終わらせるための注意点まとめ
#「Java インストール」で検索してちゃちゃっとやれるでしょ?⇒ドハマりしました#
Javaを勉強したいなーと思ったらまず誰もが最初にやるのがJavaのインストール。
しかし、「なんとなくググればできるだろう」という心構えで臨んだ私は「ちゃんとした順序でインストールしたはずなのになぜかJavaファイルが動かせない」問題でめちゃめちゃ悩みました。具体的に言えばコマンドプロンプトで「**javacは、内部コマンドまたは外部コマンド、(略)として認識されていません。**」と言われ続けました。
Javaのインストールをする前に**2点絶対に頭に入れておかなければいけないこと**を解説します。#注意点その1:ググってトップに出てくるのは「JRE」だけど、インストールしなきゃいけないのは「JDK」#
「Java インストール」と検索するとトップに出てくるのが
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513594/2eab4c5b-483e-0cf1-6069-47dd851670eb.p
JavaのStreamで並列化できるのは最上位のStreamだけ。
結論からいうと、Streamで並列化できるのは、最上位のStreamだけ。flatMapなどで,入れ子のStreamの処理については並行が効かない。(Javaのコードも読んだが,flatMapのStreamは内部コードでSequentialに変更されていることを確認した。)
基本的にはできるだけ上位の処理を並列化するのが,一般的には効率がよく並列化できるため,この実装は納得できるものではあるが,必ずしも万能なわけではない。
例えば,木構造を辿って処理するようなコードを書いていたりする場合に,木構造の偏りによって並列化が期待したほど効かないということがある。そもそも木構造を処理するのは別の方法のほうがよいかもしれないが。
確認のためのコードは以下。タスクを二重配列で持っていて,これをStreamで処理することを考える。
“`
package parallel;import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ForkJ
Glide4系のDiskCacheについて
ギガを食うのを改善したいとの要望がありGlideのDiskCacheを調査したときのログ
## TL;DL
– /data/data/app_dir/image_manager_disk_cacheに保存される
– キャッシュアルゴリズムはLRU(Least Recently Used)
– キャッシュ容量はデフォルトで250MB(250*1024*1024)## キャッシュの保存場所や容量について
#### デフォルトはinternalなimage_manager_disc_cacheディレクトリに容量250MBまで保存可
#### これらはGlideModuleを定義すれば変更可“`example.java
@GlideModule
public class YourAppGlideModule extends AppGlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
builder.setDiskCache(new Exte
Chrome + KatalonRecorder + vscode + Katalium でUIテストの自動化を体験してみた
# なんでやってみたのか
業務で、同一ファイルの複数回ダウンロードを検証する必要が発生した。
簡単な準備で検証できないかと考え、UIテスト自動化ツールが使えないかと考えた。
KatalonRecorderを以前に聞いたことがあったので、試してみた。# サマリ
KatalonRecorderとVSCodeのExtensionを組み合わせることで、複数回のファイルダウンロードのテストは実現できた。
※Extensionのサンプルプロジェクトと、その中のWebDriver(Chrome)を利用。– KatalonRecorderで1回ダウンロードをRecorde
– KatalonRecorderでRecordeしたシナリオをJavaでExport
– VSCodeの公式Extensionを利用し、ExportしたJavaをサンプルプロジェクトに取り込み
– ファイルダウンロードを待つためにSleepを追加
– 繰り返し処理を追加# 動作確認環境
– macOS Catalina 10.15
– java 1.8.0_202
– nginx 1.13.10
– chrome (2
Java 1 1 support from Google App Engine
Google’s App Engine cloud has added official support for Java 11, the latest long-term support (LTS) version of the Java language platform, as a production release.
The App Engine Standard Environment Java 11 runtime is generally available for running any Java 11 application, web framework, or service in a managed serverless environment. Java 11 had been offered on App Engine in a beta release since June.
The Java 11 runtime on App Engine offers twice the amount of memory as the earlier Java 8 r
forの書き換えなんだろと理解しているStreamAPIを少し深堀する。
JavaのStreamAPIを書きながら、そういえばこれってどういことなんだと
自分が疑問に思っていたことについて少しまとめてみました。
StreamAPIのtips集ではないので、そういうの期待されて記事を覗いた方は申し訳ありません。# この記事の概要
この記事を読めばこの要素について、ちょっと理解できる。
– 関数型インターフェース
– 中間処理と終端処理# この記事の目指すところ
なんとなく理解しているStreamAPIの文法的な要素を覚える。# そもそもStreamAPIの書き方って、どんなのだっけ。
1~10の偶数のみを表示するといった処理の場合のStreamAPIの書き方は下記のような形です。“`java
Arrays.stream(new int[]{1,2,3,4,5,6,7,8,9,10})
.filter( i -> (i % 2) == 0 )
.forEach( i -> System.out.println(i));
“`
(IntStream.rangeを使ったカッコいい形もありますが、そこは置いといて、、、)
ちなみ
ArrayList配列でwhileによる繰り返し処理でIteratorで全部表示する
#ArraylistをIteratorで全件表示する方法
“`java
//Listの宣言
Listfruits =new ArrayList<>(); fruits.add(“リンゴ”);
fruits.add(“スイカ”);
fruits.add(“ナシ”);
fruits.add(“バナナ”);//Iterator
の宣言
Iteratorit2= fruits.iterator(); //hasNextを使用して値がある場合はループを継続する
while(it2.hasNext()){
//nextを使用して値を取得する
String nation = it2.next();
System.out.println(nation);
}
“`
Spring Boot でテーブルのデータをビューに出力するまでの流れ
## 事前に必要なこと
・DBへの接続設定を行う## 大まかな流れ
Usersテーブルからデータを取得し、表示するという設定です。1. エンティティを作成する
2. リポジトリを作成する
3. コントローラを作成する
4. ビューを作成する## エンティティを作成する
Usersテーブルのデータを取得した値を保存するのに利用する。“`com.example.entities.UsersEntity.java
@Entity
@table(name=”Users”)
public class UsersEntity{
@Id
private Integer id;
private String name;public Integer getId(){
return id;
}public String getName(){
return name;
}
}
“`## リポジトリを作成する
リポジトリはDBとデータのやり取りを行う。“`com.example.repositories.UsersReposi
SolrJ で JSON をインポートする
#課題
SolrJ ではドキュメントをインポートするのに「SolrInputDocument」クラスを使うことになっていますが、JSONからSolrInputDocumentに変換する機能は提供されていないようなので作りました。
フィールドのタイプをプロパティで指定できるようにしてあります。#Code
“`java
import java.io.IOException;
import java.util.Properties;import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrInputDocument;impo
GCPのjavaクライアントライブラリからStackdriver loggingにエラーを投げてもStackdriver ErrorReportingには入らない
# 超概要
stackdriver loggingのJavaクライアントライブラリからLogbackを使って利用する場合にはErrorをLogに送っても、Stackdriver ErrorReportingの方にはそのまま入らない。(題名通り
通常はStackdriver loggingにError以上のLogを入れるとErrorReportingの方にも入るのだが(それから通知などに使える)
Javaクライントライブラリ(Logback使用)の場合はどうやっても入らなかった。
これにハマって色々と調べるとなかなかつらいことが判明。## 経緯
時代にさかのぼってる感ありだが、最近Java(正確にはKotlin)で動くデスクトップアプリを制作している。
各ユーザーさんの環境で動くアプリケーションがどのようなエラーを吐いているかを見たいので、クラウドのロギングサービスを導入しようと思った。
ちょうどGCPを色々と試していた&Stackdriver ErrorReportingはJavaで使ったことあったので、Stackdriver loggingを使うことにした。## Stackd
【java】if文でString型の条件文が無視される
#javaでif(string == “test_string”)を使っているあなた.
“`java
String string = “test_string”;if(string==”test_string”){
System.out.println(“SUCCESS”);
}
“`このようなString型の条件文にうまく入れないことがあります.
そんなあなたに朗報です.
“`java
String string = “test_string”;if(string.equals(“test_string”)){
System.out.println(“SUCCESS”);
}
“`こちらを使えば入れます.
equalsメソッドの詳しい解説は[こちら](https://engineer-club.jp/java-equals)を参照してみてください!
SolrJ でドキュメントをインポートする
# Code
“`java
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrInputDocument;public class HelloDocumentAdd2 {
public static void main(String[] args) throws SolrServerException, IOException {
St
【Android】音量変更(=音量ボタン押下)の検出方法
昔からあるレガシーな方法ですが、ググって出てくる情報が少し実用性には欠けるため、書いておきます。
## 手法
音量変更もしくは音量ボタンが押された事を検出するIntentとして、AudioManager.VOLUME_CHANGED_ACTION (android.media.VOLUME_CHANGED_ACTION)があります。これをBroadcastReceiverで受ければ良いだけです。ここまではググってすぐに出てくる情報ですが、AudioManager.VOLUME_CHANGED_ACTIONは以下の点に注意する必要があります。
– 一度の音量変更操作で複数のイベントが通知される
– AudioManager.STREAM_MUSICなどSTREAM毎に通知され、しかも音量変わって無くても通知される
– 画面ON中の初回ボタン操作時は音量UI表示され、実際には音量が変わらないためにイベント通知されない
– 画面OFF中は音楽アプリ等で音楽再生していないと、ボタン押してもイベント通知されない
– ボリュームが変わらないため## ソースコード
“
JScrollBarで自動スクロールしようとしたらイベントハンドラの描画が1度だけだった件
詰まって数時間が吹き飛ばされたので、メモ代わりに。Swingを使っている人ならだれでも一度は通る失敗(らしい)。
##どんなのをつくっていたか
Javaで自作シェルっぽいものを作ろうとしていて、JScrollPaneを自動スクロールさせようとしていた。調べながら書いたソースコードがこれ。“`Java:MyShell.java
class MyShell extends JFrame implements ActionListener{
MyShell{
//(中略)
String now = new File(“.”).getAbsoluteFile().getParent().toLowerCase();//カレントディレクトリJTextField text = new JTextField();//入力エリア
text.addActionListener( this );
JTextArea area = new JTextArea(now+”->”);//表示エリア
JScrollPane scrollpane =