My MVP Award is Renewed!

Add Comment | Jul 02, 2009

mvp_logo

Yesterday I’ve been informed that I’ve gained the Most Valuable Professional award again for next year, in ASP.NET category. This is the third time I have received this award, which is pretty exciting.

Here is my MVP profile: https://mvp.support.microsoft.com/profile/Ashraful

Special thanks to few Microsoft employees including Technical Fellow Brain Harry, Sr. Program Manager Joe Stagner, Lead Product Manager Dan Fernandez and South Asia MVP Lead Abhishek Kant who encouraged and supported me in several ways last year.

Thanks Microsoft for this recognition, which will encourage me to keep my passion on MS products continued with more optimization and greater efforts.

Technorati Tags: ,,

Microsoft Day @ Dhaka: Community Feedback, Pictures and Resources

Add Comment | Jun 22, 2009

Thanks everybody who Participated in the event Microsoft Day @ Dhaka, held on 20 June 2009 at IDB Auditorium, Dhaka. It was an excellent gathering of 250+ professionals, specially developers in Bangladesh.

Besides the knowledge sharing stuffs, the event was very successful to create a social gathering of technical professionals. I was really found it pretty nice that, I have meet at least 20+ guys there, whom I knew and meet virtually before.

The good news for the community is, we will be organizing the similar events in futures and organize it in a better way based on community feedback we received.

Presentation Slides: Overview of Visual Studio Team System 2010

Here goes my presentation slides used in the event.

Pictures:

image-02 image-06 image-04 DSC00139 DSC00117 DSC00130

Community Feedback and Resources:

Check the facebook user group for related resources, other images etc. You can put your suggestions and feedback here in the msdnbangladesh site to make the future events better.

See You on Microsoft Day @ Dhaka!

One Comment | Jun 17, 2009

ScreenHunter_02 Jun. 04 16.46

Microsoft Community in Bangladesh proudly presents Microsoft Day @ Dhaka. This is a special day dedicated to all Microsoft technology professionals and students in Bangladesh. We will be having the best Microsoft community technologists from Bangladesh - Microsoft Most Valuable Professionals (MVPs) delivering sessions at the event.

This technology marathon is a great opportunity to learn from the best and network with each other.
Both Microsoft developers and networking professionals would find the event worth attending.

I am really very excited to be a part of this event, both as an organizer as well as as a speaker. I’ll be delivering speech there on Visual Studio Team System 2010.

If you not already registered, but don’t want to miss this cool event, register now at the msdn bangladesh site.

See you there!

Check below the agenda of this event.

AUDITORIUM – Dev Track

9:00 - 9:30: Opening Speech - Feroz Mahmood

9:30 - 10:30: Development in ASP.NET [LINQ, Web Forms, Dynamic Data] - Tanzim Saqib

10:30 - 11:15: My First ASP.NET MVC App - Mehfuz Hossain

11:15 - 11:45 : Unit Testing in MVC and Demo of dotnetshoutouts.com - Kazi Manzur Rashid

11:45- 12:30: Developing in Silverlight - Faisal Hossain Khan

12:30 - 1:30: Lunch

1:30 - 2:00 : Introduction to Sharepoint/ MOSS - Jannatul Ferdous

2:00 - 2:45: Production Challenges of ASP.NET Websites - Omar Al Zabir

2:45 - 3:15: Windows Azure - Ashic

3:15 - 3:45: Tea Break

3:45 - 4:30:  Overview of Visual Studio Team System 2010 - Mohammad Ashraful Alam

4:30 - 5:30:   Features of Windows 7 - IE8 and Windows Live Features - Omi Azad

BREAK OUT – IT Pro Track

9:00 - 9:30: Opening Speech - Feroz Mahmood [IN AUDITORIUM]

9:30 – 10:30: Exchange Server 2010

10:30 - 11:30: Windows Server 2008 - Virtualisation & HyperV

11:30 - 12:30: Talking Windows Server 2008 and R2 [Windows Client & Windows Server 2008 NAP – Better Together] - Anwar Hossain (Technical Specialist, MS Bangladesh)

12:30 - 1:30: Lunch

1:30 - 2:15:  Session on MS Project & EPM : M. Manzurur Rahman (CEO, ICT Alliance)

2:15 - 3:00: Office 2007

3:00 - 3:30: Tea Break

3:30 - 4:30:  Introduction to SQL Server 2008

4:30 - 5:30:   Features of Windows 7 - IE8 and Windows Live Features - Omi Azad [IN AUDITORIUM]

Technorati Tags: ,,

5 Quick Steps to Get Introduced with Visual Studio Team System and Team Foundation Server 2010 (Beta 1)

Add Comment | Jun 03, 2009

Last month (May 2009) Microsoft has released its first beta for Visual Studio Team System 2010 and Team Foundation Server 2010 release, two of the most waited and wanted  tools in developer community. From my point of view these two releases are going to be one of the most historical releases, as lots of really cool stuffs has been added with respect to the last version.

164__320x240_microsoft-announces-visual-studio-2010-and-ne-framework-4_l

However, as the Beta 1 releases are pretty infant, there are very limited resources available in the web and community, so I just wanted to gather all of the useful resources with respect to these two tools in one place, so that anyone can move forward from installation to first “Hello VSTS/TFS” excitement smoothly!

Step 1. What’s New on VSTS 2010 and TFS 2010

VSTSStadium_3

Well, you are really liking what the tools you are using, however you are pretty interested what are the cool stuffs that MS bring with VSTS 2010 and TFS 2010. Here we go:

Step 2: Installation Planning

Well, you are convinced VSTS 2010 and TFS 2010 new features are really cool. Now you need to plan, if your existing infrastructure is supported.

  • While VSTS 2010 installation is pretty simple, TFS 2010 installation stuffs are pretty large deal. Team System MVP Mike has provided an excellent diagram with respect to Microsoft Fellow Brian Harry’s post, which really shows on the fly which software installation are required/recommended/not supported while installing TFS 2010.

Step 3: Installer Download

Step 4: Installation Walkthrough

TFS

As soon as the required files are downloaded, you are ready to go start the installation.

  • Brian Keller provides an excellent walkthrough explaining the installation process of TFS 2010 Beta 1 in this Channel 9 video. It also includes installation process (along with all relevant download links/instruction) of other pre-requisites of TFS 2010, including Sql Server 2008 Beta 1 and supporting software as VSTS 2010.

Step 5: First Walkthrough with VSTS 2010 and TFS 2010

hero_2010_v3

And finally you are done with the installation! Great and congratulations! What what to do? Take some breath and move forward to the exciting world of VSTS 2010 and TFS stuffs, to see on hand and own eye, what really been implemented by MS guys.

  • Jason Zander, General Manager, Visual Studio, Developer Division provides a quick walkthrough from creating a simple WPF application to testing it using the latest cool features available in Visual Studio 2010 in this two part (part 1 and part 2) blog post.
  • Brian Keller’s video, as mentioned in the earlier section also have a quick walkthrough with TFS 2010 Beta 1. Really cool for beginners.
  • Although the earlier version of TFS (2008) is considered, but I really liked this walkthrough written by Mitch Denny, in this two part (part 1 and part 2) article. Extremely helpful and quick  resource to begin working with such a big developer platform like Team Foundation Server.
  • If you wish to know more about TFS but need a single resource to explore most of the powerful features, you can have a look on this book, hosted at CodePlex and published by the team. The TFS version is 2008, however hopefully they will publish the updated version of this book with respect to the latest version of TFS.

 

kick it on DotNetKicks.com

Aggregator Provider Pattern: An Extension of Provider Pattern

Add Comment | Apr 10, 2009

Definition

Aggregator Provider Pattern is an extension of Provider Pattern, which enables us to create and utilize multiple instance of the class having the same provider interface. In this pattern, there is an Aggregator class which implements the provider interface and contains a collection of instances of classes having the same provider interface.

The underlying caller class of this aggregator is simply unaware of how many provider instances do the caller Provider Aggregator contains, but all of the provider instances will be utilized with a single invocation from the caller class.

image

Comparison with Provider Pattern

Provider Aggregator Pattern is fully compatible with the existing Provider Pattern and the power of provider pattern can be easily extended to use multiple providers concurrently without any modification on the caller classes that were using a provider.

In short Provider Pattern is concerned with the utilization of one of the available providers; whereas Aggregator Provider Pattern is concerned with the utilization of all of the available providers at the same time.

Example Demonstration

Aggregator Provider Pattern is useful when we need a configurable framework to add/remove multiple services used by one caller/user. For instance we can have Logger Provider framework, where we need log info to be saved at text files, save to database and sent to email addresses and so on. Having an easy configurable framework along with Aggregator Provider Pattern will enable us to add or remove more services without requiring the code modification in the code that uses this provider.

image

Regarding the example case that just been described can utilize the Aggregator Provider Pattern, by creating the classes as illustrated above. The code snippet below shows a basic usage of this pattern, where the last line will perform the log operation based in list of log providers loaded in the aggregator class dynamically.

image

Download the latest white paper and samples from MSDN Code Gallery.

 

Check This Out: KOBE – Web 2.0 Service Development Resource Kit

Add Comment | Mar 11, 2009

KOBE

Kobe is a “getting started” resource kit on planning, architecting, and implementing Web 2.0 applications and services using the Microsoft Platform.

I am sure all of you who are interested in this area would be really benefitted with it.

Check this out: http://msdn.microsoft.com/en-us/architecture/bb194897.aspx

 

Email Reporter: VSTS 2008 Load Test Plug-in (V1.0) Released

Add Comment | Mar 09, 2009

image

Microsoft’s Visual Studio Team System Test Edition provides a powerful platform to perform high volume load testing. It also provides high end flexibilities to write and utilize external plug-in for extended functionalities.

Email Reporter: VSTS 2008 Load Test Plug-in enables users to send the load test reports to one or more pre-configured email addresses automatically, once a VSTS Load Test is completed. This open-source load test plug-in also provides supports for customization by which you can customize the reported performance data.

Download the latest version from: http://code.msdn.microsoft.com/erep

Smoke, Sanity and Regression Testing: The River Analogy

Add Comment | Mar 04, 2009

River

Roy Osherove written an excellent ‘Restaurant’ analogy to explain the difference between unit tests and integration tests. This type of analogy really becomes lot helpful to understand the concepts that are similar to each other, but has significant difference as well as.

In the world of testing, Smoke Testing, Sanity Testing and Regression Testing are very similar to each other: to ensure the quality running the test cases of an existing application with respect to a new feature being added/dropped/modified. They are targeted to find out the bugs in both UI and code level.

We can consider a River Analogy to understand the difference between Smoke Testing, Sanity Testing and Regression Testing better. Before moving to the analogy, lets consider the very basic definition of three of these testing:

  • Smoke Testing: Testing all (wide) areas related to new feature, not deeply. Determines if we should go for further testing.
  • Sanity Testing: Testing narrow areas related to new feature, deeply.
  • Regression testing: Testing all areas related to new feature, deeply.

If we consider a river, for instance, which has, for instance 1000 feet width, and contains “dusts” in its water (which can be considered as “bugs” in software), the goal for the corresponding three types of tests should be as follows:

For Smoke Testing: to find out the dusts in all over the surface of the river, which not includes the dusts under water.

For Sanity Testing: to find out the dusts in a specific width (for instance left side 200 feet), which not only includes the dusts on surface, but also includes the dusts under water, till the last depth of the river.

For Regression Testing: to find out all the dusts that are available on surface and under the water in all over the river.

Announcement: The Official Site of “ASP.NET Developers, Bangladesh” has Changed

Add Comment | Mar 02, 2009

untitled

ASP.NET Developers, Bangladesh is a group of professional developers, which focuses the latest development trends in ASP.NET and it’s related technologies. This professional group is member of INETA (International .NET Association) and Culminis.

The previous group site address has been changed, as it was hosted at MSN group, which was closed from March 2009. All of the previous group members and those who are not yet been member but interested to share and learn new cutting edge technologies are requested to join in the new site:

http://msdnbangladesh.net/groups/aspnet/default.aspx

The new site contains lots of resources including blogs, discussion forum, media gallery, code gallery etc.

Enjoy!

5 Reasons to Write Automated Tests for Generated Data Access Layer Code

Add Comment | Feb 26, 2009

 

image

Software Designers often have to face a common decision factor, that whether they need to design automated test (unit test, integration test etc) infrastructure for data access layer code, specially when the data access layer codes are written using code generator tool. Basically the straight forward answer as ‘Yes’ or ‘No’ in this regard depends of several situations/ factors such the size and budget of the project etc. Here are my 5 top reasons to write automated test (unit test, integration test etc) for generated data access layer code.

1. When the code generation template/logic itself contains bug

While using the code generators, it’s possible that the underlying code/logic of the code generators may contain bug! Having the automated test for the generated data access layer code greatly helps of indentify the ‘generated’ bugs!

2. When the code is not re-generated after to change of underlying database object

Well I swear my generated code engine is perfect (i.e. no bug on my generator engine/template logic)! Cool. I have generated the code perfectly. However I have changed the underlying database, but really forgot to re-generate the code using the code generator! Well that could be possible and can be detected if we have corresponding automated tests!

3. When the re-generated code is not perfect for the new changes of underlying database object

Well I swear my code has been re-generated after I have changed by database. Cool. But the initial version of generated code may work perfectly with the initial version of database objects. However, new bugs can be found/introduced in the generated code for the new changes of underlying database objects, which results updating the code generation logic. So, still you need automated tests for your data access layer code!

4. When custom code is added in the generated code

Sometimes custom code needs to be placed on the generated code. In those cases automated tests really helps a lot of indentify the bugs possibly placed in custom code in data access layer and/or in database stored procedure, function etc.

5. To check the perfect integration with database objects

Even the codes are generated/written for data access layer perfectly, but it’s still possible of failing the code running properly while the data access layer code and database objects are integrated. For instance using wrong connection string that points to wrong version of database etc. Having a well designed automated testing infrastructure really helps us in this regard!

Top 10 Favorite Performance Counters in Web Site Load Testing Using VSTS 2008

2 Comments | Feb 19, 2009

Microsoft Visual Studio Team System/Test Edition provides an excellent tool to perform web site load testing. Using this load testing tool, you can monitor and measure the site performance along with system status with respect to a given load/stress.

Fortunately VSTS provides a support for wide range of performance counters, from web page request per second to condition of physical disk, memories. Unfortunately, they are too huge that, initially testers/designers get overwhelmed with all of those, to find out a clear idea about the performance of the site they built.

The number of counter parameters to be considered by the load tester/designers is greatly varies based on the type and size of the web application to be tested. Here is my favorite top 10 performance counters that I use on my each load tests, regardless of project size. These counters are based two primary categories: Web Site end and Hardware end.

SoftwareTesting

Web Site Related Performance Counters

Web site related performance counters are the counters that provide valuable information about the health of web site that is under test. These parameters are categorized as Requests, Pages, Tests and Errors.

1. Request - Avg Req/Sec

Desired value range: High

This is the average number of requests per second, which includes failed and passed requests, but not cached requests, because they are not issued on web server. Please note that, all http requests, such as image, java-script, aspx, html files generates separate/individual/single request .

2. Request -    Avg Req Passed/Sec

Desired value range: High

While “Request - Avg Req/Sec” provides an average with respect to all passed and failed request, “Request -    Avg Req Passed/Sec” provided the average of passed requests. This info also helps to determine the average number of failed requests/sec.

3. Page -        Avg Page Time (Sec)

Desired value range: Low

While a single request refers to request to a single http elements (such as css, java-script files, images, aspx, html etc), a page is the container of all of the corresponding requests generated when a web page is requested (for instance via the browser address bar). “Page -        Avg Page Time (Sec)” counter refers to the average of total time taken to load a page with all of its http elements.

4. Test -        Total Test

Desired value range: High

For instance, we have created a web test, that contains two web pages, pushing on a button on the first page will re-direct the user to the second page, although there will be multiple entries will be involved for Requests and Pages counters, but the whole process will be considered as a single Test.

This counter considers the total number of tests (which includes passed and failed tests) during the test period.

5. Scenario -        User Load

Desired value range: High

This counter considers the maximum user load that has been provided during the test run. Please note that, for Step Load pattern, where more user volume is added on step by step basis, the maximum user load will be counted through this counter parameter.

6. Errors -    Errors/Sec

Desired value range: Low

Includes average number of errors occurred per second, which includes all types of errors.

snap2

Hardware Related Performance Counters

7. Processor -    % Processor Time

Desired value range: Low

This is the number of processor time being utilized in percentage.

8. Memory -    Available MBytes

Desired value range: High

This the amount of Memory available in Mega byte.

9. Physical Disk -        Current Disk Queue Length

Desired value range: Low

It shows how many read or write requests are waiting to execute to the disk. For a single disk, it should idle at 2-3 or lower.

10. Network Interface -    Output Queue Length

Desired value range: Low

This is the number of packets in queue waiting to be sent. A bottleneck needs to be resolved if there is a sustained average of more than two packets in a queue.

Download the SQL Script which selects all of the parameters as mentioned above with respect to the latest load test, from here:

 

 


kick it on DotNetKicks.com

Understanding VSTS Load Test Counters: Requests, Pages and Tests

Add Comment | Feb 18, 2009

Microsoft Visual Studio Team System/Test Edition provides an excellent tool to perform web site load testing. Using this load testing tool, you can monitor and measure the site performance along with system status with respect to a given load/stress.

Fortunately VSTS provides a support for wide range of performance counters, from web page request per second to condition of physical disk, memories. Unfortunately, they are too huge that, initially testers/designers get overwhelmed with all of those, to find out a clear idea about the performance of the site they built. Today we’ll be discussing about three counter sets that are closely related to each other, but provides a meaningful information about the health of the target web site to be load tested.

snap

Definitions

Requests: Requests are the smallest load testing parameter with respect to a web page.

It contains details for individual requests issued during a load test. This includes all HTTP requests, and dependent requests such as images, css and java-script files.

Meaning, each refereeing contents in a web page, such as images, css files, java-script files will generate separate request along with the request for the web page which includes the actual textual content (text, tags etc). It will include the same number of additional entries for a postback. 

Pages: Right after “Requests” we can consider “Pages” as the next level of load testing counter set, which is defined in MSDN as “Displays a list of pages accessed during a load test run. Some data in this table is available only after a load test has completed.”

For instance, we have a web page, which has a button, clicking on which shows a message on that page, which generate two entries for Page counter.

One important note is, any redirection to a separate page will not  be counted with additional value, however the corresponding Requests for the redirected page will be counted. 

Tests: Contains the details for individual tests run during a load test.

For instance, we have created a web test, that contains two web pages, pushing on a button on the first page will re-direct the user to the second page, although there will be multiple entries will be involved for Requests and Pages counters, but the whole process will be considered as a single Test.

Case Study

To have better idea, lets consider 4 different cases to see the corresponding entries with respect to the counters we are discussing.

Text only:

We have a web page, that contains only textual content, no external content such as image, css, java-script file referred there. However it may contain html controls, but no postback (button click etc) will be considered here.

Counter Status: number of request = number of pages = number of tests

For a single hit by a single user:

- 1 entry in “request” counter will be added
- 1 entry in “page” counter will be added
- 1 entry in “test” counter will be added

Text and Image:

We have a web page, which contains an image, besides the textual contents.

Counter Status: number of pages = number of test

For a single hit by a single user:

- 2 entries in “request” counter will be added
- 1 entry in “page” counter will be added
- 1 entry in “test” counter will be added

Text with Postback:

We have a web page, which has a button control only, besides the textual contents. Clicking on the button will how a message in the page “Hello World” with a postback.

Counter Status: number of pages = 2 * number of test

For a single hit by a single user:

- 2 entries in “request” counter will be added
- 2 entries in “page” counter will be added
- 1 entry in “test” counter will be added

Text and Image with Postback:

We have a web page, which has a button and a image, besides the textual contents. Clicking on the button will how a message in the page “Hello World” with a postback.

Counter Status: number of pages = 2 * number of test

For a single hit by a single user:

- 4 entries in “request” counter will be added
- 2 entries in “page” counter will be added
- 1 entry in “test” counter will be added

From Text only page to another text only page using postback:

We have  a page, which has a button, besides the textual contents. Clicking on the button will to a another “Text only” page.

Counter Status: "number of failed request = number of failed test" (i.e. if one of the request in a test fails, the entire test would be considered as failed test)

For a single hit by a single user:

- 3 entries in “request” counter will be added
- 2 entries in “page” counter will be added
- 1 entry in “test” counter will be added

Measure Your Database Table Schema Synchronization Safety While Using VSTS 2008

Add Comment | Feb 04, 2009

Microsoft Visual Studio Team System 2008 provides an excellent data synchronization tool, synchronize data and schema between two database. It saves lots of developer time to sync database objects. Among two possible synchronization techniques, VSTS 2008 uses the unidirectional synchronization technique. In this consideration, as safety measurement will be helpful for developers before start synchronization.

sync5

The security measurement is considered whether it would create any loss of data or not. Here few useful cases with respect to database table schema synchronization has been discussed one by one.

  • New Table in Source Database: Safe. The new table will be added to the destination database.
  • Remove Table in Source Database: Safe. The removed tabled in source database will also be removed from destination database.
  • Modify Table in Source Database, Add New Field: Safe. However the new field needs to have the ‘allow null’ property as true.
  • Modify Table in Source Database, Remove Old Field: Safe. The old column as well as the corresponding data in the destination database will be removed. However, as the old column has been removed, so the removal of corresponding data is expected.
  • Modify Table in Source Database, Modify Old Field: Not safe. Data Loose in VSTS, as it does alter table add + drop field. To retain existing data due to sync process, external script would be useful.  Below is some sample sql statement in this regard:

-- sql script to change data type of a table field, without data loss

alter table Contact

      alter column Comment nvarchar(10) null

-- sql script to rename a table field 'Address' of a table 'Contact', to 'FullAddress' -- without data loss

EXEC sp_rename 'Contact.Address', 'FullAddress', 'COLUMN';

Understanding Safe Database Synchronization

Add Comment | Feb 04, 2009

Data or content synchronization is one of the classic problems in software world. It becomes very trivial point while working on software production, where production data and schema needs to be synchronized with live data and schema. Having some basic conceptual complexity, developers often get afraid to use any automated tool considering the risk factors to lose of data or content. Mostly, in these cases a manual process has to involve making sure a safe content synchronization. However as human is also error prone, there still exists risk factor to lose of content, but also includes a huge human time and effort on it. Having a clear specific idea on content synchronization will greatly help to reduce such overheads. Although, the synchronization concept exists in disk space, network, database etc sectors, today we’ll basically focus on database synchronization concept, which will also help to understand synchronization concept from a generic point of view.

What is synchronization?

So, what is synchronization? This is a process that ensures the same content among two participating entities, having different set of content possibly.

For instance, a database table, named Employee, which has two instance on two different databases, and exact same schema definition, after a synchronization process, both table will contact the identical number of data rows and column values.

In a synchronization process, there involves two participants, generally, termed as source and destination, where the content will be placed from source entity to destination entity.

Based on requirement and characteristics of data, the synchronization process can be categorized in two ways

  1. Unidirectional synchronization: replacing destination entity with the source entity
    In a unidirectional synchronization, all of the contents from source entity will be placed to destination entity, which also implies, any content in the destination entity, that doesn’t exist in source entity, will be deleted.
  2. Bidirectional synchronization: merging data from both participating entities

Before understanding both synchronization processes clearly, let’s consider three sample states of data entities:

a) Initial state: where both source and destination entity contains exact same number of records and column values.

sync

b) Data change state: the state where data get changed in both source and destination entity.

 

c) The synchronized state: where data has been synchronized among source and destination state.

In a unidirectional synchronization, all of the contents from source entity will be placed to destination entity, which also implies, any content in the destination entity, that doesn’t exist in source entity, will be deleted.

 

There is a high degree of data lost risk factors in unidirectional synchronization, as all of the data contents will be deleted in the destination entity, which don’t exist in source entity. In the above sample, #2 and #5 row item has been deleted due to data synchronization process. So, database administrators need to be cautious to confirm that if this data lose is expected.   
 
In bidirectional synchronization, all of the rows and column values in source and destination entity will be merged data from both participating entities.

 

Thus, on bidirectional synchronization, no data will be deleted neither in source or destination entity during the synchronization process. However the only data lose risk factors in bidirectional synchronization can be considered when same data row (identified by primary key) that has been modified in source entity, get replaced in the destination entity.
In the above sample, #1 row has been updated in destination entity, from ‘Ashraf’ to ‘Ashraful’. So, database administrators need to be cautious to confirm that if this data replacement is expected.

kick it on DotNetKicks.com

Agile Software Development: More About Human Ideology, Rather Machine or Technology!

Add Comment | Jan 30, 2009

agile  

In the recent trend of software development and information technology, Agile has been a Buzz word among the developer community.

There are three types of guys, while a new hype gets introduced. First, who really ignores it, as it is being hype, second, who really get excited about it, but really not very aware to utilize the concept properly, and the third, who really don’t care about whether it is hype or not, but cares to utilize and adopt it properly.

It’s very hopeful that the third type of guys with respect to the Agile Buzz word is getting increased among the local developer community in Bangladesh.

When I first heard about Agile, few years back, while starting my software development career, as usually, I digged in the internet to know more about it, and then got introduced with some relevant key concepts, like Extreme Programming, Test Driven Development, Unit Testing, Scrum etc. At first all the concepts seemed very similar to me, and I couldn’t distinguish each other. That’s a tough thing! If you want to utilize any technology, you must have to understand the basics very well.

There are hundreds of new concepts being discussed in Agile Software Development. Understanding Agile Software Development, you don’t have to know and/or remember all the principals, but understanding the underlying spirit in more important. Today I am going to discuss some of them that are being discussed and utilized frequently.

What is Agile Software Development?

So what is Agile Software Development? According to Wikipedia, Agile software development is a group of software development methodologies that are based on similar principles. Agile methodologies a set of project management and engineering best practices that allow for rapid delivery of high-quality software, and a business approach that aligns development with customer needs and company goals.

What is Extreme Programming (XP)?

Extreme Programming (XP) is a software engineering part of agile software development, prescribing a set of daily stakeholder practices. Extreme Programming has been described as having 12 practices.

... and Test Driven Development?

Test Driven Development is one of the 12 practices that are followed by a “Test First” rule, in software development process, where the test cases are being implemented before the actual implementation. These test cases are generally modeled according to Unit Testing methodologies, where a software component is divided into separate logical units that can be tested independently, where possible.

SCRUM? What's that?

And what is SCRUM? This is the Project Management part of agile software development, where a software development is being planned to be released into several small iterations. These iterations are typically from 1 to 3 weeks and called sprint. Before starting software development process, a product backlog has to form, which includes all possible features to be implemented. And before starting each sprint, the product backlogs are discussed to form a feature list to be considered in the upcoming sprint release. These are classed sprint backlog.

So in short, Agile Software Development includes Extreme Programming methodologies as its Engineering part and SCRUM as its project management part, which both encourage the similar iterative manner to provide high quality product in cost effective manner.

The Power of Agile Development

Most of the concepts and principles in Agile Software Development are not new. As a software developer, even you may not heard/studied about Agile Software Development, but may consider lots of the similar principals in your daily professional life. Agile Software Development encourages simpler concepts and ideas so that the participants of a given software projects, can adopt and utilize it quickly.

One of the main principal, that makes Agile Software Development popular, is its iterative nature of product releases. While working for 20-30 software development projects in last 5 years, I have found to customer/owner of software projects become very satisfied while they start to see the progress in just 1-2 weeks when the project started. Agile is different than the typical “Waterfall” based approach, where system analysis, design, coding and implementation is being happened in linear way, but the customer has to wait a long to see the progress, Agile software development is also different from the “Prototype” approach, where the mock prototypes are shown in the early phase of the project, to give the customer in basic idea, but with not recommended practices implemented in coding level.

“Trust” is one of the key factors, which I personally believe is one of the most powerful principal in agile world. During my early stage of professional career as team leader, I have seen developers at my and some other team; often hide serious risk factors during the upcoming software development project, as they didn’t have enough confidence that they will be not able to explain the risk factors clearly or their manager have enough trust on them. This results a serious failure in later phases of the software.

A big success factor in Agile Software Development is, developers always provide the time estimation, which may vary during the implementation phase, depending on the situation and cases. Having a trust on developers, especially on this case, plays a vital role towards the success. For all managers, I request, if you can’t really trust your team member, please don’t work with him, either moving you or him to another team or company. Having a trust on the team members is really helps a lot to make a project successful.

Agile Principal encourages personal communication more than the traditional overloaded documentation principal, which saves lots of time and ability to discover the problems quicker.

There exists a common rumor with respect to software development world, is software developers always have to work on unusual working hours, which is also true for most of the traditional software development companies, however, Extreme Programming practices encourages an ideal 40 hours per week for best production, which also includes 5 hours dedicated to meeting. As a software developer, I also personally believe this is true.

Agile Success Factor: Agile is More About Human Ideology, Rather Machine or Technology!

AgileTeam

To be benefited from Agile concept, I think developers and managers needs to take it as an ideology, rather considering it as technology. The very basic concept is, keep it simple, provide the working samples in iterative manner, work with trust and discover the future risk factors by discussing with team members (not just spending hundreds of hours to read and write documentation's!). Why Agile projects are successful? This encourages HUMAN effort and motivation, not on machines! And it's been absolutely proven is HUMAN is the most powerful process in the universe!

nAML: A New Revolutionary Way to Model Your .NET Applications!

One Comment | Sep 12, 2008

naml

Understanding the architecture and code in software application plays as major factors while building good software products. Having an easy to understand visual notation, not only helps architects to model the system efficiently, but also helps developers to quickly implement that, as well as it helps the re-engineering process to easily adopt the architectural model with respect to new requirement.

A new visual modeling technique, termed as “nAML” (.NET Application Modeling Language) is being introduced which overcomes the limitation of typical modeling languages by providing revolutionary way within a single space to describe an application system with its structural and behavioral, as well as physical and logical components. It illustrates real world samples, from user interface experience, .NET specific language (such as C#) classes to database level SQL commands, to let software architects and developers to have a clean model for the future system. One of it’s the most powerful objectives of this new visual language is the besides an easy way to model the system, the target model will require near to zero knowledge on notation semantics from reader aspect.

Primary Objectives

The primary objectives of nAML can be considered as follows:

  • Provides a single space to visually describe one or more application systems with structural and behavioral components.

  • Provides a single space to visually describe one or more application systems with logical and physical components.

  • Provides a single space to visually describe one or more application systems from top to low level.

  • Provides a single space to visually describe a part or whole of one or more application systems.

  • Extremely simple and easy understand and learn from readers and designers perspective.

  • Concentrates on .NET applications, with its related logical and physical entities (user interface, application logic, business logic, database etc).

Links and Downloads

Here is the nAML project site: http://code.msdn.microsoft.com/nAML
Download the latest specification, examples and Visio 2003 Stencil for nAML tutorial from here.
Download Visio 2003 Stencil for nAML from
here.

 

July 2008 Recap: Panel Discussion, Blogging, Developer Group and Finally Winning Community Credit Award!

Add Comment | Aug 03, 2008

winner

I have been awarded by Community Credit, for the monthly community contribution competition of July 2008.

DSC03599 DSC03575

One of my main contributions for July 2008, besides blogging, moderating developer group etc, was organizing a panel discussion and seminar with 120+ students of American International University - Bangladesh. Along with Mr Enam Noor, we had a nice time with students, while providing them a guideline to get prepared for industry standard software development. Along with the support of my current employer, we'll continue giving support to the graduating students of Computer Science so that we can pick more and more talents quickly to face and meet more more challenging projects over time.

Technorati Tags: ,

Employee Info Starter Kit on Official ASP.NET Site

One Comment | Jul 17, 2008

eisk

Employee Info Starter Kit is an asp.net starter kit, which demonstrates the use of simple CRUD operations for maintaining a company's employee information. It has been developed by me as a guideline for building enterprise level projects.

In last few months this starter kit placed in the top chart at code.msdn.microsoft.com for several times regarding the popularity.

A very exciting news for all of Employee Info Starter Kit fans is yesterday this starter kit has been placed in the front page of Official Asp.Net site, in the "In the News" section! It has been placed in the listing of the elite starter kits of Official Asp.Net site.

As it developer, I can say, it's just beginning..over time I will add more and more features in terms of best practices for several areas, so that newbes and experts can get one stand-alone solution to grab, learn and implement most of the best practices, without going thru "tons" of tutorial!

Here are few highlights of the future version plan:

1. Full Unit Testing Automation

2. Web & Load Testing Automation

3. ASP.NET 3.5 Version

4. Silverlight Version

5. ASP.NET MVC Version

and lot more ...

So stay tuned!

If you don't want to wait till then, lets go to the project site and start download now..Cheers!

I am MVP Again! Cheers!

2 Comments | Jul 01, 2008

MVPLogo

It's great pleasure for me that Microsoft has awarded me as MVP (in ASP.NET category) again this year! I become MVP for the second time, for my contribution in developer community. Check out my MVP profile here.

Besides, another interesting news to be shared with all, in the last weekly show of Channel 9, two of my posts published here 10 Tools Which I Left After Using VSTS 2008 and 10 Tools Which I Still Use, Even I Have VSTS 2008 has been discussed.

Thanks Microsoft for your recognition! It really encourages me a lot to grow myself more and more in terms of knowledge and contribution in technical domain and community.

Cheers!

10 Tools Which I Still Use, Even I Have VSTS 2008

Add Comment | Jun 24, 2008

In my last post, titled "10 Tools Which I Left After Using VSTS 2008",  I have included a list of 10 tools which I am not using currently, as I have the corresponding features available in Visual Studio Team System 2008. However, on the other hand, I am still using few tools even I have VSTS 2008!

Here are 10 of among them..

1. Code Smith: An excellent template based code generator.

code-smith

2. Crystal FTP: Excellent FTP client tool.

untitled

3. Total Validator: One of the most powerful tool that I ever seen, which includes very nice feature to validate web standards. 

4. Diff Marge: A tool that enables us to investigate and/or synchronize the difference between two files or folders.

diff-marge

5. Design Pattern Automation Toolkit: An excellent open source tool, by which we can automate and generate source code with respect to established design patterns.

dpa

6. Office Visio 2007: Although Visual Studio has support for diagramming, however Office Visio 2007 is still # 1 choice for me, with respect to analyzing, modeling, designing the application system on which I am working on. It contains a wide range of support of notation, including UML, Enterprise Application, Prototyping. 

Visio

7. Copy Source As HTML: Bloogers like me, always needs to copy own source code from Visual Studio IDE, to be posted. This tool serves me this purpose.

8. Spell Checker: Its really a nice thing, if my code don't have any spell mistakes, which can occur frequently. Wonderful tool to help developers!

9. SysInternalSuite: A nice system spy tool for developers and system admin. It contains lots of useful tools, to investigate the system with respect to the current execution of your application.

10. Employee Info Starter Kit: An excellent ASP.NET starter kit, which includes most of the web and coding best practices. Helps web developers to reduce start-up preparation time for web application.

kick it on DotNetKicks.com

10 Tools Which I Left After Using VSTS 2008

2 Comments | Jun 24, 2008

I have started using Visual Studio Team System (VSTS) 2008, recently. Previously I worked with Visual Studio 2005. As a matter of fact I had to use lots of external tools to perform and speedup my development process. However, while working with VSTS 2008, it's very exciting for me that, I found replacements for most of the external tools there.

Here are 10 tools which I left after using VSTS 2008:

1. Database Schema Compare

External tool: Redgate SQL Compare

VSTS 2008 tool: Menu -> Data -> Schema Compare

1

2. Database Data Compare

External tool: Redgate SQL Data Compare

VSTS 2008 tool: Menu -> Data -> Data Compare

2

3. Database Data Generator

External tool: Data Gen 0.9

VSTS 2008 tool (power tool): Add -> New Item -> Data Generation Wizard

4. Unit Testing

External tool: Test Driven.NET

VSTS 2008 tool: Menu -> Test -> New Test

4

5. Web Testing

External tool: Badboy

VSTS 2008 tool: Menu -> Test -> New Test

5

6. Load Testing

External tool: Neoload

VSTS 2008 tool: Menu -> Test -> New Test

6

7. Code Profiling

External tool: Redgate ANTS Profiler

VSTS 2008 tool: Menu -> Analyze -> Launch Performance Wizard

7

8. Code Analysis

External tool: Fxcop

VSTS 2008 tool: Menu -> Analyze -> Run Code Analysis

8

9. Code Matrics

External tool: nDepend

VSTS 2008 tool: Menu -> Analyze -> Calculate Code Matrics

9

10. Java Script Debugging

External tool: Code Project Java Script Debugging Tool

VSTS 2008 tool: see Scott Gu's post on it.

kick it on DotNetKicks.com

How To: Win the Tech Sea…

Add Comment | Jun 23, 2008

Microsoft is releasing new and exciting products and platforms for developers one by one, which are making developers pretty busy to learn, implement and utilize them at their production environment. Here are few latest hot cakes for developers:

1. Windows Presentation Foundation

2. Windows Communication Foundation (WCF)

3. Windows Workflow Foundation (WF)

4. Windows Forms 3.5

5. ADO.NET 3.5

6. ASP.NET 3.5

7. .NET Compact Framework 3.5

8. Windows CardSpace

9. Silverlight 2.0

10. IIS 7.0

11. Visual Studio 2008 Team System

12. Visual Studio 2008 Team Foundation Server

13. Sql Server 2008

14. Windows Sharepoint Services 3.0

Well that's simply crazy! Even if I want, I can add more, given that each of the technologies has bigger and bigger branches, each of which requires lots of efforts to be specialized!

I am really a tech hungry, however right now I feel a bit overloaded to enter to all of these, even sometimes getting time to review the basic become harder for me. However I finally planned myself to be more organized to continue my learning process with good digestion, so that I can continue NOT only just learning, but also I can improve my developer life much better with stronger way.

Here are four steps that I wish to maintain with respect to all type of new technologies, which will be adjusted based on the relevancy at my current work.

1. Basic level: To be able to just run "Hello World" type sample successfully, along with ensuring successful installation and configuration process.

2. Pre-production: Getting prepared to implement in production, by making successful experiments, customization and fine tunings in samples found.

3. Production: Careful implementation and perform required adjustments for optimized result.

4. Production-advanced: Once a good sort of 'safe' experience archived, I would like to go for advanced concepts to implement the technology is highest possible way!

Not matter how much closely related each technologies are to my current work and projects, but I am sure each of them are at least 'loosely' related, so I will cover all of these at least at basic level, as I have the motto:

"As a good developer, always you have to know 'everything' for 'some item' and 'something' for 'every item' !

Cheers!

Design Factors 21: Do we use cascading on CRUD operations? If so, is it in DAL or DB layer? Why?

2 Comments | Apr 28, 2008

untitled

Cascading is a technique that resides between the relations between two database tables. It enables the records of the child tables to be deleted/updates with respect to the corresponding records of the parent table records. Besides the database level, this operation can also be considered in the inter-mediate logical layer. Software designers are required to define the appropriate explanation regarding this consideration.

Technorati Tags: ,,

Design Factors 20: Do we use transaction? If so, is it in DAL or SP layer? Why?

Add Comment | Apr 28, 2008

ms973865.introsystemtransact_01(en-us,MSDN.10)

Transaction is a mechanism where a batch of operations can be rolled back for any failure at the mid point of the whole process or can be committed after successful completion of all the operation. Transaction can be used in both database level and/or application level.

Technorati Tags: ,

Design Factors 19: How the logical layers are connected?

One Comment | Apr 28, 2008

connected

Logical layers such as BLL, DAL, CL etc can be hosted in the same machine or can be distributed in separate machines specially where high end scalability are required. The relation and isolation among logical and physical tiers are required to be defined and explained with appropriate design goal.

While considering logical layers in distributed environment, there are several technologies are available. SOAP/HTTP based web service or .NET remoting can be considered, each of which has own merits and de-merits. These considerations are required to be addressed in this point.