<?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-17114597</id><updated>2012-02-07T12:56:52.542-08:00</updated><category term='winfx'/><category term='Haiku'/><category term='Performance'/><category term='64-Bit'/><category term='.net 3.5'/><category term='free'/><category term='development'/><category term='Core 2 Quad'/><category term='api'/><category term='RIA'/><category term='visual studio 2003'/><category term='VSTS'/><category term='code project'/><category term='Power-cut allert'/><category term='Smalltalk'/><category term='FTP'/><category term='Sancharnet'/><category term='two way SMS'/><category term='web client'/><category term='Flex'/><category term='email'/><category term='Honeycomb'/><category term='Entify Framework'/><category term='MSIL'/><category term='Query'/><category term='c++'/><category term='Grid Computing'/><category term='Hybrid Apps'/><category term='EOS'/><category term='difference'/><category term='RAIL'/><category term='Maverick.net'/><category term='GSM Modem'/><category term='java'/><category term='NCache'/><category term='photo service'/><category term='information'/><category term='DotNet'/><category term='Perl'/><category term='Theme'/><category term='networking'/><category term='online'/><category term='GoogleOS'/><category term='Castle Monorail'/><category term='Bottom Tabbar Control'/><category term='Realtime assembly instrumentation library'/><category term='UI Designer'/><category term='visual studio 2005'/><category term='innovation'/><category term='Bluetooth'/><category term='asp.net'/><category term='Sliverlight Overview'/><category term='network path'/><category term='framework'/><category term='SocialMonkee'/><category term='internet radio free'/><category term='Intel'/><category term='c#.net'/><category term='google'/><category term='AOP'/><category term='Python'/><category term='CLR'/><category term='Backlink'/><category term='Light Sensor'/><category term='pratices'/><category term='support'/><category term='Custom Theme'/><category term='CAB'/><category term='layoutopt'/><category term='Build'/><category term='SQL Server Compact'/><category term='demo'/><category term='XNA'/><category term='design pattern'/><category term='XQuery'/><category term='Ice Cream Sandwich'/><category term='3d game'/><category term='Sliverlight'/><category term='xsp'/><category term='Clustering'/><category term='WPF/E'/><category term='Alchemi'/><category term='android plist parser'/><category term='asp.net 2.0'/><category term='code'/><category term='Virtualization'/><category term='learning'/><category term='SharedPreference'/><category term='windows development'/><category term='sensitive'/><category term='sql server 2000'/><category term='Hardware Information'/><category term='Javascript Multipurpose'/><category term='robotics'/><category term='Hibernet'/><category term='sqlite'/><category term='Best practices'/><category term='RDBMS'/><category term='Rapid Layout'/><category term='SMS Gateway'/><category term='snapfish'/><category term='Open Source'/><category term='Coldfusion'/><category term='ant build'/><category term='print'/><category term='release bug'/><category term='Features'/><category term='Bayanihan Computing'/><category term='Ruby'/><category term='Real Time'/><category term='wpf'/><category term='Linux'/><category term='Tools'/><category term='web site'/><category term='Asynchronous'/><category term='64-Bit Performance'/><category term='windows presentation fundation'/><category term='gmail'/><category term='Ant'/><category term='Silverlight'/><category term='NetAdvangate'/><category term='mobile'/><category term='Google Data API'/><category term='Download'/><category term='SQL'/><category term='windows workflow fundation'/><category term='64-Bit Banchmark'/><category term='Andorid'/><category term='Android ant build'/><category term='printing'/><category term='mobile application'/><category term='Web OS'/><category term='Top Ten'/><category term='.net framework 3.5'/><category term='Nexous Two'/><category term='c#'/><category term='framwork'/><category term='Flash'/><category term='SeekBar with Two Thumb'/><category term='connection string'/><category term='spring'/><category term='symbian'/><category term='windows communication fundation'/><category term='.net'/><category term='Mono'/><category term='Android Clipboard Framework'/><category term='Processer'/><category term='plist parser'/><category term='vb.net'/><category term='mobile account'/><category term='Adobe'/><category term='SMS'/><category term='write code'/><category term='CDMA'/><category term='Project Management'/><category term='camera'/><category term='trial version'/><category term='Xeon'/><category term='Android SDK 3.0'/><category term='Distributed Caching'/><category term='Android API Difference'/><category term='language'/><category term='ActivityManager'/><category term='devindia'/><category term='game'/><category term='Blogger'/><category term='Android FTP demo'/><category term='windows cardspace'/><category term='plist'/><category term='oracle'/><category term='NHibernet'/><category term='Orcas'/><category term='visual studio'/><category term='Team System'/><category term='Android SDK 3.1'/><category term='Javascript Remoting'/><category term='Share Menu'/><category term='layout optimize'/><category term='Music file'/><category term='Crash Log'/><category term='ajax framework'/><category term='hp'/><category term='agent'/><category term='OS'/><category term='gmail agent'/><category term='GSM'/><category term='Traffic'/><category term='XBox 360'/><category term='Architecture'/><category term='MVC'/><category term='javamail'/><category term='computer software'/><category term='XNA Game Studio Exxpress'/><category term='Composite Application Block'/><category term='Cell Phone'/><category term='web development'/><category term='wf'/><category term='codepix'/><category term='Log4j'/><category term='vs.php'/><category term='evolution'/><category term='GooOS'/><category term='VSTO'/><category term='visual studio 2007'/><category term='Multi-Language'/><category term='eScrum'/><category term='WebView'/><category term='enterprise'/><category term='Core 2 Duo'/><category term='class'/><category term='windows'/><category term='Book'/><category term='moonlight'/><category term='Android'/><category term='UIPAB2'/><category term='Operating System'/><category term='Yahoo'/><category term='Application'/><category term='Style'/><category term='database'/><category term='wcf'/><category term='Encrypting'/><category term='apache'/><category term='dependency injection'/><category term='Lisp Ajax'/><category term='app domain'/><category term='php'/><category term='ajax'/><category term='Library'/><category term='cardspace'/><category term='ListBox'/><category term='Aspect Oriented Extension for c#.net'/><category term='trace route'/><category term='Ketan Parmar'/><category term='Sql Query Builder'/><category term='Web 2.0'/><category term='Query Builder'/><category term='frame work 1.1'/><category term='PageRank'/><category term='microsoft'/><category term='pattern'/><category term='article'/><category term='digital'/><category term='ultimatepinger'/><category term='online photo print'/><category term='accounting'/><title type='text'>KP Bird</title><subtitle type='html'>Truly Android | iPhone | BlackBerry | Palm | Java | .Net</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default?start-index=101&amp;max-results=100'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>106</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-17114597.post-2375099439323680159</id><published>2012-02-03T01:46:00.000-08:00</published><updated>2012-02-03T01:50:07.141-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ant build'/><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><category scheme='http://www.blogger.com/atom/ns#' term='Build'/><category scheme='http://www.blogger.com/atom/ns#' term='Android ant build'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Ant Build - Android Automated Build</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;I am trying to write very simple tutorial to build Android APK using Ant tool. &amp;nbsp;To build APK using eclipse is very easy, normally developer use it but in some specially senario you need to build APK using command line.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;b&gt;Setup Environment&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;1. &lt;a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank"&gt;JDK&lt;/a&gt;&amp;nbsp;:&lt;/span&gt;Install JDK and set JAVA_HOME&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;2. &lt;a href="http://developer.android.com/sdk/index.html" target="_blank"&gt;Android SDK&lt;/a&gt;&amp;nbsp;:&lt;/span&gt;Download Android Platforms using Android SDK&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family: inherit;"&gt;3. &lt;a href="http://ant.apache.org/" target="_blank"&gt;Ant&lt;/a&gt;&amp;nbsp;:&lt;/span&gt;Install Ant and set ANT_HOME&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Now, Take your any project developed in eclipse or any other IDE. I am taking project from eclipse.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Step 1 :&lt;/b&gt; Copy your project folder from Eclipse Workspace to the Desktop&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Step 2 :&lt;/b&gt; Create keystore file using keytool command&lt;br /&gt;&lt;pre class="brush: java"&gt;keytool -genkey -v -keystore &lt;file name=""&gt;.keystore -alias &lt;alias name=""&gt; -keyalg RSA -keysize 2048 -validity 365&lt;/alias&gt;&lt;/file&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Step 3 :&lt;/b&gt; Copy keystore file in your project folder&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Step 4 :&lt;/b&gt; Create &lt;b&gt;"ant.properties"&lt;/b&gt; file using any text editor, this file contain information about keystore file. create your keystore file `&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;pre class="brush: java"&gt;key.store=MyAndroidApp.keystore&lt;br /&gt;key.alias=MAA&lt;br /&gt;key.store.password=kpbird&lt;br /&gt;key.alias.password=kpbird&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;Step 4 :&lt;/b&gt; Create "&lt;b&gt;default.properties"&lt;/b&gt; file, If you have created project using eclipse, this file will available, If not create file with following content, change api level as per your project.&lt;br /&gt;&lt;pre class="brush: java"&gt;# This file is automatically generated by Android Tools.&lt;br /&gt;# Do not modify this file -- YOUR CHANGES WILL BE ERASED!&lt;br /&gt;#&lt;br /&gt;# This file must *NOT* be checked in Version Control Systems,&lt;br /&gt;# as it contains information specific to your local configuration.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# location of the SDK. This is only used by Ant&lt;br /&gt;# For customization when using a Version Control System, please read the&lt;br /&gt;# header note.&lt;br /&gt;sdk.dir=/Users/kpbird/android-sdk-macosx&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Step 6 :&lt;/b&gt; Create&amp;nbsp;&lt;b&gt;"build.xml"&lt;/b&gt;&amp;nbsp;with following content, change project name "MyAndroidProject".&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;project default="help" name="MyAndroidProject"&gt;&lt;br /&gt;    &lt;property file="local.properties"&gt;&lt;br /&gt;    &lt;property file="ant.properties"&gt;&lt;br /&gt;    &lt;loadproperties srcfile="project.properties"&gt;&lt;br /&gt;    &lt;fail message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var" unless="sdk.dir"&gt;&lt;br /&gt;    &lt;import file="${sdk.dir}/tools/ant/build.xml"&gt;&lt;br /&gt;&lt;/import&gt;&lt;/fail&gt;&lt;/loadproperties&gt;&lt;/property&gt;&lt;/property&gt;&lt;/project&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;b&gt;Step 7 :&lt;/b&gt; Now, It's time to start build, open terminal, go to the project folder and execute following command&lt;br /&gt;&lt;pre class="brush: java"&gt;ant release&lt;/pre&gt;&lt;b&gt;Step 8 :&lt;/b&gt; You APK file will be at following path.&lt;br /&gt;&lt;pre class="brush: java"&gt;Project Folder -&amp;gt; bin -&amp;gt; MyAndroidProject-release.apk&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Create following files in your Project Folder and execute "ant release" command&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;keystore&lt;/li&gt;&lt;li&gt;ant.properties&lt;/li&gt;&lt;li&gt;default.properties&lt;/li&gt;&lt;li&gt;local.properties&lt;/li&gt;&lt;li&gt;build.xml&lt;/li&gt;&lt;/ol&gt;For more information you can refer following link&lt;br /&gt;&lt;a href="http://developer.android.com/guide/developing/projects/projects-cmdline.html"&gt;http://developer.android.com/guide/developing/projects/projects-cmdline.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Use cron job or &lt;a href="http://hudson-ci.org/" target="_blank"&gt;Hudson&lt;/a&gt; for automated build, run "ant release" command from con job or &lt;a href="http://hudson-ci.org/" target="_blank"&gt;Hudson&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&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/17114597-2375099439323680159?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/2375099439323680159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2012/02/android-ant-build.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/2375099439323680159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/2375099439323680159'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2012/02/android-ant-build.html' title='Android Ant Build - Android Automated Build'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-7309285444872861245</id><published>2012-01-30T23:32:00.000-08:00</published><updated>2012-01-30T23:32:03.667-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Style'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='Theme'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Theme'/><title type='text'>How to write Android Style and Themes ?</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;We all know that Android has Style and Theme feature, We know that it work like CSS in context of HTML/Web. but I feel it is the most unexplored feature of Android. Since last few days I am working on it and I have create two theme named ThemeBlue and ThemeGreen. (Check attached screenshot)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;I figure out following pros and cons.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Pros&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;1. We can avoid Image (PNG,Bitmap,etc..) I also reduce size of APK&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;2. We don't require images for Multiple screen resolution.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;3. Less Memory allocation compare to Images&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Cons&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;1. Only four shapes supported (rectangle, ring, ovel, line). we can not create complex shapes using it.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;2. Gradient isn't supports by Stroke.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;3. layer-list has limited feature, layer-list isn't support to arrange layer in specific/relative position.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;4. Shape does not support path.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/-5Y96gCpjlN0/TyeU3gFvS9I/AAAAAAAADQg/UEyc289R_l0/s1600/Default+Theme.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-5Y96gCpjlN0/TyeU3gFvS9I/AAAAAAAADQg/UEyc289R_l0/s320/Default+Theme.png" width="192" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/-I6ScIvAEmsw/TyeU5IsV-nI/AAAAAAAADQo/iZntOXfDeVM/s1600/Blue+Theme.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-I6ScIvAEmsw/TyeU5IsV-nI/AAAAAAAADQo/iZntOXfDeVM/s320/Blue+Theme.png" width="192" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-Qe46Q8W4Kgg/TyeU6k5C62I/AAAAAAAADQw/aMqN624KJQY/s1600/Green+Theme.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-Qe46Q8W4Kgg/TyeU6k5C62I/AAAAAAAADQw/aMqN624KJQY/s320/Green+Theme.png" width="192" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;b&gt;Steps to create Themes&amp;nbsp; &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Step 1 : Open your eclipse and create new Android Project&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Step 2 : Right click on project name select New-&amp;gt;Android XML File&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Step 3 : Create themes.xml file in values folder&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Step 4 : Create styles.xml file in values folder&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Step 5 : Create colors.xml file in values folder&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Step 6 : Set your theme in AndroidManifest.xml - It will apply theme in all Activities, you can set theme for single activity using "setTheme()" function.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;b&gt;Here is the file content&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;br /&gt;&lt;b&gt;themes.xml&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;resources&gt;&lt;br /&gt;     &lt;style name="Theme.Blue" parent="android:style/Theme.NoTitleBar"&gt;&lt;br /&gt;        &lt;item name="android:buttonStyle"&gt;@style/ThemeBlue.Button&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:buttonStyleToggle"&gt;@style/ThemeBlue.ToggleButton&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:checkboxStyle"&gt;@style/ThemeBlue.CheckBox&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:radioButtonStyle"&gt;@style/ThemeBlue.RadioButton&lt;/item&gt;  &lt;br /&gt;        &lt;item name="android:progressBarStyleHorizontal"&gt;@style/ThemeBlue.ProgressBarHorizontal&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:spinnerStyle"&gt;@style/ThemeBlue.Spinner&lt;/item&gt;  &lt;br /&gt;        &lt;item name="android:spinnerItemStyle"&gt;@style/ThemeBlue.SpinnerItemText&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:seekBarStyle"&gt;@style/ThemeBlue.SeekBar&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:editTextStyle"&gt;@style/ThemeBlue.EditText&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:textViewStyle"&gt;@style/ThemeBlue.TextView&lt;/item&gt;&lt;br /&gt;    &lt;br /&gt;&lt;/style&gt;&lt;br /&gt;      &lt;style name="Theme.Green" parent="android:style/Theme.NoTitleBar"&gt;&lt;br /&gt;        &lt;item name="android:buttonStyle"&gt;@style/ThemeGreen.Button&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:buttonStyleToggle"&gt;@style/ThemeGreen.ToggleButton&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:checkboxStyle"&gt;@style/ThemeGreen.CheckBox&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:radioButtonStyle"&gt;@style/ThemeGreen.RadioButton&lt;/item&gt;  &lt;br /&gt;        &lt;item name="android:progressBarStyleHorizontal"&gt;@style/ThemeGreen.ProgressBarHorizontal&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:spinnerStyle"&gt;@style/ThemeGreen.Spinner&lt;/item&gt;  &lt;br /&gt;        &lt;item name="android:spinnerItemStyle"&gt;@style/ThemeGreen.SpinnerItemText&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:seekBarStyle"&gt;@style/ThemeGreen.SeekBar&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:editTextStyle"&gt;@style/ThemeGreen.EditText&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:textViewStyle"&gt;@style/ThemeGreen.TextView&lt;/item&gt;&lt;br /&gt;    &lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;/resources&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;b&gt;styles.xml&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;resources&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt; &lt;style name="ThemeBlue.Button" parent="@android:style/Widget.Button"&gt;&lt;br /&gt;        &lt;item name="android:textColor"&gt;@color/white&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:background"&gt;@drawable/button_selector_blue&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:textSize"&gt;15sp&lt;/item&gt;&lt;br /&gt;    &lt;br /&gt;&lt;/style&gt;&lt;br /&gt;    &lt;style name="ThemeBlue.ToggleButton" parent="@android:style/Widget.Button.Toggle"&gt;&lt;br /&gt;        &lt;item name="android:background"&gt;@drawable/togglebutton_selector_blue&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:textOn"&gt;ON&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:textOff"&gt;OFF&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:textColor"&gt;@color/white&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:disabledAlpha"&gt;?android:attr/disabledAlpha&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:width"&gt;100dp&lt;/item&gt;&lt;br /&gt;    &lt;br /&gt;&lt;/style&gt;&lt;br /&gt;    &lt;style name="ThemeBlue.CheckBox" parent="@android:style/Widget.CompoundButton.CheckBox"&gt;&lt;br /&gt;        &lt;item name="android:button"&gt;@drawable/checkbox_selector_blue&lt;/item&gt;&lt;br /&gt;    &lt;br /&gt;&lt;/style&gt;&lt;br /&gt;    &lt;style name="ThemeBlue.RadioButton" parent="@android:style/Widget.CompoundButton.RadioButton"&gt;&lt;br /&gt;        &lt;item name="android:button"&gt;@drawable/radiobutton_selector_blue&lt;/item&gt;&lt;br /&gt;    &lt;br /&gt;&lt;/style&gt;&lt;br /&gt; &lt;style name="ThemeBlue.ProgressBarHorizontal" parent="@android:style/Widget.ProgressBar.Horizontal"&gt;&lt;br /&gt;     &lt;item name="android:progressDrawable"&gt;@drawable/progressbarhorizontal_blue&lt;/item&gt;&lt;br /&gt; &lt;br /&gt;&lt;/style&gt;&lt;br /&gt; &lt;style name="ThemeBlue.Spinner" parent="@android:style/Widget.Spinner"&gt;&lt;br /&gt;     &lt;item name="android:background"&gt;@drawable/spinner_selector_blue&lt;/item&gt;&lt;br /&gt; &lt;br /&gt;&lt;/style&gt;&lt;br /&gt; &lt;style name="ThemeBlue.SpinnerItemText" parent="android:TextAppearance.Widget.TextView.SpinnerItem"&gt;&lt;br /&gt;     &lt;item name="android:textColor"&gt;@color/white&lt;/item&gt;&lt;br /&gt;     &lt;item name="android:background"&gt;@drawable/spinneritem_selector_blue&lt;/item&gt;&lt;br /&gt; &lt;br /&gt;&lt;/style&gt;&lt;br /&gt; &lt;style name="ThemeBlue.SeekBar" parent="@android:style/Widget.SeekBar"&gt;&lt;br /&gt;     &lt;item name="android:progressDrawable"&gt;@drawable/seekbar_progress_blue&lt;/item&gt;&lt;br /&gt;     &lt;item name="android:thumb"&gt;@drawable/seekbar_thumb_blue&lt;/item&gt;&lt;br /&gt; &lt;br /&gt;&lt;/style&gt;    &lt;br /&gt; &lt;style name="ThemeBlue.EditText" parent="@android:style/Widget.EditText"&gt;&lt;br /&gt;   &lt;item name="android:focusable"&gt;true&lt;/item&gt;&lt;br /&gt;   &lt;item name="android:focusableInTouchMode"&gt;true&lt;/item&gt;&lt;br /&gt;   &lt;item name="android:clickable"&gt;true&lt;/item&gt;&lt;br /&gt;   &lt;item name="android:background"&gt;@drawable/edittext_selector_blue&lt;/item&gt;&lt;br /&gt;   &lt;item name="android:textColor"&gt;@color/white&lt;/item&gt;&lt;br /&gt;   &lt;item name="android:gravity"&gt;center_vertical&lt;/item&gt;&lt;br /&gt;  &lt;br /&gt;&lt;/style&gt;&lt;br /&gt;  &lt;style name="ThemeBlue.TextView" parent="@android:style/Widget.TextView"&gt;&lt;br /&gt;      &lt;item name="android:textColor"&gt;@color/white&lt;/item&gt;&lt;br /&gt;  &lt;br /&gt;&lt;/style&gt;&lt;br /&gt;  &lt;br /&gt;      &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;style name="ThemeGreen.Button" parent="@android:style/Widget.Button"&gt;&lt;br /&gt;        &lt;item name="android:textColor"&gt;@color/white&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:background"&gt;@drawable/button_selector_green&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:textSize"&gt;15sp&lt;/item&gt;&lt;br /&gt;    &lt;br /&gt;&lt;/style&gt;&lt;br /&gt;    &lt;style name="ThemeGreen.ToggleButton" parent="@android:style/Widget.Button.Toggle"&gt;&lt;br /&gt;        &lt;item name="android:background"&gt;@drawable/togglebutton_selector_green&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:textOn"&gt;ON&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:textOff"&gt;OFF&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:textColor"&gt;@color/white&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:disabledAlpha"&gt;?android:attr/disabledAlpha&lt;/item&gt;&lt;br /&gt;        &lt;item name="android:width"&gt;100dp&lt;/item&gt;&lt;br /&gt;    &lt;br /&gt;&lt;/style&gt;&lt;br /&gt;    &lt;style name="ThemeGreen.CheckBox" parent="@android:style/Widget.CompoundButton.CheckBox"&gt;&lt;br /&gt;        &lt;item name="android:button"&gt;@drawable/checkbox_selector_green&lt;/item&gt;&lt;br /&gt;    &lt;br /&gt;&lt;/style&gt;&lt;br /&gt;    &lt;style name="ThemeGreen.RadioButton" parent="@android:style/Widget.CompoundButton.RadioButton"&gt;&lt;br /&gt;        &lt;item name="android:button"&gt;@drawable/radiobutton_selector_green&lt;/item&gt;&lt;br /&gt;    &lt;br /&gt;&lt;/style&gt;&lt;br /&gt; &lt;style name="ThemeGreen.ProgressBarHorizontal" parent="@android:style/Widget.ProgressBar.Horizontal"&gt;&lt;br /&gt;     &lt;item name="android:progressDrawable"&gt;@drawable/progressbarhorizontal_green&lt;/item&gt;&lt;br /&gt; &lt;br /&gt;&lt;/style&gt;&lt;br /&gt; &lt;style name="ThemeGreen.Spinner" parent="@android:style/Widget.Spinner"&gt;&lt;br /&gt;     &lt;item name="android:background"&gt;@drawable/spinner_selector_green&lt;/item&gt;&lt;br /&gt; &lt;br /&gt;&lt;/style&gt;&lt;br /&gt; &lt;style name="ThemeGreen.SpinnerItemText" parent="android:TextAppearance.Widget.TextView.SpinnerItem"&gt;&lt;br /&gt;     &lt;item name="android:textColor"&gt;@color/white&lt;/item&gt;&lt;br /&gt;     &lt;item name="android:background"&gt;@drawable/spinneritem_selector_green&lt;/item&gt;&lt;br /&gt; &lt;br /&gt;&lt;/style&gt;&lt;br /&gt; &lt;style name="ThemeGreen.SeekBar" parent="@android:style/Widget.SeekBar"&gt;&lt;br /&gt;     &lt;item name="android:progressDrawable"&gt;@drawable/seekbar_progress_green&lt;/item&gt;&lt;br /&gt;     &lt;item name="android:thumb"&gt;@drawable/seekbar_thumb_green&lt;/item&gt;&lt;br /&gt; &lt;br /&gt;&lt;/style&gt;    &lt;br /&gt; &lt;style name="ThemeGreen.EditText" parent="@android:style/Widget.EditText"&gt;&lt;br /&gt;   &lt;item name="android:focusable"&gt;true&lt;/item&gt;&lt;br /&gt;   &lt;item name="android:focusableInTouchMode"&gt;true&lt;/item&gt;&lt;br /&gt;   &lt;item name="android:clickable"&gt;true&lt;/item&gt;&lt;br /&gt;   &lt;item name="android:background"&gt;@drawable/edittext_selector_green&lt;/item&gt;&lt;br /&gt;   &lt;item name="android:textColor"&gt;@color/white&lt;/item&gt;&lt;br /&gt;   &lt;item name="android:gravity"&gt;center_vertical&lt;/item&gt;&lt;br /&gt;  &lt;br /&gt;&lt;/style&gt;&lt;br /&gt;  &lt;style name="ThemeGreen.TextView" parent="@android:style/Widget.TextView"&gt;&lt;br /&gt;      &lt;item name="android:textColor"&gt;@color/white&lt;/item&gt;&lt;br /&gt;  &lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;/resources&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;b&gt;colors.xml&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;resources&gt;&lt;br /&gt;    &lt;color name="white"&gt;#ffffff&lt;/color&gt;&lt;br /&gt;    &lt;color name="black"&gt;#000000&lt;/color&gt;&lt;br /&gt;    &lt;color name="blue_dark"&gt;#2f6699&lt;/color&gt;&lt;br /&gt;    &lt;color name="blue_light"&gt;#449def&lt;/color&gt;&lt;br /&gt;    &lt;color name="green_dark"&gt;#53933f&lt;/color&gt;&lt;br /&gt;    &lt;color name="green_light"&gt;#70c656&lt;/color&gt;&lt;br /&gt;&lt;/resources&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Download Code : &lt;a href="https://docs.google.com/open?id=0B9CK0aNgCtjRMDJlZDE2N2MtYWQ4ZS00ZGI2LTg5ZTMtNDg4ZDQ2MTljMzVm" target="_blank"&gt;Click Here&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;Click on File -&amp;gt; Download Original File&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: black; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-7309285444872861245?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/7309285444872861245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2012/01/how-to-write-android-style-and-themes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/7309285444872861245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/7309285444872861245'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2012/01/how-to-write-android-style-and-themes.html' title='How to write Android Style and Themes ?'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-5Y96gCpjlN0/TyeU3gFvS9I/AAAAAAAADQg/UEyc289R_l0/s72-c/Default+Theme.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-2923135455064258001</id><published>2011-10-18T21:49:00.000-07:00</published><updated>2011-10-18T21:49:34.503-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Honeycomb'/><category scheme='http://www.blogger.com/atom/ns#' term='Android API Difference'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='Ice Cream Sandwich'/><title type='text'>Android API Difference between 3.0 and 4.0 OS - Ice Cream Sandwich</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;b&gt;API Difference between Honeycomb and Ice Cream Sandwich&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The overall difference between API Levels 13 and 14 is approximately 3.95%.The table below lists the numbers of program elements (packages, classes, constructors, methods, and fields) that were added, changed, or removed. The table includes only the highest-level program elements — that is, if a class with two methods was added, the number of methods added does not include those two methods, but the number of classes added does include that class.&lt;br /&gt;&lt;br /&gt;&lt;table summary="Number of differences"&gt;  &lt;tbody&gt;&lt;tr&gt;      &lt;th&gt;Type&lt;/th&gt;      &lt;th align="center"&gt;&lt;b&gt;Additions&lt;/b&gt;&lt;/th&gt;      &lt;th align="center"&gt;&lt;b&gt;Changes&lt;/b&gt;&lt;/th&gt;      &lt;th align="center"&gt;Removals&lt;/th&gt;      &lt;th align="center"&gt;&lt;b&gt;Total&lt;/b&gt;&lt;/th&gt;    &lt;/tr&gt;&lt;tr&gt;      &lt;td&gt;Packages&lt;/td&gt;      &lt;td align="right"&gt;5&lt;/td&gt;      &lt;td align="right"&gt;48&lt;/td&gt;      &lt;td align="right"&gt;0&lt;/td&gt;      &lt;td align="right"&gt;53&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;      &lt;td&gt;Classes and &lt;i&gt;Interfaces&lt;/i&gt;&lt;/td&gt;      &lt;td align="right"&gt;90&lt;/td&gt;      &lt;td align="right"&gt;192&lt;/td&gt;      &lt;td align="right"&gt;0&lt;/td&gt;      &lt;td align="right"&gt;282&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;      &lt;td&gt;Constructors&lt;/td&gt;      &lt;td align="right"&gt;19&lt;/td&gt;      &lt;td align="right"&gt;2&lt;/td&gt;      &lt;td align="right"&gt;0&lt;/td&gt;      &lt;td align="right"&gt;21&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;      &lt;td&gt;Methods&lt;/td&gt;      &lt;td align="right"&gt;265&lt;/td&gt;      &lt;td align="right"&gt;94&lt;/td&gt;      &lt;td align="right"&gt;29&lt;/td&gt;      &lt;td align="right"&gt;408&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;      &lt;td&gt;Fields&lt;/td&gt;      &lt;td align="right"&gt;405&lt;/td&gt;      &lt;td align="right"&gt;34&lt;/td&gt;      &lt;td align="right"&gt;16&lt;/td&gt;      &lt;td align="right"&gt;455&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;      &lt;td style="background-color: #fafafa;"&gt;&lt;b&gt;Total&lt;/b&gt;&lt;/td&gt;      &lt;td align="right" style="background-color: #fafafa;"&gt;&lt;b&gt;804&lt;/b&gt;&lt;/td&gt;      &lt;td align="right" style="background-color: #fafafa;"&gt;&lt;b&gt;370&lt;/b&gt;&lt;/td&gt;      &lt;td align="right" style="background-color: #fafafa;"&gt;&lt;b&gt;45&lt;/b&gt;&lt;/td&gt;      &lt;td align="right" style="background-color: #fafafa;"&gt;&lt;b&gt;1219&lt;/b&gt;&lt;/td&gt;    &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Here I found the list of removed classes, methods and interfaces in Android SDK 4.0.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;ALBUM_ART&amp;nbsp;&lt;/li&gt;&lt;li&gt;freeze ()&lt;/li&gt;&lt;li&gt;FX_SURFACE_BLUR&amp;nbsp;&lt;/li&gt;&lt;li&gt;FX_SURFACE_DIM&amp;nbsp;&lt;/li&gt;&lt;li&gt;FX_SURFACE_MASK&amp;nbsp;&lt;/li&gt;&lt;li&gt;FX_SURFACE_NORMAL&amp;nbsp;&lt;/li&gt;&lt;li&gt;GPU&amp;nbsp;&lt;/li&gt;&lt;li&gt;HARDWARE&amp;nbsp;&lt;/li&gt;&lt;li&gt;HIDDEN&amp;nbsp;&lt;/li&gt;&lt;li&gt;hide ()&lt;/li&gt;&lt;li&gt;NON_PREMULTIPLIED&amp;nbsp;&lt;/li&gt;&lt;li&gt;obtain (long, long, int, int, int[], PointerCoords[], int, float, float, int, int, int, int)&lt;/li&gt;&lt;li&gt;PUSH_BUFFERS&amp;nbsp;&lt;/li&gt;&lt;li&gt;readData&lt;/li&gt;&lt;ul&gt;&lt;li&gt;type &amp;nbsp;(float[]) in android.renderscript.AllocationAdapter&amp;nbsp;&lt;/li&gt;&lt;li&gt;type &amp;nbsp;(int[]) in android.renderscript.AllocationAdapter&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;SECURE&amp;nbsp;&lt;/li&gt;&lt;li&gt;setAlpha (float)&lt;/li&gt;&lt;li&gt;setDataSource (String)&lt;/li&gt;&lt;li&gt;setFlags (int, int)&lt;/li&gt;&lt;li&gt;setFreezeTint (int)&lt;/li&gt;&lt;li&gt;setLayer (int)&lt;/li&gt;&lt;li&gt;setMatrix (float, float, float, float)&lt;/li&gt;&lt;li&gt;setOrientation (int, int)&lt;/li&gt;&lt;li&gt;setPosition (int, int)&lt;/li&gt;&lt;li&gt;setSize (int, int)&lt;/li&gt;&lt;li&gt;setSummaryOff&lt;/li&gt;&lt;ul&gt;&lt;li&gt;type &amp;nbsp;(int) in android.preference.CheckBoxPreference&amp;nbsp;&lt;/li&gt;&lt;li&gt;type &amp;nbsp;(CharSequence) in android.preference.CheckBoxPreference&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;setSummaryOn&lt;/li&gt;&lt;ul&gt;&lt;li&gt;type &amp;nbsp;(int) in android.preference.CheckBoxPreference&amp;nbsp;&lt;/li&gt;&lt;li&gt;type &amp;nbsp;(CharSequence) in android.preference.CheckBoxPreference&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;setTransparentRegionHint (Region)&lt;/li&gt;&lt;li&gt;show ()&lt;/li&gt;&lt;li&gt;subData (int, FieldPacker)&lt;/li&gt;&lt;li&gt;subData1D&lt;/li&gt;&lt;ul&gt;&lt;li&gt;type &amp;nbsp;(int, int, byte[]) in android.renderscript.AllocationAdapter&amp;nbsp;&lt;/li&gt;&lt;li&gt;type &amp;nbsp;(int, int, float[]) in android.renderscript.AllocationAdapter&amp;nbsp;&lt;/li&gt;&lt;li&gt;type &amp;nbsp;(int, int, int[]) in android.renderscript.AllocationAdapter&amp;nbsp;&lt;/li&gt;&lt;li&gt;type &amp;nbsp;(int, int, short[]) in android.renderscript.AllocationAdapter&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;subData2D&lt;/li&gt;&lt;ul&gt;&lt;li&gt;type &amp;nbsp;(int, int, int, int, float[]) in android.renderscript.AllocationAdapter&amp;nbsp;&lt;/li&gt;&lt;li&gt;type &amp;nbsp;(int, int, int, int, int[]) in android.renderscript.AllocationAdapter&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;subElementData (int, int, FieldPacker)&lt;/li&gt;&lt;li&gt;SURACE_FROZEN&amp;nbsp;&lt;/li&gt;&lt;li&gt;SURFACE_BLUR_FREEZE&amp;nbsp;&lt;/li&gt;&lt;li&gt;SURFACE_DITHER&amp;nbsp;&lt;/li&gt;&lt;li&gt;SURFACE_FROZEN&amp;nbsp;&lt;/li&gt;&lt;li&gt;SURFACE_HIDDEN&amp;nbsp;&lt;/li&gt;&lt;li&gt;unfreeze ()&lt;/li&gt;&lt;/ul&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/17114597-2923135455064258001?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/2923135455064258001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/10/android-api-difference-between-30-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/2923135455064258001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/2923135455064258001'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/10/android-api-difference-between-30-and.html' title='Android API Difference between 3.0 and 4.0 OS - Ice Cream Sandwich'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-778033281082532357</id><published>2011-10-10T05:48:00.000-07:00</published><updated>2011-10-10T05:51:14.443-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Share Menu'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Add menu in Share</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-NRLTBg0IIKQ/TpLfxIH5rFI/AAAAAAAADPs/ylaN66QTUBk/s1600/device-2011-10-10-172956.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://2.bp.blogspot.com/-NRLTBg0IIKQ/TpLfxIH5rFI/AAAAAAAADPs/ylaN66QTUBk/s640/device-2011-10-10-172956.png" width="361" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Many times you might observe 3rd party application icon in Android Share menu. Suppose your application pick image/video from gallery, pick contact from contact book or pick audio from music player In this situation better options is to add your application menu in Share options so that user can directly select image/video from gallery or relavent application.&lt;br /&gt;&lt;br /&gt;Share menu will display name &amp;amp; icon of your application&lt;br /&gt;&lt;br /&gt;It is very easy to add menu in Share option.&lt;br /&gt;&lt;br /&gt;Step 1 : Create Android project&lt;br /&gt;&lt;br /&gt;Step 2 : Create activity named "MyShareMenu.java" (No need to create xml layout for this Activity)&lt;br /&gt;&lt;br /&gt;Step 3: Register new activity in AndroidManiFest.xml file like following&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt; &lt;activity android:name="MyShareMenu"&gt;&lt;br /&gt;            &lt;intent-filter&gt;&lt;br /&gt;                &lt;action android:name="android.intent.action.SEND"&gt;&lt;/action&gt;&lt;br /&gt;                &lt;data android:mimetype="*/*"&gt;&lt;/data&gt;&lt;br /&gt;                &lt;category android:name="android.intent.category.DEFAULT"&gt;&lt;/category&gt;&lt;br /&gt;            &lt;/intent-filter&gt;&lt;br /&gt;        &lt;/activity&gt;&lt;br /&gt;&lt;/pre&gt;The importent part is data tag in that you can specify mimeType as per your application supports. For the demo purpose I have choose */* means every mimeType but you can write image/*, audio/* , video/* as per the need of your application.&lt;br /&gt;&lt;br /&gt;Step 4: Fetch Uri of selected item, When user click on application from the Share menu, Android will call "MyShareMenu" activity with uri of selected item. Use following code to get Uri.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;		super.onCreate(savedInstanceState);&lt;br /&gt;		&lt;br /&gt;		Intent intent = getIntent();&lt;br /&gt;		Bundle extras = intent.getExtras();&lt;br /&gt;		String action = intent.getAction();&lt;br /&gt;		&lt;br /&gt;		// if this is from the share menu&lt;br /&gt;		if (Intent.ACTION_SEND.equals(action)) {   &lt;br /&gt;			if (extras.containsKey(Intent.EXTRA_STREAM)) {&lt;br /&gt;				// 	Get resource path&lt;br /&gt;				Uri uri = (Uri) extras.getParcelable(Intent.EXTRA_STREAM);&lt;br /&gt;				Toast.makeText(this, "Selected File :" + uri.toString(), Toast.LENGTH_LONG).show();&lt;br /&gt;		  }&lt;br /&gt;		} &lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;In above code I have displays Toast but your can write business logic as per your need.&lt;br /&gt;&lt;br /&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/17114597-778033281082532357?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/778033281082532357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/10/android-add-menu-in-share.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/778033281082532357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/778033281082532357'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/10/android-add-menu-in-share.html' title='Android Add menu in Share'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-NRLTBg0IIKQ/TpLfxIH5rFI/AAAAAAAADPs/ylaN66QTUBk/s72-c/device-2011-10-10-172956.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-4647583104683682724</id><published>2011-09-01T22:14:00.000-07:00</published><updated>2011-09-01T22:14:07.061-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sqlite'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Android - Copy sqlite database from device to PC</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Android supports SQLite database. It is placed in /data/data/&amp;lt;package name&amp;gt;/databases folder. When we are working with Emulator. we can access /data/data/&amp;lt;package name&amp;gt;/database folder. We can pull database from Emulator by using DDMS or adb pull comment. As we know that mobile device does not allow data/data folder for security reason. We can not access /data/data folder by using DDMS or abd pull. It may create problem for debugging. To solve this problem following function can use. Following function copy sqlite database from device to PC.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;public void copyDatabaseToSdCard() {&lt;br /&gt;		Log.e("Databasehealper", "********************************");&lt;br /&gt;		try {&lt;br /&gt;			File f1 = new File("DATABASE PATH AND NAME");&lt;br /&gt;			if (f1.exists()) {&lt;br /&gt;&lt;br /&gt;				File f2 = new File(Environment.getExternalStorageDirectory().getAbsoluteFile()+ "/My_App_Database.db");&lt;br /&gt;				f2.createNewFile();&lt;br /&gt;				InputStream in = new FileInputStream(f1);&lt;br /&gt;				OutputStream out = new FileOutputStream(f2);&lt;br /&gt;				byte[] buf = new byte[1024];&lt;br /&gt;				int len;&lt;br /&gt;				while ((len = in.read(buf)) &amp;gt; 0) {&lt;br /&gt;					out.write(buf, 0, len);&lt;br /&gt;				}&lt;br /&gt;				in.close();&lt;br /&gt;				out.close();&lt;br /&gt;			}&lt;br /&gt;		} catch (FileNotFoundException ex) {&lt;br /&gt;			System.out.println(ex.getMessage() + " in the specified directory.");&lt;br /&gt;			System.exit(0);&lt;br /&gt;		} catch (IOException e) {&lt;br /&gt;			e.printStackTrace();&lt;br /&gt;			System.out.println(e.getMessage());&lt;br /&gt;		}&lt;br /&gt;		Log.e("Databasehealper", "********************************");&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Generally I use this function in "DataBaseHelper.java" class. In Above function you have to replace "DATABASE PATH AND NAME" (i.e. /data/data/com.kpbird.sqldemo/databases/mydatabase.db) value. the function copy your database in root of sdcard with "My_App_Database.db" name.  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-4647583104683682724?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/4647583104683682724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/09/android-copy-sqlite-database-from.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/4647583104683682724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/4647583104683682724'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/09/android-copy-sqlite-database-from.html' title='Android - Copy sqlite database from device to PC'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-8840857149897926551</id><published>2011-08-29T22:52:00.000-07:00</published><updated>2011-08-29T23:06:47.035-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Best Practices</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;1. Be resolution independent. Check out “layoutopt” and “hierarchyviewer” that come with Android SDK under “tools”. They help analyzing and optimizing layouts.&lt;br /&gt;&lt;br /&gt;2. Respect and use an application lifecycle.&lt;br /&gt;&lt;br /&gt;3. In order to avoid friendly “Force Close” popups from your applications, use Android’s “AsyncTask” which will allow to execute a certain activity in background.&lt;br /&gt;&lt;br /&gt;4. Only use a WakeLock when you need one with as minimum level as possible: PARTIAL_WAKE_LOCK, SCREEN_DIM_WAKE_LOCK, FULL_WAKE_LOCK. Here is more about PowerManager.&lt;br /&gt;&lt;br /&gt;5. Always check whether “network connection” is enabled on a device, before attempting to transfer data.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6. Avoid creating objects unless you really need to, try reusing Android’s API instead. Creating an object in a “desktop” world is relatively cheap, however in such a resource constraint environment as a mobile phone, it will drastically impact the performance.. not in a good way.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;7. Externalize resources: localization / optimized layouts / strings / array of strings / etc.. Android compiles them into a list of internal resources by assigning an integer ID to each of them, hence making it “cheaper” at runtime, and easier to change =&amp;gt; since they are defined in a single location.&lt;br /&gt;&lt;br /&gt;8. Think about what an absolute minimum amount of updates / syncs you can do, and stick to this minimum. This will greatly improve battery life as well resource usage by the application.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;9. Think of hiring or delegating UI to people who are designers. Beauty is important.&lt;br /&gt;&lt;br /&gt;10. Consider using a “non sticky” services when appropriate.&lt;br /&gt;&lt;br /&gt;11. &amp;nbsp;Respect a “Back” button: make sure it actually brings user back to a previous state rather than to another state of the application’s flow.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;12. Do not use foreground services unless you absolutely need to.And if you do use foreground services, use an ongoing notification ( which, starting from Android 2.0, used automatically, if a service is started as a foreground one, but just to keep something in mind to be used for older OS versions )&lt;br /&gt;&lt;br /&gt;13. Kill your own services via stopSelf()&lt;br /&gt;&lt;br /&gt;14. Don’t use undocumented ( not officially supported ) APIs =&amp;gt; Next Android release your app is going to break.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;15. Use Intents and Intent Filters to Leverage Other Apps.&lt;br /&gt;&lt;br /&gt;16. Prefer Alarms and Intent Receivers to Services.&lt;br /&gt;&lt;br /&gt;17.&amp;nbsp;Make use of &lt;strong&gt;onPause()/onResume&lt;/strong&gt; to save or close what does not need to be opened the whole time.&lt;br /&gt;&lt;br /&gt;18.&amp;nbsp;Love RelativeLayout:  Most of the tutorials use  LinearLayout, but you will find that RelativeLayout is truly useful.   Many layouts, like the GridLayout aren't used much at all.  Play around  with RelativeLayout.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;19.&amp;nbsp;Use empty layout items:  You will often use empty items  in your layouts just for positioning other layouts.  For example, you  might use an empty TextField, of width=0 and height=0 and  centerInParent='True' just to anchor things relative to the middle of  the screen.  Also, you might have an empty TextField or LinearLayout so  that you can give a layout_weight=1 to it and have it take up more  screen space.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;20.&amp;nbsp;Learn to search your source:  The fastest solution  to many problems is to find where a particular parameter is used in some  other source.  Put a copy or link to the sample applications,  apps-for-android applications, and any other source you have under one  directory tree.  Use "grep -ir funky_parameter sample_code/" or your  favorite searching routine to quickly find some code that uses that  parameter.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;21.&amp;nbsp;Eclipse MAT is a great tool to analyze memory allocations. It will help to find memory leaks in your application.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;22. If your data set gets relatively large (&amp;gt;100KB) don't store it  in text file or XML file - parsing it will be too expensive. Use the  native SQLite implementation instead.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;23. Starting a new thread is expensive. Use one thread that executes  required tasks one by one, or use thread pools. You should use built in  classes like AsyncTask whenever possible.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;24.&amp;nbsp; MediaPlayer VS. SoundPool :&amp;nbsp;There is a HUGE difference between MediaPlayer and SoundPool. These Java classes play media (sounds, songs, videos, etc). What I think is odd is that I never knew that SoundPool existed! Yeah, if you casually broswe to the Audio Video section of the Android Developer site, it only mentions MeidaPlayer! If you are making an application that is going to play more than 7 sounds and you use MediaPlayer, it will force close no matter which version of the SDK you are running. In fact, if you create the MediaPlayer objects in the beginning of your main class, you will get a force close. I try to read the fine print in the debugger, but I can’t make heads or tails of it. Playing sounds, like Sound Board applications, video games, etc, should be coded to play sounds using the SoundPool. Sure, it’s like 10 more lines of code you have to reference (use Google), but it won’t force close.&lt;br /&gt;&lt;br /&gt;&lt;br /&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/17114597-8840857149897926551?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/8840857149897926551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/08/android-best-practices.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/8840857149897926551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/8840857149897926551'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/08/android-best-practices.html' title='Android Best Practices'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-1118167114437520666</id><published>2011-08-29T00:18:00.000-07:00</published><updated>2011-08-29T00:18:07.527-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android FTP demo'/><category scheme='http://www.blogger.com/atom/ns#' term='FTP'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Androit : FTP  operation (connection, upload, download ,list,etc)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;Android SDK does not provide FTP connection, so that We need to use external library for FTP operation, There are various option available for FTP connection like Apache, Here I am using ftp4j. I choose ftp4j because it's very lightweight api/jar file, the FTP library size is almost 70 KB. ftp4j provides listener (FTPDataTransferListener) to check progress of uploading or downloading.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sauronsoftware.it/projects/ftp4j/"&gt;Click here to download ftp4j library&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To Test my android ftp demo application you need to have FTP Host Url or IP and FTP username and password.&lt;br /&gt;&lt;br /&gt;Here is the uploadFile function, just pass File object which you want to upload,  FTP_HOST, FTP_USER,FTP_PASS  are static final String object, you need to replace value of there variable before test the android ftp demo application&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;public void uploadFile(File fileName){&lt;br /&gt;    	&lt;br /&gt;    	&lt;br /&gt;		 FTPClient client = new FTPClient();&lt;br /&gt;		try {&lt;br /&gt;			client.connect(FTP_HOST,21);&lt;br /&gt;			client.login(FTP_USER, FTP_PASS);&lt;br /&gt;			client.setType(FTPClient.TYPE_BINARY);&lt;br /&gt;			client.changeDirectory("/");&lt;br /&gt;			client.upload(fileName, new MyTransferListener());&lt;br /&gt;		} catch (Exception e) {&lt;br /&gt;			e.printStackTrace();&lt;br /&gt;			try {&lt;br /&gt;				client.disconnect(true);	&lt;br /&gt;			} catch (Exception e2) {&lt;br /&gt;				e2.printStackTrace();&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9CK0aNgCtjRNDlkYjRhOTktMWUyNy00ODcxLTg1ZWItMjc5ZDRhNzg4ZTFi&amp;amp;hl=en"&gt;Click Here to download full source code.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note: Click on File select download original.&lt;br /&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/17114597-1118167114437520666?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/1118167114437520666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/08/androit-ftp-operation-connection-upload.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/1118167114437520666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/1118167114437520666'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/08/androit-ftp-operation-connection-upload.html' title='Androit : FTP  operation (connection, upload, download ,list,etc)'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-3293934598835274095</id><published>2011-08-17T23:25:00.000-07:00</published><updated>2011-08-17T23:25:26.418-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='ActivityManager'/><title type='text'>Android: Check application is running ?</title><content type='html'>Android has different application lifecycle, Many times user press Home hardware button and application goes in background, Application is still running but it's in background, Now We want to identify that application is running in background or not. It require when we don't want to create new instance of Activity. Android SDK provide class named ActivityManager. Using ActivityManager we can check application is running in background.&lt;br /&gt;&lt;br /&gt;Here is the simple code for the same. you just need to change package name as per your requirement.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);&lt;br /&gt; // get the info from the currently running task&lt;br /&gt;List &amp;lt; ActivityManager.RunningTaskInfo &amp;gt; taskInfo = am.getRunningTasks(1);&lt;br /&gt;&lt;br /&gt;Log.d("current task :", "CURRENT Activity ::" + taskInfo.get(0).topActivity.getClass().getSimpleName());&lt;br /&gt;&lt;br /&gt;ComponentName componentInfo = taskInfo.get(0).topActivity;&lt;br /&gt;//if  app is running&lt;br /&gt;if(componentInfo.getPackageName().equalsIgnoreCase(*Package Name*))&lt;br /&gt;{&lt;br /&gt; //do the implementation for if your app is running&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Reference:&lt;br /&gt;&lt;a href="http://developer.android.com/reference/android/app/ActivityManager.html"&gt;http://developer.android.com/reference/android/app/ActivityManager.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-3293934598835274095?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/3293934598835274095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/08/android-check-application-is-running.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/3293934598835274095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/3293934598835274095'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/08/android-check-application-is-running.html' title='Android: Check application is running ?'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-7056823834845520692</id><published>2011-08-17T21:25:00.000-07:00</published><updated>2011-08-17T21:25:36.806-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware Information'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android fetch Hardware Information</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Sometime we required to identify the device information (Hardware Information).&lt;br /&gt;&lt;br /&gt;Android SDK provide following class to get Hardware Information like Manufacturer, CPU, Memory ....&lt;br /&gt;Example&lt;br /&gt;&lt;pre class="brush: java"&gt;String manu = Build.MANUFACTURER;&lt;br /&gt;String board = Build.BOARD;&lt;br /&gt;String display = Build.DISPLAY;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Reference&lt;br /&gt;http://developer.android.com/reference/android/os/Build.html&lt;br /&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/17114597-7056823834845520692?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/7056823834845520692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/08/android-fetch-hardware-information.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/7056823834845520692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/7056823834845520692'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/08/android-fetch-hardware-information.html' title='Android fetch Hardware Information'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-1638720213918276282</id><published>2011-08-11T21:52:00.000-07:00</published><updated>2011-08-11T21:52:39.649-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='javamail'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Send Email without User Interaction (In Background)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Android provide Intent to send the email. It compose email in Native Email editor and user need to click on Send button to send the email. It crease issue when application need to send more then one email. User will not click on send button 10 or 20 times.&lt;br /&gt;&lt;br /&gt;To solve this issue. I found javaMail API implemented for Andorid.&lt;br /&gt;&lt;br /&gt;I have create Demo project, attached with this article. JavaMail also allowed to send email with attachment and HTML as body content. JavaMail required email user name &amp;amp; password to send the email.&lt;br /&gt;&lt;br /&gt;You can find "Mail" class in attached source code.&amp;nbsp; In following code you need to replace USER EMAIL, PASSWORD, user name and password is require to send email. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code Snippet To Send Email&lt;/b&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;        Mail m = new Mail("USER EMAIL", "PASSWORD"); &lt;br /&gt;        String[] toArr = {"EMAIL-1", "EMAIL-2"}; &lt;br /&gt;        m.setTo(toArr); &lt;br /&gt;        m.setFrom("USER EMAIL"); &lt;br /&gt;        m.setSubject("This is an email sent using my Mail JavaMail wrapper from an Android device."); &lt;br /&gt;        m.setBody("Email body"); &lt;br /&gt;        try { &lt;br /&gt;          m.addAttachment("/sdcard/bday.jpg"); &lt;br /&gt;          if(m.send()) { &lt;br /&gt;            Toast.makeText(this, "Email was sent successfully.", Toast.LENGTH_LONG).show(); &lt;br /&gt;          } else { &lt;br /&gt;            Toast.makeText(this, "Email was not sent.", Toast.LENGTH_LONG).show(); &lt;br /&gt;          } &lt;br /&gt;        } catch(Exception e) { &lt;br /&gt;          Log.e("MailApp", "Could not send email", e); &lt;br /&gt;        } &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;a href="https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9CK0aNgCtjROTgyYzUzMzgtYzk1MS00NDhhLThlZGUtZjVjMTQ1OTRjNTYw&amp;amp;hl=en_US"&gt;Click Here to Download the Source Code&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp;&lt;span style="color: orange; font-size: small;"&gt;Note: To download source code click on File-&amp;gt;Download Original File&lt;/span&gt;&lt;/span&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/17114597-1638720213918276282?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/1638720213918276282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/08/send-email-without-user-interaction-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/1638720213918276282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/1638720213918276282'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/08/send-email-without-user-interaction-in.html' title='Send Email without User Interaction (In Background)'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-8341997310017187335</id><published>2011-08-11T03:32:00.000-07:00</published><updated>2011-08-11T03:32:56.631-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='Crash Log'/><title type='text'>Android Application Crash Logs</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Android SDK shipped with many tools for development but sometime situation occur that application works perfect when you test. When you provide APK to client then error occur. How do you identify where the error comes. It difficult because usually clients are non-technical person. clients might be in another country. In these situation you can suggest your client to follow following steps to collect application crash logs. &lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download &amp;amp; Install Log collector app from &lt;a href="https://market.android.com/details?id=com.xtralogic.android.logcollector&amp;amp;feature=search_result"&gt;https://market.android.com/details?id=com.xtralogic.android.logcollector&amp;amp;feature=search_result&lt;/a&gt; on device.&lt;/li&gt;&lt;li&gt;Now run application which you want to Test for crash logs.&lt;/li&gt;&lt;li&gt;Whenever application crashes, start Log Collector application.&lt;/li&gt;&lt;li&gt;It will ask you for sending options for crash logs, choose gmail app.&lt;/li&gt;&lt;li&gt;write recipient email id and send the email.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&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/17114597-8341997310017187335?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/8341997310017187335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/08/android-application-crash-logs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/8341997310017187335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/8341997310017187335'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/08/android-application-crash-logs.html' title='Android Application Crash Logs'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-4956719495815131984</id><published>2011-08-05T02:36:00.000-07:00</published><updated>2011-08-05T02:39:16.663-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='layoutopt'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='layout optimize'/><title type='text'>Android In-Depth : How layoutopt works ?</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Hello All,&lt;br /&gt;&lt;br /&gt;In my previous post, I have explain you how to use layoutopt. It is common question how layoutopt works.&lt;br /&gt;As you all aware that Android OS is open source. so I find the source code of layoutopt. layout is developed in core java. It parse the XML file and verify set of rules. &amp;nbsp;&lt;a href="http://groovy.codehaus.org/"&gt;Apache Groovy&lt;/a&gt;&amp;nbsp;library to implemented for rule engine.&lt;br /&gt;&lt;br /&gt;I have also attached source code with this article.&lt;br /&gt;&lt;br /&gt;Layoutopt apply following rules on every Layout.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;IncorrectHeightInScrollView.rule&lt;/li&gt;&lt;li&gt;IncorrectWidthInHorizontalScrollView.rule&lt;/li&gt;&lt;li&gt;InefficientWeight.rule&lt;/li&gt;&lt;li&gt;InefficientWeight.rule&lt;/li&gt;&lt;li&gt;NestedScrollingWidgets.rule&lt;/li&gt;&lt;li&gt;TooManyChildren.rule&lt;/li&gt;&lt;li&gt;TooManyLevels.rule&lt;/li&gt;&lt;li&gt;TooManyViews.rule&lt;/li&gt;&lt;li&gt;UseCompoundDrawables.rule&lt;/li&gt;&lt;li&gt;UselessLayout.rule&lt;/li&gt;&lt;li&gt;UselessView.rule&lt;/li&gt;&lt;/ol&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Let's see what's inside the rule file&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee; font-family: 'Courier New', Courier, monospace;"&gt;// Rule: UselessView&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee; font-family: 'Courier New', Courier, monospace;"&gt;//&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee; font-family: 'Courier New', Courier, monospace;"&gt;// Description: Checks whether a container view can be removed.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee; font-family: 'Courier New', Courier, monospace;"&gt;//&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee; font-family: 'Courier New', Courier, monospace;"&gt;// Conditions:&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee; font-family: 'Courier New', Courier, monospace;"&gt;// - The node is a container view (LinearLayout, etc.)&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee; font-family: 'Courier New', Courier, monospace;"&gt;// - The node has no id&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee; font-family: 'Courier New', Courier, monospace;"&gt;// - The node has no background&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee; font-family: 'Courier New', Courier, monospace;"&gt;// - The node has no children&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee; font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee; font-family: 'Courier New', Courier, monospace;"&gt;if (node.isContainer() &amp;amp;&amp;amp; node.'*'.size() == 0 &amp;amp;&amp;amp; !node.'@android:id' &amp;amp;&amp;amp;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee; font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; !node.'@android:background') {&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee; font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; analysis &amp;lt;&amp;lt; "This ${node.name()} view is useless (no children, no background, no id)"&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee; font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9CK0aNgCtjRYmJiZjRmOTAtZDA5YS00YjFlLTgwYzQtYjcwZGQwNzU3ZGI1&amp;amp;hl=en_US"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;ClickHere To Download Source Code&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06;"&gt;Note: Click on link redirect to docs.google.com, Click on File-&amp;gt;Download Original to download code&lt;/span&gt;&lt;/b&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/17114597-4956719495815131984?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/4956719495815131984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/08/android-in-depth-how-layoutopt-works.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/4956719495815131984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/4956719495815131984'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/08/android-in-depth-how-layoutopt-works.html' title='Android In-Depth : How layoutopt works ?'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-7623874657827824720</id><published>2011-08-05T01:29:00.000-07:00</published><updated>2011-08-05T01:29:43.124-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='layoutopt'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='layout optimize'/><title type='text'>Android Layout Optimize (layoutopt)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Android has many command-line tools available in platform-tools folder. "layoutopt" is one of them. Many time we take layout inside layout and never think about optimization of UI. Our main fous to achieve the final output. layoutopt tool allow us to verify our layout and suggest the change (if any). layoutopt is command-line tool. layoutopt analyze XML files.&lt;br /&gt;&lt;br /&gt;1. Open Terminal&lt;br /&gt;2. Go to Android-SDK/platform-tools/&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="jd-descr" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; 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;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; line-height: 1.3em; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;To run&amp;nbsp;&lt;code style="color: #007000; line-height: 1em;"&gt;layoutopt&lt;/code&gt;&amp;nbsp;against a given list of layout resources:&lt;/span&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="background-color: #fafafa; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; color: #007000; font-family: monospace; font-size: 13px; line-height: inherit; margin-bottom: 1em; margin-left: 1em; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px;"&gt;&lt;span class="pln" style="color: black;"&gt;layoutopt &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;file_or_directory&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&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; color: #333333; font-family: arial, sans-serif; font-size: 13px; line-height: 1.3em; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;For example:&lt;/div&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #fafafa; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; color: #007000; font-family: monospace; line-height: inherit; margin-bottom: 1em; margin-left: 1em; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px;"&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;span class="pln" style="color: black;"&gt;$ layoutopt samples&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;samples&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;compound&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;xml&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;7&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;23&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;The&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; root&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;level &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;FrameLayout&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; can be replaced &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;with&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;merge&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;11&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;21&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;This&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; layout &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;or&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; its &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;FrameLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; parent &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; useless&lt;br /&gt;samples&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;simple&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;xml&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;7&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;7&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;The&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; root&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;level &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;FrameLayout&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; can be replaced &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;with&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;merge&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;samples&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;too_deep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;xml&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:-&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;This&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; layout has too many nested layouts&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;13&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; levels&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; it should have &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;10&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;!&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;20&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;81&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;This&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; layout &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;or&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; its &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; parent &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; useless&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;24&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;79&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;This&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; layout &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;or&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; its &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; parent &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; useless&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;28&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;77&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;This&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; layout &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;or&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; its &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; parent &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; useless&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;32&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;75&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;This&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; layout &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;or&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; its &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; parent &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; useless&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;36&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;73&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;This&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; layout &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;or&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; its &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; parent &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; useless&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;40&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;71&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;This&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; layout &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;or&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; its &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; parent &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; useless&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;44&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;69&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;This&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; layout &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;or&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; its &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; parent &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; useless&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;48&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;67&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;This&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; layout &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;or&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; its &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; parent &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; useless&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;52&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;65&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;This&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; layout &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;or&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; its &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; parent &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; useless&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;56&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;63&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;This&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; layout &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;or&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; its &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; parent &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; useless&lt;br /&gt;samples&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;too_many&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;xml&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;7&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;413&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;The&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; root&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;level &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;FrameLayout&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; can be replaced &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;with&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;merge&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:-&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;This&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; layout has too many views&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;81&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; views&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; it should have &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;80&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;!&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;samples&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;useless&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;xml&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;7&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;19&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;The&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; root&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;level &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;FrameLayout&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; can be replaced &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;with&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;merge&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;11&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;17&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;This&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;LinearLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; layout &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;or&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; its &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;FrameLayout&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; parent &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; useless&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Reference Article.&lt;br /&gt;1.&amp;nbsp;http://developer.android.com/guide/developing/debugging/debugging-ui.html#layoutopt&lt;br /&gt;2.&amp;nbsp;http://mobile.tutsplus.com/tutorials/android/android-sdk-tools-layout-optimization/&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-7623874657827824720?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/7623874657827824720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/08/android-layout-optimize-layoutopt.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/7623874657827824720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/7623874657827824720'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/08/android-layout-optimize-layoutopt.html' title='Android Layout Optimize (layoutopt)'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-2915068368496474825</id><published>2011-08-01T23:32:00.000-07:00</published><updated>2011-08-01T23:33:33.442-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plist'/><category scheme='http://www.blogger.com/atom/ns#' term='android plist parser'/><category scheme='http://www.blogger.com/atom/ns#' term='plist parser'/><category scheme='http://www.blogger.com/atom/ns#' term='Andorid'/><title type='text'>Android Plist Parser</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-4FIrHtHwcGE/TjeaMLmUNqI/AAAAAAAADPY/12knmyb9Udg/s1600/plistParser" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-4FIrHtHwcGE/TjeaMLmUNqI/AAAAAAAADPY/12knmyb9Udg/s320/plistParser" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The Android-PList-Parser is designed to work with valid PList XMLs  only.  Before you start getting into the code, you want to be certain  that the PList XML you're working with is valid according to the DTD).  If it's valid, proceed to the next  paragraph.  you may want to write code from scratch instead of  trying to modify this code (since it's algorithm relies on the  assumption of validity). &lt;br /&gt;&lt;br /&gt;The basic rule for the algorithm is that elements are  treated in two different ways:  ones that can have children (Dict and  Array), and ones that can't.  Elements that can have children are pushed  onto a ArrayList method is used.  With these concepts in mind, reading the  code should be a little easier.&lt;br /&gt;&lt;br /&gt;This is very basic parser. you require to modify as per your requirement.&lt;br /&gt;&lt;br /&gt;Let's me show you the example which I have prepare specially for my Plist problem. There are two main file 1. DataModel.java and 2. ParsePlist.java&lt;br /&gt;&lt;br /&gt;1. DataMode.java - A model class holds the value of Plist.&lt;br /&gt;2. ParsePlist.java - Class which parse the plist.&lt;br /&gt;3. Sample.plist &amp;nbsp;- Plist file placed in Asset folder.&lt;br /&gt;4. PlistParser.java - Activity has button to trigger the parsing event. &amp;nbsp;On Parse Button click, Application will fetch plist file from assets and pass the XML string content to ParsePlist class.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;a href="http://quicknews4you.com/kpbird/PlistParser.zip"&gt;Download Source&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;1. sample.plist - Asmple plist file &lt;br /&gt;&lt;pre class="brush: xml;"&gt;&lt;array&gt;&lt;br /&gt; &lt;dict&gt;&lt;br /&gt;  &lt;key&gt;gameid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;1&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;drawid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;5544&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;dname&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;9623&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;date&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;9999-01-01 00:00:00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;prize&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;1490000.00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;sels&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;&lt;/string&gt;&lt;br /&gt; &lt;/dict&gt;&lt;br /&gt; &lt;dict&gt;&lt;br /&gt;  &lt;key&gt;gameid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;2&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;drawid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;5546&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;dname&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;753&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;date&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;9999-01-01 00:00:00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;prize&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;20030000.00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;sels&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;&lt;/string&gt;&lt;br /&gt; &lt;/dict&gt;&lt;br /&gt; &lt;dict&gt;&lt;br /&gt;  &lt;key&gt;gameid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;11&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;drawid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;5545&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;dname&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;3185&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;date&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;2012-01-28 00:00:00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;prize&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;0.00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;sels&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;&lt;/string&gt;&lt;br /&gt; &lt;/dict&gt;&lt;br /&gt; &lt;dict&gt;&lt;br /&gt;  &lt;key&gt;gameid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;11&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;drawid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;5505&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;dname&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;3183&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;date&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;2012-01-21 00:00:00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;prize&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;0.00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;sels&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;&lt;/string&gt;&lt;br /&gt; &lt;/dict&gt;&lt;br /&gt; &lt;dict&gt;&lt;br /&gt;  &lt;key&gt;gameid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;11&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;drawid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;5498&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;dname&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;3181&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;date&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;2012-01-14 00:00:00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;prize&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;0.00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;sels&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;&lt;/string&gt;&lt;br /&gt; &lt;/dict&gt;&lt;br /&gt; &lt;dict&gt;&lt;br /&gt;  &lt;key&gt;gameid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;11&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;drawid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;5485&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;dname&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;3179&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;date&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;2012-01-07 00:00:00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;prize&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;0.00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;sels&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;&lt;/string&gt;&lt;br /&gt; &lt;/dict&gt;&lt;br /&gt; &lt;dict&gt;&lt;br /&gt;  &lt;key&gt;gameid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;11&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;drawid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;5479&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;dname&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;3177&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;date&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;2011-12-31 00:00:00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;prize&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;0.00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;sels&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;&lt;/string&gt;&lt;br /&gt; &lt;/dict&gt;&lt;br /&gt; &lt;dict&gt;&lt;br /&gt;  &lt;key&gt;gameid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;11&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;drawid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;5472&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;dname&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;3175&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;date&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;2011-12-24 00:00:00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;prize&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;0.00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;sels&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;&lt;/string&gt;&lt;br /&gt; &lt;/dict&gt;&lt;br /&gt; &lt;dict&gt;&lt;br /&gt;  &lt;key&gt;gameid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;11&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;drawid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;5434&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;dname&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;3173&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;date&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;2011-12-17 00:00:00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;prize&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;0.00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;sels&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;&lt;/string&gt;&lt;br /&gt; &lt;/dict&gt;&lt;br /&gt; &lt;dict&gt;&lt;br /&gt;  &lt;key&gt;gameid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;11&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;drawid&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;5405&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;dname&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;3171&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;date&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;2011-12-10 00:00:00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;prize&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;0.00&lt;/string&gt;&lt;br /&gt;  &lt;key&gt;sels&lt;/key&gt;&lt;br /&gt;  &lt;string&gt;&lt;/string&gt;&lt;br /&gt; &lt;/dict&gt;&lt;br /&gt;&lt;/array&gt;    &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2. PlistParser.java - Activity has button to trigger Plist parsing.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;package com.kpbird.plistparser;&lt;br /&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStreamReader;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.Iterator;&lt;br /&gt;&lt;br /&gt;import com.kpbird.plist.DataModel;&lt;br /&gt;import com.kpbird.plist.ParsePlist;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.util.Log;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.View.OnClickListener;&lt;br /&gt;import android.widget.Button;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class PlistParser extends Activity implements OnClickListener {&lt;br /&gt;&lt;br /&gt; Button btnStart;&lt;br /&gt; @Override&lt;br /&gt; public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;  super.onCreate(savedInstanceState);&lt;br /&gt;  setContentView(R.layout.main);&lt;br /&gt;  btnStart = (Button) findViewById(R.id.button1);&lt;br /&gt;  btnStart.setOnClickListener(this);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;br /&gt; /// Read plist from Assets&lt;br /&gt; private String readPlistFromAssets() {&lt;br /&gt;  StringBuffer sb = new StringBuffer();&lt;br /&gt;  BufferedReader br=null;&lt;br /&gt;  try {&lt;br /&gt;    br = new BufferedReader(new InputStreamReader(getAssets().open("sample.plist"))); &lt;br /&gt;   String temp;&lt;br /&gt;   while ((temp = br.readLine()) != null)&lt;br /&gt;    sb.append(temp);&lt;br /&gt;  } catch (IOException e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;  } finally {&lt;br /&gt;   try {&lt;br /&gt;    br.close(); // stop reading&lt;br /&gt;   } catch (IOException ex) {&lt;br /&gt;    ex.printStackTrace();&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  return sb.toString();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; // Start Parsing on Button Click&lt;br /&gt; public void onClick(View v) {&lt;br /&gt;  // Read Plist content&lt;br /&gt;  String xml = readPlistFromAssets();&lt;br /&gt;  // create object of Parser Class&lt;br /&gt;  ParsePlist pp = new ParsePlist();&lt;br /&gt;  // parse Plist and fill in plist array&lt;br /&gt;  ArrayList&lt;datamodel&gt; plist = pp.parsePlist(xml);&lt;br /&gt;  // Print ArrayList&lt;br /&gt;  Iterator&lt;datamodel&gt; i = plist.iterator();&lt;br /&gt;  while(i.hasNext()){&lt;br /&gt;   DataModel d = i.next();&lt;br /&gt;   Log.i("Plist","=========================");&lt;br /&gt;   Log.i("Plist","Date " + d.getDate());&lt;br /&gt;   Log.i("Plist","DrawName " + d.getDrawName());&lt;br /&gt;   Log.i("Plist","Prize " + d.getPrize());&lt;br /&gt;   Log.i("Plist","Sels " + d.getSels());&lt;br /&gt;   Log.i("Plist","Draw Id " + d.getDrawId());&lt;br /&gt;   Log.i("Plist","Game Id " + d.getGameId());&lt;br /&gt;  }&lt;br /&gt;  Toast.makeText(this, "Parsing completed please check logcat...", Toast.LENGTH_LONG).show();&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/datamodel&gt;&lt;/datamodel&gt;&lt;/pre&gt;&lt;br /&gt;3. DataModel.java - It will store Plist data. you need to modify this class according to your requirement.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;package com.kpbird.plist;&lt;br /&gt;&lt;br /&gt;public class DataModel {&lt;br /&gt; &lt;br /&gt; private int gameId;&lt;br /&gt; private int drawId;&lt;br /&gt; private String drawName;&lt;br /&gt; private String date;&lt;br /&gt; private String prize;&lt;br /&gt; private String sels;&lt;br /&gt; &lt;br /&gt; public int getGameId() {&lt;br /&gt;  return gameId;&lt;br /&gt; }&lt;br /&gt; public void setGameId(int gameId) {&lt;br /&gt;  this.gameId = gameId;&lt;br /&gt; }&lt;br /&gt; public int getDrawId() {&lt;br /&gt;  return drawId;&lt;br /&gt; }&lt;br /&gt; public void setDrawId(int drawId) {&lt;br /&gt;  this.drawId = drawId;&lt;br /&gt; }&lt;br /&gt; public String getDrawName() {&lt;br /&gt;  return drawName;&lt;br /&gt; }&lt;br /&gt; public void setDrawName(String drawName) {&lt;br /&gt;  this.drawName = drawName;&lt;br /&gt; }&lt;br /&gt; public String getDate() {&lt;br /&gt;  return date;&lt;br /&gt; }&lt;br /&gt; public void setDate(String date) {&lt;br /&gt;  this.date = date;&lt;br /&gt; }&lt;br /&gt; public String getPrize() {&lt;br /&gt;  return prize;&lt;br /&gt; }&lt;br /&gt; public void setPrize(String prize) {&lt;br /&gt;  this.prize = prize;&lt;br /&gt; }&lt;br /&gt; public String getSels() {&lt;br /&gt;  return sels;&lt;br /&gt; }&lt;br /&gt; public void setSels(String sels) {&lt;br /&gt;  this.sels = sels;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4. ParsePlist.java - Class having method to parse plist. Create object of this class and pass plist content as string in method "parsePlist" It will return ArrayList of DataModel object.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;package com.kpbird.plist;&lt;br /&gt;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.StringReader;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;&lt;br /&gt;import javax.xml.parsers.DocumentBuilder;&lt;br /&gt;import javax.xml.parsers.DocumentBuilderFactory;&lt;br /&gt;import javax.xml.parsers.ParserConfigurationException;&lt;br /&gt;&lt;br /&gt;import org.w3c.dom.Document;&lt;br /&gt;import org.w3c.dom.Element;&lt;br /&gt;import org.w3c.dom.Node;&lt;br /&gt;import org.w3c.dom.NodeList;&lt;br /&gt;import org.xml.sax.InputSource;&lt;br /&gt;import org.xml.sax.SAXException;&lt;br /&gt;&lt;br /&gt;public class ParsePlist {&lt;br /&gt;&lt;br /&gt; &lt;br /&gt; // parse Plist and fill in arraylist&lt;br /&gt; public ArrayList&lt;datamodel&gt; parsePlist(String xml) {&lt;br /&gt;  final ArrayList&lt;datamodel&gt; dataModels = new ArrayList&lt;datamodel&gt;();&lt;br /&gt;  //Get the xml string from assets&lt;br /&gt;  &lt;br /&gt;        final Document doc = XMLfromString(xml);&lt;br /&gt;        &lt;br /&gt;        final NodeList nodes_array = doc.getElementsByTagName("array");&lt;br /&gt;  &lt;br /&gt;  //Fill in the list items from the XML document&lt;br /&gt;  for ( int index = 0; index &amp;lt; nodes_array.getLength(); index++ ) {&lt;br /&gt;   &lt;br /&gt;   final Node node = nodes_array.item(index);&lt;br /&gt;   &lt;br /&gt;   if ( node.getNodeType() == Node.ELEMENT_NODE ) {&lt;br /&gt;    final Element e = (Element)nodes_array.item(index);&lt;br /&gt;    &lt;br /&gt;    final NodeList nodeKey = e.getElementsByTagName("key");&lt;br /&gt;    final NodeList nodeValue = e.getElementsByTagName("string");&lt;br /&gt;    DataModel model = new DataModel();&lt;br /&gt;    &lt;br /&gt;    for (int i=0; i &amp;lt; nodeValue.getLength(); i++) {&lt;br /&gt;     &lt;br /&gt;     final Element eleKey = (Element)nodeKey.item(i);&lt;br /&gt;     final Element eleString = (Element)noveValue.item(i);&lt;br /&gt;     &lt;br /&gt;     &lt;br /&gt;     if ( eleString != null ) {&lt;br /&gt;      &lt;br /&gt;      String strValue = getValue(eleString, "string");&lt;br /&gt;      &lt;br /&gt;      if(getValue(eleKey, "key").equals("gameid")) {&lt;br /&gt;       model = new DataModel();&lt;br /&gt;       model.setGameId(Integer.parseInt(strValue));&lt;br /&gt;      } else if(getValue(eleKey, "key").equals("drawid")) {&lt;br /&gt;       model.setDrawId(Integer.parseInt(strValue));&lt;br /&gt;      } else if(getValue(eleKey, "key").equals("dname")) {&lt;br /&gt;       model.setDrawName(strValue);&lt;br /&gt;      } else if(getValue(eleKey, "key").equals("date")) {&lt;br /&gt;       model.setDate(strValue);&lt;br /&gt;      } else if(getValue(eleKey, "key").equals("prize")) {&lt;br /&gt;       model.setPrize(strValue);&lt;br /&gt;      } else if(getValue(eleKey, "key").equals("sels")) {&lt;br /&gt;       if ( strValue == null ) {&lt;br /&gt;        strValue = "";&lt;br /&gt;       }&lt;br /&gt;       model.setSels(strValue);&lt;br /&gt;       dataModels.add(model);&lt;br /&gt;      }&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  return dataModels;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; // Create xml document object from XML String&lt;br /&gt; private  Document XMLfromString(String xml) {&lt;br /&gt;  Document doc = null;&lt;br /&gt;&lt;br /&gt;  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();&lt;br /&gt;  try {&lt;br /&gt;   DocumentBuilder db = dbf.newDocumentBuilder();&lt;br /&gt;   InputSource is = new InputSource();&lt;br /&gt;   is.setCharacterStream(new StringReader(xml));&lt;br /&gt;   doc = db.parse(is);&lt;br /&gt;  } catch (ParserConfigurationException e) {&lt;br /&gt;   System.out.println("XML parse error: " + e.getMessage());&lt;br /&gt;   return null;&lt;br /&gt;  } catch (SAXException e) {&lt;br /&gt;   System.out.println("Wrong XML file structure: " + e.getMessage());&lt;br /&gt;   return null;&lt;br /&gt;  } catch (IOException e) {&lt;br /&gt;   System.out.println("I/O exeption: " + e.getMessage());&lt;br /&gt;   return null;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  return doc;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; // fetch value from Text Node only&lt;br /&gt; private   String getElementValue(Node elem) {&lt;br /&gt;  Node kid;&lt;br /&gt;  if (elem != null) {&lt;br /&gt;   if (elem.hasChildNodes()) {&lt;br /&gt;    for (kid = elem.getFirstChild(); kid != null; kid = kid.getNextSibling()) {&lt;br /&gt;     if (kid.getNodeType() == Node.TEXT_NODE) {&lt;br /&gt;      return kid.getNodeValue();&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  return "";&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /// Fetch value from XML Node&lt;br /&gt; private   String getValue(Element item, String str) {&lt;br /&gt;  NodeList n = item.getElementsByTagName(str);&lt;br /&gt;  return getElementValue(n.item(0));&lt;br /&gt; }&lt;br /&gt;} &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;/datamodel&gt;&lt;/datamodel&gt;&lt;/datamodel&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-2915068368496474825?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/2915068368496474825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/08/android-plist-parser.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/2915068368496474825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/2915068368496474825'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/08/android-plist-parser.html' title='Android Plist Parser'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-4FIrHtHwcGE/TjeaMLmUNqI/AAAAAAAADPY/12knmyb9Udg/s72-c/plistParser' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-4122902659434736564</id><published>2011-07-27T10:41:00.000-07:00</published><updated>2011-07-27T10:41:55.039-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ultimatepinger'/><title type='text'>UltimatePinger</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;"&gt;Dear fellas,&lt;br /&gt;&lt;br /&gt;Greetings of the day.&lt;br /&gt;&lt;br /&gt;Allow me to introduce our free service : "UltimatePinger" - The Ultimate Ping Engine. UltimatePinger is a Service like Ping-o-matic, Pingoat, PingDevice etc., just more intuitive, less obtrusive and may be fun to use. Furthermore, it is the only free ping engine that allows pinging multiple updates (urls) to multiple ping servers (of your choice) in realtime. Did I mention it's free?&lt;br /&gt;&lt;br /&gt;UltimatePinger is free because it's how we conceived it, plus, it's based upon (mostly) free resources. Additionally, it's anonymous, and will stay so if it's not being grossly misused.&lt;br /&gt;&lt;br /&gt;If you are serious about popularizing your site or blog, you need to make sure that every new content on your blog is indexed by the search engines and directories. Further, every new backlink pointing to your site/blog must get indexed too (otherwise the very purpose of building backlinks gets defeated)! Pinging the new updates and pages containing the backlinks to search engines and ping servers expedites the process of crawling and subsequent indexing.&lt;br /&gt;&lt;br /&gt;Now imagine you create a single post/page and 25 back links to the new page (say using SocialMonkey) per day, then you need to make 26 pings to 30+ ping servers everyday. Doing it manually is impossible. Ping-o-matic and other such ping services come to your rescue here, which automatically ping single urls to a list of predefined services, though you still have to ping every single one of 26 urls manually. Sure, there are bulk-ping services like pingdevice - which will let you ping all 26 urls at a single go, but still, not all services ping to all ping servers (of search engines and directories), so, you still have to ping other ping servers that your chosen ping service doesn't ping. It is here, apart from other things that UltimatePinger is different, probably batter too, from other services. You see, it lets you ping multiple urls to multiple ping servers of your choice in a single go! Further, it keeps track of your failed pings and lets you reping only the failed ones in a single click. Not to mention, it allows you to save the list of your preferred ping servers to your computer. It's real time, so you get to know the results of your pings in real time.&lt;br /&gt;&lt;br /&gt;Right now it is in beta. If you like it, tell your friends about it, and if not, tell us "exactly what doesn't click for you". To know more about the UltimatePinger, be sure to read the FAQs.&lt;br /&gt;&lt;br /&gt;So without further ado, welcome to the UltimatePinger&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;"&gt;&lt;a href="http://ultimatepinger.tk/"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;http://ultimatepinger.tk/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-4122902659434736564?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/4122902659434736564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/07/ultimatepinger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/4122902659434736564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/4122902659434736564'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/07/ultimatepinger.html' title='UltimatePinger'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-7974529048592176482</id><published>2011-06-12T10:04:00.000-07:00</published><updated>2011-06-12T21:29:19.411-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SocialMonkee'/><category scheme='http://www.blogger.com/atom/ns#' term='Backlink'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='Traffic'/><category scheme='http://www.blogger.com/atom/ns#' term='PageRank'/><title type='text'>Boost Traffic to Your Site with SocialMonkee - Why and How?</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.socialmonkee.com/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="88" src="http://www.socialmonkee.com/images/logo.png" width="391" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;This article is intended towards novice bloggers, but everyone is welcome to read it and hopefully comment upon it. This is not a HowTo, rather a WhyTo, if you know what I mean, in which case, title of this blog is a bit misleading!&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;If you are reading this post, you are interested in increasing traffic to your blog, and I will tell you one very good way to do it just in a while, but before that, take a few moments to consider this question, "What do we mean by traffic and how do we increase it?" In simple terms, the number of people visiting your website in a specific time, say a day, is traffic, but like everything else in life, there is more to it. You see, if your website is OKAY, people may visit it again, but that won't be considered increase in traffic. The real increase is new visitors, which brings us to the other half of the question, how do we get new visitors to achieve increase in traffic? The answer is advertising, be it paid (as in google adwords) or free (Search Engine Optimization), people need to know of the existence of your site and they need to reach you through a hyperlink. So, where do you put this hyperlink then? Surely some place visible to your target audience - like google search results!&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;There are many ways to increase your visibility on the web like social networking/bookmarking, directories, link exchange and other link building exercises etc., however, ultimately, google search results is the only way you can make yourself truly visible. Sure, there are many search engines and infinite ways to promote your website, but google targeted SEO weighs probably more than everything else combined. Thus, everything you do, make sure you are targeting search engine optimization (SEO) with respect to Google.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;So, how can this SocialMonkee help me about this SEO thing, you ask? You see, SEO used to be about keywords a decade ago, but it's now about Pagerank? That is not to say keywords are useless nowadays, but the search engine algorithms of today are so much sophisticated that stuffing your pages with keywords or even keyphrases won't help you for a longer period of time, instead, it may earn you a ban from search engines. Pagerank is a mixture of the credibility and relevance of your site with respect to a specific topic. Pagerank depends upon internal as well as external SEO. Internal SEO depends solely upon the content of your site, where as external SEO depends upon backlinks. Backlinks are links on external domains (other than the domain of your own site) pointing towards a page on your site. Backlinks are considered to be endorsement(s) of the quality of the content on your site by the webmaster of respective sites (where your backlink resides). Further, the more backlinks you have, the more are chances that someone will click them and visit your site. So backlinks increase traffic to your website by improving your search engine ranking (pagerank - and thus visibility of your site) and by providing a means to reach your site. &lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;There are two ways you can get backlinks. Either someone will put a link of your site/page on his site or you will have to put your own link on other(s') sites. The former is achieved by link exchange, where two webmasters agree to put each other's links on their sites, but is a stale and probably a worthless thing to do in present times, however, if done unsolicited (no link-exchange/resiprocal links) is a very good thing for your pagerank, depending upon pagerank of the linking site. Putting your links to other sites can be accomplished by social networking/bookmarking. The problem with most social bookmarking sites is, however, that they are 'no-follow', which means, the backlinks will be ignored by search engines. It is here that SocialMonkee comes to rescue.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;SocialMonkee is a free service that allows to put one backlink of your site (or any page thereof) to 25 different sites every 24 hours with a single click in a semiautomated and search engine friendly manner. All these links are posted by different user credentials on any 25 of 100 domains owned by the creator of SocialMonkee. That means you can collect 25 x 30 = 750 backlinks for your site in a month, which is a huge number if you ask me, and all these without a single dime! SocialMonkee won't let you post any url more than once so you don't need to worry about search engines considering you a spammer. An efficient workflow would include posting to SocialMonkee after every new post has been published. Of course, if you want to post to 100 sites thrice a day (three different urls, obviously), you can opt for their premium membership (paid), and you can get premium membership free too by referring SocialMonkee to 12 fellow bloggers (subject to change, I suppose).&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;To register, follow this &lt;a href="http://www.socialmonkee.com/index.php?af=46304"&gt;link&lt;/a&gt; or &lt;a href="http://www.socialmonkee.com/index.php?af=47737"&gt;link&lt;/a&gt;.&amp;nbsp; A few people have found some difficulties in getting registered with SocialMonkee, but I believe that's only because it's such a young service, and everyone has eventually got registered, so have faith. There is not much to be explained about how to use this service as it's very simple and there are videos available for that, go search, be creative. The SocialMonkey website also has a great deal of info on how to use the service, so repeating it here would be a waste of your time.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Now a word about internet marketing, a caution or a plea really. You see, if you read this article in hope of diverting the internet traffic to your site to generate some big money or fame, please be advised that, although it has happened before, the success ratio is close to zero. There is no alternative of quality content. A quality content is what your readers want to read. All your efforts will go in vain if your content is not good. The internet nowadays is full with crap, don't contribute yours as well. If your content does not have a real purpose, adding SocialMonkee links will add more crap to internet. Refrain from such practice.&lt;/div&gt;&lt;br /&gt;I will try to write for KPBird, as and when I get more time. Till then, stay tuned.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;About myself: I am Mitesh Patel, a guest author on KPBird. I am a chemistry graduate and my interests range from Guitars to Motorbikes to Computing, and anything in-between. As a hobbyist blogger, I maintain a blog (more of a database) about Luthiers (guitar makers) named &lt;a href="http://luthierdb.blogspot.com/"&gt;LuthierDB&lt;/a&gt;. Fellow bloggers/readers are welcome to visit my blog to observe what is "simplicity and elegance of design" from my perspective.&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/17114597-7974529048592176482?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/7974529048592176482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/06/boost-traffic-to-your-site-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/7974529048592176482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/7974529048592176482'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/06/boost-traffic-to-your-site-with.html' title='Boost Traffic to Your Site with SocialMonkee - Why and How?'/><author><name>Mitesh Patel</name><uri>http://www.blogger.com/profile/04062310098334799967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/-N4WWLUTj6zo/TZ3vVk9PvII/AAAAAAAAAAQ/YZeblVVatNo/s220/mit.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-5003654265499150495</id><published>2011-05-30T06:00:00.000-07:00</published><updated>2011-06-06T21:18:27.850-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android Clipboard Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Android SDK 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Clipboard Framework</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Android SDK 3.0 has various new API. Android 3.0 has 1180 new classes, methods and interfaces. (&lt;a href="http://kpbird.blogspot.com/2011/05/android-api-difference-between-20-and.html"&gt;Click Here for complete list&lt;/a&gt;).&amp;nbsp; Clipboard Framework is newly introduce in Android 3.0. basic purpose of this framework is to provide copy and paste data between various application.&amp;nbsp; It is very powerful framework. It supports simple data like text (String) and complex type like binary data, objects etc.&lt;br /&gt;&lt;br /&gt;Here I am going to explain very simple example of Android Clipboard Framework. Let's start with introduction of key classes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. ClipboardManager:&lt;/b&gt; It is represent as global object. We do not need to create new object of ClipboardManager. We can directly fetch object from system service. we can get reference by invoking getSystemService(CLIPBOARD_SERVICE).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. ClipData: &lt;/b&gt;To put any object in clipboard we need to create object of ClipData class. ClipData object contain ClipData.Item and ClipDescription.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. ClipData.Item: &lt;/b&gt;It contain object which we copied. Object can be Text, URI or Intent data.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. ClipDescription:&lt;/b&gt; It is metadata about clip. It contain MIME type of clip data.&lt;br /&gt;&amp;nbsp; &lt;br /&gt;Let's start with very simple demo of ClipBoard Framework.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;Step 1&lt;/b&gt;: Create Android Project with following settings&lt;br /&gt;&lt;br /&gt;Project Name : CopyAndPasteDemo&lt;br /&gt;Package Name : com.kpbird.cp&lt;br /&gt;Activity Name : CopyAndPasteDemo&lt;br /&gt;Android SDK : 3.0&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 2&lt;/b&gt;: Open main.xml, we are going to create layout first. place two edit text component and two buttons for copy and paste. We will use one edit text as source and another edit text as destination. when user press copy button we will copy content of first edit text. when user press paste button we will paste content in second edit test. &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml;"&gt;&lt;linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"&gt;&lt;br /&gt; &lt;textview android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="@string/hello"&gt;&lt;br /&gt; &lt;edittext android:id="@+id/txtCopy" android:layout_height="wrap_content" android:layout_width="match_parent" android:minlines="5" android:scrollbaralwaysdrawverticaltrack="true" android:verticalscrollbarposition="defaultPosition"&gt;&lt;/edittext&gt;&lt;br /&gt; &lt;linearlayout android:gravity="center_horizontal" android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="horizontal"&gt;&lt;br /&gt;  &lt;button android:id="@+id/btnCopy" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Copy Text From Above EditText"&gt;&lt;/button&gt;&lt;br /&gt;  &lt;button android:id="@+id/btnPaste" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Paste Text To Below EditText"&gt;&lt;/button&gt;&lt;br /&gt; &lt;/linearlayout&gt;&lt;br /&gt; &lt;edittext android:cursorvisible="true" android:id="@+id/txtPaste" android:layout_height="wrap_content" android:layout_width="match_parent" android:minlines="5"&gt;&lt;/edittext&gt;&lt;br /&gt;&lt;/textview&gt;&lt;/linearlayout&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Step 3 &lt;/b&gt;: Open CopyAndPasteDemo.java and write following coding.&lt;br /&gt;Here we have created object of ClipboradManager, Buttons and EditText. we are fetching object of ClipboardManager from getSystemService in onCreate method.&lt;br /&gt;We have implement OnClickListener event for buttons. &lt;br /&gt;&lt;br /&gt;When user click on Copy button. we need to create object of ClipData and set the Text in it. Following code is used to copy text&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java;"&gt;ClipData cd1 = ClipData.newPlainText("MyData", txtCopy.getText());&lt;br /&gt;cm.setPrimaryClip(cd1);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Following code is used to paste value&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;ClipData cd2 = cm.getPrimaryClip();&lt;br /&gt;txtPaste.setText(cd2.getItemAt(0).getText());&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Full Source Code.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java;"&gt;package com.kpbird.cp;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.ClipData;&lt;br /&gt;import android.content.ClipboardManager;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.View.OnClickListener;&lt;br /&gt;import android.widget.Button;&lt;br /&gt;import android.widget.EditText;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class CopyAndPasteDemo extends Activity implements OnClickListener {&lt;br /&gt;&lt;br /&gt; private ClipboardManager cm;&lt;br /&gt; private Button btnCopy;&lt;br /&gt; private Button btnPaste;&lt;br /&gt; private EditText txtCopy;&lt;br /&gt; private EditText txtPaste;&lt;br /&gt; &lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);&lt;br /&gt;        btnCopy = (Button) findViewById(R.id.btnCopy);&lt;br /&gt;        btnPaste = (Button) findViewById(R.id.btnPaste);&lt;br /&gt;        txtCopy = (EditText) findViewById(R.id.txtCopy);&lt;br /&gt;        txtPaste = (EditText) findViewById(R.id.txtPaste);&lt;br /&gt;        &lt;br /&gt;        btnCopy.setOnClickListener(this);&lt;br /&gt;        btnPaste.setOnClickListener(this);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt; public void onClick(View v) {&lt;br /&gt;  switch(v.getId()){&lt;br /&gt;  case R.id.btnCopy:&lt;br /&gt;   ClipData cd1 = ClipData.newPlainText("MyData", txtCopy.getText());&lt;br /&gt;   &lt;br /&gt;   cm.setPrimaryClip(cd1);&lt;br /&gt;   Toast t = Toast.makeText(this, "Text Copied", Toast.LENGTH_SHORT);&lt;br /&gt;   t.show();&lt;br /&gt;   break;&lt;br /&gt;  case R.id.btnPaste:&lt;br /&gt;   ClipData cd2 = cm.getPrimaryClip();&lt;br /&gt;   txtPaste.setText(cd2.getItemAt(0).getText());&lt;br /&gt;   Toast t1 = Toast.makeText(this, "Text Pested", Toast.LENGTH_SHORT);&lt;br /&gt;   t1.show();&lt;br /&gt;   break;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Images&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Y0jguUMx9Xk/TeOUlgydXMI/AAAAAAAADKA/jDQ3j-dvG8k/s1600/cp1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-Y0jguUMx9Xk/TeOUlgydXMI/AAAAAAAADKA/jDQ3j-dvG8k/s320/cp1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-HiOTCDt_GjM/TeOUmDIE-SI/AAAAAAAADKE/nT8-P6hZfhY/s1600/cp2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-HiOTCDt_GjM/TeOUmDIE-SI/AAAAAAAADKE/nT8-P6hZfhY/s320/cp2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-jZ5qFTHk38w/TeOUmpuRsSI/AAAAAAAADKI/GCTQlfOOxdQ/s1600/cp3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-jZ5qFTHk38w/TeOUmpuRsSI/AAAAAAAADKI/GCTQlfOOxdQ/s320/cp3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="status"&gt;G6DUCQBFDKQR&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-5003654265499150495?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/5003654265499150495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/05/android-clipboard-framework.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/5003654265499150495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/5003654265499150495'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/05/android-clipboard-framework.html' title='Android Clipboard Framework'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Y0jguUMx9Xk/TeOUlgydXMI/AAAAAAAADKA/jDQ3j-dvG8k/s72-c/cp1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-3763355423270605073</id><published>2011-05-25T05:30:00.000-07:00</published><updated>2011-05-26T01:25:36.223-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android API Difference'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android API Difference between 2.0 and 3.1 OS</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;History of Android API Changes in Percentages.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The table below list the changes from version 2.0 to 3.1. The table includes only the highest-level program elements—  that is, if a class with two methods was added, the number of methods  added does not include those two methods, but the number of classes  added does include that class.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellspacing="0" cols="7"&gt;&lt;tbody&gt;&lt;tr&gt;       &lt;th align="LEFT" height="17" width="142"&gt;&lt;b&gt;OS Version&lt;/b&gt;&lt;/th&gt;       &lt;th align="CENTER" width="90"&gt;&lt;b&gt;API Level&lt;/b&gt;&lt;/th&gt;       &lt;th align="CENTER" width="90"&gt;&lt;b&gt;% change&lt;/b&gt;&lt;/th&gt;       &lt;th align="CENTER" width="90"&gt;&lt;b&gt;Addition&lt;/b&gt;&lt;/th&gt;       &lt;th align="CENTER" width="90"&gt;&lt;b&gt;Changes&lt;/b&gt;&lt;/th&gt;       &lt;th align="CENTER" width="90"&gt;&lt;b&gt;Removals&lt;/b&gt;&lt;/th&gt;       &lt;th align="CENTER" width="90"&gt;&lt;b&gt;Total&lt;/b&gt;&lt;/th&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td align="LEFT" height="17"&gt;Android 2.0  to 2.1&lt;/td&gt;       &lt;td align="CENTER"&gt;6 to 7&lt;/td&gt;       &lt;td align="RIGHT"&gt;0.48&lt;/td&gt;       &lt;td align="RIGHT"&gt;81&lt;/td&gt;       &lt;td align="RIGHT"&gt;37&lt;/td&gt;       &lt;td align="RIGHT"&gt;0&lt;/td&gt;       &lt;td align="RIGHT"&gt;118&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td align="LEFT" height="17"&gt;Android 2.1 to 2.2&lt;/td&gt;       &lt;td align="CENTER"&gt;7 to 8&lt;/td&gt;       &lt;td align="RIGHT"&gt;5.7&lt;/td&gt;       &lt;td align="RIGHT"&gt;475&lt;/td&gt;       &lt;td align="RIGHT"&gt;225&lt;/td&gt;       &lt;td align="RIGHT"&gt;33&lt;/td&gt;       &lt;td align="RIGHT"&gt;733&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td align="LEFT" height="17"&gt;Android 2.2 to 2.3&lt;/td&gt;       &lt;td align="CENTER"&gt;8 to 9&lt;/td&gt;       &lt;td align="LEFT"&gt;&lt;/td&gt;       &lt;td align="LEFT"&gt;&lt;/td&gt;       &lt;td align="LEFT"&gt;&lt;/td&gt;       &lt;td align="LEFT"&gt;&lt;/td&gt;       &lt;td align="LEFT"&gt;&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td align="LEFT" height="17"&gt;Android 2.3 to 2.3.4&lt;/td&gt;       &lt;td align="CENTER"&gt;9 to 10&lt;/td&gt;       &lt;td align="RIGHT"&gt;0.65&lt;/td&gt;       &lt;td align="RIGHT"&gt;25&lt;/td&gt;       &lt;td align="RIGHT"&gt;17&lt;/td&gt;       &lt;td align="RIGHT"&gt;2&lt;/td&gt;       &lt;td align="RIGHT"&gt;44&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td align="LEFT" height="17"&gt;Android 2.3.4 to 3.0&lt;/td&gt;       &lt;td align="CENTER"&gt;10 to 11&lt;/td&gt;       &lt;td align="RIGHT"&gt;2.56&lt;/td&gt;       &lt;td align="RIGHT"&gt;1182&lt;/td&gt;       &lt;td align="RIGHT"&gt;375&lt;/td&gt;       &lt;td align="RIGHT"&gt;27&lt;/td&gt;       &lt;td align="RIGHT"&gt;1584&lt;/td&gt;     &lt;/tr&gt;&lt;tr&gt;       &lt;td align="LEFT" height="17"&gt;Android 3.0 to 3.1&lt;/td&gt;       &lt;td align="CENTER"&gt;11 to 12&lt;/td&gt;       &lt;td align="RIGHT"&gt;1.15&lt;/td&gt;       &lt;td align="RIGHT"&gt;174&lt;/td&gt;       &lt;td align="RIGHT"&gt;126&lt;/td&gt;       &lt;td align="RIGHT"&gt;14&lt;/td&gt;       &lt;td align="RIGHT"&gt;314&lt;/td&gt;     &lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Calculation of Change Percentages&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The percent change statistic reported for all elements in the "to" API Level specification is defined recursively as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Percentage difference = 100 * (added + removed + 2*changed)&lt;br /&gt;                        -----------------------------------&lt;br /&gt;                        sum of public elements in BOTH APIs&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;where &lt;code&gt;added&lt;/code&gt; is the number of packages added, &lt;code&gt;removed&lt;/code&gt; is the number of packages removed, and &lt;code&gt;changed&lt;/code&gt;  is the number of packages changed. This definition is applied recursively for the classes and their program  elements, so the value for a changed package will be less than 1,  unless every class in that package has changed. The definition ensures that if all packages are removed and all new  packages are added, the change will be 100%.&lt;br /&gt;&lt;br /&gt;Related Post&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://kpbird.blogspot.com/2011/05/android-api-difference-between-30-and.html"&gt;Android API Difference between 3.0 and 3.1 OS&lt;/a&gt;&lt;br /&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/17114597-3763355423270605073?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/3763355423270605073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/05/android-api-difference-between-20-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/3763355423270605073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/3763355423270605073'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/05/android-api-difference-between-20-and.html' title='Android API Difference between 2.0 and 3.1 OS'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-6728719121817068969</id><published>2011-05-25T03:12:00.000-07:00</published><updated>2011-05-26T01:24:37.365-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android SDK 3.1'/><category scheme='http://www.blogger.com/atom/ns#' term='Android SDK 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android API Difference between 3.0 and 3.1 OS</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;Android 3.1 is the first revision to Android 3.0 (Honeycomb), It is optimized for Tablet.&amp;nbsp;  Google announced the update on 10 May 2011. The first major update to  Honeycomb refines many of the features in the original Honeycomb  version. I am not going to discuss the new feature or functionality Google has added but I am going to discuss API difference specially things which are removed in 3.1 &lt;br /&gt;&lt;div style="background-color: transparent; border: medium none; color: black; overflow: hidden; text-align: left; text-decoration: none;"&gt;&lt;/div&gt;&lt;div style="background-color: transparent; border: medium none; color: black; overflow: hidden; text-align: left; text-decoration: none;"&gt;&lt;b&gt;API Changes between Android OS 3.0 and Android OS 3.1, &lt;/b&gt;&lt;/div&gt;&lt;br /&gt;Overall difference between API Levels 11 and 12 is&lt;b&gt; 1.15%&lt;/b&gt;. Table shows statics, additions, changes and removals.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table summary="Number of differences"&gt;&lt;tbody&gt;&lt;tr&gt;   &lt;th&gt;Type&lt;/th&gt;   &lt;th align="center"&gt;&lt;b&gt;Additions&lt;/b&gt;&lt;/th&gt;   &lt;th align="center"&gt;&lt;b&gt;Changes&lt;/b&gt;&lt;/th&gt;   &lt;th align="center"&gt;Removals&lt;/th&gt;   &lt;th align="center"&gt;&lt;b&gt;Total&lt;/b&gt;&lt;/th&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;Packages&lt;/td&gt;   &lt;td align="right"&gt;3&lt;/td&gt;   &lt;td align="right"&gt;24&lt;/td&gt;   &lt;td align="right"&gt;0&lt;/td&gt;   &lt;td align="right"&gt;27&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;Classes and &lt;i&gt;Interfaces&lt;/i&gt;&lt;/td&gt;   &lt;td align="right"&gt;5&lt;/td&gt;   &lt;td align="right"&gt;65&lt;/td&gt;   &lt;td align="right"&gt;6&lt;/td&gt;   &lt;td align="right"&gt;76&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;Constructors&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;   &lt;td align="right"&gt;1&lt;/td&gt;   &lt;td align="right"&gt;6&lt;/td&gt;   &lt;td align="right"&gt;11&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;Methods&lt;/td&gt;   &lt;td align="right"&gt;75&lt;/td&gt;   &lt;td align="right"&gt;27&lt;/td&gt;   &lt;td align="right"&gt;2&lt;/td&gt;   &lt;td align="right"&gt;104&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;Fields&lt;/td&gt;   &lt;td align="right"&gt;87&lt;/td&gt;   &lt;td align="right"&gt;9&lt;/td&gt;   &lt;td align="right"&gt;0&lt;/td&gt;   &lt;td align="right"&gt;96&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td style="background-color: #fafafa;"&gt;&lt;b&gt;Total&lt;/b&gt;&lt;/td&gt;   &lt;td align="right" style="background-color: #fafafa;"&gt;&lt;b&gt;174&lt;/b&gt;&lt;/td&gt;   &lt;td align="right" style="background-color: #fafafa;"&gt;&lt;b&gt;126&lt;/b&gt;&lt;/td&gt;   &lt;td align="right" style="background-color: #fafafa;"&gt;&lt;b&gt;14&lt;/b&gt;&lt;/td&gt;   &lt;td align="right" style="background-color: #fafafa;"&gt;&lt;b&gt;314&lt;/b&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=17114597" name="packages"&gt;&lt;/a&gt; &lt;br /&gt;Here I found the list of removed classes, methods and interfaces in Android SDK 3.1.&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://developer.android.com/sdk/api_diff/12/changes/android.util.Config.html#android.util.Config.ctor_removed%28%29"&gt;Config&lt;/a&gt;()&amp;nbsp; - Removed Constructor&lt;br /&gt;2. &lt;a href="http://developer.android.com/sdk/api_diff/12/changes/android.util.DebugUtils.html#android.util.DebugUtils.ctor_removed%28%29"&gt;DebugUtils&lt;/a&gt;() - Removed Constructor &lt;br /&gt;3. &lt;a href="http://developer.android.com/sdk/api_diff/12/changes/android.util.EventLog.html#android.util.EventLog.ctor_removed%28%29"&gt;EventLog&lt;/a&gt;() - Removed Constructor&lt;br /&gt;4. &lt;a href="http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebView.html#android.webkit.WebView.getPluginList_removed%28%29"&gt;getPluginList&lt;/a&gt;()&amp;nbsp; - Remove Method&lt;br /&gt;5. &lt;a href="http://developer.android.com/sdk/api_diff/12/changes/pkg_android.webkit.html#Plugin"&gt;Plugin&lt;/a&gt;&amp;nbsp;&amp;nbsp; - Remove Classes and Interface&lt;br /&gt;6. &lt;a href="http://developer.android.com/sdk/api_diff/12/changes/pkg_android.webkit.html#Plugin.PreferencesClickHandler"&gt;Plugin.PerferencesClickHandler &lt;/a&gt;- Remove Classes and Interface&lt;br /&gt;7. &lt;a href="http://developer.android.com/sdk/api_diff/12/changes/pkg_android.webkit.html#PluginData"&gt;Plugin.Data &lt;/a&gt;- Remove Classes and Interface&lt;br /&gt;8. &lt;a href="http://developer.android.com/sdk/api_diff/12/changes/pkg_android.webkit.html#PluginList"&gt;PluginList&lt;/a&gt; - Remove Classes and Interface&lt;br /&gt;9. &lt;a href="http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebView.html#android.webkit.WebView.refreshPlugins_removed%28boolean%29"&gt;refereshPlugins&lt;/a&gt;() - Removed Method&lt;br /&gt;10. &lt;a href="http://developer.android.com/sdk/api_diff/12/changes/android.util.StateSet.html#android.util.StateSet.ctor_removed%28%29"&gt;StateSet&lt;/a&gt;() - Removed Constructor&lt;br /&gt;11. &lt;a href="http://developer.android.com/sdk/api_diff/12/changes/android.util.TimeUtils.html#android.util.TimeUtils.ctor_removed%28%29"&gt;TimeUtils&lt;/a&gt;() - Removed Constructor&lt;br /&gt;12. &lt;a href="http://developer.android.com/sdk/api_diff/12/changes/pkg_android.webkit.html#UrlInterceptHandler"&gt;UrlInterceptHandler&lt;/a&gt; - Remove Classes and Interface&lt;br /&gt;13 &lt;a href="http://developer.android.com/sdk/api_diff/12/changes/pkg_android.webkit.html#UrlInterceptRegistry"&gt;UrlInterceptRegistry&lt;/a&gt; - Remove Classes and Interface&lt;br /&gt;14. &lt;a href="http://developer.android.com/sdk/api_diff/12/changes/android.util.Xml.html#android.util.Xml.ctor_removed%28%29"&gt;Xml&lt;/a&gt;() - Removed Constructor&lt;br /&gt;&lt;br /&gt;Related Post&lt;br /&gt;1. &lt;a href="http://kpbird.blogspot.com/2011/05/android-api-difference-between-20-and.html"&gt;Android API Difference between 2.0 and 3.1 OS&lt;/a&gt;&lt;br /&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/17114597-6728719121817068969?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/6728719121817068969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/05/android-api-difference-between-30-and.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/6728719121817068969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/6728719121817068969'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/05/android-api-difference-between-30-and.html' title='Android API Difference between 3.0 and 3.1 OS'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-806418386062426902</id><published>2011-05-23T04:41:00.000-07:00</published><updated>2011-05-23T04:45:48.622-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Light Sensor'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Light Sensor</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Hello Guys,&lt;br /&gt;&lt;br /&gt;Here I am explaining you how to use Light Sensor of Android.&lt;br /&gt;1. Implement SensorEventListener&lt;br /&gt;2. Create variable for SensorManager and Sensor&lt;br /&gt;3. Get Object of SensorManager using system service&lt;br /&gt;4. Get Object of Light Sensor from SensorManager&lt;br /&gt;5. Implement onAccuracyChanged and onSensorChanged method&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java;"&gt;package com.test;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&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;import android.os.Bundle;&lt;br /&gt;import android.util.Log;&lt;br /&gt;&lt;br /&gt;public class Test extends Activity implements SensorEventListener{&lt;br /&gt;&lt;br /&gt; private SensorManager mSensorManager;&lt;br /&gt; private Sensor mLight;&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;  super.onCreate(savedInstanceState);&lt;br /&gt;  setContentView(R.layout.main);&lt;br /&gt;&lt;br /&gt;   mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);&lt;br /&gt;         mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt; @Override&lt;br /&gt; protected void onResume() {&lt;br /&gt;   mSensorManager.registerListener(this, mLight, SensorManager.SENSOR_DELAY_NORMAL);&lt;br /&gt;  super.onResume();&lt;br /&gt; }&lt;br /&gt; @Override&lt;br /&gt; protected void onPause() {&lt;br /&gt;  mSensorManager.unregisterListener(this);&lt;br /&gt;  super.onPause();&lt;br /&gt; }&lt;br /&gt; public void onAccuracyChanged(Sensor sensor, int accuracy) {&lt;br /&gt;   if(sensor.getType() == Sensor.TYPE_LIGHT){&lt;br /&gt;    Log.i("Sensor Changed", "Accuracy :" + accuracy);&lt;br /&gt;   }&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void onSensorChanged(SensorEvent event) {&lt;br /&gt;  if( event.sensor.getType() == Sensor.TYPE_LIGHT){&lt;br /&gt;   Log.i("Sensor Changed", "onSensor Change :" + event.values[0]);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Screen Shot of Change Values&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-n1zZ-SL5XOU/TdpI0yC5gkI/AAAAAAAADJ0/YGHXMK3J9mA/s1600/SensorEvent.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="121" src="http://2.bp.blogspot.com/-n1zZ-SL5XOU/TdpI0yC5gkI/AAAAAAAADJ0/YGHXMK3J9mA/s640/SensorEvent.jpg" width="640" /&gt;&lt;/a&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/17114597-806418386062426902?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/806418386062426902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/05/android-light-sensor.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/806418386062426902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/806418386062426902'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/05/android-light-sensor.html' title='Android Light Sensor'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-n1zZ-SL5XOU/TdpI0yC5gkI/AAAAAAAADJ0/YGHXMK3J9mA/s72-c/SensorEvent.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-8766161045168154097</id><published>2011-05-19T21:43:00.000-07:00</published><updated>2011-05-19T21:43:37.292-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Loading Image from Server</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Hello Guys,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here I am writing easiest way to download image from server. Following function return Drawable object.&amp;nbsp; Use drawable object as per your&amp;nbsp; requirement.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java;"&gt;private Drawable LoadImageFromWeb(String url) {&lt;br /&gt;  try {&lt;br /&gt;   InputStream is = (InputStream) new URL(url).getContent();&lt;br /&gt;   Drawable d = Drawable.createFromStream(is, "src name");&lt;br /&gt;   return d;&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   System.out.println("Exc=" + e);&lt;br /&gt;   return null;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-8766161045168154097?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/8766161045168154097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/05/android-loading-image-from-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/8766161045168154097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/8766161045168154097'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/05/android-loading-image-from-server.html' title='Android Loading Image from Server'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-2199547881796243641</id><published>2011-05-08T05:35:00.000-07:00</published><updated>2011-05-10T09:12:23.426-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='SeekBar with Two Thumb'/><title type='text'>Android: Seek Bar with Two Thumb</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: justify;"&gt;Seek bar with two thumb control is badly required by some developer, including my self, When I start looking this control I was tired and frustrated. &amp;nbsp;and finally I have decided to create my own seek bar control with two thumb.&amp;nbsp;I have used my control in one of the my android project. Initially I tried to extend SeekBar control but I am unable to extend it. so finally I decided to extend ImageView control and I got succes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-r04Hq1EPDFU/TcaNwpqLPaI/AAAAAAAADHI/kbHFhQHG54w/s1600/MySeekBar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-r04Hq1EPDFU/TcaNwpqLPaI/AAAAAAAADHI/kbHFhQHG54w/s400/MySeekBar.png" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here I am publishing my own seek bar control with two thumb.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Prerequisite.&lt;/b&gt;&lt;br /&gt;1. Seek bar Background Image&lt;br /&gt;2. Seek bar Thumb Image.&lt;br /&gt;&lt;br /&gt;Let's Create Seek bar with two thumb.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 1 :&lt;/b&gt; Create Android Project&lt;br /&gt;&lt;b&gt;Step 2 :&lt;/b&gt; Copy Background and Thumb image in Drawable folter&lt;br /&gt;&lt;b&gt;Step 3 :&lt;/b&gt; Copy "&lt;span class="Apple-style-span" style="font-family: Monaco; font-size: 11px;"&gt;SeekBarWithTwoThumb.java"&amp;nbsp;&lt;/span&gt;in your &amp;nbsp;package ( My Package Name is "com.kpbird")&lt;br /&gt;(You can find class from source code)&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}span.s1 {color: #961a65}span.s2 {color: #032fc3}&lt;/style&gt;   &lt;br /&gt;&lt;div class="p1"&gt;&lt;span class="s1"&gt;private&lt;/span&gt; Bitmap &lt;span class="s2"&gt;thumb&lt;/span&gt; = BitmapFactory.decodeResource(getResources(),&lt;b&gt;R.drawable.&lt;span class="s2"&gt;leftthumb&lt;/span&gt;&lt;/b&gt;);&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;Find above line in source, &amp;nbsp;replace "R.drawable.leftthumb" with your thumb image drawable name.&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Step 4:&lt;/b&gt; Open your Layout XML file (My Xml file name is "main.xml")&lt;br /&gt;&lt;b&gt;Step 5:&lt;/b&gt; Add following link in layout file,&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #97238c}span.s1 {color: #009292}span.s2 {color: #489191}span.s3 {color: #000000}span.s4 {color: #3b3df5}&lt;/style&gt;   &lt;br /&gt;&lt;div class="p1"&gt;&lt;span class="s1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="s2"&gt;&lt;b&gt;com.kpbird.&lt;/b&gt;SeekBarWithTwoThumb&lt;/span&gt;&lt;span class="s3"&gt; &lt;/span&gt;android:id&lt;span class="s3"&gt;=&lt;/span&gt;&lt;span class="s4"&gt;"@+id/myseekbar"&lt;/span&gt;&lt;span class="s3"&gt; &lt;/span&gt;android:layout_width&lt;span class="s3"&gt;=&lt;/span&gt;&lt;span class="s4"&gt;"fill_parent"&lt;/span&gt;&lt;span class="s3"&gt; &lt;/span&gt;android:layout_height&lt;span class="s3"&gt;=&lt;/span&gt;&lt;span class="s4"&gt;"wrap_content"&lt;/span&gt;&lt;span class="s3"&gt; &lt;/span&gt;android:scaleType&lt;span class="s3"&gt;=&lt;/span&gt;&lt;span class="s4"&gt;"fitXY"&lt;/span&gt;&lt;span class="s3"&gt; &lt;/span&gt;&lt;b&gt;android:src&lt;span class="s3"&gt;=&lt;/span&gt;&lt;span class="s4"&gt;"@drawable/bgh"&lt;/span&gt;&lt;/b&gt;&lt;span class="s3"&gt; &lt;/span&gt;android:layout_marginTop&lt;span class="s3"&gt;=&lt;/span&gt;&lt;span class="s4"&gt;"50dip"&lt;/span&gt;&lt;span class="s1"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="s1"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: #009292;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;Change package name in above line, Set background image in src attribute.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: #009292;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;b&gt;Step 6:&lt;/b&gt; Open your Activity Class file. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;     &lt;style type="text/css"&gt;p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #777777}span.s1 {color: #961a65}span.s2 {color: #032fc3}span.s3 {color: #000000}span.s4 {color: #3b3df5}span.Apple-tab-span {white-space:pre}&lt;/style&gt;   &lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="s1"&gt;package&lt;/span&gt; com.kpbird;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;div class="p2"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="s1"&gt;import&lt;/span&gt; android.app.Activity;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="s1"&gt;import&lt;/span&gt; android.os.Bundle;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="s1"&gt;import&lt;/span&gt; android.widget.TextView;&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="s1"&gt;import&lt;/span&gt; com.kpbird.SeekBarWithTwoThumb.SeekBarChangeListener;&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="s1"&gt;public&lt;/span&gt; &lt;span class="s1"&gt;class&lt;/span&gt; MySeekBar &lt;span class="s1"&gt;extends&lt;/span&gt; Activity &lt;span class="s1"&gt;implements&lt;/span&gt; SeekBarChangeListener{&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;TextView &lt;span class="s2"&gt;tv1&lt;/span&gt;,&lt;span class="s2"&gt;tv2&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;SeekBarWithTwoThumb &lt;span class="s2"&gt;swtt&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="p3"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="s3"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;@Override&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="s1"&gt;public&lt;/span&gt; &lt;span class="s1"&gt;void&lt;/span&gt; onCreate(Bundle savedInstanceState) {&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s1"&gt;super&lt;/span&gt;.onCreate(savedInstanceState);&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setContentView(R.layout.&lt;span class="s2"&gt;main&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s2"&gt;tv1&lt;/span&gt; = (TextView) findViewById(R.id.&lt;span class="s2"&gt;textView1&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s2"&gt;tv2&lt;/span&gt; = (TextView) findViewById(R.id.&lt;span class="s2"&gt;textView2&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s2"&gt;swtt&lt;/span&gt; = (SeekBarWithTwoThumb) findViewById(R.id.&lt;span class="s2"&gt;myseekbar&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s2"&gt;swtt&lt;/span&gt;.setSeekBarChangeListener(&lt;span class="s1"&gt;this&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="s1"&gt;public&lt;/span&gt; &lt;span class="s1"&gt;void&lt;/span&gt; SeekBarValueChanged(&lt;span class="s1"&gt;int&lt;/span&gt; Thumb1Value, &lt;span class="s1"&gt;int&lt;/span&gt; Thumb2Value) {&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="s2"&gt;tv1&lt;/span&gt;.setText(&lt;span class="s4"&gt;"Thumb 1 Value :"&lt;/span&gt; +Thumb1Value + &lt;span class="s4"&gt;" %"&lt;/span&gt; );&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="s2"&gt;tv2&lt;/span&gt;.setText(&lt;span class="s4"&gt;"Thumb 2 Value :"&lt;/span&gt;+Thumb2Value + &lt;span class="s4"&gt;" %"&lt;/span&gt;) ;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;Here I took three object 1 SeekBarWithTwoThumb 2 TextView. TextView is used to display percentage (%). &amp;nbsp;Seekbar control has interface to fire event when user move thumb. To take event you need to implement "SeekBarChangeListener". SeekBarChangeListener has one event "SeekBarValueChanged". Write any action that you want to do when user move thumb. For&amp;nbsp;demonstration, I am printing thumb value.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;b&gt;Step 7:&lt;/b&gt; Now execute our application and enjoy&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: large;"&gt;&amp;nbsp;Download Source Code : &lt;a href="http://www.quicknews4you.com/2011/05/08/android-seek-bar-with-two-thumb/"&gt;Click Here&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black; font-family: Times; font-size: medium;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}&lt;/style&gt;   &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-2199547881796243641?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/2199547881796243641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/05/android-seek-bar-with-two-thumb.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/2199547881796243641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/2199547881796243641'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/05/android-seek-bar-with-two-thumb.html' title='Android: Seek Bar with Two Thumb'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-r04Hq1EPDFU/TcaNwpqLPaI/AAAAAAAADHI/kbHFhQHG54w/s72-c/MySeekBar.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-856063407183786035</id><published>2011-05-03T12:26:00.000-07:00</published><updated>2012-02-06T20:32:02.545-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bottom Tabbar Control'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android:Bottom Tabbar Control</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In this tutorial, You will learn how to create application with bottom TabBar Control. Tab Bar control is present in Android UI component but It always displays at top of screen. Many times we required to display Tabs at bottom of screen, just like iPhone,&amp;nbsp;Unfortunately Android native TabBar control does not provide facility to display Tabs at bottom of the screen. &amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;Tabbar Control Screen Shots&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/-Uv3iJ5wcyi8/TcBKSZ7Z1FI/AAAAAAAADGo/uvAXcW00cEo/s1600/Screen-1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-Uv3iJ5wcyi8/TcBKSZ7Z1FI/AAAAAAAADGo/uvAXcW00cEo/s400/Screen-1.png" width="266" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/-C64C9Z0hYJA/TcBKUqWBENI/AAAAAAAADGs/rH9OGRlvlSs/s1600/Screen-2.png" imageanchor="1"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/-C64C9Z0hYJA/TcBKUqWBENI/AAAAAAAADGs/rH9OGRlvlSs/s400/Screen-2.png" width="266" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://quicknews4you.com/kpbird/TabbarControl.zip" target="_blank"&gt;&lt;span class="Apple-style-span" style="color: black; font-size: large;"&gt;Download Source Code from Here :&amp;nbsp;&lt;/span&gt;Click&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Let's develop Tabbar Control.&lt;br /&gt;&lt;br /&gt;I assume that you know basic of Android application development.&lt;br /&gt;&lt;br /&gt;Before start the project you required images for tabbar control. Suppose you want to create four tab then you need eight images for tabs (selected and unselected images) and one image for background.&lt;br /&gt;&lt;br /&gt;This control is not robust&amp;nbsp;enough to display icon and text but It is possible using design. &amp;nbsp;design your tab image with icon and text.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 1 : &lt;/b&gt;Create Android Project using eclipse with following parameter.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project Name : TabbarControl&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;Package Name : com.kpbird.tabbarcontrol&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;Activity Name : FirstTab&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 2 : &lt;/b&gt;Create package named "com.tabwidget". create following classes in com.tabwidget package&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1. Tab.java&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2.&amp;nbsp;TabView.java&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3.&amp;nbsp;TabHostProvider.java&lt;br /&gt;&lt;style type="text/css"&gt;p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}&lt;/style&gt;   &lt;br /&gt;&lt;div class="p1"&gt;&lt;br /&gt;(Download source code and copy this package in your source code)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;Step 3:&lt;/b&gt; Create class file TabBarView. This class extends TabHostProvider.java class. TabHostProvider class has abstract method getTabHost. we are going to implement getTabHost method. &amp;nbsp;We are going to create all tabs in this method. as illustrate I am going to create four tabs. I also required four Activities. Using this TabBar control we can bind Activity with each tab.&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;TabView.java&lt;br /&gt;&lt;pre class="brush: java;"&gt;package com.kpbird.tabbarcontrol;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.Intent;&lt;br /&gt;&lt;br /&gt;import com.tabwidget.Tab;&lt;br /&gt;import com.tabwidget.TabHostProvider;&lt;br /&gt;import com.tabwidget.TabView;&lt;br /&gt;&lt;br /&gt;public class TabbarView extends TabHostProvider {&lt;br /&gt;&lt;br /&gt;  private Tab firstTab;&lt;br /&gt;  private Tab secondTab;&lt;br /&gt;  private Tab thirdTab;&lt;br /&gt;  private Tab fourTab;&lt;br /&gt;  private TabView tabView;&lt;br /&gt;  public TabbarView(Activity context) {&lt;br /&gt;  super(context);&lt;br /&gt;  // TODO Auto-generated constructor stub&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  @Override&lt;br /&gt;  public TabView getTabHost(String category) {&lt;br /&gt;  tabView = new TabView(context);&lt;br /&gt;  tabView.setBackgroundID(R.drawable.tab_background_55);&lt;br /&gt;  &lt;br /&gt;  firstTab = new Tab(context, "One");&lt;br /&gt;  firstTab.setIntent(new Intent(context,FirstTab.class));&lt;br /&gt;  firstTab.setIcon(R.drawable.help);&lt;br /&gt;  firstTab.setIconSelected(R.drawable.help_selected);&lt;br /&gt;  &lt;br /&gt;  secondTab = new Tab(context, "Two");&lt;br /&gt;  secondTab.setIntent(new Intent(context,SecondTab.class));&lt;br /&gt;  secondTab.setIcon(R.drawable.help);&lt;br /&gt;  secondTab.setIconSelected(R.drawable.help_selected);&lt;br /&gt; &lt;br /&gt;  thirdTab = new Tab(context, "Three");&lt;br /&gt;  thirdTab.setIntent(new Intent(context,ThirdTab.class));&lt;br /&gt;  thirdTab.setIcon(R.drawable.help);&lt;br /&gt;  thirdTab.setIconSelected(R.drawable.help_selected);&lt;br /&gt; &lt;br /&gt;  fourTab = new Tab(context, "Four");&lt;br /&gt;  fourTab.setIntent(new Intent(context,FourTab.class));&lt;br /&gt;  fourTab.setIcon(R.drawable.help);&lt;br /&gt;  fourTab.setIconSelected(R.drawable.help_selected);&lt;br /&gt;&lt;br /&gt;  tabView.addTab(firstTab);&lt;br /&gt;  tabView.addTab(secondTab);&lt;br /&gt;  tabView.addTab(thirdTab);&lt;br /&gt;  tabView.addTab(fourTab);&lt;br /&gt; &lt;br /&gt;  tabView.setCurrentView(R.layout.firsttab);&lt;br /&gt;  return tabView;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;style type="text/css"&gt;p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #032fc3}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #489075}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #777777}span.s1 {color: #961a65}span.s2 {color: #000000}span.s3 {color: #032fc3}span.s4 {color: #8fb0c8}span.s5 {color: #3b3df5}span.Apple-tab-span {white-space:pre}&lt;/style&gt;   &lt;br /&gt;Let's understand above code.&lt;br /&gt;1. Create object of Tab class. suppose you want to create four Tabs then create four object of Tab class&lt;br /&gt;2. Create object of TabView class. TabView is base class we are going to add Tabs object in TabView class. you can set tab background using setBackgroundID method.&lt;br /&gt;3. Tab required two objects context and tag name, you can pass context variable directly and Tag name is just for reference. it does not have any relation with&amp;nbsp;behavior of tab control.&lt;br /&gt;4. now set Intent , set Icon and set selected icon for the tab. apply same process for all tabs.&lt;br /&gt;5. add tabs in TabView. tabview.setCurrentView is used to set the default selected tab.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 4 : &lt;/b&gt;Now we are ready to implement our tabs in activity. We already have on activity FirstTab. We need to create three more activities.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Activity&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1.&amp;nbsp;FirstTab.java&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2.&amp;nbsp;SecondTab.java&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3. ThirdTab.java&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4.&amp;nbsp;FourthTab.java&lt;br /&gt;&lt;br /&gt;1. FirstTab.java&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #777777}span.s1 {color: #961a65}span.s2 {color: #032fc3}span.s3 {color: #000000}span.s4 {color: #3b3df5}span.Apple-tab-span {white-space:pre}&lt;/style&gt;   &lt;br /&gt;&lt;div class="p1"&gt;&lt;span class="s1"&gt;package&lt;/span&gt; com.kpbird.tabbarcontrol;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="s1"&gt;import&lt;/span&gt; android.app.Activity;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="s1"&gt;import&lt;/span&gt; android.os.Bundle;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="s1"&gt;import&lt;/span&gt; com.tabwidget.TabHostProvider;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="s1"&gt;import&lt;/span&gt; com.tabwidget.TabView;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="s1"&gt;public&lt;/span&gt; &lt;span class="s1"&gt;class&lt;/span&gt; FirstTab &lt;span class="s1"&gt;extends&lt;/span&gt; Activity{&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="s1"&gt;private&lt;/span&gt; TabHostProvider &lt;span class="s2"&gt;tabProvider&lt;/span&gt;;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="s1"&gt;private&lt;/span&gt; TabView &lt;span class="s2"&gt;tabView&lt;/span&gt;;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p3"&gt;&lt;span class="s3"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;/span&gt;@Override&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="s1"&gt;protected&lt;/span&gt; &lt;span class="s1"&gt;void&lt;/span&gt; onCreate(Bundle savedInstanceState) {&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="s1"&gt;super&lt;/span&gt;.onCreate(savedInstanceState);&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="s2"&gt;tabProvider&lt;/span&gt; = &lt;span class="s1"&gt;new&lt;/span&gt; TabbarView(&lt;span class="s1"&gt;this&lt;/span&gt;);&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="s2"&gt;tabView&lt;/span&gt; = &lt;span class="s2"&gt;tabProvider&lt;/span&gt;.getTabHost(&lt;span class="s4"&gt;"main"&lt;/span&gt;);&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="s2"&gt;tabView&lt;/span&gt;.setCurrentView(R.layout.&lt;span class="s2"&gt;firsttab&lt;/span&gt;);&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;setContentView(&lt;span class="s2"&gt;tabView&lt;/span&gt;.render(0));&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div class="p1"&gt;}&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="font-family: Times; font-size: small;"&gt;Normally we can pass XML layout name in setContentView method but for tab bar you required to write above coding. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="font-family: Times; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="font-family: Times; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Monaco; font-size: 11px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setContentView(&lt;span class="s2" style="color: #032fc3;"&gt;tabView&lt;/span&gt;.render(0));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In above method tabview.render(0). Here 0 represent the tab number. starting from zero (0). suppose you &amp;nbsp;have four tab. it required four activity then you need to write 0 activity which you want to call when user presse first tab. write 1 in activity that you want to display second. and so on...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;XML Layout, For Tabbar control we do not need to write any tags/component. &amp;nbsp;you can design XML as per your requirement. No extra care required for tabbar control. All tabs will generate dynamically from the TabView and TabHostProvider class.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1. firsttab.xml&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2.&amp;nbsp;secondtab.xml&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3. thirdtab.xml&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4. fourthtab.xml&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 5: &lt;/b&gt;Finally do not forget to register activities in AndroidManiFest.xml file.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&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/17114597-856063407183786035?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/856063407183786035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/05/androidbottom-tabbar-control.html#comment-form' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/856063407183786035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/856063407183786035'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/05/androidbottom-tabbar-control.html' title='Android:Bottom Tabbar Control'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Uv3iJ5wcyi8/TcBKSZ7Z1FI/AAAAAAAADGo/uvAXcW00cEo/s72-c/Screen-1.png' height='72' width='72'/><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-4151575777898413116</id><published>2011-05-02T01:27:00.000-07:00</published><updated>2011-05-02T01:27:05.923-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music file'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android: How to fetch Media File list</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;You can use following code to fetch media files. It is possible using  managedQuery function. Android has default MediaPlayer application. MediaPlayer application  manage Audio and Video files list.. so, We can fetch list from  MediaPlayer application using following code.&lt;br /&gt;&lt;br /&gt;Using managedQuery we can fetch media file list &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;String[] proj = { MediaStore.Audio.Media._ID,&lt;br /&gt;MediaStore.Audio.Media.DATA,&lt;br /&gt;MediaStore.Audio.Media.DISPLAY_NAME,&lt;br /&gt;MediaStore.Video.Media.SIZE };&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;musiccursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,&lt;br /&gt;proj, null, null, null);&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;I assume that you have basic knowledge of create &amp;amp; execute Android Projects. &lt;br /&gt;Let's create project step by step to use above code.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;1. Create Project "MyMusic"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Activity Name : "MusicActivity"&lt;br /&gt;&amp;nbsp; &amp;nbsp; Package Name : "sample.music"&lt;br /&gt;&lt;b&gt;2. Open MusicActivity.java and write following code.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;package sample.music;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.Context;&lt;br /&gt;import android.database.Cursor;&lt;br /&gt;import android.media.MediaPlayer;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.provider.MediaStore;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.ViewGroup;&lt;br /&gt;import android.widget.AdapterView;&lt;br /&gt;import android.widget.BaseAdapter;&lt;br /&gt;import android.widget.ListView;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;import android.widget.AdapterView.OnItemClickListener;&lt;br /&gt;&lt;br /&gt;public class MusicActivity extends Activity {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ListView musiclist;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cursor musiccursor;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int music_column_index;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int count;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MediaPlayer mMediaPlayer;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/** Called when the activity is first created. */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void onCreate(Bundle savedInstanceState) {&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;super.onCreate(savedInstanceState);&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;setContentView(R.layout.main);&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;init_phone_music_grid();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private void init_phone_music_grid() {&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;System.gc();&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;&lt;b&gt;&amp;nbsp;String[] proj = { MediaStore.Audio.Media._ID,&lt;br /&gt;MediaStore.Audio.Media.DATA,&lt;br /&gt;MediaStore.Audio.Media.DISPLAY_NAME,&lt;br /&gt;MediaStore.Video.Media.SIZE };&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;musiccursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,&lt;br /&gt;proj, null, null, null);&lt;/b&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;count = musiccursor.getCount();&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;musiclist = (ListView) findViewById(R.id.PhoneMusicList);&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;musiclist.setAdapter(new MusicAdapter(getApplicationContext()));&lt;br /&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;musiclist.setOnItemClickListener(musicgridlistener);&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;mMediaPlayer = new MediaPlayer();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private OnItemClickListener musicgridlistener = new OnItemClickListener() {&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;public void onItemClick(AdapterView parent, View v, int position,&lt;br /&gt;long id) {&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;nbsp;&amp;nbsp;&amp;nbsp;System.gc();&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;nbsp;&amp;nbsp;&amp;nbsp;music_column_index = musiccursor&lt;br /&gt;.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);&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;nbsp;&amp;nbsp;&amp;nbsp;musiccursor.moveToPosition(position);&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;nbsp;&amp;nbsp;&amp;nbsp;String filename = musiccursor.getString(music_column_index);&lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;try {&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (mMediaPlayer.isPlaying()) {&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;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;mMediaPlayer.reset();&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mMediaPlayer.setDataSource(filename);&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mMediaPlayer.prepare();&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mMediaPlayer.start();&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;nbsp;&amp;nbsp;&amp;nbsp;} catch (Exception e) {&lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;}&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;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public class MusicAdapter extends BaseAdapter {&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;private Context mContext;&lt;br /&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;public MusicAdapter(Context c) {&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;nbsp;&amp;nbsp;&amp;nbsp;mContext = c;&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;}&lt;br /&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;public int getCount() {&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;nbsp;&amp;nbsp;&amp;nbsp;return count;&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;}&lt;br /&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;public Object getItem(int position) {&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;nbsp;&amp;nbsp;&amp;nbsp;return position;&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;}&lt;br /&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;public long getItemId(int position) {&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;nbsp;&amp;nbsp;&amp;nbsp;return position;&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;}&lt;br /&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;public View getView(int position, View convertView, ViewGroup parent) {&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;nbsp;&amp;nbsp;&amp;nbsp;System.gc();&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;nbsp;&amp;nbsp;&amp;nbsp;TextView tv = new TextView(mContext.getApplicationContext());&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;nbsp;&amp;nbsp;&amp;nbsp;String id = null;&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;nbsp;&amp;nbsp;&amp;nbsp;if (convertView == null) {&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;music_column_index = musiccursor&lt;br /&gt;.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;musiccursor.moveToPosition(position);&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id = musiccursor.getString(music_column_index);&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;music_column_index = musiccursor&lt;br /&gt;.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE);&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;musiccursor.moveToPosition(position);&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id += " Size(KB):" + musiccursor.getString(music_column_index);&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tv.setText(id);&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;nbsp;&amp;nbsp;&amp;nbsp;} else&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tv = (TextView) convertView;&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;nbsp;&amp;nbsp;&amp;nbsp;return tv;&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;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Open main.xml and write following code.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt; LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:orientation="vertical" android:layout_width="fill_parent"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:layout_height="fill_parent"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt; ListView&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;android:id="@+id/PhoneMusicList" &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;android:layout_width="fill_parent"&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;android:layout_height="fill_parent"/&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_WmWhc6_V_Wk/SjdhpynFG_I/AAAAAAAAAFE/TUQjppOZKBo/s1600-h/music.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-4151575777898413116?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/4151575777898413116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/05/android-how-to-fetch-media-file-list.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/4151575777898413116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/4151575777898413116'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/05/android-how-to-fetch-media-file-list.html' title='Android: How to fetch Media File list'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-2996838261865710702</id><published>2011-04-28T22:11:00.000-07:00</published><updated>2011-04-28T22:11:54.295-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebView'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android: WebView, Detect HTML Element on Click</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Android WebView allow us to display web pages inside the application. Also allowed to&amp;nbsp; interact with web  content, there are several reasons that you might want to use WebView in  your applications. It is powerful enough to execute JavaScript. It allow us to load HTML content as String and also display Web Page from domain/URL.&lt;br /&gt;&lt;br /&gt;Here I am going to teach you how to detect user's action. Suppose you want to take specific action when user click on image or button or link then it is possible.&lt;br /&gt;&lt;br /&gt;We can detect following HTML elements as per Android API Document.&lt;br /&gt;&lt;br /&gt;&lt;table class="jd-sumtable" id="constants"&gt;&lt;tbody&gt;&lt;tr class="alt-color api apilevel-1"&gt;&lt;td class="jd-typecol"&gt;int&lt;/td&gt;         &lt;td class="jd-linkcol"&gt;&lt;a href="http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html#ANCHOR_TYPE"&gt;ANCHOR_TYPE&lt;/a&gt;&lt;/td&gt;         &lt;td class="jd-descrcol" width="100%"&gt;HitTestResult for hitting a HTML::a tag &lt;/td&gt;     &lt;/tr&gt;&lt;tr class=" api apilevel-1"&gt;         &lt;td class="jd-typecol"&gt;int&lt;/td&gt;         &lt;td class="jd-linkcol"&gt;&lt;a href="http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html#EDIT_TEXT_TYPE"&gt;EDIT_TEXT_TYPE&lt;/a&gt;&lt;/td&gt;         &lt;td class="jd-descrcol" width="100%"&gt;HitTestResult for hitting an edit text area &lt;/td&gt;     &lt;/tr&gt;&lt;tr class="alt-color api apilevel-1"&gt;         &lt;td class="jd-typecol"&gt;int&lt;/td&gt;         &lt;td class="jd-linkcol"&gt;&lt;a href="http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html#EMAIL_TYPE"&gt;EMAIL_TYPE&lt;/a&gt;&lt;/td&gt;         &lt;td class="jd-descrcol" width="100%"&gt;HitTestResult for hitting an email address &lt;/td&gt;     &lt;/tr&gt;&lt;tr class=" api apilevel-1"&gt;         &lt;td class="jd-typecol"&gt;int&lt;/td&gt;         &lt;td class="jd-linkcol"&gt;&lt;a href="http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html#GEO_TYPE"&gt;GEO_TYPE&lt;/a&gt;&lt;/td&gt;         &lt;td class="jd-descrcol" width="100%"&gt;HitTestResult for hitting a map address &lt;/td&gt;     &lt;/tr&gt;&lt;tr class="alt-color api apilevel-1"&gt;         &lt;td class="jd-typecol"&gt;int&lt;/td&gt;         &lt;td class="jd-linkcol"&gt;&lt;a href="http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html#IMAGE_ANCHOR_TYPE"&gt;IMAGE_ANCHOR_TYPE&lt;/a&gt;&lt;/td&gt;         &lt;td class="jd-descrcol" width="100%"&gt;HitTestResult for hitting a HTML::a tag which contains HTML::img &lt;/td&gt;     &lt;/tr&gt;&lt;tr class=" api apilevel-1"&gt;         &lt;td class="jd-typecol"&gt;int&lt;/td&gt;         &lt;td class="jd-linkcol"&gt;&lt;a href="http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html#IMAGE_TYPE"&gt;IMAGE_TYPE&lt;/a&gt;&lt;/td&gt;         &lt;td class="jd-descrcol" width="100%"&gt;HitTestResult for hitting an HTML::img tag &lt;/td&gt;     &lt;/tr&gt;&lt;tr class="alt-color api apilevel-1"&gt;         &lt;td class="jd-typecol"&gt;int&lt;/td&gt;         &lt;td class="jd-linkcol"&gt;&lt;a href="http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html#PHONE_TYPE"&gt;PHONE_TYPE&lt;/a&gt;&lt;/td&gt;         &lt;td class="jd-descrcol" width="100%"&gt;HitTestResult for hitting a phone number &lt;/td&gt;     &lt;/tr&gt;&lt;tr class=" api apilevel-1"&gt;         &lt;td class="jd-typecol"&gt;int&lt;/td&gt;         &lt;td class="jd-linkcol"&gt;&lt;a href="http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html#SRC_ANCHOR_TYPE"&gt;SRC_ANCHOR_TYPE&lt;/a&gt;&lt;/td&gt;         &lt;td class="jd-descrcol" width="100%"&gt;HitTestResult for hitting a HTML::a tag with src=http &lt;/td&gt;     &lt;/tr&gt;&lt;tr class="alt-color api apilevel-1"&gt;         &lt;td class="jd-typecol"&gt;int&lt;/td&gt;         &lt;td class="jd-linkcol"&gt;&lt;a href="http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html#SRC_IMAGE_ANCHOR_TYPE"&gt;SRC_IMAGE_ANCHOR_TYPE&lt;/a&gt;&lt;/td&gt;         &lt;td class="jd-descrcol" width="100%"&gt;HitTestResult for hitting a HTML::a tag with src=http + HTML::img &lt;/td&gt;     &lt;/tr&gt;&lt;tr class=" api apilevel-1"&gt;         &lt;td class="jd-typecol"&gt;int&lt;/td&gt;         &lt;td class="jd-linkcol"&gt;&lt;a href="http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html#UNKNOWN_TYPE"&gt;UNKNOWN_TYPE&lt;/a&gt;&lt;/td&gt;         &lt;td class="jd-descrcol" width="100%"&gt;Default HitTestResult, where the target is unknown &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&amp;nbsp;&lt;br /&gt;Src : &lt;a href="http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html"&gt;http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here are many HTML element missing. like RadioButton, CheckBox etc.. I can not detect radio button or check box click event.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here I assume that you are Android programmer and you know how to create projects.&lt;br /&gt;&lt;br /&gt;1. Create Project named "MyWebView"&lt;br /&gt;2. Package Name "com.kpbird.mywebview"&lt;br /&gt;3. Activity Name "MyWebView"&lt;br /&gt;4. Edit&amp;nbsp; MyWebView.java , main.xml and AndroidManifest.xml&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;MyWebView.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In following I have implemented onTouchListener. when user click on WebView this event will call. In setOnTouchListener function I have created object of View.OnTouchListener interface.&lt;br /&gt;WebView has inner class named "HitTestResult". HitTestResult class will help us to find the HTML element which press when user click on WebView.&lt;br /&gt;&lt;br /&gt;HitTestResult class has only two method.&lt;br /&gt;&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;getExtra() : It return String. String has HTML element which is clicked by user&lt;/li&gt;&lt;li&gt;getType() : It return integer. It is used to identify which HTML element is clicked by user. &lt;/li&gt;&lt;/ol&gt;In following code I have print getExtra() and getType() value in LogCat.&lt;br /&gt;&lt;br /&gt;package com.kpbird.mywebview;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.util.Log;&lt;br /&gt;import android.view.MotionEvent;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.webkit.WebView;&lt;br /&gt;import android.webkit.WebViewClient;&lt;br /&gt;import android.widget.RadioButton;&lt;br /&gt;&lt;br /&gt;public class MyWebView extends Activity {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /** Called when the activity is first created. */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; String TAG = this.getClass().getSimpleName();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebView wv;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super.onCreate(savedInstanceState);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setContentView(R.layout.main);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wv = (WebView) findViewById(R.id.MyWebView);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wv.getSettings().setJavaScriptEnabled(true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wv.setWebViewClient(new VideoWebViewClient());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wv.getSettings().setUserAgentString("Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wv.loadUrl("http://www.w3schools.com/html/tryit.asp?filename=tryhtml_form_radio");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wv.setOnTouchListener(new View.OnTouchListener() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean onTouch(View v, MotionEvent event) {&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; WebView.HitTestResult hr = ((WebView)v).getHitTestResult();&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; &lt;br /&gt;&lt;b&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; Log.i(TAG, "getExtra = "+ hr.getExtra() + "\t\t Type=" + hr.getType());&lt;/b&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; return false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private class VideoWebViewClient extends WebViewClient {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean shouldOverrideUrlLoading(WebView view, String url) {&lt;br /&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; view.loadUrl(url);&lt;br /&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; return false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Main.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Add WebView XML tag in main.xml.&lt;b&gt; &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:orientation="vertical"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_width="fill_parent"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_height="fill_parent"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&amp;lt;WebView android:id="@+id/MyWebView" android:layout_width="fill_parent" android:layout_height="fill_parent" /&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;AndroidManifest.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Add User Permission for INTERNET. &lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; package="com.kpbird.mywebview"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:versionCode="1"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:versionName="1.0"&amp;gt;&lt;br /&gt;&lt;b&gt;&amp;lt;uses-permission android:name="android.permission.INTERNET"&amp;gt;&amp;lt;/uses-permission&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;application android:icon="@drawable/icon" android:label="@string/app_name"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;activity android:name=".MyWebView"&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;nbsp;&amp;nbsp; android:label="@string/app_name" android:screenOrientation="portrait"&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;intent-filter&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;action android:name="android.intent.action.MAIN" /&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;category android:name="android.intent.category.LAUNCHER" /&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;/intent-filter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/activity&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/application&amp;gt;&lt;br /&gt;&amp;lt;/manifest&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&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/17114597-2996838261865710702?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/2996838261865710702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/04/android-webview-detect-html-element-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/2996838261865710702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/2996838261865710702'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/04/android-webview-detect-html-element-on.html' title='Android: WebView, Detect HTML Element on Click'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-914713126653160942</id><published>2011-04-28T01:50:00.000-07:00</published><updated>2011-04-28T01:50:33.069-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='Bluetooth'/><title type='text'>Android: Send Image via Bluetooth</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I assume that you have experience of developing Bluetooth application in Android. Android Bluetooth API &amp;nbsp;is not supporting OBEX directly, means I can not push any file directly to any device. Android Bluetooth API provide basic functionalities like discovery, connection and data transfer using streams (InputStream and OutputStream).&lt;br /&gt;&lt;br /&gt;Transferring file using Bluetooth need lot of coding. We need to manage device&amp;nbsp;discovery,&amp;nbsp;connection, IO etc.&lt;br /&gt;&lt;br /&gt;Now I found very simple way to send file using Bluetooth. Android has build-in Bluetooth application which allow us to send file&amp;nbsp;across the devices. &amp;nbsp;Build-in Bluetooth Application use SharedPerference to manage queue for Incoming and Outgoing files.&lt;br /&gt;&lt;br /&gt;I find the way to use same technique. Android Bluetooth application use ContentProvider to manage communication between storage and user interface. so I found the way that we can use it's&amp;nbsp;functionality&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Here is the code, Following 6 line allow you to send file using bluetooth, &amp;nbsp;you required only two things 1. URI of file which you want to send 2. DeviceAddress.&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}span.s1 {color: #b92e9f}span.s2 {color: #cf2b23}span.Apple-tab-span {white-space:pre}&lt;/style&gt;   &lt;br /&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;ContentValues values = &lt;span class="s1"&gt;new&lt;/span&gt; ContentValues();&lt;/li&gt;&lt;li&gt;values.put(BluetoothShare.URI, &lt;span class="s2"&gt;"content://"&lt;/span&gt; + &lt;b&gt;uritoSend&lt;/b&gt;);&lt;/li&gt;&lt;li&gt;values.put(BluetoothShare.DESTINATION, &lt;b&gt;deviceAddress&lt;/b&gt;);&lt;/li&gt;&lt;li&gt;values.put(BluetoothShare.DIRECTION, BluetoothShare.DIRECTION_OUTBOUND);&lt;/li&gt;&lt;li&gt;Long ts = System.currentTimeMillis();&lt;/li&gt;&lt;li&gt;values.put(BluetoothShare.TIMESTAMP, ts);&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="p1"&gt;Description of above code.&lt;br /&gt;1. Create object of ContentValue&lt;br /&gt;2. put URI of file which you want to send&lt;br /&gt;3. put DeviceAdddress, destination device address&lt;br /&gt;4. put Direction, set outbound means you want to send the file.&lt;br /&gt;5. time stamp which will display at Notification bar&lt;br /&gt;6. put time stamp.&lt;br /&gt;&lt;br /&gt;Note: Above code is useful only if we can have URI of file which we want to send. It is perfectly work for Images because we can get URI of images available in Gallery but If we want to send file from SDCard then it&amp;nbsp;difficult because we can not get URI of file available in SDCard.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&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/17114597-914713126653160942?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/914713126653160942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/04/android-send-image-via-bluetooth.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/914713126653160942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/914713126653160942'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/04/android-send-image-via-bluetooth.html' title='Android: Send Image via Bluetooth'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-6727824162167781596</id><published>2011-04-27T10:56:00.000-07:00</published><updated>2011-04-27T11:53:11.940-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharedPreference'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android InDepth : SharedPreference</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;style type="text/css"&gt;p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Verdana}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Verdana; min-height: 15.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px Verdana}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 18.0px; font: 12.0px Verdana}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 18.0px; font: 12.0px Times; color: #9e0e09}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px}p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times}p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px Verdana; min-height: 15.0px}p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #489075}p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}p.p11 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times; min-height: 14.0px}p.p12 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #4d78c5}p.p13 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #777777}p.p14 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #3b3df5}p.p15 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}p.p16 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #9736b8}p.p17 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #bf2e9d; min-height: 13.0px}p.p18 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px}p.p19 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008326}p.p20 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d62b24}li.li1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Verdana}li.li4 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 18.0px; font: 12.0px Verdana}span.s1 {font: 12.0px 'Courier New'}span.s2 {text-decoration: underline ; color: #053aea}span.s3 {color: #3b3df5}span.s4 {color: #000000}span.s5 {color: #961a65}span.s6 {color: #032fc3}span.s7 {text-decoration: underline}span.s8 {color: #bb2510}span.s9 {color: #388d98}span.s10 {color: #053df5}span.s11 {color: #9736b8}span.s12 {font: 11.0px Menlo}span.s13 {color: #bf2e9d}span.s14 {color: #2832cf}span.s15 {font: 12.0px Verdana}span.s16 {color: #008326}span.s17 {color: #d62b24}span.Apple-tab-span {white-space:pre}ul.ul1 {list-style-type: disc}&lt;/style&gt;   &lt;br /&gt;&lt;div class="p1"&gt;&lt;b&gt;1. Introduction&lt;/b&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p3"&gt;SharedPreference is used to store settings/preferences. It stores data as key/value pairs. It share data between activities but not across the processes.&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;Shared Preference is stored in&amp;nbsp;/data/data/[package name]/shared_prefs/[SP Name].xml.&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p3"&gt;In Device data/data folder is not accessible but we can access data/data folder in Emulator. Using DDMS allow access to every folders including data/data folder. It is possible to pull &amp;nbsp;the Shared Preference &amp;nbsp;xml file to PC. If we stuck in any problem related to Shared Preference then we can transfer xml file to PC for observation.&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;2. Implementation&lt;/b&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p4"&gt;Let's Create simple example of SharedPreference. SharedPreference is Interface. We do not need to create object of SharedPreference. It created with the Activity. I will explain how SharedPreference Object will crate in this tutorial. Activity has method named "getSharedPreference()" we can&amp;nbsp;retrieve object like following.&lt;/div&gt;&lt;div class="p4"&gt;&lt;br /&gt;&lt;b&gt;2.1&amp;nbsp;Retrieving object of SharedPreference&lt;/b&gt;&lt;/div&gt;&lt;div class="p4"&gt;SharedPreference pref = getSharedPreference("MyPRef",MODE_PRIVATE);&lt;/div&gt;&lt;div class="p4"&gt;Method has two parameter Name and Mode, Name is used as XML file name.&amp;nbsp;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul class="ul1"&gt;&lt;li class="li4"&gt;&lt;span class="s1"&gt;MODE_PRIVATE&lt;/span&gt; is the operating mode for the preferences. It is the default mode and means the created file will be accessed by only the calling application.&amp;nbsp;&lt;/li&gt;&lt;li class="li4"&gt;&lt;span class="s1"&gt;MODE_WORLD_READABLE&lt;/span&gt; other application can read the created file but can not modify it.&amp;nbsp;&lt;/li&gt;&lt;li class="li4"&gt;&lt;span class="s1"&gt;MODE_WORLD_WRITEABLE&lt;/span&gt; other applications also have write permissions for the created file.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;div class="p4"&gt;First mode is default we can implement in this example. but what about other two options. &amp;nbsp;I found following post in "StackOverFlow.com"&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p5"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #e06666;"&gt;"As I checked in APIs description for getSharedPreferences(String, int),Second attribute is defining accessibility mode and can take 0 or MODE_PRIVATE for the default operation, MODE_WORLD_READABLE and MODE_WORLD_WRITEABLE to control permissions.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-style-span" style="color: #e06666;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p5"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #e06666;"&gt;But there is this small note in API description:&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-style-span" style="color: #e06666;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p5"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #e06666;"&gt;Note: currently this class (android.content.SharedPreferences) does not support use across multiple processes. This will be added later.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-style-span" style="color: #e06666;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p5"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #e06666;"&gt;Moreover in Mark L. Murphy book "beginning Android 2" he mentioned:&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-style-span" style="color: #e06666;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p5"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #e06666;"&gt;(Eventually, preferences might be shareable across applications, but that is not supported as of the time of this writing)&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;span class="Apple-style-span" style="color: #e06666;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p5"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #e06666;"&gt;Im so confused! does this mean that MODE_WORLD_READABLE and MODE_WORLD_WRITEABLE of getSharedPrefrences is there but NOT SUPPORTED YET in latest API level???"&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="p1"&gt;Source : &lt;a href="http://stackoverflow.com/questions/4787785/can-sharedpreferences-be-shared-among-different-android-applications"&gt;&lt;span class="s2"&gt;Here&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p4"&gt;&lt;b&gt;2.2 Create object of Editor&lt;/b&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p4"&gt;Editor is interface declared inside the SharedPreference class. so that To access Editor class we need to write following syntax, "pref" is object of SharedPreference.&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p4"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SharedPreferences.Editor edit = pref.edit();&lt;/span&gt;&lt;/div&gt;&lt;div class="p6"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p4"&gt;&lt;b&gt;2.2 Put value in SharedPreference&lt;/b&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;The following data types are supported by the SharedPreferences class:&lt;/div&gt;&lt;ul class="ul1"&gt;&lt;li class="li1"&gt;Boolean values&lt;/li&gt;&lt;li class="li1"&gt;Float values&lt;/li&gt;&lt;li class="li1"&gt;Integer values&lt;/li&gt;&lt;li class="li1"&gt;Long values&lt;/li&gt;&lt;li class="li1"&gt;String values&lt;/li&gt;&lt;/ul&gt;&lt;div class="p7"&gt;Putting value in SharedPreference using Editor object is very simple, It's same as we are using Map Collection class. Here I put one value of each data type.&amp;nbsp;&lt;/div&gt;&lt;div class="p6"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;edit.putBoolean("Boolean_Value",&amp;nbsp;true);&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.putFloat("Float_value", 12.5F);&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.putInt("Int_value", 500);&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.putLong("Long_Value", 1234567890);&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.putString("String_Value",&amp;nbsp;"Hello SharedPreference");&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;SharedPreference is not support to put object inside it but If you can convert your object in String then It is possible. Support you want to store small image in SharedPreference then It is possible using Base64. just convert your image in Base64 and put it as String. but same technique is not possible with object of any class.&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;2.3 Commit the values&lt;/b&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p3"&gt;Commit your preferences changes back from this Editor to the SharedPreferences object it is editing. This atomically performs the requested modifications, replacing whatever is currently in the SharedPreferences.&lt;/div&gt;&lt;div class="p8"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p3"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;edit.commit();&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;Note&amp;nbsp;that when two editors are modifying preferences at the same time, the last one to call commit wins.&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;If you don't care about the return value and you're using this from your application's main thread, consider using apply() instead.&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;2.4 Retrieving values&lt;/b&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;You don’t need an Editor to simply read preferences. Instead, retrieve the SharedPreferences object and use the appropriate method to retrieve a preference by name:&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;boolean b = pref.getBoolean("Boolean_Value",false);&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float f = pref.getFloat("Float_Value", 0);&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int i = pref.getInt("Int_Value", 0);&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long l = pref.getLong("Long_Value", 0);&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String s = pref.getString("String_Value", "");&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;Each of these methods has two parameters: the preference key string and a default value to return if the preference is undefined.&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;2.5 Remove And Clear&lt;/b&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;Editor class has two method remove and clear. as name suggest it is used to remove specific key and clear is used to remove all values.&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p9"&gt;&lt;span class="Apple-tab-span"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; // Remove value&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.remove(&lt;span class="s3"&gt;"Boolean_Value"&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.commit();&lt;/span&gt;&lt;/div&gt;&lt;div class="p6"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p9"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s4"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;// Clear All value&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.clear();&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.commit();&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;2.5. Full Source Code&lt;/b&gt;&lt;/div&gt;&lt;div class="p11"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p11"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s5"&gt;package&lt;/span&gt; com.kpbird.mysp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p6"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s5"&gt;import&lt;/span&gt; android.app.Activity;&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s5"&gt;import&lt;/span&gt; android.content.SharedPreferences;&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s5"&gt;import&lt;/span&gt; android.os.Bundle;&lt;/span&gt;&lt;/div&gt;&lt;div class="p6"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s5"&gt;public&lt;/span&gt; &lt;span class="s5"&gt;class&lt;/span&gt; MySP &lt;span class="s5"&gt;extends&lt;/span&gt; Activity {&lt;/span&gt;&lt;/div&gt;&lt;div class="p12"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s4"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;/** Called when the activity is first created. */&lt;/span&gt;&lt;/div&gt;&lt;div class="p13"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s4"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;@Override&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="s5"&gt;public&lt;/span&gt; &lt;span class="s5"&gt;void&lt;/span&gt; onCreate(Bundle savedInstanceState) {&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s5"&gt;super&lt;/span&gt;.onCreate(savedInstanceState);&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setContentView(R.layout.&lt;span class="s6"&gt;main&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="p6"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p9"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s4"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;// fetch object of SharedPreference&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences pref = getSharedPreferences(&lt;span class="s3"&gt;"MyPref"&lt;/span&gt;, &lt;span class="s6"&gt;MODE_PRIVATE&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="p9"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s4"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;// Create object of Editor&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences.Editor edit = pref.edit();&lt;/span&gt;&lt;/div&gt;&lt;div class="p9"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s4"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;// Put values&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.putBoolean(&lt;span class="s3"&gt;"Boolean_Value"&lt;/span&gt;, &lt;span class="s5"&gt;true&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.putFloat(&lt;span class="s3"&gt;"Float_value"&lt;/span&gt;, 12.5F);&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.putInt(&lt;span class="s3"&gt;"Int_value"&lt;/span&gt;, 500);&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.putLong(&lt;span class="s3"&gt;"Long_Value"&lt;/span&gt;, 1234567890);&lt;/span&gt;&lt;/div&gt;&lt;div class="p14"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s4"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.putString(&lt;/span&gt;"String_Value"&lt;span class="s4"&gt;, &lt;/span&gt;"Hello SharedPreference"&lt;span class="s4"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p9"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s4"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;// Commit the data&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.commit();&lt;/span&gt;&lt;/div&gt;&lt;div class="p6"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p6"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p9"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s4"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;//&lt;span class="s7"&gt;Retreive&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s5"&gt;boolean&lt;/span&gt; &lt;span class="s7"&gt;b&lt;/span&gt; = pref.getBoolean(&lt;span class="s3"&gt;"Boolean_Value"&lt;/span&gt;,&lt;span class="s5"&gt;false&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s5"&gt;float&lt;/span&gt; &lt;span class="s7"&gt;f&lt;/span&gt; = pref.getFloat(&lt;span class="s3"&gt;"Float_Value"&lt;/span&gt;, 0);&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s5"&gt;int&lt;/span&gt; &lt;span class="s7"&gt;i&lt;/span&gt; = pref.getInt(&lt;span class="s3"&gt;"Int_Value"&lt;/span&gt;, 0);&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s5"&gt;long&lt;/span&gt; &lt;span class="s7"&gt;l&lt;/span&gt; = pref.getLong(&lt;span class="s3"&gt;"Long_Value"&lt;/span&gt;, 0);&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String &lt;span class="s7"&gt;s&lt;/span&gt; = pref.getString(&lt;span class="s3"&gt;"String_Value"&lt;/span&gt;, &lt;span class="s3"&gt;""&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="p6"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="p10"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="p6"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;3. XML File&lt;/b&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;When we execute above application, Android will generate xml file named "MyPref.xml" in following path&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/data/data/com.kpbird.mysp/shared_prefs/MyPref.xml&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;XML File content&amp;nbsp;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;?xml&lt;/span&gt; &lt;span class="s9"&gt;version&lt;/span&gt;='&lt;span class="s10"&gt;1.0&lt;/span&gt;' &lt;span class="s9"&gt;encoding&lt;/span&gt;='utf-8' standalone='yes' ?&lt;span class="s8"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;&lt;/span&gt;map&lt;span class="s8"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;&lt;/span&gt;int name=&lt;span class="s11"&gt;"Int_value"&lt;/span&gt; value=&lt;span class="s11"&gt;"500"&lt;/span&gt; &lt;span class="s8"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;&lt;/span&gt;boolean name=&lt;span class="s11"&gt;"Boolean_Value"&lt;/span&gt; value=&lt;span class="s11"&gt;"true"&lt;/span&gt; &lt;span class="s8"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p16"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;&lt;/span&gt;&lt;span class="s4"&gt;long name=&lt;/span&gt;"Long_Value"&lt;span class="s4"&gt; value=&lt;/span&gt;"1234567890"&lt;span class="s4"&gt; &lt;/span&gt;&lt;span class="s8"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;&lt;/span&gt;string name=&lt;span class="s11"&gt;"String_Value"&lt;/span&gt;&lt;span class="s8"&gt;&amp;gt;&lt;/span&gt;Hello SharedPreference&lt;span class="s8"&gt;&amp;lt;/&lt;/span&gt;string&lt;span class="s8"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;&lt;/span&gt;float name=&lt;span class="s11"&gt;"Float_value"&lt;/span&gt; value=&lt;span class="s11"&gt;"12.5"&lt;/span&gt; &lt;span class="s8"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;/&lt;/span&gt;map&lt;span class="s8"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;XML File after remove Boolean_Value&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;?xml&lt;/span&gt; &lt;span class="s9"&gt;version&lt;/span&gt;='&lt;span class="s10"&gt;1.0&lt;/span&gt;' &lt;span class="s9"&gt;encoding&lt;/span&gt;='utf-8' standalone='yes' ?&lt;span class="s8"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;&lt;/span&gt;map&lt;span class="s8"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;&lt;/span&gt;int name=&lt;span class="s11"&gt;"Int_value"&lt;/span&gt; value=&lt;span class="s11"&gt;"500"&lt;/span&gt; &lt;span class="s8"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p16"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;&lt;/span&gt;&lt;span class="s4"&gt;long name=&lt;/span&gt;"Long_Value"&lt;span class="s4"&gt; value=&lt;/span&gt;"1234567890"&lt;span class="s4"&gt; &lt;/span&gt;&lt;span class="s8"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;&lt;/span&gt;string name=&lt;span class="s11"&gt;"String_Value"&lt;/span&gt;&lt;span class="s8"&gt;&amp;gt;&lt;/span&gt;Hello SharedPreference&lt;span class="s8"&gt;&amp;lt;/&lt;/span&gt;string&lt;span class="s8"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;&lt;/span&gt;float name=&lt;span class="s11"&gt;"Float_value"&lt;/span&gt; value=&lt;span class="s11"&gt;"12.5"&lt;/span&gt; &lt;span class="s8"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;/&lt;/span&gt;map&lt;span class="s8"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;XML File after clear&amp;nbsp;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;?xml&lt;/span&gt; &lt;span class="s9"&gt;version&lt;/span&gt;='&lt;span class="s10"&gt;1.0&lt;/span&gt;' &lt;span class="s9"&gt;encoding&lt;/span&gt;='utf-8' standalone='yes' ?&lt;span class="s8"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s8"&gt;&amp;lt;&lt;/span&gt;map &lt;span class="s8"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;4. SharedPreference In Depth&lt;/b&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;Above information are general usage and implementation of SharedPreference but this article is for InDepth. I am going to answer following questions.&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;1. When SharedPreference object create ?&lt;/div&gt;&lt;div class="p1"&gt;2. Who create object of SharedPreference ?&lt;/div&gt;&lt;div class="p1"&gt;3. Where getSharedPreference() is implemented ?&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;SharedPreference is Interface declared in android.content package. Classes and Interface Included in SharedPreference&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;SharedPerfereance - Interface&lt;/li&gt;&lt;li&gt;Context - Abstract Class&lt;/li&gt;&lt;li&gt;ContextWrapper - Class&lt;/li&gt;&lt;li&gt;Activity - Class&lt;/li&gt;&lt;li&gt;ActivityThread - final Class&lt;/li&gt;&lt;li&gt;ContextImpl - Class&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;1. SharedPreference :&lt;/b&gt; This Interface has methods and two sub/inner Interface Editor and &lt;span class="s12"&gt;OnSharedPreferenceChangeListener &lt;/span&gt;All ShredPreference method are declared in this Interface&amp;nbsp;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2. Context :&lt;/b&gt; This is Abstract Class. In this class getSharedPreference method is declared. getSharedPreference method is public and abstract. It also has static and final integer variable for Mode.&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;public&lt;/span&gt; &lt;span class="s13"&gt;static&lt;/span&gt; &lt;span class="s13"&gt;final&lt;/span&gt; &lt;span class="s13"&gt;int&lt;/span&gt; MODE_PRIVATE = &lt;span class="s14"&gt;0x0000&lt;/span&gt;;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;public&lt;/span&gt; &lt;span class="s13"&gt;static&lt;/span&gt; &lt;span class="s13"&gt;final&lt;/span&gt; &lt;span class="s13"&gt;int&lt;/span&gt; MODE_WORLD_READABLE = &lt;span class="s14"&gt;0x0001&lt;/span&gt;;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;public&lt;/span&gt; &lt;span class="s13"&gt;static&lt;/span&gt; &lt;span class="s13"&gt;final&lt;/span&gt; &lt;span class="s13"&gt;int&lt;/span&gt; MODE_WORLD_WRITEABLE = &lt;span class="s14"&gt;0x0002&lt;/span&gt;;&lt;/div&gt;&lt;div class="p17"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="s13"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;public&lt;/span&gt; &lt;span class="s13"&gt;abstract&lt;/span&gt; SharedPreferences getSharedPreferences(String name,&lt;span class="s13"&gt;int&lt;/span&gt; mode);&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;3. ContextWrapper :&lt;/b&gt; This class is child class of Context Class. As name suggest it wrapper all method of Context Class. No real implementation available in this class.&amp;nbsp; Following method declared in ContextWrapper class.&lt;/div&gt;&lt;div class="p17"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;public&lt;/span&gt; SharedPreferences getSharedPreferences(String name, &lt;span class="s13"&gt;int&lt;/span&gt; mode) {&lt;/div&gt;&lt;div class="p15"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="s13"&gt;return&lt;/span&gt; mBase.getSharedPreferences(name, mode);&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;4. Activity :&lt;/b&gt; This class is child class of ContextThemeWrapper and ContextThemeWrapper is child class of ContextWrapper. getSharedPreference method is not implemented int this class. but It has object of ActivityThread. Activity class has method named "&lt;span class="s12"&gt;attach" &lt;/span&gt;Variable for Context, ActivityThread, Configuration, etc.. are pass from system. ActivityThread variable assign to mMainThread variable. attach method is call from "performLunchActivity" method of ActivityThread.&lt;/div&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;ActivityThread mMainThread;&lt;span class="s15"&gt; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="s13"&gt;final&lt;/span&gt; &lt;span class="s13"&gt;void&lt;/span&gt; attach(Context context, ActivityThread aThread,&lt;/div&gt;&lt;div class="p15"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;Instrumentation instr, IBinder token, &lt;span class="s13"&gt;int&lt;/span&gt; ident,&lt;/div&gt;&lt;div class="p15"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;Application application, Intent intent, ActivityInfo info,&lt;/div&gt;&lt;div class="p15"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;CharSequence title, Activity parent, String id,&lt;/div&gt;&lt;div class="p15"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;Object lastNonConfigurationInstance,&lt;/div&gt;&lt;div class="p15"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;HashMap&amp;lt;String,Object&amp;gt; lastNonConfigurationChildInstances,&lt;/div&gt;&lt;div class="p15"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;Configuration config)&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;5. ActivityThread :&lt;/b&gt; ActivityThread is final class.&amp;nbsp; It has object on ContextImpl class.&amp;nbsp; ActivityThread has method named "performLunchActivity" in this method object of ContextImpl is create.&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-tab-span"&gt;&lt;/span&gt;&lt;span class="Apple-tab-span"&gt;&lt;/span&gt;&lt;span class="Apple-tab-span"&gt;&lt;/span&gt;&lt;span class="Apple-tab-span"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ContextImpl appContext = &lt;span class="s13"&gt;new&lt;/span&gt; ContextImpl();&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;appContext.init(r.packageInfo, r.token, &lt;span class="s13"&gt;this&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;appContext.setOuterContext(activity);&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;CharSequence title = r.activityInfo.loadLabel(appContext.getPackageManager());&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Configuration config = &lt;span class="s13"&gt;new&lt;/span&gt; Configuration(mConfiguration);&lt;/span&gt;&lt;/div&gt;&lt;div class="p18"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p18"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;activity.attach(appContext, &lt;span class="s13"&gt;this&lt;/span&gt;, getInstrumentation(), r.token,&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;r.ident, app, r.intent, r.activityInfo, title, r.parent,&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;r.embeddedID, r.lastNonConfigurationInstance,&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;r.lastNonConfigurationChildInstances, config);&lt;/span&gt;&lt;/div&gt;&lt;div class="p18"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;6. ContextImpl :&lt;/b&gt; This is child class of Context. ContextImpl class has implementation of all abstract method of Context Class. ContextImpl class has private class which implements SharedPrferenceInterface&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="s13"&gt;private&lt;/span&gt; &lt;span class="s13"&gt;static&lt;/span&gt; &lt;span class="s13"&gt;final&lt;/span&gt; &lt;span class="s13"&gt;class&lt;/span&gt; SharedPreferencesImpl &lt;span class="s13"&gt;implements&lt;/span&gt; SharedPreferences&amp;nbsp;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;Here is implementation of getSharedPreferences.&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&lt;span class="s13"&gt;public&lt;/span&gt; SharedPreferences getSharedPreferences(String name, &lt;span class="s13"&gt;int&lt;/span&gt; mode) {&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferencesImpl sp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; File prefsFile;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;boolean&lt;/span&gt; needInitialLoad = &lt;span class="s13"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;synchronized&lt;/span&gt; (sSharedPrefs) {&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sp = sSharedPrefs.get(name);&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;if&lt;/span&gt; (sp != &lt;span class="s13"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !sp.hasFileChangedUnexpectedly()) {&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;return&lt;/span&gt; sp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; prefsFile = getSharedPrefsFile(name);&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;if&lt;/span&gt; (sp == &lt;span class="s13"&gt;null&lt;/span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sp = &lt;span class="s13"&gt;new&lt;/span&gt; SharedPreferencesImpl(prefsFile, mode, &lt;span class="s13"&gt;null&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sSharedPrefs.put(name, sp);&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; needInitialLoad = &lt;span class="s13"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="p18"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;synchronized&lt;/span&gt; (sp) {&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;if&lt;/span&gt; (needInitialLoad &amp;amp;&amp;amp; sp.isLoaded()) {&lt;/span&gt;&lt;/div&gt;&lt;div class="p19"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s4"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;// lost the race to load; another thread handled it&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;return&lt;/span&gt; sp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; File backup = makeBackupFile(prefsFile);&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;if&lt;/span&gt; (backup.exists()) {&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; prefsFile.delete();&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; backup.renameTo(prefsFile);&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="p18"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s16"&gt;// Debugging&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;if&lt;/span&gt; (prefsFile.exists() &amp;amp;&amp;amp; !prefsFile.canRead()) {&lt;/span&gt;&lt;/div&gt;&lt;div class="p20"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="s4"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.w(TAG, &lt;/span&gt;"Attempt to read preferences file "&lt;span class="s4"&gt; + prefsFile + &lt;/span&gt;" without permission"&lt;span class="s4"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="p18"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Map map = &lt;span class="s13"&gt;null&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FileStatus stat = &lt;span class="s13"&gt;new&lt;/span&gt; FileStatus();&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;if&lt;/span&gt; (FileUtils.getFileStatus(prefsFile.getPath(), stat) &amp;amp;&amp;amp; prefsFile.canRead()) {&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;try&lt;/span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FileInputStream str = &lt;span class="s13"&gt;new&lt;/span&gt; FileInputStream(prefsFile);&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; map = XmlUtils.readMapXml(str);&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; str.close();&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;span class="s13"&gt;catch&lt;/span&gt; (org.xmlpull.v1.XmlPullParserException e) {&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.w(TAG, &lt;span class="s17"&gt;"getSharedPreferences"&lt;/span&gt;, e);&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;span class="s13"&gt;catch&lt;/span&gt; (FileNotFoundException e) {&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.w(TAG, &lt;span class="s17"&gt;"getSharedPreferences"&lt;/span&gt;, e);&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;span class="s13"&gt;catch&lt;/span&gt; (IOException e) {&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.w(TAG, &lt;span class="s17"&gt;"getSharedPreferences"&lt;/span&gt;, e);&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sp.replace(map, stat);&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="s13"&gt;return&lt;/span&gt; sp;&lt;/span&gt;&lt;/div&gt;&lt;div class="p15"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;4.1 Diagram : &lt;/b&gt;Following picture make things more clear.&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="p2"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-0AgVs6N8jx4/TbgEfAqCOFI/AAAAAAAADGE/aWKnMQp0fNg/s1600/Untitleddrawing.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://4.bp.blogspot.com/-0AgVs6N8jx4/TbgEfAqCOFI/AAAAAAAADGE/aWKnMQp0fNg/s640/Untitleddrawing.jpg" width="480" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p2"&gt;&lt;br /&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/17114597-6727824162167781596?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/6727824162167781596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2011/04/android-indepth-sharedpreference.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/6727824162167781596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/6727824162167781596'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2011/04/android-indepth-sharedpreference.html' title='Android InDepth : SharedPreference'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-0AgVs6N8jx4/TbgEfAqCOFI/AAAAAAAADGE/aWKnMQp0fNg/s72-c/Untitleddrawing.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-2295937084675748454</id><published>2010-10-29T10:02:00.000-07:00</published><updated>2011-04-27T11:53:54.999-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android is getting Bigger and BIGGER</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="Apple-style-span" style="color: #383838; font-family: Arial, Helvetica, 'Nimbus Sans L', sans-serif; font-size: 12px; line-height: 16px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em;"&gt;&lt;strong&gt;Android&lt;/strong&gt;&amp;nbsp;is getting bigger in all possible ways.&lt;br /&gt;As you may have heard,&amp;nbsp;&lt;strong&gt;Android surpasses Apple's iPhone operating system&lt;/strong&gt;&amp;nbsp;for the number&lt;strong&gt;no. 2&lt;/strong&gt;&amp;nbsp;spot in the States.&lt;/div&gt;&lt;div style="margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em;"&gt;&lt;img alt="android surpasses osx" height="300" src="http://i.i.com.com/cnwk.1d/i/tim//2010/05/10/Android_and_iPhone_market_share_Q1_2010-2.png" style="border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px;" width="500" /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em;"&gt;A few days ago,&amp;nbsp;&lt;strong&gt;Google has announced their 100,000 app milestone&lt;/strong&gt;&amp;nbsp;for the Android Market. That's a lot of applications, and it only seems to be growing.&lt;/div&gt;&lt;div style="margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em;"&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;The&amp;nbsp;&lt;strong&gt;Android market&lt;/strong&gt;&amp;nbsp;first launched in October 2008.&lt;/div&gt;&lt;div style="margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em;"&gt;&lt;img alt="android apps" height="300" src="http://www.digitaltrends.com/wp-content/uploads/2009/12/best-android-apps.jpg" style="border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px;" width="500" /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em;"&gt;Apple recently launched iPad. Now,&amp;nbsp;&lt;b&gt;Notion Ink&lt;/b&gt;&amp;nbsp;has announced the launch of its android based tablet called&amp;nbsp;&lt;b&gt;"Adam"&lt;/b&gt;. It is expected to provide stiff competition to the iPad and has decent features that will look to break the strong “Apple brand” bastion.&lt;/div&gt;&lt;div style="margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em;"&gt;&lt;b&gt;Specs:&lt;/b&gt;&lt;/div&gt;&lt;ul style="list-style-type: disc; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-left: 2em;"&gt;&lt;li 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;strong&gt;Measuring:&lt;/strong&gt;&amp;nbsp;6.3 x 9.8 x 0.6 inches.&lt;br /&gt;It is based on NVIDIA’s tegra 2 architecture for tablet pc’s.&lt;/li&gt;&lt;li 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;strong&gt;CPU:&lt;/strong&gt;&amp;nbsp;Dual core ARM cortex A9 CPU, clocking 1GHz.&lt;/li&gt;&lt;li 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;strong&gt;Screen:&lt;/strong&gt;&amp;nbsp;The 10.1 inch pixelQI display looks to provide a maximum resolution of up to 1024 x 600 pels. It also promises variety – an inbuilt e-paper mode and a transreflective mode are also built-in to this device allowing it to be used in normal sunlight as well.&lt;/li&gt;&lt;/ul&gt;&lt;div style="margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em;"&gt;&lt;img alt="adam" height="300" src="http://www.solidblogger.com/wp-content/uploads/2010/08/NotionInkAdamPixelQiTablet-506x380.jpg" style="border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px;" width="500" /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em;"&gt;source:&amp;nbsp;&lt;em&gt;http://news.cnet.com/8301-30686_3-20004585-266.html#ixzz13kDcOGtX&lt;br /&gt;http://www.digitaltrends.com&lt;/em&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/17114597-2295937084675748454?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/2295937084675748454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2010/10/android-is-getting-bigger-and-bigger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/2295937084675748454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/2295937084675748454'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2010/10/android-is-getting-bigger-and-bigger.html' title='Android is getting Bigger and BIGGER'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-2594889762620876260</id><published>2010-10-29T09:55:00.000-07:00</published><updated>2011-04-27T11:54:17.173-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Nexous Two'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>How does Google benefit by releasing a Nexus Two?</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://andgeeks.com/wp-content/uploads/2010/10/google-nexus-one.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://andgeeks.com/wp-content/uploads/2010/10/google-nexus-one.jpg" width="192" /&gt;&lt;/a&gt;&lt;/div&gt;After the ripping they took for the Nexus One, would Google dip back into the well for a sequel? Knowing them it’s a strong possibility. They know that most of the attacks on the Nexus (“It didn’t sell well.”) miss the point. If they think that a second iteration of the device will service their purposes, you can bet they’ll develop it. Earlier this year Google CEO Eric Schmidt said the company “didn’t have to do a second one,” but you’ll notice that he spoke in the past tense. There is still room in the future, then, for a Nexus Two, and lately we’ve heard plenty of rumors regarding it. What I’m wondering is how Google benefits from releasing a second device.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We’ve heard a few conflicting reports about a possible Nexus Two this week. First came from British publication City A.M., which claimed that Carphone Warehouse would distribute a Google-branded handset. Two of the reasons the Nexus One didn’t sell well were that it wasn’t in stores and it wasn’t heavily marketed. A distribution deal with Carphone Warehouse would help remedy that in the UK. And, since Best Buy owns a 50 percent stake in Carphone Warehouse, there’s a chance that we could see a similar distribution deal in the States. Again, it sounds as though the Nexus Two would be more of a mass market device — if it exists at all.&lt;br /&gt;&lt;br /&gt;There’s an interesting line towards the end of the City A.M. article: “It is not yet clear who will manufacture it, although rumours surrounding a Samsung model are believed to be untrue.” While ruling out a single manufacturer usually isn’t interesting on its own, it becomes interesting when we see a later rumor that connects Samsung and Google. On Monday we learned that Samsung will unveil a new Android device on November 8. Commence rumors.&lt;br /&gt;&lt;br /&gt;At Android and Me, Taylor Wimberly takes matters a step further by talking to an “Android insider” who backs up the story. After years of news analysis I’ve come to distrust anonymous people who are titled “insider,” but I’ll play along with this one just because it’s fun to imagine a Samsung-built Nexus Two. Sure, I like HTC devices the best, but I’m willing to give Samsung a shot. People rave about the Galaxy S hardware, and if it were loaded with Froyo now I’m sure it would get even more hype.&lt;br /&gt;&lt;br /&gt;Anyway, as the rumor goes we’re going to see Samsung announce this device on November 8. It will be available for all carriers, presumably on a subsidized basis (because the unsubsidized version of the N1 didn’t go over that well, from what I understand). As I asked above, I do wonder what Google stands to gain here. Maybe it’s a relationship with Samsung — after all, Samsung hardware and the latest software will make an excellent combination. Maybe it’s an attempt to see their vision come to fruition via their own handset. I’m sure we could speculate hundreds of reasons why Google is doing this.&lt;br /&gt;&lt;br /&gt;Chances are we’ll hear more about this in the coming week, since we rarely get all the way to a launch event without knowing its nature. I’m definitely rooting for the N2. I think Google has plenty more to gain than the reasons I listed above.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;source :andgeeks.com&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-2594889762620876260?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/2594889762620876260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2010/10/how-does-google-benefit-by-releasing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/2594889762620876260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/2594889762620876260'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2010/10/how-does-google-benefit-by-releasing.html' title='How does Google benefit by releasing a Nexus Two?'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-5897193518719155947</id><published>2007-08-08T05:24:00.001-07:00</published><updated>2007-08-08T05:24:42.701-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Javascript Remoting'/><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='Javascript Multipurpose'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='DotNet'/><category scheme='http://www.blogger.com/atom/ns#' term='Coldfusion'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='Smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Lisp Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Multi-Language'/><title type='text'>Ajax Frameworks</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lWLEpwzcLAw/Rrm10XK6O5I/AAAAAAAAAkA/qrt-GtF3mRs/s1600-h/ajaxgoals_logo.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_lWLEpwzcLAw/Rrm10XK6O5I/AAAAAAAAAkA/qrt-GtF3mRs/s320/ajaxgoals_logo.jpg" alt="" id="BLOGGER_PHOTO_ID_5096304364524026770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span style="font-size:100%;"&gt;C++ Ajax Frameworks&lt;/span&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://witty.sourceforge.net/" target="_blank"&gt;Wt&lt;/a&gt; : Wt (pronounce wit-ty), is a C++ library to develop web applications. The API is widget-centric, and inspired by existing C++ Graphical User Interface APIs. To the developer, it offers complete abstraction of any web-specific implementation details. &lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;Coldfusion Ajax Frameworks&lt;/span&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://www.robgonda.com/blog/projects/ajaxcfc/" target="_blank"&gt;AjaxCFC&lt;/a&gt; : AjaxCFC is a ColdFusion framework meant to speed up ajax application development and deployment by providing developers seamless integration between JavaScript and ColdFusion, and providing built-in functions, such as security and debugging etc &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.indiankey.com/cfajax/" target="_blank"&gt;CFAjax&lt;/a&gt; : CFAjax is the AJAX implementation for coldfusion. It makes coldfusion method calls on server directly from HTML page using JavaScript and return backs the result to the calling HTML page. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.lalabird.com/"&gt;JSMX&lt;/a&gt; : JSMX is an Ultra Lightweight - Language Agnostic - Ajax Framework. It is by far the easiest way to integrate Ajax into any Web Application. &lt;/li&gt;&lt;li&gt;&lt;a href="http://guidone.bloggers.it/wddxAjax" target="_blank"&gt;WDDXAJAX&lt;/a&gt; : wddxAjax is a ColdFusion custom tag to enable AJAX on *.cfm template. &lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;DotNet Ajax Frameworks&lt;/span&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://www.ajaxpro.info/" target="_blank"&gt;Ajax.NET Professional&lt;/a&gt; : Microsoft.NET Framework 2.0 library and examples &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mathertel.de/AJAXEngine/" target="_blank"&gt;Ajax Engine&lt;/a&gt; : An AJAX Framework using the standard webservice protocols SOAP and WSDL. &lt;/li&gt;&lt;li&gt;&lt;a href="http://anthem-dot-net.sourceforge.net/" target="_blank"&gt;Anthem.NET&lt;/a&gt; : The Anthem project adds AJAX-like features to ASP.NET. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.asp.net/default.aspx?tabindex=7&amp;tabid=47" target="_blank"&gt;Atlas&lt;/a&gt; : Atlas is a free framework for building a new generation of richer, more interactive, highly personalized cross-browser web applications. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.comfortasp.de/" target="_blank"&gt;ComfortASP.NET&lt;/a&gt; : ComfortASP.NET is an AJAX like framework for ASP.NET that doesn’t actually require you to learn any AJAX programming. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.emergetk.com/" target="_blank"&gt;EmergeTk&lt;/a&gt; : The emerge toolkit is a web application development framework for the 21st century. The server is written in C#, and currently runs on MS .NET. We use the wonderful dojo toolkit on the client. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.magicajax.net/" target="_blank"&gt;MagicAjax.NET&lt;/a&gt; : MagicAjax.NET is a free open-source framework, designed to make it easier and more intuitive for developers to integrate AJAX technology into their web pages, without replacing the ASP.NET controls and/or writing tons of javascript code. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.castleproject.org/index.php/MonoRail" target="_blank"&gt;MonoRail&lt;/a&gt; : MonoRail (former Castle on Rails) is a MVC web framework inspired by Action Pack. The Action Pack way of development is extremely productive, very intuitive and easily testable. &lt;/li&gt;&lt;li&gt;&lt;a href="http://dart.com/powerweb/livecontrols.asp" target="_blank"&gt;PowerWEB LiveControls for ASP.NET&lt;/a&gt; : PowerWEB LiveControls for ASP.NET is a suite of 21 Web Controls that allow you to raise server-side callbacks and update form elements without reloading the entire HTML page. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.telerik.com/" target="_blank"&gt;radControls for .NET&lt;/a&gt; : telerik r.a.d.controls suite is the most innovative and comprehensive toolset for professional ASP.NET development, boasting the capabilities of AJAX, Atlas and Visual Studio .NET 2005. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.themidnightcoders.com/weborb/aboutWeborb.htm" target="_blank"&gt;WebORB for .NET&lt;/a&gt; : WebORB Presentation Server is a platform for developing, deploying and hosting Rich Internet Applications. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.zumipage.com/" target="_blank"&gt;zumiPage&lt;/a&gt; : zumiPage makes it easy to build rich, interactive web-based applications. With zumiPage postbacks to the server are automatically captured on the client-side, and sent via an XmlHttp mechanism. &lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;Flash Ajax Frameworks&lt;/span&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://labs.macromedia.com/wiki/index.php/Flex_Framework:FABridge" target="_blank"&gt;Flex Framework:FABridge&lt;/a&gt; : The Flex-Ajax Bridge (FABridge) is a small, unobtrusive library of code that you can insert into an Adobe Flex application, a Flex component, or even an empty SWF file to expose it to scripting in the browser. It is being released to the community under an open source license. &lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;Java Ajax Frameworks&lt;/span&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://eng.joyistar.com/" target="_blank"&gt;AJAX Dev Library&lt;/a&gt; : The first visual Ajax IDE &lt;/li&gt;&lt;li&gt;&lt;a href="http://ajaxanywhere.sourceforge.net/" target="_blank"&gt;AjaxAnywhere&lt;/a&gt; : AjaxAnywhere is designed to turn any set of existing JSP or JSF components into AJAX-aware components without complex JavaScript coding. &lt;/li&gt;&lt;li&gt;&lt;a href="http://ajaxtags.sourceforge.net/" target="_blank"&gt;The AJAX JSP Tag Library&lt;/a&gt; : The AJAX Tag Library is a set of JSP tags that simplify the use of Asynchronous JavaScript and XML (AJAX) technology in JavaServer Pages. &lt;/li&gt;&lt;li&gt;&lt;a href="http://javawebparts.sourceforge.net/" target="_blank"&gt;Java Web Parts&lt;/a&gt; : Java Web Parts is a project that provides small, reusable and largely independant Java components of interest to all web application developers. &lt;/li&gt;&lt;li&gt;&lt;a href="https://ajax4jsf.dev.java.net/" target="_blank"&gt;The AJAX-JSF&lt;/a&gt; : AJAX for JavaServer Faces &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.getahead.ltd.uk/dwr/" target="_blank"&gt;Direct Web Remoting&lt;/a&gt; : DWR allows Javascript in a browser to interact with Java on a server and helps you manipulate web pages with the results. DWR is Easy Ajax for Java &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.nextapp.com/products/echo2/" target="_blank"&gt;Echo 2&lt;/a&gt; : Echo2 is the next-generation of the Echo Web Framework, a platform for developing web-based applications that approach the capabilities of rich clients. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.guiseframework.com/" target="_blank"&gt;Guise&lt;/a&gt; : A Graphical User Interface, Simple yet Elegant - Guise is a web user interface framework for Java designed from the ground up to be both simple and elegant. &lt;/li&gt;&lt;li&gt;&lt;a href="http://jspcontrols.sourceforge.net/" target="_blank"&gt;JSP Controls Tag Library&lt;/a&gt; : JSP Controls Tag Library allows to create independent portlet-like page fragments, like login forms, checkout wizards, tabbed notebooks or image sliders. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jwic.de/" target="_blank"&gt;jWic&lt;/a&gt; : jWic is a java-based development framework for developing dynamic web applications with the convenience and familiarity of rich client style programming. &lt;/li&gt;&lt;li&gt;&lt;a href="http://swato.dev.java.net/" target="_blank"&gt;SWATO &lt;/a&gt; : Shift Web Application TO… : Developing Web Applications Easier via AJAX &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.clearnova.com/" target="_blank"&gt;Clearnova&lt;/a&gt; : ThinkCAP - an advanced MVC (Model, View, Controller) framework that manages the runtime layout and presentation of GUI components, state management, data binding, validation, and data persistence. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.thinwire.com/" target="_blank"&gt;ThinWire&lt;/a&gt; : ThinWire is a development framework that allows you to easily build applications for the web that look and feel like the desktop applications you’re familiar with. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.themidnightcoders.com/weborb/aboutWeborb.htm" target="_blank"&gt;WebORB for Java&lt;/a&gt; : WebORB is a server technology enabling development, deployment and runtime execution of Rich Internet Applications. &lt;/li&gt;&lt;li&gt;&lt;a href="https://wiser.dev.java.net/" target="_blank"&gt;WidgetServer&lt;/a&gt; : A Unified (AJAX, RemoteSwing, XMLGui) Generic GUI Toolkit &lt;/li&gt;&lt;li&gt;&lt;a href="http://xulfaces.sourceforge.net/" target="_blank"&gt;xulfaces&lt;/a&gt; : xulfaces adds XUL power to Java via Java Server Faces &lt;/li&gt;&lt;li&gt;&lt;a href="http://xwireframework.sourceforge.net/" target="_blank"&gt;xWire Framework&lt;/a&gt; : The open source xWire framework is both a framework and a programmer’s toolkit and is based upon several popular open source libraries. It is generally used to build Java-based web applications. &lt;/li&gt;&lt;li&gt;&lt;a href="http://zk1.sourceforge.net/" target="_blank"&gt;ZK&lt;/a&gt; : ZK is an open-source Ajax Web framework that enables rich UI for Web applications with no JavaScript and little programming. &lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;Javascript Multipurpose Frameworks&lt;/span&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://www.activewidgets.com/" target="_blank"&gt;ActiveWidgets&lt;/a&gt; : ActiveWidgets is a powerful javascript component library which makes web development easier and more productive. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.vertexlogic.com/" target="_blank"&gt;ajaxProject&lt;/a&gt; : ajaxProject is a rich client Project Management application delivered through browser. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.backbase.com/" target="_blank"&gt;Backbase&lt;/a&gt; : Backbase develops and sells software that helps you to create great AJAX applications. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bindows.net/" target="_blank"&gt;Bindows&lt;/a&gt; : Bindows Framework provides you with: A class based, Object Oriented API, A complete windowing system with a wide array of supported widgets including menus, forms, grids, sliders, gauges and more. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.imnmotion.com/projects/engine/" target="_blank"&gt;Engine for Web Applications&lt;/a&gt; : Engine for Web Applications is an application framework for client-side development and Web applications. It provides an environment in which to develop and run JavaScript components and applications. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.csscripting.com/freja" target="_blank"&gt;Freja&lt;/a&gt; : Framework for REstful Javascript Applications - Open-Source MVC Javascript Framework licensed under the CC-GNU LGPL. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jackbe.com/" target="_blank"&gt;JackBe NQ Suite&lt;/a&gt; : JackBe’s NQ Suite is complete set of development tools that allows rapid development of sophisticated, rich-client applications using AJAX. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.javeline.net/" target="_blank"&gt;Javeline FrameWork&lt;/a&gt; : With Javeline FrameWork developers can deliver applications to modern browsers on all platforms. Javeline FrameWork focusses on short development cycles and extensive functionality for the end user. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.linb.net/linb" target="_blank"&gt;jsLINB&lt;/a&gt; : JavaScript-based toolkit that provide complete client-side GUI solution for most modern browser. &lt;/li&gt;&lt;li&gt;&lt;a href="http://sharengo.org/Wiki?JsRIA" target="_blank"&gt;JsRIA&lt;/a&gt; : JsRIA is a framework enabling rich client interface development. It’s pure javascript and is completely independant of the server side technology. &lt;/li&gt;&lt;li&gt;&lt;a href="http://macao.sourceforge.net/" target="_blank"&gt;Macao&lt;/a&gt; : Macao is a framework based on JavaScript and DHTML for building animated interactive homepages and applications. &lt;/li&gt;&lt;li&gt;&lt;a href="http://mochikit.com/" target="_blank"&gt;MochiKit&lt;/a&gt; : MochiKit - makes JavaScript suck a bit less &lt;/li&gt;&lt;li&gt;&lt;a href="http://openrico.org/demos.page" target="_blank"&gt;Open Rico&lt;/a&gt; Rico provides a very simple interface for registering Ajax request handlers as well as HTML elements or JavaScript objects as Ajax response objects. Multiple elements and/or objects may be updated as the result of one Ajax request. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.plextk.org/" target="_blank"&gt;Plex Toolkit&lt;/a&gt; : The Plex Toolkit is an advanced, modular, AJAX and Rich Internet Applications framework written in JavaScript. &lt;/li&gt;&lt;li&gt;&lt;a href="http://prototype.conio.net/" target="_blank"&gt;Prototype&lt;/a&gt; : Prototype is a JavaScript framework that aims to ease development of dynamic web applications. &lt;/li&gt;&lt;li&gt;&lt;a href="http://qooxdoo.org/" target="_blank"&gt;qooxdoo&lt;/a&gt; : qooxdoo is an advanced open-source JavaScript-based GUI framework. &lt;/li&gt;&lt;li&gt;&lt;a href="http://script.aculo.us/" target="_blank"&gt;Scriptaculous&lt;/a&gt; : script.aculo.us provides you with easy-to-use, compatible and, ultimately, totally cool JavaScript libraries to make your web sites and web applications fly, Web 2.0 style. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.smartclient.com/" target="_blank"&gt;SmartClient&lt;/a&gt; : The SmartClient web presentation layer radically enhances the usability and performance of standards-based web applications. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sf.net/projects/thyapi/" target="_blank"&gt;ThyAPI&lt;/a&gt; : ThyAPI is an api to allow the developement of better user interfaces for web applicaticions, Using javascript and Ajax, it allows a complete visual interface definition using CSS and encapsulates all objects data manipulateion. Build over DynApi. &lt;/li&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/projects/iwf/" target="_blank"&gt;Interactive Website Framework&lt;/a&gt; : A framework for creating highly interactive websites using javascript, css, xml, and html. Includes a custom xml parser for highly readable javascript. Essentially, all the plumbing for making AJAX-based websites, with js-based GUI toolkit. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.technicalpursuit.com/" target="_blank"&gt;TIBET&lt;/a&gt; : Enterprise-Class AJAX — for an Open Source world. &lt;/li&gt;&lt;li&gt;&lt;a href="http://ui4w.sf.net/" target="_blank"&gt;UI4W&lt;/a&gt; : UI4Web (just UI4W from now) is a Java Script User Interface library, providing widgets common in desktop UIs (such as tables, trees and tabs) to the web developer toolbox in a consistent way. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.zimbra.com/" target="_blank"&gt;Zimbra&lt;/a&gt; : Zimbra is an open source server and client technology for next-generation enterprise messaging and collaboration. &lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;Javascript Remoting Frameworks&lt;/span&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://www.ajaxgear.com/" target="_blank"&gt;AjaxGear&lt;/a&gt; : AjaxGear is a toolkit that allows you to take advantage of the client-side technique known as AJAX. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.lishen.name/" target="_blank"&gt;Ajax Client Engine&lt;/a&gt; : AJAX Client Engine (ACE) is a JavaScript component that makes it easy to develop AJAX-style Web applications. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ajaxtoolbox.com/" target="_blank"&gt;Ajax Toolbox&lt;/a&gt; : AjaxToolbox.com offers the AjaxRequest Library. It simplifies and extends the capabilities of the XMLHttpRequest object. &lt;/li&gt;&lt;li&gt;&lt;a href="http://ajform.sourceforge.net/" target="_blank"&gt;AJFORM&lt;/a&gt; : AJFORM is a JavaScript toolkit which simply submits data from any given form in an HTML page, then sends the data to any specified JavaScript function. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.twinhelix.com/javascript/htmlhttprequest/" target="_blank"&gt;HtmlHttpRequest&lt;/a&gt; : This script dynamically loads remote documents for parsing and/or insertion into the current document. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.javeline.org/modules/products/teleport.php" target="_blank"&gt;TelePort&lt;/a&gt; : Javeline TelePort is an Open Source server communication layer supporting all popular web services such as XML-RPC, SOAP, JSON, REST and Comet. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.coldfusion-ajax.com/" target="_blank"&gt;JSMX&lt;/a&gt; : JSMX is an Ultra Lightweight - Language Agnostic - Ajax Framework. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.whitefrost.com/reference/2005/09/09/libXmlRequest.html" target="_blank"&gt;libXmlRequest&lt;/a&gt; : The XmlRequest library contains a two public request functions, getXml and postXml, that may be used to send synchronous and asynchronous XML Http requests from Internet Explorer and Mozilla. &lt;/li&gt;&lt;li&gt;&lt;a href="http://unips.sourceforge.net/devblog/?p=3" target="_blank"&gt;MAJAX&lt;/a&gt; : Minimalistic AJAX Client &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ashleyit.com/rs/main.htm" target="_blank"&gt;RSLite&lt;/a&gt; : RSLite is an extremely lightweight implementation of remote scripting which uses cookies. It is very widely browser-compatible (Opera!) but limited to single calls and small amounts of data. &lt;/li&gt;&lt;li&gt;&lt;a href="http://xkr.us/code/javascript/XHConn/" target="_blank"&gt;XHConn&lt;/a&gt; : simplify and unify the code necessary to successfully send and receive simple data via XMLHTTP. &lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;Lisp Ajax Frameworks&lt;/span&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://cliki.net/cl-ajax" target="_blank"&gt;CL-Ajax&lt;/a&gt; : CL-AJAX is Richard Newman’s Common Lisp library to allow for remote invocation of functions through Javascript. &lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;Multi-Language Ajax Frameworks&lt;/span&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://arscif.dsi.unimi.it/" target="_blank"&gt;ARSCIF&lt;/a&gt; : Asynchronous Remote–Script Callback Invocation (a.k.a. remote scripting) is a technique by which ECMAScript code in a browser can connect to a server without reloading a page. &lt;/li&gt;&lt;li&gt;&lt;a href="http://cpaint.sourceforge.net/" target="_blank"&gt;CPAINT&lt;/a&gt; : CPAINT (Cross-Platform Asynchronous INterface Toolkit) is a multi-language toolkit that helps web developers design and implement AJAX web applications with ease and flexibility. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.json.org/" target="_blank"&gt;JSON&lt;/a&gt; : JSON (JavaScript Object Notation) is a lightweight data-interchange format. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.json-rpc.org/" target="_blank"&gt;JSON-RPC&lt;/a&gt; : JSON-RPC is lightweight remote procedure call protocol similar to XML-RPC. &lt;/li&gt;&lt;li&gt;&lt;a href="http://rialto.application-servers.com/" target="_blank"&gt;Rialto&lt;/a&gt; : Rialto (Rich Internet Application Toolkit) is ajax-based cross browser javascript widgets library. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.modernmethod.com/sajax/" target="_blank"&gt;SAJAX&lt;/a&gt; : open source tool to make programming websites using the Ajax framework &lt;/li&gt;&lt;li&gt;&lt;a href="http://zk1.sourceforge.net/" target="_blank"&gt;ZK&lt;/a&gt; : open-source Ajax Web framework that enables rich UI for Web applications with no JavaScript and little programming. &lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;Multi-Platform Ajax Frameworks&lt;/span&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://taconite.sourceforge.net/" target="_blank"&gt;Taconite - Cross Browser AJAX Framwork&lt;/a&gt; : Taconite is a framework that simplifies the creation of Ajax enabled Web applications. It’s a very lightweight framework that automates the tedious tasks related to Ajax development, such as the creation and management of the XMLHttpRequest object and the creation of dynamic content. &lt;/li&gt;&lt;li&gt;&lt;a href="http://haxe.org/" target="_blank"&gt;The haXe Programming Language&lt;/a&gt; : The haXe programming language is uniting server and client platforms under one language. It brings features that are making it easy to deal with a dynamic world such as DHTML or Databases, while still bringing you a full-featured type system with a compiler that will detect errors early in the development phase. &lt;/li&gt;&lt;li&gt;&lt;a href="http://wick.sourceforge.net/" target="_blank"&gt;Web Input Completion Kit&lt;/a&gt; : WICK is an evolving framework that leverages web standards such as JavaScript, DOM and CSS to facilitate textual input in form UI elements assisted by local and remote data sources. This framework strives to remain unobtrusive and preserve a form’s semantics and accessibility. &lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;Perl Ajax Frameworks&lt;/span&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://pjax.sourceforge.net/" target="_blank"&gt;CGI::Ajax&lt;/a&gt; : perl + Ajax &lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/dist/HTML-Prototype/" target="_blank"&gt;HTML::Prototype&lt;/a&gt; : Code generating modules for Prototype &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.perl.com/pub/a/2005/06/02/catalyst.html" target="_blank"&gt;Catalyst&lt;/a&gt; :  Catalyst is a new MVC framework for Perl. &lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;PHP Ajax Frameworks&lt;/span&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://ajason.sourceforge.net/" target="_blank"&gt;AJASON&lt;/a&gt; : AJASON is a PHP 5 library and JavaScript client &lt;/li&gt;&lt;li&gt;&lt;a href="http://ajax.zervaas.com.au/" target="_blank"&gt;AjaxAC&lt;/a&gt; : AjaxAC is an open-source framework written in PHP &lt;/li&gt;&lt;li&gt;&lt;a href="http://ajaxagent.org/" target="_blank"&gt;Ajax Agent&lt;/a&gt; : powerful open source framework for rapidly building Ajax or Rich Internet Applications (RIA) &lt;/li&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/projects/cajax" target="_blank"&gt;Cajax&lt;/a&gt; : A PHP class library for writing powerfull reloadless web user interfaces using Ajax (DHTML+server-side) style &lt;/li&gt;&lt;li&gt;&lt;a href="http://cakephp.org/" target="_blank"&gt;CakePHP&lt;/a&gt; : Cake is a rapid development framework for PHP which uses commonly known design patterns like ActiveRecord, Association Data Mapping, Front Controller and MVC. &lt;/li&gt;&lt;li&gt;&lt;a href="http://clawphp.org/" target="_blank"&gt;Claw&lt;/a&gt; : a convenient and intuitive way of development of PHP5 driven object oriented applications. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dutchpipe.org/" target="_blank"&gt;DutchPIPE&lt;/a&gt; : PHP object-oriented framework to turn sites into real-time, multi-user virtual environments: &lt;/li&gt;&lt;li&gt;&lt;a href="http://tripdown.de/flxajax/" target="_blank"&gt;Flexible Ajax&lt;/a&gt; : Flexible Ajax is a handler to combine the remote scripting technology, also known as AJAX (Asynchronous Javascript and XML), with a php-based backend. &lt;/li&gt;&lt;li&gt;&lt;a href="http://guava.sf.net/" target="_blank"&gt;Guava&lt;/a&gt; : Groundwork Guava is a PHP-based application framework and environment. &lt;/li&gt;&lt;li&gt;&lt;a href="http://htmlajax.org/" target="_blank"&gt;HTML_AJAX&lt;/a&gt; : HTML_AJAX is a PEAR package for performing AJAX operations from PHP. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.htsdesign.com/index.php?&amp;amp;section=htswaf&amp;page=index" target="_blank"&gt;HTSWaf&lt;/a&gt; : The HTS Web Application Framework is a PHP and Javascript based framework designed to make simple web applications easy to design and implement. &lt;/li&gt;&lt;li&gt;&lt;a href="http://litfuel.net/mybic/" target="_blank"&gt;My-BIC&lt;/a&gt; : My-BIC AJAX State of Mind for PHP harmony &lt;/li&gt;&lt;li&gt;&lt;a href="http://pajaj.sourceforge.net/" target="_blank"&gt;PAJAJ&lt;/a&gt; : PHP Asynchronous Javascript and JSON &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.auberger.com/pajax/" target="_blank"&gt;PAJAX&lt;/a&gt; : Remote (a)synchronous PHP objects in JavaScript &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.4al.pl/phpAjaxTags/" target="_blank"&gt;phpAjaxTags&lt;/a&gt; : phpAjaxTags is a port to PHP from java tag library AjaxTags. &lt;/li&gt;&lt;li&gt;&lt;a href="http://phpwebbuilder.sourceforge.net/" target="_blank"&gt;PHPWebBuilder&lt;/a&gt; : PHPWebBuilder is a PHP framework designed following well-known object oriented designs and principles featuring a highly reusable components architecture, metadata based persistence and traditional GUI style programming support. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.qcodo.com/" target="_blank"&gt;Qcodo&lt;/a&gt; : open-source PHP 5 framework &lt;/li&gt;&lt;li&gt;&lt;a href="http://simpletutorials.com/tutorials/javascript/jsmx/index.html" target="_blank"&gt;Simple AJAX&lt;/a&gt; : This tutorial demonstrates how to perform AJAX functionality simply and effectively, using the AJAX JSMX library, coupled with the JSON-PHP library. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.symfony-project.com/" target="_blank"&gt;symfony&lt;/a&gt; : open-source PHP5 web framework &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.metz.se/tinyajax/" target="_blank"&gt;TinyAjax&lt;/a&gt; : TinyAjax is a small php5 library that allows you to easily add AJAX-functionality to existing pages &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xajaxproject.org/" target="_blank"&gt;xajax&lt;/a&gt; : Ajax-enable your PHP application with a simple toolkit that gets the job done fast. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xoad.org/" target="_blank"&gt;XOAD&lt;/a&gt; : PHP based AJAX/XAP object oriented framework that allows you to create richer web applications &lt;/li&gt;&lt;li&gt;&lt;a href="http://zoopframework.com/" target="_blank"&gt;Zoop &lt;/a&gt; : oop is an object oriented framework for PHP based on a front controller. It is designed to be very fast and efficient and very nice for the programmer to work with. &lt;/li&gt;&lt;li&gt;&lt;a href="http://zephyr-php.sourceforge.net/" target="_blank"&gt;Zephyr&lt;/a&gt; : zephyr is an ajax based framework for php5 developers. &lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;Python Ajax Frameworks&lt;/span&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://www.cherrypy.org/" target="_blank"&gt;CherryPy&lt;/a&gt; :   CherryPy is a pythonic, object-oriented web development framework. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.djangoproject.com/" target="_blank"&gt;Django&lt;/a&gt; : Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. &lt;/li&gt;&lt;li&gt;&lt;a href="http://divmod.org/trac/wiki/DivmodNevow" target="_blank"&gt;Nevow&lt;/a&gt; : Nevow is a web application construction kit written in Python. &lt;/li&gt;&lt;li&gt;&lt;a href="http://turbogears.org/"&gt;TurboGears&lt;/a&gt; : Python-Based Framework for Rapid Web Development &lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;Ruby Ajax Frameworks&lt;/span&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://www.rubyonrails.org/" target="_blank"&gt;Ruby On Rails&lt;/a&gt; : Rails is a full-stack framework for developing database-backed web applications according to the Model-View-Control pattern. &lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;Smalltalk Frameworks&lt;/span&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://seaside.st/" target="_blank"&gt;Seaside&lt;/a&gt; :  Seaside is a framework for developing sophisticated web applications in Smalltalk. &lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;Toolkit Ajax Frameworks&lt;/span&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://www.alphaworks.ibm.com/tech/ajaxtk?open&amp;amp;S_TACT=105AGX59&amp;S_CMP=GR&amp;amp;ca=dgr-jw26awajaxtk" target="_blank"&gt;AJAX Toolkit Framework&lt;/a&gt; : A technology that assists in constructing Eclipse framework support for AJAX Toolkits and provides enhanced DHTML/Javascript IDE features for AJAX developers. &lt;/li&gt;&lt;/ol&gt;   &lt;span class="strong"&gt;API/Documentation/Tutorials on popular frameworks&lt;/span&gt; &lt;p&gt; &lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.bindows.net/documentation/api/" target="_blank"&gt;Bindows API&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bindows.net/documentation/tutorials/" target="_blank"&gt;Bindows Tutorials&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://getahead.ltd.uk/dwr/documentation" target="_blank"&gt;Direct Web Remoting (DWR)&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://dojotoolkit.org/docs/" target="_blank"&gt;DOJO Toolkit&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.domapi.com/index.cfm?action=documentation" target="_blank"&gt;DomAPI&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/" target="_blank"&gt;Google Web Toolkit (GWT)&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://jquery.com/docs/" target="_blank"&gt;jQuery&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.orbeon.com/ops/doc/" target="_blank"&gt;Orbeon&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.script.aculo.us/scriptaculous/show/HomePage" target="_blank"&gt;Script.aculo.us&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://atlas.asp.net/docs/Default.aspx" target="_blank"&gt;Microsoft ASP.NET Atlas&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://moofx.mad4milk.net/documentation/" target="_blank"&gt;mootoolkit documentation (moo.fx)&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sergiopereira.com/articles/prototype.js.html" target="_blank"&gt;prototype.js (1.4.0)Developer Notes&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://qooxdoo.oss.schlund.de/documentation" target="_blank"&gt;Qooxdoo&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://rialto.application-servers.com/wiki/javascript:doc" target="_blank"&gt;Rialto Javascript&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://openrico.org/rico/docs.page" target="_blank"&gt;Rico&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://api.rubyonrails.org/" target="_blank"&gt;Ruby on Rails&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.slash7.com/cheats/scriptaculous_fx1.pdf" target="_blank"&gt;Scriptaculous CheatSheet&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.symfony-project.com/content/documentation.html" target="_blank"&gt;Symfony&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://tacos.sourceforge.net/userguide/index.html" target="_blank"&gt;Tacos Userguide&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://tacos.sourceforge.net/components/index.html" target="_blank"&gt;Tacos Component Reference&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.xajaxproject.org/Main_Page" target="_blank"&gt;xajax documentation&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.wicket-wiki.org.uk/wiki/index.php/Main_Page" target="_blank"&gt;Wicket&lt;/a&gt; &lt;/li&gt;&lt;/ol&gt;   &lt;span class="strong"&gt;Tutorials for the various Ajax Frameworks/Toolkits&lt;/span&gt; &lt;p&gt; &lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.ajaxprojects.com/ajax/tutorialdetails.php?itemid=14" target="_blank"&gt;Ajax Design Patterns - Using The Dojo Toolkit&lt;/a&gt; : at AjaxProjects &lt;/li&gt;&lt;li&gt;&lt;a href="http://today.java.net/pub/a/today/2006/04/27/building-ajax-with-dojo-and-json.html" target="_blank"&gt;Using Dojo and JSON to Build Ajax Applications&lt;/a&gt; : at Java.net &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.avinashv.net/tutorials/moofx/" target="_blank"&gt;The Idiots Guide to moo.fx&lt;/a&gt; : by Avinash Vora &lt;/li&gt;&lt;li&gt;&lt;a href="http://litfuel.net/mybic/index.html?page=tutorials" target="_blank"&gt;My-BIC - Tutorials and How To’s&lt;/a&gt; : at LitFuel &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.petefreitag.com/item/515.cfm" target="_blank"&gt;Ajax Tutorial with Prototype&lt;/a&gt; : at PeteFreitag &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sergiopereira.com/articles/prototype.js.html" target="_blank"&gt;Developer Notes for prototype.js&lt;/a&gt; : by SergioPereira &lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.pathf.com/agileajax/2006/04/new_echo2_tutor.html" target="_blank"&gt;New Echo2 Tutorial Series&lt;/a&gt; : at Pathfinder &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sitepoint.com/article/painless-javascript-prototype" target="_blank"&gt;Painless JavaScript Using Prototype&lt;/a&gt; : at SitePoint &lt;/li&gt;&lt;li&gt;&lt;a href="http://www-128.ibm.com/developerworks/edu/os-dw-os-phpajax-i.html?S_TACT=105AGX59&amp;S_CMP=GR&amp;amp;ca=dgr-lnxw07SAJAX" target="_blank"&gt;Using Ajax with PHP and Sajax&lt;/a&gt; : at IBM &lt;/li&gt;&lt;li&gt;&lt;a href="http://24ways.org/advent/introduction-to-scriptaculous-effects" target="_blank"&gt;Introduction to Scriptaculous Effects&lt;/a&gt; : at 24Ways &lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.xajaxproject.org/Tutorials:Learn_xajax_in_10_Minutes" target="_blank"&gt;Learn xajax in 10 Minutes&lt;/a&gt; : at XajaxProject &lt;/li&gt;&lt;/ol&gt;Source : http://www.ajaxgoals.com/ajax-frameworks.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-5897193518719155947?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/5897193518719155947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/08/ajax-frameworks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/5897193518719155947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/5897193518719155947'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/08/ajax-frameworks.html' title='Ajax Frameworks'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_lWLEpwzcLAw/Rrm10XK6O5I/AAAAAAAAAkA/qrt-GtF3mRs/s72-c/ajaxgoals_logo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-1071379611620341233</id><published>2007-08-05T21:51:00.000-07:00</published><updated>2007-08-05T21:52:17.511-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='c#.net'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>.Net Vs Java</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_lWLEpwzcLAw/RrYQGnK6OuI/AAAAAAAAAio/J7cfE3MHMZQ/s1600-h/07aa15b8-5df4-4ee1-8fe7-6aaf89cc2ec7.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_lWLEpwzcLAw/RrYQGnK6OuI/AAAAAAAAAio/J7cfE3MHMZQ/s320/07aa15b8-5df4-4ee1-8fe7-6aaf89cc2ec7.jpg" alt="" id="BLOGGER_PHOTO_ID_5095277734196296418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;One of the funny things about computer technology is the bitter industry rivalries that inevitably crop up.&lt;span style=""&gt;  &lt;/span&gt;There is probably no industry rivalry more bitter or hate-filled than that of .NET and Java.&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;While it is difficult to quantify definitively which platform is more flexible, easier to use, or easier to learn – we can certainly compare speed.&lt;span style=""&gt;  &lt;/span&gt;So, havn’t you always wondered – who’s faster: .NET or Java?&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Last week, Microsoft released .NET 2.0, the long-awaited major-upgrade to .NET 1.1 – coinciding with the releases of Visual Studio 2005 and SQL Server 2005.&lt;span style=""&gt;  &lt;/span&gt;Armed with this new software, we set out to determine which is faster - .NET 2.0 or Java 1.5.&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;b style=""&gt;Test 1 – Selection Sort&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;b style=""&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Our first test will utilize the age-old textbook problem of computer sorting algorithms.&lt;span style=""&gt;  &lt;/span&gt;To thoroughly stress-test the two technology platforms, we chose a highly inefficient sorting algorithm – selection sort.&lt;span style=""&gt;  &lt;/span&gt;Selection sort is a method of sorting a list of items, typically numeric in nature, from say highest to lowest.&lt;span style=""&gt;  &lt;/span&gt;Because Java and C# are quite similar we were able to use the same selection sort code with extremely minor modification in Java and C#.&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Selection sort is considered to be an inefficient sorting algorithm because its complexity in computer science terms is order &lt;i style=""&gt;n&lt;/i&gt;&lt;sup&gt;2&lt;/sup&gt;.&lt;span style=""&gt;  &lt;/span&gt;This means that if you want to sort a list of 1,000 numbers it will take as many as 1,000,000 steps.&lt;span style=""&gt;  &lt;/span&gt;We chose selection sort because of its easy portability between C# and Java and – precisely because of its inefficiency and corresponding heavy use of memory – it will help to highlight any performance differences the two platforms.&lt;span style=""&gt;  &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;The following system was used as a testbed:&lt;/p&gt;&lt;p&gt;&lt;table class="MsoTableGrid" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr style=""&gt;&lt;td style="border: 1pt solid windowtext; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;b style=""&gt;Component&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext rgb(235, 233, 237); border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;b style=""&gt;Specifications&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=""&gt;&lt;td style="border-style: none solid solid; border-color: rgb(235, 233, 237) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Processor&lt;/p&gt;&lt;/td&gt;&lt;td style="border-style: none solid solid none; border-color: rgb(235, 233, 237) windowtext windowtext rgb(235, 233, 237); border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Pentium D 3.0 Ghz, 2 MB Cache&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=""&gt;&lt;td style="border-style: none solid solid; border-color: rgb(235, 233, 237) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;RAM&lt;/p&gt;&lt;/td&gt;&lt;td style="border-style: none solid solid none; border-color: rgb(235, 233, 237) windowtext windowtext rgb(235, 233, 237); border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;2 GB DDR2&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=""&gt;&lt;td style="border-style: none solid solid; border-color: rgb(235, 233, 237) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Operating System&lt;/p&gt;&lt;/td&gt;&lt;td style="border-style: none solid solid none; border-color: rgb(235, 233, 237) windowtext windowtext rgb(235, 233, 237); border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Windows XP Professional SP2 (Latest Patches, x32)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=""&gt;&lt;td style="border-style: none solid solid; border-color: rgb(235, 233, 237) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;.NET Version&lt;/p&gt;&lt;/td&gt;&lt;td style="border-style: none solid solid none; border-color: rgb(235, 233, 237) windowtext windowtext rgb(235, 233, 237); border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;2.0.50727&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=""&gt;&lt;td style="border-style: none solid solid; border-color: rgb(235, 233, 237) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Java Version&lt;/p&gt;&lt;/td&gt;&lt;td style="border-style: none solid solid none; border-color: rgb(235, 233, 237) windowtext windowtext rgb(235, 233, 237); border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;1.5.0 (J2SE)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=""&gt;&lt;td style="border-style: none solid solid; border-color: rgb(235, 233, 237) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Hard Disk (Not Important)&lt;/p&gt;&lt;/td&gt;&lt;td style="border-style: none solid solid none; border-color: rgb(235, 233, 237) windowtext windowtext rgb(235, 233, 237); border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;2x 250 GB 7200 RPM&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;So – you must be anxious to see the results.&lt;span style=""&gt;  &lt;/span&gt;Below is shown the running time in milliseconds of an ascending selection sort on a set of 1,000 descending floating point (double) numbers (the same data was used for .NET and Java).&lt;span style=""&gt;  &lt;/span&gt;Since this is running time, obviously less time is better.&lt;br /&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_lWLEpwzcLAw/RrYQ1XK6OvI/AAAAAAAAAiw/n47z5xqi5Ek/s1600-h/7ca3ef22-7b25-40e2-8a79-cec2100fc804.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_lWLEpwzcLAw/RrYQ1XK6OvI/AAAAAAAAAiw/n47z5xqi5Ek/s320/7ca3ef22-7b25-40e2-8a79-cec2100fc804.jpg" alt="" id="BLOGGER_PHOTO_ID_5095278537355180786" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span class="imageTitle"&gt;Selection Sort on 1,000 Float&lt;/span&gt;&lt;span class="imageTitle"&gt;ing Point Elements, Time in MS&lt;/span&gt; &lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Now comes the interesting step – let’s scale the dataset up to 100,000 elements, pushing the complexity up to 10,000,000,000 steps:&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lWLEpwzcLAw/RrYRRHK6OwI/AAAAAAAAAi4/cRYstnya2kE/s1600-h/928043f1-31df-4786-bbfb-b46428708c9d.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_lWLEpwzcLAw/RrYRRHK6OwI/AAAAAAAAAi4/cRYstnya2kE/s320/928043f1-31df-4786-bbfb-b46428708c9d.jpg" alt="" id="BLOGGER_PHOTO_ID_5095279014096550658" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span class="imageTitle"&gt;Selection Sort on 100,000 Fl&lt;/span&gt;&lt;span class="imageTitle"&gt;oating Point Elements, Time in MS&lt;/span&gt; &lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;It looks like Test 1 has a clear winner - .NET 2.0.&lt;span style=""&gt;  &lt;/span&gt;Interestingly, the same general proportions between completion times for the two platforms remains similar – hence the same proportions portrayed in the graphs, despite the drastic increase in input size.&lt;span style=""&gt;  &lt;/span&gt;In the larger test, Java required 36,828 ms to complete the job, while .NET took 21,375 ms; .NET required only 58% of the time required by Java to complete the same task.&lt;span style=""&gt;  &lt;/span&gt;That’s nearly 2-to-1.&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;b style=""&gt;Test 2 – Memory Efficiency&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;One feature of managed code is dynamic, and automatic, memory management.&lt;span style=""&gt;  &lt;/span&gt;While easing the complexities of the development process by abstracting out memory management significantly, memory managers add overhead.&lt;span style=""&gt;  &lt;/span&gt;Both .NET and Java use more memory to store the same data in RAM than the venerable C/C++.&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;In this test, we will pit the memory managers of Java against .NET in comparative memory allocation tasks under Windows XP.&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;The first comparison compares the memory required to allocate 100,000 floating point elements (double).&lt;span style=""&gt;  &lt;/span&gt;Please note that this first test is meant more as a baseline to establish how much base memory overhead there is than as a direct comparison:&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_lWLEpwzcLAw/RrYR5nK6OyI/AAAAAAAAAjI/7SdywKuLPfU/s1600-h/1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_lWLEpwzcLAw/RrYR5nK6OyI/AAAAAAAAAjI/7SdywKuLPfU/s320/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5095279709881252642" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span class="imageTitle"&gt;Baseline Memory Comparison&lt;/span&gt; &lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Memory was measured by computing the total amount of memory used by the process.&lt;span style=""&gt;  &lt;/span&gt;Here, things are fairly close.&lt;span style=""&gt;  &lt;/span&gt;The double type in Java 1.5 is a 64-bit IEEE 754 value, while in .NET the double data type is also a 64-bit IEEE-compliant value.&lt;span style=""&gt;  &lt;/span&gt;The memory was allocated in an array structure.  This array was initialized with values to ensure that real rather than "virtual" memory was allocated.&lt;span style=""&gt;  &lt;/span&gt;Now that we have established an overhead baseline, let’s up the number of elements to 5 million:&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_lWLEpwzcLAw/RrYSsnK6OzI/AAAAAAAAAjQ/4XNMYtdZd6s/s1600-h/2.jpg"&gt;&lt;span id="lblBody"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_lWLEpwzcLAw/RrYSsnK6OzI/AAAAAAAAAjQ/4XNMYtdZd6s/s320/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5095280586054581042" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; font-weight: bold;"&gt;&lt;span class="imageTitle"&gt;Memory Comparison 2&lt;/span&gt; &lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Again, we have a clear winner – Java 1.5.&lt;span style=""&gt;  &lt;/span&gt;Note that all of our graphs start at zero to give as fair a comparison as possible.&lt;span style=""&gt;  &lt;/span&gt;.NET is using more than twice the amount of memory Java uses to store the same amount of data – 19.9 MB versus a whopping 47.8.&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span id="lblBody"&gt; &lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;b style=""&gt;Test 2 – Memory Efficiency, Continued&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;To further experiment with memory efficiency, we expanded the memory test to include an array of classes.&lt;span style=""&gt;  &lt;/span&gt;Classes, as you probably know, are the foundation of object oriented programming, and virtually all modern software uses them in some capacity.&lt;span style=""&gt;  &lt;/span&gt;As .NET and Java are both heavily object-oriented, the efficiency with which the two platforms can allocate objects is very important.&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;In this test we allocate and initialize 500,000 objects of type DataTestObject.&lt;span style=""&gt;  &lt;/span&gt;DataTestObject encapsulates some data about a fictional bank account.&lt;span style=""&gt;  &lt;/span&gt;The class is simple enough that it is easily portable from C# to Java with only slight modification.&lt;span style=""&gt;  &lt;/span&gt;We also make use of two system types – strings and times:&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:teal;"&gt;DataTestObject&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;  &lt;/span&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;double&lt;/span&gt; BankBalance;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;  &lt;/span&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; BankAccountID;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;  &lt;/span&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; CustomerFirstName;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; CustomerLastName;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;  &lt;/span&gt;public&lt;/span&gt; &lt;span style="color:teal;"&gt;DateTime&lt;/span&gt; MostRecentWithdrawal;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:10;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" dir="ltr" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;public&lt;/span&gt; DataTestObject()&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;  {&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;  &lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;  BankBalance = 0.0;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;    &lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;BankAccountID = &lt;span style="color:maroon;"&gt;"DHC116A-111908-5"&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;   &lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt; CustomerFirstName = &lt;span style="color:maroon;"&gt;"Jon"&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;   CustomerLastName = &lt;span style="color:maroon;"&gt;"Doe"&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;  &lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;  MostRecentWithdrawal = &lt;span style="color:teal;"&gt;DateTime&lt;/span&gt;.Now;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;  }&lt;br /&gt;&lt;br /&gt; &lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; UpdateBalance(&lt;span style="color:blue;"&gt;double&lt;/span&gt; d)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;  {&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;&lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;   &lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt; BankBalance += d;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;  &lt;span style="font-size:10;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;This class contains two functions, which perform operations on the object, as well as five fields for storing data.&lt;span style=""&gt;  &lt;/span&gt;An array of 500,000 of these objects is created and initialized.&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;a href="http://www.bentuser.com/image.aspx?ID=954441d8-afd3-4d4a-893a-962cbccfd4a3&amp;Article=323&amp;amp;amp;Page=3"&gt;&lt;img src="http://www.bentuser.com/FileRepository/20956b32-e47d-49a9-bfbb-f53bcc67747f.jpg" alt="Class Memory Usage" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="imageTitle"&gt;Class Memory Usage&lt;/span&gt; &lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Here we see .NET reversing the memory outlook and besting Java by a solid margin.&lt;span style=""&gt;  &lt;/span&gt;This indicates that since .NET treats native types – such as double – as objects, that this incurs additional overhead of some form.  Java, on the other hand, does not treat native types as objects and therefore can save on this overhead.&lt;span style=""&gt;  &lt;/span&gt;However, when it comes to real-world object allocation, it appears that .NET is more efficient.&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span id="lblBody"&gt; &lt;span id="lblBody"&gt;&lt;span id="lblBody"&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;b style=""&gt;Conclusions&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Thus, as we have seen, .NET 2.0 won 2 out of the 3 major tests – clearly besting Java 1.5 in both execution speed and real-world memory efficiency.&lt;span style=""&gt;  &lt;/span&gt;Java did, however, manage to hold its own in the native types memory comparison by a pretty wide margin.&lt;span style=""&gt;  &lt;/span&gt;This indicates that on the whole .NET is a more efficient platform, with perhaps at least one area for improvement – native type memory efficiency.&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;So now that we have seen that .NET is more efficient by what appears to be a constant factor, the question remains – does it matter?&lt;span style=""&gt;  &lt;/span&gt;The fact is that, despite the many advantages offered by managed code platforms like .NET and Java, most applications are still written in C++/COM.&lt;span style=""&gt;  &lt;/span&gt;Consider the following random list of popular applications:&lt;/p&gt;&lt;ul style="margin-top: 0in;" type="disc"&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Microsoft Office&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Internet Explorer&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;iTunes&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Windows Media Player&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;FireFox&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Photoshop&lt;/li&gt;&lt;/ul&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;These applications are almost completely C++ and COM – no managed code.&lt;span style=""&gt;  &lt;/span&gt;So it’s pretty clear that companies and organizations that have invested heavily in an existing code base are not about to throw that code out the window.&lt;span style=""&gt;  &lt;/span&gt;However, .NET and to a limited extent, Java, can interoperate with existing code and many new features and addons to popular existing software, such as those listed above, are being implemented in managed code.&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Clearly, a big part of this industry-wide transition towards managed code will hinge on improvements in execution speed and memory efficiency – specifically in Java and .NET.&lt;span style=""&gt;  &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;It appears that Microsoft .NET has not only caught up to Java in many ways, but it has surpassed it in terms of implementation efficiency.&lt;span style=""&gt;  &lt;/span&gt;This is not surprising since Microsoft continues to prosper while Sun appears to be in a slow decline as businesses move away from expensive, proprietary systems.&lt;span style=""&gt;  &lt;/span&gt;This is not to say that Java should be discarded completely, but we have a clear efficiency champion in .NET.&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Source : &lt;a href="http://www.bentuser.com/article.aspx?ID=323&amp;page=1"&gt;http://www.bentuser.com/article.aspx?ID=323&amp;amp;amp;page=1&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-1071379611620341233?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/1071379611620341233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/08/net-vs-java.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/1071379611620341233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/1071379611620341233'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/08/net-vs-java.html' title='.Net Vs Java'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_lWLEpwzcLAw/RrYQGnK6OuI/AAAAAAAAAio/J7cfE3MHMZQ/s72-c/07aa15b8-5df4-4ee1-8fe7-6aaf89cc2ec7.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-5601385129786706592</id><published>2007-08-04T11:44:00.000-07:00</published><updated>2007-08-04T11:46:52.659-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql server 2000'/><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='difference'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='RDBMS'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Difference Between Oracle and Sql Server 2000</title><content type='html'>&lt;span id="lblDescription" class="v11" style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-weight: bold;"&gt;Platform comparison&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;SQL Server 2000 only works on Windows-based platforms, including Windows 9x, Windows NT, Windows 2000 and Windows CE.&lt;br /&gt;In comparison with SQL Server 2000, Oracle 9i Database supports all known platforms, including Windows-based platforms, AIX-Based Systems, Compaq Tru64 UNIX, HP 9000 Series HP-UX, Linux Intel, Sun Solaris and so on.&lt;br /&gt;&lt;br /&gt;1.Oracle runs on many platforms, SQL on Windows only&lt;br /&gt;2. Oracle includes IFS (Internet File System), Java integration, SQL is more of a pure database&lt;br /&gt;3. Oracle requires client install and setup (Not difficult, but very UNIX-like for Windows users)&lt;br /&gt;4. SQL is #1 in Cost/Performance and overall Performance, although Oracle will refute that&lt;br /&gt;5. Replication is much easier in SQL (I have been at clients where even the Oracle consultant couldn't get it working w/oracle)&lt;br /&gt;6. Failover support in SQL is much, much easier&lt;br /&gt;7. JDBC support is much better in Oracle, although Microsoft is working on it&lt;br /&gt;8. ODBC support in both&lt;br /&gt;9. SQL is ANSI-SQL '92 compliant, making it easier to convert to another ANSI compliant database, theoretically anyway (truth is every database has proprietary extensions). Oracle is generally more proprietary and their main goal is to keep their customers locked-in.&lt;br /&gt;10. SQL natively supports ODBC, OLEDB, XML, XML Query, XML updates. Oracle natively supports proprietary connections, JDBC. Not sure about XML support though.&lt;br /&gt;11. SQL Server is much easier to administrate, with GUI and command- line tools. Most of Oracle is command-line (Back in SQL 6.5 days I had a customer who was so proud that after a day's worth of work he had managed to script his database. I showed him how it was a 3 click operation in SQL ;-)&lt;br /&gt;12. Oracle requires add-ons for transaction monitors, failover, etc. SQL has COM+, uses NT clustering and generally has everything built-in&lt;br /&gt;13. SQL Analysis Services is included (A very powerful OLAP server). For Oracle it is a separate purchase.&lt;br /&gt;14. Oracle will be used especially in large database. But if we use sql server in such a environment, the data processing will become very slower. Oracle database very closely supports Java rather than Sql server.&lt;br /&gt;15. Oracle 7 was RDBMS, i.e it was a relation database and the one's after that i.e. 8 onwards Oracle introduced the concept of OODBMS. Which stands for Object Oriented Database Management Systems. With every major release Oracle has initiated a lot of changes for the better. Like&lt;br /&gt;a. (1) Getting PL/SQL closer to ANSI SQL standards&lt;br /&gt;b. (2) Automatic Management of Undo from 9i onwards&lt;br /&gt;c. (3) Introduction of special Grouping operators for queries&lt;br /&gt;d. (4) ISQL env for easier query processing&lt;br /&gt;e. (5) RAC (I dunno much about it)&lt;br /&gt;f. (6) AS(Application Server, integrated into the database)&lt;br /&gt;16. SQL server GUI is easy to work. SQL serever is easy to maintain. Orcal data procssing is very good compared to SQL server&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-5601385129786706592?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/5601385129786706592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/08/difference-between-oracle-and-sql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/5601385129786706592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/5601385129786706592'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/08/difference-between-oracle-and-sql.html' title='Difference Between Oracle and Sql Server 2000'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-9115326934348723017</id><published>2007-08-04T11:31:00.000-07:00</published><updated>2007-08-05T09:52:32.163-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='c#.net'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2003'/><category scheme='http://www.blogger.com/atom/ns#' term='frame work 1.1'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail agent'/><category scheme='http://www.blogger.com/atom/ns#' term='agent'/><title type='text'>Gmail Agent API v0.5 / Mail Notifier &amp; Address Importer</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lWLEpwzcLAw/RrTHKXK6OsI/AAAAAAAAAiU/OUQVN8oNJhI/s1600-h/gmail-accounts.gif"&gt;&lt;br /&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_lWLEpwzcLAw/RrTHKXK6OsI/AAAAAAAAAiU/OUQVN8oNJhI/s320/gmail-accounts.gif" alt="" id="BLOGGER_PHOTO_ID_5094916059295267522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lWLEpwzcLAw/RrTG5XK6OrI/AAAAAAAAAiM/gg3ihlWWHic/s1600-h/gmail-contacts.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_lWLEpwzcLAw/RrTG5XK6OrI/AAAAAAAAAiM/gg3ihlWWHic/s320/gmail-contacts.gif" alt="" id="BLOGGER_PHOTO_ID_5094915767237491378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lWLEpwzcLAw/RrTGwnK6OqI/AAAAAAAAAiE/QEp2ifOpQmY/s1600-h/gmail-balloon.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_lWLEpwzcLAw/RrTGwnK6OqI/AAAAAAAAAiE/QEp2ifOpQmY/s320/gmail-balloon.gif" alt="" id="BLOGGER_PHOTO_ID_5094915616913636002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span id="intelliTXT"&gt;&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2&gt;&lt;br&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;What is it?&lt;/span&gt;&lt;/h2&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span id="intelliTXT"&gt;There are two distinct components here: an open source Gmail API          written for the .NET framework, and a proof of concept Windows          application built on top of that API&lt;/span&gt;&lt;span id="intelliTXT"&gt; that provides basic remote Gmail          functions.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span id="intelliTXT"&gt;&lt;p&gt;I developed these tools in the hopes of encouraging others to create          interesting Gmail services. Admittedly, this project may not have a very          long shelf life, as &lt;a title="Google's Brin Talks on Gmail Future" href="http://www.eweek.com/print_article/0,1761,a=125289,00.asp"&gt;Sergey has intimated&lt;/a&gt; possible mail forwarding and RSS support, not          to mention Gmail's recent listing of &lt;a title="Gmail Send Feedback Info Page" href="http://gmail.google.com/support/bin/request.py"&gt;upcoming features&lt;/a&gt; &lt;i&gt;(Gmail login required)&lt;/i&gt; that estimates a          slew of features that are listed as “working on it” or “we'll try”. The         &lt;i&gt;address book import&lt;/i&gt; is currently listed as “sometime soon” but          it's actually available now in the Contacts window. As Sergey mentioned,          an enterprise version of Gmail would be well received, and I have no          doubt that there would an API to go along with that (I recently          integrated a &lt;a title="Google Search Appliance page" href="http://www.google.com/appliance/"&gt;Google Search Appliance&lt;/a&gt;, and can attest to its extensibility).          Whether or not Google is interested in pursuing such features for the          public side remains to be seen. Nonetheless, I hope to keep this project          going, and wouldn't mind joining the Gmail team — there are lots of          features I'd like to see implemented in Gmail.&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span id="intelliTXT"&gt;  &lt;h2&gt;&lt;span style="font-size:100%;"&gt;About the Gmail Agent Applet&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;I'm sure most of you are more interested in the applet, so here are          the features:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;Multiple account support              &lt;/li&gt;&lt;li&gt;Balloon notification of new messages with message preview              &lt;/li&gt;&lt;li&gt;Address book view and import (from tab-delimited text files)              &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The system requirements are:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;Windows 2000, or higher              &lt;/li&gt;&lt;li&gt;Microsoft .NET Framework v1.1 &lt;/li&gt;&lt;/ul&gt; &lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span id="intelliTXT"&gt;&lt;p&gt;I haven't tried this with         &lt;a title="Mono Project" href="http://www.mono-project.com/about/index.html"&gt;Mono&lt;/a&gt; — I doubt it works, but if it does, please let me know. If you          are interested in POP access to Gmail, check out         &lt;a title="Pop Goes the Gmail" href="http://jaybe.org/info.htm"&gt;Pop Goes          the Gmail&lt;/a&gt; (also a .NET project).&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span id="intelliTXT"&gt;  &lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span id="intelliTXT"&gt;&lt;p&gt;&lt;b&gt;This is a proof of concept application&lt;/b&gt;, and there          are plenty of idiosyncrasies. It works great for me, but your results          may vary. I welcome anyone who wants to contribute to polishing this          app.&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Connection Overview&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_lWLEpwzcLAw/RrTHfXK6OtI/AAAAAAAAAic/FmI2WigKR-Y/s320/gmail-diagram.gif" alt="" id="BLOGGER_PHOTO_ID_5094916420072520402" border="0" /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lWLEpwzcLAw/RrTHfXK6OtI/AAAAAAAAAic/FmI2WigKR-Y/s1600-h/gmail-diagram.gif"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lWLEpwzcLAw/RrTHfXK6OtI/AAAAAAAAAic/FmI2WigKR-Y/s1600-h/gmail-diagram.gif"&gt;Source : &lt;/a&gt;&lt;a href="http://www.codeproject.com/csharp/gmailagent.asp"&gt;http://www.codeproject.com/csharp/gmailagent.asp&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-9115326934348723017?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/9115326934348723017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/08/gmail-agent-api-v05-mail-notifier.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/9115326934348723017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/9115326934348723017'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/08/gmail-agent-api-v05-mail-notifier.html' title='Gmail Agent API v0.5 / Mail Notifier &amp; Address Importer'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_lWLEpwzcLAw/RrTHKXK6OsI/AAAAAAAAAiU/OUQVN8oNJhI/s72-c/gmail-accounts.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-2051286076963181673</id><published>2007-07-24T01:44:00.000-07:00</published><updated>2007-08-05T09:52:32.165-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='dependency injection'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='framwork'/><title type='text'>Dependency injection</title><content type='html'>&lt;span style="font-family: courier new,monospace;"&gt;Some of the frameworks that support &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Dependency_injection" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;span style="font-family: courier new,monospace;font-size:85%;" &gt;Dependency injection &lt;/span&gt;&lt;/a&gt;, &lt;span style="font-family: courier new,monospace;"&gt;that info has already been forwarded (!), are most likely in use for development.&lt;br /&gt;This time, take some of these frameworks, that are for DotNet..&lt;br /&gt;&lt;br /&gt;Follow:&lt;br /&gt;&lt;a href="http://www.springframework.net/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.springframework.net/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://structuremap.sourceforge.net/Default.htm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://structuremap.sourceforge&lt;wbr&gt;.net/Default.htm&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ninject.org/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt; http://ninject.org/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.picocontainer.org/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.picocontainer.org/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=ObjectBuilder" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.codeplex.com/Wiki&lt;wbr&gt;/View.aspx?ProjectName=ObjectBu&lt;wbr&gt;ilder &lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.puzzleframework.com/forum/forum.aspx?Forum=25" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.puzzleframework.com&lt;wbr&gt;/forum/forum.aspx?Forum=25&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.castleproject.org/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.castleproject.or&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: courier new,monospace;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-2051286076963181673?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/2051286076963181673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/07/dependency-injection.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/2051286076963181673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/2051286076963181673'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/07/dependency-injection.html' title='Dependency injection'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-4813595398235521516</id><published>2007-07-05T22:17:00.000-07:00</published><updated>2007-08-05T09:52:32.167-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF/E'/><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='Sliverlight Overview'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Sliverlight'/><title type='text'>Silverlight Architecture Overview</title><content type='html'>Applies to:&lt;br /&gt;Silverlight Community Technology Preview (CTP) Feb 2007&lt;br /&gt;&lt;br /&gt;Summary: This white paper provides a high-level overview of the Silverlight (formerly known as code name "WPF/E") architecture and how it fits into the Microsoft offering for building next-generation Web applications. Also, this white paper provides an architectural review of the Silverlight technology. (6 printed pages)&lt;br /&gt;Contents&lt;br /&gt;&lt;br /&gt;Introduction&lt;br /&gt;Silverlight as Part of a User-Experience Continuum&lt;br /&gt;Silverlight Architecture&lt;br /&gt;Deployment and Packaging&lt;br /&gt;Scenarios for Using Silverlight&lt;br /&gt;Conclusion&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Introduction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Microsoft Silverlight is a cross-browser, cross-platform plug-in for delivering the next generation of .NET based media experiences and rich interactive applications (RIAs) for the Web. Silverlight offers a flexible and consistent programming model that supports AJAX, Python, Ruby, and .NET languages such as VB and C#, and integrates with existing Web applications. Silverlight media capabilities include fast, cost-effective delivery of high-quality audio and video to all major browsers including Firefox, Safari and Internet Explorer running on the Mac or on Windows. By using Expression Studio and Visual Studio, designers and developers can collaborate more effectively using the skills they have today to create Silverlight web experience.&lt;br /&gt;&lt;/div&gt;Silverlight as Part of a User-Experience Continuum&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Now, more than ever, customers are demanding applications and online experiences that not only meet their individual needs in terms of effectiveness and efficiency, but also address the perception of satisfaction the user has with a company's products or services. In most cases, the level of satisfaction will have a network and an emotional effect, shaping perceptions of the company as a whole, and, as an extension, the perceptions of those with whom the individual comes into touch. Microsoft acknowledges this connection and has a made a renewed commitment to user experience (UX) as a part of the end-to-end experience. UX is more than a pretty UI; it is the aggregation of the interaction point of a user with an application. Our mission is thus to enable a great user experience wherever the customer needs that: on the Web, on devices, in Office, and in Windows.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Two recent examples of Microsoft's own investment in UX are Microsoft Windows Vista and Microsoft Office 2007. By focusing on the end-user experience first, subtle and somewhat radical changes were made to both products in order to address productivity and satisfaction.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;    * Windows Vista introduces easier ways to visualize and organize your files, media, and communications. In every case of the UI, a focus on user-centric task accomplishment and experience was put first. Other examples of focusing on UX include the new task switcher (Alt+Tab) and Wi-Fi signal notification.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;    * Microsoft Office 2007 has introduced the new "Ribbon" concept to replace traditional toolbars. A natural extension, the ribbon reduces time to find any given feature in an Office application to about 10 seconds.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Both of these decisions were heavily influenced by design and designers, working collaboratively with the rest of the development team. To learn more, visit http://www.microsoft.com/design.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lWLEpwzcLAw/Ro3Rq4hHYzI/AAAAAAAAAcU/R9nm_PC_lRM/s1600-h/Bb428859.silverlightarchitecture01%28en-us,MSDN.10%29.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_lWLEpwzcLAw/Ro3Rq4hHYzI/AAAAAAAAAcU/R9nm_PC_lRM/s320/Bb428859.silverlightarchitecture01%28en-us,MSDN.10%29.gif" alt="" id="BLOGGER_PHOTO_ID_5083950089027150642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figure1. Microsoft UX continuum&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;From a platform perspective, Microsoft introduces a consistent offering that uses common skills to address the different application-interaction surfaces, as indicated in Figure 1.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;    * ASP.NET AJAX offers the benefits of standard Microsoft support (around-the-clock support for a period of 10 years) for AJAX-enabled applications built around Web standards. It allows standard Web applications to be more effective by improving the interaction parameters of the application (such as refresh, resource usage, and navigation).&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;    * For Web experiences that need 2-D animation, vector graphics, and high-fidelity audio and video on the Web, Silverlight is being introduced to extend the capability of the browser to render XAML in addition to HTML. By embracing Web architecture for development, including industry-standard AJAX (Asynchronous JavaScript+XML) and inline XML markup (XAML) for presentation, Microsoft is working to break rich elements on Web pages out of the "black box" that exists today. As an added benefit, content authored in Silverlight and ASP.NET AJAX becomes more discoverable while offering the benefits of being cross-platform (Windows and Macintosh) and cross-browser (Internet Explorer, Firefox, Safari).&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;    * ASP.NET AJAX and Silverlight are designed to be complementary technologies. In the broader sense, Silverlight can interact with any AJAX application, both client- and server-side. Examples for such integration include mapping applications, video playback with rich presentation, and more.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;    * For connected applications on Windows, Microsoft provides the .NET Framework 3.0 programming layer (shipped in Windows Vista and available for Windows XP) that includes the Windows Presentation Foundation (WPF). By using WPF, one can create rich, immersive, connected applications and experiences that can take full advantage of the Windows platform, including UI, media, offline communication, and document support. WPF uses a superset of the same XAML that is used by Silverlight.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_lWLEpwzcLAw/Ro3SUohHY0I/AAAAAAAAAcc/kC56YyOR1_E/s1600-h/2Bb428859.silverlightarchitecture02%28en-us,MSDN.10%29.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_lWLEpwzcLAw/Ro3SUohHY0I/AAAAAAAAAcc/kC56YyOR1_E/s320/2Bb428859.silverlightarchitecture02%28en-us,MSDN.10%29.gif" alt="" id="BLOGGER_PHOTO_ID_5083950806286689090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figure 2. Microsoft end-to-end offering for UX&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;As Figure 2 shows, Silverlight is not an isolated island; it is a piece in a consistent end-to-end offering that enables taking application experiences to the next level. This offering includes server-side components, tools (Microsoft Expression and Microsoft Visual Studio), and UX technologies.&lt;br /&gt;&lt;/div&gt;Silverlight Architecture&lt;br /&gt;&lt;br /&gt;Silverlight has few basic properties:&lt;br /&gt;&lt;br /&gt;* It integrates with various browsers on Windows and on the Macintosh.&lt;br /&gt;* It enables rendering of richer user experiences that are defined by XAML.&lt;br /&gt;* It render media (music and video).&lt;br /&gt;* It enables programming that is consistent with the Web programming model.&lt;br /&gt;* It is small.&lt;br /&gt;&lt;br /&gt;Silverlight was designed to address these properties, as Figure 3 shows.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lWLEpwzcLAw/Ro3VnIhHY1I/AAAAAAAAAck/V9Id5F7Cmls/s1600-h/3Bb428859.silverlightarchitecture03%28en-us,MSDN.10%29.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_lWLEpwzcLAw/Ro3VnIhHY1I/AAAAAAAAAck/V9Id5F7Cmls/s320/3Bb428859.silverlightarchitecture03%28en-us,MSDN.10%29.gif" alt="" id="BLOGGER_PHOTO_ID_5083954422649152338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figure 3. Silverlight architecture&lt;br /&gt;&lt;br /&gt;* Lightweight browser plug-in—Silverlight has Windows and Macintosh modules that are designed to enhance Internet Explorer (versions 6.0 and 7.0), Firefox 2.0, and Safari browsers. The December 2006 CTP for Windows is 1.1 MB in size.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;    * Native presentation runtime— Software-based browser enhancement that allows rendering of XAML-based interactive 2-D graphics, text, and media, in addition to the browser native rendering of HTML. XAML can be used inline, in a file, or in a package.&lt;br /&gt;&lt;/div&gt;    * Interactive video and audio—Cross-platform independent media runtime that can render Windows Media content (WMV and WMA) in addition to MP3 (will be available after the December 2006 CTP). Video and audio are handled as a media element in XAML, enabling flexibility in their presentation. Furthermore, the media support leverages the huge infrastructure and ecosystem around Windows Media, enabling cost-effective delivery of top-quality media.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;    * Programming layer—In consistency with the Web architecture, Silverlight XAML is exposed using a DOM model to JavaScript. That way, AJAX programs can utilize the extended markup rendering capability using the same programming paradigms and practices (on the client and on the server). After the December 2006 CTP, we will also enable a managed code programming model using a subset of full CLR that will enhance the programmability side of the browsers to enable more performant and more scalable Web applications.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Deployment and Packaging&lt;br /&gt;&lt;br /&gt;Content for a Web page that contains Silverlight elements can be created by using the following tactics:&lt;br /&gt;&lt;br /&gt;* Inline XAML and JavaScript.&lt;br /&gt;* External XAML files and JavaScript files.&lt;br /&gt;* Compressed content package (available after the December 2006 CTP) that contains XAML, managed code, images, fonts, and media. Streaming media sources can be referenced from the XAML media elements.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lWLEpwzcLAw/Ro3V2IhHY2I/AAAAAAAAAcs/TYvsNxqOWx4/s1600-h/4Bb428859.silverlightarchitecture04%28en-us,MSDN.10%29.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_lWLEpwzcLAw/Ro3V2IhHY2I/AAAAAAAAAcs/TYvsNxqOWx4/s320/4Bb428859.silverlightarchitecture04%28en-us,MSDN.10%29.gif" alt="" id="BLOGGER_PHOTO_ID_5083954680347190114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figure 4. Silverlight packaging (after Feb 2007 CTP)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;We believe that the flexibility of application packaging and the consistency of the application architecture with Web standards and operations will create many opportunities for improving the impact and effectiveness of Web applications, making applications more scalable, fault-tolerant, and dynamic (they can change their markup on the fly), and making content more discoverable.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Web pages that require Silverlight can detect if the Silverlight plug-in is installed, and can direct users to download it and install it (either through a redirect or through an object tag). The Silverlight SDK has documentation on that.&lt;br /&gt;Scenarios for Using Silverlight&lt;br /&gt;&lt;br /&gt;Silverlight is perfect for the following Web application scenarios that encompass many real-world scenarios:&lt;br /&gt;&lt;br /&gt;* Web media— Branded playback with events, video and marketing mix, dynamic videos with ads, audio playback, and so forth&lt;br /&gt;* Rich islands on a page (mini apps)— Casual games and gadgets&lt;br /&gt;* Web visualization elements— Navigation properties, data visualization, and ads&lt;br /&gt;&lt;br /&gt;Silverlight is designed for Web page content that is connected to its host (it will not work offline), that deeply engages the user, and that can render on any browser.&lt;br /&gt;Conclusion&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;This article provided a high-level overview of the Silverlight architecture and how it fits into the Microsoft offering for building next-generation Web applications. Silverlight is part of a larger revolution of the ways applications are designed, built, and delivered. With markup-based UI and flexible programming models, businesses will be able to offer better experiences on the right form factor for their customers.&lt;br /&gt;&lt;br /&gt;Source :http://msdn2.microsoft.com/en-us/library/bb428859.aspx&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/17114597-4813595398235521516?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/4813595398235521516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/07/silverlight-architecture-overview.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/4813595398235521516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/4813595398235521516'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/07/silverlight-architecture-overview.html' title='Silverlight Architecture Overview'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_lWLEpwzcLAw/Ro3Rq4hHYzI/AAAAAAAAAcU/R9nm_PC_lRM/s72-c/Bb428859.silverlightarchitecture01%28en-us,MSDN.10%29.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-7390595363671590146</id><published>2007-07-04T21:14:00.000-07:00</published><updated>2007-08-05T09:52:32.169-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><title type='text'>Silverlight on Linux</title><content type='html'>&lt;p&gt;I found this little GEM on YouTube.com and just had to share this with you. The Silverlight plug-in (with .net support thanks to the Mono project) has added the power to run Silverlight applications on the desktop (not just from a Website), called Desklets.. &lt;/p&gt;&lt;p&gt;Here's an example video of Desklets in action. This is pretty cool all in all... Also a video of the Surface technology demo running in Moonlight in Linux.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/IbMyPG4IKo8"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/IbMyPG4IKo8" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-7390595363671590146?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/7390595363671590146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/07/silverlight-on-linux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/7390595363671590146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/7390595363671590146'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/07/silverlight-on-linux.html' title='Silverlight on Linux'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-3647699445070149146</id><published>2007-07-04T03:25:00.000-07:00</published><updated>2007-08-05T09:52:32.171-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='Clustering'/><category scheme='http://www.blogger.com/atom/ns#' term='NCache'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Distributed Caching'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><title type='text'>Speed up .NET Apps with Distributed Caching</title><content type='html'>&lt;span style="font-size: 8.5pt; font-family: Verdana;"&gt;NCache is a clustered in-memory object cache for mission critical .NET applications. NCache also provides a highly scalable ASP.NET Clustered Session State solution for .NET applications running in server farms. Distributed caching and session state together enable you to not only speed up your .NET application by as much as 10 times but also make it more scalable and available.&lt;/span&gt;                           &lt;div align="center"&gt;                            &lt;table border="0" cellpadding="0" cellspacing="0" height="146" width="618"&gt;                             &lt;tbody&gt;&lt;tr&gt;                              &lt;td valign="top" width="122"&gt;                                                                      &lt;a href="http://www.alachisoft.com/download.html"&gt;     &lt;img src="http://www.alachisoft.com/images/NCnewbox.jpg" alt="Data Caching &amp; Clustered Object Caching " align="top" border="0" height="142" width="108" /&gt;&lt;/a&gt;&lt;/td&gt;                               &lt;td valign="top" width="496"&gt;                                                                                                         &lt;p&gt; &lt;span style="font-size:100%;"&gt;&lt;span class="Heading-3"&gt;&lt;span style="font-size: 5pt;font-family:Arial;" &gt; &lt;span class="style8"&gt;&lt;span style="font-size: 11pt;"&gt;.NET Distributed Caching for Server  Farms&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 5pt;font-family:Verdana;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="style11"&gt;Reduce expensive database trips by caching data close to your application. Distributed caching enables you to do this in a server farm environment. NCache provides&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;   &lt;span style="font-size:100%;"&gt; &lt;span style="font-size:100%;"&gt;                  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;                &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;img src="http://www.alachisoft.com/images/arrow_small.gif" border="0" height="10" width="6" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 8.5pt;font-family:Verdana;font-size:100%;"  &gt;&lt;span class="Body"&gt;&lt;span style="font-size:100%;"&gt;      Dynamic clustering with Replicated and Partitioned cache topologies&lt;/span&gt;&lt;br /&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="Body"&gt;         &lt;span style="font-size: 3pt;font-family:Verdana;color:#ffffff;"  &gt;a&lt;/span&gt;&lt;span style="font-size: 3pt;font-family:Verdana;" &gt;&lt;br /&gt;          &lt;/span&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 5pt;font-family:Verdana;font-size:100%;"  &gt;           &lt;span class="Heading-3"&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;img src="http://www.alachisoft.com/images/arrow_small.gif" border="0" height="10" width="6" /&gt;&lt;/span&gt;&lt;span class="Body"&gt;&lt;span style="font-size: 8.5pt;font-family:Verdana;" &gt;&lt;span style="font-size:100%;"&gt;              Relationship  management with key, file, and database dependencies&lt;/span&gt;&lt;br /&gt;            &lt;/span&gt;                                                                                 &lt;span style="font-size: 3pt;font-family:Verdana;color:#ffffff;"  &gt;a&lt;/span&gt;&lt;span style="font-size: 8.5pt;font-family:Verdana;" &gt;&lt;br /&gt;&lt;/span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 5pt;font-family:Verdana;font-size:100%;"  &gt;&lt;span class="Heading-3"&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;img src="http://www.alachisoft.com/images/arrow_small.gif" border="0" height="10" width="6" /&gt;&lt;/span&gt;&lt;span class="Body"&gt;&lt;span style="font-size: 8.5pt;font-family:Verdana;" &gt;&lt;span style="font-size:100%;"&gt;  High-Performance object query for distributed cache&lt;/span&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="font-size: 5pt;font-family:Verdana;" &gt;&lt;span class="Heading-3"&gt;&lt;span class="style6"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 5pt;font-family:Arial;font-size:100%;"  &gt;&lt;span class="style8"&gt;&lt;span style="font-size: 11pt;"&gt;Clustered ASP.NET Sessions for  Server Farms&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="Heading-3"&gt;&lt;span class="Body"&gt;&lt;span style="font-size: 11pt;font-family:Arial;" &gt;&lt;br /&gt;                                                        &lt;/span&gt;&lt;span style="font-size: 5pt;font-family:Verdana;" &gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt; &lt;/span&gt;&lt;span class="style11"&gt;&lt;span style="font-family:Verdana;"&gt;Eliminate the bottlenecks of sticky sessions in load balancer or storing sessions in SQL Server. Scale up your application with extremely fast in-memory clustered sessions.&lt;/span&gt;&lt;/span&gt;&lt;span class="Body"&gt;&lt;span style="font-size: 5pt;font-family:Verdana;" &gt;&lt;span class="Heading-3"&gt;&lt;span class="style7"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;     &lt;/span&gt;&lt;/span&gt;&lt;img src="http://www.alachisoft.com/images/arrow_small.gif" alt="bullet" border="0" height="10" width="6" /&gt;&lt;span style="font-size: 8.5pt;font-family:Verdana;" &gt; &lt;span style="font-size:100%;"&gt; Many  times faster than storing your sessions in SQL Server&lt;/span&gt;&lt;br /&gt;  &lt;/span&gt; &lt;span style="font-size: 3pt;font-family:Verdana;color:#ffffff;"  &gt;a&lt;/span&gt;&lt;span style="font-size: 3pt;font-family:Verdana;" &gt;&lt;br /&gt;  &lt;/span&gt; &lt;span style="font-size: 5pt;font-family:Verdana;" &gt; &lt;span class="Heading-3"&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;img src="http://www.alachisoft.com/images/arrow_small.gif" alt="bullet" border="0" height="10" width="6" /&gt;&lt;/span&gt;&lt;span style="font-size: 8.5pt;font-family:Verdana;" &gt;&lt;span style="font-size:100%;"&gt;  Highly  available due to dynamic clustering and no single-point-of-failure&lt;/span&gt;&lt;br /&gt;  &lt;/span&gt; &lt;span style="font-size: 3pt;font-family:Verdana;color:#ffffff;"  &gt;a&lt;/span&gt;&lt;span style="font-size: 8.5pt;font-family:Verdana;" &gt;&lt;br /&gt;  &lt;/span&gt; &lt;span style="font-size: 5pt;font-family:Verdana;" &gt;&lt;span class="Heading-3"&gt;     &lt;/span&gt;&lt;/span&gt;&lt;img src="http://www.alachisoft.com/images/arrow_small.gif" alt="bullet" border="0" height="10" width="6" /&gt;&lt;span style="font-size: 8.5pt;font-family:Verdana;" &gt; &lt;span style="font-size:100%;"&gt; Highly  scalable due to replicated and partitioning clustering topologies&lt;/span&gt;&lt;br /&gt;                             &lt;br /&gt;       &lt;/span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:100%;"&gt;&lt;span style="font-size: 8pt; font-weight: 700;"&gt;&lt;span style="color:#003891;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;a href="http://www.alachisoft.com/ncache/session_index.html"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="color:#003891;"&gt;Sessions Details&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;/p&gt;                                                                                                             &lt;/td&gt;                             &lt;/tr&gt;                            &lt;/tbody&gt;&lt;/table&gt;                           &lt;/div&gt;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     &lt;table border="0" cellpadding="0" cellspacing="0" width="641"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="6"&gt;                            &lt;/td&gt;                           &lt;td width="635"&gt;                           &lt;div align="center"&gt;                            &lt;table border="0" cellpadding="0" cellspacing="0" width="635"&gt;                             &lt;tbody&gt;&lt;tr&gt;                                                                                     &lt;td colspan="2" width="635"&gt;&lt;a name="Comparison"&gt;&lt;/a&gt;                                                       &lt;table style="border-collapse: collapse;" border="0" bordercolor="#111111" cellpadding="0" cellspacing="0" width="100%"&gt;                                                           &lt;tbody&gt;&lt;tr&gt;                                                              &lt;td width="100%"&gt;                &lt;table id="tabe1" border="0" cellspacing="0" width="625"&gt;                 &lt;tbody&gt;&lt;tr&gt;                  &lt;td width="129"&gt; &lt;/td&gt;                  &lt;td&gt;                  &lt;p align="center"&gt;                  &lt;b&gt;                  &lt;span style="font-size: 8.5pt;font-family:Verdana;color:#003891;"  &gt;                  [                  &lt;a href="http://www.alachisoft.com/download.html"&gt;                  &lt;span style="color:#003891;"&gt;                  &lt;span style="text-decoration: none;"&gt;                  Download                   Trial&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;                   ]                           [                  &lt;a href="javascript:OnlineDemoClick()"&gt;                  &lt;span style="color:#003891;"&gt;                  &lt;span style="text-decoration: none;"&gt;                  Sessions                  Video&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="color:#003891;"&gt;&lt;a href="javascript:OnlineDemoClick()"&gt;&lt;span style="text-decoration: none;"&gt;                  &lt;/span&gt;                  &lt;/a&gt;&lt;/span&gt;&lt;/span&gt;]                           [                  &lt;a href="http://www.alachisoft.com/ncache/cluster_topology.html"&gt;                  &lt;span style="color:#003891;"&gt;                  &lt;span style="text-decoration: none;"&gt;                  Clustering                   Topologies&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;                   ]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Source :  http://www.alachisoft.com/ncache/index.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-3647699445070149146?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/3647699445070149146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/07/speed-up-net-apps-with-distributed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/3647699445070149146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/3647699445070149146'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/07/speed-up-net-apps-with-distributed.html' title='Speed up .NET Apps with Distributed Caching'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-7594820494950469542</id><published>2007-07-02T23:58:00.000-07:00</published><updated>2007-08-05T09:52:32.175-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Management'/><category scheme='http://www.blogger.com/atom/ns#' term='eScrum'/><title type='text'>Microsoft eScrum Version 1.0</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span&gt;eScrum is a Web-based, end-to-end project management tool for Scrum built on the Microsoft Visual Studio Team Foundation Server platform. It provides multiple ways to interact with your Scrum project: eScrum Web-based UI, Team Explorer, and Excel or Project, via Team Foundation Office Integration. In addition, it provides a single place for all Scrum artifacts such as product backlog, sprint backlog, task management, retrospective, and reports with built-in context sensitive help.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span&gt;&lt;br /&gt;Download : &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=55a4bde6-10a7-4c41-9938-f388c1ed15e9&amp;displaylang=en&amp;amp;tm"&gt;Click&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-7594820494950469542?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/7594820494950469542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/07/microsoft-escrum-version-10.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/7594820494950469542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/7594820494950469542'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/07/microsoft-escrum-version-10.html' title='Microsoft eScrum Version 1.0'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-6225089959601179245</id><published>2007-06-25T22:14:00.000-07:00</published><updated>2007-08-05T09:52:32.178-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moonlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><title type='text'>Silverlight for Linux [Moonlight Project]</title><content type='html'>Miguel de Icaza and his Mono project cohorts have quickly produced an implementation of Silverlight for Linux. The effort is called Moonlight.&lt;br /&gt;&lt;br /&gt;Silverlight is an extended subset of the 2.0 .NET framework that can support rich media on multiple browsers and platforms.&lt;br /&gt;&lt;br /&gt;Various developers worked intensely to create the first version of Moonlight, which de Icaza demonstrated at a European Microsoft MIX event last week.&lt;br /&gt;&lt;br /&gt;de Icaza blog on Moonlight&lt;br /&gt;&lt;a href="http://tirania.org/blog/archive/2007/Jun-21.html" target="_blank"&gt;http://tirania.org/blog/archive/2007/Jun-21.html&lt;/a&gt;&lt;br /&gt;Moonlight Project page&lt;br /&gt;&lt;a href="http://www.mono-project.com/Moonlight" target="_blank"&gt;http://www.mono-project.com/Moonlight&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-6225089959601179245?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/6225089959601179245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/06/silverlight-for-linux-moonlight-project.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/6225089959601179245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/6225089959601179245'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/06/silverlight-for-linux-moonlight-project.html' title='Silverlight for Linux [Moonlight Project]'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-6989474349969883132</id><published>2007-06-25T01:17:00.000-07:00</published><updated>2007-08-05T09:52:32.181-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2003'/><category scheme='http://www.blogger.com/atom/ns#' term='vs.php'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Jcx.Software releases VS.php 2.3 for Windows Vista</title><content type='html'>&lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;color:#000000;"&gt;            &lt;a href="http://www.jcxsoftware.com/" target="_blank" title="External Link"&gt;Jcx.Software&lt;/a&gt; has announced the release of &lt;b&gt;VS.Php 2.3&lt;/b&gt; for Visual Studio 2005, a PHP integrated development environment (IDE) for Microsoft Visual Studio 2005. &lt;/span&gt;&lt;p&gt; &lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;color:#000000;"&gt;&lt;b&gt;VS.Php 2.3&lt;/b&gt; adds support for Windows Vista and Visual Studio Service Pack 1 for Visual Studio 2005. &lt;/span&gt;&lt;/p&gt;&lt;p&gt; &lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;color:#000000;"&gt;Its new features focus on providing developers with the ability to work easily on existing PHP applications hosted on remote sites. &lt;/span&gt;&lt;/p&gt;&lt;p&gt; &lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;color:#000000;"&gt;&lt;b&gt;VS.Php 2.3&lt;/b&gt; has also improved support for deploying local projects in a faster and more efficient manner, including support for deploying files using FTP over SSL. &lt;/span&gt;&lt;/p&gt;&lt;p&gt; &lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;color:#000000;"&gt;Another key feature in &lt;b&gt;VS.Php 2.3&lt;/b&gt; is the ability to import projects from a remote server. The wizard lets the developer download the entire Php application from a remote server and makes it possible to work on the project locally. The developer can then choose to deploy the files back to any remote server. &lt;/span&gt;&lt;/p&gt;&lt;p&gt; &lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;color:#000000;"&gt;Jcx.Software founder J. Rivera explained: "Developers no longer have to worry about editing files over a command shell window or editing files locally and copying their changes via FTP. VS.Php lets you work on remote files as if they were local in context." &lt;/span&gt;&lt;/p&gt;&lt;p&gt; &lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;color:#000000;"&gt;&lt;b&gt;VS.Php 2.3&lt;/b&gt; comes in four different editions: &lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;color:#000000;"&gt;&lt;li&gt;VS.Php 2.3 Standalone Edition &lt;/li&gt;&lt;li&gt;VS.Php 2.3 for Visual Studio 2005 &lt;/li&gt;&lt;li&gt;VS.Php 2.3 for Visual Studio .NET 2003 &lt;/li&gt;&lt;li&gt;VS.Php 2.3 for Visual Studio .NET &lt;/li&gt;&lt;/span&gt;&lt;/ul&gt;  &lt;p&gt; &lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;color:#000000;"&gt;Said Brian Goldfarb, group product manager in the Web/Client UX Platform &amp;amp; Tools Team at Microsoft Corp., "By making optimal use of Visual Studio, &lt;b&gt;VS.Php&lt;/b&gt; provides an all-in-one IDE to PHP developers that allow them to build dynamic web applications faster and ensure quality throughout the development process." &lt;/span&gt;&lt;/p&gt; &lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;color:#000000;"&gt;Follow this link to visit the &lt;a href="http://www.jcxsoftware.com/jcx/vsphp/downloads" target="_blank" title="External Link"&gt;download page&lt;/a&gt;.     &lt;!--Rendering time: 0 --&gt;        &lt;br /&gt;     &lt;span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;color:#000000;"&gt;&lt;b&gt;&lt;a href="http://www.jcxsoftware.com/jcx/news/press/vsphp-2.3" target="_blank"&gt;Read More&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;       &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-6989474349969883132?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/6989474349969883132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/06/jcxsoftware-releases-vsphp-23-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/6989474349969883132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/6989474349969883132'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/06/jcxsoftware-releases-vsphp-23-for.html' title='Jcx.Software releases VS.php 2.3 for Windows Vista'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-8059732805978483650</id><published>2007-06-21T04:48:00.000-07:00</published><updated>2007-08-05T09:52:32.184-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='Grid Computing'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='framwork'/><title type='text'>Grid Computing Framework For .Net</title><content type='html'>1)  Alchemi        &lt;a href="http://www.alchemi.net/"&gt;http://www.alchemi.net/&lt;/a&gt;&lt;br /&gt;2) Ms.NetGrid  &lt;a href="http://www2.epcc.ed.ac.uk/%7Eogsanet/wp4.html"&gt;http://www2.epcc.ed.ac.uk/~ogsanet/wp4.html&lt;/a&gt;&lt;br /&gt;3) Bayanihan    &lt;a href="http://bayanihancomputing.net/"&gt;http://bayanihancomputing.net/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-8059732805978483650?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/8059732805978483650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/06/grid-computing-framework-for-net.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/8059732805978483650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/8059732805978483650'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/06/grid-computing-framework-for-net.html' title='Grid Computing Framework For .Net'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-7868616544910201682</id><published>2007-06-19T21:51:00.000-07:00</published><updated>2007-08-05T09:52:32.185-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='Entify Framework'/><title type='text'>Introducing the Entity Framework</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lWLEpwzcLAw/RniyhGR8EbI/AAAAAAAAAcM/z8QeVpEPYbw/s1600-h/IntroducingEntityFramework.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_lWLEpwzcLAw/RniyhGR8EbI/AAAAAAAAAcM/z8QeVpEPYbw/s320/IntroducingEntityFramework.gif" alt="" id="BLOGGER_PHOTO_ID_5078004861551514034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Databases tend to be a necessary evil to most developers. They want a way to persist data, but they do not want to deal with any of the minutiae of writing code against them. This is not a new phenomenon. I have seen commercial packages going back into the eighties that purported to make working with the database completely seamless. Whether they are called “persistence layers”, “object-relational tools” or even “data abstraction layers”; many of these tools are aimed at speed to market or rapid application development (RAD) solutions. There is no best solution here. Depending on your project or enterprise, the requirements will often dictate the right tool for the job. &lt;/p&gt; &lt;p&gt;When Microsoft announced they were going to release a new technology called “The Entity Framework”, it was met with interested skepticism by most of the development community. Immediately there were comparisons to popular object-relational tools (NHibernate, LLBLGen Pro, et al). What got lost in the haze of comparisons was that the Entity Framework was a completely different animal. The most important piece of information in this article is that the Entity Framework is not meant to solve the same problem that these other tools are trying to meet.&lt;/p&gt; &lt;p&gt;In this article I will introduce you to this new technology and try to explain the “why” and “where” of the Entity Framework. I am purposely skimping on the “how” because details of the implementation are in a constant state of flux in response to customer and community involvement. &lt;/p&gt; &lt;p&gt;For this article I am using the Entity Framework as it exists in the Orcas Beta 1 version delivered by Microsoft in April of 2007. &lt;/p&gt; &lt;h1&gt;&lt;span style="font-size:85%;"&gt;The Problem…&lt;/span&gt;&lt;/h1&gt; &lt;p&gt;Teams build software, not developers. Different members of a team think of data differently. For example:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Developers think in class diagrams&lt;/li&gt;&lt;li&gt;Analysts think in OR diagrams&lt;/li&gt;&lt;li&gt;DBAs think in ER diagrams&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;There is an impedance mismatch between these different models. Developing a common language for these models is one approach to solve the mismatch, but these groups continue to think in different ways about a project’s data. &lt;/p&gt; &lt;p&gt;The mismatch of data model continues outside out the realm of software development teams. We have a larger set of tools and technologies that each try and develop their own models for consuming data. If we look at how our data is consumed, only some of it comes in the form of software projects. Data is mined, reported on, warehoused and exposed through interoperability points. Each of these points has their own idea of what the data looks like. This means that either the schema is exposed up through the middle tier or application models are pushed down to the middle tier. Developing a common dictionary for data model within an organization is difficult because there is not a common grammar that works across different fiefdoms.&lt;/p&gt;Read Full Article : &lt;a href="http://www.theserverside.net/tt/articles/showarticle.tss?id=IntroducingEntityFramework&amp;uid=2254393&amp;amp;asrc=EM_NLN_1618406&amp;amp;uid=5377571"&gt;Click Here&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-7868616544910201682?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/7868616544910201682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/06/introducing-entity-framework.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/7868616544910201682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/7868616544910201682'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/06/introducing-entity-framework.html' title='Introducing the Entity Framework'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_lWLEpwzcLAw/RniyhGR8EbI/AAAAAAAAAcM/z8QeVpEPYbw/s72-c/IntroducingEntityFramework.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-1640183199434929147</id><published>2007-06-19T21:28:00.000-07:00</published><updated>2007-08-05T09:52:32.187-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Hibernet'/><category scheme='http://www.blogger.com/atom/ns#' term='XQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='NHibernet'/><title type='text'>Hibernate, NHibernate, drivers and data</title><content type='html'>&lt;p&gt;&lt;em&gt;As with any software, individuals find their ‘mileage may vary’ when they implement ORM solutions. Things go wrong, or, more likely, things work, but they don’t work fast enough. While clearly seeking to complement and not supplement software like Hibernate/NHibernate, makers of established data access layer software tools may have a valid perspective on the issue when they say “Don’t forget the drivers!”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;By Jack Vaughan&lt;br /&gt;One area where the Java and .NET communities have seen at least a modicum of development overlap is in object-relational mapping via the Hibernate tool; that being Hibernate on the Java side and NHibernate on the .NET side. There are different schools of thought on the value of Hibernate/NHibernate, but little doubt that the software has proved useful and popular.&lt;/p&gt; &lt;p&gt;As with any software, individuals find their ‘mileage may vary’ when they implement ORM solutions. Things go wrong, or, more likely, things work, but they don’t work fast enough. While clearly seeking to complement and not supplement software like Hibernate/NHibernate, makers of established data access layer software tools may have a valid perspective on the issue when they say “Don’t forget the drivers!”&lt;/p&gt; &lt;p&gt;This message comes through in a recent conversation I had with Jonathon Bruce at Microsoft TechEd I Orlando. Bruce, a former Sun hand, is now program manager at DataDirect Technologies for .NET and XQuery Technologies.&lt;/p&gt; &lt;p&gt;As such, Bruce is involved with multiplatform issues, with data being the common thread. DataDirect has a long history in the forefront with ODBC and JDBC data access methods. [Obviously, for DataDirect and for most developers, data access is much more than just that - but let’s remember how formative ODBC and JDBC were when new!]&lt;/p&gt; &lt;p&gt;We asked Bruce if people have disappointment when implementing Hibernate/NHibernate but then overlook possibly related issues in the systems chain, such as with data drivers.  He said:&lt;/p&gt; &lt;p&gt;“One of the things to remember when using things like Hibernate or NHibernate is that you are putting more effort on your application development time and your runtime to actually abstract yourself away the data base.”&lt;/p&gt; &lt;p&gt;“And in doing so you really expose yourself to the criticality of how you actually communicate with the data base. So the right thing to do from the get-do – and I will acknowledge that [Hibernate/NHibernate] certainly saves you a lot of development time - is making sure you have all your ducks lined in the right row.”&lt;/p&gt; &lt;p&gt;“You have to match up your … drivers or providers … so that you can be sure your application will perform and have the level of reliability that you really need – particularly when you move your application from a small production environment to a critical application environment.”&lt;/p&gt; &lt;p&gt;One can say: ‘Well, driver people would say that wouldn’t they?’ Yup, that is true. But they may know a thing or two, too.&lt;/p&gt; &lt;p&gt;Jonathon Bruce’s blog is a lively journal that regularly touches on these and related topics. Bruce is particularly interested in XQuery, which, when first discussed, seemed like a potent data interoperability solution of sorts. Reading his blog one discovers that – lo and behold - &lt;a href="http://www.w3.org/2007/01/qt-pressrelease" target="_blank"&gt;XQuery finally got through the standards process&lt;/a&gt; this year. It was a hard and too-long journey, really. But maybe it is time to revisit the XQuery firmament too. What do you think? What role do you think data interoperability plays in the overall world of application interoperability?&lt;/p&gt;&lt;br /&gt;Source : &lt;a href="http://tssblog.techtarget.com/index.php/interoperability/hibernate-nhibernate-drivers-and-data/?track=NL-462&amp;ad=593720&amp;amp;asrc=EM_NLN_1618402&amp;amp;uid=5377571"&gt;Click&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-1640183199434929147?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/1640183199434929147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/06/hibernate-nhibernate-drivers-and-data.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/1640183199434929147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/1640183199434929147'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/06/hibernate-nhibernate-drivers-and-data.html' title='Hibernate, NHibernate, drivers and data'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-8270516304997595694</id><published>2007-06-18T23:36:00.001-07:00</published><updated>2007-08-05T09:52:32.189-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><title type='text'>Surface Computer</title><content type='html'>&lt;embed src="http://services.brightcove.com/services/viewer/federated_f8/271552687" bgcolor="#FFFFFF" flashVars="videoId=933742930&amp;playerId=271552687&amp;viewerSecureGatewayURL=https://services.brightcove.com/services/amfgateway&amp;servicesURL=http://services.brightcove.com/services&amp;cdnURL=http://admin.brightcove.com&amp;domain=embed&amp;autoStart=false&amp;" base="http://admin.brightcove.com" name="flashObj" width="300" height="260" seamlesstabbing="false" type="application/x-shockwave-flash" swLiveConnect="true" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"&gt;&lt;/embed&gt;&lt;p&gt;This is Futur of computer&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-8270516304997595694?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/8270516304997595694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/06/surface-computer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/8270516304997595694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/8270516304997595694'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/06/surface-computer.html' title='Surface Computer'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-3118997075517424562</id><published>2007-06-18T21:41:00.000-07:00</published><updated>2007-08-05T09:52:32.191-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='Aspect Oriented Extension for c#.net'/><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><category scheme='http://www.blogger.com/atom/ns#' term='EOS'/><title type='text'>aspect-oriented extension to C#</title><content type='html'>&lt;div style="text-align: justify;"&gt;  Eos is an aspect-oriented extension to C# programming  language for Microsoft® .NET Framework™. Its  programming language model is based on AspectJ-like  languages. It supports modularization of crosscutting  concerns by adding three constructs to C#. A concern  is a dimension in which some design decision is made.  Some examples of concerns are execution trace policy,  use of common thread pool, security policy enforcement, caching etc. A concern is crosscutting if it cannot be  realized in traditional object-oriented designs in a  modular way – that is, if any implementation of the  concern involves scattered and tangled code. Scattered  means not localized in a module but fragmented across  a system.  Tangled means mingled with code for other  concerns. For example, the implementation of execution trace policy is scattered across all methods of the  system and tangled with the concerns implemented by the  methods.  &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt; The language model of Eos adds three new constructs to  C#: pointcuts, bindings, and inter-type declarations.  The pointcut and inter-type declarations are similar to  their counterpart in AspectJ. The pointcut select points  in the execution of a program. These points are called  join points in aspect-oriented terminology. The binding  construct connects the join points to methods. Whenever  the join point is reached in the program execution, the  bound method is executed. The binding construct uses the  pointcut construct to select a set of join points to connect  a method. The inter-type declaration allows a third party type to add additional members and interfaces to a type  without involvement of the type itself.&lt;br /&gt;&lt;br /&gt;Source : &lt;a href="http://www.cs.virginia.edu/%7Eeos/doc/"&gt;http://www.cs.virginia.edu/~eos/doc/&lt;/a&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/17114597-3118997075517424562?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/3118997075517424562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/06/aspect-oriented-extension-to-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/3118997075517424562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/3118997075517424562'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/06/aspect-oriented-extension-to-c.html' title='aspect-oriented extension to C#'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-8822323011552729194</id><published>2007-06-18T21:20:00.000-07:00</published><updated>2007-08-05T09:52:32.194-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='app domain'/><category scheme='http://www.blogger.com/atom/ns#' term='Realtime assembly instrumentation library'/><category scheme='http://www.blogger.com/atom/ns#' term='RAIL'/><category scheme='http://www.blogger.com/atom/ns#' term='MSIL'/><category scheme='http://www.blogger.com/atom/ns#' term='CLR'/><title type='text'>Runtime Assembly Instrumentation Library</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_lWLEpwzcLAw/RndaGmR8EKI/AAAAAAAAAaA/JNodi_TCGJ8/s1600-h/rail_bird.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_lWLEpwzcLAw/RndaGmR8EKI/AAAAAAAAAaA/JNodi_TCGJ8/s320/rail_bird.jpg" alt="" id="BLOGGER_PHOTO_ID_5077626174285025442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This   project plans to implement an API that allows CLR assemblies to be   manipulated and instrumented before they are loaded and executed.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;  In the CLR, the AppDomain class and the ResolveEventHandler event handler   already provide an excellent mechanism for dynamically loading assemblies   into an application domain under the control of the programmer. At the same   time, the reflection capabilities of the CLR are extremely powerful. Not only   it is possible to query the existing types at runtime, but is also possible   to define new assemblies in memory and use Reflection.Emit to generate MSIL   on-the-fly. Our plan is to fill the gap between these two concepts. The idea   is to have an API that allows the programmer to intercept the class   resolution process, examining and manipulating the code that exists in an   assembly, before the code is actually defined on the virtual machine. This   API will be called RAIL: Runtime Assembly Instrumentation Library.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;  By using RAIL it will be possible to specify specific transformations that   must be done at an assembly before it is loaded and executed. These   transformations will be specified using a high-level API, abstracting the   programmer from the low-level details of MSIL and the assembly binary format.   For instance, it will be possible to substitute the references to a class for   references to another class, change the name and usage of constants and   variables, examine and change existing methods, and so on.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Source : &lt;a href="http://rail.dei.uc.pt/index.htm"&gt;http://rail.dei.uc.pt/index.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-8822323011552729194?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/8822323011552729194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/06/runtime-assembly-instrumentation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/8822323011552729194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/8822323011552729194'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/06/runtime-assembly-instrumentation.html' title='Runtime Assembly Instrumentation Library'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_lWLEpwzcLAw/RndaGmR8EKI/AAAAAAAAAaA/JNodi_TCGJ8/s72-c/rail_bird.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-808605276840844158</id><published>2007-06-17T23:52:00.000-07:00</published><updated>2007-08-05T09:52:32.196-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release bug'/><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='code project'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Microsoft .NET Release Bug</title><content type='html'>&lt;span id="intelliTXT"&gt;&lt;h2&gt;&lt;span style="font-size:100%;"&gt;Introduction&lt;/span&gt; &lt;/h2&gt;  &lt;p&gt;This article demonstrates a major flaw in the Microsoft .NET Framework 1.1. To my knowledge, there isn't a patch to fix the problem. &lt;/p&gt;  &lt;h2&gt;&lt;span style="font-size:100%;"&gt;Background&lt;/span&gt; &lt;/h2&gt;  &lt;p&gt;You may ask ... "What is a Release Bug?" &lt;/p&gt;  &lt;p&gt;A release bug is the outcome of code that was written to be output differently when compiled in different modes. Take for example that you have a simple program that adds two variables, and outputs the data. Say the input values were (2, 2) and the result returned SHOULD BE EQUAL to 4. If compiled in debug mode you get the answer 4 and in release mode you get the answer 5. Sounds funny? It's NOT FUNNY AT ALL! This is a real problem. Now the example I just used does not produce a RELEASE BUG, but was just for you to understand the scope of the problem. &lt;/p&gt;  &lt;p&gt;Now there are 4 different ways that a program can be run: &lt;/p&gt;  &lt;ol&gt;&lt;li&gt;Through the Visual Studio IDE in DEBUG mode &lt;/li&gt;&lt;li&gt;Through the Visual Studio IDE in RELEASE mode &lt;/li&gt;&lt;li&gt;Run the EXECUTABLE that was compiled in DEBUG mode &lt;/li&gt;&lt;li&gt;Run the EXECUTABLE that was compiled in RELEASE mode (this is where the RELEASE BUG appears)&lt;/li&gt;&lt;/ol&gt;  &lt;p&gt;Three of the four running applications will return the same results, while that last will return irregular results. Release bugs are some of the hardest bugs to find. Nowhere is there a compile error, logical error, warning, or anything at all. Sorry there is one thing ... NOTHING. When sifting through 60,000+ lines of code to look for this, it becomes quite complex. Don't give up, they are possible to find. &lt;/p&gt;  &lt;p&gt;The code compiled here demonstrates the problem I encountered and what I did to fix it. I also explain ways to help fix the problems.&lt;/p&gt;Read More : &lt;a href="http://www.codeproject.com/csharp/ReleaseBug.asp"&gt;Click&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-808605276840844158?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/808605276840844158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/06/microsoft-net-release-bug.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/808605276840844158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/808605276840844158'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/06/microsoft-net-release-bug.html' title='Microsoft .NET Release Bug'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-7325974735868142719</id><published>2007-06-10T23:09:00.000-07:00</published><updated>2007-08-05T09:52:32.198-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xsp'/><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>How can ASP.NET applications run on Linux?</title><content type='html'>&lt;table class="articleViewer"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="2" class="subtitle"&gt;&lt;span id="intellitTxt"&gt;&lt;a class="pageTitle" id="#Page1"&gt;Introducing The Mono Project&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2" class="content"&gt;&lt;div class="backToTop"&gt;[ &lt;a href="http://aspalliance.com/387#top"&gt;Back To Top&lt;/a&gt; ]&lt;/div&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;As the title of this article suggests, you are probably asking yourself “How can ASP.NET applications run on Linux?”&lt;span style=""&gt;  &lt;/span&gt;The answer comes in the form of a free software download from &lt;a href="http://www.ximian.com/"&gt;Ximian&lt;/a&gt;, a little known company that was recently acquired by networking giant &lt;a href="http://www.novell.com/"&gt;Novell&lt;/a&gt;.&lt;span style=""&gt;  &lt;/span&gt;&lt;a href="http://www.go-mono.com/"&gt;The Mono Project&lt;/a&gt;, as the software development effort is officially known, is primarily designed to allow Unix and Linux developers to compile and run .NET applications on their platform of choice.&lt;span style=""&gt;  &lt;/span&gt;However, if you’re not a Unix or Linux developer don’t turn the channel just yet! The odds are good that at least deploying ASP.NET applications on Linux may still be in your future because of the reduced costs associated with this combination.&lt;span style=""&gt;  &lt;/span&gt;Even if you have no personal interest in Linux or Mono’s cross-platform goals it’s still a good idea to be prepared to offer this low-cost option to your customers or management.&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;As you may be aware, most companies offering low-cost web hosting services provide their customers with access to a Linux box running &lt;a href="http://www.apache.org/"&gt;Apache&lt;/a&gt;.&lt;span style=""&gt;  &lt;/span&gt;They also generally provide access to some form of open source database software (often &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt; or &lt;a href="http://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt;) as well as access to a scripting language like &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; that is pretty much equivalent to classic ASP. While this combination can be employed effectively to build a variety of web-based applications, it’s impossible to deny that there are many benefits to using a more modern language architecture like ASP.NET.&lt;span style=""&gt;  &lt;/span&gt;Customers who want the best of both worlds—that is, the ability to deploy ASP.NET applications in a low-cost environment—will inevitably be drawn to the powerful combination of Linux and Mono to provide this capability.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2" class="subtitle"&gt;&lt;span id="intellitTxt"&gt;&lt;a class="pageTitle" id="#Page2"&gt;Compatibility - The Good News&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2" class="content"&gt;&lt;div class="backToTop"&gt;[ &lt;a href="http://aspalliance.com/387#top"&gt;Back To Top&lt;/a&gt; ]&lt;/div&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;As we get into the nitty-gritty of our discussion of Mono’s compatibility with .NET be prepared for some good news and some not so good news.&lt;span style=""&gt;  &lt;/span&gt;As tradition dictates, we’ll look at the good news first.&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Our first bit of good news is that if you want to use Mono to test your applications for compatibility but have little interest in establishing a Linux test environment then you’re in luck.&lt;span style=""&gt;  &lt;/span&gt;Mono provides a simple Windows executable that will install and configure your system for Mono development.&lt;span style=""&gt;  &lt;/span&gt;In fact, it’s important to note that Mono has no dependencies on .NET applications or class libraries so you don’t need to have .NET installed on Windows to develop .NET applications with Mono.&lt;span style=""&gt;  &lt;/span&gt;To download the latest Mono installer head on over to &lt;a href="http://www.go-mono.com/download.html"&gt;http://www.go-mono.com/download.html&lt;/a&gt; and grab the latest version.&lt;span style=""&gt;  &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Mono currently supports ASP.NET deployment on Linux using either a small, light-weight web-server written in C# called XSP or via an add-on for Apache called mod_mono.&lt;span style=""&gt;  &lt;/span&gt;Whereas XSP is ideal for experimentation and development scenarios mod_mono is clearly the choice for deployments demanding greater performance and reliability.&lt;span style=""&gt;  &lt;/span&gt;Currently, Mono’s XSP web-server is not included as part of the Mono distribution.&lt;span style=""&gt;  &lt;/span&gt;Although downloading the C# source code for XSP is easy enough, actually building the source on Windows is a pain since Mono’s build system is very UNIX-centric in its reliance on “make” files.&lt;span style=""&gt;  &lt;/span&gt;Since most Windows users don’t have the tools required to compile “make” files I’ve posted the XSP executable at my web-site &lt;a href="http://www.digitalelite.com/xsp.zip"&gt;here&lt;/a&gt;.&lt;span style=""&gt;  &lt;/span&gt;What’s interesting to note is that although I built the XSP executable on Linux it runs just fine under Windows, which brings us to our next bit of good news…&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Because Mono’s .NET compatible run-time (officially called the CLI, short for Common Language Infrastructure) is byte code compatible with Microsoft .NET binaries, you can (at least in theory) copy an existing .NET application from Windows to Linux and run it without recompilation.&lt;span style=""&gt;  &lt;/span&gt;Likewise, any application compiled using Mono’s C# compiler will also run without recompilation under Windows.&lt;span style=""&gt;  &lt;/span&gt;Of course, the truth of the matter is that, in either case, if you write your application using assemblies that are not available on the alternative platform you’re going to run into problems and therein lies the rub…&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2" class="subtitle"&gt;&lt;span id="intellitTxt"&gt;&lt;a class="pageTitle" id="#Page3"&gt;Compatibility - A Few Missing Pieces&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2" class="content"&gt;&lt;div class="backToTop"&gt;[ &lt;a href="http://aspalliance.com/387#top"&gt;Back To Top&lt;/a&gt; ]&lt;/div&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Of the various .NET namespaces that often crop up during ASP.NET development most are very well supported considering Mono has not yet reached the 1.0 milestone.&lt;span style=""&gt;  &lt;/span&gt;The chart below (Figure 1) will give you a good idea of where Mono’s porting efforts currently stand in regard to several namespaces typically associated with ASP.NET development. If you want to keep tabs on the development of any particular namespace you should head over to Mono’s web-site and check out their Class Status Page at &lt;a href="http://www.go-mono.com/class-status.html"&gt;http://www.go-mono.com/class-status.html&lt;/a&gt;. For a broad view of Mono’s release schedule take a look at their roadmap page at &lt;a href="http://www.go-mono.com/mono-roadmap.html"&gt;http://www.go-mono.com/mono-roadmap.html&lt;/a&gt;.&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt; &lt;table class="MsoTableGrid" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt; &lt;tbody&gt; &lt;tr style=""&gt; &lt;td style="border: 1pt solid windowtext; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; text-align: center;" align="center"&gt;&lt;b style=""&gt;Namespace&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext rgb(212, 208, 200); border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; text-align: center;" align="center"&gt;&lt;b style=""&gt;Percent Complete&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style=""&gt; &lt;td style="border-style: none solid solid; border-color: rgb(212, 208, 200) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;System.Web&lt;/p&gt;&lt;/td&gt; &lt;td style="border-style: none solid solid none; border-color: rgb(212, 208, 200) windowtext windowtext rgb(212, 208, 200); border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; text-align: center;" align="center"&gt;98%&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style=""&gt; &lt;td style="border-style: none solid solid; border-color: rgb(212, 208, 200) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;System.Web.Services&lt;/p&gt;&lt;/td&gt; &lt;td style="border-style: none solid solid none; border-color: rgb(212, 208, 200) windowtext windowtext rgb(212, 208, 200); border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; text-align: center;" align="center"&gt;97%&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style=""&gt; &lt;td style="border-style: none solid solid; border-color: rgb(212, 208, 200) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;System.Data&lt;/p&gt;&lt;/td&gt; &lt;td style="border-style: none solid solid none; border-color: rgb(212, 208, 200) windowtext windowtext rgb(212, 208, 200); border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; text-align: center;" align="center"&gt;90%&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style=""&gt; &lt;td style="border-style: none solid solid; border-color: rgb(212, 208, 200) windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;System.XML&lt;/p&gt;&lt;/td&gt; &lt;td style="border-style: none solid solid none; border-color: rgb(212, 208, 200) windowtext windowtext rgb(212, 208, 200); border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 221.4pt; background-color: transparent;" valign="top" width="295"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; text-align: center;" align="center"&gt;99%&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;i style=""&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; text-align: center;" align="left"&gt;&lt;br /&gt;&lt;/p&gt;&lt;/i&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;" align="left"&gt;As the table above indicates, the ADO.NET namespace is about 90% complete. Moreover, Mono provides reasonably functional SQL Server drivers and work to improve them continues at a pretty fast clip. The biggest problem Windows developers are likely to face, however, is that any hosting company unwilling to spring for a Windows server license is not likely to provide you with access to Microsoft SQL Server either.&lt;span style=""&gt;  &lt;/span&gt;Instead, you will most likely be given access to either MySQL or PostgreSQL. The former, MySQL, is generally more popular in the Linux world because of its simplicity and reputation for fast SELECT queries which makes it ideal for serving dynamic web content.&lt;span style=""&gt;  &lt;/span&gt;PostgreSQL is no slouch either and has features which make it a much better match with SQL server from the standpoint of the developer but, alas, at the cost of additional complexity. &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Now for that bit of bad news I mentioned.&lt;span style=""&gt;  &lt;/span&gt;Although Mono’s implementation of ASP.NET is fairly complete, one functional area closely related to ASP.NET is not very far along in development; namely, the System.EnterpriseServices namespace.&lt;span style=""&gt;  &lt;/span&gt;The EnterpriseServices namespace essentially wraps underlying Windows operating system services to provide support within .NET for transactions, message queuing, and other enterprise services.&lt;span style=""&gt;  &lt;/span&gt;The problem is that to implement these same services Mono will have to provide either native .NET implementations or wrap similar services that are available on the Linux platform.&lt;span style=""&gt;  &lt;/span&gt;In either case, compatibility will likely be an issue so you’ll probably want to avoid this namespace for some time to come.&lt;span style=""&gt;  &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Since Mono is by definition attempting to reverse engineer and re-implement Microsoft’s released implementation and specifications it stands to reason that they will always be one step behind the latest Microsoft release.&lt;span style=""&gt;  &lt;/span&gt;In addition, given the differences between the Windows and Linux platforms it is quite likely that Mono will offer additional APIs to offer full coverage on their platform of choice.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2" class="subtitle"&gt;&lt;span id="intellitTxt"&gt;&lt;a class="pageTitle" id="#Page4"&gt;Real World Mono&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2" class="content"&gt;&lt;div class="backToTop"&gt;[ &lt;a href="http://aspalliance.com/387#top"&gt;Back To Top&lt;/a&gt; ]&lt;/div&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Now that you understand that Mono’s implementation of .NET is still a work-in-progress it’s important to reflect on how much has been accomplished by the talented programmers contributing to this effort.&lt;span style=""&gt;  &lt;/span&gt;A good example of the progress Mono has made toward providing a viable cross platform ASP.NET implementation is found in the fact that a number of Microsoft’s sample applications including IBuySpy work unmodified on Mono. As for performance, although Microsoft’s C# compiler generates more performant code is currently more performant than that produced by mono’s C# compiler the gap is closing rapidly. In addition, Mono’s support for Visual Basic.NET is shaping up quite nicely.&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Even though Mono has yet to reach a 1.0 release at least one hosting provider, &lt;a href="http://www.monohosting.net/"&gt;http://www.monohosting.net/&lt;/a&gt;, has committed to providing low-cost ASP.NET hosting using Mono.&lt;span style=""&gt;  &lt;/span&gt;In the meantime, you can experiment with this interesting technology and even contribute to the project yourself if you are so inclined.&lt;span style=""&gt;  &lt;/span&gt;For more information on how you can help Mono develop into the powerful cross-platform development tool it may well become just click on this link:&lt;span style=""&gt;  &lt;/span&gt;&lt;a href="http://www.go-mono.com/contributing.html"&gt;http://www.go-mono.com/contributing.html&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2" class="subtitle"&gt;&lt;span id="intellitTxt"&gt;&lt;a class="pageTitle" id="#Page5"&gt;Mono, Microsoft, and Software Patents&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2" class="content"&gt;&lt;div class="backToTop"&gt;[ &lt;a href="http://aspalliance.com/387#top"&gt;Back To Top&lt;/a&gt; ]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-7325974735868142719?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/7325974735868142719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/06/how-can-aspnet-applications-run-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/7325974735868142719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/7325974735868142719'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/06/how-can-aspnet-applications-run-on.html' title='How can ASP.NET applications run on Linux?'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-4128335951977593556</id><published>2007-06-08T01:22:00.000-07:00</published><updated>2007-08-05T09:52:32.200-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ketan Parmar'/><category scheme='http://www.blogger.com/atom/ns#' term='support'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title type='text'>.NET Language Sites</title><content type='html'>Following is a listing of resources that you may find useful either to own or bookmark during your navigation  through the .NET language space. If you feel that there's a resource that other .NET developers should know about,  please &lt;a href="http://www.dotnetlanguages.net/DNL/Contact.aspx"&gt;contact me&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Following Language Support by .net&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.usafa.af.mil/dfcs/bios/mcc_html/a_sharp.html"&gt;A#&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dyalog.com/new10/frmsnet.htm"&gt;APL&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.viksoe.dk/code/asmil.htm"&gt;ASP.NET: ASM to IL&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://research.microsoft.com/fse/asml/"&gt;AsmL&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Basic&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://members.screenz.com/EdNilges/"&gt;QuickBasic for .NET&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/vbasic/"&gt;VB .NET (Microsoft)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.go-mono.com/mbas.html"&gt;VB .NET (Mono)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://www.daimi.au.dk/%7Ebeta/"&gt;BETA&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://docs.codehaus.org/display/BOO/"&gt;Boo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.newatlanta.com/products/bluedragon/"&gt;BlueDragon&lt;/a&gt;&lt;/li&gt;&lt;li&gt;C&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.cs.princeton.edu/software/lcc/"&gt;lcc&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.gnu.org/projects/dotgnu/pnet.html"&gt;cscc&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;C#&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/vcsharp/"&gt;C# (Microsoft)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mono-project.com/about/index.html"&gt;C# (Mono)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://research.microsoft.com/Comega/"&gt;C&lt;span style="font-family:Symbol;"&gt;w&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/visualc/"&gt;C++ (Microsoft)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cdiggins.com/cat/"&gt;Cat&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://download.microsoft.com/download/6/8/8/68863d89-d35d-4bc5-8a1c-7e0a02e1881e/partition_iii_cil.zip"&gt;CIL&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Cobol&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.netcobol.com/products/windows/netcobol.html"&gt;NetCOBOL (Fujitsu)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microfocus.com/products/netexpress/"&gt;Net Express (Micro Focus)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://www.softwareperspectives.com/"&gt;CULE.NET&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eiffel.com/products/envsn10/"&gt;Eiffel&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://research.microsoft.com/projects/ilx/fsharp.aspx"&gt;F#&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dataman.ro/dforth/default.asp"&gt;Forth&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Fortran&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.lahey.com/"&gt;Fortran (Lahey)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.salfordsoftware.co.uk/compilers/ftn95/"&gt;Fortran (Salford)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://www.cin.ufpe.br/%7Ehaskell/vhs/"&gt;Haskell (VHS)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython"&gt;IronPython&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Java&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/vjsharp/"&gt;J# (Microsoft)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/projects/ikvm/"&gt;Java (IKVM .NET)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jnbridge.com/"&gt;JNBridge&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;JavaScript&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.gotdotnet.com/team/jscript/"&gt;JScript .NET&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://janet-js.sourceforge.net/"&gt;JANET&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://www.dcl.hpi.uni-potsdam.de/services/weblog/"&gt;Lego.NET&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Lisp&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.lsharp.org/"&gt;L#&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://foil.sourceforge.net/"&gt;FOIL&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.weitz.de/rdnzl/"&gt;RDNZL&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://www.riosur.net/"&gt;leXico&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://monologo.sourceforge.net/"&gt;LOGO&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.lua.inf.puc-rio.br/luanet/"&gt;Lua.NET&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.extremeoptimization.com/mathematics/samples/MSharp.aspx"&gt;M#&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.mu.oz.au/research/mercury/dotnet.html"&gt;Mercury&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plas.fit.qut.edu.au/metaphor/"&gt;Metaphor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/projects/mixnet/"&gt;MixNet&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mondrian-script.org/"&gt;Mondrain&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.nemerle.org/"&gt;Nermerle&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.oberon.ethz.ch/oberon.net/"&gt;Oberon&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://bluesorcerer.net/esoteric/ook.html"&gt;Ook# .NET&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.haskell.org/edsl/pansharp.html"&gt;Pan#&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Pascal&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.chromesville.com/"&gt;Chrome&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.plas.fit.qut.edu.au/gpcp/NET.aspx"&gt;Component Pascal&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.tmt.com/net.htm"&gt;Pascal (TMT)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Perl&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.activestate.com/Products/Perl_Dev_Kit/?_x=1"&gt;PerlNET&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://taubz.for.net/code/perlsharp/"&gt;PerlSharp&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://www.php-compiler.net/"&gt;PHP&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dcs.ed.ac.uk/home/stg/Psharp/"&gt;Prolog&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.asna.com/pages/advantage_asna.aspx"&gt;RPG&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Ruby&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://wilcoding.xs4all.nl/Wilco/IronRuby.aspx"&gt;IronRuby&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rubyclr.com/"&gt;RubyCLR&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.saltypickle.com/rubydotnet/"&gt;Ruby/.NET Bridge&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.plas.fit.qut.edu.au/rubynet/"&gt;Ruby.NET&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Smalltalk&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.smallscript.org/"&gt;S#&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.refactory.com/Software/SharpSmalltalk/index.html"&gt;#Smalltalk&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://vistasmalltalk.wordpress.com/"&gt;Smalltalk and .NET&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://scala.epfl.ch/"&gt;Scala&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://research.microsoft.com/projects/sml.net/"&gt;SML .NET&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://research.microsoft.com/SpecSharp/"&gt;Spec#&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.kenrawlings.com/pages/Tachy"&gt;Tachy&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://forge.novell.com/modules/xfmod/project/?ticklesharp"&gt;TickleSharp&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.vulcandotnet.com/index.html"&gt;Vulcan.NET&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.zonnon.ethz.ch/index.html"&gt;Zonnon&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Source :&lt;a href="http://www.dotnetlanguages.net"&gt;http://www.dotnetlanguages.net&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17114597-4128335951977593556?l=kpbird.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kpbird.blogspot.com/feeds/4128335951977593556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://kpbird.blogspot.com/2007/06/net-language-sites.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/4128335951977593556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17114597/posts/default/4128335951977593556'/><link rel='alternate' type='text/html' href='http://kpbird.blogspot.com/2007/06/net-language-sites.html' title='.NET Language Sites'/><author><name>Ketan Parmar</name><uri>http://www.blogger.com/profile/01600680316394612182</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/-QXvZ91w-8hc/Tbm9hKd4XpI/AAAAAAAADGI/9gyknZkEehY/s220/SAM_2515.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17114597.post-169573958233447353</id><published>2007-06-04T20:46:00.000-07:00</published><updated>2007-08-05T09:52:32.203-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF/E'/><category scheme='http
