java

JavaのDIコンテナは言語機能の補完でありinjectはimport

というブログを書こうとしたら、すでにあった。 Dependency Injectionでやりたいことはモジュールimport - きしだのHatena 依存性の注入って要するにimportなので。 まず、DIコンテナを実装してみるとどういうものかがわかりやすくなります。 このときの結論…

Google ColabでJavaを使う

Jupyter for JavaというのがInfoQで紹介されていたので試してみました。 Java News Roundup: JDK 22, Spring CVEs, Liberica JDK, JDKMon 21, Jupyter for Java, Gradle 8.5 Jupyter notebookでJavaを使うためのいろいろをまとめたGitHub organizationらしい…

ICU4Jで文字数をカウントする

Javaでは文字数をlength()で数えることができます。 1996年にJavaが出てきた当初は「半角も全角も1文字に数えれて便利だなー」などと思っていたわけです。 けれども、同じ1996年に策定されたUnicode 2.0で2文字分のコードを使って1文字を表すサロゲートペア…

Javaやさんに優しいローコードフレームワーク、OpenXavaを試す

OpenXavaという、JPAエンティティだけ定義すればCRUDな画面を作ってくれるローコードフレームワークがあるので、試してみました。 Javaわかる人には手軽に使えてよさそう。 https://www.openxava.org/ OpenXavaプロジェクトの作成 Maven Archetypeが用意され…

実はサーブレットの勉強もSpring Bootを使うほうが楽なのでは

サーブレットで面倒なのはTomcatとの付き合いです。 Spring BootでSpring Webを使うと組み込みTomcatが動くので、Tomcatのことを気にしなくてよくなりますね。 そこでサーブレット動かすと勉強しやすいんでは、と思ったので試してみます。 まず、spring init…

サーブレットを「JavaでのWebアプリケーションの基礎」として最初に勉強させるのをやめてあげてほしい

研修がはじまるという画像でサーブレットJSPの本が並んでて、サーブレットを最初に勉強させるのをやめてあげてほしいと思った話。 オブジェクト指向もそうなんだけど、現状で使わなくなっているにもかかわらず情報更新がされずオブジェクト指向やサーブレッ…

Javaがパブリックスタティックヴォイドメインの呪文から解放される

みなさん、今日もパブリックスタティックヴォイドメインしてますか? ジャバと言えばパブリックスタティックヴォイドメインですよね。 最近はIDEでmain[tab]と入力すれば補完してくれるとはいえ、コードを読むときには目に入ってきたりしますね。 そんなパブリックスタティックヴォイドメインの呪文から…

itstaffing エンジニアスタイルでJavaの連載をはじめました

リクルートスタッフィングさんのメディア、itstaffing エンジニアスタイルでJavaの連載をはじめました。 知っておきたいJavaの話:Javaとは何か? - itstaffing エンジニアスタイル ある程度Javaを使えるけど最近の事情を追ってないなぁという人にむけて、い…

IntelliJ IDEAやNetBeansでVector APIを試す

Java 16でVector APIがIncubatorとして追加されたけど、IDEでの利用方法がなかなかネットにないので、まとめ。 Mavenプロジェクトを前提に。 pom.xmlの/project/build/pluginsの下にコンパイラプラグインを追加。 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-</artifactid></plugin>…

Java 20がリリースされました。

こちらにまとめています。 Java 20新機能まとめ - Qiita

GPTのEmbeddingを利用してブログの投稿に対する近いものを探し出す

OpenAIでGPTを使ったAPIにembeddingというのがあって、これを使うと文章同士の距離がとれるので、近いエントリを取得したり文章から検索したりができるということで、試してみました。 思いのほかちゃんと動きました。おそらく、GPTで一番実用的なんじゃない…

POIを使わずJava標準ライブラリでExcelファイルを生成する

某オープンチャットでPOIを使わずにExcelファイルをダウンロードという質問が来ていて、まあそこでは「POI使いましょう」ってなったのだけど、結局XMLファイルなので出力対象が決まってればそんなに難しくないのではと思ったのでやってみました。 流れとして…

ChatGPTより賢く質問に答えれるチャットBotを作る(誇張表現)

ChatGPTは2021年9月までのWebテキストで学習しているので2022年の知識を持っておらず、ワールドカップ2022年大会の優勝者を知らなかったりします。 BingではWeb検索と組み合わせることで解決しているので、それを自分で作ってしまえばいいのでは、とやってみ…

Web記事の本文をJavaで抽出する

指定したURLの記事本文を取ってくる処理がほしいなぁと思って、しかしいろいろ考えるのは面倒と思ったけど、少なくともJavaで簡単に使えるものがなさそうなので実装した。 参考にしたのはこちら。 HTMLからの本文自動抽出 - アドファイブ日記(ミラー版) テ…

JobRunrを試してるんだけどクセが強い

JobRunrという、バッチ処理とかバックグラウンドタスクとかを試してみたんだけど、よくわからない・・・ https://www.jobrunr.io/en/ dependencyにはjobrunrと、あと何かJSONパーサーを入れます。ここではjacksonにしてますが、GSONかyassonでもいいぽい。 <dependency> <groupId></groupid></dependency>…

GPTでテキストからJavaコードを生成する

昨日のエントリでは歌詞と画像を生成したのだけど、歌詞を生成する部分のプロンプトを変えて、エンジンにCodexを使うとコードを生成できます。 GPTを呼び出す部分はこんな感じ String prompt = "//Java\n" + text.getText().trim().lines() .map("// %s%n"::…

OpenAIのGPTとDALL·Eでテーマから歌詞と画像を生成する

やっぱ自分でもさわってみんとあかんということで、OpenAIを使ったプログラムを書いてみました。 とりあえず、テキストと画像を生成します。 JavaのAPI使ってみます。中身はRetrofit。 https://github.com/TheoKanning/openai-java MavenやGradleでこんな感…

SourceBuddyでJavaクラスを動的生成する

Javaのバイトコードを操作するツールとしてはASMやJavassistがありますが、SourceBuddyはコンパイル・バイトコード生成を行うツールです。 バイトコード操作を行いたい場合、既存バイトコードの変更を行う必要はなくて、実行時に新規クラスを生成できれば十…

Javaのインストール2023年版

ちょっとJavaのインストールについて調べてみました2023年版。 Javaにはディストリビューションがたくさんあるので、目につくインストーラーをWindowsで全部ためしてみました。 初心者が勉強するためにJavaをインストールするというときにどれを使うのが手軽…

Jakarta NoSQLを試す(動かない)

なんかJakarta NoSQLというのが出ていて素敵そうだったので試してみた。 サポートしているデータベースがこんな感じで、このあたりを統一的に扱えると便利そう。 http://www.jnosql.org/docs/supported_dbs.html NoSQLといっても色々あって単一APIでは難しい…

Java2Dデモを最新JDKで動かす

Java2DデモというのはJava 5までJDKに添付、Java 8までは別途ダウンロードで提供されていたJava2Dのデモです。 Java2D Demo!#java #java2d pic.twitter.com/jAMih8ep9j— きしだൠ(K1S) (@kis) 2022年12月9日 久しぶりに動かそうと思ってJava 5をインストール…

Javaの-XmsはMemory Startingの略?

Javaのメモリ確保指定のオプションで、最大メモリは-Xmx、初期メモリは-Xmsで指定します。 -XmxのほうはMemory maXimumかなーと感じるのだけど、-Xmsのほうはminimumでもないしなんだろーと思いながら「まぁ気にしてもしかたない」と25年くらい放置してたわ…

enumの使い方のおさらいと高機能enumとしてのSealedクラス

Javaでは複数の定数をまとめて扱う型としてenum(列挙型)が用意されています。 これはこれで便利なのですが物足りないところもあって、それがSealedクラスなどを使うことで解決できるようになるので、解説します。 enum型 enumは状態やデータ区分を表すのによ…

インスタンスとオブジェクトの違い

インスタンスとオブジェクトは混同しがちで区別がようわからんになりがちです。 とりあえず某所で説明したものを再構成します。 ※2022/12/10追記: クラスに対するのはインスタンスになるべき(たとえばクラス変数とインスタンス変数)なので、ちょっと修正する…

Javaのプログラムはコンパイルなしで動かせます

Java 11から単一ソースファイルのJavaプログラムをコンパイルなしで直接javaコマンドで実行できるようになっているので、紹介動画を作りました。 例えば次のようなJavaプログラムをHello.javaという名前で保存したとします。 public class Main { public sta…

Night Bird

Shockwaveだったかダウンロードするexe形式だったか忘れたけど、Night Birdというデモがあって気に入って、Javaを始めたときに目コピでアプレットとして実装したことがあった。1996年くらいだと思う。 ちなみに目コピというのは、動きを見て実装することなの…

さよなら「あなたとJAVA」

みんなから愛された「あなたとJAVA」の役割が終わったようです。 「Java」で検索するとjava.comのサイトがひっかかるのですが、このサイトは古いまま放置されていて、Javaの学習を始める人にとっての罠になっていました。 https://www.java.com/ja/ 「あなた…

Jakarta EE StarterでJava EE/Jakarta EEを始める

最近のフレームワークにはナントカStarterが用意されていて、簡単に最初のプロジェクトを作れるようになっています。 Java EE/Jakarta EEの場合、コンテナを起動してデプロイするという2段階だったりして、最初に動かすところまでが大変でした。 そういう問…

Java力をあげるための指針

また「プロになるJava」の宣伝か、と思われるので、今回は「プロになるJava」の宣伝は自粛します。 Java力をあげるためには最適な「プロになるJava」がオススメなんですが、そうするとこのエントリもこのあたりで終わってしまうので、今回は自重します。 と…

「メソッドのシグネチャ」はJava言語とJava仮想マシンで違う

「プロになるJava」でシグネチャのことを次のように説明しています。 メソッドの名前と受け取る引数、戻り値の種類をあわせたものを シグネチャ といいます。 戻り値は含まないのでは?という話になり、結論から言えばJava言語では名前と引数でメソッドを区…