Building a Loft on Toothpicks

Tagged: clojure

Today I thought about building software on top of other piles of software. This has been a common topic for me lately; something I've covered before in other posts. Anyway, I'll keep it short today.

Today I was using Trunkº to practice reading french. I built Trunk as an Electron application and as a result I was able to embed a BrowserView of Google Translate. Then, using Electron's IPC system, I am able to trigger the loading of Google Translate with selected words in phrases and translate them semi-automatically.

Then today, after reading for a few minutes, the BrowserView window turned into a different page that showed a captcha asking me to confirm that I was a human because the site was getting a lot of traffic from me.

Of course.

Of course this would happen. Why didn't I think of this? At the outset, I knew it was dicey to essentially embed an iframe of a mobile webview into an application - it was dicey to hope that the design and layout stays constant so that I don't have to edit how Trunk wraps around it. So why did I do it? Because Electron enabled me to do it (and frankly, I got carried away with a fun project). And because no other free, open source application I know of is able to embed Google Translate into the application to make it easier to learn your vocabulary. In my mind, at the time, I had discovered a hack for great good. Now all I see is a dependency waiting to fail.

This isn't a huge deal. It's not going to cause me to lose money (I'm not making money in the first place). The only downside is the disappointment I feel in building a system that is unlikely to work in the exact same way in 10, 5 or perhaps even 2 years (and perhaps one or two users some day being disappointed). I know I am being a bit hard on myself ("you should have known better; you should have thought about your values!") - but the reality is that I'm still learning. In my heart I think I want building software to be like creating a piece of art - I want to be able to make a piece and call it done and move on to my next piece with the knowledge and skill I have gained from the previous one (whether this is possible (in my current opinion, software is never done) is something to be discussed over dinner, or at least in a fluffier blog post, later).