<?xml version="1.0" encoding="UTF-8"?>

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
>

  <channel rdf:about="http://lwn.net/headlines/331908/">
    <title>LWN: Comments on "Updating and rebuilding Android"</title>
    <link>http://lwn.net/Articles/331908/</link>
    <description>
This is a special feed containing comments posted
to the individual LWN article titled &quot;Updating and rebuilding Android&quot;.

    </description>

    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>2</syn:updateFrequency>
    <items>
      <rdf:Seq>
	<rdf:li resource="http://lwn.net/Articles/332660/rss" />
	<rdf:li resource="http://lwn.net/Articles/332637/rss" />
	<rdf:li resource="http://lwn.net/Articles/332496/rss" />
	<rdf:li resource="http://lwn.net/Articles/332495/rss" />
	<rdf:li resource="http://lwn.net/Articles/332494/rss" />
	<rdf:li resource="http://lwn.net/Articles/332490/rss" />
	<rdf:li resource="http://lwn.net/Articles/332488/rss" />
	<rdf:li resource="http://lwn.net/Articles/332480/rss" />
	<rdf:li resource="http://lwn.net/Articles/332445/rss" />
	<rdf:li resource="http://lwn.net/Articles/332442/rss" />
	<rdf:li resource="http://lwn.net/Articles/332437/rss" />
	<rdf:li resource="http://lwn.net/Articles/332432/rss" />
	<rdf:li resource="http://lwn.net/Articles/332380/rss" />
	<rdf:li resource="http://lwn.net/Articles/332379/rss" />
	<rdf:li resource="http://lwn.net/Articles/332359/rss" />
	<rdf:li resource="http://lwn.net/Articles/332353/rss" />
	<rdf:li resource="http://lwn.net/Articles/332336/rss" />
	<rdf:li resource="http://lwn.net/Articles/332335/rss" />
	<rdf:li resource="http://lwn.net/Articles/332301/rss" />
	<rdf:li resource="http://lwn.net/Articles/332273/rss" />
	<rdf:li resource="http://lwn.net/Articles/332270/rss" />
	<rdf:li resource="http://lwn.net/Articles/332228/rss" />
	<rdf:li resource="http://lwn.net/Articles/332223/rss" />
	<rdf:li resource="http://lwn.net/Articles/332208/rss" />
      
      </rdf:Seq>
    </items>

  </channel>
    <item rdf:about="http://lwn.net/Articles/332660/rss">
      <title>Clean Build Systems</title>
      <link>http://lwn.net/Articles/332660/rss</link>
      <dc:date>2009-05-09T22:25:00+00:00</dc:date>
      <dc:creator>man_ls</dc:creator>
      <description>
      The Gentoo people have got to a point where a relatively ignorant newcomer can follow the manual and get a running system in a couple of days. If our grumpy editor (being a kernel hacker and all) feels that the Android build process is &lt;i&gt;painful&lt;/i&gt; then it clearly needs more polish.
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332637/rss">
      <title>This on-screen keyboard you speak of</title>
      <link>http://lwn.net/Articles/332637/rss</link>
      <dc:date>2009-05-09T08:52:30+00:00</dc:date>
      <dc:creator>erwbgy</dc:creator>
      <description>
      T-Mobile UK sent out the update yesterday and using Jon's tip I now have an on-screen keyboard.
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332496/rss">
      <title>Updating and rebuilding Android</title>
      <link>http://lwn.net/Articles/332496/rss</link>
      <dc:date>2009-05-08T10:31:47+00:00</dc:date>
      <dc:creator>nbd</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
Really simple:&lt;br&gt;
If the system lets you get away with having to do less changes to a package to get it working, then *of course* there are going to be fewer changes. People want to get stuff working, and make only the necessary changes.&lt;br&gt;
Or are you really saying that build system and structure have *no* influence on the result? My experience says otherwise...&lt;br&gt;
&lt;p&gt;
About making things public and involving kernel people: Yes, that would have helped for getting changes upstream, but it would not have helped to get the product out faster. The Kernel developer community is focusing on getting it done right, while their own development team has to focus on getting it done fast (or at all). Considering the amount of pressure on getting stuff to the market fast, there's only so much time you can spend on figuring out the right approach...&lt;br&gt;
&lt;p&gt;
So how would getting things in patches have been far worse, if the patches themselves are under version control? Having patches under version control means that you have *at least* the same amount of information available that you have now, but with an extremely easy way of structuring things even more if you feel like it, which (using quilt) costs virtually no extra effort.&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332495/rss">
      <title>Updating and rebuilding Android</title>
      <link>http://lwn.net/Articles/332495/rss</link>
      <dc:date>2009-05-08T10:18:13+00:00</dc:date>
      <dc:creator>dlang</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
you don't merge back from the main tree to the feature branch.&lt;br&gt;
&lt;p&gt;
but the point is that I don't believe that the people who created the commits that you are complaining about would have done any better if they were patches. there was nothing in the tool that prevented them from doing things better. there are lots of kernel developers who would have helped them develop things (and comment them) if they had asked, but they weren't willing to reveal things.&lt;br&gt;
&lt;p&gt;
getting things in patches would have probably been _far_ worse, as there would probably just be one big patch for each program (that _is_ the common thing to do when companies fork programs and then release their changes)&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332494/rss">
      <title>Updating and rebuilding Android</title>
      <link>http://lwn.net/Articles/332494/rss</link>
      <dc:date>2009-05-08T10:09:23+00:00</dc:date>
      <dc:creator>nbd</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
What you describe still doesn't quite cover the amount of feature separation that I'm talking about. Yes, when you start implementing a feature separately, you still have some degree of separation by keeping it in a branch, but once you start pulling stuff into your master branch and merging back and forth between the master branch and the feature branches, that becomes lost too.&lt;br&gt;
Or what about switching to a newer upstream version? Sure, you could go ahead and first rebase every single feature branch individually, then try to merge them back in the same order that they were merged initially (if you even kept that information and assuming that you didn't touch the same code parts in different branches), but again that's much more expensive than keeping a set of simple, readable patches around in the first place.&lt;br&gt;
&lt;p&gt;
To sum things up:&lt;br&gt;
 - it is possible to do this with git, but it's more work and requires more discipline&lt;br&gt;
 - devs at google did not have time to do this part right, thus the result is a set of forks that due to their structure are not easy to merge back upstream&lt;br&gt;
 - even with patches or commits from less experienced developers, the same chaos does not happen in openwrt packages&lt;br&gt;
 - in openwrt you can get away with not having to fork a lot packages&lt;br&gt;
 - in android you have to fork every single package and if it's just for replacing the makefile with an Android.mk file&lt;br&gt;
 - in openwrt you have to pay less attention to how a package works internally, most autoconf based stuff can be handled with very few changes compared to a template makefile (often only changing the package name, description and download location)&lt;br&gt;
&lt;p&gt;
In my opinion those differences are quite significant&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332490/rss">
      <title>Updating and rebuilding Android</title>
      <link>http://lwn.net/Articles/332490/rss</link>
      <dc:date>2009-05-08T09:47:06+00:00</dc:date>
      <dc:creator>dlang</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
the impression I get from watching projects that use git extensively is a lot of people.&lt;br&gt;
&lt;p&gt;
remember that branching and merging is very cheap with git, keeping the separate development parts in separate branches lets you test them individually. it's only after you are sure that they are a permanent part of your central branch that you throw them away.&lt;br&gt;
&lt;p&gt;
there are people who create separate branches for every different topic that they work on, even if they think it's only going to be a single patch.&lt;br&gt;
&lt;p&gt;
&lt;p&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332488/rss">
      <title>Updating and rebuilding Android</title>
      <link>http://lwn.net/Articles/332488/rss</link>
      <dc:date>2009-05-08T09:38:49+00:00</dc:date>
      <dc:creator>nbd</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
Who actually does that?&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332480/rss">
      <title>Updating and rebuilding Android</title>
      <link>http://lwn.net/Articles/332480/rss</link>
      <dc:date>2009-05-08T07:26:26+00:00</dc:date>
      <dc:creator>dlang</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
no, you do your two different changes in different branches and then merge the two togeather.&lt;br&gt;
&lt;p&gt;
if you need to change one of the features you make a change in that brance and do another merge.&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332445/rss">
      <title>Updating and rebuilding Android</title>
      <link>http://lwn.net/Articles/332445/rss</link>
      <dc:date>2009-05-07T23:47:24+00:00</dc:date>
      <dc:creator>nbd</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
Here's an important difference:&lt;br&gt;
&lt;p&gt;
If you're working on two separate features in an OpenWrt package, the build system generates a quilt patch stack for you to edit, which makes it very easy to keep things separated. This means the system actively encourages you to keep things organized by not forcing extra work on you to do the right thing.&lt;br&gt;
&lt;p&gt;
If you maintain such a tree in git and you want to make changes to a feature that you already committed, you're either forced to rebase (which is bad for everybody that's pulling from you), or you have to live with the fact that the grouping of changes is lost in the process.&lt;br&gt;
&lt;p&gt;
It does not only depend on the people working on it, but also what the tools encourage you to do, and especially what the common workflow of the tools you work with is.&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332442/rss">
      <title>Updating and rebuilding Android</title>
      <link>http://lwn.net/Articles/332442/rss</link>
      <dc:date>2009-05-07T23:34:24+00:00</dc:date>
      <dc:creator>dlang</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
you can have a patch with a lousy explination, just like you have have a git commit with a lousy changelog. it's not a technical problem.&lt;br&gt;
&lt;p&gt;
if you have the same people producing the commits and the patches they will probably have the same quality.&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332437/rss">
      <title>Updating and rebuilding Android</title>
      <link>http://lwn.net/Articles/332437/rss</link>
      <dc:date>2009-05-07T23:10:23+00:00</dc:date>
      <dc:creator>nbd</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
It is different in that the OpenWrt patch structure encourages splitting up changes in a way that makes review for upstream merging easier.&lt;br&gt;
Looking at random Google-forked git directories, all I see is uncommented auto-import commits without a readable commit message, without any indication as to what the changes are meant for or why they were added.&lt;br&gt;
Stuff like that does not usually happen in OpenWrt-maintained patchsets.&lt;br&gt;
I looked at jpeg, libxml2, bzip2 and a few others, and I found no useful information that could help with upstream merging at all.&lt;br&gt;
&lt;p&gt;
Another issue is that in the android build system, you cannot build packages without making changes to them (you have to at least throw in some Android.mk files to replace the Makefiles), while in OpenWrt you can leave many packages as-is and use them with our package Makefiles and no patches at all&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332432/rss">
      <title>Updating and rebuilding Android</title>
      <link>http://lwn.net/Articles/332432/rss</link>
      <dc:date>2009-05-07T22:42:35+00:00</dc:date>
      <dc:creator>dlang</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
the android people are accessing everything through git, so their 'forking' is not significantly different from your 'maintaining patches' (you have less stuff to move around, they use a tool that helps them merge with the original and provides them with some safety in terms of their changes still being correct)&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332380/rss">
      <title>This on-screen keyboard you speak of</title>
      <link>http://lwn.net/Articles/332380/rss</link>
      <dc:date>2009-05-07T19:02:56+00:00</dc:date>
      <dc:creator>fb</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
US Cupcake upgrade announcement &lt;a href=&quot;http://forums.t-mobile.com/tmbl/board/message?board.id=Android_MR&amp;amp;thread.id=1&quot;&gt;http://forums.t-mobile.com/tmbl/board/message?board.id=An...&lt;/a&gt;&lt;br&gt;
&lt;p&gt;
&quot;End of the next week&quot;&lt;br&gt;
&lt;p&gt;
[...]&lt;br&gt;
&lt;p&gt;
England should be getting it already &lt;a href=&quot;http://www.t3.com/news/android-1-5-update-available-today-gives-users-video-filming?=38815&amp;amp;cid=OTC-RSS&amp;amp;attr=T3-Main-RSS&quot;&gt;http://www.t3.com/news/android-1-5-update-available-today...&lt;/a&gt;&lt;br&gt;
&lt;p&gt;
[...]&lt;br&gt;
&lt;p&gt;
FWIW, At the XDA forums there are (relatively) simple recipes to turn a G1 into a ADP.&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332379/rss">
      <title>Clean Build Systems</title>
      <link>http://lwn.net/Articles/332379/rss</link>
      <dc:date>2009-05-07T18:48:05+00:00</dc:date>
      <dc:creator>wookey</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
indeed - as these things go, that's relatively painless. (I know - I maintain the build system for balloonboard and it's a very hard thing to do well). &lt;br&gt;
&lt;p&gt;
We (well, Jim Rayner actually) just built android for the balloon (which incidentally does produce a genuinely free platform, including GSM, although calling it a 'phone' would be a bit of stretch for most people).&lt;br&gt;
&lt;a href=&quot;http://balloonboard.org/balloonwiki/AndroidBalloon&quot;&gt;http://balloonboard.org/balloonwiki/AndroidBalloon&lt;/a&gt;&lt;br&gt;
&lt;p&gt;
&lt;p&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332359/rss">
      <title>This on-screen keyboard you speak of</title>
      <link>http://lwn.net/Articles/332359/rss</link>
      <dc:date>2009-05-07T16:22:36+00:00</dc:date>
      <dc:creator>corbet</dc:creator>
      <description>
      &quot;firmware (1.1)&quot; means that you're running version 1.1 of the firmware.
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332353/rss">
      <title>This on-screen keyboard you speak of</title>
      <link>http://lwn.net/Articles/332353/rss</link>
      <dc:date>2009-05-07T16:19:50+00:00</dc:date>
      <dc:creator>felixfix</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
I tried both the contacts program and an independent program, neither of which did much other than move the cursor when I tapped.&lt;br&gt;
&lt;p&gt;
Which of the various settings values corresponds to the 1.5 build?  There are firmware (1.1), baseband (long weird string), kernel (2.6.25-01845), and build number (kila-user 1.1 plat-rc33 ...).&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332336/rss">
      <title>This on-screen keyboard you speak of</title>
      <link>http://lwn.net/Articles/332336/rss</link>
      <dc:date>2009-05-07T15:23:13+00:00</dc:date>
      <dc:creator>corbet</dc:creator>
      <description>
      Tap on a text-entry widget with your finger with the device closed to get the on-screen keyboard.
&lt;p&gt;
I'm not sure about 1.5 for G1 handsets.  I &lt;i&gt;thought&lt;/i&gt; that T-Mobile was rolling it out in the US, but I'm far from certain of that.
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332335/rss">
      <title>This on-screen keyboard you speak of</title>
      <link>http://lwn.net/Articles/332335/rss</link>
      <dc:date>2009-05-07T15:20:56+00:00</dc:date>
      <dc:creator>felixfix</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
I have the non-ADP version of this phone.  How does one get the 1.5 version -- is this still in development and not for release to customers?  If I already have it, how does one activate the on-screen keyboard?  I haven't seen any difference in apps which need a keyboard -- they still stare dumbly at me until I slide the keyboard open.&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332301/rss">
      <title>Updating and rebuilding Android</title>
      <link>http://lwn.net/Articles/332301/rss</link>
      <dc:date>2009-05-07T12:41:13+00:00</dc:date>
      <dc:creator>nbd</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
[shameless plug]&lt;br&gt;
I'm working on integrating the Android software stack in OpenWrt. Much of the core of Android 1.5 is already running, but some work is still left to be done until it's usable.&lt;br&gt;
&lt;p&gt;
Why am I doing this? Easy:&lt;br&gt;
- OpenWrt is much easier to keep consistent across multiple platforms, because of the way it keeps kernel patches and configs (that's right, we don't fork entire kernel trees).&lt;br&gt;
- OpenWrt allows you to integrate new packages by writing a small makefile and optionally throwing in some patches (which it also helps you create), so there's no need to fork the whole thing.&lt;br&gt;
- OpenWrt allows you to shortcut parts of the build system, so you don't have to spend minutes (or hours, depending on your build machine's performance) waiting for a huge recompile just because you happened to change a core library, which forces a rebuild of build tools, which forces a rebuild of everything those tools generated.&lt;br&gt;
&lt;p&gt;
My other goal is to keep the entire thing free of dependencies on external binaries where possible, and turn the Google-forked external libraries into OpenWrt makefiles and patches. &lt;br&gt;
&lt;p&gt;
I'll try to keep people updated on my progress on my blog:&lt;br&gt;
&lt;a href=&quot;http://nbd.name/blog/?p=36&quot;&gt;http://nbd.name/blog/?p=36&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;http://nbd.name/blog/?p=48&quot;&gt;http://nbd.name/blog/?p=48&lt;/a&gt;&lt;br&gt;
[/shameless plug]&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332273/rss">
      <title>Updating and rebuilding Android</title>
      <link>http://lwn.net/Articles/332273/rss</link>
      <dc:date>2009-05-07T10:38:03+00:00</dc:date>
      <dc:creator>fb</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
Great article! I had been curious about how to build my own distribution, and now I can give it a try.&lt;br&gt;
&lt;p&gt;
You should IMVHO at least mention that the most active image builder for the G1 these days is Haykuro. Another piece of information missing is that most of the G1/ADP hacking activity seems to be centered around XDA forums.&lt;br&gt;
&lt;p&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332270/rss">
      <title>Updating and rebuilding Android</title>
      <link>http://lwn.net/Articles/332270/rss</link>
      <dc:date>2009-05-07T10:16:33+00:00</dc:date>
      <dc:creator>bcopeland</dc:creator>
      <description>
      The easiest way to update the kernel, in my experience, is to build it from the msm tree as our editor suggests, then take the HTC-supplied 1.5 initramfs (you can get it from the boot.img in the update zip file and unpack it with &lt;a href=&quot;http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images&quot;&gt;split_bootimg.pl&lt;/a&gt;).  That way you don't have to bother with building any of the android userland.&lt;br&gt;&lt;br&gt;
After that you can simply turn on the phone while holding the back button and plugged into USB, then do 'fastboot boot your_bzImage their_boot.img-ramdisk.cpio' which will do a one-time boot of your kernel, then revert to the installed one on the next power cycle.&lt;br&gt;&lt;br&gt;The android init setup seems to be somewhat tied to the kernel version so matching versions is good -- the 1.1 init will not work with the 2.6.29 kernel, for example.  1.5 does, sort of.
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332228/rss">
      <title>Clean Build Systems</title>
      <link>http://lwn.net/Articles/332228/rss</link>
      <dc:date>2009-05-07T06:48:02+00:00</dc:date>
      <dc:creator>dlang</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
remember, this isn't just building a single application, this is building an entire distribution (albeit a small one)&lt;br&gt;
&lt;p&gt;
the fact that it was as easy as Jon made it sound to recreate (almost) the entire distribution is impressive.&lt;br&gt;
&lt;p&gt;
even gentoo (which focuses on this area) takes as much, if not more effort to build a system from source.&lt;br&gt;
&lt;p&gt;
as far as the time it takes to build, I suspect that the google people only rebuild their particular app when they change it, and they also probably have build farms of high-speed machiens (or at least a LOT of medium speed machines ;-) so that it takes less wall clock time.&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332223/rss">
      <title>Clean Build Systems</title>
      <link>http://lwn.net/Articles/332223/rss</link>
      <dc:date>2009-05-07T06:35:16+00:00</dc:date>
      <dc:creator>alex</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
It's sad to see the build system is such a prickly mess. Most&lt;br&gt;
successful FLOSS projects have long since known that a hairy build&lt;br&gt;
system is a barrier to entry for potential new contributors to the&lt;br&gt;
code base.&lt;br&gt;
&lt;p&gt;
That's to say nothing of the state there QA must be in. Being able to&lt;br&gt;
automatically build a new image from source every time something is&lt;br&gt;
checked in is basic QA functionality. I would of expected better from&lt;br&gt;
the high flying whizz kids at the big G.&lt;br&gt;
&lt;p&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/332208/rss">
      <title>Updating and rebuilding Android</title>
      <link>http://lwn.net/Articles/332208/rss</link>
      <dc:date>2009-05-07T04:16:28+00:00</dc:date>
      <dc:creator>vmlinuz</dc:creator>
      <description>
      &lt;p&gt;Just got one minor comment:
&lt;blockquote&gt;One has to wonder, though, what inspired the Android developers to dedicate a significant chunk of scarce screen space to a &quot;smiley&quot; key.&lt;/blockquote&gt;
When you define a text entry widget in an Android application, you can hint to the system what sort of text is going to entered, and different keyboards are used for different purposes.  If it's defined as a &quot;short message&quot; widget, it'll have a smiley button, if it's defined as a &quot;URI&quot; it'll have a .com button, and so on.  It's actually a pretty neat feature, as a developer, because it gives your application a nice level of polish for essentially no work on your part.
      
      </description>
    </item>
</rdf:RDF>

