gitでcherrypickの使い所

新機能を実装したりバグフィックスのためにあれこれ試したりする時、main or masterブランチとは別のブランチを作り、そのブランチで作業するものだ。この作業ブランチで実装した内容、つまり1つ以上のコミット全てをmainに取り込みたい時は、作業ブランチを…

dart/flutterでキャンセル可能な非同期処理を実装する

公式ドキュメントにサンプルがない?ので結構ハマった。ググって出てきたサンプルもなんか上手くいかなかった。試行錯誤して多分これで大丈夫そうなのでメモしておく。 CancelableOperationを使う キャンセル不要の非同期処理の実装はCompletionを使うことが…

Dart/Flutterのisolateを理解

isolate = dartのマルチスレッド的なやつ。 main()はmain isolate 子のisolateを生成した親のisolateは子のisolateの終了を待つことができる 親子isolate間でping pong的な相互通信もできる worker isolateで1秒かかる処理を待つ import 'dart:isolate'; voi…

iOS、Androidのフルページ対応(100dvhとか)

2023年1月現在、端末の画面高さぴったりに表示したい時、CSSだけでiOS、Android両方対応するのは無理っぽい。JavaScriptも使わないといけないようだ。さもなくばposition: absolute; bottom: 0; 指定した要素がアドレスバーの裏側に回ったりする。 iOS、Andr…

Macでfvmをインストール

公式サイトでbrewでインストールするように書かれているが、Xcodeのcommand line toolsが最新ではないとか怒られたり面倒。 Error: Your Command Line Tools are too outdated. 同じく公式サイトの別のインストール方法として書かれているdartで入れた方が良…

Nuxt + TypeScript + Google Maps API

問題発生 Nuxt + TypeScriptで、Google Maps APIを使おうとするとエラーに遭遇。 例えばこのようにgoogle.maps.*を使おうとすると let map: google.maps.Map このようにエラーが出る。 Cannot find namespace 'google'. 解決方法 @types/googlemaps Nodeパッ…

tabBarItem.titleよりtitleが優先される問題

UIViewControllerで以下のようにセットし、それをUITabController#viewControllersに追加する。 title = "全てのエリア" tabBarItem.title = "投稿" この場合、タブの下に表示されるタイトルは、titleの方が優先されるようである。ちなみにtitleはNavigation…

Node.jsでアルファベット混じりの短めのユニークID生成

Node.jsでおなじみのuuidパッケージを使ってUUIDを生成していました。 https://www.npmjs.com/package/uuid ただこれだと 23b7f61b-5d92-40bf-9c2d-1a6da91ac059 のように長くなってしまいます。URLに使うなら長さが短くアルファベットも交えたものにしたい…

Apple Watchにビルド&インストールできない

Watch OS App開発時によく起きる問題。以下で大抵解決します。 ・iPhone再起動・Apple Watch再起動・Xcode再起動・iOSアプリをビルド&iPhoneへインストール・iPhoneでアプリが動いている状態で、Watch OSアプリをビルド&Apple Watchへインストール

icons.js as it exceeds the max of 500KB

Nuxtプロジェクトをビルドすると以下のようなエラーが出てました。 ${パス}/node_modules/bootstrap-vue/src/icons/icons.js as it exceeds the max of 500KB. bootstrap-vueにあるicon.jsがデカすぎみたいです。nuxt.config.jsのbuildに以下を追加して解決…

Nuxtでstore.commitを呼び出すラッパー関数を作る

NuxtのPageやComponentからStoreに値を更新する時、以下のようにstore.commitを呼びます。 this.$store.commit("analytics.incrementClickCount") サーバーサイドでのみ実行されるasyncDataではContextを通じて呼びます。 // Nuxt公式のサンプルではcontext…

GCP FirestoreのEmulatorをKillしたい

以下のようにFirestoreのエミュレータを指定のポートで起動できます。 $ gcloud beta emulators firestore start --host-port=localhost:8081 起動した後、[firestore] Dev App Server is now running.と表示されます。そこでCtrl + Cを押すとターミナルが入…

1つのプロジェクト成り立たせるためにGCPのApp EngineとCloud Functionsで動作させています。App Engine、Cloud Functions両方共通のコードがあります。この共通コードをどこに置くかで小一時間悩みました。 結論から言うと共通コードはリポジトリを分けて、…

TypeScript、Jest、Webpackでimportの際、aliasを使えるようにする

モジュールをimportする際にパスが長くなる場合、aliasを使うことがあります。Node.jsの開発でTypeScriptでソースコードを書いて、Jestでテストして、Webpackでバンドルしてデプロイしている人も多いと思います。aliasの設定は各々の設定ファイルでする必要…

GCP Cloud FunctionsをTypeScriptで書く

Google Cloud Platform(GCP)のCloud FunctionsもTypeScriptで書きたい。そしてデプロイしたい。で、ググるとFirebaseのCloud Functionsの説明ばかり出てくるんですよね・・・FirebaseはFunction作成時にTypeScriptを選択できるみたいだけど、GCPは無理なよ…

MulterのエラーをJSONで返したい時

Node.jsでmutipart/form-dataを受信する場合、Multerを使っている人も多いと思います。Multerに設定したファイルサイズ上限を超えた時など、デフォルトではMulterがHTMLでレスポンスを返してしまいます。Node.jsでAPIサーバーを実装している時など任意のJSON…

PHPickerResult#assetIdentifierがnilになる

iOS 14から使えるようになったPHPickerViewControllerを使うと撮影した写真や動画を選択するUIを提供してくれて便利です!・・・なのですがPHPickerResult#assetIdentifierがnilになるせいで、PHAsset#fetchAssetsで詳細情報を取れずハマりました 理由はPHPi…

IntelliJで意図しないファイルタイプで開くのを解決する

WebStormなどIntelliJ IDEA系ファイルを作った時、たまに拡張子を無視してプレーンテキストとして開かれるようになることがあります。ファイルを削除して作り直しても解決しない・・・この問題は設定で解決できます。 メニューからPreferencesを選択 サイド…

UIImageでAssetsのフォルダ指定できるようにする

画像のAssetsはフォルダ分けできますが、そのままだと UIImage(named: "dir1/icon1") のようにフォルダを指定するとnilが返ってきます。 Assetsに作ったフォルダを選択してProvides Namespaceにチェックを入れるとフォルダを指定してUIImageオブジェクトを取…

AirDropで音はするけど何も表示されない

iPhoneからMacへAirDropでファイルを送ろうとしたら、Mac側で音はするけど受け入れ確認のアラートが表示されないことがちょくちょくあります。Finderを再起動すると直りました。ターミナルで以下のコマンドを打ちます。 $ killall Finder

Wi-Fiオフだと位置取得精度が悪くなる

CLLocationManagerのdesiredAccuracyの話です。Wi-Fiオフにすると位置情報精度が非常に悪くなる現象に遭遇し、よくみたらドキュメントに書いてありました。 Apple Developer Documentation if you set the desired accuracy to kCLLocationAccuracyKilometer…

Swiftでカスタム配列を作る

配列をラッピングしてメソッドを追加したい場合、Collectionを継承したstructを作るのがよさげ。 class Hoge { var name: String init(name: String) { self.name = name } } struct HogeArray<Hoge>: Collection { let array = [Hoge]() var startIndex: Int { re</hoge>…

WebStorm&NuxtでクライアントサイドのJavaScriptデバッグ

ChromeやSafariでもJavaScriptのソースレベルデバッグはできますが、Nuxtを使ってると、どのファイルにデバッグしたいコードがあるのかわかりづらかったりします。 WebStorm(IntelliJ)を使っているならWebStorm経由でブラウザを起動することで、WebStormのエ…

WebStormにペーストしたとき自動整形されるのを防ぐ

他でコピーしたコードをWebStormのエディタにペーストすると、勝手にインデントや改行位置など整形されてしまうことがあります。以下の設定でそれを防ぐことが出来ました。 メニュー、WebStorm > Preferences...を開く 検索入力ボックスにsmart keysと入力 R…

WebStorm&Nuxtでサーバーサイドのデバッグ

コードが増えてくるとサーバーサイドでブレークポイントを貼ってソースレベルデバッグがしたくなりますよね。WebStorm(Intellij IDEA)を使っているのですが、以下の方法でできるようになりました。 ・メニューからRun > Edit Configurations...を選択・左…