30Jun The Future of Language Interfaces

Ever had one of those times where you had quickly dismissed a piece of software only to find how essential it was after giving it a try later on? This happen to me roughly last week when I had issues with quick launch icons and desktop shortcuts. I had so many shortcuts that I had to organize icons in folders… and even the folders started to litter the desktop. While the Windows Vista’s start search bar is helpful, it does not allow (with the exception of some hacks) the use of custom commands and doesn’t supply any configuration options for its search index.
I needed a better solution for quick access to directory folders and applications…
I then remembered a program called Launchy that was a more customizable search bar. After I got it setup, I suddenly realized how vastly superior it was to my horde of desktop and quick-launch icons. Ultimately, I ended up switching from Launchy to Executor as it better support for custom commands. These commands can perform what would be several manual steps in just one keyword which is rather handy. Humanize Enso (the desktop grandfather project of Ubiquity) looks to help bring friendlier human language syntax than either both previous applications, but personally I find Executor able to do everything I need it to do.
After playing around with these applications, I remembered that Firefox had a similar plugin called Ubiquity that did something like this except for website related content. Between Ubiquity and Executor, I can execute almost any function of my computer within a few key taps. This means I have really no need for desktop icons or a quick-launch bar which removes a ton of visual clutter while still being efficient at accessing my commonly used applications.
While I think language interfaces are a fantastic way to eliminate clutter and improve efficiency, I don’t think they are a replacement for GUI interfaces as most current implementations have done (like Bash, Ubiquity, Launchy, etc). It would be a neat concept to try to merge the two methodologies into one interface… perhaps starting with a language interface and switching into GUI modes when the user needs finer control for complex input.
It will be really interesting how well into the future projects like Ubiquity and Firefox Awesome Bar are accepted into the general public. My main concern is if beginner to novice computer users are able to unlearn GUI control in exchange with keyboard hot-keys and human language syntax.
Here are two interesting articles on the subject that are worth mentioning:
Why Language Interfaces?
Problems with Language Interfaces?
24Jun Twitter Riddle Answer
This week has been pretty slow, but I recently had a reader email me his answer to my twitter critter riddle and thought it was a funny yet cheesy ripoff of the woodchuck riddle answer…
Riddle: How many tweets could a critter twitter if a critter could twitter tweets?
Answer: A critter would twitter as much tweets as a critter could twitter if a critter could twitter tweets.
What do you think? Do you have a better answer?
17Jun Why HTML 5 is NOT a Flash killer
The RSS feeds are abuzz lately about the new W3C standard of HTML 5 for browsers. In my opinion, the new standard defines new features that are way overdue. Canvas drawing and video playback are features that should have been implemented nearly 10 years ago. Perhaps if the W3C had their act together a bit more, we would have HTML 9 by now. I digress; the point is, Flash or any other multimedia plugin is not going to be threatened by HTML 5. Video playback and simple canvas drawing only steals the boring work from Flash development.
The misconception is that people associate video playback as a major reason to be using Flash since it is a common use for websites. Even in the video playback category, Flash player will still live on. Features like secure streaming, dynamic buffering, and rich video controls will keep professional from switching technologies. It seems like the people who are hyping HTML 5 the most are HTML developers who are daunted by or have a disliking towards Flash. I do not blame them as it is a hassle to create a Flash video player for just showing a simple video on a web page. However, the notion that HTML5 can kill off Flash, Silverlight, Unity3d, O3D, or any other rich multimedia plugin ignores the facts that these tools were created for large scale Application, game development, and even 3D multimedia development. You could argue that someone could write a 3D engine that uses the Canvas, but it wouldn’t have the speed as a plugin that has access to low level processing and video card integration.
What I am trying to say is, use the right tools for the job. Silverlight is a multimedia tool meant for .NET developers. Flash is a multimedia tool meant for non-programmers and Java-style developers. HTML is a great tool for web page markup and some presentation content. Trying to bend a tool beyond their intended use is only abusing the platform. Picking the right tools for the job is the most important project decision you can make.
Soapbox ranting aside, I will be working on uploading more advanced examples for FlashMVC as soon as I have some more spare time.
15Jun FlashMVC 2.0 Released!

I am very pleased to announce a major update to FlashMVC to version 2.0 with its OWN website at www.flashmvc.com! This version is a complete rewrite of the original version with better attention to scalability and framework usage. Since this is a dramatic upgrade, I have changed the package name to com.jadbox.flashmvc2. This version scales much higher allowing actions to relay complex messages to the view and built-in code hinting system for the view to execute an action. This is done by a new class called SuperAction. Let me start with the basics:
- action classes – these are normal classes (do not need to extent any classes) that perform an action
- SuperEvent – this class acts like a model for a specific action class, as a constructor proxy for the action class. and as an event for once the action completes.
- SuperModel – This class holds references to SuperActions which, in turn, hold references to SuperEvents and your action classes.
- SuperAction – This class is a controller proxy between your view and the action that it needs to perform. It allows the user to dispatch a SuperEvent that gets used as a model/constructor for your action class.
Benefits from version 1.0:
- The action has its own model/view (SuperEvent) to inform the view
- The SuperModel has fewer global variables as actions have their own dedicated models
- The model (SuperEvent) also mocks the constructor of the action class for code hinting
- Using the framework with Flash is the same exact flow you would use with Flex (or Flash Builder)
- Much more readable code for applications made with the framework.
- ActionHelper removed in place of SuperEvent
- If an action doesn’t require a unique SuperModel, you can use the base class SuperEvent or make a SuperEvent that covers multiple action classes (less recommended).
Example running an action:
Example reading an action:
function onComplete(event:SuperLogin) { if(event.isInvalidEmail) trace("email was invalid") };
Head over to www.flashmvc.com and check it out!
02Jun Cing from Java – C++ quirks
Lately I have been toying around with Visual C++ to rebuild some of my pathfinding algorithms done originally in AS3 and CSharp. While working on porting the code over, I can’t help to feel that OOP was just slapped into C++ from C. I might be getting this feeling as I use mostly Java inspired languages (yes, CSharp is also very Java inspired) that had a lot of forethought on how OOP should work and how developers implement it in their code. For example, it seems counter-intuitive to me to declare methods that float somewhere outside the class definition brackets. Also, it seems confusing to me that you declare the default values for method parameters in the method prototype and not in its definition. Additionally, why isn’t the compiler smart enough to look ahead for a function/method declaration instead of requiring the user to manually create extra code prototyping their existence. Perhaps Java-like languages has spoiled me, or I don’t see the “big picture” yet on why the language acts the way it does. Anyone from a similar background wonder the same thing about traditional C++?
05May What’s New, Doc?


I have had some people asking me what I have been scheming lately which in honest hasn’t been much. The weather here in Michigan has been finally nice for a change so I have been spending most of my free time cycling. However, I did go out last weekend and finally bought the fabulous Gang of Four book Design Patterns to add to my library. I know enough C++, JAVA, and Smalltalk to decipher the examples and apply it to whatever language I might be using these days (which has been lots of AS3, haXe, C#, and Unity3D). I also decided to join the tablet bandwagon and added a Wacom Bamboo to my collection in hopes that it will inspire me to work on my art portfolio that I have been neglecting. The surface really feels (and sounds) like you are drawing on paper!
In the next coming weeks I will be working on FlashMVC to do some cleanup and perhaps add more examples to the repository.
Lastly, I have been experimenting on AI development with local unit world data deresolution and querying. Such a system I am building will allow NPCs to explore large environments while meta tagging locations of interests for latter lookups. Usually this isn’t as complicated as the process I am developing, but I have to design something that is agile and performs well in the Flash player environment. I will blog more about this soon most likely.
O, and thank you to the people who came to my lecture on design patterns last week! I hope everyone was able to walk away with some practical knowledge to apply to their own projects. There is a good chance that I might continue this lecture in the future to dive deeper into a variety of AS3-applicable development pattens. The video camera we had in the room had some issues (we lost the second half of the lecture), but I hope to get the recording compressed and posted here soon.
27Apr Detroit Design Patterns Lecture pt. 2
This Thursday, April 30th, I will be continuing my lecture on Actionscript design patterns and principles at the Detroit Adobe User’s Group meetup. See the first lecture post here for directions and time information. This week I will be covering different mainstream design patterns in detail and if we have time give a brief overview of popular MVC frameworks that help accelerate application development. However, I do believe that teaching patterns and frameworks without knowing good object oriented principles is fruitless so I will also continue this topic discussion into the next portion of the lecture.
The conference is free to attend, and anyone from beginners to experts are welcome to join!
22Apr haXe Particles
I have been tinkering with haXe a bit more lately trying to get a good handle on how it works on a lower level and seeing just how much faster I can get it to go versus AS3. I hit a couple strange haXe syntax issues like why the heck I can’t declare local class properties with default values. Aside from this, I’m getting used to the language. I implemented the below particle system using a perlinNoise technique to generate motion paths, implemented color sorting with bitwise operators, and used some advaced features like inlining and generics. On my machine, the final SWF uses less than 10% of my processor which is about 4-5% faster than a similar AS3 counterpart. This is not much to write home about, but Flash is always lacking in the performance area so any speed improvements are welcome!
17Apr Philosophy, scarygirl, and more!

In case you missed it, there was recently an excellent article posted that poses the question if philosophers lived today and had to choose a programming language- what would it be? I found this article rather profound, and it does illustrate that programming styles are more than just syntax differences but whole philosophy shifts. http://developeronline.blogspot.com/2009/04/if-philosophers-were-programmers.html
Scarygirl is now live! This Flash game has same amazing illustration art going on (also on the website) and is filled with creative concepts. This is very much worth your time to come check out!
http://scarygirl.com/

Below are a couple good articles on why listening to negativity or causing it even when you are in the right has little benefits and is usually a waste of time. Thinking positive even when you are wronged will have the best long term results.
http://sethgodin.typepad.com/seths_blog/2009/03/ignore-your-critics.html
http://onflash.org/ted/2009/03/positives-and-negatives.php
