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.

Family Picture at Disney

It's been a while since I posted a family picture - here's one from last week at Disney.

Mickey

Posted in General at Oct 15 2005, 06:05:32 PM MDT 2 Comments

Integrating Axis into AppFuse

Via Technorati, I found Integrate Axis and Appfuse Part1. Good stuff - I'm looking forward to Part 2.

Posted in Java at Oct 15 2005, 02:28:46 PM MDT 2 Comments

Maven 2's Transitive Dependencies

I spent a few hours this week integrating Maven 2's Ant tasks into Equinox. Here's a things I discovered in the process.

  • The JAR you need to include to use the Maven Tasks is quite large, weighing in at a hefty 833K. Regardless, it's easier to include a ~1MB JAR in CVS than it is 10MB of JARs. Equinox (w/o the extras directory) weighs in at 10.2MB before, 1.3MB after.
  • The transitive dependencies feature needs to be cleaned up a fair bit. There are a *lot* of unnecessary dependencies downloaded for many libraries. For example, Hibernate downloads a bunch of JBoss JARs and the Display Tag downloads all the various web framework JARs. I found myself excluding almost as many dependencies as I added.
  • Using in-line dependencies (where you specify each one in your build.xml) is cleaner and requires less XML (b/c of attributes vs. elements). I went this route at first and it worked well, but to allow greater flexibility (for those who might want to use Maven 2), I ended up creating a pom.xml. 48 lines in build.xml turned into 195 lines in pom.xml.
  • The Maven Developer team provides fantastic support - both on the mailing list and IRC. Thanks Brett!
  • Maven 2.0 RC was released today.
  • I need to figure out a way to "install" the persistence/web framework options in Equinox. The easiest way from a maintenance perspective is to parse pom.xml to add new dependencies. Entity includes might make the project more extensible though - and easier to upgrade.
  • Once you have pom.xml in place, it's pretty easy to make the build/test/package process M2 friendly.
  • Maven 2 is faster than Ant.

Overall, it was a pretty frustrating experience, with lots of trail-and-error. In the end, I got it all figured out and the only "hack" I had to do was delete servlet-api-2.4.jar after copying dependencies into my WAR. This is b/c Ant is not smart enough to know that dependencies with a "provided" scope shouldn't be copied. I could probably have a 4th dependencies path to solve this, but deleting sounded easier at the time.

I'm not going to check anything in yet b/c I still have to modify all the installers to specify their dependencies. The main advantage I can see in using a download-dependencies feature is easier upgrading of dependencies. It'll also make a lot more sense in AppFuse b/c certain parts of project (i.e. appfuse-dao.jar) can be published as re-usable modules.

In the meantime, if you'd like to try out Equinox with this feature (works with both Maven 2 or Ant), you can integrate it into a CVS version with the following steps:

That's it! I'm sure some things can be improved - please let me know if you find any issues.

Posted in Java at Oct 15 2005, 12:57:39 PM MDT 7 Comments

Starting from scratch on OS X and Windows

Last night I began my quest to get rid of "OS Rot" on both my PowerBook and my Windows box. I bought new hard drives for both, so I wouldn't have to worry about losing any data. For the Mac, I bought a Lacie d2 (250GB) and for Windows, I bought an internal Maxtor 120GB. Thanks to everyone who suggested the Lacie.

To start, I cloned my PowerBook's drive to the Lacie drive using the free version of SuperDuper. It took about two hours and worked flawlessly. I then proceeded to format the PowerBook drive and install OS X. For the most part, I just copied a bunch of files back into place. I've been trying to restore my settings by copying individual folders from ~/Library to the fresh install - but it's not working so well. I'm thinking of just restoring my whole home directory (cruft in ~/Library and all).

The Windows install wasn't nearly as easy. Rather than backing up to an empty drive, I just installed the new disk as the primary and old one as a slave. I tried installing Windows on the new one twice (once w/ the slave installed, once w/o). After installing, when I boot up, it just sits there will a dark grey screen. So I gave up and put my old hard drive in as the primary. I think the disk might be bad. Regardless, I'm going to try again tonight. This time I'm going to use a ghosting/cloning program to backup to the new hard drive - and essentially go through the same steps I did on the Mac. I'll probably use Norton Ghost or PartitionMagic - but I'm open to other suggestions.

Posted in Mac OS X at Oct 13 2005, 09:01:57 AM MDT 8 Comments

Comparing Ajax Frameworks

From the SpikeSource blog:

SpikeSource's Matt Harrison blogs about his latest interest, AJAX. He's been checking out the various frameworks for AJAX's and being a python lover he has even ported some of them to be used with python. Matt has also conducted mini interview's with one of the framework creators: Alex Russell of dojo, and Bob Ippolito of MochiKit. An interesting read.

http://panela.blog-city.com/ajax_explosion.htm

Harrison also references a nice AJAX Library Comparison on the Open Source Applications Foundation website. I'd love to see an AJAX Framework Smackdown at a future conference.

Posted in The Web at Oct 13 2005, 08:45:08 AM MDT 3 Comments

Want to learn more about Ajax? Come to tonight's DJUG.

If you live in Denver and want to learn more about Ajax, you might want to attend tonight's Denver JUG. Steve Benfield will be delivering a presentation titled "Injecting Life into Web Applications with AJAX".

In this session we will cover how AJAX works, discuss architectural considerations for building AJAX-enabled applications, look at lots of code examples, explore some real-world AJAX examples, discuss using AJAX for returning dynamic data versus dynamic GUI elements, and cover emerging AJAX frameworks and patterns. We will end with a demonstration and comparison of an AJAX enabled business application versus a traditional HTML application.

Finally we will discuss what our team had to consider and some of the pitfalls we found when it came to implementing our own AJAX framework.

Looks like a good session. I won't be attending b/c I need to take care of some OS Rot on both my PowerBook and Desktop.

Posted in Java at Oct 12 2005, 09:10:05 AM MDT Add a Comment

DWR and Script.aculo.us now included in AppFuse and Equinox

Last night, I integrated DWR into both AppFuse and Equinox. AppFuse has had Script.aculo.us integrated since 1.8.2 and it's been great to work with - so I added it to Equinox as well. I added these with the philosophy that it's easier to remove them than to add them.

Thanks to Joe Walker (DWR), Thomas Fuchs (Script.aculo.us) and Sam Stephenson (Prototype) for authoring (and supporting) these great open source projects.

Next up: integrating Ivy (or Maven 2's Ant Tasks) for downloading dependencies. Hopefully both will still allow bundling JARs in a release so both AppFuse and Equinox can stick with the 1-download-to-get-everything philosophy. The main reason I'd like to integrate a dependency downloading tool is to reduce AppFuse's size in CVS, as well as make it easier to upgrade dependencies.

Posted in Java at Oct 10 2005, 09:40:33 AM MDT 14 Comments

What's a good external firewire drive?

I have a 60 GB firewire drive that we resurrected from Julie's dead PowerBook, but I'm interested in getting a bigger one to start regular backups. CNET recommends the Maxtor OneTouch II (300GB), but there's lots of bad reviews. 200 GB should be enough for the next year or two. Any recommendations? Is there one that can be used to backup OS X, Windows and Linux?

Posted in Mac OS X at Oct 10 2005, 09:15:44 AM MDT 12 Comments

Java in Action Presentations and OS Rot

I think I have a serious case of OS Rot on my PowerBook. Despite the fact that it's been extremely slow lately, I went ahead and used it to deliver my Comparing Web Frameworks talk at Java in Action. I was a little hesitant when I agreed to do this talk - mainly because it required me to stretch a one-hour presentation into a 3-hour presentation. I figured the best way to take up all that time would be to do some live coding. So I recorded a whole bunch of "Live Templates" in IDEA and went in to the talk thinking I could pull it off. To say the least, my Mac didn't cooperate and the "live coding" I did failed miserably. JR Boyens hits the nail on the head in his review. Cameron only attended the first part (before the live coding started) and it looks like I did pretty good in the first hour.

Lessons Learned: 1) Have a backup plan and 2) don't do Comparing Web Frameworks as a 3-hour tutorial. I've never had a backup plan in the 2 years I've been speaking at conferences. I've been pretty lucky though, my demos have always worked. I was due for a failure. For my afternoon session about Ajax and Spring, I moved all the live coding stuff to the Dell laptop I had with me. This worked much better, but I was again spat on by the Demo Gods and over half of my demos failed to work. Oh well, I guess it just wasn't my day.

The good news is that all the demos are available online. The master/detail applications I developed are already part of Equinox, and the Ajax demo is available at http://demo.raibledesigns.com/equinox-ajax. Features include an ajax-ified Display Tag with AjaxAnywhere, an editable text with script.aculo.us (click on a user's first name in the table), in page updates with DWR (on the detail screen) and a zip-code autocomplete/city-state auto-populate with script.aculo.us and DWR. If there's any interest, I can write up a tutorial on how each feature was constructed. In the meantime, you can download the equinox-ajax project from java.net.

After my Ajax talk, I was approached by a couple of the AjaxTags developers, and they showed me some very cool widgets they're working on. I definitely plan on digging into this project in the very near future.

Posted in Java at Oct 09 2005, 03:20:45 PM MDT 1 Comment

Made it to Java in Action

I just arrived at Disney's fancy "Yacht Club" for the Java in Action show. Today was a fun day - Julie and I took Abbie and Jack to Magic Kingdom and had a great time. Abbie got to meet Mickey Mouse, Winnie the Pooh, Eor and Tigger. She was scared of Mickey, but warmed up to Pooh and friends pretty quickly. It was weird - it kept raining off and on throughout the day, but it didn't seem to put a damper on anyone's spirits. Unlike Colorado, rain doesn't cool anything down. In fact, the humidity seems to crank the temperature up a notch or two.

Tomorrow is a full day - I have a 3 hour tutorial on web frameworks in the morning, followed by an hour of Ajax + Spring in the afternoon. After that, it's back to vacation-mode until I return to Denver next Tuesday.

I'd post the slides from my talks, but they're starting to make less and less sense (in downloadable form) as I add more images and less bullets. Besides, I plan on coding and conversing for most of the talks. That's the fun part of speaking at conferences - who wants to listen to a presentation anyway? Why does the good conversation have to take place in the hallways? Can't it happen right in the room?

Posted in Java at Oct 06 2005, 04:15:17 PM MDT 5 Comments