Monday, 26 January 2009

IE Developer

Have you seen FireBug add-on for FireFox?

IE Developer is developed by Microsoft which does pretty much the same task.

Sunday, 25 January 2009

Software Development Design

What is Software Development Design?

It's a process of problem-solving and planning for a software solution.


Saturday, 24 January 2009

TOP 25 Dangerous Programming Errors

This is the top 25 errors agreed by many Companies and individuals.

Friday, 23 January 2009

Job Hunting Patterns and Anti-Patterns

It's assumed you have a well-written CV and covering letter.

Do you want to get a job as quickly as possible? Then, learn from my experience.

2 forces can provide you job; one is from your active hunting (AH) and the other is from your passive hunting (PH).

You should understand these 2 forces and use all the techniques at the same time.

Passive hunting has a great power; you allow others to find you instead of applying for a specific job.

Active hunting means you find where job is advertised and you apply for it.

Pattern - Let people know (PH)
  • Word of mouth has a great power. Just let people know you're available.
  • Change your status to "I am available for work" on professional networks such as LinkedIn. That sentence is better than "I am looking for a job" because by "I am available..." you create a picture in other people's mind that you are an opportunity.
  • Allow all your professional friends and colleagues know about it. Use your network and networks of your networks e.g. previous colleagues, professional friends ...
Pattern - Post your CV to job search sites (PH)

Post your CV on job search sites such as Monster, JobServe and CWJobs. Agenceis and Companies will find you themselves.

Pattern - Create a new discussion / entry in User Groups (PH)
  1. Fine some user groups such as London .NET User Group, Senior .NET Developer group on LinkedIn
  2. Post entries and create new discussions about your availability and your expertise
Pattern - Join Events and Groups (PH and AH)
  • Join professional user groups in your area such as ALT.NET and read their posts and discussion boards. People post the available positions they know in these user groups.
  • Join professional networking sites such as LinkedIn
  • Build up, maintain and expand your network.
Pattern - Direct Approach (AH)

Maybe the best way to get an IT job with Microsoft technologies is to approach Microsoft Gold Partners and Microsoft Partners in your area yourself.

Find them here. Microsoft jobs here.

In this way, you will have much more chance to get what you want and the Company will be happier because they don't have to pay to agencies.
  • Avoid sending email to This means "automated deletion" most often! Find a person inside the company, find his email address and send a short personal email about your availability.
  • You should create a database to keep record of all your conversations with people inside the Company. Otherwise, suddenly you see you have sent emails to tens of people and you can't control it any more. I created an Access database with 2 tables; Companies and Contacts to record all the conversations and emails :D
  • Once you do this, you will have the database which is very valuable for future reference as well. There are about 1000 Microsoft partners in only 10 miles of my home!
  • Don't send email to 2 people inside one company at the same time. Wait for at least 1 week if you want to find another person inside the Company. In the meantime, you can try other Companies.
  • Who to approach? Managing Director, Development Manager, Program Manager
Anti-pattern - Going through agencies for permanent roles (AH)

Applying for jobs advertised by agencies for permanent roles is not a very good pattern because:
  1. Companies prefer avoiding them because they charge them a lot
  2. Often agencies are experts in wasting time
  3. Too many candidates apply.
Having said that there is no absolute rule in that.

Pattern - Going through agencies for contracts (AH)

It's a good approach to go through agencies for contract jobs; however, if you can find a contract using your network, it's the best.

Build up and maintain relationship with the agencies if you chose to approach them. Don't just click the Apply button!

Anti-Pattern - Paying LinkedIn to let you InMail (AH)

Don't pay for finding the email address of a person in a Company. LinkedIn charges almost $10 for each InMail!

Finding that email address is easier than you think (up to 3 minutes). It's most often has the pattern of .@. - if it didn't work, try other combinations.

Also, you can try Google :D - Search for firstname.familyname@domain.extension, then the samples will appear.

Thursday, 22 January 2009

All About TDD

Best Practices:
  • Test Behavior, Not Methods
  • Apply the "Too Simple to Break" Rule
  • Use Object-Oriented Best Practices In Your Test Cases
  • Use Appropriate Method Names
  • Don’t Use Try/Catch Blocks to Catch Unexpected Exceptions
  • Don’t Rely on Visual Inspection
  • Use A Code Coverage Tool
  • Use The Appropriate Tool for the Testing Scenario
  • Write the test first, then the code.
  • Design classes using dependency injection.
  • Separate UI code from its behavior using Model-View-Controller or Model-View-Presenter.
  • Do not write static methods or classes. Reason: Static methods are difficult or impossible to isolate and Rhino Mocks is unable to mock them.
  • Program off interfaces, not classes. Reason: Interfaces can be easily mocked using Rhino Mocks and other mocking frameworks.
  • Isolate external dependencies. Reason: Unresolved external dependencies cannot be tested.
  • Mark as virtual the methods you intend to mock. Reason: Rhino Mocks is unable to mock non-virtual members.
Process of TDD:
  1. Receive requirement/feature as a User Story
  2. Write scenarios and behaviours of the feature in the Given/When/Then format. You'd need to be good at identifying behaviours/scenarios of a certain feature.
  3. Create your first test fixture and write a test method which tests a behaviour. You write the test to a non-existent Type. You'd need to be good in identifying which classes would need to be created; of course you can refactor later if you have time.
  4. Use Resharper to generate the non-existent class.
  5. Write enough code so that your code compiles
  6. Run the test and see it fails
  7. Write enough production code so that the test of the certain behaviour passes
  8. Refactor the production code and test code both.
  9. Go to 2 and cover more scenarios.
More Info:

Wednesday, 21 January 2009


Are you interested to know the salary/rate of each IT skill? Click here for more info.

Sunday, 18 January 2009

Project Management Softwares

PM Softwares often do all or part of the following tasks:
  • Project Management
  • Collaborative Management
  • Issue Tracking
  • Project Portfolio Management
  • Resource Management
  • Document management
From the link provided, some are free such as BugZilla and some are not such as Microsoft Project.

SOLID: Best-Practice OOD Principles

S.O.L.I.D. is a collection of best-practice object-oriented design principles that you can apply to your design to accomplish various desirable goals such as:
  • Loose/Low Coupling
  • Higher Maintainability
  • Higher Cohesion
5 Principles:


  • See code examples of each principle
  • Learn what problem each principle resolves
  • Learn how each principle is implemented
  • Apply these principles in your day to day OOD where applicable
  • Share the knowledge
More info:

Friday, 16 January 2009

All about AJAX

AJAX Tutorials:


  • Web Development Helper tool for AJAX here

Free Photoshop!

Paint.NET is a free image and photo editing software for computers that run Windows. It features an intuitive and innovative user interface with support for layers, unlimited undo, special effects, and a wide variety of useful and powerful tools.

Another online free photoshop:

Saturday, 10 January 2009

Encrypt your Disk

TrueEncrypt is a free open-source disk encryption software for Windows Vista/XP, Mac OS X, and Linux.

Sunday, 4 January 2009

.NET Developer Tools

NDepend is a tool that simplifies managing a complex .NET code base. Architects and developers can analyze code structure, specify design rules, plan massive refactoring, do effective code reviews and master evolution by comparing different versions of the code.

NDoc generates class library documentation from .NET assemblies and the XML documentation files.
.NET Reflector - Must-Have
.NET Reflector enables you to easily view, navigate, and search through, the class hierarchies of .NET assemblies, even if you don't have the code for them. With it, you can decompile and analyze .NET assemblies in C#, Visual Basic, and IL.

Find the Addins for .NET Reflector here; some such as Graph and Class View are very cool.

NHibernate is a port of Hibernate Core for Java to the .NET Framework. It handles persisting plain .NET objects to and from an underlying relational database. Given an XML description of your entities and relationships, NHibernate automatically generates SQL for loading and storing the objects. Optionally, you can describe your mapping metadata with attributes in your source code.

NMock is a dynamic mock object library for .NET. Mock objects make it easier to test single components—often single classes—without relying on real implementations of all of the other components. This means we can test just one class, rather than a whole tree of objects, and can pinpoint bugs much more clearly. Mock objects are often used during Test Driven Development.

NUnit - Must-Have
NUnit is a highly popular unit-testing framework.
ReSharper - Must-Have
The must-have productivity tool for Visual Studio, ReSharper 4 provides solution-wide error highlighting on the fly, advanced code completion, superior unit testing tools, over 30 advanced code refactorings, multiple handy navigation and search utilities, single-click code formatting and cleanup, automatic code generation and templates, and a lot more productivity features for C#, VB.NET, ASP.NET, XML, and XAML.

The term "SharePoint" collectively refers to two products:
  • Windows SharePoint Services (WSS): platform
  • Microsoft Office SharePoint Server (MOSS): aditional services

Spring.NET provides comprehensive infrastructural support for developing enterprise .NET applications. It allows you to remove incidental complexity when using the base class libraries makes best practices, such as test driven development, easy practices.

Subversion - Must-Have
Subversion is an open source (free) version control system.

TestDriven.NET makes it easy to run unit tests with a single click, anywhere in your Visual Studio solutions. It supports all versions of Microsoft Visual Studio and it integrates with the best .NET development tools.

Web application and UI testing for .NET.

UI Tools
JavaScript task runner

Package manager for web

Saturday, 3 January 2009

Design Patterns

Ready to develop your Architecture and Design skills more?

  • Design patterns are design solutions for recurring problems in the software development.
  • It's important to emphasize that it's a design technique more than implementation technique.
  • Understanding the available design patterns is good (theory) but applying them in a real project needs professional experience and design skills and it's mainly the job of a Solution Architect. Seeing more examples help developing this skill.
  • To truely understand design patterns, first you should understand what problems they are going to solve so that you can choose them in the real world.
Creational Patterns:
  • Builder (4 roles: abstract builder + concrete builders + product) : 1, 2, 3
  • Prototype (1 role: a class which implements IClonable): 1, 2
  • Factory Method (2 roles: abstract product containing the factory method + concrete products): 1, 2
  • Abstract Factory (5 roles: product interface + concrete products + factory interface + concrete factories + client has a method to return a product interface and accepting a factory interface): 1, 2, 3, 4
  • Singleton (1 role: a class which allows only one object to be created and shared): 1, 2, 3

Structural Patterns:

  • Decorator (4 roles: decorator + concrete decorators + component + concrete components): 1, 2, 3
  • Adapter (3 roles: Adapter + Adaptee + Target): best article

Behavioral Patterns:

  • Strategy (3 roles: strategy interface + concrete strategies + context object which utilizes strategy): 1, 2, 3, 4, 5, 6, 7, 8
  • Observer (3 roles: observer interface + concrete observer + subject): 1, 2

To be updated...

Thursday, 1 January 2009

All About WatiN

It's a very good framework developed with C# to enable developers to automate tests with IE (UI testing).