Thursday, December 30, 2010

2010 in Hindsight - Teaching vs. Doing

This blog entry is an end-of-year postmortem about my web development efforts in 2010. 

My two web site projects from this past year had different learning approaches behind them. “Blender Python Tutorials” was done using a learn-and-then-teach approach. “Uncle Squirrely” was a learn-by-doing project. While neither approach was bad, I got more out of building something than I did by writing “teaching” scripts.

Lessons from Uncle Squirrely
“Uncle Squirrely” was an online video game store. I built it with a mix of Python, PHP, MySQL, CSS, JQuery, and web services. Work involved migrating platforms, copying databases, setting up light boxes, running database update scripts, and setting up streaming video.

I learned a lot and gained experience working on that project. Despite that, it failed. It made no money and got few visitors.

Lessons from Blender Python Tutorials
“Blender Python Tutorials” shares free tutorials for building 3D animation tools. I learned enough to write teachable examples in Python. After that, I wrote drafts and pieced together bits of HTML, code snippets, and images. Then I would publish and I would be off to figuring out stuff for the next tutorial.

Technically, I learned very little. But I did gain an audience. At over a thousand visitors per month, Blender Python Tutorials nearly tripled in visitors compared to last year. As for financial success, it made 23 dollars.

Lesson About Teaching and Success
I've worked under the assumption that I could teach my way into building things and being successful. This is backwards thinking. My Blender work should have focused on building stuff and spending more time building relationships within the Blender community.  I didn't do enough of that. Yes, I used Google Analytics to tune in on user wants and needs.  However, traffic statistics are no substitute to getting out there and connecting with other Blenderheads.

Interestingly enough, I learned this lesson by looking outside the Blender community by considering the examples of Salman Khan and Zed Shaw. As personalities go, they couldn't be more different. However, they both put out free learning materials online. They also both did this AFTER they had established themselves in their respective careers. Khan was already making a good living in the financial sector when he started Khan Academy. Shaw had a reputation as blogger and software developer long before he wrote “Learn Python the Hard Way”. The hard reality of it is that an unknown and unemployed person simply isn't going to have the same impact.

Sharing knowledge generally does not lead to success. However, success can put one in a better position to share knowledge. But in order to have the best shot at success, I need to make something people want.This is my commitment for 2011.

Tuesday, December 21, 2010

Gui Tutorial, Market Analysis, and Experimentation

Okay, here's what's been happening over the past week or so.

Tutorial Updates
The week went well. Blender Python Tutorials got a new tutorial on panels and operators and how they can be used to "destory" a city.  A new property sampler script is complete which means I can start a tutorial on that.  Open GL research has also progresses nicely but, chances are, there won't be any new site material on that this week.

“Blender 2.49 Scripting" arrived in the mail recently.  This book is handy for a couple of reasons.  First, it's Blender 2.49 scripts inspire Blender 2.5 tutorials.  Second, it's a good resource for translating 2.49 scripts to run on 2.5.

Market Analysis
Market research for my work comes down to two resources, Google Analytics and the Blender Artists forums.  Spending time with these helps to know and connect with users.  Knowing user needs helps in serving them.  That's a good thing.  Making money matters too of course.  However, putting profit ahead of user needs is putting the cart before the horse.

Google Analytic bounce rates and search engine statistics show where the site falls short and what kind of tutorials to prioritize.  Right now, the stats say Blender 2.5 tutorials and Open GL need attention.  So that's where the work goes.  Besides that, stats are fun in a weird way.  There's something game-like about watching numbers go up and down as a result of what I do or not do.

Direct community involvement is a big deal and the Blender Artists forum is good for that.  It has a scripting forum containing useful stuff from smart people.  Lurking, asking questions, and answering questions creates value for all parties involved.

Experiment Plans
Content management systems deserves serious consideration.  Experiments with Joomla show great promise.  Joomla comes with tools that make it easier to potentially update and add new tutorials.  Once, the learning curve is climbed, it'll probably make design changes easier too.  That learning curve is the big factor here and climbing it must be balanced with other site priorities.

Uncle Squirrely is now a low priority experimental project due to it's lack of traffic.  This isn't a bad thing since it's still a handy target for technology research.  At the very least, it deserves a better light box.

All in all, it's been a good week and the next coming one should prove just as interesting.

Saturday, December 11, 2010

Deadlines as a Motivator: An Experiment

Sahil Lavingia makes apps for the web and iphone. Adam Savage is a Mythbuster who does a lot of creative projects. What these two men have in common is that they both thrive on deadlines. This is interesting. So, I set prioritized goals with a Saturday deadline and went to town. Here's the results.

The good news is Blender Python Tutorials gained a Blender 2.5 version of the triangle tutorial. The bad news is no Open GL tutorial headway got made and there was insufficient progress on a tutorial on the new panel and operator systems. This is a problem because users come to the site looking for info on Blender 2.5 scripting in general and the site only has two tutorials for that. Furthermore, quite a few users look specifically for Open GL information and find nothing outside of one tutorial for Blender 2.49.

There is a bounce rate problem that's partly the result of bad layout. To deal with that, the site now has a page dedicated to external references for things such as Python libraries. There's also a dedicated books section that offers up relevant books for Blender Python scripting for games and tools development. These improvements should make users happier and give them a little more to explore.

The redesign also had income generation in mind. Hand selected books were removed from the end of the tutorials and replaced with donation buttons. Amazon ads were added to the right side where there once was blank white space. 

There are a couple of advantages to this new setup. First, ads reach more eyeballs compared to where they were before. Secondly, having ads instead of gaping white space balances out the layout and makes the pages more aesthetically pleasing.

So, in conclusion, the experiment was a success. Even though the failures stung a bit, deadlines are a good motivator and I plan on using them during the coming week.

Wednesday, November 24, 2010

Uncle Squirrely, Blender, and Business Strategy

I run two web sites through Google Analytics. One is Uncle Squirrely. The other is Blender Python Tutorials, a site focused on 3D animation scripting. The differences fascinate me. Uncle Squirrely pulls 2 to 5 visitors per day on average. The Blender site pulls between 35 to 55 on any given day.

Here's why this is surprising. First, the Blender site hasn't been maintained in months. The interface is relatively low tech. The target market is very niche. Uncle Squirrely has been under heavy development and has a more modern infrastructure from back end to front end. Also, it caters to gamers.

On the other hand, competition matters. Gamestop, Walmart, and BestBuy have a huge presence in gaming retail both online and off. A Google search on “cheap video games” pulls up a lot of competing game sites many of which are very good. Uncle Squirrely is new and comparatively underdeveloped in comparison. In light of that, not pulling high in search engines isn't unusual.

Blender Python Tutorials doesn't have that problem. Few sites specialize in Python for Blender. Only one recent book dedicated to the topic exists to my knowledge. Consequentially, my tutorial site shows up near the top of Google search results for “blender python” and "blender scripting". Smaller niche means less competition.

As audience reach goes, priority on the Blender site makes sense. However, the business model has to be different. Uncle Squirrely is a game store. Blender Python Tutorials is a resource for writing 3D animation tools. It's not practical to try selling tutorials the way Nintendo sells Wii games.

Even with it's relatively tiny audience, abandoning Uncle Squirrely would be premature. The site's only been up a month and it does get a lot of Amazon clicks if not actual sales. The sensible thing to do is to keep working on it through the Christmas season. Even if it fails, it's still a good tech demo for prospective employers.

That means there are two sites to maintain from now to the end of the year. The Blender site needs new tutorials and a site redesign. Uncle Squirrely also needs maintenance. There's no shortage of things to do.

Monday, November 1, 2010

About Uncle Squirrely

Uncle Squirrely is live now and it's high time for an official explanation for the site.

Uncle Squirrely fills a need I have.  I like my video games cheap.  I also like them to be fairly recent.  I built Uncle Squirrely for that reason.  It makes it easy to find games that have come down in price but are still recent.  In effect, it's a second run movie theater for games.

One of the defining features of the site is what it sells.  The rules for inclusion are simple.  The game has to be under fifty dollars if it's an X Box 360 or Playstation 3 title.  It has to be under forty if it's for the Wii. If it doesn't meet those criteria, you won't find it here.

Simplicity is another key feature.  Things like “Show Latest Price Drops” and “Show Cheapest” order the games exactly as advertised.  Browsing titles is as simple as browsing your local Gamestop.

Another defining feature of Uncle Squirrely is Chaos TV.  This link shows up with every title and pulls and plays a random game video from Youtube.  It might be informative or it might be irrelevant.  Heck, it might even Rick Roll you in some cases.  All in all, Chaos TV adds an element of fun and surprise to the game shopping experience.

But the most important feature is the fact that it really does work.  With the help of this site, I bought Bioshock 2 and Assassin's Creed 2 for just over sixty dollars.  The latter title I got new after finding out the price recently dropped to $29.99.  Even on days I'm not in the market for a new game, Chaos TV is always a fun distraction.

Now that the site is live, the main goal is to maintain it and make it even better.  It might lead to a profitable business or it might just be a showcase to a prospective employer to what I can do.  But, come what may, the journey has been absolutely worth it.

Wednesday, October 13, 2010

When Time Just Doesn't Permit

Let's be real. Committing hundred minute chunks of time to one thing is challenging. Some days, time just doesn't allow it. Other days, it takes a degree of resolve and will power that just isn't there.

It turns out that there is a better-than-nothing solution to deal with this called quarters, halfers, and tricorders.

Suppose there's only an hour to spare. If so, doing a halfer is a 50 minute chunk of time on work instead of 100. When really pinched for time, turn a quarter. Just commit to 25 minutes of work. Another alternative time slot would be a Tricorder. (tri-quarter) In that case, you dedicated 75 minutes to your work.

Regardless of whether you turn a quarter, halfer, tricorder, or the full hundred, be prepared. Write a todo list of things to tackle for that period, make sure to let people know not to interrupt, and setup a kitchen timer. That's pretty much it.

There are some side benefits to this compromise. For one, it opens up room for negotiation with other people in one's life as to how much time you need to yourself to work on something.

Another benefit is it let's you trick yourself. On low willpower days, set up to turn a quarter and plan to quit after. It often works out that during that time you've really gotten into your project and actually want to continue. In such cases, set the timer for another 25, 50, or however many more minutes, and go to town.

After all is said and done, congratulate yourself. Starting is often the hardest part of any project, even if it's something you enjoy.

Friday, September 24, 2010

Major Goals Realized for Game Price Drop

Good news for the Game Price Drop project. All major features have officially been implemented. It has a lot to be smoothed out but, on the whole, that it's gotten this far is a big deal.

First off, the dataset has expanded considerably. The MySQL database now includes Images, link, and release date information. Also migrated in from the web service world is information on Xbox 360 and Wii titles. The Gamepro API served as a resource for review data that also sits in the database. Efforts expanded the Python code base considerably making it ripe for some refactoring.

The application has a working web front end. The server side of it is PHP based with some front end scripting done in JQuery. JQuery is an easy Javascript library to pick up. Going from knowing nothing to having an Ajax front end with image transition effects is a testament to the quality of work the developers put into this library.

The project has seen environment changes too. It was born on Vista with Xampp serving as the Apache server. Everything now sits in Linux and runs on that Apache now. Also added to the development process was version control.  Mercurial brought peace of mind into the project. Using a VCS based on a distributed repository model made sense.  There's nothing to the project that needs the central server that subversion or cvs would require.

Overall, this has evolved into an interesting end-to-end development project. There is plenty of work to do for refining this project. It's difficult to say when or if this will go live on the web. Making it fit for public usage, though, is a worthwhile goal.

Monday, July 26, 2010

Game Data, AWS, and MySQL Challenges

Okay, here is my first report on the results of my hundred minute hack experiment.  The good news is the database has video game data from Amazon and I was able to stuff those results into an Excel file.  Getting data into a web page is next.  The pressure is on to find work in case I can't turn this idea profitable somehow.  There's good news even in that regard since I now have good samples I can use to market with to prospective employers.  Now for the details...

A third of the time spent on this project was getting that first information request to Amazon.  That involved grappling with encryption, url parameter manipulation, unicode issues, and other stuff that Amazon Web Services requires in order for you to get an information request through to them.  Eventually, I shifted strategies and turned to APIs for Amazon and MySQL.  After some gotchas with versions, platforms, dependencies, and so forth, the first request from Amazon to Python to MySQL made it through.

As data was concerned, a "cheap game" was defined as a physical PS3 game costing anywhere between a penny to 49.99.   Getting that data presented difficulties.  Just asking for game data causes Amazon to spit back a whole lot of Playstation console bundles, controllers, and so on along with game titles.

Building a Playstation hardware dataset helped even though it meant two more rounds of web service requests.  One round was needed for the hardware and accessories while a separate one was needed for game controllers.  A MySQL trigger cleared unwanted hardware from the game dataset.  The trigger approach made sense because it removed bad data from the game list once it was discovered rather than burden the system needlessly with subqueries and table joins at every single request.

So there you have it.  Several hundred web service requests done in 3 parts leading up to a collection of cheap games.  All told, that amounted to somewhere between 500 and 750 web service requests which translates to 5000 to 7500 records processed.  All this done to amass a collection of 341 Playstation 3 titles.

I have quite a bit to do on this project and I look forward to seeing where all this leads me.  I'll share as things progress.

Thursday, July 8, 2010

First Steps

When my contract ended recently, I decided to try my hand at self-employment and build something profitable. I don't know what I'm going to build let alone how I'm going to make money on it but I figured “Why not?”

So without a product or a clue how to run a business, I figured I'd start with an interesting idea and a productivity technique to drive me forward.

The interesting idea is a database of Playstation 3 video games that keeps track of prices. The whole idea is that it would a nice list of all titles, prices, and when those prices change. Beyond that, I don't know.

The productivity technique I came up with is called the “Hundred Minute Hack”. The basic idea is I throw together a todo list of four or five things I'd like to do in 100 minutes. Then I set a timer and I go at it and I don't let myself stop for anything short of coffee or a bathroom break.

The four or five related todo items is a pretty nice trick. If I get sick of doing one thing, I can just do something else on the list. It's a handy way to keep myself from being bored, frustrated, or intimidated by the project.

I'm committing to doing these 100 minute runs two to three times a day. Some flexibility is important and sometimes I have to settle for 50 minute runs. But that's what's pretty sweet about the whole system. On a bad day, I still find I've spent over two hours hacking away on my project. On a good day, I get up to five.

The entries that follow this will probably be a mix of progress reports and little tricks I'm picking up along the way. It's hard to say where this experiment will lead. In the best case scenario, I have a profitable business. In the worst case, it'll be a fun topic to bring up during job interviews.