Weekly Project Update 1: An Experiment
Of all the blogs that I follow, there is one type that is a particular favourite of mine. These are posts from Dave Weiner, Marco Arment, David Smith, Manton Reece, Basecamp, and a few others, that talk about the software projects they’re working on. I find these posts fascinating. To see a piece of software come together, seeing how they decided to do something, the approach behind a particular design, a particular issue they overcame; it makes for interesting story telling.
They say that you should write what you want to read, so I thought that I’d start doing something similar, by documenting what I’ve been working on in the form of a weekly update.
I’ve set some time aside on Sunday mornings, which is usually when I’m working on projects of my own, to put together a post detailing what I’ve done on various side projects over the last week. I think a weekly cadence is frequent enough to keep me honest in this endeavour, while being long enough to put together something of substance. I don’t think publishing a daily task-by-task update would be useful (if I wanted to do that, I’d just post the commit logs).
I guess it’s fair to state upfront that there is no master plan behind these posts. Unlike the posts that I tend to read, these updates are not announcements of pending releases of anything mentioned here. In fact, it might be that many of the projects I write about may not see the light of day. While I won’t waste your time or mine writing about projects that are small or frivolous, it might be that I get bored with a particular thing and decide to move onto something else. This is actually the hidden meaning behind the name of this blog — the “randomness” when it comes to deciding on what to work on on a particular day — so it seems only fitting that these updates should appear here.
Instead, they’re more like public journal entries on the state of various projects that I can reflect on later down the line. I regret not doing this sooner for things that I’ve enjoyed working on, and having nothing to remember them by apart from my own memory.
That’s enough preamble. Here’s my update for the week.
New Project: Day One Sync
Probably not a good sign that the first update should feature a project that I’ve started while neglecting the many others that I have running at this stage. However, I got a little excited about learning that Day One had a command line interface. I started journalling before I started blogging (all to recently as well, better late then never I guess) and since finding out that it was possible to print Day One journals into books, I thought it would be nice to record my blog posts alongside my journal entries.
I’m currently using the Day One integration in IFTTT to do this. It’s hooked up to the RSS trigger, which will pull RSS updates from the various blogs I have and save them as journal entries into Day One. This integration works, but only barely. The saved blog posts have all their formatting stripped, and are stored in plain text. I’d need to go into Day One to fix it if I wanted the formatting maintained. Furthermore, any images included in the blog post are not saved into Day One, meaning that I’d need to manually add them myself. Keeping on top of this busy-work is not something that I’m good at doing, and frankly defeats the purpose of setting up these integrations.
From some preliminary experimentation, it looks these limitations are not present in the CLI tool.
So, this drove me to start working on something called “Day One Sync” (the name is not final). It is a MacOS app that will periodically fetch items from one or more RSS feeds and add any new entries into a Day One journal, complete with images and formatting preserved.
I’m only a beginner when it comes with working on MacOS and Swift so progress is relatively slow at the moment. I’ve managed to put together a UI in AppKit, complete with a sidebar and a details section coded in a completely separate ViewController.
It’s currently possible to add and remove feed configurations — these are the feeds that are periodically polled — but they’re currently not doing anything and are only stored in memory. I’ve started looking into using Core Data to store the feed configurations, and have got as far as defining the particular entity and populating the sidebar. It’s empty at the moment as I haven’t got as far as adding and saving new feed configurations. That’s next on the list.
I’ve also started working on the logic to periodically fetch new items from RSS feeds. For this I’m using FeedKit and a background Dispatch Queue which periodically reads an RSS feed. I got as far as polling the feeds and I wanted to parse the HTML using SwiftSoup but when I tried to add it using Swift Package manager, I was unable to open the repository for some weird reason. I figured it might be something to do with the fact that I was using Catalina, so I’ve upgraded my OS to Big Sur in the hope that upgrading Xcode would fix the problem. We’ll see if this is indeed the case.
Finally, I’ve started work on the app icon. I’m aiming for something that looks a little like this:
The hardest part of the design was getting icon looking like all the others in MacOS. I think I manage to get something that looks close, but it might be that more tuning would be required.
Non-Tech Projects: Solar Panels
One other project that I’ve started is organising solar panels for the house. I’ve managed to get a quote, but in order to organise the grant from the state government, I need to have a copy of my council rates. I don’t have a copy on hand and the local council I belong to doesn’t have an easy way to download a copy on demand, so I’m left with making an email enquiry. This is an unfortunate roadblock but hopefully it should be something that gets resolve soon enough (it will eventually when I get my next rates notice).
So that’s it for this weeks project update. We’ll see if I keep this up. If so, until next week.