Building a Consistent, Predictable and Efficient Environment for Enterprise eCommerce Applications.
 

Predictable Schedules Create Outstanding Teams

When many eCommerce shops first set up, there are usually a few developers wearing many hats; they have access to everything, develop within specific areas and channels, and check in code for deployment as it becomes ready. While this type of development will work as a business starts, it will soon become unmanageable and will result undesired consequences as changes are not integrated, and business priorities are not addressed, or worse.

Predictability and easily enforced processes set all stakeholders within an application free to do their jobs and collaborate at the highest levels possible. With a strong process, planned changes will be scheduled for deployment with a high degree of accuracy. Engineers enjoy complete and accurate requirements, and know what is expected of them throughout each cycle. Quality Assurance will have time to create plans and fully test changes, and Releases to Production will no longer be a nail-biting, all-hands-on-deck stress-fest.

The following proposed process details the steps necessary for day-to-day development, maintenance and enhancements for the IHO/Offer Channels applications. They are exclusive of longer-term enhancements and development requiring multiple-week pulls. Only those issues that may be completed in short periods will applies here,. This is significant because with most mature applications, nearly 75% of all issues encompass this type of development.

Tracking the status of Issues

An Issue Tracking System is a “blog-like” application that allows issues to be tracked throughout the development/release cycle. Its main features include fields to track: Read the rest of this entry »

2001 Ducati ST2

11000 mi — came with all the bags (back one not shown in picture), Corbin Seat, an extended warranty for the next year, and a 14-month service contract from Wilson’s Motorcycle in Fresno (Yes, I have to make the 200 mile trip to Fresno to get the service - but I have family there that I actually like!).

     I spent a great deal of time looking at everything else.  I had decided on the Scura that Encore Performance in Prescott had for sale, but the price quoted me actually went up $250, to $6750, and the ST2 was $4400, with the warranty, service contract and bags.  It just a new timing belt and valve adjust less than 100 mi before I picked it up, and it was a complete drive-away bike with no faults.

I’ve put 1000+ miles on it a week and a half later, and it is really something.  My Guzzi is like a P-47; lumbering, powerful, raw and upright.  The Duc is like an f-18 — just smooth and so performant — it does everything very well but still makes you feel like you’re really talented.  The brakes are marvelous, and I’ve finally gotten over the “rocks in a beer can” sound of the clutch at idle.  I do miss the torque and big flywheel of the Guzzi on it, because it really has nothing but angel-food cake below 3000 rpm.  I’ve stalled it on slow move-aways from a stop countless times.

All told, the mileage is wonderful, seating position is good enough for now, and the storage is amazing.  A little wider than the Goose, it is a little dicier as I split lanes.  The seating position is also in the stratosphere compared to the Eldorado, and I feel like I’m sitting on a couple of phone books in comparison.

Should be a fun bike, and I’m positive that I’ll be able to get my money out of it if/when it comes time to sell.  The build quality is super, and I have a feeling that it isn’t my last Ducati.

I’m looking at my second bike — wanted a Norge but wife said don’t spend so much money (limit’s around 6500ish).

So I don’t wear the eldo out, this bike would be ridden about 6-800 miles per week for the next 9 months or so, then this would drop by 75% to about 200mi when I move close to my work. It’s gotta be dead-nuts reliable (at least by some warped standard that says my Eldo is close to that), and I’d like to be able to have a great bike to get through traffic in.

for those of you that went to the AZ rally and others, Jim at EPS has an ‘02 Scura with LeMans full fairing, risers on the bars and Bags that look like two moving vans bolted to the bike ( but beautifully integrated). It has 10K miles.

02 Scura

Then, there’s BJ’s LeMans. I just love the look of this bike, but unfortunately I just don’t know enough to say that I could put big miles on it for nine months. Ed Milich says I’d be like one of Jerry’s kids if I rode it everyday, and cringed at the thought of “geezering it up” by putting on risers, bars and bags. It has 41K miles and Beej says it is solid. Gotta believe him. Here it is:

1986 Moto Guzzi Le Mans IV

It’s for sale to anyone — come with a check made out to St Jude’s Children’s Hospital for $4K and you ride it off AND “write it off”. (There. Now you know, and if you want to buy it before I get off my brain and make a decision, all power to you, no hard feelings whatsoever.)

Then there’s an ST2 with low miles and adult owned for $6500.

I did consider many of the Oriental bikes and BMWs, but I’m just not going to want them after 9 months, and I hate selling stuff. Plus, I already have knowledge about Guzzi Maintenance, and Ducs don’t scare me, because I have a support network if I really, really need it. Prefer the Goose, though.

Oh yeah.  Another acquaintance has a very nice SPIII in Montana.  Price is great but I need to find a way to get it to here.  Ride sounds good, but my new job really doesn’t give me the time off I need, and the plane tickets to middle-of-nowhere Montana can be dear.  Still — Here’s a pic:

1000 SPIII in Montana

So I’ve been ruminatin’ and ruminatin’. I’m soliciting opinions because I need more input and I just don’t have the domain knowledge yet to really make a great decision.

There’s also a nice, nice 1984 850 T5:

850 t5 (1984)

Lotsa choices.

 

Here’s a poll:

The Problem: Calling a function many times throughout a particular JavaScript file or block.

JavaScript is often used to manipulate a variety of HTML objects on a page, i.e. to “show” or “hide” them, or perform some type of toggled functionality on a variety of buttons, divs, etc. It is not uncommon to see code like this littered in a variety of places throughout a typical large Script block:
if(foo == bar){
document.getElementById("blah").style.visibility="block";
document.getElementById("blue).style.visibility="none";
document.getElementById("red").style.visibility="block";
document.getElementById("black").style.visibility="none";
}
Implementing the above in numerous places throughout said block of Script with a couple of hundred lines can eat up a lot of space, be harder than all get out to maintain, and if the guy that wrote it gets hit by a bus, you can often watch the next engineer in line cry for days in front of their screen just trying to figure out what the original coder was thinking when they wrote it.

Read the rest of this entry »

Maxine Gurovich

11 Mar 08

The last bastion of unconditional love is your mother, if she’s a good one, and mine was most definitely a good one. Once she’s gone, there is nobody that will ever again give you unconditional love. The only thing left to do is Pay it Forward, to your wife, child and the people that you love.

Maxine Gurovich, my mother.  Oct 1, 1920 - March 11, 2008.

Bye Mom, you were the finest, and I’m honored to be your son.

This is the third in a series of articles about getting back into riding after a long hiatus. Part 1 of the series can be found here. The second installment of the series can be found here.

Since I’ve got a wife and wonderful seven-year-old daughter, and since riding a motorcycle isn’t deemed by the people I know as the safest pastime I can indulge in, I decided early on to do everything that I can possibly do to prevent the separation of me from my motorcycle in an unwanted fashion. Even if this is to occur, I also want to make sure that I have more-than-adequate protection. Lastly and most importantly, I’ve committed myself to getting the best education and training I can, and to continue this training in an ongoing manner as long as I continue to ride.

Time to get some gear and get educated.

I looked into training schools sponsored by the Motorcycle Safety Foundation, and most said that they would provide helmets, but I would need to have gloves, a suitable jacket, pants and boots. I figured that with minimal effort I could cobble together an outfit that would “pass”, but that path didn’t feel right to me. I decided to purchase the equipment that I would begin riding with immediately. I would have plenty to do and think about during my first few thousand miles, and I wanted to have the equipment that I would be using initially. I felt the need for commitment to the process from the time I first threw a leg back over a seat.

Read the book

The first thing I did was purchase a bunch of Motorcycle magazines, and then after perusing the racks at the local Border’s Books, I bought The Complete Idiot’s Guide to Motorcycles — Third Edition - by Darwin Holmstrom and Charles Everitt. Both of these writers are contributors to Motorcyclist Magazine (which I now subscribe to). I cannot say enough about this book. I have referred to it again and again for advice on gear, schools, riding technique and bike purchasing, and rarely ventured anywhere near the outside limits of their advice.

Read the rest of this entry »

Problem: You wish to populate a “collection_select” box with an Array.

I recently had an issue where I wanted to create a select box populated from an array of continuous years. I wanted to use thecollection_select method so it would have a minimal “code footprint” and play nice with the form that I had built. The application that I’m working on is in Rails2 and I didn’t want to divert heavily or make to many changes, and after some fiddling I came up with a nice solution: In the environment.rb file I created an Array constant to contain the year range that I wanted to use:

#Constant Values
YEARS_ARRAY = Array.new(89) {|i| 1920+i}

This code is a shortcut to create an array of values between 1920 and 2008 (88 years). It creates a new array with a size of 88, and then uses the i value to populate each year incrementally. I was pleased to find a method like this!

The form declaration contained the object that I wanted to populate with the form values using the Rails2 syntax:

<table class=”new”>
<% form_for(@movie_poster) do |f| %>
 <tr>
<th>Title:</th>
  <td><%= f.text_field :title %></td>
 </tr>
…..
<% end %>
</table>

*note the newer Rails2 syntax for the form…

I will populate my select box with an Array of Objects. I need to create my Object first to populate my Labels and Values, and I used an “old trick” from Struts by creating a Ruby LabelValue object that mimics Struts LabelValueBean utility POJO. The object has a label and value accessor, which works extremely well for any set of arrays since any kind of mapping scheme would consume duplicate keys and often select boxes, radio buttons, etc may need some duplication. Here is my label_value.rb class, located in my model directory:

# Creates a Label and value for select boxes and
# forms without clearly delinieated# objects, such as Arrays.
class LabelValue
# name the accessors. Label and Value
attr_accessor :label, :value
end

Now that I have a model to work with and an Array Constant to use, I created the “helper” to use with the form tag in the application_helper.rb file, so I might use it throughout the application’s forms. There are two methods, one public, and one private. Note the “Select year” prompt:

# selection for a year value
# ‘f’ represents the passed in form value
def year_select(f)
f.collection_select(:year,year_lookup,:label,:value,{:prompt=>”Select year”})
end
# ———— PRIVATE METHODS —————–

private

def year_lookup
#create an emptycollection to hold the LabelValue Objects
years = Array.new()#populate the ArrayYEARS_ARRAY.each do |yr| y = LabelValue.new
y.label = yr
y.value = yr
years.push(y)
end
years
end

Finally, we need to call the _helper method from the form:

<tr>
<th>Grade:</th>
<td><%= grade_select(f) %></td>
</tr>

The resulting code renders a select box:

<select id=”movie_poster_year” name=”movie_poster[year]“>
<option value=”">Select year</option>
<option value=”1920″>1920</option>
<option value=”1921″>1921</option>
<option value=”1922″>1922</option>
<option value=”1923″>1923</option>
<option value=”1924″>1924</option>

# continues…

<option value=”2005″>2005</option>
<option value=”2006″>2006</option>
<option value=”2007″>2007</option>
<option value=”2007″>2007</option>
</select>

The nice thing is reusability of the LabelValue class, the YEAR Constant and the collection_select itelf. Everything can be accessed as it is needed, whether you want to use the Constant Array for something else, the LabelValue object for a different array or tuple, or the actual rendered select box in different views.

UPDATE, 1/15:

See the comments below for a nice alternative and discussion!

This is the second in a series of articles about getting back into riding after a long hiatus. Part 1 of the series can be found here.

Moto Guzzi

There are a couple of reasons that I will positively own a Moto Guzzi, some practical, some whimsical, and a final emotional reason – Officer Floyd “Skip” Fink of the Arizona Department of 72 Moto Guzzi EldoradoPublic Safety. Skip Fink patrolled in the Globe-Miami area when I was a kid. He and his partner, Russ Fifer, used to ride their big Guzzi Eldorados all over town, and visited my Father’s Restaurant/Hotel almost every day for lunch or dinner.I made sure I was there when they pulled up. Floyd would wrestle with me, tell me about his job and treat me like a little brother (I had bruises to prove it). I always had the utmost respect for him, and it influenced my opinion of law enforcement for my entire life. Big Guzzis were exotic anywhere, even though a quite a few law enforcement organizations used them. The general public at that time was enamored of the Honda 750 and later the even larger-displacement Kawasakis. I don’t think that anyone in my small town even knew that Italians made motorcycles, yet here they were, big, fast and tank-like. All style and a stamp of approval from Law Enforcement officials that were practically family. Read the rest of this entry »

So I’m 46 years old. I’ve been on hiatus from my “mechanical hobby”; restoring cars, for nearly three years. I’ve been doing this since I was 18, and sold off my last Citroen DS21, on January 18, 2005. On a self-enforced hiatus for two years, it’s been another year because the Ideal Ride that lurked in my head just never materialized.

Modern Triumph Bonneville

Enter “Test Pilot Bill” in Phoenix. I’ve known him for years through my wife, Sheila. He is possibly one of the most interesting people you’ll ever meet.

Last year by happenstance he showed me his newly acquired 2004 Triumph Bonneville that is absolutely perfect, low miles, and an H.G.-Welles-Time-Machine moment (I orginially attributed it to Orwell - forgive me!) with all the wonderful things about British bikes and none of their vices.

As I threw my leg over the Bonnie, something funny hit me. Kind of a “yeah… nice”. It fit not only my butt – it fit into my thoughts. Something deep inside me began eating away two of the four wheels that my Ideal Ride had always possessed. From that moment, I began to think of a motorcycle as The Thing to replace the Car Habit I had nurtured for more than 30 years.

I didn’t know if my search would result in a Triumph like Bill’s, but I knew that I would start on a journey of self-discovery and, as I write this, I couldn’t be more excited about anything I have ever undertaken.

Read the rest of this entry »

Cocoon has been around for years with an active development community. I tried to work with it in 2002 using the books and resources available at the time, but I was using Windows at that point and the books really focused more on a Unix/Linux deployment, and at the time I didn’t have the chops to really transfer this knowledge cleanly and was really never able to set up a coherent development environment for it. Struts, on the other hand, had the resources available to get up and running. Although the documentation wasn’t that great, I could “get home” on most issues, and when the level of frustration on completing some of the things that I needed to get done was at a boiling point, I did something about it and wrote a book with George Franciscus to share what I had learned with the larger community. I wasn’t alone with this either; many great books on the subject came out. As the framework diversified and solved many problems, so did the available web and print documentation from many wonderful people.

Step forward to today. Struts 1 is ubiquitous; nearly every Java Web Application Programmer has had some experience with Struts, building upon the base and working to create other Frameworks as well extend Struts1 into Struts2. Lately, I’ve been working with projects that consume a great deal of XML services and need to be available to many different viewing platforms in a coherent manner. Not only that, but there is a tremendous amount of conditional logic that must be matched depending upon input. Cocoon handles these things very well — it’s dispatch system allows for various URL matching which gives it’s configurations a very similar feel to a lightweight Business Rule engine. I decided to give it another shot and go through the tutorials and documentation — trying to evaluate whether or not it could fit into the way that my company does business.

I proceeded to find tutorials on the Cocoon Site, DeveloperWorks and other places. What I found was at best adequate, but at worst quite disappointing. The Cocoon Community insists that you download their source code and use their scripts to Read the rest of this entry »