Matt RaibleMatt Raible is a Web Architecture Consultant specializing in open source frameworks.

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.

Integrating Node.js, Ruby and Spring with Okta's SAML Support

Okta Security has always piqued my interest, ever since I first developed AppFuse and figured out how to make J2EE security work back in 2004. I hacked AppFuse to have Remember Me functionality, then moved onto Acegi/Spring Security. Spring Security had the features I needed, even if it did require almost 100 lines of XML to configure it. These days, it's much better and its JavaConfig - combined with Spring Boot - is pretty slick.

That was the first part of my security life. The second phase began the night I met Trish, and learned she sold security products. She knew of OWASP and their top 10 rules. It was Trish that inspired me to write my Java Web Application Security presentation. I really enjoyed writing that presentation, comparing Apache Shiro, Spring Security and Java EE's security frameworks. I followed up the first time I presented it with a number of blog posts and screencasts. Hmmmm, maybe I should update the presentation/screencasts to use Java configuration only (#NoXML) and submit it to a couple conferences this year? I digress.

I had to do a security-related spike over the last couple weeks. I was trying to get SAML authentication working with Okta and my client's Active Directory server. Luckily, someone setup the AD integration so all I had to do was try a few different languages/frameworks. I searched and found ThoughtWorks' okta-samples, which includes examples using Node.js and Sinatra (Ruby + JRuby). I also found a Spring SAML example that includes one of my favorite things in JavaLand: Java-based configuration.

I'm happy to report I was able to get all of these applications working with my client's Okta setup. This article will tell you how I did it. For each application, I created a new application on Okta using its "Template SAML 2.0 Application" and added myself in the application's "People" tab. Each section below contains the configuration I used for Okta. The instructions below assume you're similar to me, a developer that has Java 8, Node and Ruby installed, but none of the specific frameworks. As I write this, I have everything working on my Mac with Yosemite, but I wrote the instructions below using one of my old laptops, fresh after a Yosemite upgrade.

[Read More]

Posted in Java at Jan 08 2015, 11:43:47 AM MST Add a Comment

THE BUS IS PAINTED!! HOLY CHRISTMAS PRESENT BATMAN!

I asked Jim Verhey at ReinCARnation to stop working on my bus in mid October. I didn't have a client lined up for November and couldn't afford to keep paying for it.

Today, I journeyed to Colorado Springs to talk with Jim. I hoped to convince him to give me a fixed bid to finish the project. When I got there, he surprised me with a finished paint job! You can imagine the look on my face when he opened the door and I saw this beauty!! HOLY SHIT - I LOVE IT SO MUCH!! The colors are perfect and paint job is exquisite!!

Jim said he felt bad for all I’ve been through with this project and finishing it was my Christmas Present. BEST CHRISTMAS PRESENT EVER!! :-D

THE BUS IS FINALLY PAINTED!

OMG - IT'S SO BEAUTIFUL! I LOVE IT SO MUCH!

EST. DELIVERY DATE: APRIL 1, 2015

DID YOU HEAR THAT?! IT'LL BE DONE IN APRIL!

INTERIOR IN APRIL! DRIVING IN MAY!

JAMES VERHEY - WITH THE BEST CHRISTMAS PRESENT EVER!

There's still more work to be done before it's street legal. However, Jim did give me a fixed-bid price to finish it. If I can afford it, the bus will be done on April 1, 2015. Then it's off to the stereo shop (1 week) and the interior shop (2 weeks). That means I could be driving it in May! YIPPEEE!! Thanks Jim - you are an awesome human being. :)

Posted in The Bus at Dec 21 2014, 05:33:46 PM MST 4 Comments

AppFuse, Reduced

In November, I had some time off between clients. To occupy my time, I exercised my body and brain a bit. I spent a couple hours a day exercising and a few hours a day working on AppFuse. AppFuse isn't used to start projects nearly as much as it once was. This makes sense since there's been a ton of innovation on the JVM and there's lots of get-started-quickly frameworks now. Among my favorites are Spring Boot, JHipster, Grails and Play.

You can see that AppFuse's community activity has decreased quite a bit over the years by looking at its mailing list traffic.

AppFuse Mailing List Traffic, December 2014

Even though there's not a lot of users talking on the mailing list, it still seems to get quite a few downloads from Maven Central.

AppFuse Maven Central Stats, November 2014

I think the biggest value that AppFuse provides now is a learning tool for those who work on it. Also, it's a good place to show other developers how they can evolve with open source frameworks (e.g. Spring, Hibernate, JSF, Tapestry, Struts) over several years. Showing how we migrated to Spring MVC Test, for example, might be useful. The upcoming move to Spring Data instead of our Generic DAO solution might be interesting as well.

Regardless of whether AppFuse is used a lot or not, it should be easy to maintain. Over the several weeks, I made some opinionated changes and achieved some pretty good progress on simplifying things and making the project easier to maintain. The previous structure has a lot of duplicate versions, properties and plugin configurations between different projects. I was able to leverage Maven's inheritance model to make a number of improvements:

[Read More]

Posted in Java at Dec 16 2014, 06:03:31 AM MST 4 Comments

Devoxx4Kids Denver: Having fun with littleBits

A little more than a week ago, on a beautiful Saturday morning, a number of Denver kids converged at Assembly to learn about hardware concepts with littleBits. This meetup was a bit different than our last meeting in that the kids built stuff with their hands rather than on computers.

Supplies Devoxx4Kids Sign

The workshop was taught by Juan Sanchez of Tack Mobile. Juan did an excellent job of keeping his presentation short and sweet and got the kids building things within the first hour. The event space provided by Assembly was excellent and we look forward to December's Greenfoot Workshop at the same location.

Juan in Action

[Read More]

Posted in Java at Dec 02 2014, 12:10:49 PM MST 2 Comments

The House

A few months after starting this blog, I wrote about The Cabin. I grew up in a the cabin in the backwoods of Montana, with no electricity and no running water. I lived there for 16 years before moving to Oregon for my last two years of high school. As you can imagine, this makes for a good story now that I'm a programmer by trade.

Since I'm between clients right now, I decided to head back to the cabin to see my parents for a bit. My Dad retired in 2009 and my Mom in 2010. They started building their retirement home just up the hill from the cabin in 2004. My parents moved in two years ago and completed enough of it to show it off at a big party before Trish and my wedding last year.

The House is a majestic building, hand-built and beautifully crafted. Both the interior and exterior are amazing, with gorgeous trim and a wonderful attention to detail. The porch is possibly the best in the world, high and mighty with a great view of the cabin and garden below.

The House Front Door

The Porch Sweet Railings

[Read More]

Posted in General at Nov 16 2014, 09:09:20 AM MST Add a Comment

Happy Birthday Abbie!

Abbie with Medallion It's hard to believe that my daughter, Abbie, is now 12 years old. She's in 6th grade now, attending middle school and loving that she gets to choose her classes. I'm particularly happy to see her studying video game design and programming simple games. The picture on the right is of Abbie and her horse, Medallion. Unfortunately, he had to be put down the very next day because of colic. Trish and Abbie were leasing him, but were planning on buying him. It was a very sad day in the Raible household.

Abbie is still taking horseback riding lessons and might start participating in horse shows next year. For the ski season, we got her the 6th-Grade Passport. For $100, she can ski a few days at all the resorts in Colorado. We don't plan to travel as much as we did last year, but we do plan on skiing a bunch.

Happy Birthday Abbie! You're an awesome 12-year-old and we had a great time celebrating your birthday with you tonight. :)

Abbie and Jack - Halloween 2014

Posted in General at Nov 05 2014, 09:56:34 PM MST Add a Comment

Devoxx4Kids - Denver: Introduction to Hardware Concepts with littleBits

Devoxx4Kids I'm pleased to announce the second meeting of the Denver Chapter of Devoxx4Kids is now open for registration. It's a two hour class titled Introduction to Hardware Concepts with littleBits and will be taught by Denver's own Tack Mobile. To learn more about littleBits, see http://littlebits.cc. If you or your company would like help by donating a Workshop Set, please contact me.

The class will be held on Saturday, November 22nd, from 10am - 12pm at Assembly Workspace. Cost is $10, but you'll get that back in the form of a t-shirt. Age requirement is 9-18 and kids should have basic computer skills (copy/paste, opening applications, etc.).

I'd like to thank Juan Sanchez for reaching out to me about this class and inspiring his company (and workspace) to make it all happen. It's been great working with you and your team Juan!

When I started Devoxx4Kids Denver, I was hoping to host a class or two per year. Our first meetup in May was a wild success. After taking the summer off to relax, I started looking for more speakers in early October. The response has been great and we'll have another class about GreenFoot on December 13th. We're even in the planning stages for another session on NAO Humanoid Robot programming in Q1 2015.

If you'd like to get involved with Denver's Devoxx4Kids, please join our meetup group.

Posted in General at Oct 30 2014, 08:17:21 AM MDT 1 Comment

Building a REST API with JAXB, Spring Boot and Spring Data

Project JAXB If someone asked you to develop a REST API on the JVM, which frameworks would you use? I was recently tasked with such a project. My client asked me to implement a REST API to ingest requests from a 3rd party. The project entailed consuming XML requests, storing the data in a database, then exposing the data to internal application with a JSON endpoint. Finally, it would allow taking in a JSON request and turning it into an XML request back to the 3rd party.

With the recent release of Apache Camel 2.14 and my success using it, I started by copying my Apache Camel / CXF / Spring Boot project and trimming it down to the bare essentials. I whipped together a simple Hello World service using Camel and Spring MVC. I also integrated Swagger into both. Both implementations were pretty easy to create (sample code), but I decided to use Spring MVC. My reasons were simple: its REST support was more mature, I knew it well, and Spring MVC Test makes it easy to test APIs.

Camel's Swagger support without web.xml
As part of the aforementioned spike, I learned out how to configure Camel's REST and Swagger support using Spring's JavaConfig and no web.xml. I made this into a sample project and put it on GitHub as camel-rest-swagger.

This article shows how I built a REST API with Java 8, Spring Boot/MVC, JAXB and Spring Data (JPA and REST components). I stumbled a few times while developing this project, but figured out how to get over all the hurdles. I hope this helps the team that's now maintaining this project (my last day was Friday) and those that are trying to do something similar.

[Read More]

Posted in Java at Oct 29 2014, 05:52:37 AM MDT 1 Comment

Developing Services with Apache Camel - Part IV: Load Testing and Monitoring

Gatling Welcome to the final article in a series on my experience developing services with Apache Camel. I learned how to implement CXF endpoints using its Java DSL, made sure everything worked with its testing framework and integrated Spring Boot for external configuration. For previous articles, please see the following:

This article focuses on load testing and tools for monitoring application performance. In late July, I was asked to look into load testing the new Camel-based services I'd developed. My client's reason was simple: to make sure the new services were as fast as the old ones (powered by IBM Message Broker). I sent an email to the Camel users mailing list asking for advice on load testing.

I'm getting ready to put a Camel / CXF / Spring Boot application into production. Before I do, I want to load test and verify it has the same throughput as a the IBM Message Broker system it's replacing. Apparently, the old system can only do 6 concurrent connections because of remote database connectivity issues.

I'd like to write some tests that make simultaneous requests, with different data. Ideally, I could write them to point at the old system and find out when it falls over. Then I could point them at the new system and tune it accordingly. If I need to throttle because of remote connectivity issues, I'd like to know before we go to production. Does JMeter or any Camel-related testing tools allow for this?

In reply, I received suggestions for Apache's ab tool and Gatling. I'd heard of Gatling before, and decided to try it.

TL;DR

This article shows how to use Gatling to load test a SOAP service and how to configure Log4j2 with Spring Boot. It also shows how hawtio can help monitor and configure a Camel application. I hope you enjoyed reading this series on what I learned about developing with Camel over the past several months. If you have stories about your experience with Camel (or similar integration frameworks), Gatling, hawtio or New Relic, I'd love to hear them.

It's been a great experience and I look forward to developing solid apps, built on open source, for my next client. I'd like to get back into HTML5, AngularJS and mobile development. I've had a good time with Spring Boot and JHipster this year and hope to use them again. I find myself using Java 8 more and more; my ideal next project would embrace it as a baseline. As for Scala and Groovy, I'm still a big fan and believe I can develop great apps with them.

If you're looking for a UI/API Architect that can help accelerate your projects, please let me know! You can learn more about my extensive experience from my LinkedIn profile.

[Read More]

Posted in Java at Oct 15 2014, 10:04:01 AM MDT 2 Comments

The 21-Day Sugar Detox

For the past 21-days, I've been on a sugar detox. Becky Reece, a long-time friend of Trish's, inspired us to do it. Becky is a nutritionist and we've always admired how fit she is. Becky challenged a bunch of her friends to do it, and Trish signed up. I told Trish I'd do it with her to make things easier from a cooking perspective.

To be honest, we really didn't know what we were getting into when we started it. Trish ordered the book the week before we started and it arrived a couple days before things kicked off. Trish started reading the book the night before we started. That's when we realized we should've prepared more. The book had all kinds of things you were supposed to do the week before you started the detox. Most things involved shopping and cooking, so you were prepared with pre-made snacks and weren't too stressed out.

We started the detox on Monday, September 22, 2014. That's when we first realized there was no alcohol (we both love craft beer). Trish shopped and cooked like a madwoman that first week. I think we spent somewhere around $600 on groceries. Trish wrote about our first week on her blog.

We are on Sunday Day-7 and made it through the first week with two birthday parties and a nice dinner out eating well and staying on track. I'm not weighing myself until the end, but my face looks a little slimmer, my skin feels smoother and my wedding ring is not as tight as it used to be. I feel great and have started to believe this is the last detox, diet or cleanse I will ever need. Cleansing my life of sugar could be a life changer especially when an Avo-Coconana Smoothie with Almond Butter Pad Thai becomes my new favorite meal.

[Read More]

Posted in General at Oct 13 2014, 01:05:00 PM MDT 5 Comments