rss
twitter
    Find out what I'm doing, Follow Me :)

Saturday, May 28, 2011

Visual Studio 2010–Before you begin

“Give me six hours to chop down a tree and I will spend the first four sharpening the axe.”

The saying above probably fits developers the most. More so if one happens to be a Microsoft technology developer, spending his day in and out of Visual Studio – the ultimate development experience (no offence intended to the Notepad developer). I am almost always amazed by the insane complexity that Visual Studio abstracts away from a developer, presenting it in a visually elegant and magnificent way. Before you even think of disagreeing, think of the top 3 features of the Visual Studio code editor according to you and try integrating it on a Rich Text Box in the language of your choice.

The bytes that follow intend to assist you in sharpening your axe, a.k.a Visual Studio 2010.
  • Service Pack 1 – Looking beyond the bug fixes: Gone are the days when Visual Studio Service Packs were a means to provide bugs and stability fixes. The trend in general has shifted to providing users with considerable feature additions, providing a sense of fulfillment and extended satisfaction to the developer community in general. Entity Framework was included as part of the Visual Studio 2008 Service Pack 1. With Visual Studio 2010 too, apart from the huge number of bug fixes and stability enhancements to the core editor, several new features were added:
    • Help Viewer 1.1 – A stand-alone application for viewing locally installed help documentation.
    • Silverlight 4 – Pre installed support for Silverlight 4 with designer and project system support.
    • Silverlight Profiling – Performance Wizard for Silverlight allows profiling of Silverlight applications which were cumbersome, to say the least in Visual Studio 2008.
    • SQL Server CE 4 – Support for managing Microsoft SQL Server Compact 4.0 databases (SDF) added to Solution and Server explorer.
    • HTML5 and CSS3 – Support for HTML5 and CSS3 in the html editor.
    • IIS Express support – Visual Studio 2010 SP1 enables you to use the Internet Information Services (IIS) 7.5 Express as the local hosting server for the website and Web Application Projects. Scott Guthrie’s introductory blog post about IIS Express explains distinctively how you can leverage local IIS right from your development box.

      A complete description of the Service Pack 1 can be found here.

  • Extend to conquer: Visual Studio 2010 not only sports a brand new managed code editor but it also includes a managed MEF based Extension Manager that lets you customize almost everything that comes by default with Visual Studio, including the Start Page. The following are few extensions that you wouldn’t regret installing:
    • Productivity Power Tools (Microsoft): By far the best (free) extension to Visual Studio 2010, developed by Microsoft, Productivity Power Tools does what its name implies, improve, rather boost the overall productivity of the IDE. A really slick looking Find box, a vibrant Solution Navigator and middle click scroll support, are some of the features that hooked me up instantly. More information and download can be found here.

      Productivity Power Tools
    • Visual Studio Color Theme Editor: Customize the Visual Studio 2010 color palette for menus, toolbars, tabs, title bars and more. It comes in with predefined themes to choose from and allows you to customize the palettes or create new themes. Check out the Visual Studio blog post or download the extension here.

      VS Color Theme Editor

The Visual Studio Gallery has enormous number of extensions (quite a few of them are free) already listed for you to try out. Go ahead. Customize, extend Visual Studio. Super charge it.

Visual Studio – It amazes me. First time, every time!

Wednesday, November 24, 2010

Static Vs Dynamic Vs Embedded Vs Entity SQL

Structured Query Language (SQL) is a way to communicate with a relational database that lets you define, query, modify, and control the data. Using SQL syntax, you can construct a statement that extracts records according to criteria you specify (I know, you know that). However, there are certain flavors of SQL, which you should be aware of like Static SQL, Dynamic SQL and Embedded SQL, to better understand and apply them, as and when required.

With .NET you would also end up using Entity SQL, which when used with Entities (as in the Entity Framework), could eventually generate dynamic SQL, executing and returning results as entities.

Static SQL: The most commonly used type of SQL, static SQL, as its name implies allows you to fulfill your data access requirements, which might be known to you at design time of your application. Having static SQL queries can lead to better performance, since the queries are not required to be parsed every time before being executed.

Dynamic SQL: There are instances of applications where the data to be processed cannot be determined at the design time of the application. A typical example would be processing of a spreadsheet, which in turn can contain variable number of columns, and the program is needed to process and store the data into the database. Typically, you would generate a string value with the columns and send across the database to process it.

The following points are to be considered:

  • Since the database engine doesn’t have an access plan, it would parse, compile and generate an access plan. Hence dynamic SQL is slower than static SQL.
  • EXECUTE IMMEDIATE statement can be used to execute the dynamic SQL statement, which in turn passes the SQL to database for compilation and execution.
  • The problem with EXECUTE IMMEDIATE is that the database would be executing each of the 5 steps of processing SQL statement and the overhead could be significant for multiple dynamic statements executed at once.
  • Dynamic SQL offers optimization via prepared execution whereby all the host variables are replaced by a question mark (?), known as parameter marker, which can be substituted later with the host value. The PREPARE statement is used by the program to pass the SQL statement to the DBMS for parsing, validation and optimizing the statement. The EXECUTE statement is used instead of the EXECUTE IMMEDIATE statement, and the parameter values are supplied via a special data structure called the SQLDA or SQL Data Area. By having the execute statement and supplying different parameter values, optimization is gained over the EXECUTE IMMEDIATE statement.
  • It is to be noted that PREPARED execution is still slower than static SQL since with static SQL the first 4 steps of processing takes place at compile time, whereas with PREPARED execution, they are still executed at runtime, however, only for the first time.

Embedded SQL: Because SQL does not use variables and control-of-flow statements, it is often used as a database sublanguage that can be added to a program written in a conventional programming language, such as C or COBOL. This is a central idea of embedded SQL: placing SQL statements in a program written in a host programming language.

The following points are to be considered:

  • Embedded SQL is processed by a special SQL precompiler.
  • Host language variables can be used in place of the constants in the SQL statements.
  • To optimize the SQL which returns a single row as a result, singleton SELECT statements are used.
  • Statements that return and require multiple rows are processed using CURSORS.
  • Errors while executing Embedded SQL are reported to the application programs via SQL Communications Area or SQLCA.

Disclaimer: The following does not directly relate to databases and are features specific to the Microsoft .NET Framework.

Typically you would be developing an application to access the data stored in the databases. Relational databases provide specific added advantages and are widely used in the general business applications domain. Microsoft .NET 3.5 SP1 introduced Entity Framework, which in turn allows you to model your database objects as entities, which may or may not be inter related, and provides an abstracted way to process them via Entity SQL or LINQ to Entities.

Entity SQL: Entity SQL is a SQL-like language that enables you to query conceptual models in the Entity Framework. Conceptual models represent data as entities and relationships, and Entity SQL allows you to query those entities and relationships in a format that is familiar to those who have used SQL.

The following points are to be considered:

  • Entity SQL supports conceptual model features like relationships and inheritance.
  • Collections are treated as first class citizens in Entity SQL, hence set operators like UNION, INTERSECT and EXCEPT, work on collections.
  • Everything in Entity SQL is an expression which in turn enables it to be more composable than Transact SQL (the SQL language of Microsoft SQL Server).
  • Entity SQL doesn’t support the * construct, and hence the count(*) statement is invalid, instead use count(0).
  • Entity SQL supports a subset of Transact-SQL's built in functions and operators and does not provide support for DDL in the current version.

LINQ to Entities provides Language-Integrated Query (LINQ) support that enables developers to write queries against the Entity Framework conceptual model using Visual Basic or Visual C#. Queries against the Entity Framework are represented by command tree queries, which execute against the object context. LINQ to Entities converts Language-Integrated Queries (LINQ) queries to command tree queries, executes the queries against the Entity Framework, and returns objects that can be used by both the Entity Framework and LINQ. MSDN

The above mentioned constitutes literally all the typical types of SQL related concepts that you might encounter in your general database (relational) programming tasks day-in-day-out or in any developer centric interview session.

As always, you are welcome to share any ideas or thoughts about any other flavor of SQL, which you might have encountered.

Prepare > Execute!

Monday, November 15, 2010

WPF – An Overview

Ever since Windows Vista (sorry Microsoft, for reminding you of that product again) and .NET Framework 3.0 were released, the Windows client developer (the one who is intentionally unaware and exceedingly pleasured by ignoring JS, HTML, DHTML and other useless irrelevant terms in technology) was puzzled with an (frankly) unwanted choice that never existed for him before: continue using the ultimately productive Windows Forms framework, that has been the cornerstone of Windows client applications ever since Visual Basic (classic), or learn, explore and rewrite the apps in the WPF framework for building (what’s now become an overly exploited term in software development) next generation user experiences.

Microsoft has always assured (many consider it a curse) its developers of continued abundance of options and tooling support for all the major line of business applications that one develops. While this has obvious and much desired advantages, the real problem comes in at the start of the adoption phase of the new technology or framework. The earlier releases of the framework don’t (in almost all cases) provide a complete replacement of the previous technology and there is a very steep learning curve involved, with an exceedingly high cost and risk factor in recreating the missing bits, by extending the not so feature complete releases.

My personal approach while dealing with this new-technology-every-PDC kind of releases is fairly simple:

Version Action

Alpha/Beta/CTP or
v1.0

Just be aware, a new (yet again awesome, silver bullet kind of) technology has arrived!

v2.0

Seems interesting, lets look at the real benefits.

v3.0+

Use it (OMG, its actually awesome and the silver bullet for everything a MS developer ever needed)

WPF (codename Avalon) was launched with .NET Framework 3.0 and at its time of release, had a substandard support in terms of tooling. Mr. Reader, be informed, that this is not a WPF tutorial series on how to get started with WPF. The attempt is to dive (as deep as possible) into the architecture of WPF and to understand why things are the way they are in WPF.

Windows & Graphics: The primary technologies behind many Windows-based user interfaces, GDI (graphics device interface) and USER subsystems, were introduced with Windows 1.0 in 1985. The next major support for graphics came with OpenGL (created by Silicon Graphics) in early 1990s for doing advanced 2-D and 3-D graphics on both Windows and non-Windows based systems. In 1995, Microsoft introduced DirectX, for providing a new high performance alternative for 2-D graphics, input, sound, communications and eventually 3-D (with DirectX 2 in 1996). With Windows XP, GDI+ was introduced by adding support for alpha blending and gradient brushes, but ended up being slower due to its complexity and lack of hardware acceleration.

With the release of .NET (and the managed world) in 2002, Windows Forms (built on top of GDI+) became the primary way for a C# or Visual Basic developer, to create rich and compelling user interfaces for Windows based systems. Windows Forms has proved itself as a productive and successful technology, but it still suffers from the limitations of GDI+ and USER subsystems, when it comes to graphics, layouts and rendering.

Major Components of WPF

In the adjoining image, the major code for WPF are highlighted in red, and its interesting to note, that out of the three components (PresentationFramework, PresentationCore and MilCore), only MilCore is unmanaged. Milcore is written in unmanaged code in order to enable tight integration with DirectX. All display in WPF is done through the DirectX engine, allowing for efficient hardware and software rendering. WPF also required fine control over memory and execution. The composition engine in milcore is extremely performance sensitive, and required giving up many advantages of the CLR to gain performance.

The Dispatcher:The DispatcherObject acts as a base class for most objects in WPF and encapsulates the basic constructs for concurrency and threading. The Dispatcher is the messaging system of WPF, which acts similar to the Win32 message pump and uses User32 messages for performing cross thread calls.

Dependency Object and richer Property system: In WPF, properties are preferred over methods or events and this constitutes one of the primary philosophies of the WPF architecture. The property system in WPF is based on the DependencyObject which enables tracking of dependency properties and revalidating values when changes occur. Another feature of properties in WPF is the notion of “attached properties”, which enables composition and component reuse, one of the primary goals of WPF. With attached properties, any object can now specify the properties of other objects, enabling tighter composition.

Routed Events: WPF introduces Routed Events, which from an implementation perspective, is an object backed by an instance of the RoutedEvent class and processed by the event system. From a functional perspective, it is a type of event that can invoke handlers on multiple listeners in an element tree, rather than just on the object that raised the event. Since WPF enables richer composition model, it was essential for the event system to be able to “bubble up” events, generally upward through the element tree, until it reaches the root. It is to be noted that in WPF, literally any control can act as a container control, unlike Windows Forms where container controls inherited from a different base class. To enable routed events, or event bubbling in Windows Forms, you would have to attach the same event to multiple elements, while in WPF, you could do that by attaching them to a single element.

XAML (Xml Application Markup Language): The current trend in programming languages (specifically Microsoft technologies) has been towards declarative rather than imperative, and there are underlying benefits to it. XAML typically allows you to create the entire application declaratively, enabling the decoupling of the UI with the logic, supporting unprecedented designer-developer collaboration.
XAML directly represents the instantiation of objects in a specific set of backing types defined in assemblies. This is unlike most other markup languages, which are typically an interpreted language without such a direct tie to a backing type system. XAML enables a workflow where separate parties can work on the UI and the logic of an application, using potentially different tools.” – MSDN

The intent of this post is to provide a starting point in understanding the complexities and terminologies associated with the WPF architecture. I wish and hope, the initial hesitation associated with moving to and understanding WPF, is eased after going through this post. As with any framework, the best way to learn and leverage it still remains to be writing applications using it!

Dispatch!

Tuesday, October 12, 2010

77 Outright Rajinikanth Facts

For those of you who were so unfortunate to not know about the Rajinikanth, here is a tip of the iceberg about him. Of course I understand you were amongst the unfortunate who were exiled to the planet Pluto, (all other planets are aware of Rajinikanth) and couldn’t keep up with the most illusive force on planet Earth.

What follows are 77 outright (an understatement indeed) facts about the man himself that demystifies (more than what Da Vinci did) literally every fact that you have ever known or would ever know. Some of the facts mentioned below are highlighted to do the intended justice.

Disclaimer: All the following facts, incidents or individuals involved are real and any resemblance to any person, living or dead is purely intentional.

  1. Rajinikanth killed the Dead Sea.
  2. When Rajinikanth does push-ups, he isn't lifting himself up. He is pushing the earth down.
  3. There is no such thing as evolution; it's just a list of creatures that Rajinikanth allowed to live.
  4. Rajinikanth gave Mona Lisa that smile.
  5. Rajinikanth can divide by zero.
  6. Rajinikanth can judge a book by its cover.
  7. Rajinikanth can drown a fish.
  8. Rajinikanth can delete the Recycle Bin.
  9. Rajinikanth once got into a fight with a VCR player. Now it plays DVDs.
  10. Rajinikanth can slam a revolving door.
  11. Rajinikanth once kicked a horse in the chin. Its descendants are today called giraffes.
  12. Rajinikanth once ordered a plate of Idli in McDonald's, and got it.
  13. Rajinikanth can win at Solitaire with only 18 cards.
  14. The Bermuda Triangle used to be the Bermuda Square, until Rajinikanth kicked one of the corners off.
  15. Rajinikanth can strangle you with a cordless phone.
  16. Rajinikanth destroyed the periodic table, because he only recognizes the element of surprise.
  17. Rajinikanth can watch the show 60 minutes in 20 minutes.
  18. Rajinikanth has counted to infinity, twice.
  19. Rajinikanth will attain separate statehood in 2013.
  20. Rajinikanth did in fact, build Rome in a day.
  21. Rajinikanth once got into a knife-fight. The knife lost.
  22. Rajinikanth can play the violin with a piano.
  23. Rajinikanth never wet his bed as a child. The bed wet itself in fear.
  24. The only man who ever outsmarted Rajinikanth was Stephen Hawking, and he got what he deserved.
  25. Rajinikanth doesn't breathe. Air hides in his lungs for protection.
  26. There are no weapons of mass destruction in Iraq. Rajinikanth lives in Chennai.
  27. Rajinikanth kills Harry Potter in the eighth book.
  28. Rajinikanth does not own a stove, oven, or microwave, because revenge is a dish best served cold.
  29. Rajinikanth has already been to Mars, that's why there are no signs of life there.
  30. Rajinikanth doesn't move at the speed of light. Light moves at the speed of Rajinikanth.
  31. Water boils faster when Rajinikanth stares at it.
  32. Rajinikanth kills two stones with one bird.
  33. Google won't find Rajinikanth because you don't find Rajinikanth; Rajinikanth finds you.
  34. Rajinikanth gave the Joker those scars.
  35. Rajinikanth leaves messages before the beep.
  36. Rajinikanth electrocuted the Iron Man.
  37. Rajinikanth killed Spiderman using Baygon Anti Bug Spray.
  38. Rajinikanth can make PCs better than the Mac.
  39. Rajinikanth goes to court and sentences the judge.
  40. Rajinikanth can handle the truth.
  41. Rajinikanth can teach old dog new tricks.
  42. Rajinikanth calls Voldemort by his name.
  43. Rajinikanth's calendar goes straight from March 31st to April 2nd, no one fools Rajinikanth.
  44. The last time Rajinikanth killed someone, he slapped himself to do it. The other guy just disintegrated. Resonance.
  45. Rajinikanth is so fast, he can run around the world and punch himself in the back of the head.
  46. Rajinikanth once ate an entire bottle of sleeping pills. They made him blink.
  47. Rajinikanth does not get frostbite. Rajinikanth bites frost.
  48. Rajinikanth doesn't wear a watch. He decides what time it is.
  49. Rajinikanth got his driver’s license at the age of 16 seconds.
  50. When you say "no one is perfect", Rajinikanth takes this as a personal insult.
  51. In an average living room there are 1,242 objects Rajinikanth could use to kill you, including the room itself.
  52. Words like awesomeness, brilliance, legendary etc. were added to the dictionary in the year 1949. That was the year Rajinikanth was born.
  53. The statement "nobody can cheat death” is a personal insult to Rajinikanth. He cheats and fools death every day.
  54. When Rajinikanth is asked to kill someone he doesn't know, he shoots the bullet and directs it the day he finds out.
  55. Rajinikanth can double click 2 icons at the same time.
  56. Rajinikanth doesn't answer nature's call; nature answers Rajinikanth's call.
  57. Rajinikanth house has no doors, only walls that he walks through.
  58. Rajinikanth is the only man to ever defeat a brick wall in a game of tennis.
  59. When Rajinikanth plays Monopoly, it affects the actual world economy.
  60. Rajinikanth does not style his hair. It lies perfectly in place out of sheer terror.
  61. Rajinikanth‘s first job was as a bus conductor. There were no survivors.
  62. If at first you don't succeed, you're not Rajinikanth.
  63. We live in an expanding universe. All of it is trying to get away from Rajinikanth.
  64. Once a cobra bit Rajinikanth' leg. After five days of excruciating pain, the cobra died.
  65. There is no such thing as global warming. Rajinikanth was feeling cold, so brought the sun closer to heat the earth up.
  66. Archaeologists unearthed an old English dictionary dating back to the year 1236. It defined "victim" as "one who has encountered Rajinikanth".
  67. Rajinikanth doesn't bowl strikes, he just knocks down one pin and the other nine faint out of fear.
  68. Rajinikanth's every step creates a mini whirlwind. Hurricane Katrina was the result of a morning jog.
  69. Rajinikanth doesn't shower. He only takes blood baths.
  70. Rajinikanth can answer a missed call.
  71. As a child when Rajinikanth had dyslexia, he simply re-scripted the alphabet.
  72. Rajinikanth sneezed only once in his entire life, that's when the tsunami occurred in the Indian Ocean.
  73. Time and tide wait for Rajinikanth.
  74. Rajinikanth knows what women really want.
  75. Rajinikanth can give pain to Painkillers and headache to Anacin.
  76. Rajinikanth has a wax statue of Madame Tussauds in his house!
  77. ‎Once Dinosaurs borrowed money from Rajinikanth and refused to pay him back. That was the last time anyone saw Dinosaurs.

Dare not doubt on any of the above mentioned facts, for they are true to the last bit that stores them on the screen.

The inspiration of the post came from the movie Robot (Endhiran), the mention of which, should indefinitely terminate all the questions that might be jumping on and off your head.

Feel free to contribute any other notable fact about the Rajinikanth (and yes, its Rajini and not Rajni).

Mind it™!

Thursday, September 23, 2010

The Self-Adaptable Software

Indelicately speaking, self-adaptable software is any software (specialized or otherwise) that has the ability to respond to the needs of the users and doesn’t completely depend on the operating environment and is further proficient in dealing with faults, curtailing the chances of partial or complete failures. At its core it’s flexible. With flexibility, comes complexity. But then, we are software developers, and complexity is as native to us, as pointers to C/C++ (no pun intended).

I am a decently mini-pro type of a PC gamer (I am proud of it, even though its mini) and was trying out FIFA 2010 on my PC with an NVidia GeForce 8400GS graphics card installed onto it. As is true for all the recently launched games, on-board graphics simply doesn’t suffice their needs. They humbly need more powerful GPUs to render the superior graphics intensive characters, surroundings and their interactions. On the beautiful start of a weekend (yes I can still recall, it was a beautiful Saturday morning) my graphics card passed away (pardon me for my emotions, but they are as real as the real data-type).

Utterly shattered, with muted curses to everyone including luck, hardware industry, vendors and my by-now torn off warranty card (it had expired 3months ago); I reverted my display onto the onboard graphics display and began lamenting on the lost opportunities of scoring goals (so what if they were virtual). Being a programmer, and the huge belief (read disbelief) I have with fellow programmers, I decided to run FIFA 2010 without a GPU. To be frank, I was curious to see the error message and the entire experience from the user’s point of view. The introductory video played off, and I was certain of it being a video file with absolutely no requirements of the GPU. The menu came up and I loaded my profile and started a fixture.

“Awesome! EA is all that I shouted (I actually did). The game ran on software renderer, the graphics were of lower quality, shadows had vanished, the ground looked pale and the players could never look more than androids (read robots). To sum it up, the game was playable and it had adapted to the software renderer seamlessly. A good deal of animation still persisted while really GPU intensive operations were skipped and that didn’t bother me the least. As a user, I was not deprived of my primary objective of playing the game thanks to the self-adaptive graphics system built into the software (i.e. the game). At the core of everything, I sighed
“Why couldn’t all software self-adapt?”

Most of us, most of the times, skip the process of even thinking (forget developing) adaptable systems either because it’s precisely not in the scope of the SRS or maybe it’s not cost effective enough and doesn’t provide the expected ROI. Not only do we expect users to use the software as we intend, we end up limiting their capabilities and implied rights to have self-correcting systems.

To avoid being misinterpreted I don’t intend to make a LOB application go AI and do crazy stuffs. A common scenario of network related dependency can be cited as an example of the ill-intent to not create self-adaptive software. Network turbulence recursively entails us to go berserk almost every day and we wish (at least I wish) the network dependent, and not merely network connected app, could do and let me do something offline.

The issue is not merely of OCA or occasionally connected applications. There could (and would) be plenty of scenarios where we, as developers, limit the users from experiencing the app in a limited way.

Have you recently encountered any of them?

if ( answer == true )
        shareThem();

Happy Adapting!

Sunday, August 1, 2010

Being Numero Uno!

Half a decade into the technology industry, primarily software development, and post working on varied nature projects, with some of the most diligent and unswerving programmers I ever came across, this intends to be a succinct summary of what in essence could assist in being the numero uno in the surroundings we live in. Even though some slices of this post relates to the Information Technology landscape, this could easily map to any other industry or sector you recognize.

Irrespective of the organizations I worked for, there always were few elite professionals that stood apart right from the inception. It was surprising to observe that they just excelled at a quantum pace while all others seem to have had trouble placing their foot in place. There were some common characteristics that could be discovered from their conduct and their supremacy in their relevant world.

Listed below are some of the base (deriving from my programming background in OOPS) characteristics that I came across which might propel you to the right track of being the chosen one (the Matrix effect):

  • Professionally yours: If you are one of the types who choose to dabble into the tasks assigned, you will wind up with a dabbled life. There'll be no satisfaction in it because there will be no real production you can be proud of. Society does not emphasize the importance of professionalism, so people tend to believe that amateur work is normal. Even businesses accept sub-standard results, but that shouldn’t ever be consumed as an excuse for being unprofessional in whatever you do. Our professional careers are a long and the most significant journey of our lives. Think twice before compromising on the output you contribute, the impact could be everlasting!

  • Evaluate feasibility not possibility: A common behavior exhibited by most software developers is to jump straight into the problem domain and declare or decide on its possibility. The elite are seldom concerned about the possibility of the solutions. Their seasoned experience and confidence allows them to leverage that advantage. What sets them apart is the ability to peek into the future and evaluate the scenarios that may curtail future existence of the business domain they are working in and contributing to. A practice that every software developer must inculcate is to consider himself/herself as a consultant and not an ordinary employee of an organization. Irrespective of the role you play, expand your horizon by placing yourself as a consultant to the client, the results would mostly be positive and obvious.

  • Context switching abilities: No matter where you work, and irrespective of the size of the team and the environment you are in, the key to understanding and infusing trust and confidence among fellow developer colleagues is to put yourself into their shoes before even distantly deciding to criticize their actions or doings. Very few amongst us have this unique and most wanted characteristic of being able to switch contexts and place ourselves in other’s place before deciding on issues relating to them. Conveying a mistake is way dissimilar than blaming it upon and most of the elite people I come across had a chiseled way of conveying the mistakes I kept constructing and it was more of learning than embarrassment.

  • Passion is the key: Long term success or real success is hard to achieve than short term or virtual success. And there is a very simple and almost overlooked reason for that. There are difficult times in the journey to real success when you feel like you are working for nothing, that you don’t get anything in return for all your effort. In such difficult times, only passion can keep you moving forward! The beauty of being passionate about the things you do is that it will show up in your work without you having to put that extra tiring effort.

  • Clearly defined goals: A pre-requisite to success and an omnipresent quality in the elite group of people, clear goals ensure and increase the chances to succeed by manifolds. Its importance can never be over-emphasized. While most of us compromise for short term goals, it is surprising to note that the top-notch pros compromise and adjust keeping in view the primary long term ones.

All of us have an innate desire to succeed and lead the space we exist in, either professionally or personally and the list above could well contribute in focusing on the more relevant spheres leading to our relevant destinations.

The motivation for this post came from a very small and surprisingly truthful and influential quote I read on success, which for me, answered approximately 90% of the questions I had left unanswered to myself:

“deserve before you desire!”

Saturday, July 17, 2010

Theme Up!

With the dawn of the last decade, user-centered design and end-user customization of literally every fragment of an application (web, client or phone) has taken a quantum leap. It has virtually become quintessential to have multiple ways of allowing end users to customize their experience with the software. With the advent of graphics cards and graphics accelerated hardware, pixels literally lit up, giving a whole new dimension to user experience and enabling creation of stunning user interfaces.
Abstraction, which is the dominantly prevailing concept, in every software methodology or framework today, impacted the design process as well, and what once was limited to selection of colors, got somewhat abstracted to selection of themes, even though the underlying idea was to only change the colors and at times, background graphics.
For business application (smart client or desktop) developers, the change was almost forced by popular applications like browsers, instant messaging tools and utility applications. It was amusing to note that even Antivirus applications themed their UI to better present their functionalities. The nail was hit by Microsoft’s Office suite v2007, when Office applications allowed users to select a theme for its UI.
Office 2007 themes
Once Office themed up, jinx, if any, that existed, preventing business apps from looking attractive was broken. It almost made it conventional for business applications to expose sleek interface that enabled innovative user experiences, irrespective of the type of application. Also, it enabled data entry applications to look far less tedious and cumbersome; a snap from them Dynamics CRM follows.
 Dynamics CRM data entry
The following is a list of some popular applications along with the associated resources to theme them. The list was never meant to be exhaustive, besides care has been exercised not to list untrusted sites to the extent possible.
Disclaimer: Users are informed to exercise caution before downloading third party extensions, themes and similar add-ons from untrusted sources.
  • Windows 7 – Prior to Windows 7, Microsoft didn’t provide an active support for themes to the earlier versions of Windows, primarily XP (and yes I almost forgot there was Vista too). The support was mostly commercial in nature from vendors, mostly Microsoft Partners. With Windows 7, a change in strategy implied better and newer themes for end-users thanks to the Themes gallery.
  • Visual Studio 2010 – Having a brand new code editor and huge chunks of it’s codebase in WPF enabled the extension developers of Visual Studio 2010 to incorporate themes into the most popular (I don’t care if you disagree) IDE of all times. Visual Studio color theme editor comes in with pre-defined themes and allows you to customize or create new themes.
  • Mozilla Firefox – The leading (again who cares if you disagree) open source browser incorporated and provided themes right from its early versions and an active community meant Firefox users never faced any scarcities in terms of themes. However, with Personas, a graduated project of Mozilla Labs, themes became lighter and somewhat better.
  • Twitter clients – The ever expanding universe of twitter clients is more of an amusing for me considering the fact that twitter is just slightly older than a toddler. Seesmic Desktop and MetroTwit surely standup for a mention with theme enabled sleek user interface.
  • Mobile Phone Themes: I regularly use themes from Zedge for my Nokia phone (5800 XpressMusic), and have found some certificate issues with the themes they list. Hence, exercise your judicious half before installing or even downloading any themes on your mobile phones.
  • WPF applications: As a WPF (Windows Presentation Foundation) developer, a good collection of themes is available from Codeplex.
  • Blogger themes: If you are like me and are overly uninterested by the default themes provided by blogger you may visit bTemplates for refreshing and mostly free blogger templates/themes.
  • Website themes: Looking for free website themes for general usage? Try OSWD.

The above mentioned are just some of the common popular apps that enable you to theme up the experience.

To conclude, I would like to mention some apps that I wish had themes, the sooner the better:

  • Internet Explorer – The most arrogant software ever sent to production tops my wish list for theme enabled apps. When the entire world embraced tabbed browsing, MS IE was arrogant enough to wait until v7 with undoubtedly the slowest implementation of tab switching. Continuing with its tradition, even now, with v8, it’s incapable of providing a simple downloads management snap-in. Microsoft has time and again ended up being complacent and literally handed over its market share to its competitors.
  • SQL Server Management Studio – Like every other Microsoft technology enthusiast, the legitimate next step with Management Studio seems to be a T-SQL IDE based on WPF and then following up with themes. Awaiting SQL Server 2012 may be (who knows?). There surely wouldn’t be Office 2013, so SQL Server 2013 seems unlikely too.

Please feel free to enlist any application that you use which already provides support for themes or should provide them at the earliest!

The list above only limits to the applications I use to ease out my work/good life.

Theme Up!