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.

Struts Training: Week 5

I'm dialed in and listening to Don Brown presenting on Struts and XML/XSL. Don is a lucky guy - he's presenting from Hawaii this morning, where I'm assuming he lives. The bad part for him - it's 5:30 in the morning there. Don is one of the developers of Stxx and has also developed a Cocoon plugin for Struts. He works for DigitalNet and currently is working on a contract for the Navy. Hmmm, wonder if they're hiring - I'm willing to bet that Julie would consider moving to Hawaii! Enough dreaming - onto the presentation.

The following are types of XML/XSL Extensions for Struts:

  • XSL-based
      - stxx
      - StrutsCX
  • XML pipeline-based
      - Cocoon Plugin

stxx: features
  - replaces JSP with XSL
  - in action, create XML manually, or get it from another source
  - stylesheet selection based on criteria like browser type
  - automatic serialization of ActionErrors, resources, and request objects
  - extendable to support any object serialization or XML transformation technology
  - supports both Struts 1.0 and Struts 1.1

Pretty cool - for Struts 1.1, there's a Stxx plugin, and you use a .dox extension to indicate it needs transformations. In a stxx-transformations.xml, you define "transformations" that define XSL stylesheets, where to run at (client|server), and mimeTypes (html|xml|pdf). Sweet - maybe I can use this sucker for struts-resume! I wonder how Stxx compares with StrutsCX. Since Stxx can be plugged-in and can co-exist with JSPs, it might be the right path for me.

Advantages of Stxx: Simple, use of caching makes tranformations quick, can be used with Velocity or Cocoon, lighweight, very extendable.

Disadvantages: XML pipeline very limited, poor scaling of message resources (if ApplicationResources.properties in huge - i.e. > 1MB), requires all data to be gathered in Action (MVC-push).

Compared to StrutsCX - Don says that it's very similar, except that StrutsCX supports the Validator. As for the Cocoon Plugin, it supports all the features of Cocoon. Describing the features of this plugin seems pointless as I would just be describing features of Cocoon. For the Cocoon PlugIn, you define it the same as a regular plugin, and then change your path to point to an XHTML-compliant JSP. Apparently, Don has modified the struts-example app to use the Cocoon PlugIn, so hopefully I can provide a link to the download.

Here are some resource links from Don's presentation that might interested you:

As for my presentation on Remember Me and XDoclet, you can find those slides here. The slides (and lab) uses a simple JSTL-based app I whipped up last weekend. I'm planning on hooking it into a database eventually to allow online editing of a presentation, but I probably won't do that until I give another presentation.

Posted in Java at Apr 05 2003, 09:35:09 AM MST Add a Comment

Bad Cables?

I'm still experiencing issues with my Internet Connection, and I'm still blaming my ISP. Especially since I went out and bought a new router and everything. Now I have internet access, but it's intermittent and flaky. It's so flaky, in fact, that anytime I've needed to ssh into this site's server or check in to CVS at SourceForge, I've had to dial-up. However, an ingenious idea hit me this morning. Since the original problem was a bad cable between my ISP's bridge and my router, maybe more cables could be bad. So I stuck one of my wireless cards in my box, and Voila! I'm surfing like the wind again. I guess I'll have to stop at a store and see if they have an "ethernet cable tester".

I'm off to work. I'll be broadcasting my presentation (via WebEx) from there today since I didn't trust this connection up until now.

Posted in Java at Apr 05 2003, 07:42:24 AM MST 1 Comment

[ANNOUNCE] Struts Resume and AppFuse 0.7 Released!

There's nothing like tootin' your own horn. What's even worse is checking all this stuff into CVS and then uploading it on a dial-up connection. Anyway, here it is - the latest and greatest version of struts-resume and (finally) a version of appfuse. AppFuse is basically struts-resume w/o any resume stuff. There's not much new that's visible for struts-resume, the only real things are User Administration (no add, just list/delete/assign roles) and a smart-menu that stays expanded based on your previous selections. Here is a full list of what's new in 0.7 (both apps):

Features in 0.7
===============
- Upgraded to Hibernate 2.0 Beta 4.
- Upgraded to Struts 1.1 nightly build (2003.03.26) to fix Validator issue.
(http://tinyurl.com/87xa)
- Upgraded DBUnit to 1.6-dev to fix batchStatement error in Ant task.
(http://tinyurl.com/8ei2)
- Upgraded Canoo WebTest from build265 to build276.
- Upgraded XDoclet to nightly build (2003.03.28) for Hibernate 2.0
compatibility. Apache module is still customized for POJO -> ActionForms.
- Upgraded Display Tag Library to version 0.8.5.
- Renamed "test-canoo" task to "test-jsp".
- Added "db-load" as a dependency to running unit tests to get a fresh
database each time.
- In LoginServlet.java and BreadCrumbFilter.java, pre-pended contextPath
to authURL (i.e. "j_security_check") to get absolute path.
- Added User Administrator to list/edit/delete users. This feature
includes using indexedProperties on a form - still using XDoclet, but using
a subclass of UserForm, called UserFormEx to hold the getter/setters for
the indexedProperties.
- Wrote more Cactus and Canoo Tests to verify Resume editing and User
Administration functioned properly.
- Added icons to success and error messages template (common/messages.jsp).
- Implemented role-based Permissions on menu by adding
permissions="rolesAdapter" to in menu.jsp.

I've put a line through the renaming of "test-canoo" to "test-jsp" because it's in the README (part of the download) and I don't want to re-upload just because of one stinkin' line.

Tomorrow, I'm actually presenting for the Struts Training class, so I won't be able to give a full review. One of the gents who wrote Stxx will be presenting first at 8:30 MST, and then I'm up for my preso. I'm going to do some short and sweet stuff on Remember Me and XDoclet with Struts. If you're interested, you can do the labs I put together. I'll post the slides when I'm done presenting.

Posted in Java at Apr 04 2003, 11:56:25 PM MST 3 Comments

How do I implement password rules?

Does anyone know of any open source packages or techniques for implementing password rules. For instance, I need to implement the following rules for password in my application:

Passwords must be made up of at least three (3) of the four (4) following 
classes of characters: Lowercase letters, Uppercase letters, Numbers, Special 
Characters.

I can probably whip up some JavaScript for this, but I'd need server-side code to catch if JavaScript is disabled. I'm guessing this is not possible with regular expressions.

Posted in Java at Apr 04 2003, 10:36:31 AM MST 7 Comments

New Job, New Computers

Have you see what Chris is getting at his new job? Holy shit - I was lucky to even get a machine at my current contract!

  • Pentium 4 3GHz with 1GB RAM, 120GB disk, etc, and a 20" flat panel display
  • New G4 Tower (maybe dual proc? not sure yet), 1GB RAM, 20" flat panel display
  • 15" Ti Powerbook

Sounds like either 1) a great company to work for, or 2) a company that won't be around very long. But it sounds like a good company...

The new job will be way more stable (think big company, but not evil company ;) pay a lot more, have stock that's actually worth something, and rockin' benefits.

Man am I jealous!

Posted in General at Apr 03 2003, 05:31:07 PM MST 1 Comment

Mozilla going to Phoenix

The coolest part about Mozilla moving to the Phoenix codebase is that Matt Croydon got quoted. I've been using Phoenix ever since it came out over Phoenix. If you've been using Mozilla over Phoenix, you're losing precious seconds, possibly minutes throughout the day. It's soooo much faster. I used to be die hard IE user - but Phoenix blows it out of the water. I don't know that it's faster, but if not, it's only milliseconds. And once you're addicted to tabbed browsing, it's tough to go back. The best part about the move is that (hopefully) Phoenix will get better. It's already got way more themes, which allows you to make it look as cool as you want.

Posted in Java at Apr 03 2003, 02:56:36 PM MST Add a Comment

Home Sick

I figured riding to work yesterday would get me in better shape, but rather, it has crippled me. After my hour n' 45 minute ride to work, I started to feel sick in the afternoon. Sick like a sore throat and headache. Around 5 o'clock (time to go home), I still felt like crap, but thought some more exercise would do me good. It took me an hour and 35 minutes to get home, and I was wiped out when I got here - in bed at 8:30. I didn't feel too bad last night, just tired. This morning I woke up to tonsils the size of golf balls (yep, I still have my tonsils), a headache and that "I-have-a-cold, man-I'm-tired" feeling. So I e-mailed in sick today, and slept in until 11. I've discovered that my lack of internet connection might be my router, as my LAN does not work anymore. It did work when this first happened, but now it doesn't. I guess I'll drag myself down to Circuit City and try to get a replacement before the repair guys show up and charge me $75/hour.

One thing I've learned using dial-up this week. It isn't that bad. In fact, this site seems to perform just as well on dial-up as it does on broadband. Aaaah, the beauty of server-side code. As for the fact that FreeRoller has been up since Monday, I think it's due to the newest version of Tomcat more than anything.

Update: Well, my ISP sent someone out today to fix my internet connection. It was wierd, my router (a Linksys) would restart itself every few seconds while it was plugged into their wireless receiver. The solution turned out to be replacing the ethernet cable between their router and mine. However, my internet access has been pretty spotty ever since, and I even upgraded the firmware on my router. The guy mentioned that Linksys where probably the poorest quality routers, but awful easy to configure. So I think I'm still going to head down to Circuit City and buy a new one. In order to post this, I ended up using dial-up.

Posted in General at Apr 03 2003, 11:21:12 AM MST Add a Comment

Bug in Ant 1.5.2?

I found out the hard way that there might be a bug in Ant 1.5.2. I'm running the following task as part of appfuse - and it generates a appfuse.zip file, and it's the correct size, but there's nothing in it. I reverted back to Ant 1.5.1 and everything worked fine.

<zip zipfile="${archive.target}.zip">
    <zipfileset prefix="${webapp.name}" dir="${basedir}">
        <patternset id="srcfiles">
            <include name="**"/>           
            <exclude name="build.properties"/>
            <exclude name="database.properties"/>    
            <exclude name="*.log"/>
            <exclude name="*/**.java.txt"/>
            <exclude name="${dist.dir}/**"/>
            <exclude name="${build.dir}/**"/>
        </patternset>
    </zipfileset>
</zip>

This particular problem happened with Cygwin on Windows 2000 using JDK 1.4.1_01.

Posted in Java at Apr 02 2003, 04:59:15 PM MST Add a Comment

String Tag Library 1.0.1

Jakarta's String Tag Library version 1.0.1 was released about a month ago. I found out today. I'm telling you here because you might be able to use it if you need to manipulate Strings for your UI. The only tag I'm using (from this library) <s:replace>, which can be very handy indeed. For instance, a common task with JSPs is the need to replace a new-line (\n) with an HTML new-line (<br />). With the String TL, it's easy (JSP 2.0 Syntax):

<s:replace replace="NL" with="&lt;br /&gt;NL" 
    newlineToken="NL">${myForm.text}</s:replace>

Posted in Java at Apr 02 2003, 03:36:36 PM MST 1 Comment

Struts FAQs

Every Struts Developer should probably read Sciosorks Struts FAQ. Good stuff there. Bookmark it and use it.

I rode my bike into work for the first time this year. I got lost, so it took me 20 minutes longer than it should have. Door-to-door: 1:45. I wonder how long it'll take me to get home tonight.

Posted in Java at Apr 02 2003, 11:01:05 AM MST Add a Comment