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.
You searched this site for "play". 220 entries found.

You can also try this same search on Google.

Back from Vegas

This weekend was one of my smoothest returns from Vegas in my life. It probably helped that Julie joined me there on Friday and we flew back together on Saturday. My BOF on Friday night was very well received and I heard a lot of positive comments about it afterwards. What do you expect when you give people free beer. ;-)

After the BOF, the Virtuas Crew had a kick-ass dinner at BOA Steakhouse in Caesar's. Before we were done, a college buddy of mine arrived in Vegas, so Julie and I met him at Harrah's for some blackjack and craps. We had an fun night of gambling with my buddy, who started with $5K at the first blackjack table. Apparently, Julie brought him luck and he ended up winning a few grand by the time the night was over. We had breakfast and walked back to Caesar's as the sun was coming up. We saw Gier and Hani catching cabs as we were walking in. 5 hours later, we'd had a good night's sleep and headed to the airport. We got sidetracked at Emeril's for lunch and enjoyed some good laughs with a couple friends before leaving.

When we got home last night, both kids had just fallen asleep. Of course, we wanted to wake them up, but also realized that sleeping children is quite a blessing. They were tickled to death when they woke up this morning and we were home. Today was a great day, and a big reason why it was so easy to transition from Vegas to Denver. The kids and I let Julie sleep in a little and took a stroller ride to the local bagel shop (a mere 3 blocks away) for a couple hours. It was a windy walk and we arrived home motivated to do some kite-flying at the park. We had fun at the park and it was super cute watching Abbie fly her first kite. After that, we headed to Dave & Buster's for lunch. Abbie never let me sit down because she wanted to play games the whole time. 2 hours later, we were on our way back home.

The day ended with Jack and I running errands. I needed to buy a new laptop backpack since mine got shredded in the wash a couple of weeks ago. We headed to Gart Sports, where I shopped and Jack stabbed stuff with a tent stake he found. He was like a hunter on the loose, crouching, jumping and yelling at stuff throughout the corner of the store we were in. It's a good thing no one else was around.

I ended up with the only backpack that could fit my laptop, which seems quite strange. I've been to the Apple Store, REI and Gart Sports and I've found the laptop backpack situation is abysmal. A couple of years ago, the selection was quite good. Oh well, I only paid $35 and I'll probably look for one online this week. The ideal backpack would have a built-in camelback and laptop holder (since I use it primarily when commuting on my bike).

After Garts, we headed to the Apple Store in Cherry Creek. I had to buy a new power cord for my MacBook Pro. I left mine in Vegas, possibly at the BOF. The Apple Store is pretty close to the "breakfast playground" - so I had to let Jack play in it. 15 minutes of jumping on eggs, waffles, climbing on bananas and sliding down bacon made Jack a very happy camper.

It's great to be home. AFAIK, I'm not travelling for a couple weeks, possibly more than a month. My next big trip is to The Ajax Experience and JavaOne in May. This week is supposed to be in the 60s, so I'm looking forward to a nice week of Colorado spring weather. With any luck, I'll get a signification amount done on both AppFuse and Spring Live this week. It might take a couple of late nights to make it happen, but I feel pretty motivated right now.

Posted in General at Mar 26 2006, 10:06:32 PM MST 1 Comment

[TSSJS] Apache Geronimo Prime Time with Jeff Genender

I'm sitting in Jeff's talk now, getting ready to listen to him ramble on about Geronimo. The room is about half full, and it's one of the smaller rooms. However, people are still streaming in, and it's the furthest room from the main conference area.

Jeff started his presentation with a little "Open Source Arcade" fun. The cartoon depicted a pac-man game with JBoss and Geronimo and resulted in a loud applause from the audience. This talk is going to cover Geronimo's architecture, how to use it, how to configure it, what it doesn't have and address common concerns.

Geronimo is a conglomeration of best-of-breed open source projects. Rather than reinventing the wheel, Geronimo embraces and reuses other open source projects: Axis, MX4J, ServiceMix, Spring, ActiveMQ, Jetty, Tomcat, Derby, Tranql, Apache Directory Server and OpenEJB. There's many others, but these are the headliners.

Geronimo is a carpet roll. Just like a carpet, it allows you to roll-your-own application server. Rather than using all the pieces of J2EE, you can just pick the ones you need? Currently, Geronimo ships with a collection of pre-configured assemblies: j2ee-tomcat-server, j2ee-jetty-server, minimal-tomcat-server and web-jms-tomcat-server. The last two will be available in the 1.1 release. The nickname for minimal-tomcat-server is "Little G".

Why another J2EE application server? Because J2EE is now a commodity. You used to have to spend a lot of money for J2EE servers. Now open source projects have commodotize J2EE and flattened the landscape. Also, the other application servers are LGPL and Geronimo is Apache Licensed, which is much more friendly to businesses.

Geronimo isn't just an application server, but also a top-level apache project with a healthy and active community. There are many other components coming out of this project, including:

  • The Geronimo API/Kernel/Assemblies/App Server
  • GBuild - Open Source Testing
  • DevTools - Eclipse Plugin for Geronimo Application Development with the Web Tools Platform (WTP)
  • J2EE Specifications - open source versions, eliminating the jta.jar problem you get with Maven. In my experience, most of these work, but Geronimo's javamail implementation doesn't work last time I tested it.
  • Home for OpenEJB, ActiveMQ, ServiceMix, Yoko (Corba) and XBean - all stand-alone sub-projects.

The Kernel of Geronimo *is* what is known as Geronimo. It controls the component (GBean) Lifecycle. A GBean is the Glue, the Wrapper, a Plugin to the Kernel. It conforms to JSR-77, the J2EE Management Specification and controls lifecycle, running states and naming conventions. The GBean architecture allows for simple development - you just need to implement the GBeanLifecycle, declare the GBean in a Plan (IoC) and deploy it. Plugging in 3rd party components is easy - for example Apache Directory and Quartz. Jeff wrote an article showing how to do this.

Jeff is now walking through the directory structure, which is pretty standard:

bin
config-store
deploy
docs
lib
repository (similar to Maven 1's structure)
schema
var

If you're familiar with Tomcat, Geronimo's "bin" directory is very similar. There's startup.sh/.bat, geronimo.sh and you can also use java -jar ./server.jar to start the server. Apparently, many of the scripts were copied from the Tomcat project.

Interestingly enough, my MacBook Pro's battery has been *much* more efficient today. I've been running for about 2.5 hours and the battery says it still has over an hour left. I believe this is largely because I've had my airport turned off most of the day.

Geronimo's Web Console is one of the nicer looking consoles I've seen for application servers. The user accounts for this are set in $GERONIMO_HOME/var/security/users.properties. It was donated by Abock (sp?) and I believe it's built on Pluto. For deploying applications, you can use the web console, drop WARs/EARs into the deployer directory or use the deployer tool (deployer.sh). When using the deployer tool, you'll need to have a plan file.

A plan file is an XML document (external or internal depending on nature of plan file). It's a descriptor to extend your application (setup JNDI DataSources, etc.) and similar to jboss-web.xml and weblogic.xml. Embedded examples: geronimo-application.xml, geronimo-web.xml, geronimo-ra.xml. For external plan files, you can use any name for the file. This file describes the GBean's attributes and references, as well as its dependencies. There are many different types of plans to describe information: web, application, resource adapters, security, naming references, EJB, schemas (in $GERONIMO_HOME/schemas directory).

The $GERONIMO_HOME/var/config/config.xml is Geronimo's central configuration file and allows you to override default values, as well as configure (or disable) GBeans. However, you can use the web console to configure everything in this file - and often it's much easier.

Now Jeff is going to do a demo of deploying and configuring Roller on Geronimo. This should be good, especially since he expects Murphy's Law, "if something can go wrong, it will", to come into play. He's showing us the plan file and how he had to hide a few classes, to prevent Geronimo's classes from conflicting. Jeff tried to show us how Geronimo allows you to download JDBC Drivers from w/in the console. Doh! We're in a conference room without an internet connection. Jeff had a backup plan and was able to successfully create a connection pool. After creating a security realm, he deployed roller.war and it all worked.

What Geronimo doesn't have? It lacks full clustering with respect to EJB/JNDI/Distributed cache. It *does* have full clustering with session replication and fail-over for the Tomcat web component, which fits 90% of clustering use cases. Uses Tomcat Clustering GBeans. Also, it can't run with Java 5 (only with 1.4.2) b/c the Corba component doesn't work with Java 5.

Now Jeff is doing Q&A, so I decided to try out my connecting to the Net via Bluetooth. It's actually pretty fast, GMail is surprisingly fast. From Bandwidth Speed Test, here are my results:

Communications: 87.1 kilobits per second
Storage: 10.6 kilobytes per second
1MB file download: 1.6 minutes
Subjective rating: Slow

Posted in Java at Mar 24 2006, 01:39:01 PM MST

Sun's Guerilla Cannibal Team

James Governor:

... Sun would do well to build a new team tasked with putting pressure on its own software portfolio. This disruptive influence would ideally eschew technologies associated with the Java Enterprise System. Instead it would concentrate on other issues such as establishing a business model for the Roller blogging platform, or working out a non-virtual machine story for scripting languages. Doing cool things with Rome and Atom. Focusing on mashups, Web 2.0, Read/Write and programmableweb and new ways of getting things done. Oh yeah - AJAX.
...
So who is on the A-Team, in my view?

  • Hal Stern - Hal is a playful, but could play the role of Corporate Guy on the guerilla team. As a Sun Services representative he can bring some very useful resources to the table. Many of the new approaches in web 2.0 require hosting. That's a potential services play. Note that IBM Global Services doesn't like hosting easy software that doesn't require a lot of expensive customisation.
  • Simon Phipps - Simon is currently Sun's chief open source officer. Perhaps counterintuitively, as the rest of the industry begins to realise that Sun isn't "out out get" OSS, his role may become less, rather than more, important. A successful open source strategy requires less top down management of issues. So why not free up Simon to do what he does best. Contrarian Evangelism.
  • Tim Bray - developers respect Tim almost without reservation (although his championing of ATOM has left some people scratching their heads). He even thinks of himself as the honourable opposition. Needs to be on the team because he has a visceral dislike of space architecture and WS-I.
  • Dave Johnson - the developer behind Roller. He just gets the new new thing, and he builds stuff, rather than talking about it.
  • Matt Raible - doesn't work for Sun, but works well with Dave. And RedMonk just likes him...

It's not every day you get listed with a line-up like that! Like Simon Phipps commented - where should I send my resume? Looks like I owe the RedMonk guys a beer or 6. ;-)

Posted in Java at Mar 01 2006, 05:45:33 PM MST 4 Comments

MacBook Pro and Wireless

The only major issue I've had so far with my MacBook Pro is wireless connectivity. It works fine at my office, works great at Starbucks, but not at home. My router is a Netgear WGT624.

The Netgear works flawlessly with my Windows XP Desktop (HP Pavilion 1250n) and PowerBook G4. It works with no password, 40-bit WEP and 128-bit WEP. But not with the MacBook Pro. Is there something special I have to set on my router for it to work with the MacBook Pro?

I posted this question on the Apple Discussion forums yesterday (which appear to be powered by Jive Forums). The response? Crickets. Oh well, I think I'll just leave my MacBook at the office and ignore this issue for now.

Update: Looks like Apple is aware of many issues with the MacBook Pro. Hat tip to Jeff for the article.

Posted in Mac OS X at Feb 27 2006, 09:46:39 AM MST 73 Comments

Weekend Update

Yikes! I can't believe it's been a whole week since I last blogged. Actually, with my workload it's not that surprising. Don't let anyone ever tell you that working for an open source consulting and support company is easy. When we started, we dreamed of working a couple of weeks a month, and working on open source the rest of the time. Business has really started to pick up in 2006, so that dream is quickly fading. Regardless, this week was a good one.

I managed to get Equinox upgraded to Tapestry 4.0 and WebWork 2.2. Both of these releases are much nicer than their predecessors and I plan to do a write-up next week. I especially dig how WebWork 2.2 allows you to do a popup calendar with less code than both JSF or Tapestry. It really is a kick-ass web framework and only getting better.

Virtuas Other than that, I had some fun with Maven 2 - converting all the Spring Fundamentals labs to use it. The invalid-POM situation continues to be atrocious and shows no sign of improving soon. I really like the idea of the Jetty 6 Maven Plugin, but unfortunately, it doesn't seem to play nice with SiteMesh. Lastly, I had some fun getting JOTM to work on Tomcat 5.5.x. All in all, I learned a lot this week, just didn't have much time to write about it.

AppFuseIn AppFuse News, Mika Göckel wrote tutorial on integrating XFire with AppFuse. Mika also authored a tutorial on AppFuse + Axis. He obviously knows his way around AppFuse - so we nominated and accepted him as a committer. Welcome aboard Mika! Finally, Brian Topping has converted a version of AppFuse to Maven 2. With any luck, AppFuse will be an archetype that you can install from Maven someday.

I'm flying out to San Francisco for a 1-day seminar next week and my MacBook Pro couldn't arrive any sooner (12 days and counting).

Posted in Java at Feb 11 2006, 06:22:03 PM MST 5 Comments

Does JPOX suck?

There's an ongoing effort in Roller to migrate from Hibernate to JDO. Mostly, this is due to Apache's silly rule about no L/GPL dependencies - even if they're downloaded separately. I think this is a valiant effort, especially if JDO performs as well as Hibernate.

However, it was interesting to see the following message on the mailing list this morning:

i have experience using jdo, and jpox in particular, with a commercial product. first, you probably already know this, but jdo is dead (from a spec perspective anyway). it will be phased out in favor of ejb3 persistence. maybe that transition will be graceful, maybe not. i see jpox has ejb3 on their roadmap, but not sure what that means.

second, jpox has really, very atrocious performance issues. the jpox folks admit that performance is a low priority, as they are an ri. if someone wants the details on this, i can dig them up.

Interestingly enough, this message is from a Sun employee. It's interesting to hear someone from Sun say that "jdo is dead". What are you thoughts? Should Roller change their persistence backend just to satisfy Apache?

Of course, now you'll tell me your favorite Apache-licensed persistence framework and why it's worked so well for you. The real question is - are you willing to re-write Roller's backend using it? ;-)

Posted in Java at Jan 25 2006, 10:57:56 AM MST 31 Comments

The future of the DisplayTag Library

From the displaytag-devel mailing list:

I am sorry if I am asking a stupid question but is there any activity going on in the project? There are no new releases for almost a year... Neither are there any news on the project page. In our project we have modified the 1.0 version a bit and would like to share these changes with the community.

Fabrizio's response:

See http://displaytag.sourceforge.net now ;)

the website was frozen to the last 1.0 release, also due an extensive refactoring to the build/documentation system (migration to maven 2, splitting of optional modules and examples, ...) but activity on the project never stopped.

1.1 is now near, and I switched the default homepage to the 1.1 documentation. Warning: it's not released yet, but nightly builds are up.

The biggest feature of 1.1 has to be the ability to do external sorting and paging.

If you're looking for Ajax support in the displaytag, look no further than AjaxTags. I haven't been able to get ajax:displayTag working in my projects because I'm using a newer version of Prototype. However, it looks like the next version of AjaxTags supports the latest version of Prototype.

In addition to AjaxTags, you can also use AjaxAnywhere. Here's the code you'll need to do that (after adding AjaxAnywhere to your project):

<aa:zone name="userTable">

<display:table name="users" class="list" requestURI="" id="userList" export="true" 
    excludedParams="*" pagesize="5" sort="list">
    <display:column property="id" sort="true" href="editUser.html"
        paramId="id" paramProperty="id" titleKey="user.id"/>
    <display:column property="firstName" sort="true" titleKey="user.firstName"/>
    <display:column property="lastName" sort="true" titleKey="user.lastName"/>
    <display:column titleKey="user.birthday" sort="true" sortProperty="birthday">
        <fmt:formatDate value="${userList.birthday}" pattern="${datePattern}"/>
    </display:column>
</display:table>

</aa:zone>

<script type="text/javascript">
    ajaxAnywhere.getZonesToReaload = function() { return "userTable" }
    ajaxAnywhere.onAfterResponseProcessing = function() { replaceLinks() }
    function replaceLinks() {
        // replace all the links in <thead> with onclick's that call AjaxAnywhere
        var sortLinks = $('userList').getElementsByTagName('thead')[0]
                                     .getElementsByTagName('a');
        ajaxifyLinks(sortLinks);
        if (document.getElementsByClassName('pagelinks').length > 0) {
            var pagelinks = document.getElementsByClassName('pagelinks')[0]
                                    .getElementsByTagName('a');
            ajaxifyLinks(pagelinks);
        }
    }
    function ajaxifyLinks(links) {
        for (i=0; i < links.length; i++) {
            links[i].onclick = function() {
                ajaxAnywhere.getAJAX(this.href); 
                return false;
            }
        }
    }
    replaceLinks();
</script>

Libraries used in above code: AjaxAnywhere 1.0.2, DisplayTag 1.0 and Prototype 1.4.0_pre4. You can also see a demo online or download the code.

Posted in Java at Dec 29 2005, 10:46:56 AM MST 26 Comments

Christmas Break

Pulled the Engine! The past week has been great. Not only did I stay off the computer for most of the week, but I had a ton of fun with my Mom, Dad, sister, Julie and the kids. My parents flew in last Tuesday, and that marked the beginning of my Christmas Break. On Wednesday and Thursday, my dad and I pulled the engine on the Bus. Ironically, the first day we couldn't figure out how to get it out, but w/in 5 minutes of consulting How To Keep your Volkswagen Alive, we had the solution. The bus is a bit different from a bug - there's only 3 bolts (instead of 4) and one of them is on the inside of the engine compartment. Daddy's Bus should be ready for the shop sometime in January.

The weekend was awesome - complete with mimosas on Christmas morning while unwrapping presents. Abbie and Jack are at a terribly cute age - and it was a blast to see their eyes light up when opening presents. It was tough to get them to open the next present b/c they were so enthralled with the one they just opened. After all was said and done, Abbie is now riding a "big girl" bike and we have a trampoline in our back yard. That should work out nicely when we get our first surprise snow storm. ;-) Fortunately, the weather has been gorgeous (almost 70!) for the past week.

Yesterday was an epic powder-day at Copper Mountain. My sister and I headed up in the morning and skied (she snowboarded) all day in 10" of fresh powder. We're heading up again this weekend for the New Year (Breckenridge this time) and it's supposed to snow in the hills for the next 3 days. Yeeeeeeeeaaaaaa hhhhhhhhhaaaaaaawwww!! Two days at my client this week and then back up to the wonderful pow-pow. Next week, the contract with my client finishes up and I get to return to our office in downtown Denver. I'm pumped because that means I get to start riding my bike to work again. I took it in for a tuneup today and should get it back in a couple days.

2006 is going to be a good year. I get about 2-3 e-mails a week about mentoring and consulting and it looks like I'll be quite busy. I hope to squeeze in some time for Spring Live and AppFuse in January and hope to have AppFuse 1.9 released in the next few weeks. My Dad's 60th birthday is in mid-January, so my family is heading to Cancun for a week. Should be a good time for sure. :-D

Cancun

Posted in General at Dec 28 2005, 08:55:26 PM MST 3 Comments

RE: Oracle donates ADF Faces to Apache MyFaces

I read the news initially on the AMIS Technology blog, which points to the original news-breaker on the IT-eye Weblog. This is huge for the JSF community IMO. The main compelling feature behind component-based frameworks is components. Without components, there's not much point in them.

By christmas a website and mailing list will be available for the incubator project. You will also be able to download the source code. By New Year a subversion repository should be available with the source code. And the intention is to move out of incubator by JavaOne 2006, which I think is in May.

So why is Oracle doing this? Well it's obvious that Java needs to have a good component based framework to compete with .NET. And Oracle believes that JSF can be this Framework, but a good implementation is needed, which is what ADF Faces provides.

What does ADF Faces, or better Apache Faces Cherokee contain? More than 100 components, an Html AJAX renderkit (but it doesn't use HttpXmlRequest, but iframes), a dialog framework, personalization, skinning, and a lot more.

I wonder if Oracle has a solution for the "everything is a post" problem? ;-)

JSF is cool, and easy to be productive in, but so is Tapestry, WebWork and Spring MVC. I find it somewhat ironic that the Struts committers turned down Shale as Struts 2.0, but they voted in WebWork.

I think component-based frameworks might be the way of the future. However, after playing with OpenLaszlo for the past few weeks - I can't help but think that this is what component-based frameworks should be. Many components, easy to use, and the output is a rich-client out-of-the-box. In addition to the Flash output they have now, I've heard rumblings that OpenLaszlo may support other outputs in the future (i.e. XHTML/Ajax).

It's pretty cool to see continued excitement and innovation in Java. Competition is good, and will only make each of these frameworks stronger and easier to use.

Posted in Java at Dec 12 2005, 02:26:45 PM MST 8 Comments

Lots of Java activity in San Francisco

The last 24 hours here in San Francisco have been quite interesting. Yesterday, I had lunch with a group of AppFuse users. They work for a company a few blocks from my training class. Chipotle was on the way, so I grabbed a burrito on my route and had a great time talking with them about the various open source tools that AppFuse uses, as well as what's on the roadmap. Thanks for the cookies John!

After class yesterday, I had a Guinness with an AppFuse user that recently put a high-volume site into production. He said it's held up surprisingly well and AppFuse greatly simplified his ability to deliver the project on time. In fact, most of the features the client wanted were already built-in.

Last night was another hotbed for Java talk - from web frameworks to TSSS in Vegas. Matt Filios and I had dinner and drinks with Mike "wanna play poker" Cannon-Brookes, Crazy Bob, Patrick Linskey, Geoff Hendrey (I hope I got the name right) and a number of other guys whose names escape me. It was Mike's birthday, so I left early to avoid the chaos that Crazy Bob and Mike always seem to stir up.

To top it all off, this morning I ran into a couple of folks that read this blog. I was getting breakfast at a local bagel shop - when a guy came up to me and asked "Is your name Matt"? I answered yes, and we talked briefly about my trip out here. It was kinda wierd being recognized, but kinda cool at the same time. It was good to meet you Nadeem.

I'm heading home from this wonderfully warm place tonight, but I'm sure I'll be back in the near future.

Posted in Java at Nov 18 2005, 12:00:57 PM MST 5 Comments