ひとしれずひっそり

主にソフトに関することをメモしていきます。過程をそのまま書いていたりするので間違いが含まれます。鵜呑みしない様に。

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

MQTT

IoT

IoTでよくMQTTが使われているがまだ試したことがない。 こちらを参考にMosquittoを試してみる。 developer.mamezou-tech.com Macなのでインストールはbrewを使う。 % brew install mosquitto % brew install mosquitto-clients mosquittoはブローカーと呼ば…

M5AtomS3が届いた

IoT

最初に入っているのはこれかな? github.com platformioで試せそう。 環境のダウンロードに時間がかかかったがコンパイルできた。 最初から入っているのとは違った。 前回M5StampS3で色々試したので、platformio.iniファイルは参考になる。 https://github.c…

Protocolにoptionalなmethodを含めれる?

Objective-Cではoptionalなmethodを含めることができた。 Swiftではどうか? 検索すると @objc と optional を付けるとできる様だけど、StructureやEnumに適用できなくなるということらしい。 Swift流にするならoptionalの代わりにextensionでデフォルトの実…

ファイルのインポートやURL Schemeの処理は onOpenURL を使用する

SwiftUIの前は、ファイルのインポートやURL Schemeで呼び出される際にAppDelegateやSceneDelegateでコールバックが行われていた。 SwiftUIでもUIApplicationDelegateAdaptorでAppDelegateと同じ様なことができる。 struct MyApp: App { @UIApplicationDelega…

3軸トゥールビヨンの置き時計【3Dプリント用STLデータ】購入した(7)

9:20まで進んだ。

Structureは継承できない

オブジェクトのシリアライズでStructureを定義するとjsonなどに変換しやすくなる。 既存ソフトの置換えをしていて次の様な流れで処理しようとしている。 Export Object(Class) -> Struct -> JSON Import JSON -> Struct -> Object(Class) Classは継承したも…

willSave()はsetPrimitiveValue(:forKey)を使え

Core Dataを使っていて保存前に作成時刻や更新時刻を記録したい時にwillSaveのタイミングで記録できる。 developer.apple.com とりあえずカスタムクラスを作成して、willSaveで普通にプロパティで設定してみる。 import Foundation import CoreData @objc(It…

余白を押した時に反応させる場合はcontentShapeを使う

ListやFromを使用した時のCellにTextを使ったとして、表示される文字を押すと反応するが、余白を押すと反応しない。 contentShape()を使用すると余白にも反応する。 毎回忘れて検索するので、書いておく。 struct ContentView: View { @State var showingAle…

M5Stamp S3 (3) Lチカ

IoT

M5Stamp S3 でLチカをしてみる。 M5Unifiedで使ったのにちょっと手を加えただけで動いた。 katsuyoshi.hatenadiary.com LEDはM5Stamp picoのソフトほぼそのままで動いた。 そのままで動いたということはRGBではなくGRBの順になっている様だ。 gist.github.co…

3軸トゥールビヨンの置き時計【3Dプリント用STLデータ】購入した(6)

暫く放置していたけど少しずつ進めないとと思って少し進めた。 組み立てはこちらを見て進める。 www.youtube.com 電源ソケットのケーブルが短かった。 思わぬハンダ付け作業が入ってしまいゼンマイユニットの固定までで終えた。 次回は動画の 2:15 くらいか…

M5Stamp S3 (2)

IoT

ハード的な仕様はこちらから辿れる。 github.com M5Stamp picoの置き換えを考えているので比較してみる。 公式サイトから引用 S3の方はハーフピッチになっていてI/Oが沢山あるが、付属のピンヘッダー(2.54 mmピッチ)で使える部分で比較する。 左側、GROVE PI…

M5Stamp S3 (1)

IoT

M5Stamp S3が届いた。 M5Stamp picoの置換えとして捉えているがI/Oが倍くらいに増えてるのでかなりのことができそう。 裏にはLCD用の端子もあり盛りだくさん。 PlatformIO PlatformIOでビルドしようとしたらESP32じゃないよといわれた。 This chip is ESP32-…

setPrimitiveValue(_:forKey:)でhasChangesにならない

CoreDataでdynamic propetyが作られる。 @NSManaged public var name: String? 素のままではなく加工して使いたい場合にdynamic propetyの代わりにprimitiveValueやsetPrimitiveValueを使う。 @objc public var name: String { get { return primitiveValue(…

TextFieldでOptional値を扱う場合の改善

前に書いたTextFieldでOptional値を扱う場合にView内の@State属性を付けたメンバー変数に一旦渡して処理する方法を試した。 メンバー変数に値を渡すタイミングとしてonAppear()を使っていた。 TextField - ひとしれずひっそり onAppear()は描画時に1回呼ばれ…

UndoManagerの実装

ViewにToggle Swithを置いてOn/Offさせ、その操作のUndo/Redoを試す。 変更を通知できる様にObservableObjectをアダプトする。 objectWillChangeというプロパティが使える様になり、変更前にsend()を送ることでViewに更新が必要な事を伝えることができる。 …

SW_CPU_RESETがかかる

IoT

M5Stamp picoでデータを取っている装置のソフトを作り直して、どうも挙動が変なので調べてみる。 通常DEEPSLEEP_RESETで立ち上がってくるのが、 rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 188777542, SPIWP:0xee clk_drv:0x00,…

オブジェクトからクラス名を取得するやクラス名からオブジェクトを生成

現時点でSwift流のやり方は分かってない。 従来からあるNSClassFromString()、NSStringFromClass()を使う。 オブジェクトからクラス名を取得 class A {} NSStringFromClass(A.self) // -> "__lldb_expr_13.A" 空間名(という表現でいい?)がAの前につく様だ。…

static property のoverride

Swiftでクラスに属するpropertyやmethodはstaticキーワードで定義するが、staticはオーバーライドできない。 こちらを参照するとstaticの代わりにclassキーワードを使ってcomputedにするとオーバーライドできる様だ。 software.small-desk.com class A { cla…

1.9インチ 91セグメント I2C電子ペーパモジュール(7)

IoT

e-Paperモジュールでマイナス表示できないため0℃にクリップしていたが、Ambientへの記録もクリップされてしまったので修正。 それと測定中はM5Stamp picoのLEDを表示させる様にした。 よく考えたらマイナス表記もできるので対応させた。 1しか表示できないと…

Navigation Viewで子Viewから左上ボタンで戻る時に何かさせたい時

こちらに書かれていた。 stackoverflow.com struct MyView: View { @Environment(\.isPresented) var isPresented var body: some View { Rectangle() .onChange(of: isPresented) { newValue in if !newValue { print("detail view is dismissed") } } } }

The Basics

Swiftで8進数ってなんと表現する?と思って引っかかったサイト。 docs.swift.org 今まで他人のBlogやコードでSwiftをかじってきて何となくの理解だったのがここを読んで知らないことだらけと気づいた。 今後少しずつ読み進めていこう。 Taplsは知らなかった…

3軸トゥールビヨンの置き時計【3Dプリント用STLデータ】購入した(5)

印刷がやっと終わった。 明日から組み立てよう。 なかなか時間が取れない。

3軸トゥールビヨンの置き時計【3Dプリント用STLデータ】購入した(4)

1番はほぼ丸一日の印刷時間で、夜中も印刷することになり温度低下での失敗を心配してた。 朝確認すると問題なく印刷してる様だ。 6度くらいまでしか気温が低下してなかった様で幸いした。 終わるまでまだまだあるので、気長に待とう。 やっと終わった。 四隅…

3軸トゥールビヨンの置き時計【3Dプリント用STLデータ】購入した(3)

印刷は残すところ黒のみとなった。 一番大きい1番(200x140x34)を印刷しようとしたらスライスできない。 210x210まで印刷できるはずなのに… どうやら印刷前にぐるりと外周を印刷するのがはみでてしまって印刷できないということらしい。 Build Plate Adhesion…

[[self class] new]をSwiftで行う

objcだと頻繁に使ってた[[self class] new]をSwiftではどうやるか? 調べたらすぐ見つかって、こうすれば良いみたい。 [self class]はtype(of: self)に置き換えられる。 required init()が必要になるのが肝の様だ。 requiredって何? gist.github.com メソッド…

XCTest で setup

テストクラスをNewするとsetUpWithError()が含まれている。 ここでメンバ変数を初期化して準備しようとするとエラーでコンパイルできない。 メインのプロジェクト(Test)でAというクラスを定義 import Foundation class A { func foo() -> Int { return 0 } }…

M5Stamp picoでM5Unifiedを使ってRGB LEDを点灯させる場合

IoT

M5Stamp picoでM5Unifiedを使ってRGB LEDを点灯させる場合にどうするか試す。 docs.m5stack.com ドキュメントによるとRGB LEDはサポートされず、FastLED Libraryを使う様にということの様だ。 色はRGBで指定するが、M5Stamp picoはRとGが逆になっている様な…

3軸トゥールビヨンの置き時計【3Dプリント用STLデータ】購入した(2)

前回のゼンマイユニットは組み上がった。 2の部品をヤスリで削って丸くし、ギヤがクルクル回る様にする必要があってもうちょっと削った方がいい気がするが、。 今はかろうじて回っている感じ。 ビスを購入しに行ったが2mmは在庫がないということで注文してき…

String(format:)

String(format:)を使うとsprintf的なことができる。 ただ文字列と思って%sを使うとクラッシュする。 文字列はオブジェクトだから%@にしなきゃいけないのを忘れてた。 String(format: "%@,%d", "123", 456) Playgroundで試していたらString(repeating:count:)…

2 duplicate symbols for architecture arm64

久しぶりにテストを実行しようとしたらコンパイラが通らなくなってた。 2 duplicate symbols for architecture arm64 違った。テストしようとしたタイミングでコードも変更してて、それが悪くて通常も通らなくなってた。 Report navigatorで確認すると何が重…