Resources

Certified–Professional Scrum Master-I(PSM-I)

August 14, 2013 Agile, Announcements, Certification, Development Process, KnowledgeBase, Methodology, Scrum No comments

Before I joined UnitedHealth Group as a Consultant in Jul 2010, I didn’t even hear about of Agile or Scrum.I have been working in an Agile environment for last 3 years and it was really interesting experience to develop high value applications and products using Scrum. I worked on few projects during the tenure as a Agile Development Team member and acted as Scrum Master in building some high quality mobile applications. As a team we enjoyed working together in Agile Environment.  Now I am confident enough to say that I know bits and pieces of scrum. Frankly speaking I love to preach about Scrum. 

What is Scrum? :  for those who does not know about Scrum

Scrum is an iterative and incremental agile software development framework for managing software projects and product or application development. Its focus is on “a flexible, holistic product development strategy where a development team works as a unit to reach a common goal” as opposed to a “traditional, sequential approach”.

Scrum enables the creation of self-organizing teams by encouraging co-location of all team members, and verbal communication between all team members and disciplines in the project.

A key principle of Scrum is its recognition that during a project the customers can change their minds about what they want and need (often called requirements churn), and that unpredicted challenges cannot be easily addressed in a traditional predictive or planned manner.

As such, Scrum adopts an empirical approach—accepting that the problem cannot be fully understood or defined, focusing instead on maximizing the team’s ability to deliver quickly and respond to emerging requirements.

Why is it called ‘Scrum’?

In rugby football, a scrum refers to the manner of restarting the game after a minor infraction. In the early 1990s, Ken Schwaber used what would become Scrum at his company, Advanced Development Methods, and Jeff Sutherland, with John Scumniotales and Jeff McKenna, developed a similar approach at Easel Corporation, and were the first to refer to it using the single word Scrum.

[Ref: Wikipedia]

If you are interested to know more about Scrum visit the wikipedia page: http://en.wikipedia.org/wiki/Scrum_(software_development)

There is two professional certifying authorities for obtaining a Certification in Agile Scrum.

1. ScrumAlliance.org –> provides the Certified Scrum Master(CSM) certification.

  • Any one who attend a training/course(Certified Scrum Master course) by a Certified  Scrum Trainer(CST), will be able to get this certification.
  • Course Training Cost  is little costly comparing to PSM-1.
  • Assessment is just for the sake, you will get Certificate even through you didn’t do well in the assessment.
  • The certification has a validity of 2 years, and you will have to renew every 2 years($150).

2. Scrum.org –> by Scrum’s co-creators (Ken Schwaber & Jeff Sutherland)  – provides Professional Scrum Master(PSM) 1 and 2 certifications.

  • This certification is based on real Assessment of your Scrum knowledge.
  • You will have to score 85% out of 100 to get this certification.
  • This certification will not expire.
  • PSM-1 costs 100$

Both certifications has it’s own value in the market, since Scrum.org is relatively new comparing to ScrumAlliance, you will see more organization focusing towards CSM. But trend has changed and either CSM or PSM would be good enough to prove your proficiency in Scrum Development and to work in a Scrum Development Team.

Even though have completed the PSM training in Jan 2013, it took a while for me to write the exam, due to priority activities at the workplace.  But  I just cleared Scrum.org’s – Professional Scrum Master-1(PSM-1) certification.  Glad that I cleared it and now I am among those 11k – PSM-I certified developers.

image

[PSM -I – Badge]

To know more about Scrum and Certifications visit the following links:

CSM  –http://www.scrumalliance.org/certifications/practitioners/certified-scrummaster-(csm) 

PSM-I  – https://www.scrum.org/Assessments/Professional-Scrum-Master-Assessments/PSM-I-Assessment

PSM-II  –  https://www.scrum.org/Assessments/Professional-Scrum-Master-Assessments/PSM-II-Assessment

The Scrum Guide in one location: www.ScrumGuides.org

Zip(Archive) API’s in .NET Framework 4.5 – ZipArchive Class

October 22, 2012 .NET, .NET Framework, .NET Framework 4.5, All, Back-2-Bascis, C#.NET, Codes, CodeSnippets, General, Help Links, KnowledgeBase, Microsoft, Samples, VB.NET, VisualStudio, VS2012 1 comment

With release of .NET Framework 4.5, Microsoft has introduced new classes in to System.IO.Compression namespace. These classes will add the necessary programming support for Zipping(Achiving), and Extracting support for Zip Files in your .NET Source Code.

Below are the newly introduced classes as part of .NET Framework 4.5:

ZipArchive – Represents a package of compressed files in the zip archive format.

ZipArchiveEntry – Represents a compressed file within a zip archive.

ZipFile – Provides static methods for creating, extracting, and opening zip archives.

ZipFileExtensions – Provides extension methods for the ZipArchive and ZipArchiveEntry classes.

In this blog post I am going to discuss about ZipArchive class which will help you with most of the important tasks in Archiving a file or folder using .NET.

The ZipArchive class enables you to work with a package of compressed files. The package contains an entry for each compressed file. You can:

  • Retrieve an entry by using the GetEntry method.
  • Retrieve the entire collection of entries by using the Entries property.
  • Create a new entry in the package by calling the overloaded CreateEntry method.

If you add reference for the System.IO.Compression.FileSystem assembly in your project, you can access three extension methods (from the ZipFileExtensions class) for the ZipArchive class: CreateEntryFromFile, CreateEntryFromFile, and ExtractToDirectory. These extension methods enable you to compress and decompress the contents of the entry to a file.

The System.IO.Compression.FileSystem assembly is not available for Windows Store apps.

In Windows Store apps, you can compress and decompress files by using the DeflateStream or GZipStream class, or you can use the Windows Runtime types Compressor and Decompressor.

Here is the quick sample that would help you to understand how to use ZipArchive class. Code is self explanatory – hope that helps. There are three methods ZipFiles – zip all files in a folder, ExtractFile – to extract files with specificname, ExtractFiles – extract multiple files.

Please go through the below code snippet. If you need additional information: visit MSDN Ref on System.IO.Compression, and in later posts we might discuss about the ZipFile class in more detail.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.IO.Compression;
using System.IO;

namespace ConsoleApp01
{
    class Program
    {
        static void Main(string[] args)
        {
            string targetZip = AppDomain.CurrentDomain.BaseDirectory + "\" + System.Guid.NewGuid().ToString() + ".zip";

            string sourceFolder = AppDomain.CurrentDomain.BaseDirectory + "\Sample01" ; //We are going to zip the whole contents of the folder. 

            Console.WriteLine(String.Format("Now Archiving the folder/file {0}, to target zip:{1} ", sourceFolder, targetZip));

            //Zipping the folder 
            ZipFiles(sourceFolder, targetZip);



            string extractFolder = AppDomain.CurrentDomain.BaseDirectory + "\" + Path.GetFileNameWithoutExtension(targetZip);

            Console.WriteLine(String.Format("Now Extracting the file {0}, to location:{1} ", targetZip, extractFolder));

            //Extract the entire Zip file 
            ExtractFiles(targetZip, extractFolder);



            //Extract files based on search pattern such as *.txt
            string extractFolder2 = AppDomain.CurrentDomain.BaseDirectory + "\" + Path.GetFileNameWithoutExtension(targetZip) + "12";

            Console.WriteLine(String.Format("Now Extracting the selected file(s) {0}, to location:{1} ", targetZip, extractFolder2));
            
            //Extract the entire Zip file 
            ExtractFiles(targetZip, extractFolder2, "*.txt");

            Console.WriteLine("Press any key to exit");

            Console.ReadKey();
        }

        /// <summary>
        /// Zips the files from the source folder - for now single level - assuming that we will be zipping all the files in a folder. 
        /// not the child folders and files in it, we will ignore it.
        /// </summary>
        /// <param name="sourceFilesFolderPath">The source files folder path.</param>
        /// <param name="targetZipFilePath">The target zip file path.</param>
        /// <param name="searchPattern">The search pattern.</param>
        public static void ZipFiles(string sourceFilesFolderPath, string targetZipFilePath, string searchPattern = "")
        {
            //if Source Directory exists. 
            if (Directory.Exists(sourceFilesFolderPath))
            {
                using (FileStream zipToOpen = new FileStream(targetZipFilePath, FileMode.OpenOrCreate))
                {
                    //Open Archieve for update
                    using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
                    {
                        //Getting directory info
                        DirectoryInfo dInfo = new DirectoryInfo(sourceFilesFolderPath);


                        //Getting all files list in the folder 
                        FileInfo[] filesList = dInfo.GetFiles(searchPattern);

                        if (String.IsNullOrEmpty(searchPattern)) //fail safe to retrieve all
                            filesList = dInfo.GetFiles();

                        if (filesList != null && filesList.Length > 0)
                        {
                            //Creating archieve entry for each file in the folder 
                            foreach (FileInfo file in filesList)
                            {
                                archive.CreateEntryFromFile(file.FullName, file.Name);
                            }
                        }


                    }

                }
            }
            else
            {
                throw new DirectoryNotFoundException(String.Format("Source folder: {0} not found",sourceFilesFolderPath);
            }

        }




        /// <summary>
        /// Extracts the files.
        /// </summary>
        /// <param name="sourceZipPath">The source zip path.</param>
        /// <param name="targetExtractPath">The target extract path.</param>
        /// <param name="conditionalExtractPattern">The conditional extract pattern.(OPTIONAL)</param>
        public static void ExtractFiles(string sourceZipPath, string targetExtractPath, string conditionalExtractPattern = "")
        {
            string zipPath      = sourceZipPath;  //Source Zip File 
            string extractPath  = targetExtractPath; //Path to Extract

            if (!Directory.Exists(targetExtractPath))
            {
                Directory.CreateDirectory(targetExtractPath);
            }

            using (ZipArchive archive = ZipFile.OpenRead(zipPath))
            {

                //STEP 1
                foreach (ZipArchiveEntry entry in archive.Entries)
                {
                    //Conditional extract
                    if (!String.IsNullOrEmpty(conditionalExtractPattern))
                    {
                        if (entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))
                        {
                            entry.ExtractToFile(Path.Combine(extractPath, entry.FullName),true);
                        }
                    }
                    else // extract all..
                    {
                        entry.ExtractToFile(Path.Combine(extractPath, entry.FullName),true);
                    }

                    
                }

                //Or EXTRACT ALL USING 

                //STEP 2
                //archive.ExtractToDirectory(targetExtractPath);

            } 

        }




        /// <summary>
        /// Extracts the file.
        /// </summary>
        /// <param name="sourceZipPath">The source zip path.</param>
        /// <param name="targetExtractPath">The target extract path.</param>
        /// <param name="extractFileName">Name of the extract file.</param>
        public static void ExtractFile(string sourceZipPath, string targetExtractPath, string extractFileName)
        {
            string zipPath = sourceZipPath;  //Source Zip File 
            string extractPath = targetExtractPath; //Path to Extract

            using (ZipArchive archive = ZipFile.OpenRead(zipPath))
            {
                //STEP 1
                foreach (ZipArchiveEntry entry in archive.Entries)
                {
                    //Conditional extract
                    if (!String.IsNullOrEmpty(extractFileName))
                    {
                        //Extract the file.
                        if (entry.FullName.EndsWith(extractFileName, StringComparison.OrdinalIgnoreCase))
                        {
                            entry.ExtractToFile(Path.Combine(extractPath, entry.FullName), true);
                        }
                    }

                }

            }

        }

    
    }
}


Professional Scrum Development using Visual Studio 2010 – Links & Resources

October 2, 2011 All, Books I Like, Development Process, General, KnowledgeBase, Scrum No comments

 

Channel 9 – MSDN – Ken Schwaber and and Sam Guckenheimer: Professional Scrum Development

Ken Schwaber, co-inventor of Scrum, and Sam Guckenheimer, Group Product Planner for Visual Studio discuss the Professional Scrum Developer (PSD) program around VS 2010. PSD includes a unique and intensive five-day experience for software developers. The course guides teams on how to turn product requirements into potentially shippable increments of software using Visual Studio 2010, the Scrum framework, and modern software engineering practices.

Ken and Sam talk about how Scrum.org and Microsoft collaborated on a new standard to make development teams more effective. Rather than treat process, tooling and engineering practices as separate topics and leaving their application as follow-up homework, both organizations saw the need to make teams effective in the application within a training setting. PSD classes are available worldwide at VS 2010 launch from certified trainers who are assessed, trained, mentored, and monitored by Scrum.org and Microsoft.

 

Introducing Visual Studio 2010 Scrum 1.0

 

Introducing Visual Studio 2010 Scrum 1.0 Part II

 

More References:

Ken Schwaber’s – Scrum Guide

http://www.scrum.org

wikipedia on Scrum Development

Download:    Microsoft Visual Studio Scrum 1.0

Somasegar’s WebLog > Visual Studio Scrum 1.0

Tech Presentation Tips – Checklists for an effective presentation

April 19, 2011 All, General, Presentations, Resources No comments

Today I came across an article by Phil Haack through his tweet. The article is Presentation Tips Learned From My (Many) Mistakes .

A good informative article by Phil, by the way may of you know him through his blog http://haacked.com.

Phil has shared his past experiences and mistakes he done while doing Technical presentations. Which is kind of checklist before any presentation we are going to do. So please go through the links.. One special thing i liked from the post is Phil mentioned – Byron Pulsifer says, every mistake is a an “opportunity to learn”. That’s a truth and I believe I always followed that through my life.

Phil has shared few other links which may useful for us

Scott Hanselman’s Tips for a Successful MSFT Presentation

Venkatarangan’s Blog about Tips for doing Effective Presentation

and the Phil Hack’s article Presentation Tips Learned From My (Many) Mistakes

So Beginners, experienced presenters: guys read through it. It will be really helpful for your future presentations.

Introducing you the “Martin Fowler” : The king of Software Development

February 27, 2011 All, Development Process, General, Patterns&Practices, Resources, Scrum No comments

Martin Fowler is an author and international speaker on software development, specializing in object-oriented analysis and design, UML, patterns, and agile software development methodologies, including extreme programming.

Martin Fowler

Fowler is a member of the Agile Alliance and helped create the Manifesto for Agile Software Development in 2001, along with more than 15 co-authors. He maintains a bliki, a mix of blog and wiki. He popularized the term Dependency Injection as a form of Inversion of Control. And lots of interesting articles on “MVP”, “MVC” and other Enterprise Design Patterns.

Fowler’s own website http://martinfowler.com is an interesting website with lots of stuff about Enterprise Design Patterns, Application Architecture.

He has authored lots of interesting technical books such as
Patterns of Enterprise Application Architecture

Refactoring

and other

  • Fowler, Martin. Analysis Patterns: Reusable Object Models. Addison-Wesley. ISBN 0-201-89542-0.
  • Fowler, Martin; Kent Beck. Planning Extreme Programming. Addison-Wesley. ISBN 0-201-71091-9.
  • Fowler, Martin (September 2003). UML Distilled: A Brief Guide to the Standard Object Modeling Language (3rd ed. ed.). Addison-Wesley. ISBN 0-321-19368-7.
  • Fowler, Martin; Kent Beck, John Brant, William Opdyke, and Don Roberts (June 1999). Refactoring: Improving the Design of Existing Code. Addison-Wesley. ISBN 0-201-48567-2.
  • Fowler, Martin; David Rice, Matthew Foemmel, Edward Hieatt, Robert Mee, and Randy Stafford (November 2002). Patterns of Enterprise Application Architecture. Addison-Wesley. ISBN 0-321-12742-0.  (Jolt productivity award 2003 [3])
  • Fowler, Martin (September 2010). Domain-Specific Languages. Addison-Wesley. ISBN 978-0-321-71294-3.
  • Marting Fowler is the master you all would love to follow. I admire his works..

    With help of Wikipedia & my Craziness..