If you’re an OS X developer, chances are high that Eclipse really cramps your style. But don’t feel married to Flex Builder just because you want to export SWF files. My preferred IDE for the last year has been to use TextMate in combination with the Terminal for trace outputs. Long overdue, here’s my dangerously concise checklist of how to set this up for yourself:
- Download the debug version of the Flash Player (you should see ‘Debugger’ in the context menu of any SWF you right click upon if you have the debug player). Note as of this writing there is no publicly available Flash Player 10 debug player yet – you’ll need to stick with FP9 for now.
- Download and install TextMate.
- To setup command-line compiling, install the Flex SDK, or if you already have Flex Builder installed just set up your .bash_profile’s PATH to include ‘/Applications/Adobe\ Flex\ Builder\ 3/sdks/3.0.0/bin’. If all’s in order, you should get a positive response typing ‘mxmlc -help’ from the command line. If you’re not familiar with how to set up your .bash_profile, there’s plenty of sites with a little background on bash and how to do this.
- In order to trace debug and exceptions to your Terminal, you’ll need to grant access to the player. This process is obscure and esoteric, but do it once you’ll be set. If not already there, create a text file named ‘mm.cfg’ in /Library/Application Support/Macromedia/ and enter the following:
ErrorReportingEnable=1 TraceOutputFileEnable=1
Remember to quit all browsers and restart after making this change. - Now we’ll equip TextMate to be AS/MXML savvy. Leopard has Subversion pre-installed, which we’ll use to download the newest bundles from Macromates. Copy/paste the following into Terminal:
cd ~/Desktop svn co http://macromates.com/svn/Bundles/trunk/Review/Bundles/ActionScript%203.tmbundle/
After this has completed, you may as well do one more.
svn co http://macromates.com/svn/Bundles/trunk/Review/Bundles/Flex.tmbundle/
- One last Terminal line. This will convert your Terminal into a trace output window for testing SWF files. You’ll need to do this every time you start Terminal up.
tail -f ~/Library/Preferences/Macromedia/Flash Player/Logs/flashlog.txt
- OK. Go to your Desktop and double click the bundle files that have just been created.
- Now from within TextMate, go to File / New From Template / ActionScript 3 / Project. (Fn-Cmd-F2 gives you keyboard access to the menu bar, if you fancy)
- Specify a location for your new SWF project folder, and fill out the main class namespace (defaults to org.domain.AS3Project)
- Cmd-Shift-B to initiate a build, hit ‘5′ to select MXMLC. You’ll see the build’s success or failure in the subsequent pop-up.
- Cmd-W to close the pop-up. Cmd-R to open the SWF in its HTML container in your default browser. Note that the default project structure doesn’t do anything visually, but it does include a trace. So something along the lines of ‘AS3ProjectTest::initialize()’ should be output to your Terminal at this point.
And you’re good to go! You’ll notice right away that TextMate is a very bare-bones editor. But its simplicity obscures its complexity. Snippets and completion are two of its many benefits. You can familiarize yourself at the online manual.
As an added bonus, check out the free utility Visor (from the creator of Quicksilver). It’s a little odd to set up, but once it’s there, while focused on any other application you can press any specified keyboard shortcut to slide out a terminal window from the top of the screen, giving you an easy glance at what your SWF may be tracing.
Enjoy! Feel free to add your own tips below.
Using Ruby to migrate last.fm tags to iTunes
May 27th, 2008
Once upon a time, digital audio files didn’t carry any information about their creators. No artist name, album, track number – nothing. Naturally, this led to a lot of redundant effort keeping music organized and contextual. In 1996, a little sidecar called ID3 came along, essentially providing a space for textual information about audio that hitched a ride within an MP3 file. While it was a victory for the preservation of metadata, it had its limitations, not least of which was a stodgy implementation of a Genre field.
The original sidecar had only 35 bytes of space to work with. Maximizing room for artist, album, and everything textual meant reducing genre to a single category, which was converted to an integer so that it only occupied a single byte in the overall sidecar. The original ID3 implementation only contained 80 pre-determined options for the genre field.
Which leads to the dilemma:
- No song is of a single genre, but rather many. What good is reducing music to a single container anyway?
- What is rawk to one listener is britrock to another, is emo to another and is shoegaze nu-wave to another.
For this reason, the metadata available in the Genre field is of little use to anyone. You can’t just listen to Alternative or Electronic and expect to have a consistent listening experience. In a sense this parallels the problems with the RIAA and big label music, but I’ll leave that tangent for another day…
We’re not stuck in that bucket anymore. One of the advantages of having millions of people tagging music through services like last.fm is that we now have a much more nuanced voice in describing our music. Let’s face it, it’s not very helpful to call Boards of Canada an electronic group. In fact they are ‘electronic ambient idm chillout downtempo trip-hop indie Warp experimental Scottish chill.’ (according the leading tags from last.fm)
Services like last.fm, Pandora and imeem are popular because they use these tags to create radio streams that, unlike most terrestrial American radio, people enjoy listening to.
A couple years ago, before Pandora was available, I realized that I wasn’t listening to the majority of the music I owned; when I wanted to listen to music I usually thought of an artist rather than a type of music. In an effort to fix this, I took a day off attempting to create iTunes playlists that suited various musical needs. I tried to create a party mix. I tried to create a mix reminiscent of the 90’s or the 60’s. I tried to create an ambient electronic music group that I could listen to while working. Given the size of my library, it was tedious stuff, and never felt a step closer to being finished.
Yesterday I realized there’s a better solution: last.fm’s AudioScrobbler data service provides a way of retrieving tags for any given artist. The rest is creating a way of integrating that with my iTunes library. I did some searching and found that Wes Rogers’ Last.fm Tagger accomplishes a great deal of what I was hoping to do. It’s limitation was that it only took the foremost tag from last.fm and set that into the Genre field.
I’ve modified his script so that it compiles up to 20 tags, given a popularity threshold, and places them as a string into the Grouping field. Just select whichever files in iTunes you’d like to add the tags to and run the Ruby script (If you’ve selected thousands it may take a while!) After that, you activate the Grouping column in iTunes and then search for whatever you’re in the mood for. You can search for two or more genres to refine your search. And because users also often tag with context other than genre (where the music is from, speed, male/female vocalists) this really expands the boundaries of your search. It’s a bit like bringing the benefits of online radio to your local music collection.
Here’s to Wes for the MIT license, last.fm for AudioScrobbler, and the music taggers!
Download iTunes Multi-Genre Tagger v0.5.
Important Note: This will OVERWRITE whatever information is in the Grouping field of your music files. This field is nearly always empty, but you should check that nothing important is there before running this script. You will need a bit of terminal savvy and Ruby to be installed on your system in order to build the tags.
UPDATE: There’s now a newer version, and I’ve created a separate project page for it. As of version 0.6, it’s now a standalone OS X application (though the Ruby source is included for use on other platforms).