The PList format is not one of my favorites. I’ve complained about it before, but Apple continues to use it for its iTunes library information, so I continue to parse it.
I’ve been exploring the option of porting the iTunesExport project to Flex (Air) to provide a cross platform version. The current version is written in .Net and therefore not usable on OS X. As such I needed to parse the PList file using ActionScript. I adopted the Java PList Parser written by Christoffer Lerno for his XMLWise project.
The dynamic nature of ActionScript resulted in a much smaller implementation (although I did skip over ‘REAL’ and ‘DATA’ types), and makes it easy to consume.
You can view or download my version here, released under the MIT license.
A new version of my iTunes Export utility is available.
iTunes Export exports your iTunes playlists as M3U, WPL, ZPL, and now also MPL files, allowing you to setup playlists in iTunes and use them with other software or devices.
This release adds several fixes and enhancements that have build up in the last few months. They include:
Improved the logic for music copying. It can now handle duplicate songs and an arbitrary number of songs in a playlist (removed the 999 song limit) and handles duplicate files gracefully. Thanks to Simon Hyde for submitting the patch.
Added support for MPL playlists, used by Centrafuse (www.centrafuse.com) Car PC. Thanks for Stavros Glezakos for submitting the patch.
There have been several requests for improved file copying approaches to handle the many different usage scenarios. I have begun work on a 2.0 version and am planning to include a revamped approach to file copying in that release. Thanks for all the feedback.
Java Email Server (JES) is an open source email server (SMTP/POP3) written in Java.
This release is the second Beta version of the new 2.0 development branch. This is an incremental update to Beta 1 and contains the following updates:
Truly decoupled dependency on log4j. See section “Logging Facility” in AdditionalNotes.txt.
Server instance now uses a singleton pattern.
Added an option (“testing.destination”) that, when set, directs all outgoing messages to the destination (currently a folder).
Each domain gets its own default user.
A profile can now be set for the services to be activated at startup. The profile is broken down into Mail Transfer Mode and Mail Retrieval Mode. Resource allocation is affected, but not considerably.
Please read the Beta 1 Post for the other 2.0 branch changes.
While the belief is that JES 2.0 Beta 2 is stable, we will continue with Beta releases in the 2.0 branch until we feel confident that the 2.0 code is stable and production safe. Please provide feedback on this release in the JES Google Group, even if it is just letting us know you are using JES without any issues.
After holding out for years, and picking the Palm Pre as my ’next phone’, it is time for me to Eat Crow.
Last weak I broke down and bought a brand new black iPhone 3GS. And I love it.
Two years ago, when the first iPhone came out, I wrote the post ‘No iPhone for Me’. Re-reading that post now, I think my criticisms were mostly fair, and have been mostly resolved. My primary issues were:
Price ($499 and $599)
No Removable Battery
Touchscreen Keyboard
EDGE (no 3G)
I wrapped up the post with the following: “However, even if the iPhone’s first version does fail, it is hardly down for the count. Apple can and will innovate, and with their existing iPod market domination, they will have several chances to make this concept successful. I’ll be tracking how this develops (from my Treo).” Apple did use subsequent releases (OS and Hardware) to make it successful. The addition of 3G and the price drops were major improvements, and directly addressed half of my concerns. I’ve come to accept the keyboard as an acceptable option. I’m not convinced about the built in battery, but it is clearly the direction Apple is moving, with their laptops now as well. And the built in battery provides a fit and finish that is impossible with removable battery devices. But it was the App Store, with all its drama, that made the device a HUGE success.
As I become more and more fed up with my Treo, I explored my upgrade options. There was the Palm Pre, Blackberry Devices, Android, and Windows Mobile. I’d tried Windows Mobile and had no desire to go back. Blackberries also held no allure. They are very business focused, and the iPhone and Pre both provide better balance. In the end, it was the market share (Apps, general mind share) that convinced my to choose the iPhone. My wife has one and loves it, and while I think the Pre is a great device, I’m not willing to make a 2 year (wireless contract) bet on it.
After a week of use, here are my thoughts:
The touch keyboard works. I don’t LOVE it, but it works.
The navigation is less efficient than my Treo, but it is a small trade-off given the other benefits.
The integration of the iPod functionality is great.
The Exchange support is great.
The battery is OK.
Safari is great. I’m actually using Safari for GMail instead of the Mail app for now.
Google Reader on Safari is great.
Apps, Apps, Apps.
I realize I’m a late comer to the party, but I’m going with the idea that I waited until the iPhone was ready for me. Either way, I’m glad I made the switch.
There are great songs, and then there are timeless songs. Songs that are appreciated generation after generation, and throughout the different stages on one’s life.
I think part of the test of a timeless song is how an acoustic, or 'unplugged' version holds up. When you strip out all the energy and 'noise', do you still have something that you love?
I just saw an old ('75) acoustic performance of Thunder Road (thanks Merlin), and it reminded me of why the song is so great. When you strip it down to its core, it is still amazing.
This song and album are both available as MP3 downloads at Amazon (affiliate link).
MTV Unplugged popularized the idea of acoustic versions of rock (and other genres) songs. As a Bon Jovi fan, I've enjoyed a couple Unplugged versions of Living on a Prayer, but the classic one is the '89 MTV Awards:
Acoustic versions often give you a closer and more intimate connection with the lyrics. While this is generally true, and certainly true of the previous two songs, I don't find this Dylan Unplugged version of Like a Rolling Stone creates that closer connection. I think it is too 'busy'. To many instruments, too much noise. Take it as a contrast to the previous two. It is still a great song, but I much prefer the more distilled versions by Bruce and Jon.
In a recent post, I touched on my frustration with Maven and my interest in other build tools. Gradle looked interesting (Grovy DSL with Ant integration). I've been playing with building a Flex app, so I thought I would see if I could get Gradle to build it. Since Adobe provides custom Ant tasks as part of its SDK distribution, it should be easy. In fact, it is.
Assumptions:
You have downloaded the Adobe SDK (or Flex Developer)
You have a sample Flex (or Air) app to build.
You have Gradle downloaded and installed.
The first step is to create a Gradle build file (build.gradle) in your Flex application directory. To test your Gradle install, put a simple Hello World task:
task hello << {
println "Hello World"
}
You can then run gradle hello from your command prompt. It should echo back:
:hello
Hello World
Now you need to 'install' the Flex Ant Task Jar. This can be found in your Flex SDK Install under the ant directory (sdk_install/ant). There are a couple ways to install this. The easiest is to put it in the lib directory under your GRADLE_HOME directory. You can also specify the classpath in the taskdef command, but I'll leave that as an exercise for the reader...
Once you have the Flex Ant Tasks installed, you can create your Gradle build script. Here is a straight foward compile script:
ant.FLEX_HOME="c:/Program Files/Adobe/flex_sdk_3"
ant.taskdef(resource: "flexTasks.tasks")
task compile << {
ant.mxmlc(file: "src/Main.mxml") {
}
}
You will need to change the FLEX_HOME value and Main.mxml to your specific environment/app, but that is it. You can then execute gradle compile from your command prompt and compile the application.
If it is an Air app, you will need to add configname: "air" to the mxmlc task definition so it uses the Air configuration. Otherwise, you will likely see: Unable to locate specified base class 'mx.core.WindowedApplication'
To build the Air package for your application, you will also need to call the script file included with the SDK. You can find a sample of the ANT version of this here.
This example is more a sample of how easily Ant tasks can be used in Gradle than the overall power of Gradle. But it does demonstrate that Gradle can be used to build anything that has Ant tasks, and that is a great start.
Now Steve Ebersole from Hibernate joins the ranks of the frustrated Maven users. He is frustrated with Maven's module setup, something I've seen first hand on my current project.
Based on the comments on his post, it seems that Gradle is becoming a popular alternative, I'll have to check it out.
Simple-Build-Tool is also mentioned, though I've only used it for Scala projects so far, I find it interesting but also a bit difficult to fully understand. It's flexibility and use of Scala is powerful, but has the common side-effect that it isn't obvious how to accomplish something, or what a configuration line really does. I like the fact that it leverages Maven's standard structure, allowing you to easily test Maven projects with SBT.
I think Ant could also be salvaged, if it adopted the Maven directory conventions and then allowed configuration from there, but I'm not sure that it the best approach. It may just be time to move on.
What do I really want? A tool that provides simple setup for 'standard' projects, but allows the flexibility and power for fine grained control when I want to devaite from the 'norm'.
There is a great post on 37 Signals about ‘Little Green Lies’. I’ve looked at the exact same label (‘98% naturally derived ingredients’) and thought the same thing.
What does that even mean? EVERYTHING is ‘derived’ from something natural at some level. The sad part is that marketing like this works.
To write that many great movies every year for 5 years is amazing, especially since he directed over half of them himself. I’ve seen every one of these movies many times and enjoyed them all. Add other hits like The Great Outdoors (1988) Uncle Buck (1989), National Lampoon’s Christmas Vacation (1989), and Home Alone (1990), and it is an amazing career.
Growing up in Chicago, John Hughes’ movies always had a special appeal. They were often set in Chicago or its suburbs, and represented Midwestern suburban kids. Me.
Fred Wilson has an interesting post about the ‘Mobile Web’, and how it is different than the world wide web we know. In short, the mobile web is highly fragmented. Read the article.
This is an issue that has impacted my thought process recently. I’ve been considering getting a new mobile phone (PDA), and as a long time Palm user I’m interested in the Pre. The OS looks great, it has a physical keyboard, and the device is fairly open (you get root access with the developer SDK). However, in the fragmented mobile market, the iPhone is the king. The development effort and ecosystem around the iPhone is amazing. In a fragmented market, I’m not sure I want to bet on a niche player.
There are many reasons for this fragmentation, some technical, some institutional. I’d like to see more of the institutional ones removed (no exclusive carrier agreements, more ‘open’ devices), but on ’limited’ devices, tailoring the experience to the hardware is important for usability. There is a reason that the iPhone SDK was the key to the devices explosion. Apps delivered in the iPhone browser are just not as compelling.
To achieve a mobile web as ubiquitous as the world wide web, we need to make the browser the default application delivery platform, just as it is on ‘real’ computers. I’m just not sure the devices and networks are there yet.