- 0.0.1. Java学習 演算子
- 0.0.2. Rubyにおける予期しない型の問題(Javaと比較)
- 0.0.3. 動的型付け(Ruby)と静的型付け(Java)の違い
- 0.0.4. DBUnit備忘録
- 0.0.5. Google AppEngineのJava8サポートが終了するので対処してみた
- 0.0.6. vbaコードフォマード
- 0.0.7. VSCodeでOpen LibertyプロジェクトをAntからMavenに
- 0.0.8. 【環境構築】MacのC++でstdc++.hやちょっとだけ他言語と比較してみる
- 0.0.9. Javaでコンストラクタを定義する方法
- 0.0.10. オブジェクト指向プログラミングの三大要素
- 0.0.11. Javaのデータ型
- 0.0.12. Logging、ロギング
- 0.0.13. JavaでローカルLLMを動かすPart2: OpenAI API互換サーバをJHipsterで実装
- 0.0.14. JavaでローカルLLMを動かす(llama.cpp, Spring AI)
- 0.0.15. IT業界未経験からPHP⇒Python⇒Java⇒VBA、XMLと学習ロードマップをうろうろして感じたこと
- 1. ①実は地域によってプログラミング言語に需要ニーズに違いがある。(-_-;)
Java学習 演算子
# 演算子
演算子には「代数演算子」と「比較演算子」がある。
どちらの演算子でも、使用する記号も演算の行い方もRubyと同じ。## 代数演算子
### 種類
|演算子 |使い方 |意味 |
| :—: |:—-: | :—: |
|+ | a + b | 加算 |
|- | a – b | 減算 |
|* | a * b | 乗算 |
|/ | a / b | 除算 |
|% | a % b | 剰余 |### 使い方
“`java
class Main {
public static void main(String[] args) {
System.out.println(1 + 2);
System.out.println(10 – 5);
System.out.println(2 * 3);
System.out.println(100 / 4);
System.out.println(11
Rubyにおける予期しない型の問題(Javaと比較)
予期しない型の問題は、特に動的型付け言語でよく見られます。Rubyの例を使って、このような問題を示します。
### Rubyにおける予期しない型の問題
Rubyでは、変数の型が実行時まで決定されないため、予期しない型の値が渡されると、エラーが発生するか、または意図しない振る舞いが起こり得ます。
“`ruby
# Ruby の例
def multiply(a, b)
a * b
endputs multiply(5, 3) # 期待通りの乗算: 出力は 15
puts multiply(“5”, 3) # 文字列の繰り返し: 出力は “555”
“`上記の例では、`multiply` メソッドは2つの引数を乗算します。最初の呼び出しでは、両方の引数が整数なので、期待通りの乗算結果が得られます。しかし、二番目の呼び出しでは、一方の引数が文字列であるため、Rubyは文字列を繰り返す動作をします。この挙動は意図していない可能性があり、バグの原因になりえます。
### 静的型付け言語での対応
対照的に、静的型付け言語ではこのような問題が発生しにくいです。Java
動的型付け(Ruby)と静的型付け(Java)の違い
RubyとJavaの違いを説明する際、動的型付け(Ruby)と静的型付け(Java)の違いが重要なポイントです。これらの違いを理解するために、両方の言語で同じ機能を実現する簡単な例を用いて説明します。
### 動的型付け: Ruby
Rubyは動的型付け言語です。これは、変数の型が実行時に決定されることを意味します。型の宣言は必要ありませんし、同一の変数に異なる型の値を代入することも可能です。
“`ruby
# Ruby の例
def add(a, b)
a + b
endputs add(5, 3) # 整数の加算: 出力は 8
puts add(“5”, “3”) # 文字列の連結: 出力は “53”
“`この例では、`add` 関数はどのような型の引数でも受け入れ、それらを足し合わせます。整数が渡されれば足し算をし、文字列が渡されれば連結します。これはRubyが実行時に型を決定するため可能です。
### 静的型付け: Java
Javaは静的型付け言語です。つまり、変数の型はコンパイル時に決定され、一度決定した型の変数に異なる型の値を代入すること
DBUnit備忘録
## DBUnitとは
DBUnitは、Javaプロジェクトにおいてデータベースへの更新などのUTを支援するためのフレームワークです。
データベースのテストデータのセットアップ、比較、および期待値の検証を簡単に行うことができます。これにより、データベース関連の機能やクエリが正しく動作するかどうかを確認できます。
私が以前参画していた現場ではテストデータ、期待値をExcelシートで管理していました。
最近になりネットで調べたところ、それらしい記事はいくつも出てくるのですがどれもその現場で使っていたものとは違う方法で実装していました。
管理しやすく見てわかりやすかったので今となってはもっとしっかり勉強しておくべきでした…。
わかったらまた記事更新します。## DBUnitのインストール
DBUnitを使用するには、まず依存関係をビルドツールに追加する必要があります。例えば、Mavenを使用している場合は、`pom.xml`ファイルに依存関係を追加します。その後、適切なJUnitとDBUnitのバージョンを指定し、必要な設定を行います。“`xml
Google AppEngineのJava8サポートが終了するので対処してみた
:::note
ご注意
この記事は2024年1月時点での内容です。賞味期限は短いと思われるので注意してください。おなかを下したりします。
あと途中のテキストは9割がた与太なので、適当に読み流してください。
:::## これまでのあらすじ
はるか昔にWebのサイトつくってねって依頼されて、当時(ドメイン以外は)無料でどうにかできるAppEngineでサイト作ってお渡ししたところから、なんかもう使えなくなるみたいなんだけれど、どうにかできる?期限は2024年の1月30日なんだけれどってさっきお願いされました。まじかやべえ。なんも覚えてねえ。期限までの時間もねえ。
## 現状GAE/Jのそこらへんってどうなってるん?
ちょい調べたところ、Java8サポートの終了っていうのは小さい問題で、Javaのランタイム環境がサーブレットコンテナじゃなくなっておるってところが大問題。WARのデプロイじゃだめってことなんね。まじどうしよう。
## じゃあどうしようか?
まず参照したのはこれ。
https://cloud.google.com/appengine/docs/standard/j
vbaコードフォマード
javacode
“`
import com.google.googlejavaformat.java.Formatter;
import com.google.googlejavaformat.java.FormatterException;import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;public class VbaCodeFormatter {
public static void main(String[] args) {
// 指定VBA代码文件路径
String vbaCodeFilePath = “path/to/your/vba/code/file.vba”;try {
// 读取VBA代码文件内容
VSCodeでOpen LibertyプロジェクトをAntからMavenに
VSCodeでOpen LibertyプロジェクトをAntビルドからMavenビルドに変更した際の大まかな手順と個人的につまずいた点をまとめました。
# Maven 基礎知識
こちらについては、詳細は別サイトや書籍などでご確認ください。ライブラリをpom.xmlに記述することで管理し、ビルド時に[Maven セントラルリポジトリ](https://mvnrepository.com/)から自動でダウンロードして使えるという点が最も大きな特徴と思われます。# Maven移行の流れ
Mavenをインストール
環境変数「JAVA_HOME」に JDK のディレクトリのパス追加
環境変数「PATH」に Maven の実行ファイルのあるディレクトリを追加
インストールされたか確認
コマンドプロンプトでmvn –-versionを実行しバージョンが表示されるか確認
“`
$ mvn –version
“`
バージョン等の情報が表示されればインストール完了です。# pom.xmlの記載
Packageの形式を指定します。今回はwarで作成しました。
“`pom.xml
【環境構築】MacのC++でstdc++.hやちょっとだけ他言語と比較してみる
## ハマったこと
C++の`bits/stdc++.h`をincludeしたかった。
STLをひとつひとつincludeするのは面倒なので、全部入り神モジュールである`stdc++.h`を入れたい。2つ必要なことがあった。
1️⃣ファイル本体が必要
2️⃣静的解析がエラーを吐く環境はMacでvimです。
### 1️⃣ファイル本体が必要
ようはstdc++.hというファイルが、欲しいincludeを死ぬほど大量にincludeしまくってくれてるファイルということ。
だから、欲しいincludeを全部あらかじめincludeしておいたファイルを、1枚だけincludeすれば楽だよねっていうだけ。とくに魔法みたいなことはしてない。`stdc++.h`はどこにあるか?
gccの最新を入れると一緒についてくる、gccを入れたくない場合は、ネット上に転がっているファイルを取ってくればいい。
または自分で好きにカスタムすればいい(多すぎるincludeを自前で用意したいならの話)“`gccをいれる.sh
brew install gcc
“`“`ここにあるはず.バージ
Javaでコンストラクタを定義する方法
Javaでコンストラクタを定義する方法について説明します。コンストラクタは、クラスのインスタンス(オブジェクト)が生成されるときに自動的に呼び出される特別なメソッドです。コンストラクタは、オブジェクトの初期化に使用されます。以下に基本的なコンストラクタの定義方法を示します。
### コンストラクタの基本的な構造
1. **コンストラクタの名前**: コンストラクタの名前は、常にクラスの名前と完全に同じでなければなりません。
2. **戻り値を持たない**: コンストラクタは戻り値を持ちません。これは、コンストラクタが値を返す通常のメソッドとは異なる点です。
3. **アクセス修飾子**: コンストラクタは、`public`、`private`、`protected`、またはパッケージプライベート(修飾子なし)のいずれかのアクセスレベルを持つことができます。### 簡単な例
Javaの`Person`クラスにコンストラクタを定義する例を以下に示します。
“`java
public class Person {
// メンバ変数(フィールド)
private
オブジェクト指向プログラミングの三大要素
## カプセル化(Encapsulation)
オブジェクトのデータ(フィールド)とそれに関連するメソッドを一つの単位、つまりクラスに組み込むプロセスです。カプセル化は、オブジェクトの内部状態を外部から直接アクセスされることなく保護し、オブジェクトのデータとメソッドの詳細を隠蔽します。これにより、外部のコードがオブジェクトの内部状態に依存することが減り、より安全でメンテナンスしやすいコードを実現できます。## 継承(Inheritance)
あるクラス(スーパークラスまたは親クラス)の特性(フィールドやメソッド)を別のクラス(サブクラスまたは子クラス)に引き継ぐことができる機能です。継承を使用すると、既存のコードを再利用して新しいクラスを作成できるため、コードの重複を減らし、拡張性と保守性を向上させることができます。## 多様性(Polymorphism)
異なるクラスのオブジェクトが同じインターフェースやメソッドを通じて操作される能力です。これには主に2種類あります:コンパイル時多様性(静的多様性): メソッドオーバーロードにより、同じ名前のメソッドが異なる引数を取ること
Javaのデータ型
Javaでは主に二つのデータ型があります:プリミティブ型(Primitive Types)と参照型(Reference Types)。これらの型は、変数が保存するデータの種類とメモリ上での扱い方を定義します。
### プリミティブ型 (Primitive Types)
プリミティブ型は、Javaが提供する基本的なデータ型で、直接値を保持します。これらは比較的低レベルな操作に使用され、メモリ効率が良いです。1. **整数型**
– `byte`: 8ビットの整数型。値の範囲は-128から127。
– `short`: 16ビットの整数型。値の範囲は-32,768から32,767。
– `int`: 32ビットの整数型。値の範囲は-2^31から2^31-1。Javaで最も一般的に使用される整数型。
– `long`: 64ビットの整数型。値の範囲は-2^63から2^63-1。2. **浮動小数点型**
– `float`: 32ビットの浮動小数点型。小数点を含む数値に使用。
– `double`: 64ビットの浮動小数点型。`float`よりも
Logging、ロギング
# Logging、ロギング
– オペレーティングシステムでは、System.out.println()のようなシステムコンソールを使用せず、別途のロギングライブラリを使用してログを出力する。
– ログを使えばThreadの情報、クラス名のような付加情報を一緒に見ることができ、出力の形を調整することができる。
– ログレベルを開発サーバーはdebug、ローカルではtrace、運営サーバーはinfoに設定できる。
– コンソールだけに出力するのではなく、ファイルやネットワークなど、ログを別の位置に残すことができる。 特にファイルとして残すときは、日替わり、特定の容量に応じてログを分割することも可能である。
“`java
private Logger log = LoggerFactory.getLogger(getClass());
private static final Logger log = LoggerFactory.getLogger(Xxx.class)又は、lombok annotation(@Slf4j)を使用
JavaでローカルLLMを動かすPart2: OpenAI API互換サーバをJHipsterで実装
この記事は、[Zenn記事](https://zenn.dev/hide212131/articles/4fbeca981db5f8)の転載です。
## はじめに
この記事は、[JavaでローカルLLMを動かす](https://zenn.dev/hide212131/articles/2916417bfa82f4)の続編です。前回、JavaによるRESTサーバで経由でLLMへのアクセスに成功したので、今回は、OpenAI API互換プロトコルを実装したクライアントからも接続できるようにしてみます。
さらにJHipsterというツールを使い、少ない手順でRESTサーバを構築します。
最終的には、こんなかんじで、SpringBootサーバを起動し、[Chatbot UI](https://github.com/mckaywrigley/chatbot-ui)のようなクライアントから、サーバを経由し、ローカルLLMとのチャットができます。
![](https://storage.googleapis.com/zenn-user-upload/501f623370e8-20240
JavaでローカルLLMを動かす(llama.cpp, Spring AI)
この記事は、[Zenn記事](https://zenn.dev/hide212131/articles/2916417bfa82f4)の転載です。
## はじめに:JavaとローカルLLM
生成AI、大規模言語モデル(LLM)が大流行りの一年でしたね。
LLMを扱うプログラミング言語としてはPythonでの情報が盛んでした。Pythonも素晴らしい言語ですが、今後LLMがエンタープライズシステムに導入されていくことを考えると、やはりJavaのエコシステムは外せないな、と思い、そうなるとJavaでどの程度LLMを使えるかな?が気になります。
また、OpenAIやAzure OpenAI Serviceを使用しない、オンプレミスで動く「ローカルLLM」という領域も興味があります。Javaが活躍している領域では、しばし、セキュアな環境での開発が求められ、LLMが導入しにくいという話も聞きます。そういった閉域でも導入しやすいというLLMで、どこまでできるかも試してみたいです。
加えて、Spring Framework界隈では、[Spring AI](https://docs.spri
IT業界未経験からPHP⇒Python⇒Java⇒VBA、XMLと学習ロードマップをうろうろして感じたこと
自分の学習ロードマップのうろうろ歴
無事とある**PHP、Laravel**を中心とする半年のカリキュラムを課す民間のプログラミングスクールを修了し、転職フェアなどにも何回か参加してみたところ、「**実はプログラミング言語の需要には地域差がかなりある**」ということを知り(下記参照)、エッ…(゚Д゚)と思いながら、時代はAIだろ(´д`)と思って、**Python**をやってみたら少しは分かったけど、居住地域の関係で **Java**も併行し始めたけど、Pythonを使うかな(´。`)と思って内定をいただいた会社の自分の所属する部署では一番使うのは **VBA、XML** とのことで、今は急遽ExcelやVBAを触りまくっています。
①実は地域によってプログラミング言語に需要ニーズに違いがある。(-_-;)
〇転職活動を通して感じた地域の言語ニーズの差異に関する私見
(1)求人がどの地域も万遍なく一番多いのは**Java、意外とJava学習 変数
# 変数の違い
プログラミング言語によって変数の扱い方は異なり、「動的型付け言語」と「静的型付け言語」の2種類がある。
今まで学習してきたRubyは「動的型付け言語」で、Javaは「静的型付け言語」。# データ型
データ型とは、変数に格納するデータの種類のこと。
「数値としての1」と「文字としての1」はプログラムの上では異なるものとして扱われます。Javaでは変数を定義するときに、その変数をどのデータ型として扱うのかプログラムに伝えるため、使用前に「宣言」してから使用する。
## Javaの基本データ型は以下の8種類
|データ型 |bit数 |値 |
| ——– | —– | ——————————————————— |
|boolean |1bit |true あるいは false【備忘録】gulp-notifyでエラーになったのでmacにjavaを入れた
# はじめに
現在進行しているプロジェクトのタスクランナーでjavaがないとエラーになる事象が発生したので入れてみた。# 事象
“`
[12:16:44] gulp-notify: [Error running Gulp] ⚠️ Nu Html Checker (v.Nu) のエラーが出ています ⚠️
The operation couldn’t be completed. Unable to locate a Java Runtime.
Please visit http://www.java.com for information on installing Java.
“`
gulp-notifyでjavaを使ってるけど、macにjavaがないので怒られた。# javaのインストール
今回はbrewでjavaをインストールした。
“`
java –version
The operation couldn’t be completed. Unable to locate a Java Runtime.
Please visit http://www.java.coHeroku のJAVAのJMX周り
https://exec-manager.heroku.com/
を見るといろいろわかる
HEROKU_JMX_PORT などを管理画面の環境変数に設定すると変更できる。
JavaプロジェクトでAndroidアプリの通信部品クラスを開発する
#### Androidアプリの通信部品クラスをJavaプロジェクトで開発する方法について解説します。
Android Studio はバージョンアップを重ねるごとに快適に動作させるためのPCのリソース要件が高くなってきています。**ただでさえ重い環境でUIに関係しない通信部品クラスの開発までも Android Studio で行うのは効率的ではないと私個人は思っています。**
今回紹介するAndroidのスタブクラスを作成することで、より軽量なIDEでのJavaプロジェクトで通信部品クラスの開発が可能になります。
:::note info
この記事の実装の元ネタとなった Android 公式ドキュメントは下記で、ほぼこのサイトで紹介されている方法で通信部品を作成します。※Volley, OkHttpなどの外部ライブラリは使用しない実装になっています。
[バックグラウンド スレッドでの Android タスクの実行 (Java編)](https://developer.android.com/guide/background/threading?hl=ja#java)
+ 複Antlrを基にした複雑な電卓の実装
人事労務システムを設計する際に、ユーザーからの要望で、設定した数式で計算する機能が必要とされて、このために、Antrl(パーサージェネレータツール)を使用し、IF ELSEなどの条件分岐を含む、より複雑な計算が可能な電卓機能を実装しました。
## Antrlって何
**ANTLR**(_ANother Tool for Language Recognition_)とは、[LL](https://ja.wikipedia.org/wiki/LL%E6%B3%95 “LL法”)(*)構文解析に基づく[パーサジェネレータ](https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%BC%E3%82%B5%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%AC%E3%83%BC%E3%82%BF “パーサジェネレータ”)である(バージョン3.xはLL(*)、2.xまではLL(k))[ Wikipedia ](https://ja.wikipedia.org/wiki/ANTLR)## 手順
1. antrlの設定ファイル.g4ファイルを書き関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた