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". 218 entries found.

You can also try this same search on Google.

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

Editing Java webapps instead of edit/deploy/reload

For the last few years, I've always done Java webapp development the hard way. Yeah, I'm the guy that makes Dion cringe (although I'm pretty sure he's not referring directly to me). I edit a class/jsp/xml file and run "ant deploy reload". Then I wait a few seconds for my context to reload in Tomcat. Luckily, I do mostly test-first development, so it's rare that I have to open my browser to test stuff. However, with the power of CSS and Ajax, manual testing in a browser is becoming more and more useful (although Selenium may solve that).

I've long resisted the power of the IDE, b/c I've always trusted Ant and felt confortable with the command line. However, I'm ready for a change. I'm ready to start developing Equinox and AppFuse-based applications using the edit/save/auto-reload cycle. So how do I get started? Where's the instructions for setting up my IDEs to work this way?

I prefer to use Eclipse and IDEA for development - so I'll likely try to get this working in both. If I get it working, I'll make sure and provide good documentation so others can do the same. I'm also willing to make any changes in project structure to make this happen; modifying build.xml (or pom.xml) to accomodate shouldn't be too difficult.

Posted in Java at Nov 07 2005, 09:16:03 AM MST 23 Comments

[CSS] The Zen of Open (Observations of a New Bear) by Simon Phipps

Simon used to work for IBM, on a video conferencing product. In 1994, Simon would fly all over the world to tell everyone about it. The last 10 years have brought many changes. When Simon used to travel in 1994, he needed cash and travellers checks, airline tickets, telephone kiosks and sent mail through the regular ol' postal system. Fast forward to 2004, and we have ATM cards and a "global identity card" (a Visa card), e-tickets, GSM mobile phones and e-mail. We're now in the participation age.

If we were massively connected:

Security would no longer concern only boundaries. Before the participation age, security was a matter of "how do I keep you out". Now it's "who are you can you prove that". It's all about digital identity now.

Software would have nowhere and everyone to run. Service orientation is how software is build today. Simon believes it'll happen through REST-based services, rather than by employing web services.

Software pricing should not track ephemera [definition]. We're now switching to value-based pricing.

Markets would become conversations (from The Cluetrain Manifesto). This idea led Simon to start blogs.sun.com.

Closed-room development would be insufficient. The old way was lock smart people in a room and slide pizza under the door - and then charge others admission fees to watch them work. Software that's developed out in the open gets better and better b/c you can get all the experts working on it. This is called Open Source. The initial objective of Open Source was to undermine companies like Microsoft and Sun - but now it's the best way to write software in a connected society.

Open Source in a Nutshell: a community of developers, sharing a code commons, create "wealth" from the commons, enriching the commons in the process. The "craft guilds" have been rediscovered in a sense. Open source is not communism, but more like Connected Capitalism.

There are a number of different open source licenses:

  • Class A: "Unrestricted", create any work, no restrictions on licensing. BSD-style license, with the gold standard being the Apache License.
  • Class B: "File-based", files derived from commons must use license B, files added may use any license. Mozilla-style, CDDL v1.
  • Class C: "Project-based", all files in project must use license C if any files use commons files, GPL.

According to Simon, the best license is the one that gives the most freedom to the most people. Class A licenses promote freedom to innovate, but do not protect the commons. Class C licenses promote constant growth of the commons but limit the freedom of the developer to use their own innovation however they want. Class B licenses balance both freedoms protecting and enriching the commons but leaving innovators free to use their work in any commons.

The overlooked corners of open source: it's not licenses, there's no more limelight needed for those. However, there is a problem now - and that's license proliferation. There's too many licenses, we need fewer so it's easier to choose. We need better motivational models: how do we leave room for the motivations of diverse contributors?

The overlooked corner of open source is Governance. Apache is a good example of how Governance should be done. Bad governance is the primary vector for disease in open source. If the only way to contribute back is to go through one company that chooses committers, the project is likely doomed.

Software Patents happen, get over it. "Parallel Filing" means Corporations own patents on pretty much anything they touch. If you don't, your competitor will. The nature of US law means all must play. Using patents defensively is a routine element of corporation-to-corporation interaction. Software patents are a zone on the continuum - even their detractors have to deal with them. Until world trade is reformed, software patents happen.

So how do you protect yourself?

  • Patent Grants: Research specific patents and give a broad usage grant to open source use.
  • Compulsory licensing: Blanket grant of patents, restricted to licensed code. This is the strategy that Sun has used with OpenSolaris.
  • Non-Assert Covenants: Covenant not to assert rights against bona fides community.

Simon believes all 3 approaches are needed to protect ourselves from software patents. He believes that #2 and #3 should be mandatory for standards bodies and open source projects.

Summary: The next phase of F/L/OSS is upon us. The Virtuous Cycle of open source needs a health check. We need to reduce license proliferation by dealing with its causes. We need to leave room for the motivations of all contributors. Don't sacrifice the freedom of developers for an ideology. Governance best practice needs an advocate.

F/L/OSS Alone is not enough for freedom - we need standards. Open standards set end users free to choose. Development and deployment are not the same thing. Standard Formats + Open Source = Freedom.

Software Patents demand multiple defenses. We need to lobby the governing bodies of our countries and put a stop to patents.

Posted in Java at Oct 27 2005, 10:19:04 AM MDT 2 Comments