A real reason to switch from Mac OS X to Linux

Dan Gillmor wrote a piece on moving from Mac OS X to Linux that struck me as a little odd. He begins by explaining how he's been an Apple fanboy for 10+ years because they have the best tech. While he's not religious about tech, he is religious about some of his principles that Apple is violating. The big violation, in his eyes, is how "Apple is pushing computer users as fast as it can toward a centrally controlled computing ecosystem". While I wholeheartedly agree with Dan in this case, I wouldn't claim that Mac OS X really fits the bill here. Mac OS X is more "open" when compared to iPhone and iPad.

The author claims he uses the best tech (Mac OS X in this case) and then continues on to say he's switching to Linux purely for religious reasons. That seems to paint Linux as second to Mac OS X. And perhaps for his uses that's true. I would say there are more reasons to use Linux over Mac OS X, but I also come from a developer's point of view.

Am I religious about tech? When it comes to my tools, absolutely. I've developed on Mac OS X and Linux for years. People who know me would surely say I'm a Linux fanboy, but it goes a bit deeper than that. Like Dan, I believe 100% in using the best technology. That's why I choose Linux over Mac OS X for software development. Linux and the many open source communities provide me with the best tools to get things done. When I work on Mac OS X, I feel completely restrained. My reasons for using Linux are both technological and religious. Being "open" isn't just religious; it's about removing restraints.

While I do have my religious moments against Apple, they're more subtle. When I was out looking for a new smartphone, I was weighing iPhone against Android. iPhone is absolutely gorgeous. Android phones, at the time I bought my G1, were clunky. How did I feel about AT&T vs. T-Mobile? Well, that's a no-brainer: AT&T is evil and T-Mobile is not-so-evil. When it came down to choosing, I went with open and not-so-evil as opposed to closed and evil. For me, being an open source developer, that was mostly a religious move.

Lately I've been getting into mobile development and there are a handful of platforms to choose from. Will I let religion get in the way of making money on the iPhone or iPad? Definitely not. I'm not opposed to making money off Apple's platforms even if I sometimes disagree with their motives.

In Honor of GoogleCL: PosterousCL

So I thought this would be a fun little project to spend an hour on today. GoogleCL is getting some really good responses so I felt like making a command line client for posterous. It's dead simple and all you can do with it at the moment is write new posts. I put it on Github and you can also grab the tarball here: posterouscl-0.1.tar.gz

To use PosterousCL, edit the `config.ini` file and change the email and password variables to match your posterous credentials. Then you can run it like so:

    $ ./posterous.py --newpost --title "Hello, world" --body "Posting from PosterousCL"

I may be adding more of the posterous API functionality to this project in the future if enough people are interested (or I get bored and feel like hacking on it more).

Real Programmers Use X

I suppose I shouldn't really be surprised by the statement "Real Programmers Use [insert language here]". It comes up all the time in many different programming communities. The inspiration for me writing this post comes from a blog entry on game development programming languages. The author of the article describes an encounter with someone who asserted "BlitzMax is not a real coding language, only C++ is fast enough". The idea behind that statement being "real game developers use C++". I can't count how many times an argument like this occurs. I've noticed it is generally stated by amateur programmers who somehow convinced themselves that there is one true language, and it's their language of choice.

The idea that only C++ is fast enough for game development is misleading at best. Ignoring the fact that BlitzMax is actually used to make games, C++ may or may not be the best language for the job. It's entirely dependent on the scope of the project and the developer's level of expertise.

There's a big difference in amateur and professional game developers. An amateur can spend his entire life doing C++ and never get a professional offer from a game studio. Just being able to do C++ is not good enough. When you start expanding your horizons and doing projects that require many different languages and technologies, you'll start realizing there are better tools and solutions to your problems. When you have a broader set of skills to draw from, that's when you start becoming a valuable developer. Sticking to this notion of only real programmers use X will get you no where.

Take Zynga for example. This company produces hit after hit and none of their games are written in C++. By using tools and languages that allowed them to scale faster, Zynga all but took over the social games industry. Zynga is a $4B company with 9-figure revenues. How big would Zynga be if they started off doing games in C++? They'd still be working on their first game.

mod_python is no more

According to Graham Dumpleton and other sources, the mod_python project has been officially killed by the Apache Software Foundation. mod_python is a project under the umbrella project quetzalcoatl. It seems to be a long time coming since it was last updated in early 2008 and its main competitor mod_wsgi has just about completely taken over as the standard Apache module for running Python web apps.

I've used mod_wsgi and mod_python, but these days I run nginx as a frontend proxy to a CherryPy WSGI server for my Python web apps. Sad to see a previously successful project get killed, but it was time to make way for mod_wsgi and other methods of serving up Python.

Moving Some Services to the Cloud

The past week or so I've been starting to move more of my core systems into the "cloud". It mostly started with moving my blog over to posterous. I was also starting to consider moving my hosted email over to google mail, so I did that last week. During the downtime I may have missed some emails over the weekend, so if you emailed me and I haven't responded, feel free to resend. I also moved http://alwaysmovefast.com over to a rackspace cloud server and I'm going to be closing down my rackforce VPS soon.

Using rackspace cloud is really neat so far. I can bring servers up and down in a matter of seconds. It's going to be extremely useful in the long term for my future projects. I'm still not sure what I'll do on my main site but I've been considering making it kind of like a product site for my different projects (open source and otherwise). For now there's just some text and a javascript feed of this blog on the main site.

Send me an email or tweet me @davidreynolds if there's anything you'd like to see on my main site :)

Running with Xubuntu 10.04 Lucid Lynx

After a couple of years using a MacBook and developing on Mac OS X and Ubuntu, I decided to try something a little more lightweight. I bought a new ThinkPad a few weeks ago and I'm getting rid of my MacBook. I've been doing some research on different Linux distributions but I kept coming back to Ubuntu simply because I know it fairly well. A few distros I looked into were Gentoo, Slackware, Sabayon, and Mint. All of those Linux distros come highly regarded.

After getting more in-depth looks at these systems, I started running into different desktop environments. As you may or may not know, Ubuntu, like most Linux distros, use Gnome as their desktop environment. KDE is the other big one that many people use. It started becoming apparent to me that maybe the desktop environment could be slimmed down while still using Ubuntu. Some of the smaller desktop environments are fluxbox, icewm, and xfce.

Xfce looked very promising to me. I also love that it's written in C (as opposed to C++). I began looking for ways to install Xfce on Ubuntu and other distros and discovered Xubuntu. I decided to give it a try and I honestly don't think I could be happier. My system boots in around 20 seconds. As soon as I log in, the entire system is ready to go. Having a light desktop environment allows me to focus on getting things done. It also lets me use my RAM for more important things, like running virtual machines

VMware for Web Development

I've been getting into the habit of firing up VMware and configuring virtual servers for web development. There are tons of benefits to using virtual machines, but some of the key benefits for me are:

  • My local machine doesn't get cluttered with different development environments for different projects
  • I can install different versions of software and libraries on their own machines without conflicts
  • Using a virtual server allows you to run identical systems as your staging and production servers
  • Deploying to a local virtual server can be a similar process to deploying on a staging or production server
  • Development environments can be replicated by the development teams so everyone is working on an identical platform (or at least deploying to an identical development platform)
  • You don't have to develop directly on the virtual server -- use your local machine to write code and then have an automated deployment to your virtual server.
  • If you're using bridged networking, other developers on your network can connect to your virtual server

After going so long developing web apps on my local machines and having to deal with different Python package versions, different databases, web servers, etc, it makes complete sense to use virtual servers for web development.

Another thing I've been doing lately is using virtualenv for sandboxing Python environments. It helps a lot for locking a web app into specific package versions (and Python versions) while also keeping your system's Python environment clean.