Ain’t Nothing Free About Freelancing

May 24th, 2010

Well it’s a official. I’m no longer an aspiring freelancer, I am now a full fledged freelance web developer. Last Friday I signed my first contract to develop a website as an independent contractor. All in all I’m very excited, in addition to opening the door to a brand new revenue stream (love dat money!) I’m also getting to dive head first into building a custom site using the Drupal CMS. I’m also getting to help some friends out by making them sub contractors on the project and get the pleasure of working with people I trust and admire. I’m sure this is the honeymoon period between the contract getting signed and the first dead lines on deliverables but so far I’m very pleased with how the client communicates and I think we’ll be delivering something which exceeds their expectations.

One Internet Under Web

April 2nd, 2010

I recently chastised my good friend Jen Burkey about using the term “Web 2.0″. I was quickly challenged to a round of blog to blog combat and promptly accepted. I blame our spontaneous self inflicted writing assignment on withdrawal from our alma mater, Trinity University. At the risk of leaving myself eviscerated by the prose of my beautiful opponent, I shall continue.

“Web 2.0″ is an undefined buzz word. That is the beginning and end of my beef with its widespread use. As a software developer, I see the 2.0 as an indication of a new major release. However, last I checked no one came out and sold to the world a brand new internet. We’re still using the Hypertext Transfer Protocol (or has the ever present http:// suddenly disappeared from your address bar?) to send content from server to web client. We’re still resolving domain names to IP addresses using DNS servers. And we’re still communicating primarily through web browsers (Matrix plugins coming soon).

Some claim that Web 2.0 encompasses the new interactive nature of the web. Some point to how blogs allow people to create conversations with the consumers of their content and how social media has opened up the internet to everyone. It has admittedly been a long time since I’ve posted to a message board but those seemed pretty democratic to me. Instant messaging had a bigger impact than Twitter. And email predates websites. I’m not going to say that the Twitter and Blogging paradigms don’t change anything, however they don’t change everything.

There is however a Web 2.0 out there. It’s being created by Google and is presently named SPDY (pronounced SPeeDY). If this protocol takes off it would only be a matter of time before you’ll start using ‘spdy://’ to get to your favorite websites (Twitter and Facebook included). This would be, in my (admittedly unimportant) opinion, something worthy of a 2.0 major release label that encompasses the Web as a whole. After all I think everyone would like their emails, websites, videos, and yes even their tweets and podcasts, to load twice as fast. So let’s stop making things a bigger deal than they are and use meaningful language to describe the state of our industry.

And now for something completely different: The Lovely Jen Burkey

Location Based Smack Down

March 16th, 2010

I’ve been using Foursquare and Gowalla for a while now and for the most part was fairly on the fence as to which of the two services offered greater value and which one was most likely to establish itself as the market leader. A few months ago I would have said that Foursquare’s API would eventually give it greater market share but that Gowalla’s user interface and richer feature set would allow to maintain a loyal following. However, Gowalla recently released it’s own API and both services have pushed out new iPhone applications specifically for SXSW.

Foursquare’s offering included a dramatic overhaul of their iPhone UI which is a very welcome update. Prior to this release Gowalla’s UI always seemed more refined and consistant with their website. Unfortunately for Foursquare, Gowalla also updated their UI. Foursquare has made up significant ground but it seems Gowalla isn’t willing to slow down just because they’re ahead. Obviously UI and design is a fairly subjective criteria but for me I’m going to give Gowalla the win.

However, Foursquare has a definite advantage in the administration of all this user generated content. Foursquare allows all users to flag spots as incorrect, closed, or duplicates and also deputizes some as “Super Users” which allows more people to go around fixing wrong addresses, merging duplicate entries, and verifying the content the end user experience relies on. Gowalla only allows the creator of a spot to edit and fix entries and for the life of me I can’t figure out how to notify them that there are two Flying Saucers, San Antonio in their system. This system also limits the admins to who drops items at a location, preventing other users from fixing the content (there are benevolent trolls out there). For accuracy of listings and website functionality I’m going to give Foursquare the nod.

Another big advantage Foursquare has over Gowalla is their “Mayor” feature. The person who visits a spot most often over the previous 30 days is declared the Mayor of local and Foursquare actively encourages businesses to use this in their marketing by offering Mayor discounts or specials. In general I think Foursquare has embraced the game aspect of these applications more than Gowalla. Gowalla does have an item collection feature but really offers little incentive or context for them, though some SXSW items did seem to indicate that they are moving in that direction. At one Gowalla check in I picked up a wristband which allowed me to use a VIP line at a SXSW party. If Gowalla keeps moving in that direction my opinion here may change. For now, their ability to connect the application to the real world gives Foursquare a 2-1 lead.

SXSW offered a great chance to test the two services head to head. Tons of users, making thousands of check ins, and creating tons of content. Gowalla never seemed to hang for me whereas I got a handful of “Servers Not Responding” errors from Foursquare. Gowalla also seemed to pull data faster and rarely left you waiting for content. At the end of the day features are great, but the overall application has to work. Gowalla ties it up and makes it interesting. Both companies also offered SXSW exclusive features. Foursquare offered new badges to unlock and a mini games testing your ability to goto SXSW’s many events. Gowalla though offered some interesting features which blew me away. They created time sensitive spots for every talk and workshop and ended up being my primary way of knowing what events were ongoing (SXSW’s app was awful). This made the Gowalla app useful in a way neither app had been to this point. If they continue to do this for events they’re going to dominate the market because they’ll be adding tons of users at festivals, conventions, and trade shows around the US. Can’t wait to see if they do this for ACL (or maybe Summerfest?). Gowalla takes back the lead and seals the narrow victory 3-2.

I’m still continuing to use both applications partially due to having friends on both. However since this weekend I’ve been leaning closer to dropping Foursquare at some point in the future. The major novelty I enjoy with Foursquare is their analytic reports which break down your nights out into graphs and pie charts which I mentioned in a post in my personal blog. However, if Gowalla were to include some graphic representation of check in history and allow users to help them maintain their content base it may speed up my decision to use them exclusively.

Buzz Worthy?

February 11th, 2010

No, this is not another review of Google’s new Buzz offering. It’s still a little premature to comment on it though I have begun to formulate my opinion on the product. In this post I’m going to talk about technology Buzz Words and why you should listen to Public Enemy’s advise, “Don’t Believe The Hype”.

Let’s start with “Augmented Reality”. If you were to glance at the blogosphere (a buzz word if there ever was one) you’d think that Augmented Reality was the second coming of Twitter and that nothing like it had ever been done before. Spin up any jet fighter game and you’ll quickly realize that Augmented Reality is simply a glorified Heads Up Display. I’m not saying that people aren’t doing impressive things with it, nor am I saying that it can’t be used to create exciting applications for the masses. What I am saying is that people need to stop jumping on the new technology advocacy bandwagon. If you think your application needs Augmented Reality, but can’t articulate why, you need to reevaluate your product’s purpose. Augmented Reality can be a nice way to added something to your application (especially when coupled with good content) however it’s being treated like it’s the Astrodome when in reality it’s a construction crane or maybe wet drying concrete (remarkable achievements in their own right).

Before using technology buzz words in a sales pitch you should understand, in detail, what the technology does and does not do. You should also be able to describe what the technology builds upon. My favorite example to hate on is “Web 2.0″. I can’t tell you how many people use this term with me but can’t explain to me the difference between Web 2.0 and the seemingly non-existent Web 1.0. These buzz words for technology concepts sound great and can get the potential client to sign the dotted line but unless you manage expectations and educate the population on what exactly these technological advances are they’re going to be disappointed with their final product or worse they’ll continue to promote an irresponsible use of a buzz word.

Facebook and Twitter both fall under the “Social Media” buzz word but are very different. Telling everyone that they need a social media outlet but not explaining the pros, cons and differences between a public directory and a status messaging service isn’t wise. You also shouldn’t be able to get away with saying you use Social Media when all you’ve done is create a basic Fan Page and a barely used Twitter account. Trust me there are plenty of business owners who are very proud of themselves for having a Twitter account but sadly aren’t properly leveraging it to drive sales. I doubt the builders of the Empire State Building would have been as proud of their construction techniques if they hadn’t built anything with them. Final summation, don’t treat the tools of your trade like they are the final product.

Dynamic SQL Querys in PHP

January 16th, 2010

I recently was working on a project that required a variable amount of SQL queries to be performed on a variable table for variable fields. Didn’t seem like a hard concept at first. I constructed the queries with PHP variables and presto I had everything I needed. The only problem came when I actually wanted to work with the data I had cleverly extracted.

Since the field name could have been anything I didn’t know how to access the data from within the mysqli row object. I knew that the table name was stored in another mysqli object because I had used it to create the query in the first place. In the name of self deprecation, here was my initial “God let it be this easy” attempt.

$tableQuery = "SELECT table_name, field_name FROM TABLES  WHERE id = ".$tid;
$tableResult = $con->query($tableQuery);
while($tables = $tableResult->fetch_object()){
     //The Wrong Way
     $dataQuery = "SELECT ".$tables->field_name." FROM ".$tables->table_name." WHERE id=".$did;
     $dataResult = $con->query($dataQuery);
     while($data = $dataResult->fetch_object()){
          echo $data->$tables->field_name; //Worth a shot right? Nice try, but no.
     }
}

Yeah, I thought I was pretty clever too. Not to worry though. If you run into this situation remember that MySQL allows you to define a field name via the AS keyword. This way no matter what fields you’re searching for they will always be saved under the same name in the mysqli object. Below is the corrected code. Instead of copying the whole thing I just provided the code inside the while loop.

//The Right Way
$dataQuery = "SELECT ".$tables->field_name." AS constant_field_name FROM ".$tables->table_name." WHERE id=".$did; //Note the AS
$dataResult = $con->query($dataQuery);
while($data = $dataResult->fetch_object()){
     echo $data->constant_field_name; //Much better
}