I'm an open-source loser.
I should be very glad if you could see in me something more than an idle fellow. Because there are two kinds of idleness, which are a great contrast to each other. There is the man who is idle from laziness and from lack of character, from the baseness of his nature.
On the other hand, there is the idle man who is idle in spite of himself, who is inwardly consumed by a great longing for action but does nothing, because it is impossible for him to do anything, because he seems to be imprisoned in some cage, because he does not possess what he needs to become productive, because circumstances bring him inevitably to that point.
(Van Gogh)1
I hate it when I want to write something that looks like a self-help post, but without a “help” part. On the other hand, Paul Graham suggests to just start writing and see if something comes up. So I promise you and myself nothing. Maybe you can learn from my mistakes or something.
It goes like this. Back when I was fourteen or fifteen, I was a cool kid on the internet. I’ve written kernel-level rootkits for Windows and programmed for PSP (and even write articles in the real-world popular Russian magazines about this stuff). I’m not a cool kid anymore: now, for reasons I can’t grasp, I’m trying to do something useful and open-source it. And I’m failing every time. I’ve won some prizes at DjangoDash and read some Brad Fitzpatrick’s slides, and this made me hate myself a little more so I’ve decided to embarass myself to the whole internet (consisting of, like, ten people who read my blog?).
The incomprehensibility
I’m not sure if it’s the first reason on the list sorted by importance, but it definitely the first chronologically. One of my first “big” open-source projects was “Mongodloid”, a decent ORM for MongoDB written in PHP. It was definitely one of the best ORMs feature-wise at the end of 2009, but not the best quality-wise. I was surprized to find out that I had actually written some tests for it; but its source code lacks of any comments, is anxious for several refactorings and hard to comprehend. And also the name: “Mongodloid”, really?
As far as I can tell, not a single person on the planet uses it. Even I killed the only project which had used it (among mine). I forgot about Mongoldloid in the 2010. (Oh, on the other hand, I’ve received a gift from 10gen: a nice cup. So I’m probably not so much a loser, huh?)
Fixing microscopes with hammers
When I first learned about Coffeescript, I’ve remembered my “php-preparser”. It is not nearly as cool as Coffeescript, it just adds a small feature to PHP: array dereferencing.
Do you even know what array dereferencing is? It’s when you have a function which returns an array, and you want to get just one item from it. Like this:
give_me_some_array_please()[3]
parse_some_url($url)['domain']
This obscure useless feature, which probably can be considered as a code smell (if you need only one element from the returned array, your function is doing too much), had not made it into PHP back in the days. (Now the proposal says “accepted”. I don’t use PHP anymore and I have no idea if it’s implemented.) So I decided to make it work. To do so, I’ve written a function which had to be used instead of require and include statements. It would read a file and change all array dereferencings to something what could work. Since I was assuming that it was going to be slow, I’ve implemented caching all the preparsed code2. For reasons I can’t remember, it used namespaces and lambdas, so it didn’t work on most servers - 5.3 wasn’t popular back then.
So I’ve implemented something what turned out to be 1/100th of a good idea, but it was too hard to use, extend and understand. Never returned to the project again. I’ve even stopped using PHP.
Stuff I don’t use
Now we can go from PHP to (mostly) Python, and from Google Code to Bitbucket. There we can find “mon-django”, a collection of django.contrib apps (like django.contrib.auth) ported to the MongoDB backend.
django.contrib.auth actually worked, but if only I tried it on something real, I would learn immediately how useless it is. You can’t just change one piece of Django, it’s too losely coupled. I’d had to fix admin and all other apps, both django.contrib and third-party, to work with it. But this good thought came to me too late.
The God application
You’ll laugh out loud, but after all these failures I decided to build an app what was going to do everything in a simple polite generic way. I’ve named it “please”, you know, like in “please make me a sandwitch”. I have to admit I still have some good feeling about it. Take a look at the screenshot! It definitely could be useful if it tried to do something, not everything.
Nobody actually was interested, and I had even had an odd argument over please. Yes, I’m arrogant, but I’m going to get back to it later.
The competitioner
Less than a month ago, I tried to participate in DjangoDash. It had its issues (like a couple of reschedules), but still was great. It seems that a guy behind it tried hard but had some bad luck. Good work, Daniel!
I’m an experienced competitioner3, and I kinda figured it out. To win I had to use some cool technology (Redis is awesome!), nice design of the webpage (I’ve used Adobe Kuler to choose colors) to make something with a good API (I mimicked Django’s QuerySet), included batteries (a Request time graph, a bit useless because it shows averages, but impressive at the first sight nonetheless) and, well, impressive features (it seemed to be really close to a very expensive product, but open-source, simple and moderate resource-wise). And I just did all of these things, and made Staste.
Well, I didn’t actually think exactly that way. I wanted to do something cool, make some programmer friends (I don’t have any, except a couple of Ruby developers). But my easy-win mentality helped me to get the third place, not socialize or something. I had another guy with me in team (the third one hiked off), and I didn’t even have any temperance to work with him on a core, leaving to him some useless frontend shit.
I’m a moron
I’m an open-source loser not because I’m not smart. I’m pretty smart. And not because I don’t want to share: I do. And not because no one in the world understands my brilliant ideas (there aren’t many). It’s just the other way round. Being smart makes me really arrogant. My desire to share is a result of fame-seeking. And I prefer to steal nice easy-to-execute ideas, because it’s, hey, a good way to succeed in the short term. At least until the prizes are forgotten.
I think I’ll have some humility treatment. I’ll send patches, not reinvent the world4. And maybe read some books which gather dust because I forget about them in this stupid rush.
At least follow me on twitter, okay?
-
I know about these words from the awesome opera written by Michael Gordon. Deeply recommend it. (Can I use “deeply” here?)
↩ -
This experience helped me solved a small performance problem. Zend Framework suffers from doing too much includes on every request to your server, so I would just collect everything needed into one giant file and include only it. Oh, good days! I will do no PHP anymore. Never.
↩ -
During the summer, I won an iPad at ideas contest and Galaxy S at EuroPython at programming contest. I believe that my social awkwardness contributes in my desire and ability to win things.
↩ -
With all this egocentric history, I have only one small patch in a big open-source project: I’ve fixed something useless in Django. Yeah, you’re right, I’ve searched its tracker to find something useless and simple to fix, sent a patch and felt better about being a contributor. I’m a moron.
↩
Please send your comments, ideas, rants and job offers at v.golev@gmail.com.
Made with Nginx, Jekyll, Git, EC2 and Emacs.