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.

Jack is crawling!

Jack's been scootching around for a couple of weeks now. Tonight he decided it was time to start using his knees - and lo and behold - he's now a crawler! Good stuff little man. :-D

Jackie Poo
Jack in his scootching days

On related note, I showed Julie that today (05.05.05) only happens once in 7000 years - she responded with "yeah, well Jack will only crawl once ever."

Posted in General at May 05 2005, 10:11:46 PM MDT 2 Comments

Bike to Work Day is June 22nd

Bike to Work Day will be on Wednesday June 22, 2005 this year. Hat tip to Greg for the reminder. Today I'm going to ride my bike to work for the first time in a month. It's 65° F right now, which means it'll probably be 70 or so by the time I leave. Below is a pic I snapped on our anniversary - it'd be nice to have this as a ride to work.

Fog Catcher Inn, Cambria, CA

Posted in General at May 05 2005, 09:41:54 AM MDT 3 Comments

AppFuse Videos

I know I said I'd never do an AppFuse video, but after having many requests - I decided to go ahead and make a couple. The first one is a demo of creating a new project and then installing and browsing that project in your browser - to see all the out-of-the-box features.

The 2nd one basically all the stuff that's done in the tutorials - using Spring MVC for the web framework. I create a Person.java object and then use AppGen to generate all the code for it. In this one, I make a number of mistakes (but solve them all). I thought about going fully happy-path, but then decided it was important to show some gotchas that might occur.

I used the trial version of Camtasia Studio to create these videos. Thanks to Keith at KGB Internet for hosting the demo site for AppFuse. If you need Tomcat hosting, Keith offers an excellent service at a very good price.

Update: You can also download these videos for off-line use.

Update 2: I updated these videos for AppFuse 1.9.3.

Posted in Java at May 04 2005, 09:48:40 AM MDT 32 Comments

Keeping development and production databases in synch

We're getting ready to put the app I developed into production and we're facing an interesting issue. This app is designed to be a simple interface for mapping an "attribute value" from one system to another system. Currently, we do this with SQL in our dev database, and then copy these tables' data to production when we deploy.

However, with this application, we now have the ability to push out the "mapping responsibility" to our users. The problem is that if our users enter the data in production, we have to figure out a way to synch between dev and prod. We constantly need to enter our own mappings in while we're developing - so there's always going to be data entered in both dev and prod databases.

Is it possible to share the same sequence tables b/w Oracle instances and use triggers to do a second insert into dev when someone does something in prod (or vise versa)? I suppose a manual solution is possible - where we make sure and enter values into prod when we enter them into dev, but that's just ugly.

Update: TheServerSide has additional coverage of this topic.

Posted in Java at May 03 2005, 02:38:53 PM MDT 14 Comments

AppFuse Demos moved to demo.appfuse.org

I bought the appfuse.org domain name sometime last year. I haven't done anything with it for the most part and I've just pointed it to this site. It's amazing how many people actually use it - it's my 4th largest referrer! The demo site I have at Kattare (demo.raibledesigns.com) has a whole slew of demos installed on it, so I contacted Keith (at kgbinternet.com) to set me up a new domain for AppFuse-only demos. These can now be found at http://demo.appfuse.org or by clicking on of the URLs below. The site is currently running AppFuse 1.8 with JDK 5 and Tomcat 5.5.7.

The "Issues" link on this site won't work yet - I'm in the process of setting up JIRA at http://issues.appfuse.org. Hopefully we'll have it done sometime this week. Contegix has been gracious enough to offer free hosting of AppFuse's JIRA instance.

Update: AppFuse's JIRA is now up. Thanks again to Atlassian for a great product and to Contegix for hosting it. The quick installation and support from Contegix has been outstanding.

Posted in Java at May 03 2005, 09:54:30 AM MDT 10 Comments

The Technology Blahs

I think I've hit a point where I don't care about the latest and great techo-gadget anymore. Maybe it's just a phase, but nothing out there really excites me right now. I've never been into video games - they're too much of a productivity black hole and I know I'd be the type that'd stay up until 4 a.m. playing the latest XBox game. Therefore, I don't go there. PSP, XBox, etc. don't excite me b/c I'm fully aware of their addictiveness.

The other gadget I've often loved in the past is having a fancy bluetooth phone. Sure it's cool when combined with a PowerBook for synching and browsing the internet, but I've come to the conclusion that I don't need one. Maybe it's because I lost it in California last week and haven't missed it one bit. Cell phones - blaahhh - who needs them?

Lastly, there's the new OS X. I'm fully aware that someday I'll be enthusiastic about it, but right now I just don't care. I think it's because I've given up using my slow-ass PowerBook for the most part. I used it for 3 months at my current project and have since switched to a much faster Windows desktop. I've come to realize a couple of things about my PowerBook: 1) the slow problem is more a personal issue than a computer issue - I develop faster on Windows and 2) I enjoy a desktop much more than a laptop - where there's a real keyboard and mouse. If Apple will get off their ass and make a fast PowerBook, I'll get off mine and pony up for a keyboard and mouse. If there's not a dual core G4 or a PowerBook G5 this summer, I just might have to get a PowerMac G5.

Hmmm, I just went to the Apple Store to link to the G5 and there's a "We'll be back soon" sign. This implies a major announcement today. It is Tuesday... ;-)

be back soon

Posted in Mac OS X at May 03 2005, 06:07:27 AM MDT 8 Comments

Hitchhiker's Guide to the Galaxy

Like a few others, I went and saw the Hitchhiker's Guide to the Galaxy this weekend. I took my parents (who were in town for a brief visit) and none of us had read the book or knew anything about it (except it's a cult classic). I've read a lot of criticisms about the movie today on blogs, but most seem to be related to the book vs. movie thing. IMO, the movie is rarely - if ever - going to be as good as the book.

We all enjoyed the movie and I laughed my ass off throughout. I thought the characters were great and the special effects were incredible. I'd see it again w/o reservations. However, I'm easy to please when it comes to movies - so you might want to take my opinion with a grain of salt.

Posted in General at May 02 2005, 05:58:22 PM MDT 6 Comments

[ANN] AppFuse 1.8 Released!

This release of AppFuse replaces Container Managed Authentication (CMA) with Acegi Security. Other major features include numerous bug fixes to AppGen and a refactoring of build.xml to use Ant 1.6 features. Eclipse and IDEA project files were also improved so you can easily run tests from within your IDE. A MyJavaPack all-in-one installer was also added so you can download everything you need for AppFuse at once. Eclipse and its plugins were not included in the initial release, but may be in a future release.

If you find any issues, let us know.

Update: You can now see Demos and Videos.

Posted in Java at Apr 29 2005, 08:51:08 AM MDT 11 Comments

Using DWR with Spring and Hibernate

For the past few weeks, I've been developing an application using Struts, Spring, Hibernate and the DWR project for my XmlHttpRequest framework. As you might remember, I used JSON-RPC for Ajax stuff on my last project. I found DWR to be much more full-featured and easier to use. This post is meant to capture some issues I encountered so others won't have to jump the hurdles that I did. For those of you that get bored quickly, here's a movie (QuickTime) of the app's Ajax features.

I've been using version 0.4 of DWR, and I haven't had a chance to try out version 0.5. When I first started using it, I ran into a ThreadDeath problem that was easily resolved by changing a log.debug message to System.out.println. I tried to reproduce this issue yesterday and couldn't, so who knows what that was all about. As far as configuring DWR in your webapp, that's pretty easy to do, and well documented. See the project's documentation or this Spring MVC HowTo.

Here are a few things I remember from my development experience.

  • The examples are great, especially how to dynamically edit a table.
  • When developing, make sure to set the "debug" init-param to "true". This allows you to go to http://location:8080/yourapp/dwr and see a screen that allows you to call methods on your exposed classes.
  • In WEB-INF/dwr.xml, you need to specify a converter for each POJO you want to expose to your UI via JavaScript. I started out by converting a whole package, but found this to be *extremely* slow (we have a package of around 50 DTOs). So I changed it to be only the DTOs I was using. This turned out to take about 30 seconds to do the conversion, and was again unacceptable. The problem turned out to be that the converter was invoking all the lazy-loaded children for each DTO. My final solution was to create a NameValue object and only convert that. Then in my Spring bean, I populate it from DAOs and DTOs. I'm using Spring's OSIVF for Hibernate to ensure that DWR doesn't invoke lazy-loading.
  • I had to override a few of DWR's JavaScript functions in util.js b/c they didn't work for me. I changed showById() and toggleDisplay() to use style.display='' instead of style.display='block' b/c this is what I've always used and block doesn't work that well. I also changed useLoadingMessage() to have a cleaner-looking load message.
  • I used the Fade Anything Technique in this project and found that IE likes to have full 6-digit hex values for colors in CSS rules. The shorter 3-digit hex values simply don't work in IE.
  • Using "test" buttons that only showed up for my username proved to be a great way to test the UI and the Ajax stuff. These buttons called a number of JavaScript functions to drive the UI and wait between invoking different functions using window.setTimeout.

All in all, using DWR was a great experience and I definitely plan to use it more in my projects. The client loves the app - especially since it's wicked fast and seems to work like a desktop app.

Posted in Java at Apr 28 2005, 02:10:26 PM MDT 31 Comments

Java2Html Plugin for JSPWiki causes downtime

There's an annoying thing that currently happens with the Java code on my wiki: selecting code to copy doesn't work in Firefox (try it). Any easy workaround is to use IE. However, I found a solution yesterday after communicating with the author of the Java2HtmlPlugin for JSPWiki. His solution was to upgrade to the latest version (4.1) of the library. I did the upgrade yesterday morning, tweaked a couple of stylesheets and called it good. The copying was working and everything seemed to be fixed.

In the last 24 hours, this site has crashed around 8 times - seemingly every two hours. This is strange b/c it's been up a week at a time prior to that, as well as the fact that my ISP has scripts to restart Tomcat if it's not responsive. The only thing I changed was the java2html.jar, so I'm guessing that was the problem. I backed out the change this morning - and copying with Firefox is going to suck once again. Hopefully that change fixes the stability of this site.

Update: This site crashed 3 times today even after I backed out yesterday's change. It must be something else. It's wierd that it's crashing now after having several weeks of excellent stability.

Posted in Java at Apr 28 2005, 09:48:13 AM MDT 8 Comments