<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/rss-style.xsl" type="text/xsl"?>
<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>usability &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/category/usability/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Tue, 03 Mar 2026 11:28:41 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</url>
	<title>usability &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[How Do You Sort Chinese Numbers?]]></title>
		<link>https://shkspr.mobi/blog/2016/11/how-do-you-sort-chinese-numbers/</link>
					<comments>https://shkspr.mobi/blog/2016/11/how-do-you-sort-chinese-numbers/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 08 Nov 2016 11:27:48 +0000</pubDate>
				<category><![CDATA[usability]]></category>
		<category><![CDATA[chinese]]></category>
		<category><![CDATA[mandarin]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<category><![CDATA[unicode]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=23428</guid>

					<description><![CDATA[Imagine you have a series of number you wish to sort.  Sorting is a well known computer science problem - generally speaking you compare one value to the next and then move the item either up or down a list.  With &#34;English&#34; characters, that&#039;s fairly easy.  When a computer sees the character 1 it&#039;s really seeing the Unicode character U+0031.  When it sees 2 it&#039;s really seeing the character U+0032…]]></description>
										<content:encoded><![CDATA[<p>Imagine you have a series of number you wish to sort.  Sorting is a well known computer science problem - generally speaking you compare one value to the next and then move the item either up or down a list.</p>

<p>With "English" characters, that's fairly easy.</p>

<p>When a computer sees the character <code>1</code> it's <em>really</em> seeing the Unicode character <code>U+0031</code>.  When it sees <code>2</code> it's <em>really</em> seeing the character <code>U+0032</code> and so on.</p>

<p>The <a href="https://en.wikipedia.org/wiki/Arabic_numerals">Arabic numbers</a> we use (0 - 9) have an identical ordering in Unicode. This makes it very easy for a computer to sort "Western" numbers.</p>

<p>But for Chinese... Well, it's <em>complicated!</em></p>

<h2 id="counting-in-mandarin-chinese"><a href="https://shkspr.mobi/blog/2016/11/how-do-you-sort-chinese-numbers/#counting-in-mandarin-chinese">Counting in Mandarin Chinese</a></h2>

<p>Here's a very quick primer on Chinese numbers.</p>

<p>一 = 1<br>
二 = 2<br>
三 = 3<br>
四 = 4<br>
五 = 5<br>
六 = 6<br>
七 = 7<br>
八 = 8<br>
九 = 9<br>
十 = 10<br>
十一 = 11<br>
十二 = 12<br>
二十 = 20<br>
二十一 = 21<br>
二十二 = 22<br>
一百 = 100<br>
一百一 = 101<br>
一百二十三 = 123</p>

<p>In <a href="http://www.amathsdictionaryforkids.com/qr/b/base10system.html">Base-10</a> the length of a number  reflects its size. A 4 digit number is <em>always</em> bigger than a 3 digit number.</p>

<p>In Chinese, a 3 character number like 四十二 (42) is <em>longer</em> than a 2 character number like 九十 (90), yet its value is <em>smaller</em>.</p>

<p>But that's not the worst of it!</p>

<p>Because of the <a href="https://news.ycombinator.com/item?id=8041288">controversial</a> process of <a href="https://en.wikipedia.org/wiki/Han_unification">Han Unification</a> - a whole bunch of Chinese, Japanese, and Korean characters (CJK) are lumped together in the same Unicode code block  This leaves us with the somewhat weird situation where a number's numerical order doesn't match the order in which they're presented in Unicode.</p>

<p>Here's how the characters are represented:</p>

<table>
<thead>
<tr>
  <th align="right">Character</th>
  <th align="left">Number</th>
  <th align="left">Unicode Codepoint</th>
</tr>
</thead>
<tbody>
<tr>
  <td align="right">一</td>
  <td align="left">1</td>
  <td align="left">U+4E00</td>
</tr>
<tr>
  <td align="right">二</td>
  <td align="left">2</td>
  <td align="left">U+4E8C</td>
</tr>
<tr>
  <td align="right">三</td>
  <td align="left">3</td>
  <td align="left">U+4E09</td>
</tr>
<tr>
  <td align="right">四</td>
  <td align="left">4</td>
  <td align="left">U+56DB</td>
</tr>
<tr>
  <td align="right">五</td>
  <td align="left">5</td>
  <td align="left">U+4E94</td>
</tr>
<tr>
  <td align="right">六</td>
  <td align="left">6</td>
  <td align="left">U+516D</td>
</tr>
<tr>
  <td align="right">七</td>
  <td align="left">7</td>
  <td align="left">U+4E03</td>
</tr>
<tr>
  <td align="right">八</td>
  <td align="left">8</td>
  <td align="left">U+516B</td>
</tr>
<tr>
  <td align="right">九</td>
  <td align="left">9</td>
  <td align="left">U+4E5D</td>
</tr>
<tr>
  <td align="right">十</td>
  <td align="left">10</td>
  <td align="left">U+5341</td>
</tr>
<tr>
  <td align="right">百</td>
  <td align="left">100</td>
  <td align="left">U+767E</td>
</tr>
</tbody>
</table>

<p>Which, if my sorting is correct, gives us an ordering of:
<code>1 7 3 2 5 9 8 6 10 4</code></p>

<p>This makes it <strong>impossible</strong> to perform even a basic sort of a simple list of numbers without first doing some complex fiddling to transform the characters into numbers first.</p>

<h2 id="it-gets-even-more-complicated"><a href="https://shkspr.mobi/blog/2016/11/how-do-you-sort-chinese-numbers/#it-gets-even-more-complicated">It gets even more complicated.</a></h2>

<p>Anyone who has tried to sort a list of files with numbers in their name, knows that computers don't always see the world in the same way as humans.  It's quite common to see a sorted list which looks like this:</p>

<pre><code>10.mp3
11.mp3
1.mp3
20.mp3
2.mp3
3.mp3
4.mp3
...
</code></pre>

<p>Why? Because sorting by "text" is different to sorting by "value".</p>

<p>How do Chinese file names get sorted?  Here's Ubuntu's File manager trying to sort some files with Chinese numbers in them:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/10/Chinese-characters-in-file-names-sorted-in-Linux-fs8.png" alt="Chinese characters in filenames sorted in linux - the files are in the wrong order" width="150" height="478" class="aligncenter size-full wp-image-23432"></p>

<p>Yet another ordering!  Why?  It turns out that <a href="https://en.wikipedia.org/wiki/Chinese_characters#Indexing">there are <em>lots</em> of ways to sort Chinese characters</a>.</p>

<p>In this case, the <a href="https://twitter.com/m13253/status/784726363282415617">characters are sorted according to the "English" pronunciation order</a>!  That's the equivalent of sorting the numbers 1 - 10 <em>alphabetically</em>: eight five four nine one seven six ten three two.</p>

<h2 id="can-we-make-it-even-more-complicated"><a href="https://shkspr.mobi/blog/2016/11/how-do-you-sort-chinese-numbers/#can-we-make-it-even-more-complicated">Can we make it even more complicated?</a></h2>

<p>Of course!</p>

<p>Let's include into the mix some <a href="https://en.wikipedia.org/wiki/Gujarati_alphabet#Digits">Gujarati digits</a>.  They look quite similar to our familiar Arabic digits and, like Arabic digits, have a sensible Unicode ordering.</p>

<p>Imagine a folder with the files <code>1</code>, <code>2</code>, <code>3</code>, <code>10</code> - with the numbers in Arabic, Chinese, and Gujarati.  How would you expect the files to be sorted?  Should <code>1</code> and <code>一</code> be grouped with  Gujarati's <code>૧</code>?</p>

<p>Naïvely we might expect the order to be 1, 2, 3, 10, ૧, ૨, ૩, ૧૦, 一, 二, 三, 十.</p>

<p>Ubuntu handles it two different ways.  In the GUI, the files are grouped:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/10/Arabic-Chinese-and-Gujarati-numbers-in-filenames-the-ordering-is-inconsistent-fs8.png" alt="Arabic, Chinese, and Gujarati numbers in filenames - the ordering is inconsistent" width="152" height="449" class="aligncenter size-full wp-image-23438"></p>

<p>On the command line, we find yet another weird way to order files:</p>

<pre><code>10.mp3
૧૦.mp3
1.mp3
૧.mp3
2.mp3
૨.mp3
3.mp3
૩.mp3
一.mp3
三.mp3
二.mp3
十.mp3
</code></pre>

<p>Would <em>any</em> human expect an ordering like this?</p>

<h2 id="whats-the-solution"><a href="https://shkspr.mobi/blog/2016/11/how-do-you-sort-chinese-numbers/#whats-the-solution">What's the solution?</a></h2>

<p>I've complained before that <a href="https://shkspr.mobi/blog/2013/06/is-github-racist/">modern computing tools often ignore modern languages</a>.  Usually it's not outright racism - just an ignorance of how the world works and how people interact with machines.</p>

<p>The correct way, in my opinion, is to have <em>context aware</em> tools which empathise with what the user is trying to achieve.</p>

<p>There are several <a href="http://stackoverflow.com/questions/15076443/convert-numbers-in-chinese-characters-to-arabic-numbers">algorithms for converting "Chinese numbers" into "Arabic numbers"</a>.  When a tool encounters a character which represents a number, it should assume that <em>the numerical representation contains semantic meaning</em>.</p>

<p>Yes, it might be hard work - but that's what computers are here for. They do hard work so humans don't have to. And if your computer can't even sort files in the correct order, what else might it be getting wrong?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=23428&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2016/11/how-do-you-sort-chinese-numbers/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[How bad is Scotland's Computer Science Exam?]]></title>
		<link>https://shkspr.mobi/blog/2016/11/how-bad-is-scotlands-computer-science-exam/</link>
					<comments>https://shkspr.mobi/blog/2016/11/how-bad-is-scotlands-computer-science-exam/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 04 Nov 2016 08:10:10 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=23473</guid>

					<description><![CDATA[Oh noes! The computer science exams taken by 16 year olds may contain errors!  BBC News Technology@BBCTechComputer science exam had coding errors bbc.in/2eHHa0Cbbc.co.ukSQA admits &#039;coding errors&#039; in computer science examScotland&#039;s exam body admits to a series of mistakes in one of this year&#039;s computer science tests.❤️ 23💬 1🔁 007:14 - Mon 17 October 2016  As a professional computerist, I was intrig…]]></description>
										<content:encoded><![CDATA[<p>Oh noes! The computer science exams taken by 16 year olds may contain <em>errors!</em></p>

<blockquote class="social-embed" id="social-embed-787914635819290624" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/BBCTech" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRhoCAABXRUJQVlA4IA4CAAAQCwCdASowADAAPrVIoEqnJCMhpzgO2OAWiWgAvgAwR6Yku8lf72gBbKsYMjesB0KeJP6j6wN3B5s/Qzzlag/SAPxEmFq+8wcewp4+scMbFcvsSkLeYOvPmIv669qRwRSgAP72gLISoUlr9Gubns/9T266/90eTO654nmf/sHf/6Dv/9B39zeqetfJ9bvnbpn49iyTKm6dkY464QJP/SpTzf+p7kbM0/cnucJhluCY+WG/yZioSiyPDUikPlla9soDUMk4lSkoz8GFwrCj6tPI3qvDvEu36Sjm2z9qT6r16pNDr1jj5OQRhHn2dgzCYjDpu3bf/mu8ibv8XJHhkaqpv4GMPWghU/OzOY2OMfMOQT1X6e+NkY6zK+Ti8VwlFGj+q4yQoAqyyJM2oJmWF41WU6IiXxCL2kFe16bciVA6b8TllGPSAOUzvXe8eLvipls+3l+utHFTwl+qe8kBVTo1KwD687WExY7gz04YnFxRQWP/a7Tc0p4OdJTaKbUDAZtB67lZm6+1zEBoCnbgaDaftx9CBTeKCfP+OctvGFp2uGlR/8JNCZQyRTuq3ATPPkbCHqyahUpd0cOHXgDvSqdfsGKEny2Z1bX08/v/d+qcdFpg2RGCho0B2j7afEbyhBa3Wfsav4S5l4vGYrEZw1AEMnYZQ6qv4ZQz+7Z68XrDz5RTtfa/vLJvZKKrRcAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">BBC News Technology</p>@BBCTech</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody">Computer science exam had coding errors <a href="http://bbc.in/2eHHa0C">bbc.in/2eHHa0C</a><a href="https://t.co/hljJetFSbf" class="social-embed-card">bbc.co.uk<br>SQA admits 'coding errors' in computer science exam<br>Scotland's exam body admits to a series of mistakes in one of this year's computer science tests.<br></a></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/BBCTech/status/787914635819290624"><span aria-label="23 likes" class="social-embed-meta">❤️ 23</span><span aria-label="1 replies" class="social-embed-meta">💬 1</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2016-10-17T07:14:22.000Z" itemprop="datePublished">07:14 - Mon 17 October 2016</time></a></footer></blockquote>

<p>As a professional computerist, I was intrigued to see what our fine young minds are being tested on.  My memories of "computing" at school was being taught MS Word Version <strong>2</strong> (yes, I am that old).  So, let's take a look at the paper - and its criticisms.</p>

<p>The <a href="https://web.archive.org/web/20161213092635/http://www.sqa.org.uk/pastpapers/papers/papers/2016/N5_Computing-Science_QP_2016.pdf">original paper is available to download as a PDF</a>.  As a small disclaimer, I've not studied for this exam, and haven't been taught in a school for many years.  The answers are how I would answer - without reference to a search engine.</p>

<blockquote>
<p>1 Convert the decimal value 227 into the equivalent 8-bit binary number.
</p></blockquote>

<p>Bit of a tough start! For only one point? Good to get the fundamentals in early though.</p>

<p>Do they have a calculator?  Hmmm, my conversion is a little rusty.
It'll be 128 + 64 + 32, that gets us to 224.  So add 3.</p>

<pre><code>00000011
00100000
01000000
10000000
=
11100011
</code></pre>

<blockquote>
<p>  2 Explain why it is important that program code is readable.
</p></blockquote>

<p>Frankly, anyone who can answer this question - and then apply it to real life - is doing better than most professionals.  I'm answering "It makes it easier for others to understand what you are trying to accomplish."</p>

<blockquote>
<p>  3 Explain why a database should not be stored in ROM memory.
</p></blockquote>

<p>I'm assuming the answer is "ROM means Read Only Memory. This means your can't update your database."  Not the last "trivia" style question.</p>

<blockquote>
<p>  4 Give one reason of using this type of selection.

  <img src="https://shkspr.mobi/blog/wp-content/uploads/2016/10/radio-buttons.png" alt="radio buttons" width="252" height="122" class="aligncenter size-full wp-image-23474">
</p></blockquote>

<p>You can argue whether UI elements are computer "science" - but it's a fair question for a single mark.  Radio buttons allow you to select one - and only one - answer from a list.</p>

<blockquote>
<p>  5 State the function of a processor’s registers.
</p></blockquote>

<p>Whoa! OK! Bit of a departure from the last question.  Off the top of my head I'd say something like "Extremely short term memory built into the processor where numbers are directly manipulated."  Is that right?  Damn...</p>

<blockquote>
<p>  6 Anti-virus software may be included in a security suite.
</p><p>  State two other types of software which should be included in a security suite.
</p></blockquote>

<p>Again, computer <em>science</em> vs ICT raises its head.  Incidentally, "Firewall" is the first thing that jumped to my head.  And then... Errr... Spam filter?  That feels like a weak answer.</p>

<blockquote>
<p>  7 Criminals can steal your identity by using keylogger programs. State two other ways in which identity theft can be carried out.
</p></blockquote>

<p>Little bit of infosec here! I'm going to say "shoulder surfing" and "Man-in-the-middle attacks".</p>

<blockquote>
<p>  8 A novice is one type of user of an information system.  State one other type of user.
</p></blockquote>

<p>Errr.... "Expert"? Bit bemused as to why this question is here. Seems out of place with the others.</p>

<blockquote>
<p>  9 This code design monitors the temperature of food as it is reheated.
</p></blockquote>

<pre>Line 1 RECEIVE temperature FROM (REAL) <temperature sensor="">
Line 2 WHILE temperature &lt; 82 DO
Line 3   SEND “temperature too low: continue to reheat” TO DISPLAY
Line 4   RECEIVE temperature FROM (REAL) <temperature sensor="">
Line 5 END WHILE
</temperature></temperature></pre>

<blockquote>
<p>  Explain what will happen in lines 2 to 5 if the sensor detects 63°.
</p></blockquote>

<p>OK, so this is pseudo-code. Probably a good idea - unless the entire syllabus has standardised on a specific language.</p>

<p>I suppose the answer is "Because the temperature is lower than the condition, the instructions on the inner loop will be carried out. If the temperature stays at 64, the loop is never ended.</p>

<blockquote>
<p>  10 Lucy is looking for a summer holiday on-line. She wishes to leave on 22nd July from her local airport, and early in the afternoon.
</p><p>  State which database operation is being carried out as she uses the website.
</p></blockquote>

<p>I'm not sure Lucy cares about the back-end system, but let's see.  As there's only one line of space, and one point, I'd answer "A search". Although perhaps "An SQL SELECT ... WHERE search" is better?</p>

<blockquote>
<p>  11 Translators are used to convert high level languages into machine code. Identify each type of translator.

</p><p>  This translator program reports errors at the end of translation.
</p><p>  This translator needs to be present in memory each time the program is executed.
</p></blockquote>

<p>Compiler and Run Time. Useful to know, glad to see this is being taught.</p>

<blockquote>
<p>  12 A running group has 16 members. They are taking part in a marathon.
</p><p>  Using pseudocode or a programming language of your choice, write the code which will take in each runner’s time for the marathon.
</p></blockquote>

<p>Do I get bonus points if I write this in Assembler?</p>

<p>This is a slightly weird question. How are the times being entered? Should there be any error checking?  Should the data be stored?</p>

<p>Anyway</p>

<pre>for ($x == 0; $x &lt;= 15; $x++)
{
   $time = get_input("Please enter the runner's time");
   insert_into_database($x, $time);
}
</pre>

<p>That'll take in 16 times and do <em>something</em> with them.</p>

<p>Writing pseudocode is a useful skill. I'd like to have seen a bit more of it in this paper. Or at least on a more challenging problem.</p>

<blockquote>
<p>  13 Before launching the website below, it is tested. The testers complain about the effectiveness of the website’s navigation.

  <img src="https://shkspr.mobi/blog/wp-content/uploads/2016/10/A-screenshot-of-a-badly-designed-website.png" alt="A screenshot of a badly designed website" width="480" height="313" class="aligncenter size-full wp-image-23476">

</p><p>  Identify two examples of poor navigation, stating what could be done to improve the situation.
</p></blockquote>

<p>No worse than some of the <em>production</em> websites I've seen ;-)  Also, no real way to know if <code>alt</code> tags have been used, ARIA etc.</p>

<p>I count...</p>

<ul>
<li>Nav bar at top doesn't have understandable text.  Should be in English.</li>
<li>Login box doesn't say what should be entered in each field.  Placeholder text should say what each field is for (username, password, pin, etc).</li>
<li>Down arrow has no context.  Should have text explaining where it will take the user.</li>
<li>Radio buttons and check boxes have inconsistent designs.  Make them recognisable.</li>
<li>Radio buttons and check boxes are visually indistinct. Use a unified design.</li>
</ul>

<p>A good exercise for anyone interested in web design. Keeping a critical eye is crucial.</p>

<blockquote>
<p>  14 State the type of network which has no centralised storage.
</p></blockquote>

<p>Eh? What? Bit of a curve ball... Ummm.... Dare I utter the words "Blockchain"? Wait, is that technically a network? Errr... I don't know what they're getting at here. I vaguely remember network topology from university. Token Ring?  Surely they're not teaching that obscure piece of tech?</p>

<p>I'll go out on a limb and say "Star Network".  It's good to teach about different network types - but this question really needs something more to test the student's knowledge.</p>

<blockquote>
<p>  15 FlightCrazy is a new company offering a flight booking service to business customers. They want to set up a database to store flight details. A researcher starts to gather information from airport timetables about available flight times.

  <img src="https://shkspr.mobi/blog/wp-content/uploads/2016/10/A-flat-file-containing-data-about-flights.png" alt="A flat file containing data about flights" width="851" height="505" class="aligncenter size-full wp-image-23477">
</p></blockquote>

<p>Oooh! A <em>good</em> clutch of Database questions.</p>

<blockquote>
<p>  (a) If the full database is created as a flat file, explain why “RouteID” is not a suitable primary key for the table.
</p></blockquote>

<p>Primary keys should be unique.</p>

<blockquote>
<p>  (b) Describe two problems in creating this as a flat file database.
</p></blockquote>

<p>Hmmm... Are they asking for problems with flat files <em>specifically</em> or in the way this has been created?</p>

<p>I'll punt with "Flat files can't be optimised for searching". And inconsistencies in naming - for example "Monday" and "Mon".</p>

<blockquote>
<p>  (c) FlightCrazy decide that using a flat file database is not suitable. State a more suitable type of database.
</p></blockquote>

<p>Relational? I mean, I'm guessing they don't want NoSQL?</p>

<blockquote>
<p>  (d) State the field type that should be used for “Aircraft Code”.
</p></blockquote>

<p>Integer... No! Wait! There are some strings in there. <code>VARCHAR(3)</code>? But what if later codes have more than 3 characters. Let's settle for String.</p>

<p>And the questions keep on coming!</p>

<blockquote>
<p>  (e) During the development of this database the following input form is created.

  <img src="https://shkspr.mobi/blog/wp-content/uploads/2016/10/An-input-form-with-dropdowns-radio-buttons-and-free-text-fields.png" alt="An input form with dropdowns, radio buttons, and free text fields.png" width="766" height="675" class="aligncenter size-full wp-image-23478">

</p><p>  (i) State one suitable type of validation for the Departure Airport field.
</p></blockquote>

<p>I'm stumped by what they're asking here.  Is it as simple as "if exists"?</p>

<blockquote>
<p>  (ii) Complete the table below to show suitable data values to test the Number of travellers field.
</p></blockquote>

<table>
<thead>
<tr>
  <th align="left">Type of test data</th>
  <th>Test data</th>
</tr>
</thead>
<tbody>
<tr>
  <td align="left">Exceptional</td>
  <td></td>
</tr>
<tr>
  <td align="left">Extreme</td>
  <td></td>
</tr>
</tbody>
</table>

<p>Say what now? I've <em>never</em> heard of exceptional and extreme data.</p>

<p>I assume "exceptional" means something like typing text into a numeric field.</p>

<p>I also assume that "extreme" means trying an SQL injection.</p>

<blockquote>
<p>  (f) During the testing of the completed database all the flights from Glasgow to all airports in London on the 8th June were found. The following output was produced.

  <img src="https://shkspr.mobi/blog/wp-content/uploads/2016/10/Results-of-a-database-search.png" alt="Results of a database search" width="799" height="555" class="aligncenter size-full wp-image-23484">

</p><p>  Describe how the above results have been sorted.
</p></blockquote>

<p>Oooh! A good one. Naively you could say "by price" - but how are the duplicate prices sorted? It's not by airline. It's not by Journey time. It's not by Destination.  It looks like it's "First by price, then by time."</p>

<p>Might have been a good idea to ask how the SQL query should have been formed.</p>

<p>And that's the end of the Database section. Some fairly good questions for a 16 year old audience there. Nothing too taxing, although I'm confused by some of the terminology (which may well be my outdated learning).</p>

<p>Now it gets tougher!</p>

<blockquote>
<p>  16 A Maths game is designed for primary school pupils to test number ordering. In the game the pupil is asked to enter two integer numbers. A third integer number is then randomly generated and shown to the user.
</p><p>  The user must then state if the random number is:

  </p><ul>
  <li>lower (l) than the two entered numbers</li>
  <li>higher (h) than the two entered numbers</li>
  <li>in the middle (m) of the two entered numbers.</li>
  </ul>

<p>  A design for the code is shown below.
</p></blockquote>

<pre><enter the="" first="" number="" and="" assign="" to="" numone="">
<enter the="" second="" number="" and="" assign="" to="" numtwo="">
<generate random="" number="" and="" assign="" to="" randnum="">
SEND randNum TO DISPLAY
GET guess FROM (CHARACTER) KEYBOARD
IF guess = “l” AND randNum &lt; numOne THEN
   SEND “Correct it is lower” TO DISPLAY
   SET score TO score + 1
END IF
IF guess = “m” AND randNum &gt;= numOne AND randNum &lt;= numTwo
   SEND “Correct it is in the middle” TO DISPLAY
   SET score TO score + 1
END IF
IF guess = “h” AND randNum &gt; numTwo
   SEND “Correct it is higher” TO DISPLAY
   SET score TO score + 1
END IF
<display incorrect="" message="">
</display></generate></enter></enter></pre>

<p>Youch! That's a lot more info than any previous question. Here we go!</p>

<blockquote>
<p>  (a) When the two numbers are entered the program should ensure that numTwo is always a higher number than numOne.
</p><p>  Using pseudocode or a programming language of your choice, write several lines to represent this input validation for line 2.
</p></blockquote>

<p>Hmmm...  Are we assuming an integer, or something else?</p>

<pre>IF (numTwo.type == number AND numTwo &gt; numOne)
   (continue)
ELSE
   SEND "Second number is less than first number" TO DISPLAY
</pre>

<p>Is that enough?</p>

<blockquote>
<p>  (b) When the pupil enters their answer it is stored in a variable called “guess”.  State the data type stored by the variable “guess”.
</p></blockquote>

<p>Again, tricky. I <em>want</em> to say take it in as a string, then turn into a float.</p>

<blockquote>
<p>  (c) The program is run with the following data. State the output from the program.
</p></blockquote>

<table>
<thead>
<tr>
  <th align="left">Variables</th>
  <th align="left">Values</th>
</tr>
</thead>
<tbody>
<tr>
  <td align="left">numOne</td>
  <td align="left">7</td>
</tr>
<tr>
  <td align="left">numTwo</td>
  <td align="left">15</td>
</tr>
<tr>
  <td align="left">randNum</td>
  <td align="left">10</td>
</tr>
<tr>
  <td align="left">guess</td>
  <td align="left">m</td>
</tr>
</tbody>
</table>

<p>Correct. 10 is between both.  Useful to see if people can step through program code.</p>

<blockquote>
<p>  (d) The program will have to make use of a pre-defined function.
</p><p>  State the pre-defined function used and describe its purpose.
</p></blockquote>

<p>The only thing I can think of is the random number generator. Am I missing something? Would we count comparison operators? Probably not.</p>

<blockquote>
<p>  (e) Using line numbers, describe how the code could be adapted, allowing the user to play the game 10 times using the same values for numOne and numTwo but a different random number each time.
</p></blockquote>

<p>Well, between line 2 and 3 we want to insert a <code>WHILE</code> loop which counts up from <code>0</code>. And an incrementing counter at the end.</p>

<blockquote>
<p>  17 John has been asked to design a website to promote an event being held to raise money for charity.
</p><p>  The organisers of the event provide this diagram showing the pages required and how they should be organised.

  <img src="https://shkspr.mobi/blog/wp-content/uploads/2016/10/A-tree-diagram-of-a-website.png" alt="A tree diagram of a website" width="524" height="385" class="aligncenter size-full wp-image-23488">

</p><p>  (a) What type of navigation structure is required for the website?
</p></blockquote>

<p>Tree.  I think... I've never really had to think about it.</p>

<blockquote>
<p>  (b) State a design notation that John could use to design the layout of the pages.
</p></blockquote>

<p>I'd usually just use path-names. Is it that simple? Or do they mean a notation like UML?</p>

<blockquote>
<p>  (c) The homepage contains hyperlinks. Describe the function of a hyperlink.
</p></blockquote>

<p>A communist plot by TIMBL to enslave the western world!</p>

<p>To be fair, you could write a decent essay on all the uses of a link - semantics, usability, data structures. But as this is a one-point question, I think they just mean "to allow a user to easily navigate to another web destination."</p>

<blockquote>
<p>  (d) John begins to build the website and stores all the files and resources on his hard disk. Here is the file structure for the website.

  <img src="https://shkspr.mobi/blog/wp-content/uploads/2016/10/A-screenshot-of-a-computer-folder-structure.png" alt="A screenshot of a computer folder structure" width="553" height="392" class="aligncenter size-full wp-image-23489">

</p><p>  (i) State the type of data you would expect to be stored in the dance.avi file.
</p></blockquote>

<p>Bah! I <em>hate</em> these style of question.  Besides, .AVI is <em>such</em> an ancient format.  It's a container for video and audio.</p>

<blockquote>
<p>  (ii) State the relative address John should enter on the display.htm page to link to dunk.gif.
</p></blockquote>

<p><code>resources/dunk.gif</code> - note the lack of <code>/</code> at the start.  I suppose an alternative might be <code>/activities/resources/dunk.gif</code>. Might have been a good idea to ask why <code>/resources..</code> wouldn't work.</p>

<blockquote>
<p>  (e) John wants to include an external link to the charity and asks the event organisers to find out the URL.
</p><p>  (i) Explain what is meant by an external link.
</p></blockquote>

<p>A link which will navigate the user away from the domain they are currently on.</p>

<blockquote>
<p>  (ii) State what the letters URL stand for.
</p></blockquote>

<p>Poor question IMO, IDK when I last needed to know what it meant.</p>

<p>The words "Uniform Resource Locator" is a silly phrase.</p>

<blockquote>
<p>  (iii) The organisers give John a photograph file from the charity which measures 5 inches by 7 inches with a resolution of 600dpi and 24-bit colour depth. Calculate the storage required for the photograph.
</p><p>  State your answer using appropriate units. Show all your working.
</p></blockquote>

<p>MATHS! FINALLY! Bit of a cumbersome way of phrasing it, but let's give it a go.</p>

<p>Total number of pixels = <code>(5 * 600) * (7 * 600) = 12,600,000 pixels.</code></p>

<p>Total number of bits = <code>12600000 * 24 = 302,400,000 bits.</code></p>

<p>Bytes = <code>302400000 / 8 = 37,800,000B</code></p>

<p>KB = <code>37800000 / 1024 = 36914KB</code></p>

<p>MB = <code>36914 / 1024 = 36MB</code></p>

<p>I'd expect to see something here about lossy vs lossless encoding. Or why this filesize is problematic for use on the web.</p>

<blockquote>
<p>  18 A software development company decide to review staff knowledge of computer related legislation.
</p><p>  Mikal is asked to create an app covering a range of legal issues.
</p><p>  (a) When Mikal records an introduction using audio software, he is prompted to select the sample rate.
</p><p>  Select sampling rate:

  </p><ul>
  <li>22050 Hz</li>
  <li>44100 Hz</li>
  <li>96000 Hz
</li></ul>  (i) Describe the effect on the size of the sound file if the highest sample rate is selected.<p></p>
</blockquote>

<p>I've <em>no</em> idea what this has to do with legal issues. The higher the sample rate the larger the file.</p>

<blockquote>
<p>  (ii) After recording, Mikal exports the file as a compressed file. State a suitable standard file format he may have used.
</p></blockquote>

<p>I'd write .MP3 on here - I'd be worried that they wouldn't know what FLAC, OGG, or any other esoteric codec was.</p>

<blockquote>
<p>  (b) Mikal develops an interactive quiz for the app to test the staff’s knowledge of legislation. The first question is about this recent article from a newspaper.
    <img src="https://shkspr.mobi/blog/wp-content/uploads/2016/11/News-article-about-an-office-worker-using-another-employees-password-without-permission-fs8.png" alt="News article about an office worker using another employee's password without permission" width="359" height="276" class="aligncenter size-full wp-image-23533">
</p><p>  (i) State the offence that has been committed under the Computer Misuse Act in this article.
</p></blockquote>

<p>OK! Now <em>this</em> is a legal issue!  But <em>which</em> specific offence? I've <strong>no idea</strong>.  I'm guessing "Unlawful access" - which is a bit question begging. I hope they're not looking for the exact reference!</p>

<blockquote>
<p>  (ii) Describe another offence under the terms of this Act.
</p></blockquote>

<p>Proper little Wikileaks going on here.  This is taxing my knowledge.  My first thought is "changing data without permission" - but that's too similar to the above.  I'll go with "intentionally disrupting the performance of a computer without permission" - for example sending a DDoS.</p>

<p>I <em>love</em> that kids are being taught about the law. Excellent idea.</p>

<blockquote>
<p>  (c) The next question that Mikal creates for the quiz is about another article.
</p><p>  "A man was arrested after he cloned his neighbour's phone."
</p><p>   Name the law which may have been broken in this case.
</p></blockquote>

<p>WTF? OK, learning the law is good - but this isn't computer science. I've zero idea which specific law is broken.</p>

<blockquote>
<p>  (d) In line with Health and Safety legislation, the company provides adjustable seating and guidelines on maintaining good posture.
</p><p>  Mikal finds graphics on a website that he can use to illustrate his next quiz question.
</p><p>  (i) Explain why he might need to seek permission to use the graphics legally.
</p></blockquote>

<p>Actually, talking about posture might be good on a CS exam. Physical issues are a real pain to deal with.</p>

<p>Anyway, let's go with "The copyright owner of the image may sue for misuse of their intellectual property."  Incidentally, I hope my critique of this paper falls under fair use!</p>

<blockquote>
<p>  (ii) Mikal uses the graphics to create question 3 for the app.
</p><p>  Question: 3 Total Score: 2

</p><p>  Using pseudocode or a programming language of your choice, write the code to show how the total score is calculated when the user answers question 3 correctly.
</p></blockquote>

<p>Errrr.... This is one of those questions that people complained about. How many points is each correct answer worth?</p>

<pre>$answer3 = get_input();
if ($answer3 == "A")
   score++
</pre>

<blockquote>
<p>  (e) When the staff member takes the finished quiz, the app sends their details and their total score to a database file.
</p><p>  State two rights that the staff member has under the Data Protection Act with regard to their own data.
</p></blockquote>

<p>Another rapid switch! I mean, it is great that the DPA is being mentioned, but a bit weird to do it here.</p>

<p>I'm going with "Right to examine the data held about them" and "Right to correct any mistakes."</p>

<p>Blimey! Still not at the end of the paper. I'm not sure I'd have got this far in the allotted 90 minutes.</p>

<p><strong>WARNING</strong> This is one of the questions which attracted a lot of complaints. See if you can work out why!</p>

<blockquote>
<p>  19 Gillian designs a program to calculate how much it costs to get her dog Penny groomed. The design is shown below.
</p></blockquote>

<pre>SET total = 0
DECLARE all costs INITIALLY [35.00, 36.00, 40.00,35.00,42.50]
FOR EACH cost FROM all costs DUE
   SET total=total+cost
END FOR EACH
SEND “The total cost = £“&amp;total TO DISPLAY
</pre>

<p>OK, that program is a bit weird - but it is pseudocode, we don't expect syntactic brilliance.</p>

<blockquote>
<p>  (a) Describe the data structure that has been used to store the individual costs.
</p></blockquote>

<p>It's an array.</p>

<blockquote>
<p>  (b) Gillian writes and tests her program. It works perfectly calculating a correct total of 188.50.
</p><p>  (i) With reference to line numbers, explain how the program calculates the final total.
</p></blockquote>

<p>Line 1 initialises a variable and sets it to zero.
Line 3 loops through the array of costs and adds each to the variable.</p>

<p>There are three points available, so I think I've missed something.</p>

<blockquote>
<p>  (ii) Describe how the contents of the variable total would be stored in the computer’s memory.
</p></blockquote>

<p>WHAT? I don't care! I'll let the compiler take care of that. It is good to get some low-level stuff in the exam.  For two points, I'm guessing... "A block of memory of a specific size is reserved for the variable."</p>

<blockquote>
<p>  (iii) Gillian edits the program with the following data:

  <code>[35.00,36.00,40.00,35.00,42.50,45.00]</code>

</p><p>  The output is still 188.50.
</p><p>  A Explain why the output is still 188.50.
</p><p>  B State how this error could be corrected.
</p></blockquote>

<p>Debugging is a vital skill - but I really can't see what's going wrong here.  Perhaps <code>DUE</code> should be <code>DO</code>? I don't know.</p>

<blockquote>
<p>  (c) Concatenation has been used in line 6. State the purpose of concatenation.
</p></blockquote>

<p>It... it sticks strings together...? Err... Let's try "It allows a variable to inserted into a string which can then be displayed."</p>

<blockquote>
<p>  20 Sue uses a website called “Check your Defences!” to learn more about keeping her computer and data safe.
  <img src="https://shkspr.mobi/blog/wp-content/uploads/2016/10/Internet-Explorer-6-showing-a-poorly-designed-website.png" alt="Internet Explorer 6 showing a poorly designed website" width="760" height="518" class="aligncenter size-full wp-image-23492">
</p></blockquote>

<p><em>aside</em> I totally love the retro browser screenshot!</p>

<blockquote>
<p>  (a) Explain the purpose of a firewall.
</p></blockquote>

<p>Keep the Wildlings out of King's Landing? No! That's an ice wall.</p>

<p>A firewall detects whether a connection to or from the network is authorised.</p>

<blockquote>
<p>  (b) Explain how encryption can help keep data safe.
</p></blockquote>

<p>More Wikileaks!  Encryption ensures that only people with the decryption key will be able to view the data.  Modern encryption is resistant to brute-force attacks.</p>

<p>I'd have expected a bit more of a technical question - this seems rather basic.</p>

<blockquote>
<p>  When Sue tries to download the mobile app onto her tablet PC, she gets the following message:
</p><p>    "This app is incompatible with your device - Check your Defences!
</p><p>  System requirements Android 4∙4 or higher, 1∙6 Ghz, 2Gb RAM, 32Gb"
</p></blockquote>

<p>(G<em>b</em>? Giga<em>bits</em>? A genuine mistake, or designed to trip us up.)</p>

<blockquote>
<p>  She checks the specification for her tablet PC.

  </p><ul>
  <li>Size: 267 x 187 x 8 mm</li>
  <li>Weight: 65 kg</li>
  <li>1∙83Ghz/2GB RAM/16GB</li>
  <li>Battery life: up to 8 hours</li>
  <li>Display: 8∙3” full HD, 10 point multi-touch</li>
  <li>Operating system: Android 4∙1</li>
  <li>USB 3, micro HDMI, microSD card slot 3∙5 MP camera</li>
  <li>Microphone</li>
  <li>Stereo speakers</li>
  <li>Headphone jack</li>
  <li>Wi-Fi</li>
  </ul>
</blockquote>

<p>(WHOA! A 65KG tablet. Not exactly portable!)</p>

<blockquote>
<p>  (c) (i) Sue’s tablet has a range of input and output devices. Identify one of each of these items on Sue’s tablet.
</p></blockquote>

<p>Inputs could be the touch screen, the camera, the mic.  Theoretically you could transmit some data back via HDMI, but I would class that as a "showing off" answer.
Outputs are the display, the speakers, the headphone jack.</p>

<p>This is back to the basic ICT questions which I hoped we'd left behind. Not very encouraging.</p>

<blockquote>
<p>  (ii) Identify one interface type on Sue’s tablet.
</p></blockquote>

<p>Again, I'm left in confusion as to what's being asked here.  The Universal Serial Bus is an interface - but so is the touch screen...</p>

<blockquote>
<p>  (iii) Describe one function of an interface.
</p></blockquote>

<p>What? This seems poorly worded.  I think they want me to say "To allow data to be exchanged from one device to another."</p>

<blockquote>
<p>  (iv) Give two reasons why the app is incompatible with Sue’s tablet PC.
</p></blockquote>

<p>Her tablet has a lower version of the operating system.
I <em>assume</em> that the <code>32Gb</code> on the requirements means storage space - but her tablet has <code>16GB</code>. To my mind sixteen gigabytes is a <em>lot</em> more than 32 gigabits... But I think I'd take a punt and assume there's a mistake in the question.</p>

<blockquote>
<p>  (d) Sue’s friend Jack views the website on his smart phone but the home screen looks different to the desktop version Sue had been using.

</p><p>  Describe one reason why the user interface on the smartphone version is designed differently to the version Sue had used on her desktop.
</p></blockquote>

<p>There's only one point on offer here. Pity, this would be an excellent chance to write about progressive enhancement, media queries, responsive design.</p>

<p>I'll stick with "Mobile users interact using a finger, this is a less precise interaction than using a mouse, so link targets should be bigger."</p>

<p><strong>LAST QUESTION ALERT!</strong></p>

<blockquote>
<p>  21 A software developer is creating an online booking system for a bowling alley. Customers can book a bowling lane for a maximum of 4 people playing a maximum of 3 games.
</p><p>  The developer has used a flow chart to produce the program design. Part of the design is shown below.

</p><p>  a) (i) State one benefit of using the design notation shown above instead of pseudocode.
</p></blockquote>

<p>Flowcharts! Yay! I might be going delirious at this point...</p>

<p>"Flowcharts allow people to easily visualise how a program works and, hopefully, spot any mistakes."</p>

<blockquote>
<p>  (ii) Name the algorithm illustrated in the bowling alley program design.
</p></blockquote>

<p>Grrr... More trivia! And, frankly, it is hardly an algorithm. Frankly, I've no idea what they want as an answer. Nor why it is relevant.</p>

<blockquote>
<p>  Using pseudocode or a programming language of your choice, complete the conditional statement at Line 3 below to implement this section of the design.
</p></blockquote>

<pre>__________  numPlayers __________  and numGames  _______
SEND “Booking Accepted” TO DISPLAY
</pre>

<p>This is VERY CONFUSING!</p>

<p>Perhaps <code>IF numbPlayers &lt;= 4 and numGames &lt;= 3</code>?</p>

<blockquote>
<p>  (c) The program is tested using a set of test data.
</p><p>  (i) Complete the table below to show three examples of test data types and the expected result for each type.
</p></blockquote>

<table>
<thead>
<tr>
  <th>Test data</th>
  <th>Test data type</th>
  <th>Expected Result</th>
</tr>
</thead>
<tbody>
<tr>
  <td>numPlayers = 3<br>numGames = 2</td>
  <td>Normal</td>
  <td>Booking accepted</td>
</tr>
<tr>
  <td>numPlayers = 4<br>numGames = 3</td>
  <td>____</td>
  <td>Booking accepted</td>
</tr>
<tr>
  <td>numPlayers = 6<br>numGames = 3</td>
  <td>____</td>
  <td>____</td>
</tr>
</tbody>
</table>

<p>ARGH! Back to testing. I mean, yay testing, but what are the test data types again? Extreme and Abnormal?</p>

<p>The last one has a result of Booking rejected. But I've no idea what the data types are.  I'm guessing "normal" and "abnormal"?</p>

<blockquote>
<p>  (ii) The character “£” is entered as a test value for the number of players. This causes the program to crash. State the type of error that would cause this crash.
</p></blockquote>

<p>Depends on the language. I'd say "Type exception" maybe "Cast exception"?</p>

<blockquote>
<p>  (d) Error detection and correction in a program is easier if the code is readable. State one technique that can be used to ensure readability of code.
</p></blockquote>

<p>And we're back where we started! I'd go with "Clear variable names which don't use abbreviations."  I wonder if they'd value an extended discourse on tabs vs spaces?</p>

<h2 id="and-breathe"><a href="https://shkspr.mobi/blog/2016/11/how-bad-is-scotlands-computer-science-exam/#and-breathe">And Breathe!</a></h2>

<p>That was a lot tougher than I expected. I wasn't doing it in exam conditions, but I felt the pressure.</p>

<p>The obvious mistakes didn't help my nerves but, guess what, the real world isn't perfect either.  Computer Science is the art of trying to fit the messy analogue world into a pure state of binary bliss.</p>

<h2 id="conclusion"><a href="https://shkspr.mobi/blog/2016/11/how-bad-is-scotlands-computer-science-exam/#conclusion">Conclusion</a></h2>

<p>I think that's a pretty good computer science paper - especially for students who may only have studied it for a couple of years.</p>

<p>I think it leans <em>slightly</em> too far towards ICT but I'm pleased with the mentions of usability, good design, security, and the law.</p>

<p>There are a few "Trivia" questions. The "What is this thing called" style - I'm not a big fan of them. Far better to test the understanding of the design, not the name.  Similarly, the legal questions veer into the obscure.</p>

<p>Some of the technology is a little out of date - but it's such a fast moving space, talking about file-formats which have only recently become popular might disadvantage people without the time to keep up.</p>

<p>So, are the mistakes "<a href="http://www.bbc.co.uk/news/uk-scotland-36458863">a disgrace</a>"?</p>

<p>There <em>should</em> be spaces between array elements - but part of computer science is reading poorly written code.</p>

<p>Some of the pseudocode is typed incorrectly - but that's the nature of pseudocode.</p>

<p>The unit confusion is annoying, and could trip up someone with an eye for detail. That's a shame, but not a showstopper.</p>

<p>I'm not a teacher - and I have no idea what is on the syllabus. All that said, I've met Computer Science graduates who would struggle with some aspects of this paper.</p>

<p>I think us geeks often over-estimate how much we knew when we were kids. When I was 16, I thought I was <em>1337</em> (back when that meant something).  I wasn't.  I couldn't have passed a paper of similar complexity.</p>

<p>I think this represents an excellent foundation for anyone wanting to studying computing.</p>

<h2 id="my-score"><a href="https://shkspr.mobi/blog/2016/11/how-bad-is-scotlands-computer-science-exam/#my-score">My Score</a></h2>

<p>You can <a href="https://web.archive.org/web/20161213112001/http://www.sqa.org.uk/pastpapers/papers/instructions/2016/mi_N5_Computing-Science_mi_2016.pdf">read the marking instructions online as a PDF</a></p>

<p>I scored... 59/90.  Yikes!</p>

<p>Most of the dropped points were where I over-thought the question, and a few where I was missing basic knowledge (mantissa!).  Perhaps I'd have picked up a few points if the marker knew the subject well.</p>

<p>Some, I just screwed up the answers. I wasn't specific enough in saying that the database results had been sorted in <em>descending</em> order.</p>

<p>Based on the <a href="https://www.sqa.org.uk/sqa/63002.4240.html">published grade boundaries</a>, I <em>think</em> I just about scraped an A.</p>

<p>How did <em>you</em> do?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=23473&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2016/11/how-bad-is-scotlands-computer-science-exam/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Why can't you send email to a Chinese address?]]></title>
		<link>https://shkspr.mobi/blog/2016/09/why-cant-you-send-email-to-a-chinese-address/</link>
					<comments>https://shkspr.mobi/blog/2016/09/why-cant-you-send-email-to-a-chinese-address/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 20 Sep 2016 11:41:33 +0000</pubDate>
				<category><![CDATA[usability]]></category>
		<category><![CDATA[chinese]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[unicode]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=23331</guid>

					<description><![CDATA[We all know what an email address looks like and how to validate them, right?  A few years ago I got the Chinese domain name 莎士比亚.org.  You can browse to it, link to it, and send email to it.  Or can you?  When I tried two years ago, none of the major email providers supported sending to non-ASCII email addresses.  Today, I tried again with six of the big &#34;Western&#34; webmail providers.  How did they…]]></description>
										<content:encoded><![CDATA[<p>We all know what an email address looks like and <a href="https://david-gilbertson.medium.com/the-100-correct-way-to-validate-email-addresses-7c4818f24643">how to validate them</a>, right?</p>

<p>A few years ago I got the Chinese domain name <a href="https://莎士比亚.org">莎士比亚.org</a>.  You can browse to it, link to it, and send email to it.  <em>Or can you?</em></p>

<p>When I tried <a href="https://shkspr.mobi/blog/2014/01/poor-idn-support-from-major-webmail-providers/">two years ago</a>, <strong>none</strong> of the major email providers supported sending to non-ASCII email addresses.</p>

<p>Today, I tried again with six of the big "Western" webmail providers.  How did they do?</p>

<h2 id="show-me-the-data"><a href="https://shkspr.mobi/blog/2016/09/why-cant-you-send-email-to-a-chinese-address/#show-me-the-data">Show Me The Data!</a></h2>

<p>I tested by trying to send an email to <code>test@莎士比亚.org</code> and the <a href="https://en.wikipedia.org/wiki/Punycode">Punycode</a> representation <code>test@xn--jlq54w7ypemw.org</code></p>

<table>
<thead>
<tr>
  <th align="right"></th>
  <th align="center">test@莎士比亚.org</th>
  <th align="center">test@xn--jlq54w7ypemw.org</th>
</tr>
</thead>
<tbody>
<tr>
  <td align="right">Gmail</td>
  <td align="center"><span style="color:green">✔</span></td>
  <td align="center"><span style="color:green">✔</span></td>
</tr>
<tr>
  <td align="right">Outlook</td>
  <td align="center"><span style="color:green">✔</span></td>
  <td align="center"><span style="color:green">✔</span></td>
</tr>
<tr>
  <td align="right">Yahoo</td>
  <td align="center"><span style="color:red">❌</span></td>
  <td align="center"><span style="color:red">❌</span></td>
</tr>
<tr>
  <td align="right">iCloud</td>
  <td align="center"><span style="color:red">❌</span></td>
  <td align="center"><span style="color:green">✔</span></td>
</tr>
<tr>
  <td align="right">OWA</td>
  <td align="center"><span style="color:red">❌</span></td>
  <td align="center"><span style="color:green">✔</span></td>
</tr>
<tr>
  <td align="right">FastMail</td>
  <td align="center"><span style="color:green">✔</span> ⭐</td>
  <td align="center"><span style="color:green">✔</span></td>
</tr>
</tbody>
</table>

<h2 id="winners"><a href="https://shkspr.mobi/blog/2016/09/why-cant-you-send-email-to-a-chinese-address/#winners">Winners!</a></h2>

<p>Both Gmail and Outlook failed the last time I tried them - I'm very pleased to say that both of them now support sending to Chinese addresses.</p>

<p>One strange thing to note, when looking through Outlook's message details, I found this example of <a href="https://en.wikipedia.org/wiki/Mojibake">Mojibake</a>.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/09/Outlook-Encoding-Issues-.png" alt="Outlook showing encoding errors, mangling up the email address" width="528" height="163" class="aligncenter size-full wp-image-23344"></p>

<h2 id="losers"><a href="https://shkspr.mobi/blog/2016/09/why-cant-you-send-email-to-a-chinese-address/#losers">Losers!</a></h2>

<h3 id="yahoo"><a href="https://shkspr.mobi/blog/2016/09/why-cant-you-send-email-to-a-chinese-address/#yahoo">Yahoo</a></h3>

<p>The biggest loser is Yahoo.  Very strange considering <a href="https://en.wikipedia.org/wiki/Jerry_Yang">Jerry Yang</a>, their founder, is Taiwanese-American.  Even stranger given <a href="https://en.wikipedia.org/wiki/Criticism_of_Yahoo!#Work_in_the_People.27s_Republic_of_China">Yahoo's continued dealings with China</a>.</p>

<p>The Yahoo webmail portal simply wouldn't let me send to a Chinese domain name.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/09/Yahoo-email-not-recognised-.png" alt="Yahoo unable to send a message to a Chinese email address" width="640" height="349" class="aligncenter size-full wp-image-23340">

<p>The Punycode representation appeared to send but immediately failed.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/09/Yahoo-unable-to-send-message-.png" alt="Yahoo unable to send a message to a Chinese email address" width="638" height="169" class="aligncenter size-full wp-image-23339">

<h3 id="icloud"><a href="https://shkspr.mobi/blog/2016/09/why-cant-you-send-email-to-a-chinese-address/#icloud">iCloud</a></h3>

<p>Apple's much-vaunted "It Just Works" philosophy obviously doesn't extend to International email addresses.  It accepted the Punycode but gave this <em>delightful</em> error message on the Chinese domain.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/09/iCloud-Delivery-Failure-Notification-.png" alt="iCloud showing a delivery failure notification" width="607" height="458" class="aligncenter size-full wp-image-23342">

<h3 id="owa"><a href="https://shkspr.mobi/blog/2016/09/why-cant-you-send-email-to-a-chinese-address/#owa">OWA</a></h3>

<p>Microsoft's Outlook Web Access got <em>very</em> confused and tried to look up the email address in the local directory.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/09/OWA-No-Match-Found-.png" alt="Outlook Web Access showing no match found" width="543" height="170" class="aligncenter size-full wp-image-23343">

<h2 id="errr"><a href="https://shkspr.mobi/blog/2016/09/why-cant-you-send-email-to-a-chinese-address/#errr">Errr?</a></h2>

<h3 id="%e2%ad%90-fastmail"><a href="https://shkspr.mobi/blog/2016/09/why-cant-you-send-email-to-a-chinese-address/#%e2%ad%90-fastmail">⭐ FastMail</a></h3>

<p>Lots of people recommended that I try <a href="https://www.fastmail.com/">Fastmail</a> - it <em>really</em> didn't like the look of the Chinese domain and painted it with a red error colour.  That said, it sent the email without further complaint.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/09/Fastmail-showing-red-error-on-email-.png" alt="Fastmail apparently showing that the email address is invalid" width="545" height="436" class="aligncenter size-full wp-image-23345">

<h2 id="what-about-a-chinese-local-part"><a href="https://shkspr.mobi/blog/2016/09/why-cant-you-send-email-to-a-chinese-address/#what-about-a-chinese-local-part">What about a Chinese Local-Part?</a></h2>

<p>Email is a venerable protocol. That's a polite way of saying it is old and outdated.  The <a href="https://en.wikipedia.org/wiki/Email_address#Local-part">local-part</a> of the email address (<code>test@</code>) is generally restricted to a handful of <a href="https://www.jochentopf.com/email/chars.html">7 Bit ASCII characters</a>.  None of the email providers I tried would let me sign up with a Chinese name. So no 你好@yahoo.com for me!</p>

<p>But what happens if you're foolish enough to try to send an email to <code>你好@莎士比亚.org</code>?</p>

<p>Well you'll probably get this error message:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/09/SMTPUTF8-Delivery-Failure-Notification.png" alt="Technical details of permanent failure: local-part of envelope RCPT address contains utf8 but remote server did not offer SMTPUTF8" width="659" height="160" class="aligncenter size-full wp-image-23348">

<p>In 2012, <a href="https://tools.ietf.org/html/rfc6531">RFC 6531 defined how International Email Addresses should work</a>.  Over four years later and <a href="https://en.wikipedia.org/wiki/Extended_SMTP#SMTPUTF8">support is <em>still</em> not widespread</a>.</p>

<p>It's 2016 and the majority of the world <strong>can't send an email to their preferred name</strong>.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=23331&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2016/09/why-cant-you-send-email-to-a-chinese-address/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Debuffs, Enchantment, Equipment, and Players - an RPG Player's Guide to User Stories]]></title>
		<link>https://shkspr.mobi/blog/2016/08/debuffs-enchantment-equipment-and-players-an-rpg-players-guide-to-user-stories/</link>
					<comments>https://shkspr.mobi/blog/2016/08/debuffs-enchantment-equipment-and-players-an-rpg-players-guide-to-user-stories/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 26 Aug 2016 11:10:52 +0000</pubDate>
				<category><![CDATA[usability]]></category>
		<category><![CDATA[users]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=23220</guid>

					<description><![CDATA[If you&#039;ve spent any time in a modern design environment, you&#039;ll be familiar with the idea of User Stories.  As a first-time user, I want to log in with Facebook, so that I don&#039;t have to set up a new account.   Fairly easy, right?  Stick enough of those up on a wall and you&#039;ve got yourself a party!  If you&#039;ve ever played an RPG or Roguelike game, you&#039;ll be familiar with how your character can…]]></description>
										<content:encoded><![CDATA[<p>If you've spent any time in a modern design environment, you'll be familiar with the idea of User Stories.</p>

<blockquote><p>As a first-time user, I want to log in with Facebook, so that I don't have to set up a new account.
</p></blockquote>

<p>Fairly easy, right?  Stick enough of those up on a wall and you've got yourself a party!</p>

<p>If you've ever played an RPG or <a href="https://en.wikipedia.org/wiki/Roguelike">Roguelike</a> game, you'll be familiar with how your character can evolve throughout a game.</p>

<blockquote><p>You put on a cursed ring! Your attacks now do 10% less damage!
</p><p>(A typical <a href="https://en.wikipedia.org/wiki/Status_effect">debuff</a>)
</p></blockquote>

<p>So, let's apply a little video-game learning to our user centred design.</p>

<p>I've written previously about <a href="https://shkspr.mobi/blog/2014/01/ui-for-drunks/">drunken user testing</a> - being sloshed is a <em>temporary</em> physiological and neurological impairment.  One that may affect the majority of your users.  I remember <a href="https://web.archive.org/web/20200924205905/https://twitter.com/tommorris/status/668160089132548098?ref_src=twsrc%5Etfw">trying to order a Chinese takeaway using an app while inebriated</a> - it didn't end well!</p>

<p>Now, you wouldn't necessarily rewrite <em>all</em> your stories with "As a <sup>drunk</sup> user, I..." but it is certainly worth scribbling out a few stickers which you can overlay on existing stories.  How do you change your design and your code if you <em>assume</em> the user is a lush?</p>

<p>There's a serious point here (somewhere).  Minority users often have exactly the same desires as majority users - but they may need a different way to achieve them.</p>

<p>For example, a blind user will almost certainly want to use the full functionality of your site.  Is it enough to just have <strong>one</strong> user story saying:</p>

<blockquote><p>As a blind user, I want the site to comply with accessibility best practices, so that I can use it effectively.</p></blockquote>

<p>I don't think so.  I mean, it is better than nothing, but almost every story should be tested against a variety of variables.</p>

<p>Of course, just as in video games, sometimes our users receive a little boost - an Enchantment - which makes them <em>better able</em> to perform some tasks.  How should we cope with users who are better than we are at using our system?</p>

<p>Finally, Equipment.  Some of you are reading this blog post using an extremely expensive, high powered computer, with a massive screen and jiggaflops of RAM - others are having bytes transmitted via carrier-pigeon and carved into a potato.</p>

<p>I've quickly jotted down some typical amendments which can be applied to <em>most</em> user stories.</p>

<table>
<thead>
<tr>
  <th>Debuff</th>
  <th>Enchantment</th>
  <th>Equipment</th>
</tr>
</thead>
<tbody>
<tr>
  <td>Blindness</td>
  <td>Highly caffeinated</td>
  <td>Internet Explorer 6</td>
</tr>
<tr>
  <td>Tiredness</td>
  <td>Lots of free time</td>
  <td>iPhone 7 with a low battery</td>
</tr>
<tr>
  <td>Poverty</td>
  <td>Over confidence</td>
  <td>Cracked screen</td>
</tr>
<tr>
  <td>A slow Internet connection</td>
  <td>A very fast Internet connection</td>
  <td>E-Ink Device</td>
</tr>
</tbody>
</table>

<p>(Feel free to argue about exactly where each of those item should go - you get the general idea.)</p>

<p>If you're playing a game and are armed with only a cursed wooden spoon and flammable armour, it is unlikely you'll beat the dungeon's dragon boss.  Similarly, a tired user with <a href="https://www.parkinsons.org.uk/content/tremor-and-parkinsons">Parkinson's</a> and an old BlackBerry running on 2G, may find using our service difficult.</p>

<p>Think about what attributes you can add to your user stories.  Randomly sprinkle them through your design process.  Help developers and designers understand that there's no such thing as a typical user.</p>

<hr>

<h3 id="addendum"><a href="https://shkspr.mobi/blog/2016/08/debuffs-enchantment-equipment-and-players-an-rpg-players-guide-to-user-stories/#addendum">Addendum</a></h3>

<p>This discussion was sparked off at a design day.  A very lovely agency had written out some lovely user profiles for us.  You know the sort "Dave, 35, busy juggling 3 kids and love of golf" and "Denise, 22, wants to keep up with technology" that kind of thing.</p>

<p>They seemed rather put out when I started adding my own notes to them.  Little speech bubbles saying:</p>

<ul>
<li>I am secretly gay.</li>
<li>I am drowning in debt.</li>
<li>I am a victim of domestic violence.</li>
<li>I am wanted by the police.</li>
<li>I am embezzling money.</li>
<li>I am getting a divorce.</li>
<li>I am a social media troll.</li>
<li>I have PTSD.</li>
</ul>

<p><a href="https://twitter.com/edent/status/765863503227940864/"><img src="https://shkspr.mobi/blog/wp-content/uploads/2016/08/Unusual-Users-.jpg" alt="A selection of unusual users" width="1199" height="676" class="aligncenter size-full wp-image-23225"></a></p>

<p>Not things which normally go on to a persona - but <em>real</em> problems which affect a lot of our users.  We can't assume everyone who interacts with our stuff is happy, healthy, and honest.</p>

<p>Some of our personas <em>should</em> reflect the ugly reality of humanity:</p>

<blockquote><p>As a racist, I want to be able to send offensive messages, so that I can assert my dominance.</p></blockquote>

<p>How do we cater for these stories? I don't mean "how do we make a racist social network?" but rather "how do we minimise the harm from or to this sort of user?"</p>

<p>I'm not trying to <a href="http://interactions.acm.org/archive/view/november-december-2013/user-stories-dont-help-users-Introducing-persona-stories">criticise User Stories</a> - I'm saying that we should consider that a typical user gets tired, has low battery, may want to hide an aspect of themselves, needs some protecting, and often changes throughout the course of the day.</p>

<p>So, Product Owners, it is time to level up!  Or, as I prefer to say, +1 to inclusiveness.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=23220&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2016/08/debuffs-enchantment-equipment-and-players-an-rpg-players-guide-to-user-stories/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Scaling Is A Human Problem Too]]></title>
		<link>https://shkspr.mobi/blog/2016/08/scaling-is-a-human-problem-too/</link>
					<comments>https://shkspr.mobi/blog/2016/08/scaling-is-a-human-problem-too/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 25 Aug 2016 07:16:23 +0000</pubDate>
				<category><![CDATA[usability]]></category>
		<category><![CDATA[humans]]></category>
		<category><![CDATA[slack]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=23264</guid>

					<description><![CDATA[This morning I received an email which made my heart sink.  In order to co-ordinate things better, we&#039;d like to invite you to our exclusive Slack Channel!  A variety of rude words danced around my brain.  I think this makes the, what, 9th? 10th? Slack that I&#039;m part of.  Don&#039;t get me wrong, I like Slack as a service - but it only really works if you have One Slack Team To Rule Them All.  I&#039;ve just …]]></description>
										<content:encoded><![CDATA[<p>This morning I received an email which made my heart sink.</p>

<blockquote>In order to co-ordinate things better, we'd like to invite you to our exclusive <strong>Slack Channel</strong>!</blockquote>

<p>A variety of rude words danced around my brain.  I think this makes the, what, 9th? 10th? Slack that I'm part of.</p>

<p>Don't get me wrong, I like Slack as a service - but it only really works if you have One Slack Team To Rule Them All.</p>

<p>I've just got a new tablet - so I need to sign in to Slack <strong>TEN TIMES!</strong>  How is that an acceptable user experience?</p>

<p>Oh, and then I have to do it all over again on my phone.</p>

<blockquote class="social-embed" id="social-embed-768448115984703488" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><blockquote class="social-embed" id="social-embed-768447582112739328" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/edent" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/edent/status/768444473948995584">Replying to @edent</a></small><a href="https://twitter.com/SlackHQ">@SlackHQ</a> I've been invited to a new Slack. How do I automatically sign in on my laptop, phone, &amp; tablet?</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/768447582112739328"><span aria-label="0 likes" class="social-embed-meta">❤️ 0</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2016-08-24T13:59:15.000Z" itemprop="datePublished">13:59 - Wed 24 August 2016</time></a></footer></blockquote><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/SlackHQ" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-square" src="data:image/webp;base64,UklGRsoBAABXRUJQVlA4IL4BAADQCgCdASowADAAPrVKm0onJCIhsdM9+OAWiWwAxQfCqd+GbJ/Y/bgTTt/80eCEnSkcb22egt5LBUSHkDjEHPbPnjNX9rLh2voxowBQOx5xLrjQ7+XvzuKnbyL6VeHAAAD+/tgs93mkNxrOK4SyESnIZvwHKoqWcmCxW8RwioR1MjtZQ7wPEIVqzE7WNWfV6fY2CFjlwgJaWnlqlproTY5eneoOubXqzSkXwR7FFVSocCU9vb8iHzUATGMrYaOkTzST/ZJiRv9rcogv4RTeVgQe/z4qg48Md79WHOLhIAtOYH7ySQoM/oG7dKNAgGOHn1T7bqdgRTh0f6ccU5F1h8BChPehCRIFOJtz/OSd/pl/BuJ80S2HkHBP4/rXQlyBm+TfS1kjj9VOOL0fVijcR3UEkhtVnpICbxxrPl/wOK6zfD2bwBJ0a4aEyYD4gS8at776aBDZQTfNXn4WMjzdnxZ3c2Lf61ORyHp1ZjwfY9nNLm+wU+g5fY1kEr/fDRgvxppLZy9HeOxfCYZhYYkuLDQ7UP5+b2avQvyRGP/hMsx/TFrqN/jkSwoN6d7TGVrkNL6h3FL2ZAo3u/DcGtZwAA==" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Slack</p>@SlackHQ</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/edent/status/768447582112739328">Replying to @edent</a></small><a href="https://twitter.com/edent">@edent</a> You'll have to sign in on each one Terence! Sorry for the trouble.</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/SlackHQ/status/768448115984703488"><span aria-label="0 likes" class="social-embed-meta">❤️ 0</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2016-08-24T14:01:22.000Z" itemprop="datePublished">14:01 - Wed 24 August 2016</time></a></footer></blockquote>

<p><em>sigh</em> fine. Whatever.</p>

<p><a href="https://twitter.com/mayerpopp/status/622022848887037952"><img src="https://shkspr.mobi/blog/wp-content/uploads/2016/08/A-Slack-icon-saying-kill-me-please-fs8.png" alt="A Slack icon saying 'kill me please'" width="382" height="191" class="aligncenter size-full wp-image-23267"></a></p>

<p>So I go to sign in.  I have to give an email address - I can't use one of the half-dozen social sign-in providers I use.  That also means I have to give my first and last name, and a preferred username.  Tiresome.</p>

<p>I have to set a new avatar image - because it's not picking up from my Twitter, Skype, Facebook, etc.</p>

<p>And then, to add insult to injury, I have to change the default timezone - because not everyone lives in California.</p>

<p>This is a scaling issue.  Each time I get a new device (a few times a year) I have to go through this time-consuming and annoying rigmarole.  Each time I get invited to a new Slack (hey, I'm a popular guy!) I have to faff around setting it up, configuring it, and maintaining it.</p>

<p>Look, I get that some Slack Teams need 2FA and all sorts of custom stuff - but why should I as a user care about that?</p>

<p>I want:</p>

<ul>
<li>One Slack account - which has my avatar, timezone, username, preferences, teams, and so on.</li>
<li>errr...</li>
<li>... nope, that'll do.</li>
</ul>

<p>Sure, if my Top Secret Slack imposes extra security requirements on me - present them when I sign in to my account.  Or let me have a separate password.  Or mandate 2FA for everything.  I don't care.  I'm just tired of <em>feeling dread</em> whenever I think about joining a new Slack team or setting up a new device.</p>

<p>I'm only human.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=23264&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2016/08/scaling-is-a-human-problem-too/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[IANA Insanity - or, how I learned to stop .worrying and .love the .new .internet]]></title>
		<link>https://shkspr.mobi/blog/2016/07/iana-insanity-or-how-i-learned-to-stop-worrying-and-love-the-new-internet/</link>
					<comments>https://shkspr.mobi/blog/2016/07/iana-insanity-or-how-i-learned-to-stop-worrying-and-love-the-new-internet/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 27 Jul 2016 16:15:59 +0000</pubDate>
				<category><![CDATA[usability]]></category>
		<category><![CDATA[domains]]></category>
		<category><![CDATA[iana]]></category>
		<category><![CDATA[rage]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=23134</guid>

					<description><![CDATA[In The Beginning  There was the .com and the .org and the .net and it was good.  And, I mean, there were probably a few others - but that&#039;s all people cared about.  Go Forth And Multiply  And THE LORD sayeth &#34;Hey, do people want country codes? Like .UK, .FR, .DE?&#34;  And the people were all like &#34;Duh! Yeah!&#34;  Except for the people of the American United States. For they gnashed their teeth and…]]></description>
										<content:encoded><![CDATA[<h2 id="in-the-beginning"><a href="https://shkspr.mobi/blog/2016/07/iana-insanity-or-how-i-learned-to-stop-worrying-and-love-the-new-internet/#in-the-beginning">In The Beginning</a></h2>

<p>There was the .com and the .org and the .net and it was good.</p>

<p>And, I mean, there were probably a few others - but that's all people cared about.</p>

<h2 id="go-forth-and-multiply"><a href="https://shkspr.mobi/blog/2016/07/iana-insanity-or-how-i-learned-to-stop-worrying-and-love-the-new-internet/#go-forth-and-multiply">Go Forth And Multiply</a></h2>

<p>And THE LORD sayeth "Hey, do people want country codes? Like .UK, .FR, .DE?"</p>

<p>And the people were all like "Duh! Yeah!"</p>

<p>Except for the people of the American United States. For they gnashed their teeth and wailed "We invented the Internet. There's no way we are going to use .US.  We'll take the top level, thanks."</p>

<p>And many did wonder if they should have let them have .USAUSAUSA!</p>

<h2 id="the-descent-into-madness"><a href="https://shkspr.mobi/blog/2016/07/iana-insanity-or-how-i-learned-to-stop-worrying-and-love-the-new-internet/#the-descent-into-madness">The Descent Into Madness</a></h2>

<p>And some people were not satisfied.  And lo! They asked for more domains and THE LORD shrugged and said "Eh. Sure. Why not?"</p>

<p>And thus .mobi and .biz and .tel and their brethren were born. Yet no one used them. Dust returned to the land.  Still the people cried out for more.</p>

<h2 id="the-end-of-days"><a href="https://shkspr.mobi/blog/2016/07/iana-insanity-or-how-i-learned-to-stop-worrying-and-love-the-new-internet/#the-end-of-days">The End Of Days</a></h2>

<p>In that time, a certain man was heard to say "Wouldn't it be cool if we could have .Nokia? Or, like, any top level domain we wanted?"</p>

<p>The wise elders spat on the ground and sang as one "That is the dumbest idea that we ever heard. Literally, what is the point?"</p>

<p>But the people of the valley were vain, and each man wanted his own top level domain.</p>

<p>So rang out the cry "Open up your wallets and prepare to have them emptied."</p>

<p>And the people of the valley emptied their wallets. And it was bad.</p>

<h2 id="the-great-confusion"><a href="https://shkspr.mobi/blog/2016/07/iana-insanity-or-how-i-learned-to-stop-worrying-and-love-the-new-internet/#the-great-confusion">The Great Confusion</a></h2>

<p>In the great accounting house, a young scribe grew weary. "Why do I not have a domain, oh Lord?" he prayed.</p>

<p>And THE LORD appeared in front of him in the vision of a burning bunch of pink-carbon-paper which really should have gone to Janice in Accounts-Receivable last week.</p>

<p>"<strong>ALL COUNTERS OF MONEY SHALL HAVE A DOMAIN!</strong>"</p>

<p>And so it was that the young man was asked if he wanted a <a href="https://www.iana.org/domains/root/db/accountant.html">.accountant domain</a> managed by Famous Four Media Limited, or if he would prefer an almost identical but subtly different <a href="https://www.iana.org/domains/root/db/accountants.html">.accountant<strong>s</strong> domain</a> managed by Donuts Inc.</p>

<p>The boy trembled. "How am I to tell the difference, oh Lord? Won't there be a confusion upon the land?"</p>

<p>"<strong>THAT'S A GOOD POINT. YOU'D BETTER BUY BOTH JUST TO BE ON THE SAFE SIDE.</strong>"  And THE LORD did vanish.</p>

<p>And their <em>was</em> much confusion.</p>

<h2 id="how-much-confusion"><a href="https://shkspr.mobi/blog/2016/07/iana-insanity-or-how-i-learned-to-stop-worrying-and-love-the-new-internet/#how-much-confusion">How Much Confusion?</a></h2>

<p>(I've stopped writing in that spoof-Biblical style now)</p>

<p>Take a look at the <a href="https://data.iana.org/TLD/tlds-alpha-by-domain.txt">latest list of top level domains</a>.</p>

<p>Here are all the domains which I think are easily confusable - or seemingly duplicates.  Some are brand new, some are not.</p>

<ul>
<li>.accountant</li>
<li>.accountants</li>
<li>.chanel</li>
<li>.channel (As in "TV Channel" not the French Fashion House) </li>
<li>.fan</li>
<li>.fans</li>
<li>.game</li>
<li>.games</li>
<li>.loan</li>
<li>.loans</li>
<li>.market</li>
<li>.markets</li>
<li>.mobi</li>
<li>.mobily (Completely unrelated, but quite similar)</li>
<li>.onl</li>
<li>.online (seriously, .<a href="http://www.i-registry.com/onl-domain.htm">onl's advert</a> says "As short and catchy as .com - As universal and practical as <a href="http://radix.website/dot-online/">.online</a>"!)</li>
<li>.paris</li>
<li>.pars (An easy typo to make)</li>
<li>.photo</li>
<li>.photography</li>
<li>.photos</li>
<li>.prod</li>
<li>.productions</li>
<li>.review</li>
<li>.reviews</li>
<li>.sex</li>
<li>.sexy</li>
<li>.tech</li>
<li>.technology (Again, separate companies managing these similar domains)</li>
<li>.theatre</li>
<li>.theater (OK, the Yanks and the Brits spell this differently!)</li>
<li>.tkmaxx</li>
<li>.tjmaxx (These are both the same store group, but it's called TK Maxx in the UK to avoid confusion with the similarly names TJ Hughes)</li>
<li>.watch</li>
<li>.watches</li>
<li>.win</li>
<li>.wine</li>
<li>.vin (<a href="https://web.archive.org/web/20150222125421/http://www.steveheimoff.com/index.php/2014/07/07/concerning-those-controversial-wine-domains/">This is a controversial issue in the wine world</a>)</li>
<li>.work</li>
<li>.works</li>
</ul>

<p>I'm sure there are a few I've missed - but that's already a huge scope for confusion, impersonation, and duplication.</p>

<p>To be fair, some of the domains will only allow registration from authorised parties.  So you won't be able to register "Clippy.microsoft" - unless you work there.</p>

<p>Oh, and my favourite?</p>

<p>.zip</p>

<p>Because it will be the cause of great parsing confusion.</p>

<blockquote class="social-embed" id="social-embed-567820810371735553" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/edent" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody">Grrr... Because .zip is a valid TLD, it's impossible to know whether <a href="http://example.zip">example.zip</a> should be a URL or a filename.</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/567820810371735553"><span aria-label="9 likes" class="social-embed-meta">❤️ 9</span><span aria-label="5 replies" class="social-embed-meta">💬 5</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2015-02-17T23:00:05.000Z" itemprop="datePublished">23:00 - Tue 17 February 2015</time></a></footer></blockquote>

<p>The Internet is broken - let's throw it out and start again.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=23134&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2016/07/iana-insanity-or-how-i-learned-to-stop-worrying-and-love-the-new-internet/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Don't use negative numbers for error codes]]></title>
		<link>https://shkspr.mobi/blog/2016/07/dont-use-negative-numbers-for-error-codes/</link>
					<comments>https://shkspr.mobi/blog/2016/07/dont-use-negative-numbers-for-error-codes/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 15 Jul 2016 07:28:00 +0000</pubDate>
				<category><![CDATA[usability]]></category>
		<category><![CDATA[errors]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=23056</guid>

					<description><![CDATA[A warning to programmers - try to understand how people will use your error codes.  This morning, I was confronted with a rather bemusing error message on my WordPress blog:   Ok, so this should &#34;never happen&#34; and yet somehow it has.  I wonder what on earth the error code means?  I selected the error code and Googled it!    I just copied and pasted the error message into Google and got back a set …]]></description>
										<content:encoded><![CDATA[<p>A warning to programmers - try to understand how people will use your error codes.</p>

<p>This morning, I was confronted with a rather bemusing error message on my WordPress blog:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/07/An-error-code-with-a-negative-number-fs8.png" alt="An error code with a negative number" width="1053" height="297" class="aligncenter size-full wp-image-23059"></p>

<p>Ok, so this should "never happen" and yet somehow it has.  I wonder what on earth the error code means?  I selected the error code and <a href="https://www.google.co.uk/search?q=Error+code%3A+-32300">Googled it</a>!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/07/Google-results-for-searching-for-an-error-code-fs8.png" alt="Google results for searching for an error code" width="766" height="676" class="aligncenter size-full wp-image-23058">

<p>I just copied and pasted the error message into Google and got back a set of meaningless results.  Why?</p>

<p>Most search engines treat the minus sign as an "excludes" operator.  Suppose I want to search for information about the Python programming language, but I don't want any results about snakes; Google lets me search for "<a href="https://www.google.co.uk/search?q=python%20-snake">python -snake</a>".</p>

<p>In this case, Google is searching for every error code <strong>except for the one I want!</strong></p>

<p>If we remove the <code>-</code> sign, <a href="https://www.google.co.uk/search?q=Error+code%3A+32300">the correct results are returned</a>.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/07/Google-search-for-error-code-without-a-negative-number-correct-results-returned-fs8.png" alt="Google search for error code without a negative number - correct results returned" width="782" height="675" class="aligncenter size-full wp-image-23057">

<p>I've <a href="https://github.com/Automattic/jetpack/issues/4410">raised this as an issue with the software</a>.</p>

<p>Remember, your error messages should be meaningful to the user.  It should contain a clear explanation of what has happened and how the problem can be fixed.  It should also be easy to search for information about the error.  This message, sadly, fails at all three of those reasonable objectives.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=23056&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2016/07/dont-use-negative-numbers-for-error-codes/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[How *not* to do a password change page]]></title>
		<link>https://shkspr.mobi/blog/2016/07/how-not-to-do-a-password-change-page/</link>
					<comments>https://shkspr.mobi/blog/2016/07/how-not-to-do-a-password-change-page/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 10 Jul 2016 09:34:26 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[idiots]]></category>
		<category><![CDATA[passwords]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=23044</guid>

					<description><![CDATA[We&#039;ve all been faced with this screen, right?  You haven&#039;t logged in to a website for a while, so it prompts you to change your password.    sigh Annoying but probably necessary.  The problem was, every time I tried to change my password, it told me that my old password was invalid.  The one that I&#039;d just used to log in.  I use the incredible LastPass Password Manager - so I knew I wasn&#039;t typing…]]></description>
										<content:encoded><![CDATA[<p>We've all been faced with this screen, right?  You haven't logged in to a website for a while, so it prompts you to change your password.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/07/Screenshot-of-A-Change-Password-field.-It-lists-various-restrictions-but-nothing-about-a-maximum-length.png" alt="Screenshot of A Change Password field. It lists various restrictions - but nothing about a maximum length" width="790" height="511" class="aligncenter size-full wp-image-23050">

<p><em>sigh</em> Annoying but probably necessary.</p>

<p>The problem was, every time I tried to change my password, it told me that my <em>old</em> password was invalid.  The one that I'd just used to log in.  I use the <a href="https://lastpass.com/">incredible LastPass Password Manager</a> - so I knew I wasn't typing it incorrectly.</p>

<p>It took a few tries, but I finally figured out what was going wrong.  When I'd set up the account, LastPass had generated a secure 32 character password.  But the "old password" field had artificially restricted passwords to a maximum of 20 characters.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/07/Screenshot-of-HTML-source-code-showing-that-the-input-maxlength-is-set-to-20-fs8.png" alt="Screenshot of HTML source code showing that the input maxlength is set to 20-fs8" width="542" height="121" class="aligncenter size-full wp-image-23046">

<p>Well, that's easy enough to change! Crack open Firefox's Inspect Element tool, change the <code>maxlength</code> value, and submit again.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/07/Screenshot-of-A-Change-Password-field.-An-error-message-says-ensure-this-value-has-at-most-20-characters-it-has-32-fs8.png" alt="Screenshot of A Change Password field. An error message says ensure this value has at most 20 characters it has 32)-fs8" width="661" height="139" class="aligncenter size-full wp-image-23049">

<p>What <em>utter</em> cockwombles.</p>

<p>Can you see any mention of a maximum length in the password rules? Minimum, sure, but no max.</p>

<p>Naturally, this 20 character restriction isn't enforced on the login page.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/07/Screenshot-of-HTML-source-showing-now-password-length-restrictions-on-login-fs8.png" alt="Screenshot of HTML source showing now password length restrictions on login-fs8" width="514" height="434" class="aligncenter size-full wp-image-23045">

<p>Take a bow, "Willis Towers Watson", your web developers are actively making the world a worse place.  I'd ring you up to complain, but naturally you're closed on a Sunday.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=23044&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2016/07/how-not-to-do-a-password-change-page/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Why do some WebP Images appear upside down?]]></title>
		<link>https://shkspr.mobi/blog/2016/06/why-do-some-webp-images-appear-upside-down/</link>
					<comments>https://shkspr.mobi/blog/2016/06/why-do-some-webp-images-appear-upside-down/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 21 Jun 2016 11:52:20 +0000</pubDate>
				<category><![CDATA[usability]]></category>
		<category><![CDATA[webp]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=22971</guid>

					<description><![CDATA[A few years ago, Google introduced a new image format to the world - WebP.  It purports to be a superior image format for the web but, like all new toys, it takes a little while for the bugs to be ironed out.  I found a curious case where some WebP images are rendered upside down!    On the left is Opera for Android, centre is Chrome for Android, and on the right is Firefox for Android.  Firefox…]]></description>
										<content:encoded><![CDATA[<p>A few years ago, Google introduced a new image format to the world - <a href="https://developers.google.com/speed/webp/">WebP</a>.  It purports to be a superior image format for the web but, like all new toys, it takes a little while for the bugs to be ironed out.</p>

<p>I found a curious case where <a href="https://twitter.com/edent/status/739196416615153664">some WebP images are rendered <em>upside down!</em></a></p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/06/Three-renderings-of-WebP-on-Android-Browsers-.png" alt="Three renderings of WebP on Android Browsers-" width="1024" height="611" class="aligncenter size-full wp-image-22973">

<p>On the left is Opera for Android, centre is Chrome for Android, and on the right is Firefox for Android.  Firefox is the only one which renders the lower image correctly.  The upper image is also WebP.</p>

<p>This also seems to affect iOS.</p>

<blockquote class="social-embed" id="social-embed-739211070141825024" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><blockquote class="social-embed" id="social-embed-739210689668124676" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/edent" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/paulglavin/status/739210327481581568">Replying to @paulglavin</a></small><a href="https://twitter.com/paulglavin">@paulglavin</a> so I'm not seeing things? That's good to know. Any chance of a screenshot?</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/739210689668124676"><span aria-label="0 likes" class="social-embed-meta">❤️ 0</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2016-06-04T21:42:16.000Z" itemprop="datePublished">21:42 - Sat 04 June 2016</time></a></footer></blockquote><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/paulglavin" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRrABAABXRUJQVlA4IKQBAADwCQCdASowADAAPrVYoE0nJaMiJzgLaOAWiWQAuzO0hD2vBUAe9VpiifXly8ZupiCgzgInCnPv4zNNpj2z8QZI/UqjxWeygzJBKwXj/9Yo/9vrl0YXYPLgAP7e3DbKWbnUeIYpgqa4f+RQuDk4S9KrdDS9/2x1wynWWCTQRIrW3fV1puR6AFhnnB7F4WXmdEYeoEOwAJIx1IWsI6hO+5blCkYH+xO4AeUH235Z3Nkh7R4xuclzZ1ejSwg1L3DTp3i6RlJiNGs3yHS/sw0kv8LbxUHNNI5fMSQ1Zb1hXt7zT9camYMkmD+MoE6mY4ACcEIFRiyTbJX+Kciww5PaevW9Q70w0SUYwUxDeskVnHhS9cVTCZX3s+iDB8wIUrAdtF5F4BG1fHOythgXOtK+40qhbxHYqJSltuKehlScZbYQtYzJ9ogxrehkXUOawfBrDwzVQbKAmqqLdmB70GT+zxdLxrWIQH81zLDuU7WuU3KrFOknKEqhhWoA8CsGeOkbaOrCDdAjaz+1Zlk+CFT5151rp93EpzuBd2OPqJw6fKCfCy1tgAA=" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Paul Glavin</p>@paulglavin</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/edent/status/739210689668124676">Replying to @edent</a></small><a href="https://twitter.com/edent">@edent</a> I can't guarantee you're not seeing things! <a href="https://twitter.com/paulglavin/status/739211070141825024/photo/1">pic.x.com/o48z3ywmlq</a><div class="social-embed-media-grid"><a href="https://pbs.twimg.com/media/CkI0io1WYAAuE4C.jpg" class="social-embed-media-link"><img class="social-embed-media" alt="" src="data:image/webp;base64,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"></a></div></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/paulglavin/status/739211070141825024"><span aria-label="0 likes" class="social-embed-meta">❤️ 0</span><span aria-label="1 replies" class="social-embed-meta">💬 1</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2016-06-04T21:43:47.000Z" itemprop="datePublished">21:43 - Sat 04 June 2016</time></a></footer></blockquote>

<p>The <a href="https://www.buzzfeed.com/hayleycampbell/it-was-the-70s">original article</a> has since replaced the WebP images with standard JPGs - but I managed to grab one of the images before they were removed.</p>

<p><img src="https://shkspr.mobi/blog/wp-content/uploads/2016/06/enhanced-22171-1442572700-10.webp" class="aligncenter size-full wp-image-22976" alt="A WebP formatted image which appears to render upside down on some platforms.">
(Photo via <a href="https://web.archive.org/web/20160519133027/http://www.theworldsbestever.com/2015/09/13/back-in-the-day-when-they-used-to-market-cocaine/">David Wilfert</a>)</p>

<p>I'm not sure if my Android phone has somehow mangled the file when it was saved, or whether the image was like that to start with.</p>

<p>There are, I suppose, three possibilities.</p>

<ol>
    <li>Both iOS and Android have a bug with rendering some WebP images.</li>
    <li>Buzzfeed's CDN has a bug which rotates <em>some</em> WebPs - and <a href="http://caniuse.com/#feat=webp">doesn't serve them to Firefox due to lack of support</a>.</li>
    <li>A collective hallucination.</li>
</ol>

<p>For now, I'm tempted to put the blame on a buggy image conversion - that seems to be the simplest explanation.  Either way, a salutary reminder to check your content in several different browsers.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=22971&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2016/06/why-do-some-webp-images-appear-upside-down/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[The UK's Digital Driving Licence]]></title>
		<link>https://shkspr.mobi/blog/2016/06/the-uks-digital-driving-licence/</link>
					<comments>https://shkspr.mobi/blog/2016/06/the-uks-digital-driving-licence/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 20 Jun 2016 07:41:03 +0000</pubDate>
				<category><![CDATA[usability]]></category>
		<category><![CDATA[digital]]></category>
		<category><![CDATA[dvla]]></category>
		<category><![CDATA[holiday]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=22963</guid>

					<description><![CDATA[I am an idiot.  I am a Grade A+, certified, undeniable plonker.  The man in the hire car office looked at me with barely concealed contempt.  Fair, really.  He&#039;d asked for my Driver&#039;s Licence and I&#039;d collapsed to my knees at the sudden realisation that the slim plastic card was 1,700 miles away from the Canary Islands.  &#34;I am sorry sir, but there is really nothing I can do.&#34;  My wife was hobbling …]]></description>
										<content:encoded><![CDATA[<p>I am an idiot.</p>

<p>I am a Grade A+, certified, undeniable plonker.</p>

<p>The man in the hire car office looked at me with barely concealed contempt.  Fair, really.  He'd asked for my Driver's Licence and I'd collapsed to my knees at the sudden realisation that the slim plastic card was 1,700 miles away from the Canary Islands.</p>

<p>"I am sorry sir, but there is really nothing I can do."</p>

<p>My wife was hobbling around on crutches due to a sprained ankle and we were staying in a villa literally off the beaten track. A week of getting taxis everywhere would be expensive - assuming they could even find our lodgings!</p>

<p>Then, inspiration struck!  I remembered that as part of the changes to the UK Driving Licence, <a href="https://www.gov.uk/government/news/hiring-a-vehicle">the DVLA had created an online portal to allow you to share your licence information with hire car companies</a>.</p>

<p>I ran to the only spot in the villa with WiFi, connected my phone, and hurriedly entered my information into <a href="https://www.gov.uk/view-driving-licence">https://www.gov.uk/view-driving-licence</a> and was instantly rewarded with...</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/06/Screenshot-of-DVLA-Licence-summary-.png" alt="Screenshot of DVLA Licence summary-" width="540" height="380" class="aligncenter size-full wp-image-22967">

<p>A blessed PDF containing all my information and a code with which to view the information online.</p>

<p>Would that be enough? <a href="https://twitter.com/summerbeth">My wife</a> - who is far more intelligent, practical, and resourceful than I - suggested that I check directly with the hire car company's head office.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/06/With-this-document-it-is-ok-to-collect-the-car-.png" alt="With this document it is ok to collect the car-" width="540" height="398" class="aligncenter size-full wp-image-22968">

<p>Woo!</p>

<p>Yet, another taxi back to the airport.  The gruff gentleman had been replaced with an amiable woman who, on presentation of my credentials sadly sighed and said "Ah, no. It is impossible. Full licence only."</p>

<p>I pleaded with her and showed the email from her HQ.  She sighed again and dialled the phone.  There was a period of intensely fast Spanish, some of it shouted.  It culminated with "<em>¿Si? ¿En serio? ¿Si? ¿Estás seguro?</em> OK!"</p>

<p>She put down the phone, looked me in the eye, and said "The British are very strange. Everything on the Internet!"  She duly took down my details, photocopied my phone, and handed me the keys to a turquoise Citroen.</p>

<p>So, a million thanks to the digital elves at DVLA.  Their dedication to making the UK a leader in online infrastructure provided me with tangible help when I needed it most.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=22963&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2016/06/the-uks-digital-driving-licence/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Google's Yellow Is Too Mellow]]></title>
		<link>https://shkspr.mobi/blog/2015/11/googles-yellow-is-too-mellow/</link>
					<comments>https://shkspr.mobi/blog/2015/11/googles-yellow-is-too-mellow/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 14 Nov 2015 08:53:40 +0000</pubDate>
				<category><![CDATA[usability]]></category>
		<category><![CDATA[accessibility]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[logo]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=21693</guid>

					<description><![CDATA[After much kerfuffle, the world has finally got used to the new Google logo.  Well, almost.  My eye is continually caught by the poor contrast of the yellow &#34;O&#34; against its background.  Take a look...  This is Google&#039;s default logo on its regular grey background.   The contrast ratio between the yellow and grey is 1.50.  That fails to meet current accessibility guidelines.  This is just awful - I …]]></description>
										<content:encoded><![CDATA[<p>After much kerfuffle, the world has finally got used to the new Google logo.  Well, almost.  My eye is continually caught by the poor contrast of the yellow "O" against its background.</p>

<p>Take a look...</p>

<p>This is Google's default logo on its regular grey background.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/10/Google-Grey-fs8.png" alt="Google Grey-fs8" width="480" height="158" class="aligncenter size-full wp-image-21697"></p>

<p>The <a href="https://www.contrastchecker.co.uk/#fbbc05-#f1f1f1">contrast ratio between the yellow and grey is 1.50</a>.  That fails to meet <a href="http://www.w3.org/TR/WCAG/#visual-audio-contrast">current accessibility guidelines</a>.</p>

<p style="background:#f1f1f1;color:#fbbc05">This is just awful - I find it quite hard to read, especially for long passages.  The text seems to shimmer about the background.</p>

<p>The logo is also often found on a pure white background with <a href="https://www.siegemedia.com/contrast-ratio#%23fbbc05-on-%23fff">similarly poor results</a>.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/10/Google-White-fs8.png" alt="Google White-fs8" width="480" height="157" class="aligncenter size-full wp-image-21698"></p>

<p style="background:#ffffff;color:#fbbc05">Against white, it is somewhat more readable - but it's nowhere near to a suitable contrast ratio </p>

<p>According to Google's own guidelines:</p>

<blockquote><p>Text should maintain a minimum contrast ratio of at least 4.5:1 (calculated based on luminance values) for legibility. A ratio of 7:1 is preferred.
</p><p><cite><a href="https://m2.material.io/design/color/text-legibility.html#legibility-standards">Material Design - Typography</a></cite></p></blockquote>

<p>Don't get me wrong, <span style="background:#f1f1f1;color:#fcff00"><strong>it could be a lot worse</strong></span>!  But it really is unfortunate that their logo contains a central character which is so out of kilter with the background that it becomes a distraction.</p>

<blockquote><p>The realization of the new identity required the collective work and diligence of hundreds of Googlers, in different roles, spanning the entire organization.
</p><p><cite><a href="https://web.archive.org/web/20151114095120/https://design.google.com/articles/evolving-the-google-identity/">Evolving the Google Identity</a></cite></p></blockquote>

<p>Sadly, it would seem, none from the accessibility department.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=21693&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2015/11/googles-yellow-is-too-mellow/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Premature Subsetting of Web Fonts]]></title>
		<link>https://shkspr.mobi/blog/2015/11/premature-subsetting-of-web-fonts/</link>
					<comments>https://shkspr.mobi/blog/2015/11/premature-subsetting-of-web-fonts/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 11 Nov 2015 11:59:52 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=21572</guid>

					<description><![CDATA[If you thought Web Fonts were pretty nifty, then you&#039;re going to think font subsetting is really cool.  No, honestly! It is!  As I&#039;ve written about before you can dramatically reduce the size of your Web Fonts by cutting out characters that you don&#039;t need.  For example, suppose you don&#039;t need to include the русский алфавит - you can immediately drop 66 letters (upper- and lower-case), a whole load…]]></description>
										<content:encoded><![CDATA[<p>If you thought Web Fonts were pretty nifty, then you're going to think font subsetting is really cool.  No, honestly! It is!  As <a href="https://shkspr.mobi/blog/2013/05/subsetting-chinese-fonts/">I've written about before</a> you can dramatically reduce the size of your Web Fonts by cutting out characters that you don't need.</p>

<p>For example, suppose you don't need to include the <abbr title="Russian Alphabet">русский алфавит</abbr> - you can immediately drop 66 letters (upper- and lower-case), a whole load of accents, and a bunch of other Cyrillic stuff.  That's up to <a href="https://en.wikipedia.org/wiki/Cyrillic_script_in_Unicode">400 fewer characters</a> - a <strong>huge</strong> space saving.</p>

<p>Here's how the <a href="http://www.fontsquirrel.com/tools/webfont-generator">Font Squirrel Webfont Generator</a> handles subsetting:
<a href="http://www.fontsquirrel.com/tools/webfont-generator"><img src="https://shkspr.mobi/blog/wp-content/uploads/2015/10/Font-Subsetting-fs8.png" alt="Font Subsetting-fs8" width="768" height="740" class="aligncenter size-full wp-image-21573"></a></p>

<p>Depending on the font you start with and the characters you anticipate you'll need, you can easily optimize your webfont size more than any <a href="http://google-opensource.blogspot.co.uk/2015/09/introducing-brotli-new-compression.html">Brotli compression</a> could hope to manage.</p>

<p>Now, what do all good computer programmers know about <a href="http://ubiquity.acm.org/article.cfm?id=1513451">Premature Optimization</a>?</p>

<p>So, some clever web designers have realised that they can eke out a few more microseconds of performance if they drop all of the weird characters from their fancy web fonts and stick to good ol' fashioned US-ASCII.</p>

<p>Which has this unfortunate side effect.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/10/Premature-Subsetting-2.jpg" alt="Premature Subsetting 2" width="1024" height="579" class="aligncenter size-full wp-image-21574">

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/10/Premature-Subsetting.jpg" alt="Premature Subsetting" width="1024" height="463" class="aligncenter size-full wp-image-21575">

<p>As you can see from these two examples, there's a designer somewhere wailing and gnashing their teeth at the sight of these abominations.  All that hard work - <em>and cost</em> - of choosing the right font ruined, because someone thought they'd drop support for European accents.</p>

<p>Is this worth it?  Let's take a look at the <a href="http://www.fontsquirrel.com/fonts/New-Athena-Unicode">New Athena Unicode</a> font as a good example.</p>

<blockquote><p>New Athena Unicode is a freeware multilingual font distributed by the American Philological Association. It follows the latest version of the Unicode standard and includes characters for English and Western European languages, polytonic Greek, Coptic, Old Italic, and Demotic Egyptian (and Arabic) transliteration, as well as metrical symbols and other characters used by classical scholars.</p></blockquote>

<p>The font contains 1825 glyphs - the TTF is 690KB. Once converted into the heavily compressed WOFF2 format, it's 149KB.  Using the FontSquirrel subsetter to get <em>just</em> the common English language characters results in a WOFF2 font of 17KB.  Tiny!</p>

<p>Ok, that's a pretty decent chunk saved - but at the expense of the most European languages. Adding back in French, German, Italian, Polish, and the <a href="https://en.wikipedia.org/wiki/Latin_Extended-A">Latin set</a> takes the font up to 35KB.  Yes, the size has doubled - but I'd argue it's now several times more useful</p>

<p>Be smart.  Do you really need extended punctuation like
‰‱′″‴‵‶‷‸‹››※‼‽‾‿⁀⁁⁂⁃⁄⁅⁆⁇⁈⁉⁊⁋⁌⁍⁎⁏⁐⁑⁒⁓⁔⁕⁖⁗⁘⁙⁚⁛⁜?</p>

<p>No, probably not. Strip it out.  But take a look at what you <strong>do</strong> use.  There's no "correct" answer for this, by the way.  If you're confident that your reporters are never going to interview someone with a Polish name - leave out those letters.  Or, have your database regenerate fonts on the fly when it receives a previously unseen character.</p>

<p>But please don't pretend that these "unusual" characters don't exist!  You're publishing on the <strong>World Wide</strong> Web - act like it.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=21572&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2015/11/premature-subsetting-of-web-fonts/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[The Design Of Everyday Toilets]]></title>
		<link>https://shkspr.mobi/blog/2015/11/the-design-of-everyday-toilets/</link>
					<comments>https://shkspr.mobi/blog/2015/11/the-design-of-everyday-toilets/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 06 Nov 2015 11:55:17 +0000</pubDate>
				<category><![CDATA[usability]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[toilet]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=21538</guid>

					<description><![CDATA[Another in my occasional series on the usability of toilets!  It&#039;s hard wandering around seeing the mistakes which are made by designers.  Perhaps it&#039;s poor keming on fonts, or a hotel room light switch which makes no sense, or - in my case - bogs.  Lots of toilets incorporate a &#34;dual flush.&#34; Press one button to unleash a deluge sufficient to sink all but the hardiest of bowel-movements, press a…]]></description>
										<content:encoded><![CDATA[<p>Another <a href="https://shkspr.mobi/blog/2009/05/the-usability-of-toilet-paper-dispensers/">in my occasional series on the usability of toilets</a>!</p>

<p>It's hard wandering around seeing the mistakes which are made by designers.  Perhaps it's poor keming on fonts, or a hotel room light switch which makes no sense, or - in my case - bogs.</p>

<p>Lots of toilets incorporate a "dual flush." Press one button to unleash a deluge sufficient to sink all but the hardiest of bowel-movements, press a different button to release a trickle designed to gently dilute the user's micturations.</p>

<p>I've often visited lavatories where I was unsure of which button to press - but I think this is the first time I found a toilet which <em>blocked its own buttons!</em></p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/11/Blocked-Toilet-Buttons.jpg" alt="Blocked Toilet Buttons" width="800" height="745" class="aligncenter size-full wp-image-21543">

<p>The only way to access the buttons is to manhandle the toilet seat, or attempt to curve your fingers as to avoid touching the filthy thing.</p>

<p>But wait! There's more!  As all Usability Experts™ know - a sign is an admission that you've failed to create something intuitive.  Let's take a closer look.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/10/Blocked-Toilet-Buttons-And-Sign.jpg" alt="Blocked Toilet Buttons And Sign" width="800" height="606" class="aligncenter size-full wp-image-21539">

<p>It would appear that there really is no need for two buttons.  Neither works by itself - the only way to flush is to simultaneously depress both.  Not quite practical with one hand.</p>

<p>Here's how a sensible loo would work.</p>

<ul>
    <li>Finish the shameful business in hand.</li>
    <li>Rotate body.</li>
    <li>Use finger of one hand to depress button.</li>
</ul>

<p>Here's how this crapper works.</p>

<ul>
    <li>Contemplate what it's like cleaning peanut butter out of a thick pile carpet.</li>
    <li>Rotate body.</li>
    <li>Read sign.</li>
    <li>Close lid.</li>
    <li>Use both hands to activate dual button flushing system.</li>
</ul>

<p>What a palaver, eh?  <em>Nul points!</em></p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=21538&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2015/11/the-design-of-everyday-toilets/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Doc Brown is a Crap UI Designer]]></title>
		<link>https://shkspr.mobi/blog/2015/10/doc-brown-is-a-crap-ui-designer/</link>
					<comments>https://shkspr.mobi/blog/2015/10/doc-brown-is-a-crap-ui-designer/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 21 Oct 2015 15:17:30 +0000</pubDate>
				<category><![CDATA[usability]]></category>
		<category><![CDATA[bttf]]></category>
		<category><![CDATA[movies]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[ux]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=21680</guid>

					<description><![CDATA[I&#039;m incredibly disappointed with &#34;Doctor&#34; Emmett Brown.  His forays into time-travel could have extremely profound consequences for the space/time continuum.  Worse than that, his time machine has a crap user interface.  In this clip from &#34;Back To The Future&#34; we get a brief glimpse at the controls for setting the destination date:   Ok, we can forgive Brown for not sticking to ISO-8601 - that is…]]></description>
										<content:encoded><![CDATA[<p>I'm incredibly disappointed with "Doctor" <a href="https://en.wikipedia.org/wiki/Emmett_Brown">Emmett Brown</a>.  His forays into time-travel could have <em>extremely</em> profound consequences for the space/time continuum.  Worse than that, his time machine has a crap user interface.</p>

<p>In this <a href="https://youtu.be/KPeHFDxKUP4?t=36">clip from "Back To The Future"</a> we get a brief glimpse at the controls for setting the destination date:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/10/BTTF1.jpg" alt="BTTF1" width="1024" height="494" class="aligncenter size-full wp-image-21682"></p>

<p>Ok, we can forgive Brown for not sticking to <a href="https://en.wikipedia.org/wiki/ISO_8601">ISO-8601</a> - that is the eminently sensible Year-Month-Day-Hours-Minutes-Seconds format - the standard was finalised in 1988, a few years after he allegedly built his time machine.</p>

<p>But why are the "Destination Time" LEDs red - the universal colour for stop/warning?  The "Present Time" LEDs are green - not great for men with colour-blindness.</p>

<p>AM/PM are positioned <em>before</em> the hour marker.  WTF?</p>

<p>Generally speaking, humans read top-to-bottom.  So having the "Destination Time" label in the middle of two displays could prove confusing.</p>

<p>There appears to be no "Seconds" setting - is this level of precision acceptable?</p>

<p>Let's move on and take a look at the sequel - the imaginatively named "<a href="https://youtu.be/6Tf8mPsvcOs?t=6">Back To The Future Part 2</a>":</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/10/BTTF2.jpg" alt="BTTF2" width="1024" height="488" class="aligncenter size-full wp-image-21681">

<p>OMG!  In this latest revision, the AM/PM labels have <strong>swapped position!</strong></p>

<p>It's unclear if this is a conscious design choice, or whether the labels have fallen off and been carelessly repositioned.  This could lead to the unwary user arriving 12 hours before or after they expect.  That is not a great user experience!</p>

<p>Finally, let's <a href="https://youtu.be/63KOboifCig?t=50">take a look at Part 3</a></p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/10/BTTF3.jpg" alt="BTTF3" width="1024" height="385" class="aligncenter size-full wp-image-21684">

<p>Well isn't this just <em>fanfuckingtastic!?</em>  The AM/PM has <strong>switched again!</strong>  What utter contempt the designers are showing for their user.</p>

<p>It's obvious that the LED lighting isn't sufficient for either use in bright sunshine - or for viewing from the driver's position.</p>

<p>The label is "Departed Time" - rather than "Time Departed" which would keep it consistent with the other two labels.</p>

<p>And, if that weren't bad enough - take a look at the "Month" section.  Yup, it has gone from being JAN/FEB/MAR etc - to a two digit representation!</p>

<p>Oh, and apparently, there's no support for TimeZones. FFS...</p>

<p>Seriously, if you are planning on designing a time machine, please don't take any advice from this nutcase!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=21680&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2015/10/doc-brown-is-a-crap-ui-designer/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Sharing on Android is Broken]]></title>
		<link>https://shkspr.mobi/blog/2015/08/sharing-on-android-is-broken/</link>
					<comments>https://shkspr.mobi/blog/2015/08/sharing-on-android-is-broken/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 24 Aug 2015 10:46:08 +0000</pubDate>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[google]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=21310</guid>

					<description><![CDATA[As I get older, I begin to lose neuroplaciticy.  I get angry and confused when I don&#039;t understand things.  I get frustrated when I have to change my behaviour.  It happens to all of us, to some extent, and it&#039;s one of the major reasons you should design your apps in a clear and consistent manner.  I&#039;ve been using Android - Google&#039;s mobile OS - it since before it was launched.  I now love and…]]></description>
										<content:encoded><![CDATA[<p>As I get older, I begin to lose <a href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3622467/">neuroplaciticy</a>.  I get angry and confused when I don't understand things.  I get frustrated when I have to change my behaviour.  It happens to all of us, to some extent, and it's one of the major reasons you should design your apps in a clear and <strong>consistent</strong> manner.</p>

<p>I've been using Android - Google's mobile OS - it since <em>before</em> it was launched.  I now love and loath it in equal measure.</p>

<p>Consider the simple act of sharing a piece of content.  A fairly common activity which the OS should be able to handle in a standard manner.  Yet Google's <em>own apps</em> each have a radically different way of completing this basic task.</p>

<p>Let's take a look at the latest versions of Play, Maps, YouTube, Chrome, Google+, and Docs - all running on Lollipop.</p>

<ol>
    <li>Google Play, has the normal Share Icon.</li>
    <li>Google Maps hides the option in a menu.</li>
    <li>YouTube has <em>two</em> share buttons, neither of which look like the one in Play.<br>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/08/Android-Share-Button-Montage-fs8.png" alt="Android Share Button Montage-fs8" width="1024" height="728" class="aligncenter size-full wp-image-21311">
</li>
    <li>Chrome hides the option in a dropdown (weird how it floats over the menu button, unlike Maps).</li>
    <li>Google+ takes us back to the regular share icon (with no text label).</li>
    <li>Google Docs uses a floating bottom menu (what?!) with a yet another icon and a "Send file" text label.</li>
</ol>

<p>That's at least 6 different ways to share content in Google's <strong>official</strong> Android apps.  There may be more, but those are the only ones installed on my phone.</p>

<p>Ok, so we've decided to share some content in a standard Google app.  What does the share menu look like?</p>

<ol>
    <li>Play has a simple list of sharing destinations at the bottom.</li>
    <li>Maps has a big grid of sharing destinations.</li>
    <li>YouTube has a <em>different</em> grid with even larger icons - three of which are set off from the rest with no explanation. Oh, and a "Copy URL" button in the top right.<br><img src="https://shkspr.mobi/blog/wp-content/uploads/2015/08/Google-Share-Menu-Montage-fs8.png" alt="Google Share Menu Montage-fs8" width="1024" height="1283" class="aligncenter size-full wp-image-21312"></li>
    <li>Chrome has a pop-up over the centre of the screen - the icons are yet another different size.</li>
    <li>Google+ only lets you share with other G+ users. Bless!</li>
    <li>Finally, Drive takes us back to the bottom menu style.</li>
</ol>

<p>Bonus points to anyone who can figure out the order of the sharing options.  It's neither alphabetical nor usage based.</p>

<p>I can't keep up with this.  I'm trying, I really am, but every time I try to share something I just don't know what I'm going to be faced with.  And, even when I can figure out where the share button is hidden - there's no easy way to find the app to which I want to share.</p>

<p><em>sigh</em></p>

<p>There have been <a href="https://web.archive.org/web/20160815142258/http://www.fastcodesign.com/3031872/why-isnt-there-a-standard-share-button">many</a> <a href="http://www.sharethis.com/legal/privacy/usage-guidelines/#sthash.WDxFrE4I.dpbs">attempts</a> to <a href="https://web.archive.org/web/20131107154641/http://www.markarteaga.com/the-share-icon-on-windows-phone/">standardise</a> a <a href="https://web.archive.org/web/20150906084001/https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/BarIcons.html">sharing</a> <a href="https://www.shareaholic.com/openshareicon/">icon</a> - but none of them have succeeded.</p>

<p>Google <a href="https://www.google.com/design/icons/#ic_settings_voice">does not define a sharing icon in its Material Design guide</a>.  Its teams seem free to pick and choose any one they like - or ignore it all together.</p>

<p>This mishmash approach to Android has been festering for years.  Three years ago, I was blogging about <a href="https://shkspr.mobi/blog/2012/06/button-button-whos-got-the-button/">Google's constantly shifting menu button</a> - something they've <em>nearly</em> fixed!</p>

<p>Remember, these aren't independent developers re-inventing the wheel.  These are flagship apps produced by one company.  It's clear there's no-one at Google responsible for consistency or user-experience across their services.</p>

<p>Android is a runaway success - that's clear - and fiddling round the edges is unlikely to dramatically change its trajectory.</p>

<p>And yet... These little irritations begin to grate until they build up into an overwhelming torrent of confusion - just as they did for Symbian and BlackBerry.  As it gets more complicated to perform everyday tasks on Android, people <em>will</em> look for a device which values simplicity and consistency.  Google desperately needs to avoid sharing the same fate as those moribund platforms.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=21310&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2015/08/sharing-on-android-is-broken/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Anti-Social App Design]]></title>
		<link>https://shkspr.mobi/blog/2015/08/anti-social-app-design/</link>
					<comments>https://shkspr.mobi/blog/2015/08/anti-social-app-design/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 10 Aug 2015 07:08:13 +0000</pubDate>
				<category><![CDATA[usability]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[DWIM]]></category>
		<category><![CDATA[near future]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=21260</guid>

					<description><![CDATA[My good friend  Dan Appelquist recent wrote a fascinating blog post on solipsism as a design decision.  He has a set of Lifx Internet Controlled Lightbulbs.  They&#039;re great fun, but have some seriously screwy ideas about how people live.  One key design of the app is to allow you to automatically switch off all your lights when you exit your house.  That&#039;s pretty nifty, right?  I am still…]]></description>
										<content:encoded><![CDATA[<p>My good friend  Dan Appelquist recent wrote a fascinating blog post on <a href="https://medium.com/@torgo/solipsism-by-design-6f95be9a77f">solipsism as a design decision</a>.</p>

<p>He has a set of <a href="http://www.amazon.co.uk/gp/product/B00H8KKF50/ref=as_li_tl?ie=UTF8&amp;camp=1634&amp;creative=19450&amp;creativeASIN=B00H8KKF50&amp;linkCode=as2&amp;tag=shkspr-21">Lifx Internet Controlled Lightbulbs</a>.  They're great fun, but have some seriously screwy ideas about how people live.  One key design of the app is to allow you to automatically switch off all your lights when you exit your house.  That's pretty nifty, right?</p>

<blockquote><p>I am still chuckling at the mental image of all the lightbulbs in my house shutting down when I leave the house leaving my wife and kids to complete their morning routine in darkness.</p></blockquote>

<p>Ah. Yes. Family.  People tend to acquire partners.  Occasionally smaller people spring out of nowhere.  Sometimes it's just the humble housemate <del>stealing your dishes</del> sharing your living space.</p>

<p>According to the <a href="http://www.ons.gov.uk/ons/rel/family-demography/families-and-households/2014/families-and-households-in-the-uk--2014.html#tab-Household-size">UK's Office of National Statistics</a> - only 28% of households contain a single occupant.  The majority of people <em>live with other people</em>.  Hell, I suspect a fair few of those single households have occasional visitors and overnight guests.</p>

<p>So, why do so many apps and services seem to be utterly hostile to their users' diverse lifestyles?</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/08/Asimo-Up-Yours.jpg" alt="Asimo robot giving the Up Yours sign" width="640" height="300" class="aligncenter size-full wp-image-21264">

<h2 id="pause-the-tv-when-i-receive-a-phone-call"><a href="https://shkspr.mobi/blog/2015/08/anti-social-app-design/#pause-the-tv-when-i-receive-a-phone-call">Pause The TV When I Receive A Phone Call</a></h2>

<p>I use the <a href="http://yatse.tv/">Yatse Remote Control App for Android</a>. It has a <em>really</em> <a href="https://play.google.com/store/apps/details?id=org.leetzone.android.yatsewidgetcallplugin">useful plugin</a> which pauses whatever I'm watching when I receive a phone call.  It even displays the name of the person who is calling on the TV.</p>

<p>This makes a fairly radical assumption: When the TV is being watched, it is <strong>only ever me watching it</strong>.</p>

<p>Take the following scenario.  I'm busy cooking up some spicy vegetarian curry in the kitchen. My wife, after a hard day's work, is watching Game of Thrones in the lounge.  Suddenly, I receive an urgent call from work!  Now, my wife's viewing pleasure is interrupted and she has to scrabble for the remote control before she can watch watch more beheadings.</p>

<p>How can we fix this?  Do we need some complicated pop-up which asks every time the TV is on who is watching it? Should I set up a webcam with facial recognition to detect who is staring at the goggle-box? Maybe we can change add an option to the phone screen which says "Answer and Pause"? Could I use Bluetooth proximity beacons to work out which room my phone is in?  What if the phone's microphone listens out for the TV? How about... How about... How about...</p>

<p>There is no perfect solution to this.  It requires a degree of subtly which simply isn't quite feasible yet.  Users demand a near-human level of empathy and understanding; "know what I need without me having to interact".</p>

<p>This problem is not solvable.  Not yet.</p>

<p>We're at a near-future inflection point where we can see what <em>will</em> be possible, but <strong>hate</strong> that it is not.</p>

<p>Dan is absolutely right. We need to design services which account for mixed households, dodgy WiFi connections, visitors to the house, emergencies, delusions, and mistakes.</p>

<p>As users, we have to realise that our devices aren't sentient.  There's no point in getting annoyed with an app for failing to "<a href="https://en.wikipedia.org/wiki/DWIM">Do what I mean - not what I say!</a>"</p>

<p>The future is coming slowly. Before too long we'll just assume that our phones will automatically ignore phone calls when the TV is showing the final of the Great British Bake Off - and that our lightbulbs will keep track of how many people are in each room.</p>

<p>For now, though, we have to sigh and make to with this wondrous technology which isn't quite good enough.  Humans, eh? We're picky bastards.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=21260&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2015/08/anti-social-app-design/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[BMW i3's Web Browser]]></title>
		<link>https://shkspr.mobi/blog/2015/06/bmw-i3s-web-browser/</link>
					<comments>https://shkspr.mobi/blog/2015/06/bmw-i3s-web-browser/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 25 Jun 2015 08:53:04 +0000</pubDate>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[car]]></category>
		<category><![CDATA[i3]]></category>
		<category><![CDATA[review]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=21128</guid>

					<description><![CDATA[I&#039;m currently test-driving a BMW&#039;s all-electric i3 REX.  One of the options the demonstrator model has is a web browser!  Yes, for just £95 per year, you can get a slow and painful browsing experience IN YOUR CAR! (Only to  be used when fully stopped - or in autonomous drive mode.)  Here&#039;s a quick run-down of its features.  HTML5  A fairly miserable score of 268 out of 555 points on …]]></description>
										<content:encoded><![CDATA[<p>I'm currently test-driving a BMW's all-electric i3 REX.  One of the options the demonstrator model has is a web browser!  Yes, for just £95 per year, you can get a slow and painful browsing experience IN YOUR CAR! (Only to  be used when fully stopped - or in autonomous drive mode.)</p>

<p>Here's a quick run-down of its features.</p>

<h2 id="html5"><a href="https://shkspr.mobi/blog/2015/06/bmw-i3s-web-browser/#html5">HTML5</a></h2>

<p>A fairly miserable score of <a href="https://web.archive.org/web/20200924220757/http://html5test.com/s/de1eb1283ebe8de4.html">268 out of 555 points</a> on <a href="http://html5test.com/">http://html5test.com/</a>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-HTML5.jpg" alt="i3 HTML5" width="1024" height="768" class="aligncenter size-full wp-image-21129">
The screen is 1280*480 with good visibility.  It's slow to scroll and, even with the touchpad controller, a pain to navigate.</p>

<h2 id="user-agent"><a href="https://shkspr.mobi/blog/2015/06/bmw-i3s-web-browser/#user-agent">User Agent</a></h2>

<p>It reports as this unholy mess.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-UA.jpg" alt="i3 UA" width="1024" height="768" class="aligncenter size-full wp-image-21130">
Chrome 15 on Windows XP.  Helpful!
Oh, the IP address is in Germany because - I presume - that's where BMW's proxy is.  Connectivity is provided by Vodafone's 3G network.</p>

<h2 id="security"><a href="https://shkspr.mobi/blog/2015/06/bmw-i3s-web-browser/#security">Security</a></h2>

<p>The browser kept popping up with this certificate error.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-security.jpg" alt="i3 security" width="1024" height="635" class="aligncenter size-full wp-image-21131">
I'm not sure if it's the proxy, or the browser which is causing the failure to validate certificates.</p>

<h2 id="options"><a href="https://shkspr.mobi/blog/2015/06/bmw-i3s-web-browser/#options">Options</a></h2>

<p>There is an options menu.  Cookies are blocked by default, there's a flash player! Flash! In the car!
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-Flash.jpg" alt="i3 Flash" width="1024" height="768" class="aligncenter size-full wp-image-21132">
I ticked the "sound" option and visited an <a href="http://hpr.dogphilosophy.net/test/">HTML5 sound test page</a>.  MP3 is supported.  Impressively, so are Ogg and WebM!</p>

<h2 id="video"><a href="https://shkspr.mobi/blog/2015/06/bmw-i3s-web-browser/#video">Video</a></h2>

<p>Some HTML5 video is supported - although playback is a bit jerky.  Audio support is variable.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-video-webm.jpg" alt="i3 video webm" width="1280" height="960" class="aligncenter size-full wp-image-21146"></p>

<p>So, let's try out YouTube - the biggest video site on the planet!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-YouTube.jpg" alt="i3 YouTube" width="1280" height="960" class="aligncenter size-full wp-image-21144">

<p>Well, that's underwhelming.  I wonder what is up with the Flash player on this thing.</p>

<p>A quick (slow) visit to Adobe shows us part of the problem -</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-flash-old-version.jpg" alt="i3 flash old version" width="1280" height="960" class="aligncenter size-full wp-image-21145">

<p>An <em>ancient</em> Flash version.  Which means you can expect to see a lot of things like:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-flash-issues.jpg" alt="i3 flash issues" width="1280" height="960" class="aligncenter size-full wp-image-21138">

<h2 id="tabs"><a href="https://shkspr.mobi/blog/2015/06/bmw-i3s-web-browser/#tabs">Tabs</a></h2>

<p>One thing that surprised me was the ability to have multiple tabs.  Considering how slow the browser is, it's useful to load up a site in one, then read another tab while waiting for it to load.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-tabs.jpg" alt="i3 tabs" width="1280" height="960" class="aligncenter size-full wp-image-21136"></p>

<p>Open too many tabs (3 in this case) and you get this somewhat confusing error message.</p>

<p><img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-tab-limit.jpg" alt="i3 tab limit" width="1280" height="960" class="aligncenter size-full wp-image-21141">
There's no obvious way to close a tab...</p>

<p>You can always go into your history to see what you were reading before the browser flamed out.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-History.jpg" alt="i3 History" width="1280" height="960" class="aligncenter size-full wp-image-21140"></p>

<h2 id="headers-and-proxy"><a href="https://shkspr.mobi/blog/2015/06/bmw-i3s-web-browser/#headers-and-proxy">Headers and Proxy</a></h2>

<p>A fairly sparse set of headers are sent by the UA.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-headers.jpg" alt="i3 headers" width="1280" height="960" class="aligncenter size-full wp-image-21147"></p>

<p>The proxy is by <a href="http://www.mwaysolutions.com/en/automotive/">M-Way Solutions</a>.  I'm not sure if it's the proxy, or Vodafone, but there is some <em>severe</em> picture compression going on:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-Compression.jpg" alt="i3 Compression" width="1280" height="960" class="aligncenter size-full wp-image-21143">

<h2 id="rendering"><a href="https://shkspr.mobi/blog/2015/06/bmw-i3s-web-browser/#rendering">Rendering</a></h2>

<p>For regular web pages, the rendering is competent - if slow.  Here's my blog:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-blog.jpg" alt="i3 blog" width="1280" height="960" class="aligncenter size-full wp-image-21139">

<p>CSS rounded corner and webfonts all work.</p>

<p>But there is a glaring omission.  The Unicode support from the browser is atrocious.  Want to view Emoji?  This is what you'll see -</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-emoji.jpg" alt="i3 emoji" width="1280" height="960" class="aligncenter size-full wp-image-21142">

<p>☹</p>

<h2 id="overall"><a href="https://shkspr.mobi/blog/2015/06/bmw-i3s-web-browser/#overall">Overall</a></h2>

<p>This is a shitty browser.  It's slow - and that's not the fault of the 3G network - rendering takes forever, scrolling is awkward, mouse pointer precision is poor, and has limited support for modern web technologies.  Along with the frequent SSL certificate warnings, the UA is <em>probably</em> vulnerable to modern attacks.</p>

<p>If you want to pay £95 per year to browse the web while sat in a motorway service station, I suggest you buy a cheap Android tablet and a PAYG SIM.  Browsing will be a lot less frustrating, and you won't have to put up with seeing this error message <em>constantly</em>.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-Blowser-limit.jpg" alt="i3 Blowser limit" width="1280" height="960" class="aligncenter size-full wp-image-21137"></p>

<p>But, apart from that, the i3 is a great car!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=21128&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2015/06/bmw-i3s-web-browser/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[ZeleSouris Wireless Vertical Mouse and Linux]]></title>
		<link>https://shkspr.mobi/blog/2015/05/zelesouris-wireless-vertical-mouse-and-linux/</link>
					<comments>https://shkspr.mobi/blog/2015/05/zelesouris-wireless-vertical-mouse-and-linux/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 25 May 2015 15:24:22 +0000</pubDate>
				<category><![CDATA[usability]]></category>
		<category><![CDATA[ergonomic]]></category>
		<category><![CDATA[evoluent]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mouse]]></category>
		<category><![CDATA[mouse buttons]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=21052</guid>

					<description><![CDATA[This is a quick review of the ZeleSouris Vertical Mouse and a guide to setting it up on Linux.    Four years ago, I got the latest Evoluent Vertical Mouse.  It&#039;s a great device, but it&#039;s starting to show its age a bit.  So, time for a new model. I&#039;m doing a lot of travelling, so a wireless mouse is a must.  Sadly, the Evoluent Wireless Mouse is £75.  As good as their mice are, I wanted something …]]></description>
										<content:encoded><![CDATA[<p>This is a quick review of the ZeleSouris Vertical Mouse and a guide to setting it up on Linux.</p>

<p><a href="http://www.amazon.co.uk/gp/product/B00O9NJQTA/ref=as_li_tl?ie=UTF8&amp;camp=1634&amp;creative=19450&amp;creativeASIN=B00O9NJQTA&amp;linkCode=as2&amp;tag=shkspr-21&amp;linkId=T2W25SJ2MRQERE6O"><img src="https://shkspr.mobi/blog/wp-content/uploads/2015/05/ZeleSouris.jpg" alt="ZeleSouris" width="1000" height="392" class="aligncenter size-full wp-image-21053"></a></p>

<p>Four years ago, <a href="https://shkspr.mobi/blog/2011/06/review-evoluent-vertical-mouse-4-and-how-to-make-it-work-in-ubuntu/">I got the latest Evoluent Vertical Mouse</a>.  It's a great device, but it's starting to show its age a bit.</p>

<p>So, time for a new model. I'm doing a lot of travelling, so a wireless mouse is a must.  Sadly, the <a href="http://www.amazon.co.uk/gp/product/B006P2594Y/ref=as_li_tl?ie=UTF8&amp;camp=1634&amp;creative=19450&amp;creativeASIN=B006P2594Y&amp;linkCode=as2&amp;tag=shkspr-21&amp;linkId=JBTGBO44PZCL2MDF">Evoluent Wireless Mouse is £75</a>.  As good as their mice are, I wanted something cheaper - so I wouldn't feel terrible if I lost it or got damaged.</p>

<p>At around £25, the ZeleSouris looks like just the job.  It's vertical, wireless, and has thumb buttons.</p>

<p>The ZeleSouris is incredibly light with well placed buttons for larger hands.  I found the middle click button to be slightly stiff, but I'm sure I'll get used to it.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/05/ZeleSouris-buttons-and-wrist-rest.jpg" alt="ZeleSouris buttons and wrist rest" width="1024" height="768" class="aligncenter size-full wp-image-21054">

<p>As a vertical mouse, it does its job admirably - and at a very reasonable price.</p>

<p>It has an integrated wrist rest - which is detachable.  Personally, I find it comfortable.  I also like the plastic ridging on the side - makes it a lot easier to grip than the smooth Evoluent.</p>

<p>Talking of the Evoluent, the ZeleSouris is roughly the same size:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/05/ZeleSouris-Evoluent.jpg" alt="ZeleSouris Evoluent" width="1024" height="662" class="aligncenter size-full wp-image-21055">

<p>The mouse works flawlessly - I plugged the dongle in to a Linux machine and it just worked. I assume it will also work on Mac and Windows.</p>

<p>The only downside is that the dongle <strong>doesn't</strong> use BlueTooth.  Instead, you get</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/05/Dongle.jpg" alt="Dongle" width="256" height="171" class="aligncenter size-full wp-image-21056">

<p>Although the dongle doesn't jut out too far from a laptop, it seems daft not to use BlueTooth - especially given that every computer and phone now has it built in.  It also means you don't get to monitor the battery life - and it introduces some (theoretical) <a href="http://www.remote-exploit.org/articles/keykeriki_v2_0__8211_2_4ghz/">eavesdropping concerns</a>.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/05/Dongle-Sticking-Out.jpg" alt="Dongle Sticking Out" width="1024" height="464" class="aligncenter size-full wp-image-21057">

<p>The dongle has a little carrying hole in the bottom of the mouse - it's not spring loaded, but it's tight enough that it won't accidentally drop out.</p>

<p>Let's take a look at the bottom of the mouse:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/05/Bottom-of-Mouse.jpg" alt="Bottom of Mouse" width="1024" height="723" class="aligncenter size-full wp-image-21058">

<p>The battery compartment takes 2 AAA batteries - which are included).</p>

<p>There's a an on/off switch.  Not too fiddly - but I think it could have been placed on the top of the mouse rather than the seldom-used DPI button.</p>

<p>The DPI button on the top <em>should</em> change the speed at which the mouse moves.  On the Evoluent, it's really noticeable.  On the ZeleSouris, it doesn't seem to make much difference.  There's no status LED to tell you which setting it is on.</p>

<p>As a minor point of interest, the mouse is actually a re-badged <a href="https://web.archive.org/web/20160821051325/https://www.delux-bolivia.com/index.php/mouse/m-618-laser-detail.html">Delux DLM-618</a> if you're looking for alternate reviews.</p>

<h2 id="linux-button-remapping"><a href="https://shkspr.mobi/blog/2015/05/zelesouris-wireless-vertical-mouse-and-linux/#linux-button-remapping">Linux Button Remapping</a></h2>

<p>A quick lsusb gives the device ID of <code>279e:024e</code>.</p>

<p>By default, the button mapping is:</p>

<pre>1   Left Click (Index Finger)
2   Middle Click (Middle Finger)
3   Right Click (Ring Finger)
...
8   Bottom Thumb
9   Top Thumb
</pre>

<p>Running <code>xinput list</code> shows that the wireless adapter registers as <em>both</em> a keyboard and a mouse.  Very odd!</p>

<pre>⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ 2.4G wireless USB Device 2.4G wireless USB Device id=13   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ 2.4G wireless USB Device 2.4G wireless USB Device id=14   [slave  keyboard (3)]
</pre>

<p>I like to have the bottom thumb be the left-click.  The lazy way of customising this is</p>

<pre>xinput set-button-map 13 0 2 3 4 5 6 7 1 0 10 11 12 13 14 15 16</pre>

<p>That turns off the Index Finger and Top Thumb, and assigns Left-Click to the Bottom Thumb.</p>

<pre>sudo nano /usr/share/X11/xorg.conf.d/91-zelesouris.conf</pre>

<p>Use the following as a template</p>

<pre>Section "InputClass"
        Identifier      "ZeleSouris"
        MatchUSBID      "279e:024e"
        Option "ButtonMapping" "0 2 3 4 5 6 7 1 0 10 11 12 13 14 15 16"
EndSection
</pre>

<p>Reboot and your button mapping will take effect.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=21052&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2015/05/zelesouris-wireless-vertical-mouse-and-linux/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[The Usability of Anti-Apartheid Encryption]]></title>
		<link>https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/</link>
					<comments>https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 03 Mar 2015 11:47:28 +0000</pubDate>
				<category><![CDATA[politics]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[encryption]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=20688</guid>

					<description><![CDATA[(An adaptation of my earlier blog post on the same topic.)  This is a case study focusing on the usability of  encryption systems as used by political dissidents in Apartheid era South Africa.  Background - South Africa  Between 1948 and 1994, the nation of South Africa was ruled by an ethnically white minority. They set in place a system of government – known as Apartheid - which suppressed, b…]]></description>
										<content:encoded><![CDATA[<p>(An adaptation of <a href="https://shkspr.mobi/blog/2014/01/the-hardest-problem-in-encryption-usability/">my earlier blog post on the same topic</a><a class="sdendnoteanc" name="sdendnote1anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote1sym"><sup>1</sup></a>.)</p>

<p>This is a case study focusing on the usability of  encryption systems as used by political dissidents in Apartheid era South Africa.</p>

<h2 id="background-south-africa"><a href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#background-south-africa">Background - South Africa</a></h2>

<p>Between 1948 and 1994, the nation of South Africa was ruled by an ethnically white minority. They set in place a system of government – known as Apartheid - which suppressed, brutalised and discriminated against other races.</p>

<p>The African National Congress (ANC) was <a href="http://www.anc.org.za/show.php?id=206">formed in the early 20th Century</a><a class="sdendnoteanc" name="sdendnote2anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote2sym"><sup>2</sup></a> with the explicit aim of bringing "all Africans together as one people to defend their rights and freedoms."
In 1960, it was outlawed by the ruling National Party<a class="sdendnoteanc" name="sdendnote3anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote3sym"><sup>3</sup></a> and was subsequently branded a terrorist organisation by many nations<a class="sdendnoteanc" name="sdendnote4anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote4sym"><sup>4</sup></a>.</p>

<p>Activists working for and on behalf of the ANC were placed under intense scrutiny by the National Party and its allies. In order to safeguard their communications, the ANC needed to develop, deploy and successfully use digital encryption.</p>

<p>The primary source of this information comes from the ANC's monthly journal "Mayibuye". In 1995 they published a series of articles on their encryption efforts, collated in a single article: "<a href="http://www.anc.org.za/show.php?id=4693">Talking To Vula</a>"<a class="sdendnoteanc" name="sdendnote5anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote5sym"><sup>5</sup></a></p>

<h2 id="lines-of-communication"><a href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#lines-of-communication">Lines of Communication</a></h2>

<p>With the ANC's leadership under extreme surveillance by a technologically superior aggressor, communications between the leadership and members were subject to interception and disruption.</p>

<blockquote><p>Poor communications had determined the shape of our struggle. It was because our fighters and cadres could not communicate with their leaders and between themselves that the underground never developed and People's War never became a reality.
"Talking To Vula"</p></blockquote>

<p>The ANC's typical method of encrypting communications in the late 1970s was by the manual use of One Time Pads (OTPs).</p>

<p>While OTPs represent a theoretically uncrackable encryption, they have two fundamental flaws :</p>

<ul>
<li> It is difficult to distribute an OTP; it wasn't until the late 1970s that key-exchange over a public channel was solved using the <a href="http://www-ee.stanford.edu/~hellman/publications/24.pdf">Diffie-Hellman Key Exchange</a><a class="sdendnoteanc" name="sdendnote6anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote6sym"><sup>6</sup></a>.</li>
<li> OTPs often suffer from unrecoverable errors introduced by flaws common in manual transcriptions<a class="sdendnoteanc" name="sdendnote7anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote7sym"><sup>7</sup></a>.</li>
</ul>

<p>Activists had to manually encipher messages - a tedious and error prone process - and then manually transcribe and decipher the messages they received.</p>

<p>The lack of digital communications required that messages be physically distributed. This increased the latency of communication to the speed of international postal services.</p>

<blockquote><p>It was always the same pattern: comrades would go back home feeling enthusiastic and begin by sending a series of messages. They soon came to realise that it was a futile activity as it took so much effort to say so very little and the responses, as few and far between as they were, contained little encouragement and advice.
</p><p>"Talking To Vula"</p></blockquote>

<p>These activists were fighting to free their country from the yoke of a repressive and racist government. Yet they found the long-winded process of protecting their communications <strong>just too hard</strong>.</p>

<p>Security <em>is</em> usability.</p>

<h2 id="operation-vula"><a href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#operation-vula">Operation Vula</a></h2>

<p>The growth of the Personal Computer industry in the 1980s made digital computing increasingly affordable. The ANC's technical committee began to research digital encryption and communication over the telephone network using modems. This was known as "Operation Vula"<a class="sdendnoteanc" name="sdendnote8anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote8sym"><sup>8</sup></a>.</p>

<p>Modern cryptographic science frowns on the sort of self-created encryption algorithms used by Operation Vula; such algorithms often contain subtle weaknesses of which their creators are unaware<a class="sdendnoteanc" name="sdendnote9anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote9sym"><sup>9</sup></a> <a class="sdendnoteanc" name="sdendnote10anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote10sym"><sup>10</sup></a>.  However, developing bespoke encryption systems was a common occurrence in the 1980s – mostly due to the United States Government forbidding the export of encryption software<a class="sdendnoteanc" name="sdendnote11anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote11sym"><sup>11</sup></a>. This meant that strong, audited encryption was not widely available to the public.</p>

<p>The introduction of computer-based encrypting revolutionised the revolutionaries so that with little effort it was suddenly possible to communicate over vast distances with (apparently) total security. Messages could be long and complex, and the latency of response times were reduced.</p>

<p>This home-made encryption flourished for several years before <a href="https://www.nelsonmandela.org/omalley/index.php/site/q/03lv03445/04lv03996/05lv04002/06lv04003.htm">it came crashing down</a><a class="sdendnoteanc" name="sdendnote12anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote12sym"><sup>12</sup></a>.</p>

<p>It failed not because of <em>technolog</em><em>ical</em> weakness - but because of <em>human</em> weakness.</p>

<h2 id="usability"><a href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#usability">Usability</a></h2>

<p>Maintaining secrecy is <strong>hard</strong>. Attaching computers to modems and loading secret codes is still a lot easier than the mind-numbing process of hand powered encryption; but it is an extra burden.</p>

<p>Individuals were careless. They knew that organising against the government could result in torture or death. Despite that, it was hard to act with 100% vigilance.</p>

<blockquote><p>The details of Vula that the regime released to the press revealed that indeed a number of important documents had fallen into their hands. It became clearer by the day that the comrades in Durban had violated all the rules of security that we had so assiduously tried to impress upon them. Data files of confidential information were kept "in clear" on disk and keywords and key books must have been easily obtainable. The minutes of an entire underground conference were quoted by police as evidence of the plot to overthrow the government.
</p><p>"Talking To Vula"</p></blockquote>

<p>These communications were not between "hacktivists" doing it for "teh lulz", lovers exchanging sexts or business people protecting their Intellectual Property. It was between freedom fighters working against a sadistic and murderous government. Failing to maintain security would not just end with their families being tortured - it could mean the disruption of an entire political movement.</p>

<p>And yet that threat still <em>was not enough</em> to keep people acting in a security-conscious manner.
"Talking to Vula" concludes with the lessons the ANC learned from running their encryption programme:</p>

<blockquote><p>Without first-class communications you cannot carry out a successful underground operation.
"Talking To Vula"</p></blockquote>

<p>"First class" does not just refer to the technology powering the system, but also the <strong>usability of the security</strong>.</p>

<h2 id="barriers"><a href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#barriers">Barriers</a></h2>

<p>We know that commonly used encryption programs often have fundamental flaws (such as the recent POODLE<a class="sdendnoteanc" name="sdendnote13anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote13sym"><sup>13</sup></a> and HeartBleed<a class="sdendnoteanc" name="sdendnote14anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote14sym"><sup>14</sup></a> vulnerabilities),  that state-based agencies have deliberately weakened encryption standards<a class="sdendnoteanc" name="sdendnote15anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote15sym"><sup>15</sup></a> and that there are theoretical attacks on cryptography using quantum computing<em><a class="sdendnoteanc" name="sdendnote16anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote16sym"><sup>16</sup></a></em>.</p>

<p>Let us assume for now that via some combination of Vernam ciphers<a class="sdendnoteanc" name="sdendnote17anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote17sym"><sup>17</sup></a> and Perfect Forward Secrecy<a class="sdendnoteanc" name="sdendnote18anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote18sym"><sup>18</sup></a> it is possible to create an encryption scheme which, if used correctly, can withstand sustained attack from determined adversaries.
 The correct use of encryption relies on, at a minimum, the following behaviours :</p>

<ul> <li> Users understanding why encryption is necessary. </li>
 <li> A provably secure way for users to generate encryption keys. </li>
 <li> Securely storing the encryption keys. </li>
 <li> Exchanging keys. </li>
 <li> Validating that the keys are trusted by the recipient. </li>
 <li> Correct enciphering of messages. </li>
 <li> Correct deciphering of messages.</li>
 <li> Validating the provenance of messages. </li>
 <li> Securely storing or destroying messages. </li>
 <li> Updating behaviours and technologies in the light of emergent threats. </li>
 </ul>

<p>If <em>any</em> of these behaviours are weak, the <em>entire</em> encryption scheme becomes vulnerable.</p>

<h2 id="the-challenge"><a href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#the-challenge">The Challenge</a></h2>

<p>Is it possible to create a system that simultaneously satisfies the conditions of desirability (the understanding of its necessity) and usability (the inability to use incorrectly)?</p>

<p>Modern systems like GPG and Keybase.io have improved on the usability of older encryption systems – but they still require the user to act in an almost perfect manner.</p>

<p>A recent high profile case illustrates that, despite the improvement of these systems, intelligent and committed users still make basic mistakes :</p>

<blockquote>
    <p><a href="http://www.telegraph.co.uk/news/uknews/crime/10276460/David-Miranda-was-carrying-password-for-secret-files-on-piece-of-paper.html">David Miranda was carrying password for secret files on piece of paper</a>
    </p><p>A journalist’s partner who was detained carrying thousands of British intelligence documents through Heathrow airport was also holding the password to an encrypted file written on a piece of paper, the government has disclosed.

</p><p>Daily Telegraph. 2013-08-30</p></blockquote>

<p>This careless attitude was present 23 years earlier, during Vula :</p>

<blockquote><p>[Ghebuza's] assistant was in the habit of moving around with Ghebuza's program and "key" disks as well as his data files. This was against all the rules though we had always suspected that some of the comrades were less than meticulous about observing them.

</p><p>"Talking To Vula"</p></blockquote>

<p>Users will seemingly do almost anything to bypass security in the name of convenience<a class="sdendnoteanc" name="sdendnote19anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote19sym"><sup>19</sup></a> <a class="sdendnoteanc" name="sdendnote20anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote20sym"><sup>20</sup></a>.  From writing down passwords<a class="sdendnoteanc" name="sdendnote21anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote21sym"><sup>21</sup></a> <a class="sdendnoteanc" name="sdendnote22anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote22sym"><sup>22</sup></a> to pointing a webcam at a VPN token<a class="sdendnoteanc" name="sdendnote23anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote23sym"><sup>23</sup></a>, these behaviours completely negate any of the protection provided.</p>

<p>Users are left with, at best, <strong>a placebo security measure</strong>.</p>

<p>A comprehensive encryption programme has to account for the fallibility of human nature.</p>

<h2 id="ubiquity-transparency"><a href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#ubiquity-transparency">Ubiquity &amp; Transparency</a></h2>

<p>Usability of encryption relies on two essential factors: Ubiquity and Transparency.</p>

<p>Until the release of the <a href="http://codebutler.com/firesheep/">Fire</a><a href="http://codebutler.com/firesheep/">s</a><a href="http://codebutler.com/firesheep/">heep software</a><a class="sdendnoteanc" name="sdendnote24anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote24sym"><sup>24</sup></a> it was assumed that websites only had to protect the login portion of their services with HTTPS.  Firesheep showed how every interaction with the site could leak login information to an observer.</p>

<p>The only way to guarantee the security of users was to ensure that <em>every single</em> interaction with the site was secured.  Ubiquitous security became a necessity.</p>

<p>Similarly, it used to be common that in order to securely access a site like Facebook or Twitter, a user had to remember to enter the URL with the "http<strong>s</strong>://" protocol, or they had to manually set an option to enable security.</p>

<p>By having the website <em>insist</em> on using HTTPS and enforcing it for all users at all times, they removed the need for the user to have to constantly check their security settings.  This mode of operation means that encryption technology does not get in the way of the user's normal use of the site.  Users do not have to undertake manual actions to enable encryption.</p>

<p>An excellent example of this can be found in <a href="https://shkspr.mobi/blog/2014/08/secure-the-police/">my research into British Police websites</a><a class="sdendnoteanc" name="sdendnote25anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote25sym"><sup>25</sup></a>.  Several forces run online crime reporting tools, enabling victims to send in details electronically.</p>

<p>Despite the obvious legal and moral need to protect such sensitive information, I discovered that 18 of the forces did not provide any website security. Six of the sites had encryption available but did <strong>not</strong> force visitors to use it.  This meant that users of the site would have to manually manipulate the URL to select a secure method of communication.</p>

<h2 id="conclusions"><a href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#conclusions">Conclusions</a></h2>

<p>Even minor transgressions in the correct use of security can offer an adversary the opportunity to penetrate a user's defences. Users have to continually protect themselves against an unending onslaught of criminals and state-backed hostiles.</p>

<blockquote><p>"Remember we only have to be lucky once. You will have to be lucky always."
</p><p>Anonymous IRA Spokesman<a class="sdendnoteanc" name="sdendnote26anc" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote26sym"><sup>26</sup></a> referring to the 1984 Brighton hotel bombing.</p></blockquote>

<p>In order to make encryption practical and to extend the benefits of secure communication to as many people as possible, we have to find ways of making users as "lucky" as possible.</p>

<p>The challenge for future security systems is to protect users from their own fallibility whilst being as unobtrusive as possible.</p>

<hr>

<div id="sdendnote1"><a class="sdendnotesym" name="sdendnote1sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote1anc">1</a>Eden, T "<a href="https://shkspr.mobi/blog/2014/01/the-hardest-problem-in-encryption-usability/"><em>The Hardest Problem In Encryption? Usability.</em></a>" (2014) Retrieved 30 December 2014.
</div>

<div id="sdendnote2"><a class="sdendnotesym" name="sdendnote2sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote2anc">2</a> <a href="http://www.anc.org.za/show.php?id=206">A brief history of the ANC</a> Retrieved 30 December 2014.
</div>

<div id="sdendnote3"><a class="sdendnotesym" name="sdendnote3sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote3anc">3</a> <a href="http://en.wikisource.org/wiki/Unlawful_Organizations_Act,_1960">The Unlawful Organizations Act</a> (No. 34 of 1960) enacted by the Parliament of South Africa.
</div>

<div id="sdendnote4"><a class="sdendnotesym" name="sdendnote4sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote4anc">4</a> <a href="http://worldnews.nbcnews.com/_news/2014/10/06/26287260-us-government-considered-nelson-mandela-a-terrorist-until-2008">US government considered Nelson Mandela a terrorist until 2008 – NBC News</a> – 7 December 2013.
</div>

<div id="sdendnote5"><a class="sdendnotesym" name="sdendnote5sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote5anc">5</a> Jenkin, T "<a href="http://www.anc.org.za/show.php?id=4693">The Story of the Secret Underground Communications Network of Operation Vula</a>&lt;"
</div>

<div id="sdendnote6"><a class="sdendnotesym" name="sdendnote6sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote6anc">6</a> Diffie, W. &amp; Hellman, M. "<a href="http://www-ee.stanford.edu/~hellman/publications/24.pdf"><em>New Directions in Cryptography</em></a>" IEEE Transactions On Information Theory, Vol. It-22, No. 6, November 1976 .
</div>

<div id="sdendnote7"><a class="sdendnotesym" name="sdendnote7sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote7anc">7</a> Wahi, Monika M. et al. "<a href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2409998/">Reducing Errors from the Electronic Transcription of Data Collected on Paper Forms: A Research Data Case Study.</a>" Journal of the American Medical Informatics Association : JAMIA 15.3 (2008): 386–389. PMC. Web. 14 Dec. 2014.
</div>

<div id="sdendnote8"><a class="sdendnotesym" name="sdendnote8sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote8anc">8</a> <a href="https://www.nelsonmandela.org/omalley/index.php/site/q/03lv03445/04lv03996/05lv04012/06lv04014.htm">"Documentary On Operation Vula" BBC Interviews: December 2002</a> Retrieved 30 December 2014.
</div>

<div id="sdendnote9"><a class="sdendnotesym" name="sdendnote9sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote9anc">9</a> <a href="https://www.schneier.com/blog/archives/2011/04/schneiers_law.html">"Schneier's Law" - Bruce Schneier</a> (2011) Retrieved 30 December 2014.
</div>

<div id="sdendnote10"><a class="sdendnotesym" name="sdendnote10sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote10anc">10</a> Zimmermann, P "<a href="ftp://ftp.pgpi.org/pub/pgp/7.0/docs/english/IntroToCrypto.pdf">Introduction to Cryptography</a>" Page 54
</div>

<div id="sdendnote11"><a class="sdendnotesym" name="sdendnote11sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote11anc">11</a> Roberts, E. <a href="http://cs.stanford.edu/people/eroberts/cs181/projects/export-controls/pastlaws.html">"Reevaluating Us Technology Export Controls" - Stanford University (1999)</a> Retrieved 30 December 2014.
</div>

<div id="sdendnote12"><a class="sdendnotesym" name="sdendnote12sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote12anc">12</a>  <a href="https://www.nelsonmandela.org/omalley/index.php/site/q/03lv03445/04lv03996/05lv04002/06lv04003.htm">US State Department cables on Vula unravelling</a> Retrieved 30 December 2014.
</div>

<div id="sdendnote13"><a class="sdendnotesym" name="sdendnote13sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote13anc">13</a> <a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3566">CVE-2014-3566</a> Retrieved 30 December 2014.
</div>

<div id="sdendnote14"><a class="sdendnotesym" name="sdendnote14sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote14anc">14</a> <a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160">CVE-2014-0160</a> Retrieved 30 December 2014.
</div>

<div id="sdendnote15"><a class="sdendnotesym" name="sdendnote15sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote15anc">15</a> Hales, TC <em><a href="http://www.ams.org/notices/201402/rnoti-p190.pdf">The NSA Back Door to NIST</a> </em>Notices of the AMS Volume 61, Number 2. (2014)
</div>

<div id="sdendnote16"><a class="sdendnotesym" name="sdendnote16sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote16anc">16</a> Shor, PW <a href="http://arxiv.org/abs/quant-ph/9508027">"<em>Polynomial-Time Algorithms for Prime Factorization and Discrete Logarithms on a Quantum Computer" </em></a>SIAM Journal on Computing (1997) 26:5, 1484-1509
</div>

<div id="sdendnote17"><a class="sdendnotesym" name="sdendnote17sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote17anc">17</a> Kahn, D (1996). <a href="http://www.amazon.co.uk/gp/product/B006W45D6Y/ref=as_li_tl?ie=UTF8&amp;camp=1634&amp;creative=19450&amp;creativeASIN=B006W45D6Y&amp;linkCode=as2&amp;tag=shkspr-21&amp;linkId=ARO36V7EF3VL3VTS"><em>The Codebreakers</em></a>. Macmillan. pp. 397–8. ISBN 0-684-83130-9
</div>

<div id="sdendnote18"><a class="sdendnotesym" name="sdendnote18sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote18anc">18</a> David P. Jablon. 1996. "<a href="http://doi.acm.org/10.1145/242896.242897">Strong password-only authenticated key exchange.</a>" SIGCOMM Comput. Commun. Rev. 26, 5 (October 1996), 5-26. DOI=10.1145/242896.242897
</div>

<div id="sdendnote19"><a class="sdendnotesym" name="sdendnote19sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote19anc">19</a> Gait, Jason. "<a href="http://dl.acm.org/citation.cfm?id=775403&amp;dl=ACM&amp;coll=DL&amp;CFID=482995037&amp;CFTOKEN=94524980">Easy entry: the password encryption problem.</a>" ACM SIGOPS Operating Systems Review 12.3 (1978): 54-60.
</div>

<div id="sdendnote20"><a class="sdendnotesym" name="sdendnote20sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote20anc">20</a> Adams, Anne, and Martina Angela Sasse. <a href="http://dl.acm.org/citation.cfm?id=322806">"Users are not the enemy."</a> Communications of the ACM 42.12 (1999): 40-46.
</div>

<div id="sdendnote21"><a class="sdendnotesym" name="sdendnote21sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote21anc">21</a> Zviran, Moshe, and William J. Haga. <a href="http://www.jstor.org/discover/10.2307/40398409?sid=21105989295713&amp;uid=3738032&amp;uid=2129&amp;uid=70&amp;uid=2&amp;uid=4">"Password security: an empirical study."</a> Journal of Management Information Systems (1999): 161-185.
</div>

<div id="sdendnote22"><a class="sdendnotesym" name="sdendnote22sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote22anc">22</a> Nielsen , J. <a href="http://www.nngroup.com/articles/security-and-human-factors/">"Security &amp; Human Factors"</a> Retrieved 20 December 2014 (2000)
</div>

<div id="sdendnote23"><a class="sdendnotesym" name="sdendnote23sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote23anc">23</a> <a href="https://web.archive.org/web/20041116161829/http://fob.webhop.net/">FobCam</a> Retrieved December 30, 2014.
</div>

<div id="sdendnote24"><a class="sdendnotesym" name="sdendnote24sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote24anc">24</a> Butler, E. <a href="http://codebutler.com/firesheep/?c=1">"Firesheep – codebutler"</a>  Retrieved December 30, 2014.
</div>

<div id="sdendnote25"><a class="sdendnotesym" name="sdendnote25sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote25anc">25</a> Eden, T <a href="https://shkspr.mobi/blog/2014/08/secure-the-police/">"<em>Secure The Police</em>"</a> Retrieved December 30, 2014
</div>

<div id="sdendnote26"><a class="sdendnotesym" name="sdendnote26sym" href="https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/#sdendnote26anc">26</a> Taylor, Peter (2001). <a href="http://www.amazon.co.uk/gp/product/074755806X/ref=as_li_tl?ie=UTF8&amp;camp=1634&amp;creative=19450&amp;creativeASIN=074755806X&amp;linkCode=as2&amp;tag=shkspr-21&amp;linkId=ORFLHI6JR632SBSW">"<em>Brits: The War Against the IRA</em>."</a> Bloomsbury Publishing. p. 265. ISBN 0-7475-5806-X
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=20688&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2015/03/the-usability-of-anti-apartheid-encryption/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Why Does Twitter Think Facebook is Swedish?]]></title>
		<link>https://shkspr.mobi/blog/2015/01/why-does-twitter-think-facebook-is-swedish/</link>
					<comments>https://shkspr.mobi/blog/2015/01/why-does-twitter-think-facebook-is-swedish/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 02 Jan 2015 12:10:36 +0000</pubDate>
				<category><![CDATA[usability]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[twitter]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=20403</guid>

					<description><![CDATA[I&#039;ve nothing against the Swedes. Lovely people. Sweden is the third-largest country in the European Union by area. But I&#039;m not from there. Neither, as far as I am aware, is Facebook.  But Twitter seems to think so.  When I share a link to Twitter on Facebook, this (sometimes) happens.    And sometimes, I get this delightfully mangled Unicode atrocity!    So, what&#039;s going on?  When Facebook wants…]]></description>
										<content:encoded><![CDATA[<p>I've nothing against the Swedes. Lovely people. Sweden is the third-largest country in the European Union by area. But I'm not from there. Neither, as far as I am aware, is Facebook.</p>

<p>But Twitter seems to think so.</p>

<p>When I share a link to Twitter on Facebook, this (sometimes) happens.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2014/10/Twitter-Swedish-fs8.png" alt="Twitter-Swedish-fs8" width="709" height="395" class="aligncenter size-full wp-image-11176">

<p>And sometimes, I get this delightfully mangled Unicode atrocity!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2014/10/Twitter-Swedish-Unicode-fs8.png" alt="Twitter-Swedish-Unicode-fs8" width="709" height="663" class="aligncenter size-full wp-image-11169">

<p>So, what's going on?</p>

<p>When Facebook wants to display a link, its servers send a quick web request to the URL that the user has typed into the box. When Twitter receives that request, it looks at where it has come from and tries to localise its content.</p>

<p>If you're a German, you probably want the Twitter website to be in German. That's fairly sensible. But when you receive a request from one country on behalf of another, what should you do?</p>

<p>Here are the headers which Facebook sends with every request.</p>

<pre>User-Agent: facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)
Accept: */*
Accept-Encoding: deflate, gzip
Range: bytes=0-524287
Host: example.com
Connection: keep-alive
IP: 31.13.110.120</pre>

<p>That IP address, according to most geolocation databases, <a href="https://web.archive.org/web/20150418235324/http://geomaplookup.net/?ip=31.13.110.120">is from Ireland</a> - however some <a href="http://www.ip2location.com/demo/31.13.110.120">list it as being Swedish</a>.</p>

<p>Twitter is, arguably, doing the right thing here. They're seeing an IP from Sweden, and serving it up a Swedish page.</p>

<p>Yes, their IP database is out of date, but even if it wasn't I'm not sure everyone on Facebook want to be reading in <a href="https://en.wikipedia.org/wiki/Irish_language">Gaeilge</a> or English.</p>

<p>Facebook knows what language the user speaks. It really ought to be including the <a href="https://www.w3.org/International/questions/qa-accept-lang-locales">HTTP "Accept-Language" header</a> in its requests.</p>

<p>It's really easy! All that HTTP request needs is:</p>

<pre>Accept-Language: en-gb;q=0.8, en;q=0.7</pre>

<p>That means "I want British English, but I'll accept any other form of English".</p>

<p>Hey presto! Twitter will see a request from Sweden / Ireland and rather than dumbly looking at the IP will make an intelligent choice based on the user's language preferences as determined by Facebook.</p>

<p>I spoke to someone informally at Facebook about this.  They claimed that this is a user privacy measure.  Facebook sending your language preferences to a third party could be an unwanted invasion of privacy.  Personally, I think that's a load of rubbish.  Could an attacker send you a specially crafted link and find out that you secretly read Facebook in <a href="https://en.wikipedia.org/wiki/Pashto_language">Pashto</a>? Perhaps.  But because this doesn't happen all the time, I suspect it's just a piece of sloppy engineering.</p>

<p>As we say in Sweden, "Ibland användbarhet innebär att arbeta lite hårdare för att se till misstag i andra företags datorer påverkar inte dina användare negativt!"</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=20403&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2015/01/why-does-twitter-think-facebook-is-swedish/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
