Sunday 30 December 2012

About Author

Jayachandran(Jay) is working as a seasoned Developer/Architect and been working in various domain such as Telecom, Banking, Media, CMS, Printing, Government, Retail and Software Services…etc. He started his career at programmer level and been working as a various technical level positions. He is an expert in Design/Architect the various software systems & he would like to hands on programming. He is PMP and Microsoft certified holder and his main areas are not limited to C#, ASP.NET, WCF, ASP.NET Web API, WF, WPF ,Silverlight, ADO.NET Data Services, SharePoint, Service-Oriented Architectures(SOA), Cloud Computing…etc.  Jay will be contactable at Jayachandran.NET@hotmail.com.

Quick links


Please click the corresponding link which do you wish to know more details.

3. Design patterns


What is Design Patterns?
In software world, a design pattern is repeatable solution which is used to solve the software problems in the software design. We can also say that design pattern is model or template which can be often used when we write the software programs.

The Gang of Four (GoF) authors namely Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides are spent lot of time on the software design and they come with in total 23 design patterns with their hard work and they proved that any software design which will fall under any one of the these 23 design patterns.

Why do we need to use or consider design patterns when we write software programs?
Design Patterns are designed for reducing the software hassles & will show you how you can reusable OOAD in different situations.

What are the GoF design patterns (23 design patterns)?
Please refer the below chart will shows various types of design patterns & how to remember them easily.
GoF Design Patterns

Note:

Architecture patterns are well known patterns for solving software application architecture problems. Examples of the architecture patterns are 

1. MVC
2. MVP
3. MVVM
4. N-layer depends upon the domain project

Architecture pattern is need to decide before start developing the project and very hard to change once its built.


Next, I will suggest to visit the topic number 4. UML and come back here to continue reading the remaining page because we are going to use the UML in each design pattern. So I would suggest to get know more about the UML first and keep reading.

6. R & D for up to date technologies


You may think, why title of this post called “R & D for up to date technologies”.

R & D – stands for Research & Development

We can elaborate into many things from this title. Technology is dynamic world. i.e.) technologies are keep on changing and exploring into the world.  In order to keep track on technologies side, we need to keep on doing research, studying latest technologies and use them in our software development to get benefited.

We need research/ and find out is there are new technologies can use for our software development which can increase our productivity and reduce the time/cost.

As we know, our existing systems are running smoothly, making money and why we should upgrade our systems into new technologies.

The answer for above question is not that straight forward and simple. But the reasons are
  1. Increase productivity
  2. Interoperability
  3. Increase flexibility…etc.
Let’s spend some time and go through, travel on modern technologies technical track and we will decide how new technologies help us to increase the above functionalities.


As of now, I think of the below latest technologies. Let’s discuss about the below technologies and will see what can offer you for your business.

Microsoft offers many things in .NET space for us. Sometimes, we have not tasted all the features which Microsoft offers. Please try to taste which useful for your business which Microsoft offers.

Here tasted = using

I am not going to explain each and every feature as Microsoft .NET space is a big ocean and cannot swim all over the ocean.  However, I will show you how to swim (I mean some of the features) and you will learn how to swim other sides (to extend for other features) of the ocean.

Please click on the item to know more about corresponding technologies.

8. Feeding the people technically


What is mean by feeding the people technically?

Most of the people don’t understand straightway that what is mean by feeding the people technically? Let me explain more about this. We can see so many people posting their technical articles, technical solutions for the hard problems, their technical experience and expertise on the internet in such a way that to help other people. This is called feeding the people technically.

If you share your technical knowledge with your co-workers and this is also called feeding the people technically. So generally whatever you share in terms of technical stuff or teaching to someone technical stuff is called feeding the people technically.

When we need any technical help or if we cannot find the answer then we search on www.bing.com or www.google.com or www.yahoo.com to find the answer as our technical people posted their gained experience. So feeding the people technically is a good habit and its help you to grow as well.

If you find the answer for the difficult problems please feel free to share with everyone. There is a proverb called “what you give is what you get”
You can share either on internet or with colleagues.

What are benefits we get when we feed the people technically?

  1. You never forget that technical concept when you share with someone.
  2. If you share technical stuff with someone, then they will ask questions related to that topic and it make you to think more and more. So this will help you to grow yourself technically.
  3. The proverb “What you give you is what you get” is applicable for everyone who share the technical stuff.
  4. Team work with sharing the technical knowledge with others is the strongest value added service for the project.
  5. Definitely it’s worth of sharing your technical stuff to others and there is lot of good things behind on this. You will know gradually when you share the technical stuff to others.  I am not going to explain those things now and you will know when you share it. Please try to find out what they are.
How do you share your technical skills and knowledge with others?
  1. You can organize the technical sharing meeting with your team by weekly or monthly depends upon the team member’s availability.
  2.  Each and every team member can talk about particular technical topic such as caching, cloud computing…etc. by weekly or monthly basis. So in this way everyone get to know all the topics and it’s good for everyone including the organization.
  3. Apart from your work, you can share your technical knowledge with your family and friends.
  4. Writing technical articles or blog and posting on the internet.
  5. Depends upon your time availability, you can conduct the technical classes for university students or who need technical help  and help them to get the jobs as well.
  6. You can form the team with your friends to play (either cricket or your favourite games) in the weekend and during that time you can also share and talk about the technical stuff and your technical experience.
  7. Other than above, there are many ways to share the technical knowledge with your friends. Please try to find the best way which is suitable for you and share your technical knowledge with everyone
So finally, I would strongly recommend that please feed the people technically whenever you can.
Thanks for visiting.

10. Documentation skills


In this post, I am going to write how documentation skills will help us improve our development process.
We are all starting our career from programmer level which straightway starts writing the code and don’t spend time to write or document what we did. Due to lack of documenting our work, we need to spend lot of time to understand and maintenance the code which we normally don’t realize.

We used to write the code but not document about our work. We should document our work and it will help us definitely.

Everyone raise next question is that where is time for documenting our work? This is really good question. We should allocate some time for documenting our work. This time allocation should be in the project schedule and in the SOW (Statement Of Work). Otherwise we never get the time to document our work.

Next question is what to document?

Documenting our work not limited to
  1. What overall system does with short description which help other developers
  2. How the system interconnected to other systems if it is
  3. Write comments on the coding that what the method or system does on the specific section.
  4. Write Application Support Manual (ASM) and Application Support Process (ASP) based on your organization structures which everyone adopts on your organization.
  5. Prepared the generic template which says what need to document whenever the project or allocated task has been completed.
  6. Included UML diagrams on your each and every project or task.
We no need to spend lot of time or documenting unnecessary stuff which we don't need really. However, we need to document the necessary things and which help for support and our future  development.

Can we start documenting our work? Yes we can…………..

11. Communication skill


As you know, the communication is the key for everything. Without communication we cannot move forward. We can say the whole world tighten with communication.
I am not going to explain much detail about this as it’s not necessary and everyone on top on this.
We can see many people know technically more due to lack of communication they cannot reach the high level positions. Because of lack of communication is stop growing further. So we can say communication is the most important than others.

How we can improve communication skills?
  1. You can find on internet many ways that how you can improve your communication skills. However, we need to follow and practice them in such a way that. So that our communication skills will improve.
  2. We can listen videos and watch English movies.
  3. Writing technical articles and blogs.
  4. Attending the seminars.
  5. Participating the general activities such as volunteer programs, meetings…etc.
  6. We can carefully listen who talks well and try to follow their way of talking.
  7. Conduct technical classes with your friend and university students.
  8. Reading books and emails who written in well.
Other than above, there are many ways which can suitable for you to improve communication skills. So please try to utilize them and improve communication skills. It cannot be done one night and you need to keep practicing & achieving your goals.

Each and every method will give you some percentage of improving your communication skills so please try to use all the ways and utilize them. So finally you will have 100% communication skills.

Thanks for visiting.

12. Doing Certifications


We are all understood that some of the companies does not recognize or give preference for whose has the corresponding certifications for the advertise job as they are mainly looking for domain knowledge experience. 

However, I would suggest that doing certifications will help you to improve you other technical capabilities.
For example, sometimes we don’t have time or get opportunity to work on each and every technical stuff or scenarios. But certification will give you overall road map that how you can use different technical scenarios. 

You can use these scenarios in different such way that in various systems.
And also certification covers all the technical topics which may need for development and these help us to improve to do the better than what we did before.

For example, Microsoft certifications will tell you how you can debug the production system remotely in order to identify the issue from your development tool such as Visual Studio 2010 and many more.

For more information about certifications, please visit the following sites and follow up other technical service providers certifications which are demand for the current IT market.


13. SOA & Cloud Fundamentals


Sorry. This page is under construction. Please check back soon.

14. Building SOA & Cloud based services


Sorry. This page is under construction. Please check back soon.

15. Networking skills up to Architect level


In this post, I am going to explain what are the network diagnostic commands need for in order to troubleshoot the website or networking issues for developers and architects. I am not going to explain all the commands which Network Engineers use.

Now, I am think of the following commands, tools…etc.

NetworkingCommnds

Before going into the details of each command, I would like to mention

How Internet Works?
  1. In high level, when we type www.microsoft.com on browser, browser sends the request to DNS (Domain Name Server) to ask for the IP address of the website.  This browser request goes via many DNS including root DNS and finally to get the IP address of the website which we are requested.
  2. Once browser get the IP address of the website, browser sends request to the IP address to get the content of the website.
Commands Explanation:
Please click start->and type command on the windows search box and open the command prompt to verify the following commands. Please note that some of the commands are may not work for you due to path issue or utility for that command is not installed on your machine. Please check with your Network Engineer if it’s not working. The command prompt window should be similar like the below picture.
Command
  1. Ipconfig:  To display the network settings currently assigned to any or all network adapters in the machine. This command is used to verify/find an IP address, network connection as well as to verify your network settings. Please type ipcong/? If you need to know more about the command and other options.
For example, the result of ipconfig for my machine
ipconfig

2. nslookup:  To look up an IP address of a domain or host on a network. Please type nslookup/?  To know more about how to use them.
For example, nslookup results for www.microsoft.com from my machine

nkslookup

3. Tracert: Used to visually see a network packet being sent and received and the amount of hops required for that packet to get to its destination. It will also show you that your request going to via which networks and firewalls with details from source to destination.
For example, type tracert google.com. This is the tracert for google.com from my machine.
tracert

4.       Ping: Used to check for network errors.  Generally, if unable to connect webs site or any host then you can use ping command to verify and it’s also give you he IP address of the site.
For example, When I type, ping www.facebook.com and I am seeing the below result.
ping
5. netstat: Allow you to view the statistics of the network such as active TCP connections, ports on which the computer is listening…etc.
For example, netstat results for my machine is given below.
netstat

6.       pathping: Its similar to the tracert command, pathping command provides information about network latency and network loss at intermediate hops between a source and destination. Pathping sends multiple echo request messages to each router between a source and destination over a period of time and then computes results based on the packets returned from each router.
For example, pathping results for www.amazon.com from my machine.

pathping

7. telnet: Telnet is software utility that allows users to remotely access another computer such as a server, network device, or other computer.  We can verify that if we cannot connect to any machine with particular port and this will help us to troubleshoot the problem and connectivity issue.

8. ftp: Short name for File Transfer Protocol. Used to receive and send the files from FTP server

Tools:

1.       Fiddler: Fiddler is the web debugging tool and its downloaded from http://www.fiddler2.com. Please download and play around it to know more about the fiddler. Fiddler will show lot of information such HTTP headesr, requests…etc. & also used for verifying the performance of the web site.
 For example, traffic information for www.yahoo.com from my machine.
fiddler

WireShark: WireSharek is a network packet analyser tool and it’s downloaded from wireshark.org. Please download and try it. Please share your experience about this tool if you like it.
Others:

Hosts file:  Hosts file is used to map hostname to IP address. The location of the host file is C:\Windows\System32\drivers\etc. The contents of the host files similar like below.

127.0.0.1       localhost
x.y.z.z1          mysite.com
Usability:  
  1. Used to test for the DNS IP address changes when diverting traffic to specific IP address.
  2. Divert any website traffic to specific IP address on your machine.
If you would to know more about the networking commands please refer the following sites

Note: There are many numbers of tools/info available for debug/trace the website/network traffic. If your find the good one and useful for others please share with us and also share with me at Jayachandran.NET@hotmail.com.

16. Troubleshooting the problems


This post describes how to you troubleshoot the any problems.

As mention on the post 4. UML that simple diagrams will save you lot of time for the explanation. So I am going to draw diagram here to show how we can troubleshoot the problems if website or application is not working and the same troubleshooting funda can applicable for other problems too.

Diagram:

TroubleShooting The Problems

As of now, I can think of that the following other ways to help to troubleshoot the problem.

Notes:
  1. Use Fiddler to inspect your HTTP traffic.
  2. Check Event Viewer and exception logging database if you have for that website or application.
  3. If your website hosted on Web Farm(same website hosted on multiple web servers), then very hard to find the request coming from which web server, So in order to trouble shoot the problems easily I would suggest to define the customer http headers on IIS using “HTTP Response Headers”  for each web servers. For example, please refer the below picture and you will understand that.
TroubleShootingTheProblems1

4. If your website or application build up with many layers (say UI, BAL, Web Service, Data, caching …etc.) then I would suggest to write the simple script to make sure everything is working on individual layers including connectivity and calling simple methods…etc. Because this will save us lot of time. For example, if there is a problem on DB then if we execute the script and script will tell us straightaway where is the problem instead of looking from web servers and narrow down the issue to other layers.
5.  Setup instant notifications via email or SMS for your production environments if any critical problems are happened or any health check issues.
6. Prepare the support manual documentation and use it for when the problems are happened and this document also very useful for future support/developers.
7. To work our applications on all of the modern browsers, sometimes, we need to write separate working block for the some of the functionalities for specific browsers. For example, our testers say it’s not working on Chrome or IE…etc. then we need fine the alternative working solution of that.
8. Please use networking commands to troubleshoot the problems for network related issues.

I hope you enjoy reading this post. Please contact me if you have any questions.

Architect Graph


Architect Topics Graph
Architect Topics Graph
Please click the below links which do you wish to know more details to become an Architect.
2. OOAD
4. UML

Contact

If you have any questions regarding about design/architect the software systems or any other technical help, please contact Jayachandran(Jay) at Jayachandran.NET@hotmail.com. He will  reply your queries as soon as he can.

Architect Help

If you have any questions regarding about design/architect the software systems or any other technical help, please contact Jayachandran(Jay) at Jayachandran.NET@hotmail.com. He will  reply your queries as soon as he can.

Technical Bricks For Building Websites


What are the technical key considerations needed for building websites?

In overall, we need the following technical bricks to build the websites
  1. Software Design(including choosing the software technologies which comply with modern technologies)
  2. Development Environment Setup (including source version control, coding standards…etc.)
  3. Authentication and Authorization(for frontend and backend layers depends upon the type of websites)
  4. Security (including for preventing XSS, CSRF…etc.)
  5. Exception Handling and Logging (including custom error messages, page not found error page…etc.)
  6. Database Design (including normalization, store procedures, triggers, views…etc.)
  7. Caching (for improving the performance of the web site)
  8. Testing (including unit test, performance, Data Driven Testing (DDT)...etc.)
  9. Hosting Environment Plan
  10. Documentation (including deployment, support…etc. documentations)
Next, do we need necessarily all the above bricks for building websites?  
Yes. But no. It's depends upon the type of websites.

Saturday 29 December 2012

9. Testing framework


Here, Testing Framework means various types of testing methodologies enforce for whatever the code written & each and every piece of code should be testable.

Testing is partially NFR (Non- Functional Requirements).

What is the NFR?
NFR is also called “ilities”. Because of the use of suffix “ility” with many non-functional requirements. For example, some of the NFR are Documentation, Availability, Maintainability, Interoperability, Recoverability, Supportability and testability…etc.

Why NFR is so important and how they are identified?
  1. In our SDLC, we are always focusing and working on functional requirements (FR). In most of the projects, Project Owners mainly focus on FR (Functional Requirements) only. It’s important to give same level of preference for NFR after development finish. NFR are identifies during whole project life cycle and it’s very important to spend some time to put on the place. NFR helps lot of our development time and money for future projects.
  2. Identifies  and Prioritize NFR  items like “Must”, ‘High Want” “Want” during project life cycle and implement NFR items depends upon the time availability.
  3. NFR also includes Lesson learned such as what is necessary to document and put the methodologies needed for the future projects.
  4. NFR items are not visible to business owners and they are not interested on this. However, project development team responsible to notify to business owner about the benefits of NFR.
Software testing types:

Please refer the below diagram.
Software Testing

Do we need to focus on all the above testings?
Yes but no. It is depends upon your project & project type.

I am not going to describes all the testing here. I do describe the necessary testing performed by development team.

Most of the testings are performed by test team. However, Development team should have testing frameworks for testing below tests.

Unit Testing: 
Developers are writing and running unit tests while they write their code to produce the high quality code. As we know, it takes times to write unit test. However we should be writing unit testing for each and every method we write.

There is a unit testing project comes with recent Microsoft Visual Studio release got many features. Please watch the below video for more information.

We need to use different kinds of testing frameworks depend upon our projects. For example, Rhino Mock-up framework is good for if your project need to authenticate with user name and password to test. 

Please refer the below URL
for more information about testing frameworks.

And also refer the below URL’s for more information about unit testing.

Integration Testing:
Each individual’s software modules are combined and tested a group. It does occur after unit testing. 
Please refer the below URL’s for more about integration testing.

Performance Testing:
It’s very important & necessary test to perform for each and every application. There are different types of performance testing measures the application performance.

Please note that all the Microsoft Visual Studio editions does not support for performance testing. Please refer the below URL for more information and buy relevant product which is suitable for your project to perform the performance test.

It’s good to have performance testing performed for each layer. Let’s say, if your project has UI, BAL, web Service, Data layers then please try to develop the performance test for individual layer to test the performance test.

Please refer the below URL’s

Performance test objectives include the following:
Response time or latency
Throughput
Resource utilization

Please refer the below URL’s and you will get to know more about the objectives and measurements for the performance testing.
Please refer the http://msdn.microsoft.com/en-us/library/bb924357.aspx to know more about the types of performance testing.

Performance vs. Scalability:
Performance refers to the capability of a system to provide a certain response time.
Scalability refers to the characteristic of a system to increase performance by adding additional resources such as processor, memory, and web server in web farms.
Please visit the following URL’s
https://developers.google.com/speed/pagespeed/ to expert in performance testing.

Compatibility Testing:
Now days, each and every application which we develop should be compatible for mobile devices as most of the traffic coming from mobile devices. To verify our application how works on mobile devices, we can use browsers extensions (such as Firefox user agent switcher) which are available on the market. However, some situations/scenarios these testing tools does not simulate 100% correctly. For testing on real mobile devices on remotely please use
And other useful links

Finally, I would suggest that to prepare testing check list for your team and use if for your project development.

I hope you enjoy reading this post.