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.
You searched this site for "suck". 89 entries found.

You can also try this same search on Google.

Tapestry looks very nice

Tapestry Home While leaving a comment on my ActionForms: Struts' bastard child post, Erik Hatcher sounds like a broken record:

> When are you going to just quit asking questions and try out Tapestry? 
> You can build it from CVS HEAD easily or just grab a 3.0 binary (currently 
> beta, but way stable). Drop in the WorkBench WAR file and see for yourself.

So I took 5 minutes and downloaded and deployed the WorkBench WAR. Check it out if you like. Looks pretty nice to me. The DatePicker is pretty cool, but it shows up in the wrong spot on Firefox - and it's annoying that I can't close it just by clicking on the screen somewhere (like most popup calendars). Also the Chart doesn't work on my Linux box (it worked fine on Windows).

However, if you're looking for something like the DisplayTag, Tapesty has that. The URLs it constructs for everything look a little ridiculous though. I wonder if a Filter with smarts could pretty those up?

Posted in Java at Feb 09 2004, 12:24:39 PM MST 10 Comments

Tomcat 5.0.18 Released

Download or read the Release Notes. You know what bugs me about this release? The release notes suck! There's no changelog - what bugs got fixed, which ones didn't? Any new features? I suppose I could go crawling around their bug tracker and find out, but isn't this the kind of information you'd like to see with the release? Should I upgrade? Why should I upgrade - is something broke in 5.0.16 that's fixed in 5.0.18? Are there memory leaks that got fixed?

The only reason I develop on 4.1.29 these days is because my Remember Me feature works on 4.1.x, but not on 5.0.x. I could make it work on 5.0.x, but it wouldn't be as secure. I hope to implement Charles' recommended cookie strategy and then go for 5.0.x as my development platform, but that'll be a few more days.

On another note, I've implemented the Tomcat Ant tasks in AppFuse and I must say, these things are nice. The main advantage is speed, which all developers love.

Posted in Java at Jan 22 2004, 12:35:42 PM MST 3 Comments

MD-5 password encryption and the "secret key"

According to a post on the Struts User mailing list, it's possible to encrypt a password using MD-5 (which is one-way), stuff it into a cookie, and then use a server's "secret key" to verify that it's a good one. Since I'm guilty of storing base64 encrypted passwords in cookies for a "Remember Me" feature, I'd love to figure out a more secure way of doing this.

So the question is - is it possible to implement "Remember Me" in J2EE in a secure way?

Setting the cookies on a certain path (i.e. /roller/security/) works, but not on Tomcat 5. I want to securely set my userid/password/rememberMe cookies at the root level of my app, map a filter to login.jsp (dispatcher = forward for TC 5) and be done with it.

Posted in Java at Jan 14 2004, 10:27:04 AM MST 6 Comments

Should I buy a PowerBook or a PC?

I received the following e-mail from Jason Boutwell a couple of days ago (published here with his permission).

I'm in the market for a new development laptop, either a P4 or a G4. I see from some of your older blog posts that you went through the same thing last year. First you went with a P4, then ended up with a PowerBook, so you've done both.

Since we seem to have similar professional interests (jobs where you BYOL, developing J2EE apps with tools like Hibernate, Struts, XDoclet, IDEA, etc.), you seem an ideal person to ask.

It's as simple as this: you can't beat the form-factor of the PowerBook. The fact that it's so small and light really make it a killer laptop. iPhoto, iMovie and iTunes are all killer apps and make digital photography and video so much easer. However, as a development environment - it sucks. It's sooooo much slower that my Windows XP desktop (that only cost $800).

My perspective of the speed difference might not be fair though - desktops (most likely) will always be faster than laptops. However, to run "ant deploy" for AppFuse takes 23 seconds on my 2.6 GHz CPU / 1.5 GB RAM desktop and 36 seconds on the PowerBook (1.33 GHz CPU / 1 GB RAM). It is difficult for me to develop on the Mac after developing on my PC for awhile, it's just so much slower. That being said, I don't think I'd be happy with a PC laptop - they're too ugly and bulky (for the 17" models) and don't offer the slick digital hub integration that the Mac does.

Don't expect the PowerBook to be a desktop replacement. And if you've never used a Mac, prepare to be frustrated. I've been a Windows user for 10+ years and getting used to the way a Mac works is not easy. It's been most frustrating for me because I can navigate around and do stuff on Windows really fast - it's almost like second nature. On the Mac, I have to think about how to do stuff. I think that Mac or Linux users migrating to Windows would feel the same frustration.

Above all else, you need to experience a Mac first hand. Go to your local Apple Store and play around with one. Download your favorite IDE and checkout an open source project from SourceForge. Download and install Ant and try compiling the project. You're gonna love the feel of the Mac, but you might find it's a bit slower than you're used to.

The one problem with not buying a PowerBook is that you'll always long for one. ;-) Would I buy a PowerBook again? Definitely. Would I give up my Windows desktop for a Mac desktop? No. Why should I give up all my years of becoming an efficient Windows user to be a slow-ass frustrated Mac user - it just doesn't make sense.

Posted in Mac OS X at Jan 10 2004, 05:58:17 PM MST 23 Comments

Denver JUG: XSLT and New EJB 2.0 Certification

Tonight I attented the Denver Java User Group meeting. Tom McQueeney did a nice basic concepts meeting on XSLT. Tom's presentation was a nice refresher on XSL and I learned a few things I hope I can remember the next time I use it. I've used XSL a couple of times in the last few years, and for those applications that I still maintain - I'm very glad I did. The e-learning app I developed last year uses JSTL's XML Transformation tags to render assets with different HTML (i.e. Flash, QuickTime, Image). It's worked great, and has always been very easy to add a new asset type to the XSL stylesheet.

The main speaker tonight was Kathy Sierra, the founder of JavaRanch. Her presentation was supposed to be on the new EJB 2.0 Certification, but it turned out to be a explanation of how EJBs work. Only about 1/3 of the room (approx. 40 attendees) had used EJBs, so I guess that's why she went that route. She didn't ask if we weren't using them by choice. ;-).

She started off her presentation talking about how the brain works and how it fights all day long to forget stuff. Your brain has a built-in crap filter. It only remembers those things that it needs to survive. It will only automatically remember those events that spark high emotions - fear, humor, arousal - because the chemicals caused by the emotions help you remember better. So when you're studying for your Java Certification (or any certification), the brain is going "screw this shit, I can survive without it." Repetition is a way to convince your brain that it is important. Another way is to get involved with your learning - be the EJB. Kathy did a captivating one-hour presentation with a number of audience members who acted out how EJBs work.

It was a very humorous presentation and great fun. An EJB presentation that was fun - WTF?! At one point, I looked around the room and almost everyone was learning forward and smiling. This lady is a captivating speaker, one of the best I've ever seen. I was very impressed with her teaching/learning techniques and I might just have to buy her book, Head First Java. Another highlight of the evening was that I actually won a free book.

Later: I forgot to mention what Kathy said about upcoming Sun Certifications. A couple new ones are coming: Mobile Application Developer, Web Services and an update to the Web Component Developer exam. She mentioned that the EJB 2.0 exam would probably remain at 2.0 for at least another year - until all the vendors caught up and support EJB 2.1. She said the Web Services one is going to be hard as will the next Web Component Developer Exam. The Web Component Developer exam will cover JSP 2.0 and Servlet 2.4. She also mentioned that she was reading Pro JSP to help create the WCD exam. How's that for an endorsement?!

Posted in Java at Dec 11 2003, 12:17:08 AM MST 5 Comments

Tomcat Issues

This site continues to puke and choke - and I believe it's 1) Tomcat or 2) my ISP. Why? Because all the other Roller installs seems to hum along just fine with no issues (i.e. Dave and JRoller). I get OutOfMemory Errors and too many connections open. As of last night, I'm thinking of a new strategy. Netcraft reports that this site is capable of running Resin 3.0.3. Maybe I'm reading it wrong, but it certainly seems like it to me. Now I just need to sit down and 1) figure out how to setup Roller on Resin and 2) do it. Knowing my luck, migrating to Resin won't solve anything, but it's worth a try!

Posted in Roller at Nov 06 2003, 08:41:21 AM MST 5 Comments

Panther vs. Jaguar ~ The results are in!

According to my performance tests, Panther is faster than Jaguar for most things Java related. Compiling whole projects with Ant is a few seconds faster. Opening IDEA is only 1-2 seconds faster. Opening Eclipse is actually slower. Booting is considerably faster - they've managed to trim off 1/3 of the boot up time.

I really like Panther so far, but I've discovered today that my 3rd party memory will have to come out and stay out. I've had 5+ black screens of death and after talking to tech support from OWC, they've confirmed there is an issue with all 3rd party RAM. They said they'd be tracking down the issue and getting me a replacement ASAP.

Things I dig the most: the Finder (more like Windows Explorer), Mail and Expose. I can't figure out what Expose's "Application windows" is for - it just seems to highlight the current app I'm in.

Things that suck? Photoshop gives errors on startup but continues to run. Ant puked at one point but seems to work fine now. A few of the haxies I've purchased aren't available yet (for Panther). XCode kinda sucks too - it forces you to use it's directory structure for projects. It looks cool, but we all know that good IDEs don't force you to do anything.

Posted in Java at Oct 28 2003, 01:18:40 PM MST 3 Comments

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

JSF and Apache Axis at DJUG

I attended tonight's DJUG Meeting. The meeting was informative and well attended, but it was way too long. I just got home and it's a bit after 11:00. To put it in perspective, I arrived at 6:00. That's 4 1/2 hours of Java love. Elections contributed to the delay, as well as David Geary's 2 1/2 hour JSF presentation.

The basic concepts meeting covered Apache Axis, presented by Scott Davis. He showed us how easy it was to use Axis to create a web service and how to call it from the command line. The biggest highlight of his presentation (for me) was Keynote - his presentation software. It had wicked transitions and the slides looked awesome (good purchase Scott). Other cool software noted during Scott's preso was CodeTek's Virtual Desktop.

Next up was David Geary for a presentation on JSF. This guy has quite a resume: worked for Sun from 1994-97, member of the JSF and JSTL Expert Groups, author of 6 books, designed and implemented the Struts Template library (2nd committer to Struts after Craig). Books coming soon from David: Core JavaServer Faces, Core Rave, and Extreme Struts. Extreme Struts sounds very much like the Struts chapter I wrote for Pro JSP - XDoclet, StrutsTestCase, JUnit, Tiles and Validator. If you're looking for documentation on AppFuse or Struts-Resume, you'll find it in this book. If you don't remember, I wrote these apps for my chapters.

Most folks reading this blog probably know what JSF is. If you don't, it's a Java-based framework for building web applications. It is designed to replace Struts, but that probably won't happen until well after it's 1.0 release (March, Beta in December). JSF was also written to compete with .NET's WebForms, kinda like how JSP was developed to compete with ASP.

Sun's Project Rave is what supposedly will make JSF easy. Can Rave really be that much better than Eclipse or IDEA? Good luck Sun, those are two killer IDEs that are going to be very difficult to beat. And besides, has Sun ever produced any good applications? iPlanet sucks, so does Forte - comparing both to the other options out there.

I could go on and on about what I learned at this presentation, so let me just give you a brief synopsis. JSF generates JavaScript for you for event handling. The JSP tags are long and ugly, but they're named this way (i.e. <h:selectone_menu>) to distinguish a component (selectone) from a renderer (menu). David said he complained about this immensely when he joined the Expert Group, but now sees the point. No XML attributes are used in faces-config.xml - it's all entities. Reminds me of web.xml, lots of typing for not much information (what a pain - today's tool suck at deployment descriptors). JSF has no client-side validation - looks like Commons Validator will be around for quite some time. Especially since JSF requires you to specify your validation after each component in the JSP (vs. declaratively using the Validator). JSF EA4 does not work with Tiles - they're working vigorously to fix this. You can specify your navigation-rules separate from you actions in faces-config.xml (very cool feature).

If you know JSPs and Servlets, it's much easier to learn Struts (and presumably other webapp frameworks). If you know Swing, it'll be much easier to learn JSF. To me, this seems wrong. Some of the examples given tonight had HTML in .java files (for custom renderers). Are we reverting back to Servlets? Is Sun making a mistake with JSF? How is it better than WebWork or Struts? It seems to me to be an over-designed product developed by a bunch of Swing addicts.

My first impression of JSF is that it's going to be harder to teach to newbies (vs. Struts). Everyone says it's a standard so the tools vendors will come through and make it easy. The tools vendors haven't done shit for JSP and JSTL IMO, so how is JSF different? It's a good idea, it just needs to be simplified - a lot. KISS.

Posted in Java at Oct 08 2003, 11:24:35 PM MDT 1 Comment

An enjoyable workday

Deer in front of the Flatirons Yesterday I had a one-day contract to teach a JSP class at a company in Boulder. I got up early and drove to Boulder, where the company is located. I left early because our Internet Access has been down (no MapQuest) and I needed to figure out where the heck the company was. The strange thing was that I really, really enjoyed my drive to work. Today I enjoyed my drive as well, but not nearly as much. What I noticed was that yesterday I was more alert of my surroundings. Granted, the Flatirons are pretty spectacular (as illustrated by my mophotos). However, the difference was that I was not contemplating my day. Today, I noticed I was planning my whole day on the drive. I gotta get those WebTests written (including reading all my apps links from my menu-config.xml file) ... I need to write more tests for the JSPs and all our actions ... damn, I'm only going to get in 9 hours today - how am I gonna get 40 in by tomorrow night ... etc. Yesterday, it was just - cool, I'm going to teach a class, should be fun.

What am I trying to get at with this rambling? I'm trying to say that some jobs are more finite, and therefore more enjoyable. When I did construction work in college, it was awesome because we'd always start cleaning up a 1/2 hour before 5 o'clock. With programming, I start to say "Oh shit, I gotta get going" at 4:55, and I don't leave until 5:30. Boulder's Flatirons With teaching, it was an 8:30 - 4:30 gig - a nice finite day. I found this to be incredibly enjoyable - just the thought of being done with no worries at 4:30. Today, if I don't get everything done by the time I leave, I'll think about it all the way home.

Is it just me, or does being a passionate programmer kinda suck? I know there's programmers out there that are much better about this - 5:00 means 5:00 and they don't think about anything after they leave the office. I need to find a balance, a way to shut it off when I leave, and to not think about it until I get here. By the way, the courseware for the class never showed up yesterday, so it was cancelled before it started - but I had that no-anxiety feeling for most of the day. Wierd.

Posted in General at Oct 08 2003, 07:37:59 AM MDT 4 Comments