<?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>Code Away &#187; ui</title>
	<atom:link href="http://blog.spathare.com/category/ui/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.spathare.com</link>
	<description>Software development, thoughts and rants (of course)</description>
	<lastBuildDate>Tue, 16 Feb 2010 11:33:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Website design</title>
		<link>http://blog.spathare.com/2009/08/website-design/</link>
		<comments>http://blog.spathare.com/2009/08/website-design/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 01:30:39 +0000</pubDate>
		<dc:creator>Swapnil Pathare</dc:creator>
				<category><![CDATA[ui]]></category>
		<category><![CDATA[bad design]]></category>
		<category><![CDATA[broken design]]></category>
		<category><![CDATA[cleartrip]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[undesigned]]></category>

		<guid isPermaLink="false">http://blog.spathare.com/?p=173</guid>
		<description><![CDATA[I am an amateur website designer. There are a lot of professionals who have in-depth knowledge about User interface and interaction, but every now and then I do like to take a look into design, simply because any web application is what the user can see. Not the data structures used, not the fancy algorithms [...]]]></description>
			<content:encoded><![CDATA[<p>I am an amateur website designer. There are a lot of professionals who have in-depth knowledge about User interface and interaction, but every now and then I do like to take a look into design, simply because <strong>any web application is what the user can see</strong>. Not the data structures used, not the fancy algorithms attached to core functionality. Just what the users can see (and probably how fast they can see it).</p>
<p>In general, I find that website designs can be divided into three broad categories:</p>
<h3>Designed websites</h3>
<p>Nothing much to talk here. We all know designed websites. There&#8217;s a banner, a good stylesheet, possibly a menu with a roll-out animation which doesn&#8217;t work anywhere except in IE6, and so on&#8230; you get the idea. The craze nowadays is to use glassy effects and some reflection to show &#8220;we&#8217;re so web 2.0&#8243;, not realizing that Web 2.0 was never associated with images. Not just on major icons but everywhere including menu buttons, command buttons, external links. Even favicons are not spared.</p>
<p>But let me rant about &#8220;Web 2.0 images&#8221; some other time. Coming back to the point, designed websites form the major chunk of what we see on the web. Corporate Information sites, dotcoms for companies highlighting their activities, all social networking sites, most portals, microsoft.com, even this blog: All fit in this category.</p>
<h3>Non-designed websites</h3>
<p>Any personal website created without a stylesheet, good coloring or imagery falls into this category. But its not just personal pages. Sites like <a href="http://newyork.craigslist.org/mnh/sss/" target="_blank">Craigslist</a> and <a href="http://mail.python.org/mailman/listinfo/python-dev" target="_blank">some dev mailing list pages</a> fall in this range as well. The default font in the browser (mostly the very inappropriate &#8220;Times New Roman&#8221;, if on Windows), white background, the occasional spurt of color (full saturation red or blue) to highlight an important point, it is all very ugly, but still it &#8220;works&#8221;. The information can be read, and it ends at that. These sites mostly operate on two norms:</p>
<ol>
<li><a href="http://www.codinghorror.com/blog/archives/000579.html" target="_blank">Content is King</a></li>
<li>I am individual, attempting to post this page in spite of not being very good at this stuff</li>
</ol>
<p>At the first glance, it seems the beauty of the site (or lack thereof) will most probably lead to the content being treated as junk. After all, looks matter a lot more than these guys think. But this thought doesn&#8217;t last long.</p>
<p>I don&#8217;t know whether it was Linux mailing lists or <a href="http://tldp.org/HOWTO/HOWTO-INDEX/howtos.html" target="_blank">TLDP Howtos</a>, but after a while, non-designed pages started to look a lot more sincere than pages in designed websites. The trust factor is possibly explained by the fact that these pages are mostly by &#8220;community&#8221; and non-profit orgs, as against designed websites which are owned by someone who had the money to pay for a good design (with 3D bulky images, it cost a lot back then), and are mostly planning to earn that back some way. Mostly, the words &#8220;evil money-making <a href="http://en.wikipedia.org/wiki/Megacorporation" target="_blank">megacorps</a>&#8221; come to mind.</p>
<h3>Undesigned websites</h3>
<p>I&#8217;d love to write a few pages on this, but Alex Bainbridge <a href="http://www.tourcms.com/blog/2007/11/07/undesign-is-this-how-travel-websites-should-be/" target="_blank">wrote about it perfectly</a> way back in 2007. I&#8217;ll just quote him.</p>
<blockquote><p>There has been some chatter about the concept of “undesign”. I struggled to find a definition of it that I could publish so I am going to come up with my own:</p>
<p>I now define undesign as a web design that has the following characteristics:</p>
<ul>
<li><strong>Copy / text is the user interface – </strong>The words, the size of text, the length of the sentence, the paragraph breaks – all of this forms the user interface (rather than creating containers with graphics – and placing text / copy inside those containers)</li>
<li><strong>Links are text based</strong> – not images</li>
<li><strong>There are no gratuitous user interface elements</strong> - I define gratuitous as those that either don’t provide information (for example stars on a star rating) nor assist with usability (for example lines between sections – acting as dividers).</li>
<li><strong>Usability is prioritised over visual branding - </strong>the design is engineered to be used – not admired like a piece of static art.</li>
</ul>
<p>So what you end up with is a mainly text website. It sounds dull but it isn’t.</p>
<p><strong>Some examples of undesign</strong></p>
<ul>
<li><a href="http://www.37signals.com/">37signals</a> – Homepage and corporate website. Very clearly the text copy is the user interface</li>
<li><a href="http://www.google.com/">Google</a> – search and search results</li>
<li><a href="http://www.amazon.com/">Amazon</a> – product page – there are very few visual elements on the page except for product images. Apart from that it is mainly text. Some graphics are used to divide sections – but these are kept to a minimum.</li>
<li><a href="http://www.cleartrip.com/">ClearTrip</a>- A travel website example. ClearTrip offer flight bookings for flights within India. The hint towards their design mindset comes from their name!</li>
</ul>
<p>The cleartrip homepage. See how there is very little imagery. This is travel undesign. Go and take a look at one of their flight results pages as well. Very clean. (While you are there – go one step further – the accordian checkout is interesting)</p></blockquote>
<p>The idea of undesigned sites has gained a lot of strength recently and portals like cleartrip and 37signals are sure helping the process. I hope this theme catches on as we move forward.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.spathare.com/2009/08/website-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 7: First Look</title>
		<link>http://blog.spathare.com/2009/08/windows-7-first-look/</link>
		<comments>http://blog.spathare.com/2009/08/windows-7-first-look/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 01:30:06 +0000</pubDate>
		<dc:creator>Swapnil Pathare</dc:creator>
				<category><![CDATA[ui]]></category>
		<category><![CDATA[7]]></category>
		<category><![CDATA[aero]]></category>
		<category><![CDATA[bloat]]></category>
		<category><![CDATA[features]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[vista]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://blog.spathare.com/?p=171</guid>
		<description><![CDATA[I tried out the Windows 7 RC. Is it simply awesome just like everyone&#8217;s been yelling? Short Answer I am not as impressed as much as the rest of the community is. Long Answer I suppose most of the folks who have written about Win7 are using Windows Vista : The OS associated with most [...]]]></description>
			<content:encoded><![CDATA[<p>I tried out the Windows 7 RC. Is it simply awesome just like everyone&#8217;s been yelling?</p>
<div id="attachment_176" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.spathare.com/wp-content/uploads/2009/07/windows7_beta_boot_screen.png"><img class="size-medium wp-image-176" title="windows7_beta_boot_screen" src="http://blog.spathare.com/wp-content/uploads/2009/07/windows7_beta_boot_screen-300x214.png" alt="Windows 7 is here" width="300" height="214" /></a><p class="wp-caption-text">Windows 7 is here</p></div>
<h3>Short Answer</h3>
<p>I am not as impressed as much as the rest of the community is.</p>
<h3>Long Answer</h3>
<p>I suppose most of the folks who have written about Win7 are using Windows Vista : The OS associated with most rants since Windows ME. And this time, the online community strength has developed quite a bit. All-in-all, hearing that Vista was a bit of <a href="http://www.urbandictionary.com/define.php?term=PITA" target="_blank">PITA</a>, it seems reasonable to applaud Windows 7, since it uses marginally less resources, has a clearer interface and probably has a better UI than Vista. I wouldn&#8217;t happen to know, as my net duration on Vista has been just two minutes (at the Acer store).</p>
<p>In short, the bar set for declaring &#8220;good OS&#8221; is quite low when the comparison is against Vista. I certainly had mixed feelings, jumping into Win 7 from WinXP. Lets look at what&#8217;s good first</p>
<ul>
<li>The sidebar seems somewhat useful; I probably need to figure out what I need to constantly see, even while working. But I&#8217;m sure many will benefit from gadgets, especially on a wide-screen.</li>
<li>Aero looks elegant (better than XP anyway), but as a user of beryl/compiz on Ubuntu, aero seems to be a far crippled version of its open source alternative.</li>
<li>I right-clicked a folder in Windows Explorer and kept looking for &#8220;Search in this Folder&#8221; menu item for like five minutes! I just wasn&#8217;t able to comprehend how Microsoft could omit such an important functionality, only to realize later that it was always present at the top-right corner. Important features placed at good spots.</li>
<li>And boy was that search <strong>fast!</strong> Automatic indexing of files. I love it!</li>
<li>Inbuilt Voice Recognition is good. It took me quite a bit of time to coax the computer into writing a three-line document for me, but that&#8217;s mostly because of the Indian accent. I did manage a somewhat American accent and was thankful that I was alone while doing that, else it would have been a joke told for generations.</li>
<li>Media center <a href="http://gizmodo.com/5095414/10-really-cool-windows-7-media-center-features" target="_blank">has got loads of features</a>, but I don&#8217;t use most of them. I&#8217;m the sort of guy who prefers XMMS or Winamp 2.0, so yes, the tag &#8220;technologically obsolete&#8221; will not be wrong as far as music is concerned.</li>
<li>Increased Security. But that&#8217;s not always good. What&#8217;s good is configurable security levels: in line with many appeals to <a href="/2009/01/leave-my-security-to-me/" target="_blank">leave the security to end-users</a>. Let users control Windows rather than the other way round.</li>
</ul>
<p>And now for the sad parts</p>
<ul>
<li>Memory consumption: Too high for any OS, however modern. At a time when most activities of the common man are online (and the activities on the computer involve little more than word processors or spreadsheets), I do not see a reason why people should invest in a state-of-the-art processor and memory only to support OS bloat. No wonder people are still saying &#8220;no, thanks&#8221;. Its because XP already is so good at delivering what they need. (I do admit that I had exactly the same feelings about Windows XP when it was released. One can easily see how I cannot be the father of technology in any way whatsoever)</li>
<li>This also means that having Vista as a guest OS in a virtual machine is next to impossible unless you are on a very high-end machine. Win XP, in contrast, fits the bill here perfectly.</li>
<li>Placement of components on most windows and dialogs is new. I already talked about the &#8220;Search&#8221; feature before. Now take a look at the personalization dialog for example. Actions available on the left as well as at the bottom. Actions on the left are easily visible because of the XP experience. In addition, they are shaded with a different color (blue in this case). I could not notice the icons at the bottom right away.</li>
</ul>
<div class="wp-caption alignnone" style="width: 410px"><img title="Windows 7 Personalization" src="http://windows7news.com/wp-content/uploads/2009/05/windows_7_personalization-400x300.jpg" alt="Windows 7 Personalization" width="400" height="300" /><p class="wp-caption-text">Windows 7 Personalization</p></div>
<p>That&#8217;s about it. The rest of my problems lie in the fact that I installed the 64 bit version, which works perfectly by itself, but a <a href="http://www.google.com/search?hl=en&amp;q=windows+7+64+bit+software+issues" target="_blank">bunch of software</a> has problems working with it. I&#8217;ll write a post about that some other time.</p>
<p>The rants above on memory hog are quite lame in the long run, actually, as is the point of learning curve. Memory and processing power is always going to increase. And we did have to spend a few days in Windows XP to get used to the &#8220;new interface&#8221; after running Windows 98 for a long time, didn&#8217;t we? So overall, the issues I have listed are pretty trivial with the sole exception being virtualization: that running the Windows 7 OS as guest on most &#8220;home&#8221; machines is not very likely, atleast for a couple of years.</p>
<p>Its a good upgrade, but not a must-upgrade for now. Windows XP is good. Ubuntu Linux is better than XP. It is not as polished as Windows 7, but hey, it&#8217;s free! I&#8217;ll stick with Ubuntu for now, and keep trying newer stuff with the Win 7 RC for a few more days.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.spathare.com/2009/08/windows-7-first-look/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Keystroke savers</title>
		<link>http://blog.spathare.com/2009/07/keystroke-savers/</link>
		<comments>http://blog.spathare.com/2009/07/keystroke-savers/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 09:14:05 +0000</pubDate>
		<dc:creator>Swapnil Pathare</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plumbing]]></category>
		<category><![CDATA[ROR]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://blog.spathare.com/?p=169</guid>
		<description><![CDATA[A peek at creating the Django Admin interface for any model has floored me completely. I did make a feeble attempt to create something similar for this in Java way back in 2005, but it is quite a daunting task. The integration offered by Django and RoR really makes one feel that not using these [...]]]></description>
			<content:encoded><![CDATA[<p>A peek at creating the Django Admin interface for any model has floored me completely. I did make a feeble attempt to create something similar for this in Java way back in 2005, but it is quite a daunting task.</p>
<p>The integration offered by Django and RoR really makes one feel that not using these frameworks is just the thing why software developers are in demand today. Hire fifteen to do a job in php which two could do using Django.</p>
<p>Some may say these facilities are just keystroke-savers. Agreed. The important question is why do you not want to save those keystrokes <img src='http://blog.spathare.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . A common application development (without the right kind of framework) spends a significant amount of time (I&#8217;d hazard a guess of more than 25%) doing plumbing work. Lets take a Java example for an &#8220;edit&#8221; screen, which shows the user already stored data, and allows him to make changes:</p>
<ul>
<li>Take data from repository, probably as a generic List
<ul>
<li>Oh yeah, connect to the DB first, and run a DB Statement in a try-catch block, right within your business logic</li>
</ul>
</li>
<li>Populate a data bean with all the data. All manually. If the DB cursor contains 25 columns, have a object with 25 attributes, 25 getters, 25 setters and populate all attributes one by one.</li>
<li>Send the data bean to the view</li>
<li>In the view, have hard-coded UI components for each attribute of the data bean to be displayed. For any related queries to be executed, hard code page links which will fetch those.</li>
<li>On event of user clicking OK, program a set of validations to ensure user has not entered bad values. Most of these are not business validations, but checks to ensure no bad characters are present in the input.</li>
<li>Populate user entered values obtained through form into a data bean</li>
<li>Code a SQL Update script which will take each value from the data bean and update the backend</li>
<li>commit (don&#8217;t forget that!)</li>
<li>Rinse-and-repeat for all related queries</li>
</ul>
<p>Any framework support (struts, spring, hibernate) is a keystroke saver in addition to being responsible for formalizing (a subset of) the programming for the application. Django and RoR simply take the integration between MVC to the next level. I had mailed a friend a few months ago about what Rails has:</p>
<p>1. <strong>Integration with AJAX: </strong>You see whether the type of request from the client (browser) is ajax or plain HTTP. You use those conditions to provide a specific response. In case it is an ajax request, you can play directly with elements rendered in the browser (e.g. Put text &#8220;Saved Successfully&#8221; in the information bar and blink it once). This integration, and resulting 5 lines of code is far faster than anything we would do by ourselves. (client side use ajax-specific library functions to send request, then check XML returned and perform activities in browser using javascript again). This integration is thanks to use of inbuilt prototype and scriptaculous libraries</p>
<p>2. <strong>Test Integration:</strong> I know that if a nice <strong>high-level </strong>test framework didn&#8217;t exist already, we would never get serious about writing real automated tests. It would always be like &#8220;lets develop this cool feature now that we have time&#8230; we&#8217;ll check out tests later&#8221;. Fortunately, tests are easy to write, and we can start small. (full page tests and all can be written later). We can also write Model level tests for ensuring relationships etc. N e a t.</p>
<p>3. <strong>MVC Integration: </strong>Neat MVC code, easy to write. Controllers and views nicely integrated. All variables declared in controller are directly available to views. Which should have always been the case, but in other barebones J2EE/php, you need to pass a data object explicitly, because MVC is not mandated.</p>
<p>4. <strong>Fixtures:</strong> Stuff to fill your &#8220;Test&#8221; database with data. Easy to write YAML (byebye XML). This will auto-run when you run tests, so your test database is ready with required data. If you don&#8217;t know yet, <span class="il">Rails</span> will auto-create dev, test, prod databases for easy demarcation. <span class="il">Rails</span> will also auto-clone the dev database schema to test database prior to loading fixtures.</p>
<p>The learning curve is a bit high, and I <em>am </em>spending a lot more time understanding the components in comparison to J2EE. Yet, given the benefits, I think it is well worth the effort.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.spathare.com/2009/07/keystroke-savers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Chrome prevents javascript alert loop</title>
		<link>http://blog.spathare.com/2009/02/chrome-prevents-javascript-alert-loop/</link>
		<comments>http://blog.spathare.com/2009/02/chrome-prevents-javascript-alert-loop/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 04:52:34 +0000</pubDate>
		<dc:creator>Swapnil Pathare</dc:creator>
				<category><![CDATA[tools]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[alert]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[option]]></category>
		<category><![CDATA[prevent]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.spathare.com/?p=112</guid>
		<description><![CDATA[I&#8217;ve written earlier about user helplessness regarding any javascript alert boxes which keep popping in one tab of the browser, thereby jeopardizing the whole browser window. I just found by chance that Google Chrome indeed handles this elegantly: On the second popup for any page, it displays this neat checkbox right below the message: This [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve <a href="/2009/01/javascript-alert-why-block-everything/" target="_blank">written earlier</a> about user helplessness regarding any javascript alert boxes which keep popping in one tab of the browser, thereby jeopardizing the whole browser window.</p>
<p>I just found by chance that Google Chrome indeed handles this elegantly: On the second popup for any page, it displays this neat checkbox right below the message:</p>
<p><img class="alignnone size-full wp-image-113" title="chrome_alert_prevent" src="http://blog.spathare.com/wp-content/uploads/2009/02/chrome_alert_prevent.jpg" alt="" width="354" height="136" /></p>
<p>This is something that Mozilla folks decided &#8220;could wait&#8221; for the <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=59314" target="_blank">past eight years</a>?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.spathare.com/2009/02/chrome-prevents-javascript-alert-loop/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The evergreen Tables v/s CSS debate</title>
		<link>http://blog.spathare.com/2009/02/the-evergreen-tables-vs-css-debate/</link>
		<comments>http://blog.spathare.com/2009/02/the-evergreen-tables-vs-css-debate/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 05:00:58 +0000</pubDate>
		<dc:creator>Swapnil Pathare</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[consistency]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[style]]></category>
		<category><![CDATA[tables]]></category>
		<category><![CDATA[unsability]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.spathare.com/?p=105</guid>
		<description><![CDATA[Beautiful post on removing CSS layout and going back to the good ol&#8217; table tag. The comments are good as well, if you can locate them among the thousand-odd rants. Actually the beauty of the post lies in the author not trying to be in preach-mode. It&#8217;s just a &#8220;screw it all I&#8217;m goin&#8217; home&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://iamelgringo.blogspot.com/2009/02/tables-vs-css-css-trolls-begone.html" target="_blank">Beautiful post</a> on removing CSS layout and going back to the good ol&#8217; table tag. The comments are good as well, if you can locate them among the thousand-odd rants.</p>
<p>Actually the beauty of the post lies in the author not trying to be in preach-mode. It&#8217;s just a &#8220;screw it all I&#8217;m goin&#8217; home&#8221; treatment handed out to <code>display:block; float:left;</code> layout, which has irked some gentlemen of the CSS church. For these kind-hearted people, the author takes some time out to coin a term CSS-Trolls. And could you believe it, the very same association of people replied on this post with complete disgust, on how terrible the advice is, and how the author ought to die of shame. Well, some comments were actually written by well-mannered folks, who put their point and signed off with a bow.</p>
<p>But let&#8217;s not talk on people. Let&#8217;s talk on the point in question. Tables or CSS?</p>
<p>Well it really doesn&#8217;t have to be an exclusive decision. CSS does provide a lot in terms of</p>
<ul>
<li>Flexibility in presentation</li>
<li>Easy alterations in future</li>
<li>Accessibility for visually impaired</li>
<li>Pixel-level control of all objects</li>
</ul>
<p>and other goodies. I&#8217;m a CSS fan ever since I built my first CSS-enabled website 3 years ago and realized how much I sucked in web design before.</p>
<p>Yet, CSS, with all its control on page components, remains a browser-based implementation. Wait, even tables are in the same league! Yes, but tables give you one assurance: If you want &#8220;Y&#8221; in the left cell and &#8220;Z&#8221; in the right, that&#8217;s how you are going to get it. No side effects with anything: pages resized, font sizes increased, browsers changed, you try it. It may look ugly, sucky design, but &#8220;Z&#8221; remains to the right of &#8220;Y&#8221;.</p>
<p>This one single feature of <strong>consistent </strong>placement gets screwed up when you try to use CSS. I sat with my friend once to get a layout with 3 columns, with a horizontal bar at the bottom of all three columns. Quite a number of times, the bar appeared on the right of the columns, sometimes behind the columns. It took us a good one hour to get things sorted out, after adding a multitude of attributes for the last column and for the horizontal bar. I can surmise that whatever attributes we used would produce at least some side effects in one of the browsers.</p>
<p>You can well say that I am not as good of a CSS coder as I think. Well, that&#8217;s the whole problem. The layout worked perfectly in one browser and it wouldn&#8217;t on others. Why does my knowledge on markup have to involve inconsistencies rendered by design specs of different browsers?</p>
<p>Lets take another example. A friend working in a UI framework team discussed an issue with me one day: The div appeared two pixels to the right of the desired location on FireFox, while it rendered at the perfect spot for IE. Now that&#8217;s an amazing problem, where the (heavy) component is derived from 5 other smaller units. Turned out to be a difference of rendering a border between FF and IE.</p>
<p>Coming out of bedtime stories, we have situations where &#8220;the boss wants the code complete by evening&#8221;. It is useless to sit and gaze at the beauty of CSS at times like these. Just get yourself some nice tables <strong>where necessary</strong>, use CSS <strong>where easy </strong>and roll it out, as <a href="http://www.teamlalala.com/blog/2009/02/05/15-of-the-top-20-websites-use-tables-for-layout/" target="_blank">many have preferred</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.spathare.com/2009/02/the-evergreen-tables-vs-css-debate/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>On automated prefetch</title>
		<link>http://blog.spathare.com/2009/02/on-automated-prefetch/</link>
		<comments>http://blog.spathare.com/2009/02/on-automated-prefetch/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 09:07:26 +0000</pubDate>
		<dc:creator>Swapnil Pathare</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[accelerator]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[GET]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[POST]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[webapp]]></category>

		<guid isPermaLink="false">http://blog.spathare.com/?p=86</guid>
		<description><![CDATA[Yesterday I happened to read a good bit of discussion which happened way back in 2005 on behavior of Google&#8217;s Web Accelerator and the trauma caused to websites. Although coming a little late to the party (3 years later), my post on Best Practices for GET and POST HTTP commands does answer some big questions [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I happened to read a <a href="http://www.37signals.com/svn/archives2/google_web_accelerator_hey_not_so_fast_an_alert_for_web_app_designers.php" target="_blank">good bit of discussion</a> which happened way back in 2005 on behavior of <a href="http://webaccelerator.google.com/" target="_blank">Google&#8217;s Web Accelerator</a> and the trauma caused to websites. Although coming a little late to the party (3 years later), my post on <a href="http://blog.spathare.com/2008/06/best-practices-for-using-http-get-and-post/" target="_blank">Best Practices for GET and POST HTTP</a> commands does answer some big questions which kept occurring in the discussion.</p>
<p>At first, a little introduction to the havoc wreaked by WebAccelerator: It sits with your browser, and &#8220;clicks&#8221; links intelligently on the page you have visited. This ensures that your next click opens the new page instantly. However, &#8220;intelligent&#8221; behavior started to trouble web applications where links happened to update/delete records in Admin Consoles.</p>
<p>Although the bigger question raised was regarding <a href="http://www.37signals.com/svn/archives2/gwa_shines_light_on_google_privacy_concerns.php" target="_blank">privacy concerns</a> (Google indexes pages prefetched by WebAccelerator, which includes pages unreachable by its crawlers), lets keep that out for a moment and revisit the issues faced by web developers. As Web Accelerator is no longer active, you may wonder why we need to recap history. The reason is, you never know what plugin the users of your app have installed on their browsers. Yesterday, it was Google. Tomorrow, it may be something smaller, having auto-installed with another package, and no one will have an idea that your pages are being prefetched.</p>
<p>As always, information websites with links sprinkled around do not need to bother about prefetch. Its the websites with user authentication required that mostly fell prey to this activity.</p>
<p>I&#8217;ve not tried GWA, and there are comments stating that GWA doesn&#8217;t do a lot of things which have been alleged. However, our work here is not to discuss merits of Web Accelerators and their conformance to standards. All we want to do is strengthen our own website. So lets take a look at some problems faced, and graceful solutions or workarounds opined.</p>
<p>1. <strong>&#8220;Logout&#8221; link prefetched once the user logged in:</strong> This threw the user out before he did any other activity. Quite irritating. The &#8220;Best Practices&#8221; supporters came out in strong defense of Google here. Why would developers keep Logout as a link (GET) and not a POST, they asked. Except that Logout is really an idempotent operation! A user can logout once or ten times, and it is always the same result, in almost all cases. Our little tweak to the Best Practices helps in deciding that POST is better for Logout.</p>
<blockquote><p>A safer deal is to have form method as GET when the application state does not change at all</p></blockquote>
<p>2. <strong>&#8220;Delete&#8221; links prefetched in Admin consoles: </strong>Well, this is pretty straightforward. You cannot have &#8220;Delete&#8221; as a GET operation. But here&#8217;s where we get out of utopia. In the real world, navigation and look and feel of the application is largely decided by the UI team, and the developer has little say in the matter. If the designers feel that links alongside 10 items feel &#8220;cool&#8221; and buttons don&#8217;t, well, you need to keep a link. The workaround here is to have <code>a href = "#"</code> and code a form submit on the <code>onclick</code> event of the link.</p>
<p>3. <strong>Links which involved heavy database operations</strong>: &#8230;and thus increased server load were prefetched. A way out here is to limit the number of &#8220;heavy&#8221; operations performed by a user per minute. This seems like a fair balance between a hack to redirect to 403 and a puritan approach of removing links altogether, making pages accessible only through Javascript or POST operations.</p>
<p>4. <strong>Links which retrieved data but also imposed exclusive locks on the data:</strong> The first user to come along could end up locking quite a bit of system data, thanks to prefetch operation. However, isn&#8217;t a lock on data change of application state? The change needn&#8217;t be in a database operation. Any change of state should require (scream) POST.</p>
<p>Well, that&#8217;s quite an interesting list of 4 points with repeated <em>gyaan</em> which has, no doubt, also been written  before by others. But, as long as reading this post helps at least one developer, I&#8217;m happy. Benefited developer, please post a comment so that I stay vindicated <img src='http://blog.spathare.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.spathare.com/2009/02/on-automated-prefetch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Usability: Javascript alert() function</title>
		<link>http://blog.spathare.com/2009/01/usability-javascript-alert-function/</link>
		<comments>http://blog.spathare.com/2009/01/usability-javascript-alert-function/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 05:05:12 +0000</pubDate>
		<dc:creator>Swapnil Pathare</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[alert]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[popup]]></category>
		<category><![CDATA[unobtrusive]]></category>

		<guid isPermaLink="false">http://blog.spathare.com/?p=61</guid>
		<description><![CDATA[Traditionally, the most convenient way for web developers to buzz the user with a message has been the javascript alert() pop-up. It is convenient to code and ensures that the user doesn&#8217;t miss the message (no way to go back to the page till the user clicks OK or whatever prompts you&#8217;ve coaxed in) Today [...]]]></description>
			<content:encoded><![CDATA[<p>Traditionally, the most convenient way for web developers to buzz the user with a message has been the javascript alert() pop-up. It is convenient to code and ensures that the user doesn&#8217;t miss the message (no way to go back to the page till the user clicks OK or whatever prompts you&#8217;ve coaxed in)</p>
<p><img title="Javascript alert" src="http://blog.spathare.com/wp-content/uploads/2009/01/alert.jpg" alt="Javascript alert" width="415" height="393" /></p>
<p>Today this very pop-up is a major hassle for users, just because in multi-tabbed interfaces, the user cannot switch between tabs when an alert is displayed to him. So you have an irritated user who wants to urgently book a flight in the next page, but is stuck on your tab because you have provided some text for him to understand and press OK.</p>
<p>This is still ok when the alert is shown on the press of a button. There is a higher probability of the user being still focussed on your page. But alerts on page load, notifying &#8220;Successfully performed operation&#8221; are nothing but rot.</p>
<p>To grab user attention <em>while user is on your page</em>, a far more elegant way is the use of div based message boxes. This keeps the user interface consistent with the remaining website and also grants user space for some other (possibly precious) activity. The new CSS opacity attributes also let you gray-out the page background whilst displaying your error &#8212; pretty neat.</p>
<p>While you are proceeding towards unobtrusive interfaces like a good kid, why not also give a thought to what ought to be the messages warranting a pop-up? <a href="http://www.oracle.com/technology/products/adf/index.html" target="_blank">Oracle ADF</a>, which we use for development, has 3 levels of messages:</p>
<ul>
<li><strong>Info, Warning:</strong> Display at the top of the page with appropriate icon</li>
<li><strong>Error:</strong> Display as a div based pop-up to the user, gray out the remaining page, ensuring the user cannot perform any activity till he selects an option to handle or acknowledge the error.</li>
</ul>
<p>The good part is that the behavior of messages is built into the framework. So if tomorrow a usability test suggests that warning messages better be shown as a popup so the user doesn&#8217;t miss them, there&#8217;s a 3 line change in the framework to enable this. Clean, easy, cool. That&#8217;s the way we want it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.spathare.com/2009/01/usability-javascript-alert-function/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Updates: Auto-chaos</title>
		<link>http://blog.spathare.com/2008/11/software-updates-auto-chaos/</link>
		<comments>http://blog.spathare.com/2008/11/software-updates-auto-chaos/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 04:33:19 +0000</pubDate>
		<dc:creator>Swapnil Pathare</dc:creator>
				<category><![CDATA[tools]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[automatic]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[hang]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://blog.spathare.com/?p=45</guid>
		<description><![CDATA[I got a SOS call from a relative while I was on vacation. &#8220;My Internet Explorer is not working.&#8221; No idea why. No one can resolve it. Other browsers are working properly. Long story short, after having spent a few minutes on his PC, I found out that IE was hanging the moment it started. [...]]]></description>
			<content:encoded><![CDATA[<p>I got a SOS call from a relative while I was on vacation. &#8220;My Internet Explorer is not working.&#8221; No idea why. No one can resolve it. Other browsers are working properly.</p>
<p>Long story short, after having spent a few minutes on his PC, I found out that IE was hanging the moment it started. His PC maintenance guy had come and tried to reconfigure the Internet connection (<em>heh</em>), which didn&#8217;t help much. (The fact that a browser ought to hang on the OS from the same company should have seemed absurd, but somehow we are all used to it, mostly due to virus attacks and corruption.)</p>
<p>But why would a perfectly working IE hang all of a sudden? I got another bit of info from the user: &#8220;It asked me to upgrade to version 7. It is not working ever since I upgraded&#8221;. Sad. MS doesn&#8217;t test its upgrades enough! Useless! Thankfulle, before I could post my rant online, I googled and found a quick solution: Uninstall Yahoo! Companion and all shall be fine. And indeed it worked! Perfect answer&#8230; and boy did I get showered with praises for starting up good old IE with fewer toolbars!</p>
<p>For no fault of its own, IE was screwed and broken due to the upgrade. Oh, but there <em>is </em>a fault in it&#8230; <strong>the upgrade itself!</strong></p>
<p>The sad thing here is that IE either doesn&#8217;t have any idea about what applications are plugged-in (or coaxed in) to it, or that it doesn&#8217;t care about them during the upgrade. Either ways, it is the user who suffers.</p>
<p>FF covers addons a lot more by checking their versions and the compatibility after each upgrade. That said, a foolproof &#8220;Go back to the previous version&#8221; ought to be present for all major upgrades <span style="text-decoration: line-through;">which are not critical</span>, simply because there may be a functionality dear to the user (and a don&#8217;t care for the dev) which might stop working in the new version. <strong>Edit: </strong>Even if the update is critical or security related, why not let the user choose whether he needs a secure app or a working one?</p>
<p>The other way out is to have a package manager like Debian&#8217;s &#8216;apt&#8217; tool to handle all upgrades and report clashes to the user. But that&#8217;s a distant dream on Windows with everyone having their own installers.</p>
<p>I hate automatic updates &amp; installs. (I have also <a href="/2008/07/all-that-is-evil-part-2/" target="_blank">written earlier</a> about Acrobat Reader&#8217;s need to download and install &#8220;Critical Security&#8221; updates every few weeks from the Internet. There ought not to be those many security vulnerabilities in a document reader.) But all kinds of applications today are coming up with internet updates. While this does allow you to provide your latest and greatest piece of code to the user, you might just end up breaking something because of incompatibilities with other software.</p>
<p>Adhering to the policy of <a href="http://www.oldversion.com" target="_blank">oldversion.com</a>: &#8220;Because Newer Is Not Always Better&#8221;, I try to keep my software tuned for manual updates. Reduces the trouble, as well as the bandwidth consumption (required specially for limited-download connections). Yet, it does no harm to remember that software one develops will not be the only process running on any machine. Let&#8217;s have some consideration for others.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.spathare.com/2008/11/software-updates-auto-chaos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Unobtrusive UI 101</title>
		<link>http://blog.spathare.com/2008/09/unobtrusive-ui-101/</link>
		<comments>http://blog.spathare.com/2008/09/unobtrusive-ui-101/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 19:37:55 +0000</pubDate>
		<dc:creator>Swapnil Pathare</dc:creator>
				<category><![CDATA[tools]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[unobtrusive]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://blog.spathare.com/?p=42</guid>
		<description><![CDATA[Perhaps the best example of converting an irritating popup into an &#8220;unobtrusive&#8221;, conveniently placed message is the &#8220;Remember Password&#8221; dialog of FireFox: Upto Version 2.x Version 3.x It was indeed very irritating to decide whether I want to remember the password or not for some xyz website where I had just one minute of quick [...]]]></description>
			<content:encoded><![CDATA[<p>Perhaps the best example of converting an irritating popup into an &#8220;unobtrusive&#8221;, conveniently placed message is the &#8220;Remember Password&#8221; dialog of FireFox:</p>
<p><strong>Upto Version 2.x</strong></p>
<p><a href="http://blog.spathare.com/wp-content/uploads/2008/09/firefox_pwd01.jpg"><img class="alignnone size-medium wp-image-43" title="Firefox password prompt - old" src="http://blog.spathare.com/wp-content/uploads/2008/09/firefox_pwd01-300x179.jpg" alt="Firefox password prompt - old" width="300" height="179" /></a></p>
<p><strong>Version 3.x</strong></p>
<p><a href="http://blog.spathare.com/wp-content/uploads/2008/09/firefox_pwd02.jpg"><img class="alignnone size-medium wp-image-44" title="Firefox password prompt - new" src="http://blog.spathare.com/wp-content/uploads/2008/09/firefox_pwd02-300x148.jpg" alt="Firefox password prompt - new" width="300" height="148" /></a></p>
<p>It was indeed very irritating to decide whether I want to remember the password or not for some xyz website where I had just one minute of quick work to be done. Good UI always deserves applause. After all, for most users, <a href="http://www.codinghorror.com/blog/archives/000371.html" target="_blank">the UI is the Application</a>. Thanks FF!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.spathare.com/2008/09/unobtrusive-ui-101/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Simple is in: Portable Apps</title>
		<link>http://blog.spathare.com/2008/09/simple-is-in-portable-apps/</link>
		<comments>http://blog.spathare.com/2008/09/simple-is-in-portable-apps/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 19:25:55 +0000</pubDate>
		<dc:creator>Swapnil Pathare</dc:creator>
				<category><![CDATA[tools]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[portable apps]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[virtualbox]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.spathare.com/?p=39</guid>
		<description><![CDATA[The focus on usability has increased considerably in the past decade. Firefox, Ubuntu, WordPress are all great examples of powerful software or systems which strive for ease of use. There is little surprise that they emerge as clear winners or strong contenders for pole position in their respective domains. Some of the lesser known apps [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone aligncenter" style="margin: 10px; float: left" src="http://farm2.static.flickr.com/1189/1036775183_de016fb021.jpg" alt="Complexity" width="50%" height="50%" /></p>
<p>The focus on usability has increased considerably in the past decade. Firefox, Ubuntu, WordPress are all great examples of powerful software or systems which strive for ease of use. There is little surprise that they emerge as clear winners or strong contenders for pole position in their respective domains.</p>
<p>Some of the lesser known apps which provide awesome features are the <a href="http://portableapps.com/" target="_blank">Portable Apps Suite</a> and<a href="http://portableapps.com/" target="_blank"> </a>my favourite virtualizer, <a href="http://www.virtualbox.org/" target="_blank">Sun VirtualBox</a>. I&#8217;ll yak a bit on the benefits of Portable Apps in this post, and cover VirtualBox later.</p>
<p>In one way, Portable Apps is a platform that should never have been required, let alone developed. But here we stand, with all our major desktop software for Windows machines &#8211; depending somehow, somewhere, on the Windows registry.</p>
<p><code>&lt;off-topic&gt; &lt;!-- Warning: Geeky matter --&gt;</code></p>
<p>Dependency on the registry isn&#8217;t required for all apps. Most should be able to manage configurations using a simple flat file akin to what *nix apps use. Efficient read of config property is not an issue at all; one can just load the config file and  store the contents in a map. But some developers anyway proceed to use the registry in order to hide the configuration from the user. Included in these are all those great apps which require a registration key or something of that nature to function. This key or identification, unique to the user, is stored in some obscure corner of the registry, so that the (regular) user cannot tamper with those.</p>
<p><code>&lt;/off-topic&gt; &lt;!-- <img src='http://blog.spathare.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  --&gt;</code></p>
<p>So back on line. To many of the users who were content with the Windows-IE-Office-<em>Y!</em>Messenger installations and need no more than that, the scenario above made little difference. But as increasing number of people found themselves using more than one (sometimes-malfunctioning, virus-infected) Windows PC, it became necessary to install and maintain all required software on multiple machines.</p>
<p>Enter Portable Apps. While this suite doesn&#8217;t provide any sort of portability between OSes (Windows, *nix, mac), it does give a very neat and clean platform for those who would like to develop applications running directly from a flash drive or external disk. Basically this means that the apps ought not to refer to Windows registry for state information or configuration. Many subsequently altered their code and came up with portable versions of their apps. The Open Source Software devs were some of the first to cover this ground, since none had any intention of locking the user with registration keys or the sort. Thanks to them, we have a <a href="http://www.portablefreeware.com/" target="_blank">humongous list</a> of free portable software (some free as in freedom <img src='http://blog.spathare.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ). Better still, we have the most-used software already included with the portable apps <a href="http://portableapps.com/suite" target="_blank">suite</a>. All this, with a very neat menu providing a list of all apps &#8220;installed&#8221; (basically just copied to a proper directory) in the external drive, and all documents stored.</p>
<p><img class="alignnone" title="Portable Apps screenshot" src="http://blog.spathare.com/wp-content/uploads/2008/09/portable-apps-test-1.jpg" alt="Portable Apps screenshot" /></p>
<p>For anyone with a flash drive of more than 256MB, this is a must-have. Not just for people regularly working on multiple machines, but also for those who visit relatives and would like to show them the new video on their flash drive, but can&#8217;t, because the Windows Media Player on their PC simply doesn&#8217;t work <img src='http://blog.spathare.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>My list of awesome portable apps:</strong></p>
<ul>
<li>ClamWin antivirus</li>
<li>Mozilla Firefox (always <img src='http://blog.spathare.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</li>
<li>Mozilla Thunderbird</li>
<li>OpenOffice suite</li>
<li>Pidgin</li>
<li>DOSBox (good emulator those old DOS games)</li>
<li>Sumatra PDF</li>
<li>TrueCrypt</li>
<li>GIMP</li>
<li>VLC Media Player</li>
<li>Notepad++</li>
<li>uTorrent</li>
<li>Skype</li>
<li>IrfanView</li>
<li>7zip</li>
<li>ImgBurn</li>
<li>Winamp</li>
<li>Filezilla</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.spathare.com/2008/09/simple-is-in-portable-apps/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

