Beekeeping #2
May 23, 2018Over the past few weeks, I’ve been carefully developing test suites for Yeti which simulate a few scenarios like: casual users, power users, long-form readers and the like. Over all the test suites, one thing stood out: The obscene amount of power wasted in downloading content which was never read in these simulated situations.
CPU
Every time you launch the app, three things happen:
- Your feeds are loaded including Folders information
- If any unread articles are available, those are loaded as well (upto a maximum of 25 in this cycle)
- Your bookmarks are synced. Any new bookmarks are downloaded.
Permitted that there is a network connection available, there’s a lot of data transmitted over the wire. Your phone’s modem is responsible for loading this data consuming considerable amount of power. When this reaches the CPU, it converts the data to Elytra’s internal model structures and is cached in the RAM.
However, in all of the simulated tests, not all articles were read. This lead to a lot of data that was never used. So to reduce this waste, I first decided to make all unread articles load with the content. This was a good first step. To improve this further, I tested again by returning no content on any of the articles.
In both of these cases, the articles were loaded on-demand when the simulated user opened the article.
Here’s how the CPU was impacted.

As you can see, stripping the data from the articles and loading it on demand saves a lot on the CPU processing power. Modern iPhone and iPad CPUs like the A10, A10x and A11 are really power efficient, but if the app can avoid any kind of overhead, it’s always worth stripping it off.
Data

Similar trends can be observed in Wireless data consumption. By stripping off the overhead, a lot of unnecessary data was avoided from being transmitted, and therefore loaded. This not only saves power, but also saves bandwidth on your devices and this is especially critical if you’re on a metered connection. This also saves me some $$ on server bandwidth costs.
A 8 times reduction in data costs is a huge gain. All these data points are aggregate averages across the various test suites.
Overall Power Consumption
As you can imagine, reducing CPU and data usage considerably impacts power consumption. This is not only great for your device’s battery, but also an invisible user experience benefit.

It’s immediately evident that this was a step in the right direction. Not only do we all save money, bandwidth and time, but also should be able to use our iOS devices for a few charge cycles more or at least that’s the vision.
This change is now available in the latest build of Elytra. Apart from this, here are few other things:
- The dark themes no longer cause jumpy navigation bars.
- There is a basic implementation of In-App purchases. You can try it out. This won’t affect anything in the app. Also, you aren’t charged during the Testflight run.
- Improves memory management for long form articles.
- Implements Cover images for articles that provide this information.
- Fixes line height of headings.
Notes
Version: 1.0.0
Build 73.
Pipe: Beta-02Beekeeping #1
May 14, 2018A few minor bugs slipped through the first beta. So this is a house keeping build that fixes some of those issues.
What’s fixed
- On iPads with enough horizontal space, the article helper view is aligned to the right. I’m still figuring out how to work this in RTL modes.
- When an article specifies a linebreak, Elytra’s text engine added extra space before and after the linebreak view. This is no longer the case.
- Fixed an odd line-spacing bug that popped up in iOS 11.3.1.
- Fixed 11.3.1’s kerning bug.
- Foot links scroll jump to section has been fixed where it never flashed the background colour to indicate the highlighted paragraph.
- Fixed a not so rare crash that would occur when removing an article from your bookmarks.
- Improvements to Attributions controller.
Notes
- Version: 1.0.0
- Build 69.
- Pipe: Beta-02
The Betas of Elytra
May 10, 2018
Something is off? Something doesn’t sound right? Something doesn’t look right!
That’s it, it’s the new name and App icon. Yes, Yeti still remains our internal codename however, since this is the first Beta build, I couldn’t think of a better time to finally reveal the actual product name we’re going with: Elytra.
There’s also a new domain name. An
.appdomain. I’ve been waiting to acquire this domain so I can finally release the Beta.Well, here’s what’s new in the first Beta;
What’s new
- Dark Theme for iPhones & iPads
- Black Theme for iPhone X.
- Serif type (Using Georgia at the moment, please email me your font suggestions).
- Improved Memory management.
- Lowered disk usage (and therefore lower power consumption) when a post has lots and lots of images.
- Image galleries are now accessible including controls.
- Improved Quotes design.
- Improved code blocks rendering.
- Improved text rendering performance.
- Improved “Add To Elytra” (previously, “Add to Yeti”) share extension.
- Moved the Article Helper interface to the right edge on iPads. It moves to the left for RTL idioms.
What’s fixed
- Galleries with images with no height information are now rendered correctly.
- Galleries with more images than what can be fit horizontally (page control) are now rendered as groups of 5 photos per control.
- Fixes unread pull-to-refresh crash.
- The Title & author text is now aligned correctly with the rest of the text in the article interface.
- Fixed the “Add to Elytra” (previously, “Add to Yeti”) share sheet extension crashes.
Known issues
When working on some features and fixing some bugs, I ended up running into a lot of UIKit bugs. Following are some of the known issues Elytra will present which we have to depend on Apple to fix:
- When using a dark theme, the navigation bars will misbehave and present a lot of unexpected states and behaviours.
- When searching inside an article, the highlighted area is often mis-positioned to the left or right (this depends if you’re using a LTR or RTL idiom) however, scrolling up or down a little positions this highlight correctly.
Alpha - The finale
Apr 27, 2018The final epoch has been rung.
What's New
- Folders support
- Added GIF and webP support
- Improves lists rendering
- Blockquotes are now rendered more scemantically
- Added support for citations
- Added support for mark elements to highlight text in paragraphs and blockqotes
Fixes
- Fixes footlinks jumping to the wrong section
- Fixes a crash when an article has a lot of content. Like, over 10000 words!
- Attributions page is now fully functional.
- Fixed search for Feeds
- Fixed search for articles
The final alpha build is out. I look forward to hearing from you lot on the new improvements. As I now slowly work towards polishing the app up and work on the macOS app, I look forward to your criticism, feature requests and love/hate emails. Have a fun weekend, and enjoy reading.
Alpha - Week 5
Apr 17, 2018I suppose I underestimated myself when I wrote this.
What’s New
- Authors: Supported publishers have been enhanced with author support. This is currently limited to http://macstories.net and http://sixcolors.com. If you’d like to see support added for your favourite publisher, get in touch. You can now view all posts by a single author and tap on the ⦿ to view information about that author. Author bios in the article interface has been scrapped.
- Push Notifications: Push notifications based on WebSub are finally here. At the moment, only this blog supports Push notifications. As more and more publishers begin supporting WebSub, this list will expand, and automatically. Just find the bell icon in the Feed Interface. If it isn’t there, the publisher most likely doesn’t support WebSub at the moment and therefore, push notifications won’t be available.
- Filters: Maybe it’s Game of Thrones release time and you’d like to completely avoid all spoilers. You can setup keywords under Settings > Filters and these will apply throughout Yeti. Once you add new filters or remove existing ones, don’t forget to refresh your feeds.
Fixes & Improvements
- Improved accessibility labels for the “Mark all read” button making it more descriptive.
- Fixed rendering of <aside> tags from certain publishers.
- Some articles wouldn’t display embedded images. This has been fixed.
- Improved quote rendering on iPads.
- Fixed a rare crash that would occur on the iPad Pros (2017) when marking an article as unread.
- Improved sync speed for bookmarks.
Also, major news: this is the penultimate alpha build of Yeti. After the next build, I’ll be starting work on the Beta feature set (which is small, but contains a larger locale set for testing on my end). Once the alpha run is over, I’ll be freezing the spec on my end for the server side parser.
This is going to enable me to enable publishers to add new meta tags to their article pages to customise rendering aspects inside Yeti. This is the major component of the beta run. Which means, there will be fewer beta builds, once every 15 days or so.
Until then, enjoy the alpha. Have fun reading!
Alpha - Week 4... Delayed.
Apr 13, 2018We all hate delays. Especially when it comes to airplanes and commercial flights. But this is alpha-grade software. Today is Friday. You’re most likely not waiting for a new build notification to pop up on your screen.
But I do have a very good reason for this. Let me break it down:
1. Bookmarks
I’m not even sure why this turned out to be this tricky to implement. Bookmarks are great when they are online on some server your phone connects to. But Yeti promised (actually, I did) to make them available offline. This is easy when it’s only a single device. Multiple devices is very tricky though and I did not want to spend time on a full fledged sync service.
But, as always, I have it figured out. Mostly. I have a lot of testing pending on my end (automated and manual). Once those are through, the build will be a third ready.
2. Author Bios
Why aren’t more RSS readers doing this? It may involve manual work (as in the case of Yeti) or some person smarter than I can figure out a contextual way to grab this information off the publisher’s website. Well, Yeti doesn’t have the time to wait for some popular app to do it. You’ll be able to browse articles by that particular author as well as read about the author towards the end of the article (if you enable it under settings, it’ll be off by default).
3. Push Notifications
I spoke about Realtime RSS here and I’m glad it all worked out to be simpler than I aniticipated. So to bring these advantages to you, I’m working out the interface and potential “fine grain” settings that you can tweak to get notifications about new articles from your favourite publishers.
So the app itself isn’t delayed. It’s still on track according to my tracker (assuming it’s functioning correctly). What is delayed is the week 4 release. So week 5 will have things from both of these weeks. I moved things around so this will be a big release and I get more time to implement things a little better and make sure everything works smoothly for my wonderful alpha group (*cough* unlike a certain release cycle *cough*).
Alpha - Week 3
Apr 7, 2018Build 40 just went to all Alpha testers. Here’s the changelog.
New & Improved
- Unread feed. All your unread articles in one place.
- Articles will now show unread states
- Changed article lists layout to accommodate better for accessibility preferences.
- Improved handling for accessibility content size preferences
- Improved RTL rendering of text
Fixed
- List rendering in some cases where a single item had multiple components in it.
- Images & Galleries no longer overflow bounds of iPhone screens.
What you won’t see
I’ve added preliminary support for the Subscriber part of the WebSub1 protocol to the backend. This vastly improves how I fetch new articles. Currently, it’s only enabled for this blog. New publishers, you add to the service, which advertise their hubs will be automatically added. For all existing publishers, I’ll manually check and verify.
Realtime RSS
Apr 3, 2018Yes, you read that right. Thanks to the WebSub spec, Realtime RSS is not only possible, but wildly scaleable if implemented correctly. Yeti is making an attempt at that.
It will not only enable Yeti to:
- fetch posts in realtime from the publisher (your favourite websites)
- update content stores soon after posts are published
- spend less resources on polling publisher websites
but also
- enable you to subscribe to your favourite publishers
- receive near-realtime notifications1 from these publishers
- have the app update itself in the background when the system determines so
The implications of the above are grand.
If the above holds true, which by means of this post: I am looking for feedback on the above, I not only save money, but enable you (and myself) to get real time notifications from publications which really matter to me. As since Yeti will be paid there won’t be any add-on cost you’ll have to pay to get this. It’s all part of the package.
I look forward to hearing your thoughts on the matter in the comments section below.
- You can choose which publishers to receive notifications from, just like you would on Youtube. ↩
RSS Revival
Mar 31, 2018Emily Waite writing for Wired.com
The difference between getting news from an RSS reader and getting it from Facebook or Twitter or Nuzzel or Apple News is a bit like the difference between a Vegas buffet and an a la carte menu. In either case, you decide what you actually want to consume. But the buffet gives you a whole world of options you otherwise might never have seen.
That’s an excellent analogy.
And...
RSS readers obviously have their own shortcomings as well. The firehose approach can easily overwhelm, especially when multiple outlets all publish the same news at the same time.
So introducing filters in Yeti was definitely a good idea.
And some more...
The readers all have settings to help cope with these issues to varying degrees, where possible; it's just a matter of how many hours you want to spend shaping your RSS bonsai.
And thus Yeti’s approach to get you started with the basics, yet empower you with power tools.
I believe I’m doing the right thing here. Given how much attention this post has garnered over the last couple of hours, I think the timing is just right for Yeti. I guess I’ll just have to go right into the 6th gear and ramp up production.
More Alpha
Mar 30, 2018Another Friday, another alpha release. This is a House-keeping build required for the upcoming single feeds: Unread and Bookmarks.
What’s new
- Image settings now take effect. If the source does not provide alternate image sizes, the default url is used (which could be a big image).
- Removing feeds
- Searching for an article has been optimised to run smoothly on older devices.
- When feeds are loaded on app launch, it'll load the full batch, and then onwards, only load new changes. This largely improves caching and networking performance.
- The API has also been updated to not return responses if the local cache matches the server response.
- Tweet rendering (only works if Tweets were embedded and not quoted)
- Feed listings now update when you move to the next or previous article using the accessibility view. This also enables endless scroll on iPads (maybe even on iPhones, but I haven't tested it)
- Image views and Gallery views have been reimplemented to be faster for rendering, more performant and use less memory.
- Improved text rendering for the article title & author in the article view. It should now scale gracefully with dynamic type.
- The above change has also been made in the Feed view for individual cells.
Bug Fixes
- All layout rendering issues in the Article renderer have been resolved. This includes stupid Xcode warnings and the like.
A) Quotes sometimes render with extra height. This is a known issue.
B) Formatted code blocks don't scroll horizontally in the same line. This is a known issue. - Opening links externally is now partially implemented. This may still crash in some situations.
- Sharing an article now adds a "space" between the title and URL. This will be in place until Apple resolves the bug and restores the correct behaviour.
I hope you enjoy reading over the weekend. Have a good one. ✌🏼