<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Technicalities &#187; design</title>
	<atom:link href="http://www.sirena.org.uk/log/tag/design/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sirena.org.uk/log</link>
	<description>Just another random blog</description>
	<lastBuildDate>Sat, 21 Jan 2012 23:41:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Changing core code</title>
		<link>http://www.sirena.org.uk/log/2011/03/13/changing-core-code/</link>
		<comments>http://www.sirena.org.uk/log/2011/03/13/changing-core-code/#comments</comments>
		<pubDate>Sun, 13 Mar 2011 21:12:10 +0000</pubDate>
		<dc:creator>Mark Brown</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Planet Debian]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[process]]></category>

		<guid isPermaLink="false">http://www.sirena.org.uk/log/?p=383</guid>
		<description><![CDATA[One of the biggest differences between working on most other OSs and working upstream on drivers for the Linux kernel is that elsewhere the core is usually a fixed thing that has been released and can&#8217;t really be changed, even if source is available (which may not even be the case). If whatever subsystem you&#8217;re [...]]]></description>
			<content:encoded><![CDATA[<p>One of the biggest differences between working on most other OSs and working upstream on drivers for the Linux kernel is that elsewhere the core is usually a fixed thing that has been released and can&#8217;t really be changed, even if source is available (which may not even be the case). If whatever subsystem you&#8217;re working in can&#8217;t cope with the thing you&#8217;re trying to express then one of the things it&#8217;s really useful to be good at is working out ways to implement the behaviour that&#8217;s required behind the back of the subsystem. It&#8217;s very common to see such code in drivers submitted by hardware vendors, particularly those that are new to Linux, as this is such a big mindset shift.</p>
<p>With kernel development the approach is much more to make sure that the core can cope with whatever needs expressing. It&#8217;s not always done in the core &#8211; for example, sometimes the issue is due to unusually limited hardware and very likely to never come up again &#8211; but it&#8217;s very unusual to see code merged that doesn&#8217;t at least fit in with the design of the subsystem.</p>
<p>This post is inspired by <a href="https://lkml.org/lkml/2011/3/11/324">a brief exchange with Thomas Gleixner on linux-kernel</a> who articulated the advantages of doing things this way very well:</p>
<blockquote>
<pre> - It's usually simpler and faster as the core code has all the
   necessary information. So that's even an argument which managers
   might understand.

 - Such workarounds, when not caught, tend to spread themself
   magically because driver writers checkout the existing code of
   similar devices and copy/paste/modify^Wuglify them over and over.

 - In the worst case such workarounds make the core maintainence
   harder and in some cases impossible, because they silently imply
   semantics on the core w/o the core maintainer knowing about them.</pre>
</blockquote>
<p>The last point is the most important one to me as a subsystem maintainer &#8211; I really don&#8217;t want to be merging code that is going to create issues with ongoing development of the subsystem. This is all another facet of the <a href="http://lxr.linux.no/linux/Documentation/stable_api_nonsense.txt">policy on stable APIs</a>: APIs are only worth working around if they&#8217;re fixed, and the assumptions that end up embedded in a workaroud are as much part of the API as the explicit interfaces.</p>
<p>It&#8217;s things like this that make Linux such a pleasure to work on.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sirena.org.uk/log/2011/03/13/changing-core-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Network I/O</title>
		<link>http://www.sirena.org.uk/log/2010/03/27/network-io/</link>
		<comments>http://www.sirena.org.uk/log/2010/03/27/network-io/#comments</comments>
		<pubDate>Sat, 27 Mar 2010 12:17:59 +0000</pubDate>
		<dc:creator>Mark Brown</dc:creator>
				<category><![CDATA[Reviews]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[Blackberry]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[smarhphone]]></category>

		<guid isPermaLink="false">http://www.sirena.org.uk/log/?p=269</guid>
		<description><![CDATA[I&#8217;ve had the opportunity to use a bunch of different smartphone OSs for extended periods recently. They&#8217;ve all taken interestingly different tacks on some of the key stuff, normally all within the bounds of reasonable implementation decisions but with very different results and useful to different people. One of the most interesting decisions I&#8217;ve noticed [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had the opportunity to use a bunch of different smartphone OSs for extended periods recently. They&#8217;ve all taken interestingly different tacks on some of the key stuff, normally all within the bounds of reasonable implementation decisions but with very different results and useful to different people.</p>
<p>One of the most interesting decisions I&#8217;ve noticed is the model that things have for handling network I/O. At one end of the scale you&#8217;ve got iPhone OS which does very little network I/O off-line &#8211; it will fetch mail in the background and there&#8217;s <a href="http://me.com/">MobileMe</a> sync but that&#8217;s about it. Everything else is triggered by direct user action and is generally visible to them. Even with the mail there&#8217;s an element of interactivity &#8211; it will notify the user about mail before it&#8217;s actually been downloaded, for example. At the other end of the scale the Blackberry does its level best to mask the existence of the network &#8211; any updates go on in the background, with the fact that there&#8217;s any interaction with a remote system being hidden everywhere except with things like unsent messages. Both these are reasonable choices.</p>
<p>The iPhone model flows from the same place as the decision not to allow background apps, trading interactive performance and a degree of usability (especially where the network is slow or intermittent) for a tight control on things that incur power and bandwidth costs. This avoids surprises, especially given the number of third party apps out there, ensuring that the system always behaves as expected.</p>
<p>The Blackberry avoids the user being troubled by the vagaries of spotty connectivity but also means resources get consumed without user interaction, which can impact performance all round without it being clear to users what the device has been spending resources on. Then again, it&#8217;s much less common to use anything except the standard application set on a Blackberry and that is highly optimized for its function &#8211; there&#8217;s less to be worried about.</p>
<p>I&#8217;m not sure I&#8217;d say either approach is better &#8211; they&#8217;re not solving quite the same problem and they&#8217;re certainly part of very different systems &#8211; so it&#8217;s interesting to consider the differences. Personally I find waiting for the network annoying, but then I&#8217;m a pretty technical user so the drawbacks in terms of understanding power consumption aren&#8217;t so important for me as they will be for many other users.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sirena.org.uk/log/2010/03/27/network-io/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stuck on hold</title>
		<link>http://www.sirena.org.uk/log/2009/06/11/stuck-on-hold/</link>
		<comments>http://www.sirena.org.uk/log/2009/06/11/stuck-on-hold/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 09:23:06 +0000</pubDate>
		<dc:creator>Mark Brown</dc:creator>
				<category><![CDATA[Planet Debian]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[design]]></category>

		<guid isPermaLink="false">http://www.sirena.org.uk/log/?p=187</guid>
		<description><![CDATA[Being stuck listening to hold music for an extended period is annoying. What&#8217;s even more annoying for me is when the IVR system regularly interrupts the hold music with a voice announcement, often telling you something enormously useful like pointing out that you&#8217;re on hold. Music I find easy to zone out without paying too [...]]]></description>
			<content:encoded><![CDATA[<p>Being stuck listening to hold music for an extended period is annoying. What&#8217;s even more annoying for me is when the IVR system regularly interrupts the hold music with a voice announcement, often telling you something enormously useful like pointing out that you&#8217;re on hold. Music I find easy to zone out without paying too much attention to but whenever you get a voice announcement it demands a bit more attention &#8211; at least until you&#8217;ve worked out that it&#8217;s not actually a human yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sirena.org.uk/log/2009/06/11/stuck-on-hold/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>iPod Touch as a music player</title>
		<link>http://www.sirena.org.uk/log/2008/01/20/ipod-touch-as-a-music-player/</link>
		<comments>http://www.sirena.org.uk/log/2008/01/20/ipod-touch-as-a-music-player/#comments</comments>
		<pubDate>Sun, 20 Jan 2008 15:00:26 +0000</pubDate>
		<dc:creator>Mark Brown</dc:creator>
				<category><![CDATA[Reviews]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[iPod]]></category>
		<category><![CDATA[multitouch]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.sirena.org.uk/log/?p=66</guid>
		<description><![CDATA[Like the iPhone the iPod Touch has a multi-touch user interface with everything done through dynamic controls on the screen that dominates the device, all dependent on the physical orientation of the device. This is interesting and it does work well when using the device is your main focus, like when watching videos. Where it [...]]]></description>
			<content:encoded><![CDATA[<p>Like the iPhone the iPod Touch has a multi-touch user interface with everything done through dynamic controls on the screen that dominates the device, all dependent on the physical orientation of the device. This is interesting and it does work well when using the device is your main focus, like when watching videos.</p>
<p>Where it falls down is in the music player. One problem is that the controls aren&#8217;t consistently in the same place and have no tactile feedback. Worse, unlocking the device when the controls have been idle for a while requires a relatively complex operation (either a treble click of the home button or swiping a software unlock control across the breadth of the screen). This means that if using the Touch isn&#8217;t your sole focus, for example when listening to it in the gym or walking around town, it is intrusive to use, demanding too much attention. Even for basic operations like pausing or changing the volume you need to look at it to find out what controls are available and where they are.</p>
<p>It&#8217;s an interesting direction for user interfaces but I don&#8217;t think it works for a device that should be unintrusive.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sirena.org.uk/log/2008/01/20/ipod-touch-as-a-music-player/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

