Insert the url of the feed you want to read here (e.g. https://news.google.com/news/rss/):

inessential.com

Brent Simmons’s weblog.

NetNewsWire 5.0.1 Released 13 Sep 2019, 4:56 pm

NetNewsWire for Mac icon: globe with a satellite in the foreground.

NetNewsWire 5.0.1 is almost entirely a bug-fix release — see the release notes for the full scoop.

It includes one sort-of new feature: there’s now a checkbox in Preferences for turning off the unread count in the Dock. (It was a hidden pref — now it’s visible.)

Status

Here’s what else we’re working on:

  • iOS/iPadOS app
  • NetNewsWire 5.0.2 for Mac — which will mainly be about performance (yes, we can make it even faster)
  • NetNewsWire 5.1 for Mac — tentative feature list includes content extraction and at least one more syncing option (but we might change our minds on these: anything can happen between now and then)

We might also distribute NetNewsWire 5.0.2 for Mac on the Mac App Store. No guarantees yet, of course, but work is happening in that direction. This goes to our goal of getting as many people as possible using RSS readers.

 10 Sep 2019, 6:05 pm

Had to get a new key fob at work today — my old one wore out. Just a couple weeks shy of my fifth anniversary at Omni! Time flies.

I figure I’m just over eight years from retiring, so I’m not even halfway done here. :)

On Syncing NetNewsWire Using iCloud 6 Sep 2019, 8:44 pm

People have been asking me about supporting iCloud as a sync method for NetNewsWire.

It would be really cool because:

  • There’s no sign-in
  • It’s free — no need to spend money on another service
  • It would help broaden the pool of people using RSS, since there would be no additional expense or service they’d need — they could just get going

It’s a great idea — no question. Given that my goal is to get as many people as possible using RSS, this makes total sense.

Why we didn’t ship with this feature

For the first release — I still think of it as a 1.0, because it really is — our best bet was to appeal to people already using an existing RSS service. We know that those people like and use RSS, and they’re the people most likely to check out a new RSS app.

(We could have delayed and shipped with support for more existing services, but we figured one was enough to get started with, and we could add other services later. And we are.)

In other words, we tried to make an app that the existing market would like. And that’s the right call when you’re starting out.

Also: iCloud sync makes the most sense when you have both a Mac and an iOS app, and we don’t — the iOS app is still in progress. We totally expect people to use NetNewsWire on the Mac and Unread or Reeder on their iPhone and iPad — and iCloud sync won’t work across apps. This scenario requires using services such as Feedbin.

Why I have no idea when this feature might appear

For any existing RSS service, we can be confident that our effort to support it in NetNewsWire would be successful. This is well-trodden ground: we make some web API calls, integrate with our database, and done. It’s not nothing, but conceptually it’s simple and there’s no cause to worry about technical issues.

But iCloud syncing will mean writing exploratory code and only then finding out if it’s going to work.

Syncing the feeds list should be relatively easy — the real issue is with syncing read/unread/starred states of articles. That means a lot of small records.

Is CloudKit up to this? What are the limits? How fast is it? How reliable?

We just don’t know.

Yes, it’s encouraging that News Explorer has this feature — but that doesn’t tell us much about the limits, reliability, and performance.

Working on this is a risk.

So — as you can imagine — we’re still more keen on supporting existing RSS services, because we know there are plenty of people who for-sure like RSS, and who might like NetNewsWire, but who won’t switch their syncing system just to use NetNewsWire.

That said: I do think we’ll get around to trying this, and I’ll be super-pleased if it works, because it really is a great idea — but we have a bunch of other work to do first. (Including the iOS app!)

 6 Sep 2019, 12:56 pm

Markos Charatzas writes about his excitement in joining the Apple developer world in 2009 to his eventual disillusionment today.

On the Many NetNewsWire Feature Requests to Show Full Web Pages 5 Sep 2019, 1:25 am

A number of people have asked that NetNewsWire show the full web page — right there, in the app — after clicking a link.

The idea is pretty good! It solves two big problems:

  • You get full content, which is great when a feed contains only summaries or truncated articles
  • You don’t have to switch to another app: you can stay right where you are

You’d think it’s a no-brainer, and we should just go ahead. But there are other considerations.

One big one is that your ad blockers and privacy extensions won’t run. They work in Safari, but they do not extend to other apps that use WebKit. This means that viewing a web page in NetNewsWire would be less secure and more annoying than viewing the same page in Safari (or whatever your browser is).

This points to one of my design principles: the app should have boundaries. Some features belong in the app, and some features are best left to apps that do that feature way better than NetNewsWire could. One of those things is showing web pages — that’s really a web browser feature.

Having boundaries means we can concentrate on doing a great job at the things that do belong in the app.

(Before you mention SFSafariViewController, recall that it’s iOS-only.)

What about the glory days?

“But Brent! In NetNewsWire 2.0 you added a tabbed browser to NetNewsWire, and it was awesome and a hugely popular feature!”

It was! But times have changed. Many websites are hostile these days. In 2005, this feature was fine — but these days it’s totally not.

A winged messenger arrives with a solution

There is a solution to the problem of showing full content and not leaving the app, and it’s a feature that really does belong in an RSS reader: using content extraction to grab the article from the original page.

If you’ve ever used Safari’s Reader view, then you know what I’m talking about. The idea is that NetNewsWire would do something very much like the Reader view (but inline, in the article pane), that grabs the content and formats it nicely, without all the extra junk that is not the article you want to read.

There are a number of open source options for this. We’re looking at using Feedbin’s content extraction service (which wouldn’t require you to have a Feedbin account).

The generous folks at Feedbin are running a copy of the open-source Mercury Parser, and they’ve offered to open this service up to RSS readers like NetNewsWire. (Reeder uses it already, for instance.)

When?

Right now we’re working on NetNewsWire 5.0.1, which is (almost entirely) a bug-fix release. I don’t know what’s going to be in 5.1 yet — we’re still digesting all the feedback, looking at our original roadmap, and thinking about things.

We’re also working on NetNewsWire for iOS! We’re busy.

But this is definitely the kind of feature that should come sooner rather than later.

On My Funny Ideas About What Beta Means 2 Sep 2019, 4:23 pm

John Gruber has mentioned, on The Talk Show, that I’ve got some weird ideas about what beta means.

Here are my definitions:

development (d): everything is in progress and the app might be completely unusable.

alpha (a): the app is feature-complete and has no known bugs — but, importantly, it’s had very little testing.

beta (b): the app is feature-complete, has no known bugs, and has been tested — but further testing is still warranted. Every beta is a release candidate.

These are defined in a NetNewsWire Technote. It’s important to have definitions that everybody working on or testing the app understands.

But why these rather strict definitions?

It’s part of our commitment to quality. What matters is the end result — the shipping app — and these definitions make sure we don’t get to beta, or even alpha, with the app up on the table with wires sticking out and pieces missing.

This gives us a big space between development and shipping, and that space is all about making sure the bugs are all fixed.

This is a matter of ethics and pride in our work. Absolutely.

But it’s also pragmatic. This is an open source app, written by volunteers in their spare time, and having this rhythm baked-in to the process helps make sure we can uphold our standards even without full-time developers, managers, and testers.

* * *

And… it bugs me how little real attention our industry pays to quality these days. In some cases the consequences are disastrous; in other cases they’re merely expensive. It doesn’t have to be this way.

If it seems like I’m going too far with my definitions, well, I’m trying to bend the stick here.

 31 Aug 2019, 3:39 pm

I love this NetNewsWire write-up on WP Tavern.

NetNewsWire 5 Feature Requests 31 Aug 2019, 3:08 pm

NetNewsWire 5.0 is a 1.0 app in disguise.

And so, as expected, we’ve had a ton of feature requests. Most people tend to request one or two features — and there’s a huge variety in these. People want different things.

Nevertheless, there are a few themes we can pick out from what people are asking for:

  • More syncing options, especially Feedly support
  • iOS app
  • Some way to deal with partial-content feeds
  • Customization of the article pane (fonts, colors, etc.)
  • Traditional view (timeline on top with single lines, article below)
  • More sharing options (Instapaper, Pinboard, etc.)
  • Customizable keyboard shortcuts
  • State restoration
  • Localizations
  • Hiding read items in the timeline (or dimming them)
  • Hiding feeds (in the sidebar) that have no unread articles
  • User-created smart feeds

The less-common, more singular requests are for things like specific sorting options — there are lots of different small options that people would like.

People have also asked for things that might surprise you (they surprised me) — for instance, we’ve had a request for monochrome icons for the toolbar. Another request for a Dark Mode that’s different from Apple’s Dark Mode. Etc.

How We Choose What To Do Next

The first principle is that we can’t lose what we love about the app. We do our damnedest to ship with no bugs, and the app needs to be fast and, most importantly, it needs to feel lighter-than-air.

Whenever you add things — even if the app remains just as fast, even if there are no bugs — you still run the risk of losing that feeling of lightness. One of the quickest ways to lose that feeling is to add a whole bunch of preferences, View menu options, toolbar commands, and other chrome. So we’re going to be very slow to add things like that.

NetNewsWire needs to not become fiddly. (Earlier versions of NetNewsWire got way too fiddly.)

There are other questions we ask about a feature before we do it.

  • Will it substantially benefit current users?
  • Will it bring a number of new users to the app?
  • Does the feature depend on something else being done first?
  • How much work will it take?
  • Does it require resources (such as new icons) that our programmers can’t provide?
  • Does the feature really belong in an RSS reader at all?

And, because this is an open source app, there’s another dimension: people. Is someone available? Has someone just shown up who’s eager to work on a specific feature? Those things have an impact on scheduling, too.

The good news is that most of the common feature requests are obvious things to do.

Some examples — not nearly everything, just a few thoughts:

The iOS app is in progress. Maurice Parker has been writing it, and it’s coming along very well. Still plenty more to do, and we won’t ship before iOS 13 ships, but it’s happening.

Adding syncing options is a definite good thing for the app. Doing the first one (Feedbin) was the big effort, because it required building the infrastructure that makes syncing possible. Once that was done, adding additional services is not super-difficult. (Not easy, no. Nothing’s trivial. But at least the infrastructure and patterns are in place.)

We’d like to support all the various services, or at least a majority of them. And we have people working on adding services.

Customization of the article pane will most likely work the way it did in older versions of NetNewsWire: we had theme files which included templates and CSS. The app shipped with a few, and you could make your own and use themes other people made.

This feature shipped with NetNewsWire 2.0, and people really loved it. It was fun!

More sharing options is an obvious good idea. Of course you should be able to send to Instapaper, Pocket, Pinboard, and so on. We shipped with custom support for MarsEdit and the Micro.blog app — mainly because I use those apps. But an RSS reader ought to support as many sharing workflows as possible. That’s one of the core points of the app.

* * *

Anyway — the above doesn’t cover everything. Don’t take any of the above as gospel about what we’re doing or when, or what we’re not doing. We haven’t planned 5.1 yet! It’s too soon.

There are also features that we want to do that people haven’t asked for, but that we think are cool. 🎸

The take-away from this article should be: we’re being very careful about designing and implementing new features, because we have to make sure NetNewsWire doesn’t lose what makes it special.

But we are doing new features, because there are so many things that can make the app even better — we can make it better for current users and we can bring in new users.

Follow-Through 29 Aug 2019, 4:25 pm

Decades ago, when I was working for Dave Winer at UserLand, I learned about the concept of follow-through after a major release.

If you’re an app maker, it might seem like your goal is to get to release day. Get the app done, make it available, publish an announcement, and then get back to coding. Let the world do what it’s going to do.

One bang, and then back to work, in other words.

But that’s not going to maximize your chances for a good release. You need to follow through — you need to keep going.

Some of the things you might do, in no particular order:

  • Publish tips on using your app — one a day or so
  • Update your website with feedback, testimonials, and good reviews
  • Be available and communicative about your app
  • Go on some podcasts
  • Write about how release day went
  • Write about plans for the x.0.1 version
  • Field bug reports and feature requests gratefully
  • Thank reviewers who’ve done a good job
  • Make it as easy as possible for reporters and reviewers to get access to your app and to you
  • Work to build a community of customers, on Slack or similar

I’m sure you can think of more things to do — the above isn’t everything, and every app is different.

But the key is that you don’t just do the release and then stop. Instead, show that you‘re responsive, show that your app has momentum, show that you care enough to keep showing up.

For me, at least, this is the fun part. I realize that’s not true for everybody — but you should do it anyway. 🎩

Daniel Figures Out One of the Two Crashing Bugs 28 Aug 2019, 4:05 pm

We have a few reports of a crash where the add-feed-sheet window doesn’t load. There’s a line of code with window! — because of course we expect the window to have been loaded — and it crashes right there.

This crash made zero sense to me, but Daniel Jalkut figured out the most likely cause and was able to reproduce it: it’s because the person has moved the app (from one folder to another) after launching it, while it’s running, and the nib-loading machinery can’t find the nib, because it’s moved along with the app.

Tip: if you’re going to move an app, quit it first, then move it, and then re-launch it!

At any rate: our fix for this will be to load that sheet on startup, and then recycle it on each use. This fix will go into NetNewsWire 5.0.1.

This just fixes the bug with this one nib, though. A more systematic fix — maybe just a warning to the user suggesting they quit and re-launch — would be a good idea.

File under “bugs iOS developers never have to worry about.” 🐇

PS We have a 5.0.1 beta milestone now.

How Release Day Went 27 Aug 2019, 4:28 pm

Yesterday was a great day! A few things to note, in no particular order:

NetNewsWire got some press coverage, including a well-done review in MacStories.

We got a lot of feature requests, but no bug reports.

Except that we did get a single-digit number of crash logs. On investigation, I found two distinct backtraces — we’ll need to fix those. The thing is, there’s no freakin’ way the app should crash in those spots. Except that, obviously, it can. Rarely, but it happens.

The servers started timing-out at one point during the day. I contacted DreamHost support and they fixed things (and told me that the fixes they applied should prevent this in the future).

There were a number of nice blog posts and tweets about NetNewsWire, which was awesome. After working so hard for so long, it’s great when people appreciate the app. We don’t get paid in money, after all. 🐣

I have no idea how many downloads of the app there were. GitHub is hosting the download, via its releases feature, and I don’t see a way to find out how many times it’s been downloaded. Which is totally fine with me.

* * *

I should say something more about the no-bug-reports. There’s no special magic or talent or anything to this — there’s just the willingness to say that we’re not going to ship until we’ve got the bugs out, and then sticking to that.

This is a matter of pride and ethics, for sure, but there’s another dimension: since the app is open source, it’s written by volunteers (including me), and we have no dedicated support team. Any time we spend fielding bug reports is time taken away from working on the next feature.

Making apps — even, or especially, free apps — is an exercise in economics. With free apps, the economics are even more constrained, because nobody is going to hire even a part-time support person. So we do everything we can do keep costs down — especially time costs.

Plus — buggy apps can be demoralizing to the people who work on them. Part of my job is to make sure people are proud and happy to work on the app. And that means making sure everyone knows we’re super-serious about doing our best to never ship bugs.

NetNewsWire 5.0 Now Available 26 Aug 2019, 11:47 am

NetNewsWire for Mac icon: globe with a satellite in the foreground.

NetNewsWire 5.0 is shipping!

In case you haven’t been following along until just now: NetNewsWire is an open source RSS reader for Mac. It’s free! You can just download it and use it. No strings.

It’s designed to be stable, fast, and free of bugs. It doesn’t have a lot of features yet, and that’s because we prioritized quality over features. We will be adding more features, of course, but not quickly. We’re also working on an iOS app.

It syncs using Feedbin. We’ll support more systems in the future (as many as possible).

I hope you like it!

Some links…

Thanks to so many people

I want to especially thank Sheila Simmons and my family and friends.

This release took five years to make, and for four of those years it wasn’t even called NetNewsWire. It was just a year ago that I got the name NetNewsWire back from Black Pixel — and I thank them again for their wonderful generosity.

I also want to thank Brad Ellis for making the beautiful app icon and toolbar icons. Thanks to our major code contributors: Maurice Parker, Olof Hellman, and Daniel Jalkut. Thanks to Ryan Dotson for writing the Help book. Thanks to Joe Heck for looking after infrastructure issues (especially continuous integration).

Thanks to my co-workers and friends at The Omni Group (which is a wonderful place to work). Thanks to the ever-patient and ever-awesome NetNewsWire beta testers on the Slack group and elsewhere.

And thanks to everyone who’s ever used the app in its 17-years-and-counting run. Because of you, NetNewsWire has been, and remains, the thrill of my career.

End of the Line for NetNewsWire 3.3.2 22 Aug 2019, 7:15 pm

This is a little bit of bad news. It’s not my intention, and it’s not what I want to happen — but NetNewsWire 3.3.2 apparently does not launch in the next version of macOS (10.15, Catalina).

It links to the PubSub framework, which is not included with the next macOS.

NetNewsWire 3.3.2 was the last release of the full version that I worked on, before selling NetNewsWire to Black Pixel, and I’ve heard from lots of people that they’ve been using it ever since. They never switched.

I would rather it continued working forever, but that’s not to be. Not my choice. Sorry about that!

 22 Aug 2019, 1:43 am

The NetNewsWire blog has the details on NetNewsWire 5.0b5 — which should be the last beta.

Still planning to do the 5.0 final release Monday morning, which really means doing the release on Sunday and pushing an announcement to this blog Monday morning. :)

The last things on my to-do list are actually writing that announcement and doing screenshots for the NetNewsWire web page. Easy. 🐯

Immunization 20 Aug 2019, 4:19 pm

Before every major release I like to try and think of everything mean that people might say about the app. It’s fun!

So we just went through this exercise on the NetNewsWire Slack group. Here’s a taste:

  • This took five years? I could write an RSS parser in a weekend.
  • Can’t get my Twitter and Facebook feeds. Whatever.
  • Doesn’t work with my Usenet host.
  • The information density of the timeline is… lacking. What the hell.
  • Not truly open source since it’s on a Mac.
  • Not truly open source since it’s not GPL.
  • No vim keys. Why bother.
  • Regular people will never use an RSS reader. What’s the point?
  • Brent’s last good idea was in 2002. Consider this a textbook case of coasting.
  • Great app. Too bad RSS died with Google Reader.
  • It totally didn’t pick up my subscriptions from the earlier version. How is this an upgrade?
  • When does a 5.0 have fewer features than a 3.0? When it’s NetNewsWire.
  • The echo chamber will love this app. They always do.
  • Free app. Continues the race to the bottom. Pour one out for Silvio Rizzi.
  • No way to send to Instapaper. Fuck it.
  • Brent Simmons can’t stop pursuing a technology that even Google famously admitted was not worth bothering with.
  • If this app took five years, imagine how long it will take before it will actually sync with Feedly.
  • Sure it’s free, but I bet the Feedbin people paid them off, because the only way to sync is to pay money to Feedbin.
  • No iCloud sync? Jerks.
  • No iOS app. The revolution happened on mobile, Brant. What the actual fuck.
  • Shoulda been Catalyst. Dinosaurs wrote this app.
  • Not on the Mac App Store? I guess they don’t want users.
  • I would totally use this if it had just this one [feature x], which I can’t believe they shipped without. (Multiply this comment by 100, with a different feature x each time.)
  • Area Man Can’t Let RSS Go

Some feedback will be factually inaccurate, but we like to imagine that too:

  • I remember using NetNewsWire on OS 9, and it hasn’t really improved since then. They should make it a Cocoa app.
  • Doesn’t work with web comics. POS
  • Doesn’t support 10.5.
  • It should be free.
  • You’d think they would have updated the design — but it looks exactly like NetNewsWire of old.
  • Why the hell would they build on that aging code base from Black Pixel? I heard it doesn’t even use ARC.
  • No way to sync? What’s their actual problem?

See? The actual feedback will be nicer than the stuff we thought up. This provides a bit of immunization. :)

But, also, there will be negative feedback we didn’t imagine. That’s the gold!

* * *

Bonus from Daniel Jalkut, but not actually a criticism:

Can’t innovate, my RSS.

 19 Aug 2019, 8:02 pm

I think we’re still on track for releasing NetNewsWire 5.0 Monday, August 26. There will be one more beta before then.

I’ll be available for podcasts, interviews-via-email, etc. If you’d like to set something up, email me or DM me on Twitter.

NetNewsWire Public Beta 12 Aug 2019, 4:16 pm

NetNewsWire for Mac icon: globe with a satellite in the foreground.

NetNewsWire has reached public beta! It only took like five years. :)

Our definition of beta is release candidate. With each beta release, we believe that the app is ready to ship. But we want to do further testing to make sure.

NetNewsWire has a Help Book up on the web now. It needs a couple more pages and some screenshots, but it’s pretty close to finished.

We’ve picked a ship date: Monday, August 26. If we find enough bugs, we won’t hit the ship date. That’s fine — but we’d really like to hit that date.

We’re working from the 5.0 Release milestone now. (The alpha and beta milestones have been closed.) You’ll note that most of what remains are bugs for the marketing site.

P.S. We’ve found a bug already with showing the unread count for the selected item. We’ll get it fixed, hopefully this week, and do another public beta release.

Three Podcast Episodes 1 Aug 2019, 1:34 pm

In the latest episode of the Xcoders podcast

We recap the wonderful July meeting, Liz has a new blog, Jared launched his Scorebook update, and Jared previews his August talk on Xcode projects.

* * *

In the latest episode of The Omni Show, I talk with folks on the OmniGraffle team about their latest update, which includes a bunch of significant performance enhancements.

Performance has been A Topic lately (as it always should be) — and, if you’re a developer, I highly recommend this episode to learn how a company like Omni does performance work.

* * *

I’m the guest in the latest episode of Swift by Sundell. We talk about blogging, Apple’s Swift era, NetNewsWire, performance, and dynamic and declarative programming.

Swift by Sundell has become The Talk Show of Mac and iOS development. I recommend listening to all the episodes.

A Third Text Measurement Caching Trick 26 Jul 2019, 6:16 pm

I forgot about this one — I should have mentioned it in the previous article.

Let’s say the source text that gets displayed in your timeline could be quite long. NetNewsWire has this issue: the summary text is the text of an article (with HTML tags stripped).

This text could be many thousands of words long. But the timeline will only ever display at most a couple lines — even with an absurdly wide timeline on a large screen, it will never display thousands of words.

So here’s the trick:

Use a truncated version of the text rather than the entire text. For the truncation limit, come up with a length that is beyond what could conceivably fit in the space.

This way text measurement will be faster since it’s measuring less text.

(Also use this truncated text for the text field in the timeline.)

A Couple Handy Tricks for Text Measurement Caching 26 Jul 2019, 4:59 pm

NetNewsWire’s timeline is fast — you can resize it and scroll it quickly.

It has to do a bunch of text measurement in order to do its layout. Text measurement is notoriously slow, though, so we use a cache.

How tall is this text?

Let’s concentrate on the issue of knowing how tall some text is. We know the available width (because we know the width of the timeline at any given moment), and we need to know the height of some text.

Let’s assume we always ceil the height and width and use integers in a WidthHeightCache of [Int: Int] (width: height). Each string passed to our sizer gets its own WidthHeightCache.

The first time it’s asked to get the height for a given width, there’s nothing in the cache, so it has to measure the text and store it in the cache.

And then the second time it looks up the width in the cache — if it’s there, then it returns the cached value. Otherwise it does the text measurement again.

But here’s where it gets smart…

Trick #1: in-between widths

Let’s say the first time the width was 100, and the second time the width was 200. Both results are in the cache.

If, on the third call, the width is 150 — between 100 and 200 — and the cached height for 100 and 200 are equal, then the height for 150 is necessarily that same height. We can avoid text measurement and just return the cached value. (And we keep the cache from growing on each call.)

Trick #2: estimated single-line height

What if, on the third call, the width is 250 instead of 150? There’s another trick. When the sizer is initialized, it can come up with an estimate for the height of a single line of text, just by using a short string (with tall characters) and a very large width.

This estimate means you will be able to know if the cached height for 200 is a single line. If that cached height is suitably close to the estimated single-line height, then you can skip text measurement again and just return the cached height for 200 — since more width can’t make the text higher.

The code in NetNewsWire for this isn’t fully generalized. It maxes out at two lines, since that’s what NetNewsWire uses. But it could form the basis for your own sizing/caching code.

PS Note: this is all because I don’t use Auto Layout on table cell views, for performance reasons. I use Auto Layout everywhere else — just not on table cell views.

On the Next Swift by Sundell Podcast 25 Jul 2019, 4:17 pm

I’ll be the guest on the next Swift by Sundell podcast. I’m so looking forward to this.

John tweets:

My next guest on the @swiftbysundell podcast will be none other than @brentsimmons! 🎉

We’ll talk about Apple transitioning into its Swift era, Mac development, his work at Omni and on NetNewsWire, and much more — can’t wait! 😀

Got questions for us? Reply here! 👍

If you have questions, reply to John’s tweet. :)

 23 Jul 2019, 5:46 pm

To write an iOS app, you have to learn Objective-C, Swift, or both. Xcode. UIKit and Foundation and maybe Core Data. How to upload apps to the App Store.

But… after learning all that, AppKit, which is super-similar to UIKit, is a bridge too far? This still freaks me out!

 23 Jul 2019, 5:32 pm

I wish Swift had some kind of syntax that declares that a function or property can used on the main thread only. If use is attempted from some other thread, then the app should crash.

I know I can — and already do — use a precondition and check that we’re on the main thread, but I keep feeling like this should be a language feature.

NetNewsWire Status: Almost Beta 6 Jul 2019, 3:25 pm

We’ve got just three things still to do before we hit 5.0b1:

One is a bug — when searching, a refresh or sync can end search mode.

Another is kind of a documentation thing: we need a set of sample AppleScript scripts. These will help people learn how to script the app — and it will also give us the chance to exercise the scripting support more thoroughly.

The third thing is to write the Help book and publish it on the web. Luckily I’m a pretty fast writer and I’ve written NetNewsWire Help books before. I’ll probably start with an older version and revise it for 5.0.

I think we can get to 5.0b1 some time in July — but, if we don’t, it’s because it’s summer and people are in and out due to vacations and ball games and cookouts and rock-and-roll shows. We’re super-eager to ship, but living life comes first. :)

No Algorithms Follow-Up 3 Jul 2019, 4:26 pm

(This is a follow-up post to No Algorithms.)

Joshua Emmons made the point I was trying to make, but more explicitly:

Tweet 1:

Brent is making a subtle point here:
1. Algorithms weigh signal.
2. In the domain of engagement, outrage and anger mask all other signals.
3. These signals are fatiguing. As Outrage: 5 is normalized, Outrage: 10 is now required to move the needle.

Tweet 2:

1. and 2. mean it’s not the algorithm’s fault. There’s no way to write an engagement algorithm that doesn’t select for outrage and anger. But 3. means anything that incorporates such an algorithm actually makes us worse people.

This is key: it’s not the motivation — selling ads — that turns algorithms bad. (But, yes, selling ads makes a company pretty keen on these types of algorithms.)

This may not be true of music, movies, and other things, but when it comes to news, outrage and anger swamp everything else.

It’s also not an issue of UI. If there’s any way, implicit or explicit or both, of signaling engagement, it will tend toward rewarding outrage and anger. And this gets even worse, not better, if you add data from what your friends and peers like.

Trust

Maybe, though, I could do better. I kind of think not, because I think the problem is a bug in human nature. But let’s say I believed I could do better.

Should I?

For one thing: how much better does it have to be? I think an algorithm that radicalizes far fewer people than it might otherwise is not a good call. Better is still harmful.

So here’s the thing I keep coming back to: I think of NetNewsWire as almost a kind of ideal public utility. As such, it should be completely trustworthy — you should never wonder if it’s leading you down some path or other you didn’t intend or foresee.

There are plenty of other apps in the world — every app is part of an ecosystem — and this one doesn’t have to solve what I think may be an unsolvable problem. I’ll leave that to other people.

Instead, it should be one place for news that you can absolutely trust. Articles come in, and NetNewsWire sorts by time, and that’s it. That’s solid.

Old Bloggers and New 2 Jul 2019, 6:26 pm

I like to read what people write about RSS readers.

One of the themes goes something like this: “I used to use an RSS reader, then I stopped, years ago. I decided to try it again — so I imported my old list of subscriptions. Over half the feeds were gone or no longer updating! Pour one out for RSS.”

Here’s the thing: blogging is like any other human activity — some people stop and other people start. It’s natural.

And: nobody ever said your favorite bloggers would continue forever. It’s okay to miss your old favorites! I miss mine.

But here are a few examples of current blogs that I like that you might like:

There are plenty more.

No Algorithms 2 Jul 2019, 5:08 pm

I’ve been asked a few times about using algorithms in NetNewsWire to bring articles you wouldn’t otherwise have seen — from outside your feeds list — to your attention.

I’ve also been asked a similar question about using algorithms to bring articles — from inside your feeds list — to the top based on the likelihood that they’ll interest you.

I’m not going to do either.

Why

These kinds of algorithms optimize for engagement, and the quickest path to engagement is via the drugs outrage and anger — which require, and generate, bigger and bigger hits.

This is what Twitter and Facebook are about — but it’s not right for NetNewsWire. The app puts you in control. You choose the sites and blogs you want to read, and the app reliably shows you their articles sorted by time. That’s it.

My hypothesis: these algorithms — driven by the all-consuming need for engagement in order to sell ads — are part of what’s destroying western liberal democracy, and my app will not contribute to that.

 26 Jun 2019, 6:11 pm

I can’t help but picture the 15-year-old — or 45-year-old — who’s never programmed before, and who reads a little bit about Ruby on some website and is intrigued and wants to try learning it.

Maybe they have a thing they want to do, or maybe they’ve always just been curious about programming and this seemed like a nice way to start.

Are we going to ask that person to figure out how to install Ruby? If there are one-click installers out there, are we going to ask them to figure out which one is actually reputable and safe?

Curiosity like this is one of the ways new developers are made. I worry that the less the Mac is tinkerable out-of-the-box, the fewer developers we’ll get.

Or: we’ll only get certain kinds of developers — the ones of the right age and background who can go get a CS degree.

Direct and Indirect Interfaces 26 Jun 2019, 4:22 pm

The iPhone is the first — and only? — direct interface that is both great and hugely successful. It’s direct in the sense that you touch things directly on the screen.

The first time I used an interface even remotely like that was the first time I ever sat in front of a computer, sometime in the ’70s — it was a PLATO system at the University of Delaware. (Elementary school field trip FTW.)

But it took a long time before the technology advanced to the point where direct interfaces could be a mass-market thing.

Indirect Interfaces

Even though we have this wonderful thing of touching directly on the screen, indirect interfaces are still everywhere. If you have a hardware keyboard connected to your iPad, you’re using an indirect interface with iOS.

And of course there’s the digital crown on the Apple Watch, the remote you use with your Apple TV — and the keyboard and mouse or trackpad you use with your Mac.

Indirect interfaces are part of the future of computing. The future is diverse and complex, and indirect interfaces are a necessary part of the future — because I’m not going to get up and touch my TV screen.

I remember when potato chips were potato chips. Then one day barbecue-flavored chips came along. Then sour cream and onion. Now you can get potato chips of all kinds! It’s crazy, but people have their favorites. The future is like potato chips.

The Mac

The thing about the Mac is that it’s always used via indirect interface. When you have a hardware keyboard and a precision pointer that takes very little energy to move, then you can do things that would be non-ergonomic for a direct interface.

You can have giant monitors — and even multiple monitors — and whip that pointer from place to far-away place with little effort. You can make targets smaller, due to the precision, which means you can make information and controls quite a bit denser. You can put features in menubars, because menus are much easier to get to and navigate using an indirect pointer.

Though this kind of interface is roughly as old as those early touch-screen PLATO systems — and therefore mature, and therefore boring to a lot of people — there’s still so much to be said for the efficiency that it provides. You can see more, and do more, with less physical energy. For eight hours a day, five days a week — if not more, for some people — it matters.

There’s a cognitive cost, I think, but it’s paid up-front and then ingrained, and most of us have forgotten how we learned to use a Mac in the first place. (I was almost certainly older than you when I first started using a Mac, and I only kind-of remember.) (You also have to learn iOS, too.)

And many iPad users see the benefit of indirect interfaces — plenty of people ask their iPad app-makers to provide full control via keyboard. They want to be able to navigate everything without having to touch the screen. I get it! It totally makes sense. I want that too.

But here’s what I think: the future does include machines that are built, like the Mac, entirely around the idea of indirect interfaces. There will be enough people that value efficiency that this isn’t going to go away.

There are, of course, plenty of tasks that are truly best-suited for an iPhone or an iPad. Absolutely. But for many productivity tasks, the force-multiplication that an indirect interface provides makes a big difference to many people.

You may value other things. You may move between both worlds pretty easily. Different people like different kinds of potato chips — but sour cream and onion doesn’t have to disappear so that barbecue may thrive.

 26 Jun 2019, 3:26 pm

Brett Terpstra writes about how scripting runtimes are being removed from the Mac in the next OS release.

This is actually distressing, and not that much attention has been paid to this.

I’m one of those people who just use whatever’s on the system. I don’t think I’ve ever installed a different version of Ruby, and I don’t even know how.

But the ability to run Ruby scripts is hugely important to me — for one thing, this blog is generated by a set of Ruby scripts running on my Mac.

Impostor Syndrome 26 Jun 2019, 1:44 am

In the introductory episode of the Xcoders podcast last night, Liz and Jared talked a little bit about impostor syndrome.

I don’t have anything profound to say about it — just a few random notes…

There’s no developer bit in anyone’s DNA. I don’t have that bit — nobody does. There’s no such thing, and there’s no collection of genes that make you a real developer, either.

You don’t have to have a CS degree. (I didn’t even own a computer when I was in college. And I didn’t graduate.)

If you’re working on an app, you’re a developer. Period. Even if it’s not a stand-alone app; even if it’s some scripts. You’re solving a problem on a computer with logic and code — that makes you a developer. That’s all it takes!

Impostor syndrome goes away eventually. You just forget about it. The fastest way to get past it is probably to help other people.

It’s okay to admit that you have it. It’s been many years, but I had it too. :)

Xcoders Podcast 25 Jun 2019, 4:23 pm

Liz Marley and Jared Sorge are the hosts of the brand-new Xcoders Community Podcast.

Last night they published the first episode, an introduction. Future posts will include interviews and discussions of interest to our community of developers, designers, testers, support people, and writers.

The podcast isn’t on iTunes yet, but there’s an RSS feed you can subscribe to: https://xcoders.org/podcast.xml

Special thanks go to Micro.blog! We’re using their podcasting support, which makes it super-easy to publish a podcast. Write a title and description, upload the audio file, and there you go. Keen. 🐣

Page processed in 10.414 seconds.

Powered by supersurge.com. © 2004–2019. In cooperation with Fresh Content. Based on SimplePie by Ryan Parman and Geoffrey Sneddon, and licensed under the BSD License.