Matt RaibleMatt Raible is a Web Developer and Java Champion. 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 "appfuse". 771 entries found.

You can also try this same search on Google.

AppFuse plans for the week

AppFuse Like most Java open source projects, I hope to release a new version of AppFuse this week before JavaOne. There's a couple reasons for this: 1) so I have the latest and greatest to demo during talks and 2) so the article I'm writing is up-to-date. Unfortunately, with both AppFuse and Equinox it's a bit difficult to make sure I'm using the latest and greatest for everything. This is because they're both very thin layers on top of their underlying dependencies.

I'm willing to bet that a few of these dependencies will have new releases this week, as developers scramble to get a bunch of stuff done before JavaOne. Here's my release predictions for this week:

  • Acegi Security 1.0
  • DWR 2.0
  • Hibernate 3.2
  • Spring 2.0

My current plan is to fix outstanding issues for 1.9.2 and then hold off to do the release until this weekend. Hopefully that gives each project enough time to pump out a release. If you happen to be involved with any of the projects that AppFuse depends on - and you're not planning on releasing before JavaOne, please let me know.

The 1.9.2 release of AppFuse will (hopefully) be the last one in the 1.x series. Work on 2.0 will begin towards the end of this month. See the roadmap for the cool stuff coming in 2.0.

As far as the CSS Design Contest, I'll announce the winners tomorrow. I also plan to fix this site in IE tonight and take another stab at making the header images and colors easier on the eyes.

Posted in Java at May 07 2006, 10:49:04 AM MDT 4 Comments

Studio7Designs

Andreas Viklund is the original designer of this site's layout. Last night he pointed out a cool new site that showcases another set of open source web design templates.

Aran and Pat, also known as open source template designers Nautica and snop, have launched a new and extremely pretty website: Studio7Designs.com. The site is announced as a "network of professional designers", and it will show off both open source website templates and stock photography. Pat is one of the designers whose work I truly admire (see the Lazy Days template to understand why) and Aran's Nautica-templates are great examples of the simple design style that I like, so the site is well worth a visit.

Like Andreas, I think their Lazy Days template is truly awesome. I wonder how hard it would be to port it to the CSS Framework?

lazy days

Posted in The Web at May 03 2006, 06:33:13 AM MDT 5 Comments

Integrating Google Maps, Mule and ActiveMQ with AppFuse

Stephen Pasco has written a nice tutorial on how to integrate Google Maps, Mule and ActiveMQ with AppFuse.

Here's the scenario: Upon opening a Google map client, within a web browser, the user clicks on the map creating points (Figure 1). With each point created, a message is immediately sent to the ESB containing the point's longitude and latitude. A second, remote client instantly receives the sent longitude and latitude coordinates and displays them on a separate Google map (Figure 2). [Read More »]

Good stuff - thanks for the writeup Stephen!

Posted in Java at May 02 2006, 07:35:13 PM MDT 2 Comments

Upgraded to Roller 2.2

I spent some time this afternoon and upgraded this site to the soon-to-be-released Roller 2.2 (release notes). Please let me know if you see any issues.

Upgrading Roller is the first step in preparing for tomorrow's CSS Reboot. I don't know if I'll have time to create a new theme and use it on this site, but I hope to give it a try. I'm on the plane for 4 hours tomorrow, so I should be get something done.

As part of the upgrade, I fixed search for this site. The problem was caused by using $dateFormatter when viewing search results. My guess is that variable is not in Velocity's context after searching.

Posted in Roller at Apr 29 2006, 06:26:02 PM MDT 4 Comments

CSS Framework Design Contest - only one week left!

It's time for another CSS Framework Design Contest Update. The contest will officially end this weekend (Sunday night), but hopefully people will continue to contribute designs after that. After the initial deadline passes, I'll send out a vote to the AppFuse CSS Mailing List. If you have a better idea of how to handle voting, I'm all ears. Maybe we should use JIRA?

I spent a few late nights last week converting some of Andreas Viklund's Templates to use the CSS Framework. All the ones I converted, along with many other contest entries, can be seen at http://css.appfuse.org/themes. For many of these, I've replaced the default forms.css with one that has CSS from Wufoo.com. If you'd like to include a similar form in your entry, just copy the <form>s from form.html into your own page.

I've also looked at incorporating the CSS Table Gallery, but found many of the designs to be pretty ugly. Nevertheless, most of them work with the displaytag, so I might include some of them in the future. In the meantime, if you want to see what they look like, go to css.appfuse.org/users.html (user/pass: mraible/tomcat). Change the "css" parameter in the URL to match a table's stylesheet, and you should see what it looks like.

To answer a few questions I received earlier today:

Does an entry have to contain all possibilities/layouts?

No. I've come to realize that it's easier to only accomodate one layout. If users really like your design, hopefully they'll morph it to a different layout sometime in the future. If you look at the Andreas themes I converted, they only have a main page and a form. They'll likely be enhanced in the future for form elements, calendars, tables, etc. - but that should be pretty easy (and I'm willing to do that work).

Am I "allowed" to overwrite some settings in the different layout CSS for different settings, depending on which layout css is used beside the layout according stuff? For example settings (appearance, design) for the main navigation and so on?

Yes. You can change any of the CSS files you like. The only thing that needs to remain constant is the HTML - and then only the ids and order of <div>s, etc. needs to be the same. The general idea we're hoping for is to put your "theme" in a directory and then refer to it dynamically as part of the showcase. We're in the process of enhancing the showcase site to use the same HTML pages for all themes.

Don't forget about the prizes: an iPod (60GB), an iPod (30GB) and a 2GB Nano. In addition, you could use your cool new design for the CSS Reboot.

Posted in The Web at Apr 25 2006, 05:18:18 PM MDT 3 Comments

CSS Framework Design Contest Update

Entries for the CSS Framework Design Contest are continuing to roll in. However, I don't know if the contest will finish at the end of this month. We've only received 5 submissions so far (1 being my own) and I'd like to get at least 10 good ones for folks to choose from.

My first attempt to show off the entries didn't do any justice to the submitted themes, so I've created a new showcase application. The new CSS Framework Themes application is available at http://css.appfuse.org/themes. It allows you to view the current submissions in the raw form that they were submitted. I've come to realize that a good design is tought to make flexible (where you can use all 6 layouts), so it's probably best to just have a single layout for each. Then again, juisefuse allows you to use all the layouts, so I guess it's up to each designer.

When I first started this contest, I envisioned people using the CSS Framework as a base, and overriding classes and styles in their own stylesheets. However, most of the entries contain modifications to the core CSS files - so it's probably best to allow free-form modifications of the CSS. Last night, I created my own entry based on Andreas Viklund's andreas01 theme. I did this to see what pain points there are in creating these themes. Although the experience wasn't too bad, I did find myself having to make one exception and break the "don't modify the HTML" rule. I had to move the top image out of the header div in order to get things positioned correctly. Oh well. I hope to convert some more of Andreas's themes this week. I also hope to incorporate some of the CSS from Wufoo's forms into these designs. After that, I'll start trying to figure out how these can fit into AppFuse and maintain their look and feel.

What's my pipe dream for css.appfuse.org? I'd like to make it possible for users to download and use these themes quickly and easily. Furthermore, it'd be pretty cool to develop an XSLT transformer that converts the main HTML page from each theme into decorators for AppFuse, Drupal and Roller. I don't know if this will be possible, but it certainly sounds cool.

Update: I added a new Deliciously Blue theme, which includes a form example based on CSS from Wufoo.com.

Update 2: I've converted three more of Andreas's themes: andreas03, andreas08 and andreas09. They're not pixel perfect, but they're pretty darn close. ;-) All of the themes in this contest (including the "showcase" application itself) are available in Subversion from the AppFuse CSS Project on java.net.

Posted in The Web at Apr 19 2006, 05:04:44 PM MDT 1 Comment

How do you determine a good MaxPermSize?

I know I'll probably get beat up for not knowing my JVM Turning parameters. I admit that I should know them better than I do. Hopefully this post will help us all understand them a bit better.

Ever since I upgraded appfuse.org to AppFuse 1.9.1, it's been experiencing OOM issues. They've been so bad that the site is lucky if it stays up for more than an hour. I've done a fair amount of performance testing on a single AppFuse application (and gotten very good numbers), so I was pretty puzzled by the whole situation.

To reproduce the problem, I downloaded all 5 demos to my machine and began profiling with JProfiler. Nothing stood out, but I was able to reproduce the problem by clicking through all the different applications. While testing, I had my JAVA_OPTS set to -Xms256M -Xmx384M.

After staring at JProfiler for hours, I gave up and sent my findings to the AppFuse mailing list. After going back and forth with several ideas, Sanjiv came up with the winner.

Did you try increasing the max perm size (-XX:MaxPermSize=256m)? Max Perm size is running out of memory and not necessarily the main memory. Class metadata stuff is placed in the perm memory (google for more details) and since we're using Spring, Hibernate and Tapestry which all use a lot of reflection, proxying etc, it's not surprising that max perm size is running out of memory.

Based on his advice, I added -XX:MaxPermSize=256m to my JAVA_OPTS, fired up JProfiler/Tomcat and began hammering my local instance with WAPT. 15 minutes later, with 20 simultaneous users, the heap and memory were humming along nicely with no issues. I made the change on appfuse.org and it's been up every since.

This experience has motivated me to start adding "-XX:MaxPermSize=256m" to all my JAVA_OPTS. Is this a good idea? If so, is 256m a good value to use? If not, what's the best way to determine (or guess) the proper value for this setting?

Posted in Java at Apr 19 2006, 09:54:14 AM MDT 21 Comments

The T2000 Arrives

I received my T2000 server from Sun yesterday, and now it sits in its original packaging in my basement. I may not even unwrap and install it. When I originally ordered the server, I heard you could blog about it and possibly win a free one. Since then I've heard different; there's a contest with many entering, and they're only giving away a couple of them. Because of this, I've somewhat lost my motivation to install the sucker. Partly because I know I'll have to send it back, and partly because it doesn't look that fast. Regardless, it's nice to have Jeff's setup instructions if I do decide to assemble/install it.

Right now, my schedule is packed full of client work - all the way until mid-June. So if I'm going to build this bad boy, it'll have to be as part of my "late night" schedule. Right now, that's booked with Spring Live, designs for the CSS Framework and AppFuse/Equinox development.

To further justify my lack of motivation, I don't think the T2000 will solve my OOM issues with CruiseControl and Ant. I've been talking with one of the Ant developers, and it appears to be caused by the <copy> task in Ant. With any luck, I'll find some time to setup CruiseControl and do some performance testing of web frameworks before the T2000 goes back in mid-June, but it doesn't look good right now.

Posted in Java at Apr 18 2006, 09:27:01 PM MDT 8 Comments

Tips for Productivity and Happiness at Work

Every so often, I get asked what my strategy is for "getting things done". This morning, I had a short session of mass productivity, and on my ride into work, got inspired to jot down a few tips productivity tips. Keep in mind that I grew up in the back woods of Montana with no electricity and I'm mostly Irish.

  • Write stuff down. The first and most important means to getting things done is to keep a todo list. I keep mine on Ta-da List and update it daily, if not hourly. My two most important lists are "When I have time" and "This Week". I regularly re-order "This Week" for the current day.
  • Quit reading e-mail and blogs. One of the ways I can tell I'm in uber-productive mode is my unread (or starred) mail piles up and I haven't read any blog posts (or blogged myself) in a couple days. I like GMail because I can easily star an e-mail after briefly skimming it. For some reason, flagging e-mail in Thunderbird or Mail.app doesn't work for me - I rarely go back and find those e-mails. With GMail, I'm always conscious I need to revisit starred messages.
  • Work on open source late at night, with a beer on your desk. While I do get the opportunity to work on open source at my day job, I still find that I'm most productive at night. Maybe this is because no one bugs me via e-mail or IM, or maybe it's just because the world is asleep. The strange thing is I often find myself motivated at 3 p.m. for my 11 p.m. workload. However, when I get to 11 p.m., I'm not motivated to work on anything. I've found that cracking open a beer at 11 when I start helps me focus and quit worrying about all the other computer-related tasks I need to do. Also, on beer #2 or 3, you'll start to forget what time it is and really start getting things done. NOTE: this isn't for rookies. If you're a lightweight and get hammered on two beers - just go to bed when you start coding with one eye shut. It helps to sleep in the next day after doing this. If you finish off a six-pack before going to bed, it's probably best not to check your code in - you're probably going to spend the next day fixing it anyway. Regardless, this is a great way to get started on a new feature because you're less concerned about the details and more concerned about the big picture. I've also found that "bug fixing juice" can be great for fixing bugs - it gives you a different perspective on the problem. I told you I was Irish didn't I? ;-)
  • Work disconnected. To further facilitate not checking e-mail or reading blogs, I've found that going to a coffee shop w/o connectivity is my most productive environment. They have liquid motivation in the form of coffee, and you can feed your brain with breakfast/lunch or some kind of snack. My most productive days are the ones where I show up at my local Einstein's (bagel shop) at 6 a.m., have two cups of coffee, and work with my headphones on. After the coffee and uber-productivity, I often have an awesome ride to work and barely notice the miles. NOTE: I've found that I'm more productive writing code late at night and authoring articles/books in the early morning.
  • Listen to music while you work. Some noise-cancelling headphones and your favorite music can do wonders for your productivity. Of course, earbuds work just as well - whatever makes the music sound good. Good music can really help you "get into the groove" of what you're working on, regardless of whether it's writing or coding.
  • Work long hours on Monday and Tuesday. This especially applies if you're a contractor. If you can only bill 40 hours per week, working 12-14 hours on Monday can get you an early-departure on Friday. Furthermore, by staying late early in the week, you'll get your productivity ball-rolling early. I've often heard the most productive work-day in a week is Wednesday.
  • Avoid meetings at all costs. Find a way to walk out of meetings that are unproductive, don't concern you, or spiral into two co-workers bitching at each other. While meetings in general are a waste of time, some are worse than others. Establish your policy of walking out early on and folks will respect you have stuff to do. Of course, if you aren't a noticeably productive individual, walking out of a meeting can be perceived as simply "not a team player", which isn't a good idea.
  • Sleep. While working late nights can be productive in the short term, doing it consecutively will burn you out quickly. Getting a good night's sleep can often lead to greater productivity because you're refreshed and ready to go.
  • Work on something you're passionate about. If you don't like what you're doing for a living, quit. Find a new job as soon as possible. It's not about the money, it's all about happiness. Of course, the best balance is both. It's unlikely you'll ever realize this until you have a job that sucks, but pays well.

To follow up on that last point, I think one of the most important catalysts for productivity is to be happy at your job. If you're not happy at work, it's unlikely you're going to be inspired to be a more efficient person. Furthermore, if you like what you do, it's not really "work" is it?

Here is some general advice I give to folks about jobs and careers. I realize that I'm biased here because I have a good job and I've been fairly successful in my career. However, I also grew up with virtually nothing, and learned all my computer skills on my own. Therefore, I believe that anyone can be successful (meaning: happy with that they do, and financially stable at the same time) if they put their mind to it.

  • If you're not happy at work, quit. I got into contracting early-on in my career (6 months out of college), so I got spoiled with good rates early on. It was also the late 90s, so you could easily switch jobs if you didn't like the one you were in. However, I've always had the policy that if you hate your job for more than 2 weeks, quit. It's just not worth it. Some people enjoy bitching about their jobs and complaining about their co-workers, so this doesn't apply to everyone. However, if you're truly miserable - quit. I've done this a couple times, and it's always led to better opportunities (even if I had to wait 3 months). Julie's done it once or twice and it's always worked out for the better. Once she even got a 20% raise by quitting her traveling-consultant gig with KPMG and going back to her old company, Qwest.
  • Always try to be a contractor before a full-time employee. This especially applies to younger folks who don't need the security of insurance for the family, stock plans, etc. Contractors typically make 50% more than full-time employees and tend to be excluded from company politics that might make the workplace difficult to deal with. While you won't get billable vacation time, you will get the freedom to take however much vacation you want - as long as you get your stuff done. The higher rates can generally make up for the unbillable time while on vacation. However, if you travel too much for fun (or conferences, etc.), it's likely your year-end salary will equal that of a full-time employee. If you make good money as a contractor, you'll also get the opportunity to start your own company (to save money on taxes). This can be a great learning experience. The biggest fear that folks have about "going independent" is they'll have a hard time finding their next gig. If you're productive and blog about what you're doing, this shouldn't be a problem. I haven't had an "interview" since 2002 and haven't updated my resume since then either. Networking at your local JUG and conferences is key.
  • Don't work at a company with a two-week vacation policy. I've never worked at a company with a two-week vacation policy, and I hope I never will. The two full-time gigs I've had in my career have had no vacation policy. This is usually only found in startups - but it generally amounts to "get your shit done, and you can take off all the time you want". My parents both work for the BLM (government agency) and they get 6 weeks off a year. Furthermore, they can earn "comp time" (more days off) by simply working overtime. If you have the ability to take time off whenever you want, it'll likely lead to you being more motivated to work long and hard - b/c you know when you finish that project, you're heading to Cancun for a week.
  • Don't travel if you have kids. If you're single, traveling for work is pretty cool. New places, new people to meet - and seeing the world can be very cool. If you have a spouse, it's likely your desire to travel will decrease, but it's still not that bad. If it helps your career, it's probably a good move. It also helps to save money since everything you do is generally expensible. When Julie and I first met, she traveled 100% and made $20K more per year b/c of it. When you have kids, everything changes and traveling sucks. You miss their first steps, and when they get to toddler-age, they'll want to go with you. Hearing your daughter say "Daddy, can I go with you?" can be heart wrenching when you're leaving on a Sunday afternoon to spend a week with people you've never met before.
  • Ask for more responsibility. If your job sucks, but the company is pretty cool - you may want to ask for a shift in responsibilities. I was once an HTML Developer at a .com. It sucked because we were constantly waiting on the Java Developers to fix bugs we found in their code. Finally, I got tired of waiting and asked my boss to show me how to fix the Java bugs. Granted, I wrote some pretty horrendous code at first, but my boss and co-workers helped a lot and w/in a year I was doing 80% of the Java Development.
  • Most things can be learned by reading. If you want to learn something new (for your current or next career), the best thing to do is read. The world's knowledge resides in books and you can learn a lot. Of course, the best way to retain that knowledge is by doing, but reading is a great first step.

Those are my tips, many of them off the top of my head. I may add more as time goes on - but hopefully this helps in the meantime. Please share yours if you have any.

Posted in General at Apr 14 2006, 11:24:28 AM MDT 55 Comments

Getting ready for the Sun Fire T2000 Server

T2000 Like Jeff, Bill and Bruce, I signed up for the free 60 day trial of the Sun Fire T2000 Server. Why? Because I heard you can get one for free if you blog about it enough. ;-) My plans are to setup continous integration environments for AppFuse and Roller using CruiseControl. I also hope to do some performance tests b/w Java persistence and web frameworks. Finally, I'd like to some single-server vs. clustered server performance tests using Tomcat.

When we built our house way back in 2004, we had it wired with fiber. Even though we still aren't using the fiber, I also had them install ethernet throughout. Today, I finally took advantage of it. I moved my cable modem downstairs and hooked up RJ45 connectors on both ends, so I can now plug my office network into an ethernet outlet on the wall. Good thing my Dad is a network guy - he made it all pretty damn easy.

It was a great afternoon in Denver: 85 degrees, cold Fat Tires in the fridge, kids running around playing in the kiddie pool - and I got my house re-wired in under 30 minutes. The "old basement" will soon become a server room. Now I need a rack - for the T2000 as well as an old Dell Dimension Fedora box. Any suggestions?

Posted in Open Source at Apr 09 2006, 06:38:06 PM MDT 8 Comments