Dec 31, 2007

Microsoft - Is it that Evil?

MSDOS is the first well known successfully marketed product from Microsoft. In the following years, Microsoft was developing OS/2 in collaboration with IBM. After a short stint, Microsoft part ways with IBM and created Windows OS. Now, rest is history!

Microsoft has been and still known for its bread-n-butter product, the Windows Operating System(OS). In layman terms, an OS provides basic infrastructure or platform to run applications on top of it that adhere to the specifications put forth by the OS. By creating Windows, Microsoft created a platform and made it mature/intuitive/monopolize over the years. Lets dig into it.

In the 80s when Microcomputers called PCs were taking shape to bring computing to the common man, the computer giants such as IBM, SUN were still selling tightly coupled proprietary hardware and software as a single package to customers. Customers were forced to buy hardware and software together from a single vendor. Sun was selling Solaris with their proprietary hardware architecture. Apple was selling Macintosh (flavour of *nix) with proprietary hardware and software. IBM was selling its own monsters. Eventhough IBM was getting interested in Microcomputers or PCs, the hardware and the software would come from its own stable, still making it a closed system no different from *nix predecessors.


Arrival of Microsoft changed the business equations ripping apart the proprietary hardware cum software business model. Rather, Microsoft created the diversified computer industry by establishing itself as a pure-software company with creation of its operating system, Windows. This threw open opportunities for anyone to manufacture the hardware compatible with Windows in contrast with the computers manufactured by SUN, HP, IBM etc. This was the beginning of ‘Off-the-shelf’ PC phenomenon.

The PC was more modular now. Each of the hardware components were now manufactured by innumerous companies. All they had to do to make the hardware work with Windows was by providing drivers as per the specification published by Microsoft. The driver, a piece of software allows the Windows to recognize and interact with the hardware. So, anyone could manufacture a motherboard, a graphics card, Hard disk drive etc and make it work with Windows! This resulted in commoditization of the PCs.

The PCs were getting better day by day, more affordable and most importantly lots of choice for customers to put together a PC from off-the-shelf components. At the same time, Microsoft published the Windows API to allow anyone to write applications to run on its Windows OS. A software platform was born to rule the forthcoming decades of personal computing. Anyone with the knowledge of the Windows API could write killer apps and make millions of dollars. Big corporations were born out it.

Similar to commoditization of hardware, Windows platform resulted in creation of software industry as a whole or atleast, served as a trigger. InstallShield, Norton Anti-virus, Business Objects are few big corporations that were born out of the Windows platform. Why would I credit Microsoft and Windows for achieving this?

Eventhough, the industry behemoths SUN, IBM, HP, Unisys were still around; they were still selling completely packaged hardware and software. And, they were so expensive, only research organizations and universities could afford it. Creation of Microsoft and Windows as a software-only company resulted in segregation of hardware and software industries as well as Software becoming a mainstream business. Windows was so intuitive compared to its *nix counterparts, that it accelerated the adoption of personal computing by masses. This was the biggest achievement of Microsoft and Windows to date.

Those were few credits to Microsoft. There are more credits to write down in the next post.

More to write about:
What are the bad things that Microsoft did? How Microsoft transformed itself into a Software juggernaut? Where it won? where it lost? What is it doing now to stay relevant in the current service-oriented world?

Nov 25, 2007

Well, someone says not to donate to wikipedia.

I have always seen wikipedia as a powerful and free tool to spread the knowledge across the globe. Personally, i admire the guy Jimmy Wales, who is behind this initiative. I wanted to put a "Donate to Wiki" banner on my blog and went googling around to find this anti-wiki donation article.

Few lines from the blog.

Wikipedia promotes Amazon.com and IMDB (owned by Amazon.com) through search engine optimized links and in return, Amazon.com gives Wikia huge amounts of venture capital, which violates Wikipedia’s non-profit status, given Wikipedia’s close ties to Wikia.

Wikipedia is not going to help children in third world countries because the bulk of its content is in the languages of first world countries and pretty much nothing is in the rest.

Read the full article here.

I am yet to do a serious digging into this. In first glance, it makes sense though.

Type rest of the post here

Nov 18, 2007

OpenSocial and Facebook platforms

Check out this official video on OpenSocial by Google.
The presentation looks awesome with technical, business and end user perspectives well represented.

Will OpenSocial put brakes on the strong-march by Facebook? Only time will tell. But, certainly its a high stakes battle.

To write about:
Where OpenSocial and Facebook are heading to? Is Facebook creating the next Windows of internet? Achievements and ambitions of Facebook? Did Google miss the bus and trying to regain control using OpenSocial? How is OpenSocial faring so far? Where Facebook could go wrong?





Lot to talk about **Platform**

The word *Platform* seems to make sense across multiple paradigms. It all started during a short conversation about Facebook with a friend of mine. Facebook has been around for a couple of years now. Why sudden craze about Facebook everywhere? If you ask me, my cents on the really neat UI and ability to publish your own app on the Facebook platform. Ooops, i stepped on the word Platform. Never mind. Ya. Facebook is a platform. Not just a portal. Not another social networking website. I know, it sounds really abstract to most people talking about internet terminologies. Agreed! Let's peep into history to search for trace of something called Platform.

Can we call Microsoft Windows as a platform? How about Walmart as a platform? Mmmm.. iPhone as a platform? The big daddy Google as a platform? Stock market as a platform... i can think of an indefinite list. Let's start with something universal, well known(for good or bad) - Walmart.

Walmart is an apt example of a Platform. Walmart is a really big trading company. So, they source goods from vendors/manufacturers/OEM and sell it to customers. The concept typically applies to even the petty shops across the street. BUT, size is the x-factor, that gives more power over negotiation table with manufacturers and thereby huge profits. Customers accustomed to a platform normally find it difficult to accept a new one so easily.

Back to the context of Computers, Microsoft and Facebook are two companies of interest to me. Microsoft created the Windows platform more than a decade ago for PCs. Since then, Microsoft has successfully replicated the platform from Servers to Compact devices. Logically, an application that runs on either of them would run on others as well. And, most importantly, consistent user experience across devices allowed users to seamlessly use these devices without having to go through repeated learning cycles. What did Microsoft get as a result? The power to replicate the platform across any imaginable hardware.

There are couple of prominent companies defining or re-defining the 'platform' on web. I will be writing topics focussed on those, instead of rat-holing :)

Nov 7, 2007

how to run ur web project on IIS instead of internal web server in VS.NET IDE

To specify the Web server for an already-created Web site,
open your local website with VS.NET and, in the Solution Explorer,
right-click the name of the Web site for which you want
to specify a Web server, and then click Property Pages.

In the Property Pages dialog box, click the Start Options tab.
Under Server, click Use custom server.

In the Base URL box, type the URL that Visual Web Developer
should start when running the current Web site. You can use localhost,
your machine name, or an assigned domain name for your IP.

From that point on, the VS.NET IDE will not use the internal web server,
but will use IIS to open your pages, i.e., if you are working on default.aspx,
it will be opened as : http://localhost/default.aspx

Oct 22, 2007

Compelling features in SVN. But, rarely used.

I have been using SVN for source control more than two years now. But, i haven't bothered to try out some of the features. Typically, we want to use those primitive features that are easy to understand or rather familiar to us. Checkout, Commit, Update, Show log, Diff are primitive and commonly used commands, as we mostly do Update and Commit on a daily basis. Diff is used while merging code. These commands are sufficient for simpler quotidien tasks.

But, definitely not sufficient if you are to merge a history of changes from one branch to another. I stumbled across 100s of checkins on one branch to be merged into another. Another twist was the number people who did these checkins and there were checkins by multiple persons on the same file. As a relief, i was asked to merge only my checkins from one branch to another. Exactly not a relief, but a pain, as many people had done changes to the files i modified over a period of time. I am using Tortoise SVN as client. So, my experience revolves around the tool. Still, i believe the terms and functionality are similar with respect to SVN and CVS immaterial of the client used to access the code repository.

So, the problem definition in one line:
"Pull out all your changes from one branch over a period of time and put it into another branch"

Setup: I have branch Origin and branch Target to merge my files.
Better way to tackle this:
Step 1: Select the source branch folder and go to Show Log to view the history of changes on the branch.
Step 2: Select the range of changes to view based on either Date or Revision no.
Step 3: Sort the list based on Author.
Step 4: Select the entire list of checkins done in your Author name. This action will show a list of files in the lower window. These are the entire list of files that were modified in the selected list of checkins. So, you have all the files that you modified during those checkins. Copy the list to somewhere. And, these are the files u need to merge into the Target branch. Hooray!
Step 5: Having got the list of file you need to be concerned about, next challenge would be seperate out the changes done to the same file by yourself and others. Afterall, you need to be concerned about only your changes done to the file. Previously, i would have went through Diffing two revisions. But, there is these Blame functionality. You can click on a file to be merged and do a Blame with start and end revision number. After a little time munching the bits and bytes, SVN will pull out the line by line changes made every single person on the file over the period. Awesome it is!

Another interesting functionality is the concept of Patching. Creating and Applying patch are two phases of patching. When a dev has made a bunch of code changes and needs to send it to a reviewer or configuration manager, he need not send the files seperately to the recepient. Instead, he can create a Patch which is nothing but a unified diff of working and base copy. After reviewing the unified diff(Patch), the reviewer can simply Apply the patch on the repository.

Oct 19, 2007

Synergy - cool software based KVM

The other day, my colleague was breezing his mouse and keyboard between his PC and notebook. displays. I have seen people having the bulky KVM switch box that powers users to switch between multiple PC displays. Kind of a mission control center on ur desk.. hehehe. Suprisingly, this person didn't have any such hardware stuff beneath his desk. A peek into his cubicle and this amazingly simple software called Synergy takes my breath away! Alright. No more spinning the wheel. Synergy is a virtual KVM switch implemented in software. For those dudes hearing that word for the first time, wiki here. Synergy is a client-server solution(obviously) and its Open-Source dude.

First thing home, downloaded this software from their official site. Got it installed on my two notebooks running XP and Vista. Got one of the installation as server and other as client. And, here i go. Now, i could use the mouse and keyboard of the notebook running my Synergy server to access the desktop of the notebook. So, i was moving the mouse connected to my first notebook and just crossed over to the desktop of the adjacent notebook. And, i was typing in the keyboard of first notebook to see the letters appear on the MS Word running on the other notebook.

This link has an awesome description of installing and configuring Synergy. Happy crossovers across your displays.


Sep 1, 2007

Get rid of blank lines appearing before the table in blogger

I spent quite sometime evaluating my simple table HTML code which was creating lot of blank lines before the table itself. Below is a sample table.












JapanGermanyUSAKorea
ToyotaBMWFordHyundai


I used the following code for table construction.

<table ><tbody><tr>
<tr>
<td >Japan</td>
<td>Germany</td>
<td>USA</td>
<td>Korea</td>
</tr><tr>
<td >Toyota</td>
<td>BMW</td>
<td>Ford</td>
<td>Hyundai</td>
</tr>
</table>

The Html code looks fine. But, from where are these blank lines appearing infront of my table? Reason? Simple. The Formatting section of Settings tab has the below option.

A Yes for this option would mean that, every Enter will be replaced by a line break tag in the HTML and therefore the blank lines before the table.

A quick and easy(or not so) solution would be to construct the table without typing Enter key during the process. My reformatted table here with typing Enter within the table HTML code:
JapanGermanyUSAKorea
ToyotaBMWFordHyundai

There is another CSS solution to fix this.But, the css needs to be applied to every table we add.
Apply the below CSS code to your table and no dirty blank lines anymore.

<style type="text/css">.nobr br { display: none }</style>
<div class="nobr">
Your table HTML code goes here
</div >

CSS solution courtesy blog.

Any other hack? feel free to post a comment!

Aug 17, 2007

Debugbar, CompanionJS - Webdev tools on IE

FireBug is an excellent tool on FireFox for anything to do with Javascript et al. If you have no idea about the FireBug, posts this and this would give a good idea about FireBug.

Unfortunately, i couldn't find any such equivalent tool/plugin for IE client-side dev/debugging. There is a version of FireBug for IE, with just a Javascript shell and inability to profile/debug a live site.

To my luck, Google blessed me with this IE plugin called DebugBar. Its a pretty good developer tool for client side debugging on IE, with its own PROs and CONs.

Some of the features of DebugBar:

DOM Inspector: View DOM tree, modify tags, css, attributes of the page on the fly

HTTP Inspector: View HTTP and HTTPS request/response

JS Inspector and Console: Explore JS scripts and functions. Javascript shell to executre scripts on the fly. This looks pretty decent than FireBug.

HTML Validator: Describes the errors in the rendered page. Quite detailed and wide variety of errors are caught during validation.

Pickles: Other peripheral tools like color picker, page screenshot etc

Download the plugin from here and install it. These guys claim to have received the best IE plugin award from Microsoft and also, showoff their spyware free certification.

Two UI components appear in the plugin. A toolbar and a sidebar. Below are the snapshots.

Sidebar

Toolbar
I am not going to explain every feature of the tool, as the website has sufficient documentation and above all, hands-on is the way to explore the tool.

So, i am just going to compare this tool with the FireBug in terms of functionality and usage.
























































ParameterFireBugDebugBarRemarks
DOM ExplorerPresentPresentEqually powerful.
Drag TargetAbsentPresentDebugBar has a catchy “Drag Target” icon that can display the element under the icon’s scanner. Drag Target can be achieved in FF through Web Developer toolbar.
HTTP MonitorPresentPresentEquivalent
Javascript explorerPresentPresentDebugBar functions explorer is more user friendly and detailed.
Javascript shellPresentPresentEqually powerful.
Live Debug javascriptPresentAbsentNo live debugging, No breakpoints and No watch in DebugBar.
Live Profile javascriptPresentAbsentNo live profiling, No Performance stats on execution time and function calls invocations in DebugBar.
DOM ValidatorAbsentPresentScans for common coding errors in DOM automatically.
HTTPS requestsAbsentPresentVery useful feature of DebuBar not available in FireBug.
Live Edit page(HTML, CSS)PresentPresentSimilar


Overall, FireBug scores mainly in the profiler and debugger functionality over DebugBar. Otherwise, the tools are equally good in features and usage. In any case, there are similar tools in FireFox. But, IE lacks in this area. That being the case, i would consider DebugBar a worthy tool for web developers.

The main drawback is the missing debugger functionality in DebugBar. I found another IE plugin from the same guys to do embedded live JS debugging. Its called CompanionJs live debugger. The curious minds can check it out here.

In any case,FireBug seems to be the bigdaddy of all debuggers and, CompanionJS is more similar in UI and functionality, but there can be only one BOSS 8)

Browser specific CSS

Found an interesting thread on CSS hacks here
I have tried to summarize few interesting things from the really long thread.

The difference in CSS rendering is a common problem between IE and FireFox. We need to write browser specific CSS to solve the problem. There are two ways to implement browser specific CSS code rendering.



By using conditional tags for different browsers

This approach is promoted more by MS for CSS behaviour changes in IE7. The idea is to create seperate versions of CSS code for specific browsers and use the conditional tags to include/exclude them in rendering our page. Following are few conditional tags.

<!--[if IE]-->

IE specific CSS goes here

<!--[endif]-->

<!--[if lt IE 7]>

Code valid upto version 6 of IE

<!--[endif]-->

By using CSS code that's ignored by certain browsers and accepted by others

The idea is to use keywords that are ignored by certain browsers, thereby only the intended browser will evaluate the rule.

After each rule, add a second rule. The selector of the second rule must use a child selector. In this new rule, correct any IE-specific declarations previously made. First is IE, 2nd is Firefox as IE doesn't understand the second rule containing "body >", "html > body".

Example A:
div#header {margin-top:-3px;}

body > div#header {margin-top:0;}
Example B: 
.promo h3 {height:21px;}

.promo > h3 {height:auto; min-height:21px;}
Example C:

ol {padding:0 0 0 5px;}

html > body ol {padding:0;}

Dev Tools for Ajax - FireBug Javascript profiler/debugger

The previous article mentions a bunch of interesting dev tools for Ajax web apps. FireBug is one among those and specific to FireFox browser.

The FireBug is available as a FireFox extension. FireBug is a profiler cum debugger for Javascript, DOM and CSS.



What can we do with FireBug?

- Debug javascript code

- Monitor network activity

- Explore the DOM

- Live edit HTML pages

- Logging javascript calls

- Profile javascript

- Execute javascript on the fly

- Tweak CSS

Debug javascript

Find the loaded js files, Keep breakpoints, Keep conditional breakpoints, Explore the call stack, Watch the variables, Variable tool tips, Log function calls

Monitor Network activity

Watch the time taken to load a file, Find out if a file was from browser cache, Check the contents of HTTP requests/response

useful tips:

JavaScript files load one at time, never in parallel. This will help you tune the order of files in page so that the user spends less time waiting for things to show up.

Requests served from cache are color coded with light gray.

Explore the DOM

View the functions, properties, constants. Color coded variable names. Object representations. Live edit of variable values. Autocomplete editing. Navigation to javascript code.

useful tips:

Top panel shows the DOM hierarchy during navigation.

Options drop-down provides filtering choices.

Live edit HTML pages

Find elements on mouse over, Quick search HTML source, Live edit HTML elements

userful tips:

Inspect button toggles the mouse over functionality

Logging javascript calls

Console.log function, Categorize the log entry[info, dbg, warn] in color codes, Measure the time, Profile the calls, Print stack trace

usefule tips:

console.log, console.warn, console.time, console.timeEnd, console.profile, console.profileEnd, console.trace are few functions

Profile javascript

Profile a scenario without writing any special code, Get to know the list of functions called and the time taken by each one of them.

useful tips:

Go to Console tab and get to see the Profile button in the top panel. Click the Profile button once to start profiling. Click it again to end profiling

Execute javascript on the fly

Its a Javasript Shell!! Write a one liner or a whole bunch of js functions.

usefule tips:

use $1 to refer to the last variable used in the shell. press SHIFT+ENTER to search for the variable in all the tabs.

References:

www.getfirebug.com


Dev Tools for AJAX web apps - Intro

There are few interesting tools to help in the development, debugging and testing of AJAX based web apps. When we talk about AJAX, we are obviously talking about client-side programming with focus on Javascript, DOM and CSS.

The discussed tools are specific to either Internet Explorer or Firefox and hence the categorization based on those.

IE Tools:

Drip/Sieve - Memory leak detector for DOM and Javascript

Fiddler - Http sniffer for IE

Visual Studio.NET - Javascript Debugger

FF Tools:

Live HTTP Headers - Http sniffer plugin for FF

Web Developer toolbar - DOM/Page explorer

FireBug - Javascript debugger

Venkman - Javascript profiler cum debugger

IE Tab - Embeds IE as a tab within FF

Among the list, FireBug and Venkman are of interest to me.

Watch the space for hands-on.