The STL provides a ready-made set of common classes for C++, such as containers and associative arrays, that can be used with any built-in type and with any user-defined type that supports some elementary operations (such as copying and assignment). STL algorithms are independent of containers, which significantly reduces the complexity of the library.
The STL achieves its results through the use of templates. This approach provides compile-time polymorphism that is often more efficient than traditional run-time polymorphism. Modern C++ compilers are tuned to minimize any abstraction penalty arising from heavy use of the STL.
The STL was created as the first library of generic algorithms and data structures for C++, with four ideas in mind: generic programming, abstractness without loss of efficiency, the Von Neumann computation model, and value semantics.
The C++ STL provides programmers with the constructs, grouped into three categories namely:
Sequences:
C++ Vectors
C++ Lists
C++ Double-Ended Queues
Container Adapters:
C++ Stacks
C++ Queues
C++ Priority Queues
Associative Containers:
C++ Bitsets
C++ Maps
C++ Multimaps
C++ Sets
C++ Multisets
Containers
The STL contains sequence containers and associative containers. The standard sequence containers include vector, deque and list. The standard associative containers are set, multiset, map and multimap.
Vector:
a dynamic array, like C array (i.e., capable of random access) with the ability to automatically resize itself when inserting or erasing an object. Inserting and removing an element to/from back of the vector at the end takes amortized constant time. Inserting and erasing at the beginning or in the middle is linear in time.
A specialization for type bool exists, which optimizes for space by storing bool values as bits.
List
a doubly-linked list; elements are not stored in contiguous memory. Opposite performance from a vector. Slow lookup and access (linear time), but once a position has been found, quick insertion and deletion (constant time).
Deque(double ended queue):
a vector with insertion/erase at the beginning or end in amortized constant time, however lacking some guarantees on iterator validity after altering the deque.
Associative containers - unordered collections
set:
a sorted set; inserting/erasing elements in a set does not invalidate iterators pointing in the set. Provides set operations union, intersection, difference, symmetric difference and test of inclusion. Type of data must implement comparison operator < title="Self-balancing binary search tree" href="http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree">self-balancing binary search tree.
multiset:
same as a set, but allows duplicate elements.
map:
a sorted associative array; allows mapping from one data item (a key) to another (a value). Type of key must implement comparison operator <>
multimap:
same as a map, but allows duplicate keys.
hash_set, hash_multiset, hash_map, hash_multimap:
similar to a set, multiset, map, or multimap, respectively, but implemented using a hash table; keys are not sorted, but a hash function must exist for key type. These containers are not part of the C++ Standard Library, but are included in SGI's STL extensions, and are included in common libraries such as the GNU C++ Library in the __gnu_cxx namespace. These are scheduled to be added to the C++ standard as part of TR1, with the slightly different names of unordered_set, unordered_multiset, unordered_map and unordered_multimap.
Bitset:
stores series of bits similar to a fixed-sized vector of bools. Also optimizes for space
Valarray:
another C-like array like vector, but is designed for high speed numerics at the expense of some programming ease and general purpose use. It has many features that make it ideally suited for use with vector processors in traditional vector supercomputers and SIMD units in consumer-level scalar processors, and also ease vector mathematics programming even in scalar computers.
STL Function Objects
If you separate the two words function and object, you already know each one on its own. If you are already a programmer—which we assume at this point—you know the meaning of each one in regard to software engineering:
· A function is the typical way of getting a particular job done in C++ programs; in other words, it defines the execution flow of a specific operation. It usually has one defined entry and one defined exit point. There have been many debates on whether there should only be one or several exit point(s); however, this does not matter in regard to this article.
· An object refers to the concrete creation of a datatype that takes up a certain amount of space at a specific memory location. The term object is interchangeable with the term instance which, in this regard, means the same.
A function object extends the characteristics of regular functions by using object-oriented C++ features such as generic prgoramming and abstraction. Thus, they can be referred to as smart functions that provide several advantages over regular functions:
· Function objects can have member functions as well as member attributes. Thus, they can carry a state that even can be different at the same time.
· Due to their nature, function objects can be initialized before their usage.
· Opposed to regular functions that can only have different types if their signatures differs, function objects can have different types even with the same signature; this ensures the type safety of the C++ language. If you provide a function object as the sorting criteria for a collection, it is guaranteed that you cannot assign, combine, or compare collections with a different sorting criteria.
· Function objects are usually faster than regular functions.
Links:
The C++ Standard Library -
http://books.google.com/books?hl=en&id=n9VEG2Gp5pkC&dq=STL&printsec=frontcover&source=web&ots=Rdf6qk68OT&sig=FoQUpvp1Mom_CvnSWXoodfjHm_o&sa=X&oi=book_result&resnum=12&ct=result
STL Pocket Reference -
http://books.google.com/books?id=NYTjffiMxr4C&pg=PA1&dq=STL&sig=ACfU3U0lb8BcN6HmiCHJhRyCAbs1hkzv4A#PPA3,M1
Using the STL: The C++ Standard Template Library -
http://books.google.com/books?id=yOebRChQI3EC&printsec=frontcover&dq=STL&sig=ACfU3U28ZhUwJoLOiopoea3FYtbBFM0Kiw#PPR12,M1
Standard Template Library Overview - http://www.sgi.com/tech/stl/table_of_contents.html
STL - http://en.wikipedia.org/wiki/Standard_Template_Library
C++ Template Library - http://www.cppreference.com/cppstl.html
Functor (or) Function Objects - http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c11449/
Functors - http://artins.org/ben/programming/mactechgrp-artin-cpp-functors.pdf
STL Algorithms -
http://www.infosys.tuwien.ac.at/Research/Component/tutorial/prw432.htm
Search this Blog:
STL (Standard Template Library) Part1
Source Code Reverse Engineering using Doxygen,GraphViz DOT & TeX
We can use Doxygen with GraphViz's DOT to REVERSE ENGINEER existing C++ Codebase. It will help us to understand the existing SSO Codebase better !!!
You need the following Software Tools to generate C lass Diagrams & Call Graphs from C++
code.
Tools:
1. Doxygen - Documetation Generation Tool
2. Miktex - is an up-to-date TeX implementation for the Windows operating system.
3. GraphViz's Dot - Graph Visualization Software
Procedure to create Class Diagrams:
1. Install all above Software
2. Create Doxygen Configuration File using "Doxygen –g" command … It creates a configuration file named "Doxyfile"
3. Modify "Doxyfile" Settings
a. HAVE_DOT = Yes
b. DOT_PATH = " Your DOT.exe Path" (Only till directory , excluding dot.exe)
How to generate Documentation:
Note:
Till the time you have Doxygen style Comments(ex:///), You can not generate any documentation with Doxygen.
"doxywizard.exe" is the GUI tool for generating Doxygen based Documentation.
"doxygen" is commandline tool.
From GUI:
Once Doxyfile is generated, load this doxyfile & select the Project Folder then Click on "Start" Button.
From Commandline:
Once Doxyfile is generated, use the command below to generate documentation (As doxygen path will be in present in Path variable, you can RUN it from anywhere).
Command : doxygen [configName]
Links:
Miktex Download Website - http://miktex.org/Setup.aspx
Doxygen Website - http://www.stack.nl/~dimitri/doxygen/
GraphViz Tool Download - http://www.graphviz.org/Download_windows.php
Doxygen & GraphViz Dot Integration - http://www.stack.nl/~dimitri/doxygen/diagrams.html
Happy Reverse Engineering your Code !!!
Source Code Analysis Tools
Source Code Analysis Tools help in understanding the Code Flow better.
Popular C/C++ Source Code Analysis Tools:
1. Source Navigator
2. Source Insight
3. CBrowser
4. CScope
5. Source Browser - For C Language Analysis
6. Flawfinder - is a Programming Tool that examines C or C++ Source Code looking for Security Weaknesses.
Source Navigator - Source Navigator is an OpenSource C++ Source Code Analysis Tool .With it, you can edit your source code, display relationships between classes and functions and members, and display call trees.
Links:
Source Navigator - http://sourceforge.net/project/showfiles.php?group_id=51180
Happy Source Code Analysis!!!
The 25 Most Innovative Products of the Year by PC World – 2007
1. Google Gears
Innovation: Plug-in lets Web applications work offline.
Benefit: Tackles the single biggest hurdle to making Web apps truly convenient.
Imagine firing up only one application--a Web browser--for handling all of your daily computer tasks. It's a nice dream, but it has one major problem: What do you do when you're offline? Google Gears, a Windows application now in beta, solves this problem by allowing service designers to create versions that still work when your PC doesn't have an Internet connection. Google Reader, Zoho Writer(which added offline editing via Gears in late 2007), and online task manager Remember the Milk already use it, and Google is working to add Gears to other applications in its stable. (If you're thinking of ditching desktop software entirely, read one writer's take in "Life Without Desktop Software.")
9. Facebook API
Innovation: Platform lets anyone with a good idea and some coding chops add real value to Facebook.
Benefit: Facebook taps developers' creativity, in turn permitting Facebook users to customize their pages.
Sure, the killer app of Facebook has not been written yet--and many of the ones that exist now are kind of silly. But Facebook has been on a roll in more ways than one, having led to the creation of the Google-backed OpenSocial, which looks likely to result in open platforms' becoming widespread. Common ground should spark lots of creativity, and it should keep the social networking and media buzz alive
17. Zoho Notebook
Innovation: Web-only app stores just about any kind of content and allows you to share it with anyone.
Benefit: More full-featured than competing online tools.
AdventNet's Zoho tools include everything from wiki software to customer relations management and project management applications, many of them free. Zoho Notebook(free, in public beta) continues the winning streak. You can enter text, graphics, audio, video, and embedded content from other sites onto your notebook's pages--or use the page as a single word processing document or spreadsheet. Put together everything on a certain subject, and you're ready to share your work with online compatriots.
20. Mint.com
Innovation: Web site aggregates your financial account transaction data, alerting you to any unusual activity or to a rapidly dwindling balance.
Benefit: Takes most of the work out of keeping on top of your money.
Signing up for Mintrequires a leap of faith--you must give the site the numbers and passwords for your bank and credit card accounts. But once you do, it acts as your personal-finance lackey. Mint downloads your latest transactions for all accounts and does its best to categorize them. You decide when you want to receive an alert, such as for when a bill is due, a big purchase appears on your credit card, or you just got a nice, fat deposit.
21. Microsoft Popfly
Innovation: Lets you use Microsoft's Silverlightplatform to create Web mashups.
Benefit: Though Popfly is still in early beta, its operation is clearer and its display is more attractive than that of the similar Yahoo Pipes tool.
If you ever played with Legos as a kid, then you should be able to assemble a Web mashup in Microsoft's Popfly. No coding know-how needed--using Popfly is as simple as choosing content sources (such as pictures, video, or news feeds from various online sources) and connecting them to a display model (such as a video player, a dynamic box for text, or a game of whack-a-mole that pops up pictures, for instance). VoilĂ , you have your mashup. You can embed the resulting creation in a blog entry or Web page, or just share its URL so others can admire your work.
23. Ask.com
Innovation: Melds comprehensive search results more coherently than competing universal searches do.
Benefit: Proves that not every site needs to mimic Google, and that a venerable search engine company can do cool new stuff.
Ask.com, a compete redesign of the former Ask Jeeves site, asks very little but gives a lot via its thoughtfully designed interface, including search suggestions as you type. With one query you can retrieve traditional search results as well as news, images, blogs, video, and more. Once you've searched, you can filter the results with useful suggestions to home in on just what you were looking for. The site is visually minimalist, but you can skin it for a new look. If privacy is a concern, AskEraser wipes away private data that search engines typically store.
24. eXpresso
Innovation: Allows Excel users to share their spreadsheets, online or off.
Benefit: Melds the best of traditional office software and Web-based services.
eXpresso($80 per seat per year) adds a new twist to Web applications, offering both Web-based sharing in a standard format and tight integration with the most familiar spreadsheet application, Microsoft's Excel. Users can share spreadsheets in real time using eXpresso's service, which also allows you to restrict some users' access to certain segments of a master spreadsheet. In a nutshell, eXpresso is delivering today what Microsoft has promised that its Office suite will do in the future.
Link:
http://www.pcworld.com/article/id,140663/article.html
Unix Shell Scripts
A Unix shell, also called "the command line", provides the traditional user interface for the Unix operating system and for Unix-like systems. Users direct the operation of the computer by entering command input as text for a shell to execute. Within the Microsoft Windows suite of operating systems the analogous program is command.com, or cmd.exe for Windows NT-based operating systems.
The most generic sense of the term shell means any program that users use to type commands. Since in the Unix operating system users can select which shell they want to use (which program should execute when they login), many shells have been developed. It is called a "shell" because it hides the details of the underlying operating system behind the shell's interface (in contrast with the "kernel", which refers to the lowest-level, or 'inner-most' component of an operating system). Similarly, graphical user interfaces for Unix, such as GNOME, KDE, and Xfce can be called visual shells or graphical shells. By itself, the term shell is usually associated with the command line. In Unix, any program can be the user's shell. Users who want to use a different syntax for typing commands can specify a different program as their shell.
The term shell also refers to a particular program, such as the Bourne shell, sh. The Bourne shell was the shell used in early versions of Unix and became a de facto standard; every Unix-like system has at least one shell compatible with the Bourne shell. The Bourne shell program is located in the Unix file hierarchy at /bin/sh. On some systems, such as BSD, /bin/sh is a Bourne shell or equivalent, but on other systems such as Linux, /bin/sh is likely to be a link to a compatible, but more feature-rich shell(like Bash shell). POSIX specifies its standard shell as a strict subset of the Korn shell.
You can use any one of these shells if they are available on your system. And you can switch between the different shells once you have found out if they are available -
.
Different Shells
1. Bourne shell (sh)
2. C shell (csh)
3. TC shell (tcsh)
4. Korn shell (ksh)
5. Bourne Again SHell (bash)
Bourne shell (sh)
This is the original Unix shell written by Steve Bourne of Bell Labs. It is available on all UNIX systems. This shell does not have the interactive facilites provided by modern shells such as the C shell and
Korn shell
You are advised to to use another shell which has these features.
The Bourne shell does provide an easy to use language with which you can write shell scripts.
C shell (csh)
This shell was written at the University of California, Berkley. It provides a C-like language with which to write shell scripts- hence its name.
TC shell (tcsh)
This shell is available in the public domain. It provides all the features of the C shell together with emacs style editing of the command line.
Korn shell (ksh)
This shell was written by David Korn of Bell labs. It is now provided as the standard shell on Unix systems. It provides all the features of the C and TC shells together with a shell programming language similar to that of the original Bourne shell. It is the most efficient shell. Consider using this as your standard interactive shell.
Bourne Again Shell (bash)
This is a public domain shell written by the Free Software Foundation under their GNU initiative. Ultimately it is intended to be a full implementation of the IEEE Posix Shell and Tools specification. This shell is widely used within the academic commnity. bash provides all the interactive features of the C shell (csh) and the Korn shell (ksh). Its programming language is compatible with the Bourne shell (sh). If you use the Bourne shell (sh) for shell programming consider using bash as your complete shell environment.
Summary of shell facilities
--------------------------Bourne C TC Korn BASH
________________________________________________________
command history - No Yes Yes Yes Yes
command alias - No Yes Yes Yes Yes
shell scripts - Yes Yes Yes Yes Yes
filename completion - No Yes* Yes Yes* Yes
command line editing - No No Yes Yes* Yes
job control - No Yes Yes Yes Yes
________________________________________________________
* not the default setting for this shell
Details:
The sh utility is a sophisticated shell (command interpreter) that offers, depending on the options chosen, compatibility with the Korn, Bourne-Again, and POSIX shells available on many UNIX systems. You can use it as a replacement for the standard Windows command interpreter (cmd.exe)
When invoked with the sh name, sh is primarily a POSIX.2 compatible shell with some selected Korn and Bourne-Again shell behavior.
resh is a restricted version of that shell and is equivalent to sh -r. For more information on the restricted shell, see the description of the -r option. Regardless of how it is launched, this reference page uses resh to refer to the restricted shell.
ksh is a version of the shell that uses, by default, standard Korn behavior when it may conflict with bash or MKS KornShell behavior. ksh is equivalent to running sh with the -K or -o korn options. Regardless of how it is launched, this reference page uses ksh to refer to the shell operating in KornShell mode.
Bash(Bourne-Again Shell) is the shell, or command language interpreter, that will appear in the GNU operating system. Bash is an sh-compatible shell that incorporates useful features from the Korn shell (ksh) and C shell (csh).
Accessing AWK variables in SHELL Script: Using “eval”
eval `echo $* awk -F: '{printf("a=%s; b=%s; c=%s\n", $1, $2, $3)}'`
print $a
print $b
print $c
Accessing SHELL variables in AWK Script
1.Protect the shell variables from awk by enclosing them with "'" (i.e. double quote - single quote - double quote).
awk '{print "'"$VAR1"'", "'"$VAR2"'"}' input_file
2. Use the -v switch to assign the shell variables to awk variables. This works with nawk, but not with all flavours of awk. On my system (Solaris 2.6) -v cannot be used with /usr/bin/awk but will work with /usr/xpg4/bin/awk.
nawk -v v1=$VAR1 -v v2=$VAR2 '{print v1, v2}' input_file
Links:
Advanced Bash-Scripting Guide -
http://www.faqs.org/docs/abs/HTML/index.htmlhttp://tldp.org/LDP/abs/html/
Unix Shell Scripting - http://cfaj.freeshell.org/shell/
Bash Shell Guide - www.gnu.org/software/bash/manual/
Unix Shells - http://www.ussg.iu.edu/usail/external/recommended/diffshell.html
Effective AWK programming - http://www.gnu.org/manual/gawk/gawk.pdf
Manipulating Strings : Shell Scripts -
http://www.faqs.org/docs/abs/HTML/string-manipulation.html
Linux Shell Scripting Tutorial v1.05r3 - A Beginner's handbook - http://www.cyberciti.biz/nixcraft/linux/docs/uniqlinuxfeatures/lsst/
Awk, Sed & grep - http://www.securitydocs.com/pdf/3489.PDF
Awk & Sed - http://unix.ittoolbox.com/topics/t.asp?t=429&p=429&h1=429#
Accessing AWK variables from Shell -
http://www.unix.com/shell-programming-scripting/32384-access-awk-variables-outside-scope.html
Accessing Shell Variables from AWK -
http://www.tek-tips.com/faqs.cfm?fid=1281
.Net Programming Introduction
.NET Framework
The .NET Framework is the infrastructure for the new Microsoft .NET Platform.
The .NET Framework is a common environment for building, deploying, and running Web Services and Web Applications.
The .NET Framework contains common class libraries - like ADO.NET, ASP.NET and Windows Forms - to provide advanced standard services that can be integrated into a variety of computer systems.
The .NET Framework is language neutral. Currently it supports C++, C#, Visual Basic, JScript (The Microsoft version of JavaScript) and COBOL. Third-party languages - like Eiffel, Perl, Python, Smalltalk, and others - will also be available for building future .NET Framework applications.
The new Visual Studio.NET is a common development environment for the new .NET Framework. It provides a feature-rich application execution environment, simplified development and easy integration between a number of different development languages.
.NET Internet Standards
.NET is built on the following Internet standards:
HTTP, the communication protocol between Internet Applications
XML, the format for exchanging data between Internet Applications
SOAP, the standard format for requesting Web Services
UDDI, the standard to search and discover Web Services
Major Components of .NET
The .NET framework can only be exploited by languages that are compliant with .NET. Most of Microsoft languages have been made to fully comply with .NET.
.NET also introduces Web Forms, Web Services and Windows Forms, WPF,WCF,WF. The reason why they have been shown separately and not as a part of a particular language is that these technologies can be used by any .NET compliant language. For example Windows Forms is used by VC, VB.NET, C# all as a mode of providing GUI.
The next component of .NET is the .NET Framework Base Classes. These are the common class libraries that can be used by any .NET compliant language. These classes provide the programmers with a high degree of functionality that they can use in their programs. For example their are classes to handle reading, writing and manipulating XML documents, enhanced ADOs etc.
The bottom most layer is the CLR - the common runtime language.
What is "Common Language Specification" (CLS)
One of the obvious themes of .NET is unification and interoperability between various programming languages. In order to achieve this; certain rules must be laid and all the languages must follow these rules. In other words we can not have languages running around creating their own extensions and their own fancy new data types. CLS is the collection of the rules and constraints that every language (that seeks to achieve .NET compatibility) must follow.
Microsoft have defined three level of CLS compatibility/compliance. The goals and objectives of each compliance level has been set aside.
What is "Common Language Runtime" (CLR)
CLR is .NET equivalent of Java Virtual Machine (JVM). It is the runtime that converts a MSIL code into the host machine language code, which is then executed appropriately.
What is "Microsoft Intermediate Language" (MSIL)
A .NET programming language (C#, VB.NET, J# etc.) does not compile into executable code; instead it compiles into an intermediate code called Microsoft Intermediate Language (MSIL). As a programmer one need not worry about the syntax of MSIL - since our source code in automatically converted to MSIL. Complete specifications of MSIL can be found at http://msdn.microsoft.com/net/ecma/part_3_IL_inst_set.pdf .
The MSIL code is then send to the CLR (Common Language Runtime) that converts the code to machine language which is then run on the host machine[7]. MSIL is similar to Java Byte code. A Java program is compiled into Java Byte code (the .class file) by a Java compiler, the class file is then sent to JVM which converts it into the host machine language.
What is "Common Type System" (CTS)
All this time we have been talking about language interoperability, and .NET Class Framework. None of this is possible without all the language sharing the same data types. What this means is that an int should mean the same in VB, VC++, C# and all other .NET compliant languages. Same goes for all the other data types.
This is achieved through introduction of Common Type System (CTS). CTS, much like Java, defines every data type as a Class. Every .NET compliant language must stick to this definition. Since CTS defines every data type as a class; this means that only Object-Oriented (or Object-Based) languages can achieve .NET compliance.
The .NET Compilation Stages
The Code written in .NET isn't compiled directly to the executable, instead .NET uses two steps to compile the code.
First, the code is compiled to an Intermediate Language called Microsoft Intermediate Language (MSIL).
Second, the compiled code will be recompiled with the Common Language Runtime ( CLR ), which converts the code to the machine code.
The basic Idea of this two stages was to make the code language independence.
MSCOREE.DLL, MSCORWKS.DLL, MSCORSVR.DLL
They are regular DLL's that also expose some COM interfaces.The public COM interfaces are polished in the mscoree.idl, while the public C style interfaces are in the mscorree.h file in the framework SDK. The mscorwks.dll are not published, that means they are private and should
therefore not be used from user code.
This object is implemented in either the mscorwks.dll or mscorsvr.dll, depending on factors such as a how many processors the system has or environment variable settings. Either of these DLLs are loaded by mscoree.dll, which acts as a shim to load either of the modules mscorwks or mscorsvr.
.NET Interoperability
Use P/Invoke for calling Windows API (or) Legacy Applications API functions from Managed Code.Using the P/Invoke service in the .NET Compact Framework includes three primary steps:
1.declaration
2.invocation
3.error handling.
Unload Assemblies using Code
We can unload assemblies by using AppDomain class. We can open make our own appDomain dynamically and ask a particular assembly to run in that appDomain. Also we can easily unload that appDomain.
AppDomain is a virtual location in memory where a process runs. Usually, each process runs in its own space and if first process making a call to second process, and if second process crashes, so first will also crash. So in .NET to solve this problem give us concept of AppDomains. The main process is created by the .NET CLR and then, each assembly runs in its own AppDomain. And many AppDomains can exist in a single process space. So, if one AppDomain crashes, only its space is released and the process remains as is.
This reduces the chances of a system crash. Also, if an AppDomain does crash, the CLR throws back an exception which can be handled in the caller appDomain.AppDomain Class: The AppDomain class is the programmatic interface to application domains. This class includes methods to create and unload domains, to create instances of types in domains, and to register for various notifications such as application domain unloading.
Links:
Programming with the .NET Framework - http://msdn.microsoft.com/en-us/library/aa720433(VS.71).aspx
A Guided Tour of Windows Presentation Foundation - http://msdn.microsoft.com/en-us/library/aa480221.aspx
Introduction to Microsoft .NET - http://www.w3schools.com/ngws/ngws_intro.asp
How to unload .NET Assemblies - http://www.codeproject.com/KB/dotnet/dotnet.aspx
.NET Interoperability - -http://msdn.microsoft.com/en-us/magazine/cc164123.aspx
Runtime Code Generation with JVM & CLR - http://www.itu.dk/~sestoft/rtcg/rtcg.pdf
JVM vs CLR memory allocation - http://benpryor.com/blog/2006/05/04/jvm-vs-clr-memory-allocation/
C# for C++ Developers - http://msdn.microsoft.com/en-us/library/yyaad03b.aspx
Sharp New Language: C# Offers the Power of C++ and Simplicity of Visual Basic -
http://msdn.microsoft.com/en-us/magazine/bb984953.aspx
http://msdn.microsoft.com/en-us/magazine/dd148640.aspx
http://msdn.microsoft.com/en-us/magazine/bb984953.aspx
http://www.codeproject.com/KB/interviews/jeffprosise17aug2000.aspx
Joshua Trupin of MSDN: What .NET means to developers -
http://www.codeproject.com/KB/interviews/interview_msdn_0103.aspx
The Future of Visual Basic: Web Forms, Web Services, and Language Enhancements Slated for Next Generation –
http://msdn.microsoft.com/en-us/magazine/bb985089.aspx
.NET StockTrader Sample Application(An End-to-End Sample Application Illustrating Windows Communication Foundation and .NET Enterprise Technologies) - http://msdn.microsoft.com/en-us/netframework/bb499684.aspx
.NET Getting Started -
http://msdn.microsoft.com/en-us/magazine/aa720108%28printer%29.aspx
http://www.pinvoke.net/
Miscellaneous URLs:
http://w3schools.com/aspnet/default.asp
http://dotnetspider.com/tutorials/
http://free-ebooks-for-u.blogspot.com/