Redpoint Technologies Named Finalist for 2012 ITA CityLIGHTS Award

April 16th, 2012 Posted in Agile, Cloud Computing, Open Source, Rails | No Comments »

The 13th Annual CityLIGHTS Illinois Technology Association (ITA) Awards honor top performers in technology whose innovation and success drive growth in Illinois.

Last week we were notified that we, Redpoint Technologies, were named a finalist in the 2012 ITA CityLIGHTS awards in the New Concept Award category. Using the state-of-the-art Ruby on Rails web application development framework and working on behalf of our client, we built and launched BeBeVu. Bebevu is an exciting new service that allows expectant parents to access ultrasound video, and share this video with friends and family using social platforms like Facebook and Twitter.

 

This year the ITA received a record-setting number of nominations this year, with the ITA’s panel of judges selecting the top entries in each of nine award categories.

Redpoint is honored to be named a finalist, but we need your help. Everyone can vote using the public, online website at https://www.surveymonkey.com/s/CLVOTING through April 25 at 5pm central. Winners are determined by a blended score based equally on public voting and the judges’ panel in all categories except the CityLIGHTS award, which is selected by the ITA Board of Directors.

Winners will be announced at the CityLIGHTS Awards Gala Thursday, May 10, 2012, in the Great Hall at Union Station in Chicago.

2012…the year of mobile strategy and internal focused apps

February 14th, 2012 Posted in Agile, Mobile | No Comments »

Based on the mobile-related work we’ve been doing at Redpoint throughout 2010 and 2011, we’ve believe we have enough data points to predict where many enterprises will be focusing from a mobile perspective in 2012.

As of this writing, it is clear that two mobile platforms have the majority of marketshare and momentum in the US: Android and iOS.

Nielsen Smartphone Recent Purchases

Nielsen Smartphone Recent Purchases

Although it looked as though Android would far surpass iOS in the summer of 2011, recent market data from Nielsen (Jan 2012) shows that iOS sales (due to the release of the iPhone 4S) had a significant spike in Q42011. Regardless of the actual marketshare, it is clear from our work that the far majority of mobile development will continue to target iOS and Android devices.

During 2010 and the first half of 2011 we built many applications that were public facing and helped our clients achieve a mobile app presence. This wave of app development is very analogous to the way enterprises approached their web presence in the late 90s. These mobile apps typically expose a portion of our client’s website features in a mobile app. Many of the first generation enterprise apps only publish information and did not allow for any data modification in the mobile app. However, even in an information consumption-only mode, smartphones can provide incredible value. For example, location aware smartphones allow integration of location-based services to implement high-value features such as geo-fencing. Many of these first generation market presence apps are consumer facing and therefore user experience (UX), usability and overall experience were and continue to be tremendously important.

The second half of 2011 and the beginning of 2012 are clearly focusing less on getting a mobile presence and more around 1) setting an overall enterprise mobile strategy 2) focusing on enabling the internal enterprise workforce and partners with mobile apps and 3) being agile & using mobile as a competitive business advantage. We’re seeing a healthy mix of features and apps that publishing information (information consumption) and an increasing number of  true transactional features and apps where data is synchronized bidirectionally to/from the enterprise and mobile app.

Although the aesthetics has traditionally taken a backseat to other IT functions, we see user experience (UX) continuing to climb in importance in enterprise IT projects because platforms such as iOS have changed user expectations around consistency, aesthetics and usability.

What are you seeing in the enterprise marketplace? Let us know…

Quick Response (QR) Codes & Mobile Computing

October 30th, 2011 Posted in Mobile | No Comments »
We live in a convenience society where we need everything quickly and easily. We have an extremely limited amount of time with our customers or prospective customers and need to get maximum value for that time. Using a QR code, we can push structured data or a link to our target audience quickly and easily.

 

QR codes allow for some innovative ideas within the walls of corporate america, in manufacturing, supply chain and retail to name a few.  Although QR codes have been around for a long time, we’re seeing greater adoption in 2011 and are incorporating QR codes into our work and the work that we do for our clients.

The quick response (QR) code is not new. It is a type of matrix (or 2 dimensional) code that was originally designed for the auto industry in 1994 by Denso Wave (a subsidiary of Toyota). The original idea was to create a code that could hold more data than a typical 1 dimensional bar code and that could also be read quickly by a hardware scanner. But the QR code’s ability to contain up to 30% in error correction is part of its magic. This means that a QR code could be scratched/damaged or partially unreadable and it may still be able to be scanned and may still contain all necessary data stored in the code. (more on this later).

The QR code can contain any type of data including binary and alpha. From a popularity perspective, QR codes are used much more outside the US, but interest and usage in the US is rising. As of this writing, the QR code is in much more widespread use in Japan, South Korea and the UK. But if you look around in any major US city, you will see QR codes on trucks, billboards and other outside advertisements, store shelves, in window displays, on business cards and even on tshirts and tattoos.

How does it work? QR codes are read by a scanner, which could be a dedicated piece of equipment in manufacturing. But the most visible growth in QR codes in the US is in terms of public facing QR codes aimed at everyday people like you and me that have a smart phone with a camera. Most camera-equipped smart phones ship from the manufacturer with QR code scanning software or a QR code scanner can be easily be downloaded and installed (typically for free). QR code scanners use the smart phone’s camera to capture the QR code image and use software to decode the data from the bar code. The scanning and decoding of a QR code is very quick and typically takes no more than 1 seconds.

QR codes can contain text patterns that signal the reader to respond appropriately. Some phones will prompt the user before taking action. The following table contains the popular patterns:

Links Allowing you to link to a URL. Normally a smart phone will navigate to the URL in the browser on the phone. In my experience, this is by far the most common use of QR codes. The QR code link could be the home page of your website, could be a detailed product page, could be a video you’ve uploaded to Youtube or a page where you are selling a product.
 
Email Allowing you to provide a quick link to send an email. Normally a smart phone will open up the default mail program on the phone and begin an email. This could be used, for example, as a quick and easy way for someone to opt into a mailing list.
Telephone Allow you to provide a telephone number for quick reference. Most smart phone will prompt for an Okay before attempt to dial the telephone number.
 
Text Your QR code can just contain a message of free form text.
SMS Allow you to provide a quick link to a new SMS message that contains a given destination SMS recipient and message.
vCard Last but not least, there is a pattern to allow you to share your contact information by embedding your information in the QR code itself. It is becoming increasingly common to see QR codes on business cards, email signatures and on conference badges. Once a vCard QR code is scanned, the information is presented in the default contact app on the smart phone with the option to save the contact information.

According to research from Internet Retailing, of the people that scanned QR codes in June 2011, approximately 58% scanned the code from their home, 39% from a retails store, 25% from a retail store, 20% scanned from at work, 13% scanned while outside or on public transit and 8% while dining out.

Innovative use of QR codes?
  • We’ve increasingly seen QR codes used to lookup information in corporate america. For example, we’ve seen QR codes on the front of conference rooms to allow employees and visitors to quickly see room availability.
  • In Home Depot’s garden section, many plants have a QR code where a shopper can quickly get more detailed information and photos of plants.
  • Clients are using QR codes in all their external touch points (videos, blogs, printed pieces) to link them all together (e.g. link to blog from video via QR code) to provide a richer experience.
  • QR code on business cards is growing in popularity. Forget about smartphone apps that scan business cards or the bump app, using a QR code is much more convenient to transfer and allow contact information to be permanently saved.
Creative use of QR codes?
The standard QR code is not all that attractive and some creative people are taking advantage that a QR code contains up to 30% error correction capability to incorporate artwork into their QR code. This artwork essentially makes some of the QR code unreadable, but if you have enough time (or enough smarts to write a program to do the work for you) you can overlay art or modify your QR code to make it more attractive. For example, some folks have added their logo or rounded the corners of the QR code blocks. A great example is by Duncan Robertson to customize a BBC QR code:
How to make your own?
If you search you will find many free QR code generators. Check the generator’s usage policy as some don’t allow you to use them for commercial use. Check out http://qrcode.kaywa.com/ and http://snapmyinfo.com/vcard or Google’s free API for creating your own tool.

Arduino Hallmark Music Hack

December 4th, 2010 Posted in Electronics, Open Source | No Comments »

I am building a large Arduino-based project and want to incorporate music from the circuit board that I ripped out of a Hallmark card that plays music. This blog entry is a guide to build a simple way to control the Hallmark circuit from the Arduino. In order to build this project you will need the following parts/components:

  • Hallmark (or other brand) card that plays music
  • Arduino microcontroller (I’m using the Duemilanove)
  • RadioShack Reed Relay (part number 275-232)
  • Breadboard
  • 6 short pieces of insulated wire
  • Soldering gun & solder

In case you are not familiar with these musical Hallmark cards or have not torn one apart, inside the card there is a small circuit board containing a battery and a small speaker. On the circuit board, there is a piece of plastic (that acts as a switch) that slides back and forth when you open and close the card. When the card is closed, the plastic is separating the two contacts and therefore not playing music. When the card is opened, the plastic piece allows the two contacts to touch, and results in music playing. All cards are pre-programmed with music and the card I chose has a 25 second clip of “Over the Rainbow”.

This project has two primary goals:

  1. Power the Hallmark circuit board from the Arduino with +3V so I don’t have to worry about the battery dying
  2. Use a digital pin on the Arduino (and a reed relay) to control the music

Below are the steps to control the card’s circuit board and play music from the Arduino:

  1. Carefully tear apart a Hallmark card that plays music and remove the circuit board and speaker. Take care when removing the board and speaker because they are usually glued to the inside of the card.
  2. Remove the battery and carefully tear off the top bracket that holds the battery down. Double check how the battery is inserted into the circuit board and note the positive and negative sides. On my board, the negative side of the battery is pressing down onto the circuit board (negative) and the positive side was facing up and had a connection to the battery bracket (that I just tore off). Once the battery bracket is removed, you will see where it was riveted (positive). Note the positive (red wire) and negative (black wire) locations as you will need to solder a lead to these two locations shortly.
  3. Locate where a piece of metal is anchored to form a switch when it is allowed to press down. And stops the music from playing when it is raised or separated from the contact below it on the circuit board. The location where the metal switch is connected must be soldered to connect to one side of your reed switch (blue wire). The location where the metal switch makes contact (and results in music being played) to the circuit board is the location where the second end of your reed switch will be soldered (green wire).
  4. Solder your wires as described above and as displayed below (note the white wires were already soldered for the speaker).
  5. Hallmark Board Soldered

    Hallmark Board Soldered

  6. Wire up the modified board to your Arduino as follows:Red: Connect to the Arduino 3V pin. NOTE: take care to not connect this to the 5V pin as it may damage the Hallmark circuit board.
    Black: Connect to any Arduino ground pin.
    Blue: Connect to on side of the COM connection on the reed switch (post on end of switch with just 1 pin).
    Green: Connect to the N.O. connection on the reed switch (center post on switch on side with 3 pins). Below is the schematic:

    Schematic

    Schematic

  7. Once all connected, it should appear similar to the photo below:

  8. All Wired Together

    All Wired Together

  9. The final step is to plug your Arduino board into your computer, compile & load the following sketch onto the Arduino and verify everything works as expected.
/*
Example to turn on a Hallmark card's music using the Arduino.
Author: Matthew T. Mead (www.matthewtmead.com)
*/

void setup() {
 pinMode(2, OUTPUT);
}

void loop() {
 digitalWrite(2, LOW);      // switch reed relay to turn on music
 delay(25000);              // adjust to hear the entire song
 digitalWrite(2, HIGH);     // turn off music
 delay(5000);               // pause for a bit
}

Note that I chose 25 seconds for the initial pause because that is approximately the amount of music that is played by the card that I chose. You should experiment to find out the right length for your card. Then customize this program as playing the song over and over in a loop will drive you mad. I’m planning to use this hardware and software technique to play music from a larger Arduino electronics project.

Phone Finger

September 17th, 2010 Posted in Mobile, Open Source | No Comments »
At Redpoint we’re doing a lot of mobile work with touch-based interface devices including iOS (iPad & iPhone) as well as the Android. Earlier this summer we wanted to showcase a mobile application demo in a video. Our first cut of the video captured the mobile application running on an iPhone on an emulator. The video quality looked great and the script and voice over were great. As you would expect, with the application running in an emulator running on a mac, we were using a mouse pointer to make selections on the touch interface for the video.

The problem was that the mouse pointer on a touch interface doesn’t feel right…so after some searching we discovered an open source application, Phone Finger from Wonder Warp Software, that transforms your mac mouse pointer into a realistic human finger. In the still shot to the right (from our video) the finger looks very realistic. However, while watching the video, because the hand and finger are so rigid, it would not be mistaken for a live human finger. But it looks so much better than a mouse pointer and the final video that uses Phone Finger was dramatically improved.

The other benefit from the phone finger cursor is around testing. By using a larger cursor (finger rather than mouse pointer) in the emulator, you can discover scenarios where the finger makes usability difficult. I’m not 100% certain, but it seems that the touch is triggered from the center of the fingertip, so Phone Finger allows you to get a sense for how easily or difficult it is to use a particular touch-based application from your mac’s emulator.

OL2EN – Convert Outlook 2007 Notes to Evernote Export/Import Format

December 7th, 2009 Posted in Cloud Computing, Electronics, GTD, Open Source | 6 Comments »

Background

Anyone who uses Outlook tasks and notes and an iPhone knows the pain of not being able to sync tasks and notes over-the-air from Exchange to the iPhone. I was surprised when I first realized that the Exchange client oin the iPhone only syncs email, calendar and contacts and does not sync notes and tasks. I was surprised because I assumed it would be like any other Exchange client and sync tasks and notes as well. Initially, not being able to sync notes did not seem like a showstopper. But over time it became more and more problematic as I was unable to access notes from Outlook that I have become dependent upon.

Evernote

A colleague introduced me to Evernote (see evernote.com). Evernote is a service that allows you to save notes containing various types of media to a central, cloud-based service. The notes are available for viewing and editing using a variety of applications including: traditional web, iPhone, Windows dand Mac. Best of all, the service and clients are free if you do not exceed a (fairly generous) disk space allotment. Notes that are created or edited on any platform are quickly and efficiently replicated to all clients.

Moving Existing Notes

Evernote has two built-in mechanisms to import data:

  1. Import Evernote import/export files
  2. Extract notes from Microsoft OneNote

I found myself in a bind. I had over 125 notes in Outlook 2007 (I was not using OneNote) and could not find an existing way to import these Outlook notes other than to copy and paste each note, one-by-one, into my Windows Evernote application. So I wrote a program to convert the Outlook notes into a format that can be imported into the Evernote Windows client (Note: as of this writing, the Mac Evernote client does not support this import feature).

My Outlook to Evernote (OL2EN) program takes an exported Outlook 2007 Notes file in Windows CSV format as input and creates an Evernote compatible import/export XML file as output. The Evernote import/export file can then be imported into the Evernote Windows client.

Outlook to Evernote Application Screenshot

The complete steps to get started and import your Outlook 2007 notes are detailed:

  1. Download Evernote iphone client from the Apple App Store (the app is free)
  2. Download and install the Evernote Windows client from the evernote.com site (the app is free)
  3. Create a free account on evernote.com. You can do this from iPhone application or on evernote.com website.
  4. Export notes from outlook in windows CSV using the following steps:
    a. Click on Notes in Microsoft Outlook 2007
    b. Select File | Import and Export…
    c. Select ‘Export to a File’ in the resulting Import and Export dialog and click Next
    d. Select ‘Comma Separated Values (Windows)’ and click Next
    e. Make sure that ‘Notes’ is selected in the hierarchy and click Next
    f. Type in a location and filename (ending in .CSV) for your Outlook notes export CSV file and click Next
    g. Leave the default mappings on the final dialog and click Finish (your file will be created)
  5. Create an Evernote XML import/export file using my tool using the following steps:
    a. Download the OL2EN application and run it (note that it requires the Microsoft .NET runtime)
    b. Run the program and select the CSV file you created in step 4 in the ‘Outlook Export File’ field
    c. Type in the name of the Evernote XML file you want to generate in ‘Evernote Import File’ field
    d. Leave ‘Ignore header row (first CSV row)’ checked as the first CSV entry from the Outlook 2007 export is a header row
    e. Click ‘Generate’. A success dialog should indicate how many notes were converted.
  6. Import the Evernote import/export XML file using the Evernote Windows client application using the following steps
    a. Start the Evernote Windows application
    b. Select File | Import | Evernote Export Files…
    c. In the resulting File Open dialog, browser for and select the Evernote import/export file created in step 5 and click open. If the import is successful, you will see a success dialog indicating the notes were imported into a separate notebook inside Evernote. Contratulations! In the event of a failure to import, your import notebook will be empty and you will not see a success message. Unfortunately, there doesn’t appear to be any information provided by Evernote, but is is likely that the XML file is malformed.

OL2EN is free to use for commercial or non-commercial purposes. If you find OL2EN useful or want me to add any additional features, or run into any errors, please post a comment. OL2EN saved me from a lot of typing. I hope someone else can make use of it as well…

Backwards Hangers – Removing the Clutter in your GTD System

November 17th, 2009 Posted in GTD | No Comments »
Image of backward hangers.

Who doesn’t have clothes in their closet that they never wear? It is hard to decide what I will not wear and therefore should donate, but fortunately, I learned a trick that I can turn hangers backwards for all clothing for which I don’t think I will wear. If I end up wearing any of this questionable clothing, when it is returned to the closet, I will hang it with the hanger positioned normally (i.e. not backwards).

After a few months (or however long I want to wait) I can determine what clothing I did not wear because their hangers are still backwards. Clothes that are left on a backward hanger can safely be donated/given away because they are definitely not being worn. This approach allows even a pack-rats the peace of mind to get rid of any unnecessary clothing. The benefit is that I can get rid of clothing that takes up valuable space in my closet, but more importantly, it makes dealing with my closet easier because I don’t have excess clothes to pick through.

I’ve found that my brain is most at ease when my GTD lists of next actions (ToDos) and projects are most abundant because that means (or at least has the feeling) that everything is out of my head and in my system. This allows my brain to stop thinking about what I need to do and allows me to focus on getting things done. However, as my GTD system grows (i.e. more projects and ToDos are added to my system), it seems as if it becomes exponential difficulty to simply scan my context-specific list of ToDos when trying to determine the most appropriate next action.

During the course of my day, my ToDo list is constantly changing. I’m adding items that I’ve identified and removing items that I’ve completed. With just over 350 tasks in my GTD system, it can take several minutes to scan a list of @Computer-Broadband related next actions when the list has over 50 items. Just the thought of scanning through 350 next actions is painful!

In order to keep my GTD system complete, but not bloated, I need to prune my list of next actions and projects from time to time. GTD suggests moving unnecessary next actions and projects to the Someday Maybe list/category. My problem, like with clothes in my closet, is that it is very difficult to make the mental leap that an item is not needed and should be moved to the Someday maybe list.

To combat this resistance to prune an item, I use a similar technique to the backward hangers in the closet for my GTD lists. Although there are many ways you can approach it, during a special, monthly review, I put a trailing asterisk on next actions and projects for which I have not acted upon in at least a month. If, at some point, I act upon the action or project, I remove the asterisk (similar to returning clothing to the closet with the hanger oriented normally).

Once a month, during my weekly review, I review the items with asterisks (see example above). If it has been at least a month since I dealt with the project or next action, I move it to the someday maybe category.

The beauty of this technique is that it helps me be aggressive at keeping my next action list to a minimum. (GTD practitioners will understand that we ignore the someday maybe list except during our weekly reviews). Minimizing the clutter and bloat in my lists allows me to more quickly understand what is truly important. By using this technique, my GTD system is much less bloated and I enjoy scanning my shorter lists easily throughout my day.

Adobe Mosaic – Task Centric, Composite RIA Mashup

October 28th, 2009 Posted in RIA | No Comments »

At Adobe MAX last month, Adobe announced the Mosaic alpha release (to a beta community). It is a composite rich internet application product that allows organizations to integrate and mash up their Flash/Flex, HTML and 3rd party web applications. Mosaic is part of Adobe’s approach to building next generation rich internet application (RIA) applications in the enterprise. Using Mosaic, you can create task-centric applications (i.e. mashups) that are context aware and are composed of other applications.

From the glimpse of what I saw in my hands-on session, the alpha version of Mosaic includes a subset of what you’d expect from a portal. But Adobe was very careful not to call Mosaic a portal. It provides the UI layout and inter-application communication that you’d want from a portal-like technology, but it is intended to be more of a mashup container. As a result, Mosaic is intentionally missing many portal features such as user management.

Tiles and Views
Each application that is contained in Mosaic is referred to as a tile. Tiles are made available to Mosaic through the catalog. The catalog contains all the information about a tile including its location, category, description, tags and other information about its layout. Any tile from the catalog is available to be injected into Mosaic. At the moment, Mosaic stores the tiles in an XML-based catalog. It seems likely to assume that Adobe will ultimately provide a management facility to allow non-programmers to manage the catalog and tile information.

An interesting aspect of the Mosaic UI is its support for up to 3 views. A view allows end-users to create a collection of related applications in single context. For example, within Mosaic you might have a view that contains your financial tiles, another view that contains your HR-related tiles and a third view that contains CRM-related tiles. You can think of views along the lines of multiple desktops or workspaces supported in Windows or Spaces on a Mac. As you would expect, the views can be saved from session to session and support the task-centric focus of Mosaic. As you would expect from a RIA application, Mosaic allows tiles to be rearranged within the view and also to run normalized or maximized.

Inter-Tile Communication
Ultimately, Mosaic allows Flash/Flex, HTML and 3rd party applications (where source code is not available) to be integrated.  Flash/Flex tiles interact by modifying the application source to allow the resulting tile to send and receive messages and to take advantage of a global or view-based context. HTML applications (where source is available and can be edited) can make use of a JavaScript library to communicate. And finally, 3rd party HTML application (for which the source code is not available) can use URL Bridging to pass URL parameters. For example, you can include a tile in your application that calls google news to retrieve any recent news regarding Adobe by using the URL “http://news.google.com/news/search?q={global.sym}” where global.sym resolves to “adobe”.

Although details are not available, Adobe plans to provide tight integration with Mosaic and LiveCycle ES2.

Spikes in Everyday Life – Deck Lattice

May 6th, 2009 Posted in Agile | No Comments »

Extreme Programming (XP) defines a concept called a spike. A spike is an activity to find out answers to a touch technical or design problem. Extremeprogramming.org defines a spike as:

Create spike solutions to figure out answers to tough technical or design problems. A spike solution is a very simple program to explore potential solutions. Build a system which only addresses the problem under examination and ignore all other concerns. Most spikes are not good enough to keep, so expect to throw it away. The goal is reducing the risk of a technical problem or increase the reliability of a user story’s estimate.

When a technical difficulty threatens to hold up the system’s development put a pair of developers on the problem for a week or two and reduce the potential risk.

So a spike should be the minimum work required to demonstrate the suitability of the solution, reduce the risk and help estimate the overall effort. Now to a problem outside of programming…

I’ve been meaning to replace the battered wooden lattice around the base of my deck that is attached to my house for several years. I was planning to use a plastic material (plastic lattice sheet and accompanying edging with a pre-cut channel) rather than wood so it is maintenance free and doesn’t rot. I used this plastic lattice and edging the previous year on a project, but was not happy with the way I assembled the lattice to the frame to form a panel.

I realized I was procrastinating on the deck lattice replacement project because of my previous mediocre experience with the plastic material coupled with the fact that I was not sure how long it would take, how much material I needed, what it would cost, and most importantly how I would anchor the finished panels to the base of the deck.

Furthermore, underneath the deck there are no vertical supports on the edge of the deck to which I could screw the panels. As a result, I was not sure how to fabricate and install the appropriate vertical supports without making this a huge production. And I also wanted to make sure the decorative panels were built to last and didn’t fall because they are not secured properly.

Then it occurred to me, I really needed to do a spike to better understand what I was up against. To remove the unknown, determine the effort involved and material needed. I had some scrap lattice and frame left over from my previous project, so I assembled a small panel the way I thought I wanted to do the whole deck. Given that it was a spike, I was prepared and expecting to throw out the panels I was building, just like I would do with code on an agile development project.

When I positioned my first panel in place below the deck, it fit beautifully and I was able to find two excellent and easy locations to secure vertical posts to which the panel was screwed. I was feeling good, but realized that the panel I installed was different from all the other locations and that it was likely easier to install. So, just like with software, if you find your spike does not represent the true unknown, you need to continue the spike. So I decided to continue building a second panel that would be installed in a more typical and potentially more difficult location.

After building the second panel, I held it in position and pondered how the heck to install it without any vertical supports. At this point, it would have been extremely helpful to have a pair carpenter to collaborate with on ideas, but I was out of luck, I was alone. After inspecting the way the panel met the bottom of the deck I realized an easy and hidden way to use metal strapping to secure a post just about anywhere I needed a post. Using this technique, I was able to successfully and easily screw the second panel to its supports. At this point I felt I learned enough and brought the spike to an end.

description

Photo of one installed panel that was built during the spike

With the information I learned from the spike, I was able to estimate the materials needed, the cutting I had to do and the time to cut, assemble and install. Given these discoveries I knew how much it was going to cost and roughly how long it would take to build and install the remaining panels for the deck.

Just like with code built in a spike, I ended up discarding the first two panels I built during the spike because I built them with an emphasis on experimentation and was not concentrating on quality.

The most significant benefit from the spike was the pressure lifted from my shoulders by just committing to do a single panel in a spike and letting go of the complexities for the remainder of the deck skirt. Just like in a software spike, I only addressed the problem under examination and ignored all other concerns. That shift in mindset was freeing!

Open Source Software (OSS) Evaluation

May 1st, 2009 Posted in Open Source | No Comments »

There are differences in evaluating and comparing open source software (OSS) products, as opposed to commercial packages. A number of key OSS criteria are also described. This information is based on years of experience at Redpoint , using OSS and evaluating both open source and commercial software for clients.

Evaluating OSS effectively requires different criteria than the ones used for commercial software. Commercial software selection techniques and tools are inadequate in making informed choices about OSS. Different OSS products will have strengths in different functional and technical areas. Some are growing and vibrant with strong growth in the developer and end-user community, others may be stagnant.

The traditional commercial software evaluation process involves establishing software requirements/functionality evaluation criteria, reading industry analyst reports, meeting with sales and technical pre-sales teams and negotiating licensing and support costs. An in-depth evaluation of commercial software will involve talking to a few reference customers and reviewing the financial stability of the software vendor and the longevity of their product.

Much of the information that is used for the commercial software evaluation is obtained from the software vendor’s sales team. When evaluating OSS, there typically aren’t any sales teams, no on-site demos by the sales team, no glossy sales brochures that highlight product advantages, no advertising and, as a result, the process needs to be different. Also, unlike commercial software, it is not always easy to determine who else is using an OSS product.

Industry analyst reports on OSS are scarce and the information is usually limited. Typically, OSS evaluations focus on the few leading OSS initiatives such as Apache, Linux, MySQL, etc. When evaluating an open source software package, it is important to focus on the following categories:

  • Product Capabilities
  • Quality
  • Integration and Dependencies
  • OSS Community
  • Support

Product Capabilities

It is usually easy to identify and verify the capabilities of an OSS product. Most groups clearly document their features and exaggerations of their capabilities are not typical as they will generate support email and unfavorable discussions in their community. Also, these groups are typically looking for developers to implement their missing feature so they have an incentive to be honest about the capabilities.

Open source products many times have a different focus because of their origins or because of the influence of the developers that initially developed it. Also, OSS tends to evolve and sometimes take on different focus. It is important to consider the focus of a product and how it has evolved to get an indication of where the product may evolve in the future.

Although all OSS can be modified, it is important to understand what modifications are in-line with the product direction so they are within the upgrade path in the future. Most CRM OSS provides a mechanism to customize the software. However, the technique and range of customization that is allowed varies greatly among the products.

Quality

In addition to inspecting the code, development approach, documentation, build environment, testing strategy and general product literature, inspecting the bug database, which is usually public, is a good way to understand the number of bugs in a system. This will indicate the number of high-visibility bugs outstanding and the length of time it takes for typical bugs to get fixed.

Integration and Dependencies

Most OSS list the other OSS or commercial products with which they integrate. The products with which they integrate and the way in which the OSS integrates often says a lot about the general integration mechanism that is available in the product.

Product dependencies also give an indicator of how the product is intended to be integrated. Many times the dependencies are available explicitly from the OSS literature, other times it must be inferred by reviewing the installation and support documentation.

OSS Community

OSS projects can vary from a single developer to a distributed, world-wide, company-backed team. It is important to understand the project structure, its backing and its motivation. Some products are developed by commercial companies attempting to make their money from the customization, support and training. Other projects are only supported by key alliance partners that are a result of the OSS community.

Ideally the team is more than a single developer, but sometimes a very large, distributed team can hinder the ability for the product to have a clear, concise vision and to make targeted release dates.

The strength of the community is best gauged by the support and activity of the OSS wikis, forums and mailing lists. Typically, there are two mailing lists – one for users that includes help installing, upgrading, etc. and another list for the developers to discuss bugs, the roadmap, new features, etc.

Development Process and Source Code Control

The quality and development process is another important consideration for OSS that is not typically available for commercial software. The code can be reviewed and checked for adherence to general product and industry best practices and coding style.

The testing techniques used are also very important. Even if it is not documented, a quick check of the build script will typically reveal whether any unit testing is incorporated into the project. Overall, the software should have some documentation – both from an architectural and code-level perspective.

Even if you don’t plan to alter the OSS source code, it is important that the system can be built (i.e. compiled). Even if you don’t intend to contribute back to the OSS community, it is important to be able to rebuild the system if a show-stopper bug were encountered.

The release management techniques employed by the OSS development group is important. A quality product does not necessarily have a robust release process and does not necessarily have any easy upgrade path. A feel for the release process can be determined by reviewing the release notes with previous builds and determining whether frequent bug releases are distributed shortly after major product releases.

Support

The first level of support for typical OSS is by the community having access to the source. Many OSS bugs are identified and fixed by developers that use the product. Some fix and contribute back the fix to help ensure it is fixed in a future release, not because they feel they have to contribute to the community.

In order to perform fixes on the OSS source code, it must be logical, easy to understand and proper documentation must exist. Some documentation may be in-line in the source code and other documentation will vary from on-line to PDF format.

Most major OSS products have paid support options. This support can range from first-tier support, where the vendor will act as your first-line help desk, to second- and third-tier support where internal support will first attempt to identify and fix a problem before it is escalated to the paid support. The cost of the support decreases as the company takes on more initial support roles (e.g. help desk).

Paid support can range from typical commercial-style maintenance contracts to per-incident agreements. It is important to understand the typical turn-around time for support under the various support agreements.