Thursday, November 12, 2009

Why awesome tools shouldn't be free



The Following is a rant brought on by Unity3d making their Indie platform free.

Once upon a time, in a galaxy far far away it used to be very difficult and expensive to make an album. Yes, I said album. To record an album, record or even CD (before the age of cd-rom burners) a musician would have to go to a studio. In that studio often resided a badass audio engineer, thousands of dollars worth of recording equipment, and a great acoustic setup to record top of the line vocals and live recordings.

This was how it was up until 10 years ago. When I was in college for Audio Engineering I was literally taught how to record on a 16 track analog board recording to a very high end Reel to Reel. I started in my own studio with a Tascam Portastudio 424 (see image above). Yes boys and girls that is cassette tape. Such amazing artists as Beck and E of The Eels recorded their demo tape on one of those. I too had dreams of making it big on my own as a producer, but something happened. . . a sea change in personal electronics.

Very very quickly, personal computers got cheaper, faster, and powerful enough to run high end recording programs such as Pro Tools and Cubase. Yes, even though I have been running Midi Sequencers on computers since my 386 DX running Windows 2, recording studio quality audio came much later. High End Recording Studios were quickly replaced by bedroom producers. The 18-23 year olds that not only were producing their own music, but recording their own music as well. Within about 5 years the Recording Studios were virtually wiped out, and Audio Engineers were a dime a dozen. Anyone could get a mid-grade audio card and produce professional quality recordings. Just check out Garageband (if you have a mac).

The second and more powerful blast came with the advent of the MP3. The MP3 codec converted once gigantic .wav and .aiff files down to a quarter of the size. Big deal right? We all know what MP3s are. Well, the MP3 single-handedly wiped out the entire music industry. I watched it first hand from the mighty halls of Warner Music Group. I watched as a once bloated and crazy industry transformed itself into a publishing industry.

What does the MP3 codec have to do with Unity3d, follow me into the fabulous world of Flash Casual gaming on the web, and the lack of an industry there is around it. Why is there no real Flash Gaming Industry? Because they haven't figured out how to make money off of it. And why is that? Because people already believe that anything you can play in your browser is free. And most people do not see it as being worth paying for.

The Casual Gaming Industry is facing the same problem that the Music Industry is, no one wants to pay for something they can get for free. Yes, there will always be the hardcore gamers/music collectors, and they will gladly pay money for awesome stuff. Great. Awesome. But that's like 3 percent of all gamers/music listeners. Lame. Terrible. O-M-G.

So, will allowing Unity3d to flood the web with lame ass games by 13 year olds, destroy the gaming industry? No. I don't think it will. But is it helping anything other then possibly the Unity3d web player's penetration numbers? Nope, I don't think so. But if we start releasing AAA quality titles for free on the web, then god help us. Don't train your audience to expect awesome stuff for free. Please?

End rant.

Tuesday, September 29, 2009

Game Developers are Developers too. . .




Being with Influxis for a while now, and speaking at various conferences I've noticed something kinda strange. There's an elephant in the room that the developers are talking about (and I'm not talking about how the hell a bum became a developer).

There's a weird lack of Game Development sessions at Flash/Flex conferences. Unless you are going to a "Gaming" Conference, mum's the word on Flash Game Development (i.e. the awesome Flash Gaming Summit I went to in San Fran). And I don't understand why this is.

Is it because the Flash Rockstars aren't making games? Well, I know Grden and Zupko are basically in the Unity3d camp. But Keith Peters has made some awesome flash and iPhone games.

I think there should be more talks about game development at the major conferences. It's a MAJOR part of the Flash Community. I think it would also help bring the level of development up across the board. Games are hard to make. They usually require lots of Maths, Physics, and Artificial Intelligence implementation. Not to mention a healthy helping of Design Pattern knowledge. I also think that if you put a lot of the harder programming/architecture concepts into game terminology, things become a little less scary, and easier to visualize.

Then maybe, just maybe. . . non-gamers will see the art behind game design. Also, maybe we could figure out a way to make some money off of Flash Game Development. That would be pretty cool I think.

Thursday, September 24, 2009

Part one in my AI for Flash Devs: How to make your own SkyNet in AS3!

I have an unhealthy obsession with Artificial Intelligence. I've always wanted to make a trainable system that learns on it's own. Sounds like fun right?

Don't be scared. It's actually not that difficult to do.

For part one of my intro to Artificial Intelligence for Flash Devs series I could have gone over Finite State Machines, Chasing and Evading, Pattern Movement, or Flocking. Yep, I really could have, but those have been done to death. Let's do something interesting. Let's make a Perceptron.

Think of a Perceptron as a smart Boolean. Due to the various stimulus it receives and it's training it will choose one of 2 choices. This is called a Linear Classifier because the problems it can solve have to be linearly separable (yes or no, red or blue, buy or don't buy).

So, here's an example with everything shown: Seantron's Perceptron.

Let me explain what's going on here.



This is your Network. Blue is input X and Red is input Y and those are connected directly to your output O (the white circle). So each connection has a weight value, and by adjusting the weights we are able to train the Network to do stuff on it's own.



This is the graphical representation of your Training Data. Huh? Well, let's say you have figured out a system for buying stocks. Your blue points could be stocks that meet the criteria that you want to follow to Buy The Crap Out of those Stocks! And guess what the red points would be? You guessed it, Those Stocks Suck Ass, Don't BUY!

So you training data sets the weights (which are those crazy numbers in the Network pic) which allows for the Network to buy or not to buy on it's own. Yes, in this example we are training the system by hand, but I will teach you how to use something called Back Propagation to set up a system to train your Network for you.

*As per makc3d's directions* end edit:

Here are some links to help you with what is going on with the science stuff:

http://en.wikipedia.org/wiki/Perceptron
http://www.youtube.com/watch?v=eDYOH9q2QdA

Gradient Descent is what is used to calibrate the Weights.

http://en.wikipedia.org/wiki/Gradient_descent



Here's the AS3 for the Perceptron example:


package src{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;

public class Perceptron extends Sprite
{
private static var learningRate:Number = 0.1;
private var inputs:Array;
private var outputs:Array;
private var patternCount:int;
private var weights:Point;
private var globalError:int;

//a couple of MovieClips in my FLA's library. Yes, I use the Flash for asset creation. . .

private var red:RedPoint;
private var blue:BluePoint;

public function Perceptron()
{
//sorry my constructor is unoptimized

initLearningInputs();

initLearningOutputs();

runLearningSimulation();

runGeneralisation();


}

private function runLearningSimulation():void
{
/*let's create some random weights*/


weights = new Point(Math.random(), Math.random());

globalError = new int();
globalError = 0;
for(var p:int = 0; p < int =" output(weights," int =" (outputs[p]" int =" outputs[p]" text =" String(weights.x);" text =" String(weights.y);" number =" -1;" number =" -1;" int =" output(weights," red =" new" x =" x" y =" y" blue =" new" x =" x" y =" y" int =" 0;" red =" new" x =" inputs[t].x" y =" inputs[t].y" blue =" new" x =" inputs[t].x" y =" inputs[t].y" inputs =" new" patterncount =" new" patterncount =" inputs.length;" outputs =" new" number =" oX">= 0)
{
return 1;
} else {
return -1;
}
}


}
}




Need help? I'm busy, but I always like to help where I can: seanmccracken13 (at) gmail (dot) com.

Tuesday, September 22, 2009

Resistance Is Futile *edit*

Guess what? I don't come from a computer science background. Hell, up until 2 years ago, I thought I was going to be a Music/Motion Graphics dude. Yep, I was an artiste (an uber dork, but an artist none the less).

And one would have to be riding the short bus not to notice that most of the Flash Devs come from a similar background (notice I say Flash and not Flex, ahem). This blog post is directed at you guys, my fellow flash devs/UX dorks. You programming autodidacts (look it up mofo!) in the audience. So, if you come from a compSci background, go back to reading your white papers or writing your book on functional programming for AS3. You probably know all of this stuff.

Please understand the intention of this blog post: I'm just sharing things that weren't taught to me right off the bat. I was starting to feel a little behind the curve, and was wondering if I needed to go back to school or something. F that. Who needs school when you have blog posts and wiki/tutorials to read?

Check it yo. This is my list of things to learn by the end of the year, wanna follow me on the journey? It might be fun, nah, it'll probably suck, but you might be able to make some more money. Got your attention? Coolio. Let's get smert!

Intermediate level:

1. ANT. Learn it, love it, build it. (thanks FlashBum)
install ANT Flex Builder 3
do something with ANT

2. Command line blues. Afraid of the command line? Don't be! It's a powerful tool in the jedi's arsenal.

3. SVN, GitHub whatevs. Use one. Organizational skills are needed. If you are like me with everything on your desktop, learn organization. A clean mind is a razorsharp mind with teeth that can destroy major problems.

*3.14159 Learn Design Patterns. Here's a book to get you started: AS3. Like really really learn what MVC is. Because there is a difference between knowing MVC and KNOWING MVC. You'll know when you know it, because then a bright light from the heavens shines down upon you, and your eyes start to glow green. Seriously, look at my Twitter avatar.

4. Learn a real language. AS3 is rad, and it's my first language so I'll always have a special place for it in my cold dark heart, but it's very limited. If byteArrays throw you for a loop (ha, programmer joke! sigh, I know) learning C++ might help you with that. I don't know if I can recommend C++ to everyone, but try it, you might like it. There is a lot of power behind that language. Especially in this bad economy, multilingual == security.

*4.5 Learn Data Structures mofo! And algorithms if you dare.

Advanced level:

5. Study what's been open sourced by Adobe, like the Flex Compiler (java) and Tamarin (c++) the Actionscript Virtual Machine 2, or aka what makes AS3 run. By knowing what actually is going on under the hood will ultimately make you a much better programmer and/or bitter/insane. Then you'll start to understand what Joa Ebert has been talking about for the last year or so.

6. Embrace change, don't resist everything. I'm saying this as much for myself as for everyone else. Also try to think optimistically. Ha!

Jedi/Sith level:

7. Learn a Functional Programming language. I've been studying Erlang and F# a bit, which has allowed me to figure out the idea behind the XMPP protocol. I've also been told that Clojure is pretty awesometastic. This is the added bonus level though. Functional Programming is not easy at all, it's based on Lambda Calculus and it looks like it too. I've also heard that once you successfully complete a project in Erlang that not only do you get a free membership into Mensa, but you also learn the secret to space time and who shot JFK.

it's time to start the journey in 3, 2, 1. . .

Tuesday, August 11, 2009

Twitter and somehow I'm cool.

Ding dang! I am very honored to have made Sean Moore's (not me, I swear) list of 50+ Important Flash Platform Developers! It's amazing to be included with some amazingly talented people on there (except Jesse Freeman, that guy is a bum!).

Link to awesome list of flash peeps.

And, if you want to follow my nonsense on twitter, please do!

Link to my Twitter page.

I'd like to thank the academy, my baby mama, and SeanTheFlexGuy.

Tuesday, August 04, 2009

Experiments in Microsites

Ok, let's get one thing clear: there is no way to "create a viral experience". BUT, I'm going to try to anyway.

I'm an idea guy, I can't help it. So, I've set out to complete at least 2 sites a week! Well, microsites.

And here's my first one:

http://www.theloudsigh.com

More to come. . .

Friday, May 15, 2009

Massiva3d is released!

After a long 6 months of coding, researching, learning 3d, optimizing, modeling, and bashing my head against the wall Massiva3d is finally out. Well, it's in Beta at least. I hopefully will be able to share some of the things I've learned from this project with you guys.

But for now, I'm taking a vacay.

http://influxis.com/applications/massiva/

http://labs.influxis.com/?p=123
http://labs.influxis.com/?p=130

By the way, I'm rewriting my FMS Presentation from FITC Amsterdam, and my new version of Rethinking FMS will be covering a lot of what went into Massiva3d. So, I hope to see you guys at Flash On Tap.

And I'm still trying to figure out if I'm going to be able to speak at Flashcamp in Sophia, Bulgaria (how rad is that? What an honor).