Every Python developer is familiar with Read The Docs‘ beautiful HTML documentation for numerous open source projects. However, few developers know that Read the Docs hosts PDF versions of every project’s documentation.
Here, for example, is the url to Django-Tastypie’s PDF docs:
You can replace django-tastypie with the slug for any Read the Docs project.
On Tuesday, I released Politician Market, a satirical, fake, marketplace for buying US politician votes. I brought it online, posted to Hacker News, and went to take a shower. 15 minutes later, I’m wearing a towel when I notice that Politician Market is #1 on HN and the server is melting. 12 requests per second. Gosh. I spent the next hour coding in underpants only. My roommate walked in with family members in the middle. He just pointed, said something with the word “roommate”, and walked out.
I wanted Politician Market to be entirely static site, so I used JotForm for signups. There were so many sign-ups that I crashed JotForm’s servers after only 10 minutes and had to move the sign-up form to Google Docs.
Signups and Conversions
Conversion tip: If you want to optimize sign-ups, don’t use an external service. Sign-ups stopped almost entirely after moving to Google Docs. (I received only 40 signups after the move.) If you want to gain feedback, do place a feedback form on the homepage and you’ll get plenty of feedback.
12,000 uniques and 4 hours later, Politician Market mysteriously disappeared from the homepage and traffic started to subside. Some time before then, I had to disable the contact form entirely because I was about to overrun my JotForm quota. Despite disabling the form, people kept submitting it, often blank. (A browser bug?) At that point, I changed the form’s action to “#” and added an overlay (see below), but people kept submitting the damn form. My brother told me that he wrote me a long message in the contact form, because he was convinced that it really did get sent after all. What must you do for people to believe you?
Another conversion tip: Adding social sharing buttons seems to matter. There were 12,000 hits while we were on HN for four hours. After pg killed the submission, the long tail brought (and is still bringing) another 2k. If you add sharing buttons, make sure to include Google Plus. The break down was 259 shares on Twitter, 40 on Google Plus, and a bunch on Facebook. (For an unknown reason, Facebook wont show me the stats anymore.)
For absolutely no reason, I asked for phone numbers in the signup form. About 30% of all sign-ups included them.
Avoid AppEngine Like the Plague
I originally wanted to host on S3, but it wouldn’t accept my credit card so I used AppEngine and static-app-engine-hoster. Don’t do that. There is no caching and you lose all the benefits of a static site. I wasn’t expecting so many hits, so I didn’t think this through.
More on AppEngine: Deployment is easy, but payment sucks. AppEngine makes you pay per-week, so if you want to use $10 a day, you have to deposite at least $70. (Slimeballs.) AppEngine has absolutely no support for paying customers. I sent two emails about urgent issues and never heard back. Avoid AppEngine like the plague.
I tried publicizing Politician Market on Reddit, Slashdot, and Digg. It almost took off on Reddit, but Slashdot ignored it despite votes on the Firehose submission and Digg was a laughable waste of time. (What they say about Digg is correct: If you aren’t part of the oligarchy you might as well submit the link to /dev/null.) I emailed a few tech and political bloggers. Most of them ignored me, but some had incredibly kind words and published a link. Do have the chutzpa to email bloggers.
This is the second launch I have done. Third time ice cream. Does anyone know where that weird Israeli saying comes from?
Starting on March 28, most NYTimes.com articles will be available to paying customers only. According to the FAQ, everyone will be able to read articles if they click-through from Facebook, Twitter, or a blog. Here is the exact wording:
Can I still access NYTimes.com articles through Facebook, Twitter, search engines or my blog?
Yes. We encourage links from Facebook, Twitter, search engines, blogs and social media. When you visit NYTimes.com through a link from one of these channels, that article (or video, slide show, etc.) will count toward your monthly limit of 20 free articles, but you will still be able to view it even if you’ve already read your 20 free articles.
I don’t envy the New York Times right now, because implementing the new policy will be difficult. The simplest method of detecting Facebook click-throughs is to check HTTP referrers. That is also the weakest algorithm, because spoofing HTTP referrers is easy. Referrer spoofing wont be limited to geeks either – a small Firefox extension could enable the masses.
Crucial infrastructure for small projects
My latest project is a web application, which is currently in closed beta. I will blog about that more in the coming weeks, but today I’d like to discuss my project’s infrastructure. Infrastructure is one of those topics that you usually just learn about from the companies that you work with. I hope that the information here will be useful to individual developers and small startups. It is difficult to know what has to be done when you’ve never been part of a real-world development team before.
My project’s team is made up of three people. For a project of that size, there are three resources that I consider to be absolutely crucial:
- A project wiki – For storing project information like budgets, marketing plans, etc. The wiki should replace most emails between team members. The point of a wiki is to establish one place to look for the latest information, so that you don’t need to search through old email threads to find something.
- A project management site – For creating roadmaps, planning new features, reporting bugs, and assigning work to each team member. If you’re going to ignore everything else I write in this post then just setup a project management site. You wont be able to go back and live without it.
- A code repository (aka version control system) – For keeping track of changes to your codebase. Also useful for storing all of your source code in one central and backed-up location. (Yes, that explanation is slightly simplified, but using a version control system should be a given.)
Depending on the nature of your project, you may also need a build-bot or continuous integration server. I don’t have any experience in that area. However, I hear good things about Jenkins (formerly Hudson),
Chef, and Integrity. (Edit: As Tollef Fog Heen pointed out, Chef is a configuration management tool and not a CI server.)
Update: Git repositories created with WebFaction’s git installer are insecure, even when they’re password protected. Some Apache installations are configured out-of-the-box to protect .htpasswd files. That is not the case with WebFaction.
- Remove the file’s default world-readable permissions, by running chmod o-r .htpasswd
- OR: Prevent the file from being downloaded, by adding the following to .htaccess:
<files ~ "^\.ht"> Order allow,deny Deny from all </files>
Of course, the same applies to any .htpasswd file.