Tuesday, July 17, 2007

The Smoke

Ok, so it’s time to explain the ‘Smoke’ part of the title of this blog – Smoke and Ice… One of my favorite hobbies over the last year or so has been to cook up some fine Southern Barbecue – well, Southernish, I suppose, since I live in New York… I’ll tell you what, you can’t beat the smell of a nice pork butt on the grill, smoking all day long with a nice, spicy rub on it during a summer’s day (or winter… whatever)… from time to time, I’ll be throwing some recipe’s that I use up here, since it’s always best to share barbecue with 30 or 40 of your best friends (and a lot of the time, you’ll still end up with leftovers!)

So let’s start with the basics – I use my standard 22 1/2” Weber Grill… at around $80, you can’t beat it when compared to the many smokers you can get for several hundred, or thousand dollars… Sure, I could cook more with a proper smoker, and I’ll bet it could be done a little better too, since the food isn’t as close to the heat source, but hell, I’m on a budget here… With the Weber grill, I can also fire up the coals to a raging 500-600 degrees, and grill a proper steak as well, so it’s versatile…Oh yeah, and the fuel is charcoal… no gas here – gas grills tend to run too hot, and I just have the feeling that I’d be emptying propane tanks every time I light them up…

As you can probably tell, when I talk about barbecuing, I am not talking about anything to do with ground beef, or fancy cuts of meat… While I love a good burger as much as the next guy, grilling a few burgers does not make a barbecue… instead, barbecuing is the process of cooking over low heat – usually around 225-250 degrees – for extended periods of time, usually throwing some wood right on the coals to produce a fragrant smoke that works it’s way into the meat… additionally, the meat involved is usually tough, with a lot of connective tissue – these meats would be barely edible when cooked on a hot grill, but when allowed to cook slowly, the fat and connective tissue dissolve to make the most tender, lip smacking meal you’ve ever tasted!

My personal favorite right now is South Carolina-style pulled pork, which starts with a 12-15 lb pork shoulder (which, oddly enough, comes from end of a pig opposite the shoulder), takes about 16-18 hours to properly cook, and shreds after cooking like it was butter… I usually buy these suckers two at a time at a wholesale club for about $25, so it ends up being around a dollar/pound, and will literally feed me for a month! (I made up a pair of these this spring for a party with about 30 people, and we not only fed everyone, but had enough for a week and a half of leftovers for myself )… I’m going to fire one of these babies up early next month – I’ll put up a bit of commentary on it when the time comes…

I also do a lot of baby-back ribs and beer-can chicken as well, mainly because they don’t take quite as long, so they don’t take as much care and prep-work (the chicken comes in at about an hour and a half, so it’s something I can start up at 4:00 on a Saturday afternoon)… I’ve tried my hand at brisket once, and while it was a bit tough, the flavor was out of this world, so I will be doing one of those again at some point – I stopped at a barbecue joint the other day and ordered sliced brisket (you know, for research), and surprisingly, it was not at flavorful as mine, and it was nearly as tough… disappointing, but just more motivation to cook it myself

Last but not least – there’s a lot of ‘passive’ time involved in barbecue, and as far as I can tell, there’s only one worthwhile way to pass that time – drink a few beers, listen to some blues and spend time with your family and friends while you’re soaking in that incredible barbecue smell… sound like the perfect way to spend a weekend? Well then get cookin’!


Monday, July 16, 2007

Build Systems

I will admit to being a bit ‘old school’ when it comes to build processes… I will tend to use a tool like Ant that gives me a lot of control over how a project is built, and that is often launched from a command line… I’ve given Maven 2 a chance, and I like a lot of the concepts involved, especially that of Convention over Configuration, but I found that it requires a Herculean effort to do something as simple as building a JEE 5 compliant ear file – this is apparently what happens when the Conventions are based on a previous version of a spec you’re using (to be fair to the Maven 2 project, I found that my biggest frustration was with the documentation – my issues may certainly have been user error, and may be solved with a little better documentation, but my feeling is that it’s simply not there yet)

I’ve also worked a lot with the build processes inherent to Eclipse and NetBeans, but I have not used these for any projects that I collaborate with others on – I think this is mainly because I would prefer not to restrict people to just use my favorite IDE (which most people don’t seem to like – more on that later)…

I have worked most often in a system that uses a bit of both – the best setup for me seems to be one in which the primary build is a series of Ant scripts (Maven, or something else would fit just fine here), while developers are able to work in whatever IDE they like – if that IDE provides its’ own compilation system, then great, but the code that is compiled here doesn’t actually matter for anything, because the runtime system uses the class files created from the Ant scripts…

In some ways, this feels more like a compromise system to me than anything else, and it’s often difficult to get less experienced developers to realize that if their IDE is showing that they have an error, but the Ant script still builds, then it’s not a big deal (not to mention that a situation like that just seems a bit smelly anyway)…

Do other projects work in this way, or is there a ‘better’ way, in which both the IDE and the build scripts use the same class folders? I’m willing to bet that this is doable, but I haven’t had the opportunity (or patience ) to pursue it yet…

Wednesday, July 11, 2007

Rethinking Best Practices

Ah, J2EE best practices -- the community's way of figuring out how to work with flawed technologies... You know, the Session Facade, Data Transfer Objects, etc. -- they are ingrained in so many developers' brains to the point of being second nature... It feels almost instinctual to design your system with them -- putting your data over here in these classes, putting your logic over there in those classes...

Problem is, now that JEE 5 is becoming more common, those best practices are all wrong... ok, in most cases they won't necessarily cause any harm (at least not of the magnitude of not following best practices about 5 years ago), but there are now better ways of doing things -- we just need to learn what they are...

I'll touch on a number of these in future posts, but I find that the area I have a lot of trouble with is getting rid of my habit to separate my data from my logic... the Session Bean/Entity Bean separation, in my opinion, is one of the more damaging patterns that was literally forced upon developers who went down the EJB path in the early days, and it's a pattern that I'm not convinced is completely fixed yet... more on that in a later post...

Personally, my 'toy' projects are partially intended to get me thinking away from this -- when it comes down to it, it's all about trying to relearn those object oriented design principals, incorporate some newer techniques like Domain Driven Design, and just experiment in whatever way suits my fancy...

The first thing I do is put together my initial design in some form -- either code, UML, a drawing, whatever... then I do it again, and look for specific flaws, like classes with only data and no behavior and vice-versa... of course, these scenarios aren't always wrong, or even bad, but each time I go through this retrospective, I get a little better at identifying these issues to start with...

Do you have similar experiences? Spill the beans, let us know!

JEE and Spring

How are people using JEE 5 and Spring these days? There's a lot of overlap in the technologies, obviously, and there are reasons to use both, but I'm interested in those using them collaboratively...

I've seen some articles about how one can integrate the two by accessing a Spring ApplicationContext from within an EJB 3 Session Bean, but none of them seem to address the fact that the two have different life cycles -- using dependency injection within a Session Bean's PostConstruct method could cause some unexpected problems if you're using Spring's prototype scoping... there's no guarantee that the PostConstruct will be called for each invokation, but only when the bean is originally created...

Has anyone out there dealt with this? Would it be possible to create an 'ejb' scope with Spring's new customizable scopings?

Howdy!

Howdy, y'all!

Yes, I know, it's another 'First Post' message... yeah, I'll get on with it... This blog will be a place for me to put my thoughts, whether they be about programming (my profession), barbecue (the 'Smoke' from the blog's title), hockey (read the title again), family, movies, books, whatever... More than likely, I'll end up figuring all of that out as we go...

Ok, ok, I'm getting on with it... you'll have to wait for the next post for anything else...