<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6780304109699047242</id><updated>2011-11-27T16:50:19.100-08:00</updated><category term='setup'/><category term='Qualcomm'/><category term='Microsoft'/><category term='Windows 8'/><category term='cellphone'/><category term='client'/><category term='java'/><category term='Droid'/><category term='php'/><category term='ajax'/><category term='tutorial'/><category term='separation'/><category term='ARM'/><category term='mvn'/><category term='Build'/><category term='communication'/><category term='jquery'/><category term='information flow'/><category term='tags'/><category term='android'/><category term='devices'/><category term='Samsung Galaxy Tab'/><category term='scrum'/><category term='agile'/><category term='apps'/><category term='html'/><category term='sensor'/><category term='web2'/><category term='server'/><category term='problem-finding'/><category term='10.1'/><category term='tv'/><category term='Tablets'/><category term='framework'/><category term='tier'/><category term='struts 2'/><category term='management'/><category term='json'/><category term='beginner'/><category term='estimation'/><category term='google'/><title type='text'>Just Like In School</title><subtitle type='html'>amateur's way to help other amateurs :D</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://justlikeinschool.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://justlikeinschool.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Dwight Ian</name><uri>http://www.blogger.com/profile/04988291284653128071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_NvVgqszEmGY/Sg-d4r_MJqI/AAAAAAAAAv4/_rhlarlNgQI/s1600-R/n1100735501_1719.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6780304109699047242.post-5428674438469970810</id><published>2011-09-16T02:17:00.001-07:00</published><updated>2011-09-16T02:18:45.775-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Droid'/><category scheme='http://www.blogger.com/atom/ns#' term='10.1'/><category scheme='http://www.blogger.com/atom/ns#' term='Samsung Galaxy Tab'/><category scheme='http://www.blogger.com/atom/ns#' term='Tablets'/><title type='text'>Samsung Galaxy Tab 10.1 review: Droid at large</title><content type='html'>&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial, sans-seirf; font-size: 13px; line-height: 17px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #888888; font-size: 16px; font: normal normal bold 16px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 1em; padding-left: 0px; padding-right: 0px; padding-top: 1em; vertical-align: baseline;"&gt;Introduction&lt;/h3&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; padding-bottom: 1em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Tablets are basking in well-deserved attention and manufacturers know they need to try hard and make their devices distinct and memorable. Truly unique gadgets are hard to come by these days - especially in Honeycomb land. Which is perhaps part of the reason why iPad is still the one to beat. The Samsung Galaxy Tab 10.1 3G is in for a challenge, and up for it.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; padding-bottom: 1em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;a href="http://www.gsmarena.com/samsung_galaxy_tab_101-review-642.php#" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b3c23; font-size: 13px; font: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"&gt;&lt;img alt="Samsung Galaxy Tab 10.1 and Tab 8.9" height="110" src="http://st.gsmarena.com/vv/newsimg/11/03/galaxy-tab-101-tab-89/thumb/gsmarena_001.jpg" style="border-bottom-color: rgb(217, 217, 217); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(217, 217, 217); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(217, 217, 217); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(217, 217, 217); border-top-style: solid; border-top-width: 1px; font-size: 13px; font: inherit; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.gsmarena.com/samsung_galaxy_tab_101-review-642.php#" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b3c23; font-size: 13px; font: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"&gt;&lt;img alt="Samsung Galaxy Tab 10.1 and Tab 8.9" height="110" src="http://st.gsmarena.com/vv/newsimg/11/03/galaxy-tab-101-tab-89/thumb/gsmarena_002.jpg" style="border-bottom-color: rgb(217, 217, 217); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(217, 217, 217); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(217, 217, 217); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(217, 217, 217); border-top-style: solid; border-top-width: 1px; font-size: 13px; font: inherit; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.gsmarena.com/samsung_galaxy_tab_101-review-642.php#" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b3c23; font-size: 13px; font: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"&gt;&lt;img alt="Samsung Galaxy Tab 10.1 and Tab 8.9" height="110" src="http://st.gsmarena.com/vv/newsimg/11/03/galaxy-tab-101-tab-89/thumb/gsmarena_003.jpg" style="border-bottom-color: rgb(217, 217, 217); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(217, 217, 217); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(217, 217, 217); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(217, 217, 217); border-top-style: solid; border-top-width: 1px; font-size: 13px; font: inherit; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.gsmarena.com/samsung_galaxy_tab_101-review-642.php#" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b3c23; font-size: 13px; font: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"&gt;&lt;img alt="Samsung Galaxy Tab 10.1 and Tab 8.9" height="110" src="http://st.gsmarena.com/vv/newsimg/11/03/galaxy-tab-101-tab-89/thumb/gsmarena_004.jpg" style="border-bottom-color: rgb(217, 217, 217); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(217, 217, 217); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(217, 217, 217); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(217, 217, 217); border-top-style: solid; border-top-width: 1px; font-size: 13px; font: inherit; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #888888; font-size: 11px; font-weight: bold; font: normal normal bold 11px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Samsung Galaxy Tab 10.1 official photos&lt;/strong&gt;&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; padding-bottom: 1em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Shortly after launch the Galaxy Tab 10.1 was blessed with a custom user experience, called Touch Wiz UX, which literally puts more color into Honeycomb, offers a good selection of customizable widgets and most importantly tries to ease your way into Android for tablets.&lt;/div&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial, sans-seirf; font-size: 13px; line-height: 17px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; padding-bottom: 1em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial, sans-seirf; font-size: 13px; line-height: 17px;"&gt;Yet this tablet’s main advantage remains that it’s the most portable 10” slate to hit the market. It's thinner even than iPad 2 and good 42 grams lighter than Apple's frontrunner, while still promising to match its battery performance. And that's no mean feat since tablets are going hard after&amp;nbsp;&lt;a class="itxtrst itxtrsta itxthook" href="http://www.gsmarena.com/samsung_galaxy_tab_101-review-642.php#" id="itxthook0" rel="nofollow" style="background-color: transparent; border-bottom-color: rgb(0, 100, 0); border-bottom-style: solid; border-color: initial; border-color: initial; border-left-style: none; border-right-style: none; border-style: initial; border-top-style: none; border-width: initial; bottom: auto; color: darkgreen; display: inline !important; float: none !important; font-family: inherit; font-size: 13px; font-variant: normal; font: inherit; left: auto; line-height: normal; margin-bottom: 0px !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; padding-bottom: 1px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: static !important; right: auto; text-align: left; text-decoration: underline; top: auto; vertical-align: baseline; white-space: normal;"&gt;&lt;span class="itxtrst itxtrstspan itxthookspan" id="itxthook0w0" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-color: initial; border-color: initial; border-color: initial; border-color: initial; border-color: initial; border-style: initial; border-top-style: none; border-width: initial; border-width: initial; border-width: initial; border-width: initial; bottom: auto; color: darkgreen; display: inline; float: none; font-family: inherit; font-size: inherit; font-variant: normal; font: inherit; left: auto; line-height: normal; margin-bottom: 0px !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important; position: static; right: auto; text-align: left; text-transform: none !important; top: auto; vertical-align: baseline; white-space: normal;"&gt;netbooks&lt;/span&gt;&lt;/a&gt;, so they need to back their portability with battery longevity.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial, sans-seirf; font-size: 13px; line-height: 17px;"&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; padding-bottom: 1em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;The Galaxy Tab 10.1 has a dual-core NVIDIA Tegra 2&amp;nbsp;&lt;a class="itxtrst itxtrsta itxthook" href="http://www.gsmarena.com/samsung_galaxy_tab_101-review-642.php#" id="itxthook1" rel="nofollow" style="background-color: transparent; border-bottom-color: rgb(0, 100, 0); border-bottom-style: solid; border-color: initial; border-color: initial; border-left-style: none; border-right-style: none; border-style: initial; border-top-style: none; border-width: initial; bottom: auto; color: darkgreen; display: inline !important; float: none !important; font-family: inherit; font-size: 13px; font-variant: normal; font: inherit; left: auto; line-height: normal; margin-bottom: 0px !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; padding-bottom: 1px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: static !important; right: auto; text-align: left; text-decoration: underline; top: auto; vertical-align: baseline; white-space: normal;"&gt;&lt;span class="itxtrst itxtrstspan itxthookspan" id="itxthook1w0" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-color: initial; border-color: initial; border-color: initial; border-color: initial; border-color: initial; border-style: initial; border-top-style: none; border-width: initial; border-width: initial; border-width: initial; border-width: initial; bottom: auto; color: darkgreen; display: inline; float: none; font-family: inherit; font-size: inherit; font-variant: normal; font: inherit; left: auto; line-height: normal; margin-bottom: 0px !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important; position: static; right: auto; text-align: left; text-transform: none !important; top: auto; vertical-align: baseline; white-space: normal;"&gt;processor&lt;/span&gt;&lt;/a&gt;, a bright 10.1" PLS TFT display of WXGA resolution, a premium set of connectivity options and plenty of storage space. Check out the full list of things going for (and against) the Galaxy Tab 10.1 3G below.&lt;/div&gt;&lt;h3 style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #888888; font-size: 16px; font: normal normal bold 16px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 1em; padding-left: 0px; padding-right: 0px; padding-top: 1em; vertical-align: baseline;"&gt;Key features&lt;/h3&gt;&lt;ul style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-image: initial; list-style-position: initial; list-style-type: none; margin-bottom: 0px; margin-left: 2em; margin-right: 2em; margin-top: 0px; padding-bottom: 1.4em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;10.1" 16M-color PLS TFT capacitive touchscreen of WXGA (1280 x 800 pixels) resolution&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Very lightweight at just 565 g&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Thinnest slate to date at just 8.6 mm&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Gorilla Glass display&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Tegra 2 chipset: Dual-core 1GHz ARM Cortex-A9 processor; 1GB of RAM; ULP GeForce GPU&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Android 3.1 Honeycomb with TouchWiz UX UI&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Optional quad-band GPRS/EDGE and tri-band 3G with HSDPA 21 Mbps connectivity&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;16/32/64 GBGB of built-in memory&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;3.2 MP autofocus camera, 2048x1536 pixels, LED flash, geotagging&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;2.0 MP front-facing camera;&amp;nbsp;&lt;a class="itxtrst itxtrsta itxthook" href="http://www.gsmarena.com/samsung_galaxy_tab_101-review-642.php#" id="itxthook2" rel="nofollow" style="background-color: transparent; border-bottom-color: rgb(0, 100, 0); border-bottom-style: solid; border-color: initial; border-color: initial; border-left-style: none; border-right-style: none; border-style: initial; border-top-style: none; border-width: initial; bottom: auto; color: darkgreen; display: inline !important; float: none !important; font-family: inherit; font-size: 13px; font-variant: normal; font: inherit; left: auto; line-height: normal; margin-bottom: 0px !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; padding-bottom: 1px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: static !important; right: auto; text-align: left; text-decoration: underline; top: auto; vertical-align: baseline; white-space: normal;"&gt;&lt;span class="itxtrst itxtrstspan itxthookspan" id="itxthook2w0" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-color: initial; border-color: initial; border-color: initial; border-color: initial; border-color: initial; border-style: initial; border-top-style: none; border-width: initial; border-width: initial; border-width: initial; border-width: initial; bottom: auto; color: darkgreen; display: inline; float: none; font-family: inherit; font-size: inherit; font-variant: normal; font: inherit; left: auto; line-height: normal; margin-bottom: 0px !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important; position: static; right: auto; text-align: left; text-transform: none !important; top: auto; vertical-align: baseline; white-space: normal;"&gt;video&lt;/span&gt;&lt;span class="itxtrst itxtrstspan itxthookspan" id="itxthook2w1" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-color: initial; border-color: initial; border-color: initial; border-color: initial; border-color: initial; border-style: initial; border-top-style: none; border-width: initial; border-width: initial; border-width: initial; border-width: initial; bottom: auto; color: darkgreen; display: inline; float: none; font-family: inherit; font-size: inherit; font-variant: normal; font: inherit; left: auto; line-height: normal; margin-bottom: 0px !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important; position: static; right: auto; text-align: left; text-transform: none !important; top: auto; vertical-align: baseline; white-space: normal;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="itxtrst itxtrstspan itxthookspan" id="itxthook2w2" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-color: initial; border-color: initial; border-color: initial; border-color: initial; border-color: initial; border-style: initial; border-top-style: none; border-width: initial; border-width: initial; border-width: initial; border-width: initial; bottom: auto; color: darkgreen; display: inline; float: none; font-family: inherit; font-size: inherit; font-variant: normal; font: inherit; left: auto; line-height: normal; margin-bottom: 0px !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important; position: static; right: auto; text-align: left; text-transform: none !important; top: auto; vertical-align: baseline; white-space: normal;"&gt;calls&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;720p HD video recording @ 30 fps&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Wi-Fi 802.11 a/b/g/n Wi-Fi Direct, dual-band, Wi-Fi hotspot&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Proprietary 30-pin connector port for charging&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Stereo Bluetooth v3.0&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;HDMI TV-out (adapter required), USB host (adapter required)&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Standard 3.5 mm audio jack&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Flash 10.3 support&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;GPS with A-GPS support; digital compass&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;DivX/XviD support (fullHD), MP4 support up to HD&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Accelerometer and proximity sensor; three-axis Gyroscope sensor&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Polaris office document editor comes preinstalled&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;7000 mAh Li-Po rechargeable battery&lt;/li&gt;&lt;/ul&gt;&lt;h3 style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #888888; font-size: 16px; font: normal normal bold 16px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 1em; padding-left: 0px; padding-right: 0px; padding-top: 1em; vertical-align: baseline;"&gt;Main disadvantages&lt;/h3&gt;&lt;ul style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-image: initial; list-style-position: initial; list-style-type: none; margin-bottom: 0px; margin-left: 2em; margin-right: 2em; margin-top: 0px; padding-bottom: 1.4em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Non-replaceable battery&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;No microSD card support&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;No standard USB port&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;No Android Honeycomb 3.2 yet&lt;/li&gt;&lt;li style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; list-style-type: disc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;No GSM voice capabilities despite the available SIM slot&lt;/li&gt;&lt;/ul&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; padding-bottom: 1em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;a href="http://www.gsmarena.com/samsung_galaxy_tab_101-review-642.php#" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b3c23; font-size: 13px; font: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"&gt;&lt;img alt="" height="100" src="http://st.gsmarena.com/vv/reviewsimg/samsung-galaxy-tab-101-3g/phone/thumb/gsmarena_021.jpg" style="border-bottom-color: rgb(217, 217, 217); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(217, 217, 217); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(217, 217, 217); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(217, 217, 217); border-top-style: solid; border-top-width: 1px; font-size: 13px; font: inherit; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #888888; font-size: 11px; font-weight: bold; font: normal normal bold 11px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Samsung Galaxy Tab 10.1 at ours&lt;/strong&gt;&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; padding-bottom: 1em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Samsung are bringing their A game in the Galaxy Tab 10.1. Not that it should be judged by sheer size but the company's biggest tablet is fit to be in charge and meet the competition head on. Whether it's watching films, browsing the web, gaming, video-calls, or imaging, this is one of the best-equipped tablets out there.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; font: inherit; padding-bottom: 1em; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;The screen quality, the added TouchWiz UX functionality, the good battery and excellent media make it a must-see. The whole package looks like the right mix of style and substance, but we just won't rush to a verdict. The Galaxy Tab had a promising start in our preview. With all the finishing touches in place, it's ready to give its best. Head on past the break to see what the Galaxy Tab 10.1 is made of.&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6780304109699047242-5428674438469970810?l=justlikeinschool.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justlikeinschool.blogspot.com/feeds/5428674438469970810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justlikeinschool.blogspot.com/2011/09/samsung-galaxy-tab-101-review-droid-at.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/5428674438469970810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/5428674438469970810'/><link rel='alternate' type='text/html' href='http://justlikeinschool.blogspot.com/2011/09/samsung-galaxy-tab-101-review-droid-at.html' title='Samsung Galaxy Tab 10.1 review: Droid at large'/><author><name>Dwight Ian</name><uri>http://www.blogger.com/profile/04988291284653128071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_NvVgqszEmGY/Sg-d4r_MJqI/AAAAAAAAAv4/_rhlarlNgQI/s1600-R/n1100735501_1719.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6780304109699047242.post-428557715065691681</id><published>2011-09-16T02:15:00.000-07:00</published><updated>2011-09-16T02:15:57.441-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ARM'/><category scheme='http://www.blogger.com/atom/ns#' term='Build'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 8'/><category scheme='http://www.blogger.com/atom/ns#' term='Qualcomm'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Windows 8</title><content type='html'>&lt;span class="Apple-style-span" style="background-color: #2e2e30; font-family: Helvetica, Arial, sans-serif; font-size: 16px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;ANAHEIM, Calif.--Microsoft, in revealing details of&amp;nbsp;&lt;a href="http://news.cnet.com/8301-10805_3-20105203-75/microsofts-bold-new-look-and-feel-for-windows/" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0066a0; cursor: pointer; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;" title="Microsoft's bold new look and feel for Windows -- Tuesday, Sep 13, 2011"&gt;its upcoming Windows 8&lt;/a&gt;&amp;nbsp;operating system this week at its Build developer conference here, has presented its vision for computing in a&amp;nbsp;&lt;a href="http://reviews.cnet.com/tablets/" section="luke_topic" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0066a0; cursor: pointer; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;"&gt;tablet&lt;/a&gt;&amp;nbsp;era that's starkly different from the one offered by rival Apple.&lt;/div&gt;&lt;div class="cnet-image-div image-MEDIUM float-right" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; width: 270px;"&gt;&lt;img alt="" class="cnet-image" height="180" src="http://i.i.com.com/cnwk.1d/i/tim/2011/09/13/event_buildKeynote1_web_270x180.jpg" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;" width="270" /&gt;&lt;div class="image-caption" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;Microsoft Windows president Stephen Sinofsky introduces a test version of a touch-enabled Windows 8.&lt;/div&gt;&lt;span class="image-credit" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;(Credit: Microsoft )&lt;/span&gt;&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;Apple believes that consumers will want discreet devices that are designed to take on specific tasks. That's why its computers run a beefy operating system designed to handle heavy-duty computer processing required, for example, by computer-assisted design applications, and its iPads run a much lighter-weight operating system that's fine for surfing the Web or reading a digital book.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;That's not the vision Microsoft's pursuing. The software giant believes consumers will want a meaty operating system that can run on a variety of devices--everything from a slim tablet up to water-cooled high-end gaming system. Not surprisingly, that operating system is Windows.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;"Their approach is to take the PC OS and bring it to the tablet which is opposite of what Apple is doing," said Jason Maynard, an analyst with Wells Fargo Securities. "Sometimes when you have a hammer, everything looks like nail."&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;Maynard doesn't think that Microsoft's approach is without merit. The company is simply playing to its strengths. After all, Windows runs more than 1 billions PCs worldwide. And when Windows 8 arrives, most likely late next year, it will ship on as many as 400 million PCs, according to some analyst estimates. At the Build conference, Microsoft harped on the potential market to developers in hopes of convincing them to create new applications for Windows 8.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;"The opportunity for building these applications is Windows. These applications will run on all new Windows 8 PCs, desktop, laptop, Windows tablets, small, big screens, all-in-ones--every Windows PC, whether it's a new PC or an upgrade from&amp;nbsp;&lt;a href="http://www.cnet.com/windows-7/" section="luke_topic" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0066a0; cursor: pointer; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;"&gt;Windows 7&lt;/a&gt;," Windows President Steven Sinofsky told the 5,000 developers gathered for his keynote address at the conference on Tuesday. "That could be 400 million people when this product launches. That's a market opportunity for all of you."&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;The challenge, though, will be convincing developers to create slick applications that take advantage of the touch-enabled Metro interface of Windows 8. And it's likely that they'll only do that if they believe hardware makers will come up with compelling designs that encourage users to use the new operating system as a tablet and not just the PCs that Windows has traditionally run.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;That's why Microsoft has been working with hardware makers to insure that Windows 8 can run on ARM chips. The ARM system-on-a-chip architecture means that devices themselves can be thinner and lighter. That should open the door to some slim and attractive tablets running the operating system. But those ARM chips won't be able to run some legacy Windows applications unless programmers go through the bother of porting those applications.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;That means that ARM tablets running Windows 8 won't have complete backward-compatible functionality. And it removes some of the advantage that running Windows brings to a tablet.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;Those legacy applications will be able to run on Windows 8 computers using the x86 architecture with chips from Intel and AMD. But that architecture requires more hardware components, meaning the devices themselves may wind up being thicker and heavier. That's fine for slipping into a dock to handle traditional workplace computing tasks such as crafting a presentation. But those bulkier devices aren't particularly comfortable to sit back and read a book on.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;To be fair, it's still early. Microsoft and its partners have at least a year to work out the kinks before Windows 8 and the variety of devices on which it will ship debut. And they recognize the challenges.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;Qualcomm is one of the key Microsoft partners, working to optimize its ARM-based Snapdragon chip for Windows 8. It's also working hard to help developers figure out how to port legacy applications to the new platform, though it realizes it can't tackle every one.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;"Our focus is going to be on the top applications that address the top 90 percent or so of users," said Steve Horton, director of software in the chipset division at Qualcomm. "But if you're using Quicken 99, you may be stuck."&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;Similarly, AMD is pushing hard to help its partners create ever thinner devices that can handle the broadest swath of applications.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;"There is definitely the opportunity for thinner, lighter devices" running x86 chips, said Gabe Gravning, senior manager for client product marketing at AMD. "The market is moving in that direction."&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;That's Microsoft's big bet with Windows 8. Microsoft sees Windows as the Swiss Army knife that can meet everyone's computing needs. It's got to hope that the prevailing market wisdom of Apple, providing specific devices running different operating systems tailored for discrete purposes, will prove flawed.&lt;/div&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;&lt;br /&gt;&lt;br /&gt;Read more:&amp;nbsp;&lt;a href="http://news.cnet.com/8301-10805_3-20106971-75/windows-8-microsofts-swiss-army-knife-vision/#ixzz1Y6aQ0DXu" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #003399; cursor: pointer; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;"&gt;http://news.cnet.com/8301-10805_3-20106971-75/windows-8-microsofts-swiss-army-knife-vision/#ixzz1Y6aQ0DXu&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6780304109699047242-428557715065691681?l=justlikeinschool.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justlikeinschool.blogspot.com/feeds/428557715065691681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justlikeinschool.blogspot.com/2011/09/windows-8.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/428557715065691681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/428557715065691681'/><link rel='alternate' type='text/html' href='http://justlikeinschool.blogspot.com/2011/09/windows-8.html' title='Windows 8'/><author><name>Dwight Ian</name><uri>http://www.blogger.com/profile/04988291284653128071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_NvVgqszEmGY/Sg-d4r_MJqI/AAAAAAAAAv4/_rhlarlNgQI/s1600-R/n1100735501_1719.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6780304109699047242.post-5210914020740401755</id><published>2011-06-06T08:02:00.001-07:00</published><updated>2011-06-06T08:02:20.380-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='information flow'/><category scheme='http://www.blogger.com/atom/ns#' term='problem-finding'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='communication'/><title type='text'>THE AGILE BLINDSIDE</title><content type='html'>&lt;h2 style="color: #333333; font-family: arial, helvetica, sans-serif; font-size: 16px; line-height: 17px; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-transform: uppercase;"&gt;THE AGILE BLINDSIDE&lt;/h2&gt;&lt;span class="Apple-style-span" style="color: #111111; font-family: tahoma, arial, helvetica, tahoma, sans-serif; font-size: 13px; line-height: 17px;"&gt;&lt;small style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://www.estherderby.com/author/admin" style="color: #ff9900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="Posts by Esther"&gt;Esther&lt;/a&gt;&amp;nbsp;| Tuesday, May 31st, 2011 |&amp;nbsp;&lt;a href="http://www.estherderby.com/2011/05/the-agile-blindside.html#comments" style="color: #ff9900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="Comment on The Agile Blindside"&gt;3 Comments »&lt;/a&gt;&lt;/small&gt;&lt;/span&gt;&lt;div class="entry" style="color: #111111; font-family: tahoma, arial, helvetica, tahoma, sans-serif; font-size: 13px; line-height: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;h6 style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(this article originally appeared on gantthead.com)&lt;/h6&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Agile project management depends on transparency and feedback. Visibility into the product and process is built in with iteration reviews and retrospectives. Task walls and Kanban boards make progress (or lack of it) and bottlenecks obvious. Stand-up meetings seek to raise impediments to management attention. But are managers ready to hear about these problems?&lt;/div&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;If organizations want to realize the benefits of agile methods, managers need to act on the problems that bubble up from teams, deal with unexpected events on projects and proactively find and fix problems that derail projects. Unfortunately, many managers behave in ways that communicate they aren’t interested in solving problems–and ensure they won’t learn of problems until it’s too late.&lt;/div&gt;&lt;h3 style="color: #666666; font-family: arial, helvetica, sans-serif; font-size: 16px; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;“Don’t bring me problems, bring me solutions.”&lt;/h3&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;I suspect that managers who repeat this sentence believe it will encourage people and teams to solve problems on their own. But people don’t approach their managers with problems they know how to fix and can solve (or believe they can solve). The problems they raise are ones they don’t know how to solve, don’t have the organizational influence to solve or need some help to solve.What really happens when managers talk this way? Team members struggle in isolation or ignore problems, hoping they will go away. Managers who tell people not to bring them problems ensure that they won’t hear about small problems that are part of a larger pattern.&lt;/div&gt;&lt;h3 style="color: #666666; font-family: arial, helvetica, sans-serif; font-size: 16px; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;“Failure is not an option!”&lt;/h3&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Managers who rely on this exhortation ensure they won’t hear about risks and issues. The phrase sends the message that success is a matter of character and will rather than the result of planning, observation, re-planning and course correction when something unexpected occurs.&lt;/div&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Will and character are assets in any endeavor; however, they are not sufficient for success. Success requires removing impediments and proactively finding and ameliorating problem situations. Failure may not be an option that managers like, but it is always a possibility; ignoring that fact forces problems underground and makes failure more likely.&lt;/div&gt;&lt;blockquote style="border-left-color: rgb(165, 171, 171); border-left-style: solid; border-left-width: 1px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; margin-top: 15px; padding-bottom: 0px; padding-left: 12px; padding-right: 12px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;“The thought that disaster is impossible often leads to an unthinkable disaster.”- Gerald M. Weinberg&lt;/div&gt;&lt;/blockquote&gt;&lt;h3 style="color: #666666; font-family: arial, helvetica, sans-serif; font-size: 16px; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;“Get with the program or get off the bus!”&lt;/h3&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;When managers give the impression that their minds are already made up, subordinates are less likely to bring up weaknesses, problems or alternatives. People fear that their concerns won’t be heard. Worse, they fear (often with reason) being labeled as naysayers or whiners. Discourage people from shining the light on problems and they’ll stop.&lt;/div&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;But managers don’t need to be obvious in their discouragement; more subtle actions can also plug the pipe.&lt;/div&gt;&lt;h3 style="color: #666666; font-family: arial, helvetica, sans-serif; font-size: 16px; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Interrupting&lt;/h3&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Interrupting a person who brings unwelcome news makes it harder for that person, who is already facing a difficult conversation. People interrupt for many reasons–excitement, the desire for more details, etc. But to the person being interrupted, a stream of interruptions can feel like an interrogation. Interrupting implies impatience–and that anything the interrupter has to say is more important than what the other person was about to say.&lt;/div&gt;&lt;h3 style="color: #666666; font-family: arial, helvetica, sans-serif; font-size: 16px; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Ignoring Intuition&lt;/h3&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;A couple of years ago, a friend felt uneasy about an action his manager was taking. He couldn’t quite put his finger on why he felt concerned, but his feeling strong enough that he went to his manager–who dismissed his intuition, telling him, “Come back when you have some facts and we can have a logical argument.” But the situation outpaced data gathering and blew up.&lt;/div&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Asking for excessive proof and demanding data ensures that a whole class of complex and systemic problems won’t come to attention early.&lt;/div&gt;&lt;h3 style="color: #666666; font-family: arial, helvetica, sans-serif; font-size: 16px; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Non-verbal cues&lt;/h3&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;I coached a manager who furrowed her brow and tapped her pencil when people told her about problems. She was thinking hard. They thought she was irritated with them for brining bad news.When there’s a problem on a project, the earlier you know about it, the more options you have to mitigate the impact, make a course correction or re-set expectations. But you won’t hear about problems if you plug the information pipeline.&lt;/div&gt;&lt;blockquote style="border-left-color: rgb(165, 171, 171); border-left-style: solid; border-left-width: 1px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; margin-top: 15px; padding-bottom: 0px; padding-left: 12px; padding-right: 12px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;“The problem isn’t the problem. Coping with the problem is the problem.” – Virginia Satir&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;As much as we might wish there were no problems on projects, that’s not the way the world works. Problems are a normal part of life. Managers need to know about problems so they can see patterns, find options and steer projects.&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;Here are three things you can do to make sure your information pipeline flows:&lt;/div&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Tell people you want to hear about problems&lt;/strong&gt;. Sounds simple–and it is. Assure people that you understand that nothing goes exactly as planned and you don’t expect perfection. You may not want every problem dropped at your doorstep to solve–but if you act as if having problems is a problem, you won’t learn about impediments and issues when they are small.&lt;/div&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Learn how to listen.&amp;nbsp;&lt;/strong&gt;At a recent talk, a participant asserted that people from [fill a non-western country here] don’t know how to say “no.’” This is not true. What is true is that many Americans don’t hear it when people from different cultures say “no.” The same is true for hearing about problems. If you want to build an early warning information system, you need to learn how to listen. That means refraining from interruptions. It also means listening for less obvious cues and what isn’t being said. When there’s a long hesitation preceding a positive statement, there’s more to learn. If you don’t hear any mention of risks or issues, delve deeper.&lt;/div&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Teach people how to speak up.&lt;/strong&gt;&amp;nbsp;I don’t want to clog the information pipeline by implying that I only want to hear about problems that have ready solutions:&lt;/div&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;The most important and dangerous problems don’t have an obvious fix.Here’s a framework that has worked for me. It provides useful information and an agreed-upon format that reduces the psychological barriers to raising issues:&lt;/div&gt;&lt;blockquote style="border-left-color: rgb(165, 171, 171); border-left-style: solid; border-left-width: 1px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; margin-top: 15px; padding-bottom: 0px; padding-left: 12px; padding-right: 12px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;“Here’s my hunch…” This makes it explicit that I don’t require excessive proof.&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;“Here’s why you need to know about it…” This signals that I recognize that I don’t know everything.&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;“Here’s my data…” If there is data, it’s good to know. And I’ve heard about intuition being born out enough that “I have a bad feeling about this” is good enough for me.&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;“Here’s what I’ve considered or tried…” I do want people to think about the issue and I want to hear about their thinking. Problem solving is improved by multiple points of view.&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Standard agile practices such as visible charts, frequent demonstration of working product, and retrospectives are all ways to make both progress and problems visible. But if people don’t feel safe to bring up issues, you won’t hear about them until it’s too late. If you take the actions outlined here, it will be easier for people to bring up problems to you. Problems are part of life–and projects. Pretending otherwise creates a culture for them to hide and fester.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6780304109699047242-5210914020740401755?l=justlikeinschool.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justlikeinschool.blogspot.com/feeds/5210914020740401755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justlikeinschool.blogspot.com/2011/06/agile-blindside.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/5210914020740401755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/5210914020740401755'/><link rel='alternate' type='text/html' href='http://justlikeinschool.blogspot.com/2011/06/agile-blindside.html' title='THE AGILE BLINDSIDE'/><author><name>Dwight Ian</name><uri>http://www.blogger.com/profile/04988291284653128071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_NvVgqszEmGY/Sg-d4r_MJqI/AAAAAAAAAv4/_rhlarlNgQI/s1600-R/n1100735501_1719.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6780304109699047242.post-6633552624180009359</id><published>2011-06-06T08:00:00.000-07:00</published><updated>2011-06-06T08:00:47.280-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cellphone'/><category scheme='http://www.blogger.com/atom/ns#' term='devices'/><category scheme='http://www.blogger.com/atom/ns#' term='sensor'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Sensing the World from an Android[tm] Device  by Dale Wilson, Principal Software Engineer  Object Computing, Inc. (OCI)</title><content type='html'>&lt;h1 style="font-family: Verdana, sans-serif; text-align: center;"&gt;Sensing the World from an Android[tm] Device&lt;/h1&gt;&lt;div class="author" style="font-family: Verdana, sans-serif; text-align: center;"&gt;by&lt;br /&gt;Dale Wilson, Principal Software Engineer&lt;br /&gt;Object Computing, Inc. (OCI)&lt;/div&gt;&lt;div class="author" style="font-family: Verdana, sans-serif; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="author" style="font-family: Verdana, sans-serif; text-align: center;"&gt;&lt;/div&gt;&lt;h2 style="text-align: left;"&gt;Introduction&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;Calling it a&amp;nbsp;&lt;em&gt;mobile phone&lt;/em&gt;&amp;nbsp;is like the blind man finding the elephant's tail and thinking he's found a snake. Sure it fits in your shirt pocket, and it will let you talk to you grandmother. But that just the beginning of what this device knows how to do. It knows which way is up. It knows which way is north. It knows where it is on the planet. It knows how high it is above sea level. It knows how bright the light is around it. It knows if there is anything close to its screen. It knows how the birds can get revenge on the pigs who stole their eggs.&amp;nbsp;&lt;a href="http://xkcd.com/864/"&gt;It is truly amazing.&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;To know what's going on in the world around it, the mobile device has sensors. Programming is needed to set those sensors up properly and accept the data they produce. That's the topic for this article -- how to write programs that use those sensors. To be more specific, this article focuses on Android-based devices. Equivalent articles could be written about&amp;nbsp;&lt;a href="http://developer.apple.com/devcenter/ios/index.action"&gt;iPhone[tm]&lt;/a&gt;,&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/windowsmobile/default"&gt;Windows 7 Mobile[tm]&lt;/a&gt;,&amp;nbsp;&lt;a href="http://developer.palm.com/index.php?option=com_content&amp;amp;view=article&amp;amp;id=1788"&gt;WebOS[tm]&lt;/a&gt;, or&amp;nbsp;&lt;a href="http://us.blackberry.com/developers/"&gt;BlackBerry[tm]&lt;/a&gt;&amp;nbsp;devices, but that will have to wait for another time.&lt;/div&gt;&lt;h2 style="text-align: left;"&gt;Development Environment&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;If you are writing a program for an Android device you are probably working in Java, and you almost certainly have downloaded and installed the&amp;nbsp;&lt;a href="http://developer.android.com/sdk/index.html"&gt;free Android Software Development Kit.&lt;/a&gt;&amp;nbsp;After that you need to understand&amp;nbsp;&lt;a href="http://developer.android.com/guide/basics/what-is-android.html"&gt;the Android architecture&lt;/a&gt;. There are many ways to acquire that knowledge including taking&amp;nbsp;&lt;a href="http://www.ociweb.com/training/Android-Platform-Development"&gt;OCI's Android Platform Development Course.&lt;/a&gt;&amp;nbsp;This article will assume you have a basic understanding of Android programming.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;At the time of this writing, there are two free IDEs in common use to develop Android applications,&amp;nbsp;&lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.jetbrains.com/idea/download/"&gt;Jetbrains' IDEA Community Edition.&lt;/a&gt;&amp;nbsp;Both of them require freely available Android plug-ins to support Android development. The example program for this article was developed using IDEA.&lt;/div&gt;&lt;h2 style="text-align: left;"&gt;Getting Started -- Finding a SensorManager&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;In Android any access to a sensor starts by finding the system-wide SensorManager. This code assumes you are running in the context of an Android Activity. You need to import the Android support for sensors using the following statements:&lt;/div&gt;&lt;pre style="font-family: 'Courier New', monospace;" xml:space="preserve"&gt;import android.hardware.Sensor;&lt;br /&gt;    import android.hardware.SensorEvent;&lt;br /&gt;    import android.hardware.SensorEventListener;&lt;br /&gt;    import android.hardware.SensorManager;&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;Now the following code will find the SensorManager:&lt;/div&gt;&lt;pre style="font-family: 'Courier New', monospace;" xml:space="preserve"&gt;SensorManager sensorManager =&lt;br /&gt;        (SensorManager)getSystemService(SENSOR_SERVICE);&lt;br /&gt;&lt;/pre&gt;&lt;h2 style="text-align: left;"&gt;Finding a Sensor&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;Every model of Android device will have a different set of sensors. Before using any of the sensors described here, you need to check to be sure the sensor is available. You can use the SensorManager to discover what sensors are available on this device or to find a particular sensor. There are two methods available to help:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;SensorManager.getSensorList(type_specifier)&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;will return a list of all the sensors of a particular type.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;SensorManager.getDefaultSensor(type_specifier)&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;will return a single sensor - the default sensor for a particular type.&lt;br /&gt;Be sure to check for a&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;null&lt;/code&gt;&amp;nbsp;return! It means no sensor of the requested type is available.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;The type_specifer is one of the constants defined in the Sensor class. From now on, I'll refer to this as&amp;nbsp;&lt;strong&gt;Sensor.TYPE&lt;/strong&gt;&amp;nbsp;but this is not a class or an enumerated value. It is just a set of integer constants with similar names.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Possible Sensor.TYPEs include:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;TYPE_ACCELEROMETER&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;TYPE_GRAVITY&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;TYPE_GYROSCOPE&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;TYPE_LIGHT&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;TYPE_LINEAR_ACCELERATION&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;TYPE_MAGNETIC_FIELD&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;TYPE_PRESSURE&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;TYPE_PROXIMITY&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;TYPE_ROTATION_VECTOR&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;TYPE_TEMPERATURE&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;When you are using the&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;getSensorList()&lt;/code&gt;&amp;nbsp;method, these values may be combined with an OR operator to include more than one type of sensor. There is also a special Sensor.TYPE,&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;TYPE_ALL&lt;/code&gt;, that when used with&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;getSensorList()&lt;/code&gt;&amp;nbsp;will return a list of all the sensors on the mobile device. We will use that in our example program. For normal use, however, you probably want to call&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;getDefaultSensor()&lt;/code&gt;&amp;nbsp;with a specific type.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;As an example, let's suppose you are writing a compass application. You want to use the magnetic field sensor in your phone to determine which way is north. To gain access to that sensor, use the following code:&lt;/div&gt;&lt;pre style="font-family: 'Courier New', monospace;" xml:space="preserve"&gt;Sensor magMeter =&lt;br /&gt;        sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;There are some interesting points here. First of all there is no special Java class for the different types of sensors. The class Sensor provides a generic interface that is assumed to be flexible enough to support the requirements of any of the sensor types on the device.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The second point of interest is not obvious. There is a sensor type which is not included in the above list,&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;TYPE_ORIENTATION&lt;/code&gt;. It is omitted from this list even though it's defined in the Android source code and documentation because Android has deprecated this Sensor.TYPE. Instead the SensorManager provides specialized support for orientation sensors. This orientation support is described later in this article.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Other features of the device such as the camera or gobal position sensor are supported through different APIs. They will have to wait for another article.&lt;/div&gt;&lt;h2 style="text-align: left;"&gt;Using a Sensor&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;So now that we have a Sensor, what can we do with it? The surprising answer is, "Not much." The Sensor object itself serves two purposes.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;It provides information about the sensor: Who makes it? How much power does it consume? How accurate is it?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;It serves as a handle or identifier for the sensor if you want to talk about it to other parts of the system.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Notably missing from the sensor's interface is any way to read values from the sensor! As we'll see in a minute, that job is handled by the SensorManager.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Also missing is information about how many values the sensor provides. Does it give a single value or a 3-D vector? What units of measure does it use? And so on. For that information you need to go to the Android documentation.&amp;nbsp;&lt;a href="http://developer.android.com/reference/android/hardware/SensorEvent.html"&gt;The SensorEvent page&lt;/a&gt;&amp;nbsp;in particular tells you for each Sensor.TYPE how many and what types of values you can expect.&lt;/div&gt;&lt;h2 style="text-align: left;"&gt;Reading Data from a Sensor&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;Assuming we don't really care who makes the sensor or how much power it consumes, but that we are interested in the values provided by the sensor, what's the next step? To read values from the sensor, we have to create an object that implements the SensorEventListener interface. [Aside: there is also an earlier, deprecated, interface named SensorListener - ignore it!]&lt;/div&gt;&lt;div style="text-align: justify;"&gt;We can then register our SensorEventListener and the Sensor object to the SensorManager. This does two things. It enables the sensor if it was turned off, and it provides a call-back function that the SensorManager can use when a new value is available from the sensor.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Here is the code that creates a SensorEventListener and provides implementations for the two abstract methods in the interface. These implementations just forward the call to corresponding methods in the containing object.&lt;/div&gt;&lt;pre style="font-family: 'Courier New', monospace;" xml:space="preserve"&gt;SensorEventListener magneticEventListener =&lt;br /&gt;     new SensorEventListener() {&lt;br /&gt;        public void onSensorChanged(SensorEvent sensorEvent) {&lt;br /&gt;            // call a method in containing class&lt;br /&gt;            magneticFieldChanged(sensorEvent);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public void onAccuracyChanged(&lt;br /&gt;            Sensor sensor, int accuracy) {&lt;br /&gt;            // call a method in containing class&lt;br /&gt;            magneticFieldAccuracyChanged(sensor, accuracy);&lt;br /&gt;        }&lt;br /&gt;     };&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;Having created a SensorEventListener, the program should register it with the SensorManager using code like this:&lt;/div&gt;&lt;pre style="font-family: 'Courier New', monospace;" xml:space="preserve"&gt;sensorManager.registerListener(magneticEventListener, magMeter, SensorManager.SENSOR_DELAY_NORMAL);&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;This SensorEventListener will now receive events from the magMeter Sensor acquired earlier.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The third argument to&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;SensorManager.registerListener()&lt;/code&gt;&amp;nbsp;is a suggestion about how often the application would like to receive new values. Possible delay values from fastest to slowest are:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;SENSOR_DELAY_FASTEST,&lt;/li&gt;&lt;li&gt;SENSOR_DELAY_GAME,&lt;/li&gt;&lt;li&gt;SENSOR_DELAY_UI, and&lt;/li&gt;&lt;li&gt;SENSOR_DELAY_NORMAL.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Faster speeds cause more overhead, but make the device more responsive to changes in the values detected by the sensor.&lt;/div&gt;&lt;h2 style="text-align: left;"&gt;Housekeeping and Good Citizenship&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;Just as important as registering a SensorEventListener and enabling the sensor is disabling the sensor and unregistering the listener when it is no longer needed. Registering and unregistering should be handled as "bookends" so if you add the above code in your Activity's&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;onResume()&lt;/code&gt;&amp;nbsp;method (a good place for it) be sure to add this code to the&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;onPause()&lt;/code&gt;&amp;nbsp;method.&lt;/div&gt;&lt;pre style="font-family: 'Courier New', monospace;" xml:space="preserve"&gt;sensorManager.unregisterListener(magneticEventListener, magMeter);&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;That will ensure that the device is turned off -- prolonging battery life. Even though most sensors can be shared, unregistering the listener when it is no longer needed will also make sure the sensor is available to other applications that may run on the device.&lt;/div&gt;&lt;h2 style="text-align: left;"&gt;Handling Sensor Accuracy&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;Notice that there are two callback methods defined in SensorEventListener:&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;onSensorChanged()&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;onAccuracyChanged()&lt;/code&gt;. We will discuss&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;onAccuracyChanged()&lt;/code&gt;first.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;As the name implies, this callback occurs when something has increased or decreased the expected accuracy of the values produced by this sensor. The integer argument will be one of the following values - in order from least to most accurate:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;SENSOR_STATUS_UNRELIABLE means that the values cannot be trusted. Something is preventing the sensor from acquiring accurate readings, so any reported values are just wrong.&lt;/li&gt;&lt;li&gt;SENSOR_STATUS_ACCURACY_LOW means that the values are correct, but not very accurate.&lt;/li&gt;&lt;li&gt;SENSOR_STATUS_ACCURACY_MEDIUM means the values are fairly accurate, but they are not the best that this sensor is capable of under ideal conditions.&lt;/li&gt;&lt;li&gt;SENSOR_STATUS_ACCURACY_HIGH means the sensor is producing the best values it can produce under excellent operating conditions.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Unfortunately, there seem to be some devices that always report SENSOR_STATUS_UNRELIABLE and others that always report SENSOR_STATUS_ACCURACY_HIGH. Don't place too much confidence in the accuracy status.&lt;/div&gt;&lt;h2 style="text-align: left;"&gt;Using the Sensor Data&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;Finally, we are ready to discuss the interesting callback --&amp;nbsp;&lt;strong&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;onSensorChanged()&lt;/code&gt;&lt;/strong&gt;. The argument passed when this method is called is a SensorEvent structure. This structure contains real data from the sensor. Let's see what we've got.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I described SensorEvent as a structure. Technically it's a Java class, but this class does not have any useful methods - only public data members (fields).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The first field is one we've already seen:&amp;nbsp;&lt;strong&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;int accuracy&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;will contain one of the same values as the argument to&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;onAccuracyChanged()&lt;/code&gt;&amp;nbsp;method. Thus for each sample of data from the sensor you know how accurate you can expect the data to be. For practical purposes you might be able to ignore the&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;onAccuracyChanged()&lt;/code&gt;notice altogether and just use this value from the SensorEvent although you still must implement the abstract&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;onAccuracyChanged()&lt;/code&gt;&amp;nbsp;method.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The next field is&amp;nbsp;&lt;strong&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;Sensor sensor&lt;/code&gt;&lt;/strong&gt;. This is the same Sensor that we used to register this callback. It is included in case we have common code handling the events from more than one Sensor.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The third field is&amp;nbsp;&lt;strong&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;long timestamp&lt;/code&gt;&lt;/strong&gt;. It tells us when this event occurred. A timestamp in Android has a resolution in nanoseconds. It is based on the most precise timer on the device, but it is not tied to any particular real world clock. This timestamp can be used to calculate the interval between events, but not to determine the time of day (or month or year) when the event occurred.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The last field in the SensorEvent is&amp;nbsp;&lt;strong&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;float[] values&lt;/code&gt;&lt;/strong&gt;. Yes, these are the values we are looking for. Most sensors will produce either one or three values in this array. The array in the SensorEvent is of a fixed size. It usually contains three floats even if the sensor produces fewer numbers. Be careful. Sometimes this array will have a size different from three.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The best approach is to use the Sensor.TYPE available via&amp;nbsp;&lt;strong&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;sensor.getType()&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;to determine how many values are valid. The Sensor.TYPE also determines what units of measurement apply to this sensor. Fortunately Android has normalized the incoming sensor values so all sensors of the same type produce the same number of values using the same units.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Of course if you know what type of sensor you are working with you may not even need to check&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;sensor.getType()&lt;/code&gt;. You can just write your code to handle the values you know you will receive.&lt;/div&gt;&lt;h2 style="text-align: left;"&gt;Coordinates&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;Many of the sensors provide a three dimensional vector for the measured value. They provide value for the x-axis, the y-axis, and the z-axis as values[0], values[1], and values[2] respectively. Now all you need to know is the relationship of these axes to the actual device.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;To simplify matters, all devices use the same axes albeit with different units. The axes are firmly attached to the device. If you move the device, the coordinate axes move right along with it.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Every device has a natural orientation. For most phones the natural orientation is portrait (taller than it is wide). For most tablets, on the other hand, the natural orientation is landscape (wider than taller). The axes for the device are based on this natural orientation.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The origin of the axes -- point (0,0,0) -- is in the center of the device's screen.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;If you hold the device vertically in it's natural orientation the x axis runs left to right across the center of the screen. Positive values are to your right and negative points are to your left.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The y axis runs up and down in natural orientation. Positive values are up and negative values are down.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;When you stare straight at the screen you are looking along the z axis. Negative values are behind the screen and positive values are in front.&lt;/div&gt;&lt;h2 style="text-align: left;"&gt;Orientation&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;As mentioned previously, using the results from the orientation sensor directly through the SensorManager interface has been deprecated in Android. Instead, there is a different way to determine the orientation of the device.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;What you want to know is not really how the device is being held, but rather what screen orientation Android is using. Interpreting the values received from the orientation sensor is only a small part of the puzzle. There are techniques an application can use to lock the screen into a particular orientation or to change orientations under program control regardless of the way the device is actually being held.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;For the program presented in this article, we want to display the sensor data visually on the screen. In order to do so, the coordinates returned by the sensors have to be mapped into the coordinates used to draw on the screen.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The 2-D drawing coordinates are relative to the upper right corner. This means the Y values on the screen increase from top to bottom, but the Y values from the sensor increase from bottom to top. To reconcile sensor coordinates to drawing coordinates the Y values must be negated.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;After this correction, the coordinates need to be rotated around the Z axis. Because the only orientations involve some number of ninety degree rotations, this can always be done by various combinations of swapping and/or negating X and Y coordinates.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Finally, the coordinates have to be scaled properly to match the size of the screen. There are a number of techniques for doing that including using the coordinate transformation matrix built into the Android View (which could handle the orientation-mapping, too), but the details are beyond the scope of this article. See the source code for one way to scale the coordinates.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;But before any of this rotation can happen, the software needs to know the screen orientation Here's the code to find that out:&lt;/div&gt;&lt;pre style="font-family: 'Courier New', monospace;"&gt;Display display = ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();&lt;br /&gt;    int orientation = display.getOrientation();&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;At this point the variable&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;orientation&lt;/code&gt;&amp;nbsp;contains one of the following values:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;Surface.ROTATION_0&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;This is the natural orientation of the device. Notice that for a phone this will be portrait mode, but for a tablet it will be landscape mode.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;Surface.ROTATION_90&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;This is the normal landscape mode for a phone, or portrait mode for a tablet.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;Surface.ROTATION_180&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;The device is upside down.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;code style="font-family: 'Courier New', monospace;"&gt;Surface.ROTATION_270&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;The device has been turned "the unexpected direction."&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;h2 style="text-align: left;"&gt;A Working Application&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;So let's put this all together in a working application. The source code associated with this article includes a complete Android project consisting of three Activities.&lt;/div&gt;&lt;ul&gt;&lt;li&gt;The first Activity displays all sensors reported by the SensorManager.&lt;br /&gt;Touching the name of any sensor gets you to the second Activity.&lt;/li&gt;&lt;li&gt;The second Activity displays the details for a particular sensor. It registers to receive updates from the sensor, and displays the resulting values.&lt;br /&gt;Hitting the menu button while this Activity is showing gives you the option of displaying the final activity.&lt;/li&gt;&lt;li&gt;The final activity displays the readings from the sensor you have selected as a vector on the screen. Of course this only makes sense for a device that returns three coordinates, but the program as written doesn't check for that. Expect strange results if you use this option for a single-valued sensor.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Here's what it looks like running on a Samsung Epic[tm]:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;img alt="Android Screen Shot: List of devices" src="http://sett.ociweb.com/sett/settApr2011_files/Android_Sensors_Explorer.png" /&gt;&lt;br /&gt;&lt;strong&gt;Screen 1:&lt;/strong&gt;&amp;nbsp;The first Activity shows a list of sensors returned from&amp;nbsp;&lt;code style="font-family: 'Courier New', monospace;"&gt;SensornManager.getSensorList(Sensor.TYPE_ALL)&lt;/code&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Even though using Orientation Sensor as a Sensor object is deprecated, it still shows up on this list.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;img alt="Android Screen Shot: Accelerometer detail" src="http://sett.ociweb.com/sett/settApr2011_files/Android_Sensors_Accelerometer.png" /&gt;&lt;br /&gt;&lt;strong&gt;Screen 2:&lt;/strong&gt;&amp;nbsp;Selecting SMB380 from the opening screen gets this information about the accelerometer.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;It is interesting to note that even when it is setting motionless on a table, the accelerometer reports an acceleration of over 10.3 m/sec&lt;sup&gt;2&lt;/sup&gt;. This is acceleration due to gravity. But wait! Back in physics class we learned that acceleration due to gravity was 9.8 m/sec&lt;sup&gt;2&lt;/sup&gt;. The moral here is that real world sensors (not just the ones built into mobile phones) usually need to be calibrated.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Also worth noting is that this sensor always reports an accuracy of 0 (meaning unreliable.) This accuracy status itself is unreliable! Except for the calibration issue, the accelerator on this device is quite accurate.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;img alt="Android Screen Shot: Proximity sensor detail" src="http://sett.ociweb.com/sett/settApr2011_files/Android_Sensors_Proximity.png" /&gt;&lt;br /&gt;&lt;strong&gt;Screen 3:&lt;/strong&gt;&amp;nbsp;The proximity sensor only returns one value.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The only values returned by the proximity sensor on the Epic are 0.0 and 1.0. Software can tell if there's something close to the screen or not, but it can't really tell how far away it is. The moral of the story is not every sensor fits comfortably in the generic Sensor model supported by Android.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;img alt="Android Screen Shot: Accelerometer as a vector (Portrait)" src="http://sett.ociweb.com/sett/settApr2011_files/Android_Sensors_Vector_Portrait.png" /&gt;&lt;br /&gt;&lt;strong&gt;Screen 4:&lt;/strong&gt;&amp;nbsp;Accelerometer values as a vector (portrait mode).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;img alt="Android Screen Shot: Accelerometer as a vector (Landscape)" src="http://sett.ociweb.com/sett/settApr2011_files/Android_Sensors_Vector_Landscape.png" /&gt;&lt;br /&gt;&lt;strong&gt;Screen 5:&lt;/strong&gt;&amp;nbsp;Accelerometer values as a vector (landscape mode).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;These two screen shots show the readings from the accelerometer displayed as a vector. Because the sensor coordinates are tied to the device, but the screen coordinates change when the display switches to landscape mode, the software has to check the orientation to map vector onto the screen.&lt;/div&gt;&lt;h2 style="text-align: left;"&gt;Conclusions&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;Android makes it easy to access the sensors on the mobile device by normalizing the sensor's behavior and data into a common model. There are a few issues, however, that cannot be hidden from the application.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Not all sensors support all of the properties exposed by the Sensor object - for example the Bosch accelerometer shown on the screen shot above does not report how much current it uses.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Also not all devices return the types of data expected by Android. The units for a proximity sensor are expected to be centimeters, but the one shown above provides a yes/no answer to the question, "Is there something close to the screen?"&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In spite of these limits, making an application aware of the world around it via the sensors in the mobile device is a relatively easy task that can potentially produce very useful behaviors from the application.&lt;/div&gt;&lt;h2 style="text-align: left;"&gt;Source Code&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;The source code for this example application can be downloaded from the OCI Software Engineering Tech Trends web site as&amp;nbsp;&lt;a href="http://sett.ociweb.com/sett/settApr2011_files/Sensors_20110227.zip"&gt;a zip file&lt;/a&gt;, or&amp;nbsp;&lt;a href="http://sett.ociweb.com/sett/settApr2011_files/Sensors_20110227.tar.gz"&gt;a tar.gz file&lt;/a&gt;&amp;nbsp;It is a complete Android project that can be built and run in the Android Emulator or installed directly into a device via the USB Debugging port. Because IDEA was used to develop this project, Eclipse users might have do do a little extra work to import this project, but if you are familar with the Android development environment it should be straightforward.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The download files also include Sensor.apk, a pre-built copy of the Sensors application ready to be loaded into your Android phone. If you would like to regenerate this signed application, the password for the digital signature (included in the "assets" directory) is "sensors".&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The source code is covered by a liberal BSD-style license. This makes it available for any use, commercial or otherwise, with proper attribution.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;If you are interested in moving beyond this simple application to explore the possibilities of harnessing the power of Android for your organization's needs, please contact us to ask about the wide variety of support and training available from OCI.&lt;/div&gt;&lt;h2 style="text-align: left;"&gt;References&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://xkcd.com/864/"&gt;XKCD is worth visiting every Monday, Wednesday, and Friday. (http://xkcd.com/864)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/devcenter/ios/index.action"&gt;Information about developing software for iPhone[tm] phones (http://developer.apple.com/devcenter/ios/index.action)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/windowsmobile/default"&gt;Information about developing software for Windows 7 Phone[tm] (http://msdn.microsoft.com/en-us/windowsmobile/default)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.palm.com/index.php?option=com_content&amp;amp;view=article&amp;amp;id=1788"&gt;Information about developing software for WebOS[tm] (http://developer.palm.com/index.php?option=com_content&amp;amp;view=article&amp;amp;id=1788)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://us.blackberry.com/developers/"&gt;Information about developing software for BlackBerry (http://us.blackberry.com/developers/)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.android.com/sdk/index.html"&gt;Where to download the Android Software Development Kit. (http://developer.android.com/sdk/index.html)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.android.com/guide/basics/what-is-android.html"&gt;A description of the Android architecture (http://developer.android.com/guide/basics/what-is-android.html)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ociweb.com/training/Android-Platform-Development"&gt;OCI's Android Platform Development Course. (http://www.ociweb.com/training/Android-Platform-Development)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/"&gt;Information about the Eclipse IDE (http://www.eclipse.org/&amp;gt;)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jetbrains.com/idea/download/"&gt;Information about Jetbrains' IDEA (http://www.jetbrains.com/idea/download/)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.android.com/reference/android/hardware/SensorEvent.html"&gt;Details about the values available from different types of sensors. (http://developer.android.com/reference/android/hardware/SensorEvent.html)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://sett.ociweb.com/sett/settApr2011_files/Sensors_20110227.tar.gz"&gt;Download the source code for this article (tar.gz). (http://sett.ociweb.com/sett/settApr2011_files/Sensors_20110227.tar.gz)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://sett.ociweb.com/sett/settApr2011_files/Sensors_20110227.tar.gz"&gt;Download the source code for this article (zip). (http://sett.ociweb.com/sett/settApr2011_files/Sensors_20110227.zip)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;hr style="background-color: transparent; color: #113b56; height: 1px;" /&gt;&lt;div style="text-align: justify;"&gt;The JNB has a new name! The new "Software Engineering Tech Trends" will continue to cover Java and related technologies but will also address the broader spectrum of relevant technologies available today.&lt;/div&gt;&lt;hr style="background-color: transparent; color: #113b56; height: 1px;" /&gt;&lt;h2 id="ocieducationalservices" style="text-align: left;"&gt;OCI Educational Services&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;OCI is the leading provider of Object Oriented technology training in the Midwest. More than 3,000 students participated in our training program over the last 12 months. Targeted toward Software Engineers and the development community, our extensive program of&amp;nbsp;&lt;a href="http://www.ociweb.com/education/course-catalog"&gt;over 50 hands-on workshops&lt;/a&gt;&amp;nbsp;is delivered to corporations and individuals throughout the U.S. and internationally. OCI's Educational Services include&amp;nbsp;&lt;a href="http://www.ociweb.com/training/private"&gt;Group Training&lt;/a&gt;&amp;nbsp;events and&amp;nbsp;&lt;a href="http://www.ociweb.com/training/public"&gt;Open Enrollment classes&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;For further information regarding OCI's Educational Services programs, please visit our&amp;nbsp;&lt;a href="http://www.ociweb.com/education"&gt;Educational Services&lt;/a&gt;&amp;nbsp;section on this site or contact us at&amp;nbsp;&lt;a href="mailto:training@ociweb.com"&gt;training@ociweb.com&lt;/a&gt;.&lt;/div&gt;&lt;h2 id="ociservices" style="text-align: left;"&gt;OCI Services&lt;/h2&gt;&lt;div style="text-align: justify;"&gt;OCI offers real, cost effective, open source support for the JBoss.org software and its suite of associated products. OCI has re-distribution friendly downloads at&lt;a href="http://jboss.ociweb.com/"&gt;http://jboss.ociweb.com/&lt;/a&gt;&amp;nbsp;and provides support on a time and materials basis, (not CPU count.).&lt;/div&gt;&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.youtube.com/ocitv"&gt;&lt;img alt="Fun People Doing Serious Software Engineering" height="87" moz-do-not-send="true" src="http://sett.ociweb.com/sett/settimages/ocitv.jpg" width="80" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;hr style="background-color: transparent; color: #113b56; height: 1px;" /&gt;&lt;div class="footer" style="text-align: justify;"&gt;&lt;strong&gt;Object Computing, Inc.&lt;/strong&gt;&amp;nbsp;is located in St. Louis, MO and a Member of the Object Management Group, OMG. OCI specializes in distributed computing using object-oriented and web-enabled technologies and provides&amp;nbsp;&lt;a href="http://www.ociweb.com/consulting/index.html"&gt;Consulting&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.ociweb.com/education/index.html"&gt;Education&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.ociweb.com/product/index.html"&gt;Product Development&lt;/a&gt;&amp;nbsp;services to clients nation-wide. For more information contact us in St. Louis, MO (314)579-0066, Tempe, AZ (480)752-0042 or email&amp;nbsp;&lt;a href="mailto:info@ociweb.com"&gt;info@ociweb.com&lt;/a&gt;.&lt;/div&gt;&lt;div class="footer" style="text-align: justify;"&gt;Inquiries regarding&amp;nbsp;&lt;a class="career" href="http://www.ociweb.com/careers/index.html" style="font-weight: bold;"&gt;Career Opportunities&lt;/a&gt;&amp;nbsp;can be directed to:&amp;nbsp;&lt;a href="mailto:hr@ociweb.com"&gt;hr@ociweb.com&lt;/a&gt;.&lt;/div&gt;&lt;div class="footer" style="text-align: justify;"&gt;The&amp;nbsp;&lt;em&gt;&lt;strong&gt;Software Engineering Tech Trends&lt;/strong&gt;&amp;nbsp;&lt;/em&gt;is a monthly newsletter. The purpose and intent of this publication is to provide timely information about a broad spectrum of technologies and announce available OCI educational services. The following links let you&amp;nbsp;&lt;a href="mailto:sett-join@ociweb.com"&gt;subscribe (mailto:sett-join@ociweb.com)&lt;/a&gt;&amp;nbsp;or&amp;nbsp;&lt;a href="mailto:sett-leave@ociweb.com"&gt;unsubscribe (mailto:sett-leave@ociweb.com&amp;gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="footer" style="text-align: justify;"&gt;Copyright ©2008-2011. Object Computing, Inc. All rights reserved.&lt;br /&gt;&lt;br /&gt;Android is a trademark of Google Inc. Use of this trademark is subject to&amp;nbsp;&lt;a href="http://www.google.com/permissions/index.html"&gt;Google Permissions.&lt;/a&gt;&lt;br /&gt;Java and all Java-based marks are trademarks or registered trademarks of Oracle Corporation.&lt;br /&gt;&lt;br /&gt;.NET, C#, and .NET-based marks are trademarks or registered trademarks of Microsoft Corporation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6780304109699047242-6633552624180009359?l=justlikeinschool.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justlikeinschool.blogspot.com/feeds/6633552624180009359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justlikeinschool.blogspot.com/2011/06/sensing-world-from-androidtm-device-by.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/6633552624180009359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/6633552624180009359'/><link rel='alternate' type='text/html' href='http://justlikeinschool.blogspot.com/2011/06/sensing-world-from-androidtm-device-by.html' title='Sensing the World from an Android[tm] Device  by Dale Wilson, Principal Software Engineer  Object Computing, Inc. (OCI)'/><author><name>Dwight Ian</name><uri>http://www.blogger.com/profile/04988291284653128071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_NvVgqszEmGY/Sg-d4r_MJqI/AAAAAAAAAv4/_rhlarlNgQI/s1600-R/n1100735501_1719.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6780304109699047242.post-8134697447944249828</id><published>2011-06-05T04:34:00.000-07:00</published><updated>2011-06-05T04:34:13.825-07:00</updated><title type='text'>http://links.visibli.com/share/TzhYxL</title><content type='html'>&lt;h1 style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; font: normal normal normal 24px/26px Georgia, 'Times New Roman', serif; line-height: 20px; margin-bottom: 6px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Java Tip 136: Protect Web application control flow&lt;/h1&gt;&lt;h3 style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;A strategy built on Struts manages duplicate form submission&lt;/h3&gt;&lt;div class="byline" style="color: #666666; font-family: Arial, Helvetica, sans-serif; font-size: 11px; line-height: normal; margin-bottom: 17px; margin-top: 0px;"&gt;By&amp;nbsp;Romain Guay,&amp;nbsp;JavaWorld.com,&amp;nbsp;03/14/03&lt;/div&gt;&lt;div class="byline" style="color: #666666; font-family: Arial, Helvetica, sans-serif; font-size: 11px; line-height: normal; margin-bottom: 17px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="byline" style="color: #666666; font-family: Arial, Helvetica, sans-serif; font-size: 11px; line-height: normal; margin-bottom: 17px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-size: 12px; line-height: 20px;"&gt;Web application designers and programmers often face situations where a form submission must be protected against a rupture in the normal control flow sequence. This situation typically occurs when a user clicks more than once on a submit button before the response is sent back or when a client accesses a view by returning to a previously bookmarked page. Control flow sequence is particularly important to preserve when form submission involves transaction processing on the server.&amp;nbsp;&lt;br style="height: 0px; line-height: 0px;" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 14px; line-height: 20px; margin-bottom: 10px; margin-top: 10px;"&gt;This article proposes a well-encapsulated solution to this problem: a strategy implemented as an abstract class that leverages the Struts framework.&lt;/div&gt;&lt;div style="font-size: 14px; line-height: 20px; margin-bottom: 10px; margin-top: 10px;"&gt;&lt;strong style="font-size: 14px; line-height: 20px; margin-bottom: 10px; margin-top: 10px;"&gt;Note:&lt;/strong&gt;&amp;nbsp;You can download this article's source code from&amp;nbsp;&lt;a href="http://www.javaworld.com/javaworld/javatips/jw-javatip136.html#resources" style="color: #035a87; text-decoration: none;"&gt;Resources&lt;/a&gt;.&lt;/div&gt;&lt;h3 style="font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Client vs. server solutions&lt;/h3&gt;&lt;div style="font-size: 14px; line-height: 20px; margin-bottom: 10px; margin-top: 10px;"&gt;Different solutions can solve this multiple form submission situation. Some transactional sites simply warn the user to wait for a response after submitting and not to submit twice. More sophisticated solutions involve either client scripting or server programming.&lt;/div&gt;&lt;div style="font-size: 14px; line-height: 20px; margin-bottom: 10px; margin-top: 10px;"&gt;In the client-only strategy, a flag is set on the first submission, and, from then on, the submit button is disabled based on this flag. While appropriate in some situations, this strategy is more or less browser dependent and not as dependable as server solutions.&lt;/div&gt;&lt;div style="font-size: 14px; line-height: 20px; margin-bottom: 10px; margin-top: 10px;"&gt;For a server-based solution, the Synchronizer Token pattern (from&lt;a href="http://www.javaworld.com/javaworld/javatips/jw-javatip136.html#resources" style="color: #035a87; text-decoration: none;"&gt;Core J2EE Patterns&lt;/a&gt;) can be applied, which requires minimal contribution from the client side. The basic idea is to set a token in a session variable before returning a transactional page to the client. This page carries the token inside a hidden field. Upon submission, request processing first tests for the presence of a valid token in the request parameter by comparing it with the one registered in the session. If the token is valid, processing can continue normally, otherwise an alternate course of action is taken. After testing, the token resets to null to prevent subsequent submissions until a new token is saved in the session, which must be done at the appropriate time based on the desired application flow of control. In other words, the one-time privilege to submit data is given to one specific instance of a view. This Synchronizer Token pattern is used in the Apache Jakarta Project's Struts framework, the popular open source Model-View-Controller implementation.&lt;/div&gt;&lt;h3 style="font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;A synchronized action&lt;/h3&gt;&lt;div style="font-size: 14px; line-height: 20px; margin-bottom: 10px; margin-top: 10px;"&gt;Based on the above, the solution appears complete. But an element is missing: how do we specify/implement the alternate course of action when an invalid token is detected. In fact, given the case where the submit button is reclicked, the second request will cause the loss of the first response containing the expected result. The thread that executes the first request still runs, but has no means of providing its response to the browser. Hence, the user may be left with the impression that the transaction did not complete, while in reality, it may have successfully completed.&lt;/div&gt;&lt;div style="font-size: 14px; line-height: 20px; margin-bottom: 10px; margin-top: 10px;"&gt;This tip's proposed strategy builds on the Struts framework to provide a complete solution that prevents duplicate submission and still ensures the display of a response that represents the original request's outcome. The proposed implementation involves the abstract class&amp;nbsp;&lt;code style="font-size: small; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;SynchroAction&lt;/code&gt;, which actions can extend to behave in the specified synchronized manner. This class overrides the&amp;nbsp;&lt;code style="font-size: small; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Action.perform()&lt;/code&gt;&amp;nbsp;method and provides an abstract&amp;nbsp;&lt;code style="font-size: small; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;performSynchro()&lt;/code&gt;&amp;nbsp;method with the same arguments. The original perform method dispatches control according to the synchronization status, as shown in the listing below:&lt;/div&gt;&lt;div style="font-size: 14px; line-height: 20px; margin-bottom: 10px; margin-top: 10px;"&gt;&lt;a href="http://links.visibli.com/share/TzhYxL"&gt;http://links.visibli.com/share/TzhYxL&lt;/a&gt;&lt;/div&gt;&lt;div style="font-size: 14px; line-height: 20px; margin-bottom: 10px; margin-top: 10px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6780304109699047242-8134697447944249828?l=justlikeinschool.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justlikeinschool.blogspot.com/feeds/8134697447944249828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justlikeinschool.blogspot.com/2011/06/httplinksvisiblicomsharetzhyxl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/8134697447944249828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/8134697447944249828'/><link rel='alternate' type='text/html' href='http://justlikeinschool.blogspot.com/2011/06/httplinksvisiblicomsharetzhyxl.html' title='http://links.visibli.com/share/TzhYxL'/><author><name>Dwight Ian</name><uri>http://www.blogger.com/profile/04988291284653128071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_NvVgqszEmGY/Sg-d4r_MJqI/AAAAAAAAAv4/_rhlarlNgQI/s1600-R/n1100735501_1719.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6780304109699047242.post-6999339146050457306</id><published>2011-06-05T04:31:00.000-07:00</published><updated>2011-06-05T04:31:13.509-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apps'/><category scheme='http://www.blogger.com/atom/ns#' term='tv'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Android Futures: Creating Android Apps For Google TV</title><content type='html'>&lt;span class="Apple-style-span" style="color: #575757; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 21px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="tut_bottom" style="background-attachment: initial; background-clip: initial; background-color: #fcfcfc; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(224, 224, 224); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(224, 224, 224); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(224, 224, 224); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(224, 224, 224); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: -1px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 30px; padding-left: 40px; padding-right: 40px; padding-top: 10px; vertical-align: baseline; width: 672px;"&gt;&lt;div class="tutorial_details" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #383838; float: left; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 20px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 20px; vertical-align: baseline; width: 250px;"&gt;&lt;h5 style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #a96d00; font-family: Helvetica, Arial; font-size: 14px; font-style: inherit; font-weight: bold; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 5px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-shadow: rgb(255, 255, 255) 0px 1px 0px; vertical-align: baseline;"&gt;Tutorial Details&lt;/h5&gt;&lt;ul style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; list-style-image: initial; list-style-position: initial; list-style-type: none; margin-bottom: 15px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://mobile.tutsplus.com/wp-content/themes/tuts/images/global/li.gif); background-origin: initial; background-position: 0px 8px; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 5px; margin-right: 0px !important; margin-top: 0px !important; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px !important; padding-left: 35px; padding-right: 0px !important; padding-top: 0px !important; vertical-align: baseline;"&gt;&lt;strong style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Technology:&amp;nbsp;&lt;/strong&gt;Android SDK&lt;/li&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://mobile.tutsplus.com/wp-content/themes/tuts/images/global/li.gif); background-origin: initial; background-position: 0px 8px; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 5px; margin-right: 0px !important; margin-top: 0px !important; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px !important; padding-left: 35px; padding-right: 0px !important; padding-top: 0px !important; vertical-align: baseline;"&gt;&lt;strong style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Difficulty:&amp;nbsp;&lt;/strong&gt;Beginner&lt;/li&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://mobile.tutsplus.com/wp-content/themes/tuts/images/global/li.gif); background-origin: initial; background-position: 0px 8px; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 5px; margin-right: 0px !important; margin-top: 0px !important; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px !important; padding-left: 35px; padding-right: 0px !important; padding-top: 0px !important; vertical-align: baseline;"&gt;&lt;strong style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-family: inherit; font-size: 13px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Estimated Completion Time:&amp;nbsp;&lt;/strong&gt;20 Minutes&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="article_social_media" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; float: left; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 20px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 14px; position: relative; vertical-align: baseline; width: 110px;"&gt;&lt;div class="tweetmeme_btn" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; float: left; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; height: 24px; margin-bottom: 5px; margin-left: 0px; margin-right: 10px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline; width: 110px;"&gt;&lt;iframe allowtransparency="true" class="twitter-share-button twitter-count-none" frameborder="0" scrolling="no" src="http://platform0.twitter.com/widgets/tweet_button.html?_=1307273412935&amp;amp;count=none&amp;amp;id=twitter_tweet_button_0&amp;amp;lang=en&amp;amp;original_referer=http%3A%2F%2Fmobile.tutsplus.com%2Ftutorials%2Fandroid%2Fandroid-futures-creating-android-apps-for-google-tv%2F&amp;amp;text=Android%20Futures%3A%20Creating%20Android%20Apps%20For%20Google%20TV&amp;amp;url=http%3A%2F%2Fmobile.tutsplus.com%2Ftutorials%2Fandroid%2Fandroid-futures-creating-android-apps-for-google-tv%2F" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline; width: 55px;" title="Twitter For Websites: Tweet Button"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class="facebook_send_btn" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 7px; margin-left: 0px; margin-right: 10px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;fb:send href="http%3A%2F%2Fmobile.tutsplus.com%2Ftutorials%2Fandroid%2Fandroid-futures-creating-android-apps-for-google-tv%2F"&gt;&lt;/fb:send&gt;&lt;/div&gt;&lt;div class="facebook_btn" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; float: left; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; height: 24px; margin-bottom: 3px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline; width: 110px;"&gt;&lt;fb:like height="21" layout="button_count" width="100"&gt;&lt;/fb:like&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="post post_inner_article" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: initial; border-bottom-style: none; border-bottom-width: initial; border-color: initial; border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(221, 221, 221); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(221, 221, 221); border-top-style: solid; border-top-width: 1px; float: left; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 40px; padding-left: 36px; padding-right: 36px; padding-top: 40px; position: relative; vertical-align: baseline; width: 680px;"&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Google IO 2011 took place in early May in San Francisco, California. In the midst of many announcements and tons of information, Android development for Google TV did get a little coverage. As of this writing, most developers cannot yet use Google TVs as a target device for development, but this is about to change. Developers looking to get a head start can follow a few easy tips and be ready when consumers can download applications for their TVs.&lt;br /&gt;&lt;span id="more-5933" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Existing Google TV devices are scheduled to be upgraded to Android 3.1, a Honeycomb variant, this summer (2011). The Android Market for Google TV will come with this upgrade, making this a hot new Android platform that developers want to prepare for. There are several key differences between Google TV devices and traditional, portable Android devices, such as phones and tablets. Most of the tips involve accounting for these differences.&lt;/div&gt;&lt;h2 style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-family: Helvetica, Arial; font-size: 36px; font-style: inherit; font-weight: bold; letter-spacing: -1px; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-shadow: rgb(255, 255, 255) 0px 1px 0px; vertical-align: baseline;"&gt;Preparing Your Application: Screen Density and Resolution&lt;/h2&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Google TV devices run at two resolutions. The first is 720p (aka “HD”), or 1280×720 pixels. The second is 1080p (aka “Full HD”), or 1920×1080 pixels. These may sound like large numbers, but let’s see how they compare:&lt;/div&gt;&lt;ul style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; list-style-image: initial; list-style-position: initial; list-style-type: none; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://mobile.tutsplus.com/wp-content/themes/tuts/images/global/li.gif); background-origin: initial; background-position: 0px 8px; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 5px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 35px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;1280×720 pixels is actually a lower resolution than existing Honeycomb (Android 3.0) tablets that run at 1280×800.&lt;/li&gt;&lt;li style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://mobile.tutsplus.com/wp-content/themes/tuts/images/global/li.gif); background-origin: initial; background-position: 0px 8px; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 5px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 35px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;1920×1080 is actually exactly 4x the number of pixels found on a phone with a qHD (“quarter” HD — makes sense, right?) display, which is 960×540 pixels.&lt;/li&gt;&lt;/ul&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Android tablets are typically used in landscape mode, but can be rotated to a portrait mode. Android phones are generally just the opposite. Televisions, however, are fixed devices and are only landscape-oriented. Unlike tablets or phones, though, televisions are not within arm’s reach. When taking into account their distance from the user and their resolution, Google has come up with a standard definition for the DPI they will be treated as. This is not the physical DPI of the TV screen, but rather an approximation of the perceived DPI of the screen because the user sits at some distance from the screen.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;For the 720p screens, the DPI will be considered high, or HDPI. For the 1080p screens, the DPI will be considered extra high, or XHDPI. Both screens are considered to be large, as far as resources go.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;When creating graphics and resources, these properties — resolution, density, large size, and landscape orientation — can be combined to narrowly target Google TV devices. Graphics and layouts should be fairly large. The perceived density is fairly realistic. A layout that may look right or slightly over-sized on a tablet might be just right for the TV.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;One caveat is to not rely on the exact number of pixels. Televisions work a bit differently than regular screens and not all will actually expose every single pixel. Google TV will adjust the exact resolution so nothing gets cropped from the edges. This means your screen designs should be somewhat flexible to accommodate small adjustments when you’ve had a chance to test your applications on real Google TV devices.&lt;/div&gt;&lt;h2 style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-family: Helvetica, Arial; font-size: 36px; font-style: inherit; font-weight: bold; letter-spacing: -1px; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-shadow: rgb(255, 255, 255) 0px 1px 0px; vertical-align: baseline;"&gt;Touching Televisions? Please Don’t&lt;/h2&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Beyond the physical differences between phones, tablets, and televisions, there is another important difference: televisions don’t have touchscreens. A typical interface to a Google TV device is with a direction pad, or d-pad, — that is, arrow keys for up, down, left, and right along with a select button. Some Google TVs may also have a mouse that is considered to be a “fake touch” input device. This has several implications in terms of input method assumptions when designing and publishing applications.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;First, when designing applications for Google TV, keep in mind the navigational limitations of the d-pad: users can’t easily skip over items, there’s no diagonal equivalent, and it doesn’t emulate multitouch navigational aids. For instance, if you interface currently has a row of items with the two most common on the far left and far right for convenient access with thumbs, these two items may be inconveniently separated for the average Google TV user. In other words, pay attention to control navigation order.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Second, without touch there is also no multitouch support. If your application requires multitouch gestures for navigation actions, functions, or other important components, it won’t work with Google TV.&lt;/div&gt;&lt;div class="tutorial_image" style="background-color: #f4f4f4; border-bottom-color: rgb(221, 221, 221); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(221, 221, 221); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(221, 221, 221); border-top-style: solid; border-top-width: 1px; font-family: inherit; font-size: 11px; font-style: italic; font-weight: inherit; margin-bottom: 30px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 15px; padding-left: 20px; padding-right: 20px; padding-top: 20px; text-align: center; vertical-align: baseline;"&gt;&lt;ins style="border-bottom-style: none; border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-style: none; border-left-width: 0px; border-right-style: none; border-right-width: 0px; border-style: initial; border-top-style: none; border-top-width: 0px; border-width: initial; display: inline-table; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; height: 250px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; vertical-align: baseline; visibility: visible; width: 300px;"&gt;&lt;ins id="aswift_0_anchor" style="border-bottom-style: none; border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-style: none; border-left-width: 0px; border-right-style: none; border-right-width: 0px; border-style: initial; border-top-style: none; border-top-width: 0px; border-width: initial; display: block; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; height: 250px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; vertical-align: baseline; visibility: visible; width: 300px;"&gt;&lt;iframe allowtransparency="true" frameborder="0" height="250" hspace="0" id="aswift_0" marginheight="0" marginwidth="0" name="aswift_0" scrolling="no" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 11px; font-style: inherit; font-weight: inherit; left: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; top: 0px; vertical-align: baseline;" vspace="0" width="300"&gt;&lt;/iframe&gt;&lt;/ins&gt;&lt;/ins&gt;&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Third, the Android Market uses filters to prevent applications from showing up on certain devices based on explicit items in the manifest file. In addition, several items are implicitly defined. One of these is touch. If you don’t have an entry for touch, the filter will assume that touch is required. When it does this, these applications will not show up on for Google TV. In order for your application to show up, you must set the required attribute of the &amp;lt;uses-feature&amp;gt; entry to false, like this:&lt;/div&gt;&lt;pre class="brush: xml; title: ;" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;" title=""&gt;&amp;lt;uses-feature android:name="android.hardware.touchscreen" android:required="false" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;This says that your application uses touch, but that it’s not required. That is, your application will function correctly when not on a touch enabled device. You will need to provide smooth alternative functionality for this use-case.&lt;/div&gt;&lt;h2 style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-family: Helvetica, Arial; font-size: 36px; font-style: inherit; font-weight: bold; letter-spacing: -1px; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-shadow: rgb(255, 255, 255) 0px 1px 0px; vertical-align: baseline;"&gt;No Native Development Kit, Yet&lt;/h2&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;If your application relies upon the C/C++ libraries and the Android Native Development Kit (NDK), you’re going to run into trouble. For now, there is no NDK support for the Google TV. Keep asking for it, though, because it came up time and time again at Google IO as a developer request, and it’s developer requests that get new features on the roadmap for future releases.&lt;/div&gt;&lt;h2 style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-family: Helvetica, Arial; font-size: 36px; font-style: inherit; font-weight: bold; letter-spacing: -1px; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-shadow: rgb(255, 255, 255) 0px 1px 0px; vertical-align: baseline;"&gt;Testing Your Application&lt;/h2&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;As there is no emulator yet available with a true Google TV Android image, we can only test the effects of the higher screen resolution and using the application with a touch screen.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;The easiest way to do this is to create a new AVD using Android 3.1, API Level 12, use a resolution of 1920×1080 (or 1280×720), and use a touch screen setting of false. The performance of the emulators may make this difficult, but at least you can get an idea of what the screen will look like and how the navigation or your application will function without touch.&lt;/div&gt;&lt;h2 style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-family: Helvetica, Arial; font-size: 36px; font-style: inherit; font-weight: bold; letter-spacing: -1px; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-shadow: rgb(255, 255, 255) 0px 1px 0px; vertical-align: baseline;"&gt;Conclusion&lt;/h2&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;The Android Market and the coming avalanche of applications for Google TV devices is still several months away. However, you can use this time to prepare your applications for these exciting new devices. Targeting Google TV devices is fairly straightforward: simply choose the right version of the Android SDK (Honeycomb) and consider your layouts, graphics and navigational elements carefully. Provide smooth alternative functionality for touchscreen and telephony features, which are unavailable on these devices. You will also be ready to make sure your application will appear in the market for Google TV devices as soon as they reach users’ hands.&lt;/div&gt;&lt;h3 style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #373737; font-family: Helvetica, Arial; font-size: 30px; font-style: inherit; font-weight: normal; letter-spacing: -0.02em; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 20px; text-shadow: rgb(255, 255, 255) 0px 1px 0px; vertical-align: baseline;"&gt;About the Authors&lt;/h3&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Mobile developers Lauren Darcey and Shane Conder have coauthored several books on Android development: an in-depth programming book entitled&amp;nbsp;&lt;em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;a href="http://www.amazon.com/dp/0321743016/?tag=mamlambo-20" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #a96d00; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"&gt;Android Wireless Application Development&lt;/a&gt;&lt;/em&gt;&amp;nbsp;and&amp;nbsp;&lt;em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;a href="http://www.amazon.com/dp/0321673352/?tag=mamlambo-20" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #a96d00; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"&gt;Sams Teach Yourself Android Application Development in 24 Hours&lt;/a&gt;&lt;/em&gt;. When not writing, they spend their time developing mobile software at their company and providing consulting services. They can be reached at via email to&amp;nbsp;&lt;a href="mailto:androidwirelessdev+mt@gmail.com" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #a96d00; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"&gt;androidwirelessdev+mt@gmail.com&lt;/a&gt;, via their blog at&amp;nbsp;&lt;a href="http://androidbook.blogspot.com/" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #a96d00; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"&gt;androidbook.blogspot.com&lt;/a&gt;, and on Twitter&lt;a href="http://twitter.com/androidwireless" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #a96d00; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"&gt;@androidwireless&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://links.visibli.com/share/PnBzVZ"&gt;http://links.visibli.com/share/PnBzVZ&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6780304109699047242-6999339146050457306?l=justlikeinschool.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justlikeinschool.blogspot.com/feeds/6999339146050457306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justlikeinschool.blogspot.com/2011/06/android-futures-creating-android-apps.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/6999339146050457306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/6999339146050457306'/><link rel='alternate' type='text/html' href='http://justlikeinschool.blogspot.com/2011/06/android-futures-creating-android-apps.html' title='Android Futures: Creating Android Apps For Google TV'/><author><name>Dwight Ian</name><uri>http://www.blogger.com/profile/04988291284653128071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_NvVgqszEmGY/Sg-d4r_MJqI/AAAAAAAAAv4/_rhlarlNgQI/s1600-R/n1100735501_1719.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6780304109699047242.post-7329739096652196544</id><published>2011-06-05T04:29:00.001-07:00</published><updated>2011-06-05T04:29:10.524-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='estimation'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Why Estimate?</title><content type='html'>&lt;span class="Apple-style-span" style="color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="iteminfo" style="border-bottom-color: rgb(222, 222, 222); border-bottom-style: solid; border-bottom-width: 1px; display: block; font-size: 12px; margin-bottom: 20px; margin-top: -10px; overflow-x: hidden; overflow-y: hidden; width: 770px;"&gt;&lt;span class="modifydate" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; display: block; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Last Updated on Monday, 30 May 2011 02:01&lt;/span&gt;&lt;span class="createdby" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; display: block; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Written by Mike Cottmeyer&lt;/span&gt;&lt;span class="createdate" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; display: block; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Monday, 30 May 2011 01:59&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 10px; margin-top: 10px;"&gt;Most people think about estimating as a way to figure out how big stuff is, so we can decide what we are going to build and when we are going to build it. More often than not, I find myself using estimation to help teams figure out what we are NOT going to build. Rather than create an IN list… I like to think about creating an OUT list.&lt;/div&gt;&lt;div style="margin-bottom: 10px; margin-top: 10px;"&gt;Many of my clients are so overcommitted, they can’t have a conversation about focusing on a well groomed, prioritized product backlog until they come to grips with the fact that most of what they want to build just isn’t going to happen… at least not right now. Once they’ve got the noise out of the system, we can start breaking work down and looking at what might actually be possible.&lt;/div&gt;&lt;div style="margin-bottom: 10px; margin-top: 10px;"&gt;Ever though about using estimation as a way of committing to what we AREN’T going to do?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6780304109699047242-7329739096652196544?l=justlikeinschool.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justlikeinschool.blogspot.com/feeds/7329739096652196544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justlikeinschool.blogspot.com/2011/06/why-estimate.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/7329739096652196544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/7329739096652196544'/><link rel='alternate' type='text/html' href='http://justlikeinschool.blogspot.com/2011/06/why-estimate.html' title='Why Estimate?'/><author><name>Dwight Ian</name><uri>http://www.blogger.com/profile/04988291284653128071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_NvVgqszEmGY/Sg-d4r_MJqI/AAAAAAAAAv4/_rhlarlNgQI/s1600-R/n1100735501_1719.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6780304109699047242.post-999414415179339944</id><published>2010-07-01T08:15:00.000-07:00</published><updated>2010-07-01T08:17:01.099-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='server'/><category scheme='http://www.blogger.com/atom/ns#' term='web2'/><category scheme='http://www.blogger.com/atom/ns#' term='tags'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tier'/><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='separation'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>Sometimes I Don't Get Tags</title><content type='html'>Yes I have to admit this.&lt;br /&gt;&lt;br /&gt;With all the drive to "separate" things, why do specialize tags exists? I mean I don't see it stopping, it's even growing.&lt;br /&gt;&lt;br /&gt;If you don't know what I mean, let me explain.&lt;br /&gt;&lt;br /&gt;Why do I see a lot of:&lt;br /&gt;&amp;lt;framework:input&amp;gt;&lt;br /&gt;instead of the much simpler and regular:&lt;br /&gt;&amp;lt;input /&amp;gt;&lt;br /&gt;?&lt;br /&gt;#replace framework with your favorite framework&lt;br /&gt;&lt;br /&gt;So as I understand it in web development we have the client side and the server side, side of things. The client side consists of primarily HTML pages, CSS, javascript. The server side are either Java, Ruby, PHP and databases (these are simplistic elements for the sake of simplicity).&lt;br /&gt;&lt;br /&gt;Now, why do frameworks like struts provide tags for UI? Is that not the problem of the UI person and the client side? Why do we have to hack HTML? Can we not write pure HTML and hack (fine tune) it with javascript with the data from the server? For me it will be much cleaner.&lt;br /&gt;&lt;br /&gt;So far I only see Wicket is doing this approach.&lt;br /&gt;&lt;br /&gt;It's a messed-up world out there, that's maybe the reason why software developers are handsomely paid.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6780304109699047242-999414415179339944?l=justlikeinschool.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justlikeinschool.blogspot.com/feeds/999414415179339944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justlikeinschool.blogspot.com/2010/07/sometimes-i-dont-get-tags.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/999414415179339944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/999414415179339944'/><link rel='alternate' type='text/html' href='http://justlikeinschool.blogspot.com/2010/07/sometimes-i-dont-get-tags.html' title='Sometimes I Don&apos;t Get Tags'/><author><name>Dwight Ian</name><uri>http://www.blogger.com/profile/04988291284653128071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_NvVgqszEmGY/Sg-d4r_MJqI/AAAAAAAAAv4/_rhlarlNgQI/s1600-R/n1100735501_1719.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6780304109699047242.post-6793852005544663793</id><published>2010-06-17T06:02:00.000-07:00</published><updated>2010-06-18T03:40:47.063-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web2'/><category scheme='http://www.blogger.com/atom/ns#' term='struts 2'/><category scheme='http://www.blogger.com/atom/ns#' term='mvn'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='setup'/><category scheme='http://www.blogger.com/atom/ns#' term='beginner'/><title type='text'>Struts 2 and jQuery without Fuss</title><content type='html'>I'm an amateur programmer (after 6 years of working - still considers myself as an amateur), and I scoured the web for a good tutorial or step by step HOWTO on using struts 2 and jquery together that will not make me want my hair pulled out. And alas, I found only &lt;a href="http://stikiflem.wordpress.com/2008/08/27/struts-2-json-sample/"&gt;one (1)&lt;/a&gt;, so this is my attempt to be more helpful to amateurs like me.&lt;br /&gt;&lt;br /&gt;So I decided to make my own and hopefully this will help others like me who struggled for days to get a grip of the 2 beasts (or beauties).&lt;br /&gt;&lt;br /&gt;1. Download the the sample zip file from Struts 2 page &lt;a href="http://code.google.com/p/struts2-examples/downloads/detail?name=Coding_Actions_Struts2_Mvn.zip&amp;amp;can=2&amp;amp;q="&gt;here&lt;/a&gt; (this is a maven archetype by the way) and unzip.&lt;br /&gt;2. I use Netbeans (6.8) as my IDE (you can also use Eclipse if you know how). Open the project (in Netbeans it is File -&amp;gt; Open Project&amp;nbsp; -&amp;gt;&lt;span style="font-style: italic;"&gt;location of the unzipped file&lt;/span&gt; -&amp;gt;Coding_Actions_Struts2_Mvn and click the Open Project button).&lt;br /&gt;3. Download &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; library. Put it in the Web Pages folder.&lt;br /&gt;4. Download &lt;a href="http://www.json.org/json2.js"&gt;json2.js&lt;/a&gt;&amp;nbsp; (needed for stringify and parse). Put it in the Web Pages folder.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Inspecting the project, you get to see that a lot is already available. Feel free to look around and see what is already available (click the figure below to see actual layout).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_NvVgqszEmGY/TBn9jkP6wbI/AAAAAAAABBk/7p8C8qvXwUE/s1600/p1.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5483692808767979954" src="http://4.bp.blogspot.com/_NvVgqszEmGY/TBn9jkP6wbI/AAAAAAAABBk/7p8C8qvXwUE/s400/p1.jpg" style="cursor: pointer; height: 334px; width: 143px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red; font-weight: bold;"&gt;Important&lt;/span&gt;: You MUST make sure that all the libraries (jar files) are available, just to make sure right click Libraries  and click Download Missing Dependencies.&lt;br /&gt;&lt;br /&gt;Now let's edit some files:&lt;br /&gt;&lt;b&gt;pom.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: white;"&gt;&lt;code&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.apache.struts&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;struts2-json-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.1.8.1&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dependency&amp;gt;&lt;/div&gt;&lt;/code&gt;&lt;br /&gt;&lt;i&gt;#right click Libraries  and click Download Missing  Dependencies.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;index.jsp&lt;/b&gt;&lt;br /&gt;- add the following&lt;br /&gt;&amp;lt;script src="jquery-1.4.2.min.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="json2.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="client.js"  type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;I only retained the &amp;lt;s:form&amp;gt; for input and removed the &amp;lt;a&amp;gt; links&lt;br /&gt;&lt;br /&gt;Create the client.js file and put it in the Web Pages folder.&lt;br /&gt;&amp;nbsp; &lt;i&gt;&lt;a href="http://cid-ee3299beb46a7e3f.office.live.com/embedicon.aspx/Struts2%20and%20JSON/client.js"&gt;client.js is&lt;/a&gt; where we will put our Ajax goodies #&lt;b&gt;see the attached code&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;struts.xml&lt;/b&gt;&lt;br /&gt;edit the package name to extend the json-default&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;package name="basicstruts2" extends="struts-default,json-default"&amp;gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;change the result to this:&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;&amp;lt;result type="json"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="excludeNullProperties"&amp;gt;true&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="callbackParameter"&amp;gt;callback&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/result&amp;gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;That's IT. You dont even need to change the Action classes.&lt;br /&gt;&lt;br /&gt;Try it out.&lt;br /&gt;Tip: try it out in firefox and download the firebug plugin to see the ajax posting (I have not added a loading gif to see if anything is processing)&lt;br /&gt;&lt;br /&gt;And&amp;nbsp; don't forget to spread the link.&lt;br /&gt;&lt;br /&gt;Here is the complete source code&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cid-ee3299beb46a7e3f.office.live.com/embedicon.aspx/Struts2%20and%20JSON/Coding%5E_Actions%5E_Struts2%5E_Mvn.zip"&gt;mvn source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cid-ee3299beb46a7e3f.office.live.com/embedicon.aspx/Struts2%20and%20JSON/Coding%5E_Actions%5E_Struts2%5E_Mvn-0.0.1-SNAPSHOT.war"&gt;deployable war&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6780304109699047242-6793852005544663793?l=justlikeinschool.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justlikeinschool.blogspot.com/feeds/6793852005544663793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://justlikeinschool.blogspot.com/2010/06/struts-2-and-jquery-without-fuss.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/6793852005544663793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6780304109699047242/posts/default/6793852005544663793'/><link rel='alternate' type='text/html' href='http://justlikeinschool.blogspot.com/2010/06/struts-2-and-jquery-without-fuss.html' title='Struts 2 and jQuery without Fuss'/><author><name>Dwight Ian</name><uri>http://www.blogger.com/profile/04988291284653128071</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_NvVgqszEmGY/Sg-d4r_MJqI/AAAAAAAAAv4/_rhlarlNgQI/s1600-R/n1100735501_1719.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NvVgqszEmGY/TBn9jkP6wbI/AAAAAAAABBk/7p8C8qvXwUE/s72-c/p1.jpg' height='72' width='72'/><thr:total>3</thr:total></entry></feed>
