Programming, Visualization and Game Development Theory

12Jan Functional Dreamers

In the Mayan calendar, 2012 is suppose to be a year of deep cleansing and rebirth for the world. In this spirit, I’ve been branching out into new fields and broadening my conceptual view of software development. The more I learn about programming fundamentals, the closer I get to a notion of which is considered “programming nirvana”. When I first started listening to people about this concept, I was very skeptical. All I was hearing was “blah blah no-variables blah higher-order-functions blah”. Like any programmer, my brain starts crashing as soon as I hear the statement that a language can be productive without variables. How is it possible to make anything meaningful without some internal state within methods and classes? Well, the answer to this is rather complex and outside the scope of this posting. The vehicle driving these concepts is called functional programming (FP), and it’s intrinsic highly abstract nature is usually very difficult for programmers to swallow. Going into the future though, I hope to post more about functional programming here. However, the real purpose of this article is to acknowledge some of the most astoundingly brilliant scientific minds that are changing my industry. I tip my hat to these gentlemen and scholars:

Haskell

Haskell B. Curry
Father of Haskell foundations
Simon Peyton-Jones
Implemented Haskell GHC compiler
Erik Meijer
Major Supporter and an amazing teacher

FP Geniuses

Rich Hickey
Creator of Clojure and FP pioneer
Joe Armstrong
Erlang founder
Martin Odersky
The brain behind Scala
Don Syme
Inventor of F#
John McCarthy
Lisp and FP pioneer
Conal Elliott
Conceptualized Functional Reactive Programming

Honestly, I cannot state my respect for the above individuals enough! They have invested an enormous amount of personal time into an ideal that they are crazily passionate about. Each one of them want to make software development better from both the coder’s standpoint and platform perspective. As a teaser to these principles, below is a video of Simon Peyton-Jones and Erik Meijer talking about their view of coding nirvana:

06Apr JAD Update: Social Games

I’ve decided that I’ve neglected my blog long enough and decided it was time for an update. Here we go *long breath*…. Within just the past couple years, I’ve moved from Michigan to San Francisco and have been working primary in building mobile and Facebook social games that have given rise in the gaming industry. I did a number of projects at Crowdstar including Hello City and Mighty Pirates, and now I’m working on the largest project yet in my career at a newer startup called Metamoki (created by Dave Maestri, founder of Mafia Wars). The game development industry in Silicon Valley is rather interesting on a couple of facets. In some ways, it’s repeating the game design that originated back in the DOS and Commodore days. On the other hand, there are mechanics that are new and ‘alien’ in nature. Of course I am referring to the “social” aspect of Facebook games. In some FB games, the meaning of social is almost laughable as it doesn’t really exist. Even the best games in the industry still do not compare to the social aspect of co-op gaming that is rather prevent now in modern commercial games. Recently, big names in the traditional gaming industry are starting their own studios in hopes of breaking into the market. It will be very interesting to see what happens within the next two years.

Aside from the industry as a whole, I’ve been busy writing my own isometric engine, data structures, tooling, and learning other languages to support my day-to-day work. As soon as I think I’ve built the fastest possible system, I always find one more way to make the performance that much faster. I’ve also come to understand computer science more on a fundamental level beyond languages. It really helps to know what is happening behind the scenes when using language core libraries… just because a language provides a core function doesn’t mean you should use it! I have written a great deal of code that basically does what Flash already provides, but the level of performance can reach an average of 2-10x improvement (which helps significantly). I’ve also been following the methodologies of SOLID <http://en.wikipedia.org/wiki/Solid_(object-oriented_design)> and being mindful of these principles really improves the rate in which I can iterate game concepts and cuts down time to complete maintenance tasks.

I’ll finally wrap-up and show off the last two games I’ve developed at my previous work with Crowdstar:

 

Visit the games below:

Maestri

04Jan Now=new Year(2010)

As the new decade begins, millions of people reflect on their situation and ponder how to proceed into the future. In many ways, 2009 was a game changer for the multimedia industry. We have seen Unity and the Unreal engine open to their doors to free indie developer licensing. This illustrates that corporations are realizing that even a great multimedia software infrastructure can be shoved aside for lesser alternatives that however have the strong community around its platform.
We have seen also a greater focus on one language compiling to multiple platforms. Adobe is pushing for Flash to compile natively to the iPhone and pushing the Flash player to all other mobile devices. Unity also aims for compiling to PC, Mac, and iPhone with little changes needed to the source. Microsoft continues to push XNA that has the boon of both PC and XBOX360 support. Of course, haXe continues to gain in popularity as it is a single language that translates into other platforms (Flash,  PHP, Neko, and C++ SDL).

Over at Bill Sander’s blog AS3 Design Patterns, he talks about his journey into design patterns and that his New Year resolution is “Improve nailing down relationships between classes in design patterns.” This year I have expanded my knowledge of design patterns in areas that I do not normally require in my everyday work, but just learning their existence has given me the enlightenment of not just how the design pattern works but ‘why’ it exists and what would happen to a system built without it.

My personal development New Year’s resolution is: “Learning to prototype quickly while keeping modular using loose coupling.” Being able to produce a skeleton of a system quickly helps to a keep the momentum of a project going and to isolate design flaws. However, rapid development can cause a system to be become stagnate and locked into a certain implementation. However, wise programming decisions like using the acquaintance relationship between classes and employing design patterns like strategy or template will make my prototypes open enough to evolve into the final product without infrastructure rewrites.

Update: While technically the new decade starts in 2011, I find the debate mute as people will refer to this era as the “2010′s“.

(more…)

08Sep Us versus “Them”

colbertLabels are dangerous when used improperly regardless if they were created in good intentions. The present day world is filled with named factions that rage verbal or physical war on each other for nothing more than self affirming the dominance of their party. This is somehow deeply ingrained in our human nature… to provide loyalty to our clan and subvert others to establish dominance. If you’re not quite sure where I’m going with this, I am hinting at the fruitless debate between the American political parties.

Democrats and republicans have evolved to hated enemies of each other… no longer remembering that they were formed to work in harmony over national issues. In my opinion, there is one major entity to blame for this downfall and social dysfunction of the parties. That would be the American media. Regardless of the national media network you watch, you are being spoon-fed DAILY about the ‘evils’ of the other party that that media network is associated with. I can’t watch any of the big three news networks for more than an hour without being told why one party is better than the other. This is a shame that they choose to demonize and point fingers rather than focusing on the core of the issues at hand.

Should matters like health care regulation be shunned because it ‘sounds’ like a certain party’s agenda? On another separate issue, I heard from one news network that a certain bill wasn’t worth looking into because the originator happened to be from the other party so the bill could be linked to promoting that party’s cause “somehow”. This is the kind of blind hatred that has caused our political degradation. So what do I propose? I would merge all political divisions… democrats, republicans, and the other 3rd parties. Why can’t a person have a mixture of beliefs instead of being forced to conform to only the stances their party supports? The fact that someone who tends to be liberal is only going to feel at home in a democrat party versus someone who is more conservative in their views will have few options but go republican is a sad commentary on how the parties have outlived their usefulness.

The only person who benefits from this segregation is not the voter but the news networks. Controversy sells and the media has turned our political system into a kind of dark entertainment art form. Let’s spend less time worrying about if new policies fit the agenda of our party… and instead focus on what is “right” and benefits people the most. I normally don’t blog about political matters, but I find this dilemma in need of more attention than what it currently gets. Anyone else feel the same way?

27Mar Further Reading on Design Patterns

As a followup on my Wednesday lecture on design patterns, I wanted to post some informative resources for learning more about design patterns outside the next lecture on the topic. Also, I wanted to say thanks for everyone who showed up to hear me rant about code structure (not the most exciting topic in the world mind you)!

Design Pattern Definition
In software engineering, a design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.
- read more at WikiPedia

MVC Definition (the most common principle of Design Patterns)
mvc
Model–View–Controller (MVC) is an architectural pattern used in software engineering. Successful use of the pattern isolates business logic from user interface considerations, resulting in an application where it is easier to modify either the visual appearance of the application or the underlying business rules without affecting the other. In MVC, the model represents the information (the data) of the application; the view corresponds to elements of the user interface such as text, checkbox items, and so forth; and the controller manages the communication of data and the business rules used to manipulate the data to and from the model.
- read more at WikiPedia

Books:

AS3 Design Pattern Informational Websites:

Flash Design Pattern Frameworks:
(for now, it’s best to avoid these until you understand the fundamentals of MVC)

Good Design Priniciples:

  • ALWAYS type your variables (not really design principle but I too often see people doing this still)
  • An object/MovieClip should contain the actions that it performs (as oppose to objects outside the class forcing it to perform actions)
  • A class should never be able to “break” if the user sets a property or calls a function on it when they are not suppose to. Keep preventive logic in the class that’s doing the work.
  • A good chosen design pattern for a problem will not take any longer to implement than not using it with spaghetti code.

Feel free to leave comments or email me about any further questions you have about Design Patterns or where to find additional materials on it. Have a great weekend everyone!

02Dec at&t: Why Bureaucracy and Technology Don’t Mix

Old-school pyramid management can severely cripple an organization’s ability to adequately adopt and help their customers. Today the story I have to illustrate this problem is about at&t’s service and support departments. First off, let me state that the actual DSL service I had with at&t has been nearly flawless with 6mb downloads with 768k uploads. I am definitely a power user (online gaming, downloading, video and audio streaming, and working at home) and never hit any kind of service-capping or times that the network connection from slow. However, this story isn’t about the ‘product’ but the customer service and internal processes that occur…
(more…)

11Nov T-mobile G1 impression and Flash

Well, I finally took the plunge and got my first smart phone! I’ve looked at several choices over the past year like the Blackberry Bold, Storm, Apple’s acclaimed iPhone, Diamond Touch, Envy, and the LG Dare. However, after measuring the pros and cons, I decided on Tmobile’s G1. Why, you might ask? For one, I do like the full slide-out keyboard, touch screen, and trackball features. However, the G1′s biggest asset is of course Google’s open source Android operating system that it runs on. Android will allow even intermediate Java developers to make applications easily and publish to the market for other users to use. Examples of current applications are: barcode scanner and local prise comparison, parking spot locater on a radar display, social networking integration including direct camera posting, use mp3s as a ring tone (iPhone requires a painful hack for this to even work), remember-the-milk task reminder, weather display, and much much more. Heck, if I can find enough time, I will start writing applications for it.

Also, the cost of the phone is cheaper (its $170) and the monthly contract is about $25 cheaper than the iPhone (which the savings alone is as much as my internet home service). Overall, I have had the phone for over a week and can say nothing but good things about it. I did have some issues with the T-mobile service line… but to be honest, most of the tech support reps have not even seen the device since the G1 is sold out across the US right now.

My two wishes for the phone are longer battery life (with RC30 bios and 3G disabled, I have 80% battery by noon with lite use) and for Adobe to bring Flash Player (preferably 10) to the Android Market! I assume if Flash Player 10 where to ever to hit a cellphone device- that it would be the G1 since Adobe has been a well known Java centric company internally, but FP is written in C, if I remember right, so it will need to be transported to Java OR run as a Linux app directly on the G1 outside Android.

Note: RC30 update now has a viewer for most of the Microsoft Office formats.

Update #1:
At the Adobe MAX 2008 conference, Turner indicates that an “Android port” [of Flash Player 10] is coming!

Update #2:
Flash Player 10 confirmed for Android (with video)!

Tags:

24Oct Living in the [virtual] Cloud

I have always strive to keep things organized and in arm’s reach. People expect, with the rise of the Web 2.0 boom, that services should be fast, easy on the eyes, accessible on desktop/web/mobile systems, free/cheap, and have a reliable up time. With the tools that are available now, I have completely replaced the need to use (snail) mail and feel that now, more then ever, I can exist in a true service cloud. Below I have compiled a collection of sophisticated online services that can increase the level of simplicity and zen in most everyone’s life:


  • Daily organization (notes, weather, other): www.google.com/ig (must have homepage)

    • Google also has an amazing calendar, notebook, and doc/presentation/spreadsheet services
  • Bookmarking: Delicious.com
    • For those who are new to social bookmarking, it allows bookmarks to be saved directly to an online account. I would recommend getting the Firefox toolbar for faster access. Also note that you can add igoogle gadgets that sync with your delicious to display different categories of links that you have bookmarked.
  • Misc Data backup: https://www.getdropbox.com/ (2gb free)
  • Photo backup: Google’s Picasa Web (250mb cap I think…need to find a better service here!)
  • Documents: convert to Google Docs or store in a data backup (see above)
  • Music backup and streaming: lala.com (syncs music to an online locker that can streamed or downloaded)
  • Videos: obviously youtube.com
  • General needs
  • Fast news lookup: originalsignal.com, addictomatic.com, or of course digg.com
  • What others have I missed? Please comment if you have another service that has made your life that must easier!

Other great links to read on this subject: top 80 sites and best of web

31Jul zoom Zoom zoom

Mazda3Well, my old Mercury finally kicked the bucket. The water pump went out on the highway, and my engine seemed it was about to bust under the heat. Anyway, it was time for a new car… I actually have been planning on getting a new vehicle for almost two years now. After much research, I finally decided to go with a Mazda3 as it seemed to have the best performing engine, interior quality, and lifespan than any other car in its class. My second option was a Honda Civic 2008 but the markup on those cars because of the rise in gas is crazy.