Matt RaibleMatt Raible is a writer with a passion for software. 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.

From Helsinki to Oslo

Suomenlinna Today was another day of great weather in Helsinki. Around noon, we took a boat out to see Suomenlinna.

Suomenlinna is a major monument of military architecture. The construction of the sea fortress on the islands just off Helsinki in the middle of the 18th century was the most extensive building project during Swedish rule. When it was complete, its military shipyard was one of the biggest dry docks in the world and centres of know-how at that time. At the end of Swedish rule the fortress was being compared with the maritime fortifications at Gibraltar.

From there, we enjoyed some margaritas in the sunshine and then hopped on the Finnair bus for the airport. An hour later, we were on the plane and headed for Norway.

For some reason, our luck changed when we got to Oslo. Seems I always have bad luck in this town. This time, it wasn't as bad as my laptop dying, it was just inconvenient. We rode the bullet train from the airport to Oslo's Central Station, which happens to be right next door to our hotel. Once we got there to check in, we found out it wasn't "our hotel" until tomorrow night. Doh! Looking at e-mails I exchanged with the JavaZone guys, it's entirely my fault. We stumbled around to few different hotels and ended up finding a room at the Clarion near Central Station.

When folks say Oslo is expensive, they aren't kidding. Our room was available online for $745 US a night, but we somehow managed to get it for around $500/night. Oh well, at least we're not sleeping on the streets of Oslo tonight.

Tomorrow the JavaZone conference begins. I might go to a few sessions, but it's more likely I'll go exploring Oslo with my parents. The last time I was here, I didn't get to see any sights, and I don't want to let that happen again.

Posted in General at Sep 11 2007, 05:26:58 PM MDT 1 Comment

Walkabout in Helsinki

Helsinki Walkabout Yesterday, we spent a good portion of the day walking around Helsinki. My mom had a "walking tour" guide that we followed past the Embassies, along the water and through some city streets. After walking for 4 hours, we came back to the hotel, took some naps and then headed out to meet some locals for drinks (Hi Jussi and James!).

We got some great advice from Jussi and James and headed to the "Allied Forces HQ" building (Sokos hotel). At the top of the hotel is a bar that has great views of Helsinki. After a couple cocktails, we headed to Zetor for dinner. The Reindeer was excellent, as was the wine. We made it back to the hotel just in time to get a sauna in and collapsed into bed around 11.

Today we're heading to Suomenlinna for a couple hours and then off to the airport to catch a flight to Oslo. The weather is perfect here - not too hot and not too cold. I love it.

Posted in General at Sep 11 2007, 01:45:32 AM MDT 1 Comment

Made it to Helsinki!

Helsinki

After a long couple days of flying, we finally arrived at our hotel in Helsinki this evening. It was a pretty tiring experience getting over here, but that's my own fault since I pulled an all-nighter on Friday night (trying to finish up a training course and slides for CSS). I rewarded myself with a little first-class action from Denver to Newark, but then was in the "back of the bus" from Newark to Oslo. We had a 4-hour layover in Oslo before hopping on a 2-hour flight to Helsinki. A 45-minute cab ride, a stop at the wrong hotel, a 5 minute cab ride and we arrived at the right location. I should sleep pretty good tonight after 48 hours of little to no sleep.

We haven't seen much of the city yet, but hope to tomorrow. The hotel we're staying at is pretty nice. I especially like the fact they have very nice saunas and we're staying only a few doors down from them. Our room is incredibly large and has 3 beds in it. The bathroom even has heated floors. Good thing my mom picked up the tab for this one. ;-)

Tomorrow looks like a high of 55°F, which sounds about perfect. I brought a coat and would hate to pack it around for nothing.

Posted in General at Sep 09 2007, 11:49:07 AM MDT 7 Comments

Don Brown on OGNL

From the Struts Developers Mailing List:

My conclusion is OGNL is like Maven 2 - sometimes it really pisses you off, and you probably generally don't like the thing, but you've invested so much into it that it would be too painful to switch, and really, it does 95% of what you want anyways.

And with that, I'm off to Finland and Norway! See you on the other side of the pond.

Posted in Java at Sep 08 2007, 06:52:20 AM MDT 12 Comments

Does Struts 2 suck?

As far as I can tell, Struts 2 sucks. To be fair, so does Stripes. Why? Because there's no developer feedback for invalid properties or OGNL Expressions. What does this mean? It means if you fat-finger a property name, nothing happens. The OGNL exception is swallowed and you never know you did anything wrong. Furthermore, no one seems to care. The XWork folks will help you build, but not solve the problem. This seems like a major deal-breaker to me, However, I also believe it can be fixed - so maybe there's hope.

To demonstrate the problem, I did an experiment. I used the "user details" page in AppFuse Light to fat-finger a property name for the following frameworks: Struts 1, WebWork, Struts 2, JSF, Spring MVC, Stripes, Tapestry and Wicket. First, I tried changing the "lastName" property to "LastName" to see if the framework's property evaluation was case-sensitive. I found that with WebWork/Struts 2, Stripes and Tapestry, the property is not case-sensitive. I prefer case-sensitivity, but maybe that's because I prefer Unix over Windows.

The 2nd thing I tried was changing "lastName" to "pastName" to see if I'd get an error. An error occurred for all the frameworks mentioned, except for WebWork/Struts 2 and Stripes. This makes me believe these frameworks suck. The both use OGNL, so they could blame it on that, but Tapestry uses OGNL and it presents an error message. After this small experiment, my conclusion is the following frameworks have the best developer feedback:

  • Struts 1
  • JSF
  • Spring MVC
  • Tapestry
  • Wicket*

* Wicket seems like it needs some work as all it presents is "Internal Error" and makes you dig through your log files to find the problem.

Without good developer feedback, how can you have good productivity?

Dear Struts 2 and Stripes Developers,

What do you think about improving your error messages for invalid properties and expressions? Is this a feature you think you could add? We'd love it if you did.

Sincerely,

Your Users

Click here for some screenshots of how a fat-fingered property looks in various frameworks:

Update: Stripes doesn't suck and Wicket has excellent error reporting. See my comment below for more details.

Update 2: I've created a patch to (hopefully) solve this issue in XWork. If you have any feedback on ways to improve this patch, I'd love to hear about it.

Posted in Java at Sep 05 2007, 11:21:57 AM MDT 39 Comments

AppFuse 2.0 RC1 Released

The AppFuse Team is pleased to announce the release of AppFuse 2.0 RC1! This release marks a huge step in the march to releasing AppFuse 2.0. This release puts the finishing touches on the AppFuse Maven Plugin (AMP), which offers CRUD generation, as well as the ability to change AppFuse from "embedded mode" to "full source" (like 1.x). In addition, we've addressed over 100 issues in preparation for the final 2.0 release. We hope to fix any bugs related to this release and release 2.0 Final in the next week or two.

The videos still represent how M5 works, but things have been simplified (now you don't need to run appfuse:install after appfuse:gen).

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

If you've used AppFuse 1.x, but not 2.x, you'll want to read the FAQ. Join the user mailing list if you have any questions. The Maven Reference Guide has a map of Ant » Maven commands. Maven for Newbies might also be useful if you've never used Maven before. There is some support for Ant in this release.

For more information, please see the 2.0 RC1 Release Notes. The 2.0 series of AppFuse has a minimum requirement of the following specification versions:

  • Java Servlet 2.4 and JSP 2.0 (2.1 for JSF)
  • Java 5+

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, Contegix, JetBrains, and Java.net. Atlassian and Contegix are especially awesome: Atlassian has donated licenses to all its products and Contegix has donated an entire server to the AppFuse project. Thanks guys - you rock!

Comments and issues should be posted to the mailing list.

Update: I've uploaded a 247-page PDF version of the RC1 documentation to java.net. This PDF contains the relevant pages from the wiki that help you develop with AppFuse 2.0. Who knew I'd end up writing another book? ;-)

Posted in Java at Sep 04 2007, 01:42:15 AM MDT 7 Comments

On the road again

I'll be in Mountain View again this week. Instead of trying to organize another tech meetup, I'm going to be attending Redmonk Evening Services on Thursday. If you're nearby, you should definitely join us - I'm sure the conversations won't disappoint.

After California, I'll be arriving back in Denver around 7 on Friday night. One night at home and then I'm off to Oslo for JavaZone at 10 a.m. on Saturday. I'm pretty pumped for the trip because 1) I really enjoyed Norway on my last trip (May 2005) and 2) my parents are traveling with me.

Hope to see you on the road!

Sidenote: It's ironic that my first "On the road again" post was written last year in September.

Posted in General at Sep 04 2007, 01:00:03 AM MDT 2 Comments

LinkedIn's Office Space

It should be interesting going into LinkedIn HQ next week. Personally, I like the Web Developer's Diner. If you had $50 to decorate your cube, what would you do? I'd buy a few cases and host a BOF (after hours of course). ;-)

Posted in General at Aug 31 2007, 01:28:16 PM MDT 2 Comments

Checkmate Technologies donates code to AppFuse

Earlier this year, I had a gig at Checkmate Technologies out in Boston. As part of my work there, they paid me to polish much of AppFuse's code so it passed their Checkstyle coding standards. I'm please to announce that they've donated this work to the AppFuse project. See APF-861 and Changeset 2872 for more details. Thanks guys!

As far as AppFuse 2.0 - we're only 5 issues away from 2.0 RC1! I hope to finish these up in the next few days. With any luck, 2.0 Final will follow shortly after.

Posted in Java at Aug 30 2007, 10:09:41 AM MDT 3 Comments

Spring Web Flow 2.0

The first milestone release of Spring Web Flow 2.0 has been released.

We are pleased to announce that the first milestone of the next generation version of Spring Web Flow is now available. Spring Web Flow 2.0 M1 introduces several major new features, including support for flow-managed persistence contexts, improved support for Java Server Faces, full unified expression language (EL) support, and a more comprehensive sample web application.

I think the most interesting part of this release is Spring Faces:

Spring Web Flow 2.0 M1 introduces the Spring Faces module (spring-faces-2.0-m1.jar), a component shipped with the Web Flow distribution that contains first-class support for organizations developing web applications with Java Server Faces. The pre-existing Web Flow + JSF integration has been factored out to this project, and this project will be the home of all future JSF integration work.

The Spring Faces module provides the Spring community a dedicated project for exploring additional JSF integration opportunities. The initial work in 2.0 M1 on this front introduces integration with Ext, a popular Javascript GUI widget framework.

Of course, I also like how the new sample app looks a lot like one of Seam's demos. ;-)

JSF has needed a good client-side validation framework for quite some time. I also like the Ext integration as most JSF date pickers are hideous. Well done gents.

Posted in Java at Aug 29 2007, 03:49:15 PM MDT 4 Comments