Building a community, 1 year invested.

Building a community is hard work. There are a lot of steps that have to be taken to attract visitors, draw them in, and retain them. Fortunately, this project came with a community that was already there, just dispersed across 3 or 4 different sites on forums; 1 point for us. The downside is that the hunting/fishing crowd are not really very technical, are used to sites that are visual trash like this one, and are habitual people so they don’t leave the community they are already in if there is not some incentive to move.

One year ago today my company launched our first site, trackmytrophies.com. Of course, the company didn’t actually exist yet and wouldn’t for over a month, we were brand new to the technology stack we were building the site with, neither of us were extremely familiar with design or design tools, and we both had full time jobs working for someone other than ourselves. The site was built on Pinax 0.5.1. There was an early beta of Pinax 0.7 at that point but, for people new to the Django/Pinax world it was completely impossible to deploy, I spent ~17 hours, over 2 days, trying without success to deploy the site. At that point I decided to revert to the stable Pinax 0.5.1  which still took me 8 hours to deploy, but deploy I did.

Over this last year a lot of things have changed: we have become a lot more familiar with the platform we are using, our design skills and tools have increased, and we are working for ourselves…technically (we actually work for WebFaction). We have experimented with different layouts and designs, worked with serving our own ads (OpenX community is shit, don’t use it…), we’ve broken shit, read upgraded Django to an incompatible version, and we’ve even helped patch a minor bug upstream.

Enough of the boring stuff, here are some community stats:

  • 297 registered users
  • 612 uploaded photos
  • 10,000 total visits

…and we are not done yet. We have  a lot of ideas that we are still working on; there is a completely new design coming along with *many*, other backend upgrades that will be transparent for end users.

Here’s to the next year ending stronger than the first!

Business is hard. Part 1.

I am behind on my #P52 by a couple weeks so I am going to be catching up over the next few days.

Self help books and thousands of books on the Internet would have you believe that starting and running a business is easy, that it doesn’t take much, and that you will be better off for it. Web based businesses are touted as the ultimate business venture, you can make large sums of money building Web sites and web services for people, because you’ve a book on PHP and MySQL…what else is there to the web?

That is bullshit.

Starting a business is easy, building value is hard, in the State of Utah you simply go to http://business.utah.gov choose your business name, type, and enter the required information. Once you have completed those steps you pay your fees and get your FEIN from a link on their page and you’re set. You have a running business. Now what the hell are you going to do?

Now you, if you believe the hype, start working on your gold mine, Web sites, right…

Chances are you are still working a day job so that you can pay your bills which limits your time working on your own projects so you need to work extra hard if you want your own business to succeed. If you get a couple entry projects chances are you will realize you didn’t know exactly how some integral piece of the project works. If you are extremely unlucky you are also a student, have a family, or both.

Now the problem of time management rears its ugly head: how are you going to spend every moment of your day? There are not enough hours in the day to do what you need to do. Here’s how you might spend a day:

  • 8 – 10 hours at the job that pays the bills
  • 4 hours for school
  • 1 – 2 hours for homework

That is a total of 13 to 16 hours, now add sleep 11 – 8 hours, you haven’t eaten no time has been factored in for commutes or waiting…and you haven’t spent any time with any one other than the people you were in direct contact with at one of the above places. Of course, you will have days off or days without school so there are brief times when you can catch up on things that you are not getting enough of, like sleep or homework time.

How long can you viably sustain this pace? How many days of straight work before you are just too tired to do anything? What about support? If you *have* customers there is going to be a time when they need help or have questions and, if, you get a client from hell you will spend *a lot* of time dealing with his/her issues.

The time table above also doesn’t add any time for your new business or recreation. What do you cut out to make room for everything? What part of your life suffers? Who do you cut-out?

I still don’t know.

Quick post this week.

Edit: It seems that the publish call didn’t go through all the way so I am publishing it again.

As a contractor I spend a lot of time working on projects other than my own. To keep track of the things I need to do for each project as well as University classes I have been using Things recently. Both Things Mac and Things iPhone have greatly helped in keeping me organized between my work, client work, and University classes. Not to mention home. The price is a little steep for both of them. I don’t really know if it was worth the entire $60 since there is no push feature. I am confident from CulturedCode’s awesome status page that the features will actually come out so I considered it a future purchase.
For time tracking I am currently using Billings and Billings Touch, together both are fairly expensive as well $55, if you want to be able to sync between them. I tried a couple different web based apps as well as a couple other Mac
specific apps for time tracking but the rest were not as comfortable or powerful enough for me to use. Billings takes a second to configure and isn’t very intuitive slips can be marked as done but when a project over laps a month it doesn’t really seem to be useful.

All in all Things and Billings are just the apps I have been looking for to help manage my time and task list.

Thoughts about Java and Python.

In my Computer Science course I was asked to write a program, in Java, that would compute the powers of 2 from 2^1 to 2^20 using only a while statement. At first I tried, with just the basics that we had learned so far, to create the program. Things did not go well because I couldn’t get the powers to work correctly using pre or post decrements. After I looked through the extensive Java Math library here is the solution I came up with:

Coming from a completely Python world, I wondered how I would have implemented the same program in Python. This solution is probably not the most elegant solution but Java was very heavy on the brain while I wrote it.

A couple of things I really missed from Java when coming back to writing Python were:

  1. Post and pre increment, I understand why Python doesn’t have them but damn are they useful
  2. Brackets for the while statement, I know brackets are horrible and messy but it really makes the start/stop of a code block easy to follow…fuck Ruby and its “end” command that is just ugly.

I really like the way Python’s “print” values work. It is much nicer to use %s inside the code and then add % (count, multiplier**count) at the end of the statement rather than using the “+” and variable names.

In the Python world Java gets a lot of shit from a lot of people. Granted, Java does have its share of problems and oddities but it is an extremely powerful, well backed language. Oracle’s support of Java after their acquisition of Sun Microsystems has dramatically increased since a great number of their products are built on Java. Probably the strongest piece of the Java programming language is the Java Virtual Machine. The JVM is so versatile, that, practically, every language can be run on it. There are implementations for Ruby (JRuby), Python (Jython)[1], and even, my favorite web framework, Django (Django-Jython)[2].

With Django and Python gaining traction in the Enterprise world Django-Jython and Jython are perfect building blocks for organizations that *have* to run Java for some of their applications or middleware but want the ease of use that comes with Django and Python for their internal or even external web teams. I like where things are going and I am on the bandwagon with both languages.

[1]: http://www.jython.org/

[2]: http://code.google.com/p/django-jython/

Meta and random musings.

Shorter (read: less content) blog post this week because life has been overly strenuous this week. School has become, almost overwhelmingly, full of homework and reading assignments as well as programming assignments. Besides that, work has been extremely tiring because of the workload and being short handed (for completely valid reasons –  I don’t blame any one for being where they are, under the same circumstances I would do the exact same things). Life at home has also been stressful because of all of the other factors.

Perhaps the most amusing thing I have seen today is http://www.michaelv.org/ which is a Javascript rendition of Windows 3.1 (the third operating system I ever used the first being DOS the second Apple something). This is where the meta part of this post comes in. Inside of the Javascript Windows 3.1 you are allowed to open a browser and because the browser runs Javascript you can once again open the same web page (Windows 3.1) over and over again, currently I am at 10 windows open but the screen shot only shows 2:

This can go on, I am assuming, indefinitely as long as you correctly format your window sizes. This  project gets 5/5 pyl0ns from me.

More amusing software that I found today, because of Jeff Croft (http://twitter.com/jcroft/status/81415197100) is exactly what I was looking for to make my transition from work, where I use Firefox as the default browser, to my regular browser (Chrome|Safari) much easier. I had looked for AppleScripts and tutorials to see if I could find some way of programmatically setting which browser was my default but my Google-Fu failed me. Now I can simply create 2 “programs” that can be launched from LaunchBar that will set my default browser without all of the extraneous clicking, plus it runs on Jython which is just cool since at this point in my life Java and Python are the only things I am focusing on. I highly suggest checking Project Sikuli out, there has to be something in your life that you can automate.

My Battle of Twitter Clients.

Recently (after upgrading to Snow Leopard) I have been forced to find other twitter clients than the one I had been using for almost a year, Nambu. As a part of the MacHeist offering I got a copy of Twitterrific which I tried for a couple weeks…I hated it. Here they are with their pros and cons:

Nambu (10.5 version):

Pros:

  • Multi-account setup is easy
  • Good layout

Cons:

  • On Snow Leopard, if left running will use 2.0GB of RAM

Nambu (Snow Leopard version):

Pros:

  • Smaller RAM usage
  • Free

Cons:

  • New UI is awful
  • The break outs of retweets
  • Resizing window doesn’t resize tweet field

Twitterific:

Pros:

  • None, simply awful

Cons:

  • Always on top
  • Horrible UI
  • It costs money

TweetDeck:

Pros:

  • Multi-column so you can see all of the info you want

Cons:

  • Ugly – even if the color scheme is changed
  • Adobe AIR
  • Multi-column

Tweetie:

Pros:

  • Beautiful UI
  • Wonderful multi-account setup
  • Overall, very enjoyable

Cons:

  • Pop out compose field
  • Search setup is odd and clunky
  • Dock icon doesn’t show number of tweets
  • Number of tweets isn’t shown anywhere

Echofon:

Pros:

  • Simple, clean interface
  • Number of tweets is clearly visible
  • Search is quick/easy to use
  • Compose bar is built in
  • Slide out drawer info is helpful

Cons:

  • Multi-user accounts are clunky

After my full evaluation of these clients I’ve found the perfect twitter client for me would be Echofon and Tweetie smashed together, giving me the in app compose bar with the left sidebar and the slick interface that Tweetie has.

I’m still unable to decide between Tweetie and Echofon so I am currently using both. (side note: leaving 4 twitter clients open at a time quickly reaches the API limit.)

TextMate to VIM and back, why I made the switch.

About 6 months ago I made the switch from TextMate to MacVim because of a couple things:

  • TextMate is kinda, not really being developed anymore
  • Many other options are out there
  • TONs of Python developers post about their editors all the time
  • VIM is hardcore and installed by default on many Linux systems (which I work with all day)
  • I wanted to take a side in the holy war (Emacs vs. VIM)

After doing a lot of research on the editors that were available I tried out Aquamacs and played around with it for a while. Emacs is powerful, as long as you install the right plugins…and know LISP(ugh!). Emacs is just too much pressing of the control button and shift and other modifier keys, I have carpal tunnel  and pressing Control + (modifier key) is too much if I have to do it repeatedly.

I switched to MacVim, fewer modifier keys, much simpler to use and no knowledge of LISP is required. VIM syntax is much better, but still coding to be able to code isn’t really ideal for me. Luckily I found the right plugins and the right tutorials and got everything working, I even switched to MacVim as the default editor for everything. I spent the next 5 months learning how to use MacVim and since, I got a new job, doing support for the best hosting company in the world, using VIM was very helpful.

Recently on Twitter I saw this: http://justinlilly.com/blog/editor-stats/ After looking through the screenshots of all of the different editors that are out there I began to miss using TextMate with its Cocoa-ness and modern feel, VIM is very archaic and keyboard dependent, while being ideal for some people is not idea for me). I installed all of the bundles that I wanted, and, there was a bundle for everything that I wanted. IMO, using “svn co …” is much easier than downloading, unzipping, and copying the files to the right directories and editing vimrc to make sure that the new modules are being used when they are supposed to be.

So now I am back to using TextMate as my default editor and I am enjoying it tremendously. There is no coding involved to change the background color, no command to invoke to have the sidebar open, no navigating with the keyboard only when using NERDTree, no more having to type NERDTree, and most of all bundles are so much better, faster to install and modify than with VIM.

I am still, eagerly, awaiting the release of TextMate 2 but for now I am happy to be able to change things without code so that I can spend my coding time doing something productive instead of configuring my editor.

WordPress, CDNs, and the Cloud.

I tried…for about 16 hours to get WordPress, S3, CloudFront, Rackspace Cloud Files, SimpleCDN, and MyCDN to play nicely and serve content from a CDN, it didn’t work, at all. (I tried multiple plugins from multiple vendors and shell scripts, to no avail.)

Queue W3TC upgrade!

WTF? It all works now? Just like that? No fucking way.

So now all of static content for this blog is being served from the cloud…just that easy.

Mashed Potatoes, the right way.

I tweeted on Thanskgiving “If your potatoes need gravy UR DOIN IT WRONG” so I wanted to follow it up with how to DO IT RIGHT.

The recipe, serves about 5 people:

  • 7 – 10 washed potatoes, skin on or peeled
  • 1 saucepan for the cream mix
  • 1 large pot  for boiling the potatoes
  • 1 pint of heavy whipping cream
  • 1 stick of butter (1/4 pound)
  • Salt
  • White Pepper
  • 1 pinch of Nutmeg

Boil the potatoes until a fork can go almost through a potato and come out cleanly (if you cut the potatoes before boiling use the largest piece). Before the potatoes are able to pass the fork test, approximately 5 minutes before they are ready, combine the heavy whipping cream and the cube of butter in the sauce pan. Heat until the butter is melted. Drain the potatoes making sure to get all of the water out.

Begin to mash the potatoes (keep in mind mashing for too long or using an egg beater will break down the starches resulting in runny potatoes), once the potatoes are broken up, most of the potatoes still retain shape, pour about half of the melted butter, cream mixture into the potatoes. Mash until your potatoes reach the desired consistency resist the urge to use anything but a hand masher…in fact, I use a fork to better control the consistency of the mashed potatoes. If all of the mixture is not completely used, add to taste or put it to the side to add before refrigerating leftovers (make sure to mix thoroughly, the cold will make the starches contract absorbing lots of the moisture).

Add about 1 tsp of salt and 1/2 tsp of the white pepper, stir to distribute. Finally add a pinch of nutmeg, stir and serve.

Your potatoes should not need any gravy since you DID IT RIGHT.

Testing WordPress out.

It has been fun testing WordPress out the last few days. I have learned a lot of things about this, fairly minimal CMS. Basically, I learned that not all PHP is the devil (no actual religious connotation, other than the implied meaning; bad or unclean), just most of it. I don’t ever want to touch anything under the hood and luckily I don’t have to since under the hood is so well built.