On Innovation in big companies

These notes are from BarcampPhilly ’08 that were lost in the depths of my computer’s hard disk and I only just found again. At the event, a few of us from CIM held a round table discussion on innovation, especially developer led innovation in big companies. Here are the points that people mentioned:

  • Innovation only comes from free cycles, even the best ideas need time to be thought through
  • Leverage something thats existing rather than a brand new idea
  • Agile development can actually hurt innovation with too much transparency. Its hard to justify something that you may feel has a long term win
  • Technical managers should whet the ideas of their team members
  • Innovation comes from bottom almost never from top
  • Innovation = Risk
  • True story: At AOL, the AOL IM service was declared a risk
  • Constraints actually push innovation
  • Innovation wont happen without proper incentives/rewards.
  • How about cross team innovation. How do designers/developers collaborate to innovate?

So this has only taken almost a year to put up, with BarcampPhilly ’09 coming up soon. Since then there has been a few opportunities within CIM to push bottom-up innovation, including a labweek for all of engineering.

Are you in/around Philadelphia and into Flash, Flex or AIR? You should be at FlashCamp!

I am pretty excited that Rob Hall has formally announced FlashCamp Philadelphia to be held on Nov 7th. The event promises be pretty fantastic with some of the biggest names in Flash and Flex circles coming in to participate. While the event promises to be technically very educational, I am personally excited to see how different companies within Philadelphia use Flash and Flex. The event will be held at Philadelphia University’s Kanbar Campus Center and is priced at $45 with early bird pricing of $35 (till Sept 30th or the first 75 tickets). Students tickets are priced at $22.

So if you are in the neighborhood and interested, check the event site and register here. You can also follow the event on Twitter at @flashcampphilly

See you there.

My take on the “Has ActionScript failed” debate

There is a lot of buzz going around twitter and the blogosphere the last couple of days around the future of AS3 and what the community wants. These discussions include Joa Ebert’s post on community contribution, language extensions and compiler performance, Nicolas Cannasse’s (author of the Haxe programming language) post on AS3 as a failed language and Andre Michelle’s post adding to the earlier two.

All the above posts do have valid points even if they are rather sensationally titled, though calling AS3 a failed language would be stretching it considering how many of us use it and do fairly complicated things with it even if typing “addEventListener” is a pain in the ass. The flip side to the above arguments come from Peter Elst’s post Making the case for ActionScript.

So here are my takes on the topic:

  • AS3 has not failed but is definitely gotten more verbose as painful to type. Traditionally ActionScript seemed to suffer from a love affair with Java which is probably why Java/C# developers do not see the points here. However the new fashionable languages are a lot less verbose and draw a lot of attraction on that front.
  • A lot of twitter conversation at this moment is talking about decoupling the AS3 language from the ActionScript Virtual Machine, and that would be cool, you could write Flash apps in a language you feel is cleaner. Alchemy enables this with C++ code, could probably be extended. For me the excitement isnt about compiling Python to the Flash Byte code but rather leveraging the language specific libraries I could use with my apps.
  • I had already blogged how AS3 has gotten a bit slower to work with than AS2. Adobe should look at the mistakes people are making everyday and improve either the language or the tooling (like maybe Flash Builder could warn you if you created a displayobject but never added it as a child). Simpler constructs for everyday things like getURL, loadXML would realllly help. This could be done with a framework that wraps lower level calls, but its a pain to add a swc to a classpath that I could do without.
  • Finally, lets have Adobe concentrate on features than language aesthetics. Take a look at how ugly Objective C is and you’d know we dont have it so bad. And yet, the language would not be the deterrant for me to write an iPhone app. So Adobe, I’d much rather get some player level features, and better performance for sure.

Oh and my big request of the Adobe peeps:
Adopt a secondary language and integrate well with it, especially AIR. AS3 will never have the libraries I would like to use, so if there could be a way to leverage Python or something as well on the desktop at least, that would be great. I am right now looking at TitaniumApp for some apps I wish I could have done in AIR.

Quick Tip: Correct folder for Unit Tests in Flash Builder 4

I really like the fact that FlexUnit is built right into Flash Builder since one of the main reasons unit testing used to fall off our radars was it was a pain setting up Flex Unit and executing scripts. However one of the things that struck me pretty weird was that Flash Builder was writing tests in the source directory. Best practices in unit testing say that the tests should be in a separate folder called tests/ which should be a sibling of the src/ folder. This lets the tests be written with the same package as the code being tested. This allows, for example, testing functions with a package level visibility.

The correct way to get this working is, when starting the project add another folder called tests for the build path. Now Flash Builder will look at both the source and the tests path when looking for .as files. To write a unit test Test Case, right click on the tests folder and click on the new Test Case option.

New folder for Unit Tests

[Update] I have filed a bug in Adobe’s ticketing system to track this issue. Please vote for it if you agree: http://bugs.adobe.com/jira/browse/FXU-50

Compiled vs interpreted languages and why I sometimes wish Actionscript was interpreted

[UPDATE] My friend, Mat pointed out that this post isnt really about compiled vs interpreted languages but rather static vs dynamically typed languages.

Its always interesting to see the conflict between developers who love and those who hate interpreted languages. It often feels like the developers’ equivalent of a generation gap, with a lot younger developers preferring interpreted languages like Ruby and Python over things like Java and C. An interesting post I read on why Web Applications Should Be Compiled which is an interested read, though a bit strongly worded against Ruby. I quote:

The whole philosophy behind Ruby is that the machine should be the servant, not the coder. This is madness. We’re engineers, and we make machines work. You use the best tool for the job to do that. You don’t choose some pretty language that “brings back the joy of coding” or equivalent hippy shit. This is analogous to hiring someone to build a house and having him tell you he’s not going to use conventional materials like wood and steel because they aren’t as fun to use as Play-doh.

The performance argument is often valid. No ruby developer can claim that it can outperform its compiled brethren, though there are signs that this could be changing, with news like JRuby outperforming Ruby C. The core reason people who love interpreted languages is that it gets the cruft out of the way, allowing developers to think more of the business problem.

So how does this debate affect me, considering most of my work is in client side languages like Javascript or Actionscript?

The last few months I have been working with Javascript and have slowly started appreciating it quite a bit. One of the reasons I wasn’t pulling my hair out with cross-browser javascript is because of the JQuery library. JQuery syntax is really nice and I love the chaining feature. For example the purpose of the following line should be pretty self evident:

$(".mydiv").width(200).height(200).bind(click, function(){ alert("I got clicked") }).css("visible", true);

The actionscript equivalent would be something like:


mySprite.width = 200;
mySprite.height = 200;
mySprite.addEventListener(Event.CLICK, function(event:Event){"I got clicked"});
mySprite.visible = true;

I hate the zig-zag i have to do to read AS3 code, so while extending OpenPyro I figured I could make my methods return the object instance back, that could be used to further set properties on the object.

So say my UIControl had a function like setSize(w:Number, h:Number):UIControl and setVisible(val:Boolean):UIControl, I could use them in chaining like:


myControl.setSize(200,200).setVisible(true);

nicer right?

But now imagine you extend UIControl to make it a button and add functions for setLabel(str:String):Button and setIcon(icon:DisplayObject):Button. Note the return types have to be Button so that I can do something like this:

myButton.setLabel("print").setIcon(printer_png_instance);

Now for the fly in the ointment: Lets try chaining this:

myButton.setLabel("print").setIcon(printer_png_instance).setSize(200,200).setVisible(true);

works fine. but

myButton.setSize(200,200).setVisible(true).setLabel("print").setIcon(printer_png_instance);

fails. Why? Because the compiler sees setVisible returning a UIControl but then trying to set the label property on that control. At runtime, the returned instance is a Button but the compiler cannot check that. The only way to do chaining would be to cast objects appropriately for the compiler but at that point, the elegance and readability of the single line is lost.

And that is the core problem. Compilers are stupid and completely depend on the return type information defined in the method signature. I could return Object datatypes for all methods but the performance hit would be pretty severe.

As I write this a new direction comes to mind. Doing $(“#mydiv”) in JQuery doesnt actually return a div but rather a jQuery wrapped set. Maybe a AS3 equivalent could be created using Actionscript 3’s Proxy class

Hmmm…stay tuned for a followup post.

Epilogue:
Returning for a bit to the previous quote chastising developers on choosing Ruby, a counterpoint can be found on why developers at Twitter chose Scala:

The other big reason we looked at Scala was that, although we’ve run into problems with Ruby, we like the flexibility of the language. We like that it’s such a full featured language, that it’s fun to code in. … We know that people write super high performance code in C++, and engineers like Steve and Robey have had experience with that. But we wanted to be using a language that we’re really passionate about, and it seemed worth taking a gamble on Scala.

I think programmer productivity is a factor of more than the programming languages, its also dependent on the developer’s passion for the language.

Why Facebook’s new changes don’t feel like the death of Twitter

I had a pretty interested conversation with JPToto yesterday, on Facebook no less, on Facebook’s new features and their impact on Twitter. JP posted his thoughts on the coming twit-pocalypse on his blog today. I am posting my conversation with JP below. However the very fact that I cant actually link to it is the main reason I am less of the opinion that Facebook can devour Twitter completely.

fbConversation

Twitter is definitely a fascinating beast ( and being a twittaholic, my opinions here may be biased. Follow me on http://twitter.com/arpit). People use it in very different ways. I definitely use it to keep tabs on my close friends and share a link every once in a while. In that respect, yes I dont care if I get that information from Facebook or Twitter.

However the real value I get out of twitter is a cursory connection with the people who I have the highest admiration for, the big names in Flash, Flex, Silverlight, Java world, guys who are running companies I respect or have opinions I think are valid. The connection isn’t always two way. I follow more people whom I dont know personally than those I do. Twitter is now my main source of personalized news and I dont see Facebook becoming that.

And what about services getting on Twitter that are really useful. The utilitarian awesomeness of things like @comcastcares is just hard to translate to Facebook metaphors.

The Facebook redesign is interesting, though I wonder if they were completely influenced my the more vocal but smaller fraction of their user base. My friends who aren’t into Twitter dont like the design much but they’ll learn to live with it. It may make them more active over the next few years (maybe) but I dont see it changing the way people who have invested time on building a group on Twitter leaving it for Facebook, unless they change their entire security system allowing follows with limited privileges.

Whats really going to start getting annoying to me is the fragmentation of conversation again (its already a headache if you are trying to follow blog comments/conversations). My status update will now be duplicated as will my friends’ and I have no idea where to respond for whom, and lack of the reply API on Facebook’s apis makes it even more irritating.

It will be interesting to see how it goes but I am not giving up my Twitter profile anytime soon.

On Technology, User Experience and the need for Creative Technologists

Of late I have been involved in a lot of conversations around user experience, especially since the last few months the sessions at the RefreshPhilly group that I am involved in have had quite a number of speakers on that topic. Speakers on UX usually come from a design background which isn’t surprising. The opinion I sometimes find prevalent and which I strongly disagree with though is that user experience is solely a design concern.

A while back, after a rather frustrating day with Javascript, trying (unsuccessfully) to create a rather simple transition effect that would orient the user to a change in state of the application, I vented on twitter on the choice of Javascript for the application given Flash’s general penetration. My main gripe was that while the application would be functional in Javascript, Flash would let me do really interesting transitions and effects, adding a layer of richness to the application. Remember this was an application that didnt have any SEO requirement and the application in that design would be completely unusable from a hand held device (the wont work for iphone argument carries a lot of weight these days).

A friend of mine (whom I hope doesn’t mind being cited here 😉 ) from the creative side of the biz responded:
twitter-message

This is what I feel is one of the biggest misconceptions in our industry. Recently, Grant Skinner, one of my favorite Flash developers, gave a talk at the FITC Amsterdam conference. Though I didn’t attend the conference, I did browse his presentation online. One of his slides had the diagram shown below.

UX

That pretty much hit the nail right on the head. And thats exactly my take on it. I think technology has a huge contribution to user experience. However traditionally that has not really been recognized as much.

The need for Creative Technologists:

I think there is a real need for the Creative Technologist. As technologists we understand whats possible with the current and the cutting edge technologies, which enables us to truly understand the problem statement. More so now when online landscape includes more than just technologies like Java, Flash, etc. What do the new platforms like Facebook, Yahoo Open, OpenID bring to the table? Look at how the labs features in GMail improve user experience.

Gmail Labs

How about browser extensions like Gears that could let enhance the user experience by letting them take your online content offline for reading later or BrowserPlus that could literally allow you to trigger the speech command on the local operating system and have it read out the content text for him.

And the opinion is not mine alone. Another great read is the article by Dan Harrelson from Adaptive Path (you know, the company that coined the term AJAX) on “What Makes a Design Technologist?” The 4 points he mentions for a creative technologist are:

1. A comfort level with front-end programming (web, desktop, mobile, device)
2. A tool belt filled with techniques for creating interactive apps
3. The ability to quickly pick up new tools
4. A itch to dive into code and “just built it”

And Creative Technologists have started becoming less rare to find on the web. Another article I recently read on the Read Write Web blog was on the fantastic Enjoysthin.gs application built by Ted Roden who is now employed by NYTimes as a Creative Technologist.

While Creative Technologist is still not a title that gets any results in Monster.com, I wonder if that’ll change soon.

RefreshPhilly March event is tomorrow!

Its that time of the month again! RefreshPhilly’s March session in tomorrow with sessions from the Luke Crawford, the CTO of Muxtape as well as by Todd Warfel from MessageFirst on Sketching and Rapid Iterative Design.

If you havent done so, do RSVP on the Facebook event page (we need the names for security passes for the building).

And in related news, Roz recently got interviewed by Technically Speaking on Refresh Philly. Great going Roz! Oh and I am totally stealing Rob Francis‘s badge for the event: