のんびり精進

調べた情報などをおすそ分けできれば。

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

こんなデータベース用ライブラリを誰か作ってほしい(Go)

Go DB

Go2 Advent Calendar 2019 の 6 日目の記事です。 Go の database/sql って使いにくくないでしょうか。 二年ちょっと前にもっと楽にできないかなと思って調べました。 欲しかったもの database/sql を使いやすくしたもの ORM は要らない ただし、SELECT と I…

Dart/Flutterでドメイン駆動設計(DDD)してみた - 実装編

前編である「導入編」の続きです。 まずそちらをざっと一読されることをお勧めします。 kabochapo.hateblo.jp ソースコードは本記事投稿後にたびたび改変しており、記事内容との相違があります。ご了承ください。 github.com 作るアプリについて(ご注意) F…

Dart/Flutterでドメイン駆動設計(DDD)してみた - 導入編

カテゴリ別にメモを管理できるアプリの開発を DDD(Domain-driven design)でやってみたものです。 github.com 二つの記事から成り、この記事はその一つ目です。 導入編(本記事) 解決しようとした問題点や、DDD と関連用語の意味の他、モデリング・レイヤ…

【Dart】シンプルに派生クラスを作る(別名の代わり)

クラスに別名を付けることができれば後述の問題が解決するのですが、今のところできないため、代わりに 元のクラスと機能は同じままで継承するシンプルな方法がないか調べてまとめた記事です。 ※タイトルに「複製」という言葉を使っていましたが、同じものが…

【Flutter】依存オブジェクトの注入

1ヶ月ちょっと前に Flutter の provider というパッケージに関する記事を書きました。 qiita.com そこでは、provider の機能の一つとして「DI の仕組みを提供」と説明しています。 しかし記事を複雑化するのを避けて掘り下げないままにしました。 代わりにこ…

【SQLite/MySQL】グループごとの上位N件ずつを取得

MySQL でグループごとに上位のN件ずつを取得する方法は以前に書きました。 kabochapo.hateblo.jp サーバサイドの MySQL はこれで解決しました。 しかし、スマホアプリ側で似たテーブル構成にしておいて同様のクエリを使いたくてもできません。 そこで、Andro…

【Android / iOS】スマホOSとSQLiteのバージョン対応

スマホアプリ内のデータベースと言えば、SQLite を使うことが多いと思います。 自作のアプリでも SQLite を使っていましたが、非常にシンプルなクエリのみでした。 そのためあまり気にしていなかったのですが、新たなアプリで少し複雑なクエリが必要になって…

【Dart】Mapの順番(HashMap, LinkedHashMap, SplayTreeMap)

様々な言語によくあるハッシュマップでは順番の概念がなく、その一方で、PHP(連想配列)など一部の言語の実装では順番があったりします。 言語を切り替えて開発したりしばらく使わなかったりすると混乱する部分です。 Dart の Map についてはどうなっている…

【MySQL】グループごとの上位N件ずつを取得

Window 関数を使う方法 MySQL 8.0.2 で導入された Window 関数をまず使ってみます。 参考にしたのは次のページです。 「ROW_NUMBER() - Oracle, SQL Server and PostgreSQL」と書かれているので MySQL 以外でも共通で使えるはずです。 www.sqlines.com SELEC…

【Dart/Flutter】静的解析の強化と注意

静的解析の機能は Dart や Flutter のツールに組み込まれていて、IDE でもプラグインで提供されていますが、そのまま使っても足りないことがわかりました。 例えば、const を付けるのが望ましい箇所であっても Android Studio や VS Code は教えてくれません…

【Go】GoLandとVS Codeでinterfaceの定義や実装に飛ぶ方法

Go

interface の実装を見たいときや、逆に定義を見たいときがありますが、簡単にジャンプできると便利ですね。 実装へジャンプ GoLand 定義(interface 自体やメソッドの定義)にカーソルがある状態で次のいずれかの操作をします。 Ctrl + Alt + B Alt + Enter …

【MySQL】NOT EXISTSのサブクエリでOR条件を指定すると遅い

3年以上前に Twitter にメモ的に書いたものなのですが、忘れたときに遡って探し出すのが大変なのでこちらに再メモ。 SELECT * FROM tb1 WHERE NOT EXISTS ( SELECT * FROM tb2 WHERE tb2.col1 = tb1.col OR tb2.col2 = tb1.col ); くっそ遅くて、実行計画を…

【Flutter】SliverAppBarとTabBarを組み合わせたときに各タブのスクロール位置を保持したい

Flutterでは伸び縮みするApp Barを使うのも簡単に実装できます。 でも、タブを表示して中にListViewなどを表示すると、各タブ内のスクロール位置が連動してしまいました…。 例えば、1つ目のタブのリストでスクロールして2つ目のタブに切り替えると、そのタブ…