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.

Validation vs. Business Logic

In the manuscript I'm reading, I just ran into a diagram and overview of a layered architecture - and all of a sudden, it hit me. At work, most of our business rules are being implemented by Struts' Validator framework. In the case of indexed properties and more complicated rules, these reside in the validate() method of our action forms. So it's interesting to me that I'm using a business delegate to perform my business logic - when in actuality, all my delegates are doing is copying properties from a POJO to an ValidatorForm. So this begs the question - shouldn't validation (a.k.a business rules) be done wherever it is most convenient rather than only in the domain layer? Oh yeah, and most of this is just validation - our real business rules (comparing data for validation) takes place in Oracle stored procedures. And you know what - it works great!. So my opinion is - do whatever is easiest and makes the most sense.

Posted in Java at Apr 29 2003, 06:18:27 AM MDT 6 Comments

Hibernate Book Review

I started doing a book review for Manning this morning. It's called Object/Relational Persistence in Java, Practical O/R Mapping with Hibernate, by Christian Bauer and Gavin King. Once again, I find myself in a time crunch with a publisher - at least I'm not writing this time. The task: read/review and critique 105 pages by tomorrow. Shouldn't be too bad, I'd better get cracking! I'll let you know what I think when I'm done.

Update: Sweet - only 86 pages (the rest is just headings). I'm halfway done. Mostly O/R Mapping concepts and comparing database types (i.e. relational vs. object-oriented) to this point. Next is mapping strategies - I hope to learn something here.

Posted in Java at Apr 29 2003, 05:46:01 AM MDT 7 Comments

Adding Cool Comments to Roller

Cool Comments (a.k.a. Twisty Comments) have been added to Roller's CVS. Grab it if you're brave and help me work out the bugs. I've published a how to on Roller's Wiki. It should work on IE 5.5+/Win and Mozilla/all (what a great browser). Doesn't seem to work on Safari, Camino or Opera, which is fine as it degrades nicely. My degraded comments page needs some work though - all the items in my menu are centered. Oh well, must be a missing <td> or some other closing element - I'll deal with it later.

Posted in Roller at Apr 28 2003, 10:25:53 PM MDT 5 Comments

Cool Comments have arrived!

I got the idea the cool comments you now see from Joe Hewitt. It wasn't too bad to implement, but there's still lots of quirks. Many of which you can see. The hardest part was figuring to implement XML loading in Mozilla. Joe is using the following method:

gMediaDoc = document.implementation.createDocument("", "media", null);
gMediaDoc.addEventListener("load", onMediaLoaded, false);
gMediaDoc.load(aURL);

Which works great when the file is on a filesystem, with a .xml extension. I couldn't get Roller to accept a .xml for my comment page's "link" attribute, so I had to resort to a lot of web research, and I came up with the following:

gMediaDoc = document.implementation.createDocument("", "", null);
var xmlHttp = new XMLHttpRequest();
xmlHttp.overrideMimeType("text/xml");
xmlHttp.open("GET", aURL, false);
xmlHttp.send(null);
gMediaDoc.loadXML(xmlHttp.responseXML.xml);
onMediaLoaded();

The loadXML method is provided by Erik Arvidsson's XML Extras. Thanks Erik! There's quite a bit of work to enable inline comments, but I promise to document a how to before it's released to the general public. Here's some problems I hope to fix before that.

  • Alignment - it'd be nice if I could make the div in-line, so I could put a comments link as before - with other text on either side of it. Either that, or make it inherit the parent's text-alignment. It'd be cool if the pictures below had the comments link right below them.
  • URL Prefix - I suppose I could pass in the context + username to solve this one. While it was working normally for me to use $userName/comments for the URL while developing this, I had to use "/page/rd/comments" on this site. I think it's something to do with the <base href="" /> being set.
  • Loading - it takes a few seconds for the templates to load. If you click on the comments link before they've loaded, you'll get a JavaScript error, and be routed to the default comments page. The window's status bar will say "Done initializing comment templates..." when comments are ready for action.
  • No Preview. I don't think this is a big deal, but it probably wouldn't be too hard to add.
  • Missing label from "Remember Me" checkbox. I'm not sure why this is happening, but the text is there!

That's all the enhancements I can think of for now. Tell me what you think and feel free to give these suckers a test drive.

Update: Strange - I'm seeing some errors that I didn't earlier. In IE6/WinXP, I get a JavaScript error ["Access is Denied" error (Line 149, Char 5)]. Also, I can see the "Remember Information" label here, whereas I couldn't on the machine I implemented this on (Win2K/IE6). Strangely enough, Julie's machine is Windows 2000/IE6, and these errors occur on hers as well. Looks like I have a lot more work to do!

Posted in Roller at Apr 28 2003, 06:22:43 PM MDT 13 Comments

Roller from CVS

The site is now running the latest and greatest version of Roller from CVS. Let me know if you see any issues, and as always, feel free to play around with my demo user (user: test, pw: roller).

Posted in Roller at Apr 27 2003, 03:04:05 PM MDT 1 Comment

Very Fricken Cool!

Dave made some CSS improvements to Roller's Wiki - and I must say it looks very nice! Nice work Dave - I dig it! It's cool to see how the Roller Wiki has quickly become a great documentation engine for this project. Especially with Dave's recent screenshots and user guide enhancements.

Posted in Roller at Apr 27 2003, 02:39:58 PM MDT 1 Comment

What do you want to be doing a year from today?

One year from today (April 25th, 2004), what do you want to be doing. I don't care if it's career or life related, I'm just curious. Why? Because I think it's important to set goals and realize what you were thinking last year. So here's mine:

  • I'd like to teach at least one technical training course in a classroom environment. I loved doing this for Sun.
  • I'd like to get my Java 1.4 Certification and possibly one more, don't know which one yet, something that'll inspire and challenge me to learn something new.
  • Be a good husband for my (possibly) pregnant wife.
  • Spending LOTS of time with Abbie and Julie - hopefully only working 40 hours/week at a higher paying job.
  • Attempt to figure out what I want to do for the next 5 years. Do I really want to be a code monkey for the rest of my life - or get into management?
  • Read Abbie at least one book from the Chronicles of Narnia.
  • Sell our house and move into a new one in either Colorado, Florida or California (in order of personal preference). Julie's preference is Florida, Colorado or California (her sister lives in San Diego).

Posted in General at Apr 25 2003, 03:48:27 PM MDT 1 Comment

Why don't we get drunk and ...

Why don't we get drunk and ...

Posted in General at Apr 24 2003, 10:03:52 PM MDT Add a Comment

Sunset at Buffett.

Sunset at Buffett.

Posted in General at Apr 24 2003, 07:28:52 PM MDT Add a Comment

Tailgaiting at Jimmy. ;-)

Tailgaiting at Jimmy. ;-)

Posted in General at Apr 24 2003, 06:56:50 PM MDT Add a Comment