- 0.1. マインクラフトでトロッコの自動運行をする
- 0.2. STSでStarterProjectを作成しようとしたら「unsupported class file major version 61」でこけた
- 0.3. 楕円曲線暗号の鍵をJavaで読み込む
- 0.4. Javaを使った関数型プログラミング
- 0.5. Javaアクセス制御について
- 0.6. Helidon 2.4.0 で導入された OpenID Connect のログアウト機能(RP-Initiated Logout)について
- 0.7. String Boot環境構築
- 0.8. 【Android Studio】Gradleでの Jackson の追加方法(Java)
- 0.9. Retrofit+OkHttpでファイルダウンロードするAPIを呼び出す
- 0.10. 【Themeleaf初心者向け】formにおけるth:fieldの挙動まとめ
- 0.11. Retrofit+OkHttpでmultipart/form-dataなAPIの呼び出してハマった
- 0.12. FizzBuzzは無慈悲な面接の女王
- 0.13. jersey-clientでリクエスト/レスポンスのログを出す
- 0.14. JavaでABC230(B問題まで)
- 0.15. Spring BootでJSONを整形してログ出力する
- 0.16. JJUG CCC 2021 Fallに参加しました
- 0.17. EclipseでWebアプリケーションを作成する
- 1. 開発環境
- 2. プロジェクトの作成
マインクラフトでトロッコの自動運行をする
#概要
CIBPluginは、Minecraftサーバ(SpigotMCサーバー)上でトロッコの自動運行を行うプラグインです。
本記事ではCIBPluginの開発背景と技術的概要を説明し、現在の問題点とその改善案について説明する。
添付資料として、プラグインによるトロッコ走行時のYouTube動画とGitHub上のコードを提示する。#プラグインの開発背景
スタッフをしていたMinecraftサーバー内でトロッコ鉄道網を整備した人がいたが、ほとんどのプレイヤーがアイテムのトロッコを持ち歩くのが面倒で利用頻度が低かった。
トロッコの配布を駅で行うなどしてみたが補充の手間がかかり、また線路上にエンティティ化したトロッコが放置されるなどの問題が発生した。
またMinecraftのトロッコ鉄道にはつきものだが、加速用レールの効率的な配置を考えるのも手数がかかっていた。#主な解決方法
- トロッコの生成:
- 自動で線路上に配置する駅設備を用意する。
- トロッコの自動運行:
- 線路上に配置されたトロッコが自動的に発車する
STSでStarterProjectを作成しようとしたら「unsupported class file major version 61」でこけた
###「unsupported class file major version 61」ってなに?
Java17非対応だよ!と怒られている。
classファイルのversion61は、Java17を示す。### 対策方法
(プロジェクトのビルドツールがGradleなら)Gradleのバージョンを上げる必要がある。
STSの preference >> Gradle を開くと、初期状態では「Gradle Wrapper」にチェックが付いているはず。Gradle Wrapper is 何? を知りたければぐぐると色々出て来るので読みましょう。
とりあえず今すぐ動かしたいなら、「Specific Gradle version」にチェックを入れて、GradleのバージョンをJava17サポート済みのものに変更すればOK。
楕円曲線暗号の鍵をJavaで読み込む
OpenSSLで生成した楕円曲線暗号の鍵をJavaで読み込む方法。RSAはあるけど楕円曲線が無かったので。
# 手順
## OpenSSLで鍵生成
“`bat
$ openssl ecparam -genkey -name secp256r1 -out keypair.pem
$ openssl ec -in keypair.pem -outform PEM -pubout -out public.pem
$ openssl ec -in keypair.pem -outform PEM -out private2.pem
$ openssl pkcs8 -topk8 -nocrypt -in private2.pem -out private.pem
“`できたもの
– `public.pem`:公開鍵
– `private.pem`:秘密鍵(PKCS#8形式)いらないもの
– `keypair.pem`
– `private2.pem`ポイント1:`-name` で指定する楕円曲線の一覧は `openssl ecparam -list_curves` で出
Javaを使った関数型プログラミング
[Javaのカレンダー | Advent Calendar 2021](https://qiita.com/advent-calendar/2021/java)の6日目の記事です
# 概要
手続き型のこれを
“`java
@GetMapping(“/items”)
public Listget(@RequestParam(name = “name”, defaultValue = “”) String name) {
// 入力チェック
if (name.length() <= 10) { throw new IllegalArgumentException("name"); } // 商品をDBから検索 ListitemDataList = repository.findByNameLike(“%” + name + “%”);
Listresult = new ArrayList
Javaアクセス制御について
この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting)の5日目の記事です。
こんにちは、シアトルコンサルティングの小泉です。
##はじめに
今回はプログラミングを学び始めた際に苦戦したアクセス制御についてまとめました。
プログラミング初学者の方に向け作成いたしましたので、アクセス制御について知りたい方はぜひ活用してみてください。##ゴール
アクセス修飾子の役割と使用場面を理解できるようになる。## フィールドとメソッドに対するアクセス制御
Javaでは、それぞれのフィールド及びメソッドに対してアクセス制御を行うことができます。
以下の4段階からアクセス制御のレベルを選ぶような仕組みになっています。| 制限のレベル | 名称 | 指定方法 |アクセスを許可する範囲|
|:—:|:—|:—|:—|
| 制限が厳しい |private|private|自分自身のクラスのみ|
|
Helidon 2.4.0 で導入された OpenID Connect のログアウト機能(RP-Initiated Logout)について
# はじめに
こちらの記事は、[Oracle Cloud Infrastructure Advent Calendar 2021](https://qiita.com/advent-calendar/2021/oci) Day 6 の記事として書かれています。
11 月の上旬ごろ、Helidon のバージョン 2.4.0 がリリースされました。今回の記事はアップデートされた内容の中から(個人的に待望していた) OpenID Connect 1.0 のログアウト機能(RP-Initiated Logout)について解説したいと思います。# Helidon が提供していた OIDC の機能
一般的な OpenID Connect 1.0 の認可コードフローは以下のようになっています。ここで、下図の赤線・文字で表現されている箇所が Helidon の Security Provider(OIDCProvider) が提供している箇所となります。
![image01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.
String Boot環境構築
1.eclipseをインストール(Windows版のインストールをキャプチャしています)
1-1.https://mergedoc.osdn.jp/ にアクセス
1-2.Eclipse 2021をクリック(赤枠で囲っている箇所)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353455/e942feed-8715-a7e2-217e-8759729daa35.png)
1-3.Windows64bit版 Full EditionのJavaをクリック(赤枠で囲っている箇所)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353455/128b50cb-5779-4011-c301-a475a6d2e732.png)
1-4.Eclipseダウンロード(ダウンロードが開始されない場合、赤枠のリンクをクリック)
![image.png](https://qiita-image
【Android Studio】Gradleでの Jackson の追加方法(Java)
Android Studioを使用した`Jackson`の使用方法について調べたのですが、実装までに四苦八苦したので、メモを残しておきます。
#リポジトリ
`Jackson`が公開されているページです。
ページ内の取得したいバージョンの「Gradle」の部分をコピーします。
jackson-core
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core
jackson-databind
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
jackson-annotations
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations####使用するバージョンの選択
Retrofit+OkHttpでファイルダウンロードするAPIを呼び出すこの記事は[ラクスアドベントカレンダー](https://qiita.com/advent-calendar/2021/rakus)の5日目の記事です。
なぜ3日連続書くなんて宣言してしまったのか激しく後悔していますが、今日も書いていきたいと思います。
### はじめに
今日はRetrofit+OkHttpでファイルダウンロードするAPI呼び出しについて書いていきたいと思います。
検索すると古いバージョンの話やAndroidに特化した内容の記事が多くヒットしたのですが、今回紹介するのはWebサイトで同期的にAPIを呼び出す前提のやり方です。### バージョン
– retrofit:2.9.0
– okhttp:3.14.9### 実装方法
#### Retrofitのインスタンス生成
レスポンスをバイト列で受け取りたいので今回はコンバーターを設定しません。
“`java
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(“http://localhost:8080”)
【Themeleaf初心者向け】formにおけるth:fieldの挙動まとめ
##はじめに
Spring+Thymeleafで開発を行っていて、
formの作成の際、
``
のように、複数Thymeleafタグを使っています。
これって全部書く意味があるのか?必要ないものはないのか?
と思ったので、自分で検証してみた結果を以下にまとめます。
## 概要
inputのtypeによって、th:fieldの挙動が違うので、記載すべきものが違います。– text,number,range
th:fieldは、「id」「name」「value」の役割を果たします。
th:fieldとth:valueが重複している時、th:objectで指定したformの値がある場合は、th:fieldが優先されます。– textarea
th:fieldは、「id」「name」「text」の役割を果たします。
th:fieldとth:textが重複している時、th:objectで指定したformの値がある場合は、th:fieldが優先されます。
– radio,c
Retrofit+OkHttpでmultipart/form-dataなAPIの呼び出してハマった
この記事は[ラクスアドベントカレンダー](https://qiita.com/advent-calendar/2021/rakus)の4日目の記事です。
空いているので昨日に引き続き書いていきたいと思います。
### はじめに
multipart/form-dataなAPIを呼び出す実装が一番面倒だと思っているのですが、自前でゴリゴリと実装している人が意外と多い印象です。
Retrofit+OkHttpを使ったらどれぐらい簡単なのか試してみたのですがハマり所もあったので記事していきます。### ハマりどころ
`@retrofit2.http.Multipart` `@retrofit2.http.Part` `@retrofit2.http.Body` `okhttp3.MultipartBody` `okhttp3.MultipartBody.Part` `okhttp3.RequestBody` あたりを組み合わせて実装するのですが、まずい組み合わせでハマったり、必要なリクエストヘッダーが指定できそうで出来なかったりと使い方が分かるまで結構大変でした。
https:/
FizzBuzzは無慈悲な面接の女王
この記事は[FOLIOアドベントカレンダー2021](https://adventar.org/calendars/6253)の5日目です[^0]
# 創世記
最初にnandがあった。nandは神であった。
“`clojure
(defn nand [x y] 神)(deftest nand-test
(testing “nand”
(is (true? (nand false false)))
(is (true? (nand false true)))
(is (true? (nand true false)))
(is (false? (nand true true)))))
“`ジム・ケラーが「光あれ」と言った。するとnotがあった。
“`clojure
(defn not [x]
(nand x x))
“`2日目、光は世界をandとorに分けた。
“`clojure
(defn and [x y]
(not (nand x y)))(defn or [x y]
(nand (not x)
jersey-clientでリクエスト/レスポンスのログを出す
# やりたいこと
リクエスト/レスポンスのbodyをログに出したい。
# 依存関係
“`xml
org.glassfish.jersey.core
jersey-client
2.35
org.glassfish.jersey.media
jersey-media-json-jackson
2.35
JavaでABC230(B問題まで)
ABC230に参加しました。解答できた問題に関して投稿していきます。
使用言語はJavaです。
#A問題
https://atcoder.jp/contests/abc230/tasks/abc230_a####方針
1. 入力される値(Nとする)によって処理を分岐させる。具体的には42 ≦ Nであれば、”AGC0″ + (N + 1)と出力する。N < 10であれば、"AGC00" + Nと、それ以外の場合は"AGC0" + Nと出力する。 ####コード **標準入力と出力のコードは省略しています。(以下略)** ```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 voi
Spring BootでJSONを整形してログ出力する
# はじめに
Spring Bootを用いたREST APIの動作確認でリクエスト・レスポンスのJSONを整形した状態でログ出力したくなった。
logback.xmlの設定でログ全体をJSONとして整形・出力する方法はすぐに見つかったが、パラメータのJSONのみ整形する方法になかなか辿り着けなかったためメモ。
# サンプルプロジェクト
– [spring initializer](https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.6.1&packaging=jar&jvmVersion=11&groupId=com.example&artifactId=demo&name=demo&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.demo&dependencies=web,lombok)で作成。
– Spring Boot : 2.6.1
– spring-boot-star
JJUG CCC 2021 Fallに参加しました
# はじめに
本記事はMDC Advent Calendar 2021の4日目の記事です。
少し前になりますが、11/21(日)に開催されたJJUG CCC 2021 Fallについて参加しましたのでそれについて感想を書いていきたいと思います。# このイベントは何?
JJUGというコミュニティの半年に一度のカンファレンスです。JJUGとは日本Javaユーザーグループのことです。JavaのユーザーグループはJUGとして世界中にコミュニティがあります。JUGの中の日本最大のコミュニティがJJUGです。https://www.java-users.jp/
ちなみに日本でもう一つ公認のJUGとして、関ジャバ(関西Javaエンジニアの会)があります。
https://kanjava.connpass.com/
さらにちなみに、ですが、JUGではないもののJava関連のコミュニティとして大きく活動が活発なものとして、日本Springユーザー会(JSUG)があります。ちょうど先日SpringFestというJSUG年度最大のイベントが開催されており、盛り上がってましたね。
https:
EclipseでWebアプリケーションを作成する
前回はEclipseをインストールしました。
今回はWebアプリケーション開発のうちプロジェクトの作成手順を紹介していきます:point_right::point_right::point_right:開発環境
・MacBook Air(MacOS Monterey 12.0.1)
・Eclipse(IDE)
・Tomcat(サーバ)
・Java(言語)プロジェクトの作成
アプリを起動したらまずこのような画面になりました。
![スクリーンショット 2021-12-04 11.21.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346709/0154b684-9034-b57e-f857-0c7dd74a1ca2.png)
「新規 Java Web プロジェクトの作成」をクリック:point_up:
![スクリーンショット 2021-12-04 15.27.47.png](https://qiita-image-store.s3.ap-northeast
C#・Java での static クラスの違い
#static について
直訳では、「静的の」意味。
`C#`、`Java`で共通の性質
→`static`メソッドは、メソッドが属しているクラスのインスタンスを生成しなくても使用できる。#Javaのstaticクラス
`Java`の`static`クラスは、`static`メソッドから呼び出すために設定するクラス。
(これに限って`static`クラスを使うわけではないと思いますが、ここではこの様に説明しておきます)
`static`メソッドの中では、`static`クラスを`new`で生成することができる。
例としては、下記のようなコードになります。
(packageの記述は省略してあります)“`java:sample.java
public class ClassP{
// staticなメソッド
private static int methodB() {
ClassA a = new ClassA();
a.i += 1;
return a.i;
}// methodB() で生成するためのstaticなクラス
private static
JavaからRustを呼び出す
# 概要
JNAを使ってRustを呼び出す方法をまとめました。
# 前準備
まず、JNAのライブラリをmavenなりbuild.sbtなりに追加します。
“`build.sbt
scalaVersion := “2.13.6”
libraryDependencies += “net.java.dev.jna” % “jna” % “5.9.0”
libraryDependencies += “net.java.dev.jna” % “jna-platform” % “5.9.0”
“`# JavaからRustを呼び出す
## Hello World的なプログラム
### Rustで共有ライブラリを作る
以下のようなプログラムを作成します。
“`main.rs
// #[no_mangle]を指定すると、コンパイル時にメソッド名を変更されないようすることができます。
#[no_mangle]
fn main() {
println!(“Hello, world!”);
}
“`そして、(macの場合)以下のコマンドで共有ライブラリを作成します。
Spring5.3 × WebLogic14cでJSFライブラリ関連でWebアプリケーションの起動に失敗した話
# 事象 サーバー起動時にWebアプリケーションの起動に失敗する
WebLogic14cをはじめて使った中でドハマリしたので、備忘録です。
過去にWebLogic11g、12cは使用したことがあります。Spring5.3でWebアプリケーションを実装し、WebLogic14cへデプロイした際にこんなエラーに遭遇してしまいました。
“`
javax.faces.FacesException: Unable to find CDI BeanManager
“`## 原因① JSFライブラリが不足していた
エラーの内容についていろいろと調べてみると、JSFライブラリが関連することがわかりました。
はじめはWebLogicに内包されているJSFライブラリではなく、Mavenセントラルリポジトリに公開されているものを使用してデプロイしたのですが、以下のような別のエラーに遭遇しました。“`
java.lang.ClassCastException: class com.sun.faces.vendor.WebContainerInjectionProvider cannot