<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TechBubble &#187; Internet</title>
	<atom:link href="http://www.kalyani.com/category/internet/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kalyani.com</link>
	<description>Nik Kalyani&#039;s Irrationally Exuberant Musings on Technology</description>
	<lastBuildDate>Mon, 23 Jan 2012 08:16:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Subway Map Visualization jQuery Plugin</title>
		<link>http://www.kalyani.com/2010/10/subway-map-visualization-jquery-plugin/</link>
		<comments>http://www.kalyani.com/2010/10/subway-map-visualization-jquery-plugin/#comments</comments>
		<pubDate>Fri, 08 Oct 2010 20:15:11 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.kalyani.com/?p=1144</guid>
		<description><![CDATA[I have always been fascinated by the visual clarity of the London Underground map. Given the number of cities that have adopted this mapping approach for their own subway systems, clearly this is a popular opinion. At a conference some years back, I saw a poster for the Yahoo! Developer Services. They had taken the <a href='http://www.kalyani.com/2010/10/subway-map-visualization-jquery-plugin/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>I have always been fascinated by the visual clarity of the London Underground map. Given the number of cities that have adopted this mapping approach for their own subway systems, clearly this is a popular opinion. At a conference some years back, I saw a poster for the Yahoo! Developer Services. They had taken the concept of a subway map and applied it to create a <a href="http://www.flickr.com/photos/phploveme/2957594235/" target="_blank">YDN Metro Map</a>. Once again, I was in awe of the visual clarity of this map in helping one understand the various Yahoo! services and how they inter-related with each other. I thought it would be awesome if there were a pseudo-programmatic way in which to render such maps to convey real-world ecosystems. A few examples I can think of:</p>
<ul>
<li>University departments, offices, student groups</li>
<li>Government</li>
<li>Open Source projects</li>
<li>Internet startups by category</li>
</ul>
<p>More examples on this blog: <a href="http://blog.visualmotive.com/2009/ten-examples-of-the-subway-map-metaphor/" target="_blank">Ten Examples of the Subway Map Metaphor</a>.</p>
<p>Fast-forward to now. Finally, with the advent of HTML5 &lt;canvas&gt; element and jQuery, I felt it was now possible to implement this in a way that with a little bit of effort, anyone who knows HTML can easily create a subway map. I felt a jQuery plugin was the way to go as I had never created one before and also it seemed like the most well-suited for the task. My goals:</p>
<ul>
<li>Anyone should be able to create a beautiful, interactive subway map visualization for their website using HTML markup</li>
<li>The map should be as faithful as possible to the London Underground map style with smooth curves and interchange connectors and 45-degree diagonals</li>
<li>The map size, line width and colors should all be customizable</li>
<li>Stations, interchanges and linked interchanges should be distinguishable from each other</li>
<li>The markup used to create the map should be search engine friendly</li>
</ul>
<p>With these goals in mind, I started creating my jQuery plugin. A few days of concentrated effort later, I had a working <strong>subwayMap</strong> plugin and am quite pleased with the result. You can download the plugin below and documentation follows in this post. I hope you will give the plugin a try and find it useful.</p>
<h3>Demo</h3>
<p>I was the keynote speaker at a regional conference for the DotNetNuke Open Source Project and created a comprehensive subway map of the project ecosystem for my presentation using the subwayMap plugin. The map uses every feature of the plugin and is a good practical example of how to use the plugin. Click the image to view the map.</p>
<p><a href="http://dnnbook.com/Ecosystem.aspx" target="_blank"><img class="aligncenter size-full wp-image-1139" title="DotNetNuke Ecosystem Interactive Map" src="http://www.kalyani.com/wp-content/uploads/2010/10/dnnmap.png" alt="DotNetNuke Ecosystem Interactive Map" width="417" height="235" border="0" /></a></p>
<h3>Download</h3>
<p style="text-align: left;">Note: There is a file embedded within this post, please visit this post to download the file.</p>
<h3>Step-by-Step Guide</h3>
<p>Here is a guide to using the Subway Map Visualization jQuery Plugin. Before you get started, there&#8217;s one thing you&#8217;ll want to keep in mind &#8212; beautiful subway maps are never automatic; they are almost always the result of care in design and placement to ensure that the resulting map is functional, legible and beautiful. This plugin is just a tool&#8230;you will still need to plan and design your map in order to produce a good result.</p>
<p><strong>Referencing the Plugin</strong></p>
<p>The subwayMap plugin is referenced similar to other jQuery plugins by adding a script element to the HTML markup.</p>
<pre class="brush: html">&lt;script src=&quot;http://code.jquery.com/jquery-1.4.2.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;jquery.subwayMap-0.5.0.js&quot; type=&quot;text/javascript&quot;&gt;</pre>
<p><strong>Using the Plugin</strong></p>
<p>The subwayMap plugin is called using a jQuery selector as follows:</p>
<pre class="brush: javascript">$(&quot;#sampleselector&quot;).subwayMap({ debug: true });</pre>
<p>The only supported option (at present) is &#8220;debug&#8221; which has a default value of &#8220;false&#8221;. Setting it to true will display some debug statements in the JS console.</p>
<p><strong>HTML Markup for Plugin<br />
</strong></p>
<p>Like most navigation plugins, subwayMap uses an unordered list. The basic markup consists of the following:</p>
<ul>
<li>An outer DIV element to control general placement, background etc.</li>
<li>One UL element for each &#8220;line&#8221; desired in the map.</li>
<li>For each UL element, one or more LI elements with either plain text or an A element with plain text. An LI element provides coordinates for drawing lines and/or markers on the map.</li>
</ul>
<p>Each of the DIV, UL and LI elements make use of custom attributes to convey how the map should be rendered. These are explained in the Step-by-Step section below.</p>
<p><strong>Map Rendering</strong></p>
<p>The subwayMap plugin renders the map on a grid with the origin at top left (i.e. X coordinates extend from left to right and Y coordinates extend from top to bottom). The size of this grid depends on a value you define called &#8220;cellSize.&#8221; For example, if you define a cellSize of 50 and specify a grid of 20 columns by 10 rows, then you will have a map that is 1000 pixels wide and 500 pixels high. For each UL element, a &lt;canvas&gt; element that is the size of the grid is created and positioned at (0,0). Subsequent &lt;canvas&gt; elements are stacked on top of the prior &lt;canvas&gt; elements. Station and interchange markers for each line are also created in separate, stacked &lt;canvas&gt; elements, however their z-Index is always higher than that of the &lt;canvas&gt; elements containing the lines. Finally, all labels are added as <span> elements with the highest z-Index of all the elements in the map.</span></p>
<p><strong>Creating a SubwayMap Step-by-Step</strong></p>
<p>Now that the basics are out of the way, let&#8217;s step through the process of creating a subway map from scratch. I am using jQuery UI as my mapping subject, creating a line for Widgets, Interactions and Effects. Here&#8217;s a map and the markup used to create it:</p>
<p><a href="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap011.png"><img class="aligncenter size-full wp-image-1163" title="Subway Map Step-by-Step 01" src="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap011.png" alt="" width="490" height="432" border="0" /></a></p>
<pre class="brush: html">&lt;div data-columns=&quot;12&quot; data-rows=&quot;10&quot; data-cellSize=&quot;40&quot; data-legendId=&quot;legend&quot; data-textClass=&quot;text&quot; data-gridNumbers=&quot;true&quot; data-grid=&quot;true&quot; data-lineWidth=&quot;8&quot;&gt;
&lt;ul data-color=&quot;#ff4db2&quot; data-label=&quot;jQuery Widgets&quot;&gt;
&lt;li data-coords=&quot;2,2&quot;&gt;&lt;a href=&quot;http://jqueryui.com/demos/accordion/&quot;&gt;Accordion&lt;/a&gt;&lt;/li&gt;
&lt;li data-coords=&quot;4,2&quot;&gt;&lt;a href=&quot;http://jqueryui.com/demos/autocomplete/&quot;&gt;Autocomplete&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div id=&quot;legend&quot;&gt;&lt;/div&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
$(&quot;.subway-map&quot;).subwayMap({ debug: true });
&lt;/script&gt;</pre>
<p>This code looks way more complicated than it actually is. Most of the verbosity comes from the many &#8220;data-*&#8221; attributes that the plugin uses for all customizations. Here are the attributes being used in the code above:</p>
<p><strong>(DIV) data-columns:</strong> The number of columns the map will display (12 in this example)</p>
<p><strong>(DIV) </strong><strong>data-rows:</strong> The number of rows the map will display (10 in this example)</p>
<p><strong>(DIV) </strong><strong>data-cellSize:</strong> The width and height of each cell in pixels (40 in this example, resulting in a grid that is 480px wide by 400px tall)</p>
<p><strong>(DIV) </strong><strong>data-legendId:</strong> The ID of an HTML element into which the map legend will be appended (&#8220;legend&#8221; in this example)</p>
<p><strong>(DIV) </strong><strong>data-textClass:</strong> The CSS class to use for text labels in the map (&#8220;text&#8221; in this example)</p>
<p><strong>(DIV) </strong><strong>data-grid:</strong> True or false, to show or hide a grid that is useful during map construction. The default is false (&#8220;true&#8221; in this example)</p>
<p><strong>(DIV) </strong><strong>data-gridNumbers:</strong> True or false, to show or hide numbers on the grid. Only applies if data-grid=&#8221;true&#8221; (&#8220;true&#8221; in this example)</p>
<p><strong>(DIV) </strong><strong>data-lineWidth:</strong> The width in pixels for each line. The default is 10 pixels. (8 in this example)</p>
<p><strong>(UL) data-color:</strong> The color of the line in standard CSS RGB notation (#ff4db2 in this example)</p>
<p><strong>(UL) data-label:</strong> The label for the line that will be displayed in the legend (&#8220;jQuery Widgets&#8221; in this example)</p>
<p><strong>(LI) data-coords:</strong> The X,Y coordinate pair where the line should be drawn to from its last location (or the starting location if it&#8217;s the first LI element)</p>
<p>As you can see from the illustration, the result of the sample markup was a grid with numbers, a line drawn from (2,2) to (4,2) and finally markers at both coordinate locations. The markers are automatically added whenever you have any content in your LI element and later, we&#8217;ll see how you can override the marker type.</p>
<p>Now, let&#8217;s extend this line a bit, by adding a few more LI elements. For brevity, I will omit the overall definition and just show the LI elements here:</p>
<pre class="brush: html">&lt;li data-coords=&quot;2,2&quot;&gt;&lt;a href=&quot;http://jqueryui.com/demos/accordion/&quot;&gt;Accordion&lt;/a&gt;&lt;/li&gt;
&lt;li data-coords=&quot;4,2&quot;&gt;&lt;a href=&quot;http://jqueryui.com/demos/autocomplete/&quot;&gt;Autocomplete&lt;/a&gt;&lt;/li&gt;
&lt;li data-coords=&quot;5,4&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;7,4&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;8,2&quot;&gt;&lt;/li&gt;</pre>
<p><a href="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap02.png"><img class="aligncenter size-full wp-image-1167" style="border: 0pt none;" title="subwayMap02" src="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap02.png" alt="SubwayMap Step-by-Step 02" width="492" height="436" /></a></p>
<p>The resulting image is as you would expect. However, it is not very pretty to look at. To make it nicer, we need to add some curves. The plugin provides four directional curves that can be used anytime the difference between both X and Y start and end coordinates is exactly 1. Think of it like plumbing pipes&#8230;in order to make a right angle, you introduce an elbow joint. This is somewhat similar. In order to make a smooth, 90-degree curve, you use one cell for the curve as illustrated below:</p>
<p><a href="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap031.png"><img class="aligncenter size-full wp-image-1169" style="border: 0pt none;" title="subwayMap03" src="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap031.png" alt="" width="334" height="291" /></a></p>
<p>To make a curve, you add a &#8220;data-dir&#8221; attribute to the LI element that defines the coordinates for the end of the curve. The value of this attribute is directional &#8211; E, W, N or S &#8211; indicating the direction in which the line will <strong>first</strong> go before making a right-angle to the coordinate referenced by that LI element. Let&#8217;s continue with our example to see this in action:</p>
<p>&nbsp;</p>
<pre class="brush: html">&lt;li data-coords=&quot;2,2&quot;&gt;&lt;a href=&quot;http://jqueryui.com/demos/accordion/&quot;&gt;Accordion&lt;/a&gt;&lt;/li&gt;
&lt;li data-coords=&quot;4,2&quot;&gt;&lt;a href=&quot;http://jqueryui.com/demos/autocomplete/&quot;&gt;Autocomplete&lt;/a&gt;&lt;/li&gt;
&lt;li data-coords=&quot;5,3&quot; data-dir=&quot;E&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;6,4&quot; data-dir=&quot;S&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;7,4&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;8,3&quot; data-dir=&quot;E&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;8,2&quot;&gt;&lt;/li&gt;</pre>
<p><a href="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap04.png"><img class="aligncenter size-full wp-image-1170" style="border: 0pt none;" title="subwayMap04" src="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap04.png" alt="Subway Map Step-by-Step 04" width="494" height="433" /></a></p>
<p>To get the curves, some of the coordinates had to be changed in order to achieve the X and Y coordinate difference of exactly &#8220;1&#8243;. Note the additional &#8220;data-dir&#8221; attribute that determines the direction of the curve. The final result is a line that is similar, but not the same as the original and definitely more pleasing to the eye.</p>
<p>Let&#8217;s make the line loop around a bit and then go south on a diagonal run.</p>
<pre class="brush: html">&lt;li data-coords=&quot;2,2&quot;&gt;&lt;a href=&quot;http://jqueryui.com/demos/accordion/&quot;&gt;Accordion&lt;/a&gt;&lt;/li&gt;
&lt;li data-coords=&quot;4,2&quot;&gt;&lt;a href=&quot;http://jqueryui.com/demos/autocomplete/&quot;&gt;Autocomplete&lt;/a&gt;&lt;/li&gt;
&lt;li data-coords=&quot;5,3&quot; data-dir=&quot;E&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;6,4&quot; data-dir=&quot;S&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;7,4&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;8,3&quot; data-dir=&quot;E&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;8,2&quot;&gt;&lt;/li&gt;
</pre>
<p><a href="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap05.png"><img class="aligncenter size-full wp-image-1172" style="border: 0pt none;" title="subwayMap05" src="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap05.png" alt="Subway Map Step-by-Step 05" width="490" height="436" /></a></p>
<p>The diagonal line was drawn correctly, but notice the small curves at the beginning and end. These are automatically added when the difference between the X and Y coordinates of the start and end are equal and greater than 1 (i.e. a diagonal). Unfortunately, this isn&#8217;t pretty to look at. To correct this we have to reduce our diagonal by one row and one column and introduce a curve like this:</p>
<pre class="brush: html">
&lt;li data-coords=&quot;2,2&quot;&gt;&lt;a href=&quot;http://jqueryui.com/demos/accordion/&quot;&gt;Accordion&lt;/a&gt;&lt;/li&gt;
&lt;li data-coords=&quot;4,2&quot;&gt;&lt;a href=&quot;http://jqueryui.com/demos/autocomplete/&quot;&gt;Autocomplete&lt;/a&gt;&lt;/li&gt;
&lt;li data-coords=&quot;5,3&quot; data-dir=&quot;E&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;6,4&quot; data-dir=&quot;S&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;7,4&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;8,3&quot; data-dir=&quot;E&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;8,2&quot;&gt;&lt;/li&gt;
</pre>
<p><a href="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap06.png"><img class="aligncenter size-full wp-image-1173" style="border: 0pt none;" title="subwayMap06" src="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap06.png" alt="" width="491" height="432" /></a></p>
<p>And there we have it, nice curves again and no sharp turns. Let&#8217;s wrap-up this line (no pun intended) and move on to multiple lines, markers and labels. I have now updated the markup to extend the first line a little and then added a second line shown in green labeled &#8220;jQuery Interactions.&#8221;</p>
<pre class="brush: html">
&lt;div data-columns=&quot;12&quot; data-rows=&quot;10&quot; data-cellsize=&quot;40&quot; data-legendid=&quot;legend&quot; data-textclass=&quot;text&quot; data-gridnumbers=&quot;true&quot; data-grid=&quot;true&quot; data-linewidth=&quot;8&quot;&gt;
&lt;ul data-color=&quot;#ff4db2&quot; data-label=&quot;jQuery Widgets&quot;&gt;
&lt;ul data-color=&quot;#ff4db2&quot; data-label=&quot;jQuery Widgets&quot;&gt;&lt;li data-coords=&quot;2,2&quot;&gt;&lt;a href=&quot;http://jqueryui.com/demos/accordion/&quot;&gt;Accordion&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul data-color=&quot;#ff4db2&quot; data-label=&quot;jQuery Widgets&quot;&gt;
&lt;ul data-color=&quot;#ff4db2&quot; data-label=&quot;jQuery Widgets&quot;&gt;&lt;li data-coords=&quot;4,2&quot;&gt;&lt;a href=&quot;http://jqueryui.com/demos/autocomplete/&quot;&gt;Autocomplete&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul data-color=&quot;#ff4db2&quot; data-label=&quot;jQuery Widgets&quot;&gt;
&lt;ul data-color=&quot;#ff4db2&quot; data-label=&quot;jQuery Widgets&quot;&gt;&lt;li data-coords=&quot;5,3&quot; data-dir=&quot;E&quot;&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul data-color=&quot;#ff4db2&quot; data-label=&quot;jQuery Widgets&quot;&gt;
&lt;ul data-color=&quot;#ff4db2&quot; data-label=&quot;jQuery Widgets&quot;&gt;&lt;li data-coords=&quot;6,4&quot; data-dir=&quot;S&quot;&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul data-color=&quot;#ff4db2&quot; data-label=&quot;jQuery Widgets&quot;&gt;
&lt;ul data-color=&quot;#ff4db2&quot; data-label=&quot;jQuery Widgets&quot;&gt;&lt;li data-coords=&quot;7,4&quot;&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul data-color=&quot;#ff4db2&quot; data-label=&quot;jQuery Widgets&quot;&gt;
&lt;ul data-color=&quot;#ff4db2&quot; data-label=&quot;jQuery Widgets&quot;&gt;&lt;li data-coords=&quot;8,3&quot; data-dir=&quot;E&quot;&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul data-color=&quot;#ff4db2&quot; data-label=&quot;jQuery Widgets&quot;&gt;&lt;li data-coords=&quot;8,2&quot;&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;
</pre>
<p><a href="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap071.png"><img class="aligncenter size-full wp-image-1177" style="border: 0pt none;" title="subwayMap07" src="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap071.png" alt="" width="491" height="467" /></a></p>
<p>In this map, there is a portion where both lines overlap. This is a fairly common situation and if you do nothing, the line that is drawn last will be at the top. This is less than ideal for communicating information, let alone train routes. To solve this problem, the plugin allows you to &#8220;shift&#8221; a line in X and/or Y directions by a multiple of the chosen line thickness.</p>
<p><strong>(UL) data-shiftCoords:</strong> The number of line-widths by which line should be shifted in any direction specified as an X,Y pair with negative values indicating shift closer to the origin (0,0). You could manually do the shift by specifying precise coordinates, however this can make the line more complicated to define.  (Example: data-shiftCoords=&#8221;-1,0&#8243; means move the line to the left by 1 line width.)</p>
<pre class="brush: html">
&lt;ul data-color=&quot;#00ff00&quot; data-label=&quot;jQuery Interactions&quot; data-shiftCoords=&quot;0,-1&quot;&gt;</pre>
<p>With the above change, our map now looks like this:</p>
<p><a href="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap08.png"><img class="aligncenter size-full wp-image-1179" style="border: 0pt none;" title="subwayMap08" src="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap08.png" alt="" width="490" height="462" /></a></p>
<p>Much nicer and simpler since we did not have to make any changes to the individual  line coordinates. Next, let&#8217;s add some markers. The plugin supports three types of markers: stations, interchanges and extended interchanges. These are always black-and-white (or white-and-black) and can be placed anywhere on a line. The attributes for markers are:</p>
<p><strong>(UL) data-reverseMarkers:</strong> If the markers should be rendered white on black instead of the default, black on white. The default is &#8220;false&#8221;.</p>
<p><strong>(LI) data-marker:</strong> Can be either &#8220;station&#8221; or &#8220;interchange.&#8221; Will produce a different marker for each. Value may be prefixed by &#8220;@&#8221; to indicate that the LI element is solely for indicating the position of the marker and should not be used as a coordinate defining the path of the line. (Examples: data-marker=&#8221;station&#8221; or data-marker=&#8221;@interchange&#8221;)</p>
<p>IMPORTANT:  Markers are displayed only if the LI element contains content. Interchange markers ignore any coordinate shift values specified for the line.</p>
<p><strong>(LI) data-markerInfo:</strong> For &#8220;interchange&#8221; or &#8220;@interchange&#8221; markers, this attribute is used to define scenarios in which the interchange marker has to &#8220;stretch&#8221; across multiple lines or connect lines that are not next to each other. The attribute value consists of a letter &#8220;v&#8221; for vertical or &#8220;h&#8221; for horizontal, followed by a number representing the number of line widths to stretch (example: v3 or h4). The marker is rendered at the coordinate position specified and extends either vertically upwards or horizontally to the right.</p>
<p>While it is easy and convenient to use the LI elements that define line coordinates to also define markers, sometimes this does not yield the best result. The marker may appear off by a few pixels. In these cases, it is best to add an LI element for the marker, use the &#8220;@&#8221; prefix and provide precise coordinates with decimal places (Example: 1.5,2.25).</p>
<p>Here is the markup and map again, updated with station and interchange markers.</p>
<pre class="brush: html">&lt;div data-columns=&quot;12&quot; data-rows=&quot;10&quot; data-cellSize=&quot;40&quot; data-legendId=&quot;legend&quot; data-textClass=&quot;text&quot; data-gridNumbers=&quot;true&quot; data-grid=&quot;false&quot; data-lineWidth=&quot;8&quot;&gt;
&lt;ul data-color=&quot;#ff4db2&quot; data-label=&quot;jQuery Widgets&quot;&gt;
&lt;li data-coords=&quot;2,2&quot; data-marker=&quot;interchange&quot;&gt;&lt;a href=&quot;http://jqueryui.com/demos/accordion/&quot;&gt;Accordion&lt;/a&gt;&lt;/li&gt;
&lt;li data-coords=&quot;4,2&quot;&gt;&lt;a href=&quot;http://jqueryui.com/demos/autocomplete/&quot;&gt;X&lt;/a&gt;&lt;/li&gt;
&lt;li data-coords=&quot;5,3&quot; data-dir=&quot;E&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;5,7&quot; data-marker=&quot;@station&quot;&gt;X&lt;/li&gt; &lt;!-- marker-only node --&gt;
&lt;li data-coords=&quot;6,4&quot; data-dir=&quot;S&quot; data-marker=&quot;interchange&quot; data-markerInfo=&quot;h5&quot;&gt;X&lt;/li&gt;
&lt;li data-coords=&quot;7,4&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;7.15,8&quot; data-marker=&quot;@station&quot;&gt;X&lt;/li&gt;  &lt;!-- marker-only node, moved to the right by 0.15 --&gt;
&lt;li data-coords=&quot;8,3&quot; data-dir=&quot;E&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;8,2&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;9,1&quot; data-dir=&quot;N&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;10,2&quot; data-dir=&quot;E&quot; data-marker=&quot;interchange&quot;&gt;X&lt;/li&gt;
&lt;li data-coords=&quot;10,5&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;9,6&quot; data-dir=&quot;S&quot; data-marker=&quot;station&quot;&gt;X&lt;/li&gt;
&lt;li data-coords=&quot;6,9&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;5,8&quot; data-dir=&quot;W&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;5,7&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;4,6&quot; data-dir=&quot;N&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;2,6&quot;&gt;Tabs&lt;/li&gt;
&lt;/ul&gt;

&lt;ul data-color=&quot;#00ff00&quot; data-label=&quot;jQuery Interactions&quot; data-shiftCoords=&quot;0,-1&quot;&gt;
&lt;li data-coords=&quot;2,6&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;2,5.9&quot; data-marker=&quot;@interchange&quot;&gt; &lt;/li&gt; &lt;!-- marker-only node, moved up by 0.10 --&gt;
&lt;li data-coords=&quot;5,6&quot; data-marker=&quot;@station&quot;&gt;X&lt;/li&gt;
&lt;li data-coords=&quot;6,6&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;7,3&quot; data-marker=&quot;@station&quot;&gt;X&lt;/li&gt;
&lt;li data-coords=&quot;7,5&quot; data-dir=&quot;E&quot; data-marker=&quot;station&quot;&gt;X&lt;/li&gt;
&lt;li data-coords=&quot;7,1&quot; data-marker=&quot;interchange&quot;&gt;X&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;div id=&quot;legend&quot;&gt;&lt;/div&gt;</pre>
<p><a href="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap09.png"><img class="aligncenter size-full wp-image-1188" title="subwayMap09" src="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap09.png" alt="" width="491" height="464" border="0" /></a></p>
<p>I used the label &#8220;X&#8221; for all the station or interchange names. The only thing left to do is change the labels and also position them so they don&#8217;t appear on top of the line. The attribute used for positioning the labels is:</p>
<p><strong>(LI) data-labelPos:</strong> Specifies where the label should be displayed using a directional abbreviation. Supported values are N, E, S, W, NE, NW, SE, SW. (Default is &#8220;S&#8221;). Sometimes your label may be too long and text-wrap may be needed. To do this, you can use &#8220;\n&#8221; within the text of the label (&lt;br /&gt;will not work since the only markup supported for a label is the &lt;a&gt; element).</p>
<p>Labels are added as absolutely positioned &lt;span&gt; elements and when the map is added inside a DOM element with a complex, CSS layout, they may not always appear in the right place.</p>
<p>Let&#8217;s set the label text and position, turn off the grid and look at the final markup and rendered map.</p>
<pre class="brush: html">&lt;div data-columns=&quot;12&quot; data-rows=&quot;10&quot; data-cellSize=&quot;40&quot; data-legendId=&quot;legend&quot; data-textClass=&quot;text&quot; data-gridNumbers=&quot;true&quot; data-grid=&quot;false&quot; data-lineWidth=&quot;8&quot;&gt;
&lt;ul data-color=&quot;#ff4db2&quot; data-label=&quot;jQuery Widgets&quot;&gt;
&lt;li data-coords=&quot;2,2&quot; data-marker=&quot;interchange&quot;&gt;&lt;a href=&quot;http://jqueryui.com/demos/accordion/&quot;&gt;Accordion&lt;/a&gt;&lt;/li&gt;
&lt;li data-coords=&quot;4,2&quot;&gt;&lt;a href=&quot;http://jqueryui.com/demos/autocomplete/&quot;&gt;Auto\ncomplete&lt;/a&gt;&lt;/li&gt;
&lt;li data-coords=&quot;5,3&quot; data-dir=&quot;E&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;5,7&quot; data-marker=&quot;@station&quot; data-labelPos=&quot;W&quot;&gt;Slider&lt;/li&gt; &lt;!-- marker-only node --&gt;
&lt;li data-coords=&quot;6,4&quot; data-dir=&quot;S&quot; data-marker=&quot;interchange&quot; data-markerInfo=&quot;h5&quot;&gt;Date\npicker&lt;/li&gt;
&lt;li data-coords=&quot;7,4&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;7.15,8&quot; data-marker=&quot;@station&quot; data-labelPos=&quot;E&quot;&gt;Dialog&lt;/li&gt;  &lt;!-- marker-only node, moved to the right by 0.15 --&gt;
&lt;li data-coords=&quot;8,3&quot; data-dir=&quot;E&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;8,2&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;9,1&quot; data-dir=&quot;N&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;10,2&quot; data-dir=&quot;E&quot; data-marker=&quot;interchange&quot; data-labelPos=&quot;E&quot;&gt;Button&lt;/li&gt;
&lt;li data-coords=&quot;10,5&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;9,6&quot; data-dir=&quot;S&quot; data-marker=&quot;station&quot;&gt;Progress\nbar&lt;/li&gt;
&lt;li data-coords=&quot;6,9&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;5,8&quot; data-dir=&quot;W&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;5,7&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;4,6&quot; data-dir=&quot;N&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;2,6&quot;&gt;Tabs&lt;/li&gt;
&lt;/ul&gt;

&lt;ul data-color=&quot;#00ff00&quot; data-label=&quot;jQuery Interactions&quot; data-shiftCoords=&quot;0,-1&quot;&gt;
&lt;li data-coords=&quot;2,6&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;2,5.9&quot; data-marker=&quot;@interchange&quot;&gt; &lt;/li&gt; &lt;!-- marker-only node, moved up by 0.10 --&gt;
&lt;li data-coords=&quot;5,6&quot; data-marker=&quot;@station&quot; data-labelPos=&quot;N&quot;&gt;Selectable&lt;/li&gt;
&lt;li data-coords=&quot;6,6&quot;&gt;&lt;/li&gt;
&lt;li data-coords=&quot;7,3&quot; data-marker=&quot;@station&quot; data-labelPos=&quot;W&quot;&gt;Resizeable&lt;/li&gt;
&lt;li data-coords=&quot;7,5&quot; data-dir=&quot;E&quot; data-marker=&quot;station&quot; data-labelPos=&quot;E&quot;&gt;Droppable&lt;/li&gt;
&lt;li data-coords=&quot;7,1&quot; data-marker=&quot;interchange&quot; data-labelPos=&quot;W&quot;&gt;Draggable&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;div id=&quot;legend&quot;&gt;&lt;/div&gt;</pre>
<p><strong>There you have it&#8230;a map that faithfully reproduces the style of the London Underground map, but hopefully, is not too difficult for you to create once you get familiar with the custom attributes required in the HTML markup to render the map. Enjoy!</strong></p>
<p><a href="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap10.png"><img class="aligncenter size-full wp-image-1191" style="border: 0pt none;" title="subwayMap10" src="http://www.kalyani.com/wp-content/uploads/2010/10/subwayMap10.png" alt="" width="458" height="459" /></a></p>
<p>&nbsp;</p>
<h3>Reference</h3>
<p><strong>(DIV) data-columns:</strong> The number of columns the map will display (default=10)</p>
<p><strong>(DIV) </strong><strong>data-rows:</strong> The number of rows the map will display (default=10)</p>
<p><strong>(DIV) </strong><strong>data-cellSize:</strong> The width and height of each cell in pixels (default=100)</p>
<p><strong>(DIV) </strong><strong>data-legendId:</strong> The ID of an HTML element into which the map legend will be appended</p>
<p><strong>(DIV) </strong><strong>data-textClass:</strong> The CSS class to use for text labels in the map</p>
<p><strong>(DIV) </strong><strong>data-grid:</strong> True or false, to show or hide a grid that is useful during map construction (default=false)</p>
<p><strong>(DIV) </strong><strong>data-gridNumbers:</strong> True or false, to show or hide numbers on the grid. Only applies if data-grid=&#8221;true&#8221; (default=true)</p>
<p><strong>(DIV) </strong><strong>data-lineWidth:</strong> The width in pixels for each line (default=10)</p>
<p><strong>(UL) data-color:</strong> The color of the line in standard CSS RGB notation</p>
<p><strong>(UL) data-label:</strong> The label for the line that will be displayed in the legend</p>
<p><strong>(UL) data-shiftCoords:</strong> The number of line-widths by which line should be shifted in any direction specified as an X,Y pair with negative values indicating shift closer to the origin (default=0,0)</p>
<p><strong>(UL) data-reverseMarkers:</strong> If the markers should be rendered white on black instead of the default, black on white (default=false)</p>
<p><strong>(LI) data-coords:</strong> The X,Y coordinate pair where the line should be drawn to from its last location (or the starting location if it&#8217;s the first LI element)</p>
<p><strong>(LI) data-marker:</strong> Can be either &#8220;station&#8221; or &#8220;interchange.&#8221; Will produce a different marker for each. Value may be prefixed by &#8220;@&#8221; to indicate that the LI element is solely for indicating the position of the marker and should not be used as a coordinate defining the path of the line</p>
<p><strong>(LI) data-markerInfo:</strong> For &#8220;interchange&#8221; or &#8220;@interchange&#8221; markers, this attribute is used to define scenarios in which the interchange marker has to &#8220;stretch&#8221; across multiple lines or connect lines that are not next to each other. The attribute value consists of a letter &#8220;v&#8221; for vertical or &#8220;h&#8221; for horizontal, followed by a number representing the number of line widths to stretch (example: v3 or h4). The marker is rendered at the coordinate position specified and extends either vertically upwards or horizontally to the right.</p>
<p><strong>(LI) data-labelPos:</strong> Specifies where the label should be displayed using a directional abbreviation. Supported values are N, E, S, W, NE, NW, SE, SW (default=S)</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2010/10/subway-map-visualization-jquery-plugin/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Redirecting to Canonical URL in IIS7</title>
		<link>http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/</link>
		<comments>http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 04:42:50 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://kalyani.com/?p=1072</guid>
		<description><![CDATA[If you are using IIS7, it&#8217;s very easy to ensure that all requests always go to your preferred canonical URL. It&#8217;s a two step process: Step 1: Install the UrlRewrite module for IIS: http://www.iis.net/expand/URLRewrite Step 2: Add the following rule to your applications web.config file: &#38;lt;configuration&#38;gt; &#38;lt;system.webServer&#38;gt; &#38;lt;rewrite&#38;gt; &#38;lt;rules&#38;gt; &#38;lt;clear /&#38;gt; &#38;lt;rule name=&#38;quot;Redirect from www&#38;quot; <a href='http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">If you are using IIS7, it&#8217;s very easy to ensure that all requests always go to your preferred canonical URL. It&#8217;s a two step process:</p>
<p style="text-align: left;"><strong>Step 1:</strong> Install the UrlRewrite module for IIS: <a href="http://www.iis.net/expand/URLRewrite" target="_blank">http://www.iis.net/expand/URLRewrite</a><a href="http://www.iis.net/expand/URLRewrite"><img class="size-full wp-image-1074 aligncenter" style="border: 0pt none; margin-top: 10px; margin-bottom: 10px;" title="IIS Rewrite" src="http://kalyani.com/wp-content/uploads/2010/01/iisrewrite.png" alt="IIS Rewrite" width="335" height="251" /></a></p>
<p><strong>Step 2:</strong> Add the following rule to your applications web.config file:</p>
<pre class="brush: xml">&amp;lt;configuration&amp;gt;
 &amp;lt;system.webServer&amp;gt;
    &amp;lt;rewrite&amp;gt;
      &amp;lt;rules&amp;gt;
        &amp;lt;clear /&amp;gt;
        &amp;lt;rule name=&amp;quot;Redirect from www&amp;quot; stopProcessing=&amp;quot;true&amp;quot;&amp;gt;
           &amp;lt;match url=&amp;quot;.*&amp;quot; /&amp;gt;
           &amp;lt;conditions&amp;gt;
              &amp;lt;add input=&amp;quot;{HTTP_HOST}&amp;quot; pattern=&amp;quot;^www.yoursite.com$&amp;quot; /&amp;gt;
           &amp;lt;/conditions&amp;gt;
           &amp;lt;action type=&amp;quot;Redirect&amp;quot; url=&amp;quot;http://yoursite.com/{R:0}&amp;quot; redirectType=&amp;quot;Permanent&amp;quot; /&amp;gt;
        &amp;lt;/rule&amp;gt;
     &amp;lt;/rules&amp;gt;
   &amp;lt;/rewrite&amp;gt;
 &amp;lt;/system.webServer&amp;gt;
&amp;lt;/configuration&amp;gt;</pre>
<p><strong>IMPORTANT: </strong>When using the above code, take care to merge it with your existing web.config without duplicating any existing elements.</p>
<p>I like my URL&#8217;s to be in the format http://mysite.com. If you prefer http://www.mysite.com, simply remove &#8220;www.&#8221; from the &lt;add&gt; element and add it to the &lt;action&gt; element&#8217;s &#8220;url&#8221; attribute.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>NSF Website on Birth of Internet</title>
		<link>http://www.kalyani.com/2008/08/nsf-website-on-birth-of-internet/</link>
		<comments>http://www.kalyani.com/2008/08/nsf-website-on-birth-of-internet/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 08:00:00 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.techbubble.net/Blog/tabid/57/EntryId/209/NSF-Website-on-Birth-of-Internet.aspx</guid>
		<description><![CDATA[Om Malik posted about the NSF website chronicling the birth of the Internet. What a cool site. I skimmed it briefly and found this entry for 1980s: In the mid-1980s, NSF decided the time was right to try to link its regional university networks and its supercomputer centers together. This initial effort was called NSFNET. <a href='http://www.kalyani.com/2008/08/nsf-website-on-birth-of-internet/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Om Malik <a href="http://gigaom.com/2008/08/18/nsf-tells-the-story-of-the-birth-of-the-internet/">posted</a> about the <a href="http://www.nsf.gov/news/special_reports/nsf-net/">NSF website chronicling the birth of the Internet</a>. What a cool site. I skimmed it briefly and found this entry for 1980s:</p>
<p><i>In the mid-1980s, NSF decided the time was right to try to link its regional university networks and its supercomputer centers together. This initial effort was called NSFNET. By 1987, participation in the new NSFNET project grew so rapidly that NSF knew it had to expand the capacity of this new network. In November of that year, it awarded a grant to a consortium of IBM, MCI, and a center at the University of Michigan called <b>Merit to create a network or networks&#8211;or internet&#8211;</b>capable of carrying data at speeds up to 56 kilobits a second. By July 1987, this new system was up and running. The modern Internet was born.</p>
<p></i>I came to the U.S. on Sept. 3, 1987 from India to begin my Bachelor&#8217;s degree at <a href="http://www.wmich.edu/">Western Michigan University</a>. I remember logging on to the <b>Merit</b> network that same month from the campus computer lab. Since, at the time, everything about computers was totally new to me (other than the Sinclair ZX Spectrum+, my home computer), I had no idea until today that this was a brand new network and more importantly, the first &#8220;network of networks.&#8221;</p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2008/08/nsf-website-on-birth-of-internet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some Thoughts on Posterous</title>
		<link>http://www.kalyani.com/2008/08/some-thoughts-on-posterous/</link>
		<comments>http://www.kalyani.com/2008/08/some-thoughts-on-posterous/#comments</comments>
		<pubDate>Sun, 17 Aug 2008 08:00:00 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Social Media]]></category>

		<guid isPermaLink="false">http://www.techbubble.net/Blog/tabid/57/EntryId/210/Some-Thoughts-on-Posterous.aspx</guid>
		<description><![CDATA[I have been thinking on and off about Posterous since I first used it and decided to put my thoughts down in a post. Nischal asked the question &#8220;Would you stick to Posterous?&#8221; My answer today is &#8220;No&#8221; for the simple reason that it&#8217;s difficult to make the commitment to use Posterous as my primary <a href='http://www.kalyani.com/2008/08/some-thoughts-on-posterous/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>I have been thinking on and off about Posterous since I <a mce_href="http://techbubble.posterous.com/10-mins-and-hooked-on-posterou" href="http://techbubble.posterous.com/10-mins-and-hooked-on-posterou">first used it</a> and decided to put my thoughts down in a post. <a mce_href="http://www.techbubble.net../people/10Ef4kI08Qp" href="http://www.techbubble.net../people/10Ef4kI08Qp">Nischal</a> asked the question &#8220;<a mce_href="http://nischal.posterous.com/would-you-stick-to-posterousco" href="http://nischal.posterous.com/would-you-stick-to-posterousco">Would you stick to Posterous?</a>&#8221;<br />
My answer today is &#8220;No&#8221; for the simple reason that it&#8217;s difficult to<br />
make the commitment to use Posterous as my primary blog until custom<br />
domains are supported. Redirects just don&#8217;t cut it.</p>
<p>Also, the brutally honest truth is that Posterous is on borrowed time.<br />
If the service does not start innovating rapidly, get huge user<br />
adoption and then create a significant reason for users to stay, it<br />
will soon become irrelevant. Its primary feature &#8212; email to blog &#8212; is<br />
not enough of a differentiator because technically it is not very<br />
difficult to implement and other blog engines will be quick to offer it<br />
to their users (some already do).</p>
<p>I think Posterous should be thinking about ways in which they can<br />
continue to stay relevant and even attractive to bloggers by doing the<br />
exact opposite of what they are doing right now. Instead of trying to<br />
be a blogging platform, they ought to focus on being an email<br />
publishing utility very much like FaceBook is positioned as a social<br />
utility. The <a mce_href="http://www.techbubble.net../autopost" href="http://www.techbubble.net../autopost">AutoPosting</a><br />
capabilities available on the service are a great way to start, but<br />
they could be so much more. Instead of just supporting vanilla posts<br />
with title and body and hosting the photos/media here, they should go<br />
all out and implement email to MetaWebLog and other API&#8217;s. Being able<br />
to use email to make a complete, detailed post to WordPress, DasBlog<br />
and other blogging engines would be great. Add template, tagging and<br />
categorization and it starts to get really interesting. </p>
<p>And while they are at it, they should do it for not just 10, but 100&#8242;s of other services. Basically, email enable every <a mce_href="http://www.programmableweb.com/apis" href="http://www.programmableweb.com/apis">ProgrammableWeb.com API</a><br />
for which email posting makes sense and that has any kind of traction.<br />
That would be killer and greatly increase the barriers for competition<br />
as users don&#8217;t like changing habits unless there is a very good reason.<br />
Imagine &#8220;posterous&#8221; becoming a verb for &#8220;posting something to any web<br />
service using email.&#8221; I think this would be a bigger opportunity for<br />
the company and allow it to become truly indispensable compared to<br />
where it is now &#8212; a &#8220;me too&#8221; blogging platform which re-posts to other<br />
services.</p>
<p>Bottom line, forget the blogging and focus on the email. <br mce_bogus="1"></p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2008/08/some-thoughts-on-posterous/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iWidgets déjà vu</title>
		<link>http://www.kalyani.com/2008/07/iwidgets-deja-vu/</link>
		<comments>http://www.kalyani.com/2008/07/iwidgets-deja-vu/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 08:00:00 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Widgets]]></category>

		<guid isPermaLink="false">http://www.techbubble.net/Blog/tabid/57/EntryId/206/iWidgets-deja-vu.aspx</guid>
		<description><![CDATA[At the height of the dot-com boom, I founded a venture-funded startup called iWidgets.com. My vision was to have mini-apps called &#8220;widgets&#8221; that you could plug into web portals that were all the rage at the time. Unfortunately, the market was not ready for widgets back in 1999, and when the stock market took a <a href='http://www.kalyani.com/2008/07/iwidgets-deja-vu/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>At the height of the dot-com boom, I founded a venture-funded startup<br />
called iWidgets.com. My vision was to have mini-apps called &#8220;widgets&#8221;<br />
that you could plug into web portals that were all the rage at the<br />
time. Unfortunately, the market was not ready for widgets back in 1999,<br />
and when the stock market took a dive a couple of years later, so did my<br />
company.</p>
<p>Fast-forward to present day and there is a new <a href="http://www.iwidgets.com/">iWidgets.com</a> site created by someone else. Here&#8217;s how eHub describes it:</p>
<p><span style="font-style: italic;">Create custom widgets for your website or your brand with iWidget.<br />
Using their online wizard, you can easily create widgets that your<br />
website visitors or customers can add to their i<cite>Google</cite> start page,<br />
Facebook profile, or their own blog. Your widget is customizable by<br />
your users so that it fits right in with their design.</span><br style="font-style: italic;" /><br />
It<br />
felt very strange seeing the site&#8230;sort of like seeing someone else<br />
wearing your favorite shirt. I spent some time on the site playing with<br />
their tools and was very, very impressed. Great job iWidgets.com team,<br />
wish you much success.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2008/07/iwidgets-deja-vu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>8 Things You Didn&#8217;t Know About Me</title>
		<link>http://www.kalyani.com/2008/01/8-things-you-didnt-know-about-me/</link>
		<comments>http://www.kalyani.com/2008/01/8-things-you-didnt-know-about-me/#comments</comments>
		<pubDate>Fri, 04 Jan 2008 08:00:00 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.techbubble.net/Blog/tabid/57/EntryId/190/8-Things-You-Didnt-Know-About-Me.aspx</guid>
		<description><![CDATA[Dennis McDonald tagged me in the &#8220;8 Things You Didn’t Know About Me&#8221; game so here goes: I love Chai and drink a lot of it (not the Starbucks kind&#8230;the regular Indian kind which is way better). I am a digitalmediaholic. I have over 6 terabytes of ripped movies and 100 GB of music. I <a href='http://www.kalyani.com/2008/01/8-things-you-didnt-know-about-me/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ddmcd.com/living-with-technology/8-things-you-didnt-know-about-me.html">Dennis McDonald</a> tagged me in the &#8220;8 Things You Didn’t Know About Me&#8221; game so here goes:</p>
<ol>
<li>I love Chai and drink a lot of it (not the Starbucks kind&#8230;the regular Indian kind which is way better).</p>
</li>
<li>I am a digitalmediaholic. I have over 6 terabytes of ripped movies and 100 GB of music.
</li>
<li>I am a dot com bubble survivor. I founded a venture-funded startup called iWidgets.com that created widgets for web pages. Unfortunately, the technology was six years ahead of its time.
</li>
<li>My un-Americanized name is <i>Nikunj</i>, pronounced <i>nick-ooonj</i>.
</li>
<li>I have never had any alcoholic beverage&#8230;none.
</li>
<li>I became a vegetarian in 2001&#8230;did it cold turkey (pun intended).
</li>
<li>I grew up in <a href="http://en.wikipedia.org/wiki/Bombay">Bombay</a> and came to the U.S. in 1987 for my undergrad education. Never went back, and became a U.S. citizen a few years ago.
</li>
<li>I enjoy the creative aspects of brand development, especially logo development, tag line creation and messaging.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2008/01/8-things-you-didnt-know-about-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A world of widgets</title>
		<link>http://www.kalyani.com/2005/08/a-world-of-widgets/</link>
		<comments>http://www.kalyani.com/2005/08/a-world-of-widgets/#comments</comments>
		<pubDate>Mon, 08 Aug 2005 08:00:00 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Widgets]]></category>

		<guid isPermaLink="false">http://www.techbubble.net/Blog/tabid/57/EntryId/90/A-world-of-widgets.aspx</guid>
		<description><![CDATA[It seems like there are widgets everywhere. Apple added widgets to Tiger through the cool Dashboard feature. Yahoo has a whole section of its site devoted to widgets. I greet widgets with a mixture of emotions. In 1999, when I created my venture-funded startup, my world-changing idea was to bring the web to people in <a href='http://www.kalyani.com/2005/08/a-world-of-widgets/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>It seems like there are widgets everywhere. Apple added <a href="http://www.apple.com/downloads/dashboard/" target="_blank">widgets</a> to Tiger through the cool Dashboard feature. <cite>Yahoo</cite> has a whole section of its site devoted to <a href="http://widgets.yahoo.com/" target="_blank">widgets</a>.</p>
<p>I greet widgets with a mixture of emotions. In 1999, when I created my venture-funded startup, my world-changing idea was to bring the web to people in the form of mini-applications that provided identical functionality with a web browser, a mobile device or a telephone. Not only that, the mini-apps had collaboration built-in so you could decide who could view/edit your data etc.</p>
<p>Yes, the mini-applications were called &#8220;widgets&#8221; and my startup was iWidgets, Inc. Unfortunately, the world wasn&#8217;t ready for widgets at the time and I didn&#8217;t know as much about running a startup then as I do today, and so iWidgets joined thousands of other dot bombs when I turned the lights out in early 2001.</p>
<p>But seeing all the buzz about widgets today gives me a good feeling &#8212; I had the right world-changing idea, just at the wrong time and perhaps a little flawed in the execution. I felt nostalgic enough to go digging through the archive DVD&#8217;s to pull up some promos we had created. Here are four of them, each focused a specific target market.</p>
<p><a href="http://www.iwidgets.com/janet.htm" target="_new">Janet</a> |  <a href="http://www.iwidgets.com/hannah.htm" target="_new">Hannah</a> |  <a href="http://www.iwidgets.com/johnsons.htm" target="_new">Johnsons</a> |  <a href="http://www.iwidgets.com/rob.htm" target="_new">Rob</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2005/08/a-world-of-widgets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

