Dec 31, 2007
Microsoft - Is it that Evil?
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.
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
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**
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
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.
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
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
Japan | Germany | USA | Korea |
Toyota | BMW | Ford | Hyundai |
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:
Japan | Germany | USA | Korea |
Toyota | BMW | Ford | Hyundai |
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
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.
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
So, i am just going to compare this tool with the FireBug in terms of functionality and usage.
Parameter | FireBug | DebugBar | Remarks |
DOM Explorer | Present | Present | Equally powerful. |
Drag Target | Absent | Present | DebugBar 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 Monitor | Present | Present | Equivalent |
Javascript explorer | Present | Present | DebugBar functions explorer is more user friendly and detailed. |
Javascript shell | Present | Present | Equally powerful. |
Live Debug javascript | Present | Absent | No live debugging, No breakpoints and No watch in DebugBar. |
Live Profile javascript | Present | Absent | No live profiling, No Performance stats on execution time and function calls invocations in DebugBar. |
DOM Validator | Absent | Present | Scans for common coding errors in DOM automatically. |
HTTPS requests | Absent | Present | Very useful feature of DebuBar not available in FireBug. |
Live Edit page(HTML, CSS) | Present | Present | Similar |
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.