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.

[OSCON 2008] An Introduction to Ruby Web Frameworks by Ryan Carmelo Briones

Ryan is a Server Monkey / Code Sumari for Edgecase, LLC in Columbus, Ohio. A framework allows you to create re-usable code. Frameworks allow you to use encapsulation. Frameworks tend to be domain specific. For example, Rails works really for CRUD application, but not for others (i.e. Twitter).

Why Ruby?
Ruby has been Object Oriented since day 1. Ruby promotes Beautiful Code that's easy to read and maintain. Yes, MRI has performance issues. Matz has said "I'm a language designer" and has turned over the VM to others for Ruby 1.9. Another thing that might keep folks from using Ruby or its web frameworks is the libraries available. This is understandable, but it's being solved by alternative implementations. This includes YARV (the official 1.9 implementation), JRuby, IronRuby (not ready for production) and MagLev.

Rack
A framework that provides a minimal API for connecting web services and web frameworks. As a web application developer, this framework allows us to know about web services, but not worry about the details of talking to it. Below is a very simple Rack application.

class HelloWorld
  def call(env)
    [200, {"Content-Type" => "text/plain"}, ["Hello World!"]]
  end
end

Rack allows the handlers do the work and not worry about the web server abstraction. Handlers exist for WEBrick, LightSpeed, Mongrel, Fast-CGI and many others. As an application developer, it allows you to choose different architectures (threaded, evented, etc.). Ryan is talking about Rack first because it's used in all the other Ruby web frameworks.

Ruby on Rails
Rails is 4 years old now and was written by DHH when he was a contractor at 37Signals. Rails doesn't define and grand new ideas, everything has been done before (MVC, code generation, etc.). What Rails did is package everything in a unique way that makes it very easy to use. Rails has influenced a lot of what has come from web frameworks in the last few years. One of Rails' nicest feature is code generation. Ryan showed part of DHH's Create a weblog in 15 minutes video to demonstrate code generation. He noted that the minute he showed was picked because David said "Whoops!" and "Look at all the things I'm not doing". Rails popularized Convention over Configuration using naming conventions and load paths. While this is definitely a cool feature, I think most web frameworks have adopted CoC by now. Maybe not JSF, but who wants to use JSF w/o a framework on top of it anyway?

One warning about Rails: "The Golden Path" can get in your way. Rails is very Opinionated Software and that's how Rails works. As long as you follow that, you should be very productivity. If you decide to go off the Rails (i.e. namespaces), it can be difficult.

Rails uses a DSL in its models (i.e. has_many, has_one for relationships) and in the Rails router. It allows you to very simply map a URL to a controller/method. In addition to DSLs, Rails has first-class testing and its generators create stub tests for you.

Bad things about Rails: too much magic, moves to fast (too many releases).

Merb
Merb was originally developed by Ezra Zygmuntowicz to run alongside a Rails app to handle file uploads. It grew from there and became it's own beast. Merb is very much about using only what you need. It has "package repos" that allow you to add additional features. For example, merb-core doesn't contain an ORM framework, just a web framework. Merb also allows you to choose your ORM. It's standardized on Rack, so it can run on just about any web server. It also included "deferred actions" that allow you to send some URLs to evented web servers and others to threaded web servers. Merb eschews the "magic" that Rails has. It tries to stay away from making it's code a "monument to personal cleverness". Simple code scales better and runs faster.

One of the downers to Merb is that it's flexibility allows you to get down to the nitty gritty. However, it can be less productive than Rails because of its flexibility. Another downside is its documentation and examples are sparse. Merb is not recommended if you're just getting into Ruby.

Camping
Camping is a micro framework (< 4K) developed by why the lucky stiff. It's designed to develop small applications. You can do everything in one file and create prototypes very quickly. It uses Markaby to write HTML code in a builder-style fashion.

Since a Camping application is all in one file, it can be difficult to develop large applications. The solution is to write small apps and mount them in the same URL space. The only issue with small apps sharing the same space is they have to use the same database. One downside to Camping is there is no standard test framework. Mosquito was developed as a solution, but doesn't seem to be maintained.

Sinatra
Simple. Fast. Effective. It's designed to allow creating REST applications with minimal dependencies. Similar to Camping, it has one file for the entire application. Unlike Camping, Sinatra doesn't follow MVC conventions, so it may be difficult to port a Sinatra application to another framework.

Posted in Open Source at Jul 23 2008, 12:33:08 PM MDT 1 Comment

[OSCON 2008] The Keynote

This morning, I woke up awful early to polish my presentation, walked to the train station and rode Amtrak from Salem to Portland. The commute was great: there's nothing better than traveling with power and an EVDO card + the option to get a cup of coffee. After getting off the train, riding The Max and walking to the Oregon Convention Center, I'm now sitting in the Keynote at OSCON. Here's my notes from this session.

10 years ago, leaders of the free software movement got together and tried to figure out a way to help people understand how to get access to software freedom. As they talked, there was a gradual meeting of minds. Finally, one person suggested "Open Source". A few weeks later, there was a larger meeting of people and they heard about this term. It was an idea that changed the idea of software freedom and what free software was. We've come along way since then. Last year, we heard about open source and and it trying to find identity in corporations. This year, we're hearing about corporations trying to find their identity in open source.

The official tag for this conference is: oscon08.

Tim O'Reilly
While this is the 10th Anniversary of OSCON, it's also the 12th Anniversary of the O'Reilly Perl Conference (where it all started). Tim began his activism with Perl when it got on the web. He was thinking about the internet and the online world, from the beginning (when many others were coming from Linux). Open Source was almost named "SourceWare". Tim believes his biggest contribution is bringing Open Source and the Internet together.

"Keep your History" - make the things you put online accessible for years to come.

When OSCON first started, it was all about the OS Wars. Tim is showing a shirt with the famous Ghandi quote on it about "First they laugh at you..." and it has a Linux logo on the bottom. It's seems ironic that Microsoft is now one of the major sponsors of this conference (my thoughts, not Tim's).

Open Source Technology in the Enterprise. IT jobs are 2.3% of all jobs posted, according to the Bureau of Labor Statistics. Technology oriented companies (e.g., Google, Yahoo, Sun) make heavy use of Open Source (40% of all jobs posted by Y!). Open source is growing faster in non-tech companies. Of the open source technologies in the enterprise, the highest share of jobs is Linux (19%), followed by Perl, JavaScript and PHP. As far as the fastest growing, Django and Alfresco are at the top.

Three Big Challenges and Opportunities:

  1. Cloud Computing
  2. The (Open) Programmable Web
  3. Open Mobile

Cloud Computing: Amazon Web Services, Google App Engine, The Engine Yard, etc.

Jesse Vincent: "Web 2.0 is Sharecropping"

Danny O'Brien: "If we want people to have the same degree of user autonomy as we’ve come to expect from the world, we may have to sit down and code alternatives to Google Docs, Twitter, and EC3 that can live with us oon the edge, not be run by third parties."

Basically, Tim is saying the that cloud computing is great, but it doesn't fit well with open source. This is primarily because if you build on a cloud, you have to be careful not to get locked into that platform.

Data is the "Intel Inside".

The Web is the Internet Operating System - the subsystems will be data subsystems.

Locking in data: iTunes and Amazon's Kindle. On the other hand you have Yahoo's BOSS, which is doing the opposite.

We Need the Open Web Platform! Tomorrow's Keynote, "Supporting the Open Web" will talk much more about this.

The Mobile Web has caused the "browser wars" to resurface. However, big companies like Google are putting a stake in the ground and saying "We believe in open". Net Neutrality and The Open Handset Alliance are two of Google's smartest strategic decisions. They understand how much they depend on the open ecosystem.

When we look at our success in the last 10 years, we can be really excited. But what's really impressive is how much we (as an open source community) is how we've risen to new challenges and challenged the openness of new platforms and industries.

Christine Peterson
Christine is the President of the the Foresight Institute. Christine was the person who suggested the term "open source" at the meeting referenced above. Unfortunately, my first battery died as Christine was coming on stage, so I missed writing down the first 10 minutes of her 15 minute talk. She's talking about the openness vs. privacy of keeping US citizens safe. She started her talk apologizing for the ethnocentricity of her talk and moved to quickly note that the e-voting controversy wouldn't have happened if open source software was used.

"Who would have guessed that the folks with the pocket protectors would turn out to be the ones with the right stuff?" -- LA Times

Founding Geeks: Thomas Jefferson (mechanical geek) and Thomas Edison (electricity geek).

You can't just complain about things. The fear is real. We can't just complain about how DC is solving problems, we have to step up and solve them ourselves.

"No Secret Software for Public Sensing Data."

Dirk Hohndel
Dirk is the Chief Linux and Open Source Technologist at Intel. He's talking about Moblin: Linux for Next Generation Mobile Internet. This sounds like something that has been talked about a million times before. Why is it interesting today? Because we're at an open source conference and open source is what makes it interesting.

When people look at Intel, they don't think of open source. However, Intel is very involved in open source and uses an open source methodology internally for their development process. They also have one of the largest grids powered by open source (~100K Linux servers).

Moblin is about the internet, about mobility, about flexibility and extensibility. What's happening today is the ideas of 10 years ago have become affordable to produce (for manufacturers) and purchase (for consumers). There's lots of proprietary ways to develop the mobile web, but it needs to be open in order to prevent lock-in (to a platform) and encourage innovation.

A year ago, Intel started Moblin. Initially, there wasn't a lot of interest from open source developers. The majority of interest came from companies, particularly hardware vendors. To Dirk, this was disappointing as he really wanted a community to guide the project and make choices about the platform. There's lots of Open Mobile/Linux efforts out there, but there aren't any that are truly open - with access to the source code and everything else you'd expect from an open source project. Intel was hoping to announce a cutting-edge infrastructure for Moblin here at OSCON, but they're a few weeks behind. They hope to be ready for soon.

"The hope that I have is the community takes this from us. Show us where to go. Show us where not to go. Help us get this right."

Tim O'Reilly interviews Monty Widenius and Brian Aker
Tim asks how it's going 6 months in. Monty responds that he's very happy they didn't have to go public and that Sun is still trying to figure out what they bought. One of the things difficulties they've seen about encouraging Sun's engineers to be involved in open source is some are hesitant about open sourcing their code. The biggest problem is engineers are afraid of the feedback/scrutiny that their code will receive.

MySQL was very unique as a company in that it was a virtual company, with most engineers working out of their homes. MySQL has become an enabling force for moving Sun to a similar model.

Monty is working on Maria (new storage engine) and Brian is working on Drizzle (a slimmer version of MySQL). Drizzle was inspired by a conversation when Brian was talking to Rackspace's CTO.

"Do less and then create extensibility mechanisms." -- Tim O'Reilly

Posted in Open Source at Jul 23 2008, 11:29:21 AM MDT Add a Comment

GWT and REST

I've posted two message to the GWT Google Group in the last couple of days. However, new member messages are moderated and neither has shown up yet. I'm reposting my questions here in hopes of getting some answers.

Is there a way to easily use a REST backend with GWT? I tried GWT-REST. It works, but it seems to be centered towards Rails (I'm using Grails) and it suffers from the SOP issue.

JSONRequest looks promising for cross-domain support, but I can't get it to work either. The provided examples work, but not my simple hello world that returns:

{"response":"Hello World!"}

Also, the example implementation only has GET support, not PUT, DELETE or POST. I can post my REST backend on the public internet if anyone is interested in seeing the issues I'm having.

Thanks in advance for any advice.

Posted in Java at Jul 21 2008, 10:31:58 AM MDT 14 Comments

OSCON: Where are the good parties at?

Portland, Oregon It seemed to work pretty well for JavaOne, so let's try it for OSCON...

This week, the best Open Source Conference will take place in the beautiful city of Portland, Oregon. I went to high school just south of Portland (Salem) for a couple years and my parents still live there. Portland is one of my favorite cities, my parents are two of my favorite people and OSCON is one of my favorite conferences. Seems like an excellent combination for a really fun week.

I'll be flying to Portland with Jack and Abbie on Tuesday. Wednesday I'll be at the show speaking; Thursday I'll be there listening and likely blogging. I hope to catch a happy hour on at least one of those nights. Friday, my family and I will be heading to the Oregon Brew Fest followed by a night at The Kennedy School.

So when and where are the good parties at during OSCON 2008? Here's what I know about so far - I'll add to this list as comments start flowing in:

As far as finding me at the show, it's probably easiest to follow me on Twitter.

Update: A reader e-mailed me about http://upcoming.yahoo.com/tag/oscon. This seems to be an excellent source of OSCON party information. I've updated the above list with the ones that look good on Wednesday and Thursday.

Posted in Open Source at Jul 20 2008, 12:28:39 PM MDT 2 Comments

The 416

The Few, The Proud, The Pradipta 416

Posted in The Web at Jul 18 2008, 02:10:37 PM MDT 1 Comment

LinkedIn Tech Talk: Kevin Brown on Shindig

Last Thursday, Kevin Brown visited LinkedIn's Mountain View office to do a presentation on Shindig, an OpenSocial Reference Implementation. Below are my notes from his talk.

In September 2007, Google started thinking about Social APIs. Google Gadgets would be better with access to Social Data ... but that's just Google. It was recognized that this is something that many others would like access to. OpenSocial was announced in November 2007. It's an open standard for developer platforms that has a strong emphasis on "social" data. It's based on gadgets which is now covered by The Open Social Foundation.

In November, many Googlers started working on a Google Code project based on Java and iGoogle. However, there was too much proprietary code. In December, Brian McCallister of Ning created an ASF Proposal for Shindig. It was a rough port of iGoogle but with Ning's PHP code. This turned out to be a great starting point. It immediately got interest from Google, Hi5, MySpace and others. While most committers are still from Google, there are 12 developers that work on it full time and they're adding 2 committers each month. Shindig is a Java/PHP implementation of OpenSocial. Open Campfire is an Apache-licensed .NET implementation that hopes to eventually merge into Shindig.

Read more on the LinkedIn Blog »

Posted in Java at Jul 17 2008, 07:04:24 AM MDT Add a Comment

Happy Birthday to Me

Today I turned one year older. It's strange to look back and see that I didn't blog about my birthday in 2007 or 2006, but I did in all previous years. Reflecting back on things, my birthday celebrations have gotten better over the years (we do a golf tournament every year now), but the working-on-my-birthday thing has gotten worse.

From my first birthday post in 2003:

Ever since I worked at eDeploy.com, where they gave us our birthday's off, I've continued to take the day off.

As a contractor, it's pretty easy to say "I'm not working on Wednesday, it's my birthday". Last year was the beginning of the downturn - when I started working on my birthday. I'd just started working at LinkedIn the week before. My birthday was on the Tuesday of the 2nd week I was on-site. I found it hard to say, "I need Tuesday" off, so I worked through it. This year, as an employee, I worked through it again. I don't recommend it.

If you can, take your birthday off. I'm going to see what I can do at LinkedIn to make it a company policy that employees get their birthday off. Wish me luck. ;-)

Posted in General at Jul 16 2008, 08:57:50 PM MDT 6 Comments

My iPhone Review

iPhone Today I picked up a 16GB iPhone at the Park Meadows Apple Store. As far as I can tell, I got it with a stroke of luck. Last night, I was searching Apple's "Concierge" application to see which store (there's 4 in the region now) would look at my Mac Pro (averaging 4 GSOD per day). Most had a 24-hour lead time at the Genius Bar, but Park Meadows had an 8AM available.

This morning, I hauled the box into the mall and doubted the store would be open at such an early hour. Apparently, the store isn't really "open", but the Genius Bar is and they have a camp for kids from 8-10. After submitting my machine to the Genius Bar, I asked a guy about iPhones. He said they got a shipment the night before and they had 16GB White iPhones in stock.

LinkedIn has an Employee Discount for AT&T, so I asked the sales guy if I could use that. He said I needed to buy the phone from AT&T if I wanted to use any sort of "business" discount. I called the downtown AT&T store (they angrily told me they were out-of-stock) and walked by the one in Park Meadows Mall (didn't open until 10). I then rationalized that buying an iPhone from an AT&T store could take weeks. After an hour of contemplating, I decided to go ahead and purchase the white iPhone, even though I wanted black and I wouldn't get the employee discount. My reasoning:

  • Employee Discount is 8% which amounts to about $8/month. My last T-Mobile bill for my Blackberry Pearl was over $200. Going from $200 to under $100 makes $8 irrelevant.
  • When I bought my Escalade, I liked a black one more. When I bought my last iPod (May), I wanted a white one, but ended up with black (no white in stock). It seems fitting that I'd get a white one when I'd want black. My previous black vs. white purchases haven't bothered me post-purchase.
  • These things are hard to find - I should just buy the damn thing.

So yes, I thought about the decision way too much, but managed to talk myself into it. It's a good thing too - they were sold out by the time the store opened at 10. I bought mine at 9:30.

So what do I think of it? I like it, but not for the phone or fanciness of it.

Pros: The main reason I like it is for its iTunes Remote application. With an Airport Express + Bose System at home, I've been wanting this for quite some time. I would've paid $200 for this alone.

Cons: I love the Pandora app, but was disappointed to find it didn't work with my car's iPod connector. I was hoping for Pandora-in-the-car, but no dice. The iPod feature of the iPhone works, but charging via my car's iPod connector doesn't. The enabling-of-charging feature may be software related since there's a "charging won't work" message that pops up when I plug it in.

So 12 hours after purchasing the device, I'm happy with it, but not thrilled. However, it seems like the kind of thing that grows on you and someday you wonder how you lived without it. Should be a fun ride.

Update 24 hours later: I really like that the iPhone has a speaker. I've always wanted a radio in my bedroom at night and now I have one. On the downside, the battery life is abysmal: it was fully charged at 8AM this morning and completely dead by 8PM tonight.

Posted in Mac OS X at Jul 15 2008, 10:07:26 PM MDT 6 Comments

Bus Project Update

Ready to Go! This evening, Jeremy from MotorWorks Restorations stopped by and picked up the bus. It'll be in the shop for around 6 months. It's scheduled to be returned in January of next year with a straight body and a slick yellow and white paint job. The engine, interior and suspension will be up to me at that point.

It's hard to believe I bought it 4 years ago. With any luck, I'll have it completely restored sometime in 2010. You can read more about its history in The Bus category.

Posted in The Bus at Jul 07 2008, 10:06:55 PM MDT Add a Comment

Raible Road Trip #12 Vacation Report

Grand Tetons I'm happy to report that the kids and I made it home safely last night after a heckuva Road Trip. We were gone for a total of 8 days and we drove for 4 of those. Here's some stats from Snow White:

  • 43 Hours
  • 2248.3 Miles
  • 150.9 Gallons of Gas
  • 14.9 AVG MPG
  • 52 AVG MPH

Of course, these stats include day-to-day driving while in Montana.

Driving to Montana
We left early on Saturday morning, waking up at 4:30 and were on the road around 5. This was brutal considering I went to bed 4 hours earlier the night before. My Dad and I took turns driving and tried to listen to an audiobook (Spook Country) along the way. However, whenever one person wasn't driving, they fell asleep so the whole idea somewhat failed.

We arrived in Yellowstone around 5PM and checked into our campground. The ranger told me there were 5 grizzlies in the campsite and that we should pack up our food and put small pets in cars for the night. Of course, I couldn't wait to tell this to Abbie, who is always scared that bears will attack us when camping. I finally calmed her fears by telling her I wrestled a bear once when I was a kid and won pretty easily. After setting up camp, Abbie took a swim in the "freezing cold" Yellowstone Lake and we ate dinner and climbed into our tent shortly after.

This is freezing! Jack at Yellowstone Lake Jack and Baba

On Sunday, we woke up and made it out of our campsite by 7:30. We drove to Old Faithful, enjoyed an eruption and proceeded to have a nice breakfast at The Old Faithful Inn. After checking out some more geysers, we made it out of the park around 11. We stopped briefly in Bozeman to see an old friend, hit Clearwater Junction and Lucky's (for huckleberry milkshakes) around 6, and made it to The Cabin just before dark.

Gooey Geyser! Sunset Lake Living on the Edge

At The Cabin
The few days we spent at The Cabin and in the Swan Valley were a lot of fun. I got to drive the family Excavator with both kids on my lap. Jack was operating the bucket while Abbie was operating the swivel of the cab. I took my mountain bike, so I got to ride some old trails I used to ride all the time as a kid. Not only were there beautiful views on the trails, but I also got to experience quite a wreck that sent me head-first into some rocks and bushes. It was the first time I've wrecked in a while where I thought to myself "that was fast and hard enough to break some bones". Luckily, all I received were a number of scratches and bruises.

Hayah! View of the Swans from Rumble Creek Road The Missions from Cooney Tower

Swan Range from Cooney Tower The Back Road Bike Wreck on The Big Hill

On Thursday, we took my sister to the train station in Whitefish. We left early enough for my dad and I to get in some golfing at Meadow Lake Golf Course and the kids to hit Big Sky Waterslides. Apparently, they didn't have a height requirement because they were able to go on all the slides.

On the 4th, we finished Abbie's Princess float in the early morning, took a quick sauna and headed down to the Swan Valley Parade. We'd been talking about the parade and Abbie's float for several weeks, so I was kinda nervous that I might mess it up. Not only did everything go great, but there were several hundred folks that clapped when we drove by and commented on what a beautiful princess Abbie was.

Final Preparations The Parade Princess Condon Parade

After the parade and drinking some good ol' Busch Light from the "Beer Garden", we headed to Holland Lake for a swim and canoeing. We drove back home in time to play a game of horseshoes and get the fireworks setup for the evening. We had a good fireworks show (with yours truly in charge) and enjoyed lots of laughs with old friends.

New Horsehoe Pit The Cabin The Cabin

Mimi and Jack The Parents Funny Faces

The Drive Home
As usual, the drive home was the longest portion of the trip. The first day, we left the cabin around 11 and pulled into Billings around 5. The kids (and dog) did pretty good as we only needed to stop once. The shorter first day turned out to be a good idea since the kids like hotels so much. Yesterday, we left Billings around 9:30 and cruised along mightily until we hit the Colorado border. There, traffic came to a standstill and we suffered through stop-and-go the rest of the way home. After 9 hours, we pulled into my driveway, exhausted.

I don't believe we'll be driving next year. The Road Trip to The Cabin is something that should only be done every couple years. Snow White continues to be an awesome car. We towed a sawmill (on a trailer) to The Cabin and didn't even feel the load. With DVD screens in the back of both front-seats, it was an excellent road-trip vehicle for the kids. Also, it's smooth suspension made for an enjoyable experience for everyone (we drove Julie's Honda Odyssey one year and Abbie kept getting sick from the DVD screen bouncing). The more I drive it (esp. skiing, camping and on road trips), the happier I am with the purchase.

For more photos from the trip, please see Raible Road Trip #12 on Flickr.

Posted in General at Jul 07 2008, 06:32:43 PM MDT 1 Comment