- 1. jarファイルに画像リソースを含める
- 2. [Android]端末からサーバへ画像のアップロード
- 3. バッチファイル入門(for文、配列、遅延環境変数)
- 4. VSCodeでLombok
- 5. Cassandra×SpringBoot 奮闘記録
- 6. [Java] GlassFish 5トラブルシュート記録
- 7. SpringBoot で起動引数による環境切替を行う
- 8. GradleプラグインのSpotlessでGoogle Java style guideを適用する
- 9. 【#1】PythonでMinecraftを作る。~下調べと設計~
- 10. 良いコードの書き方
- 11. Twitter4Jの使いかた
- 12. 新卒1年目でJavaGold合格できたので勉強法について語っていく
- 13. クラス、メソッドの呼び出し方
- 14. spring-bootでリソースファイルを外出しする方法
- 15. 何でも言うことを聞いてくれるアカネチャン
- 16. VM引数を変更しつつマイクロベンチマークする方法
- 17. apkからjavaファイル生成(BytecodeViewer式)
- 18. javaでAtCoder Beginner Contest 152を解く
- 19. Javaで実行しているディレクトリの絶対パスを取得する方法
- 20. 【Java】多重forループを一重にする方法
jarファイルに画像リソースを含める
## IntelliJからjarファイルを出力すると、画像が表示されなくなる問題
Swingを用いたGUIツールを作製したとき、IntelliJ上で実行した場合は画像ファイルがきちんと表示されるが、jarファイルとして出力すると画像ファイルうまく表示できなくなるという問題に直面した。
ググったところ、よく知られた現象らしく、解決策もすぐに出てきた。以下はその解決策を自分用のメモとしてまとめたものである。## 状況説明
JavaのGUIツールキットであるSwingを練習するため、砂時計アイコンが表示されるだけの簡単なプログラムを作製していた。
![スクリーンショット 2020-01-22 10.42.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329378/cac66c4d-1e5d-879f-87a8-29d9f3e86279.png)
こんなのアイコンはhourglass.pngファイルという名前で、srcフォルダ直下に保存した。また、アイコンファイルの読み込みは以下のように記した。
[Android]端末からサーバへ画像のアップロード
##はじめに
Androidで画像をPOSTし、サーバに保存する機能でてこずったため自分の備忘録兼、アウトプットとして書きます。プログラムのお仕事半年もしてないからいろいろおかしいかもしれないけど許してね。
##環境
AndroidStudioでOkHttpを利用しています。
##OkHttp導入
* AndroidStudio画面左上の「Android」を「プロジェクト」に切り替え。
* [app]内のbuild.gradleを開く。
* dependencies内に
“`
implementation ‘com.squareup.okhttp:okhttp:2.7.5’
“`を追記。(2.7.5はvarsionによって変えてください。)“`gradle:build.gradle
//~~省略~~
dependencies{
//~~省略~~
implementation ‘com.squareup.okhttp:okhttp:2.7.5’//追記
}
“`
完了。##AsyncTask
Http通信で送るので非同期で行う。“`java:OkHttpTa
バッチファイル入門(for文、配列、遅延環境変数)
# 動機
「○○系の機能の呼び出し元を知りたいから、一覧化して」
と言われて数えてみたら* ○○系の機能は150弱
* Javaファイルは15000個あったので、IDE使って150回検索するのも辛そうだったのでバッチファイルで何とかしてみた。
何故bashじゃないのかとか何故そんなことしないといけないのかは聞かないでほしい。# 作った `bat` ファイルと実行結果
“`grepCallHierarchy.bat
@echo offsetlocal enabledelayedexpansion
set i=1
for /f %%a in (targetList.txt) do (
echo !i! %%a
call set Arr[!i!]=%%a
set /a i+=1
)pause
for /r %%a in (*.java) do (
for /f “tokens=1,2,3 delims= ” %%b in (%%a) do (
for /l %%j in (1,1,148) do (
if !Arr[%%j]!==
VSCodeでLombok
#何の記事?
VS CodeでSpring Bootアプリケーション作成時、Lombokが仕事を放棄しているのではと感じたときのこと。#どんな状態?
DTOやEntityに「`@Data`」をつけても`getter`,`setter`でコンパイルエラーになるし、補完にも出てこない。#結論
放棄していない。VS CodeでLombokを使用するにはSpring Bootの依存関係だけでなく、拡張を入れてあげる必要があるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287607/7d59e9f3-fd3d-8a4e-4aa5-56841f5f5e04.png)
これをインストールするとVS Codeの再起動が求められます。
再起動し、ビルドが完了するとコンパイルエラーが消えています。あともちろん補完にも出るようになります。
Cassandra×SpringBoot 奮闘記録
# この記事の概要
– Cassandraに触れたことがなかったので、構築〜SpringBootのアプリケーションから参照・更新をすることろまでをやってみたときの記録
– 環境はローカルPC(Mac)# 参考
Cassandra: http://cassandra.apache.org/doc/latest/
SpringDataCassandra: https://spring.io/projects/spring-data-cassandra# Cassandraの構築
インストール
“`bash
# Cassandra本体
brew install cassandra
# CQL(Cassandra Query Language)
brew install cql
“`起動
“`bash
cassandra -f
“`> Connection error: (‘Unable to connect to any servers’, {‘127.0.0.1’: error(61, “Tried connecting to [(‘127.0.0.1’, 9
[Java] GlassFish 5トラブルシュート記録
GlassFish 5を動かそうとして、意外にすんなりいかなかったのでトラブルシュートの記録です。
# 環境
OS: Azure上のWindows Server 2008 R2
JDK: Zulu# トラブルシュート記録
## [解決] `asadmin`コマンドを実行するとNullPointerException
JDK 11 (Zulu 11.31.11)ではだめでした。
JDK 8 (Zulu 8.44.0.9)を使うとOKでした。## [解決] `asadmin start-domain`するとNoClassDefFoundError例外
`asadmin start-domain`とすると、こんなエラーになりました。
“`
Exception in thread “main” MultiException stack 1 of 2
java.lang.NoClassDefFoundError: com/sun/enterprise/admin/launcher/GFLauncherException
at java.lang.Class.
SpringBoot で起動引数による環境切替を行う
## はじめに
SpringBoot でバックエンドを開発しているときにある話。
昨今、Dockerが出てきてから結合から本番までワンモジュール、ワンソースで最後まで管理する傾向にある。
各環境の区別は、環境引数を外から渡すだけ、という設計方針にした際に、
では、中身のSpringBootで作ったアプリケーションのモジュールはどういう風にすればよいのかをまとめる## 環境の数が少ないなら
#### SpringBootのProfileで切替すればよい。
下記に公式情報があるため、こちらで実現できます。
[公式](https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-profiles)起動引数に下記を含めれば、
“`-Dspring.profiles.active=dev1
“`
下記ファイルが読み込まれる仕様である。
“`src/main/resource/application-dev1.properti
GradleプラグインのSpotlessでGoogle Java style guideを適用する
Google Java style guideをgradleを使って導入してみました。
**ただしインデントの空白文字数は2文字ではなく4文字!!!!**
## Spltlessを使う
gradleのプラグインでGoogle Java styleを導入する場合、以下のものが便利そうでした。
[spotless/plugin-gradle at master · diffplug/spotless · GitHub](https://github.com/diffplug/spotless/tree/master/plugin-gradle#applying-to-java-source-google-java-format)## 適用する
さっそくgradleを書いて、プラグインを適用します。
インデントは4文字の空白文字にしたいので、設定を上書きします。“`groovy
plugins {
id “com.diffplug.gradle.spotless” version “3.27.1”
}spotless {
java {
goo
【#1】PythonでMinecraftを作る。~下調べと設計~
Part of pictures, articles, images on this page are copyrighted by Mojang AB.
![minecraft.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535270/4c03684c-1ee7-4b2f-01b7-92836d12a930.png)
#概要
世界的に超有名なサンドボックスゲーム「Minecraft」をプログラミング言語「Python」で再現するプロジェクトです。##きっかけ
僕がプログラミングに初めて触れたのは、「Minecraft」がきっかけでした。4年以上前の事です。
Minecraftにおける「MOD」と呼ばれる所謂改造コンテンツに興味があり、「自分でも作ってみたい!」とプログラミングの世界に足を踏み入れました。
総プレイ時間は数万時間を超えており、色々と思い出深いゲームの一つです。小学校低学年の頃からウェブサイトを制作したりと、多少はクリエ
良いコードの書き方
# 概要
チームによる継続的開発を前提としたコーディングのガイドライン。
特定の言語を対象としたものではないが、主に静的型付けのオブジェクト指向言語を想定している。
サンプルコードは別段の定めがなければSwiftで記載。### ガイドラインの目的
– 生産性を高め、メンテナンスコストを下げる
– バグが生まれづらくする
– 開発メンバー(特に新規参加者)がコードを理解しやすくする
– 初心者プログラマーの教育### 内容の説明
タイトルの頭についた【:star:数字】は重要度。
高いほどシステムに与える影響が大きいが、低いものの方が影響が小さく改修しやすいものが多い。—
# 【:star:5】変数を少なくする
変わり得る値は複雑さを生み誤解やバグに繋がるため、プログラムは変数が少ないほど問題が生まれづらい。
プログラミングの大原則として、変数は必要最低限を心がけ、むやみに増やさないようにする。また、変数はスコープや寿命が大きいほど悪影響が大きいため、変数を使う場合はスコープと寿命を最小にするよう心がける。
基本的には以下の上のもの程スコープが広くなるので使用
Twitter4Jの使いかた
Twitter4Jを使ってみました。
流れは、
アカウント申請をする。3~4時間で許可出ます。(Botにするとか、簡単なものに使うとすれば。)
アクセスtokenをメモする。
mavenのpom.xmlにTwitter4Jに必要なビルドを統合する。
Javaでコード書いて、メモしたtokenを入力する。
実行してタイムラインを確認する。です!
コードやmavenの設定はGithubのreadme.mdにあります。
詳しくは[Github](https://github.com/hatsuki0111/Twitter4J)にあげています。
新卒1年目でJavaGold合格できたので勉強法について語っていく
#はじめに
Javaの資格で最も難しい試験は?
と聞かれた時に**JavaGold**と答えるエンジニアは多いと思います。その最難関の資格であるJavaGoldを**1年目で合格できました**ので、
– 勉強内容
– 1年目で合格できてどうだったかについてお話したいと思います。
#勉強開始時のスペック
###業務経験
– 新卒1年目(学生時代は文系でプログラミングとは無縁)
– 3ヶ月間の研修(Java/SQL/JDBC/Servlet/JSPなど)を経て、Javaの案件に配属
→ただし、当時コードを書くことは殆ど無かった###保有資格
– 基本情報技術者(1年目の4月に受験し合格)
– JavaSilver(1年目の8月に受験し合格)####合格体験記は以下参照
– 基本情報技術者:[【未経験】基本情報技術者試験に合格できる勉強法【合格体験記】]
(https://qiita.com/ebichan_88/items/8409c9b99bf5a2977cc7)
– JavaSilver:[【JavaSilver】Java SE8 Silverに合格した勉強
クラス、メソッドの呼び出し方
###Foodクラスのfruitsメソッド(Food.java)
“`Food.java
public class Food {
// 以下のメソッドすべてを、Personクラスに移動してくださいpublic static String fruits(String fruitsName) {
return fruitName;
}
“`###Mainクラスのmainメソッド(main.java)
Food.java内にあるFoodクラスのfruitsメソッドを呼び出し。“`Main.java
public class Main {
public static void main(String[] args) {Food.printData(Food.fruits(“apple”));
Food.printData(Food.fruits(“straeberry”, “Smith”), 65, 1.75, 80.0);
}
}
“`別のクラスのメソッドを呼び出すときは、クラス名、メソッド名の前にそれぞれ、呼び
spring-bootでリソースファイルを外出しする方法
解決したいことはタイトル通りです。spring-boot では、DB接続情報などを src/main/resources 配下の application.properties に書くことが多いですが、このファイルを外部に置いて、コンパイル時とは別の定義で動作させる方法説明をします。
以前、[『Mavenを使ってリソースファイルをJARの外部に配置する方法』](https://qiita.com/greencoffeemaker/items/18b5bb938dbc5a4e21c0)というのを投稿しましたが、それの spring-boot 版です。# 解決方法
spring-boot では実に簡単です。外部に配置したいリソースファイル(application.properties等)を別フォルダに配置して、実行時のクラスパスとして指定するだけです。つまり、my-java-app.jar を実行するとして、external_resource フォルダの application.properties を読み込みたい場合、external_resource フォルダを実行時クラスパス
何でも言うことを聞いてくれるアカネチャン
# 聞いてよアカネチャン!
[俺] 良いこと思いつきました!
[ア] なんや?
[俺] 俺, アカネチャンの列挙型をつくります!
[ア] あ ほ く さ
[俺] …
[俺] ええええええええええええええええええ(ry※[元ネタはこちら](https://www.youtube.com/watch?v=OVuYIMa5XBw) – 何でも言うことを聞いてくれるアカネチャン
# キッカケは友人との会話
その場のノリで話してただけなので,詳しい経緯なんてものは覚えていません.とりあえず『何でも言うことを聞いてくれるアカネチャンの返事はboolean型みたい』みたいな話をしたんだと思います.
理想は
“`java
if (Seyana) {
System.out.println(“True!!”)
}
“`ですが,Seyanaをboolean型の代わりとして直接使うことはできないので,できる範囲でやってみました.お遊びです,何のメリットもありません.
# 作るよアカネチャン!
## アカネチャンのセリフ
アカネチャンのセリフは採用したもの以外は受け付けたくな
VM引数を変更しつつマイクロベンチマークする方法
VM引数を変更しながら、マイクロベンチマークを取りたいケースってあると思うのですが、
JITコンパイラに影響のある引数の場合、ただプログラムを実行して時間を計測するのみでは
うまくその影響を測れません。なぜなら、プログラムの実行中にVMが判断したタイミングでJITコンパイラが走りコードが最適化されるので、どの程度そのVM引数の変更の効果があったのか測れないからです。# JMH の利用
このようなケースでは、ベンチマークツールである JMH を使用するのが便利です。
JMH の使用方法についてはこちらのの[記事](https://www.codeflow.site/ja/article/java__java-jmh-benchmark-tutorial)で説明されていますので、以降では、JMHでのベンチマークの際にVM引数を指定する方法を説明します。# VM引数の指定方法
以下のようにベンチマークを行うメソッドにForkアノテーションを付与し、JvmArgsAppend属性を利用することによってVM引数を指定することができます。
この例では、「-XX:-Inline」を指定てい
apkからjavaファイル生成(BytecodeViewer式)
dex2jarでは精度がいまいちだったので精度の良かった物を紹介します
# Bytecode Viewer
https://bytecodeviewer.com/dex2jarの代わり。
GUI操作です。JD-GUIのような類ですね。
普通に便利です。apkやdex、jar、zip、classがデコンパイルできます。
デコンパイル後は好きなデコンパイラーで見れます。
apkから出たclassの保存とか、デコンパイラーでデコンパイルしたjavaの出力とか出来ます。
ただjavaへの出力は不安定です。
これをダウンロードして起動すすると「Drag class/jar/APK/DEX here」と書いてあるところがあるのでそこに.apkをドラッグ・アンド・ドロップしてください。
そしたら処理が終わると完成品が出てくるのでFile->Save As Zipからzipで保存してください。# Procyon
https://bitbucket.org/mstrobel/procyon/wiki/Java%20DecompilerBytecode Viewer内臓のデコンパイラーですね
javaでAtCoder Beginner Contest 152を解く
AtCoder Beginner Contest 152お疲れ様でした!
[公式ページ](https://atcoder.jp/contests/abc152)今回の自分の書いたコードは[こちら](https://github.com/ko-flavor/atcoder-java/tree/master/atcoder/src/abc/abc152)
結果はA-DまでAC、EがWAでした。以下簡単に解説します。
##[問題A](https://atcoder.jp/contests/abc152/tasks/abc152_a)
引数のNとMを比較する問題。
同じ場合は`Yes`、違う場合は`No`を出力すればOK##[問題B](https://atcoder.jp/contests/abc152/tasks/abc152_b)
aをb回繰り返した文字列とbをa回繰り返した文字列のどちらが**辞書順**ではやいかを出力する問題。
辞書順なので、aとbのうち小さいほうが先です。aとbの小さい方をaとbの大きい方ぶん繰り返した文字列を出力できたらACです。
##[問題
Javaで実行しているディレクトリの絶対パスを取得する方法
##はじめに
Qiita初投稿です。
#環境
java1.8.0_221
#やりたいこと
`C:\Users\Miyayu\IDEA\example\example.jar`を実行しているとする。
`C:\Users\Miyayu\IDEA\example`(String型)を取り出したい。
#コード
“`java
FileSystems.getDefault().getPath(“”).toAbsolutePath().toString()
“`
これだけ!かんたんでしょ?
##指定したファイルの絶対パスを知りたいときは
`.\expdir\hoge.json`の絶対パスを知りたい“`java
FileSystems.getDefault().getPath(“expdir”,”hoge.json”).toAbsolutePath().toString()
“`
【Java】多重forループを一重にする方法
**ネタです**
# はじめに
Javaに限らず,プログラムを書いていると何重ものforループを書かなければならない時が発生します.例. int型三次元配列の全ての要素を1にしたい.
“`java
final int n = 10;
final int[][][] cube = new int[n][n][n];for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { for (int k = 0; k < n; k++) { cube[i][j][k] = 1; } } } ``` しかし,このようなループはネストが深くなったり行数が無駄に増えるため,プログラムの保守性が悪化する原因となります. そこで,多重forループを一重にする方法を考えます. # forループの構文 問題を解決するために,まずはforループの構文を確認して行きます. [Eclipse JDT](https://help.eclipse.org/2019-12/index.jsp?topic=%2F