What’s Yahnac you might ask? Yet another Hacker News client, because there are never enough Hacker News clients out there!
For those who don’t know, Hacker News is a social news website focusing on computer science and entrepreneurship and it is run by the startup incubator Y Combinator. In general, content that can be submitted is defined as “anything that gratifies one’s intellectual curiosity”.
In terms of features, Yahnac allows you to read all Hacker News content from Top Stories to Jobs. On top of that, you’ll be able to add Bookmarks and keep them as long as you like.
If you are interested in knowing how Yahnac has been built, please do Read on!
A confession to make
Also, I’m lucky enough to have people like Benjamin Augustin, Volker Leck and Antonio Bertucci around the office, who strongly believe in the benefits of reactive programming and it’s applications to Android.
Following these principles I started a journey to wrap all these Framework specific solutions together with
Firebase, a very different approach to conventional Rest APIs.
The principle is very simple, it doesn’t matter how the data is retrieved from the network since all I really care is to store it into the database in a meaningful way and display it as quick as possible. These very distinct responsibilities can be handled by
Rx on the networking layer, SQlite in the database layer and
Loaders in the UI layer.
Leveraging all the network and data manipulation onto
Rx together with
Firebase makes a lot of sense.
Firebase data is retrieved by attaching an asynchronous listener to a Firebase reference. The listener will be triggered once for the initial state of the data and again anytime the data changes.
Based on the current implementation of the API, one needs to retrieve to 501
Firebase instances in order to display a list of 500 top stories. One call will retrieve the id of all the items in the Top Stories page, then one needs to do another call for each one of those id and retrieve the data from the news item.
Rx seems like a perfect candidate to solve all this, it’s reactive approach allows to deal with all the recursive calls and threading seamlessly. It also allows to manipulate that data and provide with the output that the database layer needs. The output of this will be ContentValues, which is what a
There was only one step more to be take, and that was to solve the incompatibility of RecyclerView and
Cursor, in following post I’ll deep dive into the actual implementation details and issues, stay tuned if you are interested.
Supporting different form factors
I had several doubts regarding the UI and how it would look like in different form factors. At the beginning I thought about using a Multi Pane but after using the app for a while something didn’t feel right.
The navigation wasn’t very clear on landscape so I decided to use a
Staggered Grid like the one Etsy made so popular back in the days.
Same goes for smartphones, the UI will adapt from one column to two.
We live in a Material world
The majority of articles are shown in a WebView, that does not leave a lot of space for transitions and fancy animations. The application has no pictures therefore beautiful Palette can’t be added, not the best case scenario is it?
However, Material is not just animations and colors. Several aspects like typograhpy, spacing and ripples can easily be applied making a big difference.
Another of the features that all Material applications show these days is the quick return pattern. It’s a great idea and allows the user to enjoy more content while scrolling.
Right, how do I get it?
There’s more to come
The application is not finished, there are several feature that I’d like to add like being able to publish a news item or replying to comments. Do yo fancy contributing? Please do! The source code is available in GitHub and all PRs are welcome.