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 "matt". 1,142 entries found.

You can also try this same search on Google.

JSP 2.0 Article in July JDJ

I got the July issue of JDJ today. In it I found a good article on JSP 2.0 (printable, less ads version). Things I learned from the article:

  • JSTL 1.1 will introduce 16 standardized EL functions:
    - fn:length(): Get the length of a collection or a string.
    - fn:toUpperCase(), fn:toLowerCase(): Change the capitalization of a string.
    - fn:substring(), fn:substringBefore(), fn:substringAfter(): Get a subset of a string.
    - fn:trim(): Trim whitespace from a string.
    - fn:replace(): Replace characters in a string.
    - fn:indexOf(), fn:startsWith(), fn:endsWith(), fn:contains(), fn:containsIgnoreCase(): Check if a string contains another string.
    - fn:split(): Split a string into an array.
    - fn:join(): Join a collection into a string.
    - fn:escapeXml(): Escape XML characters in a string.
  • The tag libraries in JSTL 1.1 have new URIs (for example, http://java.sun.com/jsp/jstl/core instead of the JSTL 1.0 equivalent http://java.sun.com/jstl/core_rt). The new JSTL 1.1 tag libraries accept request-time expressions for their attributes, and delegate to the JSP container to evaluate EL expressions.

Good stuff to know. I'm ready to start developing JSP 2.0 apps - I hope the Tomcat dev team releases a stable build soon. Or maybe I should just look into using Resin...

Posted in Java at Jul 10 2003, 09:54:44 PM MDT 4 Comments

Changing Struts' bean:message to JSTL's fmt:message

I converted AppFuse to use JSTL's <fmt:message> tag instead of Struts' <bean:message> tags this morning. It was pretty easy. Here's the steps I took:

1. First, I added the following to metadata/web/seb-settings.xml:

<!-- Define the basename for a resource bundle for I18N -->
<context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>ApplicationResources</param-value>
</context-param>

2. Then I added the format tag to web/common/taglibs.jsp:

<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>

3. Finally, I did find/replace with <bean:message/<fmt:message.

4. I also had to change my title and header keys in web/WEB-INF/tiles-config.xml to remove the . from the bean names. In other words, I converted title.key and heading.key to titleKey and headingKey and also made the appropriate changes in web/layouts/baseLayout.jsp.

Easy as Pie!

Posted in Java at Jul 10 2003, 07:59:29 AM MDT 35 Comments

Back from the Cabin

I just flew in from Montana this morning - and boy does it suck to be back. Being back in Denver isn't so bad, it's sitting at the keyboard, programming Java, reading weblogs/e-mail and being stuck in an office while summer is going on! Man is it beautiful outside right now. And it's even nicer in Montana. 5 days of laughing, sleeping, rafting, playing frisbee, BBQ-ing, friends and the wonderful sun makes it very hard to come back to this thing I despise today - work.

Sure it'll be fun in a day or so when I start becoming a part of this digital world again - through responding to e-mails and updating this site - but right now - bbblllllllllaaaaahhhh!!! Give me a beer and a lawn chair and put me back on vacation - that's where I belong - on the front porch of the cabin, with Abbie on my lap - listening to the birds chirping and watching the deer tiptoe through the garden below. Rafting down the crystal green river on the Middle Fork of the Flathead. There's nothing like summer in Montana.

Posted in General at Jul 08 2003, 02:35:29 PM MDT 1 Comment

My Love-Hate Relationship with Apple

I admit that I have a love/hate relationship with Apple. I love iPhoto and how well it works with my Canon Powershot G2 (digital camera). Same goes for iTunes/iPod and iMovie/our Sony DV camera. I hate how slow my Powerbook is (667 MHz, 1 GB RAM). I hate that iTunes and iPhoto will just "quit working" sometimes and I have to backup/re-import in order to get things working again. I love the look of OS X and hate the fact that the machine has a 1-button mouse. Don't get me wrong, I love/hate things about Windows/Linux too, but I have an intense desire to really love Macs. Mine just keeps disappointing me.

Twice now, I've thought I lost all my photos and music - errors like "we've lost all your data" and "can't read file that was working 2 minutes ago" stare at me with a smirk and a middle finger. The data I have in iTunes and iPhoto is the most valuable data I have. I could lose the hard drive on my Windows box and not be that disappointed, but the Mac - whoof! Pictures of Abbie, all my CDs I've imported, we're talking 10 GB of kick ass data!!

Apple Music Store Last night, I hated OS X since iTunes flipped me off and I spent an hour+ getting it back. This morning, I fell in love again as I bought my first album (Def Leppard, Hysteria) from the Apple Music Store. Man that was easy. I've been meaning to stop by Best Buy and get a couple new CDs. Now it's possible in under 30 seconds without leaving my keyboard monkey role. Sweet!

I'm going to have to leave Mini-me at home during vacation though - I don't want to have a fight while I'm trying to enjoy Montana. Our flight leaves at 8:30 tonight, so don't expect any updates until next Tuesday. I'll be taking lots of pictures (the 512MB flash card that Abbie got me for Christmas will be a big help). Happy 4th - don't blow off any fingers.

Posted in Mac OS X at Jul 02 2003, 11:41:57 AM MDT 4 Comments

The Cabin, Part II

"Maattttt... it's time to get up!" My mom sings from the kitchen on this early December morning. I slowly open my eyes, having just had my blissful dream snapped, I'm a little annoyed. My bed is incredibly warm with the goose-down comforter that Mom made me for Christmas. She made one for both Kalin and I that year - to this day one of the best presents I've ever received. "Kaaaallllinnnn... get up - you've got to get ready for school!" I groggily put on my clothes - a t-shirt, jeans, socks and tennis shoes - and make my way downstairs. I have to duck as I leave my room because the ceiling is low, and the door to my room (added by my Dad so I could get more privacy from my "pesky sister") is only ~3 1/2 feet tall. The stairs to the main floor of the cabin are very steep, but I've been trouncing down them for 9 years now, so I'm pretty good at it. Matt in front of the horse's pen

The warm glow of the kerosene lamps in the kitchen greet me as I sheepishly transcend the stairs. "Heeyyy Matti," my dad says as I enter the room. "Morning pops," I say. He is sitting on the oven door of our antique wood stove - possibly one of the best spots in the house and definitely the warmest. My mom asks, "Do you want huckleberry pancakes for breakfast this morning?" "Heck yeah!" I say enthusiastically (huckleberry pancakes are my favorite - and always will be). "Well, we need some more firewood then" she says.

Reluctantly, I say "OK" and get ready to go fill the woodbox. I put on my winter coat and a stocking cap, along with my mittens. As I step out onto the front porch, I am greeted with a full moon casting its beauty on the freshly fallen 6 inches of snow. It's about 10 degrees out and the world is sparkling in the early morning darkness. Everything looks frozen in time, and it's very quite. Our horse, Babs, snorts from inside her pen, which is next to the woodshed in the back of the house. I say "don't worry, Kalin will be out to feed you soon." I pet her on the nose and tromp through the snow another 10 feet to the woodshed. There, I put a flashlight in my mouth and begin chopping wood for the cookstove. The wood is dry since it's been in the woodshed since August, and the cold Winter morning makes it that much easier. After splitting 5 or 6 logs into cookstove-sized pieces (using my left hand to steady, right hand to swing), I gather it all up. Rather than attempting a reasonable load, I get it all. It's stacked so high, I can't even see the path I walked in on. Still holding the flashlight in my mouth, I lean back, stand up, and shuffle my way back to the cabin. I yell, "OPEN UP!!" as I get near the front door. My dad gets up from the best seat in the house and lets me in. "Jeeze - didja get enough?!" he exclaims and I (breathing heavily) stumble into the kitchen as pieces of wood are starting to fall from my arms. I make a final lunge and barely make the woodbox, filling it up with no room to spare.

My sister, Kalin, is slowly making her way downstairs now. My dad yells "Kaaarrrrrrrllliiiiiiinnnnn" as she enters the room with a look that could kill. My dad says, "it's Medusa!" and he has a good point. Her long blonde hair is out of control and she has glaring looks to support the wildness of her hair. "Good morning darling," my Mom says. "Hi mom" says Kalin. "As soon as you guys are done with your chores, we'll have breakfast" says the cookstove queen. Front Road in snow - this is taken when we're teenagers.  You can tell since there's snowmobile tracks, which we didn't have until we were in high school

This is the worst part of the morning - leaving the warm, comforting cabin (where my parents are drinking coffee and warming themselves by the cookstove) to go feed the animals. My chores are feeding the dogs, ducks, geese, pigs and chickens, while Kalin has to feed the horse, the rabbits and the goats. In the spring, when the goats have kids, Kalin (or my mom) has to milk the goats. I trudge across the frozen tundra to get slimed by the pigs, get hissed at by the geese, and to gather eggs from the hungry chickens. I have a teapot full of hot water to poor into their water dishes, since they're all frozen. The alternative is to bring the water dishes into the cabin and thaw them on the heatstove, but the teapot is the faster, more efficient way.

Finally, after a 1/2 hour of doing chores, both Kalin and I are done and able to sit down for the awesome "huckleberry pancake" breakfast. My Dad asks us what we're going to learn that day, and Kalin says "division" - which is quickly followed by a short quiz. Neither of us are interested, but he's got a grin from ear-to-ear as he asks us what 63 divided by 7 is.

And so begins one of the best parts of the day - where my mom walks with us 1 1/2 miles to the bus stop. Today is December though, and with the fresh snow, this means we get to ski! This is probably better since I refuse to wear boots, even in the dead of winter. Tennis shoes or a hissy fit - that's what you get from little Matt. The morning ski is awesome, especially on a day like today. The snow is soft, and there's a nice base underneath from the daily commute to the bus stop (also where we keep the cars in the winter). As the sun brims the mountain peaks, we're off! It's a fast and fun journey today, and there's laughter and smiles the whole way. The single-track trail through the forest encourages us the whole way with its forests and (mostly) downhill journey.

July 2003: We're leaving for the cabin tomorrow night, and I get emotional just thinking about it. The cabin is by far my favorite place in the entire world. It's a huge part of my family and you can feel its love as soon as you set eyes on it driving up the front road. I first took Julie there in 1998, the year we met, and she moved to Denver shortly after that trip. I have a friend, Jarvis, who moved to Montana for 5 years after visiting the cabin one summer. This is the first time that Abbie will visit the cabin, and I've never been more excited to go. My parents are already there, Jarvis will be there, and another best friend from college is joining us. Jarvis is traveling all the way from Brazil (where he is a teacher) and the other is driving from Mammoth Lakes, California. It's going to be awesome. Huckleberries are just started to ripen, the wildflowers are out, and the cabin is waiting. Not to mention that Montana is, by far, the best place to be in the summer.

The cabin today

To learn more about the Cabin, and how it all began, read The Cabin, Part I.

Posted in General at Jul 01 2003, 05:29:26 AM MDT 1 Comment

[ANNOUNCE] Struts 1.1 Final Released!

The Struts team is proud, and extremely pleased, to announce the Final release of Struts 1.1. This release includes significant new functionality, as well as numerous fixes for bugs which were reported against the previous release, and supersedes the earlier 1.0.2 version as the latest official release of Struts from the Apache Software Foundation.

Download Binary | Download Source | JARs Only | Release Notes

test-all:                                                                                                               
                                                                                                                        
BUILD SUCCESSFUL                                                                                                        
Total time: 8 minutes 10 seconds                                                                                        
[minime:~/projects/appfuse] matt%   

Results look good!

Posted in Java at Jun 30 2003, 06:17:31 AM MDT Add a Comment

Added Google search to this theme

The idea hit me like a cold beer pouring down my throat on a hot summer day. Crisp, clean and exciting. I've been wanting to add a search form to this theme, but I didn't want to add another tab, and putting it anywhere in the header would conflict with the background image. And then I spotted the perfect spot. Right under the categories, in the banner of the first entry on this page. With a little love from the DOM, you can now search this site using this theme and Google. Here's the relevant code that I added to the bottom of this theme.

<div id="search" style="display:none; margin-top: -17px; text-align: right">
    <form id="searchForm" method="get" action="http://www.google.com/search"
        onsubmit="return search()" style="margin: 0; padding: 0">  
        <input type="text" id="q" name="q" size="20" maxlength="255"
            value="search this site" onclick="this.value=''" /> 
</div>
<script type="text/javascript">
    // get the first entry shown in the page and append the
    // hidden 'search' div from above
    document.getElementById("entries")
            .getElementsByTagName("div")[0]
            .appendChild(document.getElementById("search"));
    toggle("search");
    function search() {
        form = document.getElementById("searchForm");
        if (form.q.value == "search this site" || form.q.value == "") {
            alert("Please enter a search term to continue.");
            form.q.focus();
            return false;
        } else {
            form.q.value = form.q.value + " site:www.raibledesigns.com";
            form.submit();
        }
    }
</script>

Boy oh boy does the DOM make it easy to do web sites! Seems to work in all the browsers I use regularly (IE/Moz on Win, Camino/Safari on Mac). It doesn't work in Opera 6, but does in Opera 7. Now back to that cold beer - I'm gettin' thirsty...

Posted in Roller at Jun 27 2003, 04:57:58 PM MDT 8 Comments

Added Calendar to Menu

I added a calendar to my "badges" menu on the top left. This is a JavaScript-based calendar that I obtained from Matt Kruse's JavaScript Toolbox. I don't know if I'm satisfied with the green background on the "cal" image, but it'll have to do for now. I've noticed a couple of issues in Safari (too far down and too the right, and doesn't go away like it should), but it seems to work pretty good in IE/Mozilla. I tried disabling dates > today, but couldn't get it to work (yeah, I tried the code from Matt's site).

I don't know if it's worth the effort of talking to Roller's CalendarModel to get the actual days that somethings been posted. However, it would probably be fairly easy to generate a JavaScript array for the current month, rather than an HTML-based <table>.

If you're interested, here's how you can add this sucker to your Roller weblog:

1. Add the following code to the <head> of your template.

    <script type="text/javascript" src="pathToScript.js"></script>
    <script type="text/javascript">
        var cal = new CalendarPopup("calDiv");
        cal.setReturnFunction("showDate");

        document.write(cal.getStyles());
            
        // Function to get input back from calendar popup              
        function showDate(y,m,d) {
            var day = y+LZ(m)+LZ(d);
            location.href = "$ctxPath/page/$userName/" + day;
        }
    </script>

2. Add an empty, invisible div anywhere w/in the <body> of your template (I put mine at the bottom).

<div id="calDiv" 
    style="position: absolute; visibility: hidden"></div>

3. Add a link (can contain an image) to invoke the calendar popup.

<a href="?" name="calAnchor" id="calAnchor" 
    onclick="cal.showCalendar(this.id); return false">
    Calendar</a>

You can download the calendar.js file from this site, but please don't link to it - I have enough bandwidth problems as is (and I'm going to move it to a new theme name). Enjoy!

Posted in General at Jun 25 2003, 09:49:49 PM MDT 2 Comments

Wicked DHTML Roller themes spotted in the wild

I spotted some cool DHTML-enhanced themes on FreeRoller today: My own confusion and A Corporate Eejit. Nice work gents - maybe we should add these suckers to the stock list of themes. These themes are a great example of how customizable Roller is and how it's just HTML, so pretty much anything is possible (that is possible on a web page). I'd be willing to bet you could even use Flash and use the RSS Feed for your XML input.

I'm thinking about adding a small DHTML enhancement to Roller. Basically, I'd like to show users a small picture of the theme (using these pictures) when signing up. Let me know if you think this is worth the effort and if so, I'll create a JIRA issue (uh oh, looks like we lost our bug database!).

Posted in Roller at Jun 25 2003, 10:58:02 AM MDT 7 Comments

RE: WWDC Keynote

Keep an eye on the WWDC Quicktime Keynote Stream page later this afternoon. [Matt Croydon]

Let's hope they announce 2 GHz G5s. I was thinking that if they gave them to us cheap, I might be willing to combine my 2 1.5 GHz Dells into dual-processing Linux beast - and just go for a dual processor G5 as my new desktop machine...

Posted in Mac OS X at Jun 23 2003, 05:27:08 AM MDT Add a Comment