<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnetslackers.com/Community/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Programmatically Speaking ...</title><link>http://dotnetslackers.com/Community/blogs/xun/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007.1 SP1 (Build: 30415.43)</generator><item><title>The (probably) never  ending war of Chrome, FireFox, and IE</title><link>http://dotnetslackers.com/Community/blogs/xun/archive/2011/11/03/the-probably-never-ending-war-of-chrome-firefox-and-ie.aspx</link><pubDate>Thu, 03 Nov 2011 18:34:00 GMT</pubDate><guid isPermaLink="false">6afe0437-14b4-41d5-bc66-6d54a24dbd48:37326</guid><dc:creator>xxxd</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;
Something interesting happened in October (yeh, stocks have been doing comparatively great): IE&amp;#39;s share in global desktop browser usages has dropped to a 
perilous 52%. This, combined with its barely there mobile browser usage, brings its overall share below the 50% percentage mark.&amp;nbsp;&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;p&gt;&lt;img style="width:250px;" src="http://dotnetslackers.com/Community/blogs/xun/blog/Nov2011/chrome-vs-ie.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href="http://www.frelia.com/2010/03/google-chrome-will-pay-ie-and-firefox.html"&gt;www.frelia.com&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
With interesting data invariably comes incessant probe of why. 
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why so?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
Some analysis pointed out the &lt;strong&gt;geek factor&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;The tech community has abandoned IE in droves ever since they found the delicious toy of Firefox, which is dynamic 
and cool, decidely tech friendly and fast and active in development. It started the trend of multiple tabs, a wonderful array of extensions. It gives programmers Firebugs; Chrome joined the 
browser war in 2008, soon afterwards, tech people was attracted to it by its minimal interfaces and fast and smooth performance. Chrome came in late yet learn 
fast. It soon offered a wealth of tools and even more faster development cycle. 
I believe in no time, Chrome would reach 100 or Google (1 followed by 100 :)). Chrome 
also upended the browser game by building its V8 engine that fueled the Javascript engine speed war, throwing in its own script langauge.  
&lt;/p&gt;
&lt;p&gt;
More analysis dived into the browsers&amp;#39; differences in &lt;strong&gt;speed&lt;/strong&gt;, &lt;strong&gt;interface&lt;/strong&gt;, &lt;strong&gt;support for standards (ie., html5 and css3)&lt;/strong&gt;, 
&lt;strong&gt;privacy and security and Extensions&lt;/strong&gt;.   
&lt;/p&gt;
&lt;p&gt;
In short, there is convergence among the browsers towards speedier, cleaner, more secure, and more customizable browsers. 
Surprise! With competition so fierce and stake so high, the best wins!
&lt;/p&gt;
&lt;p&gt;
Speed-wise, Firefox and IE have greatly improved their speed so much so that Chrome actually is currently losing in
this battle.
&lt;/p&gt;
&lt;p&gt;
Interface-wise, Chorme started the minimumistic approach, Firefox and IE are taking notes. This minimum approach is actually catching fire in interface design.
Google started it with its barebone google search, Facebook&amp;#39;s home page also has the clean blue. Chrome, FireFox and IE also took great effor to allow tabs 
be informative yet non-obtusive, draggable and dockable. Work like a great app. 
&lt;/p&gt;
&lt;p&gt;
In terms of standards support, in the tech community, IE is always the object of ridicule. In support of HTML5 features, IE has been falling behind.
&lt;/p&gt;
&lt;p&gt;
In extension offering, FireFox leads the way. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;
Under the hood - JavaScript Engines
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
JavaScript is currently the most important language. This in no small part is due to the quick rise and improvement of JavaScript engines, which in turn has made
this browser war so intense and so interesting and so beneficial to all of us internet users. 
&lt;/p&gt;
&lt;p&gt;
The engine behind Chrome is V8 javascript engine. Copy Wikipedia here:
&lt;/p&gt;
&lt;p class="quote"&gt;
&amp;quot;V8 increases performance by compiling JavaScript to native machine code before executing it, rather than to execute bytecode or interpreting it. Further performance increases are achieved by employing optimization techniques such as inline caching. With these features, JavaScript applications running within V8 are said to have an effective speed comparable to a compiled binary.&amp;quot;
&lt;/p&gt;
&lt;p&gt;
Firefox has a rapid evolution line of JavaScript engine, started with Rhino, the very grandpa figure started at Netscape in 1997. After that, there are &amp;quot;monkeys&amp;quot; with mostly funny names: SpdierMonkey, 
TraceMonkey, JagerMonkey, IonMoney, then tamarin. 
&lt;/p&gt;
&lt;p&gt;
IE did not have any serious JavaScript engine until IE 9. Before that (IE 8 and earlier) it uses a script interpreter for running JavaScript. Now with IE 9 JavaScript engine, 
it provides features such as JavaScript background compliation and library optimization.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;
Parting words
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
So, in the global browser competition for more market share,  
IE is in steady decline yet still dominate the scene, 
FireFox is barely holding its ground, Chrome is rapidly rising. Still nothing is certain other than that the more they compete, the more we demand, 
the greater good will come out of it. Also, we, programmers, time to work harder to meet up the challenge. 
&lt;/p&gt;
&lt;div class="footerSource"&gt;
&lt;p class="title"&gt;Source:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://en.wikipedia.org/wiki/JavaScript_engine"&gt;Wikipedia: JavaScript Engine&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://blogs.msdn.com/b/ie/archive/2010/03/18/the-new-javascript-engine-in-internet-explorer-9.aspx"&gt;The New JavaScript Engine in Internet Explorer 9&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.webmonkey.com/2011/11/the-end-of-an-era-internet-explorer-drops-below-50-percent-of-web-usage/"&gt;The End of an Era: Internet Explorer Drops Below 50 Percent of Web Usage&lt;/a&gt; &lt;br /&gt;
&lt;a href="http://www.webmonkey.com/2011/11/the-end-of-an-era-internet-explorer-drops-below-50-percent-of-web-usage/"&gt;The End of an Era: Internet Explorer Drops Below 50 Percent of Web Usage&lt;/a&gt; &lt;br /&gt;
&lt;a href="http://www.pcmag.com/article2/0,2817,2382122,00.asp#fbid=coiJhG1Cozw"&gt;Chrome 10, Firefox 4.0, or IE9? The Browser Choice&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=37326" width="1" height="1"&gt;</description><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/browser+war/default.aspx">browser war</category></item><item><title>Node.js, what is that?</title><link>http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/26/node-js-what-is-that.aspx</link><pubDate>Wed, 26 Oct 2011 18:30:00 GMT</pubDate><guid isPermaLink="false">6afe0437-14b4-41d5-bc66-6d54a24dbd48:37321</guid><dc:creator>xxxd</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Node.js is just about the hottest new language on the horizon. It also has some puzzling catch-phrase such as &amp;quot;JavaScript on the server side&amp;quot;. 
It is so hot and so puzzling that I am compelled to commit one hour to watch the video sit on the home page of Node.js web site.
&lt;/p&gt;
&lt;p&gt;
One hour video is long by any standard, but the presentation guy and Node.js creator Ryan Dahl breezed it through without one single slide. 
&lt;/p&gt;
&lt;p&gt;
He joked, he coded and typed command lines, he demoed a crappy chat program written in about 5 lines using Node.js. 
(Ouch, this tech world was and still is dominated by wiz kids, almost chrismatic, not a bit nerdy.)
&lt;/p&gt;
&lt;p&gt;
 
However I was still confused even after the one-hour video. What the heck is Node.js? Why on earth we have to create our own servers?
&lt;/p&gt;
&lt;p&gt;
The statement in big font after the video does not seem to help much. As the following it goes: 
&lt;/p&gt;
&lt;p&gt;
&amp;quot;Node&amp;#39;s goal is to provide an easy way to build scalable network programs. 
... Node tells the operating system (through epoll, kqueue, /dev/poll, or select) 
that it should be notified when a new connection is made, and then it goes to sleep. 
If someone new connects, then it executes the callback. Each connection is only a small heap allocation.&amp;quot;
&lt;/p&gt;
&lt;p&gt;
??? 
&lt;/p&gt;
&lt;p&gt;
Searching around, I found quite a lot of examples where cool guys flaunting their cool code, however little clear explanations. 
&lt;/p&gt;
&lt;p&gt;
Searching more, I found quite a lot of insights and analysis, predications and dismissions. 
A testimony of how Node.js has caught the short attention span of the highly excitable yet unforgiving tech community.
&lt;/p&gt;
&lt;p&gt;
 
Eventually, I came to my senses (at least I think) what Node.js does, what makes it special.
&lt;/p&gt;
&lt;p&gt;

1. Node.js handle things asynchronously. The word &amp;quot;asynchronous&amp;quot; has been a sort of cliche. The big A in AJAX, for example, stands for &amp;quot;Asynchronous&amp;quot;. However, the asyc part of AJAX comes from
the client side, in that client (a browser) sends requests to server and still serves the page while waiting for the server to come back for a response. The server
process requests one at a time. To handle multiple requests, it spurns multiple threads. 
&lt;/p&gt;
&lt;p&gt;
When requests fly fast and numerous and from everywhere, the thread model falls short. Node.js tries to overcome the challenge by providing true asynchornousity. 
Instead of spawning a new OS thread for each request, Node.js uses one thread. The thread stays idle, however springs to action on events. On each event, the thread takes note, tasks it to one or more processes, then 
on with another request.
&lt;/p&gt;
&lt;p&gt;
2. Node.js uses an event-driven model. Event-driven is also a cliche, however Node.js gives it some new substance. 
Best illustrated the point is the article that uses The Doctor&amp;rsquo;s Office Reception Line Analogy and 
fast food The Fast Food Restaurant Analogy. Node.js event-driven model is also closely tied with its async feature. Node.js does not allow blocking I/O, that is, it never stops and waits for I/O.
&lt;/p&gt;
&lt;p&gt;

3. Node.js is server side javascript. Sort of. It adopts the syntax and event-driven concept of client side JavaScript, and strives to 
run &amp;quot;the same script&amp;quot; on both client and server side. However Node is not JavaScript, it is actully written in C, and it runs from command line in 
unix environment (support for windows is supposedly coming. There has not been a sincere effort). The underlying engine for Node.js is the V8 javascript engine (the 
same one that runs Google chrome).
&lt;/p&gt;
&lt;p&gt;

4. Node.js is still very new, therefore it has a lot of forseen and unforseen potentials and pitfalls. For one, Node.js is still a very geeky, barebone creature, its library needs to be greatly 
fleshed out to become a framework of sophistication, upon which developers can readily develop rich web applications. Despite all the buzz and excitement surrounding Node.js, there still lacks high profile 
web applications built with Node.js. 
&lt;/p&gt;
&lt;p&gt;
5. Node is meant for something, but not everything. It is meant for fast and frequent web communications, it is not meant for heavy-duty data access and computation.
&lt;/p&gt;
&lt;p class="quote"&gt;
&amp;quot;Node has changed our mental image of what a server can be. It doesn&amp;#39;t have to be running on a high-performance blade in an air-conditioned co-lo serving millions of requests and gigabytes of data. 
It can be in your pocket synchronizing your contacts whenever it finds Wi-Fi. It can be caching a web application for faster, local access. It can be a peer-to-peer web server. And it can be a number of things we haven&amp;#39;t even thought of yet. &amp;quot;
&lt;/p&gt;
&lt;p class="source"&gt;
&lt;a href="http://radar.oreilly.com/2011/06/node-javascript-success.html"&gt;
The secrets of Node&amp;#39;s success&lt;/a&gt;
&lt;/p&gt;
&lt;div class="footerSource"&gt;
&lt;p class="title"&gt;Source:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://radar.oreilly.com/2011/06/node-javascript-success.html"&gt;
The secrets of Node&amp;#39;s success&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://www.ibm.com/developerworks/opensource/library/os-nodejs/index.html"&gt;Just what is Node.js?&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://nodejs.org/"&gt;Node.js&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=37321" width="1" height="1"&gt;</description><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/node.js/default.aspx">node.js</category></item><item><title>CSS Lint, harmful or useful? </title><link>http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/24/css-lint-harmful-or-useful.aspx</link><pubDate>Mon, 24 Oct 2011 15:35:00 GMT</pubDate><guid isPermaLink="false">6afe0437-14b4-41d5-bc66-6d54a24dbd48:37317</guid><dc:creator>xxxd</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;
While they say closed garden is the lending trend in internet, to me, the internet still feels like an ever expanding infinite loop, or maze. 
Like a little kid, I really start out just to search for a shiny pebble, I end up going far and away and lost. I end up with a pocket full of things I am excited and confused about.
&lt;/p&gt;
&lt;p&gt;
Finding &lt;a href="http://csslint.net"&gt;css lint&lt;/a&gt; is like that. I was looking for some basic css truth, then along the way I read a dozen of other articles, css related or not. 
Then I stumbled into css lint. So I copied and pasted from my reportoire of css files, linted it. Wow, it threw up a vocano of warnings at me. 
&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;p&gt;&lt;img src="http://dotnetslackers.com/Community/blogs/xun/blog/Oct2011/csslint.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Source: Screen Shot of CSS lint of my css&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
Interesting.  I scanned through them. 
&lt;/p&gt;
&lt;p&gt;
&amp;quot;Values of 0 shouldn&amp;#39;t have units specified&amp;quot;; &amp;quot;Broken box model: using height with padding&amp;quot;; &amp;quot;Rule is empty&amp;quot; ...
&lt;/p&gt;
&lt;p&gt;
Make sense, I was thinking, almost delighted. Wow, this could be my css &amp;quot;spell-check&amp;quot;. 
&lt;/p&gt;
&lt;p&gt;
Then I was confused by other rules. &amp;quot;Don&amp;#39;t using adjoining classes&amp;quot;,  &amp;quot;Don&amp;rsquo;t use IDs in selectors&amp;quot;. 
&lt;/p&gt;
&lt;p&gt;
Really? What is wrong with using IDs in selectors?
&lt;/p&gt;
&lt;p&gt;
A little search quickly led me to this highly provocative article &lt;a href="http://mattwilcox.net/archive/entry/id/1054/"&gt;CSS  Lint is harmful&lt;/a&gt;, followed by fifty or so comments, mostly of them is 
a bit spiteful in tone. 
&lt;/p&gt;
&lt;p&gt;
So What are the CSS lint rules? 
&lt;/p&gt;
&lt;ul class="quote"&gt;
&lt;li&gt;Parsing errors should be fixed&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t use adjoining classes&lt;/li&gt;
&lt;li&gt;Remove empty rules&lt;/li&gt;
&lt;li&gt;Use correct properties for a display&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t use too many floats&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t use too many web fonts&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t use too may font-size declarations&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t use IDs in selectors&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t qualify headings&lt;/li&gt;
&lt;li&gt;Heading elements should have a consistent appearance across a site.&lt;/li&gt;
&lt;li&gt;Heading styles should only be defined once&lt;/li&gt;
&lt;li&gt;Be careful using width: 100%&lt;/li&gt;
&lt;li&gt;Zero values don&amp;rsquo;t need units&lt;/li&gt;
&lt;li&gt;Vendor prefixed properties should also have the standard&lt;/li&gt;
&lt;li&gt;CSS gradients require all browser prefixes&lt;/li&gt;
&lt;li&gt;Avoid selectors that look like regular expressions&lt;/li&gt;
&lt;li&gt;Beware of broken box models&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="source"&gt; Source: 
&lt;a href="http://www.nczonline.net/blog/2011/06/15/introducing-css-lint-2/"&gt; Introducing CSS Lint&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Among them, the most attacked is the rule of &amp;quot;Don&amp;rsquo;t use IDs in selectors&amp;quot;. 
&lt;/p&gt;
&lt;p class="quote"&gt;
&amp;quot;To suggest that you never use ID&amp;rsquo;s is simply throwing the baby out along with the dirty bath water. ID&amp;rsquo;s are extremely useful and you absolutely should use them. They are the fastest way a browser can select a given element. They are useful for in-page anchoring and if they&amp;rsquo;re already there in the markup then use them as style hooks. They are also, oddly enough, perfectly correct to use as long as they&amp;rsquo;re only ever one instance of that ID on any given page.&amp;quot;&lt;/p&gt;
&lt;p class="source"&gt;
Source: &lt;a href="http://mattwilcox.net/archive/entry/id/1054/"&gt;CSS Lint is harmful&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
On with my search. I found a lot of people have dismissed this rule. As it is with almost everything, never say never. Reasons are probably: 1) it has been a common practice; 2) ID by definition is mean to be unique, therefore there is no ground for re-usability concern. And, what is the difference using ID selectors and class selectors. 
&lt;/p&gt;
&lt;p&gt;
However, there are also as many people as passionately depending the rule. Using ID selectors lead to a downward spiral into specificity; IDs are meant to be specific, yet css rules by default are meant to be abstract rules. 
&lt;/p&gt;
&lt;p&gt;
So my search got me into a heated debate as with so many aspects of the web, jQuery vs. Ext Js, Flash vs. Html5. So I decided to end my aimless wondering in this maze by 
ending the search, and take away home my rules:
&lt;/p&gt;
&lt;p&gt;
1) css lint is not all evil or good, it is a good tool for you to get your css cleaner. Yes, always true are rules such as &amp;quot;no empty rules&amp;quot;, &amp;quot;zero values need no units&amp;quot;.
&lt;/p&gt;
&lt;p&gt;
2) The &amp;quot;too many&amp;quot; rules are to your discretion. Only you should know whether there are too many fonts, too many floats. However, it is good to have a second opinion.
&lt;/p&gt;
&lt;p&gt;
3) IDs in css selectors may not be too bad, at least probably not worth your effort of going back and rewriting your pass css rules. However, when you start a new project, when you 
find yourself define a set of rules just for one unique ID, think again.
&lt;/p&gt;
&lt;div class="footerSource"&gt;
&lt;p class="title"&gt;Source:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://csslint.net"&gt;CSS Lint&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://screwlewse.com/2010/07/dont-use-id-selectors-in-css/"&gt;Don&amp;rsquo;t use ID selectors in CSS&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://mattwilcox.net/archive/entry/id/1054/"&gt;CSS Lint is harmful&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://oli.jp/2011/ids/"&gt;Don&amp;rsquo;t use IDs in CSS selectors?&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=37317" width="1" height="1"&gt;</description><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/css/default.aspx">css</category></item><item><title>2011 Internet Trends From Mary Meeker (Queen of Net)</title><link>http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/21/2011-internet-trends-from-mary-meeker-the-queen-of-net.aspx</link><pubDate>Fri, 21 Oct 2011 15:51:00 GMT</pubDate><guid isPermaLink="false">6afe0437-14b4-41d5-bc66-6d54a24dbd48:37286</guid><dc:creator>xxxd</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;
The following is from the &lt;a href="http://i3.sinaimg.cn/IT/images/2011-10-19/U58P2T78D22934F1070DT20111019203309.pdf"&gt;2011 internet trend report&lt;/a&gt; by Mary Meeker (known as &amp;quot;Queen of the Net&amp;quot;) released from Web 2.0 Summit San Francisco, CA. The report is a wealth of insights and insightful charts and graphics. 
&lt;/p&gt;
&lt;p&gt;
For all of us who are in the thick of the tech world, the time is unprecedently exciting. It is going to be even better.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;1. Globality &amp;ndash; We Aren&amp;rsquo;t In Kansas Anymore&amp;hellip;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apple, Google, Amazon.com &amp;amp; Facebook Remain Mega-Leaders; yet the majority (81%) of their users are from overseas. &lt;/li&gt;
&lt;li&gt;Chinese (&amp;amp; Russian) Companies Continue to Step Up. &amp;lt;&lt;/li&gt;
&lt;li&gt;In 3 Years, China Added More Internet Users than Exist in USA&amp;hellip; China / India / Nigeria / Russia / Iran = Biggest Adders&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;2. Mobile &amp;ndash; Early Innings Growth, Still&amp;hellip;&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Breakthrough Communications Technologies / Services Can Breakout Even During Breakdown Times.&lt;/li&gt;
&lt;li&gt;Despite Tremendous Ramp So Far, Smartphone Usage Still Has Huge Upside&lt;/li&gt;
&lt;li&gt;iPods Changed Media Industry&amp;hellip; iPhones Ramped Even Faster&amp;hellip; iPad Growth Leaves &amp;ldquo;Siblings&amp;rdquo; in Dust&lt;/li&gt;
&lt;li&gt;Android &amp;lsquo;Phone&amp;rsquo; Adoption Has Ramped Even Faster than iPhone&lt;/li&gt;
&lt;li&gt;Two Horse Races in Smartphones &amp;amp; Tablets, So Far&lt;/li&gt;
&lt;li&gt;Mobile Usage, search and advertising all ramping up quickly in all geographies. &lt;/li&gt;
&lt;div class="figure"&gt;
&lt;p&gt;&lt;img src="http://dotnetslackers.com/Community/blogs/xun/blog/Oct2011/hierarchy%20of%20needs.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href="http://i3.sinaimg.cn/IT/images/2011-10-19/U58P2T78D22934F1070DT20111019203309.pdf"&gt;Hierarchy of Needs Revisited&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;3. User Interface &amp;ndash; Text -&amp;gt; Graphical -&amp;gt; Touch / Sound / Move&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Before Steve Jobs, computers were utilitarian tools for computation; After Jobs, computers became beautiful objects we could use in thousands of ways to aim to make life better.
&lt;/li&gt;
&lt;li&gt;Natural User Interface Revolution &amp;ndash; Now in Touch / Sound / Move Era&lt;/li&gt;
&lt;li&gt;The Next Big Thing(s)? Those Two Big Things on the Sides of Your Head&amp;hellip; Everything merges toward audio
&lt;div class="figure"&gt;
&lt;p&gt;&lt;img width="475" src="http://dotnetslackers.com/Community/blogs/xun/blog/Oct2011/onlineaudio.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href="http://i3.sinaimg.cn/IT/images/2011-10-19/U58P2T78D22934F1070DT20111019203309.pdf"&gt;Online Audio&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;4. Commerce &amp;ndash; Fast / Easy / Fun / Savings = More Important Than Ever&amp;hellip; &lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;eCommerce = Four Quarters of Accelerating Growth&lt;/li&gt;
&lt;li&gt;eCommerce Continues to Gain Share from Offline&amp;hellip; at 8% Share of USA Commerce with Lots of Headroom&lt;/li&gt;
&lt;div class="figure"&gt;
&lt;p&gt;&lt;img width="475" src="http://dotnetslackers.com/Community/blogs/xun/blog/Oct2011/ecommerce.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href="http://i3.sinaimg.cn/IT/images/2011-10-19/U58P2T78D22934F1070DT20111019203309.pdf"&gt;eCommerce Accelerating Growth&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;li&gt;Old Magazine Paradigm Finally Comes Alive. Click &amp;amp; Buy (on mobile) can really empty your wallet fast&amp;hellip;
&lt;/li&gt;
&lt;li&gt;In a Mobile-ized / Transparent World, price matters&lt;/li&gt;
&lt;div class="figure"&gt;
&lt;p&gt;&lt;img width="475" src="http://dotnetslackers.com/Community/blogs/xun/blog/Oct2011/localcommerce.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href="http://i3.sinaimg.cn/IT/images/2011-10-19/U58P2T78D22934F1070DT20111019203309.pdf"&gt;Local ECommerce is spurred by mobile development&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;5. Advertising &amp;ndash; Lookin&amp;rsquo; Good&amp;hellip;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Google Paid Clicks &amp;amp; Cost-Per-Click Continue to Grow Rapidly;
&lt;/li&gt;
&lt;li&gt; Time Spent on Social Networking Sites Surpassed Portals. Social Networking CPMs is 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;6. Content Creation &amp;ndash; Changed Forever&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Content Commoditization &amp;ndash; Value Shift from Creators to Aggregators
&lt;/li&gt;
&lt;div class="figure"&gt;
&lt;p&gt;&lt;img width="475" src="http://dotnetslackers.com/Community/blogs/xun/blog/Oct2011/content.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href="http://i3.sinaimg.cn/IT/images/2011-10-19/U58P2T78D22934F1070DT20111019203309.pdf"&gt;Print Down&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;7. Technology / Mobile Leadership &amp;ndash; Americans Should Be Proud&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We are Living Through a Once Every 10-20 Years Technology Evolution &amp;ndash; The Mobile Computing Cycle&amp;hellip;
&lt;/li&gt;
&lt;li&gt;&amp;lsquo;Made in USA&amp;rsquo; Smartphone Operating Systems = 64% Share from 5% Five Years Ago
&lt;/li&gt;
&lt;li&gt;
Still Early-Innings Era of Smart-Phones to Smarter-Phones
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;8. Mega-Trend of 21st Century = Empowerment of People via Connected Mobile Devices&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Global Information Flow - Real-Time + Fast + Broad
&lt;div class="figure"&gt;
&lt;p&gt;&lt;img width="475" src="http://dotnetslackers.com/Community/blogs/xun/blog/Oct2011/globalinfoflow.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href="http://i3.sinaimg.cn/IT/images/2011-10-19/U58P2T78D22934F1070DT20111019203309.pdf"&gt;16 Minutes Before / After Japan Earthquake on 3/11/11&lt;br /&gt;Snapshots of @replies From &amp;amp; To Twitter Users in Japan&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Global Information Flow &amp;ndash;
Remote Locations Getting Connected&lt;/li&gt;
&lt;li&gt;Global Economies / People =
Increasingly Connected / Co-Dependent&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;9. Authentic Identity &amp;ndash; The Good / Bad / Ugly. But Mostly Good?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10. Economy &amp;ndash; Lots of Uncertainty&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Stock Market Volatility = 2x Historical Average&lt;/li&gt;
&lt;li&gt;
Consumer Confidence =
Well Below Historical Average&lt;/li&gt;
&lt;li&gt;
USA Corporate Capital Spending Budgets =
Being Revised Down&lt;/li&gt;
&lt;li&gt;
GDP Growth Forecasts =
Being Revised Down&lt;/li&gt;
&lt;li&gt;
Stock Markets = Often Leading Indicators of Economic Activity
Russia -33% from 52-Week High; Oil (-24%) / China (-23%) / Europe (-23%) / S&amp;amp;P500 
(-12%) / Nasdaq (-9%)
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="footerSource"&gt;
&lt;p class="title"&gt;Source:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://i3.sinaimg.cn/IT/images/2011-10-19/U58P2T78D22934F1070DT20111019203309.pdf"&gt;INTERNET TRENDS &amp;ndash; Web 2.0 Summit -San Francisco, CA - Mary Meeker (marym@kpcb.com) &amp;ndash; October 18, 2011&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=37286" width="1" height="1"&gt;</description><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/internet+trend/default.aspx">internet trend</category></item><item><title>Microsoft's Chinese problem with IE6</title><link>http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/20/microsoft-s-chinese-problem-with-ie6.aspx</link><pubDate>Thu, 20 Oct 2011 16:08:00 GMT</pubDate><guid isPermaLink="false">6afe0437-14b4-41d5-bc66-6d54a24dbd48:37278</guid><dc:creator>xxxd</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;
Microsoft got to be so very tired of IE6, the once very popular child of their browser families, so much so that they set up a count-down website dedicated to the 
sole purpose of killing it. 
&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;p&gt;&lt;img src="http://dotnetslackers.com/Community/blogs/xun/blog/Oct2011/iecountdown.png" width="480px" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href="http://www.ie6countdown.com/"&gt;Microsoft IE 6 Count Down&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
Guess who is standing in the way? China. Chinese IE6 users have been trickling down, as of today it has about 28%. But 28% 
still makes a big bleeding heart in the above map. And any percentage of Chinese users can easily knock off the whole Europe or even America.
&lt;/p&gt;
&lt;p&gt;
Right now the size of Chinese internet users stand at about 500 million users, and it is still growing. And its mobile users is even growing faster, it is estimated that the 
size of mobile users will surpass pc users as early as 2013. 
&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;p&gt;&lt;img src="http://dotnetslackers.com/Community/blogs/xun/blog/Oct2011/china-internet-population.png" width="400px" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href="http://www.penn-olson.com/2011/09/30/china500-million-net-users/"&gt;China Now Has Over 500 Million Net Users [CHART]&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
I can understand why the IE6 chinese users stick with IE6, because my parents are one of them. When they started gingerly with 
internet, I taught them to click the big blue E. They remembered ever since and they are afraid of making any changes, clicking on any popups
that might bring in a flood of virus. The golden name of Microsoft somehow does not help much. Also, all they wanted is just to read
their news, so why care about IE 6, or 7, or 9? 
&lt;/p&gt;
&lt;p&gt;
Ok, with that kind of mentality and the formiddable weight China carries, Microsoft has to continue its count down for at least a few years. 
&lt;/p&gt;
&lt;div class="footerSource"&gt;
&lt;p class="title"&gt;Source:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.penn-olson.com/2011/09/30/china500-million-net-users/"&gt;China Now Has Over 500 Million Net Users [CHART]&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://www.ie6countdown.com/"&gt;Microsoft IE 6 Count Down&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://www.ie6countdown.com/"&gt;Microsoft IE 6 Count Down&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://www.resonancechina.com/2011/08/03/more-chinese-netizens-access-internet-via-mobile-than-pc/"&gt;More Chinese netizens access internet via Mobile than PC&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=37278" width="1" height="1"&gt;</description><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/browser+war/default.aspx">browser war</category></item><item><title>Tips to create robust selenium tests </title><link>http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/19/tips-to-create-robust-selenium-tests.aspx</link><pubDate>Wed, 19 Oct 2011 17:49:00 GMT</pubDate><guid isPermaLink="false">6afe0437-14b4-41d5-bc66-6d54a24dbd48:37271</guid><dc:creator>xxxd</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;
According to a survey of open source automation testing tools, Selenium is the most popular of them all. And it is getting more and more popular everyday. As a matter of fact, it is currently
the only viable test tool to test website as a whole, because it can simulate running a website as a real user would do. And one set of tests can be run across differnt browsers.
&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;p&gt;&lt;img src="http://dotnetslackers.com/Community/blogs/xun/blog/Oct2011/popularity_Selenium.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Source:&lt;a href="http://www.xoriant.com/blog/software-testing-and-qa/selenium-open-source-test-automation-tool-an-overview.html"&gt;Selenium -Open Source Test Automation: An Overview&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
However browser testing is complicated, the ubiqutous injection of asynchorons AJAX only makes the situation worse. On top of its own quirkiness, 
Selenium has to deal all of the quirkiness of differnt browsers, the possible failure of http requests, etc.
&lt;/p&gt;
&lt;p&gt;
Therefore, browser simulation does come with a cost and not all users (e.g., me) are happy. Some of the biggest challenges that Selenium have now are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Test brittleness&lt;/li&gt;
&lt;li&gt;Infrastrucuture maintenance&lt;/li&gt;
&lt;li&gt;Test run-time during&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="source"&gt;Source: &lt;a href="http://saucelabs.com/blog/index.php/2009/08/top-5-challenges-for-selenium-users-san-francisco-meetup/"&gt;Top 5 Challenges for Selenium Users (San Francisco Meetup)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
Some of the much complained test brittleness can be avoided or alleviated by using some of the tips (I learned them from the presentation at
&lt;a href="http://saucelabs.com/blog/index.php/2011/10/top-selenium-tips-from-the-sauce-codebase/"&gt;Top Selenium Tips From The Sauce Codebase&lt;/a&gt;,
who distilled the essence from the sucesses or failures 8 million tests):
&lt;/p&gt;
&lt;p&gt;
1) Use implicit waits
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;

        public IWebElement ImplicitWaitForElement(IWebDriver webDriver, String id, int timeout = 10)

        {

           

            webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));

            webDriver.Url = &amp;quot;http://somedomain/url_that_delays_loading&amp;quot;;

            IWebElement myDynamicElement = webDriver.FindElement(By.Id(id));



            return myDynamicElement;

        }



&lt;/code&gt;

&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
2) Use explicit the right way
&lt;/p&gt;
&lt;p&gt;
Never use static wait:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sleep (10)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
(Why? Because a) it increases overhead, you make the webdriver wait no matter what; b) you can never predict what is the correct time interval.)
&lt;/p&gt;
&lt;p&gt;
Instead, use a condition wait
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;

  public IWebElement ExplicitWaitUntilForElement(IWebDriver webDriver, String id, int timeout = 10)

        {

            webDriver.Url = &amp;quot;http://somedomain/url_that_delays_loading&amp;quot;;

            var wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(timeout));



            return wait.Until((d) =&amp;gt; d.FindElement(By.Id(&amp;quot;someDynamicElement&amp;quot;)));

            

        }

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
or
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;

 public void WaitforElementPresent(IWebDriver webDriver, String id, int timeout = 10)

        {

            //var sw = new Stopwatch();

            //sw.Start();



           

            for (int i = 0; i&amp;lt; 60; i++)

            {

               try

                {

                    if ((webDriver.FindElement(By.Id(id)).Enabled) == true)

                        break;

                    

                   Thread.Sleep(1);

                }



                catch (Exception)

                {

                    // Continue the loop, though it may throw an exception at first

                }

            }

            

        }

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So the methods above instruct the web driver within a limited time range for an element to appear before giving up and report the error. 
&lt;/p&gt;
&lt;p&gt;
3) Create a magic login method
&lt;/p&gt;
&lt;p&gt;
In a lot of selenium test cases, we call the same login method again to gain the entry to another password protected pages. Doing so has quite some drawbacks: a) Login failure will invariably cause the failure of the other tests;
b) Overhead. If a login method takes, say 10 secs., then 100 tests would waste 1,000 secs on simply login.
&lt;/p&gt;
&lt;p&gt;
So instead, the Sauce Lab teams to create a magic login page to allow automatic login, that is create VIP test account to allow unlimited access for inspection purposes.
&lt;/p&gt;
&lt;p&gt;
Source:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.xoriant.com/blog/software-testing-and-qa/selenium-open-source-test-automation-tool-an-overview.html"&gt;Selenium -Open Source Test Automation: An Overview&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://seleniumhq.org/docs/04_webdriver_advanced.html"&gt;WebDriver: Advanced Usage&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://saucelabs.com/blog/index.php/2011/10/top-selenium-tips-from-the-sauce-codebase/"&gt;Top Selenium Tips From The Sauce Codebase&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://saucelabs.com/blog/index.php/2009/08/top-5-challenges-for-selenium-users-san-francisco-meetup/"&gt;Top 5 Challenges for Selenium Users (San Francisco Meetup)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;a href="http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/14/selenium-page-object-pattern.aspx"&gt;Selenium - Page Object Pattern&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=37271" width="1" height="1"&gt;</description><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/Selenium+test/default.aspx">Selenium test</category></item><item><title>CSS best practices or traps?</title><link>http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/18/css-best-practices-or-traps.aspx</link><pubDate>Tue, 18 Oct 2011 16:32:00 GMT</pubDate><guid isPermaLink="false">6afe0437-14b4-41d5-bc66-6d54a24dbd48:37265</guid><dc:creator>xxxd</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/Oct2011/css.png"&gt;&lt;img border="0" src="http://dotnetslackers.com/Community/blogs/xun/blog/Oct2011/css.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Have developed numerous web site now, big and small, fancy and dumb, started clean or jumped in middle way. Sometimes I was&amp;nbsp;responsible&amp;nbsp;for the whole site (front UI and backend database), sometimes just the UI side. A lot of times, css has been treated in a ad-hoc fashion, as a result, css has grown into a mass of snarling classes and elements with funny ids, living across a great many css pages.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;For example,&amp;nbsp;&lt;br /&gt;
(To be fair to myself, the classes are tweaks from Ext original ones.)
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
#tagReviewMrcContainergrid  .x-grid3-hd.x-grid3-cell.x-grid3-td-1,
#tagReviewMrcContainergrid  .x-grid3-hd.x-grid3-cell.x-grid3-td-2,
#tagReviewMrcContainergrid  .x-grid3-hd.x-grid3-cell.x-grid3-td-3,
#tagReviewMrcContainergrid  .x-grid3-hd.x-grid3-cell.x-grid3-td-4,
#tagReviewMrcContainergrid  .x-grid3-hd.x-grid3-cell.x-grid3-td-5,
#tagReviewMrcContainergrid  .x-grid3-hd.x-grid3-cell.x-grid3-td-6
{
	
	background-image:url(&amp;#39;../images/snipe-sprite.gif&amp;#39;);
	background-position:right -91px;
	background-repeat:no-repeat;

} 
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Now whenever the site needs a face-lift or extreme make over, the old css will be the first one to be under the knife, be patched, shifted, or discarded. Oh, boy, the giant&amp;nbsp;octopus&amp;nbsp;with great many arms, where do I even start?
&lt;/p&gt;
&lt;p&gt;
Facebook has had the same problem, and fortunately they got a css master Nicole Sullivan that is keen on keeping css simple and organized. Facebook is decidedly complex and feature rich, however, it is also decidedly and has a deceivingly simple clean look. It&amp;#39;s css is simple and pleasant to read: 
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
table.component_table {
    padding-left: 5px;
    padding-top: 5px;
}
table.component_table td.icons {
    text-align: center;
    vertical-align: middle;
    width: 20px;
}
table.component_table td.content {
    white-space: nowrap;
    width: 200px;
}
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;What are the problems? What are the traps that we stepped into however she managed to escape&lt;/p&gt;
&lt;p&gt;In a presentation at Webstock conference, Nicole laid out the problems and some principles. The problems are with the majority of sites are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Duplication of property value pairs&lt;/li&gt;
&lt;li&gt;Duplication of elements&lt;/li&gt;
&lt;li&gt;Growing specificity&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/Oct2011/css_specificity.png"&gt;&lt;img border="0" src="http://dotnetslackers.com/Community/blogs/xun/blog/Oct2011/css_specificity.png" alt="" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;According to her, the so-called best practices are actually the traps that trapped us to those problems.
&lt;/p&gt;
&lt;p&gt;
Yes, we ought to follow the best practices with a grain of salt. Yeah, like everything, too much of anything is not such a good thing.So the so-called best practices under attack are:
&lt;/p&gt;
&lt;p&gt;
1. Classitis
&lt;/p&gt;
&lt;p&gt;
Classes are our friends. Seeing a lot of IDs is actually very bad. Run from this kind of code:
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
However, when define classes, try not made classes too narrow or too broad. That is to say, both extreme micro-managing and macro-managing are bad. Balance is the key. 
&lt;/p&gt;
&lt;p&gt;
2. Never add an non-semantic element
&lt;/p&gt;
&lt;p class="quote"&gt;
You want your content to be marked up in beautiful HTML that uses a diverse set of tags like P, UL, OL, LI, H1-6, strong, em. Add a few extra wrapper elements to keep your content nicely cordoned off from your containers or separate out decorative flourishes! Your HTML will be clean and your CSS predictable.
&lt;/p&gt;
&lt;p&gt;
3. Never add a non-semantic class
&lt;/p&gt;
&lt;p&gt;
Never want a  class like &amp;quot;bigRedText&amp;quot; or &amp;quot;giantRedText&amp;quot;. 
&lt;/p&gt;
&lt;p class="quote"&gt;
CSS needs abstractions. We need to be able to solve a particular problem really well, and then allow people to go on using that solution long afterward. 
&lt;/p&gt;
&lt;p&gt;
3. Use decadent selectors
&lt;/p&gt;
&lt;p class="quote"&gt;
Never has more terrible advice been given (ok, ok, I exaggerate, but for CSS, this is as bad as it gets). The descendent selector is *only* appropriate between multiple nodes of the same object (say, a tab container and its&amp;rsquo; tabs), and even then, only when you are absolutely certain that there will never be any markup changes. Very hard to guarantee, no?
&lt;/p&gt;
&lt;p&gt;
4. Sites need to look exactly the same in every browser
&lt;/p&gt;
&lt;p&gt;
Yes, it would be nice to look fancy across all browsers, but not all browsers are created equal, that is why, you should give up forcing a round corner on IE 6, or making your site look exactly the same pixel by pixel.
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;See Also&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.stubbornella.org/content/2011/04/28/our-best-practices-are-killing-us/"&gt;Our (CSS) Best Practices Are Killing US&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=37265" width="1" height="1"&gt;</description><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/css/default.aspx">css</category></item><item><title>Selenium - Page Object Pattern</title><link>http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/14/selenium-page-object-pattern.aspx</link><pubDate>Fri, 14 Oct 2011 13:37:00 GMT</pubDate><guid isPermaLink="false">6afe0437-14b4-41d5-bc66-6d54a24dbd48:37248</guid><dc:creator>xxxd</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/Oct2011/http_imgload.jpg"&gt;&lt;img style="float:left;padding:10px;" border="0" src="http://dotnetslackers.com/Community/blogs/xun/blog/Oct2011/http_imgload.jpg" alt="" /&gt;&lt;/a&gt;After&lt;a href="http://dotnetslackers.com/Community/blogs/xun/archive/2011/09/26/is-not-selenium-web-driver-buggy.aspx"&gt; bitching and moaning about the instability of Selenium&lt;/a&gt;, after &lt;a href="http://dotnetslackers.com/Community/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=52&amp;amp;postid=37224"&gt;searching high and low for alternatives&lt;/a&gt;, I am back to Selenium again, convinced it is still the best in town. Yep, it is flexible, it is free, it is being actively developed therefore improved by day. I can write my unit tests in C# or any other server languages. And it is getting more and more backings from major vendors. I can even take my tests to the Cloud, e.g., the SauceLab.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Enough of justifications.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Selenium Page Object Pattern&lt;/p&gt;
&lt;p&gt;One of the test designs in Selenium that has gained more and more popularity is Page Object Pattern, the core of it is to wrap your page into classes with members and methods, and in testing. Then tests can call the methods to initiate any interactions with the page UI, the way normal users does, login, run report, click a button, etc. It is a OOO approach, and its advantages are:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;
&lt;ul&gt;
&lt;li&gt;&amp;nbsp;
&lt;ul&gt;
&lt;li&gt;Clean separation between test code and page specific code.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Single repository for the services or operations offered by individual page object.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;So take an example of login, a normal selenium login test would be written as the following:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:verdana, sans-serif;line-height:16px;font-size:x-small;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre style="font-size:1em;background-color:#f0f0f0;border-top-style:solid;border-right-style:none;border-bottom-style:solid;border-left-style:none;border-top-width:1px;border-right-width:medium;border-bottom-width:1px;border-left-width:medium;color:#333333;overflow-x:auto;overflow-y:auto;padding-top:5px;padding-right:5px;padding-bottom:5px;padding-left:30px;"&gt;&lt;span class="c" style="color:#808080;"&gt;/***&lt;/span&gt;
&lt;span class="c" style="color:#808080;"&gt; * Tests login feature&lt;/span&gt;
&lt;span class="c" style="color:#808080;"&gt; */&lt;/span&gt;
&lt;span class="kd" style="color:#008000;font-weight:bold;"&gt;public&lt;/span&gt; &lt;span class="kd" style="color:#008000;font-weight:bold;"&gt;class&lt;/span&gt; &lt;span class="nc" style="color:#b00060;font-weight:bold;"&gt;Login&lt;/span&gt; &lt;span class="o" style="color:#303030;"&gt;{&lt;/span&gt;

        &lt;span class="kd" style="color:#008000;font-weight:bold;"&gt;public&lt;/span&gt; &lt;span class="kt" style="color:#303090;font-weight:bold;"&gt;void&lt;/span&gt; &lt;span class="nf" style="color:#0060b0;font-weight:bold;"&gt;testLogin&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;()&lt;/span&gt; &lt;span class="o" style="color:#303030;"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;.&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;type&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;inputBox&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;,&lt;/span&gt; &lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;testUser&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;.&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;type&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;password&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;,&lt;/span&gt; &lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;my supersecret password&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;.&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;click&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;sign-in&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;.&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;waitForPageToLoad&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;PageWaitPeriod&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;Assert&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;.&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;assertTrue&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;.&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;isElementPresent&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;compose button&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;),&lt;/span&gt;
                                &lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;Login was unsuccessful&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;);&lt;/span&gt;
        &lt;span class="o" style="color:#303030;"&gt;}&lt;/span&gt;
&lt;span class="o" style="color:#303030;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Now with Page oject pattern design in mind, we would wrap the login page in its own object,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:verdana, sans-serif;line-height:16px;font-size:x-small;"&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;pre style="font-size:1em;background-color:#f0f0f0;border-top-style:solid;border-right-style:none;border-bottom-style:solid;border-left-style:none;border-top-width:1px;border-right-width:medium;border-bottom-width:1px;border-left-width:medium;color:#333333;overflow-x:auto;overflow-y:auto;padding:5px;"&gt;&lt;span class="c" style="color:#808080;"&gt;/**&lt;/span&gt;
&lt;span class="c" style="color:#808080;"&gt; * Page Object encapsulates the Sign-in page.&lt;/span&gt;
&lt;span class="c" style="color:#808080;"&gt; */&lt;/span&gt;
&lt;span class="kd" style="color:#008000;font-weight:bold;"&gt;public&lt;/span&gt; &lt;span class="kd" style="color:#008000;font-weight:bold;"&gt;class&lt;/span&gt; &lt;span class="nc" style="color:#b00060;font-weight:bold;"&gt;SignInPage&lt;/span&gt; &lt;span class="o" style="color:#303030;"&gt;{&lt;/span&gt;

        &lt;span class="kd" style="color:#008000;font-weight:bold;"&gt;private&lt;/span&gt; &lt;span class="n"&gt;Selenium&lt;/span&gt; &lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;;&lt;/span&gt;

        &lt;span class="kd" style="color:#008000;font-weight:bold;"&gt;public&lt;/span&gt; &lt;span class="nf" style="color:#0060b0;font-weight:bold;"&gt;SignInPage&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Selenium&lt;/span&gt; &lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;)&lt;/span&gt; &lt;span class="o" style="color:#303030;"&gt;{&lt;/span&gt;
                &lt;span class="k" style="color:#008000;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;.&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;selenium&lt;/span&gt; &lt;span class="o" style="color:#303030;"&gt;=&lt;/span&gt; &lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;;&lt;/span&gt;
                &lt;span class="k" style="color:#008000;font-weight:bold;"&gt;if&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;.&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;getTitle&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;().&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;equals&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;Sign in page&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;))&lt;/span&gt; &lt;span class="o" style="color:#303030;"&gt;{&lt;/span&gt;
                        &lt;span class="k" style="color:#008000;font-weight:bold;"&gt;throw&lt;/span&gt; &lt;span class="k" style="color:#008000;font-weight:bold;"&gt;new&lt;/span&gt; &lt;span class="nf" style="color:#0060b0;font-weight:bold;"&gt;IllegalStateException&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;This is not sign in page, current page is: &amp;quot;&lt;/span&gt;
                                        &lt;span class="o" style="color:#303030;"&gt;+&lt;/span&gt;&lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;.&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;getLocation&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;());&lt;/span&gt;
                &lt;span class="o" style="color:#303030;"&gt;}&lt;/span&gt;
        &lt;span class="o" style="color:#303030;"&gt;}&lt;/span&gt;

        &lt;span class="c" style="color:#808080;"&gt;/**&lt;/span&gt;
&lt;span class="c" style="color:#808080;"&gt;         * Login as valid user&lt;/span&gt;
&lt;span class="c" style="color:#808080;"&gt;         *&lt;/span&gt;
&lt;span class="c" style="color:#808080;"&gt;         * @param userName&lt;/span&gt;
&lt;span class="c" style="color:#808080;"&gt;         * @param password&lt;/span&gt;
&lt;span class="c" style="color:#808080;"&gt;         * @return HomePage object&lt;/span&gt;
&lt;span class="c" style="color:#808080;"&gt;         */&lt;/span&gt;
        &lt;span class="kd" style="color:#008000;font-weight:bold;"&gt;public&lt;/span&gt; &lt;span class="n"&gt;HomePage&lt;/span&gt; &lt;span class="nf" style="color:#0060b0;font-weight:bold;"&gt;loginValidUser&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;userName&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;,&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;)&lt;/span&gt; &lt;span class="o" style="color:#303030;"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;.&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;type&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;usernamefield&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;,&lt;/span&gt; &lt;span class="n"&gt;userName&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;.&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;type&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;passwordfield&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;,&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;.&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;click&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;sign-in&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;.&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;waitForPageToLoad&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;waitPeriod&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;);&lt;/span&gt;

                &lt;span class="k" style="color:#008000;font-weight:bold;"&gt;return&lt;/span&gt; &lt;span class="k" style="color:#008000;font-weight:bold;"&gt;new&lt;/span&gt; &lt;span class="nf" style="color:#0060b0;font-weight:bold;"&gt;HomePage&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;);&lt;/span&gt;
        &lt;span class="o" style="color:#303030;"&gt;}&lt;/span&gt;
&lt;span class="o" style="color:#303030;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;And the new login test would be:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:verdana, sans-serif;line-height:16px;font-size:x-small;"&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;pre style="font-size:1em;background-color:#f0f0f0;border-top-style:solid;border-right-style:none;border-bottom-style:solid;border-left-style:none;border-top-width:1px;border-right-width:medium;border-bottom-width:1px;border-left-width:medium;color:#333333;overflow-x:auto;overflow-y:auto;padding:5px;"&gt;&lt;span class="c" style="color:#808080;"&gt;/***&lt;/span&gt;
&lt;span class="c" style="color:#808080;"&gt; * Tests login feature&lt;/span&gt;
&lt;span class="c" style="color:#808080;"&gt; */&lt;/span&gt;
&lt;span class="kd" style="color:#008000;font-weight:bold;"&gt;public&lt;/span&gt; &lt;span class="kd" style="color:#008000;font-weight:bold;"&gt;class&lt;/span&gt; &lt;span class="nc" style="color:#b00060;font-weight:bold;"&gt;TestLogin&lt;/span&gt; &lt;span class="o" style="color:#303030;"&gt;{&lt;/span&gt;

        &lt;span class="kd" style="color:#008000;font-weight:bold;"&gt;public&lt;/span&gt; &lt;span class="kt" style="color:#303090;font-weight:bold;"&gt;void&lt;/span&gt; &lt;span class="nf" style="color:#0060b0;font-weight:bold;"&gt;testLogin&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;()&lt;/span&gt; &lt;span class="o" style="color:#303030;"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;SignInPage&lt;/span&gt; &lt;span class="n"&gt;signInPage&lt;/span&gt; &lt;span class="o" style="color:#303030;"&gt;=&lt;/span&gt; &lt;span class="k" style="color:#008000;font-weight:bold;"&gt;new&lt;/span&gt; &lt;span class="n"&gt;SignInPage&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;HomePage&lt;/span&gt; &lt;span class="n"&gt;homePage&lt;/span&gt; &lt;span class="o" style="color:#303030;"&gt;=&lt;/span&gt; &lt;span class="n"&gt;signInPage&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;.&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;loginValidUser&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;userName&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;,&lt;/span&gt; &lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;password&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;Assert&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;.&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;assertTrue&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="n"&gt;selenium&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;.&lt;/span&gt;&lt;span class="na" style="color:#0000c0;"&gt;isElementPresent&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;(&lt;/span&gt;&lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;compose button&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;),&lt;/span&gt;
                                &lt;span class="s" style="background-color:#fff0f0;"&gt;&amp;quot;Login was unsuccessful&amp;quot;&lt;/span&gt;&lt;span class="o" style="color:#303030;"&gt;);&lt;/span&gt;
        &lt;span class="o" style="color:#303030;"&gt;}&lt;/span&gt;
&lt;span class="o" style="color:#303030;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;So now we get a suite of page objects with clearly defined methods and services and tests can issue their tests by calling services with appropriate parameters. The code is cleaner and more readable.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Some principles of Page Oject Pattern:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Page obect itself should never make any assertions or verification. This is the job of a test.&lt;/li&gt;
&lt;li&gt;Page object, however, upon its initiation, should ensure all elements are loaded.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;A page object does not need to represent an entire page, but only to capture the critical components and services that are to be tested.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;See Also:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://seleniumhq.org/docs/06_test_design_considerations.html"&gt;Test Design Considerations&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=37248" width="1" height="1"&gt;</description><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/Selenium+test/default.aspx">Selenium test</category></item><item><title>How Google Guys get paid? How to be one of them?</title><link>http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/13/how-google-guys-get-paid-how-to-be-one-of-them.aspx</link><pubDate>Thu, 13 Oct 2011 15:24:00 GMT</pubDate><guid isPermaLink="false">6afe0437-14b4-41d5-bc66-6d54a24dbd48:37246</guid><dc:creator>xxxd</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;You know, I know that Google guys are paid pretty well. Do you remember in Sept. 2010, ALL Google employees got 10% raise? Now here is a pictures of what the best paid jobs in Google and roughly how much.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/salary-google.jpg"&gt;&lt;img border="0" src="http://dotnetslackers.com/Community/blogs/xun/blog/salary-google.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You probably already have known that it is incredibly hard to be part of Google, but how hard? Here is an overview:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/hiring-google.jpg"&gt;&lt;img src="http://dotnetslackers.com/Community/blogs/xun/blog/hiring-google.jpg" border="0" width="560" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;See Also:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/12/feel-good-about-it-job-market-and-go-mobile.aspx"&gt;Feel good about IT job market. And Go Mobile!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.businessinsider.com/infographics-process-of-getting-hired-at-google-2011-10"&gt;INFOGRAPHIC: The Incredibly Difficult Process Of Getting Hired At Google&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=37246" width="1" height="1"&gt;</description><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/IT+job+market/default.aspx">IT job market</category></item><item><title>Feel good about IT job market. And Go Mobile!</title><link>http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/12/feel-good-about-it-job-market-and-go-mobile.aspx</link><pubDate>Wed, 12 Oct 2011 14:25:00 GMT</pubDate><guid isPermaLink="false">6afe0437-14b4-41d5-bc66-6d54a24dbd48:37243</guid><dc:creator>xxxd</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/SF-AA738A_THEVA_NS_20110202181314.gif"&gt;&lt;img src="http://dotnetslackers.com/Community/blogs/xun/blog/SF-AA738A_THEVA_NS_20110202181314.gif" border="0" style="float:left;padding:10px;" alt="" /&gt;&lt;/a&gt;The national job market as a whole is depressing, but on the IT side, especially in the silicon valley, it is quite sunny.&lt;/p&gt;
&lt;p&gt;Do you know that:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;According to Dice&amp;#39;s annual survey, the average Silicon Valley tech salary in 2010 rose nearly 3% to $99,028 a year. That compared with an increase of less than a 1% nationwide to $79,384 a year. Silicon Valley has been tops in tech salaries for at least the past six years, adds Dice.&lt;/p&gt;
&lt;p&gt;-&lt;a href="http://online.wsj.com/article/SB10001424052748703439504576116192416198636.html"&gt; Local Technology Salaries Lead the Nation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;IT layoffs have dropped to their lowest level in a decade, and demand for techies is expected to jump 32% by 2018.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And if you have time or opportunity, please go Mobile now, because&amp;nbsp;Jobs connected to mobile applications is one of the fastest growing hiring requests on Dice. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And the six hottest new jobs in IT are:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Business architect:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The role of the business architect is to fashion high-level company strategy with technology in mind. &amp;nbsp;Think MBA with an IT focus.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Data scientist&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not your regular sql data developers (though that is useful too), but data scientist that use data analytics to bring stategic insight therefore business opportunitites from the enormous data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Social media architect&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Social media does not just mean just Facebook and Twitter, but also IBM, Jive, and Yammer and a multitude of runner-ups. &amp;nbsp;This creates a demand for IT pros with the specialized knowledge to build secure communities within a business network and between businesses and customers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mobile technology expert&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Is not this obvious?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enterprise mobile developer&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;What distinguishes enterprise dev positions from general mobile dev jobs is their focus on compliance and security, according to Stewart Tan of Accretive Solutions, an executive search firm and consultancy. &amp;quot;Building mobile apps, architecting mobile strategies, and securing those devices&amp;quot; are the top concerns facing the enterprise today.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cloud architect&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;quot;There&amp;#39;s so much positive momentum toward cloud integration,&amp;quot; says Ron Gula, CEO of Tenable Network Security. &amp;quot;People who can really identify the architecture from a simplicity point of view are going to be in demand.&amp;quot;&lt;/p&gt;
&lt;p&gt;See Also:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.infoworld.com/t/information-technology-careers/the-6-hottest-new-jobs-in-it-052"&gt;The 6 hottest new jobs in IT&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=37243" width="1" height="1"&gt;</description><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/IT+job+market/default.aspx">IT job market</category></item><item><title>Google Dart: Javascript killer or just another language</title><link>http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/11/google-dart-javascript-killer-or-just-another-language.aspx</link><pubDate>Tue, 11 Oct 2011 17:29:00 GMT</pubDate><guid isPermaLink="false">6afe0437-14b4-41d5-bc66-6d54a24dbd48:37242</guid><dc:creator>xxxd</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left:240px;"&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/091511_Gabatek_Google-Dart.large.jpg"&gt;&lt;img src="http://dotnetslackers.com/Community/blogs/xun/blog/091511_Gabatek_Google-Dart.large.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Oh, boy, don&amp;#39;t we already have too many programming languages? Now Google is throwing Dart at JavaScript, the uniquituous script languages that runs at the heart of every browser on every platform. Every platform, mobile phones, mobile tablets, plus Macs and Pcs, that is exactly what makes Javascript a problem.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In the &lt;a href="https://gist.github.com/1208618"&gt;widely-read (maybe intentionally) leaked memo&lt;/a&gt;, Google declared that &amp;quot;JavaScript&amp;nbsp;has has fundamental flaws that cannot be fixed merely by evolving the&amp;nbsp;language&amp;quot; and they have taken two strategies to&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;a) Co-exist with JavaScript in the begining&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;b) Replace JavaScript eventually&lt;/p&gt;
&lt;p&gt;The would-be advantanges or potential of Darts are (as claimed by Google and as Dart is still in its infancy): &lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;a. OOO (object-oriented), structured and flexible; &lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;b. familiar syntax like C++;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;c. High performance across all platforms&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So what are &amp;quot;the fundamental flaws&amp;quot; referred by Google?&lt;/p&gt;
&lt;p&gt;A&lt;span style="font-family:&amp;#39;Lucida Grande&amp;#39;, Arial, sans-serif;line-height:20px;"&gt;ccording to Miller, is that it cannot be tooled and has inherent performance problems, thus rendering it inadequate for complex browser-based apps. &amp;quot;The cyclone of innovation is increasingly moving off the Web onto iOS and other closed platforms,&amp;quot; Miller wrote. &amp;quot;The Web development community has been backed into using large amounts of JavaScript largely to work around the deficiencies in the platform.... Even smaller-scale apps written by hobbyist developers have to navigate a confusing labyrinth of frameworks and incompatible design patterns.&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Keep throwing Darts, Google!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;See Also:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.infoworld.com/t/web-development/google-dart-aimed-supplanting-fundamentally-flawed-javascript-173096"&gt;Google Dart aims to supplant &amp;#39;fundamentally flawed&amp;#39; JavaScript&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://googlecode.blogspot.com/2011/10/dart-language-for-structured-web.html"&gt;Dart: a language for structured web programming&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style="font-family:Georgia, Times, serif;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0.25em;padding-left:0px;font-size:2em;line-height:1.14em;"&gt;&lt;/h1&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=37242" width="1" height="1"&gt;</description><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/javascript/default.aspx">javascript</category><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/Dart/default.aspx">Dart</category></item><item><title>Comics Time: How to detect a geek</title><link>http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/07/comics-time-how-to-detect-a-geek.aspx</link><pubDate>Fri, 07 Oct 2011 16:34:00 GMT</pubDate><guid isPermaLink="false">6afe0437-14b4-41d5-bc66-6d54a24dbd48:37236</guid><dc:creator>xxxd</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/howtodetect.png"&gt;&lt;img border="0" src="http://dotnetslackers.com/Community/blogs/xun/blog/howtodetect.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="font-size:14pt;"&gt;&lt;strong&gt;&lt;i&gt;It does work without them&lt;/i&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/art-programming.jpg"&gt;&lt;img border="0" src="http://dotnetslackers.com/Community/blogs/xun/blog/art-programming.jpg" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="font-size:14pt;"&gt;&lt;strong&gt;Why Geek loves gadget?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/gadget-love.jpg"&gt;&lt;img border="0" src="http://dotnetslackers.com/Community/blogs/xun/blog/gadget-love.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;All of the above is from The Tech Comics section in&lt;a&gt;&amp;nbsp;http://itmanagement.earthweb.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://itmanagement.earthweb.com/cnews/article.php/3832671"&gt;Tech comics&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=37236" width="1" height="1"&gt;</description><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/humor/default.aspx">humor</category></item><item><title>Apple Logo redesigned / Quoting Steve Jobs</title><link>http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/06/quoting-steve-jobs.aspx</link><pubDate>Thu, 06 Oct 2011 16:20:00 GMT</pubDate><guid isPermaLink="false">6afe0437-14b4-41d5-bc66-6d54a24dbd48:37235</guid><dc:creator>xxxd</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Apple logo redesigned. By a Hong Kong student.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/jobs.jpg"&gt;&lt;img border="0" src="http://dotnetslackers.com/Community/blogs/xun/blog/jobs.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/jobs.jpg"&gt;&lt;/a&gt;&amp;ldquo;Being the richest man in the cemetery doesn&amp;rsquo;t matter to me &amp;hellip; Going to bed at night saying we&amp;rsquo;ve done something wonderful&amp;hellip; that&amp;rsquo;s what matters to me.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;[The Wall Street Journal, May 25, 1993]&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;I&amp;rsquo;ll always stay connected with Apple. I hope that throughout my life I&amp;rsquo;ll sort of have the thread of my life and the thread of Apple weave in and out of each other, like a tapestry. There may be a few years when I&amp;rsquo;m not there, but I&amp;rsquo;ll always come back.&amp;quot;&lt;/p&gt;
&lt;p&gt;[Playboy, Feb. 1, 1985]&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;You can&amp;rsquo;t connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future. You have to trust in something &amp;mdash; your gut, destiny, life, karma, whatever. This approach has never let me down, and it has made all the difference in my life.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;[Stanford commencement speech, June 2005]&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do. If you haven&amp;rsquo;t found it yet, keep looking. Don&amp;rsquo;t settle. As with all matters of the heart, you&amp;rsquo;ll know when you find it. And, like any great relationship, it just gets better and better as the years roll on. So keep looking until you find it. Don&amp;rsquo;t settle.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;[Stanford commencement speech, June 2005]&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;quot;That&amp;#39;s been one of my mantras &amp;ndash; focus and simplicity. Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it&amp;#39;s worth it in the end because once you get there, you can move mountains.&amp;quot; &amp;ndash; Business Week , 1998.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&amp;quot;Picasso had a saying: &amp;#39;Good artists copy, great artists steal.&amp;#39; We have always been shameless about stealing great ideas &amp;hellip; I think part of what made the Macintosh great was that the people working on it were musicians, poets, artists, zoologists and historians who also happened to be the best computer scientists in the world.&amp;quot; &amp;ndash; quote from a 1994 interview shared by Huffington Post .&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&amp;quot;Remembering that I&amp;#39;ll be dead soon is the most important tool I&amp;#39;ve ever encountered to help me make the big choices in life. Because almost everything &amp;ndash; all external expectations, all pride, all fear of embarrassment or failure &amp;ndash; these things just fall away in the face of death, leaving only what is truly important.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Remembering that you are going to die is the best way I know to avoid the trap of thinking you have something to lose. You are already naked. There is no reason not to follow your heart.&amp;quot; &amp;ndash; Stanford University commencement address, 1995.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=37235" width="1" height="1"&gt;</description><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/Steve+Jobs/default.aspx">Steve Jobs</category></item><item><title>The Apple of Steve Jobs</title><link>http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/06/the-apple-of-steve-jobs.aspx</link><pubDate>Thu, 06 Oct 2011 14:39:00 GMT</pubDate><guid isPermaLink="false">6afe0437-14b4-41d5-bc66-6d54a24dbd48:37234</guid><dc:creator>xxxd</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/jobs.png"&gt;&lt;img src="http://dotnetslackers.com/Community/blogs/xun/blog/jobs.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In China, this is what People said about Steve Jobs and his apple&lt;/p&gt;
&lt;p&gt;There are three APPLEs that have changed the world.&lt;/p&gt;
&lt;p&gt;In Genesis, Eve ate the apple that was evil but seductive, and so did Adam, after which they discovered sin, and God punished them for their disobedience. And the life of suffering as we know it starts.&lt;/p&gt;
&lt;p&gt;Newton, from observing an apple fall from a tree, discovered the Universal Law of Gravitation.&lt;/p&gt;
&lt;p&gt;Then there is the Apple of Steve jobs that changed the world of personal computers, then the definition of a phone, the mobile industry.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=37234" width="1" height="1"&gt;</description><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/Apple/default.aspx">Apple</category><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/Jobs/default.aspx">Jobs</category></item><item><title>This will be the web in the future</title><link>http://dotnetslackers.com/Community/blogs/xun/archive/2011/10/05/this-will-be-the-web-in-the-future.aspx</link><pubDate>Wed, 05 Oct 2011 16:56:00 GMT</pubDate><guid isPermaLink="false">6afe0437-14b4-41d5-bc66-6d54a24dbd48:37233</guid><dc:creator>xxxd</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Embrace the future and the unpredicability of the future.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bradfrostweb.com/blog/web/for-a-future-friendly-web/"&gt;Brad Frost spoke about the need to think beyond the present web landscape and start to think and work towards a web for the future.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/web1.png"&gt;&lt;img border="0" src="http://dotnetslackers.com/Community/blogs/xun/blog/web1.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bradfrostweb.com/blog/web/for-a-future-friendly-web/"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="__ss_9516437" style="width:425px;"&gt;
&lt;div style="padding:5px 0 12px;"&gt;Too bad, I cannot embed the slideshow or video. But some of the gist and quotes:&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Smart content - &amp;nbsp;People&amp;#39;s capacity for BULLSHIT is rapidly dimining.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/web2.png"&gt;&lt;img border="0" src="http://dotnetslackers.com/Community/blogs/xun/blog/web2.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Web is everything and everywhere. Think about context. Think about the other 70% of use cases of the web, &amp;nbsp;watching TV, waiting in Line, #Pooping (my favorite).&lt;/p&gt;
&lt;p&gt;Think mobile. Think about mobile apps.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/mobile.png"&gt;&lt;img border="0" src="http://dotnetslackers.com/Community/blogs/xun/blog/mobile.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Go global, start from mobile. Mobile site can grow into a full-featured, mobile-first, adaptive web site. &amp;nbsp;Desktop-only site is not scalable.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnetslackers.com/Community/blogs/xun/blog/globle%20site.png"&gt;&lt;img border="0" src="http://dotnetslackers.com/Community/blogs/xun/blog/globle%20site.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=37233" width="1" height="1"&gt;</description><category domain="http://dotnetslackers.com/Community/blogs/xun/archive/tags/future+web/default.aspx">future web</category></item></channel></rss>
