NetNewsWire 2.1 Change Notes
9 May 2006
This page lists the changes in NetNewsWire since 2.0.1. You can download the current release via the NetNewsWire home page.
Highlights of this release
- Email-link and email-contents commands
- Sorting subscriptions by attention
Changes
NewsGator Syncing
NetNewsWire now syncs with aggregators that use the NewsGator Online API. This mean you can sync with NewsGator Online (a web-based reader) and other applications from NewsGator and other developers, including Windows and mobile aggregators.
Sync options appear in the Preferences window. To set up NewsGator syncing, enter your account info in the sync options window, then do an intial sync: choose to merge subscriptions or replace subscriptions online or locally.
After the first sync, subsequent syncs happen automatically, while refreshing feeds. (As opposed to NetNewsWire’s .Mac/FTP syncing, NewsGator syncing happens in the background: it’s much less obtrusive. No big modal dialog for your normal syncs.)
Universal Binary
NetNewsWire runs natively on both Intel and PowerPC machines. (In fact, it is developed largely on Intel Macs.)
NetNewsWire now requires OS X 10.3.9 or greater.
Performance enhancements
Saving data to disk
One of the major bottlenecks came when writing new and updated information to disk. NetNewsWire is now much faster at saving data.
It now uses the binary plist format which is much faster than the XML format. The drawback is that you can’t really look at data files with plain-text editors anymore—but they’re *much* quicker to write to disk and they take up less space, so it’s on the whole a good thing. (You can of course still open and edit them with Property List Editor.)
NetNewsWire now writes data (feed items, subscriptions list) to disk in a background thread (mostly). Previously it was doing so on the main thread (usually), which could block the UI if it took more than an imperceptible amount of time to update the disk.
NetNewsWire used to always write to disk immediately after parsing a feed, but now it waits for the next scheduled write, which should give better performance during feed refresh sessions.
Some unused data that was being written to disk is no longer being written, which further enhances performance.
Raw XML Source performance fix: when downloading feeds, in some cases the raw XML source of a feed (if it’s new or updated) would get written to disk twice. Now it just gets written once. (This probably won’t make a perceptible difference except with those weird feeds that weigh in at half-a-megabyte.)
Performance when subscription list changes
NetNewsWire was doing way too much work when the subscription list changes (either with adding/deleting a feed or moving a feed). Fixed.Browser tabs
NetNewsWire took a long time to start up if you had lots of tabs. No longer—it’s fast. We tested with a list of over 600 tabs and it was about the same as zero tabs.
You may notice some general speed-ups, too—faster to switch between tabs, for instance. Note that tabs are now re-drawn during live window resize because it’s now fast enough.
Instead of writing the browser tabs list to disk immediately every time a change is made, it waits a couple seconds to coalesce multiple changes in a short period of time into just one write-to-disk. (Also, writing the tabs to disk benefits from the switch to the binary plist format.)
Browser tabs performance and the intermittent crazy delay
There was a long-standing bug having to do with tabs—sometimes, for no apparent reason, the system starts sending constant mouseEntered and/or mouseExited events to the tabs container view. Which causes them to redraw constantly. Which makes the highlighting happen like molasses and which can make switching tabs excruciatingly slow.
Fixed.
Downloads window performance enhancement
While downloading files, the downloads window would use a ton of the CPU because it was updating the downloading text and progress indicator more often than necessary. Now it updates only when the change since the last update is change of status or more than 99K difference.
Mark All as Read performance
Mark All as Read is faster—it updates the database in a background thread, so it appears faster, so it doesn’t block the UI.Highlight Differences and perceived performance
When keyboarding to an item that has differences, we let the table selection visibly change before calculating the differences. This makes the UI feel more responsive, even if the description pane isn’t updating any more quickly.Feed parsing and processing performance
Some string utilities have been optimized that make RSS parsing (most of all) faster and use less transient memory.
Post-download feed processing is a little extra faster now especially for people with non-zero persistence settings. (NetNewsWire was recalculating the same date and prefs settings once for each item in the feed, but now it only calculates these things once.)
Cache folder and performance
The following items have moved from ~/Library/Application Support/NetNewsWire/ to ~/Library/Caches/
Favicons
FeedImages
FeedSource
They have also had a .noindex suffix added, so Spotlight won’t index new or changed items in those folders.
Reasons for doing this: 1) these really are cache items and don’t need to be backed up, and 2) preventing Spotlight from indexing these helps performance (since these files may change often and there’s no usefulness in having Spotlight index them).
In addition, the WebKit cache has been moved to a sub-folder: ~/Library/Caches/NetNewsWire/WebKitCache/
Print Command
Page Setup and Print commands have been added to the File menu. You can print the frontmost webview (news item or browser page). (They don’t work right for the Combined View yet.)Normally the stylesheet is not included when printing the description pane. If you want the style sheet to print when printing a description item, set a hidden pref in Terminal:
defaults write com.ranchero.NetNewsWire includeStyleSheetWhenPrinting 1
To turn it off, make the 1 a 0 instead.
Post to del.icio.us
In the News menu is a new command: Post to del.icio.us. It works with the selected news item or the frontmost browser tab.
You can choose what app to use to post to del.icio.us. The default is to use your default browser, since that’s probably what you’re used to using. You can also use NetNewsWire (opens a browser window), Cocoalicious, Postr, Pukka. See the Posting preferences pane.
Send Email Commands
Two new commands appear in the File menu: one for emailing the contents of the news item or page, the other for emailing a link to the news item or page.
The email-contents command requires Apple Mail. The email-link command should work with just about every GUI mail reader.
The email features work very much like Safari. If you prefer to have brackets around the URL pasted into the email message, you can set a hidden pref. With NetNewsWire not running, in Terminal, copy-and-paste the following and hit return:
defaults write com.ranchero.NetNewsWire addMikesBracketsForMailLink 1
To turn off brackets, do the same as above with a 0 (zero) instead of 1 (one).
Sorting Subscriptions by Attention
To sort by attention, choose .
NetNewsWire now tracks more information about what you do and can tell which feeds are more important to you. (This will get better over time, since it has only just started to track info.)
Actions that make a feed rank higher: opening item links, flagging items, posting to weblog, and posting to del.icio.us.
Special cases: the attention score for a group is the average of the attention scores inside the group. The attention score for a smart list is based on only the current contents of the smart list.
Attention score and AppleScript
You can get the attention score of a subscription via AppleScript. It’s the “calculated attention score” property. It’s read-only.
However! There’s a called “scripted attention score” that exists only for AppleScript scripts. By changing this value you can raise or lower the calculated attention score. (This value is simply added to the calculated attention score. Note that you can use negative numbers and wild values.) (In my mind I called this feature the “FraserScore” feature before I named it, since it was the idea of Fraser Speirs.)
User Interface Changes
Subscriptions List
Selected item is now bold text, to make it easier to read. (A hidden pref was added so that you can choose whether or not to make the selected subscription always bold. Quit NetNewsWire, copy and paste the following into Terminal: defaults write com.ranchero.NetNewsWire boldSelectedSubscription 0 to make it not bold. Change the 0 to a 1 to make it bold (which is the default). (crabwalk, buddy, this one’s for you. ;)
The splitview is now one-pixel wide, like the kids like so much these days. There’s a little grabber thing below the subscriptions list too. (Using RBSplitView, which rocks: http://www.brockerhoff.net/src/rbs.html)
The default background color is now rgb 250 250 255—a light blue instead of plain white. This helps set it off from the rest of the content, now that the splitview is so narrow.
Click-through is (finally!) ignored for the subscriptions list. (Also for the outline in the Sites Drawer.)
When you click on the already-selected subscription in the subscriptions list, and a browser tab is active, you now go back to the News Items tab. (Previously this worked only if you clicked on a *different* subscription—now it works if it’s the same subscription.)
When adding a subscription, the name at first is the URL of the feed instead of Untitled Source. If it can’t be read, this gives you a little easier shot at figuring out where it came from. (So you don’t have to open the Info window or whatever.) (Exception: if dragging a feed from a location where a title for the feed is placed on the clipboard, then that title is used at first, though the actual title from the feed will over-ride that once the feed is read.)
The subscriptions list now has focus at startup. (Aside from being the right thing to do, it probably fixes an intermittent bug where sometimes the space bar doesn’t do anything at startup.)
If you have sorting on and sort inside groups only—then you can now drag-and-drop subscriptions at the top level. (Which makes sense because the top level is sorted manually if sorting inside groups only is on.)
Select News Items Tab command
New command: Select News Items Tab. Shortcut: cmd-\
Headlines table
The circle that goes with unread headlines in the headlines table is now the same color as the text color. (And it’s now white when the item is selected, which shows up better on the selection highlight.)
When using traditional layout, the splitter between headlines and descriptions is now a non-standard fancy splitter.
The date in the Date column would not always match the date in the description pane—the Date column would use the last update date, while the description pane would use the published date. Now they both use the same date (published date).
option-upArrow now goes to the first item; option-downArrow now goes to the last. (This is standard behavior for tables, but it was being over-ridden when it shouldn’t have been.)
New keyboard shortcut: the l or L key 1) marks all in a feed as read, and then 2) goes to the next unread item (which is, of course, in a another feed). (I call this feature “Daniel Skimming.”)
Subscriptions sorting
The subscriptions sorting menu items have been promoted up a level inside the View menu, to make them easier to find. See the submenu named Sort Subscriptions By.
In addition, the settings for sorting inside groups only and animating sorting are now menu items in that submenu—they’ve been removed from the Preferences window.
Errors window, XML Source window
Both of these use semi-transparent black text views with colored text. The idea is just to look cool, purely and simply.
Main window status bars
Now doing the two-tone glass thing instead of the gradient thing. (Injects a little freshness into the UI.)
View switch toolbar item regular size
The view switch toolbar item is now a regular-sized NSSegmentedControl -- because the regular size adapts its look to fit in with the unified title and toolbar look. The regular size looks cooler.
Search progress indicator
To the left of the search field in the toolbar appears a spinning progress indicator when you’re running a search. (It doesn’t appear when the search results come back quickly—only if they take a little time. So you won’t always see it.)
Color window
The colors options have been moved from the preferences window to their own window. Choose to open the window.
I think it’s more discoverable and usable this way. (And—bonus!—I could switch to using bindings and delete a bunch of code!)
Removed color option for alternate headlines row. It just uses the standard colors now.
Added colors option for subscriptions with 0 unread items. Default is black.
Added colors option for feeds that haven’t updated in 60 days. Default is brown. (Kind of like yellow—caution—but yellow actually is unreadable on a white background, so we go with brown.) The idea behind this is to make it easier, without having to go to the dinosaurs window, to notice when feeds haven’t been updated in a while. (I call this feature "Merlin Mann Coloring." Obviously we’ll add more feed management features in the future.)
Added colors for read and followed headlines.
Browser/Appearance prefs
The HTML prefs for news items and web pages have been moved from the Appearance prefs pane to the Browser prefs pane. This should make more sense and make these prefs easier to find.
You can now set a minimum font size for news items and for web pages. The default minimum is 9.
The default pref for showing favicons in tabs is now *not* to show them. Cleaner look. (But of course you can still choose for yourself.)
Gear menus
The various gear menus now uses regular menu font size rather than 11. (A la Mail.)
Mark All News As Read confirmation sheet
If you choose Mark All News As Read from the dock menu, a confirmation sheet or dialog now appears so you don’t accidentally mark all news as read.
Description pane and the space bar
The description pane now scrolls a full page when you hit the space bar.
Previously, it was doing less than a full page because some style sheets have fixed items, and WebKit scrolling doesn’t take that into account.
What NetNewsWire does now is look at the style sheet name to see if it should do a full-page scroll or a partial-page scroll. I don’t have a better way of handling this—and, obviously, it doesn’t work with any newly-created style sheets. (Which is okay, actually—I don’t want to people to make any new styles with fixed elements, because of the aforementioned bug. When they notice it doesn’t work right, maybe they’ll choose to do a floating version instead.)
Browser
We’re now using the sort-of standard feed icon from Firefox and IE7 at the bottom right of the main window.
The browser gear menu and overflow tab menu now use regular menu font size (a la Safari) rather than 11.
Tabs no longer highlight on mouseover if NetNewsWire is not the frontmost app. The close buttons don’t highlight either. The close buttons also no longer support click-through (it doesn’t register clicks when NetNewsWire is not the frontmost app).
If there’s an error loading a page in a tab, an error message is displayed in the page (a la Safari and Camino).
HTTP client timeout
You can now set the timeout via a hidden pref for the timeout when downloading feeds. (Also affects calls to NewsGator, but doesn’t affect web pages.)
The key is HTTPClientTimeout, a value in seconds. If it’s < 1 or > 60 * 5, then NetNewsWire will make it 60. (60 is the default value, what we normally use.)
The value to this is for people on very slow networks.
Example—to set the timeout to two minutes: quit NetNewsWire if it’s running, then copy and paste the following in Terminal and hit return:
defaults write com.ranchero.NetNewsWire HTTPClientTimeout 120
Bug fixes
Downloads window
Now remembers its position and size between runs.
Syncing bug fixes
Increased the FTP connection timeout to 60 seconds, since some people got lots of timeouts.
If you start a sync, but switch to another app, NetNewsWire’s dock icon would bounce. No longer.
Browser bug fixes
If you click the middle mouse button on a link, it will open in a new tab.
There was a bug where cmd-clicking on a link that specified a target would not open up in a new tab. Now it does.
When you choose Select Previous Tab the focus will now be on the web view.
Atom parser bug fixes
The HTML generator didn’t handle the case very well where Atom link elements don’t have a title.
When there are multiple alternate links, they are all displayed.
The enclosure header view now handles the case where the type isn’t specified in the feed—it used to say "null" for type but now it says "type not specified in feed."
All this was to pass the link conformance tests on this page: http://www.intertwingly.net/wiki/pie/LinkConformanceTests
Fixed a crashing bug triggered by this (very invalid) feed: http://iht.com/atom/technology.xml
A bug in the Atom parser where text in comments could show up in the description pane has been fixed.
NetNewsWire now handles the case of Atom entries that have an updated date but no published date. It was displaying the arrival date instead of the updated date—now it’s displaying the updated date. (Not a parser bug, a UI bug.)
Atom date bug fix
NetNewsWire wasn’t interpreting dates like this properly: 2006-02-03T21:21:50-08:00
What would happen is that it would be offset by 8 minutes rather than 8 hours: 2006-02-03T21:21:50-0008
I believe it’s an Apple bug in +[NSCalendarDate dateWithString:calendarFormat:]—so I reported it. Radar: #4442520.
RSS Parser
Removed the special case where a feed has a very long title but no description—it was ellipsizing the title and putting the original title in the description. No more. (No more mollycoddling! Make good feeds!)
Made it so that this feed can be parsed: http://www.mnot.net/blog/index.rdf
A major performance enhancement in the RSS parser helps especially with large feeds and feeds where the description contains lots of markup. This helps lessen the CPU load while refreshing feeds.
A second performance enhancement with converting characters to entities will also help.
(Some people will notice a big difference. Some people will notice a small difference. Some people won’t notice anything. It depends on the feeds you’ve subscribed to and the speed of your machine).
I tested this on a feed about one megabyte in size with lots of markup. My results (in seconds, averaged over several calls each):
2.1b20: 7.7973425
2.1b21: 0.5171695
RSS parser preflight
The RSS parser now looks a little more closely at the data before it attempts to parse it, since sometimes what it actually has is an HTML page (or something other than a feed, at any rate). Besides helping performance in some cases, this works around a crashing bug in the CoreFoundation XML parser.
RSS/Atom Discovery bug fix
Sometimes web-page feed discovery would fail when single quotes were used in the link tag. Fixed.
View-Source window
There was a bug where the view XML source window didn’t take into account text encoding—now it does.
Purple help button bug
Fixed a bug where the purple help button on the Bloglines subscription window wouldn’t always work. Now it should. (Since I’m now requiring 10.3.9 or better, I can use -[NSHelpManager openHelpAnchor:inBook:], which so far seems to work. Of course this means I can start putting these little help buttons everywhere. ;)
Headlines table
It now picks up the graphite alternating row color when using the graphite look.
Errors window
The console text is updated now always on the main thread. (Fixes a rare but real crashing bug.)
The console text is trimmed if it gets over 100K. (This is so it doesn’t just grow and grow forever.)
Browser bug fixes
When checking if NetNewsWire’s browser could handle a link, it checked if the link started with http (all lower-case). Which meant that links that start with Http or HTTP or hTtP would always open in an external browser. Fixed.
Changed keyboard shortcuts for select next and previous tabs to match Safari’s.
Fixed a bug where selecting a tab from the overflow tab menu would not always bring focus to the tab—so that the space bar etc. wouldn’t work. Now it works.
Fixed a bug where favicons sometimes didn’t show up in the tabs or the browser address bar.
In places in the UI where the default browser is named, the .app suffix is now stripped.
Search results and mark-all-as-read
If you’re displaying search results and do a mark-all-as-read, the items displayed will be marked as read. (Rather than the selected subscriptions.)
File/enclosure downloads
NetNewsWire won’t let the URL downloading system change the suffix of files being downloaded. The issue was that some servers have poorly-configured MIME types, so that when you’d download a movie (for instance), the server would tell NetNewsWire it was a text file (for instance). The URL downloading system (NSURLDownload) would then add a .txt suffix to the file. NetNewsWire now detects that situation and prevents the suffix from being added.
Subscriptions list
Contextual menu for super feed no longer has errant separator at top.
Sites Drawer open window resize
If you have multiple monitors, NetNewsWire no longer erroneously resizes the main window when you open/close the Sites Drawer.
If you hold down option key and click on the desktop to hide NetNewsWire, then come back to NetNewsWire, the + button would be the smart list button, but it should be a + button. Fixed.
If you click Subscribe, then paste a feed: URL into the sheet, it will now work to subscribe to that feed.
OPML import subs crash fix
Fixed a crashing bug with an OPML feed found in the wild that had invalid OPML lines like this: <outline xmlUrl="feed://gizmodo.com/atom.xml">Gizmodo</outline>
Pre-flight local-file subscriptions
NetNewsWire now checks, before reading a file subscriptions, that it’s not a folder.
NetNewsWire also checks that the file size isn’t greater than 20 MB. I’ve seen people accidentally subscribe to local media files—which NetNewsWire then reads and tries to parse as a feed. It’s not a good outcome, and it can be hard to recover from if you have NetNewsWire set to refresh at startup. (Now it will be okay.)
Misc. bug fixes
If you’d set NetNewsWire to launch and hide at login, it now actually will hide.
Increased the max height and width of the main window from 2000 to 10000, since some people have really big monitors.
The file downloads window now obeys the system appearance setting (blue vs. graphite) when coloring the alternate row backgrounds.
During feed refresh, the authentication sheet now always has focus on the username field. (Previously it would be whatever field had focus the previous time.)
When subscribing to script, NetNewsWire attempts to guess if it’s a shell (Python, Perl, Ruby, etc.) script or an AppleScript script.
NetNewsWire no longer responds to the space bar if ctrl, option, or cmd key is down.
Fixed a threading bug with the favicons downloader controller that could throw an uncaught exception.
If you chose Quit while NetNewsWire was in the middle of downloading feeds, it would stop refreshing but then it would update your smart lists. There’s no need to update smart lists at that time, since you’re quitting, so now it won’t, which can make quitting faster.
NetNewsWire reruns detection has improved which should result in fewer reruns. (Reruns are defined as "seeming duplicates in the same feed.")
Notepad removed (and other misc. changes)
Notepad
It’s entirely gone now.
Drag Safari feeds into NetNewsWire
You can now drag multiple feeds from Safari’s bookmarks organizer into NetNewsWire’s subscriptions list. This makes importing feeds a bit easier. (You can import all: click on “All RSS Feeds” in Safari’s bookmarks organizer, select all your feeds, drag them into NetNewsWire’s subs list.) Note: we don’t do drags of folders yet from Safari, but obviously it would be nice to have.Sites Drawer
Two new categories: Cars and Games. Added a bunch of new feeds (see New in 2.1).
Cocoa bindings
We’re now using Cocoa bindings in a number of different places (especially in the Preferences window, but other places too). This could be a source of new bugs, so it’s important to notice bugs even in places you wouldn’t expect to see any.
Watching for prefs changes
The way NetNewsWire watches for and handles changes in prefs has been completely overhauled—now using key-value observing, which is more efficient than the approach it was using. (Which should mean small but probably not perceptible performance gains when doing things that change prefs.)
This could of course lead to bugs—watch for things like changing a pref that seems to have no effect.