<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>towa.co</title>
    <subtitle>By William B.</subtitle>
    <link rel="alternate" type="text/html" href="https://towa.co/"/>
    <link rel="self" type="application/atom+xml" href="https://towa.co/feed.xml"/>
    <id>https://towa.co/feed.xml</id>
    <updated>2025-10-25 20:27:33.133910</updated>
    <rights>Copyright 2025, William B.</rights>

    <entry>
    <title>Yet another opinion on Electron apps</title>
    <link rel="alternate" type="text/html" href="https://towa.co/articles/2025.10.25-yet-another-opinion-on-electron-apps.md"/>
    <id>tag:towa.co,2025,yet-another-opinion-on-electron-apps.html</id>
    <published>2025.10.25</published>
    <updated>2025.10.25</updated>
    <author>
        <name>William B.</name>
        <uri>https://www.towa.co/</uri>
    </author>
    <content type="html" xml:lang="en"><![CDATA[
<h1>Yet another opinion on Electron apps</h1><p>The other day Daring Fireball reported on the <a href="https://daringfireball.net/linked/2025/10/20/electron-apps-slow-down-tahoe">Electron App / Tahoe lag issue, and</a> he took the opportunity to respond to Theo Browne who previously responded to a Daring Fireball comment on Electron apps.</p><p>In <a href="https://www.youtube.com/watch?v=WdmfFmwsGDo&t=435s">Theo’s video</a>, he makes some decent points. Of course, Electron attracts a lot of newbies and people who just aren't concerned with doing it right so it will just have a higher percentage of bad apps. His examples of where Electron was faster, I suspect, is because someone was new to SwiftUI (same issue) and judging by the minimal amount of information they didn’t know what they should have been doing. I was there too when I started out with SwiftUI. Maybe I’m still there now at times.</p><p>The only good comparison between any two ways of writing an app would be to take the experts in their domain and have them make the app.</p><p>Just look at some twitter clients like <a href="https://tapbots.com/tweetbot/">Tweetbot</a> and <a href="https://twitterrific.com">Twitterific,</a> or the Reddit apps like <a href="https://apolloapp.io">Apollo</a>. It’s not difficult to see that one or even a handful of people can make a superior experience to a whole team of well-paid Silicon Valley employees. I imagine that is part of the reason 3rd party clients were effectively shutdown for both of those platforms, or why companies that provide Electron-based apps like <a href="https://en.wikipedia.org/wiki/Slack_(software">Slack</a>) don’t want 3rd party clients. If someone outside the company makes a better experience, it will be harder to control the experience fully. I.E. force a new feature on users that they don’t want, and you’re hoping they’ll adopt out of exhaustion in trying to avoid it. That kind of goes with Theo’s complaint about Mac’s UI not changing much. Sure, because that’s what users prefer. What they don’t prefer is a dozen apps that decide they’re going to invent a new way to do things different to everyone else because their brand and uniqueness matters more than their users.</p><p>I do think you can make a decent app with Electron, but it is the <a href="https://en.wikipedia.org/wiki/Walmart">Walmart</a> of frameworks. I shop at Walmart too, it’s not bad. But Electron, like Walmart, will never be great. I’m not even sure that Electron wants to be great.</p><p>There is no great electron app that is the inspirational design for anyone intending to enter that app’s market. They’re all walled gardens, like Slack, or they’re just fine. I’ll be happy to eat my hat if I’m wrong, but I think that will always be the story for JavaScript.</p>

    ]]></content>
</entry>


    <entry>
    <title>Good tools do not need to be forced on people</title>
    <link rel="alternate" type="text/html" href="https://towa.co/articles/2025.07.06-good-tools-do-not-need-to-be-forced-on-people.md"/>
    <id>tag:towa.co,2025,good-tools-do-not-need-to-be-forced-on-people.html</id>
    <published>2025.07.06</published>
    <updated>2025.07.06</updated>
    <author>
        <name>William B.</name>
        <uri>https://www.towa.co/</uri>
    </author>
    <content type="html" xml:lang="en"><![CDATA[
<h1>Good tools do not need to be forced on people</h1><p>At the end of last month, a story had started going around that Microsoft thinks “<a href="https://www.pcgamer.com/gaming-industry/ai-is-no-longer-optional-microsoft-is-allegedly-pressuring-employees-to-use-ai-tools-through-manager-evaluations/">AI is no longer optional</a>” with reports that your A.I. usage may affect your evaluation by your manager.</p><p>I’m not going to disagree that there is not any value in A.I. tools. I would argue the cost and accuracy are not good enough for it to be anything more than a research project that needs to be refined before it is ready for real-world use.</p><p>Many other companies would disagree with that and are charging forward fully with A.I.</p><p>I guess the only thing I would say about A.I. (aside from it’s an ambiguous term that means many things and what people are mostly talking about are LLMs) is that if your software was useful or great, then you wouldn’t need to force it on people.</p><p>Many big A.I. proponents are that they just want to push it on people and say you have no choice. It is the future. Ignoring the obvious monetary benefit for pushing that agenda, if they believe that is true, just get on with the work of improving it. People will come to it if it provides real value.</p>

    ]]></content>
</entry>


    <entry>
    <title>Where you should really start when debugging the Netatmo Smart Indoor camera</title>
    <link rel="alternate" type="text/html" href="https://towa.co/articles/2024.08.11-where-you-should-really-start-when-debugging-the-netatmo-smart-indoor-camera.md"/>
    <id>tag:towa.co,2025,where-you-should-really-start-when-debugging-the-netatmo-smart-indoor-camera.html</id>
    <published>2024.08.11</published>
    <updated>2024.08.11</updated>
    <author>
        <name>William B.</name>
        <uri>https://www.towa.co/</uri>
    </author>
    <content type="html" xml:lang="en"><![CDATA[
<h1>Where you should really start when debugging the Netatmo Smart Indoor camera</h1><p>I’ve always been a fan of <a href="https://www.netatmo.com">Netatmo’s</a> product. I’ve bought nearly every one of them excluding the siren, doorbell and smart lock. Though I am tempted by the smart lock if my backdoor is compatible.</p><p>What drew me to them was that they’ve always worked (reliable and stable), they don’t require subscriptions, and they are well-supported. With the exception of the <a href="https://www.netatmo.com/smart-indoor-air-quality-monitor">Smart Indoor Air Quality Monitor</a>. Don’t get me wrong, that product works as expected, and the app is good. It’s just that it’s basically an indoor weather module, but it doesn’t get the same support as the weather module. I.E. no dashboard support and no api support so, as an example, it’s not supported by the excellent <a href="https://www.weatherstatus.app">Weather Status for Netatmo app</a>.</p><p><strong>TLDR</strong> I’ve blathered on a bit more than you may like if you’re having problems with your Netatmo Smart Indoor Camera. The answer is, check the SD card. It’s probably the SD card giving you grief. If it works on your computer, wipe the files and try starting from a truly fresh starting point. It doesn’t even have to be a clear if you have another SD card. I put the old SD card in from my old Netatmo camera and everything worked perfectly since doing that.</p><p><strong>Note:</strong> a good way to check if your camera is really having network issues is to get its IP address from your router. Then load it in your browser. Something like <code>http://192.1.2.3/</code> is good enough. You should get some sort of forbidden error. I say some kind because occasionally, it would show a basic nginx style 403 forbidden error pages and other times I’d get a JSON response.</p><p>Either way, the network is fine, so you should definitely look at the SD card at that point.</p><p>The longer version is that I had a Netatmo smart indoor camera for 8 years and it died. 8 years, when I even put in a hotter location than recommended, was perfectly reasonable to me. So, I bought another one.</p><p>When you set it up, it now tries to jump straight into HomeKit setup without allowing you to get around it. That felt off to me, but I had no choice. I did that and it failed. Oddly enough, the camera actually did show up in HomeKit and seemingly worked. However, configuring it or doing anything in the Netatmo app did not work.</p><p>I tried over and over, and it would fail in random ways, mostly around the network issues. I tried the desktop app, it would say it was fine, and then it would show up in the app. But it failed on remote access due to the network apparently being unverified. You get a message saying:</p><blockquote><p>“Remote access to this product has been blocked (unverified connection). Please configure the network from this app to verify the connection. Configure network”.</p></blockquote><p>Other people have had the unverified connection issue too. See <a href="https://helpcenter.netatmo.com/hc/en-us/community/posts/19927598186898-Indoor-camera-showing-as-blocked-in-Security-App">here</a> and <a href="https://community.ui.com/questions/Netatmo-Doorbell-keeps-losing-connection/f59bbc30-f707-4138-aee3-6769bba063c2">here</a>. Some people have said this error is random. How could that be? I mean, either your network is verified or not, right? I suspect all those people having issues probably have an SD card issue.</p><p>Some issues caused by the SD card are that unverified network, but even if you get around that it can:</p><ol><li>Cause the Camera settings view to effectively get stuck in a crash loop between a blank view and some error message that isn’t shown long enough to read.</li><li>Break HomeKit configuration with an unknown error.</li><li>Make the dashboard and app think the camera is offline when it is not.</li></ol><p>It is perhaps also the cause of all sorts of weird error states when trying to configure the camera. The app doesn’t appear to start from zero every time you try setting it up. You get all sorts of unexpected navigation paths that usually end up in a retry view that won’t go away, resulting in needing to kill the app.</p><p>The app in general does seem pretty shoddy since the new UI. Back when it was the ‘green’ app it was perfectly fine. Even when it was the green app’s UI but in orange it was fine. Then they did this new sort of one view for everything that also matches the dashboard more (consistency is fine I guess) and it’s gone all downhill since then.</p><p>I’m happy it is working now. I do have to admit, once this one goes or if I feel I need another, I may consider another brand that is compatible with <a href="https://support.apple.com/en-gb/guide/icloud/mm7c90d21583/icloud">HomeKit secure video</a> just to see how it is elsewhere.</p><p>The Netatmo camera has always had a few issues. The cylinder shape means it does fall over easily and can break. My first one broke its plastic bottom after falling over enough times. It did continue to work for many years after that. Just with a bit of electrical tape to hold the bottom on. They have since improved the design by putting a grippy rubber bottom on it rather than smooth plastic.</p><p>It does also run a bit hot. It is an aluminium case, which means that dissipates the heat and, of course, it’ll feel warm. Not only that, but it should be able to operate between -20c and 50c. It’s not their fault, but the room can get up to 30c easily in the summer (unfortunately for me, it’s where I work). So, I feel I might be pushing its running temperature closer to that 50c than I’d like, and perhaps that’s why the first one died.</p><p>Still, despite my unhappiness with the new app and the fact the SD card can break everything and support staff don’t even think to mention that, I’d say it’s still a reasonable product to consider.</p><p>The thing is when it works, it works really well and aside from HomeKit secure video, the fact it has multiple options for uploading videos while also storing videos locally on the SD card. You’ve got quite a few options for ensuring you capture those critical moments, and the fact it can last 8 years without being deprecated is sadly quite the feat with a technology product.</p>

    ]]></content>
</entry>


    <entry>
    <title>Netatmo set up pain</title>
    <link rel="alternate" type="text/html" href="https://towa.co/articles/2024.08.04-netatmo-set-up-pain.md"/>
    <id>tag:towa.co,2025,netatmo-set-up-pain.html</id>
    <published>2024.08.04</published>
    <updated>2024.08.04</updated>
    <author>
        <name>William B.</name>
        <uri>https://www.towa.co/</uri>
    </author>
    <content type="html" xml:lang="en"><![CDATA[
<h1>Netatmo set up pain</h1><p>My <a href="https://shop.netatmo.com/en-gb/security/cameras/camera-indoor">Netatmo indoor camera</a> has died the other day, which was a bit sad, but it did live a solid 8 years despite being dropped and handled roughly over the years. Some of this was because of the initial design where the bottom was smooth plastic, so it would take very little to make it slide and fall over. They’ve fixed this, and it appears to have a more grippy rubber bottom pad.</p><p>Anyway, so naturally I decided I’d buy another one. Well, I’m on day two of attempting to get it to set up. Part of the problem, imo, is that they’ve bought fully into a trend that Apple started where no real error information is given, and no progress information is given. As an example, I have managed to probably get it setup now. I’ve got all the way to what, I hope, is the last step. I’m on a set-up screen with a giant spinning circle, and it simply says <em>“Setting up the accessory… It may take a while”</em>. Okay, what’s awhile mean? How do I know if it is actually moving forward or is the roughly 30 minutes it’s sat on the screen a waste of time?</p><p>I can’t close the app without killing it, which will probably leave it in a bad state. I seem to have got the HomeKit setup in a bad state where I get a nondescript error saying I can’t add the accessory. Ironically, the first time I set up the device it appeared the HomeKit setup mostly worked, and the device showed up in my Mac’s HomeKit view. But something went wrong, I’ve had to remove it, and it’s gone wrong since then.</p><p>The bulk of the issues were admittedly not their problem. Turns out my router segregates 5 ghz and 2.4 ghz wireless connections. My phone was on 5ghz and the device only supports 2.4 ghz. At the very least highlight this, I’m at least a technical person and I imagine most people wouldn’t even think of this or even know how to fix it, so it just comes off looking broken.</p><p>After all, I didn’t even think of this straight away. Unfortunately, it sort of worked most of the time, every time I would click retry or start the process from scratch it seemed to change the setup process implying to me, you can get a dirty state, and it just won’t start from fresh when you start over.</p><p>Where I started putting things together is I realised my <a href="https://www.netatmo.com/en-gb/smart-indoor-air-quality-monitor">Netatmo Indoor Air Quality Monitor</a> somehow lost its HomeKit setup. Of course, this required starting from scratch and factory resetting it. It had also got stuck on the Wi-Fi setup. That’s when I realised my problem was likely my Wi-Fi setup.</p><p>This along with some various bad state in the app that breaks windows and requires killing apps over all has made the process frustrating. It wasn’t this way before, it feels like as the app has got more complicated the quality is starting to fail.</p><p>The hardware is solid, but it does need to be updated too. The Wi-Fi issues could be solved that way and to be honest, micro-USB should not be used any more.</p><p>Oh, and please support the indoor air quality monitor better. It’s a rebranded weather station and yet, it seems to be excluded from the web dashboard and APIs. Its app is the least reliable of all the apps, and that could be resolved by using <a href="https://www.weatherstatus.app">Weather Status</a>, but I don’t believe the developer can support it.</p><p>With all of this said, I still very much enjoy their products, and they seem to make the best balance of quality and not trying to bleed people for subscription money, so I will stick with them.</p>

    ]]></content>
</entry>


    <entry>
    <title>SFSafariViewController in SwiftUI</title>
    <link rel="alternate" type="text/html" href="https://towa.co/articles/2024.07.01-sfsafariviewcontroller-in-swiftui.md"/>
    <id>tag:towa.co,2025,sfsafariviewcontroller-in-swiftui.html</id>
    <published>2024.07.01</published>
    <updated>2024.07.01</updated>
    <author>
        <name>William B.</name>
        <uri>https://www.towa.co/</uri>
    </author>
    <content type="html" xml:lang="en"><![CDATA[
<h1>SFSafariViewController in SwiftUI</h1><p>If you would like to have a Safari web view in your SwiftUI app, you’ll probably want to create a <code>UIViewControllerRepresentable</code> for <a href="https://developer.apple.com/documentation/safariservices/sfsafariviewcontroller">SFSafariViewController</a>. You’ll see from the documentation that it can’t be built in as a sub-view. It basically needs to be on its own, so the natural place to put a Safari web view is in a sheet.</p><p>Well, if you do that, and you simply copy and paste one of the numerous examples, you’ll find when you scroll, the navigation bar can collapse and doesn’t look particularly nice. It looks like a bug.</p><p>What you need to do is set the configuration <code>barCollapsingEnabled</code> to false and ensure you do it before you create the <code>SFSafariViewController</code> object.</p><p>Here’s a full example that will work nicely in a SwiftUI sheet.</p><pre><code class="language-swift">import SwiftUI
import SafariServices

struct SafariWebView: UIViewControllerRepresentable {
    typealias UIViewControllerType = SFSafariViewController

    let url: URL

    func makeUIViewController(context: Context) -&gt; SFSafariViewController {
        let configuration = SFSafariViewController.Configuration()
        configuration.barCollapsingEnabled = false

        let controller = SFSafariViewController(url: url, configuration: configuration)
        return controller
    }

    func updateUIViewController(_ uiViewController: SFSafariViewController, context: Context) {

    }
}

// Example Usage:
.sheet(isPresented: $showPage) {
    SafariWebView(url: myStateObjectURL)
        .ignoresSafeArea()
}
</code></pre><p>I hope that helps.</p>

    ]]></content>
</entry>

</feed>
<!-- THE END -->
