Javaエンジニア、React+Firebaseでアプリを作る

趣味で作ったものいろいろ

『Spring Framework超入門 ~やさしくわかるWebアプリ開発~』を読んだ

『Spring Framework超入門 ~やさしくわかるWebアプリ開発~』(著: 樹下雅章)を読みました。 Spring Framework超入門 ~やさしくわかるWebアプリ開発~ [ 株式会社フルネス 樹下雅章 ]価格:3058円(税込、送料無料) (2022/3/4時点)楽天で購入 感じたことを…

【Java】ネストした型のワイルドカードでエラーが出る場合の対処法

例えば、ListのListで、中身はなんでもよい、みたいな場合があるとする。コードであらわすとこんな感じ。 List<List<?>> wildcardList; これに、例えばIntegerのListのListを割り当てようとするとエラーになる。 List<List<?>> wildcardList = new ArrayList<List<Integer>>(); // コンパイ</list<integer></list<?></list<?>…

『Spring Framework 超入門』のレイアウト化の作成がうまく出てこないときの対処法

『Spring Framework超入門 ~やさしくわかるWebアプリ開発~』を読んでいます。 Spring Framework超入門 ~やさしくわかるWebアプリ開発~ [ 株式会社フルネス 樹下雅章 ]価格:3058円(税込、送料無料) (2022/2/9時点)楽天で購入 問題発生 6章の「レイアウ…

Draft.jsで何も出てこない→出てるはず

Facebook社のReact用リッチエディタDraft.js。 Overview | Draft.jsにあるサンプルを試したけれど、何も出てこなかったときのメモ。 ソースコード import React from 'react'; import {Editor, EditorState} from 'draft-js'; import 'draft-js/dist/Draft.c…

Javaで1日の始まりと終わりを取得する

Javaで1日の始まりと終わりを取得します。 LoalDateから取得する場合 LocalTime.MINとLocalTime.MAXを使います。 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate date = LocalDate.parse("2021-11-01", formatter); L…

JavaのLocalDateTime.parse()に日付だけ渡すとエラー

JavaのLocalDateTime.parse()で日付のみを指定したらエラーになりました。回避策も書いておきます。 コード DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDateTime datetime = LocalDateTime.parse("2021-11-01", format…

Firestoreのtransaction中にドキュメントをaddする

Firestoreではtransaction機能が使え、複数の書き込みをまとめることができます。 transactionを使用するときには、以下のコードのようにrunTransactionを利用します。2つ目の引数にトランザクションの内容を書いた関数を渡します。 await runTransaction(db…

Firestoreで文字列を正規表現で制限するセキュリティルール

Firestoreのセキュリティルールでは、文字列を正規表現で制限することができます。悪意のあるユーザにおかしな値を登録されないようアプリと同じ制限をかけておきましょう。 String.matches(regex) String.matchesを使うと、フィールドに登録される値が 指定…

Firestoreで数値の範囲を制限するセキュリティルール

Firestoreのセキュリティルールで数値の範囲を制限することができます。悪意のあるユーザにより思わぬ値を登録されてしまい、誤動作を起こすことを防げます。 フィールドの大小比較を使う 数値の範囲を指定するには、フィールドの値を大小比較します。 例え…

Firestoreで文字列の長さを制限するセキュリティルール

Firestoreのセキュリティルールで文字列の長さを制限することができます。悪意のあるユーザによりとても長い文字列が登録されてしまい、結果過大な請求が発生するのを防ぐためにも、文字列の長さを制限しておくのはおすすめです。 string.size() 文字列のstr…

FirestoreでEnum型風ルールを作成する

Firestoreではセキュリティルールでフィールドの型を指定できます。 フィールドの型にはboolやint、stringなどがあります。 しかしenum型は存在しません。 Firebaseのセキュリティルールでは、string型のフィールドに対して登録できる文字列を制限することが…

MUI(Material-UI)のアイコンにフチドリをつける

MUI(Material-UI)のアイコンにフチドリをつけます。 通常のCSSのスタイルと同様にstrokeとstrokeWidthを指定します。strokeOpacityやstrokeLinejoinなども指定できます。 コード <StarIcon sx={{color: yellow[500], stroke: yellow[900], strokeWidth: 4, strokeOpacity: 0.2}} /> 全ソースコード import React from 'react'; import Box from '@mui/material</staricon>…

PythonでSetのSetを作成する

PythonでSetのSetを作成しようとするとエラーになります。 my_set = set() my_set.add({1, 2, 3}) # => TypeError: unhashable type: 'set' Pythonでは、Setの各要素はハッシュ可能(hashable)でなければいけません。 Pythonの組み込み型でハッシュ可能なのは…

再帰を使わない順列生成 : 1から9の数字を1回ずつ使ってできる数を、小さい方から順に列挙する(アルゴリズム編)

1から9の数字を1回ずつ使ってできる数を、小さい方から順に列挙するアルゴリズムです。 次に小さい数を求めるアルゴリズム ある数Nが与えられたとき、その数に使用されている数字を使用してできる数で、Nの次に大きい数を生成します。 ① Nの10^iの桁を、n[i]…

Groovyのクロージャ ④Groovyで独自のDSLの作成

背景 JenkinsというCIツールではGroovyのコードでCI挙動を記述できるJenkins pipelineがあります。 ここではGroovyのDSL(Domain-Specific Language:ドメイン固有言語)が使われています。 DSLにはクロージャが効果的に使用されています。 今回は独自のDSLの作…

Groovyのクロージャ ③名前解決方法(resolveStrategy)の挙動

背景 JenkinsというCIツールではGroovyのコードでCI挙動を記述できるJenkins pipelineがあります。 Jenkins pipelineではGroovyのDSL(Domain-Specific Language:ドメイン固有言語)が使われています。 DSLにはクロージャが効果的に使用されています。 今回は…

Groovyのクロージャ ②クロージャのthisとownerとdelegate

背景 JenkinsというCIツールではGroovyのコードでCI挙動を記述できるJenkins pipelineがあります。 Jenkins pipelineではGroovyのDSL(Domain-Specific Language:ドメイン固有言語)が使われています。 DSLにはクロージャが効果的に使用されています。 今回は…

Groovyのクロージャ ①クロージャ内のメソッド呼び出し基礎編

背景 JenkinsというCIツールではGroovyのコードでCI挙動を記述できるJenkins pipelineがあります。 Jenkins pipelineではGroovyのDSL(Domain-Specific Language:ドメイン固有言語)が使われています。 DSLにはクロージャが効果的に使用されています。 今回は…

「ピーターからの問題」1から9までを使って分数の穴埋め算。解答のJavaScriptプログラム

Qiitaでこちらの問題をみたので、解いてみました。 これをjsで解けと会社の上司に言われたんですが全然わからん。誰かわかります?笑 pic.twitter.com/ZM6VmigaVQ— ケイセイ@JavaScriptと仲良くなりたい (@keisei_otsuka) 2020年2月2日 アルゴリズム 考える…

JavaScriptでPython風のzip_longest関数を実装する

こちらの記事でPython風のzip関数を実装しました。 yucatio.hatenablog.com 今回はzip_longest関数を作成します。以下のように、各配列の同じインデックスの要素をまとめます。 const a1 = [1, 2, 3] const a2 = ["Jan", "Feb", "Mar"] const a3 = ["Garnet"…

JavaScriptでPython風のzip関数を実装する

JavaScriptにzip関数がなかったので実装してみました。以下のように、各配列の同じインデックスの要素をまとめます。 const a1 = [1, 2, 3] const a2 = ["Jan", "Feb", "Mar"] const a3 = ["Garnet", "Amethyst", "Aquamarine"] zip(a1, a2, a3) #=> [[1, "J…

プログラミングで初学者のときにつまづいたこと

プログラミングでつまづいてきたことというブログ記事を見たので、私も書いてみます。 satoru-takeuchi.hatenablog.com mizchi.hatenablog.com 自己紹介 記事をリンクしたお2人と違って大したプログラマではないですが、システムエンジニアとして働いて10年…

eclipseのJavadocの警告設定の各設定値の意味【後編】

Javadocの記述が不完全なときに警告を出そうとして、どのような設定があるか調べたメモです。 チーム開発でJavadocをどの程度書くかどうか、意識を統一するのにこの記事をご活用いただければと思います。 前編の記事 未指定の Javadoc タグ メンバーの可視性…

eclipseのJavadocの警告設定の各設定値の意味【前編】

Javadocの記述が不完全なときに警告を出そうとして、どのような設定があるか調べたメモです。 チーム開発で、Javadocをどの程度書くかどうか、意識を統一するのにこの記事をご活用いただければと思います。 Javadocの警告設定 Javadocコメントを処理 誤った…

eclipseの警告表示の重大度レベルごとの挙動

前回の記事で、eclipseの警告レベルをどれにするか迷ったので、各重大度レベルでの挙動を確認しました。 yucatio.hatenablog.com eclipseの警告表示の設定 eclipseを使用していると、黄色の波線と警告マーク(3角形の中に!)が表示されたことがあるでしょう。 …

うっかりミスを防ぐeclipseおすすめ設定6つ【後編】

前編に引き続き、うっかりミスを防止(警告)するeclipseの設定をまとめました。 前編の記事 セミコロン2つを検知 何も記述されていないブロックを検出 @Overrideのつけ忘れを防ぐ 環境 あとがき 前編の記事 yucatio.hatenablog.com セミコロン2つを検知 行末…

うっかりミスを防ぐeclipseおすすめ設定6つ【前編】

こんにちは。プログラミングでうっかりミスをしてしまうブログ主です。特にスペルミスがひどいです。 レビューで指摘されると申し訳無い気持ちになるので、そのようなうっかりミスを防止(警告)するeclipseの設定をまとめました。 空白の表示 スペルチェック …

Pythonで辞書が格納されたリストを複数のキーで並べ変える

辞書を格納したリストがある時、複数キーで並び変える方法を紹介します。例えば、以下のような辞書が格納された配列で、まずprice順に並び変え、priceが同じだったら、weightの順番に並び変えたい場合の方法です。 list1 = [ {'name': 'ぶどう', 'price': 50…

htmlのテーブルに使われるタグが覚えられないと思ったときに読む記事

こんにちは。htmlのtable関連タグが覚えられないブログ主です。特に<tr>と<td>がごちゃごちゃです。が、それぞれの何の英単語の略であるかを覚えたところ、ごちゃごちゃにならずにすみました。今回はそれぞれ何の英語の略なのかと、日本語訳を紹介します。 テーブル</td></tr>…

Pythonのconfigparserでセクションがない設定ファイルを(無理矢理)読む

背景 PythonでJavaのMANIFEST.MFファイルを読んで表示するプログラムを書く必要がありました。 MANIFEST.MFファイルは以下のような形式です。 Manifest-Version: 1.0 Built-By: yucatio Build-Jdk: 11.0.5 Created-By: Maven Integration for Eclipse Implem…