I recently purchased a "SuperDrive" for my PowerBook from MacResQ. Here's the specs on this bad boy:
The PowerBook G4 SuperDrive upgrade is bootable and compatible with Apple's Mac OS X, Mac OS 9, iDVD, iTunes, Disc Burner, Apple DVD Player, Toast, and Retrospect. The drive reads at 24x, writes CD-R at 16x, writes CD-RW at 8x, and writes DVD-R/RW at 1x. A 1-year warranty applies.
Sounds pretty sweet right? To create a DVD (that Julie created in iMovie), we need to purchase iLife, which includes iDVD (which iMovie integrates nicely with, so I've heard). The problem? I went to the Apple Store today to buy iLife and I asked them about this DVD burner. They said that any third-party DVD burner will not work with iDVD. And if it does, it's illegal. So I asked, "If this DVD burner works with iDVD, who's breaking the law?" The tech retorted that both MacResQ is (for selling it) and I am (violation of the license of iDVD). Bummer. Do I care? Not really - I just want to know if iDVD will work with this drive?
If so, I'll buy iLife and be a happy little DVD-burning, software violating mo-fo - just like all the corporate workers who've installed their company's copy of Office on their home machine.
View the Release Notes, or Download. I won't be upgrading struts-resume or appfuse until 2.1 is released. Not much reason for me to upgrade, since I probably won't use any new features in these projects, but what the hell - upgrading is fun (and unit tests make it a breeze).
Update on Sunday: Beta 3b Released. Here's why:
- removed Hibernate built-in PreparedStatement cache
- made Hibernate.close() static
One of the projects I'm working on has a requirement to assign a user's permissions by state. I'm using the state tag library, which makes it very easy to make a drop-down of states. So, rather than creating a "states" table in the database, I wanted the ability to lookup state's abbreviations and full names in the tag library (since only abbreviations are stored in the database, as a comma-delimited list). So I used JSTL's XML tag to capture the output of this tag and then filter the states with XPath for the user's assigned states. Pretty slick IMO.
<label>Viewable States</label>
<%-- Sets the available states so they can be parsed with XPath --%>
<c:set var="statesHTML">
<state:state name="state"/>
</c:set>
<%
// fake it for demo - real version has these as a bean property
String[] states = {"CO", "AZ"};
pageContext.setAttribute("userStates", states);
%>
<x:parse var="states" xml="${statesHTML}"/>
<%-- Loop through and parse the list of states --%>
<x:forEach var="option" select="$states/select/option">
<c:forEach var="current" items="${userStates}"
varStatus="status" >
<x:if select="$option/@value[. = $current]">
<x:out select="$option/text()"/>
<c:if test="${!status.last}">,</c:if>
</x:if>
</c:forEach>
</x:forEach>