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.

Upgrading to Play 2: Anorm and Testing

This time last year, I decided I wanted to learn Scala. I chose the Play Framework as my vehicle for learning and I added CoffeeScript and Jade to the mix. I packaged it all up, learned a bunch and presented it at Devoxx 2011.

In January, I added SecureSocial, JSON Services and worked a bit on the mobile client. I presented my findings at Jfokus shortly after. As part of my aforementioned post, I wrote:

Right before we left for Jfokus, I was able to get everything to work, but didn't spend as much time as I'd like working on the mobile client. If this talk gets accepted for Devoxx France, I plan on spending most of my time enhancing the mobile client.

I had some complications (a.k.a. too much vacation) with Devoxx France and wasn't able to attend. To make up for it, I submitted the talk to ÜberConf. It got accepted and I started working on my app a couple weeks ago. So far, I've spent about 8 hours upgrading it to Play 2 and I hope to start re-writing the mobile client later this week. I plan on using Cordova, jQTouch and releasing it in the App Store sometime this month.

Upgrading to Play 2
When I heard about Play 2, I thought it was a great thing. The developers were re-writing the framework to use Scala at the core and I was already using Scala in my app. Then I learned they were going to throw backwards compatibility out the window and I groaned. "Really? Another web framework (like Tapestry of old) screwing its users and making them learn everything again?!", I thought. "Maybe they should call it Run instead of Play, leaving the old framework that everyone loves intact."

However, after hearing about it at Devoxx and Jfokus, I figured I should at least try to migrate. I downloaded Play 2.0.1, created a new project and went to work.

The first thing I learned about upgrading from Play 1.x to Play 2.x is there's no such thing. It's like saying you upgraded from Struts 1 to Struts 2 or Tapestry 4 to Tapestry 5. It's a migration, with a whole new project.

Evolutions
I started by looking around to see if anyone had documented a similar migration. I found two very useful resources right off the bat:

From Jan's Blog, I learned to copy my evolutions from my Play 1.x project into conf/evolutions/default. I changed my application.conf to use PostgreSQL and wrote an EvolutionsTest.scala to verify creating the tables worked.

import org.specs2.mutable._

import play.api.db.DB
import play.api.Play.current

import anorm._

import play.api.test._
import play.api.test.Helpers._

class EvolutionsTest extends Specification {

  "Evolutions" should {
    "be applied without errors" in {
      evolutionFor("default")
      running(FakeApplication()) {
        DB.withConnection {
          implicit connection =>
            SQL("select count(1) from athlete").execute()
            SQL("select count(1) from workout").execute()
            SQL("select count(1) from comment").execute()
        }
      }
      success
    }
  }
}

Then I began looking for how to load seed data with Play 2.x. In Play 1.x, you could use a BootStrap job that would load sample data with YAML.

import play.jobs._
import play.Play

@OnApplicationStart
class BootStrap extends Job {

  override def doJob() {

    import models._
    import play.test._

    // Import initial data if the database is empty
    if (Athlete.count().single() == 0) {
      Yaml[List[Any]]("initial-data.yml").foreach {
        _ match {
          case a: Athlete => Athlete.create(a)
          case w: Workout => Workout.create(w)
          case c: Comment => Comment.create(c)
        }
      }
    }
  }
}

This is no longer a recommended practice in Play 2. Instead, they recommend you turn your YAML into code. 10 minutes later, I had a Global.scala that loaded seed data.

import models._
import play.api._
import play.api.Play.current

import anorm._

object Global extends GlobalSettings {

  override def onStart(app: Application) {
    InitialData.insert()
  }
}

/**
 * Initial set of data to be loaded
 */
object InitialData {

  def date(str: String) = new java.text.SimpleDateFormat("yyyy-MM-dd").parse(str)

  def insert() {

    if (Athlete.count() == 0) {

      Seq(
        Athlete(Id(1), "[email protected]", "beer", "Matt", "Raible"),
        Athlete(Id(2), "[email protected]", "whiskey", "Trish", "McGinity")
      ).foreach(Athlete.create)

      Seq(
        Workout(Id(1), "Chainsaw Trail",
          """
            A beautiful fall ride: cool breezes, awesome views and yellow leaves.

            Would do it again in a heartbeat.
          """, 7, 90, date("2011-10-13"), 1),
        Workout(Id(2), "Monarch Lake Trail",
          "Awesome morning ride through falling yellow leaves and cool fall breezes.",
          4, 90, date("2011-10-15"), 1),
        Workout(Id(3), "Creekside to Flume to Chainsaw",
          "Awesome morning ride through falling yellow leaves and cool fall breezes.",
          12, 150, date("2011-10-16"), 2)
      ).foreach(Workout.create)

      Seq(
        Comment(1, "Jim", "Nice day for it!"),
        Comment(2, "Joe", "Love that trail."),
        Comment(2, "Jack", "Where there any kittens there?")
      ).foreach(Comment.create)
    }
  }
}

Anorm's Missing Magic
Before starting with Play 2, I knew it had lost some of its magic. After all, the developers had mentioned they wanted to get ride of the magic and moving to Scala allowed them to do that. However, I didn't think I'd miss Magic[T] as much as I do. Like Martin Fowler, I like ORMs and having to use SQL again seems painful. It seems like a strange shift for Play to reduce type-safety on the backend, but increase it in its templates. Oh well, to each their own. I may eventually move to Squery, but I wanted to do a side-by-side comparison as part of my migration.

Using the aforementioned tutorial from James and Jan's blog posts, as well as Guillaume's Play 2.0/Anorm, I set about creating new model objects. I wrote a bunch of SQL, typed up some new finders and migrated my tests from ScalaTest to the new default, specs2. The Mosh Pit's Migrating a Play 1.2 website to Play 2.0 was a great help in migrating tests.

That's when I started having issues with Anorm and figuring out how its parser syntax works. After struggling for a few days, I finally found yabe-play20-scala. Since I'd used the yabe tutorial from Play 1.x, it was familiar and helped me get past my problems. Now, things aren't perfect (Workouts aren't ordered by their posted date), but everything compiles and tests pass.

To illustrate how little code was required for Anorm 1.x, checkout Workout.scala in Play 1.x vs. Play 2.x. The Play 1.x version is 66 lines; Play 2.x requires 193 lines. I don't know about you, but I kinda like a little magic in my frameworks to reduce the amount of code I have to maintain.

I was pleasantly surprised by specs2. First of all, it was an easy migration from ScalaTest. Secondly, Play's FakeApplication made it very easy to write unit tests. The line count on my UnitTests.scala in Play 1.x vs. Play 2.x is almost identical.

Summary
The first few hours of developing with Play 2 were frustrating, mostly because I felt like I had to learn everything over again. However, I was pleased to find good references on migrating from Play 1.x. Last night, I migrated all my Controllers, integrated Scalate and got most of my views rendering. I still have issues rendering validation errors, but I hope to figure that out soon. The last 2 hours have been much more fun and I feel like my Scala skills are coming along. I think if the Play Team could eliminate those first few hours of struggling (and provide almost instant joy like Play 1.x) they'd really be onto something.

As soon as I figure out how to validation and how to add a body class based on the URL, I'll write another post on the rest of my migration. A Play 2-compatible version of SecureSocial just came out this evening, so I may integrate that as well. In the meantime, I'll be working on the iPhone app and finishing up a Grails 2 application for James Ward and my Grails vs. Play Smackdown.

Posted in Java at Jun 05 2012, 08:55:40 PM MDT 7 Comments

School's Out for Summer!

One of the main reasons I started this blog was to document my life. I like writing technical blog posts because it allows me to save knowledge in my brain and open up space for new stuff. It's been a couple months since I wrote any tech posts, but rest assured there will be a flurry in the near future. In the meantime, I'd like to reflect on my kids and how proud I am of them.

They both finished school two weeks ago today and I made sure and played Alice Cooper's School's Out several times that day.

Loudly.

I love how the song tries to capture the "greatest three minutes of your life".

Abbie and Jack had an athletic spring; both participating in their sport of choice. Jack chose lacrosse and learned how to play some mean defense. Abbie chose basketball and scored her first hoop in a game. I think I was in 5th grade before I scored in a game, so she's one up on me. Below are their team pictures. Lookin' good kids!

Jack's loves Lacrosse Abbie loves Basketball

Jack's Lacrosse Team Abbie's Basketball Team

In addition to sports, both kids were involved with Cub/Girl Scouts and performed in the school's talent show. I guess they like to be in front of an audience. I wonder where they get that from? ;)

Posted in General at Jun 05 2012, 10:25:54 AM MDT Add a Comment

Wine Tasting in Napa Valley

Earlier this month, I had the pleasure of traveling to California for the monthly commute to my current client. It was a fun week, mostly because my partner in crime started working with me again. We kicked off a new mobile project and I helped finish up a UI refresh that I've been working on for the last few months. While the happy hours and late night chats were fun, it didn't hold a candle to Trish and my journey to Napa Valley over Mother's Day weekend.

Before heading to Napa, I started by emailing some local friends to get some recommendations. We got some really detailed responses, especially from Dusty and Mrs. Crazy Bob. We took their recommendations, setup some appointments, made some reservations and booked a room at Harvest Inn.

After settling in the first night, we drove to Round Pond Estate to have a glass of wine with the sunset. The sunset was great, but Trish made it look even better with a little HDR.

Napa Country Sunset Napa Sunset with Windmill

That evening, we dined at Ad Hoc. We couldn't get a reservation until 9:30, but the food was fantastic and the pairings even better.

On Saturday, we slept in a bit and started our first tasting at Orin Swift in St. Helena. It was a private tasting in a hard-to-find area. We didn't recognize the name when we first made the appointment, but were impressed to find they made The Prisoner and Papillon. We enjoyed hearing the story of the winery and how all the labels came to be. We liked it so much, we bought a bunch and send it to our Moms for Mother's Day.

Orin Swift Collection

From Orin Swift, we went to Cade Winery. This was perched on the top of a mountain and had a terrific view. Trish had booked our tasting and tour online and we someone got into a release party, complete with oysters, exotic cheeses and lots of wine for everyone. We also got a tour of their underground cave.

Cade Vineyard Cave Table Cade Vineyard Cask Row Cade Flowers next to infinity pool

Cade Winery

Darth Vader Plumpjack Couple looking at the view at Cade Winery

While Orin Swift had our favorite wines of the day, Cade was our favorite winery. Not only that, but we discovered they made PlumpJack, which is one of Trish's favorite brands.

The last place we visited that afternoon was Anomaly, a very small winery that was in the owner's backyard. The winery itself was like a tall garage with the tasting room downstairs.

Anomaly Vineyard and house

That evening, we dined at Auberge. It was incredible. The Nuggets losing to the Lakers in Game 7 was not.

Auberge

Thanks to Dusty and Mrs. Crazy Bob for all the excellent recommendations. We thoroughly enjoyed ourselves.

California Chevy in Wine Country

You can check out of Trish's pictures in her Napa Valley Gallery. I especially dig her California Chevy photo shown above.

Posted in General at May 22 2012, 10:53:48 AM MDT Add a Comment

How to build a Shot-Ski

At this year's Java Posse Roundup, James Ward, Trish McGinity, Brad Kizzort and I embarked upon a mission to build a Shot-Ski. Actually, we decided to build two. We wanted to show all the things we learned at the Roundup into a 5-minute Lightning Talk and building Shot-Skis seemed like an excellent mechanism. As Skiing Magazine says:

Everyone should have a shot-ski at their disposal. They're versatile, classy, and always appropriate. And, best of all, easy to make.

We spent about 3 hours researching, building, testing and deploying our shot-skis on a quiet afternoon in the town of Crested Butte. Below is a picture of our finished products, complete with stickers to demonstrate modern webapp design, a.k.a. sex sells.

Shot-Skis!

We developed two different types of shot-skis, one that had the shot glasses top-mounted and the 2nd with the glasses mounted in the skis. We A/B tested them and decided we liked the top-mounted ones better. However, the in-ski version has the benefit of built-in brakes, in case you're using it on the mountain.

The whole crew was proud of what we were able to create in an afternoon. You can almost feel our pride as we strolled to that evening's lightning talks.

Strolling through Crested Butte

And now, thanks to The Java Posse, we actually have video footage of our lightning talk!

If you're ever in the town of Crested Butte, we donated these skis to The Secret Stash and Montanya Distillers. We encourage you to stop by and try them out. You can also checkout Trish's photos of our development process.

Posted in Java at May 03 2012, 04:02:41 PM MDT 1 Comment

Bus Project Update

I bought my '66 21-window VW Bus way back in April of 2004. I purchased it on eBay minutes after DU Won the National Championship in NCAA Hockey. It was a day I still remember very well. Several weeks later, my Dad and I flew to San Diego to pick it up and drive it back to Denver. It was a great adventure. I remember fondly 2-year old Abbie calling it "Daddy Bus". Jack was still a couple months away from his birthday.

Fast forward 8 years and The Bus is still in the shop. It's been there since July 2008. However, it's closer than ever to being finish. In fact, I drove to Colorado Springs last Thursday and met with Jeremy and Ben to finalize what it'll take to get 'er done. In other words, the end is in sight! It's been a long time coming, but this isn't your normal bus project. Not only are we restoring every nut and bolt, but we're converting it to have have a Porsche infrastructure so it can really get up and go. 911 engine (3.0 SC), Weber 46 IDA carbs, 5-speed 915 transmission, custom air-bag suspension (by Franklin's VW Werks), Porsche wheels, iPads for TVs, Porsche gauges and a sweet sound system.

Looking at the pictures below, it might not look like it's close to being done, but we've got most of the parts and now it's just a matter of time.

Porsche 5-speed Tranny Paint Me Please The '66 is ready to be a '12

Ready for paint!

All the used parts have been found and I'm negotiating with sellers now. The rear suspension has been paid for and it should be done in a few weeks. The interior has been picked out and ordered. With any luck, I'll have a kick-ass new ride arriving sometime in June. In July, I hope to drive it in the Swan Valley 4th of July parade.

If you live in Colorado and would like to see it at a local event, I plan on showing (and racing!) it at the Colorado Bug-In at Bandimere Speedway. That's on Sunday, July 29th. In the meantime, it's gonna be pretty cool watching it come alive!

Posted in The Bus at Apr 30 2012, 07:59:52 AM MDT Add a Comment

Farewell to the 2011-2012 Ski Season

In 2011, I experienced the best ski season of my life. On the Thursday after ski season ended last year, I wrote:

For next year, I think I'll keep my goal at 30 days. If everything works out as planned, we'll have a place in the mountains this fall and it'll be a bit easier to hit the slopes without sitting in traffic.

Everything did work out as planned and we found ourselves in eager anticipation of ski season last fall. We prepped the Ski Shack for lots of visitors by getting queen-sized bunk beds made for the kids. We even got a hot tub installed for Trish's birthday in mid-December.

Hot Tub Installed for Trish's Birthday!

For Christmas, my parents, sister and her wife all flew in and we spent a beautiful evening watching the parade at Winter Park.

Christmas Eve at Winter Park Village

The skiing still wasn't great, but there was enough snow to cover the tubing hills in Fraser. We got some sweet helmet covers from my Mom for Christmas and had a blast with Trish's brother's family over New Years.

Skiing on Christmas Day! Skiing with Wild Animals

The "Training" Park Shredders

The rest of the season was filled with a lot of 4-run outings, where we skied the bare minimum to count it as a day. I can recall only 3 really good days. One was at Steamboat with 11" of powder and lots of knee-deep stashes. The others were at Mary Jane where Trish and I got fresh powder tracks for a good hour.

Yep, the snow was terrible this year. In fact, my favorite lift at Winter Park (Eagle Wind) never even opened. I still managed to get in 33 days, but it certainly wasn't a ski season to reminisce about. I am proud of the fact that Abbie and Jack skied 15 days and never needed a lesson. Trish even taught them how to snowboard one day and they both loved it.

We only made it to 3 resorts this year, a far cry from last year's 9 + a hut trip. However, I don't feel like we missed out because the snow was so bad. Having a condo 15 minutes from the resort certainly helped us get more days in, but I'm willing to bet we skied 10x more hours last year.

Next year, I hope it snows a ton and we get 50 days in. In the meantime, I'm pumped that mountain bike season has started and there's lots of dry trails along the front range. I have two rides in so far this week and hope to get at least 30 days in this summer. With 600 miles of trails just minutes from our Ski Shack, it seems like it should be easy enough.

In other life-related news, I'm driving to Colorado Springs this afternoon to pick out the interior for The Bus. With any luck, MotorWorks Restorations will have it done in a couple months. In the meantime, you can see their latest progress on Facebook. I can't wait until this bad boy is road worthy! :)

Posted in General at Apr 26 2012, 09:46:33 AM MDT Add a Comment

Cruising around the Western Caribbean

I've heard great things about Disney Cruise Lines from friends, especially as a fun adventure for kids. That's why I was super pumped to talk my family into going on a Western Caribbean Cruise for Spring Break. As you might've read in my last post, we spent a week in Crested Butte before embarking on our cruise.

ShotSki Research at The Secret Stash While in Crested Butte, I enjoyed the Java Posse Roundup, but unfortunately had to do client work most of the week. However, that didn't stop James Ward, Trish and me from building a Shot-Ski and doing a 5-minute lightning talk on it. We had a great time doing research, getting locals to help us out and beta testing it with JPR attendees. I'll write a blog post on what we learned in the near future. In the meantime, you can check out Trish's Making a Shot-Ski photos.

We left Crested Butte on Thursday (March 29th) and drove back to Denver to meetup with my parents (who drove down from Montana). Friday morning we hopped on a plane and flew to Orlando, Florida and took a bus to Port Canaveral. Abbie and Jack were at their Grandma's in West Palm Beach, so Trish's parents picked them up on their drive up from Naples. We all met with near perfect timing and boarded the Disney Magic around 4 o'clock Friday afternoon.

Raible's and McGinity's welcome to our Disney Cruise!

The Joes Maureen and Abbie Leaving Port Canaveral First Dinner!

My Dad's Stateroom We were immediately impressed with our rooms (we had 3 staterooms next to each other on the 5th floor forward) and their nice portal windows. We saw dolphins jumping in Port Canaveral as we departed and witnessed a horn battle between our ship and the Disney Fantasy. The Disney Fantasy was embarking on its maiden voyage and we saw it many times throughout the trip. That evening, we ventured to the first dinner seating (at 17:45). We were pleased to find out we'd have the same servers all week, at different restaurants throughout the ship.

Key West
Saturday morning, we arrived in Key West and had from 12am-9pm to explore. We took a tour in Key West and learned a lot about the history and architecture of the town. Last time we visited Key West, I was super impressed with Mel Fisher Maritime Museum. It was fun to show it to everyone and we savored some tasty beverages at Margaritaville afterward.

Abbie on stage in Margaritaville Key West Florida Jimmy Buffet mural at Margaritaville Key West Florida

We returned to the ship for dinner that evening and enjoyed the service of Omar (our main server) and Marijah (his assistant) once again. A couple hours laster, the boys (minus Jack) returned to shore to do some bonding. We wandered about, set a match to some cigars and made it back on the ship before it departed. We spent the remainder of the evening in the ship's Sports Bar watching March Madness and talking about Trish and my upcoming wedding.

Bonding in Key West Key West Memories Bonding Night with the Queen

Sunday was a day at sea and we made the most of it. Lots of swimming, relaxing, playing with kids and enjoying each other's company. The ship had two different places that you could drop your kids off and Abbie (9) had a lot of fun attending their activities. Jack wasn't that into it and spent most of his day visiting the soft-serve ice cream machine. That evening, Trish and I journeyed to a romantic dinner at the ship's 18-and-older restaurant and celebrated our 1-year "moved in together" anniversary.

Grand Cayman
Monday, we arrived at Grand Cayman early in the morning and were ashore by 8am. We had a snorkeling expedition planned so promptly gathered and headed out to sea on a snorkeling boat. The weather was beautiful, the water was warm and snorkeling around a shipwreck was a very memorable experience.

Abbie and Jack arrive in Grand Cayman Islands Baba is excited to go snorkeling!

Barb and Joe going shipwreck snorkeling in Grand Cayman Abbie is a little nervous about the shipwreck

We visited the Hard Rock cafe to get my Dad a t-shirt, purchased some Tobago Rum Cakes and finished with a tour of the new Cayman Islands National Museum. We were back on the ship by 4 so our parents could have their own romantic dinner that evening.

Raible and McGinity dinner

Cozumel
Tuesday morning, we woke up in Cozumel. Trish and my parents headed to shore for some exploring while I slept in with the kids and ate at the "something for everyone" breakfast buffet. In the afternoon, we all headed to shore for a submarine ride. The submarine adventure was very cool, going down 120 ft. and even taking us to the edge of a cliff on the ocean floor. We got to see several schools of fish, loads of coral reef and even a sea turtle swimming along the bottom.

Cute Kids Submariners

Disney Double Date! Mimi and Baba Monkeys

The highlight of Cozumel was Manuel. After the submarine ride, we took a taxi to a restaurant with a great view and had a couple margaritas and some excellent steak tacos. While we were finishing up, a man walked up to us and asked if we wanted him to play us a song on his guitar. We said yes and gave him our small change ($1.75) for his serenade.

Shortly after, we got up to leave the restaurant and walk back to the ship. That's when Trish came up with a brilliant idea and asked Manuel if he'd be willing to walk with us around town and play music the whole time. She offered him $20 and he quickly agreed.

What followed was lots of laughs, smiling and dancing through the streets of Cozumel. Not only from us, but also from many of the locals. Manuel was an excellent mariachi musician and provided an exciting sense of celebration around us for the next 20 minutes.

Trish paid Manuel $20 to walk with us and play... Trish paid Manuel $20 to walk with us and play...

Our posse with our Guitarrón Amigo in the Plaza Cozumel Mexico

Wednesday was another day at sea as we traveled from Cozumel to Disney's private island in the Bahamas: Castaway Cay. We got a kick out of the ship's activities, from Beer Tasting to watching the John Carter movie in 3D. I snapped some sweet photos that night as we were watching the sun set over the horizon.

A thing of beauty

Long Lasting Love

Castaway Cay
At first, I thought Castaway Cay was going to be like Disney World, just on an island. I was expecting all kinds of rides and an amusement park. I was surprised to find it was nothing like that, but more of a private beach with all kinds of bars, games, water sports and even a water slide. The kids had a blast building sand castles, learning how to play checkers and exploring the island. I had a massage to the sound of ocean waves in the afternoon and we hopped back on the ship around 5 that afternoon.

That night, we had to pack up our luggage by 10 and put it out so it could be checked into our flight the next day. Disney did an awesome job of handling our luggage both to and from the cruise. All we had to do was attach bag tags in Denver and our bags arrived at our room shortly after boarding. On the way home, we gave them our bags on Thursday night and didn't see them until arriving in Denver.

Our crew on the Disney Magic!

The last morning on the Disney Magic was a bit early. We had to be at breakfast at 6:45, were off the ship by 8 and at the Orlando airport by 9. Our flight was at 7 that night, so we suddenly found ourselves with 9 hours of free time and nothing to do.

LEGOLAND
Last year around this time, Jack was struggling in school and getting in trouble almost every-other-day. In an attempt to promote good behavior, I told him I'd take him to LEGOLAND if he had 10 days in a row of good behavior. This didn't seem to help and we ended the school year with no trip planned. However, when this school year started, he had excellent behavior (which has continued all year) and quickly remembered my promise.

As we were sitting in Orlando's airport, I remembered this promise and 30 minutes later we had a car rented and were driving to see some legos. We spent a joyous day there, riding the few rides they had and marveling over all the things you could build with legos. It was a fun way to end our wonderful vacation.

This cruise was a first for myself, my kids and my parents. We were extremely impressed with Disney's Customer Service and have never felt more pampered in our lives. All the crew we interacted with knew our names by the second days and were some of the most kid-friendly people I've ever met. The food was excellent, the weather was beautiful and the activities were plentiful. It wasn't until the last night that we realized there were 15 bars on the ship, and by that time it was too late for a pub crawl. Oh well, there's always next time. ;-)

For more pictures from our Disney Magic voyage, see our photos on Flickr.

Posted in General at Apr 15 2012, 06:05:57 PM MDT Add a Comment

Spring Break!

Spring Break is a wonderful time of year. It's near the end of the ski season and spring is in the air. Ever since I split with Abbie and Jack's Mom (5 years ago), she's taken the kids to West Palm Beach (Florida) for Spring Break. Their Grandma is a teacher and she has the time off, so it's always worked out well.

This year, I decided to change things up a bit and plan my own Spring Break vacation. In true "Matt and Trish" style, we didn't just plan a trip to an exotic location for a week, we planned a trip to several exotic locations. We started off by taking the kids to the mountains over the weekend and treating them to a fancy dinner at Devil's Thumb Ranch. This trip was mostly to get our skis for this week's trip.

Office View in Crested Butte Yesterday, we drove back to Denver, dropped the kids off at their Mom's (they're flying to Florida today) and continued on to Crested Butte (a.k.a. "the last great Colorado ski town"). In Crested Butte, I'm signed up for the Java Posse Roundup. We're here for the week to enjoy the conference, the beautiful weather and the great town of Crested Butte. I'm sure we'll figure out a way to get some Spring Skiing in along the way. We're staying at The Ruby of Crested Butte, which turns out to be the nicest Bed & Breakfast I've ever stayed in (thanks for the recommendation James!).

This Friday, we'll be heading to another adventure with the kids and both Trish and my parents. I'll make sure and write about our journey when we return. In the meantime, I've discovered the kids only have 1 week off for spring break, not 2 weeks. So I guess I'm to blame for them playing hookie on a boat when they should be in school. Oh well, they don't look too upset, do they? :)

Abbie and Jack

Posted in General at Mar 26 2012, 10:01:44 AM MDT Add a Comment

A Spectacular Trip to Stockholm and Madrid

When I travel in the winter, it's usually to ski resorts or client sites, not to conferences. However, when the Mattias Karlsson invited me to speak at Jfokus, I jumped at the opportunity. That same day in Antwerp, Sergi Almar asked me to speak at Spring I/O. Turns out, both conferences were in the same week so we worked out the logistics of traveling to Stockholm and Madrid and got ready for a spectacular trip.

Trish and I started our journey two weeks ago by flying over the top of world, connecting through Seattle and Reykjavik (Iceland) before arriving in Stockholm on Monday afternoon. We took the bullet train from the airport to downtown and walked a couple blocks to the conference venue/hotel. We checked in, relaxed, then met a bunch of folks a few hours later to go to the speaker's dinner at F12.

James Ward and Enno Runne by Trish McGinity Juergen Hoeller Speakers Dinner Singers Matt Raible James Ward Rickard Oberg Jfokus speakers dinner

On Tuesday, I attended quite a few sessions at the conference, took and nap and delivered my Comparing JVM Web Frameworks talk at 17:00. The Atlassian Bar opened after my talk concluded and we enjoyed some tasty beverages while talking tech with new and old friends. James Ward's Cloud BOF started at 8 and we enjoyed the beer and banter before heading out to the local Sports Bar. We scared the bar's proprietors with our hunger and thirst at such a late hour, but they served us anyway.

John Wilander Jfokus 2012 Thanks for the beer Atlassian! Cloud Conversations Heroku James Ward After BOF Dinner Crew

On Wednesday, I got woken up by the hotel's housekeeping at 9:52 and I had to be on stage at 10:10. I got dressed and downstairs as fast as I could and put the final touches on my presentation as people were filing in the room. I opened my talk with, "You ever had one of those morning where the housekeeping woke you up and you had to be on stage 10 minutes later?"

The conference ended that day, but Trish and I extended it a bit by going to the Scala Stockholm Meetup and walking around the city to capture some night photos. I wrote up a blog post about my presentations and Jfokus the next morning and Trish posted both her Jfokus and Stockholm pictures to Flickr. Below are some of my favorite pictures of Sweden.

Stockholm bike along rail

Storkyrkan Saint Nicolaus Church Stockholm Stockholm Town Hall
Stockholm Evening
Stockholm Lion
Riddenholm Church
Stockholm View

On Thursday, we traveled to Madrid for Spring I/O. We arrived at sunset and met up with Josh Long and his Dad for a ride to our hotel. Trish went to high school in Puerto Rico and got to show of her Spanish skills when she helped the driver find the hotel. I spoke on Friday morning and we spent the rest of the weekend taking photos and enjoying Carnival. We had a great hotel in the heart of Madrid and could walk to almost all the historic sites.

It was great seeing Trish in Madrid. Her Spanish was excellent and I felt like I had a personal tour guide the whole time. Her pictures show the weather was beautiful and the sites, amazing.

Templo de Debod

Iglesia San Gines Palace Real

Plaza Mayor Madrid Evening Commute Puerta de Alcala Madrid

Almudena Cathedral

You can see all of Trish's Madrid photos on Flickr. I also published mine in a Stockholm and Madrid 2012 album.

Yes, it was quite a bit of work preparing for two conferences in one week. However, both were in exotic, beautiful locations. Not only that, but Mattias and Sergi did a great job of providing terrific local experiences. Thanks guys, we had a blast.

Happy Travelers in Madrid

For more of Trish's photos from our world travels, see McGinity Photo's World Gallery.

Posted in General at Feb 26 2012, 09:11:03 PM MST 2 Comments

Comparing Web Frameworks and HTML5 with Play Scala at Jfokus 2012

Riddenholm Church Stockholm seems a lot like Denver this time of year. Cold, snowy and beautiful. Trish and I arrived in Stockholm (Sweden) on Monday for the Jfokus conference and we're traveling to Madrid today for the Spring I/O conference. I was invited to Jfokus within minutes of delivering my HTML5 with Play Scala talk at Devoxx.

Both the Jfokus and Spring I/O Organizers were interested in my Comparing JVM Web Frameworks talk, so I updated it to reflect my latest thoughts. First of all, I mentioned that there's a lot of great frameworks out there and I think the reason people are so apprehensive to choose one is because they've chosen badly at one point. This might've been Struts back in the day (even thought it was one of the best frameworks at the time) or it might be because a vendor talked them into it. However, if you look at the modern JVM frameworks today, you should be able to see that they're all pretty awesome.

I mentioned how I think Web developers should know JavaScript and CSS. If you're a Java developer and you call yourself a web developer, you're letting your framework do too much of the work for you. I mentioned Rich Manalang's Modern Principles in Web Development, where he talks about his core web development principles.

  • Designing for mobile first (even if you’re not building a mobile app)
  • Build only single page apps
  • Create and use your own REST API
  • “Sex sells” applies to web apps

I've found these principles to be true in my own experience and suggested that if you want to be a web developer, the frameworks you might want to learn are not traditional JVM web frameworks, but rather client-side MVC frameworks. For those Java developers that don't want to be web developers, I suggest they strengthen their services development knowledge by reading Hot to GET a Cup of Coffee.

You can see my updated presentation below, on Slideshare or as a downloadable PDF. You can also watch the video.

I delivered my 2nd presentation on HTML5 with Play Scala, CoffeeScript and Jade on Wednesday morning. This talk is one of my favorites and I prepared for it over the last several weeks by adding JSON CRUD Services and SecureSocial to my HTML5 Fitness Tracking application. Right before we left for Jfokus, I was able to get everything to work, but didn't spend as much time as I'd like working on the mobile client. If this talk gets accepted for Devoxx France, I plan on spending most of my time enhancing the mobile client. After my latest experience developing, I can see how Rich's first principle (above) makes a lot of sense.

Below is my presentation for this talk. Of course, it's on Slideshare and downloadable as a PDF.

I also updated the Developing Play More demo video to show my latest efforts.

Delivering these talks at Jfokus was a lot of fun. Yes, it was a lot of work and stress to prepare them. However, I also learned a lot creating them and I hope the audience benefitted from that.

Jfokus 2012 The conference itself was incredible. I got to meet Peter Hilton and Helena Hjertén as I was registering. The speaker's dinner at F12 was off-the-hook good and I had the pleasure of finally meeting Rickard Öberg.

I also attended some fantastic presentations, including Peter Hilton's Play Framework 2.0, Bodil Stokke's CoffeeScript: JavaScript without the Fail, Pamela Fox's Client-side Storage and Heiko Seeberger's Scala in Action. I don't know if Heiko has published any slides, but I'm guessing not since most of his presentation was live coding.

I have lots of good memories from Jfokus. Many thanks to Mattias for inviting me!

Posted in Java at Feb 16 2012, 12:01:05 AM MST 5 Comments