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

You can also try this same search on Google.

What a great weekend!

This past weekend was a blast. My entire family (Mom, Dad and Sister) flew in on Thursday night for my 30th on Friday. In reality, they were here to see Abbie more than me, but I can accept that - she's a lot of fun. Friday night Julie arranged a "White Trash BBQ". My sister, dad and I had a good time getting ready for it with a quick trip to "Value Village". Lots of folks showed up that night and everyone had a good time - especially the 5 kids running around like chickens with their heads cut off.

Saturday we went and saw I, Robot at a theater downtown. The theater was frickin huge - wider than any I'd ever seen. Even wider than an IMAX. Good flick, wicked theater. That night we went and saw the Rockies play the SF Giants. Rockies lost, but Abbie loves baseball games and we had club-level seats, so we couldn't complain.

Yesterday we went up to Idaho Springs and did a white-water raft trip. It started raining before we even got on the water, which made it even better. It was my Dad, Mom, Kalin (sister) and I + 2 other folks and the guide. Right before the first class 4, we slammed into a rock and it knocked Kalin out of the boat. She swam downstream and got into another boat. Shortly after that, we hit our first class 4 and didn't have enough weight on the high side. You guessed it - the boat flipped. Nobody got hurt and it made our trip all the better. We've all been on several rafting trips, but it was the first time we'd flipped. Good memories, good times, great family - I wish they lived closer. Thanks y'all!

Posted in General at Jul 19 2004, 09:25:59 PM MDT 2 Comments

My Job for the next couple of weeks

I can't help but brag about how cool my current gig is with Open Logic. My task for the next few weeks is to write a simple sample app - and create alternative MVC implementations. Targeted frameworks include Struts, Spring MVC, WebWork, Tapestry and JSF. Not only am I working from home, but they dropped off an AMD XP 2800 to work with. Installing Fedora Core 2 with VMWare is what I'm up to this morning. Working with open source all day - it doesn't get much better than this.

Posted in Java at Jul 09 2004, 08:36:52 AM MDT 11 Comments

Working too much - what about office hours?

I currently work too much. I can feel it in my shoulders and I know it because I hardly ever exercise. Even worse, I know it because Julie tells me so and Abbie doesn't get to see enough of her Daddy. In addition to working all week, I work early mornings on the weekends, but that tends to spill into late mornings. I also try to cram in a couple hours during Abbie's nap - which usually spills over past when she gets up. During the week, I'll start at 4 or 5, and I'll need to get something done, so I'll work until 7. After Abbie goes to bed, I often hop on the computer again and work until midnight or later. It's easy getting 8 hours in a day or 40 hours in a week for a client. It's hard doing AppFuse support and writing Spring Live on the side. I virtually ignore all the e-mail on the other open source projects I'm on - it's the only way to keep my sanity.

This madness is likely to continue. The only way to reasonably handle my e-mail (> 1000 day - after spam filters) is to check it every couple of hours. That can't continue, so I'm going to have to change my e-mail address. Sorry folks, it's the easiest solution. I'll decide my new one after the holiday weekend, but matt AT raibledesigns.com will start going to /dev/null.

Julie and I've been talking today and we're trying to come up with more solutions to me working so much - especially since a fair amount of it doesn't pay. We're thinking the best solution is Office Hours. When I work from home, I work too much. When I go into a client's office, I tend to end my day when I get home. So, from now on, I'm going to try and only work from 8 to 5 MDT (-7 GMT). Actually, Julie says she doesn't care if I work before 8, I just need to be done at 5 to play with Abbie and join Julie when she goes to bed.

To help accomplish this, I'm going to start closing the door to my office and using the backdoor to leave and come back during the day. Hopefully it'll be like an office away from home. I'll likely be working on Spring Live in the mornings from 4-8 and doing some AppFuse support as well. My best bet is probably e-mail/blogging from 4-5:30 and writing from 5:30-8 (at the local bagel shop). I'll let you know how it goes. I'd also like to hear other ideas from you "I work too much" guys/gals out there - I know there's lots of you.

Posted in General at Jul 02 2004, 03:57:09 PM MDT 8 Comments

JDNC: Simplifying Java Desktop Client Construction

Next session: Java Desktop Network Components. I'm trying to attend sessions that I don't know much about. J2EE ones are likely to bore me. I just noticed that Amy Fowler is one of the presenters - and I've heard she's hot - so I'm sitting up close (5th row).

JDNC is designed to provide shortcults for building common archetypal applications. Better clients with less effort. Less (maybe no) coding. Gentle learning curve and incremental development model. Assumes network or web data source. Geared towards Java application and XML developers. Sun is going to do a lot of work to get Tools vendors to include JDNC. It seems similar to AppFuse, but I'm guessing it's more of an API than a project template. Their goals seem to be the same - get something to show your manager in a matter of hours, not weeks.

Swing Extensions API: targeted for Swing developers, extended components with more features, networked data connectivity and data-binding. I wonder how JDNC compares to Spring's RCP project? Amy mentions JGoodies and how they'd like to include it as part of JDNC.

Feature Highlights:

JXTable: Asynchronous data loading. Sorting, filtering and highlighting.
JTreeTable: Hiearchical-columnar view (outline)
JForm: Data-binding and Validation (as you type). Sounds a lot like what Keith is working on for Spring.
Damn - missed one...

JDNC API: Very high-level components. Built on the foundations of SpringSwing/JFCX. Solution focused and conforms to the JavaBeans Architecture Spec - BeanInfos provided for tool friendliness. Encapsulates complex operations (threading, network connectivity, data modeling). Provides usability features.

Components: JNTable, JNTree, JNTreeTable, JNForm, JNEditor. These components wrap, rather than extend lower level component. Expose simpler API and provide more defaults (i.e. scrolling).

Now we're looking at the Bug Editor Demo (WebStart). The features they're showing are similar to what folks want in the display tag - sorting, filtering, column visibility. It's very cool to see that this is now a built-in feature of Swing. I wonder how hard it is to use JDNC and JGoodies in project? Is it just a matter of adding a couple of JARs to your classpath? It'd be cool to add J2ME and Swing clients to AppFuse. I think the hardest part would be emulating the current (container-managed) security model that exists in the webapp clients.

Sorry, zoned out on e-mail for a while there.

Amy is now showing code and how to create a form for the detail view. It's interesting that the data-binding, including exceptions, is similar to Spring.

JDNC Markup Language: Looks very cool. You can actually develop a Swing app with XML!

Important thing to remember: JDNC simplifies rich client development on all levels. Overall I think JDNC is a very cool open-source project - it's nice to see Sun trying to make developer's lives easier. For more information on developing Swing apps, checkout javadesktop.org.

Posted in JavaOne at Jun 29 2004, 04:09:19 PM MDT 14 Comments

Being an independent sucks

Richard Monson-Haefel seems to hate being an independent consultant. Personally, I love it - but I've only been doing it for 3 years. He's been independent for 5. I hope when my 5 year anniversary rolls around - I'm not looking for a full-time gig. But you never know. One of the things that I see a lot of independent consultants doing wrong is traveling. Traveling sucks - plain and simple. Being away from your family in the name of a higher hourly rate seems stupid. Then again, I've been fortunate enough to always find work in Denver - half of it where I'm working from home. I do realize that a lot of independents don't live in a tech-rich town like Denver, but why don't you move! Actually, the only reason we're still in Denver over West Palm or San Diego is because the contracts keep flowing. If they dry up - yeah, we'll probably be moving closer to the ocean. But if we move and I'm traveling for gigs - what's the point? I guess Julie's happiness (she loves the ocean) plays a part, eh? ;-)

I traveled a lot in March and April, but I don't plan on doing too many more stints like that. I guess June-July might be a bit rough with JavaOne and OsCon, but after that - I hope to stay put. We'll see - let's hope I get lucky enough to continue finding local contracts.

Posted in General at May 06 2004, 05:39:01 PM MDT 4 Comments

NYC Seminar: Flex and WebWork

Christophe talked about Flex, it's architecture and built the data grid for the Flex pet store in a matter of minutes. After seeing this presentation, I definitely think Flex is wicked cool. It's too bad that it's price tag is $6K/CPU. However, Vic is probably right - this stuff should be the next generation of webapps. I'd order the developer CD but it sounds like something I'd play around with and never use. It looks so easy to use that I'm willing to bet I can wait until a client demands it - then learn it in a matter of days - or even hours. I did end up asking Christophe about unit testing these Flash UIs. They're working on it, but nothing exists yet.

Now Jason is up - the last session of the day.

What is WebWork 2.0?

  • The 2nd generation of WebWork
  • A web MVC Framework
  • a wrapper on top of a generic Command Pattern implementation (XWork)
  • A small but powerful tag library

XWork is where Jason spends most of his time. XWork is a generic command pattern implementation. Actions are command objects in XWork. XWork adds advanced features.

  • Interceptors: setting parameters, workflow, etc.
  • Results: includes one for chaing to another Action
  • Simple IoC container
  • Powerful expressional language (OGNL)
  • Flexible type conversion
  • Metadata driven validation framework

What does WebWork add?

  • Adapter for Http request/response
  • Integration of Session / Application Scopes
  • ServletDispatcher translates HTTP Requests into Action execution
  • Request parameters passed to Action Results
  • Supported view technologies: Velocity, Freemarker, XSLT Jasper Reports, JSP

Action is a simple interface with an execute method. ActionSupport is a useful base class.

I gotta say - one of my favorite things about WebWork is the fact that all its UI tags are built using Velocity. This means that you (the developer) have full control over what HTML is generated from the JSP tags.

Interceptors have been nicknamed "Domain AOP." Interceptors allow custom code into the call stack and much of the WebWork "magic" happens with Interceptors. WebWork has a number of built-in interceptors:

Setting Parameters

  • ParameterInterceptor
  • StaticParameterInterceptor
  • ChainingInterceptor
  • ConversionErrorInterceptor

Defining Workflow

  • DefaultWorkflowInterceptor
  • PrepareInterceptor
  • ServletConfigInterceptor

Preventing duplicate posts

  • 2 types of token interceptors

Interceptors can be grouped into named Interceptor Stacks (i.e. defaultStack, validationWorkflowStack).

2 types of actions possible: Model-Driven vs. Field Driven (merging of Action and ActionForm). ModelDriven Interface - public Object getModel(). Porperties of the model will be available as simple properties - "user.name" becomes "name". To use, you have to add ModelInterceptor to your WW config file.

OGNL (Object Graph Navigation Language). An expression and binding language for getting and setting properties of Java objects. Normally the same expression is used for getters and setters.

XWork Validation Framework

  • XML based. Validation file in the same package as the class. Defines one field validator and the error messages to add if it fails.
  • Bundled validators - supports required, range, email, url and OGNL Expressions (very powerful).
  • JavaScript support recently added for simple validators - nothing for expressions though (tough to do).

Doh! Jason's demo didn't work. I did a lot of demos in my preso so I couldn't help but say "shoulda used a Mac!" These PowerBooks might be a bit slow for development, but they're definitely nice for this traveling salesman thing.

This is where you get your money's worth: All the speakers and attendees comparing frameworks, talking about their problems and trying to figure out a better way.

Posted in Java at Apr 03 2004, 04:13:54 PM MST 8 Comments