New Django/Python deployment stack: Django, Cherokee, and uWSGI.

What I had:

In the past couple of months I have been looking for alternatives to my current web stack. My current web stack is:

  • Django (my favorite web framework),
  • nginx (frontend web server),
  • apache + mod_wsgi (to serve the Django application), and
  • PostgreSQL the database, obviously.

Django isn’t getting replaced because I like it and I can’t get my coding partner to switch to anything else no matter how magical or revolutionary.

I fucking hate nginx configuration files so that was going out the window as soon as I could find a suitable replacement. Apache + mod_wsgi I’m not entirely unhappy with but the extra memory usage from Apache bloatware and, again, the ugly configuration files are annoying, especially, with non-standard PYTHONPATHs. Yes, I know I can do sys.path magic to work around it but I shouldn’t have to, this is 2010 not 1990, fuck that.

PostgreSQL is a great database server and I’m happy that the Django ORM just works with it so I don’t have to build my own ORM, big plus. I would love to give CouchDB a chance but I don’t have the time to rewrite _everything_ to work with it, I’ll use it with something else.

What I Found:

Looking for other web servers I came across Cherokee (http://www.cherokee-project.com/). The documentation on the Cherokee site is phenomenal, when have you EVER seen screen casts for how to configure your web server? Oh, and what is that? A screencast about deploying Django using uWSGI or Flup? Why, yes, that what you are seeing, isn’t that great? That isn’t the only good thing, Cherokee stacks up, speed wise, with nginx, has plenty of configuration “wizards”, and has a web front end for configuring the web server. I was mostly sold just from the documentation, compare this with this. The Apache docs may be informational but they are completely worthless if I want to get something done, today.

Configuring Cherokee is like using the WebFaction hosting interface, easy to use and as powerful as you want it to be. In fact, in the next blog post about how to set everything up you can see the similarities. (Disclaimer: I work for WebFaction so I am a little biased, however, in the 10 years that I have been dealing with web hosts I have never seen another hosting company build something so great at what it does: allow you to do as much or as little as you need, to get things done.)

After hours of looking through the different ways to serve WSGI applications I finally settled on uWSGI, mostly because it is written completely in C and has a really easy install process (read: one command, make). uWSGI is also able to used with Cherokee and Django really easily, see the screencast here: http://www.cherokee-project.com/screencasts.html#django_uwsgi. Now that is what I was looking for, easy to configure, easy to use, powerful, and fast. Also, setting the PYTHONPATH is as simple as 1 or more XML tags, like so:

<pythonpath>/path/you/are/adding/</pythonpath>

Fantastic! Have another path you want used? Add another line, that’s it.

Processes are automatically managed and restarted when they are killed. uWSGI has amusing errors, such as:

  • …brutally killing workers…
  • DAMN ! process 14955 died 🙁 trying respawn …

Log files are much more fun to read when they include some humor even if shit is wildly broken.

Next post will be about how to set all of this up, from nothing to a working deployment of a working Django app using Cherokee and uWSGI.

 

A new iPhone launches without me.

When it comes to iPhone launches I have seen them from multiple sides, consumer, employee, and, this year, developer. There are a lot of negative comments about Apple and at&t that fly around during the an iPhone launch from people who don’t know much about the process of launching a product, having been on all sides of an iPhone launch I’m uniquely qualified to paint the whole picture, for people who haven’t been there. Here it is:

My previous job was as a Customer Care Trainer for Convergys Corporation. (I’m currently a Support Engineer for WebFaction and a developer of Mac and iOS applications, among other things.) Here is a bit of background about Convergys (you are welcome to look them up on Google, their site convergys.com, and Wikipedia), Convergys is an outsourcing company for different things Human Resources Management, customer care, customer service, payroll, and just about anything else you can think of outsourcing (provided you have enough money). There are quite a few different departments that have different functions, even though my NDA is up I’m still not going to go into that, it’s bad form.

The part of the company I worked for was in charge of Customer Care, meaning call centers. In the call center I worked in, our project was the at&t wireless division for postpaid customers. That is anyone who has a postpaid account but doesn’t have a company status or doesn’t get a discount on their service for working for a company.

For the 3 years that I worked as a trainer an iPhone was launched each year. Many people have had to deal with at&t customer care for those 3 iPhone launches and hated every minute of it because they thought agents were incompetent and/or stupid. I’m going to discuss how an iPhone launch looks from the inside of a call center.

Here are the different phases:

1. The Apple announcement
2. The Unknowns
3. The Complaints
4. Launch Day

1. The Apple announcement

Apple announces their wonderful, magical, revolutionary product.

We all watch in wonder as Apple reveals the greatest product we have ever seen and that it is going to be available only on at&t’s network. Great, wow! That will be fantastic for business, those of us who had at&t already were incredibly happy: we could get one at a discount like with every other device, right? No one we talk to has any information about the product or knows anything other than what was in the Apple announcement.

2. The Unknowns

We start getting calls for the (new) iPhone immediately, but, we don’t know anything about it. Thousands of these calls ended up with irate customers because we were “stupid” and/or “incompetent”.

Here’s a quick overview of of at&t’s training process:

First, at&t has to get the information from Apple, this takes time. I’m not quite certain on the amount of time because I didn’t work for at&t directly. Once at&t gets the information it goes to the curriculum designers who then turn it into a training course depending on the amount of material and the suggested delivery method it may end up in a couple of different forms: Self based, Instructor led, or a combination of both. Once the course design is complete an Instructor Guide and Participant Guide are created, the material is then sent to the Training Council. The Training Council is made up of incredibly smart people, lawyers, and pedagogy experts who then review all of the material in the course and guides.

The Training Councils’ feedback is incorporated into the course and guides and sent for review again. (Apple and at&t are very similar, right?) Once the course is approved it is scheduled for Master-trainer training. The Master trainers then deliver the training to the trainers in their various call centers via speakerphone and screen sharing.

Trainers, then, after being certified can deliver the training to the rest of the call center. The logistics for training an entire call center of 300+ people for a training, no matter the length, is frightening. Call centers are a Statistician’s wet dream, there are metrics for EVERYTHING and they all impact each other in some way (the metrics not the Statisticians). Depending on the client, not meeting certain metrics is monetarily punishable. The biggest metric with most clients is SLA, Service Level Agreements, which say “your center will be filled with X number of agents, X number of hours, with less than X% variance”, training time comes out of that SLA. Clients are reasonable and allow for a certain number of training hours per month that are used up with “other” training that has already happened, additional training always come out of the SLA.

To add to the problem of lost revenue and not meeting financials, is scheduling. Call centers are composed of, mostly, 2 types of people: lower-class middle aged people and uneducated young people (possibly students). This means that they all have their specific schedules that can’t bend for anything. Even though all agents want to get off the phone for training as much as possible, scheduling them for it is nigh impossible.

Did I mention that there are normally 3 – 5 trainings and they all have to be completed in a very short timeframe, less than a week in some cases? The activation training, for the first iPhone, didn’t come until the day before. We had no idea how the activation was going to work until the day before the first iPhone launched. Training 10,000 people across the country through multiple outsourcing partners is an incredibly daunting task. If you don’t believe me, try it.

3. The Complaints

As soon as people get off the phone with at&t for the first time or visit the Web site and get nothing the Complaints phase starts. People start bitching and whining about everything, their incompetent wireless carrier with the retarded agents they have to deal with. I’m not going to cover for all of the agents that work for at&t because there are those “retards” who either don’t care or just suck at their job.

Next complaint is almost always the price or the required data plan, the lack of “updated features” or .

I’ll let you in on a little secret about phone reception issues: THEY ALL FUCKING HAVE THEM. Almost every phone there is, if you hold it incorrectly, will lose reception, sometimes completely. The Samsung Sync one of the best sellers for at&t in 2007 had the antennae at the bottom of the device which is right where people hold flip phones, guess what? If you put your hand over or on the bottom of the device you will lose service.

Some of the training I did was device specific, the Samsung BlackJack, Sync, BlackBerry Pearl, AT&T 8525, Palm Treo 680 and 750, and a couple others, they all had the same problem to some degree. Cedar City does not have the best coverage area with at&t so training on the phones was difficult. One of the trick I learned, that seems to work on all devices is to hold the phone with 2 fingers, in the air, sideways. In most cases the “bars” will increase by 2, if you are in a low coverage area. Try it, it works.

4. Launch Day

An iPhone launch, in the service industry, is about the closest you can come to hell. The first iPhone launch was especially bad. All of the unknowns combined with a device manufacturer that had some control in the way the device was launched made it a very trying experience. Being a Trainer I was only required to take production phone calls for 4 hours a month to stay fresh, I usually did 5 – 7 hours depending on my class and administrative load.

Being the good Trainer, I volunteered to take phone calls for 6 hours on Launch Day; it was hell. Since the activation process was something magical happening in Cupertino there was basically nothing we could do. Being able to do nothing is extremely frustrating; it is doubly frustrating for customers who just spent ~$700 on a device that had never existed and the wanted to use. Spending 20 minute making sure there is nothing I can do from my end then sending them to apple to wait on hold for another hour or 2 before getting to someone who could help hurts for a control freak like me.

iPhone 3G was a much better launch, things didn’t blow up as much. The training was a little easier since it was mostly just feature education and updated specs. iPhone 3GS was even easier, the complaints that got worse were the ones about customers not being eligible for upgrades. The upgrade eligibly thing is a hard thing to understand because of all of the metrics that went into it. My thoughts are that upgrading to a new iPhone from an iPhone should be allowed at the normal 2 year contract pricing, sadly my pay grade didn’t get to make decisions.

The launch of the iPhone 4 was much different, I watched from a developer perspective. Instead of the dread at another WWDC where a new iPhone would be launched, I was excited to see what new magic would come from the conference, instead of new price plans to learn there were new APIs. It was a very different feeling to sit back in my chair and watch (on Twitter) the launch of the newest iPhone without me having to do anything.

There is a tremendous amount of work that goes into launch any product, ask any developer. Launching a product that spans multiple companies that have never worked together is an insane amount of work. I’m thankful for all of the work everyone has done to get things launched as well as they were, with the amount of work I put in thinking about everyone else is incredible. There could have been improvements to the process but that can be said for anything.

Fantastic article.

“Destroying the Earth is harder than you may have been led to believe.”

http://qntm.org/destroy

Fantastic (long) piece about the different ways to destroy the world.

Gizmodo Denied Press Passes for WWDC Keynote

This is so, so enjoyable. I can’t believe they were stupid enough to wait for a press pass.

Gizmodo Denied Press Passes for WWDC Keynote: “

Brian Lam:

It’s no surprise: Apple has not responded to our requests to attend the WWDC keynote on Monday at 10am PST. But we’ll still cover the news. Want to help?

WWDC attendees, be warned: guard your conference badges Sunday night if you’re at a bar.

(If Gizmodo’s editors were smart, they’d have purchased WWDC conference badges if they wanted to attend the keynote. But of course, that’s a big ‘if’.)

(Via Daring Fireball.)

Business is Hard Part II

People are not always who you expect them to be.

I behave mostly the same whether I am at work (IRC), in person, or in IM/regular chat I try to behave the same way in business dealings. I am not going to intentionally fuck someone over for me to make an extra couple dollars. I also will not intentionally leave a project that we have a contract for unfinished. I will work to deliver everything that I agreed to deliver and if I cannot I will refund accordingly.

I have found out, over the last week, that not everyone is like that. I recently had the misfortune of renting from a person I had known for about 10 years. I knew he was a smart business man otherwise he would not have made the 100s of millions of dollars he has in the bank or the summer homes in New Zealand but I never thought he would fuck me over.

In renting from him I chose the best possible location then went through the list of available buildings his being the only one in my price range in roughly the right vicinity so I took it. It was old and cold. The floor was an awful ugly brown, there was a huge back room with cracks in the doors and windows that air would directly blow through.

When I first moved into the building there was talk of the ceiling leaking and that it would be fixed by the first weekend I was there. The work crew came out and “fixed” the roof and I thought everything was cool. Two weeks later it rained and the ceiling was leaking again, turns out, the work crew didn’t actually repair the leak they only replaced the ceiling tiles to make it look like they had done the work. We immediately called the landlord who came down and looked around. We told him about the numerous violations for electricity and wiring in the building and he said, “You make better detectives than tenants” and then he told us “If you don’t like it, get the hell out.”

Get the hell out.

I had not anticipated that as a response I would get, knowing this guy for the last 10 years I would have thought it would be something like “We’ll fix it, give us a couple days” or even “It’s going to take a week to get it fixed” but never “Get the hell out”. So now I am left scrambling. I have about 20 computers in a building with monitors and all sorts of electrical equipment with a ceiling that is raining. I have clients who have been to the building that know that is where we are located.

I make arrangements for the computers to be stored out of the weather. Now what? Broken and beaten we begin to look for another storefront, some guy offered to let us use part of his building. Do I want to be bounded by his hours? No. Do I want to be stuck in some shitty corner of town? No. Do I want to have my business directly affected by another person? Not only no, but hell no. I have too much experience with business to know that this is a bad idea.

Now I go looking through every other building in town. I found one! The perfect fucking building, downtown, right in the main traffic area, big enough to hold all of the equipment and still have space leftover, but not big enough to kill me with the heating bill. (The old place cost $175 for power for one month.) The only problem was the landlord. He had, to that point turned down 7 potential renters. There was an arcade, a lawyer, and a few other tenants that definitely made more money than we did and had bigger community ties than we did.

Some people really are good people.

I called and talked to the new landlord expecting that we would get rejected out right without even being looked at completely. The landlord told me to write up the information he would need to make a decision and process our application. Since I figured we had no chance at getting the place I was brutally honest about us and our financial situation, as well as, 2/3 of us having extremely bad credit. I was also extremely forthright about our services and lack of ability to get into the building for another month because of the financial situation caused by the first rental.

Over the next couple of phone calls with a good word put in by our prospective neighbors (whom we all knew and liked) it was settled that we had the place the very next day. I called the landlord back to let him know we couldn’t accept because of the financial situation. The landlord agreed to drop the rent with security deposit from $1200 to just the $700 for rent. After pouring through my finances it wasn’t possible for me to pay that much after all of the damages done from the first place.

On the call following this the landlord

insisted that the first payment be $500 rather than the $700 and that we have 17 days of free rent

. Yes, you read that right, he insisted that we have 17 days of free rent and that we only pay the security deposit. In which world does this happen? Until now I had no idea that there were people that were this “good”. Of course, we accepted and signed the lease as soon as his wife could get there to give us the papers.

If you try, sometimes things will work out.

Three days before this we were broken and bruised not knowing if we could succeed without a building. Now we were set up with a better location in a better building with less wasted space.

Lesson learned here:

Be the Juggernaut; break through every fucking wall anyone can throw at you.

Switching up my life and educational goals.

The back story:

When I first started University (Fall 2006) I had declared Business Management as the thing I wanted to spend my life doing. Business people made lots of money, business people drank expensive liquor, and drove nice cars what teenager (I was 18) doesn’t want that? Before I actually started school I had gotten a job at a call center (Convergys Corporation) and was working at, for Southern Utah, a good wage $8.50/hr that had awesome benefits like tuition reimbursement. After about 2 months I got promoted to a Training position where, since I was staff, I was only able to get reimbursement if I was “majoring” in a business field. I quickly saw, after being a middle manager, that business management was something I completely did not want to do.

At that point I changed my “major” to Economics because it was interesting, it was a business class so I could still get my tuition reimbursement, and people with BS or BA in Econ get into Graduate/Law schools really easily. Economics was fun and I would still like to get a Graduate degree in Economics but at this point in my school career it is completely pointless to stick with it as a major. I started University wanting to learn stuff with a degree as a “happy accident” so I didn’t immediately start taking the Math classes that I would need for graduating to make room for classes I wanted to take. This and the 2 semesters I took off for work at Convergys have come back to haunt me. Instead of graduating at the end of April I am a Junior with at least 3 more semesters to go with the number of math classes needed for a degree in Economics I would end up being at University for 3 more years just finishing the math classes because they have to be taken in order.

The now:

That has led me to this latest change: I am changing my “major” to German and keeping the “minor” in Philosophy. I will get done 1.5 years sooner than I normally would and that should be enough liberal art education to get into Grad school for almost anything. The department I am going to is made up of the language teachers and the Philosophy professor. Since I have worked very closely with the German professor before this is like going back to an old friend’s house after a long, awful trip. My excitement for school has been replenished and I am feeling up to a full work load for the Fall semester. Knowing there is an end and liking the way the end looks is a very comforting thing.

Cheers!

Apple, open-ness, and Section 3.3.1 an objective view.

The Apple update to the iP(ad|hone|od) developer agreement 3.3.1 has caused quite a stir in developement communities all over.  The change is summarized quite adequately here: http://daringfireball.net/2010/04/iphone_agreement_bans_flash_compiler. Queue the posturing and legal bullshit from all sorts of people and companies. Rather than posting comments to all of the different articles I am just going to writhe my thoughts on each here. I am not hiding my opinions on my blog that very few people read I have responded to the tweets via Twitter linking back here were appropriate.

Starting with: http://blog.joa-ebert.com/2010/04/09/what-apple-just-did/ and http://twitter.com/joa/status/11845234511

This is completely not the same thing as the change made to the developer agreement. In the case illustrated by the author the app creators are the musician and Apple is, of course, Apple, however, this situation isn’t the same because Apple *wants* all styles and sorts of music because music doesn’t carry viruses or other problems for their mobile platform. If the situation were corrected to be like the change to the developer agreement the musician would be trying to submit his/her song as an MP3 ripped from a .WMA file which means that the quality is far inferior from a non-converted MP3. Who’s going to catch the blame for the music quality being terrible? Apple, that’s who. Customer’s are not going to blame the musician for the sound quality (viruses, crashes, and other shit) they are going to blame Apple.

This author doesn’t seem to be able to make logical connections between things without obvious fallacies of composition. Correcting his second example: “apple forcing people to develop in obj-c is as if microsoft would tell you to use mspaint for your design work if you want Microsoft to sell it for their Windows Mobile applications.”

Second: http://www.bloomberg.com/apps/news?pid=20601204&sid=aiTiUZWa.uGw (brief aside, Bloomberg’s Web site is fucking horrible)

Just this line: “In a filing with the SEC in January, Adobe said that it wanted to work with Apple on the iPhone, though it needed Apple’s cooperation to do so.” Adobe, Apple doesn’t want you on its mobile plat form, get over it.

Third: http://www.mobileorchard.com/goodbye/

Wow, quitting one’s entire life and job because of 3 lines added to the contract? It doesn’t even seem that the addition would have affected the author at all. I completely support his decision because, its his; he can make whatever fucking choice he wants…just like Apple did. I do wish him the best of luck.

Fourth: http://twitter.com/Hvilela/status/11891058025 & http://twitter.com/Hvilela/status/11900260520

The Market (Apple) just did. “Us” being Flash developers, no they don’t care about you…isn’t that quite obvious?

Fifth: http://www.wolfcat.com.au/randomrants/2010/04/postid-1023/

This author seems to have the players switched (Apple being beta and Adobe VHS) when it should be Apple is VHS and Adobe is beta. Apple is not the one about to have its flagship product replaced by HTML5, CSS3, and a little Javascript, that’s Adobe. Apple will be around long after Flash has been replaced with something else.

Sixth: http://whydoeseverythingsuck.com/2010/04/jobs-bans-non-c-libraries-insane.html

This author fails for not being able to read the WikiPedia page that he links to. The contract is between the developer and Apple not Apple and anyone who wants to user their products to make money. It will be a sad day when companies who produce products for other companies’ products have a say how the product can be created. This is something similar to what would happen to all of the iPhone twitter applications if Twitter released their own application for iPhone or drastically changed their policies about client applications. (this was written before the announcement here: http://blog.twitter.com/2010/04/twitter-for-iphone.html with Twitter doing exactly that, releasing their own application)

Seventh: http://twitter.com/sirobertson/status/11897793015

Uh…sorry you were dumb and didn’t see this or something like this coming?

Eighth: http://twitter.com/troygilbert/status/11874702606

Dangerous indeed…at least to security and stability of applications not to Apple’s platform.

Ninth: http://twitter.com/skiller/status/11874379899

If you threaten to go to Windows that should be your punishment; going to Windows.

Tenth: http://twitter.com/markive/status/11880506004

Looks like your team isn’t made of the right people then. Small development teams such as Massively Overrated have been kicking ass in releasing applications that not only work, fast they are beautiful as well.

Eleventh: http://twitter.com/uliwitness/status/11869629162 & http://twitter.com/uliwitness/status/11870024049

What? & It is *clearly* not a bug, I hardly think the Apple legal team let bugs through.

Twelfth: http://twitter.com/pauliusuza/status/11890230741

Can they tell you to use a different platform that won’t tell you that then?

Thirteenth: http://twitter.com/aral/status/11881304099

It seems to me that this is ALL about the UX and making it consistent.

Fourteenth: http://theflashblog.com/?p=1888

This is perhaps the most frustrating as the guy is an evangelist for Adobe who can’t seem to see that Adobe does the exact same stuff to a worse degree in some cases. Starting with his 3rd paragraph I will answer each of his points.

“What they are saying is that they won’t allow applications onto their marketplace solely because of what language was originally used to create them. This is a frightening move that has no rational defense other than wanting tyrannical control over developers and more importantly, wanting to use developers as pawns in their crusade against Adobe.”

Can I write Flash applications is Python? What about Ruby? Java? Can I use some other program or IDE to build Flash applications? No, wait isn’t this the exact same thing? Adobe actually added a an export for iPhone feature to their newest product CS5 just trying to invite themselves to a party they weren’t invited to. “Tyrannical control over developers” has this guy seen the price of Adobe CS4? http://www.adobe.com/products/creativesuite/design/?promoid=DTEMS $1800 fucking dollars, that is 18 years of the iPhone Developer Program…at least Apple is classy enough to provide the entire development suite and tutorials for the price of $99 (1 year of the the iPhone Developer program).

“I am positive that there are a large number of Apple employees that strongly disagree with this latest move. Any real developer would not in good conscience be able to support this. The trouble is that we will never hear their discontent because Apple employees are forbidden from blogging, posting to social networks, or other things that we at companies with an open culture take for granted.”

As opposed to the jackassery you have here? Apple has those rules so that exactly what you have done here doesn’t happen to them.

“Adobe and Apple has had a long relationship and each has helped the other get where they are today. The fact that Apple would make such a hostile and despicable move like this clearly shows the difference between our two companies. All we want is to provide creative professionals an avenue to deploy their work to as many devices as possible. We are not looking to kill anything or anyone. This would be like us putting something in our SDK to make it impossible for 3rd-party editors like FDT to work with our platform. I can tell you that we wouldn’t even think or consider something like that.”

Adobe has helped Apple get where? You wouldn’t consider anything like that because you NEED to be on every platform to make money. Apple doesn’t NEED you, in fact, it has been made pretty clear Apple doesn’t want you…on their mobile platform at least.

“Many of Adobe’s supporters have mentioned that we should discontinue the Creative Suite products on OS X as a form of retaliation. Again, this is something that Adobe would never consider in a million years. We are not looking to abuse our loyal users and make them pawns for the sake of trying to hurt another company. What is clear is that Apple most definitely would do that sort of thing as is evidenced by their recent behavior.”

Once again you wouldn’t consider this because you need to sell those CS4 units at $1800 a pop to everyone who will buy it otherwise you are not going to make money. You don’t make changes, not because you wouldn’t hurt another company but because you NEED Apple and other computer manufacturers or you don’t have a business. What Apple has shown by their behavior is that they want absolute quality with no exceptions for their platform. I believe this tweet sums it up: http://twitter.com/nikf/status/11881871981 I won’t use TweetDeck because of Air.

“Personally I will not be giving Apple another cent of my money until there is a leadership change over there. I’ve already moved most of my book, music, and video purchases to Amazon and I will continue to look elsewhere. Now, I want to be clear that I am not suggesting you do the same and I’m also not trying to organize some kind of boycott. Me deciding not to give money to Apple is not going to do anything to their bottom line. But this is equivalent to me walking into Macy’s to buy a new wallet and the salesperson spits in my face. Chances are I won’t be buying my wallets at Macy’s anymore, no matter how much I like them.”

Back to another fallacy here, this one is a false analogy. Apple didn’t spit in your face, Apple changed their policy…as is their right to do, and you disagree with their change because you don’t want to learn how to do development their way. This would be more like your job telling you if you don’t have skill x you will be fired and instead of learning skill x you learn how to get around learning skill x, don’t be surprised when you get fired. People have obviously seen this coming: http://iphonedevelopment.blogspot.com/2009/10/sue-me-i-think-developers-should-care.html and Adobe announcing that they are going to circumvent Apples wishes is like being spat on.

This pretty much sums up the entire Adobe complaint: http://twitpic.com/1ecnga

There are some people who are incredibly happy about this because it takes a while to develop games in Objective-C rather than drag-n-drop Flash applications that can just be converted or compiled into binaries it is easy to understand their happiness: http://twitter.com/fishermen21/status/11888110483.

This is ultimately going to make the entire CocoaTouch platform better because of the larger number of developers using and creative native tools instead of the crap they are using now.

Taxes, business, and FreeAgent.

I, finally, made my yearly pilgrimage to the accountant to have my taxes done. The previous 3 years taxes were *extremely* easy to do since I only worked one 1 job and had 1 W2 form that needed to be done.  This year was much different, I owned a business, worked for a company based in a foreign country, and spent 8 months working for a company that issued a W2. After  2 hours of sweating the inevitable words “You owe” I came out with a $1500 refund instead. (Thanks to Obama and my $7,000 worth of school expenses).

During the 2 hours I spent in the accountants office when she was asking me for reciepts for expenses I knew I had but  didn’t have the receipt for, things that could have helped out more with the refund. My accountant noticed my level of disorganization as well, she ended up getting an accounting ledger that she had in her own supplies and giving it to me so that next year when tax time comes things will be easier on her. I’m not a ledger kind of person so I began looking for some online accounting app that would take the actual work out of it.

I looked at the normal suspects LessAccounting, FreshBooks, and Mint. They all have similar features but one thing I absolutely hate is their tiered pricing, I am limited to the number of feature x as long as I am on plan x. I don’t want to be limited to x because I don’t want to spend $300 a month to buy plan y. I want all the features available or I don’t want the service. As Matt Gemmell said here: “If you’re an employed adult who objects to paying $10 for a piece of software, you should be utterly ashamed of yourself.” I agree. I don’t mind paying for software, however, I won’t pay $300 a month for my business doing well, that doesn’t fucking compute. So I finally on Twitter found FreeAgent. FreeAgent is a set $20 per month, no worries about the number of invoices I was able to send, no worries about the better I do the more I pay.

FreeAgent is really great accounting software, I have taken college level managerial accounting classes with Quickbooks and this is much nicer. Quickbooks is slow even on a fairly high end machine it is extremely slow…and UGLY. The UI seems to have been done not by UI designers but by accountants who want as many buttons on the screen as possible. FreeAgent is not like that, it is very cleanly designed. As for speed FreeAgent is very fast, provided you have SSL caching turned on in your browser. My only complaint with the speed of FreeAgent is Chrome doesn’t support (as far as I can tell) caching for SSL pages. Switching to FireFox where I already have that turned on made things as fast as they should be.

Using FreeAgent is as easy as can be. I imported my bank account transactions and within an hour I had gone from a handful of receipts for who-knows-what sitting in random piles on my desk and through my files to a full balance sheet and profit and loss statement for Quarter 1. It is indeed worth $20 per month and with their awesome discount scheme http://www.freeagentcentral.com/support/kb/misc/the-freeagent-referral-scheme it can be cheaper, if you have enough friends they’ll even pay you to use it. If you need to keep track of your finances and don’t want to be punished when business picks up, I definitely recommend using FreeAgent!