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.

New Phone - BlackBerry Pearl

BlackBerry Pearl Yesterday I picked up a new phone - a BlackBerry Pearl. The main reason I got it is because I couldn't get my e-mail with my old phone. It seemed like I was tethered to my computer all the time when I was waiting for an important e-mail. Now I feel free. Not only does it works great as a Bluetooth Modem, but it also supports browsing the internet and all of Google's Mobile apps (GMail, Google Talk and Google Maps). Even cooler - when you add a bookmark to a page that has an RSS feed, it detects that and allows you to add a "Web Feed" or a Bookmark. When I added this site as a web feed, it prompted me for Atom Entries/Comments or RSS Entries/Comments. It also allows you to auto-synchronize with your bookmarks or feeds. In other words, it has a built in feed aggregator. With a $20 unlimited data plan from T-Mobile, I love this phone!

The BlackBerry Pearl doesn't work with iSync, but PocketMac seems to do the trick. Unfortunately, PocketMac makes you synchronize with a USB cord whereas iSync uses Bluetooth. The Missing Sync for BlackBerry may solve this problem, but with everything else being free, I don't know if it's worth shelling out $40 so I don't have to plug in.

Some of you may ask, "Why didn't you just get a smart phone with EVDO built in?" The reason I didn't do this is I had a Verizon EVDO card. We were up in Steamboat for a week in January and it absolutely sucked. I worked for 3 days while were were up there (8-12 hours per day) and it was way too slow for me. The average speeds where 120KB/sec and I can easily get those with the Bluetooth Modem on the BlackBerry. Also, I don't want a fully-functional mini-computer for a phone, I just want it for basic calling functionality and the ability to check my e-mail.

What about the iPhone? I'm sure this phone will kick ass, but the fact that it won't support J2ME means that Google's apps won't work. Of course, they'll probably create widgets that'll work on the iPhone, so that argument may be invalid in a few months. The biggest reason I don't like the idea of having an iPhone is one thing - Cingular. I had AT&T as my carrier for a couple years and their customer service was beyond awful. Whenever I would call them for help, it'd take anywhere from 15-45 minutes before I talked to anyone. Today, when I called T-Mobile to get my BlackBerry Internet service setup, they told me the wait would be 6 minutes and they'd call me back when it was my turn. I was very impressed. I hope more phone systems start using a "call me back" feature instead of the current "wait on hold for X minutes" debacle.

So I'm very happy with my new phone and anxious to use it in my travels next week. Where am I going? I signed a contract with a company out in Massachusetts to help them architect and implement a Java-based web infrastructure across all their projects. The initial scope is estimated to be 2-3 months. I'll be flying out to Boston periodically, but most of the time I'll be working from home. I had a number of very interesting full-time opportunities, but the gig I'm taking seemed to be the most interesting technically. With any luck, I'll make it to the New England JUG on Thursday night to hear Mark Fisher's talk on Message-Driven POJOs.

Update: I just found NewsGator Go! for J2ME. I use NetNewsWire on my Mac and FeedDemon on Windows, so it's great to see I can subscribe to my existing feeds on my phone. Thanks NewsGator!

Posted in General at Feb 17 2007, 06:07:08 PM MST 3 Comments

Database Profiles in AppFuse 2.0

Last night, I added several database profiles to AppFuse 2.0 and its archetypes. What does this mean? It means AppFuse should work out-of-the-box with several databases, including:

  • H2
  • HSQLDB
  • MySQL
  • PostgreSQL
  • SQL Server

For example, here's how to test a new AppFuse project works with H2:

mvn archetype:create -DarchetypeGroupId=org.appfuse -DarchetypeArtifactId=appfuse-basic-struts -DremoteRepositories=http://static.appfuse.org/repository -DarchetypeVersion=1.0-m4-SNAPSHOT -DgroupId=com.mycompany -DartifactId=myproject
Yeah, I wish there was a way to shorten this command (or prompt for choices) too.

After doing this, you can cd into the "myproject" directory and run mvn integration-test -Ph2. AppFuse 2.0 projects are configured for MySQL by default, so if you want to permanently activate one of these profiles, you can add the following between the <id> and <properties> section of the profile.

    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>

In addition to the profiles listed above, I tried to get Oracle Express and embedded Derby working. No dice on either one. I took a brief look at DB2 Express as well, but with a 400 MB download and 3 JARs required for its JDBC Driver - it seemed like a lot more trouble than it was worth.

Maven 2's build profiles are a powerful feature that we hope to make easy to use. For example, to test your new project with H2 and JBoss, you can simply run mvn integration-test -Ph2,jboss. Thanks to the power of Cargo, this will download JBoss 4.0.5, install it, and run all the Canoo WebTests within it. Of course, this will take a while the first time - especially since JBoss is a 77MB download. Fortunately, we allow you to change one small setting in your pom.xml and use an existing install instead.

Maven 2 is a kick-ass build/deploy/test tool once you figure it out. With AppFuse 2.0, we're doing all the "figuring out" for you. ;-)

NOTE: I would add more server profiles, but Cargo's Maven Plugin (version 0.2) has issues with Geronimo 1.1, Jetty 6.x and Resin 3.x. Strangely enough, Jetty's Maven Plugin version 6.0.0 works great, but 6.1.0 throws stack traces.

Update: Support for Oracle and Derby (in networked mode) has been added. We'll consider adding support for DB2 if IBM can figure out how to package their JDBC Driver into a single JAR.

Posted in Java at Feb 14 2007, 05:41:37 PM MST 27 Comments

Bus Ball

A reader sent me an e-mail about ZZ Top's Billy Gibbons' Bus Ball. His suggestions was if I don't get my bus fixed, I should turn it into one of these. Looks like motion sickness waiting to happen. I'm sure the kids would love it though. ;-)

VW Ball

Posted in The Bus at Feb 12 2007, 04:32:19 PM MST 1 Comment

Upgraded to Roller 3.1-rc3

This site is now running Roller 3.1-rc3. It took me a few hours to upgrade my theme yesterday, but everything appears to be working correctly. Let me know if you see anything that's out of whack. The only thing I don't like so far is how it displays "Main | Next page »" on the main page. I'd rather it not show anything, but this macro is needed to show next/previous links when browsing by date, individual entries, or search results. If nothing else, it seems to me like it should display "« Previous page | Main" since » implies forward in time.

I did make one enhancement to this theme. Now, the colors for the category is shown when viewing a single entry. Before, the colors where only shown when you were viewing a particular category. The new $model objects make this pretty easy to do. Another feature I really like is the "Full Preview" feature. Rather than just previewing the entry in the author screen, you preview how it will actually look with your theme. Just remember to click on Save as Draft before Full Preview or you'll lose your post!

Update: It looks like I spoke too soon when I said everything is working correctly. I'm currently experiencing some feed duplication and category issues. Sorry about that.

Posted in Roller at Feb 10 2007, 05:13:55 PM MST 1 Comment

Slick looking Confluence sites

You have to admit, both Wicket and Cayenne have nice looking websites. Did you know they're both backed by Confluence? Wicket has a Writing documentation page that explains how it works. Basically, they use the autoexport plugin to export their content to static files. If you configure this plugin to be invoked from a cron job, it's a great way to create a constantly updating dynamic-but-static site.

I believe there's a couple reasons Apache uses this setup: 1) it allows projects to customize the look and feel of their site w/o customizing how Confluence looks and 2) it reduces load on its servers since most content is served up statically. I've thought about using a similar setup for AppFuse's documentation, but I've run into a couple issues:

  • The autoexport plugin is pretty flaky. The latest release (0.13) doesn't work with Confluence 2.2.9. Strangely enough, the previous version (0.12) works fine. It looks like the author had a good run with this plugin when he created it (almost a year ago), but hasn't updated it since.
  • The dynamic tree menu doesn't get included in the export. If I could somehow include this tree (and the current theme) when exporting, it'd be very cool.
  • The new code macro works much better than the {code} macro, but it has exporting issues both with PDF and the autoexport plugin. I tried using the code macro, but it doesn't show any syntax highlighting when using an Adaptavist Builder theme.

Apache's setup for Confluence appears to be quite good. I wonder if we should use it for AppFuse? We don't have the bandwidth/load issues that they do - and we've managed to make the site look decent using Adaptavist Builder. I like having a single source of constantly changing documentation, rather than two sites, where one is static. I think this causes confusion for users if the documentation changes a lot. That being said, I would like to export the content for bundling and versioning with each release. I wonder if Atlassian is planning on fixing the new code macro exporting issue anytime soon?

Posted in Java at Feb 09 2007, 08:02:54 AM MST 5 Comments

Dad makes the local Montana News!

My Dad was interviewed in a Missoulian article a couple days ago:

CONDON - For years, Joe Raible and his family used a road across Plum Creek Timber Co. land to access their home in the Swan Valley.

Set about a mile from the nearest county road, the family depended on Plum Creek's generosity to access their homestead. And the company gladly obliged.

Not only did Plum Creek allow the Raibles to drive across its property, it even provided a utility easement for the family's telephone line.

Then, in about 1990, the timber company sold the property to a Florida man. Not long after that, a locked gate appeared across the road to keep the public out.

"At first he gave us a key to the gate, but then someone tore the gate down," Raible said. "He blamed us and dug a tank trap across the road right at our property line. He dumped the pile of dirt on our land and sowed the pile with logs so we couldn't just push it back in the hole."

Raible thought about suing, but changed his mind after a very direct discussion with his attorney.

"He told me that I could either put my kid through college or his kid," Raible said. "I had a friend who'd had an access issue and spent a lot of money on it. He lost."

The "Florida man" was a guy that I remember as "Jackass Burns". After using our "back road" for 20 years, he moved in and shut it down. That forced us to use the "front road" which has been a challenge ever since. My kids refer to it as the "bumpy road". Looks like lots of changes going on in good ol' Montana.

Posted in General at Feb 08 2007, 04:43:16 PM MST 2 Comments

AppFuse 2.0 M3 Released

The AppFuse team is pleased to announce the release of AppFuse 2.0 M3! This release marks a milestone in our documentation efforts. We've completed all of the web framework tutorials and ensured that all the archetypes work properly. Turkish language support was added and native2ascii was integrated so all i18n bundles should work properly.

The major things missing from this release are code generation (AppGen) and web services (XFire) support. We hope to add both of these before the final release.

AppFuse 2.0 is available as a Maven archetype. For information on creating a new project using this release, please see the QuickStart Guide.

The 2.0 series of AppFuse has a minumum requirement of the following specification versions:

  • Java Servlet 2.4 and JavaServer Pages (JSP) 2.0
  • Java 2 Standard Platform Edition (J2SE) 5.0

For more information, please see the 2.0 M3 Release Notes.

We appreciate the time and effort everyone has put toward contributing code and documentation, posting to the mailing lists, and logging issues. We also greatly appreciate the help from our sponsors, particularly Atlassian, Cenqua, Contegix, JetBrains, Java.net and KGBInternet. Without them, working on this project wouldn't be nearly as much fun. ;-)

Posted in Java at Feb 06 2007, 02:16:45 PM MST 16 Comments

AppFuse Book!

David Whitehurst (an AppFuse committer) has taken on the task of writing a book on AppFuse 2.0. I don't envy him, but it looks like he's got a lot of good ideas.

When I started looking at AppFuse version 2.0 source and how it's going to use Maven, I got excited. I got so excited I'm writing a book about it and SourceBeat is going to publish it. I talked with Matt Raible, got his blessing, and sent SourceBeat the proposal. They liked it!

Well, I guess the news is out. We're doing the "AppFuse Primer" and it's scheduled for release August 2007.

Now, it's time for you guys to flood me with comments so that you can turn my outline upside down and get all the things that you want to learn about in the book. C'mon, I know you want it. I do and I decided that I would write down everything I've been learning about it. Everyone is going to be quite pleased with AppFuse version 2.0. And, I hope that this book will compliment its release with a publication this summer after everyone has had a chance to play with it some on their own.

Here's a rough table of contents.

  • Chapter 1 - Introducing AppFuse
  • Chapter 2 - An AppFuse Quickstart
  • Chapter 3 - Developing with Maven
  • Chapter 4 - Using the Spring Framework
  • Chapter 5 - Persistence with Hibernate
  • Chapter 6 - The Service Framework
  • Chapter 7 - The Web Tier
  • Chapter 8 - AppFuse Security
  • Chapter 9 - Production Deployment, Migration, and Maintenance

If you'd like to help David shape AppFuse Primer, please post a comment on his blog.

Posted in Java at Feb 05 2007, 10:30:25 PM MST 11 Comments

Maven 2 hates Commons Logging

It's true that most people hate commons-logging, but Maven 2 hates it even more. There are many open source projects that use this library, so you're likely to depend on it when you never intended to. Of course, this is Maven 2's transitive dependencies fault - but currently there's no option to turn transitivity off. I tried changing to SLF4J, but that causes some Maven plugins to fail.

Since the Maven team refuses to fix this (even though it's an *obvious* exception to their rule about not changing anything), I've fixed it myself. The AppFuse repo has a fixed version of commons-logging's pom.xml. To get the fixed version of commons-logging, delete it from your local repo, then add AppFuse's repository to your pom.xml:

    <repositories>
        <repository>
            <id>appfuse</id>
            <url>http://static.appfuse.org/repository</url>
        </repository>
    </repositories>

Since the burden of this issue clearly rests upon the shoulders of the commons-logging developers - can we please get a new release with a fixed pom? Pretty please?

Update: I tried to get slf4j to work again today. While I succeeded, I found a critical bug. The bug is that log messages don't print out the method name, just debug(), info() or whatever from your classes. It's possible to fix this by using slf4j instead of clogging. However, that won't help you get method names printed when cranking up the logging for 3rd party libraries like Spring and Hibernate. Since this won't be fixed, it seems better to stick with commons-logging. I doubt I'd have any luck getting all the libraries that AppFuse uses to move away from commons-logging.

Posted in Java at Feb 04 2007, 10:43:15 PM MST 11 Comments

The Last Two Weeks

Ever since Virtuas shut down a couple weeks ago, I've been having a blast. Mostly, I've been working on AppFuse, but I've also been spending more time with Julie and the kids. Where I work varies from day-to-day. Some mornings, I'll head to our local Einstein's or the close by Spanky's Roadhouse. Other days, I'll work from home and let the kids harass me all day. I'll admit, there's some days that are frustrating when I'm about to solve a problem and the kids are yanking my fingers off the keyboard. However, there's others where the music is cranked, the kids are dancing in my office, and I just solved a problem that was bugging me for the last 6 hours. There's nothing like having a Woo hoo! after solving a problem you've been wrestling with all morning. It's even better when there's friends around to help you celebrate. My whooping and clapping often leads to games of "horsey", happy kids, and a worn out dad.

In AppFuse news, I finished all the web framework tutorials a couple nights ago. Since the beginning of this year, I've written over 100 pages worth of AppFuse documentation. Wednesday's "the web tutorials are done" was a huge milestone and it feels great to be done with it. We hope to release 2.0 M3 in the next few days.

Yesterday, after getting 8" snow reports from Beaver Creek two days in a row, I suggested to Julie that we "head for the hills" for a day of skiing. She agreed and we left a few hours later. We ended up at Keystone since they have cheap skiing for kids and it's one of the closest ski resorts to Denver. Leaving last night was brutal. It starting snowing around 2pm and we left town around 5:30. We quickly ended up in rush hour traffic and it took us an hour just to get out of town (to the top of Lookout Mountain). Once we hit Idaho Springs, the roads improved and by the time we got to the tunnel the roads were bare and dry.

Keystone

Coming up here last night turned out to be a good idea. Denver experienced a record low of -18° F this morning. Furthermore, there were wicked winds and west-bound I-70 was closed for 9 hours this morning because a semi blew over and spilled all of its 2000 gallons of unleaded. I watched the story on the news and was quite impressed when I heard the wind was so strong it was blowing windows out of cars.

The skiing at Keystone today was bitter cold (-15 to -25 °F with wind chills), but I made it work. Hot Cider and bump runs are excellent ways to keep warm. Now we're sitting in the condo we rented and waiting for the kids to wake up so we can enjoy FAC at the local bowling alley.

Life is good. :-D

Posted in General at Feb 02 2007, 05:25:36 PM MST 4 Comments