Matt RaibleMatt Raible is a Web Developer and Java Champion. Connect with him on LinkedIn.

The Angular Mini-Book The Angular Mini-Book is a guide to getting started with Angular. You'll learn how to develop a bare-bones application, test it, and deploy it. Then you'll move on to adding Bootstrap, Angular Material, continuous integration, and authentication.

Spring Boot is a popular framework for building REST APIs. You'll learn how to integrate Angular with Spring Boot and use security best practices like HTTPS and a content security policy.

For book updates, follow @angular_book on Twitter.

The JHipster Mini-Book The JHipster Mini-Book is a guide to getting started with hip technologies today: Angular, Bootstrap, and Spring Boot. All of these frameworks are wrapped up in an easy-to-use project called JHipster.

This book shows you how to build an app with JHipster, and guides you through the plethora of tools, techniques and options you can use. Furthermore, it explains the UI and API building blocks so you understand the underpinnings of your great application.

For book updates, follow @jhipster-book on Twitter.

10+ YEARS


Over 10 years ago, I wrote my first blog post. Since then, I've authored books, had kids, traveled the world, found Trish and blogged about it all.

PowerBook G4 SuperDrive Upgrade

SuperDrive Upgrade 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.

Posted in Mac OS X at Sep 06 2003, 05:22:35 PM MDT 4 Comments

[ANNOUNCE] Hibernate 2.1 beta 3 Released

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

Posted in Java at Sep 06 2003, 11:51:29 AM MDT Add a Comment

JSTL, XPath and the State Tag Library

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>

Posted in Java at Sep 06 2003, 11:43:57 AM MDT Add a Comment