mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Delete obsolete technotes.
This commit is contained in:
@@ -1,23 +0,0 @@
|
||||
# TechNotes
|
||||
|
||||
[Roadmap](Roadmap.md)
|
||||
|
||||
## How To
|
||||
|
||||
[How to Restore to Factory Settings](RestoreToFactory.md)
|
||||
|
||||
## Notes
|
||||
|
||||
[What Development, Alpha, Beta, and Final Mean for NetNewsWire](DevelopmentAlphaBeta.md)
|
||||
|
||||
[Hidden Preferences](HiddenPrefs.md)
|
||||
|
||||
[Questions Answered](QuestionsAnswered.md)
|
||||
|
||||
## Contributing
|
||||
|
||||
[Contributing](../CONTRIBUTING.md)
|
||||
|
||||
[Coding Guidelines](CodingGuidelines.md)
|
||||
|
||||
[Branching Strategy](BranchingStrategy.md)
|
||||
@@ -1,39 +0,0 @@
|
||||
# Why Reruns Happen
|
||||
|
||||
Sometimes you might see a new article in a feed that you’d swear you’ve already read. And maybe you can even see, in NetNewsWire, what looks like another copy of that same exact article, with no changes.
|
||||
|
||||
Here’s the thing to know: if the article really was the exact same in every respect, NetNewsWire would see that. It’s super-easy for a computer to tell that some data is the exact same as some other data.
|
||||
|
||||
When it’s not really the exact same, that’s where the problem comes in.
|
||||
|
||||
Here are some reasons this situation can happen:
|
||||
|
||||
## A blog changes its blog engine
|
||||
|
||||
If someone switches from (for instance) Ghost to WordPress, then the code that creates that feeds will be different. And that code will make a different choice for the unique ID for each article in the feed.
|
||||
|
||||
Those unique IDs are critical: they’re how NetNewsWire identifies an article. If an article appears with a new unique ID, then NetNewsWire treats it like a new article.
|
||||
|
||||
In this situation, you’ll often see that you get a bunch of reruns for a given feed all at once. You’ll get 10 or 20 or whatever.
|
||||
|
||||
This is by far the most common cause of reruns.
|
||||
|
||||
## A feed that lacks unique IDs does something weird
|
||||
|
||||
This is quite a bit less common. There are some feeds that don’t have unique IDs, which means NetNewsWire has to use some combination of other article metadata to identify articles.
|
||||
|
||||
That metadata could change just enough to throw NetNewsWire off. This is rare, but it can happen.
|
||||
|
||||
## A feed just has terrible bugs
|
||||
|
||||
We’ve seen feeds that create a different unique ID for each article every time you fetch the feed, which results in reruns every single time. We’ve seen feeds that use the same unique ID for every article in the feed, even — which goes against the very idea of unique IDs!
|
||||
|
||||
Some feeds just have bugs, and weird, unpredictable things happen.
|
||||
|
||||
NetNewsWire is designed to be resistant to that, and it does a good job — but we haven’t anticipated every odd case.
|
||||
|
||||
However, this is the most rare cause of reruns. The most common cause is, by far, the first one: the feed is now being generated by different software.
|
||||
|
||||
## Reporting Bugs
|
||||
|
||||
If you have a feed that keeps showing reruns (as opposed to once, when a blog changes its blogging system), please do report a bug, either on our [Issues Tracker](https://github.com/brentsimmons/NetNewsWire/issues) or on the [Slack group](https://join.slack.com/t/netnewswire/shared_invite/enQtNjM4MDA1MjQzMDkzLTNlNjBhOWVhYzdhYjA4ZWFhMzQ1MTUxYjU0NTE5ZGY0YzYwZWJhNjYwNTNmNTg2NjIwYWY4YzhlYzk5NmU3ZTc).
|
||||
@@ -1,15 +0,0 @@
|
||||
# How to Restore to Factory Settings
|
||||
|
||||
Here’s how to start over with untouched preferences and default feeds:
|
||||
|
||||
1. Quit NetNewsWire if it’s running.
|
||||
|
||||
2. Delete the application support folder. On the command line, do: `rm -rf ~/Library/Application\ Support/NetNewsWire/`
|
||||
|
||||
3. Delete the preferences. Just deleting the file won’t do the trick — it’s necessary to use the command line. Do: `defaults delete com.ranchero.NetNewsWire-Evergreen` and then `killall cfprefsd`
|
||||
|
||||
Launch NetNewsWire. You should have the default feeds, and all preferences should be reset to their default settings.
|
||||
|
||||
#### Alternate version
|
||||
|
||||
Run the [cleanPrefsAndData](../cleanPrefsAndData) script instead of doing the above manually.
|
||||
@@ -1,58 +0,0 @@
|
||||
# Roadmap
|
||||
|
||||
<i>Updated Aug. 23, 2018</i>
|
||||
|
||||
This roadmap reflects thinking at the time of the last update. Anything can change at any time.
|
||||
|
||||
## NetNewsWire 5.0 for macOS
|
||||
|
||||
Features:
|
||||
|
||||
* Standalone feed reading (unsynced)
|
||||
* Syncing via Feedbin
|
||||
* Built-in smart feeds (today, starred, all unread)
|
||||
* Searching
|
||||
* Starring
|
||||
* Keyboard shortcuts
|
||||
* AppleScript support
|
||||
* Inspector
|
||||
* Sharing
|
||||
* Feed and user avatars
|
||||
* Mojave Dark Mode
|
||||
|
||||
Milestones:
|
||||
|
||||
[NetNewsWire 5.0 alpha](https://github.com/brentsimmons/NetNewsWire/milestone/1)<br />
|
||||
[NetNewsWire 5.0 beta](https://github.com/brentsimmons/NetNewsWire/milestone/2)<br />
|
||||
[NetNewsWire 5.0](https://github.com/brentsimmons/NetNewsWire/milestone/3)
|
||||
|
||||
(See [What Development, Alpha, Beta, and Final Mean for NetNewsWire](DevelopmentAlphaBeta.md) for definitions.)
|
||||
|
||||
## Future
|
||||
|
||||
Features:
|
||||
|
||||
* Notifications
|
||||
* Gestures
|
||||
* Feed Directory
|
||||
* Thumbnail images in the timeline
|
||||
* Microblog full-post rendering in the timeline
|
||||
* Share extension
|
||||
* Multiple windows
|
||||
* iOS App
|
||||
* Syncing via Feedly and other similar systems — not yet decided which ones exactly
|
||||
* Syncing via CloudKit (maaaaaybe, if feasible)
|
||||
* Smart feeds — edit and create
|
||||
* Filters that run during refresh
|
||||
* Scripted feeds (AppleScript and shell/Ruby/etc.)
|
||||
* Hiding read subscriptions
|
||||
* Hiding read articles
|
||||
* Deleting articles
|
||||
* Dinosaurs
|
||||
* Dock menu items
|
||||
* [Article themes](https://github.com/brentsimmons/NetNewsWire/issues/257)
|
||||
* Back/forward commands
|
||||
* [Article view zooming](https://github.com/brentsimmons/NetNewsWire/issues/38)
|
||||
* [Import OPML from URL](https://github.com/brentsimmons/NetNewsWire/issues/136)
|
||||
* [Traditional vertical layout](https://github.com/brentsimmons/NetNewsWire/issues/102)
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
# Siri Shortcuts on iOS
|
||||
|
||||
As you use NetNewsWire on iOS we donate Siri Shortcuts to the system. These shortcuts
|
||||
can be used by Siri for shortcut prediction on the lock screen and the search screen. They
|
||||
can also be used in the Shortcuts app that is included in iOS.
|
||||
|
||||
For example if you visit the Starred smart, you will see a shortcut for it available in the
|
||||
Shortcuts app for you to assign a launch trigger for or to script.
|
||||
|
||||
#### Timeline Shortcuts
|
||||
|
||||
- See articles for “Today”
|
||||
- See articles in “All Unread”
|
||||
- See articles in “Starred”
|
||||
- See articles in “Folder” (where folder is the name of a folder you have selected)
|
||||
|
||||
#### Action Shortcuts
|
||||
|
||||
- See first unread article
|
||||
|
||||
If you have a request for a shortcut you would like included in NetNewsWire,
|
||||
please file it as a feature request in Github Issues.
|
||||
@@ -1,21 +0,0 @@
|
||||
# “Can’t Update” Error
|
||||
|
||||
If NetNewsWire’s auto-updater gives you an error that it can’t be updated, do this:
|
||||
|
||||
* Cancel the update if you still need to
|
||||
* Quit NetNewsWire
|
||||
* Move NetNewsWire to your Applications folder (or to your `~/Applications/` folder)
|
||||
* Launch NetNewsWire
|
||||
* Check for Updates again
|
||||
|
||||
That should do the trick!
|
||||
|
||||
## The problem
|
||||
|
||||
If you’re running the app from your `~/Downloads` folder, then the system has placed your app under quarantine — which means the app can’t update itself.
|
||||
|
||||
Once you move the app to another folder, the quarantine is lifted, and the app can update itself.
|
||||
|
||||
This *does* require your manual intervention: it‘s not something NetNewsWire can do for you automatically.
|
||||
|
||||
For more info, [see this bug](https://github.com/brentsimmons/NetNewsWire/issues/213).
|
||||
@@ -1,7 +0,0 @@
|
||||
# Swift Packages
|
||||
|
||||
NetNewsWire uses the [Swift Package Manager](https://swift.org/package-manager/) to include shared frameworks. At this writing (April 2021) they are RSCore, RSDatabase, RSWeb, and RSParser. NetNewsWire also utilizes four packages hosted within the NetNewsWire repository itself: Articles, ArticlesDatabase, Secrets, and SyncDatabase.
|
||||
|
||||
After your first checkout, when you open the project Xcode will automatically download the external packages and their dependencies. Until this process is complete, you will not be able to build or run NetNewsWire. On a fast internet connection this will normally only take a few seconds.
|
||||
|
||||
Xcode automatically keeps these packages up to date on subsequent occasions you open the Xcode project. Unless you are actively working on changes to the packages at source, this should be all that is necessary. However, if you do need to force an update you co do this in Xcode by selecting File > Swift Packages > Update to Latest Package Versions.
|
||||
@@ -1,20 +0,0 @@
|
||||
# Possible Gotchas To Be Aware Of When Working on Syncing
|
||||
|
||||
## Accounts and the local account
|
||||
|
||||
NetNewsWire was written to support multiple accounts.
|
||||
|
||||
However, there may be places where the code assumes the local account, when really it needs to refer to a specific account. These references should be checked.
|
||||
|
||||
However however, there are times when assuming the local account is actually correct — such as when importing the default feeds on the first run.
|
||||
|
||||
## Feed ID vs. Feed URL
|
||||
|
||||
With the local account, a feed’s ID and its URL are the same thing.
|
||||
|
||||
With syncing systems, a feed’s ID will often be completely different from its URL. (It might be a UUID, it might be a hash of something, it might be a database row ID.)
|
||||
|
||||
There are times when the code should refer to the ID and times when it should refer to the URL. Did we get it wrong sometimes? Possibly. Hopefully not, but possibly.
|
||||
|
||||
Also: if the syncing system uses an integer for a feed’s ID, it should be converted to a string in NetNewsWire. This is what the database is expecting — because a string is the most flexible representation and can handle whatever the various systems use.
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
# Syncing
|
||||
|
||||
This document will collect notes relevant to syncing.
|
||||
|
||||
[Account Structure](Accounts.markdown)
|
||||
|
||||
[Why Articles and Statuses Are Separate Tables](ArticlesAndStatuses.markdown)
|
||||
|
||||
[Possible Gotchas To Be Aware Of When Working on Syncing](SyncGotchas.markdown)
|
||||
|
||||
[Syncing Implementation Roadmap](SyncingImplementationRoadmap.markdown)
|
||||
@@ -1,112 +0,0 @@
|
||||
# Syncing Implementation Roadmap
|
||||
|
||||
Any parts of this that are non-shared code should be done on the Mac. We’ll get iOS caught-up after syncing on the Mac is finished.
|
||||
|
||||
Some of this could be wrong on some details. Some things might be unanticipated by this document. It’s a start, though.
|
||||
|
||||
Also of note: some of this is generic sync infrastructure. Since this is the first time, we’ve got to do all that.
|
||||
|
||||
## Make new local accounts via Preferences
|
||||
|
||||
Make it so you can add second local (aka “On My Mac”) account via Preferences > Accounts on the Mac.
|
||||
|
||||
You should be able to change the display name of the account, and deactivate and reactivate it.
|
||||
|
||||
You should be able to add feeds and folders to it, and drag-and-drop within the account should work.
|
||||
|
||||
(Drag-and-drop *between* accounts should not work at all. We’re going to deal with that after shipping 5.0. It’s complex.)
|
||||
|
||||
## Make new Feedbin account via Preferences
|
||||
|
||||
This will need credentials. It should have a button for testing the login, to be sure it works. Username will go in AccountSettings.plist. Password goes in the keychain.
|
||||
|
||||
The Feedbin account should appear in the sidebar, though empty.
|
||||
|
||||
## General API stuff
|
||||
|
||||
We need some general code.
|
||||
|
||||
* APICall and WebServiceProvider are already in RSWeb. They’re speculative and need filling out. Decisions previously made should be revised as needed.
|
||||
* APIResult has not been started yet.
|
||||
|
||||
APICall should be modeled on Vesper’s VSAPICall, but more general:
|
||||
|
||||
https://github.com/brentsimmons/Vesper/blob/master/Vesper/Classes/VSAPICall.h
|
||||
|
||||
https://github.com/brentsimmons/Vesper/blob/master/Vesper/Classes/VSAPICall.m
|
||||
|
||||
APIResult should be modeled similarly on Vesper’s VSAPIResult:
|
||||
|
||||
https://github.com/brentsimmons/Vesper/blob/master/Vesper/Classes/VSAPIResult.h
|
||||
|
||||
https://github.com/brentsimmons/Vesper/blob/master/Vesper/Classes/VSAPIResult.m
|
||||
|
||||
## Feedbin API Caller
|
||||
|
||||
There is a start of this already — data structures for values returned by Feedbin. It’s in Account.framework.
|
||||
|
||||
Then we need FeedbinAPICaller, which should be modeleted on Vesper’s VSAPICaller:
|
||||
|
||||
https://github.com/brentsimmons/Vesper/blob/master/Vesper/Classes/VSAPICaller.h
|
||||
|
||||
https://github.com/brentsimmons/Vesper/blob/master/Vesper/Classes/VSAPICaller.m
|
||||
|
||||
The idea is that we call easy-to-use methods, which then each queue up a VSAPICall on an NSOperationQueue. Or maybe just add them directly to an NSURLSession? (Maybe we don’t need an operation queue.)
|
||||
|
||||
(Vesper had its own home-grown queue. Let’s not repeat that: no need, I think.)
|
||||
|
||||
FeedbinAPICaller should have its own NSURLSession. Each FeedbinAccountDelegate will own a FeedbinAPICaller.
|
||||
|
||||
## Immediate syncing: subscriptions changes
|
||||
|
||||
NetNewsWire should download the subscriptions list from Feedbin and store that data in the normal ways. Display it in the sidebar.
|
||||
|
||||
When deleting a feed, moving a feed — same with folders — the sync should happen right away.
|
||||
|
||||
In the event of an error (network error or any other error), the change should be undone and the user notified.
|
||||
|
||||
This even extends to drag-and-drop within the Feedbin account in the sidebar.
|
||||
|
||||
This will mean adding additional communication between sidebar and Account. A SidebarAccountDelegate protocol is probably a good idea. The FeedbinAccountDelegate could also be a SidebarAccountDelegate. (Same with the LocalAccountDelegate.)
|
||||
|
||||
## Adding feeds
|
||||
|
||||
Adding a feed should call Feedbin’s API — I think Feedbin has its own feed finder mechanism. If I’m right, then it should use that.
|
||||
|
||||
If I’m wrong, we should find the feed and then call Feedbin to add the feed using the URL we found.
|
||||
|
||||
The same is true of importing OPML: if Feedbin has an import-OPML endpoint, then we should call that.
|
||||
|
||||
Otherwise we have to parse the OPML, then add each feed/folder to Feedbin, then download the subscriptions list from Feedbin.
|
||||
|
||||
## Downloading articles
|
||||
|
||||
This should be done periodically, as per prefs on refresh interval.
|
||||
|
||||
As part of the periodic refresh, NetNewsWire should download the subscriptions list and catch up on any queued syncing not-yet-done.
|
||||
|
||||
## Queued syncing: article status
|
||||
|
||||
Changes to article status should be synced periodically quite often. We never want to drift far from the source of truth.
|
||||
|
||||
But we should support the possibility that a person is without internet and just wants to read. They can’t add feeds or change their subscriptions list, but they can read articles (which marks them as read) and do all other operations which affect article status.
|
||||
|
||||
Changes should be stored in a queue, and the queue should persist between runs. The queue should be in a SQLite database, and we should use FMDB and RSDatabase to manipulate the database.
|
||||
|
||||
This database queue should be stored alongside other data for the account (same folder).
|
||||
|
||||
I think the best way is to have two tables: readStatus and starredStatus.
|
||||
|
||||
Each table has two columns: feedbin article ID and a `state` Boolean.
|
||||
|
||||
Then, when updating Feedbin, grab what you need from the database and make the call. On success, delete those items from the database.
|
||||
|
||||
Some care must be taken here: while the call is in progress, the queue could be updated behind your back. So, when deleting, don’t just delete those article IDs — also be sure the `state` column matches.
|
||||
|
||||
## Progress indicator
|
||||
|
||||
The progress indicator when refreshing will need to take into some sync calls. During a sync/refresh it should count calls to Feedbin that have to do with syncing subscriptions and downloading articles. It should not count calls dealing with article status.
|
||||
|
||||
## AppleScript support
|
||||
|
||||
Anything having to do with subscriptions is going to be a bit weird, because it involves a round trip to Feedbin. Let’s figure this out after everything else is done.
|
||||
Binary file not shown.
@@ -1,22 +0,0 @@
|
||||
Twitter application:
|
||||
|
||||
> In your words
|
||||
> In English, please describe how you plan to use Twitter data and/or APIs. The more detailed the response, the easier it is to review and approve.
|
||||
|
||||
This app will be used to monitor Twitter and display tweets in NetNewsWire. Users will be able receive tweets as if they are RSS articles — they’ll be able to read the articles linked-to by the tweets.
|
||||
|
||||
> The specifics
|
||||
|
||||
> Are you planning to analyze Twitter data?
|
||||
No
|
||||
|
||||
> Will your app use Tweet, Retweet, like, follow, or Direct Message functionality?
|
||||
No
|
||||
|
||||
> Do you plan to display Tweets or aggregate data about Twitter content outside of Twitter?
|
||||
Yes
|
||||
|
||||
Tweets will be displayed in NetNewsWire, an RSS Reader application for the Mac and iOS, as short form RSS articles.
|
||||
|
||||
> Will your product, service or analysis make Twitter content or derived information available to a government entity?
|
||||
No
|
||||
Reference in New Issue
Block a user