This blog has been archived.
Visit my home page at

All problems solved!?

The project I've been working on intermittently over the past month, pyonedrive, a OneDrive API v1.0 API/CLI client, is now quite satisfactory in terms of its feature set1, so today I'm thinking about what I should work on next. Of course there's a lot more I can do, but what is done already encapsulates 95%+ of my daily usage; moreover, as everyone knows, refining an existing project is not as exciting as starting a new one and making something happen that is previously tedious or impossible.

To my surprise, I can't think of anything. I now realized that I don't have many peculiar computing needs. I needed a storyboard generator which I couldn't find anywhere, so I wrote one, and got an elegant FFprobe wrapper for free. I hated the crappy CLI shipped with python-onedrive2 that constantly fails and dumps, so I rolled my own around the new API. In the process of coding up these two things, I learned quite a bit of Python — the kind of things I would never learn by reading tutorials or references alone. Other than these two, I need to interact with a few Web services and scrape a few Web sites, which are easily taken care of in bash/zsh/python (node might better serve some, but they ain't broke, so why rewrite). I also need some other CLI tools but those have been solved by existing projects, probably started by people with similar needs. Some of them need some clean-up and feature boost, e.g., you-get, but I'm not inclined to refactor or submit substantial PRs to other people's projects, so I usually just write my own wrappers to bypass their limitations.3 What else? Basically nothing.

So I'm in a strange situation that I feel like writing software for fun and profit, but don't have anything exciting to lay my hands upon (other than improving existing things). Of course I could learn my next language, but language learning without real world usage is likely to be futile. For instance, I would like to learn some Go or Rust, but why do I need a compiled, C/C++ replacement these days, when scripting takes care of all my personal needs? Not clear. Maybe it's a good time to concentrate on the real important things in my career.

Update: Whilst writing this post, I came up with a project after all. I always had the idea of keeping an encrypted journal — real encryption, not the fake "password protection" of DayOne.4 The journal should be decrypted — probably only into memory — upon entry (after securely typing in password), and each text/image object should be encrypted separately to ease syncing (so using an encrypted sparseimage won't work).

In principle an Emacs package should be able to do this, but going forward Elisp is a pretty horrible choice of language for anything substantial (think of, for example, threading, which there is none). Therefore, I'm inclined to write this in ObjC/Swift with Cocoa. This will be my first attempt at Cocoa programming, and my first serious involvement with Xcode (other than CLT, of course) after quite a few years5. Actually I've always been looking for an excuse to learn some Swift.

Oops, am I falling into prematurely announcing my plans? Hopefully not.

  1. In fact it already exceeded my original expectations — pyonedrive started out as a bare bones batch uploader.↩︎

  2. I never bothered to look at the API.↩︎

  3. E.g., for you-get, I wrote a wrapper with concurrency support and much more surrounding you-get's --url option. (But honestly, for whatever reason, links provided by for Chinese video streaming sites are much better than those parsed by you-get in terms of download speed, so these days I almost use's BigRats exclusively, except when it similarly can't pick up a reasonable speed, in which case I would grind with my you-get wrapper, which was designed exactly for grinding.)↩︎

  4. And DayOne's Markdown engine sucks, among other limitations, like the ridiculous one-image-per-entry.↩︎

  5. I used to use Xcode as a C++ IDE before I was introduced to the brave new world of command line wizardry.↩︎