Tech News

Windows Phone 7 Application Development

posted Dec 20, 2010, 10:37 PM by Shaukat Mahmood Ahmad

A practical and very useful video learning guide for Absolute beginners of Windows Phone 7 Application Developers on

Links to Detailed Learning series can be found here (Windows Phone 7 Application Development for Absolute Beginners).

UML Reverse Engineering for Existing Java, C# & VB Code

posted Dec 5, 2010, 4:58 AM by Shaukat Mahmood Ahmad   [ updated Dec 5, 2010, 5:02 AM ]

UML Reverse Engineering for Existing Java, C# , and Visual Basic .NET Code

Altova UModel® 2011 imports Java, C#, and Visual Basic .NET source code and binary files, and generates UML diagrams to facilitate analysis, enhancement, or reuse.

Hand-written or legacy source code can be difficult to decipher, since operability of the software does not depend on complete or accurate documentation, or even on a well-structured code body. Further, some projects incorporate binary or byte-code files that also require analysis. The original developer may no longer be available, or maybe development was assigned in pieces and no single individual knows the entire project. 

Altova UModel® 2011 includes a powerful reverse engineering capability to read Java 1.4, Java 5.0, Java 6.0 C# 1.2, C# 2.0, C# 3.0, C# 40, VB 7.1, VB 8.0, or VB 9.0 source code and binary files, and generate UML models for a visual representation that is much clearer and more easily analyzed than a printout of the source as text. 

Like other UModel® 2011 features and operations, reverse engineering offers many options to adapt to the way you want to work, instead of forcing you to use a particular paradigm. The UModel® 2011 Project menu offers Import options for source code and binary files:

Altova UModel project menu

Reverse Engineer Source Code

UModel® 2011 can import Java source code files from JBuilder, Eclipse, and NetBeans projects, C# source code from Microsoft Visual Studio and Borland C#, and Visual Basic .NET project files.

Altova UModel import dialog

You can import a single directory, a directory tree, or an entire project, and you can choose to merge the imported code into an existing UModel® 2011 project, or create a new one. 

You can apply reverse engineering to model an existing application. Or, you can get a new project off to a quick start by importing class libraries such as employee, customer, vendor, and other classes that are already known to your organization.

Altova UModel reverse engineering messages

As UModel® 2011 reverse-engineers your selection, the message window displays progress. UModel® 2011 can be set to automatically open the diagrams after the files process, and tabs below the view window will give you easy access to any diagram you want.

If you import Java source code that has accompanying JavaDocs, the UModel® 2011 documentation window can be optionally populated for each UML diagram. Similarly, C# and Visual Basic .NET DocComments can also be imported as documentation for your model project.

UModel® 2011 reverse engineering of Visual Basic .NET code is line-oriented and case-insensitive (so Class1, CLASS1, class1, ClAsS1 are considered as identical), consistent with looser Visual Basic .NET naming requirements.

UModel automatically resolves namespace or class aliases during reverse engineering. Later, when you update the code from your model after enhancements have been added, the correct alias definitions are again inserted.

The UModel® 2011 Hierarchy helper window offers a quick view of generalization and inheritance relationships that can assist in your analysis of the reverse engineered application. You can click the Hierarchy tab to view the relationships of a class selected in any class diagram or in the Model Tree.

Altova UModel reverse engineering Hierarchy window

Generate Sequence Diagrams After Reverse Engineering

UModel® 2011 lets you generate sequence diagrams from source code files that have been reverse engineered into UML classes. The resulting sequence diagrams can be an invaluable aid to assist analysis of complex interactions.

UML sequence diagram

Click image to enlarge screenshot

The Sequence Diagram Generation dialog offers options to create lists of types and operation names that will not appear in your generated diagram, and to automatically split very large sequence diagrams and hyperlink them for convenient navigation.

Altova UModel sequence diagram generation dialog

Click here to visit the UModel sequence diagrams page for more information on generating sequnce diagrams from reverse engineered code.

Reverse Engineer Binary Files

UModel® 2011 can import Java, C#, and Visual Basic .NET binary files. For Java, type import is supported for all class archives adhering to the Java Virtual Machine Specification. For C#, type import is supported for assemblies targeting the .NET Framework and .NET Compact Framework for PocketPC, Smartphone, and WindowsCE. For Visual Basic .NET, DLLs and EXEs from the filesystem, or an assembly from the global cache (GAC) or from a MSVS.NET reference can be imported. 

(In order to import binary files, the appropriate Java, C#, or Visual Basic runtime environment, development kit, or .NET framework must be installed.) 

After selecting Import Binary Types from the Project menu, you can select various options from the Import Binary dialog:

Altova UModel binary import

Additional selections may be available, depending on the requirements of the specific binaries you select. The UModel® 2011 integrated Help system can guide you through all the details of importing binary files.

Altova UModel reverse engineering binary file selection

Click image to enlarge screenshot

You can choose to hyperlink elements to diagrams and generate package dependency diagrams to embed more explicit cross referencing within the UML model. You can also instruct UModel to automatically open diagrams generated through reverse engineering. 

Successful import of a large binary project will create numerous entries in the Model Tree.

Altova UModel model tree

When you open a diagram and select any element, it is highlighted in the Model Tree to aid in navigation and analysis.

Altova UModel reverse engineering model tree

Click image to enlarge screenshot

If you make revisions or enhancements to the models of binary files, UModel® 2011 lets you generate new source code to implement the changes. Simply open the Model Tree and select the component for the reverse-engineered binary. In the Properties window for the component, check the box labeled “use for code engineering,” and assign a directory.

Altova UModel properties helper window

When you choose Overwrite Program Code from the Project menu, UModel® 2011 will write new source code for the model you originally created from binary files. 

Of course whether you reverse engineer source code or binary files, the UML diagrams are presented with all the same UModel® 2011 syntax coloring, entry helpers, and quick editing buttons as UML diagrams you draw yourself.


Programmer Competency Matrix

posted Dec 2, 2010, 7:17 AM by Shaukat Mahmood Ahmad

Computer Science
 2n (Level 0)n2 (Level 1)(Level 2)log(n) (Level 3)Comments
data structuresDoesn't know the difference between Array and LinkedListAble to explain and use Arrays, LinkedLists, Dictionaries etc in practical programming tasksKnows space and time tradeoffs of the basic data structures, Arrays vs LinkedLists, Able to explain how hashtables can be implemented and can handle collisions, Priority queues and ways to implement them etc.Knowledge of advanced data structures like B-trees, binomial and fibonacci heaps, AVL/Red Black trees, Splay Trees, Skip Lists, tries etc.
algorithmsUnable to find the average of numbers in an array (It's hard to believe but I've interviewed such candidates)Basic sorting, searching and data structure traversal and retrieval algorithmsTree, Graph, simple greedy and divide and conquer algorithms, is able to understand the relevance of the levels of this matrix.Able to recognize and code dynamic programming solutions, good knowledge of graph algorithms, good knowledge of numerical computation algorithms, able to identify NP problems etc.Working with someone who has a good topcoder ranking would be an unbelievable piece of luck!
systems programmingDoesn't know what a compiler, linker or interpreter isBasic understanding of compilers, linker and interpreters. Understands what assembly code is and how things work at the hardware level. Some knowledge of virtual memory and paging.Understands kernel mode vs. user mode, multi-threading, synchronization primitives and how they're implemented, able to read assembly code. Understands how networks work, understanding of network protocols and socket level programming.Understands the entire programming stack, hardware (CPU + Memory + Cache + Interrupts + microcode), binary code, assembly, static and dynamic linking, compilation, interpretation, JIT compilation, garbage collection, heap, stack, memory addressing...
Software Engineering
 2n (Level 0)n2 (Level 1)(Level 2)log(n) (Level 3)Comments
source code version controlFolder backups by dateVSS and beginning CVS/SVN userProficient in using CVS and SVN features. Knows how to branch and merge, use patches setup repository properties etc.Knowledge of distributed VCS systems. Has tried out Bzr/Mercurial/Darcs/Git
build automationOnly knows how to build from IDEKnows how to build the system from the command lineCan setup a script to build the basic systemCan setup a script to build the system and also documentation, installers, generate release notes and tag the code in source control
automated testingThinks that all testing is the job of the testerHas written automated unit tests and comes up with good unit test cases for the code that is being writtenHas written code in TDD mannerUnderstands and is able to setup automated functional, load/performance and UI tests
 2n (Level 0)n2 (Level 1)(Level 2)log(n) (Level 3)Comments
problem decompositionOnly straight line code with copy paste for reuseAble to break up problem into multiple functionsAble to come up with reusable functions/objects that solve the overall problemUse of appropriate data structures and algorithms and comes up with generic/object-oriented code that encapsulate aspects of the problem that are subject to change.
systems decompositionNot able to think above the level of a single file/classAble to break up problem space and design solution as long as it is within the same platform/technologyAble to design systems that span multiple technologies/platforms.Able to visualize and design complex systems with multiple product lines and integrations with external systems. Also should be able to design operations support systems like monitoring, reporting, fail overs etc.
communicationCannot express thoughts/ideas to peers. Poor spelling and grammar.Peers can understand what is being said. Good spelling and grammar.Is able to effectively communicate with peersAble to understand and communicate thoughts/design/ideas/specs in a unambiguous manner and adjusts communication as per the contextThis is an often under rated but very critical criteria for judging a programmer. With the increase in outsourcing of programming tasks to places where English is not the native tongue this issue has become more prominent. I know of several projects that failed because the programmers could not understand what the intent of the communication was.
code organization within a fileno evidence of organization within a fileMethods are grouped logically or by accessibilityCode is grouped into regions and well commented with references to other source filesFile has license header, summary, well commented, consistent white space usage. The file should look beautiful.
 2n (Level 0)n2 (Level 1)(Level 2)log(n) (Level 3)Comments
code organization across filesNo thought given to organizing code across filesRelated files are grouped into a folderEach physical file has a unique purpose, for e.g. one class definition, one feature implementation etc.Code organization at a physical level closely matches design and looking at file names and folder distribution provides insights into design
source tree organizationEverything in one folderBasic separation of code into logical folders.No circular dependencies, binaries, libs, docs, builds, third-party code all organized into appropriate foldersPhysical layout of source tree matches logical hierarchy and organization. The directory names and organization provide insights into the design of the system.The difference between this and the previous item is in the scale of organization, source tree organization relates to the entire set of artifacts that define the system.
code readabilityMono-syllable namesGood names for files, variables classes, methods etc.No long functions, comments explaining unusual code, bug fixes, code assumptionsCode assumptions are verified using asserts, code flows naturally - no deep nesting of conditionals or methods
defensive codingDoesn't understand the conceptChecks all arguments and asserts critical assumptions in codeMakes sure to check return values and check for exceptions around code that can fail.Has his own library to help with defensive coding, writes unit tests that simulate faults
 2n (Level 0)n2 (Level 1)(Level 2)log(n) (Level 3)Comments
error handlingOnly codes the happy caseBasic error handling around code that can throw exceptions/generate errorsEnsures that error/exceptions leave program in good state, resources, connections and memory is all cleaned up properlyCodes to detect possible exception before, maintain consistent exception handling strategy in all layers of code, come up with guidelines on exception handling for entire system.
IDEMostly uses IDE for text editingKnows their way around the interface, able to effectively use the IDE using menus.Knows keyboard shortcuts for most used operations.Has written custom macros
APINeeds to look up the documentation frequentlyHas the most frequently used APIs in memoryVast and In-depth knowledge of the APIHas written libraries that sit on top of the API to simplify frequently used tasks and to fill in gaps in the APIE.g. of API can be Java library, .net framework or the custom API for the application
frameworksHas not used any framework outside of the core platformHas heard about but not used the popular frameworks available for the platform.Has used more than one framework in a professional capacity and is well-versed with the idioms of the frameworks.Author of framework
 2n (Level 0)n2 (Level 1)(Level 2)log(n) (Level 3)Comments
requirementsTakes the given requirements and codes to specCome up with questions regarding missed cases in the specUnderstand complete picture and come up with entire areas that need to be specedAble to suggest better alternatives and flows to given requirements based on experience
scriptingNo knowledge of scripting toolsBatch files/shell scriptsPerl/Python/Ruby/VBScript/PowershellHas written and published reusable code
databaseThinks that Excel is a databaseKnows basic database concepts, normalization, ACID, transactions and can write simple selectsAble to design good and normalized database schemas keeping in mind the queries that'll have to be run, proficient in use of views, stored procedures, triggers and user defined types. Knows difference between clustered and non-clustered indexes. Proficient in use of ORM tools.Can do basic database administration, performance optimization, index optimization, write advanced select queries, able to replace cursor usage with relational sql, understands how data is stored internally, understands how indexes are stored internally, understands how databases can be mirrored, replicated etc. Understands how the two phase commit works.
 2n (Level 0)n2 (Level 1)(Level 2)log(n) (Level 3)Comments
languages with professional experienceImperative or Object OrientedImperative, Object-Oriented and declarative (SQL), added bonus if they understand static vs dynamic typing, weak vs strong typing and static inferred typesFunctional, added bonus if they understand lazy evaluation, currying, continuationsConcurrent (Erlang, Oz) and Logic (Prolog)
platforms with professional experience12-34-56+
years of professional experience12-56-910+
domain knowledgeNo knowledge of the domainHas worked on at least one product in the domain.Has worked on multiple products in the same domain.Domain expert. Has designed and implemented several products/solutions in the domain. Well versed with standard terms, protocols used in the domain.
 2n (Level 0)n2 (Level 1)(Level 2)log(n) (Level 3)Comments
tool knowledgeLimited to primary IDE (VS.Net, Eclipse etc.)Knows about some alternatives to popular and standard tools.Good knowledge of editors, debuggers, IDEs, open source alternatives etc. etc. For e.g. someone who knows most of the tools from Scott Hanselman's power tools list. Has used ORM tools.Has actually written tools and scripts, added bonus if they've been published.
languages exposed toImperative or Object OrientedImperative, Object-Oriented and declarative (SQL), added bonus if they understand static vs dynamic typing, weak vs strong typing and static inferred typesFunctional, added bonus if they understand lazy evaluation, currying, continuationsConcurrent (Erlang, Oz) and Logic (Prolog)
codebase knowledgeHas never looked at the codebaseBasic knowledge of the code layout and how to build the systemGood working knowledge of code base, has implemented several bug fixes and maybe some small features.Has implemented multiple big features in the codebase and can easily visualize the changes required for most features or bug fixes.
knowledge of upcoming technologiesHas not heard of the upcoming technologiesHas heard of upcoming technologies in the fieldHas downloaded the alpha preview/CTP/beta and read some articles/manualsHas played with the previews and has actually built something with it and as a bonus shared that with everyone else
 2n (Level 0)n2 (Level 1)(Level 2)log(n) (Level 3)Comments
platform internalsZero knowledge of platform internalsHas basic knowledge of how the platform works internallyDeep knowledge of platform internals and can visualize how the platform takes the program and converts it into executable code.Has written tools to enhance or provide information on platform internals. For e.g. disassemblers, decompilers, debuggers etc.
booksUnleashed series, 21 days series, 24 hour series, dummies series...Code Complete, Don't Make me Think, Mastering Regular ExpressionsDesign Patterns, Peopleware, Programming Pearls, Algorithm Design Manual, Pragmatic Programmer, Mythical Man monthStructure and Interpretation of Computer Programs, Concepts Techniques, Models of Computer Programming, Art of Computer Programming, Database systems , by C. J Date, Thinking Forth, Little Schemer
blogsHas heard of them but never got the time.Reads tech/programming/software engineering blogs and listens to podcasts regularly.Maintains a link blog with some collection of useful articles and tools that he/she has collectedMaintains a blog in which personal insights and thoughts on programming are shared

Programmers Mistakes

posted Nov 29, 2010, 7:11 AM by Shaukat Mahmood Ahmad   [ updated Nov 29, 2010, 7:14 AM ]

When you start programming, you get disillusioned quickly. No longer is the computer the allinfallible perfect machine – "do as I mean, not as I say" becomes a frequent cry.

At night, when the blasted hobgoblins finally go to bed, you lie there and ruminate on the errors you made that day, and they're worse than any horror movie. So when the editor of PC Plus asked me to write this article, I reacted with both fear and knowing obedience.

I was confident that I could dash this off in a couple of hours and nip down to the pub without the usual resultant night terrors. The problem with such a request is, well, which language are we talking about?

I can't just trot out the top 10 mistakes you could make in C#, Delphi, JavaScript or whatever – somehow my top ten list has to encompass every language. Suddenly, the task seemed more difficult. The hobgoblins started cackling in my head. Nevertheless, here goes… read more


What's going on with C++!

posted Nov 29, 2010, 6:56 AM by Shaukat Mahmood Ahmad   [ updated Nov 29, 2010, 6:59 AM ]

Life after OOP

From the 1960s onward, the word has referred to thought pattern in any scientific discipline or other epistemological context. The Merriam-Webster Online dictionary defines this usage as “a philosophical and theoretical framework of a scientific school or discipline within which theories, laws, and generalizations and the experiments performed in support of them are formulated; broadly : a philosophical or theoretical framework of any kind.”

– Wikipedia Entry on Paradigm.

Read more

Introducing Nancy, a lightweight web framework inspired by Sinatra

posted Nov 29, 2010, 6:53 AM by Shaukat Mahmood Ahmad

For a couple of weeks I have been keeping myself busy with open-source stuff. One of the things has been to spike out a web framework idea and later on turn it into a real project. The project is inspired, but not a clone, by the Sinatra web framework built on Ruby. The name, Nancy, is a reference to Nancy Sinatra, the daughter of Frank Sinatra.

There are quite of lot of things that I want to put into the framework, but it is functional in its current state. One of the goals for Nancy is to make it run on other environment and platforms, other than ASP.NET / IIS and there are spikes taking place to run it on Mono with FastCGI, making it possible to run on a bunch of other platforms. However, although this is the goal, the current source code does not provide any helpers to make that possible. Right now it only ships with an IHttpHandler that acts as an adaptor between ASP.NET / IIS and the Nancy engine.

read more


Decade of the developer

posted Nov 29, 2010, 6:49 AM by Shaukat Mahmood Ahmad

We're entering the decade of the developer

The major productivity gains of late 1990s and early 2000s were powered by the spread of information technology throughout organizations of all sizes. And it made IT professionals invaluable. However, the technology world remains in the midst of a relentless transformation and the changes sweeping the industry over the next decade will make developers, not IT pros, the new superstars ....  read more


ASP.NET MVC 3 Release Candidate

posted Nov 24, 2010, 10:42 AM by Shaukat Mahmood Ahmad

ASP.NET MVC 3 RC (release candidate) is available for download. You can download  it here.

ASP.NET MVC 3 has a lot of new functionalities and refinements, and it is also compatible with older version i,e. ASP.NET MVC V1 and V2, which means you can easily upgrade existing applications.

Create Your Own Calculator - C Sharp Visual Studio 2008

posted Nov 21, 2010, 1:26 PM by Shaukat Mahmood Ahmad



Car GPS DVD Player

posted Nov 21, 2010, 1:23 PM by Shaukat Mahmood Ahmad

1-10 of 12