- 1. flutterのandoirdアプリを内部テストしようとしたら起動できなくて泣いちゃった。。。
- 2. 再帰を使用したDFSについて
- 3. 【Java】Base64にエンコード/デコードする
- 4. [24日目] JavaでWebSocket (SSL可)
- 5. DB 更新メソッドの引数にて transaction object をオプション引数的に扱う方式案
- 6. StringBuilderとString型の違い -LeetCode Merge Strings Alternately使用
- 7. SpringBoot3でUsernamePasswordAuthenticationFilterを使うとセッションが落ちる
- 8. jpackageコマンドでfat.jarのインストーラを作成する
- 9. ナップサック問題を制約充足ソルバーを使って解く OptaPlanner チュートリアル
- 10. 40代事務職Java面白い!6週間勉強してオブジェクト指向とGithub便利だなって思った
- 11. 【Eclipse + Git・GitHub + EGit】15分でできるJavaプロジェクトのバージョン管理
- 12. 整数リテラルの各進数表記と接頭辞の由来
- 13. コンパイルエラーと例外スローの違い
- 14. Scannerの作成
- 15. サンプル
- 16. 構文解析のやつ
- 17. Spring Boot学習②~ログイン成功時・失敗時の処理~
- 18. Spring Boot on Embedded Tomcatでリダイレクト時のLocationヘッダーの値を相対パスに変更する
- 19. JdbcTemplateからJdbcClientに移行して嬉しかったこと2つ
- 20. ポリモーフィズムが理解できてなかったのでまとめ
flutterのandoirdアプリを内部テストしようとしたら起動できなくて泣いちゃった。。。
## 事の背景
昔、公務員として土木業界で働いていたのですが、当時の現場作業を簡略化できるアプリを作りたい、、、
そう思い経験0のFlutterに手を出してみた。
いざ、リリースに向けて内部テストでabbファイルをアップロードするも、スマホにインストール後「開く」ボタンが出てこず起動できない。。。
私が愛してやまないflutter cleanコマンドと とビルドを繰り返すも全く解決せず、ということで本当に泣きかけていた。## 結論
AndroidManifext.xmlファイルのは、初期から追加する際は別タグを用意する必要がある。
助けてくださったサイトはこちらです、、、本当にありがとうございました!!!!
https://note.com/chute/n/n75cde5f1712a## 症状の詳細
こちらではgoogle play consoleの詳細は省く。
内部テストでリリースしたアプリのURLをスマホで開き、アプリをインストール。
![image.png](https://qiita-image-store.s3.ap-northeas
再帰を使用したDFSについて
## 問題 Leetcode 104. Maximum Depth of Binary Tree
バイナリ ツリーのルートを指定すると、その最大の深さを返します。バイナリ ツリーの最大の深さは、ルート ノードから最も遠いリーフ ノードまでの最長パスに沿ったノードの数です。
Input: root = [3,9,20,null,null,15,7]
Output: 3## 再帰
### コード
“`java
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
*
【Java】Base64にエンコード/デコードする
# はじめに
業務で担当していたPowerShellのコードに「文字列をBase64に変換している処理」があったので、JavaでBase64にエンコードする方法と、Base64からデコードする方法を調べてみました。
# コード
## 基本的な変換処理
* Base64にエンコード/デコードするためのクラスは、`Base64.Encoder`と`Base64.Decoder`に分かれていました。
* これらのクラスは、いずれもJava8で実装されたそうです。
* APIのページを見る限り、`Base64.Encoder`と`Base64.Decoder`のコンストラクタを直接呼び出すことはできません。
* そのため、`Base64`クラスから`getEncoder()`メソッドと`getDecorder()`メソッドを呼び出してこれらのクラスのインスタンスを作ります。
* 単にエンコードするだけであれば`encode()`を使いますが、ここでは結果を文字列として受け取りたかったので` encodeToString()`を使っています。“`java:Base64Sam
[24日目] JavaでWebSocket (SSL可)
こんにちは、なりかくんと申します。
この記事はなりかくん Advent Calender 2023の24日目の記事です。(執筆は6日遅れの30日とか言えない。)今回は、JavaでWebSocketを扱う方法を紹介します。Javaの記事ってなかなか出てこないんですよね。特にSSL対応のやつとか。
(調べ方が悪いのかもしれない。)# Java標準機能のHttpClientでWebSocket
Java標準機能のHttpClientでWebSocketを接続できます。調べてもなかなか出てこなかったのでコードを紹介します。“`java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.WebSocket;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.ExecutionException;
DB 更新メソッドの引数にて transaction object をオプション引数的に扱う方式案
# 概要
DB にクエリ発行するメソッドにおいて
– 外部から transaction object を渡してクエリを発行する
– transaction object の省略時はメソッド実行時に tranaction を作成してクエリを発行するをシンプルに実現したい、というのが基本的なモチベーションとしてありました。
これを実現する方式をいくつか検討しました。# 基本実装
User を取得するコードを考えます。transaction 内でデータ取得したい場合と、単純な参照系の機能などで transaction を意識せず取得したい場合があり、この両方を同じコードで対応したいです。“`java
class UserRepository
{
public User findById(String userId, QueryCondition condition, Connection conn)
{
try (
Statement stmt = con.createStatement();
R
StringBuilderとString型の違い -LeetCode Merge Strings Alternately使用
## 問題文
2 つの文字列 word1 と word2 が与えられます。 word1 から始めて交互に文字を追加して、文字列を結合します。ある文字列が他の文字列より長い場合は、マージされた文字列の末尾に追加の文字を追加します。マージされた文字列を返します。
## 解き方 3つ
### コード① StringBuilderを使用しない 実行速度:13ms メモリー:42.82MB
“`java
class Solution {
public String mergeAlternately(String word1, String word2) {
String ans =””;
int index=0;
while(index < word1.length()+word2.length() ){ if(index < word1.length()){ ans += word1.charAt(index); }
SpringBoot3でUsernamePasswordAuthenticationFilterを使うとセッションが落ちる
## はじめに
SpringBoot3.xにアップグレードするとログインできなくなるプロジェクトがありました。
本家のアップグレードのドキュメントを見ても特に変更漏れが無くハマった為、記載しておきます。
同一の症状が出ている人は参考にしてみてください。## 環境
– SpringBoot 3.1.6
– Java 17
– spring-boot-starter-security
– spring-session-jdbc
– UsernamePasswordAuthenticationFilterクラスを使用して拡張ログイン後DBにセッションは書きこまれていましたが、何故かログインすらできませんでした。
## 簡易修正方法
SecurityFilterChainにてHttpSecurityで設定できるrequireExplicitSaveにfalseを入れるだけです。
“`java
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http, AuthenticationManager a
jpackageコマンドでfat.jarのインストーラを作成する
jpackageコマンドでfat.jarのインストーラを作成する方法を示します。
# ① 事前準備
Windows環境でjpackageを利用する場合、WiX 3.0が必要です。リリースページからwix311-binaries.zipをダウンロードして、PATHを通しておきます。
https://github.com/wixtoolset/wix3/releases
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/597cc2d6-2e5f-e487-8c5c-84101b416dbf.png)
# ② jpackageコマンドの実行
ディレクトリ構成は以下の通りです。HelloWorld-0.0.1-SNAPSHOT.jarが対象のfat.jarです。
“`
build
├─ exe
└─ lib
└ HelloWorld-0.0.1-SNAPSHOT.jar
“`jpackageコマンドを実行します。
– インストール先のフォルダを指定する
ナップサック問題を制約充足ソルバーを使って解く OptaPlanner チュートリアル
この記事は [FastDOCTOR After Advent Calendar](https://tech.fastdoctor.jp/entry/2023/12/29/092753) 26日の記事です。次の日の記事は [外注で初期開発したシステムを内製化するためにやったこと](https://zenn.dev/shirauix/articles/5459c5b6a2f7ee) です。
# 概要
ナップサック問題は比較的簡単な問題であって、特別な道具は必要ないのですが、あえてそういう問題を制約充足ソルバーで解くことによって、やさしく学ぶことができるのでは、と考えています。
FastDOCTOR Technologies のテックブログでは、 OptaPlanner について実践的なケースを紹介していますので、よければご覧ください。
[【最適化問題】「医療の往診サービスで、医師とドライバーのペアが特定のエリアを巡回する最善のルートを考えよ」をソルバープログラムで解いてみた](https://tech.fastdoctor.jp/entry/2023/05/19/195525)
40代事務職Java面白い!6週間勉強してオブジェクト指向とGithub便利だなって思った
公式ドキュメントを読め!おじさんに疲れたので、じゃあ英語で読めるようにアメリカのオンライン大学のコンピューターサイエンス学部に2023年9月に入学しました。現在社会人学生です。
11月からプログラミングのJavaコース入門で勉強してます。1週間のカリキュラム
使用しているテキスト※公式サイトで公開されているシラバスより引用してます
Introduction to Programming Using Java Version 9.0, JavaFX Edition
https://math.hws.edu/javanotes/index.html公式サイト掲載シラバスよりhttps://www.uopeople.edu/become-student/prepare-for-uopeople/prepare-college-courses/programming-1-cs-1102-learning-materials/
– その週のテーマのテキストを読む
– その週テキストで学んだことを英語のエッセイ形式で書く
– 毎週プログラミングのコードを書く課題こんな感じです。
プ
【Eclipse + Git・GitHub + EGit】15分でできるJavaプロジェクトのバージョン管理
# はじめに
本記事ではEclipseを使って作成したプロジェクトとGit・GitHubを連携してバージョン管理を行う方法を解説します。Git・GitHubを使ってみたいけどどうすればいいのかわからないという人向けの記事となっておりますので、参考にしていただければ幸いです。# 前提条件
– Eclipseを使ったプロジェクト作成の方法を理解している
– GitHubのアカウントが作成されており、最低限の使用方法を理解してる# 目次
1. [EGitの導入](#egitの導入)
1. [Git・GitHubとの連携](#gitgithubとの連携)
1. [commitとpushを行う](#commitとpushを行う)
1. [参考文献](#参考文献)# EGitの導入
Eclipseを開いて画面上部のヘルプ→Eclipseマーケットプレースをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287818/52024e69-9a2c-32bf-0a98-e5a3
整数リテラルの各進数表記と接頭辞の由来
# 整数リテラル(Integer Literals)における接頭辞
### 【さっそく】
下記のコードについてのコンソール出力値がどうなるのか考えてみましょう。
“`Java
class Prefixes {
public static void main(String[] arg) {
int x1 = 10; // 10 in decimal
int x2 = 012; // 10 in octal
int x3 = 0xA; // 10 in hexdecimalSystem.out.println(x1);
System.out.println(x2);
System.out.println(x3);
}
}
“`コンソール出力:
“`java
10
10
10
“`
出力値を見ると、どの変数にも整数として10が格納されていることがわかります。
なぜ初期値の記述が違うにもかかわらず、どの変数も10を格納しているのかというと
変数”x2”、
コンパイルエラーと例外スローの違い
java silverの問題を解いてて、コンパイルエラーと例外スローどちらになるかわからなかったのでまとめてみた。
コードがコンパイルエラーになるか、例外をスローするかの基準
1. **コンパイルエラー(静的エラー)**:
– **定義と一致しない使用法**:変数や関数の定義に反する使用(例:存在しないメソッドの呼び出し、データ型の不一致)。
– **構文エラー**:プログラムの構文が言語の規則に違反している場合(例:セミコロンの欠落、括弧の不一致)。
– **解決できない参照**:使用されているが定義されていない変数や関数への参照。
– **アクセスレベルの違反**:privateやprotectedなど、アクセスできないメンバへのアクセス。2. **実行時例外(動的エラー)**:
– **外部要因**:外部リソースの問題、ネットワークエラーなど。
– **無効な入力**:ユーザー入力や外部データソースからの予期しないデータ。
– **リソースの問題**:メモリ不足、ファイルシステムの問題など。
– **プログラムの論理エラー*
Scannerの作成
1日に二本出してますね
更新頻度が極端…今回はScannerを作ります。Lexerで分割したやつをmapに直すやつですね。
名前Scannerで合ってるかわからないそんじゃ早速。
“`java:Scanner.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;public class Scanner {
public MapScan(ArrayList list){
String functionName = list.get(0);
ArrayList
サンプル
# やることリスト
1. 挨拶
1. ほほおほ
1. 穂はおフォアhフォアhf
1. hふぁおwf### コードブロック
“`java
//void method
public class Sample {
private String value;
public void setValue(String value) {
this.value = value;
}
}
“`
構文解析のやつ
みなさまお久しぶりでございます。
アドオンシリーズは更新していません()
また機会があれば更新しようかと思います(投げやり)とりあえず自分用メモ
“`java:Lexer.java
public class Lexer {
private static final ArrayListlist = new ArrayList<>(); // 結果
// 検知する文字とか
private static final Listbrackets = Arrays.asList(‘(‘,’)’,'{‘,’}’,'[‘,’]’);
private static final Listoperators = Arrays.asList(‘=’,’+’,’-‘,’*’,’/’);
private static final Liststrings = Arrays.asList(‘\”,'”‘);
private static final List
Spring Boot学習②~ログイン成功時・失敗時の処理~
前→https://qiita.com/19960417akiho/items/3fa636e6a26c371bcaa8
以下の動画を参考に、ハンズオン形式でSpring BootでWebアプリを制作していきます。
今回はPart6。
正しいペアのIDとパスワードを入力した際にはトップメニュー画面に遷移し、
誤ったペアのIDとパスワードを入力した際は、ログイン画面にその旨をテキストで表示します。まずはトップメニュー画面のhtmlとコントローラーを用意します。
# menu.html&MenuControler.java
“`menu.html
トップメニュー
トップメニューだよ
“`“`
Spring Boot on Embedded Tomcatでリダイレクト時のLocationヘッダーの値を相対パスに変更する
# バージョン
– Spring Boot 3.2
– Embedded Tomcat 10.1> – 3.2以前のバージョンでもできる可能性があります。
> – JettyやUndertowでのやり方は検証していません。# やりたいこと
デフォルトの状態では、リダイレクト時のLocationヘッダーは絶対パスになります(例: `https://a.example.com/dest`)。これは[Jakarta Servletの仕様](https://jakarta.ee/specifications/servlet/6.0/jakarta-servlet-spec-6.0#convenience-methods)らしいです。
しかし、クライアントとSpring Bootサーバーの間に複数ロードバランサーがあった場合、この挙動だとクライアントがうまくリダイレクトできない可能性があります。
なので、Locationヘッダーを相対パスにしたいです。# 結論
“`application.properties
server.tomcat.use-relative-redirects
JdbcTemplateからJdbcClientに移行して嬉しかったこと2つ
# バージョン
– Spring Framework 6.1
– Spring Boot 3.2# JdbcClientって?
Spring Framework 6.1(対応するSpring Bootは3.2)から`JdbcClient`インタフェースが導入されました。
内部的には`JdbcTemplate`および`NamedParameterJdbcTemplate`のラッパーです。
流れるようなインタフェース(Fluent API)が特徴です。# Optionalが使いやすい
`JdbcTemplate`で主キー検索してその結果を何かのクラスの`Optional`にしたい場合、👇のようにちょっと面倒でした。“`java:JdbcTemplateでOptionalを返す例
public OptionalselectById(Integer id) {
try {
Hoge hoge = jdbcTemplate.queryForObject(“””
SELECT id, name
ポリモーフィズムが理解できてなかったのでまとめ
ポリモーフィズムは、異なるクラス(サブクラス)が共通のインターフェース(スーパークラスで定義されたメソッド)を持ちながら、それぞれ異なる振る舞いを実装することを指す。
例として、図形というスーパークラスがあり、四角形、円といったサブクラスがある場合を考える。これらのサブクラスは、図形クラスから継承され、面積を計算するという共通のメソッドを持つが、その計算方法はクラスによって異なる。
“`java
class 図形 {
double 面積を計算する() {
return 0;
}
}class 四角形 extends 図形 {
double 幅;
double 高さ;四角形(double 幅, double 高さ) {
this.幅 = 幅;
this.高さ = 高さ;
}@Override
double 面積を計算する() {
return 幅 * 高さ;
}
}class 円 extends 図形 {
double 半径