Sometimes the programs you write for yourself get the biggest response from others.
It’s been about 9 months since I first released a silly software project that I didn’t think anyone would care about. Okay, honestly, I was expecting some people like it… perhaps just a small group with an appreciation for 90s era hacker movies. But I didn’t expect it to go viral the way that it did when I first announced it. And I certainly didn’t expect it to go viral again 4 months later.
No More Secrets is a command line tool for recreating the data decryption effect from the 1992 film Sneakers. Below is a screencap of what the latest version looks like.
The original intent of this article was to announce the new version (0.3.0), since I think it has some pretty cool upgrades. But perhaps it would be interesting to describe my experience since it’s initial release last May.
When I first released No More Secrets, I announced it on reddit.com’s “programming” community, which has over a half million subscribers. I was delighted at the first few positive responses and upvotes. I figured that my post probably wouldn’t get much more than 25 upvotes before interest tapered off. But that didn’t happen. The upvote counter kept climbing. Approximately 3 hours later it had received over 800 upvotes and was prominently displayed in the top position for all subscribers to see. It stayed in the top position for more than 16 hours, and took a full day before finally falling off of the front page.
Right about the time it had achieved the top position on reddit, a kind stranger saw an opportunity for some easy internet points and posted about it on news.ycombinator.com, another popular software community with a large subscriber base, where it received similar fanfare.
Traffic to my github page blew up. People were installing my project from all over the world. I was delighted, and perhaps even a little proud of myself. But my inflated ego wouldn’t last too long, because I soon started receiving bug reports, which turned my delight in to anxiety.
Some of the bugs reported were just user error, but they still revealed areas where my documentation was lacking. Of the legitimate bugs that were reported, I separated them into two groupings: 1) Bugs that caused program failures or faults, and 2) Bugs concerning lack of support for a platform or character set.
The first category of bugs, the failures, were mostly quick and easy to fix, and there weren’t that many of them if I am being honest.
But the second category of bugs, the support bugs, took a considerable amount of time to address. For example, my first release only supported ASCII text. This means that it doesn’t work for anyone using an international character set. I received multiple reports for this issue. I needed to implement support for unicode — a standard for character encoding that supports international character sets. But my entire program was designed to assume that each character is 1 byte in length. Unicode characters are up to 4 bytes long. It required the re-engineering of a significant percentage of code.
Also missing from my original version was the proper character set used in the film. Again, my original release only used ASCII characters, but the film clearly shows non-ASCII cyphertext during the decryption sequence. A few users were quick to point out that the character set used in the film was called ”Code Page 437", which was the family of characters used for the original IBM PC and DOS back in the 80s and 90s. Having already implemented unicode support, extending that functionality to use CP437 was a somewhat easier task.
I spent the following days addressing all of these issues. Since the download counter on my github page was showing no signs of letting up, I felt pressured to get these changes shipped as soon as possible. It was a good learning experience.
About a week after the announcement, with all of the bugs fixed and new features implemented, I could relax. Traffic had finally tapered off.
Fast-forward 4 months.
I was at a barrel-aged beer festival with a few friends enjoying the pleasant Saturday evening when my phone buzzed with a notification. Someone had mentioned my project on twitter. I didn’t think much of it. It still happened on occasion. But then my phone buzzed again. And again. And again. Soon it became apparent that something was up. I went to my github page looked at the traffic and download stats. They were sharply increasing. What was going on?? I could hardly enjoy my oak-aged coffee stout.
After some digging, I found out that my project had been blogged about on adafruit.com and sent to their 120,000 twitter followers. This sparked an initial flurry of twitter activity which in turn caught the attention of someone from lifehacker.com who decided to feature it in a front page article, exposing it to their one million unique daily visitors.
For the second time, my github page blew up. Traffic was climbing. It was happening again. I remembered all of the bugs I had to handle last time. But this was different. My code was well tested and much improved since the original release. This time there were virtually no issues reported. Nothing major. I could actually relax and enjoy the experience.
It took about a month before traffic to my github page finally returned to normal.
So, what is No More Secrets?
No More Secrets is a command line tool for recreating the data decryption effect seen in the 1992 film Sneakers. It’s a 90s-era hacker movie, and if you haven’t seen it, you should watch it. It has an all-star cast and holds up very well today. Below is a clip from the movie in which this effect is first shown.
Since the initial release of this project I’ve made a number of improvements, but the goal has never changed. It’s still every bit as pointless today as it was when I first released it. I’m proud of that.
Today I am announcing version 0.3.0.
The most notable change is what I call “inline support”, which is another way to say that it no longer clears the terminal screen before performing the decryption effect. This feature is demonstrated in the screencap at the start of this article.
The decryption sequence is much improved as well. The original algorithm produces an effect that didn’t capture the film’s version quite correctly. It felt too robotic and lacking in a certain dynamic quality. I’ve addressed this concern in version 0.3.0. Now that dynamic quality can be felt and it’s much more true to the movie. Compare the screencap at the start of this article to the one from the previous version and you will see the improvement.
Finally, I restructured the code. Now I am slightly less embarrassed if anyone should browse through it and pass judgement on me. One of the goals of the restructuring effort was to create an abstraction layer for terminal I/O. This enabled me to create separate modules to support different terminal capabilities. As a result, I now support ANSI/VT100 terminal escape codes (which enables the aforementioned inline feature) as well as an ncurses version for those whose terminal lack that capability.
If you are on a linux or unix system, I encourage you to install and play with the new version. If you have the old version installed, you should upgrade.