Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

2022-01-01から1年間の記事一覧

T3 Stackすげえ。2023年はこれを追いかけるわ。

create.t3.gg ちらっとTodoアプリを作ってみたけど、これが令和のフルスタックWebフレームワークなのかと驚いた。特に tRPC がすごい。どういう理屈なのかわからないけど、フロントとバックをシームレスにつなげてくれる。APIのエンドポイントを書かなくてい…

イミュータブルの次は何が来るのかな

ここ数年のソフトウェア開発の大きな傾向として「イミュータブル(不変)」というキーワードがあると思う。 インフラはIaCが当たり前になった。IaCは、インフラのイミュータブル化。ChefやAnsibleが10年ぐらい前に出てきてIaCのムーブメントがあって、インフラ…

WTFormsで GETで飛んできたパラメータを捕捉する

ちょっとハマった。結論から言うとこれで動いた。 @app.route("aaa") def user_summary(): form = UserForm(request.args) request.argsを引数に入れると、フィールドの変数と同じ名前のパラメータのデータを紐付けてくれる。 この引数が入っていないと、フ…

Cloud Runのアイドル時間課金がすごく大きくなってしまった話

GCP

今月の半ばから、VPS/Herokuを卒業して、全てGCPに移してCloudSQL x Cloud Runに切り替えた。 BtoB向けのシステムをやっている関係上、営業時間がすぎるとほとんどアクセスされない。CloudRunの最小インスタンスを1にしておくと、アイドル時間にもメモリとCP…

Tailwind CSSを学習しているメモ

MITなBootstrapテンプレートをゴニョゴニョして今ひとつな管理画面テンプレートを場当たり的なCSSとjQueryでカオスになる人生に終わりを告げたいので、Svelte/Reactでリスキリングしている。 というわけで、CSSの再学習にちょうどよいなと思ったのが、ユーテ…

Google Playにリリースする時だけ、Firebase Authenticationが動かない

Firebase Authenticationに限らないと思いますが、半日ハマったので備忘録。こちらにすべてが書いてあった。 minpro.net 「Google Play」を経由してAndroidアプリとしてリリースする場合は、Android Studioで取得した「SHA-1」「SHA-256」ではなく、「Google…

モダン・フロントエンドに慣れるとWPFクソだるい

WPF

2014〜2015年頃はWPFのMVVMを面白がっていたのだが、2022年の今となってはだるい。もっと言うとオワコン。 宣言的な書き方ができないし、バインディングの補完が効かない(できるのかな?) XAML側でバインディングを書く時に、脳内でこのパラメーターだよねっ…

StatefulWidgetを一切使わずRiverpodだけで頑張りたいお気持ち

2年近くFlutterをやっていて、データストアにRiverpodを使っている場合 StatefulWidgetはまじで要らない子なんじゃないかと思い始めている。disposeする対象の管理が面倒でメモリリークする可能性があり、良いことがない。コードも色々増える。 StatefulWidg…

Reactの学習を辞めてSvelteで開発しようかなというお気持ちが

lealog.hateblo.jp こちらの記述がピンズドだった。 原初の時代からReactな案件をそれなりにこなしてきたけど、今でもReact-wayですべてを考えるのはやっぱり小難しいな〜って思うし、このEasyではなくSimpleに極振りしたAPIセットを使いこなすのまじムズい…

ReactでUIコンポーネント作る粒度の温度差について

Checkboxのコンポーネントを作るになんでこれだけのコード量が必要になるのだろうか... Hooksもふんだんに使われている。 github.com import React, { useCallback, useEffect, useRef, useState } from "react"; import styled from "styled-components"; i…

CloudSQL にローカルから接続するメモ

GCP

GCP SDKのインストール(任意) $ brew install --cask google-cloud-sdk $ source /opt/homebrew/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/path.zsh.inc $ source /opt/homebrew/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/completion.…

Google 認証のしょーもないエラー

Unhandled Exception: PlatformException(network_error, com.google.android.gms.common.api.ApiException: 7: このエラーが出て、なんだろうと思ったら、なんてことはない、検証機AndroidのWifiが切れていて、インターネットにつながっていなかった... ち…

SQLのINとEXISTSの違い

Sql

ユーザーテーブルと、そのユーザーが好きなプログラミング言語というテーブルがあるとします。 ユーザーテーブル(UserTable) id name 1 山田 2 村上 3 中村 好きなプログラミング言語テーブル(FavLangTable) id user_id lang 1 1 Python 2 1 PHP 3 2 TypeScr…

SQLAlchemyのEager Loadingをいい感じにやる

SQLAlchemy==1.4.37 N+1のlazy fetchをしたくない場合、eager loadというJOIN時に予めデータを持ってくる方式があります。SQLAlchemyでも、Railsでも、この辺は一緒。Alchemyの場合、孫のテーブルをJOINした時もそれらが出来る。 数時間苦戦したので、Eager …

Asynchronous Gap on BuildContext

Flutter2.x系からこの問題がフィーチャーされるようになった気がする。1.xの時はそこまで。 どんな問題? 非同期でサーバーにデータを送った後、ダイアログを閉じるようなケース。 非同期でawaitを入れた所で、Flutterのウィジェットツリーの再構築が同期さ…

WPFでコンボボックスの選択値が共有できない

WPF

印刷プリンタのコンボボックスを作っていて、その選択値を様々な画面で使い回したいのだが、非常にハマった。今も解決できない。 ViewModelBaseというクラスを作り、そのプロパティを継承したら行けるかと思ったが、ダメだった。ViewModelBaseのコンストラク…

SQLAlchemy2.0スタイルメモ〜scalars〜

FastAPIならasyncで全部行きたいねってことで、プロダクトのコードをFlask→FastAPIに書き直している。 で、簡単なクエリの動作確認で、こんなコードを書く。 async def get_posts(db: AsyncSession) -> List[Post]: result: Result = await db.execute(selec…

EPSON VP-4300で「EJL 1284.4@EJL」という文字列が常に印字される

USBでドットインパクトプリンタとWindowsマシンがつながっている状態で、プリンタの共有をかけた。この共有プリンタをインストールしたクライアント側で、必ず EJL1284〜 とかいう文字列が出るようになってしまった。 ぐぐってみたら先駆者がいた。 okwave.j…

FlutterでUnixTimeをDateTimeに変換する

Firebaseのライブラリが国際化対応しているため、日時をUnixtimeで持っていた。 それをDartでDateTimeに変換するときのコードで、癖があったのでメモ。 www.kindacode.com final timestamp1 = 1627510285; // timestamp in seconds final DateTime date1 = D…

'Timestamp isn't a type' により、flutter buildが通らない

Firestoreのタイムスタンプ型をDartのDateTimeに変換する時に、1時間ほどハマってしまったので。 freezedを使っている人は多いと思いますが、DateTime⇔Timestampを変換するには、以下のようなコンバーターを噛ます必要があります。 class TimestampConverter…

PythonでJSONを任意の型にデコードしたい

How to convert JSON data into a Python object? - Stack Overflow 一番簡単なコードがこれ。 import json j = json.loads(your_json) u = User(**j) こういうモデルを定義して、以下のようなコードを書いてFastAPIに食わせたら、普通に動いた。 from typin…

Next.js のgetStaticPropsのチュートリアルをTypeScriptで

nextjs.org 以下の所をTypeScriptで書くとこうなったので、共有。 function Blog({ posts }) { return ( <ul> {posts.map((post) => ( <li>{post.title}</li> ))} </ul> ) } // This function gets called at build time export async function getStaticProps() { // Call an …

Visual Studio 2022 17.2系 on ARM Windowsで、IDE固有のバグを2つ踏んだ模様

IDE起因のバグが2つもある。 Unrecoverable build error - 0x800700C1 インストーラープロジェクトでインストーラーが作成不可になった。 テストが実行されない 1週間前動いていたものが、テストが検出されなくなった。 Intel CPUのWindowsでは、最新版(17.2…

.NET Framework 4.8 → .NET 6 へ移行作業にトライ

死ぬほど重い腰を上げて、こちらにトライしてみた。そうはいっても、やることは単純だった。下記のUpgrade Assistantに沿って、Enterを叩きまくる簡単なお仕事。Enterを押す回数が多く、20回ぐらい押した。 dotnet.microsoft.com やってみた所、あっさり.net…

数値をバインドしてるTextBoxの入力値が空になるとエラーになる

WPF

現象の説明はこちらに詳しい。 Decimal? とかでnull許容型にしているデータをTextBoxへバインドすると、入力値を消して空にしたときに、赤枠でエラーが出る。何か入力したあとにバックスペースで空文字にすると、空文字として扱われてしまうため、NULLに変換…

PlanetScale、大変興味があります

qiita.com HerokuのMySQL AddonはRDSを$10から使えるのでその意味でコスパが良いけど、1時間に投げられるクエリの数に制限があり、一番安いプランはHDDで海外リージョン。今の所これが最もコスパが良い選択肢ではあった。ホストOSを管理しないで、LB/App/DB…

React x TypeScript、フィーリングッド

oukayuka.booth.pm こちらのReact3部作を全部買ったんですが、読み終わったらメインにも書くけど、このシリーズは最高です。 近年はPythonをメインにすることが多く、TypeHintも真面目に使ってこなかった。Flutterやり始めてDartを使うようになり、Dartの癖…

HerokuのJawsDBでmax_questions error

Herokuで借りているMySQL(JawsDB)で、2万件弱のSQLを発行する処理(データの一括登録)を投げてしまったら、以下のエラーが出た。 "User 'hogehogehoge' has exceeded the 'max_questions' resource (current value: 18000)") devcenter.heroku.com sharedプラ…

2022年はフロントエンドの年になる(個人的に)

あけおめあけおめ。 2021年からFlutterマンになった。フロントエンドは、技術以外の課題にも向き合えるのが自分に向いている。サービスフローであったり、UXのあり方であったり。 Flutterは中級駆け出しにはなれたので、次はFlutterのマザーにあたるReactを…