Monthly Archives: January 2012

Video of the Day: Lets destroy a washing machine

Larry Battle

I love to program, and discover new tech. Check out my stackoverflow and github accounts.

More Posts - Website

Follow Me:
Twitter

IT Business Start Up Guide

IT Business Start up Guide

By Larry Battle
The following are 10 simple steps that you can take to successfully turn your idea into a marketable product or service. This guide is more geared to software startups.

  1. Create a Business Plan & Product Document
    Construct a product or service that solves a problem.
    Verify with others that the product or service is marketable.
    Or find at least 3 potential customers willing to buy your product or service.
    Note that you need to involve at least one customer throughout the entire start up process.
    Process: Develop a document that describes the following information.

    • Your product or service
    • Audience / Marketplace
    • Competition
    • Schedule with deadlines
    • Financial Projections
    • Startup cost
    • Business Plan (How are you going to make money?)
    • Market and Sells Strategy
    • Limitations
    • Team Members
    • Exit Plan
  2. Create a Requirements Document
    Define what your product or service does, what it come with and how you’re going to make the customer happy.
    Process: Develop a document that contains the following information.

    • Product Name
    • Deliverables (what is it you’re making)
    • Customer Requirements (What are the customer wants)
    • Functional Requirements (What are the functionalities)
    • Environment / System Requirements (What will this work with)
    • External components
    • Diagrams for Overview, Software and /or hardware
    • Hardware components
    • Limitations
    • Assumptions
    • Team Roles

  3. Create a Architecture Document
    This documents converts the requirement/product/services into simple abstract layers.
    Process: Develop a document that contains the following information.

    • Programming Language / Framework / Software Used
    • Layers
    • Customer Requirements to Layers Matrix
    • Diagrams of Layers and Data Flow
    • Simple Data flow
    • Use Cases
    • Simple GUI Mock-up
  4. Create a Detailed Design Document
    This document will discuss the sub-layers within the layers and define data-flow between them.
    Process: Develop a document that contains the following information.

    • Layers
    • Sub-layers
    • Diagrams of Layers, sub-layers and Data Flow
    • Data Flow Definitions
  5. Create a Test Plan Document
    Create Test cases.
    Process: Develop a document that contains the following information.

    • System Test Plan
    • Integration Test Plan
    • Unit Tests Plan

  6. Develop a working prototype of your Product or Service
    Develop a prototype of the working system.
    I prefer to use test driven development (TDD).
    TDD steps are to Write a test case, watch it fail, program it to pass, re-factor.
  7. Convert your product from beta to a final product / service
    Work with beta testers and customers to improve your product / service to a final working product or service.
  8. Perform System Verification
    Check to see if the system works and have fulfilled all the requirements.
  9. Get ready for release
    Create the following items

    • Product/Service Packaging
    • License and warranty
    • Support information
    • Company website release page
    • Demo setup
    • Payment System
    • User guide and other documentation
  10. Release and start marketing
    Release to the public, market the product/service and rake in the cash.
    You can do stuff like …

    • Video Demonstrations
    • Buy Ads
    • Press Release
    • Attention getting stunts

Done.

Larry Battle

I love to program, and discover new tech. Check out my stackoverflow and github accounts.

More Posts - Website

Follow Me:
Twitter

Code of the Day: Sentence Scrambler

Task:
There was a study going out a few years ago that said people can read words that are scrambled if the first and last character are left in place. So to help me practice Test Driven Development, I decided program it.
Example:
Correct: “Create attractive offers to reach the right customers”
Scrambled: “Cterae aacrtvitte offres to recah the rghit couemtrss”

For more information about the study visit: Cambridge Word Scramble Study: It’s Fake Already!

Code:

/**
* @author: Larry Battle
* @date: January 2, 2012
* @purpose: Scrambler - to scramble the alphabetical letters in word in such a way to make it still readable and understandable.
* @note: This can be accomplished by have perversing the word order but mixing up every letter in the word except for the first.
*/
var scrambler = {
	scrambleStr : function( str ){
		if( typeof str !== 'string' ){
			return -1;
		}
		return str.replace( /[^\s]*/g, function( word ){			
			return word ? scrambler.scrambleWord( word ) : word;
		});
	},
	scrambleWord :  function( str ){
		if( typeof str !== 'string' ){
			return str;
		}
		str = str.replace( /[a-z]*/ig, function( str2 ){
			if( str2 && str2.length > 2 ){
				str2 = str2.charAt(0) + scrambler.randomizeStr( str2.substring( 1, str2.length - 1 ) ) + str2.charAt( str2.length - 1 );
			}
			return str2;
		});
		return str;
	},
	randomizeStr : function( str ){
		if( typeof str !== 'string' ){
			return str;
		}
		return scrambler.makeArrayRandom( str.split( '' ) ).join( '' );
	},
	makeArrayRandom : function( arr ){
		var j, x, i = arr.length;
		while( i ){
				j = parseInt(Math.random() * i, 10);
				x = arr[--i]; 
				arr[i] = arr[j];
				arr[j] = x;
		}
		return arr;
	}
};

Input:

var str = "I can't believe what I'm reading."
scrambler.scrambleStr( str );

Output: (Possible outcome)

"I can't beilvee waht I'm rndiaeg."

Try it out for yourself.
Demo: Scrambler

Larry Battle

I love to program, and discover new tech. Check out my stackoverflow and github accounts.

More Posts - Website

Follow Me:
Twitter

Interview Programming Challenge: Print me a tree

Last Thursday I had a interview with a software company. During the interview that asked me write out a program which I was unable to complete within 10 minutes time. But I think am OK because their goal seemed to be to determine how I approached the problem rather than if I could produce a working program.

Anyhow, I decided to finished the program during my spare time in case if it every comes up again. And here it is.

Question: (Not exact wording)
Design a program in any language that will print a tree using only UNICODE or/and ANSI characters. The program should accept user input an integer value to set the base of the tree.
Example:

// base length is 7
   *
  ***
 *****
*******
   *

My Program
I decided to use Groovy and Test Driven Development to solve this problem. After a little bit of thinking I managed to come up with the following two files that create a working program.
Tree.groovy – Program that prints the tree
TreeTest.groovy – Test cases for Tree.groovy

TreeTest.groovy (Test Cases)

/**
* @author Larry Battle
* @date 1/3/2011
* @purpose Provide test cases for the Tree class.
*/
import Tree;
 
class TreeTest extends GroovyTestCase{
    private Tree tree = new Tree();
    private testValues = [
        [baseLength:-1, level:-1, length:0],
        [baseLength:1, level:0, length:1],
	[baseLength:1, level:0, length:1],
	[baseLength:1, level:5, length:0],
        [baseLength:1, level:9, length:0],
        [baseLength:2, level:0, length:1],
        [baseLength:2, level:2, length:1],
	[baseLength:2, level:5, length:0],
	[baseLength:6, level:0, length:1],
	[baseLength:6, level:2, length:5],
        [baseLength:6, level:3, length:6],
        [baseLength:6, level:4, length:1],
        [baseLength:6, level:5, length:0],
        [baseLength:7, level:0, length:1],
        [baseLength:7, level:2, length:5],
        [baseLength:7, level:3, length:7],
        [baseLength:7, level:4, length:1],
        [baseLength:7, level:5, length:0]
    ];
    void testHeight(){
        def vals = [ 0:0, 1:1, 2:3, 3:3, 4:4, 7:5, 40:22 ];
        def msg;
        vals.each{
            msg = "baseLength of {$it.key} should have height of {$it.value}";
            assert tree.getHeight( it.key as short ) == it.value : msg;
        }
    }
    void testTreeBranchLength(){
        def msg; 
        def length;
        testValues.each{ obj ->
            length = tree.getBranchLength( obj.level, obj.baseLength );
            msg = "BaseLength $obj.baseLength at Level $obj.level should be $obj.length, not $length";
            assert length == obj.length : msg;
        }
    }
// Other test cases not included.
}

Tree.groovy

/**
* @author Larry Battle
* @date 1/3/2011
* @purpose Tree Interview Question: Display a tree in ansi format with a specified integer base length.
*/
// function documentation excluded.
class Tree{
    short getHeight( baseLength ){
        short height = 0;
        if( baseLength > 0 ){
            height = 1;
            if( baseLength > 1 ){
                height += Math.floor( baseLength / 2 ) + 1;
            }
        }
        return height;
    }
    short getBranchLength( levelNum, baseLength ){
        short length = 0;
        short height = getHeight( baseLength );
        if( levelNum > -1 && height > levelNum ){
            if( height - levelNum == 2 ){
                length = baseLength;
            }else{
                if( height - levelNum == 1 ){
                    length = 1;
                }else{
                    length = 2 * levelNum + 1;
                }
            }
        }
        return length;
    }
    short getWhiteSpaceOnLeftNum( levelNum, baseLength ){
        short i = 0;
        short height = getHeight( baseLength );
        if( levelNum > -1 && height > levelNum ){
            if( height - levelNum == 2 ){
                i = 0;
            }else{
                if( height - levelNum == 1){
                    levelNum = 0;
                }
                i = Math.floor( baseLength / 2 ) - levelNum;
            }
        }
        return i;
    }
    String getTreeBranch( levelNum, baseLength ){
        char x = '*';
        short xNum = getBranchLength( levelNum, baseLength );
        short spaceNum = getWhiteSpaceOnLeftNum( levelNum, baseLength );
        String str = "";
        spaceNum.times{
            str += ' ';
        }
        xNum.times{
            str += x;
        }
        return str;
    }
    String[] getTreeAsStrArr( short baseLength ){
        short height = getHeight( baseLength );
        return (0..height-1).collect{
            return getTreeBranch( it, baseLength );
        }
    }
    void printTree( short baseLength ){    
        if( 1 > baseLength || baseLength > 49 ){
            throw new Error( "BaseLength must be bigger than 1 and less than 50." );
        }
        String[] strArr = getTreeAsStrArr( baseLength );
        println strArr.join( '\n' );
        println "------Base length = $baseLength -------";
    }
    static void main( String[] args ){
        Tree a = new Tree();
	def vals = [1,2,6,7,49];
	if( args.length ){
		vals = [];
		args.each{
			vals.push( Integer.parseInt( it ) );
		}
	}
	vals.each{
		a.printTree( it as short );
	}
    }
}

Output ( Run Tree.groovy 2 7 12 > output.txt )

 *
**
 *
------Base length = 2 -------
   *
  ***
 *****
*******
   *
------Base length = 7 -------
      *
     ***
    *****
   *******
  *********
 ***********
************
      *
------Base length = 12 -------

Larry Battle

I love to program, and discover new tech. Check out my stackoverflow and github accounts.

More Posts - Website

Follow Me:
Twitter