The end of the end

When I went back to college, 4 years ago, most of my peers thought the decision was commendable but kind of crazy - I had already been working for 11 years in the interface development field, and people who hired me couldn’t care less if I had a degree or not; not that it wouldn’t be a good thing to have, but that my experience with the technologies used more than made up for it. When I told people I was going to college, their response wasn’t “Nice!” or “Congratulations!”, but “Why?”.

At this point it may sound like I’m going to say “they thought wrong!”. Not really. They were right, it was a bit crazy to do it.

Still, going to college and successfully getting a degree was something I’ve always wanted to do, and I guess that desire was heightened by the fact that I never had the resources - both money and time - to do it, and when I finally managed to save enough money and make a flexible schedule possible for me, I embraced it and went to get a bachelor in Digital Interface Design.

I started without a lot of expectations; maybe gathering some theoretical knowledge, getting a diploma at the end, and having the confidence that I could stand something for a long time if I focused myself on it (I had started college before, but stopped halfway through it).

What I ended up with was so much more, however.

What was interesting, I guess, is having different lines of thought, or different situations, to put yourself into. My work is highly technical, and I like to believe I do my work well, but once I was in college, I had to put myself into tasks that weren’t really the tasks I was used to, like research and analysis of knowledge not directly related to my work. I went there sort of expecting to know it all, but was taken aback by the amount of interesting new stuff I had to deal with – even if they weren’t exactly new.

That also included technologies that aren’t, again, directly related to my work - if I hadn’t gone to college, I probably wouldn’t have yet learned of Max/MSP/Jitter and vvvv, and wouldn’t be hypnotized by the easiness with which their visual programming approach allows anyone to create rich interactive graphics. It’s no surprise I was so inspired by those programs that I even built a similar environment for my thesis project, and that alone would be reason enough to say that going to college was worth it.

And in the sense of doing different stuff, going to college also gave me the chance to go and teach some classes (Flash, Flash Lite, and Processing), something I was quite sure I would never do in my life. As all the rest, it was an amazing learning experience and something I’ll hopefully repeat in the feature.

And there were the people.

Now,  I don’t consider myself a recluse in any way. I like to believe I work well with groups of people, both in the workplace or otherwise. But going back to college was a kind of a surreal experience. My colleagues were on average 10 years younger than me, something that may not sound like a lot but that makes a huge difference when you’re talking about people still on their teenage years, so we had some differences to work with; I had to refrain myself from not saying “in my time…” too often, as some of the differences were enormous – no Internet when I was a kid! Phone lines were a lot more expensive! No cellphones or digital cameras! – but still, dealing with them, and watching them grow as people, was nothing short of extraordinary. I’ve seen people complaining that young people nowadays have everything at their feet but still are lazy as fuck, and I’ve done my share of bitching, but in all honesty, comparing some of my fellow students with the mindset I had when I was their age, they’re far ahead and bound for a bright future. Working with them was nothing short of a lesson about people and even about myself; I believe I’m a much person now than I was 4 years ago. I miss them already.

Truth is, going back to college so late for me was a bless in disguise. Going there with a lot of practical knowledge, even if with a lot more still left to learn, gave me the ability to understand so much better what teachers had to say. It was often that I would leave class with the perception that I had realized something extremely important about the world, or something that I had to read a lot more about; and yet, not all of my colleagues shared the same feeling. Not because they were stupid in any way, but because many times they lacked the contextual knowledge needed to properly understand what was being said.

I’ve always been of the opinion that going to college isn’t something of ultimate importance (that’s a sort of a big discussion around here) and, in some ways, I’m still like that; you can learn a lot, specially gather a lot more practical skills, doing real work instead of sitting somewhere with someone babbling over your ears, and I certainly would never have a problem hiring someone without a college degree. However, going to college at some point in time is something I now see as extremely positive, and something I strongly recommend to anyone – but only if you allow yourself to bask in its mind-shifting soup. It’s too easy to just go there and get a grade that’s good enough to carry you on to the next semester, I suppose, but then you’ll be going there just for a diploma.

With that stage bittersweetly out of the way, I can finally move on. That’s not to say I’ll be allowed to slack so soon – as I mentioned earlier, I’m working for Firstborn, and now that college obligations are over, I’ll be moving to NY to work with them. This means I have to spend holidays writing documents for the visa process – which is cool, though, as they’ve always been specially patient with me, and I’m really glad of the work I’ve done for them for the past year or so. So, thanks Francis, Dan, Michael, Luba, Avery, Wes, Will, Izaías, Joon, Jennifer, Maria, Ryan, Eric, Lauren, Takahashi, and Max, and everybody else, Firstborners and former Firstborners; it’s over now, and I’ll hopefully see you guys soon.

Also, while I’m at it, many thanks to the fine people at Grafikonstruct and Gringo, as this college plan wouldn’t have been possible (or would have been a lot more difficult) without their partnership and support.

Gringo.nu is also looking for senior Flash developers

Looking for a change of pace, living in one the craziest cities in the world with some extremely creative people who drink a lot and like to swear like drunk scotsmen? Or maybe you already fit into that description and you’re just waiting for the authorization to enter the building? Here’s your chance, Gringo is now looking for a senior Flash/Actionscript developer and they mention relocation is OK. Find more information about the ideal candidate here.

Gringo.nu is looking for a SilverLight developer

Top-level Brazilian agency Gringo is looking for a SilverLight developer. Gringo is located in São Paulo, Brazil, and this is for an on-site role. Details follow (in Brazilian Portuguese).

Enfim, a Gringo precisa de um profissional SilverLight pra se juntar à sua equipe supercompetente de desenvolvedores. O candidato ideal irá trampar a princípio de agora até março na Gringo, desenvolvendo um projeto bem bacana. Valores são negociáveis, e é imprescindível que o profissional cumpra prazos e toque o projeto sem maiores surpresas.

Quem estiver interessado, favor contactar Mylena Mandolesi no email mylena (arroba) gringo.nu.

Acho que não preciso nem falar nisso, mas a Gringo é uma agência que mais do que recomendo a qualquer um. Pra quem curte SilverLight, esta é uma puta oportunidade de trabalhar com uma equipe extremamente criativa e competente.

Upcoming talk: The work of ActionScript Developers in Brazil

For what’s it worth: I’ll be giving an (online) talk about ActionScript development in Brazil December 18 (next thursday), at 22hs local time, courtesy of the Adobe User Group for Rio Grande do Sul (AUGRS). This talk will be in Brazilian Portuguese only, and it’s aimed at people who want to know more about the Actionscript development field; I’ll be talking about my experience in the area, as well as how I see it working for other people. It’s not overly technical, but I’ll be talking a bit about the tools developers have available; it’s not overly personal, but I’ll be showing some of my work to illustrate my points and talking a bit about my experience to put things into context. Find more information about the event (including link to the presentation room) here.

The presentation will also be recorded and available later, as well as all material involved.

Update: the starting time has changed, and it’s now set as 22hs instead of 21hs. Sorry for that.

Update (2): the talk was recorded and is now available online. It lasts for around 1 hour for the main presentation, and another 45 minutes for questions. Thanks to everybody who attended! The turnout and the result was better than I expected.

Google Analytics does better Flash tracking

This is news to me: Google Analytics is updating their tracking features and adding better support for Flash tracking - it was possible before, but it’s just getting more native, as Google is even providing an AS3-based framework for that. Below’s the email that I’ve received through my Google Analytics admin account.

We are happy to let you know that the Event Tracking feature is now available in all profiles for the following Google Analytics Account ID: XXXXXX. Please note that you are receiving this email update because you are an ‘Admin’ or designated contact for the account listed above.

When you log in to these profiles, you will see a new set of reports called “Event Tracking” under the Content section. As posted on our blog, this is a limited release currently available only to select profiles.

Event Tracking allows you to track interactions with Web 2.0 style content such as Flash, AJAX, Silverlight, social networking apps, etc. We recently made tracking Adobe Flash even easier with the release of a new Flash Tracking client library. It allows for much simpler tracking of Flash content with drag and drop functionality and an open source framework.

To use Event Tracking, you will need to upgrade your site to use the new ga.js javascript. Detailed instructions on how to set up Event Tracking on your site are available on our CodeSite.

To find your ga.js code snippet, edit the settings for your profile and click the “Check Status” link on the upper right corner of the page. You can now track interactions beyond just pageviews.

Check the links above - it looks pretty awesome.

Ideas for Adobe Alchemy ports

As everybody knows by now, Adobe has made Alchemy - their C/C++ compiler for AVM2 (AS3-ish) SWF bytecode - available for download. We’ve seen highly visual demos, like Doom, and the old Quake 1 video where we got the first glimpse of what would become Alchemy. They’re very cool to show, and there’s some additional example libraries, but I guess Alchemy is ready for actual production uses of the technology; there’s not many such libraries shared yet.

Unfortunately I don’t have a long beard and I’ve never learned to be a proper C++ programmer, so the task of porting anything must fall on better hands. So, I’ll allow myself to post suggestions of a few libraries that I believe would make nice Alchemy ports in the hopes that someone more capable takes pity in our high-level, memory-managed struggle.

  • OpenCV is the standard free library used in Computer Vision projects - this means face, gesture, and motion recognition, as well as a lot more crazy skynet-like features. It’s normally used in platforms like Processing and vvvv. Having that available for Flash projects would be a real step forward.
  • Box2D is an open source 2D physics engine, largely responsible for the proliferation of physics-driven gameplay in amateur games. While we have Box2DFlashAS3 and other physics engines in Flash, having a straight port with better performance would revolutionize physics in Flash games.
  • ARToolKit is a library used for augmented reality - overlaying digital images into real world images. There’s also FLARToolKit now, but as with Box2D, a straight (if adapted) port would probably be nicer in terms of features and speed.

Honestly I have no idea of the portability for these projects; all I know is that they’re based on C/C++. However, they’re straight data processing libraries (maybe except for the rendering part of ARToolKit), so I think they wouldn’t be too limited by the player’s external capabilities and would make nice libraries to have available.

Why I love the ActionScript development community

I’m not very much of a radical, I believe, but I tend to judge development communities by the amount of negative or positive energy they seem to spread around. This is hard to put in objective terms, but as a positive example, I’d point to the PHP website - you have a fairly straightforward website and visiting the reference for each command will likely present you with hundreds of examples added by the community on how to use that command for all ranges of tasks. I’m not a professional PHP developer, but implementing features in PHP has always been super easy simply because of the community - the way they’re unattached to knowledge and unafraid to share it.

For me, the other side of the spectrum would be developing with Microsoft technologies. There are amazing exceptions like the XNA framework (which may be due to the nonexistence of a commercial exploration model until very recently), but overall finding answers or additional (free) libraries for certain problems using MS technologies has always been pretty difficult - for some reason, I always end up on forums and websites that require payment for solutions. There’s MSDN which is thankfully public, but I can’t forget how you had to actually buy the references in CD until some years ago, and I think that sort of approach influences how the community at large behaves.

So here I am, rushing to add Sound support to Fnk - the final version of the software for my thesis is due tomorrow. I manage to get FileReference (using the new Flash 10 capabilities which are now old hat in the whole project) to successfully load the data from a Sound file. Now I just want to play that. Simple, eh?

Not so fast. You can’t just feed Sound data to a Sound object - actually you can’t do that with any kind of “native” file that the player loads (to read a Bitmap, for example, I have to actually load the data as if it’s a Loader and .draw() it to a BitmapData).

But back to the point. I want to play sound from loaded sound data. A quick search on Google turns out this page, in which a guy talks about the very same issue and makes AS3 libraries for MP3 parsing freely available for download. Wonderful, I think. I mean, I’d love to implement it myself, or initiate an Adobe Make Some Byte Parsing campaign for a more native way to do it, but I’m in a hurry. So I quickly adapt it to my needs and 5 minutes later, Fnk is happily loading and playing MP3 data.

Then I compile an AIR 1.5 version of the app and it doesn’t work. Apparently it thinks I’m trying to load executable data and prevents the MP3 parsing classes from loading at all, throwing a security exception when the library tries to parse it.

It turns out a quick search on Google gives me this page where someone else tell what’s it all about and how to solve it. Bam, I patch my version of the libraries and I have it working 100% on both the Plugin and the AIR version of my software.

The ActionScript community may not have a central point of community knowledge like the PHP community does. But it’s amazing the amount of helpful folks and blog posts we can find when doing a Google search. This issue I had isn’t even something old and established - it relates to a very recent issue of a very recent feature. That there were people on it so fast and posting the solutions online amazes me to no end. Flash development may be something frowned upon by some of the most fervent free software advocates, but for some reason the community has managed to retain the ethos of a group where knowledge must be free and shared among everybody. I don’t know why that is, but it’s awesome.

Keith Peters said something similar (via Mike Chambers) a while ago and it got me thinking. It’s something I hadn’t realized at first, maybe because I already take that for granted. But the above experience I had just now was a wonderful realization of the impact of that all. I was thinking I’d need to implement my own MP3 parser, something that would probably be fun but take a while, or wait for Adobe to implement the data loading capabilities to this and maybe a dozen other classes… either way, I wouldn’t have that ready for my thesis. I read all kinds of ActionScript feeds daily, and I had seen no mention of that issue until then, so I really thought I was out of luck and ready to shove the standalone version aside and worry about it later; solving something so specific in less than half an hour was the kind of glad surprise I don’t always get.

So, thanks.

ANSI art, ActionScript 3 style

ANSI art visualization in the browser has matured: meet Peter Nitsch’s AS3-based ANSI Viewer.

He talks about it a bit more here. That work led him to create as3ansi, an ANSI parsing and visualization library for ActionScript 3. There’s a lot more about that here, with some sample code to illustrate; his event-driven ANSI parsing code is particularly awesome, considering the peculiarities the standard poses.

This may be hard to understand for people uninvolved with the underground BBS art scene around the 90’s, but for people who breathed that kind of 16-colored oxygen, seeing that come to life in a browser is wonderful - I spent a lot of time doing that and running a local ANSI art group, and heck, look at my business card. I’ve had my share of similar experiments about ANSI viewing in ActionScript in the past, but Peter’s work more than surpasses that. I can’t wait to see what the guys over at SixteenColors will make of it.

AIR 1.5 is out, Fnk follows suit

Holy deployables, Adobe has silently made AIR 1.5 available for installation today. Among other things, it now supports Flash 10; you can find more information here (source: Jen deHaan).

As I’ve just been waiting for it, I’ve now made my own crazy application/language/editor/experiment Fnk available as an AIR 1.5 application. You can install it from here (or a direct link to the .air file of the current version here). No fancy-schmancy AIR features yet; it has no auto updates or unrestricted file reading/writing or anything, so it runs pretty much like the browser version. But it’s certainly nice to see it running as a standalone application. As much as I enjoy having the ability to run something from the web (and it’s a core feature of Fnk), being able to double-click .fnk files and have them open on an editor is certainly convenient. Sort of ironic I guess, but since AIR allows us to deploy applications on both fronts almost seamlessly, I don’t have to choose what to support exclusively.

Compiling AIR Flash 10 projects with pure ActionScript code

Straight and to the point, hopefully as a reference, because I had trouble finding the answer to problems on specific parts of the process. This considers you already have a normal Flex SDK project setup in whichever tool you’re using (I’m using FDT).

  1. Be sure to download the latest version of Flex SDK command-line tools (I recommend the “Adobe Flex SDK” files, whichever version - stable if you wanna play it safe, nightly if you’re feeling lucky). You do not need to edit the config.xml files - it’s set to Flash 10 as default.
  2. Change your regular AS3 compilation procedure to use amxmlc.bat instead of mxmlc.exe for compilation. The same compilation syntax applies so this should be pretty straightforward.
  3. Create an AIR project. This page has a nice tutorial on how to do it. You don’t need to create the .mxml file though - as long as you use the same syntax you use to compile normal .as-based projects in mxmlc, it should work. Very important: the AIR XML file header should be set to use version 1.5. So the application tag start should read <application xmlns="http://ns.adobe.com/air/application/1.5"> instead.
  4. Run your application with adl.exe instead of flashplayer.exe.

Optionally, the complete AS3 reference (including AIR) is available online. You can also download it in zip form from this link.

And remember AIR applications built for Flash 10 will require AIR 1.5 to install (the current version is 1.1). This means you can compile and run your application locally without a lot of trouble, but if you try installing your packaged Flash 10-based application on AIR 1.1, you’ll run into a misleading message that says the package requires an “older” version of AIR and that you need an “upated” version of the packaged application. For the installation to work, we’ll have to wait for AIR 1.5, which will come “this fall”. You can find more information about AIR 1.5 here. AIR 1.5 is now out so applications built with the method mentioned above will work.