Category — News
RMI Releases Official FDT Training
The Rich Media Institute has just released a series of three courses in FDT (a.k.a, the Flash Development Tool), which is the most powerful IDE for Actionscript 2, 3 and MXML -- the only editor built from the ground-up to support the needs of ActionScript developers.
I'm posting here because this is the first and only official training for FDT available online, and so especially at this price ($9.99 each) this is a great resource for people looking to get up to speed with FDT, and I'm proud to have worked directly with FDT, Carlo Blatz, Bruno Fonzi, and expert Alan Klement to help bring this training to the public.
But, it's also another exciting first for the RMI. We were the first company in the world to offer training in Papervision3D; we held the second workshop in the world on Adobe Flex; we have the first and only online training in PureMVC; we have the only online training available providing business advice on freelancer contracts; and many more.
This new set of courses in FDT is another step in our effort at the Rich Media Institute to bring you outstanding and affordable training, directly from experts, in the specialized topics that you need and that are simply unavailable elsewhere.
December 8, 2009 1 Comment
Hearing Pictures – Homebrew Microphone Edition
This coming Wednesday, December 2nd, I'll be giving my new talk, Hearing Pictures at the LA Flash End-Of-Year Party. This will be only the second time I've given this talk -- I first gave it at the FITC Unconference at MAX 2009. Since I was speaking at an unconference (a less formal environment, with very different criteria for acceptability than the normal conference tracks), I used the opportunity to create a brand new talk on a sort of crazy idea that's been nagging me for a few years -- the idea of translating anything into anything.
The idea originated from a 1943 Hermann Hesse novel, The Glass Bead Game (also published under the title, Magister Ludi, after the protagonist). The novel focuses around the life of Magister Ludi, who is a member of a monastic-style order at a time in the future.
The central activity of the order is the Glass Bead Game -- it is their form of meditation. Although it is the central activity of the order, it is rather vaguely defined over the course of the text. Despite the lack of detail, the game has fascinated me since I read the novel. In the game, a glass bead represents an idea -- any idea -- such as an historical event, a work of music, a painting, a philosophical concept, anything. When it's your turn, you must play a bead -- that is, you must play an idea on the game board. But the idea you play (the bead you place) must be related to the idea (bead) placed by the previous player, thus over the course of an entire game creating a thread uniting widely disparate parts of human knowledge and experience. In this way, being a successful player of the game requires an agile intellect with the capacity to relate any idea to a wide variety of other -- seemingly unrelated -- ideas. Playing the game well requires fluency in math, music, language, history, art and science.
Ever since I started working with Flash 11 years ago, I'd always sort of envisioned Flash as a mini-Glass Bead Game. The term isn't really used any more, but when Flash was young, it was considered a multimedia tool. And, Flash took the idea of multimedia to a new level -- that is, despite its drawbacks, Flash has, since version 4, made it ludicrously simple to work with information of many different kinds. Flash supports character animation, motion design, text, audio, video, images, 3D data, live data, interactivity -- Flash basically supports any type of digital information (this is, more or less, literally true with the Flash Player 10 FileReference powers). So, using Flash, we can establish relationships between different types of information (which is what many of the early Flash luminaries did, in one form or another). Hence, my picture of Flash as a mini-Glass Bead Game.
The fact that, especially early on (until Flash 9), the most successful Flashers also tended to be the most eclectic, only strengthened this notion for me. Flash is really the only technology in the world that could give birth to a significant population of designer/developer hybrids (a.k.a., the deselopers), which speaks to the multi-disciplinary nature of the tool and the unique skill-sets that lead to success within Flash.
So, the idea of Flash as a Glass Bead Game kept percolating in my head for years, until I eventually decided to start trying to formalize the notion. The notion of creating a computer program that could translate anything into anything.
But of course, that's an insanely complex endeavor. So, I wanted to find a more focused niche that could serve as a starting point.
Then, Flash 9 came out, with its enhanced sound powers. All of a sudden you started seeing real-time audio analysis in Flash movies -- sound visualizers translating sound into pictures. Now, of course, sound visualizers have been around for a while, but now I could build them myself, using the ActionScript code I already knew. And the thought occurred to me to create a machine that worked in reverse -- translating pictures into music. Still, even with Flash 9's powers, it was a frustrating go. But, when Flash 10 came out, with the SampleDataEvent, I lost all excuses and picked things back up.
Of course, with the amount of time I've been able to spend on the project, it's not even properly called a 'hobby'. And so, I'm now six months into what I consider to be a 40 year endeavor, and I have a few little experiments to show for the effort. Those experiments -- and the thought that went into them -- is what my talk at Wednesday's LA Flash End-Of-Year Party is about.
But, that's not what this post is about.
One key limitation of this entire process is that I'm working with digital information. Now, I'm not complaining -- the fact that all information is digital is what permits us to execute the cross-modal translations with relative ease (i.e., it's easier to translate a picture into music, if both the picture and music are stored as 0s and 1s). However, working in digital is also a bit creatively limiting. When composing music on the computer, I'm composing from audio information already stored on the computer -- more like playing a synthesizer than a piano. Again, that's fine, but I thought it would be fun to start experimenting with analog inputs and outputs (which I can read and control from Flash using my MakingThings Controller Board).
About a month ago, I picked up a copy of Handmade Electronic Music: The Art of Hardware Hacking, which describes, in a series of clearly written chapters, how to go about assembling synthesizers from inexpensive, easily available hardware.
I'm not done with the book yet, but in the early chapters, you learn how to build your own microphones -- a few different types, including contact mics, compressor mics -- even electromagnetic mics (microphones that 'play' the sounds of the electromagnetic fields that surround the microphone).
When I rewrote the Hearing Pictures presentation this past weekend I found a neat way to integrate one of these piezo contact microphones into my talk. A contact microphone is one that can pick up vibrations in a surface, but not from the air. So, you can plug the contact mic into an amplifier, then hold the contact mic up to something that is vibrating and you will hear the vibration through the amp. They're fun to play around with (you can even hear the sound of metal heating up with these mics).
The simple, cheap (<$1.50) contact microphone that I've built relies on a Piezo disc, or piezo sensor (~$0.75). These Piezo sensors rely on the Piezoelectric effect (discovered by Pierre and Marie Curie in 1880, but not industrialized as a sensor until the 1950s) to convert pressure, acceleration, strain or force into an electrical signal.
You need a:
- Piezo disc
- An amp
- An audio jack (that fits your amp)
- A little bit of audio cabling
Audio cables are composed of two wires.
Step 1) Take one wire and solder it to the outer plate of the piezo disc, and solder the other end to one hookup in the audio jack.
Step 2) Then take the other wire and solder it to the inner plate of the piezo disc, and then solder the other end to the 2nd hookup in the audio jack.
Step 3) Plug the jack into the amp, and start rubbing your piezo disc against things to see how they sound
That's it! You don't even need a battery to power this mic. As you'll quickly see, you can not pick up any vibrations from the air -- so it's totally unusable as a traditional mic (read the chapter on building a condenser mic if you're interested in that). But, if you place it on the end of a styrofoam cup, and then speak into the cup, you have a neat Halloween microphone!
If you're interested to see how I integrated this contact mic into my talk, well then, all I can say is, show up on Wednesday. It's free, and it'll be a really cool and interesting talk. (Oh, and there's free beer -- did I mention that?).
Share and enjoy!
-r
November 30, 2009 Comments Off
A Fond Adieu to LA Flash
As I've now announced, this December's LA Flash meeting will be my last as manager of the group I founded almost seven years ago. As this feels like a particularly significant move, both for the group as well as for me, personally, I wanted to take a few moments to explain why I feel that the time has come to move on from my post in active leadership of our community.
First, I should begin by explaining that it has been an amazing opportunity and privilege to have been in the position to found and build from scratch LA Flash -- what has become the largest Adobe User Group (AUG) in the world, with over 3,000 registered members. As a Jersey native, Los Angeles is my adopted home, and one of the aspects of life out here that I find so rewarding is the extreme degree of creativity here in this city. Every city has creative people, creative work, creative neighborhoods, but in Los Angeles a sense of creativity seems to permeate so many aspects of the entire city -- particularly so in places such as Venice, which has been LA Flash's home for over four years. And, while LA's Flash community may not be as sophisticated on the engineering front as that in other cities, LA's mixture of animation shops, ad firms, interactive agencies, and tremendous freelancer community breeds a unique perspective on working with this technology.
Around 2002, after struggling with my freelance career for a few years, and learning the ins-and-outs of working in Los Angeles, I realized that while all cities can benefit from improved community, a city as disparate as Los Angeles really required a community to serve as a platform for talent to build connections, get work, build their careers -- and for us to build an industry. When I sought and interviewed for work, I had to explicitly explain that 'no, I'm not a web designer; I'm a Flash developer' and then, of course, I'd have to define what that meant -- and, more often than not, they didn't really get it. Potential clients would ask 'can Flash really handle this?' and 'isn't Flash just sort of a messy joke?' Instead of selling myself and my services, I also had to sell the idea that Flash was a real technology worth using. Things are tough enough when you're a freelancer; you can't handle educating an entire community on your own. And if no one else was going to step up, I figured I should -- as I was a full-time graduate student at UCLA, and working full-time as a contract Flash developer, assuming the responsibility of creating and running a group was perhaps only slightly insane.
So, one day in early 2003, I emailed Macromedia, bought the domain name, and the rest just sort of took its course from there.
All along, I've had two goals: first, to contribute to the establishment of a well-defined and mature Flash industry here in Los Angeles, through education and networking; and second, to do so for no cost to the membership.
Along the way, eschewing the traditional model of an Adobe user group, we've experimented with the type of events we run. Not satisfied to run regular meetings, and exploiting the awesome Almer/Blank warehouse here in Venice, we've run several events each year that feature unique line-ups and entertainment. This effort has culminated in the development of LAFlashapaloozastock (which we've run four times, the two most recent produced by FITC) -- what is, in all honesty, one of the best Flash events in the world, and is always free to the community. But, we don't need the excuse of a special event to provide great content -- even our regular monthly meetings have top-notch speakers, both from our region (including individuals such as Jon Ruppel, Andrew Keegan and Troy Gardner, among others), and from the broader industry (Robert Reinhardt, Joshua Davis, Grant Skinner and Colin Moock, to name just a few). We've also frequently hosted our meetings online, using Adobe Acrobat Connect -- opening up access to our content to an audience who otherwise couldn't attend. And we've given away tens of thousands of dollars worth of software to our members.
In short, I've worked hard to provide great content, and great experiences, to our community, for free. And, in return, before I had an agency, or even anything of a name, LA Flash helped me establish both. And I've built a fantastic network and learned a tremendous amount about community leadership in our city -- what works and what doesn't; what people respond to well, and not so well.
Which leads to the question of why I'm stepping down, and why now.
In the course of LA Flash's existence, our industry has matured -- significantly -- and as such, I feel that the original mission I set for myself is no longer relevant. I started LA Flash to help professionalize and mature our industry. And, while the process will of course continue, I think we've reached a point at which things can be said to have matured. Today, I no longer have to explain to clients what Flash is -- instead, clients approach us already knowing that they want Flash work, and Flash is widely respected almost as a standard akin to HTML and JavaScript. Whereas a few years ago, big ad agencies that might have had one 'Flash guy', today those same firms support entire teams of Flash developers (with discrete and specific skill-sets within the Flash Platform), while other firms who were essentially start-ups when LA Flash was created (such as Schematic and Blitz and Userplane), are now well-established successes. Many of my fellow freelancers whom I knew at the start of LA Flash -- people who, like me, couldn't afford to rub two dimes together at the time (including Jennifer '30-Second-Bunny-Theater' Shiman, the Influxis boys and Samuel Asher Rivello) -- are now well-respected and successful members of the industry. It has been a really tremendous experience to come up in the industry along with such a dynamic, creative and cooperative set of individuals as our Los Angeles region has fielded. But, as our industry enters this new phase, I think our community needs to shift gears accordingly, and it's an appropriate time to shift management who can oversee the community through this new phase of our history.
At the same time, as will likely not surprise anyone, running a group isn't always easy -- at times it can be quite draining. Thinking of and communicating with speakers, scheduling meetings, dealing with sponsors and maintaining the site all add up. Because I've always run LA Flash as a non-revenue generating enterprise, all of this effort is uncompensated. As well, as the number of user groups around the world has significantly increased, Adobe has unfortunately been unable to increase support for the user groups correspondingly. And, Adobe does not scale support based on the size of the group -- LA Flash (7 years old with 3,000+ members) gets as much support from the Adobe User Groups program, as would a 12-member group in the middle of North Dakota. So, as overall support for user groups has diminished, I (along with a few others who run large groups) have felt a particular pinch due to the perverse incentive that punishes success -- allocating the same resources to all groups, despite their size.
As a result, while we owe the budgets for our special events to our sponsors (who have included Artisan Creative, 24 Seven Talent, Aquent and Match Creative, as well as Adobe), LA Flash would not have been able to operate on an on-going basis and produce our content and events, had it not been for the constant support of my two firms, Almer/Blank and the Rich Media Institute -- always providing a great facility for our events, as well as the time of my team members and a discretionary budget for basic items. This de-facto underwriting of LA Flash by my businesses increases my personal burden associated with running the group.
While the requirements of running LA Flash have increased along with it's growth, so have those of my personal career and life. When I founded LA Flash, I was a freelancer. Now I run an agency (Almer/Blank), a training company (the Rich Media Institute), I regularly travel to teach and speak at conferences, and write for various outlets. I'm also engaged. As my capacity utilization rate approaches 100%, I've had to face the fact that I can not afford to spend the amount of time on LA Flash as I used to. And I'm not the only one. Many of the original members of LA Flash -- the ones who showed up at each meeting for our first few years -- have also become too busy to regularly attend our meetings. So, while overall meeting attendance remains stable, there is an increasing amount of turn-over, and there are fewer and fewer regulars. The increasing absence of familiar faces has, unfortunately, further reduced my desire to invest the required time into LA Flash.
Finally, I've continually experimented with the model of events that we run here at LA Flash -- just as KCRW is a unique version of NPR, I'd like to think that LA Flash is as unique an Adobe User Group. But, there is only so much I can do within the confines of a product-specific user group. The experience of running LA Flash has shown me the types of events I'm truly interested in running -- not standard user group meetings, but instead events more like LAFlashapaloozastock (combining talks and education, with live entertainment and parties). I'm currently working on establishing a platform that will allow me to throw these types of events, which I hope to begin running in 2010, so stay tuned!
Before signing off, I would like to doff my hat to those of you who have given, above and beyond, to help make LA Flash the brilliant resource it is. Over the past seven years, there have been many people who have contributed their time to make our group and our events shine -- too many for me to name here (with too high a risk that I'd miss a whole bunch of you). But, in particular, three members of the community have stood-out with their outstanding and generous contributions of time and resources to the benefit of the community.
- Leslie Wintner, whom I met at the very first LA Flash meeting, who is my current co-manager, and who has managed our group library (including all publisher relationships) and authored our newsletter for years before that
- Elliot Mebane, who became involved in the group almost immediately after he showed up at our first meeting, first by creating and running the 'crit' -- sessions to have the community critique your work -- and later, by managing a second user group under LA Flash, the LA Flash eXtension (LAFX, which became LA AIR before dissolving)
- Stephanie Warner, who for years, was effectively my co-manager (when co-managers were not formally recognized by Macromedia), and helped me setup and run many of our events in the early years (and who was a vital part of assembling the very first LAFlashapaloozastock in 2005)
And, though he is not a member of the community per se, the effort of Jonathan Menendez (whom I met and hired as my first intern at the first LAFlashapaloozastock, and who is now my personal assistant at Almer/Blank), has been vital in permitting me to continue running LA Flash these past few years, as my workload has increased.
And so, with that, it is almost time to say goodbye (I'll do so formally, on December 2nd, at 7P). But, of course, this is not the end of LA Flash -- indeed, it is the beginning of a new phase in the history of LA Flash, in the hands of fresh and energized leadership, two of my talented employees at Almer/Blank, Omar Gonzalez and Harald Koebler.
I would like to thank you everyone who was ever, in any way, involved in LA Flash, even if it was only by attending one meeting or writing one forum post. Communities only ever succeed if they exist; my role has been to serve purely as a catalyst. Los Angeles has a fantastic community, and that's how something like LA Flash can happen. Over the past seven years, we've all been a part of something that has been really unique and special -- it's been like a seven-year long Flash mob! -- and I thank each and every one of you for making that happen.
The manager is dead; long live the manager!
-r
November 23, 2009 10 Comments
The Creative Chip @ FITC
After having an account for some time now, I've *finally* added my first post to the FITC Blog. Entitled, The Creative Chip, I talk about the work of Stanford Professor Kwabena Boahen's work on the Neurogrid, a new computer chip based on neural computing rather than traditional models of digital computing.
Share and enjoy!
-r
November 22, 2009 Comments Off
Quick Note on OSMF 0.7
I've started work on the next installment of my training on the Adobe Open Source Media Framework (OSMF) (following my course on building a progressive video player with OSMF, published last month). And in the roughly 6 weeks since I built the code for the last course (using OSMF 0.5), we've seen two revs of the OSMF codebase, which is now in rev 7.
The framework is definitely more solid now, but, since it's still 'beta', they continue to shift things under the hood. [Read more →]
November 10, 2009 3 Comments
Growth and/vs Innovation
Earlier this week, I caught this post from Matthew Yglesias, and it triggered me to think a bit more about this idea of the relationship of growth and innovation.
Considering the economic value of the printing press as being measurable solely through the economic activity of the publishing industry is obviously an overly narrow interpretation of economic impact -- and I'm not sure why he chooses to do that. You could make that argument with certain other types of innovations (such as a new book binding glue), the impact of which might be argued to be limited to the book publishing industry, but the printing press powered information sharing, documentation, communication, learning -- and, of course, commerce. It's like arguing the economic value of the internet can be measured solely through the economic activity of bloggers.
Externalities, such as in this printing press example, are not reflected in, or susceptible to audit through, objective economic indicators like GDP (on a macro level) or a firm's balance sheet (on a micro level). The inability of our economic system to track and account for externalities is, perhaps, the single largest flaw in our conception of economies. This is but one example. It does not mean the economic value does not exist -- it means that we can not objectively quantify the economic value of many different types of activities.
Secondly, however, the post does not account for society's ability to influence which activities are economically valuable. Societies (and economies) do this on their own through the aggregate decisions and output of many individual actors (the invisible hand, as it were), and cultures and governments can guide, foster, encourage or squelch these trends. Obviously, when a government invests in an interstate highway infrastructure, the traceable economic impact of Henry Ford's innovations skyrocket. So, the US government, through its allocation of funds and resources to support a specific activity, directly influenced the translation of innovation into economic value. Contemporarily, we see an example of private attempts to spur innovation in space travel with Ansari X Prize, and in the public sphere we have policies such as the one here in California granting the carpool-lane access to registered hybrid gas-electric automobiles to spur consumptions of Priii and Insights. We can choose to make it easier or harder for specific innovations (and the firms that pioneer their implementation in commerce) to prosper or fail in their attempts to translate innovation into value.
But, finally, we have the fact that any of this even needs to be stated. There is a syllogistic assumption in American commerce that:
a) growth fuels capitalism
b) capitalism fuels innovation
c) thus growth fuels innovation
Each of these three statements is obviously only partially true. Growth and innovation are not the same thing. Sometimes the interests of each come into conflict, and in American commerce, when they do -- which is often -- the need to grow or protect shareholder value almost always trumps the interests of innovation. And, as the evaluation horizon for these decisions affecting shareholder value becomes increasingly short-term, the tension between these forces only increases. You can make a solid argument that capitalism provides a sufficiently good spark for innovation, given its other benefits, or that it is the optimal spark to economically valuable innovations, but it is most definitely not the ideal system if the top goal is to foster innovation overall.
One of my favorite, if slightly cartoonish illustrations of this, is the 1951 film, The Man in the White Suit, the plot of which IMDB summarizes in a single sentence, 'An altruistic chemist invents a fabric that resists wear and stain as boon to humanity but both capital and labor realize it must be suppressed for economic reasons.' In short, the small factory town, which depends on the fabric mill for its livelihood, attempts to lynch a scientist for creating an indestructible suit -- a suit that would never require replacement -- thus negating the economic activity of the town and decimating the livelihoods of the citizens. Again, an extreme, cartoony example of what is a very real dynamic of often opposing forces.
Innovation costs money. Innovation carries risks. Certain innovations can reduce consumption. These are all quite contrary to the directives of business owners. Growth is a reliable path to making money. That's what a true capitalist wants.
This leads to something I've been wanting to post for a couple of weeks. A few years ago, a friend forwarded me a link to the infamous 'Microsoft Designs the iPod Package' video (which predated the release of the Zune by a year or so). The not-unbelievable result of the satire was to turn Apple's iconic packaging into:
Well, just recently I read that this video was actually produced in-house by Microsoft people. It was intended to spur innovation in the internal operation of the firm, not by lamenting or satirizing the pathetic nature of their packaging (which is what viewers like me assumed when we first saw the video, several years back), but instead, as Erik Peterson writes, to illustrate:
"None of the decisions shown in that video were made through incompetence or bad intentions. Microsoft hires the most talented, driven, highest-paid people in the world. It’s just that, as more and more people give their well-meant input, the combined effect is a boring, overloaded, unremarkable result."
So, in order to foster innovation at one of the world's largest and most valuable corporations, they produced this video.
And, one year later, when Microsoft produced the Zune, their package was the slickest, cleanest and coolest that the company had ever produced (even in comparison to the XBox).
Perhaps not an innovation along the lines of the printing press, but still a great example of how it is possible to innovate within large firms -- but the sparsity of examples indicates the degree of difficulty associated with fostering innovation, illustrating that growth and innovation are two separate forces. They are correlated forces, but they only sometimes act in concert, and sometimes they operate in direct opposition to one-another.
November 7, 2009 Comments Off
CBS.com Video Player Full Screen Bug
My fiancee and I were watching 'TV' last night. (I say 'TV' in quotes because, since getting FiOS, we don't actually watch TV anymore -- opting instead to consume most of our media through Hulu, Netflix -- and, of course, South Park Studios).
But last night, she had a hankering for Medium or Ghost Whisperer, and searching Hulu we discovered that Hulu links to CBS.com to watch these shows.
We *also* discovered that we dislike the CBS video player a great deal. One of the key UX issues, from my perspective, is how the ads take over the page -- not just the player -- in effect totally obscuring the player. And it does this in such a way as to require a keen eye to realize you're watching an ad that you just need to wait through before you can watch your show.
But, that's just a small annoyance. What was much worse was a full-screen bug we discovered. The context for the bug appears to be:
- watching in full-screen mode
- in a two-monitor setup (like the one we have for our home entertainment system)
It seems that the CBS player doesn't calculate coordinate space properly in full-screen mode. The upshot is one of two scenarios (screenshots below). Both screenshots represent a capture of the entire screen in full-screen mode -- one at 1280x800 and one at 1920x1200.
In the first, you'll see I only see the upper-left of the player in full-screen mode -- cropping out most of the video and all of the video controls. Good thing I know to click 'esc' to exit full-screen mode! And in the second, you'll see that full-screen mode only makes use of the top half of my monitor (so, it's more appropriately termed half-screen mode, I suppose).
- Full Screen – Truncated
- Full Screen – Unused
Well, because I've encountered this bug in the past, and know exactly what was causing it, I knew to switch my monitors to mirroring mode would fix the issue -- and it did, and we watched the Ghost Whisperer. But, every other major player out there works just fine for us, we should not have to change our monitor setup to watch CBS content (and I guarantee my fiancee would not have known to do that on her own, if I hadn't been watching with her). If CBS isn't going to allow me to watch on Hulu, then they should really get someone to fix their Flash video player.
ahem! Just FYI, Almer/Blank does that sort of thing a lot
.
November 4, 2009 3 Comments
My Favorite Paid Mac Apps
A little while ago, I updated and reposted my notes on my favorite Mac freeware, including a bunch of neat little doo-dads and betcha-didn't-knows. But, even with the wide variety of freeware available for Mac, sometimes you just gotta pay for the feature, functionality or performance that you are looking for. And, fortunately, most of the time, these tools are priced pretty reasonably. So, take a look through this list and see if maybe there aren't a few tools you should consider investing in. Oh, and I'm not including tools of the trade -- big-name items like Adobe CS -- since I'm assuming you know which tools of your trade you need. In all cases, see the linked URL for current and accurate features and pricing.
So, without further ado, and in no particular order....
__________________________
PathFinder 5 from CocoaTech
PathFinder is, well, the Finder you didn't even know you needed. It's a really amazing tool. I stumbled upon it one night a couple of years ago, because I was searching for a way to do tabbed browsing in the Finder -- I couldn't believe that Apple made it easier to browse the web, than your own computer! So, I found PathFinder, which was (at least at the time) the only was I could find to use tabbed-browsing of your local computer. And once I started using it, I realized it did so much else, including a local bookmarks bar, saving panel sets, editing images, in-line terminal and SVN integration, drop-burn lists, viewing binary hex values -- and so much more! And since then, the feature set has only increased, adding items like dual-window browsing. The software is actively supported (with frequent updates) and it really is amazing how you just keep discovering more and new features all the time -- MacOS is a better platform because of PathFinder.
__________________________
Charles
I know I said I wouldn't include tools-of-the-trade, but to me that doesn't include utilities of the trade, since these little utilities can be so useful to so many people. And I'm still shocked at how few web devs on Mac know about Charles. Charles is a powerful, light-weight HTTP proxy that allows you to know everything there is to know about all HTTP activity on your computer -- requests that go out, responses that come back, packet size, timing, values -- *everything*. And, it has other features like bandwidth throttling. If you do any web-software testing, you need Charles.
__________________________
XScope from IconFactory
http://iconfactory.com/software/xscope
XScope is the best set of screen utilities I've found on Mac. It includes:
- screen guides
- screen frames
- screen cross-hairs
- screen rulers
- screen resolution indicators
- screen magnifier
- screen dimenions (pretty neat and hard to explain, but it auto-detects and measures regions of your screen)
Small, light-weight, cheap and useful.
__________________________
CrossOver from CodeWeavers
http://www.codeweavers.com/products/cxmac/
Want to run Windows apps without running Windows? (Yes, really). Then, CrossOver's for you! Now, not every Windows app will run under CrossOver, but a lot of them do, and then you can run them without running Windows (and launching Parallels or Fusion).
__________________________
iWork from Apple
Still using Office for Mac? Seriously? You are? Get over it. ~$80 for desktop publishing, slides and spreadsheets, and open/export all standard Office formats. Just do it.
__________________________
VoodooPad from Flying Meat
http://www.flyingmeat.com/voodoopad/
While I love Apple Pages, it doesn't do what Voodoo Pad does. I discovered Voodoo Pad a few years back when looking for a tool to author long project specifications. The key issue is that project specifications beg for a web-like format -- that is, hyper-linked pages of content. No desktop publishing tool -- Pages or Word -- does this particularly well. But, the tools that do accomplish this well -- wikis -- are too slow (because of web latency) to write long documents well or effectively, or at least without huge amounts of frustration. Enter Voodoo Pad. Write a website using a desktop publishing tool. In the middle of a page, decide the term 'Paid Mac Software' should link to a new page? Well, select that text, hit Command-L, and boom! you've made a new page named 'Paid Mac Software' and the text you selected links to it. Any time you write 'Paid Mac Software' from now on, a link to this new page will automatically be generated. Want an image in this page? Drop it on there from Finder! Want an external link? That's not a problem either. So, Voodoo Pad is Desktop Wiki Publishing. And, with Voodoo Pad, it's really easy to create your own export templates, so you can actually export your Voodoo Pad doc at any time to a complete website. The free version is used to open any documents and author documents up to 25 pages. Buy the paid version to unlock the page limit, and there is also a higher-end version with some fancier features that I do not use.
__________________________
TextMate from Macromates
I came across TextMate when searching for an alternative tool to author ActionScript files. While TextMate does not support ActionScript out of the box, it does support these things called Bundles, and it turns out that lots of people write bundles for TextMate. One of which supports AS3 color coding. But there are bundles for so much else out there -- including important features like XML-validation. It also supports projects (groups of multiple files in multiple locations) out of the box. It launches almost instantly and is largely customizable (you could even hook TextMate into a Flash compiler to execute single keystroke SWF compilation from your TextMate projects). Given how annoying TextEdit can be (I JUST WANT SOME RAW TEXT, APPLE! Is that too much to ask?), I use TextMate as my default text editor of choice.
__________________________
MailTags from InDev
MailTags is a neat little utility that helps make Mail a more valuable tool, with tighter integration into iCal. When reading an email, you can quickly apply any custom flags (which you can pre-define) and tags (which you can write on the fly) to that individual message. So, whereas Mail comes with 'flagged' and 'unflagged' as the two flag statuses, with MailTags, you can create dozens of custom flags (such as, perhaps, 'to reply to', 'to document', 'to call', etc) and then assign a specific flag to any message. And you can tag a message in the same way that you can tag a blog post or a YouTube video. Once tagged, it's of course quite easy to search through all your mail using the tags you've used. The feature I use the most is the one-click iCal event/to-do creation -- with one click from any email, create a new iCal entry with a deadline, linked back to this message. There are plenty of other features, and I am certainly not a power-user of this nifty utility, but even being able to apply notes to a message and create iCal events linked to a message, is great for my workflow.
__________________________
Clips from Conceited Software
http://conceitedsoftware.com/products/clips
There are several pasteboard utilities out there for Mac (and Butler, which I covered as a great piece of Mac freeware, includes a multi-pasteboard as just one of its features), but no pasteboard utility seemed to match the power and elegance of Clips, which is why I ponied up the dough to pay for this app. Clips records each time you copy or cut to the pasteboard, and sorts those clippings:
<ul>
- in chronological order
- from which application the data originated
- from which space the data originated (if you run with Spaces enabled)
</ul>
So, for example, it's not only easy to view a reverse-chronological list of all clipboard items, but it's also quite easy to view the clippings that you copied from Safari alone, or only those you copied from space #2. To paste, simply find the clipping you want (Clips is accessible via keyboard short-cut and menubar icon) and select it to paste.
You can also create custom pasteboards (if there's a WordPress code-snippet, for example, that you find you frequently need when authoring blog posts) and you can even share clipboards over the LAN (though, no idea why on earth you'd want to!, but maybe that's just me).
__________________________
Things from Cultured Code
http://culturedcode.com/things/
I've been a fan of 'getting-things-done' (GTD) tools for some time. (If you don't know what GTD is I started out with iGTD, which is a great piece of freeware if you're looking to get started with GTD. But, when the author of iGTD took a while to create version 2 (isn't it great how I feel entitled to complain about free software?), I started searching for alternatives in the maturing space of GTD tools. At the time, there were a few, including OmniFocus. As you can see below, I'm a huge fan of the OmniGroup, but just didn't like how they handled GTD. After trying these tools, I realized that the big thing they were lacking was a 'today' feature that worked right for me. I'm a busy guy and maintain a huge backlog and have a pretty crazy and unpredictable schedule. So, I'd like to be able to sit down and quickly drag items onto a list that I hope to tackle today. And Things let's you do just that. Don't feel like working on something today? Drag it onto a specific day (so that item will automatically re-appear under today on that date), or set it to 'someday' (for future reference, so you can get to it when you can get to it). Things supports a tags-based workflow, that they consider to be very flexible and key to working with the tool -- and maybe they are right -- but I've found myself able to get a lot of value out of this tool without having to use the tags features even once. Again, there are a lot of features I'm not even discussing here, but if you're looking for a GTD tool, I'd really recommend this one.
__________________________
Yojimbo from Bare Bones Software
http://www.barebones.com/products/Yojimbo/
I think one reason people who try GTD and fail, is because they confuse information storage with task management (and the fact that some people use Journler and Yojimbo for GTD I think proves out this point). One important part of personal information management is learning how to separate information from tasks. While I use Things for task management, Yojimbo is the tool I use to handle information storage. In many ways, you can think of it as replacing/supplementing the Finder. Create folders (such as 'personal' or 'work' or 'family' or whatever you want) and then store whatever you want in them. You can create 'notes' that can contain RTF formatting, PDFs, images and any other files, or you can archive webpages, or you can create passwords (so you can easily store, for example, your Gmail password), or you can create serial numbers (so you can easily store/reference software serial information). Any entry (a note, a password, an image, a serial, etc) can be tagged, and stored in a folder, for easy and rapid filtering. And (vital given some of the information, such as passwords, that might be stored in the Yojimbo database) you can encrypt any entry using your OS password. I've used Yojimbo for years, and it really is powerful and simple.
__________________________
OmniGraffle from OmniGroup
http://www.omnigroup.com/applications/OmniGraffle/
I'm really not sure to which broad class of tools OmniGraffle belongs, but I suppose it's like Visio for Mac -- so it's what I'd call a 'rapid drawing tool', which we adopted for wireframing at Almer/Blank back when it was in version 4. The metaphors changed pretty dramatically with version 5, but the tools still fills the same basic region of our firm's workflow now as it did then. In OmniGraffle, you draw with shapes on canvases. You can assemble the shapes into stencils of shapes and complex shapes. You can use the stencils that come with it, or download a wide number of additional stencils available for free, and OmniGraffle makes it mad easy to create your own (just right-click on any stencil and select 'New Stencil'!). Once you have an instance of something (say, a rectangle) on your canvas, OmniGraffle makes it very easy to work with with intelligent resizing and repositioning with the mouse, and a properties inspector (think Keynote). And with Master Canvases (OG4) and Shared Layers (OG5), it's possible to create shared elements (say, the frame of a website) that are maintained in a single location. So, in short, OmniGraffle makes it incredibly easy and fast to create sophisticated and accurate wires and prototype designs.
__________________________
OmniOutliner from OmniGroup
http://www.omnigroup.com/applications/omnioutliner/
Well, there's not much too OmniOutliner beyond it's name -- outline anything. It's a tool to create multi-tier lists, or outlines. Want to write a new book? Start with an outline! Want to write a new talk? Start with an outline! Need to have a serious talk with your girlfriend? Start with an outline! Outlining is how we should start any number of processes (such as the ones noted above), but somehow we think that the outlining functionality of Pages or Word is enough. But it really isn't. OmniOutliner is a small, light-weight tool to handle outlines. Create new items, move items and groups of items around, collapse items, shift the tiers to which the items belong, and check items as complete. That's about it, but man is it helpful!
__________________________
OmniPlan from OmniGroup
http://www.omnigroup.com/applications/omniplan/
OmniPlan is the OmniGroup's stab at project management software. I like to see it as the perfect example of the 80/20 rule. It contains the 20% of the features of MS Project, that constitute 80% of what you use MS Project for -- and, at something like 20% of the cost, too. It's much simpler than MS Project, but the simplicity doesn't come with a trade-off -- in fact, the simplicity makes it possible to get more done, sooner, and much easier to get new talent up to speed with the tool (and, because of it's similarity to MS Project, someone skilled in Project could also pick it up in under a day).
__________________________
Cornerstone from ZenAware
Man it took a LONG TIME before we got a decent graphical SVN client on Mac, but when you see something like Cornerstone, you understand why it's been worth the wait. All of a sudden you've gone from envying to ridiculing your PC friends running Tortoise! Easy click interface, all the SVN functionality you need/expect, nice diffing, change tracking -- everything neatly tied up in a sexy bow. But, for performance reasons: just remember to disable automatic refresh on all repositories and working copies (View > Refresh Automatically).
__________________________
ScreenFlow from Telestream
http://www.telestream.net/screen-flow/overview.htm
My final entry on this list is also something I use for work -- ScreenFlow is the tool that I (and the entire Rich Media Institute) use to create all of our training. For years, we've been told that tools like 'SnapzPro', 'Camtasia' and 'iShowU' are great examples of screen capture tools. But, my friends, it turns out that for years, you and I have been cruelly deceived! What does ScreenFlow do that these others don't? I'll try to explain simply:
1) Record your screen, your mouse, your webcam, your computer audio, and your microphone audio, all as SEPARATELY EDITABLE TRACKS
2) Then edit those tracks in an interface simpler than iMovie
It's really that simple. And, unlike with tools like Camatasia, there is no rendering time during or after capture (so creating and saving captures takes no time, which makes it practical to screen capture live workshops). And, with version 2 (just released at the time of writing this post), we have a massive upgrade, enabling some really useful features (not worth getting into in this post, but as a power-user, I can say that many of these new features are quite valuable).
November 4, 2009 3 Comments
ActionScript 3 Display List Event Flow
Download the Flash CS3/AS3/FP9 Source Files for this post
I've *finally* completed and posted a version of my ActionScript 3 Events workshop to the Rich Media Institute Online. I wrote the first full draft of this course almost a year ago, and I first taught it live in Los Angeles in May -- and now I've finally completed a version for online entitled, Unlocking ActionScript 3 Fluency: Events and the Broadcaster (see below for an extended excerpt of that course).
I gave this name to the course because I believe (and argue in the course) that events really are the glue that bind everything together, and understanding events is vital to achieving fluency in ActionScript 3. Understanding how to reduce the potential for errors in your code makes you a better coder; understanding how to work with and around events makes you a fluent coder.
Stated another way: everything in Flash is an object. There are two ways to make your objects communicate:
- Direct references: which even your grandmother knows not to use if possible, since direct references create less maintainable, less reusable, and more spaghetti-ish code.
- Events: which are dispatched and heard, and are like butter to work with
So, since objects need to communicate to do anything cool or complex, and since events are really the only clean way to have objects communicate (until you get into advanced stuff, like frameworks), well it looks like you need to understand events if you want to do anything fun, cool or sexy!
Fortunately, events in AS3 are not that hard to work with -- in fact, they are incredibly consistent and pretty darn easy. They do have some pretty key limitations, but there are several ways around them, and my course teaches a CustomEvent and a CustomEvent Broadcaster as two such solutions.
But before we get that far, there is one very most important aspect of working with events in ActionScript 3, a concept that many users of Flash do not understand when walking into my course. This concept of Display List Event Flow can be stated in two simple bullets.
Events in Flash:
- are objects
- that can travel
Unlike in real life, where an 'event' is likely not tangible (try touching a party), events in Flash are as real and tangible as anything else, such as a MovieClip. Events have properties and methods, and they exist and occupy memory -- just like any other type of object. And these events have a lifespan -- they are born, they travel (or 'flow') and they die.
Because Flash is an inherently visual platform, it is not surprising that the native event flow in Flash is inherently tied to the Display List -- the tree formed by the relationships of the display objects on our stage -- which can change each frame (since the MovieClip that's on my stage on this frame, might not be there on the next frame). To help you visualize what we're talking about when we say 'display list', here is a simple example display list:

Many events in AS3 (especially MouseEvents and KeyboardEvents, as well as any bubbling events of our own that we might dispatch in our movies) travel around the display list, in three phases:
- the capture phase: the event is heard down from the stage to the 'target' or source of the event
- the target phase: the event is heard on the target itself
- the bubbling phase: the event is heard back up the display list, from the target to the stage
So, looking back at our sample display list, let's say the user clicks on sub1a, whose full path is: stage.mc1.mc1_a.sub1a. In that case, the event (in our case, a MouseEvent) would be created and dispatched first on the stage, and then down to the target (or source, in our case, sub1a) of the event, in the capture phase.

The event (again, in our case, a MouseEvent) is heard on the target (again, in our case, sub1a), in the target phase.

And finally, the event will be dispatched up the display list, from the target, to the stage, in the bubbling phase.

So, the full flow -- the complete lifespan of an event in the display list -- looks something like this:

So, to be clear, in this very, very simple example of the user clicking on sub1a, that MouseEvent can be heard in four separate locations, at seven separate occasions (3 in capture phase, 1 in target phase, and three again in the bubbles phase).
Remember! The display list event flow not only tells us which parts of the display list will hear an event, but also which parts CAN NOT hear events (this limitation gets to why it can be so difficult, with the native AS3 event flow, to have different objects hear events from different parts of your movies).
By default, when you write addEventListener in AS3, you will listen for events in the target and bubbles phases. If you use the 'useCapture' property of addEventListener, you can listen for events in the capture phase instead, as in:
addEventListener ( MouseEvent.CLICK , _onClick , true ) ;
Why would you ever want to hear an event in the capture phase? Well, honestly, it's rare, but we had to use it today at work to suppress keyboard input from being heard in parts of our movie in certain specific instances, so there are times when it can come in handy. But it's still useful to know about, because 'capture' makes 'bubbling' make a whole lot more sense!
I've prepared two Flash CS3/AS3/FP9 samples (including source) that hopefully help demonstrate the concept. The first is intended to provide visual indication of the actual event flow, including the phases, and which branches of the display list can hear an event. The second provides a more accurate estimation of the timing of the event flow -- which lasts milliseconds -- by tracing messages to a textarea. I'm embedding the visual one at 50% so you can get a sense of it here.
Visual Display List Event Flow Tracer
Preview from R's AS3 Events Course
Share and enjoy!
-r
November 2, 2009 2 Comments
Flash CS4/AS3 SnapshotRectangle class
Source files for this posting>>
A few nights ago, as I was at my folks' house in New Jersey, and had a touch of the jet lag. So, checking Facebook, and one of my friends, Bram, had posted a challenge to his wall. He was looking for a Flash guy to create a Flash app to:
- load any Flash video from your hard-drive
- select the frame/location
- drag-resize/reposition a marquee selection
- save a JPG of the selected area to your hard-drive
I realized that this was possible in Flash Player 10 (no AIR required) because of the changes to the FileReference API (summarized by Lee Brimelow here), and that I actually already had all the code for it across several separate project files for courses I teach at the Rich Media Institute. The one limitation is that, with Flash video, you can only seek to keyframes (so, with this video snapshot tool, you can pause it at any time, but if you want to seek, you can only seek to keyframes), but Bram signed off on that proviso and so, in about two hours, I combined all the code snippets to make it work and got it to Bram before I went to bed.
The next day, I realized it would actually be more useful if I encapsulated all of the code that handles the snapshot to a single, reusable class file / library symbol. So that's what I did. And I'm attaching the results here. Full disclaimer: This was just a goof and is not fool-proof code, but does demonstrate the concept nicely.
So, what's included:
- snapper.fla which includes the SnapshotRectangle MovieClip (on top of a sample image of my gorgeous golden, Lelia)
- com.rblank.snapper.SnapshotRectangle.as, to which the SnapshotRectangle MovieClip symbol is linked, and which contains all of the custom code I've written for this sample
- ActionScript 3 Core Libraries, created by the uber-scripters at Adobe, which I use here for JPEGEncoding (not inherent to the Flash Player 10 AS3 API). I'm including it in the download so it will work 'out-of-the-box' but you should of course download and use the most recent from their repository site
As you can see in the sample file (embedded and attached) the SnapshotRectangle has a:
- Textfield instance, tf_dims, to display dimensions of the image that will be created
- A MovieClip instance, named bg, that visually indicates the size of the image that will be created
- A MovieClip instance, named nub, that will be used to resize the snapshot area
- A NumericStepper instance, named ns_quality, that will be used to determine JPG quality
- A Button instance, named btn_snap, that will be the trigger for saving the JPG
The code is fully commented, so check it out. But essentially, you:
- Create a BitmapData object and draw into it
- Encode the BitmapData into a ByteArray, using the JPGEncoder class
- Save the ByteArray (representing a JPG) to the user's computer, using the FileReference class
That's the pseudo-code. The actionscript is:
//create a BitmapData instance, sized to match the width and height of the bg MovieClip instance _bitmapData =new BitmapData ( bg.width , bg.height ); //draw the entire stage into the BitmapData instance, clipping by the _matrix _bitmapData.draw( stage ); //create a new JPGEncoder instance (an AS3CoreLib class) //and pass in the current value of the ns_quality NumericStepper instance as the JPG quality _jpg= new JPGEncoder(ns_quality.value); //encode the _bitmapData into JPG data, stored in the _byteArray _byteArray=_jpg.encode(_bitmapData); //create the new FileReference instance through which to save the JPG data to the user's machine _fileRef_save = new FileReference ( ); //save the _byteArray to the users computer, with a default name of 'RBlankSnapshot.jpg', //which the user will have a chance to rename before saving _fileRef_save.save( _byteArray , "RBlankSnapshot.jpg" );
You'll note that in the actual code, since this single MovieClip encapsulates all the drawing logic (meaning, it has no idea which specific display objects will actually be visible in the rendered image), so you have to hide this MovieClip while drawing into the bitmap data (otherwise, this SnapshotRectangle GUI will be in the JPG).
Share and enjoy!
-r
November 2, 2009 1 Comment
KCRW’s Eclectic Podcast

I don't normally pimp for my local radio station (even though I am privileged to live within the broadcast territory of the best music station in the world), but right now -- just this very second -- I'm going to encourage all of you to subscribe to KCRW's 'Today's Top Tune' podcast. It's really outstanding content -- all free, of course, and hand-picked by, I assume, Jason Bentley and his cohorts.
http://media.kcrw.com/podcast/show_itms/tu (that's the podcast link itself -- you can add it in iTunes)
And, if you really, want to do yourself a favor, right click on the podcast in iTunes, and select 'Do Not Auto Delete'. Before too long, even the lamest among you will have an outstanding music collection!
-r
October 27, 2009 Comments Off
Blank’s First Three Theorems of Artificial Intelligence
Artificial Intelligence has long been an intellectual 'ear-worm' of mine -- something that totally consumes my fancy, and which I can't seem to get out of my head. I've read a lot of texts on the subject (I really recommend the texts by Hans Moravec, if you're looking) and in college I wrote a term paper for Prof. Robert Thurman on the implications of AI from a buddhist perspective. (Long story short, you are far better off assuming AI is real and being wrong, than assuming AI isn't real and being wrong -- it's just like being pregnant).
Over the past couple of years a few thoughts along these lines have been fluttering in the back of my head, and I wanted to take this opportunity to share them.
Blank's First Theorem of Artificial Intelligence states that: Artificial Intelligence is Inevitable. It is not a random pipe-dream or something that will only possibly occur -- it is the inevitable result of the trajectory on which we are headed.
I believe this by fact of:
- the exponentially increasing power of networks, constituted from an exponentially increasing number of nodes (hardware and software), each of which is increasing in power at an exponential rate (computers are always more powerful, there are always more of them, and they are all connected)
- the fact that life permeates every thing it can
Alan Turing postulated what is still considered the most rigorous test for the presence of artificial intelligence. Paraphrased, the Turing Test states that 'if an entity can convince you that it is intelligent, it is.' But, if we look at this from a different perspective, if an entity can not convince you it is intelligent, does that mean it is not?
To me, this is obviously untrue. I am still shocked at the number of people who deny that dogs are intelligent. To me, it is blatantly obvious that every living thing exhibits something we would call intelligence. To others, this is not only non-obvious -- it's insane.
This leads to Blank's Second Theorem of Artificial Intelligence: if an entity believes it is intelligent, you must treat it as though it is. (Whether or not an entity is actually intelligent is irrelevant to the discussion).
This is an important change from the Turing Test. Turing placed the onus of 'proof of intelligence' on the act of convincing another. I am placing the onus of 'proof of intelligence' on one's own self. If I believe I am intelligent, who are you to say that I am not?
The tension implicit in that last question leads directly to Blank's Third Theorem of Artificial Intelligence: The failure to adopt the Second Theorem will inevitably lead to violence between those that consider themselves intelligent, and those others whom they do not believe are intelligent. (See 'Matrix, The' -- but for heaven's sake, skip the sequels!).
If an entity can not convince you it is intelligent, how are you going to convince it that it is not? In other words, the question of 'are you really intelligent or not?' (or, more broadly, 'is Artificial Intelligence real?') is not a discussion worth having.
Before signing off, I'd like to throw in a fourth theorem -- not directly tied to the other three, but one which I think provides some urgency to these ideas. Blank's Fourth Theorem of Artificial Intelligence, states that: when, at some point in the future, the existence of AI becomes incontrovertible, society will estimate a date at which AI was born; that date will precede today.
Shortly stated: AI already exists.
In summary, to restate the Theorems:
First: Artificial Intelligence is inevitable
Second: if an entity believes it is intelligent, you must treat it as though it is
Third: otherwise, violence will ensue
Fourth: Artificial Intelligence already exists
Share and enjoy!
-r
October 26, 2009 6 Comments
My Favorite Free Mac Apps
I had this post on an old blog, but since that's no longer viewable anywhere, I figured I'd tweak it up and repost it, since I know how useful it was for me to stumble upon some of these. I use most of them, but some I'm including because they just look useful, even if I haven't really adopted them. In the interest of time, I'm giving the name of the tool (in no particular order), the link to the author website, and a sentence or two about what the tool is/does.
- Cyberduck
A great, free FTP application -- simple, but with some nice features. And supports resume-mode on transfers.
- iGTD
iGTD is a great little free task management tool based on the 'Getting Things Done' methodology. You can create 'projects' and then tasks within those projects. You can assign dates and priorities to the tasks, and run instantaneous reports (e.g., show me all tasks due in the next 5 days). You can also add some notes and links to the tasks, and sync with iCal if that's your bag. It's incredibly easy to use, runs super fast, and is really immensely useful.
- Journler
Sharing some same features as iGTD (above) and Yojimbo (which I'll cover under paid software later), Journler is like a diary. Some people use it as a GTD tool, but I use Things (which I'll cover later as a paid app). But I like to use Journler to author, save and store blog posts. It's easy to add all sorts of media to your work, and you can also hook it directly into most blogs, so you can publish straight from Journler.
- Onyx
http://www.apple.com/downloads/macosx/system_disk_utilities/onyx.html
A free system utility. Some functions help you maintain your system (by forcing execution of cleanup and maintenance tasks) and it also exposes some options of the Mac operating system (I am particularly fond of the 'double scroll buttons at top and bottom of scrollbar', and the ability to change the format that Mac's screen capture saves in).
- SiteSucker
Easily and quickly download entire websites to your hard-drive! One great example for this tool is pulling down the ActionScript help files from Adobe LiveDocs so that I can run them instantly, even if I'm off-line.
- DarkAdaptedX
http://www.adpartnership.net/DarkAdapted/index.html
Mac's color calibration tool can be really difficult and annoying. And sometimes you just want to quickly change your color settings to check something and then switch back. DarkAdapted X allows you to easily change your color space with three sliders: red, green and blue. And you see updates in real time. You can easily save several profiles to make it easy to switch between them. You do need to be running DarkAdapted X to have it control your color (i.e., you can't just set your color and quit, since you'll revert to the operating system settings).
- Perian
Perian should have been called 'Wow! for QuickTime'. Install this QuickTime plug-in and suddenly you can view tons of additional video files on your Mac! This includes FLVs, as well as many AVIs and MPGs. And since it's for QuickTime, Perian also allows you to Quick View all these media files in the Finder.
- iCal Reply Checker
http://www.nhoj.co.uk/icalreplychecker/
Ever want to delete an iCal event and not let the whole friggin' world (or at least the invite list) know? iCal Reply Checker gives you the option of whether or not to send out that you are deleting an event, to which you have been invited, or to which others have been invited.
- Voodoo Pad
http://flyingmeat.com/voodoopad/
Voodoo Pad is a really cool text editor. I'm including it under free, since there is a free version that can open any Voodoo Pad Doc, and author them up to 25 pages. The paid version costs $30. What makes Voodoo Pad unique is it's concept of a document. In Voodoo pad, a document is more like a website, with internal links between the pages. It's incredibly easy to create new pages and link between pages (it will auto-detect when you type in the name of an existing page and automatically create the link for you). It also has great media handling -- just drop video, audio and images into the document and then they are a part of it (it will even automatically process PSDs into PNGs). And it has a great HTML export feature, so you can create a real website from your VPDoc file in seconds.
We use this to author specification documents, since we've found clickable websites to be a better format for that type of information, instead of standard, linear documents.
- AppDelete
http://reggie.ashworth.googlepages.com/appdelete
Ever wonder why Mac doesn't make it easy to uninstall applications? Some apps come with an uninstaller, but most don't. And it's really annoying. It's easy to delete the app, but then all those little files that the app created within your Library folder remain. Instead of deleting the app, just drag the application icon to AppDelete and it will remove all the appropriate files from your computer along with deleting the application.
- Butler
http://www.manytricks.com/butler/
Butler is the coolest tool that you didn't know you needed. It's called Butler because it's like a little helper for you, that lives in your menu bar, while you go about using your computer. It comes with lots of little Mac functions you might expect (multiple pasteboards so you can copy and paste several items at once, an easy macro recorder/player, etc) but what makes it really special in my opinion, is the ability to customize the menus in your menu bar. You can create as many menu icons as you want (I use only one) and then structure whatever submenus under it that you want. These can be aliases to existing folders on your harddrive, or virtual folders containing multiple documents. It's sort of hard to explain, and I'm not doing a good job of it, but in essence it allows you to create custom lists and aliases in easy-to-access menus. So, for instance, I use it to organize the lists of all my applications (sort of like the Windows start menu does), and have short-cuts to useful docs that I reference frequently (like the ActionScript language reference). It also has other built-in goodies (I particularly like the Google search in my menu bar).
- MAMP
After the simple install process, you now have an application that enables you to turn on a local Apache/MySQL server on your Mac. One more simple click turns the server off. It's incredibly simple to use, and amazingly valuable for anyone who does internet application development on a Mac.
- Tomcat Controller
MAMP doesn't have a Tomcat server, so it can't run Java. So, if you need to create a web environment with Tomcat, you can do that on your Mac. Unfortunately, the Tomcat install process is not simple (you can get more info here: http://wiki.apache.org/tomcat/TomcatOnMacOS ), but once you've installed it, you can quickly turn Tomcat on and off with with Tomcat Controller.
- Houdini
http://mac.softpedia.com/get/Utilities/Houdini.shtml
Houdini is a neat little app that enables you to quickly show or hide all hidden files and folders on your computer (this has been very useful for working with SVN on the Mac). And, you can quickly hide any files and folders by dragging them onto the Houdini icon.
- PDF to Keynote
http://www.cs.hmc.edu/~oneill/freesoftware/pdftokeynote.html
One-click conversion tool to turn PDFs into Keynote slides (very useful if you've lost/don't have the source Keynote but still have the slides exported as PDF).
- TextWrangler
http://www.barebones.com/products/textwrangler/
The best free text editor for Mac, hands-down. From the makers of BBEdit.
- Validator
http://homepage.mac.com/rcrews/software/validator/
Drag any XML file onto Validator, and it will tell you if the XML is well-formed; if it is not, Validator will give you feedback as to where the structure is broken.
- iExtractMP3
http://mac.softpedia.com/progScreenshots/iExtractMP-Screenshot-29421.html
Ever have a SWF or an FLV and you needed the audio out of it? Well, iExtractMP3 allows you to gank the sound from Flash media as MP3 files.
- DiffMerge
http://www.sourcegear.com/diffmerge/
A free diff and merge tool for the Mac. See the differences between files and folders, and merge them based on criteria. Very useful for source files that have gone out of sync.
- MacLorem
http://www.fika.org/davew/judebear/MacLorem/
MacLorem is a flexible, light-weight Greeking generator. Though I still like lipsum.org, I always appreciate local apps for when I'm working off-line.
- Adium
Everyone already knows Adium, right? A great instant messenger tool for Mac -- great, because you can add all of your IM accounts (Yahoo, AIM, MSN, etc) and have them accessible in one tool. And the interface is very customizable.
- Fluid
http://www.fluidmac.com/fluidnoise/index.html
This app is less and less useful, now with AIR apps like Snippage and the Mac Dashboard widget creator in Safari. But it's still cool. With Fluid, you can create a local application out of any webpage -- and it will run in its own instance. So, for example, if you track your time on a website, you can create a local Fluid app out of your web-based time tracking tool, and then launch, run and quit it independent of your web browser.
- VLC
The best video player for Mac. Plays a ton of file formats -- even many not supported by Perian.
- Audacity
http://audacity.sourceforge.net/
A free, open source audio editor for the Mac. It's nothing when compared to advanced tools, but many of us don't have the advanced tools, and even if we do, sometimes we just need to do something simple, like trim a sound, or fade it out. Audacity is for you!
- Combine PDFs
http://www.monkeybreadsoftware.de/Freeware/CombinePDFs.shtml
Neat little utility to combine all or parts of multiple PDFs into a single PDF. Really useful when you need it!
- InstantShot
http://projects.digitalwaters.net/index.php?q=instantshot
A screen capture tool. It lives in your menu bar and you have tons of capture options within a single click. What's really nice is that you can choose the format of the screen shot each time you take it, and you can save directly to the clipboard if you prefer that to saving a file. It saves tons of time.
- Camouflage
http://www.briksoftware.com/products/camouflage/
Back in the day, I'm pretty sure Mac OS allowed you to hide the contents of your desktop. That feature is long since dead, but I liked it. Camouflage allows you to do that. Create a keyboard command and automatically hide/show the contents of your desktop. If your desktop can get as cluttered as mine, and it can get distracting, or if you give presentations and don't want the world to see your stuff, then Camouflage is for you.
- Carbon Copy Cloner
http://www.bombich.com/software/ccc.html
One-click disk duplication. Great for imaging hard drives.
- Disk Inventory X
Ever wonder 'where did all my hard drive space go?' Well, Disk Inventory X is for you. It analyzes any hard drive and generates a detailed report of what is consuming space. The results are usefully organized, and it also creates an interactive visual representation of size blocks on your drive.
- iBackup
This is way less useful now that we have TimeMachine, but it still has it's place. It's a powerful little backup tool. Create profiles that consist of rules of which folders to backup and where to generate the backup. You can also create simple restore profiles. And you can specify settings like whether to perform an additive backup, replace the backup, or generate an entire new backup.
- Monolingual
http://monolingual.sourceforge.net/
Running low on disk space? Well, did you know that every Mac application that's a universal binary has a bunch of data that's useless to you (because it supports both the old PPC architecture and the new Intel archictecture), and many apps have a bunch of content for dozens of languages that you'll never use. Run Monolingual and remove all of that extraneous data from your machine. Free up gigs of space.
- Pimp My Dock
http://www.malcom-mac.com/pimpmydock/
Did you know your Mac dock is really just a bunch of PNGs? Well, Pimp My Dock makes it easy to create your own Dock themes by creating/modifying those PNGs. And it comes with some default themes of its own. I'm not normally one to spend my time on things like this, but the Leopard dock was so awful, that I used it to change the Dock so it is actually usable.
- Service Scrubber
http://www.manytricks.com/servicescrubber/
Service Scrubber allows you to selectively and individually enable/disable the various services that run on your computer. Some are default MacOS services (and many of those can't be disabled) but many apps you install will also install services that you don't want/need/use.
- Smart Reporter
http://www.corecode.at/smartreporter/
Many new hard-drives, including every hard-drive in every Mac, is SMART-enabled. This means the drive has powers to measure/analyze the health of the drive. Just open Smart Reporter and check the status of any SMART-enabled hard-drive.
- YASU
http://jimmitchell.org/projects/yasu/
YASU stands for Yet Another System Utility. Macs are UNIX based, which means by default they are set to run maintenance tasks automatically at times that users mostly have their computers off -- so the maintenance tasks don't get run. With YASU you can run a variety of these tasks, individually or together, by checking which ones you wish to execute and clicking the button. Very simple, and don't underestimate the need to keep your Mac healthy.
- OpenOffice
A free, open-source office program, compatible with, and similar in features to, Word, Excel and PowerPoint. Runs a bit slowly on Mac, but who can complain with that price!
- RapidSVN
A free SVN gui for Mac that actually works! 'Nuff said. Not as easy or seamless as Tortoise on the PC, but really, at least it exists.
- RCEnvironment (Environment Variables)
http://www.rubicode.com/Software/RCEnvironment/
This allows you to edit the variables in your ~/.MacOSX/environment.plist file. This is really useful, for example, if you're running Tomcat and you need to set your CATALINA_HOME and JAVA_HOME values.
- FFMPEGX
http://homepage.mac.com/major4/
A GUI for FFMPEG on your Mac. You need to download the codec libraries separately, but the tool makes it easy for you to do so by telling you where to get them and where to put them. And then you have a powerful multi-format encoder running on your Mac. Also does Flash 7 and Flash 9 video (not Flash 8 since it doesn't have VP6).
- RegExhibit
http://www.macupdate.com/info.php/id/25327
Ever needed a RegEx (regular expressions) calculator? Well, fortunately, someone made one for free for Mac.
- SimpleCSS
http://www.apple.com/downloads/macosx/internet_utilities/simplecss.html
A great little form-based CSS authoring tool, with live-preview of the text properties.
- Update Expired Podcasts
http://dougscripts.com/itunes/scripts/ss.php?sp=updateexpiredpodcasts
I hate being away from an internet connection, and then wanting to hear a podcast, only to realize Apple decided I hadn't wanted to update that one anymore. If you update using this AppleScript, which appears in the scripts menu in iTunes, *all* your podcasts will update.
October 21, 2009 3 Comments
Almer/Blank Labs
Almer/Blank is pleased to launch AlmerBlankLabs.com, with posts from our team on technology, code, business issues and the broader industry.
October 21, 2009 Comments Off
Adding ActionScript Dynamically to Frames with addFrameScript() in AS3
addFrameScript, both powerful and undocumented, is an ActionScript 3 method supported by instances of the MovieClip class. It is inherently part of the way that Flash creates SWFs, which means that, while it is undocumented, it will likely be with us for some time.
To start, let's define the pain:
- When coding in Flash, it is generally optimal to remove as much code as possible from your timelines (if you don't know that yet, then just trust me)
- AS3 symbol linkage and the document class make it very easy to move *a lot* (but not all) of your code to external files
- But, using these techniques, it is not really possible to remove *all* code from your timelines, since code in class files is effectively on frame 1 of your linked timeline. For example, let's say you need to place a 'stop()' action on frame 10. How do you do that in a class file?
So, the solution -- the method you need to know in order to move *ALL* code from your FLAs to external class files -- is addFrameScript(). It's a really simple method.
someMovieClip.addFrameScript(aFrameNumber,aFunctionToRun);
In this example, we are saying:
- When the MovieClip with the instance name someMovieClip
- hits frame number aFrameNumber
- run the function named aFunctionToRun
And voila! It's that simple. Two notes:
- Frame numbers in addFrameScript are 0-based, if you want to put a function on frame 1, you'd call addFrameScript with the number 0.
- The function you call (aFunctionToRun in the above example) is treated just like a regular function -- not like a callback function on an event. That means the function expects no arguments.
Take the following example (in the folder named 'byFrameNumber' in the attached ZIP), in which we have a main timeline that contains a MovieClip instance with the instance name of mc. Let's assume we want to tell mc to stop on its final frame. Here's the code.
On the timeline
//tell mc to run stopMe when it hits its final frame (the measure is 0-based) mc.addFrameScript ( mc.totalFrames - 1 , stopMe ) ; //stopMe is called on the final frame of mc, but it is not a 'callback' function stopMe ( ) { //tell mc to stop ( ) ; mc.stop ( ) ; }
In a class file
package { import flash.display.MovieClip; public class AddFrameScriptSample extends MovieClip { public function AddFrameScriptSample() { //tell mc to run stopMe when it hits its final frame (the measure is 0-based) mc.addFrameScript(mc.totalFrames-1,stopMe); } //stopMe is called on the final frame of mc, but it is not a 'callback' //it MUST be public public function stopMe():void { //tell mc to stop mc.stop(); } } }
After looking through this code and learning addFrameScript, you might ask 'is there any way to work with frame labels rather than frame numbers'? Why yes, Virginia, there is. To do that, we need to work with the currentLabels property of the MovieClip class.
currentLabels is an array of 'FrameLabel' objects -- so, for each frame on your MovieClip's timeline, there will be a FrameLabel object created and inserted into the currentLabels array.
A FrameLabel consists of a name (the string identifier of the frame label) and a frame (the 1-based number of the frame that contains the label stored in name). NOTE: that the frame property is 1-based, while addFrameScript expects 0-based frame numbers. So you need to account for that.
So, in the sample code contained in the folder named 'byFrameLabel' in the attached ZIP, we have a MovieClip on our stage, with an instance name of mc, and it contains a multi-frame tween, with four labeled frames. This code tells that mc MovieClip to stop on any frame that has a label, and to resume when the stage is clicked.
On the timeline
//create an array of all frame labels in the mc MovieClip var aLabels = mc.currentLabels; //for each label in the array for each (var n in aLabels) { //trace out the name and frame number of the frame label trace( n.name + " @ " + n.frame ); //add a call to stopMe() on each frame with a label mc.addFrameScript( n.frame - 1 , stopMe ); } //start listening for the mouseDown event anywhere in our movie, calling onDown as the callback stage.addEventListener( MouseEvent.MOUSE_DOWN , onDown ); //called as callback from mouseDown event on stage function onDown( evt ) { //tell the mc MovieClip to play mc.play( ); } //called by assignment with addFrameScript, by every frame of the mc MovieClip with a label function stopMe( ) { //tell the mc MovieClip to stop mc.stop( ); //trace what frame the mc MovieClip is on trace( "stopping at frame " + mc.currentFrame ); }
In a class file
package { import flash.display.MovieClip; import flash.events.MouseEvent; public class CurrentLabels extends MovieClip { //-------------------------------------- // CONSTRUCTOR //-------------------------------------- public function CurrentLabels(){ //create an array of all frame labels in the mc MovieClip var aLabels = mc.currentLabels; //for each label in the array for each (var n in aLabels) { //trace out the name and frame number of the frame label trace( n.name + " @ " + n.frame ); //add a call to stopMe() on each frame with a label mc.addFrameScript( n.frame - 1 , stopMe ); } //start listening for the mouseDown event anywhere in our movie, calling onDown as the callback stage.addEventListener( MouseEvent.MOUSE_DOWN , onDown ); } //-------------------------------------- // PUBLIC METHODS //-------------------------------------- //called by assignment with addFrameScript, by every frame of the mc MovieClip with a label public function stopMe ( ) : void { //tell the mc MovieClip to stop mc.stop ( ) ; //trace what frame the mc MovieClip is on trace ( "stopping at frame " + mc.currentFrame ) ; } //-------------------------------------- // EVENT HANDLERS //-------------------------------------- //called as callback from mouseDown event on stage private function onDown ( evt : MouseEvent ) : void { //tell the mc MovieClip to play mc.play ( ) ; } } }
Share and enjoy!
October 11, 2009 Comments Off
Capturing ADDED_TO_STAGE in ActionScript 3
The ADDED_TO_STAGE event is a really handy one in AS3 -- it tells you when a display object has been added to the display list.
But I'd been wondering if there were a way to put a single ADDED_TO_STAGE event listener on the stage, to know when anything was added to the display list. My first attempt did not work -- but then I tried listening during the capture phase. And VOILA! It works.
Note the 'true' argument (the 3rd one) in addEventListener -- that makes the listener listen during the capture phase. I'm not sure why this event is not hearable in the bubble phase (I'm sure there's a very good, very technical reason), but there you have it.
Here's the logic:
stage.addEventListener ( Event.ADDED_TO_STAGE , onAddedToStage , true ) ; function onAddedToStage ( evt ) { trace ( "onAddedToStage, evt: " + evt.target ) ; } addChild ( new MovieClip ( ) ) ;
Share and enjoy!
October 11, 2009 Comments Off
Intro to Open Source Media Framework and Flash
I have recently completed a course on working with the Adobe Open Source Media Framework. Introduction to the Adobe Open Source Media Framework for Flash, which is 90 minutes of video-based online training, has been posted to the Adobe Developer Connection, and to the Rich Media Institute.
OSMF is relatively new, and if you haven't yet heard about it, you should check it out. I have been building video players in Flash for over eight years, and almost no two players are ever built the same way. OSMF is an attempt at standardizing the way that such players are built into Flash. Incorporating basic functionality (which we cover in this course), as well as more advanced behaviors like playlists, overlays and integrated advertising, OSMF is a set of classes available for Flash Platform development.
In this course, we cover the basics of working with OSMF in Adobe Flash CS4 -- coding on the timeline to build a fully-functional video player, step-by-step.
And, of course, it's FREE, so you really don't have an excuse. Check it out!
Title: Introduction to the Adobe Open Source Media Framework for Flash
Duration: 90 minutes
Price: FREE
View Course at Adobe Developer Connection
View Course at the Rich Media Institute (eligible for certificate of completion)
Description: This course covers all the basic functionality and concepts required to build progressive video players in Flash CS4 with the Adobe Open Source Media Framework. We start from the basics, and work our way to a fully-functioning video player, authored from scratch, using OSMF and Flash CS4.
OSMF is Adobe's community-centered approach to standardizing the way that media players (and, in particular, video players) are built on the Adobe Flash Platform. Although still in prelease, OSMF encompasses media playback functionality, playlists, branding, advertising, and other monetization aspects, and represents a powerful and comprehensive attempt to standardize a huge portion of the work currently executed in Flash.
Who this Course is For: This course is useful for two sets of students looking to get up to speed with OSMF:
- Low-to-intermediate level Flash ActionScripters, comfortable coding on the timeline, who want to learn the raw ActionScript, as well as the underlying concepts, required to work with OSMF
- Higher level coders, using Adobe Flash or Flex, who want a quick run-down of the core classes utilized when building an OSMF video player
Outline:
- Introduction: Brief Overview of OSMF and Installing the SWC ( 5:44 )
- Lesson 1 : Basics of Video Playback with OSMF ( 6:46 )
- Lesson 2 : Handling Changes in View State ( 7:04 )
- Lesson 3: Adding a Pause Toggle Button ( 8:55 )
- Lesson 4: Sizing the Video ( 9:56 )
- Lesson 5: Adding Volume Control ( 5:56 )
- Lesson 6: Adding a Progress Bar ( 13:58 )
- Lesson 7: Adding Seek Functionality ( 10:43 )
- Lesson 8: Cleaning Up After a Video ( 8:26 )
- Lesson 9 : Playing Multiple Videos ( 11:05 )
October 10, 2009 1 Comment
FITC Amsterdam ‘10 Talk: Hearing Pictures
| February 22, 2010 | ||
| 3:00 PM | to | 4:00 PM |
Hearing Pictures with the Synesthesizer at FITC Amsterdam
The Synesthesizer -- the first publicly available output from Project Ludi, a long-term skunkworks project at Almer/Blank -- is a Flash 10 application that translates pictures into music in real-time.
In this talk, R describes the process he followed to get the Synesthesizer to this point.
Using the 1943 Hermann Hesse novel, The Glass Bead Game (also published under the title Magister Ludi, the protagonist of the novel, from whom Project Ludi derives its name), as a starting point, and proceeding through a discussion of synesthesia, the aural illusions of Professor Diana Deutsch, the Experiments in Musical Intelligence by Professor David Cope, the music of Tamarin Monkeys, and many other stepping points, R will walk attendees through the thought process required to assume an odd endeavor such as the cross-modal translation of pictures into music.
Who this talk is for:
Stoners, acid-freaks, and shroomies. Fans of Oxycontin should stay away, as the information in this talk will likely cause long-term damage.
October 9, 2009 Comments Off
RMI Workshop: Working with AS3 Events for Flash in Amsterdam
| February 21, 2010 | ||
| 9:00 AM | to | 5:00 PM |
Working with and Extending Events in ActionScript 3 for Flash CS3 and CS4
Dates: February 21st, 9:00 am - 5:00 pm (~8 classroom hours a day)
Instructor: R Blank
Location: Felix Meritis: European Centre for Arts and Sciences
October 9, 2009 Comments Off
RMI Workshop: Working With AS3 Events in Los Angeles
| November 8, 2009 | ||
| 9:00 AM | to | 5:00 PM |
Working with and Extending Events in ActionScript 3 for Flash CS3 and CS4
Dates: November 8th, 9:00 am - 5:00 pm (~8 classroom hours a day)
Instructor: R Blank
Price: $199.00
Max Students: 40
Location: Rich Media Institute - Los Angeles - 525 Venezia Avenue, Venice, California, 90291 (map)
October 9, 2009 Comments Off













