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.

Nice sunset...

..on the ride home this evening.

..on the ride home this evening.

Posted in General at Jul 01 2003, 09:26:12 PM MDT Add a Comment

[ANNOUNCE] Mozilla 1.4 and Netscape 7.1 Released!

Apparently, it happened yesterday, but I didn't hear about it, so here it is:

Mozilla 1.4 and Netscape 7 have shipped. This is the first simultaneous release sice, hmm, ever? Have we done that before? Maybe one of those Netscape 6.x releases coincide with 0.9.2 or 0.9.4? It's mostly a blur these days. I've been doing these releases for almost exactly 3 years now and I think with 1.4 I'm up to about 40 of them. Wow. Fun stuff. [adot's notblog*]

Personally, I'll stick with Mozilla Firebird, but that's just my opinion.

Posted in The Web at Jul 01 2003, 06:07:32 PM MDT Add a Comment

Search improvements and HowTo set your title

I did some re-factoring to the Google search box for this theme, and also figured out a slick trick to set your weblog's title to be == $lastPost.title. Basically, I refactored my _day template to add the search box when building the page, rather than after the fact.

You ask "why, I thought you loved the DOM?" I do, but it was giving me some strange behavior: in IE, a "entry" bar would show up in the middle of the last post (fixed by scrolling) and in Mozilla Firebird, I was getting a slight "shift-left 10px" behavior of the whole page. So I built it with Velocity, here's how. In my _day template, I changed this:

<div class="entry">
   #showDayPermalink( $day )
   #showEntryDate( $day )
</div>

To this:


<div class="entry">
#if ($velocityCount == 1) 
  <div id="search" style="float: right; margin-top: -2px">
    <form id="searchForm" method="get" onsubmit="return search()"
        action="http://www.google.com/search"
        style="margin: 0; padding: 0">  
        <input type="text" id="q" name="q" size="20" 
            maxlength="255" value="search this site" 
            style="font-size: 11px; border: 1px inset silver; 
                   font-weight: normal; padding-left: 2px"
            onclick="this.value=''" /> 
    </form>
  <script type="text/javascript">
    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();
        }
    }
    document.title="Raible Designs ~ $entries.get(0).title";
  </script>
  </div>
#end
   #showDayPermalink( $day )
   #showEntryDate( $day )
</div>

There's also a hint in there to set your weblog's title to match the title of your last post. Enjoy!

Posted in Roller at Jul 01 2003, 02:46:22 PM MDT Add a Comment

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

Digital Music: Things I want

I've come up with a few product ideas. I think these are awesome ideas, and hopefully someone has already come up with them. I doubt I'm the first one to think of these, but if I am, let's hope I get credit. ;-)

1. I want an MP3 Server in my car. Similar to the iPod, in the sense that I can sync from a PC or a Mac while my car sits within 50 feet of my house. How slick would that be to pick your playlist for your roadtrip while you're cutting a new release! It'd have to be fairly inexpensive (~$200) to be profitable I think. Competitors: XM Radio.

2. I want to hook my MP3 collection up to my home stereo. I believe this is already possible, but I want more. I want to be able to sit on my patio and control my home stereo with my iPod. iPod = remote control. Of course, we don't have a home stereo, nor a patio - but I do plan to purchase these luxuries someday, and I'd love to switch from Bare Naked Ladies to Jimmy Buffett when Julie goes to change a diaper. ;-D

Posted in Mac OS X at Jun 30 2003, 07:13:05 AM MDT 4 Comments

HowTo: JSP Progress Bars

As web interfaces become ubiquitous, more and more complex back-end processing is necessary. Of course, stateless HTTP leaves few ways to tell users what's going on. Andrei Cioroianu presents a JSP technique to display application "progress bars." [ONJava.com]

It's too bad there's so much scriplet action in this example, but the lesson is good. It'd be even nicer to see a JSTL port of this howto, or an alternate view approach (i.e. using Velocity or XML/XSL).

Posted in Java at Jun 30 2003, 06:32:03 AM MDT 4 Comments

[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

Apple Rocks!

Actually, the credit probably shouldn't go to Apple, but rather to the guy at "the Bar" that hooked me up. My iPod quit working last week. Zilch, nada. It literally quit showing signs of life - wouldn't start whatsoever. I tried all the tricks on Apple's support site and discussion groups, but nothing helped. I even called Apple Support and a gentleman helped me troubleshoot the thing for a half hour. At the end of the conversation, the guy gave me a URL and said to try all the tips, and if they didn't work - then send it in. I asked if I should stop by the Apple Store and have it looked at? He said, "nope, they can't help you." Not believing him, I visited the Store today with my dead iPod. They verified it was dead and gave me a new one.

That's right - in and out in 15 minutes with a brand spankin' new iPod - now affectionately named "Whitey." Life is good in Apple land. Of course, after hearing all the G5 propaganda in the store, I might need to seek some professional help. Thank God they didn't have any in the store - I might've actually bought one!

Posted in Mac OS X at Jun 29 2003, 09:39:46 PM MDT 4 Comments

Abbie Loo

Pretty in Pink

Abbie Loo - at seven months. Should be a great weekend with the little one.
We might even do some reading - a new nightly tradition.

Posted in General at Jun 28 2003, 09:22:30 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