JBoss World This Week!

February 11th, 2008

I’m packing up the grocery-getter and about to roll down to Orlando to get ready for JBoss World. Rebecca Goldstein has worked her fingers to the nub to ensure that this year’s JBoss World conference will be awesome.

I’ll be working with Karsten Wade of Red Hat Dev-Fu to produce daily show reports. You can also follow along at home through my twitter. If you’re at JBW and twitting, leave a comment here with your Twitter URL, so others might can follow you.

See you there!

JBoss Cache: MoB Rule

January 16th, 2008

Manik Surtani, the stealthy party-crashing lead of JBoss Cache, has once again announced a Month of Bugs.

Yes, yes, I know it’s surprising that the superstars at JBoss might possibly write some buggy code. But we don’t always get a full 8 hours of sleep and a complete, nutritious breakfast. Plus, sometimes elves sneak in at night and play dirty tricks on us.

None-the-less, there’s some bugs needing squishing.

Check the announcement for all the details, but bottom line is you’ve got 30 days (until JBoss World) to find and/or fix as many bugs as you can. For that, valuable prizes may be awarded.

JBoss World Hackathon wiki is live

January 15th, 2008

As mentioned previously, at the JBoss World 2008 conference in Orlando, we’ll be running a Hackathon.

Now’s the time to head over to the Hackathon wiki, and start making some plans. If you haven’t bought your pass to JBoss World yet, you need to jump on that, also. There’s less than a month before we’re all hanging out in sunny Florida with the gators and Canadians. The agenda is published, so you can see that you’ll be missing a lot if you don’t come.

Six Degrees of Bacon

January 14th, 2008

Some days, there’s a rhythm to the universe, where one idea keeps bubbling to the surface, trying to make itself known.

Today is one of those days. And the idea is bacon.

It started when I was reading some Apple rumor site about tomorrow’s keynote. The sidebar had a headline that involved “cookies” and “bacon”. That of course lead to Bacon Chocolate Chip Cookies with Cinnamon Maple Glaze.

My buddy Paul R. Brown then shared the Bacon Cheese Baconburger with me.

Lastly, Ben (my arch-nemesis) gave me the ever-helpful Bacon Flowchart.

Pimp my Matrix

January 14th, 2008

Got a Garmin GPS? Got a Toyota Matrix?

Apparently the two companies have stealthily conspired to make their products snap-in compatible.

While driving to-and-fro between Asheville and Raleigh, I got tired of having to pick up the GPS from the passenger seat to marvel at my progress. On a whim, I decided to see if it’d prop inside one of the round holes in the instrument cluster. What do you know, but it fits perfectly. The radius of the curved edges on the GPS exactly match the radius of the tachometer well. And the rubber grippy bits on the Garmin make certain it stays where you put it.

It’s an automatic, so it’s not like I need to see the tachometer anyhow.

And yes, the photo was indeed taken while barreling down I-40 at 70mph.

Well, which is it?

January 14th, 2008

I’ve been working on compiling JIRA plugins lately, with maven-2.

And I see this go scrolling by:

[WARNING] *** CHECKSUM FAILED - Error retrieving checksum file for webwork/jars/webwork-30Apr07-jiratld.jar - IGNORING

In that single line, I get confused, as there are 4 hot words right there.

  1. WARNING: Hey, something bad happened, but it’s not super bad.
  2. FAILED: Well, crap, it just plain did not work.
  3. ERROR: Yep, it still didn’t work, and that’s a bad bad thing.
  4. IGNORING: But apparently I shouldn’t care too much, because maven surely isn’t giving it much thought anymore.

Should I take corrective action? Is there anything I can do? I got all hyped up about being warned of the error of failing, only to be told it’s no big deal.

Of course, I had to babysit the first build like a crack-baby delivered in the 2nd trimester. Maven attempts to download the world from Atlassian’s repository which likes to take a nap after downloading a dozen .pom files.  I’d have to go Control-C all over it, and start over, to get a running start at the next dozen .poms.  Fun!

Going down to FUDCon (and other updates)

January 11th, 2008

Tomorrow, I’m trekking down from my mountain to the flatlands, destined for Raleigh.

FUDCon Raleigh 2008 is taking place. In the interest of Red Hat open-source communities playing friendly and synergizing, I’ve been invited to join the Fedora Board. This means I’ve also installed VMWare Fusion and have built a Fedora image for my Mac.

Luckily, I’ll also be coordinating with Karsten Wade about some of plans for JBossWorld, which the Red Hat team is pitching in on.

It’ll also be a chance for me to meet a newly-hired designer on my team, and the new CEO of Red Hat. Amazingly, he and I went to the same small high-school in the same po-dunk Georgia town of Columbus. Tom’s Peanuts, RC Cola, Carmike Cinemas, and AFLAC. That’s Columbus.

Free to Fee

January 10th, 2008

Since I’ve been with JBoss, we’ve been making a move towards “the Fedora model” in terms of the divide between the open-source community projects and the “official” bits you can buy support against. Once we introduced our Platforms and Frameworks product configurations, it became slightly less clear what was what. Unlike Fedora, when tends to aggregate a lot of things from a lot of projects, the JBoss community projects are the primary upstream source for JBoss commercial support offerings.

Working with Jon Atkins and Shaun Connolly who handle the .com side of the house, we’ve worked up some statements to help try to clarify it all. Additionally, James Cobb whipped up a pretty intuitive diagram demonstrating the way the open-source community is cherry-picked and how the rough edges are sanded off to create the supported bits.

Org and Enterprise

Sleep Swedish

December 22nd, 2007

I’m a huge fan of Tempur-Pedic beds. You know, the original Swedish sleep system using the Tempur(tm) material developed for NASA.

I’m just wondering how the Swedes infiltrated our space program to steal NASA’s space-age bedding technology, and why we let them get away with it.

The fate of our nation’s rest, and maybe our entire space exploration program, is in the hands of quite possibly angry Scandinavians.

It’s not like we don’t know where Sweden is. We could quite easily go retrieve our revolutionary sleep technology and re-secure our future in the space race.

Point of Use

December 22nd, 2007

When we moved from C to C++, we were overjoyed that we no longer had to declare all of our variables at the top of the function.

do_something() {
  int num = 0;
  int another_num = 0;
  num = get_a_num();
  another_num = get_a_num();
}

We could instead declare them near the point of use, when needed.

do_something() {
  int num = 0;
  num = get_a_num();
  int another_num = 0;
  another_num = get_a_num();
}

Ultimately, the rule intends to make things visible to the smallest necessary scope. While technically “scope” is an entire block, actual scope for a given statement consists only of that statement and those that follow. Defining variables at the top of a block unnecessarily extends their scope beyond the actual needs.

That’s great for variables. What about expressions or statements or blocks of statements?

When we hack out straight code, perhaps a one-time chunk of Perl or Ruby or bash, we declare a statement exactly at its point of use. If we don’t name it, it’s lost in the ether, immediately out of scope again.

rm -Rf path/to/stuff
mkdir other/path/to/stuff
cc -o google google.c

We climb up into the world of “engineering” and we start to create functions, or classes and methods. We give names to a chunk of statements and increase the visible scope of this code.

def turn_on_sprinkler()
  call_sprinkler_webservice( :on )
end

But have we just moved our declarations too high, like our variable declarations in C at the top of the block?

We follow a rule that if you use the result of an expression more than once, you should stuff it into a variable. A local variable. Not a global variable. More than likely not an instance variable.

How about if you use a statement more than once, you stuff it into a named block. A local named block. Not a global named block. More than likely not a method on a class.

notify = Proc.new{|person,message|
  person.email.send( message )
  person.sms.send( message )
}

notify.call( person.wife, "I'll be home late" )
notify.call( person.mistress, "Motel 6 in 10" )

Unless the functionality is required at any higher scope, declaring and defining named blocks locally prevents pollution of the namespaces.

With languages such as Ruby, instance methods can be defined upon instances that need them, instead of upon every instance of a given class.

def ship_via_cargo_container(item={})
  class << item
    def cube
      (self[:height]||1) * (self[:width]||1) * (self[:length]||1)
    end
  end

  freight_cost  = item.cube * 100.dollars
  handling_cost = item.cube * 10.dollars * 2
end

In effect, this view is one of macros. When it’s convenient to create a short-hand notation, or a micro-DSL, do it where it has minimal impact on the rest of the system.

It could be argued that interpreters and compilers are not prepared to see and optimize for these types of blocks. The Java world surely keeps debating closures. I have no idea the impact on Ruby interpretation when you’re constantly defining new methods on individual objects. But then again, there was a time we feared the overhead of managing objects instead of simply free functions and structs.

« Previous - Next »