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.

[DJUG] Ship it! and Distributed Teams by Jared Richardson

Jared's first book is called Ship it! and it's been wildly successful (translated into several different languages). During the first hour, Jared talked about his book and practices defined in it.

Ship it! is an attempt to talk about the holistic process of software development: techniques, infrastructure and process. For Techniques, there's a Technical Lead, The List, Code Reviews, Code Change Notifier and Daily Meetings. Infrastructure involves Version Control, Script Builds, Continuous Builds, Track Issues, Track Features and Writing/Running Tests. Process is Propose System Objects -> Propose Interfaces -> Connect Interfaces -> Add Functions -> Refactor, Refine, Repeat.

Martin Fowler's definition of Architecture: anything that is difficult to change later.

The majority of Jared's talk was about implementing TDD, continuous integration and many other things driven by audience questions. I didn't take notes because it was more of a conversation than a presentation. Jared's second talk was on Distributed Teams and my notes from this talk are below.

Agile is not XP or Scrum, those are implementations of Agile. The Manifesto for Agile Software Development is the interface for Agile Development. It contains the following principles:

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Custom collaboration over contract negotiation
  • Responding to change over following a plan

To re-word these principles: Agility is...

  • People interacting
  • Software that runs
  • Fast Feedback
  • Frequent Change

Scrum principles are often not about developing software, they're about making people talk. The important thing is to get people in the habit of communicating. The best way to get people interacting is to do Daily meetings. One to two minutes per person. Same time. Three questions (what did you do yesterday, what today and any blockers?). Scrum style.

How do you do a daily meetings when you're remote? Conference calls are the most common, but don't let anyone local dial-in or they will get in the habit of doing it. Video is best, but it's often expensive to setup. One good strategy for daily meetings is IM. The beauty of this is that there's a transcript of the daily meeting that others can read. Conference calls are usually bad b/c you can only hear the guys that are close to the phone. It's even worse when the speaker phone is a cell phone. Whatever you do, you should never skip the daily meetings.

Peer Code Reviews are another good way to get people interacting. The first rule of code reviews is that anyone can refuse to do one. If you're not doing code reviews or pair programming, you'll end up with inefficiencies and broken windows. Address the behavior head-on. Peer Code Reviews remotely: e-mail, Skype headset, IM, VNC or SubEthaEdit (works awesome). NetBeans (collaboration module) and Eclipse (communication framework) have plugins that allow SubEthaEdit-style functionality.

How do you keep software running? Continuous integration and automated testing. Keep a list of atomic features. Prioritize. Don't let people work for 2 months. All tasks should be broken down into small chunks. Tests are a good way to communicate. Don't tell me you're done because you think you're done. Show me a test that proves you're done. Don't allow broken windows. Broken windows give the impression that no one cares and more bugs happen because of this. Continuous integration is essential for remote teams.

What's the best to get fast feedback? Fast compiles, fast tests, running CI 24/7. Another good strategy is the The List. Make sure and get feedback from your Tech Lead and from your Customers (they like to be involved). If you have a list that doesn't change after 6 weeks, you're working for a team who's list is dead.

There's nothing wrong with documentation and a plan, but its the things on the left that are more important. Offsite teams should have a single tech lead. Writing Tests might be better than writing requirements. When the tests pass, you'll get what you asked for. If you care about the design, write unit tests. If you don't care about how it looks, but want it to work, use integration/MCT for functional tests. Don't separate development and QA. To deal with time zones, make the tech lead stay up and rotate. For documentation, DRY out your Docs. Generate documentation instead of manually creating them.

"Docs are a cache ... flush often"

For Customer Feedback, have the tech lead translate.

I really enjoyed Jared's talks. The first one (on Ship it!) didn't provide much new information for me, but that's likely because I've worked on several open source projects and I've tried to bring those procedures and practices into any company I've worked at. I'm very grateful that LinkedIn does a good job with continuous integration (Hudson), bug tracking (JIRA) and documentation/planning (Confluence).

The 2nd talk on Distributed Teams was enjoyable because I'm in the heart of that - managing a remote team in Denver. We've experienced the awful conference calls where you can't hear anything or when we're on speaker on a cell phone. We do have all the video conferencing equipment purchased (10K worth) and sitting in our office, but haven't set it up because we're waiting on IT to setup a persistent VPN (which is a requirement to make it work). I've had some communications issues with my boss (mostly related to him not knowing what we're working on). We do daily stand-ups and use many of the practices recommended by Jared. One thing I think we can do to increase communication with headquarters is to start doing our daily meetings over IM and posting the transcript to a wiki page.

If you get a chance to hear Jared speak, I highly recommend it. He has a style that's very conversational and fun to listen to. You feel like you're a part of a self-help group rather than listening to someone preach about how you should be developing software.

Posted in Java at Sep 10 2008, 09:56:52 PM MDT 4 Comments

Happy Birthday Jack!

Jack's birthday was last Thursday (August 28th) and only now am I getting a chance to wish him a Happy Birthday on this blog. I told you it was a busy week last week. ;-)

Happy Birthday Jack!

On his birthday, I picked him up from Kindergarten at 11 and let him run the show for the day. Needless to say, we had a good time.

Jack on his 4th Birthday At the Zoo

4 and still loves trains Mmmmm... Ice Cream

On Saturday, we had a party to celebrate at my house. It was a great time with many old friends and lots of crazy kids.

Sophie and Jack - both 4 Jack's Birthday Cake

Ready for the Piñata Candy!

I woke up to quite the disaster area the next day. I was also quite impressed when Abbie showed up with her ears pierced.

A Disaster Area Abbie's New Earrings

The rest of the weekend I spent quite a bit of time enjoying A Taste of Colorado. When work began on Tuesday, the week intensified as I was the "Release Owner" for LinkedIn this week. We made a number of backend changes to reduce statefulness and improve performance. I'm proud to say it was one of the smoothest releases I've been a part of, mostly because of the high quality people involved.

As far as my schedule for the rest of the year, it seems like I'm going to be busier than ever. I have to complete my presentations for CSS this week. In two weeks, I'm speaking at the Colorado Springs Open Source User Group Meetup. The following week I'm heading to Munich for Oktoberfest. If I live through that, I'll be implementing Memcached, speaking at CSS, hunting with my Dad, celebrating Abbie's birthday, traveling to Costa Rica/Panama and keynoting the JavaEdge Conference in Israel. If you happen to be in Colorado Springs, Munich, Mountain View, Keystone, Montana, Costa Rica, Panama or Israel in the next few months, maybe we can enjoy a beer together. Cheers!

Posted in General at Sep 05 2008, 06:37:33 PM MDT 2 Comments

A Good Friend becomes a DU Hockey Coach

It's not everyday you see a good friend's name in the headlines. Today I did:

Michael Zucker Named Volunteer Assistant Hockey Coach
DENVER - Two-time National Coach of the Year George Gwozdecky has tabbed Michael Zucker as the new volunteer assistant hockey coach for the seven-time NCAA national champion Denver Pioneers. Zucker arrives at DU after spending the last three years as an assistant coach with the Western Hockey League's (WHL) Everett Silvertips.

"We are pleased to name Michael Zucker as our new volunteer assistant coach," Gwozdecky said. "Michael brings a lot of coaching and tremendous technical video experience to our program."

I first met Mr. Zucker when I had a contracting gig at Douglas Country way back in 2001. He was an excellent Software Developer at the time and impressed me with his knowledge of agile development. I've stayed in touch with him over the years and it's great to hear he's moving back to D-town.

What's more impressive is that he's following his dream. This guy is someone who makes very good rates developing software and teaching others how to do the same. This year, he's going to give all that up, live off his savings and do something he's always wanted to do. With a big-name hockey school like DU, I'm sure it's an excellent decision. Congrats Zucker!

Posted in General at Sep 03 2008, 03:34:07 PM MDT Add a Comment

What's wrong with JSF

The developers of Seam have come up with a list of major issues with JSF. I'm assuming many of these issues are fixed by Seam, but it's interesting to note how they've somewhat admitted that JSF has many flaws. Note that there's a lot of references to Struts and WebWork.

Hopefully many of these will be fixed in JSF 2. If REST support is an important feature for web frameworks, it'll be be interesting to see how the component frameworks handle it. It'd be great if they provided native support. Oh wait, then they'd be action-based frameworks. ;-)

Posted in Java at Aug 25 2008, 06:53:31 PM MDT 5 Comments

Why such a busy week?

Lance sent me the following e-mail this morning:

Just saw your status message, I think you'd better blog an explanation!

"Matt Raible is getting ready for one of the busiest weeks of his life."

I couldn't think of a good reason not to blog an explanation, so here goes.

I'm currently sitting at Denver's airport ready to hop on a flight to Mountain View. I'll be at LinkedIn's HQ for two days helping tidy up plans for a release in early September that I'm in charge of. It's my first time being a Release Owner, but it should be pretty painless so I'm not too worried. Whenever I travel to Mountain View, I always have a good time, but I'm constantly being pulled into meetings, or arranging meetings myself. I have a presentation to write that I'm delivering on Wednesday. It describes the changes we've made to make the backend of LinkedIn much more stateless and therefore better and faster.

In my hotel room at night, I'll be writing my presentations for the Colorado Software Summit. Having to write 3 presentations in one week always makes me feel super-busy.

On Wednesday night, I fly home late (likely after a game of hoops with co-workers). Thursday is Jack's birthday, so I hope to take the day off and spend the day with him. Thursday night is sleepover night. Being a single parent with two kids is never easy, but always fun. Friday it's back to work, wrapping up things for the week (status reports, bug fixes, etc.) and likely marveling at the traffic from the DNC.

Friday night there's a 9-hour cocktail party with a good friend from Vancouver, BC.

Saturday is the super-busy day. It's time for Jack's birthday party and if last year is any evidence, it's one of those 8-hour cleaning and decorating situations.

I'm sure I'll have a busier week sometime in the future, but this one will surely be one to remember (especially since it's blogged into history now ;-)).

Posted in General at Aug 25 2008, 07:54:18 AM MDT 2 Comments

New Passport in 9 Days

A couple of month ago, I discovered my passport was missing. I looked all around my house but couldn't find it anywhere. Since I'm going to Munich in September, I had to get a new one. So last week, I went to Denver's Downtown Post Office, filled out an application, gave them an original birth certificate, got pictures taken - the whole ball of wax. It cost me around $100 and didn't take more than 30 minutes.

I was amazed when my new passport arrived yesterday in the mail. That's a mere 9-day turnaround! The last time I had to get a new passport, it cost me $350, but I also got it in 2 days. It's good to see getting new passports is an efficient process these days.

Posted in General at Aug 21 2008, 10:12:50 AM MDT 2 Comments

EhCache Project Busy this Summer

The EhCache project appears to be having a very busy summer. EhCache 1.5.0 (a major new version) was released on July 12th. In addition, a new (SOAP-based) EhCache Server was released at the end of July. You might ask yourself why you'd need such a beast. I think Greg explains it best:

Why am I doing this? There are lots of theories that have made their way on to the ehcache mailing list. The prosaic truth is that a large US corporate using ehcache for their Java apps on 200+ servers also wants to use it for their C++ apps. And they are prepared to sponsor development. The Web Services API lets them do it. That's it.

As to the larger question of how interesting this is to the world at large, my view is not very. However having to jump through all the hoops to get a server infrastructure done, I thought that the world at large may be interested in a RESTful, resource oriented ehcache server.

The next day, Greg announces EhCache for JRuby on Rails. A few days later, RESTful, resource-oriented caching becomes available in ehcache-server.

I guess this helps answer the question about OSCache vs. EhCache. OSCache hasn't had a release in over a year and EhCache is pumping out new releases and new products. Well done, Greg!

At LinkedIn, we use EhCache for many of our caching needs. However, it's likely we'll be moving to Memcached in the future. Since I'll be part of the team that implements Memcached, it'll be interesting to see which one performs better.

Posted in Java at Aug 10 2008, 09:12:31 PM MDT 7 Comments

Spontaneous Stuff Weekend

This weekend, I didn't have much planned to do with the kids. I had a couple ideas, but nothing set in stone. The good news is the kids were full of ideas and we kept ourselves plenty occupied. On Saturday, we went to Elitch Gardens. We rode the Light Rail and my stomach barely survived the 4-hour journey.

Roller Coaster at Elitches Spinner

I was pleased to find out they served beer at Elitches, but regretted it shortly after as I was spinning with the kids in the Tea Cups. But that wasn't the worst ride. The worst one was Thunderbolt - that was the one I had to go on back-to-back with each kid (b/c they weren't tall enough to ride alone). Shortly after getting off, I realized I'd left my iPhone on the ride. Luckily, I rushed back to the ride and the operator was able to find my car and grab it from a very happy teenager.

Today we decided it'd be fun to take a hike. We gathered everyone in the car and drove just past Idaho Springs to St. Mary's Glacier. It was a nice 1.5 mile round-trip hike and both the kids and Cookie (the dog) had a great time. I was pretty impressed with the kids' ability to hike, especially over all the big rocks on the trail. Of course, when I told them they did so well, it only took Abbie 2 seconds to process and respond with "does that mean we get toys?"

Hiking to St. Mary's Glacier St. Mary's Glacier

Conquering the Rocks Dad - I can't touch the sand!

Posted in General at Aug 10 2008, 05:25:00 PM MDT Add a Comment

Awesome Birthday Present: A Kegerator

My New Kegorator I'm proud to say I have the best parents in the world. For my birthday this year, they bought me a kegerator. It was delivered last week, but I didn't get a chance to put it together until this weekend. I've never had so much fun putting together an appliance.

Since it's summer and I'm in Colorado, I decided to get a keg of Sunshine Wheat to start things off. So far, there's issues with 1) too much head and 2) it's not quite cold enough. I think the first can be fixed by playing with the CO2 tank and settings. The 2nd might only be fixable by moving it inside. If you have a kegerator and have advice on how to fix these issues, please let me know.

Why did your parents buy you a kegerator?

There's actually a good reason for this. A few years ago, Julie and I made an agreement that I could buy a kegerator when I paid off the last of my student loans. While Julie and I aren't a couple anymore, it still seemed like a good idea. I paid off my last student loan in June. However, it wasn't my loan, it was my Mom's. When I was applying for colleges way back in the early nineties, my parents said I could go to DU, but only if I paid for it.

My Mom took out quite a few loans over the years to help with tuition, and I finally paid them all off. When I was with my parents over the 4th, I joked that they should buy me a kegerator since I was paying off their loans. Lo and behold, my subliminal messages worked and I ended up with a tap at my house. I couldn't be happier.

Update: Speaking of birthdays, this is the first post I've had to start the 7th year of this blog. My first post was on August 1, 2002.

Update 2 on Friday: I haven't had a beer from the kegerator since Sunday. This evening I poured a fresh one and I'm happy to report the head and temperature issues seem to be fixed.

Posted in General at Aug 05 2008, 09:01:20 PM MDT 6 Comments

Maven Plugin for Running Integration Tests against Multiple Containers

Don Brown has created a pretty cool Maven plugin that allows you to run integration tests on multiple containers in one go. I learned about it on the Struts 2 Dev List:

I've started adding functional tests to Struts 2 by adding a few to the REST showcase application, running against Tomcat 5.x, Jetty 6.x, JBoss 4.2.x, and Resin 3.x. The magic happens through a new Maven 2 plugin I developed called maven-itblast-plugin, which enables multiple integration test runs against multiple containers in one go. For more info, see http://github.com/mrdon/maven-itblast-plugin/wikis/home.

You might notice that this plugin is hosted on GitHub. If you want to learn how to use GitHub with Maven, you might want to see Don's entry on Maven-enabled project hosting with GitHub. Thanks Don - good stuff.

Update: Don has posted more information about this plugin on his blog.

Posted in Java at Jul 31 2008, 05:39:23 PM MDT Add a Comment