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.
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:
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.
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]
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.
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
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
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
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.
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.
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.
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.
Download the latest white paper and samples from MSDN Code Gallery.
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
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
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.
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!
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!
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.
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.
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:

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.
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
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.
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';
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
-
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.
-
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.
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.
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!
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!
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.
I have been awarded by Community Credit, for the monthly community contribution competition of July 2008.
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:
community,
award
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!
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!
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.
2. Crystal FTP: Excellent FTP client tool.
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.
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.
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.
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.
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
2. Database Data Compare
External tool: Redgate SQL Data Compare
VSTS 2008 tool: Menu -> Data -> Data Compare
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
5. Web Testing
External tool: Badboy
VSTS 2008 tool: Menu -> Test -> New Test
6. Load Testing
External tool: Neoload
VSTS 2008 tool: Menu -> Test -> New Test
7. Code Profiling
External tool: Redgate ANTS Profiler
VSTS 2008 tool: Menu -> Analyze -> Launch Performance Wizard
8. Code Analysis
External tool: Fxcop
VSTS 2008 tool: Menu -> Analyze -> Run Code Analysis
9. Code Matrics
External tool: nDepend
VSTS 2008 tool: Menu -> Analyze -> Calculate Code Matrics
10. Java Script Debugging
External tool: Code Project Java Script Debugging Tool
VSTS 2008 tool: see Scott Gu's post on it.

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!
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.
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.
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.