Failed projects

I’m a world class procrastinator in my spare time. That’s not to say I sit here staring into the technological abyss for all of it. I mean, that does happen, but most of the time I’m sat here I’m trying to make progress on something useful.

The values of useful fall into a few rough categories: keeping things I’ve built ticking over (Beyond3D, my home network, my server infrastructure), writing here on my blog, or working on a new idea that I’ve had.

The latter category has given birth to a great many side projects over the years. I’ll be doing something and inspiration will strike, usually as the result of some friction I’ve come up against. If it’s something useful to build that I think applies to more than just me, then it morphs into a product. Something I could maybe monetise.

That mythical pot of ongoing low-effort income would be great to have, to top up my salary and give me a small pool of extra money to have fun with, or accelerate saving for something big. They say the hardest problem in computer science is naming things, so I usually start there.

If I can think of a good name, that’s the green light I give myself that there’s something useful there for me to go build. So it’s off to Namecheap to buy a domain name, then a swift mkcd ~/Work/<project_name>; git init; edit <somefile> and I start coding or designing or whatever.

I’ve done that so many times now that I thought it’d be good to write some of them down. I do so for two main reasons: so I can give the ideas to you, dear reader, and so I can give up on them and move on. I still think they’re all pretty good ideas, it’s just I need to let myself know which ones I really want to finish building for the public. You don’t get those, but you get the rest.

If you read this and like the idea enough to build one of them to the point that it works out — if it even can; some don’t make sense because time passed and something happened to make it silly to keep building today — let me know! It’d be nice if any of the ideas did eventually succeed.

I’ll describe them in reasonable detail if it makes sense to, including technology choices or information if they’ll help you build it. There isn’t anything Dropbox or Airbnb-esque here, but there is somewhere between pocket money and buy-a-house money to be made on a few I’d say. Good luck.

Alexa/Echo login for macOS

One day a couple of years ago I imagined talking to my Amazon flavour of Lady In A Tube, to say something like, “Alexa, tell echo login to let me into my iMac”, and a second later your iMac would be at my desktop so I could start using it.

How far did I get? The design document is complete, and I built a working PAM module in Rust, that sits in the macOS PAM chain and polls a local service for a secure token that indicates it can return success and let the user through. That local service polls a remote one, to decouple the remote request from the PAM code, which is populated by your successful voice request via Alexa. Done.

In that simple initial form there’s a number of security concerns, but the design incorporated geofencing, plus the ability to speak a number of randomly pooled tokens, and the ability to populate those spoken tokens at the Amazon side without me or my service ever knowing what they are.

Why didn’t I finish it? Apple added the ability to unlock a Mac with your Apple Watch and it stopped being a good idea that I really wanted for myself.

deadmansswit.ch

deadmansswit.ch was a service where you could store a number of encrypted secrets, be they emails or text files or URLs or binary uploads. If you didn’t check in with the service in a set time period in any of a number of ways — email to a secret email address, tapping a button in an app on your phone, visiting a secret URL, ssh to a secret nologin shell at a number of obfuscated hostnames — the service would email a summary of the uploaded secrets to any number of email addresses you specified, so that the recipient(s) could access them.

That’d let you release information in the event that something bad happened to you, in a secure manner.

How far did I get? I designed and wrote (or prototyped) most of the checkin systems, but not much else.

Why didn’t I finish it? Mid-development I read somewhere that someone else was building one. A number of them exist now, but none with the security properties mine had. Still a good idea.

Leviathan

Leviathan is a set of interesting cross-platform GPU microbenchmarks, designed to tell technical analysts in the press something interesting about the GPU architecture that Leviathan is run on. If you look at GPU analysis today, the vast majority is done with game content.

That’s fine, and you need games to round out a close look at a new GPU, but games don’t really give you too many easily understood insights into the bounds of the underlying microarchitecture and the GPU that implements it. And many popular GPU platforms today are inscrutable even with games.

How far did I get? Most of the way, but it needed significant polish and came at a time before the new era of explicit graphics APIs. It could do with modern API backends and better platform support.

Why didn’t I finish it? I probably still should. Done right, where it’s also aimed at GPU vendors, there’s a $1M+/year business underneath.

uploady

Uploady is a combined image sharing, text pasting, file sharing and URL shortening service, designed for small IRC-based communities to be able to share links, text, images and files with each other. Data fed into the service is then linked on specified IRC channels by a bot.

How far did I get? There’s a working prototype at uploady.uk that I use with my oldest friends. Anything put into the services there is linked on our IRC channel by a bot. There are even iOS and Android apps for the image service, and an iOS Workflow for easy image uploading from the iOS share sheet. Redis is the underlying data storage and notification system (Redis pub/sub is awesome).

Why didn’t I finish it? I mean, I did, but not in the “install it yourself or pay for a hosted instance!” way that I’d planned, so that it could make money.

Fun fact: I wanted a really short domain name in the beginning and ended up with 2r.cx, pronounced Torx. Can’t remember why. I only note it now because some of the source repositories are called torx<something>. If future me ends up remembering why then I’ll let you know.

inboxes

Inboxes would have been a one-click-to-setup, secure and private mailserver that you could run on a VPS at a cloud provider, to take care of your own email and not give it to one of the big email providers

How far did I get? The complete product was designed, documented and implemented, and I use it to host my own email at inboxes.io. Like uploady, it ended up in production for my own personal use as the minimum viable product and proof it’d work, but never got it to a state where I could convince other people to pay me money for it.

I built it on top of great open source software (dovecot, postfix and spamassassin mainly). It supports nice features like recipient delimiters and automatic folder generation, auto-updating certificates via Let’s Encrypt, and only exposes secure mail protocols. All on-disk storage for mailboxes lies on ecryptfs filesystems.

Why didn’t I finish it? Mail-in-a-box came to be before I finished. That system doesn’t have some of the security properties that inboxes does, but it’s close enough and was actually finished.

Consensus blocker

When Apple announced that iOS Safari and WebKit-derived in-app web views would support content blockers, I sprang into action and designed the algorithm for a novel ad-blocking content blocker. Rather than use one or more of the community-maintained blocklists, it operated on consensus, where you’d browse the web normally and if you found a site covered in ads, you’d submit the URL to the consensus system.

If enough consensus blocker (I really needed a good name for that one) users submitted the same sites, the system would work out the ads on them and update everyone’s copy of the blocker, so everyone could benefit from the signal that a certain site was shit because of ads. That way only the worst offending sites had theirs blocked by the consensus algorithm.

I realised that there’d be a huge first mover advantage for those present with content blockers on the launch day of the version of iOS that allowed them. That turned out to be true; the content blockers that did well in that Proterozoic first 1-2 days are the ones that are the biggest and best today, at least for the most part.

How far did it get? Not far. I couldn’t design a consensus algorithm that worked effectively with a low number of users without being easily gamed, in time to build the content blocker for iOS that would be fed by it. I did come up with methods for human moderation in the early stages of the blocker being deployed, before network effects took over to drive it, but too late.

Why didn’t I finish it? I quickly realised that good automated algorithms for trusting crowdsourced signals as “truth” are a whole branch of multiple sciences that I don’t know enough about, and the success of the system would live and die quite quickly on the quality of the algorithm.

I still think that secure, accurate and easily-used distributed consensus systems on a huge scale, like one brought to life by a huge number of iOS users, are the future for a lot of problems that humans have today. Not least the completely obvious macro and micro democratic process ones. Wish I knew how to build them.

getsomefuckingworkdone.com

getsomefuckingworkdone.com would have been a social media blocking system to stop me procrastinating, based on DNS-based filtering and redirection to a website that tells you, loudly, to stop trying to access Instasnaptwitgooglebook and get some f….

How far did I get? I use it today on my home network (run on a private URL, not that one!).

Why didn’t I finish it? I did, but, like many of the ideas above, not to a state where I could charge money for it.

I now give myself permission to stop thinking about finishing any of the above to the point where it could be sold. Fin.

Such sweet catharsis to type that out. Now I can move on to the next batch of eventually failed side projects.

More fun facts: Uploady is one of the oldest, at almost 6 years old (first commit for the working image uploader was April 30th, 2012 @ 21:37, according to git log). The last commit was over 2 years ago (March 12th, 2016). I need to learn to let go of things sooner!