Monday, October 3, 2011

When It Feels Like a Video Game

Wow!  This was a wild week.  Someone in the Blender project gave me commit rights to one of their repositories.  Huge honor!  On top of that, the Mohegan Sun Casino hired me as a Java programmer.  Big relief!  Despite all the excitement, a lot still happened with Blender Addons. 

Here's what's happening there.

1.  Step Pyramid appears to going into the next official Blender release.
2.  Particle Tracer is in consideration for a later release.
3.  "Particle Man", "Orphan Slayer", and "Mangler Suite" are addons in development for October.
4.  Disappointing September traffic lead to new site design tweaks for Blender Addons.

Lean startup principles helped me get all this in motion.  Time with users and studying the results of my past work helped inform my next move.  Even the failures, unpleasant as they were, gave me a sweet data set to work off of. 

Of course, the most fascinating thing about this whole learn-and-build process is it feels like a video game.  There's something about it that reminds me of the hours of Civilization and Caesar that I used to put in.  I can't put it into words why that is but I'm sure not complaining.  It's intense but it's also a heck of a lot of fun.

Sunday, September 25, 2011

Old Tutorials and New Utilities


My first week using of using a lean startup style to Blender Addons has been interesting. The lean approach is already turning out to be an excellent learning tool. Here are the results so far on what I've learned and done.

Khan Academy and 3D Math
Khan Academy does a good job at teaching the basics of linear algebra. The topic of matrices is very well done. Manipulating these structures is key to understanding how moving, rotating, and scaling 3D scene objects work.

For math specific to curves, trigonometry and quaternions look like concepts worth looking into. Trig math shows up all over the place with curves.  Quaternions seem to appear in a lot of round shapes. This should open up some interesting possibilities.

PHP Reduction
Blender Addons could get by fine with less PHP. Templates can probably be done with JQuery. Code coloring can be done with a JQuery plugin. Dialing back PHP will open up more web hosting options. Hopefully, those options will include one with Django support.

Retirement of the 2.49 Tutorials
The Blender 2.49 tutorials become less relevant as time goes on. This justified a new “retired” section for those tutorials. It makes more sense to deprecate them rather than remove them outright. They still serves a purpose for people who want to port over scripts to the new API or for people who haven't moved to 2.5 for whatever reason.

New Utility Script for Developers
Every decent developer will find themselves, at one time or another, making tools to automate certain tasks. My own collection of tools were added to the site today. They include module searching lambdas along with functions for handling materials and deleting data. They've been very handy for me and, hopefully, will be likewise for other coders.

Conclusions
So that's all there is for now. It's back to work now to see what can be made of this coming week. Cheers.

Sunday, September 18, 2011

Lean Startup Ideas For Blender Addons


Blender Addons has been a fun hobby and a great excuse to play with technology. With some guidance from “The Lean Startup” by Eric Ries, it could become a profitable business too. Here are some ideas that might help towards that goal.

Build, Measure, Learn
My most successful add-ons are related to curves. I learned this by messing with the layout, making predictions, and scrutinizing the following week's traffic data. Experiments like this help clue me in on what kind of script to do next.

Waste Elimination
The Game PD project saved me money on games and helped sharpen my tech skills. Alas, by lean startup principles, it is technically waste work. It doesn't serve my users and it adds zero value to the business. This isn't to say learning tech skills on a just-for-fun project is a bad thing. What it means is that work that directly serves the user deserves higher priority.

User Community
It pays to spend time getting to know users better. In the case of Blender Addons, forum participation is one good way to get to know the kinds of things they think about. For example, linear algebra is one thing that matters a lot to my fellow developers. From that, I was able to make Khan Academy time on the topic a priority for the coming week.

Weekly Batch
Releasing project features in small batches may have some advantages. It's likely more satisfying to release a few things at once rather than put out each thing as it's finished. Furthermore, batches released at the start of the week make it easy to measure traffic for that week.

Growth and Pivots
Site traffic has been flat for the past 3 weeks because it's been that long since the last update. This is bad. To remedy this, I set a specific web traffic goal and deadline to shoot for. I also established projects and strategies for getting my numbers up. If it fails, the data I collect should help me decide my next move. This direction change would be my “pivot”.

Final Thoughts
Like all good intentions, I fully expect life to get in the way. Everybody, including startup founders, deals with that. However, if things go even half as well as I hope, this could be a major turning point for my site. It should make for some interesting future blog entries.

Monday, September 5, 2011

Colors, Web Apps, and Google


I haven't talked projects in awhile and I'm due to get back on that track. So let's get started.

Random Face Color Addon
I wrote a Blender add-on that randomly colors all the faces on a mesh. This was a special project thanks to Blender Artists forum involvement. Someone suggested features the original version didn't have. That lead to new monochrome and animation features. It was a great learning experience and the script got a thumbs up. It felt good to be told I did a good job.

Web Applications for Blender
I revisited the idea of loading Blender data into PHP. This time, I listed the names of every object in a project separated by data category. Materials, meshes, and everything else got their own section. The bad news was I couldn't run Blender on my web host which meant no production deployment.  Back to the drawing board.

I looked to Github for inspiration. Getting the most out of that site means having Git installed on your computer. It's a setup that works really well and opens up an interesting question. Can Blender have a relationship with a web application similar to the one between Git and Github? It's an interesting idea.

Exploring App Engine
Exploring technology is key to executing ideas and I decided now was the time to look into Google AppEngine as a potential platform. The learning curve thus far is about as good as that of Django.

Of course, the recent pricing drama makes App Engine look like a risk that I might not be able to afford. However, I'm willing to give it the benefit of a doubt. It'll be awhile before I deploy anything which should give Google time to sort these issues out. Also, Google has made mistakes before with Buzz and Wave and managed to correct course. I'm hopeful that this will be just another trip in Google's history of awkward stumbles.

Ending Thoughts
There are other things I've played with that I didn't bring up because it would make this entry too long. So rather than going into things like Backbone.js and Python package hierarchies, I think I'll just end it here. May your coming week be fun. Will talk again soon.

Monday, August 22, 2011

Do Programming Language Skills Exist?


I don't have Python skills. It's true I have programming experience where I've heavily used Python for the past couple of years.  Still, I have a hard time seeing Python as a skill. In fact, I have a hard time believing any of my programming language skills are real.

Making the Case
Programming skills may exist may exist but programming language skills do not.   Let's consider the differences.


SkillsNot Skills

  • Object-oriented
  • Functional
  • Imperative

  • Java
  • Haskell
  • Python


Let's pick on Java.  Java is a tool, not a skill. Real skills are working with concepts like inheritance, compile time type checking, branching, looping and more. None of these concepts are unique to any one language. Understanding that makes picking up new programming languages a breeze.

Does knowledge of standard libraries on a language platform count? Not really. It means you're good at learning libraries. It says nothing about your programming skills. You could spend years working with different Javascript libraries without understanding what a closure is for example.

Don't Limit Yourself
The idea of a language as a skill limits you as a developer.  For one, it limits your thinking to the features your language supports.  Even worse, it puts too much faith in what that your language can do. Stop doing that. Start putting more faith in what YOU can do as a programmer beyond the language. You'll be a better developer for it.

Sunday, August 14, 2011

Script Tweaks and the Return of Falling Blocks


Last week was awesome. Lots of cool stuff got done with web apps, Blender development, and a touch of Java. Let's get right to it, shall we?

Game PD: JSON and Updating the Updater
A couple of unused columns got dropped out of Game PD's database. This required a little bit of SQL and a couple of small changes to the updater script. Brand new decorators now do some argument checking against data class methods. It was great. Decorators are a fun Python feature to revisit. There's a handy tutorial that helped me relearn the weird bits.  This exercise also turns out to be a nice way to practice writing secure code.

On the web app side of things, Game PD's front end completed the switch from a table to div layout. The data feed stopped passing PHP arrays and started passing in JSON data. This will send the old game table template into retirement. Furthermore, it mostly dialed back PHP's role to that of a data provider. The layout still needs work but it's nothing that can't be resolved with some CSS tweaks.

Blender Addons: Ani-Mangler and Materials
Ani-mangler got a small update. It now offers a convenient way to name shape keys as they're made. You now can generate shape keys auto-named “subtle” for small deformations or “violent” if you decide to really crank the settings on it.

In other Blender news, API options for messing with materials caught my attention. The devs made it easy to climb the learning curve but I'm not ready to put out anything yet.  Hopefully, there will be more on that next week.

Java: Falling Blocks Comes to Github
Falling Blocks is a Tetris clone I wrote some years ago as support material for a professor's game programming class. It was the third of three games that showed how easy it can be to develop games in Java. Aside from sound issues, it still runs pretty well. It's now available to you via my Github account. It's a proud part of my history and I hope you like it.

Conclusions
It was a busy and productive week but there is still much to do on all fronts. As always, I'll keep you readers posted on new developments.

Sunday, August 7, 2011

Everything But The Blender


Weeks that include interviews mean less work on projects. This was especially true last week where the interview was with a New York City startup. Just the same, there are a few interesting things worth talking about.

Apache Configuration
For the longest time, Blender Addons and Game PD shared a common folder which made version control difficult. Now, both projects have their own folders. Setup meant making separate sites-available files and writing a BASH script to automate Apache reloads.  Once done, switching between web site projects became a simple one-line command.

Python Is Awesome
I like doing small experiments in Python enough to write up quick scripts here and there for fun. One project used operating system utilities to examine different aspects of my /etc/ directory. Another project on the topic of continuations taught me a functional programming trick for passing in what courses of action the target function should take next. Give “python continuations” a Google search. You'll be glad you did.

Learning continuations got me thinking about the relationship between programming languages and paradigms. With Java, I felt pushed to think in object-oriented terms. Haskell is a functional programming language and, as such, pushes that style of development.

Python never made me feel pressured to adopt one style over another. I learned its style of classes and inheritance when I was ready for it and picked up functional programming tricks when I decided it was time for that. To pull that off while keeping the language simple is impressive.

PHP with Cookies, Sessions, and JSON
I finished a session and cookie manager that I did for myself as a challenge and came away from it pretty satisfied. This project mattered because sessions were the only major web programming area from my JSP days that I didn't have a handle on in PHP. It was a big win. There is still a lot to be learned though.

Take JSON for example.  I just finished off some work on a project where I was feeding JSON data from the server to client-side Javascript. Parsing it via JQuery was a little weird at first but, overall, it wasn't a difficult learning curve. Compared to XML parsing, JSON is easy.

In Conclusion 
After all is said and done, only Blender scripting fell to the wayside. That's something I hope to remedy during the coming week.  I look forward to talking about that and more in the near future.