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.

AppFuse and all it's libraries

I received a question about AppFuse that I've been pondering every since. The question basically boils down to two things:

  • How do you manage Eclipse's .classpath file in conjunction with lib.properties (the file that manages it for Ant)?
  • When using AppFuse for multiple projects, do you put a "lib" folder in each project or use a central repository?

Quick Answers: I replace files in the appfuse/lib directory and update lib.properties. Then I update my project properties in Eclipse to reference the new jars. A pain, yes - but only a 2 minute process. I run all my tests before I bother changing the Eclipse classpath. As for multiple projects - the easiest thing to do is to move $yourProject/lib to a folder called "libs" in the same directory as $yourProject and change the ${lib.dir} property in properties.xml to point to the new folder.

Begins Rambling... I'm currently using AppFuse on 3 different projects. 1 is AppFuse itself, the 2nd is Struts Resume, and the third is for a client I created a webapp for in August. Right now, when I synch up Struts Resume with AppFuse, I copy paste from appfuse/lib to struts-resume/lib and update the lib.properties appropriately. I can't just copy lib.properties to struts-resume/lib because struts-resume uses libraries that appfuse doesn't. Yes, this is admittedly a pain in the arse. It's almost as bad as changing all the method signatures when moving the Hibernate Session from all method signatures into the constructors (can your IDE do that?!). I don't want to make people download appfuse to build struts-resume though, so I doubt I'll change this process.

The whole "massive lib folder" has been bouncing around in my head for quite some time. I'd like to use Maven or Greebo to download the dependencies for AppFuse, but at the same time, it's nice being able to download the whole thing at once and be up and running. I don't want to go the Maven route because I don't really want/need a website for AppFuse and it sounds tough to get it working with XDoclet (though WebShop looks like it might be a good template). KISS

The project.xml in AppFuse is my feeble 20-minute attempt to get it Mavenized (it's currently not used). I tried Greebo this morning, and it really does nothing for me. Especially since I've setup separate compile/test classpaths (read from lib.properties). It'd be a real pain with Greebo to separate out the classpath's for testing and building - it seems to only support one long classpath. Also, who wants to make their whole best-practices open-source app dependent on a 0.1 open-source app?

As for having my IDE (wether it be Eclipse or IDEA) reading the classpath from Ant - that would be the sweetest feature of the year! Currently in Eclipse and IDEA, I have to give an absolute path to j2ee.jar since I don't want to distribute it (it's 11 MB). When I switch b/w OS X and WinXP, I always have to change this classpath. I'm sure there's an easier way with setting variables in the IDE, I just haven't figured it out yet.

The other thing that is annoying is that IDEA doesn't seem to read my $ANT_HOME environment variable. Does it have it's own $ANT_HOME? It's annoying for me b/c I check for JUnit classes in the classpath in my "init" task, and IDEA doesn't find them. Don't worry Eclipse bashers - it doesn't work in Eclipse either. This is fine with me b/c I prefer the command line, but those "I use my IDE for everything" folks might not like it because they can't run AppFuse's build.xml file from w/in their IDE.

Posted in Java at Oct 23 2003, 06:21:59 PM MDT 7 Comments

Blogging leads to Free Book

This blogging thing rocks. Today I got one of the books I've been meaning to buy - for FREE! Check out the following e-mail I received from Manning:

Hello Matt:

We are contacting you regarding Vincent Massol's new book, JUnit in Action, which Manning will be publishing in November. Vincent mentioned that you might be interested in certain parts of the book which relate to topics recently discussed on your blog http://www.raibledesigns.com/page/rd. There is a chapter on unit testing tag libraries.

He has asked us to offer you a complimentary copy of the PDF ebook which just became available today. We hope you will find it of interest.

Sweet! Thanks Vincent! I read the chapter on unit testing tag libraries - very clear and to the point. Unfortunately, for tags with bodies, you still have to verify HTML, so tagunit might be better for these. I like the coverage on the Maven Plugin for Cactus and also how to use JSTL's ExpressionEvaluatorManager for reading tag attributes. The link I found, the chapter has code samples.

I've never really liked eBooks, but I have to admit, this is pretty damn convenient. Especially since I tend to pack around 10-20 books to each new contract. What about sharing? Can I let co-workers borrow my PDF like I let them borrow my books?

Posted in Java at Oct 22 2003, 01:43:16 PM MDT 4 Comments

Panther has shipped?

Apple just sent me an e-mail stating that my $20 (gotta rub it in) Panther upgrade has shipped. Fedex Tracking seems to disagree - at least as of 9:00 this morning.

Posted in Mac OS X at Oct 22 2003, 08:59:34 AM MDT 3 Comments

RSS Weather

Found Winer: RSS Weather. Our local news says snow this weekend, RSS Weather just says it's going to be cold. Lows in the 20s, highs in the 50s. Today - mid 80s.

Posted in General at Oct 22 2003, 08:42:18 AM MDT Add a Comment

A List Apart 3.0

Web Standards Guru Zeldman has re-designed and relaunched the best web standards webzine available today (IMO, of course):

Ladies and gentlemen, A List Apart 3.0. The magazine has been redesigned from front to back. It features three XML feeds and three new articles by three of our favorite writers: Joe Clark on Facts and Opinion About Fahrner Image Replacement; Douglas Bowman on Sliding Doors of CSS; Dan Benjamin on Random Image Rotation. Much more. [Jeffrey Zeldman Presents: The Daily Report]

Good stuff - there's a nice tabs article and XML Feeds for your favorite aggregator.

Posted in The Web at Oct 22 2003, 08:32:30 AM MDT Add a Comment

New Jobs and School starts November 3rd

When we had Abbie last year, Julie took a year leave from her job at Qwest. She was never planning on going back to work, but her old boss called her up last week and they've been negotiating. To make a long story short, she's going back to her old gig part-time (3 days per week) and starts on the same day I start my new gig (Monday, November 3rd). Because of this, Julie went searching for day care providers today. After seeing a couple nasty ones (she actually left crying), she visited a Montessori school across the street from her office. They have a 6 month waiting list for infants - Abbie's not a toddler because she can't walk unassisted nor drink from a cup on her own. Luckily, Julie was able to sweet talk them into accepting Abbie as an infant and she starts school in a mere week and a half. The place is damn expensive, but hopefully she'll learn some cool stuff. We have some friends who's daughter is going to a different Montessori school in Broomfield and she is almost potty trained at 15 months! She also knows 4 or 5 signs (sign language) and helps clean around the house.

I'm sure this will prove to be an interesting chapter in our lives - Abbie cries every time we leave the room now - so that Monday will probably suck for her. Should be a good winter though - Julie is planning on working Tuesday through Thursday and I hope to work from home on Monday and Friday.

As for the move to San Diego? We still want to, but the weather has been so nice here (80s) that Julie hasn't been motivated lately. The biggest reason for moving is to be closer to family (her sister lives there), but the job market is hopping here right now, so neither of us is that motivated to leave. I think my best bet is to get a telecommuting gig and move during that contract, but those are pretty tough to come by. Who knows - there definitely seems to be more Java opportunities in San Diego than there is in South Florida. I love it here, especially with ski season just around the corner ... I wonder where we'll be next year at this time? I predict California or in a new house (our current one is only 675 square feet).

Posted in General at Oct 21 2003, 11:13:06 PM MDT 6 Comments

Want my job?

My current client has posted my position on the Rocky Mountain Internet User Group Mailing List. If you live in the Denver area (commute from Boulder is better), this is a fun gig.

Posted in Java at Oct 21 2003, 08:56:02 AM MDT Add a Comment

Why Macs rule (they don't run Windows)!

I'm working at my local library today. I'm working from home, but an electrician is working on our house, so now power there. I'm working in the "laptop workstations" area - which just happens to be where a lot of students come for laptop support (incoming freshman are required to have a laptop). They wave a campus-wide Wi-Fi network, but I'm not a student, so alas - no access (that's why I'm plugged in). Since I've been here (approx. 4 hours), a number of students have come by to get their laptops fixed. All have been Windows XP machines, all have had Virus or Spyware issues. What a maintenance nightmare from a tech support perspective. It's good to be a Mac user - no viruses on my laptop!

Posted in Mac OS X at Oct 20 2003, 01:39:54 PM MDT Add a Comment

Upgrading from Struts 1.1 to Nightly build

I'm upgrading our application at work to the nightly build (20031020) of Struts in order to use the validwhen Validator. I found a few deprecations and errors in the process, so I thought I'd share to help others upgrade easier:

  • ActionError has been deprecated in favor of ActionMessage. Likewise, ActionMessages.GLOBAL_MESSAGE replaces ActionErrors.GLOBAL_ERROR.
  • Methods in ResponseUtils have been deprecated in favor of TagUtils' methods.
  • RequestUtils.message has been deprecated in favor of TagUtils.message. Other methods include RequestUtils.lookup.
  • Many of the methods in TagUtils aren't static (they where were in Request/ResponseUtils), so you have to create an instance of TagUtils. Anyone know the logic here?
  • ValidatorResources.get deprecated in favor of ValidatorResources.getForm.
  • ValidatorForm.getFieldMap() is gone, which no apparent replacement method (at least not in the JavaDocs).
  • The Tiles' Controller interface's perform method has been deprecated in favor of execute. You gotta love this one - while perform has been deprecated, you must use it or you will get a compile error saying you must implement it (or declare your class abstract). Same goes for execute. So to upgrade, I had to implement both methods - where my perform method calls my execute method.
  • org.apache.commons.lang.NumberUtils moved to org.apache.commons.lang.math.NumberUtils
  • org.apache.commons.validator.ValidatorUtil moved to org.apache.commons.validator.util.ValidatorUtils
  • stringToInt(java.lang.String) in org.apache.commons.lang.math.NumberUtils has been deprecated. Not according to the its JavaDoc.

Final tally - two deprecation errors that don't seem to have replacements (yet):

    [javac] .../src/web/org/appfuse/webapp/filter/BreadCrumbFilter.java:182: 
        warning: stringToInt(java.lang.String) in 
        org.apache.commons.lang.math.NumberUtils has been deprecated                                                                                                  
    [javac]        int mSS = NumberUtils.stringToInt(temp);                                    
    [javac]                                  ^                                                      
    [javac] .../src/web/org/appfuse/webapp/taglib/LabelTag.java:71: warning: 
        getFieldMap() in org.apache.commons.validator.Form has been deprecated                              
    [javac]        Field field = (Field) form.getFieldMap().get(fieldName);               

Later: Thanks to Steve Raeburn (via the struts-dev mailing list), I now have no deprecation errors. NumberUtils.stringToInt(String) is now NumberUtils.toInt(String) and Form.getFieldMap().get(String) is now Form.getField(String). Thanks Steve!

Posted in Java at Oct 20 2003, 10:22:00 AM MDT 2 Comments

My IDEA Evaluation - Eclipse is better

I've been trying to use IDEA (on OS X) for the past few weeks and I keep reverting back to Eclipse for features that seem to be missing. I know the features must be there, but I just can't find them. Why else would everyone like it so much? Sidenote: I've never used IDEA for a feature that doesn't exist in Eclipse - I'm sure there are some, I'm just not using them. It sure would be cool if someone created a HowTo explaining how to migrate from Eclipse to IDEA. In the meantime, I'll settle for posting my questions here:

  • Debugging in Tomcat - I'm currently using Sysdeo's Tomcat Plugin in Eclipse for Tomcat 4.1.27. It's super easy to setup and use - I expect the same ease-of-use from IDEA. I haven't looked much, but I'd love to hear feedback on IDEA's Tomcat debugging support.
  • Renaming a variable in a JavaBean renames getter and setter methods. Sounds simple enough, in my 10 second search, I couldn't find it. In Eclipse, right-click -> Refactor -> Rename.
  • Override/Implement methods (from parent classes and interfaces). Right click -> Source -> Override/Implement methods in Eclipse.

I'll add more as I think of them throughout the day. So far, I like IDEA, but to be honest - it's not saving me any time over Eclipse. It also locks up as much as Eclipse and it's responsiveness is still a big sluggish on OS X (10.2.8) with 1 GB of RAM (1.33 MHz processor). Hopefully Panther will make both IDEs faster. Two weeks ago, I was thinking of buying it (as well as Dreamweaver) - now I'm frustrated with IDEA's lack of features and Dreamweaver's slowness. I'll probably pass on shelling out the cash since Eclipse and BBEdit are giving me all the features I need in IDEA and Dreamweaver.

Posted in Java at Oct 20 2003, 06:17:51 AM MDT 22 Comments