I decided to make a change to the Home Screen for the new year.

Smaller widgets in a different arrangement.

Still the same number of icons.

My granddaughter did my makeup today. She said I’m Hades, from Hercules.

I think she nailed it.

Free and Opinionated

NetNewsWire Blog: “Our mission is to make the best RSS reader that we like making. We value stability, high performance, clarity, and lots of figurative air and space rather than a mélange of features.”

I love how Brent and the NNW team hold true to what they believe – and what they want – a feed reader to be.

If you haven’t checked out NNW you really should, it’s a great product.

COVID and Coffee

Watch out! It's a blog fly!I decided I’d go to my favorite coffee shop to work on Stream.

I’m sipping my cofffee, coding away, distanced from folks, of course.

A lady walks in and starts loudly discussing how, on Christmas Day, while the family was together her sister finds out she was exposed to someone with COVID. Swell.

Turns out she’s an employee coming in for her shift.

I just packed up and left. Will this mess ever end?

Stream Development Notes

It feels really good to be spending a little time on Stream today.

My last commit to the repository was June 24, 2021. That’s way longer than I thought. 😳

With any luck I’ll get cache sizing and clearing in today and, fingers crossed, I’ll be able to ship it soon.

Being able to clear the cache and control its size was the first request I received after shipping 1.0.

There are so many things to do and so little time to do them. It’s like eating an elephant. You have to do it one bite at a time.

Stream for Mac Dev Note

RibbitIn iOS development land we have UITableViewController and UITableViewCell for building lists.

On the Mac – AppKit – we have, with my limited knowledge, NSTableView, NSTableCellView, and NSCell. Apple’s developer docs say:

Beginning with macOS v10.7, you can use NSView objects (most commonly customized NSTableCellView objects) instead of cells for specifying rows and columns. You can still use NSCell objects for each row and column item if you prefer.

For some reason my brain finds that paragraph confusing. I need to dig a bit deeper into the docs but my initial read leaves me believing NSCell is not NSView based?

No matter, it’s not a big deal. I already have Stream for Mac populating the table and selecting a row displays the article for it. I have a very long way to go, mind.

Something I have considered doing is wrapping up the AppKit classes with classes that implement UITableViewController and UITableViewCell so I could at least have a familiar interface to work with, but that might be a bit of work for very little gain.

Oh, if you’re wondering why I’m doing the Mac version in AppKit instead of SwiftUI? It’s simple: I’d like to learn a bit about AppKit. It’s apparent we’re headed for a SwiftUI only world. That’s fine. I’ll be on board at some point – I’ve already done a bit.

Oh, FYI, it’s not that difficult to move from UIKit to AppKit. Minor things, like the paragraph I mention above, but AppKit existed long before UIKit.

Here’s a very simple example.

#if os(iOS) import UIKit typealias HSColor = UIColor typealias HSFont = UIFont typealias HSImage = UIImage typealias HSView = UIView #elseif os(macOS) import AppKit typealias HSColor = NSColor typealias HSFont = NSFont typealias HSImage = NSImage typealias HSView = NSView #endif

In my code I’ve been using HS versions of these class types and they work as expected. If I find a missing method on the Mac, I extend the class to include the missing method. Easy!

Here’s one example of that. extension NSColor { static var darkText: HSColor { return HSColor.black } static var lightText: HSColor { return HSColor.white } static var label: HSColor { return HSColor.labelColor } }

Still plugging away.

Podcast Directory Thoughts

There is a part of me that would love to put together an alternate podcast directory to Apple’s.

I Love RSS!Apple has given so much to the podcasting community, but you never know how long they’ll continue to make it freely available. Remember, they’re a services company now.

The service I’m thinking of would provide a shared web crawler, Administrative UI, and a nice Dashboard for supporters and advertisers. It would also have its own API and provide one compatible with Apple’s offering.

I don’t think it should be run by an individual, or a small company. It should be a cooperative, supported by the podcasting applications and podcasters using it.

Another thing that could fall out of it is an ads business that small podcasters and podcast app creators could take advantage of.

Maybe that’s just too much to expect from a small collective of podcasters and podcast app makers?

Just a thought I needed to get out of my brain.

Here’s the Visio for Mac splash screen, thanks to Chris Roth, a long time Visio Developer.

Visio for Mac Splash Screen

Axon Offer Letter

More olden times. This is my offer letter from Ted Johnson, Vice President of Engineering, Axon Corporation.

Axon eventually became Visio Corporation and the rest, as they say, is history.

Oh, and the $28k per year was a huge improvement from my first gig at Microsoft.

At the time it made me feel really great. I had no idea how stock options worked. I really wish I had. I’d have asked for more. 😀

Back in the olden days, after Visio was acquired by Microsoft.

Making Stream Profitable

I’ve been thinking a lot about how I can make Stream a more profitable application.

I need to go beyond Stream’s Tip Jar and my Ko-fi page.

Ads 💵

As much as I don’t like ads, they may be one way to add a little profit. I think I’d do this with the Mac version since it would be a brand new product. Ads would be woven into the timeline, marked in some obvious way, and would not show too frequently.

I have no idea what ad service I’d use but I wouldn’t want a crummy one that does all kinds of tracking. That makes for garbage apps and I don’t want anything to do with them. That makes it really difficult to include them because I’d bet most, if not all, do some sort of tracking.

Roll Your Own 🌯

I’d I had a popular app I could roll my own ads, like my favorite podcast player, Castro, does.

This would be my preference but I don’t have a big enough user base to pull off something like that. I’d need to do my own ad service to sell and serve up ads.

I do love this idea.

Ads with Upgrade 💵

If I go with the ads route I should offer a one time payment to turn them off.

I don’t know what that payment would be, but it would apply to the current major version. So, you’d pay $X for version 1.0, then you’d pay $X when 2.0 shipped. Everything between 1.0 and 2.0 would be included as part of the price.

Subscription 🔥

This is a fairly popular option with many of the apps I use. The first that comes to mind is, you guessed it, Castro. They charge a very reasonable price of $18.99 per year to upgrade to Castro Plus.

Now, I would not charge anywhere near that for Stream. I’m currently thinking $4.99 per year.

This model is kind of my favorite but it means I absolutely need to provide a constant stream of updates. It makes the idea of version numbers moot, which I really like.

A Better Stream 🏞

I really think I have a chicken and egg problem. When I shipped Stream 1.0 I deemed it good enough. Since then I’ve managed a few small updates, including adding support for iPad. But, my new feature production has been almost non-existent. That would absolutely have to change in the subscription model.

I feel like a better Stream might get me more downloads, maybe some press, which would allow me to make some of these choices.

As it is I know Stream is lacking features. I have a nice list of stuff to do, including completion of a Mac version.

Adding new service support, adding additional view options like a traditional Feed Readers, and adding a more Newspaper like view.

Closing Thoughts 🧠

I have a very small user base so my number one job needs to be bringing in additional users. This is a really tough challenge for a fella that wouldn’t know marketing from a hole in the ground.

While I know I haven’t been updating Stream as often as folks might like, I do think about it daily. It is definitely a labor of love.

More to come. 🧡

I believe I’ll start the day watching CFL Division Semi Finals.

Montreal Alouettes vs. Hamilton Tiger-Cats.

I have no idea who to take. Should be fun to watch.

Today is one of those days I want to sit on the couch, under a blanket, and watch football games.

I’m guessing that won’t happen. 😁

Happy Thanksgiving!

Just a couple turkeys!

First fire of the season.

Polio vs. COVID vaccines

I had to capture this for future reference. This is astoundingly sad.

Redesigning Overcast

A wonderful bouquet of flowers.Tackling the Redesign: ”Finally starting the Overcast redesign, and pragmatic considerations when tackling modernization of older codebases.”

I just finished listening to this episode of Under the Radar from David Smith and Marco Arment.

Marco was sharing the stress he was feeling over the thought of a complete redesign of Overcast, all in one big hunk. The whole time I was thinking DON’T DO IT MARCO! Why? Something this large – even for a small app like Overcast – is very expensive. Marco is a one man shop, so locking himself away for months and months could be very detrimental to the continued success of Overcast. No way should he do it.

Thankfully that was just his mind going through all the steps necessary to come to the conclusion it’s in his best interest to do it bit by bit. Much better idea.

While he’s at it I’d actually encourage him to leave all that underlying Objective-C alone and jump into a little SwiftUI and Combine. He could start with some of his existing table views – SwiftUI Lists – and slowly introduce SwiftUI into his product, if that’s ultimately where his app needs to be.

Another thing he should consider is using Combine before anything introducing SwiftUI. It can absolutely stand alone.

I say these things because I’ve been working on these very dilemmas for a client at the day job. Introducing SwiftUI for simple UI has been quite easy to do and it’s been really easy to slip it into an existing UIKit app.

Picture from Christmas 2008, when I was a gym rat. Loved Muscle Milk Peanut Butter Chocolate, but their Chocolate was also quite good. I’d use it as a snack.

Fairly recent shots. 😄

Saturday Morning Coffee, with Links

My brother stopped doing his Saturday Morning Coffee posts eons ago. I thought I’d run with it and share some links with y’all.

Updating The Verge’s background policy: ”We’re doing this because big tech companies in particular have hired a dizzying array of communications staff who routinely push the boundaries of acceptable sourcing in an effort to deflect accountability, pass the burden of truth to the media, and generally control the narratives around the companies they work for while being annoying as hell to deal with.”

Microsoft introduces Windows 11 SE, new $250 Surface Laptop SE for education market: ”The new Windows 11 edition is a simplified version of Microsoft’s newest OS release, customized for the K-12 education market. The new Surface Laptop SE, which starts at $250 , is targeted at the same space.”

Richard Spencer confronted with ‘embarrassing’ evidence as he takes the stand in Charlottesville conspiracy trial: ”CHARLOTTESVILLE — Richard Spencer, the preeminent leader of the white nationalist movement in 2017, took the witness stand in a federal courtroom in Charlottesville, Virginia on Thursday and testified about his role as a headline speaker at the violent Unite the Right rally that resulted in the death of antiracist activist Heather Heyer.”

Forget Twitter Threads; Write A Blog Post Instead!: ”All of the kool kids in Twitter land seem to be jumping on the bandwagon of a very annoying craze. Twitter threads. Please stop; write a blog post instead.”

Aaron Rodgers Didn’t Just Lie: ”Rodgers’ ignorance regarding the science of immunology brings back to life the old stereotype of the big dumb jock. His utter lack of even the most basic knowledge and logic is shocking. In an effort to defend his lying, he stated, ‘This idea that it’s a pandemic of the unvaccinated, it’s just a total lie … If the vaccine is so great, then how come people are still getting covid and spreading covid and, unfortunately dying of covid?’”

Stream by the Numbers

A week in the life of Stream, my feed reader.

My favorite bit to look at is what Territories folks are in. I love that my app is being used – at least downloaded – all over the world.

I think about localization often. What languages would I start with? German seems like a good start, but based on the numbers Chinese would be a better bet.

Fall is just about done falling.

Zero Accountability

Of course we the people have zero power to do anything about it. Fortunately he left the White House but he’s still free to do whatever he wants and has wacko backers in the Halls of Congress pushing his fascist agenda.

We will have a king dictator in office if we cannot stop him and his ilk.

Photoshop Web Dev Tools

Bringing in the Harvestweb.dev: ”No large project can be successfully completed without the appropriate tools for the job, and it’s for this reason that the Chrome team developed full featured WebAssembly debugging support. It provides support for stepping through the source code, setting breakpoints and pausing on exceptions, variable inspection with rich type support, and even basic support for evaluation in the DevTools console!”

This story about Photoshop Web is a great example of web tools finally supporting languages beyond JavaScript with proper debugging.

I’d imagine Microsoft Chredge and Brave will instantly benefit from these changes.

Safari? Your move Apple.

NFL Hypocrisy