<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DEMERX06fSp7ImA9WhVUEUU.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759</id><updated>2012-05-16T09:40:04.315-07:00</updated><category term="GL Maps" /><category term="Visual Studio" /><category term="Omnipresence" /><category term="CE Setup" /><category term="Omnia" /><category term="Nav Sensor" /><category term="Infrastructure" /><category term="Bug" /><category term="Code" /><category term="Sensory Overload" /><category term="first post" /><category term="Languages" /><category term="Android Mono" /><category term="git" /><category term="Extension Methods" /><category term="WindowlessControls" /><category term="Debugging" /><category term="Mono" /><category term="SyntaxHighlighter" /><category term="OpenGL" /><category term="Screenshot" /><category term="Duck Typing" /><category term="GVoice" /><category term="SMS" /><category term="HTC" /><category term="ROM Manager" /><category term="Geolocation" /><category term="MVP" /><category term="Hyper-V" /><category term="Superuser" /><category term="Patents" /><category term="Vacation" /><category term="YouBastard" /><category term="Interop" /><category term="Development" /><category term="Outlook Notes Mobile" /><category term="Tip" /><category term="Tiled Map Client" /><category term="ActiveSync" /><category term="Hacking" /><category term=".NET" /><category term="Serialization" /><category term="OpenFileDialog" /><category term="Google Maps" /><category term="DLR" /><category term="Windows Mobile" /><category term="CLR" /><category term="Light Sensor" /><category term="LOL" /><category term="Microsoft" /><category term="Netflix" /><category term="Telnet Client" /><category term="Xcode" /><category term="Bar Code" /><category term="Virtual Earth" /><category term="Home Screen" /><category term="github" /><category term="Threads" /><category term="Dalvik" /><category term="Windows Phone" /><category term="C++" /><category term="Shell" /><category term="Xml" /><category term="XmlSerializer" /><category term="Direct3D" /><category term="dumb" /><category term="Managed OpenGL ES" /><category term="OSx86" /><category term="GithubProjects" /><category term="Push" /><category term="SaveFileDialog" /><category term="Klaxon" /><category term="Google Gears" /><category term="Android" /><category term="Power Management" /><category term="Facebook" /><category term="Browser War" /><category term="Sensor API" /><category term="gitweb" /><category term="Debian" /><category term="Android Market" /><category term="Stylus Sensor" /><category term="Recovery" /><category term="MP3" /><category term="G Sensor" /><category term="Software License" /><category term="Generics" /><category term="Java" /><category term="shrinkimage" /><category term="Google" /><category term="30 Days of Bitching about .NET CF" /><category term="C#" /><category term="WMA" /><category term="Accelerometer" /><category term="Hackintosh" /><category term="WindowlessControls Tutorial" /><category term="DeskSMS" /><category term="Samsung" /><category term="Cupcake" /><category term="Google Voice" /><category term="Fractal" /><category term="Google Apps" /><category term="Silverlight" /><category term="CodePlex" /><title>My Brain Hurts</title><subtitle type="html">Mobile development code, ramblings, and opinions.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.koushikdutta.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>175</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/MyBrainHurts" /><feedburner:info uri="mybrainhurts" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by/3.0/" /><entry gd:etag="W/&quot;CkQDQn85fCp7ImA9WhdUEUg.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-1270810573630207929</id><published>2011-09-27T12:06:00.001-07:00</published><updated>2011-09-27T12:06:13.124-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-27T12:06:13.124-07:00</app:edited><title>The Blog is Dead</title><content type="html">&lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-GxnU1boPaVg/ToIeodcLdjI/AAAAAAAACiY/gc5hs0OO9Wg/s1600-h/social-network%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Microsoft Word - web 2.0 logos.doc" border="0" alt="Microsoft Word - web 2.0 logos.doc" src="http://lh5.ggpht.com/-2uYPmvYaEG0/ToIeo5bXQEI/AAAAAAAACic/kYD7YKuyNcI/social-network_thumb%25255B1%25255D.jpg?imgmax=800" width="301" height="183" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Well, it’s not really dead, but I only post on here for significant announcements. If you want to keep up with my hackings, feel free to hit me up on Twitter, Facebook, or Google+.&lt;/p&gt;  &lt;p&gt;Personal Accounts:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://twitter.com/koush"&gt;@koush&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="https://plus.google.com/103583939320326217147/posts"&gt;Google+&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;ClockworkMod:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://twitter.com/clockworkmod"&gt;@clockworkmod&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://facebook.com/ClockworkMod"&gt;Facebook&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;See ya there!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-1270810573630207929?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0-UgbOQE7q0WfksYFSEJHllI4NY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0-UgbOQE7q0WfksYFSEJHllI4NY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0-UgbOQE7q0WfksYFSEJHllI4NY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0-UgbOQE7q0WfksYFSEJHllI4NY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=repJtRHizvE:Ys-OyiNkPHA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=repJtRHizvE:Ys-OyiNkPHA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=repJtRHizvE:Ys-OyiNkPHA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=repJtRHizvE:Ys-OyiNkPHA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/repJtRHizvE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/1270810573630207929/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=1270810573630207929" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/1270810573630207929?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/1270810573630207929?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/repJtRHizvE/blog-is-dead.html" title="The Blog is Dead" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-2uYPmvYaEG0/ToIeo5bXQEI/AAAAAAAACic/kYD7YKuyNcI/s72-c/social-network_thumb%25255B1%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.koushikdutta.com/2011/09/blog-is-dead.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4MSHg5cCp7ImA9WhdXE04.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-1460195844930900405</id><published>2011-08-25T22:36:00.001-07:00</published><updated>2011-08-25T22:36:29.628-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-25T22:36:29.628-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="DeskSMS" /><title>DeskSMS – Text From Anywhere!</title><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="https://market.android.com/details?id=com.koushikdutta.desktopsms&amp;amp;hl=en"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="desksms_feat_v5" border="0" alt="desksms_feat_v5" src="http://lh6.ggpht.com/-idbi1zfrP4A/Tlcw12pvuHI/AAAAAAAACDY/Mj_IfetWPds/desksms_feat_v5%25255B5%25255D.png?imgmax=800" width="555" height="273" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;commit 33cab5b004a5137947ae76e431d958cd3af91ae1     &lt;br /&gt;Author: Koushik Dutta &amp;lt;xxxxx@gmail.com&amp;gt;      &lt;br /&gt;Date:&amp;#160;&amp;#160; Thu Jul 14 18:41:17 2011 -0700&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; initial commit     &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Wednesday, July 13th, 2011, is the last night full night of sleep I have gotten in a while. On that day, I started hatching my newest app, &lt;a href="https://market.android.com/details?id=com.koushikdutta.desktopsms&amp;amp;hl=en"&gt;DeskSMS&lt;/a&gt;. It was an idea I had been bouncing around for a year or so, but never executed for various reasons. There were a few competitors out at the time, but I was certain I could build a better product. And, I did. At least I think so. And the &lt;a href="http://lifehacker.com/5827451/desksms-is-the-best-phone+to+desktop-sms-solution-weve-seen-yet"&gt;media&lt;/a&gt; seems to agree. &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://lh3.ggpht.com/-IfWOZ8-6jR4/Tlcw2TCiufI/AAAAAAAACDc/1KC8S9VYFik/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-BtkxO4zaIBw/Tlcw27oL8jI/AAAAAAAACDg/8T262a-5idQ/s1600-h/unnamed%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="unnamed" border="0" alt="unnamed" src="http://lh4.ggpht.com/-bjRrQeSxiZU/Tlcw3KjwOAI/AAAAAAAACDk/A7WgAXvNV3M/unnamed_thumb%25255B1%25255D.png?imgmax=800" width="349" height="241" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;DeskSMS is an Android and iOS (jailbroken) app that forwards all your text messages and call history to your GTalk, GMail, or a convenient website and browser extension. It’s basically Google Voice, except with an &lt;a href="https://github.com/ClockworkMod/DesktopSMSResources/wiki/DeskSMS-API"&gt;open API&lt;/a&gt;, more delivery options, and minus the number porting inconvenience. One click setup, so even if you’re not tech savvy, you are up and running in 30 seconds.&lt;/p&gt;  &lt;p&gt;During development, I’ve seen a lot of creative and funny uses for DeskSMS:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;A dispatcher uses it to communicate with all his trucks.&lt;/li&gt;    &lt;li&gt;A businessman left his phone at home while travelling abroad, and was still able to manage his texts.&lt;/li&gt;    &lt;li&gt;Pretend like you are working at work, when you are actually texting.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;But mostly, it’s just an unbelievably convenient tool and time saver. Check it out on the &lt;a href="https://market.android.com/details?id=com.koushikdutta.desktopsms&amp;amp;hl=en"&gt;Android Market&lt;/a&gt;!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-1460195844930900405?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/o7_N7TpNXW3F7tQU86YN6aM-sJY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o7_N7TpNXW3F7tQU86YN6aM-sJY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/o7_N7TpNXW3F7tQU86YN6aM-sJY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o7_N7TpNXW3F7tQU86YN6aM-sJY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=c3Ecq48TID8:itfizzXXgw0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=c3Ecq48TID8:itfizzXXgw0:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=c3Ecq48TID8:itfizzXXgw0:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=c3Ecq48TID8:itfizzXXgw0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/c3Ecq48TID8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/1460195844930900405/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=1460195844930900405" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/1460195844930900405?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/1460195844930900405?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/c3Ecq48TID8/desksms-text-from-anywhere.html" title="DeskSMS – Text From Anywhere!" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-idbi1zfrP4A/Tlcw12pvuHI/AAAAAAAACDY/Mj_IfetWPds/s72-c/desksms_feat_v5%25255B5%25255D.png?imgmax=800" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://www.koushikdutta.com/2011/08/desksms-text-from-anywhere.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYGRnc7fip7ImA9WhZVGE0.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-3760087829179197245</id><published>2011-05-30T16:45:00.000-07:00</published><updated>2011-05-30T17:02:07.906-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-30T17:02:07.906-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Samsung" /><category scheme="http://www.blogger.com/atom/ns#" term="ROM Manager" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>Epic4G Bootstrap</title><content type="html">&lt;a href="http://1.bp.blogspot.com/-0zy1xH8pRdU/TeQtDQptLNI/AAAAAAAABv4/z7xwC5GWMys/s1600/logo2.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 238px; height: 400px;" src="http://1.bp.blogspot.com/-0zy1xH8pRdU/TeQtDQptLNI/AAAAAAAABv4/z7xwC5GWMys/s400/logo2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5612660569643232466" /&gt;&lt;/a&gt;
&lt;div&gt;
&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;Looking for an Epic4G kernel that has Clockwork Recovery and ROM Manager support built in? Several devs banded together to create a bootstrap for this device. In no particular order:

&lt;ul&gt;&lt;li&gt;Tanimn: ext4 support (&lt;a href="https://www.paypal.com/us/cgi-bin/webscr?cmd=_flow&amp;amp;SESSION=0VkQ4ImzKlgPrsu9AKqPd0rosZHuW9RBBbUAtnOJZSqxQp6rKRhX97gXPnK&amp;amp;dispatch=5885d80a13c0db1f8e263663d3faee8d422be6d275c375afb284863ba74d6cdc"&gt;donate&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;DRockstar: rfs/dual support (&lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;amp;business=DRockstar%2eEpic4G%40gmail%2ecom&amp;amp;lc=US&amp;amp;item_name=DRockstar%20Android%20Development&amp;amp;item_number=koush%20app&amp;amp;currency_code=USD&amp;amp;bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted"&gt;donate&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;rjmjr: lending me a phone&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;You can support my work grab the kernel flasher off of the &lt;a href="https://market.android.com/details?id=com.koushikdutta.epic4g.bootstrap"&gt;Android market&lt;/a&gt; for $2.99. &lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;Or you can get it free from the &lt;a href="http://koush.kanged.net/cm/test/Epic4GBootstrap.apk"&gt;download link here on my site.&lt;/a&gt;
&lt;/div&gt;&lt;div&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/8001170587821659759-3760087829179197245?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pnbOx1zAN0bOwMYQPEPbggeG-9s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pnbOx1zAN0bOwMYQPEPbggeG-9s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pnbOx1zAN0bOwMYQPEPbggeG-9s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pnbOx1zAN0bOwMYQPEPbggeG-9s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=DEnpg_3M-4w:z_w-6ockQE0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=DEnpg_3M-4w:z_w-6ockQE0:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=DEnpg_3M-4w:z_w-6ockQE0:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=DEnpg_3M-4w:z_w-6ockQE0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/DEnpg_3M-4w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/3760087829179197245/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=3760087829179197245" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/3760087829179197245?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/3760087829179197245?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/DEnpg_3M-4w/epic4g-bootstrap.html" title="Epic4G Bootstrap" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-0zy1xH8pRdU/TeQtDQptLNI/AAAAAAAABv4/z7xwC5GWMys/s72-c/logo2.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.koushikdutta.com/2011/05/epic4g-bootstrap.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UCRHs4cSp7ImA9WhZQEE4.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-5957159449777518205</id><published>2011-04-17T02:07:00.001-07:00</published><updated>2011-04-17T02:07:45.539-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-17T02:07:45.539-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ROM Manager" /><title>ROM Manager Quattro</title><content type="html">&lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/_1Q1cgK2sxXk/Taqt31pWTvI/AAAAAAAABpQ/RdjcfIOb9oM/s1600-h/device%5B3%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="device" border="0" alt="device" src="http://lh6.ggpht.com/_1Q1cgK2sxXk/Taqt4MS3v4I/AAAAAAAABpU/a6UAn2m2-T0/device_thumb%5B1%5D.png?imgmax=800" width="191" height="316" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’m really proud of ROM Manager 4! It’s the culmination/conglomeration of several projects:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ROM Manager now supports comments and ratings!&lt;/li&gt;    &lt;li&gt;The service behind ROM Manager 4 is hosted on &lt;a href="http://blog.deployfu.com/2011/02/deployfu-net-platform-as-service_7510.html"&gt;DeployFu&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;Learned and wrote the service in ASP .NET MVC 3.&lt;/li&gt;    &lt;li&gt;Finally got around to unsuckifying the ROM Manager UI.&lt;/li&gt;    &lt;li&gt;WebConnect is no longer a useless chrome-to-phone downloader.&lt;/li&gt;    &lt;li&gt;Paving the way for even bigger things to come… (hint: a website)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Grab &lt;a href="https://market.android.com/details?id=com.koushikdutta.rommanager&amp;amp;hl=en"&gt;ROM Manager on the Market&lt;/a&gt; or a &lt;a href="http://mirror.kanged.net//recoveries/RomManager.apk"&gt;direct download here&lt;/a&gt;!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-5957159449777518205?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wdLzAqFwjQ4ke0-NGBYJ_ynUjtU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wdLzAqFwjQ4ke0-NGBYJ_ynUjtU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wdLzAqFwjQ4ke0-NGBYJ_ynUjtU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wdLzAqFwjQ4ke0-NGBYJ_ynUjtU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=MmPAtBcYMQA:EZnJ6jrJz1s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=MmPAtBcYMQA:EZnJ6jrJz1s:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=MmPAtBcYMQA:EZnJ6jrJz1s:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=MmPAtBcYMQA:EZnJ6jrJz1s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/MmPAtBcYMQA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/5957159449777518205/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=5957159449777518205" title="75 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/5957159449777518205?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/5957159449777518205?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/MmPAtBcYMQA/rom-manager-quattro.html" title="ROM Manager Quattro" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_1Q1cgK2sxXk/Taqt4MS3v4I/AAAAAAAABpU/a6UAn2m2-T0/s72-c/device_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>75</thr:total><feedburner:origLink>http://www.koushikdutta.com/2011/04/rom-manager-quattro.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcBR38-fip7ImA9Wx9aGEo.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-8952331933184348894</id><published>2011-03-11T11:27:00.001-08:00</published><updated>2011-03-11T12:07:36.156-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-11T12:07:36.156-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Hacking" /><title>Manually Updating your rooted XOOM</title><content type="html">&lt;p&gt;What I just roughly tested.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Download the update.zip: &lt;a title="http://www.mediafire.com/?hxmkxdafhkahi41" href="http://www.mediafire.com/?hxmkxdafhkahi41"&gt;http://www.mediafire.com/?hxmkxdafhkahi41&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;adb push &amp;lt;zip name&amp;gt; /sdcard/update.zip&lt;/li&gt;    &lt;li&gt;adb shell&lt;/li&gt;    &lt;li&gt;su&lt;/li&gt;    &lt;li&gt;cd /cache&lt;/li&gt;    &lt;li&gt;mkdir recovery #it may already exist&lt;/li&gt;    &lt;li&gt;cd recovery&lt;/li&gt;    &lt;li&gt;echo '--update_package=CACHE:/recovery/update.zip' &amp;gt; command&lt;/li&gt;    &lt;li&gt;cat /sdcard/update.zip &amp;gt; update.zip&lt;/li&gt;    &lt;li&gt;reboot recovery&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Please do not repost this right into your blog. Last time you guys did that, my instructions had an error, which got corrected. On my site at least. But not in all the copy-pasted locations.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-8952331933184348894?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/G53RDUDEhsWv3VvIlND_waDWn1c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G53RDUDEhsWv3VvIlND_waDWn1c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/G53RDUDEhsWv3VvIlND_waDWn1c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G53RDUDEhsWv3VvIlND_waDWn1c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=5JMH9wg5exQ:NMBvjmUyTwc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=5JMH9wg5exQ:NMBvjmUyTwc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=5JMH9wg5exQ:NMBvjmUyTwc:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=5JMH9wg5exQ:NMBvjmUyTwc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/5JMH9wg5exQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/8952331933184348894/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=8952331933184348894" title="27 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/8952331933184348894?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/8952331933184348894?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/5JMH9wg5exQ/manually-updating-your-rooted-xoom.html" title="Manually Updating your rooted XOOM" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><thr:total>27</thr:total><feedburner:origLink>http://www.koushikdutta.com/2011/03/manually-updating-your-rooted-xoom.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YERXk6eSp7ImA9Wx9bFks.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-8997506522690212887</id><published>2011-02-24T15:57:00.001-08:00</published><updated>2011-02-25T13:25:04.711-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-25T13:25:04.711-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ROM Manager" /><category scheme="http://www.blogger.com/atom/ns#" term="Hacking" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Recovery" /><title>Motorola XOOM Rooted</title><content type="html">&lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/_1Q1cgK2sxXk/TWbwYdrjzWI/AAAAAAAABjc/w5Xmo3oB8dI/s1600-h/xoomroot%5B5%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="xoomroot" border="0" alt="xoomroot" src="http://lh4.ggpht.com/_1Q1cgK2sxXk/TWbwY5Hyz-I/AAAAAAAABjk/UJlIYhkAOjU/xoomroot_thumb%5B2%5D.jpg?imgmax=800" width="598" height="450" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Since it’s another Google experience device, and ships with fastboot support (albeit, limited), it really does come rooted out of the box. Just needed to figure out the board kernel base, and compile up a new kernel.&lt;/p&gt;  &lt;p&gt;Unfortunately the kernel was not available in the Android repositories. At first, I tried using the Harmony kernel, since they are both tegra 2 250 chips. That turned out to be major fail. As soon as I was about to give up, I noticed that AOSP had updated their tegra kernel repository with some &lt;a href="http://android.git.kernel.org/?p=kernel/tegra.git;a=tree;h=refs/heads/android-tegra-2.6.36-honeycomb;hb=refs/heads/android-tegra-2.6.36-honeycomb"&gt;new tasty branches for stingray&lt;/a&gt;. Kudos to these guys for being so on the ball! I was able to compile that up and get a working recovery to obtain root, and then get Superuser on the device.&lt;/p&gt;  &lt;p&gt;I also built up a recovery, but due to a nonfunctional SD card slot (until they release a firmware update that enables the slot), nothing really works. That will come later.&lt;/p&gt;  &lt;p&gt;Here are the instructions to root your device (this assumes you have adb and fastboot installed on your computer):&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;# Download the &lt;a href="http://mirror1.kanged.net/motorola/stingray/xoomroot.zip"&gt;XOOM root zip&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;# Unzip the package. &lt;/li&gt;    &lt;li&gt;# Put your junk in the box. &lt;/li&gt;    &lt;li&gt;adb reboot bootloader (skip the next 3 steps if you have already unlocked via fastboot) &lt;/li&gt;    &lt;li&gt;fastboot oem unlock &lt;/li&gt;    &lt;li&gt;# wait for reboot &lt;/li&gt;    &lt;li&gt;adb reboot bootloader &lt;/li&gt;    &lt;li&gt;fastboot flash boot rootboot.img &lt;/li&gt;    &lt;li&gt;fastboot reboot &lt;/li&gt;    &lt;li&gt;# wait for reboot &lt;/li&gt;    &lt;li&gt;adb remount &lt;/li&gt;    &lt;li&gt;adb push su /system/bin/&lt;/li&gt;    &lt;li&gt;adb shell ln –s /system/bin/su /system/xbin/su &lt;/li&gt;    &lt;li&gt;adb shell chmod 4755 /system/bin/su &lt;/li&gt;    &lt;li&gt;adb push Superuser.apk /system/app/&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Yep, that should do it.&lt;/p&gt;  &lt;p&gt;As I mentioned, I have a working recovery, but will not be releasing it until Google or I get the SD card working.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://market.android.com/details?id=com.koushikdutta.rommanager"&gt;ROM Manager&lt;/a&gt; support will come as soon as that happens. But feel free to buy a &lt;a href="https://market.android.com/details?id=com.koushikdutta.rommanager.license"&gt;Premium&lt;/a&gt; copy in advance. &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://lh6.ggpht.com/_1Q1cgK2sxXk/TWbwZbFGGkI/AAAAAAAABjw/Zv-Nrup6tVA/wlEmoticon-winkingsmile%5B2%5D.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;p&gt;And hit me up on Twitter &lt;a href="http://twitter.com/koush"&gt;@koush&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;PS. &lt;a href="http://mirror1.kanged.net/motorola/stingray/stockboot.img"&gt;Stock boot image for XOOM.&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-8997506522690212887?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gXUlG-py-80Y3MuN6qh1K4dqIbc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gXUlG-py-80Y3MuN6qh1K4dqIbc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gXUlG-py-80Y3MuN6qh1K4dqIbc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gXUlG-py-80Y3MuN6qh1K4dqIbc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=XFKzPCgAjio:tpMooUqHw5E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=XFKzPCgAjio:tpMooUqHw5E:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=XFKzPCgAjio:tpMooUqHw5E:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=XFKzPCgAjio:tpMooUqHw5E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/XFKzPCgAjio" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/8997506522690212887/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=8997506522690212887" title="35 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/8997506522690212887?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/8997506522690212887?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/XFKzPCgAjio/motorola-xoom-rooted.html" title="Motorola XOOM Rooted" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_1Q1cgK2sxXk/TWbwY5Hyz-I/AAAAAAAABjk/UJlIYhkAOjU/s72-c/xoomroot_thumb%5B2%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>35</thr:total><feedburner:origLink>http://www.koushikdutta.com/2011/02/motorola-xoom-rooted.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUNSHs_eip7ImA9Wx9aEE0.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-1467072554016006696</id><published>2011-02-22T17:03:00.001-08:00</published><updated>2011-03-01T09:58:19.542-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-01T09:58:19.542-08:00</app:edited><title>DeployFu – A .NET Platform as a Service</title><content type="html">&lt;p&gt; &lt;/p&gt;  &lt;p&gt;I’m a huge fan of &lt;a href="http://code.google.com/appengine/"&gt;AppEngine&lt;/a&gt; and &lt;a href="http://heroku.com/"&gt;Heroku&lt;/a&gt;. And though I can hack up Rails and Servlet code, I’m through and through a .NET developer. Sadly, there is no viable equivalent service for .NET.&lt;sup&gt;1&lt;/sup&gt; So, like any software geek would do, I took up creating my own. I figured, if I wanted it, chances are, other people need it too.&lt;/p&gt;  &lt;p&gt;After being knee deep in Erlang for three months, I have a working product. Introducing &lt;a href="http://www.deployfu.com/"&gt;DeployFu&lt;/a&gt;:    
&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.deployfu.com/"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="DeployFu" border="0" alt="DeployFu" src="http://lh5.ggpht.com/_1Q1cgK2sxXk/TWRc8_EtFeI/AAAAAAAABjU/sprVHXLCLVA/DeployFu%5B4%5D.jpg?imgmax=800" width="628" height="280" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’m very happy with the progress so far, and am now porting over all my AppEngine projects to DeployFu, one of which processes around $8k a month in payments.&lt;sup&gt;2&lt;/sup&gt;&lt;/p&gt;  &lt;p&gt;Here’s a quick overview of what is available so far:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Runs on Amazon EC2 &lt;/li&gt;    &lt;li&gt;Automatic load balancing and elastic scaling of web applications across multiple instances &lt;/li&gt;    &lt;li&gt;SSL on all *.deployfu.com domains. &lt;/li&gt;    &lt;li&gt;SSH to your application &lt;/li&gt;    &lt;li&gt;ASP .NET (&lt;a href="http://www.mono-project.com/Main_Page"&gt;Mono&lt;/a&gt;) and Pylons&lt;sup&gt;3&lt;/sup&gt; support &lt;/li&gt;    &lt;li&gt;Shared MySQL database instance &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Right now, during the beta, the service is completely free. Eventually, there will be a free tier and a pay as you go tier.&lt;/p&gt;  &lt;p&gt;Sign up, try it out, and leave me some feedback on the forum!&lt;/p&gt;  &lt;p&gt;&lt;sup&gt;&lt;/sup&gt;&lt;/p&gt;  &lt;p&gt;&lt;sup&gt;&lt;/sup&gt;&lt;/p&gt; 


 &lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Don’t get me started on Azure. It’s impossible to figure out how much you will be billed. There is no git workflow. Management is a pain.&lt;/p&gt;  &lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; A &lt;a href="https://www.paypal.com/ipn"&gt;PayPal IPN endpoint&lt;/a&gt; and licensing service for my Android applications.&lt;/p&gt;  &lt;p&gt;&lt;sup&gt;3&lt;/sup&gt; It actually supports Manos, Rails, and NodeJS, but the &lt;a href="https://github.com/deployfu/platform"&gt;platform support&lt;/a&gt; for those is unsupported or incomplete.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-1467072554016006696?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2pb2b2F4_4xN2InYeK3tvu6lryc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2pb2b2F4_4xN2InYeK3tvu6lryc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2pb2b2F4_4xN2InYeK3tvu6lryc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2pb2b2F4_4xN2InYeK3tvu6lryc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=VjBkllmY__o:tU07hrTl354:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=VjBkllmY__o:tU07hrTl354:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=VjBkllmY__o:tU07hrTl354:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=VjBkllmY__o:tU07hrTl354:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/VjBkllmY__o" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/1467072554016006696?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/1467072554016006696?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/VjBkllmY__o/deployfu-net-platform-as-service_5996.html" title="DeployFu – A .NET Platform as a Service" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_1Q1cgK2sxXk/TWRc8_EtFeI/AAAAAAAABjU/sprVHXLCLVA/s72-c/DeployFu%5B4%5D.jpg?imgmax=800" height="72" width="72" /><feedburner:origLink>http://www.koushikdutta.com/2011/02/deployfu-net-platform-as-service_5996.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcNSXg7eSp7ImA9Wx9XE00.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-2436560948778685588</id><published>2011-01-06T00:38:00.001-08:00</published><updated>2011-01-06T00:38:18.601-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-06T00:38:18.601-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ROM Manager" /><category scheme="http://www.blogger.com/atom/ns#" term="Recovery" /><title>ROM Manager – Any Recovery</title><content type="html">&lt;p&gt;This has been a bit overdue, but users who don’t want to use ClockworkMod recovery can now install zip files off their SD card using ROM Manager! (This is a Premium feature only.)&lt;/p&gt;  &lt;p&gt;However, there are technical limitations that prevent full ROM Manager support for AmonRa recovery and such. These other recoveries need the proper hooks for ROM Manager to communicate with them and and do scripted installations and backups. But of course, ClockworkMod recovery is open source and can be &lt;a href="https://github.com/CyanogenMod/android_bootable_recovery"&gt;forked&lt;/a&gt; and &lt;a href="http://www.koushikdutta.com/2010/10/porting-clockwork-recovery-to-new.html"&gt;ported to new devices&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-2436560948778685588?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/B9fxbohitqrelEA_4nLm0XrliVQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B9fxbohitqrelEA_4nLm0XrliVQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/B9fxbohitqrelEA_4nLm0XrliVQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B9fxbohitqrelEA_4nLm0XrliVQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=AjmbnNGgyBs:qE3XiJY7xSA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=AjmbnNGgyBs:qE3XiJY7xSA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=AjmbnNGgyBs:qE3XiJY7xSA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=AjmbnNGgyBs:qE3XiJY7xSA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/AjmbnNGgyBs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/2436560948778685588/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=2436560948778685588" title="21 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/2436560948778685588?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/2436560948778685588?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/AjmbnNGgyBs/rom-manager-any-recovery.html" title="ROM Manager – Any Recovery" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><thr:total>21</thr:total><feedburner:origLink>http://www.koushikdutta.com/2011/01/rom-manager-any-recovery.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkENRnk6eyp7ImA9Wx9QFUg.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-1178425993757298739</id><published>2010-12-22T15:56:00.001-08:00</published><updated>2010-12-28T09:51:37.713-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-28T09:51:37.713-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google Voice" /><category scheme="http://www.blogger.com/atom/ns#" term="GVoice" /><title>GVoice 1.2 Push Setup with GVMax</title><content type="html">&lt;p&gt;Go to &lt;a href="http://www.gvmax.com"&gt;http://www.gvmax.com&lt;/a&gt; and create an account with your Google login credentials.&lt;/p&gt;  &lt;p&gt;After that is complete, click the “Active Monitors” button.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_1Q1cgK2sxXk/TRKQFeXDrBI/AAAAAAAABh8/l4T7IV9fmag/s1600-h/GVMax-1-1-1%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="GVMax-1-1-1" border="0" alt="GVMax-1-1-1" src="http://lh5.ggpht.com/_1Q1cgK2sxXk/TRKQFzjvJMI/AAAAAAAABiA/KgIvy_uJ0Oc/GVMax-1-1-1_thumb%5B1%5D.jpg?imgmax=800" width="598" height="229" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then check “Send Http Post notifications” and enter the following into the following into the POST Urls:&lt;/p&gt;  &lt;p align="center"&gt;&lt;font size="4"&gt;&lt;a href="https://wp7voice.appspot.com/gvmax"&gt;https://wp7voice.appspot.com/gvmax&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_1Q1cgK2sxXk/TRKQGOP_ZyI/AAAAAAAABiE/xc09f2DbNt4/s1600-h/GVMax-2-1%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="GVMax-2-1" border="0" alt="GVMax-2-1" src="http://lh6.ggpht.com/_1Q1cgK2sxXk/TRKQGvmF1pI/AAAAAAAABiI/jpDjaCIMoC8/GVMax-2-1_thumb%5B1%5D.jpg?imgmax=800" width="606" height="423" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;That’s it!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-1178425993757298739?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ce2oECMxsojDZIsjc9VdeCLTKa8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ce2oECMxsojDZIsjc9VdeCLTKa8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ce2oECMxsojDZIsjc9VdeCLTKa8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ce2oECMxsojDZIsjc9VdeCLTKa8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=fYBGbN2Ny5Q:Dn9uYoL-YSc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=fYBGbN2Ny5Q:Dn9uYoL-YSc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=fYBGbN2Ny5Q:Dn9uYoL-YSc:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=fYBGbN2Ny5Q:Dn9uYoL-YSc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/fYBGbN2Ny5Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/1178425993757298739/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=1178425993757298739" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/1178425993757298739?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/1178425993757298739?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/fYBGbN2Ny5Q/gvoice-12-push-setup-with-gvmax.html" title="GVoice 1.2 Push Setup with GVMax" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_1Q1cgK2sxXk/TRKQFzjvJMI/AAAAAAAABiA/KgIvy_uJ0Oc/s72-c/GVMax-1-1-1_thumb%5B1%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>9</thr:total><feedburner:origLink>http://www.koushikdutta.com/2010/12/gvoice-12-push-setup-with-gvmax.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUCRnc7fCp7ImA9Wx9RFkw.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-7719952527028484968</id><published>2010-12-13T12:57:00.001-08:00</published><updated>2010-12-17T12:37:47.904-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-17T12:37:47.904-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Voice" /><category scheme="http://www.blogger.com/atom/ns#" term="GVoice" /><title>Windows Phone Marketplace Woes</title><content type="html">&lt;p&gt;I wrote this letter to the director in charge of developer programs at Microsoft:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Hi Brandon, I got your contact information from Loke Uei Tan, who I've worked with extensively in the past. To introduce myself, I'm Koushik Dutta, a former Device MVP (2008-2009). I dropped out of the WinMo scene around 2008 to begin working on Android and iPhone instead. I have started dabbling in Windows Phone again in since its release.        &lt;br /&gt;Mobile app development is my passion and now my full time, self-employed, profession; I have several apps on the Android Market with millions of users.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;I am very pleased with the platform as a whole; it has exceeded my expectations in terms of ease of development. A solid V1 product all around, and I am looking forward to future releases that will help round out the platform (ringtones, background processes, inter-app communication).&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;However, I must say, the Market approval process is a blemish on the platform. And it will have a significant impact on how I will design apps in the future.        &lt;br /&gt;I released a Google Voice client (GVoice) on the market a few weeks ago. It took 14 days to get it onto the market, due to a variety of reasons and failures.         &lt;br /&gt;&lt;/em&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;em&gt;First failure was due to the back button exiting the app when a non full screen popup was shown.&lt;/em&gt;         &lt;ul&gt;         &lt;li&gt;&lt;em&gt;It took 4 days to get this response.&lt;/em&gt; &lt;/li&gt;       &lt;/ul&gt;     &lt;/li&gt;      &lt;li&gt;&lt;em&gt;Second failure was due to a phone in airplane mode crashing when attempting to setup push.          &lt;br /&gt;&lt;/em&gt;        &lt;ul&gt;         &lt;li&gt;&lt;em&gt;Ok, pretty obscure, but good to know.&lt;/em&gt; &lt;/li&gt;          &lt;li&gt;&lt;em&gt;Took around 4 days to get this response.&lt;/em&gt; &lt;/li&gt;       &lt;/ul&gt;     &lt;/li&gt;      &lt;li&gt;&lt;em&gt;Third failure was due to Push not being allowed to be turned on by default on, without user confirmation. This is really quite strange. &lt;/em&gt;        &lt;ul&gt;         &lt;li&gt;&lt;em&gt;For one, the app is useless without push. &lt;/em&gt;&lt;/li&gt;          &lt;li&gt;&lt;em&gt;Secondly, what are the point of the WMAppManifest.xml capabilities/permissions, if not to explicitly tell the user up front that push would be used? That's what Android does.&lt;/em&gt; &lt;/li&gt;          &lt;li&gt;&lt;em&gt;Thirdly, why is the confirmation task offloaded onto the developer? Why not make a dialog pop up at the system level (similar to iPhone) that lets the user confirm the usage of push? &lt;/em&gt;&lt;/li&gt;          &lt;li&gt;&lt;em&gt;It took 4 days to get this response.              &lt;br /&gt;&lt;/em&gt;&lt;/li&gt;       &lt;/ul&gt;     &lt;/li&gt;      &lt;li&gt;&lt;em&gt;Fourth submission: Success! App was released.          &lt;br /&gt;&lt;/em&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&lt;em&gt;I am now trying to release a new version; which was submitted a week ago (11 days if you include the test failure). Its status is still &amp;quot;Testing in Progress&amp;quot;. In that same 7 day period, a competitor app, has had two releases.&lt;/em&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;em&gt;What priority are submissions given? First come first serve? Do resubmissions on failed apps get priority?&lt;/em&gt; &lt;/li&gt;      &lt;li&gt;&lt;em&gt;Why reject the app altogether for obscure bugs? Ie, rejecting a submission for an app that requires connectivity and crashes in airplane mode in specific scenarios. Seems it would be wiser to just note that in the application, approve it, and let the developer address it in a future release. Entirely too much churn is happening here.&lt;/em&gt; &lt;/li&gt;      &lt;li&gt;&lt;em&gt;How does a developer make an emergency release? &lt;/em&gt;        &lt;ul&gt;         &lt;li&gt;&lt;em&gt;Currently I am parsing HTML and JSON from a third party web page. If that page format changes, the app stops working, period. I would need to update it immediately. &lt;/em&gt;&lt;/li&gt;          &lt;li&gt;&lt;em&gt;Unfortunately, a 7 day turnaround time is glacial by Android standards (where approvals are instant). An app being broken for that long in lieu of waiting for Market approval is unacceptable and will cost a developer in users and reviews. &lt;/em&gt;&lt;/li&gt;          &lt;li&gt;&lt;em&gt;If this is expected to be the norm, I will need to redesign my application by offloading all parsing onto my own server (infrastructure costs money), to gaurantee reliability and quick fixes.              &lt;br /&gt;&lt;/em&gt;&lt;/li&gt;       &lt;/ul&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&lt;em&gt;I would love to hear your thoughts on this.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Thanks,        &lt;br /&gt;Koush&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Edit: Regarding approving apps with bugs:&lt;/p&gt;  &lt;p&gt;Bugs happen. If the bug is low risk, low occurrence, and generally not an issue during normal user usage: Don’t delay the application release by another 4 days by rejecting the app. Obviously highly visible crash bugs or UX issues should be rejected.    &lt;br /&gt;    &lt;br /&gt;Update: &lt;/p&gt;  &lt;p&gt;I finally got an update regarding why the GVoice update has not been approved yet:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Hello Koushik,        &lt;br /&gt;&amp;#160; &lt;br /&gt;My apologies for the confusion regarding your app since you resubmitted it. The app should have completed testing by now of course so it most likley has become Stuck in Workflow. This means that something in the testing process stopped and the app will need to be resubmitted for testing. Again, I apologize for this inconvenience but it is the only way to resolve this right now.         &lt;br /&gt;&amp;#160; &lt;br /&gt;Best Regards,         &lt;br /&gt;Ben         &lt;br /&gt;The Windows Phone Marketplace Support Team&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;TLDR version: Something messed up on our end. My bad. Resubmit and we’ll try again. My response:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Uh... you know you can't submit another version of your app with the same language while a submission is in progress?&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;The Marketplace Support Team needs to resolve this. I can't do another submission from my end...&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Another update from Brandon:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Hello Koushik,        &lt;br /&gt;&amp;#160; &lt;br /&gt;I apologize for the delay in getting back to you but due to the volume of issues we are handling, it will take a day or two for us to get back to you. Also, we do not have a contact number so we cannot assist other than through this medium. Please understand that additional support and answers can be found in the App Hub Forums as well as they are monitored by Microsoft Evangelists, MVPs and Engineers.         &lt;br /&gt;&amp;#160; &lt;br /&gt;Again, I apologize for the trouble you are having submitting the app. The workaround to submit your app is to submit it as a new project instead of an update. You may have to choose a new name for the project in Step 1 to complete this. We are still working with the Certification Team to see if they can remove the app from workflow but o resolution has been provided yet. As soon as I do hear something I will let you know.         &lt;br /&gt;&amp;#160; &lt;br /&gt;Best Regards,         &lt;br /&gt;Ben         &lt;br /&gt;The Windows Phone Marketplace Support Team&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;I already have people that have purchased the app. How do I give them updates?        &lt;br /&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Furthermore, if I release another version of the app under a new name, I'll end up having two paid userbases and will need to update TWO apps instead of just one. This is NOT an acceptable workaround.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Koush&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Hello Koushik,        &lt;br /&gt;&amp;#160; &lt;br /&gt;After working with my support team, we cannot find any app submission after12/7 when GVoice failed testing. Since the site is not allowing you to submit the update, please follow these steps to submit the app and ensure customers receive the update.         &lt;br /&gt;&amp;#160; &lt;br /&gt;Create a new project in the App Certification Dashboard         &lt;br /&gt;In Step 1, use a new name for the project         &lt;br /&gt;In Step 2, use the actual app's name that it will be published under         &lt;br /&gt;Continue through the entire process, including the loading of the XAP file and images to get the app into testing.         &lt;br /&gt;&amp;#160; &lt;br /&gt;This should work but if you run into any errors, please provide screenshots starting from when you log into the site until you reach the error.         &lt;br /&gt;&amp;#160; &lt;br /&gt;Best Regards,         &lt;br /&gt;Ben         &lt;br /&gt;The Windows Phone Marketplace Support Team&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Ben, I have submitted GVoice under the name &amp;quot;GVoice.&amp;quot; but with the same Application Title. I hope that users of the &amp;quot;GVoice&amp;quot; app which have already paid are able to upgrade to this new version.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Koush&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;At this point, I can’t tell if Brandon is trying to be really nice, or just messing with me. Guess we’ll find out. I’ll give him the benefit of the doubt, since he hasn’t chewed me out for being my usual boorish self. So, let’s hope this all works out! &lt;/p&gt;  &lt;p&gt;Update: Microsoft really was not prepared. I am apparently the victim of a major “workflow” bug that needs to be manually resolved:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Ben, I have submitted GVoice under the name &amp;quot;GVoice.&amp;quot; but with the same Application Title. I hope that users of the &amp;quot;GVoice&amp;quot; app which have already paid are able to upgrade to this new version.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Koush&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Hello Koushik,       &lt;br /&gt;&amp;#160; &lt;br /&gt;Thank you for resubmitting the app. I do want to add that when submitting the app for testing, as long as you change the name in Step 1 (it can be any name, or even a variation like GVoice 1, 2, etc), Step 2 can remain GVoice. As long as the components in the XAP are similar, there should be no reason for a new app is created. I am requesting my Certification Team to provide more technical details that will explain this further, and if I get a response I will let you know.        &lt;br /&gt;&amp;#160; &lt;br /&gt;Best Regards,        &lt;br /&gt;Ben        &lt;br /&gt;The Windows Phone Marketplace Support Team        &lt;br /&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Thanks Ben. The whole submission process is very opaque to a developer. The submission process makes it feel like unless you use the &amp;quot;Add Additional Submission&amp;quot; option in the existing submission, it will create a new instance of an application on the market. This is good to know.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Koush&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Hello Koushik,       &lt;br /&gt;&amp;#160; &lt;br /&gt;I just exited a conference call with the Certification Team and one of the topics was the issue you are experiencing. In short, the steps I provided, which came from the Certification Team until this meeting, were a workaround. Unfortunately, they do not allow for the app to be updated.        &lt;br /&gt;&amp;#160; &lt;br /&gt;The Certification Team has acknowledged that apps Stuck in Workflow, as yours is, must be manually repaired by their team. I am putting in a request to get GVoice repaired ASAP, though the process is taking several business days for expedited requests and 2 weeks for all others.        &lt;br /&gt;&amp;#160; &lt;br /&gt;What this means is that the newest submission I had you do will not resolve the issue and I must have the Certification Team get your updated app tested and certified. Please allow me to work with them to get this resolved and I apologize for the time this is taking from you. I will provide updates as soon as possible.        &lt;br /&gt;&amp;#160; &lt;br /&gt;Best Regards,        &lt;br /&gt;Ben        &lt;br /&gt;The Windows Phone Marketplace Support Team&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-7719952527028484968?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/F3CHuJDXOufOVrIyRloyJ11Qa24/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F3CHuJDXOufOVrIyRloyJ11Qa24/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/F3CHuJDXOufOVrIyRloyJ11Qa24/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F3CHuJDXOufOVrIyRloyJ11Qa24/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=ntXK5ARWIvs:U8RJ0i9tyfA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=ntXK5ARWIvs:U8RJ0i9tyfA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=ntXK5ARWIvs:U8RJ0i9tyfA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=ntXK5ARWIvs:U8RJ0i9tyfA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/ntXK5ARWIvs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/7719952527028484968/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=7719952527028484968" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/7719952527028484968?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/7719952527028484968?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/ntXK5ARWIvs/windows-phone-marketplace-woes.html" title="Windows Phone Marketplace Woes" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><thr:total>9</thr:total><feedburner:origLink>http://www.koushikdutta.com/2010/12/windows-phone-marketplace-woes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEECRnY5fCp7ImA9Wx9SGEg.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-8633313758901362075</id><published>2010-12-08T17:04:00.001-08:00</published><updated>2010-12-08T17:04:27.824-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-08T17:04:27.824-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google Voice" /><category scheme="http://www.blogger.com/atom/ns#" term="GVoice" /><title>GVoice 1.2 Update</title><content type="html">&lt;p&gt;GVoice 1.1 isn’t even out yet (still waiting for Microsoft), but I figured I’d prepare an update the page with what’s waiting in the pipeline for users:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Switched to using the standard “tilt” animation found in Windows Phone lists.&lt;/li&gt;    &lt;li&gt;Voicemail playback highlights the transcript word by word, as seen in the Google Voice web interface.&lt;/li&gt;    &lt;li&gt;Mark as Unread&lt;/li&gt;    &lt;li&gt;Search is snappier&lt;/li&gt;    &lt;li&gt;You no longer have to enter a number during login; instead, a list of all valid phones linked to the account is shown.&lt;/li&gt;    &lt;li&gt;Fixed issue with texts and voicemails being accidentally clicked too easily when scrolling.&lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-8633313758901362075?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/coFCEkK6n5pPhieENRWB2AAzDK4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/coFCEkK6n5pPhieENRWB2AAzDK4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/coFCEkK6n5pPhieENRWB2AAzDK4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/coFCEkK6n5pPhieENRWB2AAzDK4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=BrnsyVpdJos:CF3wNID_I9A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=BrnsyVpdJos:CF3wNID_I9A:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=BrnsyVpdJos:CF3wNID_I9A:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=BrnsyVpdJos:CF3wNID_I9A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/BrnsyVpdJos" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/8633313758901362075/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=8633313758901362075" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/8633313758901362075?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/8633313758901362075?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/BrnsyVpdJos/gvoice-12-update.html" title="GVoice 1.2 Update" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://www.koushikdutta.com/2010/12/gvoice-12-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIHQn8zcCp7ImA9Wx9SF0Q.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-4933199963776462963</id><published>2010-12-04T14:53:00.001-08:00</published><updated>2010-12-07T22:42:13.188-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-07T22:42:13.188-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google Voice" /><category scheme="http://www.blogger.com/atom/ns#" term="GVoice" /><title>GVoice 1.1 Update</title><content type="html">&lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/_1Q1cgK2sxXk/TPrGYqppM8I/AAAAAAAABd0/dvx2xVv60XU/s1600-h/SplashScreenImage%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SplashScreenImage" border="0" alt="SplashScreenImage" src="http://lh6.ggpht.com/_1Q1cgK2sxXk/TPrGZE0PTAI/AAAAAAAABd4/8BYjH4G_Q0c/SplashScreenImage_thumb%5B1%5D.jpg?imgmax=800" width="186" height="307" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Well, GVoice finally got Market approved; and just in time too, since I had a boat load of updates waiting!&lt;/p&gt;  &lt;p&gt;Changelog in the coming 1.1 update (waiting for Market approval… again):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Push is available to trial version users&lt;/strong&gt; (ads enabled) &lt;/li&gt;    &lt;li&gt;Push notifications are now sent for voicemail &lt;/li&gt;    &lt;li&gt;Search Conversations&lt;/li&gt;    &lt;li&gt;Call Log &lt;/li&gt;    &lt;li&gt;Added keyboard auto completion &lt;/li&gt;    &lt;li&gt;Outgoing calls now open a call screen &lt;/li&gt;    &lt;li&gt;Fixed potential application startup crash &lt;/li&gt;    &lt;li&gt;Contact photo downloads are more reliable &lt;/li&gt;    &lt;li&gt;Progress indicator now has a textual description &lt;/li&gt;    &lt;li&gt;Conversations can be deleted &lt;/li&gt;    &lt;li&gt;Google Voice can be dialed via the application menu &lt;/li&gt;    &lt;li&gt;Direct/PIN Dial is available via the settings menu &lt;/li&gt;    &lt;li&gt;Fixed conversation sort order &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-4933199963776462963?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kZ8urD03yPDTbdX0s2KMEyQPklA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kZ8urD03yPDTbdX0s2KMEyQPklA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kZ8urD03yPDTbdX0s2KMEyQPklA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kZ8urD03yPDTbdX0s2KMEyQPklA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=_SBBXTfosEQ:boTTIQeBL8U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=_SBBXTfosEQ:boTTIQeBL8U:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=_SBBXTfosEQ:boTTIQeBL8U:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=_SBBXTfosEQ:boTTIQeBL8U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/_SBBXTfosEQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/4933199963776462963/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=4933199963776462963" title="17 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/4933199963776462963?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/4933199963776462963?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/_SBBXTfosEQ/gvoice-11-update.html" title="GVoice 1.1 Update" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_1Q1cgK2sxXk/TPrGZE0PTAI/AAAAAAAABd4/8BYjH4G_Q0c/s72-c/SplashScreenImage_thumb%5B1%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>17</thr:total><feedburner:origLink>http://www.koushikdutta.com/2010/12/gvoice-11-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQNQ3c8fyp7ImA9Wx9QEEs.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-3125402899642719254</id><published>2010-11-19T18:42:00.001-08:00</published><updated>2010-12-22T15:59:52.977-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-22T15:59:52.977-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google Voice" /><category scheme="http://www.blogger.com/atom/ns#" term="GVoice" /><title>Push Notification Setup for GVoice on Windows Phone 7</title><content type="html">&lt;p align="center"&gt;&lt;font color="#ff0000" size="4"&gt;&lt;strong&gt;Have GVoice 1.2 or later? Please click &lt;/strong&gt;&lt;a href="http://www.koushikdutta.com/2010/12/gvoice-12-push-setup-with-gvmax.html"&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; for really easy instructions!&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000" size="4"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000" size="4"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000" size="4"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;First of all, thanks for using GVoice! I hope you enjoy the application! &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Overview of How Push on GVoice works:&lt;/strong&gt;     &lt;br /&gt;    &lt;br /&gt;Push is done on GVoice by forwarding a copy of all your text and voicemail emails to the GVoice servers. The GVoice server will then notify your phone of the new message. &lt;em&gt;(Privacy is important. So the message is never stored on the server, once it’s received, it is immediately sent to the GVoice phone app and no log or copy is saved.)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;First, to receive push notifications on your phone, put GVoice onto your Home Screen. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_1Q1cgK2sxXk/TOc8fSP4aDI/AAAAAAAAAv8/0EVLdBbW2Sk/s1600-h/IMG_20101119_185422%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="IMG_20101119_185422" border="0" alt="IMG_20101119_185422" src="http://lh3.ggpht.com/_1Q1cgK2sxXk/TOc8fzL8ZxI/AAAAAAAAAwA/0MLWwVoOlQ4/IMG_20101119_185422_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000" size="3"&gt;Verify that you have push enabled in GVoice’s Push Settings menu. It is not on by default (due to Microsoft’s developer guidelines).&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;To test that the application can properly receive push, click the following links to send push notifications to your phone: &lt;/p&gt; &lt;script&gt;
function sendToast()
{
	var uniq = getParameterByName('gvoice_unique_id');
	
if (uniq == null || uniq == '') {
		alert('Please visit this pge using the link provided to you from GVoice Push Settings.');
		return;
	}
	$.ajax({
		url: 'http://tickleservice.appspot.com/toast?toast=Test Message&amp;title=ClockworkMod&amp;applicationId=ClockworkModGoogleVoice&amp;clientId=' + uniq,
		type: 'GET',
		dataType: 'jsonp',
		success: 
			function(msg) {
			}
		});
}

function sendTile()
{
	var uniq = getParameterByName('gvoice_unique_id');
	
if (uniq == null || uniq == '') {
		alert('Please visit this pge using the link provided to you from GVoice Push Settings.');
		return;
	}
	var uniq = getParameterByName('gvoice_unique_id');
	
if (uniq == null || uniq == '')
		return;
	$.ajax({
		url: 'http://tickleservice.appspot.com/badge?background=/Background.png&amp;title=GVoice&amp;applicationId=ClockworkModGoogleVoice&amp;clientId=' + uniq + '&amp;count=' + Math.floor(Math.random()*10),
		type: 'GET',
		dataType: 'jsonp',
		success: 
			function(msg) {
			}
		});
}
&lt;/script&gt;  &lt;div id="testButtons"&gt;&lt;a href="javascript:sendToast()" type="button"&gt;Toast&lt;/a&gt;     &lt;br /&gt;&lt;a href="javascript:sendTile()" type="button"&gt;Badge&lt;/a&gt;     &lt;br /&gt;&lt;/div&gt;  &lt;p&gt;If the previous test worked, let’s set up your Google Voice account to send notifications to your phone through the GVoice service!&lt;/p&gt;  &lt;p&gt;To set up your mail and voice account for GVoice, first let's open your Google Voice account and set up your forwarding settings:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/_1Q1cgK2sxXk/TP8mRIolFNI/AAAAAAAABeM/lcjuxYRFVho/s1600-h/1-GoogleVoiceSettings%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="1-GoogleVoiceSettings" border="0" alt="1-GoogleVoiceSettings" src="http://lh5.ggpht.com/_1Q1cgK2sxXk/TOc8g83mZWI/AAAAAAAABeQ/TAw0vvVl5BI/1-GoogleVoiceSettings_thumb%5B1%5D.jpg?imgmax=800" width="603" height="226" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/_1Q1cgK2sxXk/TOc8ha6wC_I/AAAAAAAAAxc/sgSi57Em9lQ/s1600-h/2-GoogleVoiceWindowsPhoneEdit%5B4%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="2-GoogleVoiceWindowsPhoneEdit" border="0" alt="2-GoogleVoiceWindowsPhoneEdit" src="http://lh5.ggpht.com/_1Q1cgK2sxXk/TOc8iQykmWI/AAAAAAAAAxk/n5-WSHYFdEU/2-GoogleVoiceWindowsPhoneEdit_thumb%5B2%5D.jpg?imgmax=800" width="516" height="407" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Disable SMS forwarding to your phone, or you’ll get two copies of the SMS and two push notifications: One that shows up for the regular Messaging app and one shows up for GVoice.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/_1Q1cgK2sxXk/TOc8ih0IvfI/AAAAAAAAAxs/7MgTgJ4UQDs/s1600-h/3-GoogleVoiceWindowsPhone%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="3-GoogleVoiceWindowsPhone" border="0" alt="3-GoogleVoiceWindowsPhone" src="http://lh4.ggpht.com/_1Q1cgK2sxXk/TOc8jBhcD8I/AAAAAAAAAxw/B5tMLWsbTtI/3-GoogleVoiceWindowsPhone_thumb%5B1%5D.jpg?imgmax=800" width="623" height="375" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;Now, forward your texts and voicemails to your email address. Also disable Voicemail Text notifications.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/_1Q1cgK2sxXk/TOc8joIT2lI/AAAAAAAAAx8/i8EVY5cGX9U/s1600-h/4-GoogleVoiceTextAndVoicemail%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="4-GoogleVoiceTextAndVoicemail" border="0" alt="4-GoogleVoiceTextAndVoicemail" src="http://lh3.ggpht.com/_1Q1cgK2sxXk/TOc8kAVvA4I/AAAAAAAAAyE/ZihzGsfC9vo/4-GoogleVoiceTextAndVoicemail_thumb%5B1%5D.jpg?imgmax=800" width="626" height="517" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;Now, all your messages are being sent to your email. Let’s set up your email to forward them to the GVoice servers. First let’s add your unique forwarding address. Your unique address is:&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;div id="gvoice_unique_id" align="center"&gt;&lt;font color="#ff0000" size="4"&gt;Unique address not available. Please open this page using the link provided in the GVoice app Push Settings page.&lt;/font&gt;&lt;/div&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/_1Q1cgK2sxXk/TOc8kdwBoqI/AAAAAAAAAyM/0HapOgIw3gg/s1600-h/5-GoogleMailSettings%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="5-GoogleMailSettings" border="0" alt="5-GoogleMailSettings" src="http://lh5.ggpht.com/_1Q1cgK2sxXk/TOc8k2P2ywI/AAAAAAAAAyQ/54FohMJ1gng/5-GoogleMailSettings_thumb%5B1%5D.jpg?imgmax=800" width="618" height="129" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/_1Q1cgK2sxXk/TOc8lPN0GwI/AAAAAAAAAyg/b5ULwbyflEo/s1600-h/6-ForwardingSettings%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="6-ForwardingSettings" border="0" alt="6-ForwardingSettings" src="http://lh6.ggpht.com/_1Q1cgK2sxXk/TOc8llF42hI/AAAAAAAAAyo/GOG5hOjKWIY/6-ForwardingSettings_thumb%5B1%5D.jpg?imgmax=800" width="612" height="169" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/_1Q1cgK2sxXk/TOc8mBgqa2I/AAAAAAAAAyw/p083wPOk-ag/s1600-h/7-AddForwarding%5B4%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="7-AddForwarding" border="0" alt="7-AddForwarding" src="http://lh5.ggpht.com/_1Q1cgK2sxXk/TOc8ml1v4aI/AAAAAAAAAy8/qCj7yYNH2HY/7-AddForwarding_thumb%5B2%5D.jpg?imgmax=800" width="568" height="577" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;You will be asked to activate the new forwarding address, but do not worry about it. The email will be automatically activated by the GVoice server.&lt;/p&gt;  &lt;p align="center"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;Let’s filter the emails we want to send to GVoice, we don’t want all your mail!&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/_1Q1cgK2sxXk/TOc8m73pADI/AAAAAAAAAzE/FLj4UiYrYqM/s1600-h/8-MailCreateFilter%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="8-MailCreateFilter" border="0" alt="8-MailCreateFilter" src="http://lh6.ggpht.com/_1Q1cgK2sxXk/TOc8nat90PI/AAAAAAAAAzI/Rq_yCONE_wI/8-MailCreateFilter_thumb%5B1%5D.jpg?imgmax=800" width="636" height="138" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Add&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;txt.voice.google.com OR voice-noreply@google.com&lt;/strong&gt;&lt;/p&gt;  &lt;p align="center"&gt;in the “From” filter.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/_1Q1cgK2sxXk/TOc8n7QR7jI/AAAAAAAAAzQ/p-q3u705dCo/s1600-h/9-Filter%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="9-Filter" border="0" alt="9-Filter" src="http://lh5.ggpht.com/_1Q1cgK2sxXk/TOc8oDSdmLI/AAAAAAAAAzU/rTQdVvd2TTY/9-Filter_thumb%5B1%5D.jpg?imgmax=800" width="576" height="114" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Forward these emails to the forwarding address provided.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/_1Q1cgK2sxXk/TOc8ordmwSI/AAAAAAAAAzY/1LKXKziz-EQ/s1600-h/10-FilterPart2%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="10-FilterPart2" border="0" alt="10-FilterPart2" src="http://lh4.ggpht.com/_1Q1cgK2sxXk/TOc8o5St3JI/AAAAAAAAAzk/OOGir0GHZ7w/10-FilterPart2_thumb%5B1%5D.jpg?imgmax=800" width="535" height="261" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;Whew! You’re done!&lt;/p&gt; &lt;script&gt;

function getParameterByName( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&amp;]"+name+"=([^&amp;#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return decodeURIComponent(results[1].replace(/\+/g, " "));
}

var gvoice_unique_id = $("#gvoice_unique_id");
var uniq = getParameterByName('gvoice_unique_id');
if (uniq != null &amp;&amp; uniq != '') {
 gvoice_unique_id.html('&lt;font color="#ff0000" size="4"&gt;' + uniq + "@wp7voice.appspotmail.com&lt;/font&gt;");
}
&lt;/script&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-3125402899642719254?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cpP9Mgi_z9LWXtGmm5IZKD6stGo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cpP9Mgi_z9LWXtGmm5IZKD6stGo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cpP9Mgi_z9LWXtGmm5IZKD6stGo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cpP9Mgi_z9LWXtGmm5IZKD6stGo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=2K6wKhS0_Ck:ez0CKrqv4V0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=2K6wKhS0_Ck:ez0CKrqv4V0:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=2K6wKhS0_Ck:ez0CKrqv4V0:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=2K6wKhS0_Ck:ez0CKrqv4V0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/2K6wKhS0_Ck" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/3125402899642719254/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=3125402899642719254" title="24 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/3125402899642719254?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/3125402899642719254?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/2K6wKhS0_Ck/push-notification-setup-for-gvoice-on.html" title="Push Notification Setup for GVoice on Windows Phone 7" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_1Q1cgK2sxXk/TOc8fzL8ZxI/AAAAAAAAAwA/0MLWwVoOlQ4/s72-c/IMG_20101119_185422_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>24</thr:total><feedburner:origLink>http://www.koushikdutta.com/2010/11/push-notification-setup-for-gvoice-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUMRHczeyp7ImA9WhRWF0w.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-6814776784721143483</id><published>2010-10-12T12:57:00.000-07:00</published><updated>2012-01-04T13:58:05.983-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-04T13:58:05.983-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ROM Manager" /><title>Porting Clockwork Recovery to New Devices</title><content type="html">&lt;p&gt;&lt;em&gt;Update/Preface:&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;It is difficult for me to port recovery for a device I don’t have. So, people can attempt to port it using this guide. However, if you want it done properly, and probably quicker, you can loan the device to me personally at:&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Koushik Dutta&lt;/em&gt; &lt;em&gt;2721 1st Ave 507&lt;/em&gt; &lt;em&gt;Seattle, WA 98121&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;The package must include: &lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;The rooted phone.&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;&lt;em&gt;A return packing slip to your address.&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;&lt;em&gt;A signed statement saying: “I, &amp;lt;your name here&amp;gt;, am lending this device, &amp;lt;name of device&amp;gt;, to Koushik Dutta so that he can try to port Clockwork Recovery to the device. I understand that rooting a phone voids the warranty and tampering with the software may render the device nonfunctional. I realize and accept that the phone may not be functional when it is returned. Koushik Dutta is not liable for any damages to the device.”&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;&lt;em&gt;BEFORE SENDING ME THE PACKAGE, CONFIRM WITH ME THAT I AM AVAILABLE TO PORT THE RECOVERY.&lt;/em&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;em&gt;It will take around a week, and there are no gaurantees whether I will actually be able to do it (due to proprietary software, locked bootloaders, my schedule, etc). After a week (generally quicker), I will send it back. I’m a trustworthy guy and am well known in the Android community. And I’ve already done this for several loaner devices. &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://lh3.ggpht.com/_1Q1cgK2sxXk/TQhnbnLMAhI/AAAAAAAABh4/Bemlm8-LKXw/wlEmoticon-smile%5B2%5D.png?imgmax=800" /&gt; So you don’t need to worry about the safety of your precious hardware.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Otherwise, continue on the to the guide!&lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;This guide will assume you have some familiarity with doing an &lt;a href="http://source.android.com/source/download.html"&gt;Android Build&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;This guide will work for phones that use a standard Android boot image format. This guide will not work for Samsung phones which use an initramfs. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;First, let's check out the CyanogenMod tree. The CyanogenMod repository contains Clockwork Recovery, which is part of a full Android build. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;repo init -u git://github.com/CyanogenMod/android.git -b gingerbread&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;repo sync&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;make -j4 otatools&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Now, use &lt;a href="http://koush.tandtgaming.com/test/dump_image"&gt;dump_image&lt;/a&gt; or dd to dump your recovery or boot image from a running phone and copy it to your computer somewhere. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;dump_image boot boot.img&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;To build Android from source for a new device, you need to set up a board config and its makefiles. This is generally a long and tedious process. Luckily, if you are only building recovery, it is a lot easier. From the root of your Android source directory (assuming you've run envsetup.sh), run the following (substituting names appropriately): &lt;/p&gt;  &lt;p&gt;&lt;b&gt;build/tools/device/mkvendor.sh device_manufacturer_name device_name /your/path/to/the/boot.img&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;You will receive the confirmation &amp;quot;Done!&amp;quot; if everything worked. The mkvendor.sh script will also have created the following directory in your Android source tree: &lt;/p&gt;  &lt;p&gt;&lt;b&gt;manufacturer_name/device_name&lt;/b&gt; &lt;/p&gt;  &lt;p&gt;Now, type the following:&lt;b&gt; &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;lunch full_&lt;span style="font-style: italic"&gt;device_name&lt;/span&gt;-eng&lt;/b&gt; &lt;/p&gt;  &lt;p&gt;This will set the build system up to build for your new device. Open up the directory in a file explorer or IDE. You should have the following files: AndroidBoard.mk, AndroidProducts.mk, BoardConfig.mk, device_&lt;device_name&gt;.mk, kernel, system.prop, recovery.fstab, and vendorsetup.sh.&lt;/p&gt;  &lt;p&gt;&lt;/device_name&gt;The two files you are interested in are recovery.fstab and kernel. The kernel in that directory is the stock one that was extracted from the boot.img that was provided earlier. For the most part, recovery.fstab will work on most devices that have mtd, emmc, or otherwise named partitions. But if not, recovery.fstab will need to be tweaked to support mounts and their mount points. For example, if your /sdcard mount is /dev/block/mmcblk1p1, you would need the following lines in your BoardConfig.mk: &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;/sdcard vfat /dev/block/mmcblk1p1 &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Once the recovery.fstab has been properly setup, you can build the recovery using:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;make -j4 recoveryimage&lt;/b&gt; &lt;/p&gt;  &lt;p&gt;Your recovery can then be found at $OUT/recovery.img. If you are in need of building a fakeflash recovery, you will need to run the following to create the update.zip that hot replaces the recovery: &lt;/p&gt;  &lt;p&gt;&lt;b&gt;make -j4 recoveryzip&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Once this is done, build, and tested, notify me, &amp;quot;koush&amp;quot;, on Github and I can build official releases and add ROM Manager support! &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Tip&lt;/b&gt;: Run &amp;quot;make clobber&amp;quot; between builds if you change the BoardConfig.mk, or the change will not get picked up.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-6814776784721143483?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hvojJ9Nwb6qCudGBvSq5AF8lw-Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hvojJ9Nwb6qCudGBvSq5AF8lw-Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hvojJ9Nwb6qCudGBvSq5AF8lw-Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hvojJ9Nwb6qCudGBvSq5AF8lw-Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=mRSI3U0SuhA:saajferSky8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=mRSI3U0SuhA:saajferSky8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=mRSI3U0SuhA:saajferSky8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=mRSI3U0SuhA:saajferSky8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/mRSI3U0SuhA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/6814776784721143483/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=6814776784721143483" title="62 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/6814776784721143483?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/6814776784721143483?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/mRSI3U0SuhA/porting-clockwork-recovery-to-new.html" title="Porting Clockwork Recovery to New Devices" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_1Q1cgK2sxXk/TQhnbnLMAhI/AAAAAAAABh4/Bemlm8-LKXw/s72-c/wlEmoticon-smile%5B2%5D.png?imgmax=800" height="72" width="72" /><thr:total>62</thr:total><feedburner:origLink>http://www.koushikdutta.com/2010/10/porting-clockwork-recovery-to-new.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAHR3w_eCp7ImA9Wx9QEEg.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-7780241446928148535</id><published>2010-09-23T00:48:00.000-07:00</published><updated>2010-12-22T14:25:36.240-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-22T14:25:36.240-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ROM Manager" /><title>New ROM Manager Feature - Web Connect</title><content type="html">&lt;p&gt;Some people really prefer to browse a forum and learn about a ROM before downloading it. And some developers don't want to go through the trouble of maintaining a ROM Manifest.&lt;/p&gt;  &lt;p&gt;What if you could click a link on a forum, in your computer's browser, and it started downloading the ROM... on your phone? Introducing ROM Manager's latest and greatest Premium feature: Web Connect.&lt;/p&gt;  &lt;p&gt;Enough talking about it. Let's try it! &lt;span&gt;&lt;span style="font-weight: bold"&gt;You must have Froyo!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Get the newest ROM Manager (at least 2.0.2.9). &lt;/li&gt;    &lt;li&gt;Click the Menu button and click Web Connect to do your one-time setup. &lt;/li&gt;    &lt;li&gt;Choose the Google account you are normally logged in with on your computer. &lt;/li&gt;    &lt;li&gt;Done! &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Now, click this link on your computer to download Superuser... onto your phone:&lt;br/&gt;&lt;a href="http://bit.ly/exvF6q" target="_blank"&gt;Superuser 2.3.6.1&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Cool huh? You a developer and want to add support? Use the following to get a bit.ly link set up to your ROM using Web Connect! &lt;script&gt;
        function generatelink() {
            var rn = $("#romname")[0];
            var ru = $("#romurl")[0];
            var bitly = 'https://tickleservice.appspot.com/authorizedtickle?applicationId=ROM Manager&amp;data.url='
		+ escape(ru.value) + "&amp;data.name=" + rn.value + "&amp;failure_redirect="
		+ escape('http://rommanager.appspot.com/webconnectfailure.html') + "&amp;success_redirect=" + escape('http://rommanager.appspot.com/webconnectsuccess.html');
            $.ajax({
                url: "http://api.bit.ly/v3/shorten?login=koush&amp;apiKey=R_b12315a324b430e592df51c655fa2691&amp;longUrl=" + escape(bitly),
                type: "GET",
                dataType: "jsonp",
                success: function(msg) {
                    var shortlink = $("#shortlink");
                    var h = '&lt;a href="' + msg.data.url + '" target="\'_blank\'"&gt;' + rn.value + "&lt;/a&gt;";
                    shortlink.html(h);
                }
            });
        }
&lt;/script&gt;&lt;/p&gt; &lt;form&gt;   &lt;p&gt;&lt;textarea id="romname" cols="50" rows="1"&gt;Enter your ROM Name Here&lt;/textarea&gt;&lt;/p&gt;    &lt;p&gt;&lt;textarea id="romurl" cols="50" rows="1"&gt;Enter your ROM URL here. Direct downloads only. No Mediafire, etc.&lt;/textarea&gt; &lt;/p&gt;    &lt;p&gt;&lt;input onclick="javascript:generatelink()" type="button" value="Generate Link" /&gt; &lt;/p&gt; &lt;/form&gt;&lt;span&gt;   &lt;div id="shortlink"&gt;&lt;/div&gt; &lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-7780241446928148535?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OtGo7wVdebVuYI3NmmkrsYRwHTo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OtGo7wVdebVuYI3NmmkrsYRwHTo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OtGo7wVdebVuYI3NmmkrsYRwHTo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OtGo7wVdebVuYI3NmmkrsYRwHTo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=nPV4jVb1nzI:43DZMAN3WwE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=nPV4jVb1nzI:43DZMAN3WwE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=nPV4jVb1nzI:43DZMAN3WwE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=nPV4jVb1nzI:43DZMAN3WwE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/nPV4jVb1nzI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/7780241446928148535/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=7780241446928148535" title="30 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/7780241446928148535?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/7780241446928148535?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/nPV4jVb1nzI/new-rom-manager-feature-web-connect.html" title="New ROM Manager Feature - Web Connect" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><thr:total>30</thr:total><feedburner:origLink>http://www.koushikdutta.com/2010/09/new-rom-manager-feature-web-connect.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIFRXw_eyp7ImA9Wx5QEk0.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-6265132046784824590</id><published>2010-08-18T19:23:00.002-07:00</published><updated>2010-08-30T14:41:54.243-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-30T14:41:54.243-07:00</app:edited><title>Droid X Recovery (and Droid 2 too!)</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1Q1cgK2sxXk/TGyVwFTeDaI/AAAAAAAAAgw/miGn9sABdnA/s1600/logo2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 238px; height: 400px;" src="http://1.bp.blogspot.com/_1Q1cgK2sxXk/TGyVwFTeDaI/AAAAAAAAAgw/miGn9sABdnA/s400/logo2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5506941097657372066" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;br/&gt;
Well, this was a bitch.
&lt;br/&gt;
&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;Caveats:&lt;/span&gt;
&lt;br/&gt;
This is not a *real* recovery. The way this recovery works is by hijacking portions of your boot process during system initialization and starting into recovery instead. So, if you hose your system *COMPLETELY* you will need to SBF. Specifically, if your logwrapper, logwrapper.bin, or hijack binary are missing from /system/bin, you will be screwed.
&lt;br/&gt;
&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;Do I have to be rooted to run this?&lt;/span&gt;
&lt;br/&gt;
Yes.
&lt;br/&gt;
&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;So can we now install custom ROMs?&lt;/span&gt;
&lt;br/&gt;
Yes, but you can't replace the kernel or boot image. But really, once you have access to /system, anything is possible. It will just take a little hackery.
&lt;br/&gt;
&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;How does this work?&lt;/span&gt;
&lt;br/&gt;
When your device boots up, there is a init.rc script in your boot image that runs various components found in /system. The Droid X recovery bootstrap mimics the "logwrapper" binary. The hijacker then looks for "/data/.recovery_mode", and if it finds it, it unmounts /system to prevent android from starting. It then starts up recovery instead.
&lt;br/&gt;
&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;How do I boot into recovery?&lt;/span&gt;
&lt;br/&gt;
You can manually create the /data/.recovery_mode via a terminal file and simply reboot, and you will be in recovery. Or you can use the handy Droid X Recovery Bootstrap application to reboot into recovery.
&lt;br/&gt;
&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;What if my phone won't boot? How do I get into recovery without the app?&lt;/span&gt;
&lt;br/&gt;
When the hijacker runs, it will automatically create the "/data/.recovery_mode" file after it finishes. This tells the system that the next time it boots, it should boot into recovery. But, when the system starts, the Droid X Recovery Bootstrap will then delete that file when Android is fully started, to prevent you from booting into recovery. So what does this mean? If you fail to boot, simply pull your battery, and your next boot will be into recovery (unless your /system is *really* hosed, in which case you need to SBF).
&lt;br/&gt;
&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;How do I fix my phone if I really mess it up?&lt;/span&gt;
&lt;br/&gt;
Use an SBF. Google it. &lt;a href=" http://twitter.com/b16a2smith/status/21544626803"&gt;http://twitter.com/b16a2smith/status/21544626803&lt;/a&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;Why does the Droid X Recovery Bootstrap start on boot?&lt;/span&gt;
&lt;br/&gt;
As mentioned above, it needs to log that your phone booted successfully and recovery mode is not necessary. It also replaces your "adb daemon" with one that has root permissions, allowing for easier usage of the adb command.
&lt;br/&gt;
&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;Will this work with ROM Manager?&lt;/span&gt;
&lt;br/&gt;
Yep! But you must run the Bootstrap app and leave it installed.
&lt;br/&gt;
&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;Is this open source?
&lt;br/&gt;
&lt;/span&gt;Yep.
&lt;br/&gt;
Recovery: &lt;a href="http://github.com/koush/android_bootable_recovery"&gt;http://github.com/koush/android_bootable_recovery&lt;/a&gt;
&lt;br/&gt;
Droid X Bootstrap: &lt;a href="http://github.com/koush/DroidXBootstrap"&gt;http://github.com/koush/DroidXBootstrap&lt;/a&gt;
&lt;br/&gt;
Droid X Hijack: &lt;a href="http://github.com/koush/android_vendor_motorola_droidx"&gt;http://github.com/koush/android_vendor_motorola_droidx&lt;/a&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;span style="font-weight:bold;"&gt;OK STOP TALKING, WHERE DO I GET IT?&lt;/span&gt;
&lt;br/&gt;
You can donate and grab it for $2 off the Android Market (search for Droid X Recovery Bootstrap or Droid 2 Recovery Bootstrap), or you can download it for free here:
&lt;br/&gt;
&lt;a href="http://koush.tandtgaming.com//motorola/droidx/DroidXBootstrap.apk"&gt;Droid X Recovery Bootstrap&lt;/a&gt;
&lt;br/&gt;
&lt;a href="http://koush.tandtgaming.com//motorola/droid2/Droid2Bootstrap.apk"&gt;Droid 2 Recovery Bootstrap&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-6265132046784824590?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iWIaNiUJOCXgGxwB9Qy6NbjII8E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iWIaNiUJOCXgGxwB9Qy6NbjII8E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iWIaNiUJOCXgGxwB9Qy6NbjII8E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iWIaNiUJOCXgGxwB9Qy6NbjII8E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=kfOTz9IlFuM:aL4FI_Lfvx0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=kfOTz9IlFuM:aL4FI_Lfvx0:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=kfOTz9IlFuM:aL4FI_Lfvx0:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=kfOTz9IlFuM:aL4FI_Lfvx0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/kfOTz9IlFuM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/6265132046784824590/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=6265132046784824590" title="125 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/6265132046784824590?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/6265132046784824590?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/kfOTz9IlFuM/droid-x-recovery.html" title="Droid X Recovery (and Droid 2 too!)" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_1Q1cgK2sxXk/TGyVwFTeDaI/AAAAAAAAAgw/miGn9sABdnA/s72-c/logo2.png" height="72" width="72" /><thr:total>125</thr:total><feedburner:origLink>http://www.koushikdutta.com/2010/08/droid-x-recovery.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUMSHs-eip7ImA9WxFbEE0.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-5122185531288620534</id><published>2010-07-01T09:01:00.000-07:00</published><updated>2010-07-01T09:04:49.552-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-01T09:04:49.552-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="LOL" /><title>What good are ROMs and Themes without a Recovery?</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1Q1cgK2sxXk/TCy8Du2tbGI/AAAAAAAAAe4/t_aBtrfxUG4/s1600/RECOVERY.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 271px; height: 400px;" src="http://2.bp.blogspot.com/_1Q1cgK2sxXk/TCy8Du2tbGI/AAAAAAAAAe4/t_aBtrfxUG4/s400/RECOVERY.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5488968818160921698" /&gt;&lt;/a&gt;

&lt;font size=10&gt;&lt;center&gt;Vote &lt;a href="http://alldroid.org/SiteSurveys.aspx"&gt;Koush&lt;/a&gt;.&lt;/center&gt;&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-5122185531288620534?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/l-ydXkQVp2ST5T4Y5MejxEMbao4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l-ydXkQVp2ST5T4Y5MejxEMbao4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/l-ydXkQVp2ST5T4Y5MejxEMbao4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l-ydXkQVp2ST5T4Y5MejxEMbao4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=DR2yhURkLwM:m7SnGcjwC0w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=DR2yhURkLwM:m7SnGcjwC0w:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=DR2yhURkLwM:m7SnGcjwC0w:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=DR2yhURkLwM:m7SnGcjwC0w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/DR2yhURkLwM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/5122185531288620534/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=5122185531288620534" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/5122185531288620534?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/5122185531288620534?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/DR2yhURkLwM/what-good-are-roms-and-themes-without.html" title="What good are ROMs and Themes without a Recovery?" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_1Q1cgK2sxXk/TCy8Du2tbGI/AAAAAAAAAe4/t_aBtrfxUG4/s72-c/RECOVERY.png" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://www.koushikdutta.com/2010/07/what-good-are-roms-and-themes-without.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YMSXk9fSp7ImA9WxFWEkU.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-5946985085294016967</id><published>2010-05-30T21:44:00.000-07:00</published><updated>2010-05-30T21:46:28.765-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-30T21:46:28.765-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android Mono" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Mono" /><title>More Progress on Writing Android Applications in Mono</title><content type="html">&lt;center&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/NUi-ZrkbCuo&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/NUi-ZrkbCuo&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-5946985085294016967?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8Mt7JYI4DYTG5eEBIjdMqBu8-CU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8Mt7JYI4DYTG5eEBIjdMqBu8-CU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8Mt7JYI4DYTG5eEBIjdMqBu8-CU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8Mt7JYI4DYTG5eEBIjdMqBu8-CU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=sBMqj0BaYDE:6mwy6mH3P-Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=sBMqj0BaYDE:6mwy6mH3P-Y:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=sBMqj0BaYDE:6mwy6mH3P-Y:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=sBMqj0BaYDE:6mwy6mH3P-Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/sBMqj0BaYDE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/5946985085294016967/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=5946985085294016967" title="14 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/5946985085294016967?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/5946985085294016967?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/sBMqj0BaYDE/more-progress-on-writing-android.html" title="More Progress on Writing Android Applications in Mono" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><thr:total>14</thr:total><feedburner:origLink>http://www.koushikdutta.com/2010/05/more-progress-on-writing-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QDQHw6cSp7ImA9WxFXEU4.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-846776537501380452</id><published>2010-05-17T13:41:00.000-07:00</published><updated>2010-05-17T14:22:51.219-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-17T14:22:51.219-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android Mono" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Mono" /><title>Mono on Android: State of the Union</title><content type="html">Having mostly finished up my surprisingly successful ROM Manager and ClockworkMod Recovery, I finally turned my attentions back to &lt;a href="http://github.com/koush/androidmono"&gt;androidmono&lt;/a&gt;. Though Miguel recently announced the &lt;a href="http://tirania.org/blog/archive/2010/Feb-17.html"&gt;MonoDroid&lt;/a&gt; project, there's still room for a open source/hobbyist version. :) (And I need something to work on when I am bored)
&lt;br/&gt;
When I put the project down a few months ago, I had very rough bindings to the Java API. I recently dumped the approach I took (albeit very cool), in favor of using &lt;a href="http://jni4net.sourceforge.net/"&gt;jni4net&lt;/a&gt;. jni4net is a similar project that allows embedding a JVM into Microsoft's CLR, or vice versa. It only took a little bit of tweaking to make it work on Dalvik with Mono (I also hacked off a lot of unnecessary stuff that jni4net provides). So the following file:
&lt;br/&gt;
&lt;pre class="githubfile" file="jni/MonoJavaBridge/HelloWorld/HelloWorldActivity.cs" repository="androidmono" user="koush" branch="devel"&gt;&lt;/pre&gt;
&lt;br/&gt;
Gives you this activity:
&lt;br/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1Q1cgK2sxXk/S_Guly9cdHI/AAAAAAAAAeg/b0jaPJVvyg8/s1600/5554_android-2.1-1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 230px;" src="http://3.bp.blogspot.com/_1Q1cgK2sxXk/S_Guly9cdHI/AAAAAAAAAeg/b0jaPJVvyg8/s320/5554_android-2.1-1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5472346986589746290" /&gt;&lt;/a&gt;
&lt;br/&gt;
(Note: the code above is being displayed from my github repo and may change and leave the image out of date.)
&lt;br/&gt;
I hacked up a Java/C# project to reflect on the Android SDK jar and create a &lt;a href="http://github.com/koush/androidmono/tree/devel/jni/MonoJavaBridge/android/"&gt;C# android project&lt;/a&gt; that binds to the Java APIs via JNI. So, how it sort of works:&lt;br/&gt;
&lt;list&gt;
&lt;li&gt;Create a class library and start coding up your services and activities.&lt;/li&gt;
&lt;li&gt;Create a matching Java project (using the Android template as found on github) that uses the same namespace as your C# project.&lt;/li&gt;
&lt;li&gt;Create "native" method stubs for all the overridden methods on your C#/&lt;a href="http://github.com/koush/androidmono/blob/devel/jni/MonoJavaBridge/HelloWorld/Android/src/com/koushikdutta/helloworld/HelloWorldActivity.java"&gt;Java doppleganger&lt;/a&gt; types. See &lt;a href="http://github.com/koush/androidmono/blob/devel/jni/MonoJavaBridge/HelloWorld/Android/src/com/koushikdutta/helloworld/HelloWorldActivity.java"&gt;here&lt;/a&gt; for an example.&lt;/li&gt;
&lt;li&gt;The native methods get bound to the C# implementations at runtime automagically at runtime.&lt;/li&gt;
&lt;/list&gt;
&lt;br/&gt;
There's still a lot of work left to do: MonoDevelop template and plugin, a tool to create Java dopplegangers for each C# object via reflection, soft debugger support, translating Java's "OnSomeEvent" interfaces into true C# events/delegates, convenence extension methods, support for constructors (a Java constructor can not be "native"), and more. I wouldn't even say this is in Alpha stages yet, but it *works*.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-846776537501380452?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZWtGHydK5dfmpVZD4QY14yYLvWw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZWtGHydK5dfmpVZD4QY14yYLvWw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZWtGHydK5dfmpVZD4QY14yYLvWw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZWtGHydK5dfmpVZD4QY14yYLvWw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=MvMx4DR0Q9E:2lDjSFN8cHI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=MvMx4DR0Q9E:2lDjSFN8cHI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=MvMx4DR0Q9E:2lDjSFN8cHI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=MvMx4DR0Q9E:2lDjSFN8cHI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/MvMx4DR0Q9E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/846776537501380452/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=846776537501380452" title="18 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/846776537501380452?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/846776537501380452?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/MvMx4DR0Q9E/mono-on-android-state-of-union.html" title="Mono on Android: State of the Union" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_1Q1cgK2sxXk/S_Guly9cdHI/AAAAAAAAAeg/b0jaPJVvyg8/s72-c/5554_android-2.1-1.jpg" height="72" width="72" /><thr:total>18</thr:total><feedburner:origLink>http://www.koushikdutta.com/2010/05/mono-on-android-state-of-union.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAHRnY4eyp7ImA9WhRQGUo.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-6441544914338492105</id><published>2010-03-22T00:52:00.000-07:00</published><updated>2011-12-15T09:38:57.833-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-15T09:38:57.833-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ROM Manager" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Recovery" /><title>Adding Your ROM to ROM Manager</title><content type="html">&lt;div&gt;&lt;b&gt;&lt;i&gt;Update: You can now host your ROM on ROM Manager's high speed server for free using &lt;a href="http://developer.clockworkmod.com"&gt;ROM Manager Developer Portal&lt;/a&gt;! The following instructions are for advanced users that want fine tuned control over their ROM list, and want to utilize some of the advanced features. ROM Share will automatically host and setup your ROM for you in ROM Manager; all you need to do is upload the update.zip!&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;First, you'll then want to get yourself listed in the list of developers in ROM Manager:&lt;br&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1Q1cgK2sxXk/S6c_TAlcmnI/AAAAAAAAAdY/liWj6_Hi7NQ/s1600-h/developerlist.png"&gt;&lt;img style="text-align: center; margin: 0px auto 10px; width: 192px; display: block; height: 320px; cursor: hand" id="BLOGGER_PHOTO_ID_5451395469762402930" border="0" alt="" src="http://2.bp.blogspot.com/_1Q1cgK2sxXk/S6c_TAlcmnI/AAAAAAAAAdY/liWj6_Hi7NQ/s320/developerlist.png"&gt;&lt;/a&gt; &lt;br&gt;To do that, create a JavaScript file that looks like this to describe where to find information about your ROMs: &lt;br&gt;&lt;pre class="githubfile" file="samples/developer.js" repository="ROMManagerManifest" user="koush" branch="gh-pages"&gt;&lt;/pre&gt;&lt;br&gt;Make sure that the URL you provide for your ROM list above will not ever need to change. I don't like doing extra work! Send me that JavaScript you just created. I'll need to add it to the &lt;a href="http://www.clockworkmod.com/ROMManagerManifest/manifests.js"&gt;ROM Manager master manifest&lt;/a&gt; (which has the list of all the developers and their respective ROM list URLs) before it will show up in ROM Manager. The best way to send it to me is by &lt;a href="http://github.com/koush/ROMManagerManifest/issues"&gt;opening an issue on ROMManagerManifest on Github&lt;/a&gt;. If you are super awesome, you can fork, edit the manifest, and send me a pull request. Do NOT email me your manifest. &lt;br&gt;&lt;br&gt;Now, you'll want to describe your list of ROMs that the user sees when they click you: &lt;br&gt;&lt;br&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1Q1cgK2sxXk/S6c_x6FP-YI/AAAAAAAAAdg/nL-znqTivnQ/s1600-h/romlist.png"&gt;&lt;img style="text-align: center; margin: 0px auto 10px; width: 192px; display: block; height: 320px; cursor: hand" id="BLOGGER_PHOTO_ID_5451396000592689538" border="0" alt="" src="http://4.bp.blogspot.com/_1Q1cgK2sxXk/S6c_x6FP-YI/AAAAAAAAAdg/nL-znqTivnQ/s320/romlist.png"&gt;&lt;/a&gt; To do that, you need to create another JavaScript file that will live at the URL you provided. It should look something like &lt;a href="http://github.com/koush/ROMManagerManifest/raw/gh-pages/samples/simplemanifest.js"&gt;this&lt;/a&gt;: &lt;br&gt;&lt;br&gt;&lt;pre class="githubfile" file="samples/simplemanifest.js" repository="ROMManagerManifest" user="koush" branch="gh-pages"&gt;&lt;/pre&gt;&lt;br&gt;&lt;br&gt;And that's it! Your ROM is now listed in ROM Manager! &lt;br&gt;&lt;br&gt;But, if you want to use the more advanced features of ROM Manager, such as download mirroring, and ROM customization, check out this manifest: &lt;br&gt;&lt;pre class="githubfile" file="samples/manifest.js" repository="ROMManagerManifest" user="koush" branch="gh-pages"&gt;&lt;/pre&gt;&lt;br&gt;&lt;br&gt;Note that you can do cool things that install a sequence of installation zip files. "choices" makes a user choose between several zips (use a URL of "" for no action). Only one of those choices will be installed. You can also have multiple choice selections. And "addons" lets the user choose any number of additional zips to install. You can view &lt;a href="http://github.com/koush/ROMManagerManifest/raw/gh-pages/cyanogenmod.js"&gt;my manifest&lt;/a&gt; for a full sample. &lt;br&gt;&lt;br&gt;Finally, to register your ROM for OTA updates, you need to edit your /system/build.prop in your ROM to include your Developer ID ro.modversion (as mentioned above) so ROM Manager can identify the version of your ROM. This is optional as well, but why not get OTA updates if it's just a couple lines of settings! &lt;br&gt;&lt;br&gt;&lt;span style="font-weight: bold"&gt;ro.rommanager.developerid=cyanogen &lt;br&gt;ro.modversion=CyanogenMod-5.0.5-Droid&lt;/span&gt; &lt;br&gt;&lt;br&gt;And that's it! Once you upload that file, your ROM will now be available to other Premium users! Good luck, and let me know if you encounter any bugs or need help!   &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-6441544914338492105?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/INcZhqxIvuB1l07Mj-MP01sDZ8U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/INcZhqxIvuB1l07Mj-MP01sDZ8U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/INcZhqxIvuB1l07Mj-MP01sDZ8U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/INcZhqxIvuB1l07Mj-MP01sDZ8U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=FmojmojoGOQ:ojHWBHQWX48:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=FmojmojoGOQ:ojHWBHQWX48:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=FmojmojoGOQ:ojHWBHQWX48:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=FmojmojoGOQ:ojHWBHQWX48:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/FmojmojoGOQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/6441544914338492105/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=6441544914338492105" title="25 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/6441544914338492105?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/6441544914338492105?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/FmojmojoGOQ/rom-manager-and-third-party-roms.html" title="Adding Your ROM to ROM Manager" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_1Q1cgK2sxXk/S6c_TAlcmnI/AAAAAAAAAdY/liWj6_Hi7NQ/s72-c/developerlist.png" height="72" width="72" /><thr:total>25</thr:total><feedburner:origLink>http://www.koushikdutta.com/2010/03/rom-manager-and-third-party-roms.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMFR3w4eSp7ImA9WhdTEk4.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-6274470004145090828</id><published>2010-02-26T10:24:00.001-08:00</published><updated>2011-07-09T10:26:56.231-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-09T10:26:56.231-07:00</app:edited><title>ROM Manager and Clockwork Recovery Image</title><content type="html">ROM Manager is a Android front end to the Clockwork Recovery image. &lt;center&gt;&lt;a href="http://lh6.ggpht.com/_1Q1cgK2sxXk/TaqyHV9uVDI/AAAAAAAABpY/lXI93HbPxk8/s1600-h/wompa%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="wompa" border="0" alt="wompa" src="http://lh4.ggpht.com/_1Q1cgK2sxXk/TaqyH1yK1WI/AAAAAAAABpc/y54eTVz7zNo/wompa_thumb%5B1%5D.png?imgmax=800" width="189" height="313" /&gt;&lt;/a&gt;&lt;/center&gt;Features of the recovery image include Nandroid backup, adb shell, mount USB storage, advanced update.zip options (ignore asserts and signature checks), and file browser (so you can place your zips in subdirectories and organize them).   &lt;br /&gt;  &lt;br /&gt;&lt;center&gt;&lt;img src="http://2.bp.blogspot.com/_1Q1cgK2sxXk/S4gS54XsfBI/AAAAAAAAAco/-WpfrhaAWNA/s320/main.png" /&gt; &lt;img src="http://3.bp.blogspot.com/_1Q1cgK2sxXk/S4gTB09ZPAI/AAAAAAAAAcw/pC0y1NESpnI/s320/directory.png" /&gt;&lt;/center&gt;  &lt;br /&gt;The easiest way, by far, to install the recovery is by downloading ROM Manager off the market. But for those that would prefer a manual installation, you can grab the APK and recovery image below.   &lt;br /&gt;  &lt;br /&gt;&lt;a href="http://download.clockworkmod.com/recoveries/RomManager.apk"&gt;ROM Manager&lt;/a&gt; (&lt;a href="http://gh-pages.clockworkmod.com/ROMManagerManifest/CHANGELOG.txt"&gt;Changelog&lt;/a&gt;)   &lt;br /&gt;  &lt;br /&gt;Don't see your phone? Email me if you want to help me get it working!   &lt;br /&gt;  &lt;div class="rommanagermanifest"&gt;&lt;/div&gt; &lt;script src="http://koush.github.com/ROMManagerManifest/sprintf.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript" src="http://koush.github.com/ROMManagerManifest/rommanager.js" type="text/javascript"&gt;&lt;/script&gt;  &lt;br /&gt;And of course, all the source can be found on &lt;a href="http://github.com/koush/android_bootable_recovery"&gt;Github&lt;/a&gt;.      &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-6274470004145090828?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zMcBFoLYrKquX7RMzfYm2kPRa7A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zMcBFoLYrKquX7RMzfYm2kPRa7A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zMcBFoLYrKquX7RMzfYm2kPRa7A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zMcBFoLYrKquX7RMzfYm2kPRa7A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=GG4jifMbgqQ:NFWipQSBu9Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=GG4jifMbgqQ:NFWipQSBu9Y:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=GG4jifMbgqQ:NFWipQSBu9Y:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=GG4jifMbgqQ:NFWipQSBu9Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/GG4jifMbgqQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/6274470004145090828/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=6274470004145090828" title="581 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/6274470004145090828?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/6274470004145090828?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/GG4jifMbgqQ/clockwork-recovery-image.html" title="ROM Manager and Clockwork Recovery Image" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_1Q1cgK2sxXk/TaqyH1yK1WI/AAAAAAAABpc/y54eTVz7zNo/s72-c/wompa_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>581</thr:total><feedburner:origLink>http://www.koushikdutta.com/2010/02/clockwork-recovery-image.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQBQH85eyp7ImA9WxBWGEo.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-468540574883313089</id><published>2010-02-11T00:49:00.000-08:00</published><updated>2010-02-11T00:52:31.123-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-11T00:52:31.123-08:00</app:edited><title>Working Vendor Configuration for Motorola Sholes (Droid)</title><content type="html">I had a spare Droid (two actually) sitting on my desk at work, so I spent some time hacking up a working vendor configuration for the phone. Took me a few days, but it all worked! &lt;a href="http://alldroid.org/viewtopic.php?f=210&amp;amp;t=2260"&gt;I ended up flashing Android 2.1r2 to it.&lt;/a&gt; &lt;div&gt;Happy Hacking! Head on over to my &lt;a href="http://github.com/koush/android_vendor_motorola_sholes-open"&gt;sholes-open Github repository.&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/8001170587821659759-468540574883313089?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bfcOgjzsisQHlqXDf62LPFGic0c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bfcOgjzsisQHlqXDf62LPFGic0c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bfcOgjzsisQHlqXDf62LPFGic0c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bfcOgjzsisQHlqXDf62LPFGic0c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=iObdi-gUxsQ:Ogd5FV3UUgI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=iObdi-gUxsQ:Ogd5FV3UUgI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=iObdi-gUxsQ:Ogd5FV3UUgI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=iObdi-gUxsQ:Ogd5FV3UUgI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/iObdi-gUxsQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/468540574883313089/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=468540574883313089" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/468540574883313089?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/468540574883313089?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/iObdi-gUxsQ/working-vendor-configuration-for.html" title="Working Vendor Configuration for Motorola Sholes (Droid)" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://www.koushikdutta.com/2010/02/working-vendor-configuration-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AASXszeip7ImA9WxBWEU8.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-1724529792048445409</id><published>2010-02-01T20:22:00.001-08:00</published><updated>2010-02-02T06:42:28.582-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-02T06:42:28.582-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Klaxon" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>Klaxon 4.0 for Android</title><content type="html">&lt;p&gt;Klaxon for Android has gone through another rigorous update! This time, I integrated the new Desk Clock from Eclair (Nexus One) into the application. The result is the customizability of Klaxon that users have come to love, with a brand spanking new and polished UI.&lt;/p&gt;  &lt;p&gt;For those of you curious how to get the Weather widget on your desk clock, Google &lt;a href="http://lmgtfy.com/?q=genie+widget"&gt;“genie widget”&lt;/a&gt; for the third party application found on the Nexus One.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/_1Q1cgK2sxXk/S2eoiVFaDkI/AAAAAAAAAZs/drTut8UIRkU/s1600-h/deskclock%5B2%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="deskclock" border="0" alt="deskclock" src="http://lh4.ggpht.com/_1Q1cgK2sxXk/S2eoiyQ9HRI/AAAAAAAAAZw/of29ehN9cOs/deskclock_thumb.png?imgmax=800" width="148" height="244" /&gt;&lt;/a&gt; &lt;a href="http://lh3.ggpht.com/_1Q1cgK2sxXk/S2eojTwuNuI/AAAAAAAAAZ0/LzvzYCzdhVE/s1600-h/alarms%5B2%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="alarms" border="0" alt="alarms" src="http://lh6.ggpht.com/_1Q1cgK2sxXk/S2eojrqk2bI/AAAAAAAAAZ4/KyB3Bf7rjDM/alarms_thumb.png?imgmax=800" width="148" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/_1Q1cgK2sxXk/S2eoj1MvdXI/AAAAAAAAAZ8/ZgEWb-x_0Eg/s1600-h/edit%5B2%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="edit" border="0" alt="edit" src="http://lh3.ggpht.com/_1Q1cgK2sxXk/S2eokCsvW3I/AAAAAAAAAaA/t8iN03lMPao/edit_thumb.png?imgmax=800" width="148" height="244" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh4.ggpht.com/_1Q1cgK2sxXk/S2eoktfOpBI/AAAAAAAAAaE/oETdrovmzK8/s1600-h/alarm%5B8%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="alarm" border="0" alt="alarm" src="http://lh4.ggpht.com/_1Q1cgK2sxXk/S2eolMtMHDI/AAAAAAAAAaI/2BFvMVCuXkc/alarm_thumb%5B2%5D.png?imgmax=800" width="148" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-1724529792048445409?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yBctVpnYNrhTamAuaXokHG6vzW0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yBctVpnYNrhTamAuaXokHG6vzW0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yBctVpnYNrhTamAuaXokHG6vzW0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yBctVpnYNrhTamAuaXokHG6vzW0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=Yg3uZqP1Hxo:puQle2_PQT4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=Yg3uZqP1Hxo:puQle2_PQT4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=Yg3uZqP1Hxo:puQle2_PQT4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=Yg3uZqP1Hxo:puQle2_PQT4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/Yg3uZqP1Hxo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/1724529792048445409/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=1724529792048445409" title="26 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/1724529792048445409?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/1724529792048445409?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/Yg3uZqP1Hxo/klaxon-40-for-android.html" title="Klaxon 4.0 for Android" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_1Q1cgK2sxXk/S2eoiyQ9HRI/AAAAAAAAAZw/of29ehN9cOs/s72-c/deskclock_thumb.png?imgmax=800" height="72" width="72" /><thr:total>26</thr:total><feedburner:origLink>http://www.koushikdutta.com/2010/02/klaxon-40-for-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUNSX85fyp7ImA9WxBXEEo.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-7514608891957835770</id><published>2010-01-21T02:51:00.001-08:00</published><updated>2010-01-21T03:11:38.127-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-21T03:11:38.127-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android Mono" /><category scheme="http://www.blogger.com/atom/ns#" term="Hacking" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Mono" /><title>Android.dll</title><content type="html">&lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/_1Q1cgK2sxXk/S1gxuqrPP9I/AAAAAAAAAZc/KnTbEauZI3o/s1600-h/androidmono%5B5%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="androidmono" border="0" alt="androidmono" src="http://lh4.ggpht.com/_1Q1cgK2sxXk/S1gxvDbHw2I/AAAAAAAAAZk/hH8jvY_L-IY/androidmono_thumb%5B3%5D.png?imgmax=800" width="647" height="406" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Picture above represents the results of 3 sleepless nights. No, I didn’t rewrite the Android framework. I generated a bunch of proxy classes to access them from Mono though. Rough idea of how it works: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Java application reflects through Android framework SDK jar and outputs an XML file that represents the object model. &lt;/li&gt;    &lt;li&gt;C# application generates thousands of code files of said object model. (This is similar to &lt;a href="http://jni4net.sourceforge.net"&gt;jni4net&lt;/a&gt;, but that doesn’t work on anything but Windows). &lt;/li&gt;    &lt;li&gt;Tag all the methods with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.methodimplattribute.aspx"&gt;[MethodImpl(MethodImplOptions.InternalCall)]&lt;/a&gt; attribute. &lt;/li&gt;    &lt;li&gt;Implement the method calls at runtime with a combination of dynamically created expression tree delegates and mono_add_internal_call. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The class contents actually have no code, so the total dll size is pretty small (800k). Here’s what the LinearLayout “implementation” looks like:&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;namespace android.widget 
{ 
    public class LinearLayout : android.view.ViewGroup
    { 
        public class LayoutParams : android.view.ViewGroup.MarginLayoutParams
        { 
            [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
            public virtual extern java.lang.String debug(java.lang.String arg0); 
            [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
            public extern LayoutParams(android.content.Context arg0, android.util.AttributeSet arg1); 
            [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
            public extern LayoutParams(int arg0, int arg1); 
            [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
            public extern LayoutParams(int arg0, int arg1, float arg2); 
            [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
            public extern LayoutParams(android.view.ViewGroup.LayoutParams arg0); 
            [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
            public extern LayoutParams(android.view.ViewGroup.MarginLayoutParams arg0); 
            [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
            internal extern LayoutParams(); 
        } 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        public virtual extern void setGravity(int arg0); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        protected override extern void onLayout(bool arg0, int arg1, int arg2, int arg3, int arg4); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        public override extern int getBaseline(); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        protected override extern void onMeasure(int arg0, int arg1); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        protected override extern bool checkLayoutParams(android.view.ViewGroup.LayoutParams arg0); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        public virtual extern new android.widget.LinearLayout.LayoutParams generateLayoutParams(android.util.AttributeSet arg0); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        protected virtual extern new android.widget.LinearLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams arg0); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        protected virtual extern new android.widget.LinearLayout.LayoutParams generateDefaultLayoutParams(); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        public virtual extern bool isBaselineAligned(); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        public virtual extern void setBaselineAligned(bool arg0); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        public virtual extern int getBaselineAlignedChildIndex(); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        public virtual extern void setBaselineAlignedChildIndex(int arg0); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        public virtual extern float getWeightSum(); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        public virtual extern void setWeightSum(float arg0); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        public virtual extern void setOrientation(int arg0); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        public virtual extern int getOrientation(); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        public virtual extern void setHorizontalGravity(int arg0); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        public virtual extern void setVerticalGravity(int arg0); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        public extern LinearLayout(android.content.Context arg0, android.util.AttributeSet arg1); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        public extern LinearLayout(android.content.Context arg0); 
        [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] 
        internal extern LinearLayout(); 
    } 
} &lt;/pre&gt;

&lt;p&gt;A year of on and off hacking coming to fruition soon…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-7514608891957835770?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_phA2d98mr701BJECTuDY3wjwsw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_phA2d98mr701BJECTuDY3wjwsw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_phA2d98mr701BJECTuDY3wjwsw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_phA2d98mr701BJECTuDY3wjwsw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=qMiZqIQnlIo:WStzRFjOd-E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=qMiZqIQnlIo:WStzRFjOd-E:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=qMiZqIQnlIo:WStzRFjOd-E:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=qMiZqIQnlIo:WStzRFjOd-E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/qMiZqIQnlIo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/7514608891957835770/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=7514608891957835770" title="33 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/7514608891957835770?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/7514608891957835770?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/qMiZqIQnlIo/androiddll.html" title="Android.dll" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_1Q1cgK2sxXk/S1gxvDbHw2I/AAAAAAAAAZk/hH8jvY_L-IY/s72-c/androidmono_thumb%5B3%5D.png?imgmax=800" height="72" width="72" /><thr:total>33</thr:total><feedburner:origLink>http://www.koushikdutta.com/2010/01/androiddll.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIEQn0_eCp7ImA9WxNaGE0.&quot;"><id>tag:blogger.com,1999:blog-8001170587821659759.post-5653880897071381085</id><published>2009-12-02T18:31:00.001-08:00</published><updated>2009-12-02T18:31:43.340-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-02T18:31:43.340-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android Mono" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Mono" /><title>Building Mono using the Android NDK</title><content type="html">&lt;p&gt;I finally got around to looking at the &lt;a href="http://developer.android.com/sdk/ndk/1.5_r1/index.html"&gt;Android NDK&lt;/a&gt; yesterday. It is basically a subset of the Android Source build environment, but it has all the bits necessary to compile Mono. It only took a bit of finagling with the Android.mk to make everything work right. Building for Android is pretty easy now; the longest part is actually downloading and building the mcs assemblies. There’s a script to handle that though. &lt;/p&gt;  &lt;p&gt;The &lt;a href="http://github.com/koush/androidmono"&gt;androidmono&lt;/a&gt; repository has updated instructions.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8001170587821659759-5653880897071381085?l=www.koushikdutta.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NxvMWAouuYoccVoIoAqYCnu30-Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NxvMWAouuYoccVoIoAqYCnu30-Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NxvMWAouuYoccVoIoAqYCnu30-Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NxvMWAouuYoccVoIoAqYCnu30-Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=YEwbJZQ6nXc:uI5I9IBweew:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=YEwbJZQ6nXc:uI5I9IBweew:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?i=YEwbJZQ6nXc:uI5I9IBweew:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MyBrainHurts?a=YEwbJZQ6nXc:uI5I9IBweew:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MyBrainHurts?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MyBrainHurts/~4/YEwbJZQ6nXc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.koushikdutta.com/feeds/5653880897071381085/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8001170587821659759&amp;postID=5653880897071381085" title="10 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/5653880897071381085?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8001170587821659759/posts/default/5653880897071381085?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MyBrainHurts/~3/YEwbJZQ6nXc/building-mono-using-android-ndk.html" title="Building Mono using the Android NDK" /><author><name>Koush</name><uri>http://www.blogger.com/profile/11049460148325973407</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp0.blogger.com/_1Q1cgK2sxXk/SHKJ5csPgVI/AAAAAAAAAB8/PSchfVXrGYU/S220/n638842978_178254_6322.jpg" /></author><thr:total>10</thr:total><feedburner:origLink>http://www.koushikdutta.com/2009/12/building-mono-using-android-ndk.html</feedburner:origLink></entry></feed>

