Matt RaibleMatt Raible is a Web Developer and Java Champion. 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 shouldn't have to worry about front end optimization

After writing yesterday's article on optimizing AngularJS apps with Grunt I received an interesting reply from @markj9 on Twitter.

I clicked on the provided link, listened to the podcast (RR HTTP 2.0 with Ilya Grigorik) and discovered some juicy bits at around 27:00. The text below is from the podcast's transcript at the bottom of the page.

[Read More]

Posted in The Web at Jan 16 2014, 01:49:03 PM MST 5 Comments

Using Grunt with AngularJS for Front End Optimization

I'm passionate about front end optimization and have been for years. My original inspiration was Steve Souders and his Even Faster Web Sites talk at OSCON 2008. Since then, I've optimized this blog, made it even faster with a new design, doubled the speed of several apps for clients and showed how to make AppFuse faster. As part of my Devoxx 2013 presentation, I showed how to do page speed optimization in a Java webapp.

I developed a couple AngularJS apps last year. To concat and minify their stylesheets and scripts, I used mechanisms that already existed in the projects. On one project, it was Ant and its concat task. On the other, it was part of a Grails application, so I used the resources and yui-minify-resources plugins.

The Angular project I'm working on now will be published on a web server, as well as bundled in an iOS native app. Therefore, I turned to Grunt to do the optimization this time. I found it to be quite simple, once I figured out how to make it work with Angular. Based on my findings, I submitted a pull request to add Grunt to angular-seed.

Below are the steps I used to add Grunt to my Angular project.

[Read More]

Posted in The Web at Jan 15 2014, 12:15:52 PM MST 7 Comments

AppFuse 3.0 Released!

The AppFuse Team is pleased to announce the release of AppFuse 3.0. This release is AppFuse's first release as a 10-year old and includes a whole slew of improvements.

  • Java 7 and Maven 3 are now minimal requirements
  • Replaced MyFaces and Tomahawk with PrimeFaces for JSF
    • Removed SiteMesh in favor of JSF's built-in layout support
  • Added Wicket support
  • Migrated from jMock to Mockito for tests
  • Integrated wro4j and WebJars
  • Migrated to Bootstrap 3 and defaulted to Bootswatch's Spacelab theme

In addition, this release includes upgrades to all dependencies to bring them up-to-date with their latest releases. Most notable are Spring 4, Spring Security 3.2 and Bootstrap 3. For more details on specific changes see the release notes.

What is AppFuse?
AppFuse is a full-stack framework for building web applications on the JVM. It was originally developed to eliminate the ramp-up time when building new web applications. Over the years, it has matured into a very testable and secure system for creating Java-based webapps.

Demos for this release can be viewed at http://demo.appfuse.org. Please see the QuickStart Guide to get started with this release.

If you have questions about AppFuse, please read the FAQ or join the user mailing list. If you find any issues, please report them on the users mailing list. You can also post them to Stack Overflow with the "appfuse" tag.

Thanks to everyone for their help contributing patches, writing documentation and participating on the mailing lists.

We greatly appreciate the help from our sponsors, particularly Atlassian, Contegix, and JetBrains. Atlassian and Contegix are especially awesome: Atlassian has donated licenses to all its products and Contegix has donated an entire server to the AppFuse project.

Posted in Java at Dec 23 2013, 02:31:15 PM MST 1 Comment

JavaOne 2013: Videos of Presentations on Parleys

Duke Rocking Out This year marked my first time speaking at JavaOne. It seems to have gone well, especially since audience feedback resulted in a JavaOne Rock Star Award. I'm very humbled to be listed with some really great speakers. Congratulations to all the other Rock Stars - as well as everyone that had the courage to submit and present a talk this year!

For the top sessions at JavaOne 2013, Oracle worked with Parleys to capture the audio and synch it with the presentations. They published them in a JavaOne 2013 Channel and my presentations were included. Without further ado, here they are for your viewing pleasure.



If you happen to watch these and have any feedback, please leave a comment or send a tweet to @mraible.

Posted in Java at Dec 13 2013, 09:40:42 AM MST Add a Comment

A Webapp Makeover with Spring 4 and Spring Boot

A typical Maven and Spring web application has a fair amount of XML and verbosity to it. Add in Jersey and Spring Security and you can have hundreds of lines of XML before you even start to write your Java code. As part of a recent project, I was tasked with upgrading a webapp like this to use Spring 4 and Spring Boot. I also figured I'd try to minimize the XML.

This is my story on how I upgraded to Spring 4, Jersey 2, Java 8 and Spring Boot 0.5.0 M6.

When I started, the app was using Spring 3.2.5, Spring Security 3.1.4 and Jersey 1.18. The pom.xml had four Jersey dependencies, three Spring dependencies and three Spring Security dependencies, along with a number of exclusions for "jersey-spring".

Upgrading to Spring 4
Upgrading to Spring 4 was easy, I changed the version property to 4.0.0.RC2 and added the new Spring bill of materials to my pom.xml. I also add the Spring milestone repo since Spring 4 won't be released to Maven central until tomorrow.

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>${spring.framework.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<repositories>
    <repository>
        <id>spring-milestones</id>
        <url>http://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>
[Read More]

Posted in Java at Dec 11 2013, 12:47:15 PM MST 7 Comments

The Syncro Rescue Road Trip

Last Thursday, Trish and I met in Boise, Idaho to begin our Syncro Rescue Road Trip. You might remember we bought a ski bus a couple months ago. After Devoxx and Thanksgiving, we finally had time to pick up our new rig. We rented a car from Boise and drove to Bruce's (the owner) house near Sun Valley. We arrived at Bruce's house, met his family and were introduced to our new Volkswagen. We spent the next hour learning about its engine, suspension, beds, captains (swivel) seats, propane system, RV hookups, fridge, stove and roof tent. It was impressive and I couldn't wait to drive it!

Looking back, after reading all the receipts, it's obvious that Bruce did great things for this vehicle. When he bought it in 2004, he worked with Small Car to convert the engine to a 3.3L Subaru SVX. He also installed a 2" lift kit, disc brakes, and better gearing. It was a cool car before Bruce bought it; he turned it into a mean machine. I thought it'd be small like my '66, but it's more like a tank, that you have to crawl into. We like it more every time we drive it.

After spending the night in their cozy guest bed, we enjoyed some good coffee and got on the road.

Let the VW adventures begin!

I was immediately impressed with the Syncro's acceleration. [Read More]

Posted in The Bus at Dec 10 2013, 11:47:46 PM MST Add a Comment

Devoxx 2013 + a Nordic Countries Speaking Tour

Trish at Pelgrom Two weeks ago, Trish and I boarded a flight for one of our favorite conferences: Devoxx. After a brief layover in Frankfurt, we arrived in Amsterdam and took a train to Antwerp. Within hours, we'd settled into our hotel near the center of Antwerp and strolled over to the dungeonous, yet cozy, Pelgrom restaurant. We were hoping for a delicious dinner, but found much more. We ran into James Ward, Dick Wall and a number of other enthusiastic speakers from the conference. Since I had to speak the next day, we didn't stay long, but we did share a number of laughs with some great people.

Tuesday (November 12), was a University Day at Devoxx, and I had my talk that afternoon. I spent a couple hours finishing up my talk that morning, then grabbed a taxi to head to the conference. I was honored with the opportunity to speak in Room 8, which is a huge theater that holds several hundred people.

Devoxx: A Speaker's Perspective The Modern JVM Web Developer AngularJS Deep Dive

I presented a lengthened version of The Modern Java Web Developer presentation I did early this year (at Denver's JUG and JavaOne). Based on your feedback, I chose to do deep dives on AngularJS, Bootstrap and Page Speed. I've always enjoyed speaking at Devoxx because attendees are so enthusiastic and passionate about the conference. I received an immense amount of feedback, both in praises and criticisms. The critics indicated there were too many buzzwords and not enough substance. Others complained that the AngularJS Lipsync that I did was too deep.

I made sure to review and process everyone's comments, and then used them to improve the presentation throughout the following week. I learned to elaborate on the fact that many of the technologies were important to know about, but not important to know through-and-through. I made sure to mention that the use of CoffeeScript and LESS is often limited (or embraced) by team members and their willingness to try new things. If you're not writing thousands of lines of JavaScript or CSS, it probably doesn't make sense to use these languages. Furthermore, if your team members are struggling to write JavaScript or CSS, introducing a new language is probably not the best thing. I also reminded people to be skeptical of new technology, but also to be open-minded and give everything a chance. The 10-minute, download-and-try test, is a great way to do that.

You can find my presentation below, download it from my presentations page, or view it on SlideShare.

Within this presentation, there are links to each of the deep dives. The last two are screencasts that I added audio to a few days ago.

Bootstrap 3 | AngularJS Deep Dive | Page Speed Demo

[Read More]

Posted in Java at Nov 28 2013, 12:07:26 PM MST Add a Comment

Happy Birthday Abbie!

Abbie's 5th Grade School Picture. She can start dating when she's 25 Today marks 11 years since my little girl was born. She's not so little now, and growing up quite fast. Luckily, she's still shorter than most kids in her class, so she doesn't seem like an 11 year old. To celebrate, we started the morning with a birthday song, complete with our border collies (Sagan and Jake) barking loudly. It was a fun beginning and inspired a good mood all around.

Speaking of inspiration, I'd like to thank the state of Colorado and their 5th graders ski free program. It's motivated us to try and ski all the Colorado resorts this year. It all begins soon, with the Syncro Rescue in early December. Abbie is a pretty fast skier now, and I can't wait to ski the powder and ride the lifts with her. Our first road trip with the kids (and pets) will be for Christmas at The Cabin. We plan on skiing a bunch at Whitefish Mountain, where I learned how to downhill.

Happy Birthday Abbie! I hope you're ready for a winter of adventure! We had a blast celebrating your birthday with you tonight. :)

Abbie's 11th Birthday at Benihana

Posted in General at Nov 05 2013, 11:41:28 PM MST Add a Comment

Around The World Honeymoon: Last Stop, Fiji

In August, Trish and I journeyed on a 'round the world honeymoon, to Ireland, Italy, Thailand and Fiji. Trish had a Fiji poster on her wall when she was a little kid and has always dreamed of visiting its islands. Our first view of Fiji from the plane was stunning.

Fiji Land Ho!

We left Thailand on Saturday, August 17. Yes, our flight from Thailand to Fiji was long. It was only a few hours from Koh Samui to Hong Kong, but Hong Kong to Nadi, Fiji was 10 hours. Our layover in Nadi lasted a few hours on Sunday morning. When we boarded the "Island Hopper" for Taveuni, Trish turned into a kid in a candy store. Trish earned her pilots license a few years before I met her and something about a 1960s-era plane excited her greatly.

It took about an hour to fly from Nadi to Taveuni. After we landed, a driver from our hotel greeted us and and drove us to our water taxi. The resort Phil booked for us was Qamea Resort and Spa, which we later found out was on an island with no roads.

As we were arrived at Qamea, we immediately noticed the Padi 5-star Diving Resort sign. We'd both been scuba diving certified in the past, but we hadn't planned on diving in Fiji. When we saw it was 5-star diving, we both looked at each other, smiled, and thought "why not?"

Qamea is a 5 star Padi resort!

[Read More]

Posted in General at Nov 04 2013, 07:10:31 AM MST Add a Comment

Around The World Honeymoon: 3rd Stop, Thailand

In August, Trish and I journeyed on a 'round the world honeymoon, to Ireland, Italy, Thailand and Fiji. Thailand is somewhere I've always wanted to go, and we were looking forward to some beach time as we boarded our flight from Turin to Istanbul.

Flying over Istanbul Turkey We had high hopes for leaving the airport in Istanbul and grabbing dinner. With a six hour layover, we figured it wouldn't be too difficult. After waiting an hour in line to get out, the security guard told us we'd need a visa, which were available for $20 and another hour wait in line. We gave up and headed for the a lounge to relax and do a bit of writing. In fact, that's where I started writing the blog post about our wedding month. The flight to Bangkok started around midnight and arrived in the early afternoon on Monday, August 12. The Bangkok airport was massive and impressive, and we grabbed a bit to eat before boarding for Koh Samui.

Our hotel was the W Retreat Koh Samui and it was spectacular. Upon arrival, we were greeted by the General Manager (Brian Segrave) as we marveled at the view. Shortly after, a driver whisked us up to our bungalow in a "buggie" (golf cart). Our accommodations were exquisite, with a rose petal-filled bathtub, fondu, an outdoor shower and our own private pool. Basically, everything you'd want in a Honeymoon Getaway Suite.

After 2 days of traveling we make it to our room at the W in Thailand, whew!

And rose petals in our tub..I'm in heaven. They had fondue waiting for us in our room - sweet! Outdoor shower in our room!

No way!  We have our own little pool and veranda!

[Read More]

Posted in General at Oct 31 2013, 06:49:39 PM MDT 3 Comments