September 2010
M T W T F S S
« Apr    
 12345
6789101112
13141516171819
20212223242526
27282930  
Wikipedia Affiliate Button

Agile Software Development in a Nutshell

Agile methodology uses war room type collaboration and short iterations to produce incremental versions of software to meet the changing requirements of stakeholders.

  • Working software is key measurement
  • Requirements are done in iterations
  • A War Room type collaboration
  • Minimal documentation -  Just enough documentation is created and maintained

Basic principles

  • Customer satisfaction by rapid, continuous delivery of useful software
  • Welcome changing requirements
  • Working software is delivered frequently
  • Working software is the principal measure of progress
  • Close, daily collaboration between business and IT
  • Face-to-face conversation is the best form of communication
  • Projects are built around motivated individuals, who should be trusted
  • Continuous attention to technical excellence and good design
  • Self-organizing teams
  • Regular adaptation to changing circumstances

To Make it Work

  1. Adopt short iterations no more than four weeks in length
  2. Focus on the delivery of working software,  as a general rule, an iteration should be seen as a failure if all it produces is documentation
  3. Promote quality oriented techniques such as test first development, coding conventions and refactoring
  4. Remove as many barriers to communication and collaboration as you possibly can by making it as easy as possible for people to work together.
  5. Make sure that everyone involved, including business stakeholders, data professionals and quality assurance professionals work in an evolutionary if not Agile manner
  6. Streamline RUP as much as possible, less is definitely more

From: Overcoming the Myths of IBM Rational Unified Process (RUP) and Agile Development

Myths

  • No documentation
  • Undisciplined
  • Not scalable to large, complex projects
  • No traceability
  • Issues and risk management is not done

Resources

Overcoming the Myths of IBM Rational Unified Process (RUP) and Agile Development -IBM
Manifesto for Agile Software Development – Agile Manifesto
The Experts’ Take on Business Analysis and Agile – Modern Analyst
RUP and Agile Development Overcoming Myths – IBM
Agile software development – Wikipedia, the free encyclopedia

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Furl
  • LinkedIn
  • Print
  • Reddit
  • StumbleUpon
  • Technorati
  • FriendFeed
  • Mixx
  • Ping.fm
  • Twitter
  • Yahoo! Bookmarks

The IT Value Stack

In The IT Value Stack, Ade McCormack looks to bridge the gap between IT and business.  Using his “IT Value Stack” Ade teaches us how to get these two groups to work together.  I believe every company runs into this issue.  The IT group believes they need to have the latest and greatest technologies to get things done and the business side wants to know what they are getting for their dollars.  Below are the seven steps to get these two groups to mesh.

Strategy entwinement

“Involve IT experts in strategy design”

Your business depends on IT to get through the day, you have computers, networks and the information stored on this equipment.   If you try to implement a strategy without the IT group, then you could be looking at serious delays and even costly mistakes.

The business side and the IT side may seem to speak different languages, but both can learn to translate one another’s message into actual English.  Work together.

Process entwinement

“IT personal should be business process consultants”

The business side needs to identify and document all their business processes and the IT side needs to use this information to build reliable and stable procedures for supporting the process.  It’s not just hardware and software.

People entwinement

“Link IT personal with users, collaborate”

Collaboration between IT and non-IT areas is a crucial step toward turning people into advocates instead of protesters of technology.  If your employees are unwilling to collaborate, then find employees that are willing to work together.  Employees that have business and technology abilities is a plus.

Technology management

“Manage IT so it works for your company”

Have a management team that is technology savvy. If you don’t, have a CIO that has the communication skills to get upper management up to speed.

Hire IT personnel that have both technical expertise and people skills.  Instill in your employees that collaboration is a very important objective.

Service management

“Include service level agreements on all projects”

IT goes beyond problem solving, it must provide excellent service.  Clearly define your service levels to your users and have well trained support personnel to handle issues that arise.  Reward exceptional service, because good service will build bonds between your IT staff and users, and it will reflect on your bottom line.

Circulation management

“Make information accessible to all”

Your data is your business.  IT needs to transform that data into information, which will become knowledge, and eventually wisdom!  To provide information properly and to all who need to know is not a cut and dry process.  Many variables can impede the process like politics, poor management, and short sidedness.   Strong approaches must be defined to circulate data throughout your business and managing the flow of data is critical.

Value creation

“IT needs to show executives how they help the bottom line”

The actual value from IT investment lies with everyone in the company, from users to the company’s board.

Ade’s tips on creating technological value:

  • Make sure IT decisions are technically sound and solid for the business as a whole
  • Teach non-IT personnel to become technology savvy
  • Run the IT department as a business with high standards
  • Make sure information circulates and builds wisdom
  • Measure and identify your IT value
  • Control supplies
  • Be a leader
Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Furl
  • LinkedIn
  • Print
  • Reddit
  • StumbleUpon
  • Technorati
  • FriendFeed
  • Mixx
  • Ping.fm
  • Twitter
  • Yahoo! Bookmarks

Great jQuery Resources

JqueryIn my last post I talked about PHP resources. In this post I have compiled my best jQuery resource.  I hope you find this useful.

Please add you favorite in the comment area.

 

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Furl
  • LinkedIn
  • Print
  • Reddit
  • StumbleUpon
  • Technorati
  • FriendFeed
  • Mixx
  • Ping.fm
  • Twitter
  • Yahoo! Bookmarks

PHP Resources

During development, you run across resources that are invaluable. But, if you don’t take the time to save those resources, then you may not be able to find them again for later use. However, if you bookmark a resource in Delicious then you can reference it when needed. I also subscribe to many blog feeds, so I’m also bookmarking the posts I know I will reference in the future. Below are a few of my favorite PHP resources. I hope you find them as useful as I do.

What are your favorite PHP resources that you bookmark?

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Furl
  • LinkedIn
  • Print
  • Reddit
  • StumbleUpon
  • Technorati
  • FriendFeed
  • Mixx
  • Ping.fm
  • Twitter
  • Yahoo! Bookmarks

Managing Hierarchical Data in SQL

SQL databases are not designed for hierarchical data since the data is stored in flat relational tables with no built in parent-child relationship methods (Oracle does have the connect_by function to help).  XML databases on the other hand are built for hierarchical data.

So with SQL databases we have a problem that requires a solution.  Thanks to the SQL gurus out there we have three models to resolve this issue.  In this post I will point you to these resources.

What is hierarchical data?  The best example of a hierarchical model is a company organizational chart; other examples are product categories, forum categories and site maps.  With a hierarchical model you have a tree like structure that needs to be traversed to get to the node you’re looking for.

Hierarchical Data

The Adjacency list model

This is the simplest method to implement, but it’s the slowest due to recursion.  So if you know the table will be large, use one of the other models. For a small table this would be the answer.

You simply add a parent column that links to the parent entry.  The root entry will be NULL because it does not link to any other node.

Node Parent Node
Home
Products Home
CD’s Products
LP’s Products
Artists Home
Genre Artists
R&B Genre
Rock Genre
About US Home
CAT_ID NAME CAT_PARENT
1 Home
2 product 2
3 CD’s 2
4 LP’s 2
5 Artists 1
6 Genre 5
7 R&B 6
8 Rock 6
9 About Us 1

Traversing the table

SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4

FROM category t1

LEFT JOIN category  t2 ON t2.cat_parent = t1.cat_id

LEFT JOIN category  t3 ON t3.cat_parent = t2.cat_id

LEFT JOIN category  t4 ON t4.cat_parent = t3.cat_id

WHERE t1.name = ‘Home’;

LEV1 LEV2 LEV3 LEV4
Home Artists Genre R&B
Home Artists Genre Rock
Home About Us
Home product LP’s
Home product CD’s

Resources

Trees in Oracle (using connect by)

Adjacency list defined

Adjacency list model (Joe Celko )

Materialized Path model

The idea with the Materialized path model is to link each node in the hierarchy with its position in the tree.  This is done with a concatenated list of all the nodes ancestors.  This list is usually stored in a delimited string.  Note the “Linage” field below.

CAT_ID NAME CAT_PARENT Lineage
1 Home .
2 product 1 .1
3 CD’s 2 .1.2
4 LP’s 2 .1.2
5 Artists 1 .1
6 Genre 5 .1. 5
7 R&B 6 .1. 5.6
8 Rock 6 .1. 5.6
9 About Us 1 .1

Traversing the table

Select lpad(‘-’,length(t1.lineage))||t1.name listing

From category t1, category t2

Where t1.lineage like t2.lineage ||’%’

And t2.name = ‘Home’;

Order by t1.lineage;

Listing
Home
-product
–CD’s
–LP’s
-Artists
–Genre
—R&B
—Rock
-About Us

Resources

More Trees & Hierarchies in SQL

Trees in SQL

Using Materialized Path to create a paths table

The Nested Set Model

This is the best model for selecting information out of a relational database but slow in adding and deleting. So if you have a static structure this would be your choice.

This model has been championed by Joe Celko and is detailed in his articles and book “Trees and Hierarchies in SQL for Smarties
“.

Nested Set Model

Nested Set Model

CAT_ID NAME CAT_PARENT Left Right
1 Home 1 18
2 product 1 2 7
3 CD’s 2 3 4
4 LP’s 2 5 6
5 Artists 1 8 15
6 Genre 5 9 14
7 R&B 6 10 11
8 Rock 6 12 13
9 About Us 1 16 17

Traversing the table

(t2 is the parent)

SELECT  lpad(‘-’,COUNT(t2.name)-1)||t1.name,t1.left_node

FROM category t1,category t2

WHERE t1.left_node BETWEEN t2.left_node AND t2.right_node

GROUP BY t1.left_node,t1.name

order by t1.left_node;

Listing LEFT_NODE
Home 1
-product 2
–CD’s 3
–LP’s 5
-Artists 8
–Genre 9
—R&B 10
—Rock 12
-About Us 16

Resources

Storing Hierarchical Data in a Database (using PHP)

Managing Hierarchical data in MySql

Sql for Smarities article (Joe Celko)

Nested Set Model defined

Definitions

Node – Abstract basic unit used to build linked data structures. Each node contains data and possibly links to other nodes.

Root – Node with no parents.

Leaf – Node with no children

Child – direct subordinate node.

Sibling – Node that shares the same parent.

Ancestors – Parent or other superior node.

Descendants – all subordinate nodes

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Furl
  • LinkedIn
  • Print
  • Reddit
  • StumbleUpon
  • Technorati
  • FriendFeed
  • Mixx
  • Ping.fm
  • Twitter
  • Yahoo! Bookmarks

Removing duplicate rows (SQL)

Oracle MySql DuplicatesAt least once in your career you will have to deal with duplicate rows causing havoc on you application.  This post will help you get through that dilema.  I have Oracle and MySql examples below.

ORACLE Specific

With Oracle with have the luxury of ROWID which uniquely identifies a row in an Oracle table. We will use this pseudo column to remove the duplicates.

Simple Method

This is the simplest method which removes the latest duplicate row added. If you want to remove the earliest you need to change  MAX to MIN and replace “less than”(<) with “greater than”(>).

DELETE FROM [TABLE] A
WHERE ROWID <  ( SELECT max(ROWID)
FROM [TABLE] B
WHERE A.[PRIMARY KEY FIELDS] = B.[PRIMARY KEY FIELDS]);

Another method with constraints

This is another method you can use if you have constraints. This method uses the Oracle function “Exists” which checks for the existence in a sub-query.

DELETE FROM [TABLE] A
WHERE CONTRAINT = [VARIABLE]
AND EXISTS ( SELECT ‘X’
FROM [TABLE] B
WHERE A.[PRIMARY KEY FIELDS] = B.[PRIMARY KEY FIELDS]
AND A.ROWID < B.ROWID);

MYSQL (These would also work in Oracle )

With MySQL  we do not have the tools that Oracle has to easily find the duplicates. But most MySql tables use an auto-increment ID field that helps us to identify the duplicates.

Simple Method

As with the Oracle method use the “greater than” sign to to keep the earliest row entered. We can change this  to pull the latest  by replacing “greater than” with “less than”.

DELETE A FROM [TABLE] as A, [TABLE] as B
WHERE A.[UNIQUE FIELD(S)] = B.[UNIQUE FIELD(S)]
AND A.ID > B.ID;

Without the ID field

Now it gets complicated in MySQL, we need to create a table with an unique ID then remove the duplicates. Once the dups have been remove  then  we can put the data back onto the original table.

Drop the dups table if it exists.

DROP TABLE IF EXISTS [TABLE]_dups;

Create the dups table.  This table will be the base table(table with dups) with the ID added.

CREATE TABLE [TABLE]_dups (
id INT(11) default NULL auto_increment,
[ALL TABLE COLUMNS],
PRIMARY KEY (id)
);

Insert into the dups table from the base table.

INSERT INTO [TABLE]_dups
SELECT NULL,[UNIQUE FIELD(S)]
FROM [TABLE];

Delete the dups using the SQL we used in the prior example

DELETE A FROM [TABLE]_dups as A, [TABLE]_dups as B
WHERE A.[UNIQUE FIELD(S)] = B.[UNIQUE FIELD(S)]
AND A.ID < B.ID;

Delete the Base table

DELETE FROM [TABLE];

Insert into the base table from the dups table.

INSERT INTO [TABLE]
SELECT [all columns less the ID field]
FROM [TABLE]_dups;

Remove the dups table

DROP TABLE [TABLE]_dups;

I hope this posts help you when you run into this problem… and we all run into this problem.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Furl
  • LinkedIn
  • Print
  • Reddit
  • StumbleUpon
  • Technorati
  • FriendFeed
  • Mixx
  • Ping.fm
  • Twitter
  • Yahoo! Bookmarks

Designing Web Interfaces

Bill Scott’s new book “Designing web Interfaces” has just hit stores. I attended a great web cast yesterday by the author Bill Scott of Yahoo. Check it out.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Furl
  • LinkedIn
  • Print
  • Reddit
  • StumbleUpon
  • Technorati
  • FriendFeed
  • Mixx
  • Ping.fm
  • Twitter
  • Yahoo! Bookmarks

Searching Oracle (Database/PLSQL)

Oracle Search

PL/SQL Search

During development things always change.  Column names change, columns may be added or removed from tables and so on.  When this happens, you need to go back to your PL/SQL programs and change the code. In some cases, you can just recompile the package or procedure to find the problems caused.   But that doesn’t always catch everything, especially when you have dynamic SQL.  So you should always run a PL/SQL search to find the column or text that has changed.

To do this, we use the  Oracle Data dictionary view  XXX_SOURCE (USER_SOURCE,  ALL_SOURCE,  or DBA_SOURCE depending on your access ) .  With USER_SOURCE you do not specify the owner since it only returns the source for the schema you’re logged into.

Below are SQL statements to find the text you’re looking for.

Using USER_SOURCE

SELECT type, name, line
FROM USER_SOURCE
WHERE UPPER(text) LIKE UPPER(‘%&SearchText%’);

Using DBA_SOURCE, or ALL_SOURCE

SELECT type, name, line
FROM ALL_SOURCE
WHERE OWNER = ‘&SCHEMA’
AND UPPER(text) LIKE UPPER(‘%&SearchText%’);

When you run a query above in SQL*Plus  you will be prompted for the  search text. Then, enter what you’re  looking for and you’re on your way.  These queries will return the following database types that contain the string your looking for :

  • Packages
  • Procedures
  • Functions
  • Triggers
  • Types

Database Search

To search for a given string in an entire Oracle database schema check out this awesome procedure by  David Yahalomsearch_db

If you have scripts or other methods to search an Oracle database, please add them in a comment.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Furl
  • LinkedIn
  • Print
  • Reddit
  • StumbleUpon
  • Technorati
  • FriendFeed
  • Mixx
  • Ping.fm
  • Twitter
  • Yahoo! Bookmarks

News Scroll using jquery

Using the jquery plugin ClipRegion ( for image scrolls ) I created a News Scroll to meet my needs. This scroll was built to be unobtrusive, so if javascript has been turned off, it still look presentable.

With JavaScript:

News Scroll

Without JavaScript (scroll buttons do not work):

News Scroll with JavaScript turned off

You can find a functioning sample page by clicking on the javascript image or click here.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Furl
  • LinkedIn
  • Print
  • Reddit
  • StumbleUpon
  • Technorati
  • FriendFeed
  • Mixx
  • Ping.fm
  • Twitter
  • Yahoo! Bookmarks

Welcome to Pure Performance

Welcome to the updated site of Pure Performance Inc.  This site will be used to update our clients and clients to be  with our current activities.  We will also be providing tips and tricks for PeopleSoft, Oracle, Web, & UNIX developers.

Enjoy -Mark

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Furl
  • LinkedIn
  • Print
  • Reddit
  • StumbleUpon
  • Technorati
  • FriendFeed
  • Mixx
  • Ping.fm
  • Twitter
  • Yahoo! Bookmarks