Ubuntu Karmic Koala 9.10 Where’s my SD Card?

I’ve had one heck of a hard time getting the SD card to mount on my Ubuntu Karmic Dell Precision 90 laptop.  Not a thing.  Searched through the forums and found a solution that worked for me.  Now the SD Card mounts on my Dell Laptop just fine.  Just takes a quick command-line call and a cut-and-paste into “gedit”.  Once the edit is made, close and reboot, and the SD card problem with your Ubuntu Karmic Koala is gone!

First, at a command line, do:

sudo gedit /etc/modprobe.d/options

Then, in gedit, cut and paste:

options sdhci debug_quirks=1
ProblemType: Bug
Architecture: i386
DistroRelease: Ubuntu 9.04
Package: linux-image-2.6.28-6-generic 2.6.28-6.17
ProcCmdLine: User Name=UUID=e309fb14-05db-4e9a-b137-c6bf63eeb6a4 ro quiet splash elevator=noop
ProcEnviron:
SHELL=/bin/bash
LANG=it_IT.UTF-8
ProcVersionSignature: Ubuntu 2.6.28-6.17-generic
SourcePackage: linux

Save the file, then reboot.

Your SD Card should show up.

Ubuntu Karmic Koala 9.10 Where's my SD Card?

I’ve had one heck of a hard time getting the SD card to mount on my Ubuntu Karmic Dell Precision 90 laptop.  Not a thing.  Searched through the forums and found a solution that worked for me.  Now the SD Card mounts on my Dell Laptop just fine.  Just takes a quick command-line call and a cut-and-paste into “gedit”.  Once the edit is made, close and reboot, and the SD card problem with your Ubuntu Karmic Koala is gone!

First, at a command line, do:

sudo gedit /etc/modprobe.d/options

Then, in gedit, cut and paste:

options sdhci debug_quirks=1
ProblemType: Bug
Architecture: i386
DistroRelease: Ubuntu 9.04
Package: linux-image-2.6.28-6-generic 2.6.28-6.17
ProcCmdLine: User Name=UUID=e309fb14-05db-4e9a-b137-c6bf63eeb6a4 ro quiet splash elevator=noop
ProcEnviron:
SHELL=/bin/bash
LANG=it_IT.UTF-8
ProcVersionSignature: Ubuntu 2.6.28-6.17-generic
SourcePackage: linux

Save the file, then reboot.

Your SD Card should show up.

The Overlapping Schedule Process for Maintenance and Enhancement of Complex Web Properties

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: Continue reading

Ruby on Rails: Create a Select Drop Down from an Array

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!

Struts vs. Cocoon: Why Cocoon lost the battle.

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 Continue reading

Software Engineering Constraints — Taking Responsiblity and Delivering

“As soon as I put a man in command of the army, they all wanted ME to be the general. Now it isn’t so with Grant. He hasn’t told me what his plans are. I don’t know and I don’t want to know. I am glad to find a man who can go ahead without me. He doesn’t ask impossibilities of me, and he’s the first general I’ve had that didn’t.”

— Abraham Lincoln, upon appointing Grant to overall command of the Union Army

 

Constraints are things that we live with in our daily lives, accept them, and move on. With software engineering groups that are well-established and have strong leadership, constraints can get legs of their own and become excuses for not delivering projects on time, not building something correctly, or even stepping outside Enterprise Goals because “they do not fit within our design.” Many times the inability for an engineering team to confront a constraint will go so far as to create blame, cast dispersion and create a poison atmosphere to anyone that “gets in their way”. Continue reading

Software Development/Quality Assurance Process: The pitfall of Involuntary Prototyping

Is your Engineering Development project stalled in QA? Have expectations throughout your organization been lowered to the point where extremely long, ponderous QA cycles are planned for and expected? This could be the result of an Involuntary Prototyping process that can become a trap that is expensive, not only from a product time line/opportunity cost basis, but also in employee morale and resource turnover.

Projects in general are date-driven, that is the business goals are to deploy something in a specified time-frame and with necessary features with reasonable quality. Planning around this is difficult but not impossible — often QA takes a back seat to development with respect to time-weight concerns, causing any delays in development to be thrown on the backs of QA teams, demanding that they complete the same amount of testing with less time. As development is delayed, the reluctance to accurately modify the schedule to a reasonable period decreases — stakeholders become more and more optimistic with their times, and consequently, any shock to the system will result in blown schedules and scrambling to “make the date”. This scrambling can bring on Involuntary Prototyping — when this happens, be prepared for a bear to eat your schedule and poop it off a cliff.

Continue reading

Process and Situational Awareness for eCommerce Development

Alignment is everything. For many years managers in the software industry submitted budgets that were unrealistic to Business Unit managers that had no clue as to what to question, what to approve or where to cut. As business has grown up and increased its expectations of IT departments, Development and Infrastructure has also been forced to mature and face the fact that they aren’t an “overhead” cost. This is especially true in eCommerce.

The Best is the enemy of the Good.

I’ve never met an Engineer or Manager of Engineers that didn’t see an infrastructure project as vital to the organization’s ongoing health and stability. I’ve seen (and been) that Manager before. They’ve actually been wrong more than they’ve been right. The reason for this is the lack of a complete picture of the goals of the organization as a whole, the priorities for various Development/Infrastructure (DEV-INF) projects, and the fact that budgeting exists because resources are finite. Sometimes an eCommerce site can limp along for years on a code base that is far from the ideal architecturally, but it may cost far less to maintain and extend it than to upgrade it to the “Next Great Killer Platform” at the cost of revenue-driven projects.

The Holistic view of a Budget.

While all projects will have some value, it’s important to prioritize projects in alignment with the overall organization’s strategy and objectives. There is no use in a complete re-architecture of the site when current demands of Marketing, Consumer Experience and other various Business Units cannot be met. The goal in eCommerce is simple. Keep the business growing, keep the site in “five nines”, and refine the user experience to increase conversion. DEV-INF budgets must play in this ballpark or, as a development leader, all credibility with Business Units will be lost; ultimately will leding to a breakdown in communications between Engineering and Business, which is a crisis in an eCommerce workplace.

Metrics are the key.

Once projects are aligned with Corporate Objectives, it’s vital to show all cost drivers for these expenses. Many times the cost of ongoing maintenance is not factored in, but can be as much as 65% of an overall budget. This is also true for time budgeted for QE/QA. While the individual Engineer writing code may only write 250 lines that finally make it into production in a three-month long project, how many times he/she had to write it, how much time was eaten up managing and checking this code, and finally what documentation, knowledge transfer and future extendibility these 250 lines will have also affect costs. All these things must be taken into consideration.

Budgeting isn’t just all planning. Once the planning is complete, the spending begins. Vital in this aspect is accountability and assessment of performance. Hard, industry-standard metrics exist to gauge the performance of DEV-INF budget items. In eCommerce I’ve found many easily measured values:

  1. Actual vs. Proposed Development times.
  2. Actual vs. Proposed Resources.
  3. Pre-release bugs.
  4. Post-release bugs.
  5. Effects upon site stability and performance.
  6. Did the Project “Do” what the owners said it would do?
  7. Were the expectations of Business Units met, and are these stakeholders satisfied with the results?
  8. Did any problems that come up get handled in appropriate manners?
  9. Were in-place processes broken?

4. Approaches

Approaches to DEV-INF budgeting should be aligned with the current culture and expectations of the Business. They must have significant buy-in by various business stakeholders. If business drivers have “skin in the game” as to line-items in a DEV-INF budget, this automatically give credibility to it and also act as a check to make sure that I’ve done my homework. Many successful organizations use the Consolidated Projects Approach to budgeting and allocation for DEV-INF projects with outstanding success. In a nutshell:

Consolidated Projects List basic points:

  • IT budget planning process starts before the organization’s process.
  • IT managers submit summary project data for consolidation into a single spreadsheet
  • These projects are then sorted and prioritized by DEV-INF managers before submission to the overall business Prioritization Committee.
  • The Prioritization Committee decides how these projects are to be aligned, budgeted and implemented within the entire Organization’s overall Business needs and strategies.

This approach provides Senior Executives with a complete picture of all proposed projects, their costs, and priority ranking; these units will have a “30,000 foot” picture to make a more informed decision. Total project requirements may now be viewed as a single picture to senior management; priorities become a decision factor. No single group can drive pet projects or non-revenue generating development without prioritization or fully understanding what the business impact or opportunity costs involved are.

This process may be extended with “Gate Checks” to assure relevance to the goals of the company as time changes.  This is especially true with larger organizations that may be widely distributed.   Projects can often times have huge scope (ah — to de-scope, another topic!) and can take months of development time.  The needs of a business can change over this period, and any project that is underway should have enough flexibility to move with the times or the business stakeholders or group as a whole should have the gumption to kill or suspend development indefinitely or until such time as solid metrics warrant completion.