Do Good! - Share Freely, Enrich and Empower people to Transform their lives.
Design
UML Guide
Patterns
Coding Guideline
Error Code / Handling
Develop
STL (Reference)
C++ Big 3 Rule!
Building SQLite3
C++
C#
MFC
COM/DCOM/ATL
TCP/IP Sockets
Database / SQL
Unit Testing
About Unit Testing
UnitTest Guide
UnitTest Framework
Mock Testing
Debugging Tools
Sysinternals
WinDbg
Source Control Tools
DiffMerge
WinDiff
Doxygen
CVS Source Control
TortoiseCVS
SubVersion
TortoiseSVN
W3C References
HTTP 1.1
DOM Level 1
SOAP
XML
MIME

Windows C++ Developer

DevMentor.org Community

We are redesigning DevMentor.org and are excited about opening it up to the public for free! The new site will appeal to a more diverse information seeking and sharing community.

We are dedicated to build very powerful knowledge based social-network communities that will enrich everyone. DevMentor.org will provide helpful resources and services so you can be your best and interact with other like-minded people. Build your own information community, organize events and groups or join others. Whether you're an artist, a student, or a working professional we have a place for everyone. If you’re an entrepreneur, a small business owner DevMentor.org is the place to develop those dreams and set them loose. If you need a place to find leads for that next big break, it will all be available here because we’re creating a place to do great things and making it possibly for great transformation to take place in people’s lives. It's about sharing, it's about development, it's about mentorship!


The Mission & Philosophy here at DevMentor.org is simple:

Do Good! - Share Freely, Enrich and Empower people to Transform their lives.
Give people a stage to showcase their talents to the World!

Click here to lend your support to: DevMentor.org - Creating Open Information Communities and make a donation at www.pledgie.com ! Click here, enter amount in 'Make A Pledge' to help.

My Personal Commitment to your Pledge

For everyone that helps fund DevMentor.org launch, I will return your money in full when DevMentor.org is able to run successfully and fund it's own operation. For those that don't request a return of their pledge, the money will go into a trust fund and then be donated to various charitable organizations. This is a win-win for the public, they help DevMentor.org become a reality for millions and their money is put to the best use possible and entrusted with the highest integrity! Everything will be transparent and made public here on DevMentor.org, you will know how we’re doing and how your money is being put to use. So please make a generous pledge today and help us find others who will support this wonderful cause and experiment of the human sprite!

We are setting up a new account to accept personal checks should you wish for us to return your generous pledge when it becomes possible. Pledgie.com has no way for us to do this online, we have requested they add this as a feature! If however you don't want your money returned and would like to see it go to a charity then feel free to make a pledge today online at Pledgie.com by clicking the "Donate" button on our page.

Our Goal is to have 12 servers running, with enough data to support 1 million users as our 1st milestone target. If each user is given 50Gigs of personal storage (initially) that will require a massive amount of storage space! 50 million Gigs of data.

If data is backed up locally in real-time, my top priority, then storage doubles to 100 million Gigs. We need your pledge to pay for the servers, storage cost and the bandwidth.

Please make our mission your mission and enroll others to help us get onto the launch pad. To reach our financial target we need to reach 26,000 people from the general public to commit $25 USD.

Thank You!

Rajinder Yadav

To everyone out there and the DevMentor in you, in the words of Woodrow Wilson, "You are not here merely to make a living. You are here in order to enable the world to live more amply, with greater vision, with a finer spirit of hope and achievement. You are here to enrich the world, and you impoverish yourself if you forget the errand."

Seeking Corporate Sponsors

We are looking for corporate sponsors. For your sponsorship, we will prominently display your company’s Ad banner (500×95) for 1 year along the top of DevMentor.org on a page impression per sponsor basis. As thanks for your sponsorship, your company will get preferred discount rates and a guaranteed spot without the need to bid for Ad space for the next 3 years. Contact us at: info@devmentor.org

Sponsors Preferred Discount Rate
Year 1, 40%
Year 2, 30%
Year 3, 25%

Also for the first year, we will display a small logo(120×20) of your company along the side in the sponsorship section so that every visitor will be able to see your company logo and Ad for one year and know that you’re helping to build their community!

Are you a Web Host Company

Are you a web hosting company providing excellent 24x7 phone support, a company we can grow with. Do you have the best competitive rate for bandwidth and storage, along with the latest hardware. If so DevMentor.org wants to hear from you.

Here are the 2 hosting solutions we are currently considering.

Turnkey Internet - Bulletproof Hosting

ESecureData - Dedicated servers, Unmetered Bandwith 100 mps ports


Welcome! My name is Rajinder Yadav and I am a Computer Scientist living in Toronto, Canada. I cut my teeth in the discipline in grade 5 with the Pet Commodore and made it official at the University of Toronto where I graduated with a degree in Computer Science. I am currently working as a Sr. Computer Scientist in the corporate world. Windows development is my profession, Linux and Open Source is my playground.

My passion is focused in Software Architecture and seeking out new methodologies to help me in the design, analysis and development of efficient software. To reference some of my previous work and technical writings you can scroll down to the 'Sample Projects & Articles' area.

Open Source
What a great idea and courage people had to make this vision a reality! Well recently I have stepped up my efforts to look at Open Source projects as an avenue to acquire skills in other areas that are not immediately available to me at work. For my Linux skills, I am currently lurking on wxWidget which is surprising like MFC on Windows. In fact the project takes a lot of idea from MFC, so its really easy to map GUI skills from Windows to Linux. Since wxWidget is a cross-platform UI framework and it's also written in C++ for C++ developer I really like this project. I am also lurking on RapidSVN and looking at its source code on Linux. RapidSVN is a project that is using wxWidget for its UI. The other project I am looking at is Open Forex Platform which is written in .Net/C# and who knows one day it will find its way on Linux if the MONO project can mature at a faster rate. If you want to join the Open Forex Platform project, they are still looking for warm bodies!

I am also in the process of migrating my UnitTest Framework to Linux, the core UnitTest engine has already been ported, what needs to be added is the UI Observer, that’s were wxWidget comes in.

I am using CodeBlock a free Open Source C++ IDE for my Linux development. I looked at Eclipse but CodeBlocks is written in C++ (using wxWidgets) so it’s a cross platform IDE and much faster than the java based Eclipse IDE which I find will freeze on me. Also CodeBlock gives me more flexibility to manage project settings better, and if you’re a VisualStudio developer, then you will feel at home with it’s integrated debugger and ease of being able to set breakpoints and step into code!


Linux on Windows! - My Adventure with coLinux
Since writing about Linux Virtual Machines(VM) when I starting looking into Linux, my view on them has changed. I would highly recommend the reader to install Linux on a Virtual Machine, such as VMWare, this is what I use at work and it’s great. There is also a free alternative VM called 'VirtualBox', it's an Open Source project now owned by Sun Microsystems. With these VM your system is protected as well as the valuable resource and data it contains. The advantage about having a VM like VMWare is that you can take snapshots. A Snapshot allows you to store a system at an point in time. If later you find your system is corrupted because of new installed software that's making the system crash, hang, sluggish. Possibly you changed system settings, etc. but are not sure how to roll them back. With VMWare, a simple restore to a saved snapshot will save you a lot of time and trouble!

The way I use VMWare at work is to host a production PC with Windows running on it and then I go ahead and install software that I am developing which I can test in an isolated environment. I can even perform remote debugging with the VM and all the while my working system is safe, because whatever happens on the VM stays on the VM ;) With the coLinux VM, the VM software gets installed right on top of Windows and run (natively) at the same priviledge level with some respect, if coLinux crashes your system crashes with the BSOD!

Also if you're interested in getting started with Linux, you can read an article I wrote on installing Linux Slackware which should help you.


First off, I am a software developer, not a hacker!!! In my early efforts to make inroads with Linux again I had to brush up on my hacking skills, I discovered coLinux(Cooperative Linux) which lets any Linux distro run on Windows as a virtual machine! TopologiLinux puts coLinux + Slackware Linux together to allow you to run Linux on Windows. Once you get the XServer configured, you can use KDE, GNome or the other Window Managers through a VNC client.

Warning! If you plan to try this out, expect a lot of work and reading. The forums are not active so you will need to do most things by yourself, and you know how fun that is. Also back up your drive.

Good News, I had TopologiLinux working with a Window Manager!

Bad News, I decided to reinstall everything and I couldn't get VNC to connect to the coLinux virtual Linux ever again, which I suspect is a bug with coLinux! TopologiLinux is using coLinux v0.6x, the connection problem might be fixed with the latest release, but I gave up on it since you can't simply update coLinux. Also, there is no easy way to install a fresh distro of Linux on coLinux, the wiki help pages are cryptic so you will need to live with a few zipped packages that are supplied by others. I am a (loyal) Slackware kind of guy, if you want to learn more Linux than normal this is the way to go! I just wish the Open-Source community putting in the effort to their projects would write better documents. If I can get any of the project gurus to help me, I will create a document that people can read and follow. I've sent the respective people an email, I'm guessing my emails will most likely get ignored, or get deleted by their spam filter!

I finally ended up installing Slackware 12.0 on VMWare on my Laptop and at home on my desktop I have Slackware 12.0 running on a separate partition. Infact since my desktop is a bit old (running on a AMD 1000 GHz processor with about 384MB of RAM), I opted out to make it a dedicated Linux Workstation. I'm trying to do my part to stay green and hold off on upgrading to a new system for as long as possibly, there is just too much junk going into the land fill that a lot of people just don't take the time to consider.

Rich Error Logging Tools
I have been working away on a set of tools that development managers, developers and QAs will love to have. It makes creating, logging and diagnosing application error effortless. No more having to comb through reams of cryptic log files, or resorting to the use of the dreaded printf( ).

It begins with the Error Editor that lets developers create rich error codes containing descriptive error information. Error codes can be categorized allowing each project or development team to control their own error codes. The error codes are guaranteed to be unique because they are saved to an Error database file. The database file is compact, easy to maintain and resides on a single file making it very portable.

Once the error codes are created, the Error Editor will generate a C++ header file containing all the error codes to be included in your projects. There are a few simple to use error logging macros that take care of error reporting.

The error logs can be obfuscated to protect critical company technical information. Moreover since the error database is separate from the application error log, the error codes in the error log will not mean much to the end user if they should open these files.

The error log will report the following items:

  • Proc ID
  • Thread ID
  • Application Executable Name
  • Module Name if error is from a DLL
  • Error Priority (Critical, Error, Warning, Debug)
  • Error Category
  • Error Code
  • Application Directory Location
  • Module Directory Location
  • Source Filename and Line Number
  • Date
  • Timestamp
  • Custom Message (Optional)

Finally there is the Error Log Monitor that lets you view the error and all the rich error information required by a developer to quickly diagnose an application error. Any Win32 error code that is logged will have it's descriptive error message displayed so there is no need to duplicate these error codes using the Error Editor. Currently you can execute SQL statements to filter the error log if you wish, but I plan to add support for simpler commands to do this for non-SQL savvy Users.

I plan to make these tools available soon, once I find time to learn how to use a MSI based installer.


UnitTest - The C/C++ Source Code Unit Test Framework!
UnitTest was developed on the principle of keeping things simple as possible.To that point, the source code testing framework was made to allow the developer to easily write black-box unit test cases.

To make life easier, I also created a utility that generates unit test class source code. The entire project is really tiny and is designed to build and run out of the box! You should be able to get going within 5 mins. I have also provided two sample projects for you to play with in the package.

Read the UnitTest Guide and see for youself how easy it is!

If you are not familiar with what Unit Testing is, here is a very short description.

Architectural notes and UML diagram. This information is provided for developers who may want to extend UnitTest, create their own Observer or simply want to see how it works. You don't need to know any of this for writing test cases and testing!

Note: C++ UnitTest was made using Visual Studio 2005 to build in "Unicode". Make sure your project can cleanly build in Unicode, if you're not doing this already it's a good time to do it now. All projects build cleanly at the highest compiler warning level. You will need the 7-Zip utility to unzip the project files.

Download Complete Source (v1.3)

PGP Source Code Signature File
Release (Jan 27, 2008)

Change Log

Project build notes

Update: Jan 27, 2008
UnitTest now supports runtime configuration of unit test inputs using a XML file. More information can be obtained by reading the updated UnitTest Guide.

Update: Dec 12, 2007
There is a new treeview selection dialog that allows individual test case to be selected, this was not possibly with the previous release. Changes to the core have also been made to work with Functors. Once I've tested the new build I will repackage it and make it available for download. After this release my focus will be on cleaning up the architecture and then mock class testing.

C++ UnitTest MockUp Framework
Nov 5,2007 - I have begun to explore mock-testing and ways to code mock-up classes to get beyond the limitation of today's unit testing frameworks that fail miserably at being able to test real-world production code. When it comes to unit testing classes that use encapsulation as well as other complex class structures, most unit testing framework fall short. At least I am not aware of any that do this successfully and painlessly while allowing the developer to re-factor existing production code to a unit-testable one.

Here are my initial design notes. I am trying to think of a way I can use some type of plug-and-play design pattern as well as simple builders to construct various mock-ups. It's difficult when I add the requirements that one must be able to take existing code and not modify it too much and be able to have 2 separate builds, one for production and the other for unit testing all with a simply compiler switch.

I've got something working using auto-pointer and class factory OOP/OOD techniques, but it's just a start. My current design allows the developer to select between a mock-class and the original implementation class when constructing a unit test. I have also extended "UTGen" to generate the Factory class source code to be used both by production code and in unit testing.

Generating Mock Classes
The final stage for me is to find out how to parse a C++ header file and collect all the function signatures so I can generate the mock class framework, or some fancy tool.

Mock Class Generation & Parsing C++
Several people have suggested open-source projects I can look at, but it was Christoph Pesch's reply from the Doxygen-develop mailing list that gave me exactly what I was looking for. I am very grateful for his help! I would like to thanks everyone who took their time to help me with my search, to those on the Code-Project forum and those on the Doxygen-develop mailing list and my best friend Walter, Thank-You!


Sample Projects and Articles
Here are links to some personal projects and articles I have done in the past:
Intellectual Property and Rights
You are free to use and modify the source code provided on DevMentor.org. However you are not permitted rights to redistribute any original or modified work without written permission from the author and copyright holder. I will grant permissions to use, modify and distribute the code within an organization or institution for internal use. This is to insure that DevMentor.org will remain the primary source of the information it generates and that others may not profit from what is being provided for free.  


Contact Info.
DevMentor
 
Linux
Slackware Linux Install Guide
Slackware Linux
Linux Docs
Virtual Linux On Windows
coLinux
TopologiLinux
Comp. Sci. 101
The Big-O
Data Structures
Algorithms
Data Structures
Data Structures
Stacks
Queues
Linked-List
Binary Tree
AVL Tree
B-Tree
Hash-Table
Algorithms
Sorting
Bubble Sort
Hast Sort
Quick Sort
Searching
Linear Search
Binary Search
Hash Search

Copyright © 2007 Rajinder Yadav, All rights reserved
DevMentor.org and Insignia are Registered Trademarks of DevMentor.org Corp.

This site uses dead-links.com to validate links.