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

The JHipster Mini-Book The JHipster Mini-Book is a guide to getting started with hip technologies today: AngularJS, 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.

Is it possible to replace the syntax parser in Eclipse or IDEA's JSP Plugin?

JSP in Eclipse At LinkedIn, we have our own JSP Compiler. Our version of JSP is more like FreeMarker than JSP since it solves many of the deficiencies of JSP. Since we allow a different syntax than standard JSP (more powerful EL, new tags for looping, loading from classpath), we (like FreeMarker) don't get much love from IDEs.

We don't get much in the way of syntax-highlighting or code completion. However, since we use JavaCC/JJTree for parsing, I'm wondering if Eclipse or IDEA (or even NetBeans) allows replacing the default syntax definition with a new one.

Has anyone extended one of these IDEs to enhance its JSP syntax highlighting and compilation? If so, I'd love to hear about it. If not, it's likely we'll be doing it in the near future.

Posted in Java at Jun 23 2008, 12:21:36 PM MDT 2 Comments

Traveled Coast to Coast Last Week

Coaches Jen and Jimmy Last week I traveled from Denver to Mountain View with the UI Frameworks Team. It was the first time all four of us traveled together and we had a great time. On Monday night, I helped LinkedIn Softball beat the only undefeated team in our league. Pitchers were a flowin' at a nearby beer garden afterwards to celebrate.

New House in Concord On Wednesday evening, we returned to Denver and I enjoyed a night with the kids before flying out on Friday to Boston for the American Craft Beer Fest. The flight was no fun as it took me 12 hours door-to-door (on the way home too). I stayed with friends in Concord, Mass. and enjoyed the "country livin'" a whole lot. They had just moved in a few weeks before, and it was awful nice being in an area with huge lots (1 acre +) and neighbors that come over and talk for hours.

On Saturday, we had a great time at the ACBF and even ran into some good friends (Chad and Mike) from Denver. Amazingly enough, both of these guys are going to Oktoberfest at the same time we are. Below are some photos from the festivities (more on Flickr).

Line for the Craft American Beer Fest Yeee hawwww

Good Times These guys are going to Oktoberfest too!

On Sunday, we went to the Old North Bridge and learned some fascinating stuff about the beginning of the American Revolution. Did you know that 1/2 of the British Regiment that went to Concord stopped for pints at 9 in the morning? If they hadn't, they would have been able to surprise the Minutemen from behind and the American Revolution may never have happened. I also liked the fact that after the British were fired upon they ran back to town and then had breakfast for a couple hours. Maybe I should modify this Wikipedia page to add these tidbits we learned from our tour guide? ;-)

All in all, it was a great week of traveling. The flights to and from Boston were way to long, but the memories I created were worth it. I'll be in Denver all week, enjoying Bike to Work Day on Wednesday and then heading off on vacation for a week. I love summertime.

Posted in General at Jun 23 2008, 11:40:22 AM MDT Add a Comment

LinkedIn's Engineering Blog

LinkedIn Blog Have you been curious about LinkedIn's architecture or how they're using Grails and Rails? If so, you might be interested in LinkedIn's Engineering Blog. Over the past couple of weeks, a few Engineers have starting writing about our architecture, OpenSocial, RailsConf, YUI, Grails and OSGi. Below is a complete listing of Engineering posts.

If there are topics you'd like to see us blog about, please let me know. I've somehow landed in the role of Editor for the Engineering Blog, so I should be able to hook you up if I can find an engineer to blog about what you're interested in.

On a related note, Rob Getzschman's entry LinkedIn discovers the truth about Cannes is quite entertaining. Highly recommended.

Posted in Java at Jun 13 2008, 08:30:19 AM MDT 10 Comments

Share on LinkedIn

This is a test to see if I can get the Share on LinkedIn widget working on this site. Click below to invoke.

Share on LinkedIn

Seems to work pretty well. I like how you can select text and it'll automatically populate the summary. You can drag the link above to your toolbar in Safari and Firefox if you want to use it like a favelet.

Now I just need to get one of the designers to create a nifty little "Share on LinkedIn" icon so I can add it to all my entries by default.

Posted in The Web at Jun 05 2008, 10:13:04 PM MDT 4 Comments

Why no more than 500 connections?

I recently updated my status on LinkedIn to read:

Matt is determined not to have 500+ connections. Will start removing connections soon.

A couple of days later, I received the following message from a connection:

I noticed the other day you mentioned that you are determined to not have over 500 LinkedIn connections. I'm wondering what the reason is? Not just because LinkedIn shows 500+ after that, is it? As you work for LinkedIn, I assume there's some other reason. I'm interested to know what it is...

I joined LinkedIn May 27, 2003, 22 days after it initially launched. For the first few years, I accepted invitations when I received them. Some folks I knew, some I didn't. When I started consulting for LinkedIn last summer, I had somewhere between 200 and 300 connections. Most of them were people who had contacted me, not folks I had contacted.

One day, I used the import webmail contacts feature to pull in my contacts from Gmail. My number of connections quickly jumped by 100 and it's increased quite a bit since then (mostly due to co-workers from LinkedIn). Of the almost 500 connections I have, I believe there's a good 100-200 of them that are folks I don't know, have never had contact with, and will likely never benefit from being "connected" with.

I guess the main reason I'm planning on trimming my connections is to make my network higher quality. I admit I'm somewhat motivated by the 500+ icon, but it's also a genuine feeling that there's quite a few folks I won't benefit from being connected to. I'm not a LION after all. I believe my LinkedIn network should resemble my real-world network.

What's your opinion? Should I have folks in my network that know me, but I don't know them?

Posted in The Web at Jun 01 2008, 06:40:59 PM MDT 17 Comments

LinkedIn Groups

LinkedIn This afternoon, I noticed there's a LinkedIn "GlassFish" group now available and it reminded me of a couple things:

  • LinkedIn currently doesn't have a way to search for groups, but Jason Bailes has setup a LinkedIn Groups Search with Google Custom Search. Thanks Jason!
  • I created a Apache Software Foundation group on LinkedIn a few months ago. If you're a committer or member, you're more than welcome to join the group.

LinkedIn Groups don't provide a whole lot of functionality at this point, but I've heard there's big things in store for them. Chances are they'll be very valuable in the future.

Posted in The Web at May 20 2008, 02:16:18 PM MDT 6 Comments

Happy Cinco de Linko!

LinkedIn Logo Today is packed full of celebrations and traveling for me. First of all, it's Cinco de Mayo, which is always a good excuse for a margarita. Secondly, I'm heading to Mountain View to assist my co-workers in celebrating Cinco de Linko. After that, I'm pitching in a LinkedIn softball game trying to beat the #1 team in our league. Then I'll be heading up to the festivities of JavaOne. It's likely I won't be "networking" until late night. I'll be twittering all week if want to know where the good parties are. ;-)

Update: I just learned how to find out when you first joined LinkedIn. Click on "Account & Settings" at the top of any LinkedIn page. On that page, in the upper-right corner in grey text, you should see "User since: " and the date you joined. Interestingly enough, I joined May 27, 2003 - just 22 days after the launch.

Posted in General at May 05 2008, 08:40:46 AM MDT Add a Comment

The LinkedIn Journey Continues

As you might know, I've spent the last several months working for one of the coolest clients ever: LinkedIn. They hired me back in July 2007 and I was impressed on day one. I was originally hired to help them evaluate open source Java web frameworks and try to determine if moving from their proprietary one to an open source one would help improve developer productivity.

After looking at all the options, I recommended we look at Struts 2 and Spring MVC - primarily because they seemed to be the best frameworks for a LinkedIn-type of application. Another Engineer and I prototyped with Struts 2 for about 6 weeks and came up with a prototype that worked quite well. While our mission was successful, we found a couple issues with Struts 2 and standard JSP that might actually hurt developer productivity more than it helped.

Following this project, I worked on the New Homepage Team, which is now visible to everyone that logs onto LinkedIn. My role was minimal, but it was still a very fun project to work on. You know those widgets in the right panel? I did the initial UI and backend integration for those. All the business logic, Ajax/JavaScript, CSS, and optimization was done by other folks on the team. Shortly after this project went live in November, I started prototyping again with Spring MVC + JSP.

The reason I was asked to prototype with Spring MVC was because they were using Spring on the backend, Spring MVC in a couple other projects, and a new project was being kicked off that used Grails. Rather than add another framework (Struts 2) to the mix, they wanted to see if they could suppress any further framework proliferation.

After a month of prototyping with Spring MVC + JSP, my results weren't as good as Struts 2. With Struts 2, I was able to use OGNL to do all the things their current JSP implementation allows them to do (call methods with arguments, use statics in EL, etc.). With standard JSP, a lot of this wasn't possible. If it was - it required writing lots of tag libraries and made it more cumbersome for developers to do certain things. At the end of that project, I determined that using FreeMarker might solve these problems. I also determined that neither Struts 2 nor Spring MVC would solve the ultimate problem of developer productivity. Neither framework would allow developers to go from make-a-change-and-deploy, wait-3-minutes-to-see-change-in-browser to make-a-change, save and wait-15-seconds-to-see-change-in-browser.

I recommended that this be the ultimate goal - to get rid of the deployment cycle and to allow minimal turnaround when deploying modified classes. After that problem was solved, it's true that moving to an open source web framework would likely provide an easier-to-remember API. However, the problem with moving to a new web framework would be that everything used to construct the existing site would suddenly become legacy code.

In the end, we concluded that the best solution might be to enhance the existing framework to be more like the available open source options. This would allow existing applications to keep using their code -- and if we enhance properly -- new applications can use a simpler, less verbose API and a templating framework that's easier to understand. We can make LinkedIn's version of JSP more like standard JSP while allowing its powerful EL to remain. We can add support for JSP Tag Libraries and Tag Files.

One of the benefits of moving to an open source web framework is there's a community, documentation and books that describe the best (or most common) ways to solve problems with the framework. LinkedIn has this, but it's all in code and no one seems to have a high-level of confidence that the way that they did it is the "best" way. Developers communicate well, but all the knowledge is stuck in their heads and inboxes - there's no way for new developers to search this knowledge and figure it out on their own without asking somebody.

By adopting an open source web framework, it's possible to solve part of this problem, but I think it's still going to exist - where a few engineers know how to use the framework really well (for the specific application) and the rest don't. We determined that regardless of open source vs. proprietary framework, what was needed was a set of developers that acted as authorities on how to develop web applications at LinkedIn. A UI Frameworks Team if you will. This would be their only job and they would never get pulled from this to work on projects or complete tasks related to LinkedIn's products. Some developers mentioned that they'd been asking for this for years, and some folks had even been hired for this. However, the formulation of this group has never happened and it's obvious (now more than ever) that it'd be awesome to have them.

The UI Frameworks Team
At the end of 6 months, it seemed my work was done at LinkedIn. I liked the idea of a UI Frameworks Team and recommended they start it with the authors of the existing web framework. They agreed this was a good idea. A few days later, I was pulled into the CTO's office and he offered me the job. He offered me the challenge of building this team and told me I could do it remotely (from Denver) and hire my own people to help me with it. I gulped as I realized I'd just been offered the opportunity of a lifetime. I knew that while this might not be the best option for LinkedIn, it certainly was an excellent opportunity for me. I said I'd think about it.

In the meantime, I was given a project which you might've read about. They asked me to migrate a Rails application to Grails and try to determine if they really needed both frameworks. I spent 2 weeks coming up to speed on both and flew to Mountain View to deliver my conclusion. Here's an excerpt from an internal blog post I wrote.

As far as I know, Rails has been used at LinkedIn for well over 6 months and Grails has been used for a similar duration. Both projects that've used these technologies have enjoyed extreme success. Both projects have been fun for the developers working on them and both have improved the technologies/frameworks they're using.

Here's an interesting quote about the Rails application:

Another app you might want to look at is BumperSticker, our facebook app. Interestingly we heard through joyent that DHH (the creator of Rails) told them that BumperSticker is the biggest rails app in the world (in terms of page views) - we are closing in on 1 billion monthly page views and we have 1 million unique users per day (about 10 million installs on FB). It's a little trickier to setup in a dev environment since you need to be running on FB, but the code itself is pretty interesting since we've iterated on it a bunch of times and are making extensive use of third party libraries such as memcached.

This quote loosely translates to "We have some Rails Ninjas on staff and we've been quite successful in developing with it and making it scale".

Both platforms have allowed developers to iterate quickly and turbo-charge their productivity.

My Conclusion: Allow Both

Why?

If you have talented developers that can whip out kick-ass code with either platform, pay them and pay them well. Passion is the most important part of any job. If developers are passionate about the application they're developing and the language they're using (notice language is secondary) - they can do great things.

I know this probably isn't the answer you wanted to hear, but it's what I believe. I think both frameworks are very similar. I believe the knowledge you gain from learning one framework is transferable to the other. A lot of the things I learned about Rails worked with Grails. Ruby's syntax is similar to Groovy's.

There's a natural synergy between these two frameworks. The hard part is figuring out when to use which one.

The application that I was asked to port from Rails to Grails? The one that was launched last week - LinkedIn Mobile.

After doing this research, I stepped up to the plate and accepted the offer to start a UI Frameworks Team and recruited some kick-ass Java Developers I know to be the founding members. Last week, I flew out to Mountain View to do some kickoff meetings and start getting the infrastructure in place so we can document, support and release code like a well-oiled open source project. There's nothing saying we won't use an open source web framework as the underlying engine, but I think this should be an excellent chance to see the power of open source governance and development style in a corporate environment.

Director of Engineering, Core Experience
I should mention one last thing. If you're an experienced Java Developer/Architect with a passion and deep knowledge of UI development (JavaScript, CSS, HTML), we've got a Director of Engineering, Core Experience position with your name on it. I might even get to interview you if you apply for this job. Furthermore, whoever gets hired will likely work very closely with my team. What's not to like about that!? ;-)

Posted in Java at Mar 06 2008, 08:00:49 AM MST 19 Comments

What's the Java Job Market like in Denver?

I recently received an e-mail from someone asking me a number of questions about Denver's Java Job Market. He's moving from Seattle to Denver and asked me the questions below. Since Denver is one of the best places to live on Earth, I figured some other folks might like to hear my answers.

-------------------------------------

For senior architect types, is the market strong?
I believe it is. I haven't looked for a local gig in quite some time, but when I did back in June - there was lots of opportunities.

Any good employers you could recommend?
Not really, I've done contracting for the most part for the last 11 years. I've always enjoyed smaller companies. The best place to find Java jobs is by subscribing to the Denver JUG Jobs mailing list. There's jobs posted several times per week (both full time and contract).

Any companies to avoid?
Not that I know of.

For senior types, what type of salaries or hourly rates should I expect to find?
I think you'll be lucky to make over $100K as a full-time employee. You can certainly work your way to 110-120K after a couple years, but I think it's tough to hire into that. I'd expect 90+. As a contractor, you can expect $60-70/hour. There's definitely opportunities to get 90-100/hour, but they're hard to find because you have to eliminate the middle-man (recruiters).

Are Colorado Springs or Boulder good options for looking for jobs?
Boulder is definitely hopping. Colorado Springs - not so much.

Are contract positions good in Denver?
I've always liked contract positions.

Any recruiters that would be good talk to?
Lauren Ford is a good resource I've worked with in the past. You can tell her I sent you if you send her an e-mail.

Anything else you'd recommend?
If you can, get a gig downtown. Baseball Season starts in April and downtown has a buzz about it that's very enjoyable. Either that or Golden so you can be close to Mountain Biking.

-------------------------------------

One thing I forgot to mention in my reply is how valuable LinkedIn has become when searching for jobs. I've always believed being well connected is the key to career success and LinkedIn allows you to use the power of network very easily. You may think I'm biased because I work there - but how do you think I got the job there in the first place? ;-)

Posted in Java at Feb 22 2008, 09:59:22 PM MST 2 Comments

Google Calendar Sync for BlackBerry

Google Sync A couple of days ago, I said the Network Updates feature on LinkedIn's New Homepage is kinda boring. I still agree with this, but I think the new LinkedIn News provides some real value. Today my homepage had a link to Google Calendar Sync for BlackBerry. This is something I've been looking for for quite some time.

If you have a BlackBerry, you can install it from http://m.google.com/sync. I use Spanning Sync to allow me to synch my Google Calendar in iCal and it works awesome. Having a sync to my BlackBerry was the missing part that I really wanted - and now I have it. Thanks LinkedIn! (and Google of course)

As far as LinkedIn's New Homepage, I think the biggest improvement would be to add Atom/RSS Feeds so I could get all my homepage updates (news, network updates and widget updates) in NetNewsWire. I asked about this last week and they said this should be coming in Q1 2008.

Posted in The Web at Dec 12 2007, 01:41:49 PM MST 1 Comment