- 1. Javaを使用してExcel画像を追加、読み取り、削除する方法
- 2. CVE-2021-44228 の Log4j 1.x への影響を調査しました
- 3. Gradleでコンパイル警告を100件より多く表示する
- 4. AtCoder Beginner Contest 008をやった(Java)
- 5. Spring Bootを使ったWebアプリケーションのテンプレートを社内OSSとして開発・メンテナンス
- 6. 業務システムの画面仕様をコードベースで書けるようにして開発者体験を爆上げした話
- 7. JavaGold一夜漬けチャレンジ
- 8. 今ホットなLog4j脆弱性対応をきっかけにJava版LambdaをDocker版Lambdaへ急遽構成変更した2021年の末
- 9. Javaでヒープサイズ測定 JUnit5編
- 10. Java Silver SE11 1章
- 11. Javaで使用すべきでないモジュール
- 12. JavaでABC232(C問題まで)
- 13. ICU4Jでカタカナをヘボン式ローマ字に変換する
- 14. ICU4Jで利用可能なID一覧を取得する
- 15. 集計したらマイナス21億になった件
- 16. Javaを使用してExcelテキストボックスの追加、読み取り、削除する方法
- 17. Javaで5のつく日曜日を出力するプログラム
- 18. gradleビルド接続中にエラーが発生したため…の解決法
- 19. [Spring]OpenFeignを使って外部API連携
- 20. log4shellスキャン
Javaを使用してExcel画像を追加、読み取り、削除する方法
##背景
この記事では、JavaプログラムでExcelテーブルに画像を追加する方法を紹介します。画像を追加するときは、画像のサイズ、位置、回転、ハイパーリンク、オプションのテキストなどを設定できます。また、エクセルテーブル。ツール:無料のSpire.XLS for Java(無料版)
注:パッケージを公式Webサイトから**[ダウンロード](https://www.e-iceblue.com/Download/xls-for-java-free.html)**して解凍し、libフォルダー内のjarファイルをjavaプログラムにインポートするか、Mavenウェアハウスからダウンロードしてインポートすることができます。**Jarのインポート効果:**
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/e8026e17-bdfe-5a71-db85-84d8c73f1ca6.png)##Javaコード一覧
###画像を追加する
“`
import com.spire.xls.
CVE-2021-44228 の Log4j 1.x への影響を調査しました
[Apache Log4j Security Vulnerabilities](https://logging.apache.org/log4j/2.x/security.html) で [CVE-2021-44228](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228) の Log4j 1.x への影響について追記がありました。脆弱性の影響があるかどうかの確認方法を調査したので、参考情報として掲載します。
Apache Log4j 公式サイトには、次の通り記載されています。
> Log4j 1.x does not have Lookups so the risk is lower. Applications using Log4j 1.x are only vulnerable to this attack when they use JNDI in their configuration. A separate CVE (CVE-2021-4104) has been filed for this vu
Gradleでコンパイル警告を100件より多く表示する
### 背景
コンパイル警告があまりに多いプロジェクトだと、最初の100件までしか警告内容が出力されない。そもそもコンパイル警告が多い状態で放置していること自体が問題だが、途中で省略させずにすべてを確認したいこともある。
“`
$ ./gradlew clean build
Starting a Gradle Daemon (subsequent builds will be faster)
…
ノート:一部の入力ファイルは推奨されないAPIを追加使用またはオーバーライドしています。
ノート:入力ファイルの操作のうち、未チェックまたは安全ではないものがあります。
ノート:詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください。
警告100個
“`### 対応方法
`-Xmaxwarns` の値としてすごく大きな値を指定してやることで回避することができる。
“`gradle
compileJava {
sourceCompatibility = 17
targetCompatibility = 1
AtCoder Beginner Contest 008をやった(Java)
AtCoder Beginner Contest 008をやった。
##[A](https://atcoder.jp/contests/abc008/tasks/abc008_1)
差分を出してあげて、ひと工夫すれば終わります。“`Java
import java.util.*;public class Main {
public static void main(String[] args) throws Exception {
// Your code here!
Scanner scan = new Scanner(System.in);int num1 = scan.nextInt();
int num2 = scan.nextInt();
System.out.println((num2 – num1) + 1);}
}
“`##[B](https://atcoder.jp/contests/abc008/tasks/abc008_2)
重
Spring Bootを使ったWebアプリケーションのテンプレートを社内OSSとして開発・メンテナンス
# 概要
筆者は、Java向けOSSであるSpring Bootを使ったWebアプリケーションのテンプレートプロジェクト(以下、「本テンプレート」と記します)を、日立ソリューションズ内のOSSとして2年半開発・メンテナンスしてきました。
本テンプレートを開発するにあたって、社内ニーズ・メンテナンスコストの低減・ノウハウの実装と展開を実現するためにさまざまなツールを利用し、実装を行いました。本記事では本テンプレートにて実装している内容と各種ツールの活用方法を記します。
# 動機
2年半前、筆者は全社に対してソフトウェア技術の知見の収集と伝達を行う部署に所属していました。特に、社内でもニーズが高かったJavaによるWebアプリケーションの開発について知見を収集・伝達を行うことが主な業務でした。
その業務を通して、社内からお話を伺っていると、以下のようなご意見・ご要望を頂くことが多くありました。– Javaを使ったWebアプリケーションを開発したいが、数あるOSSのから何を選べばよいか分からない
– [The Twelve-Factor App](https://12factor
業務システムの画面仕様をコードベースで書けるようにして開発者体験を爆上げした話
# はじめに
* 業務システムの要件定義をする際に、開発者体験を向上させる取り組みとして「Javaのコードで定義し、画面仕様(画面モック)とソースコードのひな形が出力できる」というコンセプトを試したくて、実現するツールを試作しました。
* 注意点として、BtoCのような自由度の高い画面仕様を検討するものではなく、BtoBで業務でのみ利用する用途におけるシステムの画面仕様定義といったシーンに限られる感じです。過度にUI/UXを求める場合は、向いてないと思います。
* このコンセプトが開発者体験をどの程度向上されるのか、実プロジェクトに適用して検証してみた結果を報告します。# 画面仕様をコードベースで書くとは何か?
業務システムの要件定義において、重要な要素として **「画面仕様を決める」** があります。
いざ、画面仕様を書くとなるとパワーポイントで書いたり、エクセルで書いたり、最近だと、詳しくないですが、Adobe XD とかで書くのでしょうか?パワーポイントやエクセルでの限界は、差分管理(把握)やコンポーネントの再利用には難があります。一方、Adobe XD はこの点
JavaGold一夜漬けチャレンジ
## この記事について
**JavaGold取りたいな…でも試験、明日なんだよな…**
一夜漬けでも取れるのかな…って人が不安になって調べたりすること、あると思います。
私がそうでした:sweat_drops:
申込日は自分で決められるのに…24時間前までなら試験日時の変更可能なのに…**そうです。予約日時の変更が間に合うかもしれません!**
Java Programmer IIの試験日時変更は、予約した試験日時の24時間前までできますよ。
もしまだ間に合う方は予約日時を変更し、気合を入れて勉強してから受けた方が安心でしょう。この記事はもう間に合わない、あるいはOracle2回目受講無料キャンペーンなどでとりあえず受ける!
そんな方に向けて書きます。
しかしながら、当然落ちても補償はできませんので…。。**なに?再受講無料キャンペーンを知らない?**
ついでに記載します。## 再受講無料キャンペーンについて
毎年、Oracleはオラクル認定資格試験の再受講無料キャンペーンをしています。[^1]12月から始まり翌年5月いっぱい。
くわしくは[検索](https://w
今ホットなLog4j脆弱性対応をきっかけにJava版LambdaをDocker版Lambdaへ急遽構成変更した2021年の末
この記事は [マイナビ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/mynavi) の22日目の記事です。
そろそろクリスマスが近づいて参りました。
只今12月20日の23:21です。明日の昼12時までにこの記事を書き上げる必要があります。(いつもギリギリや・・)今回は、2021年末に世間を騒がせている大変ホットなLog4J脆弱性対応をきっかけに、今更ながらDocker版Lambdaを試してみた!という記事を書こうと思います。
実は他のネタを書こうと思っていたのですが、Log4j脆弱性関連の対応により、こんなタイミングで平日だけでなく土日も溶かしてしまったためLog4J対応しか用意できる記事がないや!ってこととなりこのネタにしました!!わーいわーい :laughing:
# お話の概要
– 技術キーワード
– aws lambda(Java)
– aws lambda(Docker)
– 脆弱性発覚からLambdaのDocker化までの流れ
– Log4j脆弱性により、本L
Javaでヒープサイズ測定 JUnit5編
[Javaのカレンダー | Advent Calendar 2021](https://qiita.com/advent-calendar/2021/java)の13日目の記事です
# 概要
Javaの単体テストでヒープ(メモリ)を簡単に測定したいときに使える方法
## 参考
– [quick-perf/quickperf: QuickPerf is a testing library for Java to quickly evaluate and improve some performance-related properties](https://github.com/quick-perf/quickperf)
– [Quickly remove some big performance bottlenecks with QuickPerf by Jean Bisutti](https://www.youtube.com/watch?v=cEkoJL09kKI)# やり方
正直、以下のページを見たまんま
[JUnit 5・quick-perf / doc Wik
Java Silver SE11 1章
# Java Silver SE11 1章
[黒本](https://www.amazon.co.jp/gp/product/4295007625/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1)をもとに学んだことをアウトプットしていきます。
主に問題を解いていて、間違えた箇所もしくは知らなかった内容になります。## package
コンパイラやJVMはクラス名の重複を防ぐために、「完全修飾クラス名」で取り扱う。
(名前空間を提供する)完全修飾クラス名(full qualified class name) FQCN は先頭行に記述する。
`package パッケージ名.クラス名;`* パッケージ単位でアクセス制御が可能になる
* 公開、非公開に分けることができる
* クラスは必ず何らかのパッケージに属する
* (記載がない場合、無名パッケージに属するものと解釈される)
* ソースの先頭行に記述する
* コメントは記述可能
* 無名パッケージに属するクラスは、
同じく無名パッケージに属するクラスからしかアクセスするこ
Javaで使用すべきでないモジュール
Javaではエラーも出ずにちゃんと動作するが、パフォーマンスやセキュリティの観点から使用すべきでないモジュールが存在します。
今回は非推奨のモジュールとそれに代わるものを紹介します。## java.util.Date/java.util.Calendar
Java8以降、java.util.Dateとjava.util.Calendarの使用は非推奨となっています。
代わりに、java.time.LocalDateやjava.time.LocalDateTimeなどを利用すべきです。## SimpleDateFormat
SimpleDateFormatはnewでインスタンス化が必要。また、スレッドセーフではありません。
代わりに、DateTimeFormatterの利用が推奨されます。## 繰り返し処理中の+演算子による文字列連結
繰り返し処理の中ではStringBuilderを利用して文字列を連結するべきです。
+演算子による連結と比べると、連結回数が多い程、StringBuilderのほうが処理が早くパフォーマンスが良いので、
こちらを利用するべきです。
JavaでABC232(C問題まで)
ABC232の問題を解いたので、解き方とコードを投稿します。
使用言語はJavaです。# A問題(QQ solver)
https://atcoder.jp/contests/abc232/tasks/abc232_a#### 方針
文字列の先頭と末尾の文字を取り出して、それぞれ数値に変換してから計算します。#### コード
標準入力と出力は以下の記事を参考にしています。https://qiita.com/p_shiki37/items/a0f6aac33bf60f5f65e4
“`Main.java
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.NoSuchElementException;public class Main {
public static void main(String[]
ICU4Jでカタカナをヘボン式ローマ字に変換する
“`groovy:build.gradle
implementation ‘com.ibm.icu:icu4j:70.1’
“`“`java
import com.ibm.icu.text.Transliterator;public class KatakanaToHepburn{
public static void main(String[] args) {
Transliterator latin = Transliterator.getInstance(“Katakana-Latin”);
Transliterator hepburn = Transliterator.getInstance(“Katakana-Latin/BGN”);System.out.println(latin.transform(“トウキョウ”));
System.out.println(hepburn.transform(“トウキョウ”));System.out.println(latin.transform(“シンバシ”));
ICU4Jで利用可能なID一覧を取得する
ICU4J https://unicode-org.github.io/icu/userguide/icu4j/ の “`Transliterator.getInstance(“id”)“` で指定可能なIDの一覧を取得する。
“`groovy:build.gradle
implementation ‘com.ibm.icu:icu4j:70.1’
“`“`java
import java.util.Enumeration;import com.ibm.icu.text.Transliterator;
public class PrintAvailableIDs {
public static void main(String[] args) {
Enumerationids = Transliterator.getAvailableIDs();
while (ids.hasMoreElements()) {
System.out.println(ids.nextElement());
}
}
}
集計したらマイナス21億になった件
# 何があった
大規模な給与計算システムで給与計算処理を実行したら、総支出額がマイナス21億円で出てきました。
# どうしてそうなった
桁溢れしてました。
4バイトの符号ありint型だと最大の正の数値は2,147,483,647で、それに1を加えると最小のマイナス値-2,147,483,648になります。
“`example.java
int i = 2147483647;
System.out.println(“before i=” + i); // before i=2147483647i += 1;
System.out.println(“after i=” + i); // after i=-2147483648
“`4バイトでの2進数の計算式を表すと
01111111111111111111111111111111 + 1 = 10000000000000000000000000000000
↓
2147483647 + 1 = -2147483648# どうすればよかった
集計した結果は思わぬ大きい値になるので、変数の型やD
Javaを使用してExcelテキストボックスの追加、読み取り、削除する方法
この記事では、Javaプログラムを使用してExcelにテキストボックスを追加する方法を紹介します。テキストボックスを追加する時、テキストの追加、テキストの方向の設定、テキストの配置、テキストボックスのサイズ、位置、塗りつぶしの色/塗りつぶしの画像、テキストボックスを設定できます。回転角度、テキストボックス名、選択可能なテキスト、テキストボックスの非表示または表示、およびその他の操作も全てできます。
既存のテキストボックスの場合、テキストボックス内のテキストの読み取り、色の塗りつぶし、画像の塗りつぶし、テキストボックス名、不要なテキストボックスの削除などを行うことができます。以下は、例を通して特定の実装方法を示します。使用ツール:Free Spire.XLS for Java(無料版)
Jarの取得とインポート:公式Webサイトからパッケージを**[ダウンロード](https://www.e-iceblue.com/Download/xls-for-java-free.html)**し、libフォルダーの下のjarを解凍してjavaプログラムにインポートします。インポートの効果は、次
Javaで5のつく日曜日を出力するプログラム
コードを書く練習として作ってみました。
Yahoo!ショッピングにて「5のつく日」と「毎週日曜日」はそれぞれ個別のキャンペーンで、「5のつく日曜日」はその2つが重なるダブルポイントアップデーです。こちらは現在の日付から1ずつ日付を加算していき、
次の5のつく日曜日が出力されていくプログラムです。**プログラム要件**
* endと入力されるまで無限ループ
* Enterキーを押すと1つずつ次の5のつく日曜日の年月日が表示される“`java
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;public class Main {
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);
Date date = new Date();
Date d = null;
int w
gradleビルド接続中にエラーが発生したため…の解決法
# 記事を見つけてほしい人
EclipseでGradleプロジェクトをインポートしようとした際に、普段なら上手くインポートできるのにたまに表題のエラー文にぶち当たる人。# どうすれば良いか
`.gradle` フォルダ内の `daemon` フォルダ内のファイルやフォルダを削除する。以上です。
[Spring]OpenFeignを使って外部API連携
# OpenFeignとは
RESTクライアントを簡単に作るためのフレームワークです
> 宣言的な REST クライアント: Feign は、JAX-RS または Spring MVC アノテーションで装飾されたインターフェースの動的実装を作成しますhttps://spring.pleiades.io/projects/spring-cloud-openfeign
# 使い方
## 環境
Java11
Spring 2.6.1## OpenFeignのインストール
dependenciesに下記を追加します“`build.gradel
dependencies {
// feign(HttpClient)
implementation(“org.springframework.cloud:spring-cloud-starter-openfeign:3.1.0”)
implementation(“io.github.openfeign:feign-okhttp:11.7”)
implementation(“io.github.openfe
log4shellスキャン
log4jの検出を支援するため、無料ティアのスキャン回数を2倍に増やしました。
https://snyk.io/blog/snyk-fix-log4shell-extended-free-scans/