- 0.1. Java初学者が感じたSpring Bootと他の言語との違い~ORM~
- 0.2. SpringBootのGradleでWebjarsを利用しBootstrapを使う方法
- 0.3. 【Kotlin】value classをJava Reflectionのみでインスタンス化する
- 0.4. BufferedReaderはJavaでどのくらいの速さで行を読み取ることができますか?
- 0.5. Couchbase Lite機能解説:競合解決概要
- 0.6. nullをreturnしないメモ
- 0.7. 【Java】二次元配列でドット絵を作ってみた
- 0.8. 【Java】Byte配列を無限に連結したい
- 0.9. コンパイルしたJavaのバージョンとデプロイするJavaのバージョンがズレているとエラーになる話
- 0.10. インスタンスメソッド、クラスメソッドの違いについて
- 0.11. バージョン管理の各方法の特徴と違いに関する備忘録(初心者の所感)
- 0.12. ターゲット・ランタイム Apache Tomcat v8.0 が定義されていません。が出た時の対処法。
- 0.13. Couchbase Lite機能解説:ドキュメントデータモデル
- 0.14. Spring Framework 学習資料
- 0.15. 簡単なJSPとJavaのセットを作ってDockerで動かす
- 0.16. VSCodeで”パッケージがマッチしない”エラー
- 0.17. @IntDefについて
- 0.18. [100%] FibFrog (codility Lesson 13)
- 0.19. 条件分岐で学んだこと10/18
- 1. 三項演算子でシンプルに描く
Java初学者が感じたSpring Bootと他の言語との違い~ORM~
### 今回のお題
今回は、私が感じたSpring Bootと他の言語との違いについて書きます。メインテーマはORMですね。
タイトルにある通り、私はJava自体の初学者ですが、同じようにJavaの学習を始めたばかりの方、あるいは今後自分が他の言語の学習を始める際の参考になればという思いで残しておきます。
### 筆者の学習歴
プログラミング学習歴は4ヶ月程度。
スクールではRuby on Railsを、独学ではPHP Laravelを学習し、それぞれアプリらしきものの作成経験はあり。Javaについては1ヶ月ほど前から学習を開始。
現在は書籍を見ながらSpring Bootアプリの作成手順を学習中。
### 本記事のターゲット
冒頭でも少し触れましたが、本記事は主に「既に学習済みの言語とSpring Bootの違いに戸惑っている方」向けに作成しました。書籍やネットなどで学習をしていて、「なぜこのようなやり方をしなければならないのかが分からない。」、「他の(自分の知っている)言語と同じような手順でやってはダメなのか。」と言った疑問が湧くことがあるかと思いますが、それらの解決
SpringBootのGradleでWebjarsを利用しBootstrapを使う方法
#はじめに
今回は、SpringBootのGradleプロジェクトでWebjarsを利用してBootstrapを使用する方法を書いていきます。MavenでのWebjarsを用いてBootstrapのバージョン管理をする記事が多くあったので、Gradleを使用している人の参考になればいいかなと思います。
#build.gradle
“`java
dependencies {
implementation(‘org.webjars:jquery:3.5.1’)
implementation(‘org.webjars:bootstrap:4.5.3’)
implementation(‘org.webjars:webjars-locator:0.40’)
}
“`
`dependenciesタグ`に上記3つをimplementationしてあげるだけです。あとは、Bootstrapを使いたいHTMLファイルで必要な記述をするだけです。
##html
“`html
【Kotlin】value classをJava Reflectionのみでインスタンス化する
# TL;DR
– `value class`はインスタンス化のために幾つかの`static`メソッドを生成する
– 生成されたメソッドを`constructor-impl` -> `box-impl`の順で呼び出すことで、`value class`を`Java Reflection`のみでインスタンス化できる
– 付与したアノテーションは`impl`メソッドにも付与される# やること
以下のように、`init`ブロックに入力チェックが有るような`value class`について、`Class`を取得できている状況から、`Java Reflection`のみで、入力チェックを機能させた上でインスタンス化する方法を紹介します[^with-reflect]。 “`kotlin
@JvmInline
value class Value(val value: Int) {
init { if (value == 1) throw TestErr }
}object TestErr : RuntimeException(“試験用エラー”)
“`[^wit
BufferedReaderはJavaでどのくらいの速さで行を読み取ることができますか?
[前回の投稿](https://qiita.com/chenyh/items/ed86364a8bdb6c635a4d)で、C++のgetline関数がテキストファイルの行をどれだけ速く実行できるかを尋ねました。答えは約2GB / sで、確かに1 GB / sを超えていました。これは、いくつかの最高のディスクドライブやネットワーク接続よりも低速です。ソフトウェアが行に「ただ」アクセスするだけでよいことはめったにないことを考慮に入れると、ディスクやネットワークにバインドされるのではなく、テキストファイルの処理がプロセッサにバインドされるシステムを簡単に構築できます。
Javaはどうですか?Javaでは、テキストファイルの行にアクセスする標準的な方法は、BufferedReaderを使用することです。システムコールを回避するために、多くのテキスト行を含む大きな文字列を作成してから、文字列の長さを記録するだけの非常に単純な処理関数を呼び出します…
“`java
StringReader fr = new StringReader(data);
BufferedReader bf = n
Couchbase Lite機能解説:競合解決概要
## はじめに
本稿では、Couchbase Liteを用いた開発における競合解決の概要を整理します。
実際の実装における、注意点などは、参考情報に掲載したドキュメントなどを参照してください。
## 競合の原因
アプリケーション間で、データが同期される場合、複数のアプリケーションによって同じドキュメントに変更が加えられた場合、ドキュメントの競合が発生する可能性があります。
競合は、次のいずれかのイベントの後に発生する可能性があります。
– レプリケーションプロセスが、ドキュメントの変更を保存: この場合、最も大きいリビジョンIDを持つ変更が優先されます。
– アプリケーションが、ドキュメントの変更を保存: この場合、最後の書き込みが優先されます。競合発生時、削除操作は常に勝ちます。したがって、上記のいずれの場合でも、変更の1つが削除であった場合、ドキュメントは削除されます。
## レプリケーション時の競合
競合は、レプリケーションプロセスが変更を伝播する場合に発生する可能性があります。
### 自動競合解決
Couchbase Liteは、次のルール
nullをreturnしないメモ
# 概要
チームメンバーがnullをreturnしていたのですが、想定している挙動が分からないので他に置き換えた方がいいのではと思い、説明のために整理したメモ。nullのreturnは、例えばこのようなコードです。
“`java
public ZonedDateTime calculationDate(ZonedDateTime acceptAt) {
if (acceptAt == null) {
return null;
}
“`## null返り値が保守作業に与える悪影響の調査
ソフトウェアシンポジウム2013で発表があった模様。
https://sdl.ist.osaka-u.ac.jp/pman/pman3.cgi?DOWNLOAD=229null返り値はバグを含みやすくなる。
> 分析の結果,null 返り値および null チェックが,規模や作業工程の種別に関係なく頻繁に修正されることを確認した.修正頻度が高いという ことは,バグを含みやすくなると考えられるため,null 返り値および null
【Java】二次元配列でドット絵を作ってみた
##作ろうと思ったきっかけ
→for文の演習問題中
→以下を実行せよ
▼▲▼
▼▲
▼
→これ応用したらドット絵作れるんじゃね?##ドット絵を作ってみました
![kkk02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2064393/1535c15e-c10b-f035-a3ac-605525782349.png)
[星のカービィ](https://www.kirby.jp/)© Nintendo / HAL Laboratory, Inc.![inu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2064393/7c62becd-0008-41b8-5dfd-9635dd8432c3.png)
[UNDERTALE](https://undertale.com/)©Toby Fox 2015-2021.##開発環境
Windows10(32bit)
eclipse(4.9.0)
コマンドプロンプトで
【Java】Byte配列を無限に連結したい
# やりたいこと
JavaでByte配列を扱う中で配列を連結させたい場面がありました。
しかも、ときには2つ、ときには3つ、、というように。# 追記
コメントいただきましたが、Arrays.stream()を使うとよりスッキリ実現できます。(ありがとうございます。)“`Java
private static byte[] concatByteArrays(byte[]… arrays) {
return Arrays.stream(arrays)
.collect(ByteArrayOutputStream::new,
(bos, bytes) -> bos.writeBytes(bytes),
(left, right) -> left.writeBytes(right.toByteArray()))
.toByteArray();
}
“`# 結果
Byte配列はByteBufferで扱い、引数は可変長引数で受け取ることで対応しています。“`Java
class Con
コンパイルしたJavaのバージョンとデプロイするJavaのバージョンがズレているとエラーになる話
テスト済みのWARファイルをDockerで動かそうとしたら以下のエラーになってしまった…ということがあったので、原因と解決方法をメモ
java.lang.UnsupportedClassVersionError: ukaf/simple2/WelcomeResource has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 60.0 (クラス[ukaf.simple2.WelcomeResource]をロードできません)
※ビルド~デプロイまでは正常に終わったのですが、以下のリクエストでAPIアクセスしたときにエラーになりました
http://localhost:8080/simple2/webapi/welcome?name=YOURNAME
##原因
タイトルにほぼ答えを書いてしまったのですが、ビルドしたときの
インスタンスメソッド、クラスメソッドの違いについて
## はじめに
以前書いた「[インスタンス変数、クラス変数の違い](https://qiita.com/tta0206/items/74059f904fd967526d9b)」が反響がありましたので、
(読んでくださった皆さん、本当にありがとうございます?)、
そちらの続編としてメソッドについて説明していきたいと思います。## インスタンスメソッド
インスタンス変数もしくはインスタンスメソッドを利用する場合に使われるメソッドです。
インスタンスという名前がついている通り、インスタンスに依存する処理を行うので、
メソッドを呼び出す前にインスタンスを作成する必要があります。## クラスメソッド
インスタンスの中身に関係なく、共通の処理を行うときに利用されるメソッドです。
インスタンスに依存せず、処理内容が不変なことから英語で「静的」という意味の`static`をメソッドにつけます。
そのため、クラスメソッドの中ではそのクラスのインスタンス変数 or インスタンスメソッドは利用できません。(=thisを利用することはできない。)
その代わり、インスタンスに依存してないので、イン
バージョン管理の各方法の特徴と違いに関する備忘録(初心者の所感)
※2021年10月19日時点での最新バージョンを使用した際の体感です。
主な使用言語がJavaなので、開発環境はそれに寄ったものになってます。
OS:Windows10はじめに
プロジェクトでバージョン管理を行おうと思った際にどれがどのようなサービスを提供しているのか、がわかりにくかったため、備忘録的に記しておこうと思いました。まだまだ初心者のため、足りない部分はあると思いますがご了承ください。
また、本投稿はバージョン管理の使い方や環境設定の解説ではないため、省かせていただきます。・Git
コマンドラインを利用したバージョン管理機能。主にローカルリポジトリでの管理を行う。
グループでのバージョン管理も可能だがオンラインで共同編集するための機能はない(はず)。・GitHub
Gitを用いてオンライン上にリモートリポジトリを作成し、共同編集を可能にしたもの。
とあるサイトには、GitとGitHubの違いに関して、メールとGmailのような違いとあったが、個人的にはメールサーバとGmailの違いという印象を受けた。要するに、Gitを元にしたサービスがGit
ターゲット・ランタイム Apache Tomcat v8.0 が定義されていません。が出た時の対処法。
たまにeclipseでJUnitテストをやろうとすると、以下のエラーがでるときがある。
ターゲット・ランタイム Apache Tomcat v8.0 が定義されていません。 「プロジェクト名」 不明 ファセット・プロジェクトの問題
#解決法
Eclipseでプロジェクトエクスプローラーの中の、対象プロジェクトを右クリック。
プロパティ>ターゲットランタイム>Tomcat8(Java8)を選択。
Couchbase Lite機能解説:ドキュメントデータモデル
### 概要
Couchbase Liteは、組込・モバイルNoSQLドキュメント指向データベースです。Couchbase Lieteデータベースに格納されるドキュメントはJSONオブジェクトの形式を取ります。これは、キーと値のペアのコレクションであり、値は、数値、文字列、配列、さらにはネストされたオブジェクトなど、さまざまなタイプのデータになります。ドキュメントは、ドキュメントIDによって識別されます。ドキュメントIDは、プログラムで指定するか、あるいは(UUIDとして)自動的に生成することができます。
ドキュメントIDは、データベース内で一意である必要があり、変更することができません。
### ドキュメントの作成・取得
新たにドキュメントを作成する際に、次のメソッド/イニシャライザーを使用できます。
– `MutableDocument(String id)`イニシャライザーは、特定のIDを使用して新しいドキュメントを作成するために使用することができます。
– 引数を取らない、`MutableDocument()`イニシャライザーは、データベースによって文書IDをランダ
Spring Framework 学習資料
以前、私がSpring Frameworkに関して学んでいた頃に、環境構築方法までを含めた学習資料を作成したことがあります。
資料はPDF化されていて、サンプルコードもセットになっています。
Springの基本である、DI(Dependency Injection)やAOP(Aspect Oriented Programming)はもちろん、他に押さえておくべき基本的なポイントは網羅されています。
これからSpringを学びたい方にとっては、ぴったりな教材だと思われるため、このブログにてご紹介致します。
https://github.com/GL-Kageyama/Spring_Boot_Learning_Collection
![0_Q8ax33ctjsEfRRlg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2173896/73e5e745-2f95-03df-dd45-44b6b81249d1.png)
簡単なJSPとJavaのセットを作ってDockerで動かす
[前回](https://qiita.com/mm0kan/items/3b513d218ce20de05e1f)はTomcatのDockerイメージ(公式)にHTMLだけ追加してオリジナルのDockerイメージを作る…というのをやったので、今回はJavaも追加して動的アプリケーションを作っちゃおう~と思いました。前回作ったDockerイメージにJavaクラスを追加してindex.htmlをちょっと修正したらいけるだろう…と思っていたのですが、なんだか無理そうなのでEclipse先生とかjersey(JavaでREST APIを作るためのフレームワーク)様の力を借りたいと思います。
##ざっくり手順
1)事前準備(各種ツールのダウンロード)
2)とりあえずEclipseで動くプロジェクトを作る
3)プロジェクトをWARでエクスポートしてDockerで動かす
##使ったもの
Docker Desktop for Windows
Windows PowerShell
Eclipse
###1)事前準備
それぞれ以下の公式サイトからダウンロード
[Docker Desktop for Win
VSCodeで”パッケージがマッチしない”エラー
VSCodeでJavaを使っていたら、パッケージがマッチしないエラーが発生したので備忘
#やりたいこと
パッケージ名がマッチせずにエラーが発生
設定したフォルダをソースパスに設定する“`
package a.b.c.interfaces.Sample;public class SampleController {
}
“`#エラー内容
java(536871240)#調査
java(536871240)でググる#原因
想定していたディレクトリ以外でソースパスに設定されている#解決策
VSCodeのエクスプローラーで該当ディレクトリの親ディレクトを右クリックで– Remove Folder to Java Source Path
を選択し、該当ディレクトリを右クリックして
– Add Folder to Java Source Path
を選択することで、ソースパスとして設定されエラーが無くなる。
#参考
https://teratail.com/questions/287130
@IntDefについて
## 経緯
私はEnumクラスが大好きなのですが、この前初めてIntDefを触りました。
独自アノテーションに対して付与する・・・?
便利そうなので調べてみました。## IntDef(StringDef)とは
端的に言うと、Androidにおいて**Enumより軽く、型安全に定数を使用できるようになるアノテーション**のことです。Enumを使用した場合、1つのEunmにつき1.0~1.4 KB ほど増えることがあるそうです。
サイズの増加は可能な限り避けたいので、かなり有用な方法に思えます。([参考](https://developer.android.com/topic/performance/reduce-apk-size#remove-enums))## 使ってみる
とりあえずEnumのサンプルを。細かい部分は目を瞑ってください。“` Sample.java
public enum DayOfTheWeek {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESD
[100%] FibFrog (codility Lesson 13)
_Lesson13_
## [Fibonacci numbers](https://app.codility.com/programmers/lessons/13-fibonacci_numbers/)***
[Open reading material (PDF)](https://codility.com/media/train/11-Fibonacci.pdf)> _Medium_
> ### [FibFrog](https://app.codility.com/programmers/lessons/13-fibonacci_numbers/fib_frog/)
> Count the minimum number of jumps required for a frog to get to the other side of a river.#### Task description
***
The Fibonacci sequence is defined using the following recursive formula:F(0) = 0
条件分岐で学んだこと10/18
“`js
public class Main {
public static void main(String[] args) {
int isHungry = 1;
String food = “魚”;
System.out.println(“こんにちは”);
if (isHungry== 0) {
System.out.println(“お腹がいっぱいです”);
} else {
System.out.println(“はらぺこです”);
}
if (isHungry == 1) {
System.out.println(food + “をいただきます”);
}
System.out.println(“ごちそうさまでした”);
}
}
“`三項演算子でシンプルに描く
“`js
int isHungry = 1;
String food = “魚”;
System.out.println(“こんにちは
【Java】PaizaのJava入門編(6)まで終えて重要だと感じた内容まとめ。
##乱数の生成 Math.random();
“`java
public class Lesson036{
public static void main(String args[]){
//randomメソッドは実数を生成するのでdouble型の変数を宣言
double d;
//randomメソッドで生成した実数を変数dに代入
d = Math.random();
//出力
System.out.println(d);
}
}
“`
##整数を生成する場合 (int)(Math.random()*10)
“`java
public class Lesson037{
public static void main(String args[]){
//int型変数iを宣言
int i;
//randomメソッドで0以上10未満の整数を生成
i = (int)(Math.random()*10);