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.

RE: Money or Personal Satisfaction?

Nanik is blogging about choices as a developer, and starting a family.

It's hard now with family and soon baby is coming to the family, I start thinking what not we don't need in life - baby clothes, education, daily needments, medicines , insurance, etc. Some of you might say "Hey! why don't you do contract work?" well it's not easy especially with the current economic climate where everywhere you turn around you see IT people unemployed or getting laid off and people are willing to work for half the price than what the market rate is. At the end of the day If I calculate how much I have left from what I can get for contact work, it's not much. I don't know what will happen 2-5 years from now, will people stay and become developer even if the pay is bad? or will people start looking for other alternative that will enable them to collect enough money for all the necessary things in life and feel happy about it?

Go CONTRACT!! At least that's been the best for me for the last couple of years. I'm still getting fairly good rates and think that for the most part - developers are still way overpaid. I know many teachers (including Julie's Mom, 2 Aunts and an Uncle) and while they do fairly well - Julie and I were making more than them 2 years out of school - and they'd been working for 20 years! What's up with that?! And morever, developers (for the most part) actually like what they do! Think of all the folks out there that hate their jobs - and don't make squat. At least I really enjoy it - I'm doing one of my hobbies as work everyday. Like I tell Julie, she works WAAAYY harder than me everyday, I'm just a keyboard monkey.

While I enjoy contract work for its flexibility and feeling of freedom, it's awesome to work at a company with good people and a good product. When I worked at eDeploy.com as a full-time employee (Director of Web Development - how do ya like that title ;-), the pay was a lot lower than other companies, but it was the best job I've ever had. Of course, great people and Friday Lunches at Ironworks Brewery were great benefits. I'll never forget Friday lunches - what a great team-building activity - even if the food sucked, the beer was good.

The problem with our current economy is you're probably going to get a lower salary regardless of whether you work full-time or salary. I feel more secure at my current job as a contractor than as an employee. They're doing a round of layoffs on the 10th - Yikes! I hope no one on my team gets the Ax - and I doubt anyone will. The biggest downfalls of being a contractor are 1) paying for health insurance and 2) the uncertainty of your next job. However, I'd rather be actively looking for my next gig than getting laid off. I've been through that - and it really sucks. Health insurace costs are ridiculous - Julie has found reasonable prices from NASE, but it's still $300/month. The worst part - they don't cover pregnancy/birth costs until you've been covered by them for 25 months. And then they only cover $6000. Abbie cost $14000, but our insurance only paid $7000. Pretty cheap for how awesome she is.

Back to the point of this post... I've had a couple jobs where the money was awesome - but the job sucked. And it was the most miserable experience of my life. Julie had a similar job with KPMG where she was traveling to Dallas, Texas every week (she hates to travel). My worst was a contracting position at IBM, a year out of school, where I was making more than my 30-year-veteran boss. All he did for the 6 months I worked there was have me train someone to take over my job. So go for the personal satisfaction - you'll never know how much you had in your bank account next year - but you'll surely remember how much you were satisfied with your life. Smile more, play with your kids, and see if you can inspire a Friday Lunch crowd at your job. All will do wonders for your mood.

Posted in General at Jan 06 2003, 11:35:28 PM MST Add a Comment

Upgrading to Struts 1.1b3 - Tips

I upgraded one of my client's applications from Struts 1.1b2 to Struts 1.1b3 tonight. It was a small headache, but not too bad. As far as the differences b/w 1.1b2 and 1.1b3 - they're pretty significant. Some classes/methods are downright gone - not just deprecated, but gone. Oh well, that's why it's a beta - and it's free, so who's complaining? I'll try to remember a few issues I found. The first is how to create a DynaActionForm. The code below worked with 1.1b2:

DynaActionForm messageForm = 
    (DynaActionForm) DynaActionFormClass.getDynaActionFormClass(
                     Constants.MESSAGE_KEY).newInstance();

But the getDynaActionFormClass method is now gone, so you have to use this:

FormBeanConfig cfg =
    mapping.getModuleConfig()
           .findFormBeanConfig(Constants.MESSAGE_KEY);

DynaActionForm messageForm =
    (DynaActionForm) DynaActionFormClass.createDynaActionFormClass(cfg)
                                        .newInstance();

A few deprecation errors cropped up as well.

  • Action.MESSAGE_KEY -> Globals.MESSAGE_KEY
  • Action.ERROR_KEY -> Globals.ERROR_KEY
  • org.apache.struts.validator.StrutsValidatorUtil -> org.apache.struts.validator.Resources

Finally, I found an issue with using BeanUtils.populate(dest, orig). It worked fine with 1.1b2, but throws a NPE with 1.1b3. I replaced this with BeanUtils.copyProperties(dest, orig) and everything works as it should. My guess (from doing a toString() on the orig) is that "multipartRequestHandler=null" was messing things up.

It's interesting doing maintenance/enhancements on code that I wrote a year ago. I've learned sooooo much since then. I wish I could go back and re-factor a bunch, but my client would never go for it - it works right?! Maybe I'll refactor some for kicks - just to see if it's possible. I'd love to replace a few DAOMySQL's with DAOHibernate's ;-)

Posted in Java at Jan 06 2003, 11:16:48 PM MST 6 Comments

CVS, SSH and Passwords

Anyone know of a utility that can be used to "remember" my CVS password? I can only access the server using SSH (similar to SourceForge) and it's getting to be a real pain to type my password every time.

Posted in Java at Jan 06 2003, 07:58:33 AM MST 4 Comments

How do you store your user's information?

After talking with Erik Hatcher a bit, I'm a bit worried about how I'm storing the current user's information. Basically, I'm putting a UserForm (extends ValidatorForm) into the session, and keeping it there to retrieve any user information I might need - in particular the userId. This is not the same as the user's login name, or the value I get from request.getRemoteUser(). How do you do this? I need the user's id from database lookups and filtering drop-downs, etc.

Posted in Java at Jan 06 2003, 07:54:05 AM MST 2 Comments

I'm lovin' Eclipse and its plugins (CVS, Hibernate)

After working with Eclipse pretty heavily for the last week - I am beginning to become one of those guys that cannot live without an IDE. It's unfortunate in one sense, but it's great because it sure is saving me a lot of time. I love the "Organize Imports" feature, especially on the package level. Use it with caution if you've got generated classes - or add the generated classes to your classpath. I also really like the Jalopy Beautifier. I'm sure IDEA has these features too - if it doesn't, it should! Another cool plugin I found last week was one from the Eclipse team to hide CVS directories.

This morning, I found that the Hibernate team has released a new plugin for Eclipse - the Hibernator.

*** Hibernator - Hibernate plugin for Eclipse ***

Provides an Eclipse view to create and edit Hibernate mapping files (.hbm.xml).

Note this plugin will only work with Eclipse 2 (WSAD 5) and above

* Installation

- Unzip hibernator-0.9.zip into <eclipse-install>/plugins - Restart Eclipse

* Using the plugin

Go to menu Window->Show View->Other and select Hibernator

Open up some Java source and the plugin will either display the mapping file <class-name>.hbm.xml or a generated version

To save the contents of the mapping file right click in the window and select "Save"

Report any bugs / Submit patches to - http://sourceforge.net/projects/hibernator.

I doubt I'll use this as I'm using XDoclet to generate my Hibernate mapping files from POJOs. However, the CodeGenerator for Hibernate is being re-vamped to allow for generation of .java files from an .hbm.xml file. Now if I could hook this into generation of Struts' ValidatorForms, I might actually use it.

Posted in Java at Jan 06 2003, 07:50:12 AM MST Add a Comment