Uncategorized

This is what’s wrong with the Internet

My friend and I had recently made a simple ‘Remote GPS’ application for fun (http://mobileply.com) and we’re trying to see if there’s any type of market for it, so he’s been scouring Craigslist to see if there is anyone looking for a service that’s similar to the one we’ve built. He happened to stumble across this listing and sent to me laughing at how ridiculous it was:

Iphone/Android Developer and Back-End/Front-End Website

Date: 2010-08-29, 3:04PM
Hi we are looking to create a geo-social mobile application that relies heavily upon integration with other APIs (Facebook, Twitter, Foursquare, SimpleGeo). You will be asked to offer a complete solution from the back-end and front end design of the website along with robust Iphone and Android apps to support it. Please provide examples of projects that have achieved scalability rather than those which have only mustered up 10-12 downloads.
The project is time-sensitive as it relies heavily upon the college market and would like a product out this fall. To help with this, our team already has wireframes, mockups, and storyboards crafted up.
Please be willing to provide this during the application process:
-Resume of team
-2-3 references
-Video chat via Skype or Google Talk
-Most recent work with Location-Based Services
1. Name of Project
2. Contacts

Location: Pittsburgh, PA
it’s NOT ok to contact this poster with services or other commercial interests
Compensation: Hourly or Fixed Rate depending upon scope of work

This is exactly why we’re in the next Internet Bubble, because idiots like this have the “Next Big Thing” idea that’s going to make them a ton of money, and all they need is some genius hacker who has nothing better going for them to build the idea out overnight for a few hundred bucks.

It’s true, programming has never been easier/faster thanks to mature languages that abstract all the ‘hard’ stuff, frameworks that give you a structure to follow for very maintainable code and out-of-the-box best practices, and tools that auto-complete, highlight, and refactor code to make act of programming itself seem magical.

Although it’s gotten ‘easier’ that doesn’t mean experienced developers should lower their rates, but this is what everyone is expecting. Because the barrier to entry is so low now, the amount of ‘developers’ popping up is growing exponentially. People see sites like Digg, and Facebook’s valuation and they think they can be the next Zuckerberg or the next person to build that million dollar iPhone app. Essentially, these people get into programming for the wrong reasons, and don’t really have any clue what they’re doing and simply dilute the market. So now when Joe Schmo needs his brilliant idea built, you end up bidding on the project along with his 16 year old nephew who has 3 months of rails experience and suddenly your $60/hr rate looks ridiculous.

So here we are, everyone has a <insert your awesome idea here, or go get one from http://itsthisforthat.com > and all they have to do is find some programmer to build it. When you’re searching for that programmer though, please remember that you get what you pay for, and just because you hear how much easier programming is nowadays doesn’t at all mean that it’s easy. We’ve put a lot of time into developing these skills, and I recommend building your brilliant idea yourself if it’s so easy and you don’t like our rates…

Uncategorized

Comments (1)

Permalink

I’m calling myself out

Last night while I was in the car with my roommate, I was discussing how if I had just kept up with a few projects that I had started in the past that I’d probably have some mild success and traction with at least one of them by now. I just finished up Rework by 37signals and I think I got the most out of the very last page of the book from the essay about Inspiration. Inspiration is perishable, when you have it you work your ass off nonstop until you literally can’t work anymore. It’s an amazing feeling and such a high to be working on something that you truly believe can change the world. As my roommate says, it’s 20 hours of work for 10 minutes of fun and that’s what all my past projects have seemed to end as, only 10 minutes of fun.

So I realized the problem is that once the inspiration goes away, and it always seems to run out at some point, I end with this ‘meh’ feeling and things just aren’t as fun as they use to be. It sucks to admit this happens, and I’m writing this blog post to help myself from making lies in believing that I’m still pumped about things I’ve started earlier and convincing myself that I’m just too busy at the moment to put time into it. Instead, I need to just suck it up and get back to work on things that I’ve started until they’re finished. If I was excited enough at one point to put so much work into it, I might as well complete it and stick to it so that it at least has a shot. My goal with any project of mine is to just have people use it and appreciate it, not to make millions and cash out quick. So quitting is obviously the worst thing I can do, but also the easiest thing to do, because I can always make excuses as to why it would never have worked anyway.

Some of the past projects I’ve quit include a web app directory in 2007 that I didn’t see a market for after it was all built and complete. It was also designed terribly code wise so changes took far too long, never try to roll your own framework if you really don’t know what you’re doing. Now I see about 5 or 6 clones that all have a decent user base and I think, that could have been me.

I also had a podcast with two friends that was running for about a month back in 2008. We had about 10 listeners by episode 5 and since we were expecting overnight success and didn’t get it we decided that “we just don’t have the time to keep doing this.”

Finally, I created a Craigslist alert app which, after spamming twitter quite a bit, ended up with about 100 happy users. I saw some opportunity to make it even better so I started from scratch and started developing what I would describe now as Notifo + Twilio + other cool features. Neither of these services existed at the time, and I had a family friend who is an amazing web designer on board for equity to help out. I had some personal issues that set me back about 6 months and by the time I came around I saw too many competitors in the space and decided to stop development and not even give it a shot.

So after thinking last night about all these things, I ended up little disappointed with myself, and here I am writing a blog post to make sure I never make these mistakes again. So I’m asking you to keep me in check, if I say I have a project to share with you, hound me until I release it.

Uncategorized

Comments (0)

Permalink

Django – Allow users to log in using email rather than username

One of the annoying things about Django is that it doesn’t allow logins via email out of the box if you’re using their built-in user authentication . You must create your own authentication backend in order to accomplish this. However, one of the things I love about Django is the ability to create authentication backends without too much of a headache. This comes in handy when dealing with things like allowing users to log in via Twitter, Facebook Connect, any OpenID providers, or allowing them to login via email and password.

Django authentication backends are quite simple, essentially whenever you call the django.contrib.auth.authenticate() function, Django uses the authenticate method in any of the classes specified by the AUTHENTICATION_BACKENDS tuple set in your settings.py. If one of the classes fails to authenticate the user, Django moves on to the next one until either one successfully returns a user object or there are no other backends to attempt, in which case it results in a failed login. A very simple authentication backend which allows users to login via email rather than username is the following code in backends.py:

from django.conf import settings
from django.contrib.auth.models import User

class EmailModelBackend(object):
    def authenticate(self, username=None, password=None):
        kwargs = {'email': username}
        try:
            user = User.objects.get(**kwargs)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
                return None

    def get_user(self, user_id):
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None

And you simply need to add to your settings.py:

AUTHENTICATION_BACKENDS = (
'path.to.this.backends.EmailModelBackend',
'django.contrib.auth.backends.ModelBackend',
)

I generally place my backends in whatever app I create to store extra user info, but you can put it anywhere, just make sure it’s in your PYTHONPATH.

Uncategorized

Comments (0)

Permalink