https://www.perpetual-beta.org/Perpetual βeta: Weblog2017-07-17T21:40:40ZJonathan M. Hollinhttps://www.perpetual-beta/colophon.htmltag:www.perpetual-beta.org,2017-07-17:/weblog/the-trawler-number-11.htmlThe Trawler: № 112017-07-17T21:40:40Z2017-07-17T21:40:40Z<figure class="align-center" style="max-width: 100vw;"><div style="background-color: transparent; padding-bottom: calc((632/1024)*100%);" class="load image-loader"><img src="https://www.perpetual-beta.org/assets/svg/trawler-11.svg" alt="Stylised rendering of a grounded fishing boat" class="rounded image-loading"></div></figure>
<p>Welcome one and all to another issue of <a href="https://www.perpetual-beta.org/tags/trawler.html">The Trawler</a>, the Internet’s premier collection of “stuff”.</p>
<hr class="grad">
<p>I haven’t produced a Trawler issue in a while. So this one is something of a link dump. There’s enough goodness here to keep you going for a long time. 😃</p>
<h3 id="user-interface">User Interface</h3>
<p>Scott Jensen affords us a tantalising glimpse of an operating system <a href="http://scottjensen.design/2017/05/out-of-the-dropshadows/">user interface that employs atmospheric perspective</a> to convey depth rather than the drop shadows that are ubiquitous in <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="User Interface"><span class="caps">UI</span></abbr> design today. This concept resonated with me since, for a while now, I’ve been using the <a href="https://hazeover.com/">HazeOver</a> application on mac<small>OS</small> and I have come to appreciate the utility in having a foreground window stand out from its companions through the use of lighting effects.</p>
<h3 id="web-design">Web Design</h3>
<p><a href="https://cloudfour.com/thinks/breaking-out-with-css-grid-layout/">Breaking Out with <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Cascading Style Sheets"><span class="caps">CSS</span></abbr> Grid Layout</a>: <a href="https://cloudfour.com/is/tyler/">Tyler Sticka</a> shows us how to allow certain elements to fill the full viewport width from within a fixed-width container. Handy for beating the constraints of a fixed-width container for hero images, video and the like.</p>
<p><a href="https://www.smashingmagazine.com/author/mortenrandhendriksen/">Morten Rand-Hendriksen</a> walks us through <a href="https://www.smashingmagazine.com/2017/06/building-production-ready-css-grid-layout/">Building Production-Ready <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Cascading Style Sheets"><span class="caps">CSS</span></abbr> Grid Layouts Today</a>.</p>
<p><a href="https://uxdesign.cc/design-better-data-tables-4ecc99d23356">Design Better Data Tables</a>: in which <a href="https://uxdesign.cc/@CoyleAndrew">Andrew Coyle</a> illustrates patterns for data table design and visualisation.</p>
<p><a href="https://www.smashingmagazine.com/2017/07/designing-perfect-date-time-picker/">Designing the Perfect Date and Time Picker</a>: <a href="https://www.smashingmagazine.com/author/vitaly-friedman/">Vitaly Friedman</a> explores, in depth, the design and implementation details of the perfect date/time picker. It’s interesting to note that, as in most things, one size does not fit all, it all depends on your use case.</p>
<p>A slider is a simple user interface control where you adjust some value by dragging a handle in a groove. In <a href="http://ilyabirman.net/meanwhile/all/slider/">Implementing a slider well</a>, Ilya Birman illustrates what does and does not work, culminating with a <em>reference implementation</em>.</p>
<p>From the Baymard Institute, interesting research and a compelling argument that <a href="https://baymard.com/blog/credit-card-field-auto-format-spaces">The ‘Credit Card Number’ Field Must Allow and Auto-Format Spaces (80% Don’t)</a>.</p>
<p>Enjoy a hilarious journey through the <a href="https://hackernoon.com/10-things-i-learned-making-the-fastest-site-in-the-world-18a0e1cdf4a7">ten things David Gilbertson learned while making the <em>fastest site in the world</em></a>.</p>
<p>You must check out this <a href="https://codepen.io/fbrz/full/vlrnd/">gorgeous, animated rendering of an iPhone 6</a>. Created purely in <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Cascading Style Sheets"><span class="caps">CSS</span></abbr>, not a scrap of JavaScript.</p>
<h3 id="web-development">Web Development</h3>
<p><a href="https://ireaderinokun.com">Ire Aderinokun</a> gives us the low-down on <a href="https://bitsofco.de/asynchronous-functions-101/">Asynchronous Functions</a> and how to use them sequentially or in parallel with the versatile <code>await</code> command. Is this the end of <a href="http://callbackhell.com">callback hell</a>?</p>
<p>JavaScript programmers will all be familiar with <code>this</code>. But what is <code>this</code>? Why is <code>this</code> sometimes a scoped object, then at other times the global object? <a href="https://codeburst.io/@arnav_aggarwal?source=post_header_lockup">Arnav Aggarwal</a> explains <code>this</code> in <a href="https://codeburst.io/the-simple-rules-to-this-in-javascript-35d97f31bde3">The Simple Rules to ‘this’ in JavaScript</a>. I’m glad we’ve got that cleared up.</p>
<p>While we’re on the subject, Ryan McDermott has put together <a href="https://github.com/ryanmcdermott/clean-code-javascript">a guide to producing readable, reusable, and re-factorable software in JavaScript</a>.</p>
<h3 id="pure-geek">Pure Geek</h3>
<p><a href="https://popsql.io/">Pop<span class="caps">SQL</span></a> looks interesting. I can’t count the number of times each day that I share or receive <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Structured Query Language"><span class="caps">SQL</span></abbr> queries from colleagues via <a href="http://hipchat.com/">HipChat</a>. The collaborative options in Pop<span class="caps">SQL</span> will be useful to me and my co-workers. I’m definitely going to give this one a try.</p>
<p>“Every time a <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="PHP: Hypertext Preprocessor (where PHP then becomes an acronym for 'Personal Home Page')"><span class="caps">PHP</span></abbr> developer runs <code>git diff</code> on the command line a kitten dies.” So writes Igor Santos in <a href="https://dev.to/igorsantos07/quick-tip-on-git-diffs-for-php-files">Quick tip on Git diffs for <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="PHP: Hypertext Preprocessor (where PHP then becomes an acronym for 'Personal Home Page')"><span class="caps">PHP</span></abbr> files</a>. Santos goes on to explain how to make Git’s <em>hunk headers</em> a little more <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="PHP: Hypertext Preprocessor (where PHP then becomes an acronym for 'Personal Home Page')"><span class="caps">PHP</span></abbr>-friendly.</p>
<p>Harry Roberts shares with us the “<a href="https://csswizardry.com/2017/05/little-things-i-like-to-do-with-git/">Little Things I Like to Do with Git</a>.” Steady on old boy.</p>
<p>Whilst we’re fooling around with Git, check out <a href="https://github.com/so-fancy/diff-so-fancy/">diff-so-fancy</a> which “strives to make your diff’s human readable instead of machine readable. This helps improve code quality and spot defects faster.”</p>
<p>In <a href="https://dev.to/thiht/shell-scripts-matter">Shell Scripts Matter</a>, we look at improving our shell scripts with static code analysis, “strict” mode, exit traps, unit testing, logging, debugging, self-documentation and version control.</p>
<p>Wolfgang Lutz has a great article on how to <a href="https://wlborg.wordpress.com/2017/01/09/how-to-customize-the-small-control-strip-of-the-macos-touchbar-even-further/">customise the small control strip on the Touch Bar MacBooks</a>. With this documentation I have modified my own Touch Bar to feature media player functions on the small control strip. This is useful since I almost always have iTunes playing while I’m using the computer.</p>
<h3 id="security-privacy-and-opsec">Security, Privacy and OpSec</h3>
<p>In <a href="https://davidbrownman.com/blog/2017/07/05/how-hackers-steal-your-data/">How Hackers Steal Your Data (and How to Make it Harder for Them)</a>, David Brownman gives us a five-point checklist to help us make our digital lives a little more secure.</p>
<p>A reminder that you should always <a href="http://lifepluslinux.blogspot.dk/2017/01/look-before-you-paste-from-website-to.html">look before you paste from a website to terminal</a> — <wbr />oh that naughty <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Cascading Style Sheets"><span class="caps">CSS</span></abbr>.</p>
<p>When it comes to network security, most of the tools to test your network are pretty complex. <a href="https://lifehacker.com/how-to-use-nessus-to-scan-a-network-for-vulnerabilities-1788261156">Nessus</a> isn’t new, but it definitely bucks this trend. It’s incredibly easy to use, works quickly, and can give you a quick rundown of your network’s security at the click of a button.</p>
<p>If you haven’t already, you should <a href="https://blog.g3rt.nl/upgrade-your-ssh-keys.html">upgrade your <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Secure Shell"><span class="caps">SSH</span></abbr> keys to Ed25519</a>, a reference implementation for <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Edwards-curve Digital Signature Algorithm">Ed<span class="caps">DSA</span></abbr> using <a href="https://en.wikipedia.org/wiki/Twisted_Edwards_curve">twisted Edward curves</a>. While you’re at it, you may as well <a href="http://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/">simplify your life with a <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Secure Shell"><span class="caps">SSH</span></abbr> configuration file</a>.</p>
<p><a href="https://objective-see.com/blog/blog_0x14.html">[0day] Bypassing Apple’s System Integrity Protection</a>: abusing the local upgrade process to bypass <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="System Integrity Protection"><span class="caps">SIP</span></abbr>. Genius, as always, from Patrick Wardle.</p>
<h3 id="utilities">Utilities</h3>
<p><a href="https://alisdair.mcdiarmid.org/">Alisdair McDiarmid</a> has become one of my heroes since I discovered his <a href="https://alisdair.mcdiarmid.org/kill-sticky-headers/">Kill Sticky</a> browser bookmarklet. I use this countless times every day and have quickly come to question how I kept my sanity without it (assuming, of course, that I am still sane).</p>
<h3 id="noteworthy">Noteworthy</h3>
<ul>
<li>
<a href="https://www.jwz.org/blog/2016/10/they-live-and-the-secret-history-of-the-mozilla-logo/">They Live and the Secret History of the Mozilla Logo</a>;</li>
<li>
<a href="https://github.com/kdeldycke/awesome-falsehood">Awesome Falsehood</a>: a curated list of falsehoods programmers believe in;</li>
<li>
<a href="https://davidwalsh.name/waveform">Create a Waveform Image with <code>ffmpeg</code></a>;</li>
<li>
<a href="https://dev.to/aimeeknight/its-not-dark-magic-pulling-back-the-curtains-from-your-stylesheets">It’s Not Dark Magic: Pulling Back the Curtains from Your Stylesheets</a>;</li>
<li>
<a href="https://madebymike.com.au/writing/using-css-variables/">Using <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Cascading Style Sheets"><span class="caps">CSS</span></abbr> variables correctly</a>;</li>
<li>
<a href="https://codepen.io/tksiiii/full/xdQgJX/">Glitch Effect</a>;</li>
<li>
<a href="https://indiewebify.me/">IndieWebify.Me</a>: A guide to getting you on the IndieWeb;</li>
<li>
<a href="https://webponize.github.io/">WebPonize</a> is a mac<small>OS</small> application for converting images into WebP;</li>
<li>
<a href="http://clagnut.com/blog/2389/">Getting started with variable fonts</a>;</li>
<li>
<a href="http://webdesignerwall.com/tutorials/level-css-skills-20-pro-css-tips">Level Up Your <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Cascading Style Sheets"><span class="caps">CSS</span></abbr> Skills with these 20 Pro <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Cascading Style Sheets"><span class="caps">CSS</span></abbr> Tips</a>;</li>
<li>
<a href="https://dev.to/bitario/moving-beyond-localstorage">Moving beyond localStorage</a>;</li>
<li>
<a href="https://blog.sindresorhus.com/macos-tips-tricks-13046cf377f8">Fabulous mac<small>OS</small> Tips & Tricks</a>;</li>
<li>
<a href="https://remysharp.com/2016/12/16/tricks-with-xargs">Tricks with <code>xargs</code></a>;</li>
<li>
<a href="http://www.eurogamer.net/articles/2016-10-27-20-years-on-the-tomb-raider-story-told-by-the-people-who-were-there">20 years on, the Tomb Raider story told by the people who were there</a>;</li>
<li>
<a href="https://www.exceptionnotfound.net/15-fundamental-laws-of-the-internet/">15 Fundamental Laws of the Internet</a>;</li>
<li>
<a href="https://medium.freecodecamp.org/explained-css-pseudo-classes-cef3c3177361">How <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Cascading Style Sheets"><span class="caps">CSS</span></abbr> pseudo-classes work, explained with code and lots of diagrams</a>;</li>
<li>
<a href="https://jvns.ca/blog/2016/11/27/more-linux-drawings/">More drawings about computers</a>;</li>
<li>
<a href="http://maketea.co.uk/2016/09/28/css-grid-layout-is-a-step-change.html">Grid layout is a much needed step-change for <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Cascading Style Sheets"><span class="caps">CSS</span></abbr></a>;</li>
<li>
<a href="http://www.lottejackson.com/learning/supports-will-change-your-life"><code>@supports</code> will change your life</a>;</li>
<li>
<a href="https://medium.com/bitmatica-lab/svg-line-animation-for-the-uninitiated-5a65d91c6044"><abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Scalable Vector Graphics"><span class="caps">SVG</span></abbr> Line Animation for the Uninitiated</a>.</li>
</ul>
<hr /><p><small>If you liked this post you should visit the <a href="https://www.perpetual-beta.org/archives.html">Perpetual βeta</a> website, where you will find further essays by the author.</small></p><p><small>Formatting messed up in your feed reader? You should <a href="https://www.perpetual-beta.org/weblog/the-trawler-number-11.html">view this article in your web-browser</a>.</small></p>
tag:www.perpetual-beta.org,2017-07-16:/weblog/magical-caps-lock-key.htmlTHE MAGICAL CAPS LOCK KEY2017-07-16T16:42:42Z2017-07-16T16:42:42Z<figure class="align-center" style="max-width: 100vw;"><div style="background-color: transparent; padding-bottom: calc((314/511)*100%);" class="load image-loader"><img src="https://www.perpetual-beta.org/assets/svg/caps-lock-on.svg" alt="Stylised rendering of a caps lock key with its LED illuminated" class="rounded image-loading"></div></figure>
<h3 id="tldr">tl;dr</h3>
<p>The <kbd>caps lock</kbd> key is one of the most useful keys on my keyboard. I use the powerful <a href="https://github.com/tekezo/Karabiner-Elements">Karabiner Elements</a> software to empower the key with practical and time-saving functionality.</p>
<hr class="grad">
<h3 id="the-most-hated-key">The Most Hated Key</h3>
<p>There is a sizeable contingent of computer users who really dislike the <kbd>caps lock</kbd> key. This is understandable. This unjustly forsaken key commonly sits just to the left of the <kbd>A</kbd> key on a <small><span class="caps">QWERTY</span></small> keyboard. <kbd>A</kbd> is one of the most frequently hit keys for English writers. Thus one can appreciate that <kbd>caps lock</kbd> is often inadvertently triggered. This results in strings of uppercase characters, which the Internet interprets as <span class="caps">SHOUTING</span>, something that it frowns upon and which is generally considered to be poor form.</p>
<p>The <kbd>caps lock</kbd> key is a <em>mode-switch</em> toggle. You hit it and it puts the keyboard into uppercase mode, hit it again and turns off the uppercase mode. Did you ever wonder why the <kbd>caps lock</kbd> key has an <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Light-Emitting Diode"><span class="caps">LED</span></abbr> on it? The <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Light-Emitting Diode"><span class="caps">LED</span></abbr> is there because computer/keyboard manufacturers know how frustrating it is to type for a while, only to discover that you have inadvertently enabled caps-lock.</p>
<figure itemscope="" itemtype="http://schema.org/ImageObject" style="max-width: 100vw;" class="align-center captioned-image"><div data-canvas-image="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgABwAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8AbPrN1J9rlLvGwBWIA5BfJznnOOn61WhsPEc0EcomKB1DbfMzjI6daKKAP//Z" style="background: rgba(0, 0, 0, 0.04) url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgABwAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8AbPrN1J9rlLvGwBWIA5BfJznnOOn61WhsPEc0EcomKB1DbfMzjI6daKKAP//Z') no-repeat; background-size: cover; padding-bottom: calc((547/820)*100%);" class="rounded image-loader"><img alt="retro mechanical typewriter" src="https://www.perpetual-beta.org/assets/images/480/4285b2b573eca5b5d5d84f5d4d777b67.jpg" srcset="https://www.perpetual-beta.org/assets/images/80/4285b2b573eca5b5d5d84f5d4d777b67.jpg 80w, https://www.perpetual-beta.org/assets/images/480/4285b2b573eca5b5d5d84f5d4d777b67.jpg 480w, https://www.perpetual-beta.org/assets/images/768/4285b2b573eca5b5d5d84f5d4d777b67.jpg 768w, https://www.perpetual-beta.org/assets/images/820/4285b2b573eca5b5d5d84f5d4d777b67.jpg 820w, https://www.perpetual-beta.org/assets/images/1024/4285b2b573eca5b5d5d84f5d4d777b67.jpg 960w, https://www.perpetual-beta.org/assets/images/1280/4285b2b573eca5b5d5d84f5d4d777b67.jpg 960w, https://www.perpetual-beta.org/assets/images/1640/4285b2b573eca5b5d5d84f5d4d777b67.jpg 960w" sizes="100vw" class="rounded image-loading"></div></figure>
<p>Some of my readers, if they are of my generation, will have vague memories of the mechanical typewriters of old. On such a machine, in order to enable <a href="https://en.wikipedia.org/wiki/Caps_lock">caps-lock</a>, one would depress the <kbd>shift</kbd> key, then the <kbd>caps lock</kbd> key to <em>lock</em> the <em>shift</em> operation. One would then depress the <kbd>caps lock</kbd> key again to release the lock. This was elegant and, well, logical. It made sense. Sadly, computer keyboards never operated this way (at least, none that I know of). If they did, then the average user might look more favourably on, or least be neutral towards <kbd>caps lock</kbd>.</p>
<h3 id="a-basic-fix">A Basic Fix</h3>
<p>Computer users sometimes go to extraordinary lengths to change the behaviour of their <kbd>caps lock</kbd> key. It is not uncommon to see this key remapped to <kbd>control</kbd> or <kbd>escape</kbd>, or even disabled entirely (some users take the nuclear option: physically removing the key or cutting its tracks on the keyboard <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Printed Circuit Board"><span class="caps">PCB</span></abbr>). Generally, one can remap the key in software. In mac<small>OS</small>, for example, one can use the <em>keyboard preference pane</em> to remap <kbd>caps lock</kbd> to <kbd>control</kbd>, <kbd>option</kbd>, <kbd>command</kbd> or <kbd>esc</kbd>. Or one can choose “No Action” to disable the key entirely.</p>
<figure itemscope="" itemtype="http://schema.org/ImageObject" style="max-width: 518px;" class="align-center"><div data-canvas-image="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgABwAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A9eYK7K4LDA5HqakLEkkZAPQUUUAf/9k=" style="background: rgba(0, 0, 0, 0.04) url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgABwAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A9eYK7K4LDA5HqakLEkkZAPQUUUAf/9k=') no-repeat; background-size: cover; padding-bottom: calc((520/820)*100%);" class="rounded-discrete image-loader photo-depth"><img alt="remapping options for the caps-lock key in MacOS Sierra" src="https://www.perpetual-beta.org/assets/images/480/4c69c587af2984369af2d6ad3f0ab509.png" srcset="https://www.perpetual-beta.org/assets/images/80/4c69c587af2984369af2d6ad3f0ab509.png 80w, https://www.perpetual-beta.org/assets/images/480/4c69c587af2984369af2d6ad3f0ab509.png 480w, https://www.perpetual-beta.org/assets/images/768/4c69c587af2984369af2d6ad3f0ab509.png 768w, https://www.perpetual-beta.org/assets/images/820/4c69c587af2984369af2d6ad3f0ab509.png 820w, https://www.perpetual-beta.org/assets/images/1024/4c69c587af2984369af2d6ad3f0ab509.png 1024w, https://www.perpetual-beta.org/assets/images/1280/4c69c587af2984369af2d6ad3f0ab509.png 1036w, https://www.perpetual-beta.org/assets/images/1640/4c69c587af2984369af2d6ad3f0ab509.png 1036w" sizes="100vw" class="rounded-discrete image-loading"></div></figure>
<p>That’s all well and good. But suppose we want to go further than a basic remap…</p>
<h3 id="going-to-the-next-level">Going to the Next Level</h3>
<p>Back in 2015 — <wbr />in an article entitled, “<a href="https://www.perpetual-beta.org/weblog/keyboard-wizard.html">Keyboard Wizard</a>” — <wbr />I wrote about how I used a software combination of <a href="https://pqrs.org/osx/karabiner/seil.html.en">Seil</a> and <a href="https://pqrs.org/osx/karabiner/">Karabiner</a> to turn my <kbd>caps lock</kbd> key into a so-called <em>hyper key</em> modifier. This opened up a whole keyboard worth of new, configurable, non-conflicting keyboard shortcuts to me and became an invaluable component of my computing.</p>
<p>Then Apple released the <a href="https://en.wikipedia.org/wiki/MacOS_Sierra">mac<small>OS</small> Sierra</a> operating system. Unfortunately this broke the <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Application Program Interface"><span class="caps">API</span></abbr>s or hooks that Karabiner used, effectively removing all of my (by now committed to muscle memory) bespoke keyboard shortcuts. It was a dark time indeed.</p>
<p>The changes introduced by Sierra were so wide in scope that Karabiner was effectively deprecated. The author, <a href="https://pqrs.org/profile.html.en">Takayama Fumihiko</a>, started over with the entirely new <a href="https://github.com/tekezo/Karabiner-Elements">Karabiner Elements</a>. But, for the longest time, Elements supported only simple one-to-one key remapping. The multi-key modifier I had come to rely on was simply unavailable. I’d learn of <a href="https://github.com/lodestone/hyper-hacks">the odd hack</a> that would restore some of the functionality, but nothing came close to the configuration I’d come to know and love. Then <a href="https://github.com/tekezo/Karabiner-Elements/pull/170">a fork of Elements appeared</a> which restored at least the hyper key functionality. Things were getting better.</p>
<p>Recently, Fumihiko released a new revision of Elements, featuring full support for <em>complex modifications</em> at last, and restoring equilibrium to my computing in the process.</p>
<p class="round-box"><strong>Note:</strong> Don’t let the term “complex modifications” put you off, complex in this context simply means <em>not a one-to-one key remap</em>.</p>
<h3 id="ultimate-caps-lock">Ultimate Caps-lock</h3>
<p>So, with all of that background out the way, let me tell you how my <kbd>caps lock</kbd> key behaves now:</p>
<ol>
<li>When depressed on its own it maps to <kbd>esc</kbd> (useful on my Touch Bar MacBook);</li>
<li>When used as modifier (depressed in conjunction with another key) it acts as a hyper key;</li>
<li>When depressed in conjunction with the <kbd>shift</kbd> key (either left or right) it toggles the caps lock mode.</li>
</ol>
<p>For myself, this is the perfect set-up. The <kbd>caps lock</kbd> key has gone from being the most irritating key on the keyboard, to being the perfect companion to my life as a keyboard jockey.</p>
<p>You should give Karabiner Elements a try. If you’d like to use the configuration I have described here, <a href="https://gist.github.com/PerpetualBeta/5414960b79ef1b26b3bcfb11c99f5ea3">my <code>karabiner.json</code> file is a available as a Gist</a>.</p>
<hr /><p><small>If you liked this post you should visit the <a href="https://www.perpetual-beta.org/archives.html">Perpetual βeta</a> website, where you will find further essays by the author.</small></p><p><small>Formatting messed up in your feed reader? You should <a href="https://www.perpetual-beta.org/weblog/magical-caps-lock-key.html">view this article in your web-browser</a>.</small></p>
tag:www.perpetual-beta.org,2017-06-11:/weblog/a-little-privacy-please.htmlA Little Privacy Please2017-06-11T16:11:26Z2017-06-11T16:11:26Z<p>I’m a long-time user of privacy screens. You know what I mean, those polarising filters that sit atop your screen and reduce the viewing angle from what is effectively 180° to just 60° or so. These filters make it difficult for your neighbours on planes, trains, or in cafés to see what you’re working on or to read the text on your <span class="no-wrap">screen.<sup id="fnref:1"><a href="#fn:1" class="footnote">1</a></sup></span></p>
<p>Historically, I have opted for <span class="caps">3M</span> filters as these work well, are widely available and are inexpensive. Unfortunately, the filters I have used in the past are all of the kind that either adhere directly to the screen or that slot into holders that one has to affix to the screen’s bezel. In both cases, the manufacturers tell us that the adhesives are removable and reusable. Sadly, in my experience, they are not.</p>
<p>Therefore, it intrigued me to learn of <a href="https://starkinc.biz/product/removable-macbook-privacy-screen/">a new privacy filter by Stark Inc</a>.<sup id="fnref:2"><a href="#fn:2" class="footnote">2</a></sup> that affixes to the MacBook magnetically, thus being easy to remove and reuse.</p>
<p>I ordered one and have been using it daily for a couple of weeks now (in fact, as yet, I haven’t removed it from my MacBook).</p>
<p>The Stark screen is well made (in Germany). It’s thicker and more rigid than the filters I have previously used. It feels like a quality product.</p>
<p>At the top of the filter is the magnetic strip that binds to the magnets(?) or <a href="https://en.wikipedia.org/wiki/Ferromagnetism">ferromagnetic material</a> in the MacBook’s bezel. There is a cutout in this strip so that the ambient light sensor, camera and camera <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Light-Emitting Diode"><span class="caps">LED</span></abbr> are not obscured. With this magnetic strip, the filter is ridiculously easy to remove and reapply.</p>
<p>So how about those viewing angles? Well, see for yourself.</p>
<figure itemscope="" itemtype="http://schema.org/ImageObject" style="max-width: 100vw;" class="align-center"><div data-canvas-image="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgACAAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A5++ube38cWV3p8ka2ELwSq+4silFHBI+nP1rq2+MF6rlRYRsAcBhIcH3oorOEubc0nHlP//Z" style="background: rgba(0, 0, 0, 0.04) url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgACAAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A5++ube38cWV3p8ka2ELwSq+4silFHBI+nP1rq2+MF6rlRYRsAcBhIcH3oorOEubc0nHlP//Z') no-repeat; background-size: cover; padding-bottom: calc((615/820)*100%);" class="rounded image-loader"><img alt="photo of computer screen with privacy filter attached, taken from the viewpoint of person sitting beside the operator" src="https://www.perpetual-beta.org/assets/images/480/960b526d8e2a4596a8bb789bee3700e7.jpg" srcset="https://www.perpetual-beta.org/assets/images/80/960b526d8e2a4596a8bb789bee3700e7.jpg 80w, https://www.perpetual-beta.org/assets/images/480/960b526d8e2a4596a8bb789bee3700e7.jpg 480w, https://www.perpetual-beta.org/assets/images/768/960b526d8e2a4596a8bb789bee3700e7.jpg 768w, https://www.perpetual-beta.org/assets/images/820/960b526d8e2a4596a8bb789bee3700e7.jpg 820w, https://www.perpetual-beta.org/assets/images/1024/960b526d8e2a4596a8bb789bee3700e7.jpg 1024w, https://www.perpetual-beta.org/assets/images/1280/960b526d8e2a4596a8bb789bee3700e7.jpg 1280w, https://www.perpetual-beta.org/assets/images/1640/960b526d8e2a4596a8bb789bee3700e7.jpg 1640w" sizes="100vw" class="rounded image-loading"></div></figure>
<p>I took the above photo from a position roughly where I estimated a neighbour’s viewpoint to be. The MacBook is on. Screen brightness is at 50%. Visibility is severely impaired. You can just about make out that there’s something on the screen if you look at <a href="https://www.perpetual-beta.org/assets/images/1640/960b526d8e2a4596a8bb789bee3700e7.jpg">the full size image</a>. But you certainly can’t read any text.</p>
<figure itemscope="" itemtype="http://schema.org/ImageObject" style="max-width: 100vw;" class="align-center"><div data-canvas-image="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgACAAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8Az9F8Z3mm+HpbI6fMzHeVZJEx8y4AIIycdeMUsfiTwfHGqP4UundQAzbup9fv0UVi4q1i1J3P/9k=" style="background: rgba(0, 0, 0, 0.04) url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgACAAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8Az9F8Z3mm+HpbI6fMzHeVZJEx8y4AIIycdeMUsfiTwfHGqP4UundQAzbup9fv0UVi4q1i1J3P/9k=') no-repeat; background-size: cover; padding-bottom: calc((576/820)*100%);" class="rounded image-loader"><img alt="photo of computer screen with privacy filter attached, taken from the perspective of the operator" src="https://www.perpetual-beta.org/assets/images/480/84706ad0f48702fbfcdd587083394999.jpg" srcset="https://www.perpetual-beta.org/assets/images/80/84706ad0f48702fbfcdd587083394999.jpg 80w, https://www.perpetual-beta.org/assets/images/480/84706ad0f48702fbfcdd587083394999.jpg 480w, https://www.perpetual-beta.org/assets/images/768/84706ad0f48702fbfcdd587083394999.jpg 768w, https://www.perpetual-beta.org/assets/images/820/84706ad0f48702fbfcdd587083394999.jpg 820w, https://www.perpetual-beta.org/assets/images/1024/84706ad0f48702fbfcdd587083394999.jpg 1024w, https://www.perpetual-beta.org/assets/images/1280/84706ad0f48702fbfcdd587083394999.jpg 1280w, https://www.perpetual-beta.org/assets/images/1640/84706ad0f48702fbfcdd587083394999.jpg 1640w" sizes="100vw" class="rounded image-loading"></div></figure>
<p>I took this second <a href="https://www.perpetual-beta.org/assets/images/1640/84706ad0f48702fbfcdd587083394999.jpg">photo head-on to the screen</a>. Here too, the screen brightness is at 50%. Visibility is 100%.</p>
<p>What you can’t see from the second image is the large bay window behind me, with the sun high in the sky. You can’t see it because the Stark filter is anti-glare and anti-reflecting. It’s also scratch resistant.</p>
<p>Best of all, it’s reversible. One side has a glossy finish, the other is <strong><em>matte</em></strong>. You read that right. A matte finish. I can’t tell you how nice it is, when you do as much imaging on your computer as I do, to have a matte screen. How I wish Apple had continued to offer matte screens as an option.</p>
<p>Is this the best privacy screen I’ve used? No, that award has to go to the <span class="caps">3M</span> Privacy Filter. However, the Stark privacy filter, without a doubt, is the most convenient of its ilk. For ease of application and removal, there’s nothing to touch it.</p>
<h3 id="pros">Pros</h3>
<ul>
<li>Limited viewing angle;</li>
<li>Simple to apply and remove;</li>
<li>Reusable;</li>
<li>Matte finish (reversible, glossy on the flip-side)</li>
</ul>
<h3 id="cons">Cons</h3>
<ul>
<li>Expensive ($57 (<abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="United States"><span class="caps">US</span></abbr>), plus shipping);</li>
<li>Darkens screen slightly (but then, they all do);</li>
<li>Cutout for camera is off-centre, so obscures the camera <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Light-Emitting Diode"><span class="caps">LED</span></abbr> when the glossy side is up;</li>
<li>Magnetic strip is slightly too thick for the laptop to fully <span class="no-wrap">close.<sup id="fnref:3"><a href="#fn:3" class="footnote">3</a></sup></span>
</li>
</ul>
<div class="footnotes">
<ol>
<li id="fn:1">
<p>Important when you’re working secretly on the “<a href="https://www.quora.com/What-is-going-to-be-the-next-big-thing-in-the-next-5-10-years">the next big thing</a>” or checking your embarrassingly negative bank balance. <a href="#fnref:1" class="reversefootnote">↩︎</a></p>
</li>
<li id="fn:2">
<p>Iron Man, did you make this thing? 😃 <a href="#fnref:2" class="reversefootnote">↩︎</a></p>
</li>
<li id="fn:3">
<p>This bothers me, but I always travel with my MacBook in a sleeve. One that’s tight enough a fit to keep the laptop as closed as it can be, so it hasn’t been a problem. However, I hope that Stark can address this in their next iteration of this product. <a href="#fnref:3" class="reversefootnote">↩︎</a></p>
</li>
</ol>
</div>
<hr /><p><small>If you liked this post you should visit the <a href="https://www.perpetual-beta.org/archives.html">Perpetual βeta</a> website, where you will find further essays by the author.</small></p><p><small>Formatting messed up in your feed reader? You should <a href="https://www.perpetual-beta.org/weblog/a-little-privacy-please.html">view this article in your web-browser</a>.</small></p>
tag:www.perpetual-beta.org,2017-06-11:/weblog/wtf-is-wrong-with-my-service-worker.htmlW<small>TF</small> is Wrong with My Service Worker?2017-06-11T13:02:00Z2017-06-11T13:02:00Z<figure class="align-center" style="max-width: 100vw;"><div style="background-color: transparent; padding-bottom: calc((572/925)*100%);" class="load image-loader"><img src="https://www.perpetual-beta.org/assets/svg/confused-man.svg" alt="Stylised rendering of a confused man, scratching his head" class="rounded image-loading"></div></figure>
<p>I’ve had a <a href="https://github.com/w3c/ServiceWorker/blob/master/explainer.md">service worker</a> running on this website for the past ten months or so. It maintains a cache of files in the client browser so as to enable the site to run in an offline mode as per the current <a href="https://en.wikipedia.org/wiki/Progressive_web_app"><abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Progressive Web App"><span class="caps">PWA</span></abbr></a> paradigm.</p>
<p>As far as I’m aware, it’s been running flawlessly since I deployed it. However, last week I noticed that all was not well. The service worker wasn’t updating the caches correctly, or at all in some cases.</p>
<p>I’ve spent the past three days trying to get to the bottom of the problem. So far, to no avail.</p>
<p>Curiously, everything works perfectly locally.</p>
<p>If anyone out there can work out what’s going wrong and point me towards a fix, I would appreciate it.</p>
<p>The service worker source code is <a href="https://gist.github.com/PerpetualBeta/178ea3dc774003b9d936faa8b038a05d">available as a Gist</a>.</p>
<hr /><p><small>If you liked this post you should visit the <a href="https://www.perpetual-beta.org/archives.html">Perpetual βeta</a> website, where you will find further essays by the author.</small></p><p><small>Formatting messed up in your feed reader? You should <a href="https://www.perpetual-beta.org/weblog/wtf-is-wrong-with-my-service-worker.html">view this article in your web-browser</a>.</small></p>
tag:www.perpetual-beta.org,2017-06-11:/weblog/implementing-full-text-search-on-static-website.htmlThe Perpetual βeta Got a Search Engine2017-06-11T09:46:38Z2017-06-11T09:46:38Z<figure class="align-center" style="max-width: 100vw;"><div style="background-color: transparent; padding-bottom: calc((159/318)*100%);" class="load image-loader"><img src="https://www.perpetual-beta.org/assets/svg/search.svg" alt="Stylised rendering of a web search field and a magnifying glass" class="rounded image-loading"></div></figure>
<p>I have used a static site generator — <wbr /><a href="https://nanoc.ws/">nanoc</a> — <wbr />to publish this website for some time now. I have enjoyed the benefits of a static website and experienced only a handful of drawbacks. However, one obstacle has bothered me for some time, and that was my inability to add a search engine to the site.</p>
<p>The principle reason why I couldn’t add a search engine was the result of an architectural choice I made early on. And it was this: <em>there should be no server-side scripting</em>. In eliminating a reliance on server scripts I’ve made the Perpetual βeta resistant to hacking (no software bugs to compromise); I have realised significant performance gains (it’s just static files all the way down); and the entire website is dependency free and highly portable (I can zip up the files and move them to another server in minutes).</p>
<p>It is axiomatic that a traditional search engine is reliant on software running on the server. These programs will maintain an index of the content, respond to <code>POST</code> and <code>GET</code> requests from the client, perform the search itself and generate a results page to return to the user. So how could I deploy a search engine, without having this back-end application available?<sup id="fnref:1"><a href="#fn:1" class="footnote">1</a></sup></p>
<p>I found my solution in a third-party JavaScript library called <a href="https://lunrjs.com/"><small><span class="caps">LUNR</span></small></a>.<sup id="fnref:2"><a href="#fn:2" class="footnote">2</a></sup> This library takes a <a href="https://en.wikipedia.org/wiki/JSON"><abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="JavaScript Object Notation"><span class="caps">JSON</span></abbr></a>-encoded <a href="https://www.perpetual-beta.org/search-corpus.json">corpus</a> — <wbr />which I have configured nanoc to produce at build time — <wbr />as the source for indexing and uses a <a href="https://en.wikipedia.org/wiki/Apache_Solr">Solr</a>-like scoring formula to generate its results.</p>
<p>What makes this approach so cool is that, being entirely client-side driven, searching is fast. We’re talking immediate results. With no round-trip to the server there is simply no delay in processing a search query. An additional bonus: one can still perform searches when the client is <span class="no-wrap">offline,<sup id="fnref:3"><a href="#fn:3" class="footnote">3</a></sup></span> which is great for <a href="https://en.wikipedia.org/wiki/Progressive_web_app"><abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Progressive Web App"><span class="caps">PWA</span></abbr></a> websites like the Perpetual βeta.</p>
<p>I have made the search engine available from the <a href="https://www.perpetual-beta.org/archives.html">Archives page</a>.<sup id="fnref:4"><a href="#fn:4" class="footnote">4</a></sup> The way I have implemented it is that queries/results happen <em>in-the-page</em>, they do not add to the browser’s history. However, the system appends a <a href="https://en.wikipedia.org/wiki/Query_string">query string</a> to the <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Uniform Resource Locator"><span class="caps">URL</span></abbr>, making the results idempotent. Thus one can bookmark, link to and otherwise use the <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Uniform Resource Locator"><span class="caps">URL</span></abbr>s, as you would with any other, and know that you will get the same results page back. For example: here’s a search for “<a href="https://www.perpetual-beta.org/archives.html?q=amiga"><em>amiga</em></a>” and one for ”<a href="https://www.perpetual-beta.org/archives.html?q=macos"><em>mac<small>OS</small></em></a>”.</p>
<p>You might wonder if all this utility comes at a cost. Just how big is the search corpus the browser has to download and evaluate? At the time of writing, for this entire website, it’s 226<abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Kilobyte (1,000 bytes)"><span class="caps">KB</span></abbr>. It’s less than 90<abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Kilobyte (1,000 bytes)"><span class="caps">KB</span></abbr> when gzipped, which is equivalent to a standard, non-animated ad unit.</p>
<div class="footnotes">
<ol>
<li id="fn:1">
<p>I discounted third-party options like <a href="https://cse.google.com/cse/">Google Site Search</a> as I don’t want advertisements in the results; nor do I want to introduce unnecessary, external dependencies. Additionally, I want complete control of the output. <a href="#fnref:1" class="reversefootnote">↩︎</a></p>
</li>
<li id="fn:2">
<p>Via <a href="https://chodounsky.net/2015/05/14/full-text-search-on-static-website/">Jakub Chodounský</a>. <a href="#fnref:2" class="reversefootnote">↩︎</a></p>
</li>
<li id="fn:3">
<p>Although the client might not have, in her local cache, all the content that the search engine results might link to. <a href="#fnref:3" class="reversefootnote">↩︎</a></p>
</li>
<li id="fn:4">
<p>Note: As the search engine is entirely JavaScript driven, it is not available if the user disables JavaScript. <a href="#fnref:4" class="reversefootnote">↩︎</a></p>
</li>
</ol>
</div>
<hr /><p><small>If you liked this post you should visit the <a href="https://www.perpetual-beta.org/archives.html">Perpetual βeta</a> website, where you will find further essays by the author.</small></p><p><small>Formatting messed up in your feed reader? You should <a href="https://www.perpetual-beta.org/weblog/implementing-full-text-search-on-static-website.html">view this article in your web-browser</a>.</small></p>
tag:www.perpetual-beta.org,2017-05-21:/weblog/tls-adoption-is-growing-fast.htmlTLS Adoption is Growing, Fast2017-05-21T18:44:15Z2017-05-21T18:44:15Z<p>One of the Perpetual βeta housekeeping tasks I run (semi) frequently, is a site-wide check of hyperlinks, internal and external, with the <a href="http://peacockmedia.software/mac/integrity/free.html">Integrity app</a>.</p>
<p>Integrity reports broken links. I then investigate each one and attempt to determine if the linked resource has permanently disappeared — <wbr />in which case I’ll try to find an alternative resource — <wbr />or temporarily, which I’ll leave alone.</p>
<p>Amongst the reports that Integrity produces is a list of all redirected links on a site. So, if a resource has moved — <wbr />and the webmaster’s on top of her game — <wbr />the target website will have instructions to redirect calls to the old address ‘<em>old-example.htm</em>’ to the new address ‘<em>new-example.htm</em>’. A process that is effectively transparent at the client side.</p>
<p>I usually replace re-directed source links on Perpetual βeta with the destination address the redirect results in, as this removes just that little bit of latency and fractionally eases the load on the target server.</p>
<p>As it happens, I hadn’t run Integrity for some time (six months at a guess). So I recently fired up the app and let it analyse the Perpetual βeta. In the results two things struck me. The first was that there were only half-a-dozen broken links (which is certainly a surprise considering the usual <a href="https://en.wikipedia.org/wiki/Link_rot">atrophy of the Web</a>). The second was a disproportionately high number of redirects on the Perpetual βeta’s 1,700+ hyperlinks.</p>
<p>Had half the Web relocated? Had I missed a significant Internet event?</p>
<p>Actually, the answer to both questions was, “yes, kinda.”</p>
<p>Almost every single one of these redirects was a protocol change from the plain-text, unsecured <em><abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="HyperText Transfer Protocol"><span class="caps">HTTP</span></abbr></em> to the encrypted <em><abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="HyperText Transfer Protocol Secure"><span class="caps">HTTPS</span></abbr></em>.</p>
<p>It’s amazing to see so much of web adopting <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Transport Layer Security"><span class="caps">TLS</span></abbr> and so quickly. Just two or three years ago this would have been unthinkable. Webmasters were able to argue against <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Transport Layer Security"><span class="caps">TLS</span></abbr> deployment with good reason: cost; expensive processor cycles for encryption/decryption; implementation barriers (including those of getting advertisers and other third-parties on-board); and so on.</p>
<p>Yet here we are, with a Web where now it seems that <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="HyperText Transfer Protocol"><span class="caps">HTTP</span></abbr> is odd man out, rather than its counterpart.</p>
<p>The efforts of parties like <a href="https://letsencrypt.org/">Let’s Encrypt</a> — <wbr />in making <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Transport Layer Security"><span class="caps">TLS</span></abbr> effectively free — <wbr />combined with concerns raised by the <a href="https://www.theguardian.com/world/interactive/2013/nov/01/snowden-nsa-files-surveillance-revelations-decoded">Snowden leaks</a> and growing revelations of state-sponsored surveillance; in conjunction with players like Google touting <a href="https://arstechnica.com/security/2014/08/in-major-shift-google-boosts-search-rankings-of-https-protected-sites/">increased search relevance to secure websites</a>; and now vendors revealing plans for, or deployment of, <a href="https://arstechnica.com/information-technology/2017/01/firefox-chrome-start-calling-http-connections-insecure/">browsers that highlight unsecured websites</a>… all are, I’m sure, factors in the increasing dominance of <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Transport Layer Security"><span class="caps">TLS</span></abbr>-secured Web properties.</p>
<p>It’s taken us a long time to get here, but we should all be grateful that we are, and that the <a href="https://letsencrypt.org/2016/06/22/https-progress-june-2016.html">rate of <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Transport Layer Security"><span class="caps">TLS</span></abbr> adoption</a> continues.</p>
<hr /><p><small>If you liked this post you should visit the <a href="https://www.perpetual-beta.org/archives.html">Perpetual βeta</a> website, where you will find further essays by the author.</small></p><p><small>Formatting messed up in your feed reader? You should <a href="https://www.perpetual-beta.org/weblog/tls-adoption-is-growing-fast.html">view this article in your web-browser</a>.</small></p>
tag:www.perpetual-beta.org,2017-02-20:/weblog/thoughts-on-the-late-2016-macbook-pro.htmlThoughts on the Late 2016 MacBook Pro2017-02-20T22:09:11Z2017-02-20T22:09:11Z<figure class="align-center" style="max-width: 100vw;"><div style="background-color: transparent; padding-bottom: calc((1500/2400)*100%);" class="load image-loader"><img src="https://www.perpetual-beta.org/assets/svg/macbook_touch_bar.svg" alt="Stylised rendering of a late 2016 MacBook Pro with Touch Bar" class="rounded image-loading"></div></figure>
<h3 id="introduction">Introduction</h3>
<ul id="markdown-toc">
<li><a href="#introduction">Introduction</a></li>
<li><a href="#the-engine-room-cpu-ram-and-ssd">The Engine Room: <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Central Processing Unit"><span class="caps">CPU</span></abbr>, <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Random Access Memory"><span class="caps">RAM</span></abbr> and <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Solid State Drive"><span class="caps">SSD</span></abbr></a></li>
<li><a href="#force-touch-trackpad">Force Touch Trackpad</a></li>
<li><a href="#keyboard">Keyboard</a></li>
<li><a href="#touch-bar">Touch Bar</a></li>
<li><a href="#touch-id">Touch <span class="caps">ID</span></a></li>
<li><a href="#screen">Screen</a></li>
<li><a href="#thunderbolt-3--usb-smallcsmall">Thunderbolt 3 / <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Universal Serial Bus"><span class="caps">USB</span></abbr>-<small>C</small></a></li>
<li><a href="#battery">Battery</a></li>
<li><a href="#speakers">Speakers</a></li>
<li><a href="#stealth-mac">Stealth Mac</a></li>
<li><a href="#conclusion">Conclusion</a></li>
</ul>
<p>When Apple announced the new MacBook Pro, on 27<sup>th</sup> October 2016, I placed my order immediately. I took delivery of the machine around three or four weeks later. I’ve waited until now to write about it as I wanted to have some time with the computer first. I wanted to build up some real-world experience with it and get a software update or two into the mix to iron out the bugs that I assumed would there (the first version of anything always has issues).</p>
<p>Mine is a <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Built to Order"><span class="caps">BTO</span></abbr> 15″ model, with Touch Bar. It has the <span class="caps">2.9</span><abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Gigahertz">GHz</abbr> quad-core Intel Core i7 processor with Turbo Boost up to <span class="caps">3.8</span><small><span class="caps">GH</span></small>z and the Radeon Pro 460 with 4<abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Gigabyte (1,000,000,000 bytes)"><span class="caps">GB</span></abbr> memory. I also upgraded the <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Peripheral Component Interconnect Express">PCIe</abbr>-based <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Solid State Drive"><span class="caps">SSD</span></abbr> storage to 1<abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Terabyte (1,000,000,000,000 bytes)"><span class="caps">TB</span></abbr>. I wanted to max out with the 2<abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Terabyte (1,000,000,000,000 bytes)"><span class="caps">TB</span></abbr> option but that would have taken the price over £4,000 — <wbr />and that was just a little too much for me to stomach — <wbr />particularly with storage being so inexpensive outside of the Apple <a href="https://en.wikipedia.org/wiki/Reality_distortion_field">Reality Distortion Field</a>.</p>
<p>Now that I have some time with the new <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> under my belt, I thought I’d write up my notes. My thoughts on this oh-so-controversial machine.</p>
<h3 id="the-engine-room-cpu-ram-and-ssd">The Engine Room: <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Central Processing Unit"><span class="caps">CPU</span></abbr>, <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Random Access Memory"><span class="caps">RAM</span></abbr> and <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Solid State Drive"><span class="caps">SSD</span></abbr>
</h3>
<p>Unfortunately I didn’t benchmark my previous <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr>, with the jobs I regularly perform. So I am unable to offer a side-by-side comparison. I can say that, subjectively, this <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> feels a little faster. But the difference is more, <em>“oh, that’s finished already”</em> rather than <em>“bloody hell, that was fast!”</em> The speed increase doesn’t take my breath away, but is noticeable with some tasks.</p>
<p>For those who care about such things, the <a href="http://geekbench.com/">Geekbench</a> scores for this configuration are: 4,379 (single core); 13,760 (multi core) and 47,908 Open<span class="caps">CL.</span> <a href="https://novabench.com/">Novabench</a> results in a respectable overall score of 1,217.</p>
<p>Therefore, it’s fair to say that processor and <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Graphics Processing Unit"><span class="caps">GPU</span></abbr> performance are (at the time of writing) competitive with other laptops in this rarefied price range.</p>
<p>With the <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Solid State Drive"><span class="caps">SSD</span></abbr> things are much more newsworthy:</p>
<figure itemscope="" itemtype="http://schema.org/ImageObject" style="max-width: 100vw;" class="align-center"><div data-canvas-image="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgACQAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A83guLnd88dwzZz3P+fpTzqEu45guSc9fOZf07VnjrHTT1Nbzw0Zats5o15x2sf/Z" style="background: rgba(0, 0, 0, 0.04) url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgACQAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A83guLnd88dwzZz3P+fpTzqEu45guSc9fOZf07VnjrHTT1Nbzw0Zats5o15x2sf/Z') no-repeat; background-size: cover; padding-bottom: calc((722/820)*100%);" class="rounded-discrete image-loader"><img alt="screen capture: AJA System Test, disk speed" src="https://www.perpetual-beta.org/assets/images/480/b75e50ca63febaba3a0d81dbab537182.png" srcset="https://www.perpetual-beta.org/assets/images/80/b75e50ca63febaba3a0d81dbab537182.png 80w, https://www.perpetual-beta.org/assets/images/480/b75e50ca63febaba3a0d81dbab537182.png 480w, https://www.perpetual-beta.org/assets/images/768/b75e50ca63febaba3a0d81dbab537182.png 768w, https://www.perpetual-beta.org/assets/images/820/b75e50ca63febaba3a0d81dbab537182.png 820w, https://www.perpetual-beta.org/assets/images/1024/b75e50ca63febaba3a0d81dbab537182.png 1024w, https://www.perpetual-beta.org/assets/images/1280/b75e50ca63febaba3a0d81dbab537182.png 1280w, https://www.perpetual-beta.org/assets/images/1640/b75e50ca63febaba3a0d81dbab537182.png 1640w" sizes="100vw" class="rounded-discrete image-loading"></div></figure>
<p>1,944 <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Megabyte (1,000,000 bytes)"><span class="caps">MB</span></abbr>/s write and a massive 2,665 <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Megabyte (1,000,000 bytes)"><span class="caps">MB</span></abbr>/s read speed with a 64<abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Gigabyte (1,000,000,000 bytes)"><span class="caps">GB</span></abbr> 5,120 × 2,700 5<small>K <span class="caps">RED</span></small> file. Holy crap. That image says more than anything I could write about this superlative disk sub-system.</p>
<p>Now… let’s talk about <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Random Access Memory"><span class="caps">RAM</span></abbr>. The 16<abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Gigabyte (1,000,000,000 bytes)"><span class="caps">GB</span></abbr> upper limit on <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Random Access Memory"><span class="caps">RAM</span></abbr> in this model was widely criticised (<a href="https://www.perpetual-beta.org/weblog/apples-2016-macbook-pro.html#amnesia">myself included</a>). Then I read Jonathan Ździarski’s <em>‘<a href="https://www.zdziarski.com/blog/?p=6355">Can We Put the 16<abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Gigabyte (1,000,000,000 bytes)"><span class="caps">GB</span></abbr> “Pro” Myth to Rest?</a>’</em> and thought, “maybe it’s not so bad.” Having said that, part of me still feels underwhelmed by 16<abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Gigabyte (1,000,000,000 bytes)"><span class="caps">GB</span></abbr>. I would have liked to have had at least the option for more <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Random Access Memory"><span class="caps">RAM</span></abbr>. At the same time, I want my laptop to run all day on a single charge. More <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Random Access Memory"><span class="caps">RAM</span></abbr> draws more power and that equals a reduced time on battery. It’s a conundrum.</p>
<p>With the <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Solid State Drive"><span class="caps">SSD</span></abbr> performance of this new <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> we have a lot of leeway with <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Random Access Memory"><span class="caps">RAM</span></abbr> because paging in/out of this <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Solid State Drive"><span class="caps">SSD</span></abbr> is so damn fast. That’s not to excuse the 16<abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Gigabyte (1,000,000,000 bytes)"><span class="caps">GB</span></abbr> limit, simply to say that it doesn’t compromise my workflow (and I consider myself to be a “professional” user).</p>
<h3 id="force-touch-trackpad">Force Touch Trackpad</h3>
<p>The most noticeable aspect of the MacBook Pro’s trackpad is its size. It’s big. My iPhone 6s Plus fits comfortably inside its perimeter. Yet, it doesn’t get in the way. Palm rejection works well (but not perfectly) and I haven’t had any significant issues related to the trackpad’s dimensions.</p>
<p>My previous MacBook had a mechanical trackpad, this one has a <a href="https://en.wikipedia.org/wiki/Force_Touch">Force Touch</a> variant which also features Apple’s “Taptic Engine”. This is my first experience with this technology and I find it impressive. I did not expect it to feel as convincing as it does. The entire trackpad surface is clickable, right into the corners. I could not, through touch, distinguish between a click on my old MacBook and one on the new. It’s impressive stuff. As with all Apple trackpads, it blows the equivalent non-Apple hardware of the water. It’s accurate, responsive, lag-free and the surface texture is nothing short of perfect.</p>
<h3 id="keyboard">Keyboard</h3>
<p>The keyboard has suffered so much criticism that I have to wonder: who of those who condemn it, have actually used it for a sustained period?</p>
<p>I have already written tens of thousands of words on this keyboard and I have found it to be easy to live with. The travel is short, that much is true. But the keys are larger than those of my previous model and they are almost perfectly spaced. Each key is slightly concave, which means my thick fingers more naturally find their <span class="no-wrap">centres.<sup id="fnref:1"><a href="#fn:1" class="footnote">1</a></sup></span> Best of all is the distinct click each key makes when pressed. I have spent hundreds of pounds on mechanical keyboards in the past to get such a click. I love the positive feedback from this keyboard and find myself typing more assuredly on it than I did on its predecessor, or the wired, full-size Apple keyboard I often used with it.</p>
<p>As with all MacBooks, the keyboard offers variable backlighting. This is user configurable and responsive to ambient light levels. Unlike my previous MacBook, light leakage on this new keyboard is virtually non-existent. This makes the keyboard look just that little bit more premium than before.</p>
<p>The fly in the ointment, albeit a minor one, is the new arrangement of the arrow cluster. The <kbd>←</kbd> and <kbd>→</kbd> keys are larger than the previous incarnation, so their height now matches that of the <kbd>↑</kbd> and <kbd>↓</kbd> keys combined. It looks prettier but, for one who routinely navigated those keys by touch, aided by their dimensions, it has taken some getting used to.</p>
<p>Oh, and the <kbd>esc</kbd> is missing. More on that below. 😀</p>
<h3 id="touch-bar">Touch Bar</h3>
<p>The headline feature of the late 2016 MacBooks is undoubtedly the all new <a href="https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/OSXHIGuidelines/AbouttheTouchBar.html">Touch Bar</a>. According to Apple:</p>
<blockquote>
<p>“The Touch Bar — <wbr />located above the keyboard on supported MacBook Pro models — <wbr />is a Retina display and input device that provides dynamic interface controls for interacting with content on the main screen. These controls offer quick access to system-level and app-specific functionality based on the current context.”</p>
</blockquote>
<p>The first thing I noticed about the Touch Bar was that some of the application defaults are weird. Take Safari for example: by default, a scrubber featuring microscopic previews of that browser’s open tabs, occupies the largest portion of the Touch Bar. Now, given that I’ll often work with twenty or more open tabs (and have the eyesight of a man closing in on fifty), this scrubber is almost entirely useless. It may look good in demos and photo-shoots, but that’s about it’s only use.</p>
<p>Fortunately the Touch Bar is highly configurable, even for the mac<small><span class="caps">OS</span></small> stock apps. My customised Safari Touch Bar, for example, is much better suited to my workflow than the eye-candy default.</p>
<figure itemscope="" itemtype="http://schema.org/ImageObject" style="max-width: 766px;" class="align-center captioned-image"><div data-canvas-image="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAAQAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A8m1X/kGXH+//AOzCuYoooA//2Q==" style="background: rgba(0, 0, 0, 0.04) url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAAQAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A8m1X/kGXH+//AOzCuYoooA//2Q==') no-repeat; background-size: cover; padding-bottom: calc((60/766)*100%);" class="rounded-discrete image-loader"><img alt="Touch Bar screen capture 1" src="https://www.perpetual-beta.org/assets/images/480/21524385a4dca94b18229ddacd34a812.png" srcset="https://www.perpetual-beta.org/assets/images/80/21524385a4dca94b18229ddacd34a812.png 80w, https://www.perpetual-beta.org/assets/images/480/21524385a4dca94b18229ddacd34a812.png 480w, https://www.perpetual-beta.org/assets/images/768/21524385a4dca94b18229ddacd34a812.png 766w, https://www.perpetual-beta.org/assets/images/820/21524385a4dca94b18229ddacd34a812.png 766w, https://www.perpetual-beta.org/assets/images/1024/21524385a4dca94b18229ddacd34a812.png 766w, https://www.perpetual-beta.org/assets/images/1280/21524385a4dca94b18229ddacd34a812.png 766w, https://www.perpetual-beta.org/assets/images/1640/21524385a4dca94b18229ddacd34a812.png 766w" sizes="100vw" class="rounded-discrete image-loading"></div>
<figcaption><strong itemprop="title">Left: escape, previous page <span class="amp">&</span> next page</strong></figcaption></figure>
<figure itemscope="" itemtype="http://schema.org/ImageObject" style="max-width: 766px;" class="align-center captioned-image"><div data-canvas-image="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAAQAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A8puv+QrZfWX/ANBrRT7i/SiigD//2Q==" style="background: rgba(0, 0, 0, 0.04) url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAAQAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A8puv+QrZfWX/ANBrRT7i/SiigD//2Q==') no-repeat; background-size: cover; padding-bottom: calc((60/766)*100%);" class="rounded-discrete image-loader"><img alt="Touch Bar screen capture 2" src="https://www.perpetual-beta.org/assets/images/480/4d9295744ab810d4c33ccf027290437a.png" srcset="https://www.perpetual-beta.org/assets/images/80/4d9295744ab810d4c33ccf027290437a.png 80w, https://www.perpetual-beta.org/assets/images/480/4d9295744ab810d4c33ccf027290437a.png 480w, https://www.perpetual-beta.org/assets/images/768/4d9295744ab810d4c33ccf027290437a.png 766w, https://www.perpetual-beta.org/assets/images/820/4d9295744ab810d4c33ccf027290437a.png 766w, https://www.perpetual-beta.org/assets/images/1024/4d9295744ab810d4c33ccf027290437a.png 766w, https://www.perpetual-beta.org/assets/images/1280/4d9295744ab810d4c33ccf027290437a.png 766w, https://www.perpetual-beta.org/assets/images/1640/4d9295744ab810d4c33ccf027290437a.png 766w" sizes="100vw" class="rounded-discrete image-loading"></div>
<figcaption><strong itemprop="title">Centre: new tab, show tabs, show sidebar, show favourites bar</strong></figcaption></figure>
<figure itemscope="" itemtype="http://schema.org/ImageObject" style="max-width: 766px" class="align-center captioned-image"><div data-canvas-image="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAAQAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A8v0L/kE23+8//oQq033j9aKKAP/Z" style="background: rgba(0, 0, 0, 0.04) url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAAQAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A8v0L/kE23+8//oQq033j9aKKAP/Z') no-repeat; background-size: cover; padding-bottom: calc((60/766)*100%);" class="rounded-discrete image-loader"><img alt="Touch Bar screen capture 3" src="https://www.perpetual-beta.org/assets/images/480/cbc2706e77e3316ed19e00680c046548.png" srcset="https://www.perpetual-beta.org/assets/images/80/cbc2706e77e3316ed19e00680c046548.png 80w, https://www.perpetual-beta.org/assets/images/480/cbc2706e77e3316ed19e00680c046548.png 480w, https://www.perpetual-beta.org/assets/images/768/cbc2706e77e3316ed19e00680c046548.png 766w, https://www.perpetual-beta.org/assets/images/820/cbc2706e77e3316ed19e00680c046548.png 766w, https://www.perpetual-beta.org/assets/images/1024/cbc2706e77e3316ed19e00680c046548.png 766w, https://www.perpetual-beta.org/assets/images/1280/cbc2706e77e3316ed19e00680c046548.png 766w, https://www.perpetual-beta.org/assets/images/1640/cbc2706e77e3316ed19e00680c046548.png 766w" sizes="100vw" class="rounded-discrete image-loading"></div>
<figcaption><strong itemprop="title">Right: expand control strip, media <span class="amp">&</span> volume controls</strong></figcaption></figure>
<p>Therefore, when switching to a Touch Bar MacBook, you should anticipate spending some time configuring it to your particular requirements. The Touch Bar becomes so much more useful when you’ve tweaked it.</p>
<p>It’s worth pointing out that compatibility with the Touch Bar is not universal, yet is growing rapidly. The <a href="https://en.wikipedia.org/wiki/Mac_App_Store"><abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Mac App Store"><span class="caps">MAS</span></abbr></a> informs me at least once a week that one app or another has an upgrade that includes support for the Touch Bar. But some older apps, not actively maintained, will likely never offer such an update. However, with a little effort, one can coerce even these incompatible apps to <a href="https://medium.com/productivity-freak/what-if-you-could-really-customize-your-new-touch-bar-ea42ec66f42c">play nice with Apple’s new shiny</a>.</p>
<p><a href="https://sheep.horse/2016/11/rip_apple_macbook.html">The Touch Bar is a first generation product and it shows</a>. That’s not to say it doesn’t work, it does. What I mean to say is that it needs more work. It’s way too easy to accidentally activate something (the number of times I’ve inadvertently muted audio is beyond counting). I contend that haptic feedback is an absolute must have for the next generation Touch Bar, and the user should be able to choose, in <em>System Preferences</em>, whether it should respond to touch, or to a press (and I’d choose press, every time).</p>
<p>So what about the <kbd>esc</kbd> key? You know, the one that’s been on keyboards forever. There was much angst in the user community when it became obvious that Apple would replace the physical <kbd>esc</kbd> key with a soft key on the Touch Bar. But, guess what? There is no justification for the apparent panic. The <kbd>esc</kbd> is still there, in its usual place — <wbr />top left. Yes, it’s on the Touch Bar. No, that isn’t a problem. I’m a programmer and a self-described keyboard jockey. I use the <kbd>esc</kbd> key… a lot. I can honestly say that, the number of times its replacement with a Touch Bar soft key has caused me a problem, is exactly zero. It’s a non-issue. The <kbd>esc</kbd> key lives. It’s still omni-present — <wbr />at least when I need it — <wbr />and, additional bonus, its relative size is larger than before since its contact area is larger than the visible surface area.</p>
<h3 id="touch-id">Touch <span class="caps">ID</span></h3>
<p>One of the gems of the late 2016 MacBook is <a href="https://en.wikipedia.org/wiki/Touch_ID">Touch <span class="caps">ID</span></a>. Familiar to iPhone users the world over, Touch <span class="caps">ID</span> is a biometric authentication system, with fingerprints as its access key. As with the iPhones, it works flawlessly and is a wonderful, time (and frustration) saving system. When tied in with <a href="https://1password.com/">1Password</a>, as on my system, it’s perfect for secure authentication with the myriad websites we all interact with on a daily basis.</p>
<p>One of my concerns, before receiving the computer, was how configurable — <wbr />or otherwise — <wbr />Touch <span class="caps">ID</span> might be. I was absolutely certain that I didn’t want to login to my computer with my fingerprint (I prefer my trusty, <a href="https://www.xkcd.com/538/">high-entropy password</a> for that), but I knew that, once logged-in, I’d appreciate the convenience of Touch <span class="caps">ID.</span> Therefore I hoped that I could configure the system to suit my preferences, otherwise I’d probably not use Touch <span class="caps">ID</span> at all.</p>
<p>I needn’t have worried. Touch <span class="caps">ID</span> has a range of options. It provides for a traditional login along with <a href="https://en.wikipedia.org/wiki/Apple_Pay">Apple Pay</a>, <a href="https://en.wikipedia.org/wiki/ITunes">iTunes</a> and App Store purchases. And, as I mentioned above, third party apps (like 1Password) can use it too.</p>
<p>There are, however, some inconsistencies in its implementation. Some System Preference panes accept Touch <span class="caps">ID</span> authentication while others require a traditional password. This is mildly irritating, but I suspect a further software update or two will bring these remaining components in line.</p>
<p>All in all, Touch <span class="caps">ID</span> is a positive addition and brings much to the mac<small><span class="caps">OS</span></small> user experience. It speaks volumes that when I use my non-Touch <span class="caps">ID</span> Mac in the office, I really notice that it’s missing.</p>
<h3 id="screen">Screen</h3>
<p>In addition to the new features, Apple upgraded the display of the late 2016 MacBook. According to Apple, the screen is brighter (up to 500 nits), has 25% more colours than <a href="https://en.wikipedia.org/wiki/SRGB">s<small><span class="caps">RGB</span></small></a> (wide colour) and a 67% higher contrast ratio than that of the previous generation <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr>.</p>
<p>I can’t really see any difference between this and the late 2013 MacBook Pro I have upgraded from. But then, as I wrote earlier, my eyes aren’t what the once were due to <a href="https://en.wikipedia.org/wiki/Presbyopia">presbyopia</a>. I’ll say this, I have no complaints at all about the display.</p>
<p>There’s something else: Apple have increased the native resolution/scaling in comparison to my previous <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr>. It’s now practical to work with two half-width, adjacent windows on this laptop’s display. Something that never seemed workable on its <span class="no-wrap">predecessor.<sup id="fnref:2"><a href="#fn:2" class="footnote">2</a></sup></span> This fact alone makes for some serious productivity wins.</p>
<figure itemscope="" itemtype="http://schema.org/ImageObject" style="max-width: 100vw;" class="align-center captioned-image"><div data-canvas-image="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgABwAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A9Z1+HVZNL2aJLHb3nmr87IpG3ByOQevFZFrb+NHtIWe7tHYopLbEGTjr92iii3Ub1Vj/2Q==" style="background: rgba(0, 0, 0, 0.04) url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgABwAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A9Z1+HVZNL2aJLHb3nmr87IpG3ByOQevFZFrb+NHtIWe7tHYopLbEGTjr92iii3Ub1Vj/2Q==') no-repeat; background-size: cover; padding-bottom: calc((513/820)*100%);" class="rounded-discrete image-loader photo-depth"><img alt="working with two applications side-by-side, Typora and Safari" src="https://www.perpetual-beta.org/assets/images/480/feed270333d35f0525181f7774597b90.png" srcset="https://www.perpetual-beta.org/assets/images/80/feed270333d35f0525181f7774597b90.png 80w, https://www.perpetual-beta.org/assets/images/480/feed270333d35f0525181f7774597b90.png 480w, https://www.perpetual-beta.org/assets/images/768/feed270333d35f0525181f7774597b90.png 768w, https://www.perpetual-beta.org/assets/images/820/feed270333d35f0525181f7774597b90.png 820w, https://www.perpetual-beta.org/assets/images/1024/feed270333d35f0525181f7774597b90.png 1024w, https://www.perpetual-beta.org/assets/images/1280/feed270333d35f0525181f7774597b90.png 1280w, https://www.perpetual-beta.org/assets/images/1640/feed270333d35f0525181f7774597b90.png 1640w" sizes="100vw" class="rounded-discrete image-loading"></div>
<figcaption><strong itemprop="title">Left: Typora; right: Safari</strong></figcaption></figure>
<h3 id="thunderbolt-3--usb-smallcsmall">Thunderbolt 3 / <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Universal Serial Bus"><span class="caps">USB</span></abbr>-<small>C</small>
</h3>
<p>Critics have voiced their disgust at the replacement of all legacy ports with the new Thunderbolt 3 / <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Universal Serial Bus"><span class="caps">USB</span></abbr>-<small>C</small> ports on this generation of <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr>. Back in October, I wrote about <a href="https://www.perpetual-beta.org/weblog/apples-2016-macbook-pro.html#any-port-in-a-storm">my enthusiasm for the new port</a>. After these first months of use, I am happy to report that my zeal hasn’t waned. I can truthfully declare, I am more of an advocate for Thunderbolt 3 / <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Universal Serial Bus"><span class="caps">USB</span></abbr>-<small>C</small> now than ever before.</p>
<p>Let’s look at the benefits of this mighty port once again:</p>
<ul>
<li>Daisy-chain-able;</li>
<li>Reversible connector;</li>
<li>Universal (plug anything into any port);</li>
<li>Bi-directional power on any port;</li>
<li>Diminutive form factor;</li>
<li>Two streams of DisplayPort <span class="caps">1.2</span> video bandwidth per port;</li>
<li>Up to 100<small>W</small> of power;</li>
<li>Networking up to 10 <small>G</small>b/s</li>
<li>Thunderbolt 3 throughput up to 40 <small>G</small>b/s</li>
<li>Backwards compatibility with Thunderbolt 1 and 2 (20 <small>G</small>b/s), along with <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Universal Serial Bus"><span class="caps">USB</span></abbr> <span class="caps">2.0</span>, <span class="caps">3.0</span> (5 <small>G</small>b/s) and <span class="caps">3.1</span> (Gen1/Gen2) @ 10 <small>G</small>b/s</li>
</ul>
<p>Make no mistake, this is a game-changing, killer interface.</p>
<p><strong>So, what about <a href="https://twitter.com/hashtag/donglelife">#donglelife</a>?</strong> Well, for myself, it’s been a non-issue thus far. I bought half-a-dozen <a href="https://www.amazon.co.uk/dp/B015Z7XE0A/ref=cm_sw_r_tw_dp_x_B4IfybXHZA1MZ">Nonda <small><span class="caps">MI</span></small>22<small><span class="caps">SGRN</span></small></a> <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Universal Serial Bus"><span class="caps">USB</span></abbr> 3 → <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Universal Serial Bus"><span class="caps">USB</span></abbr>-<small>C</small> adapters, which I leave permanently attached to the cables of the devices I connect to my computer.</p>
<p>I have a single dongle attached, a <a href="https://www.amazon.co.uk/gp/product/B014FBQ738/ref=oh_aui_detailpage_o08_s00">Belkin <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Universal Serial Bus"><span class="caps">USB</span></abbr>-<small>C</small> to Gigabit Ethernet Adapter</a> (I prefer wired networking where possible). I also used an Ethernet dongle with my previous <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr>, so there’s no change here.</p>
<p>I never read <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Secure Digital High Capacity"><span class="caps">SDHC</span></abbr> cards via the integrated reader on my previous <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> as I used that slot to <a href="https://www.perpetual-beta.org/weblog/transcend-jetdrive-lite.html">extend the storage</a> of the machine. So I have always used either an external reader, or plugged my camera directly into the laptop. In this case, I did end up buying a new <a href="https://www.amazon.co.uk/StarTech-com-Memory-Multi-Card-Reader-Writer/dp/B01MF739QV/ref=sr_1_20">card reader</a>. I had to. My old reader plugged directly into the computer and despite the diminutive Nonda adapter, it ended up obstructing the adjacent <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Universal Serial Bus"><span class="caps">USB</span></abbr>-<small>C</small> port. For good measure, I also threw a Nonda adapter on to my camera’s <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Universal Serial Bus"><span class="caps">USB</span></abbr> cable. So I have all bases covered.</p>
<p>To charge my Apple <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Television"><span class="caps">TV</span></abbr> remote, I bought an <a href="http://www.apple.com/shop/product/MK0X2AM/A/usb-c-to-lightning-cable-1-m">Apple <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Universal Serial Bus"><span class="caps">USB</span></abbr>-<small>C</small> to Lightning cable</a>. To connect my iPhone to the <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> I use an <a href="https://www.amazon.co.uk/gp/product/B0177NSA9A/ref=ox_sc_mini_detail">Anker PowerLine+ Lightning Cable</a> with yet another Nonda adapter. My external <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Hard Disk Drive"><span class="caps">HDD</span></abbr>s: you guessed it, all are on their existing cables with Nonda adapters.</p>
<p>As for external displays. I haven’t as yet used one with this computer. So I’ll address that as and when the need arises.</p>
<p>A final thought on the ports: <a href="https://twitter.com/__DarkBlue/status/833785138316189696">Apple should have illuminated them</a> (like they did with the <a href="https://en.wikipedia.org/wiki/Mac_Pro">Mac Pro</a>). <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Universal Serial Bus"><span class="caps">USB</span></abbr>-<small>C</small> boasts one of the smallest <small>I/O</small> ports and, in low light, with a space grey computer, they are just about invisible. Also, there should be a larger gap between them. The Nonda has a small footprint, even so, I can’t plug two in side-by-side… and that’s a shame.</p>
<h3 id="battery">Battery</h3>
<p>The battery in the new <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> has had a roller-coaster ride in both the mainstream press and the blogosphere. Some have commended it, while others have criticised it. Consumer Reports published their <a href="http://www.consumerreports.org/laptops/macbook-pros-fail-to-earn-consumer-reports-recommendation/">much-discussed review</a> which, for the first time, failed to give a new <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> a “Recommended” status, due to their experiences with <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> battery life:</p>
<blockquote>
<p>“The MacBook Pro battery life results were highly inconsistent from one trial to the next.”</p>
<p>“For instance, in a series of three consecutive tests, the 13-inch model with the Touch Bar ran for 16 hours in the first trial, <span class="caps">12.75</span> hours in the second, and just <span class="caps">3.75</span> hours in the third. The 13-inch model without the Touch Bar worked for <span class="caps">19.5</span> hours in one trial but only <span class="caps">4.5</span> hours in the next. And the numbers for the 15-inch laptop ranged from <span class="caps">18.5</span> down to 8 hours.”</p>
<p>“Those were just a few of the results; we tested battery life on these laptops repeatedly.”</p>
</blockquote>
<p>Apple subsequently released a software update which apparently fixed a bug in the Safari browser that was responsible for the battery issues. <a href="http://www.consumerreports.org/apple/consumer-reports-now-recommends-macbook-pros/">Consumer Reports then changed their position</a> on the new <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> to “Recommended.”</p>
<p>The battery in the new <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> is ~25% smaller — <wbr />at 76 watt-hours — <wbr />than its predecessor (<span class="caps">99.5</span> watt-hours). The <a href="https://en.wikipedia.org/wiki/Laws_of_thermodynamics">Laws of Thermodynamics</a> tell us that this will affect the run-time on battery power, unless we can reduce our energy demand. The <a href="https://macdaddy.io/new-mbp-power-efficiency-impressive/">new <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> draws less power than earlier generations</a>, as hardware components have become more energy-efficient. When we combine this with improvements in software power management, the new <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> can achieve similar or better run-times than its predecessors — <wbr /><strong>under similar operating conditions and with comparable workloads</strong>. Put the battery system under stress — <wbr />with a high power draw — <wbr />and <a href="http://www.macworld.com/article/3157392/laptop-computers/tested-the-truth-behind-the-macbook-pros-terrible-battery-life.html">the consequences of a reduction in physical battery size will become manifest</a>.</p>
<p>My own experience with battery life on the new <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> reflects this. I’ve run for more than seven <span class="no-wrap">hours<sup id="fnref:3"><a href="#fn:3" class="footnote">3</a></sup></span> on a single charge with low-energy workloads: web-browsing (with Safari), coding (with <a href="https://code.visualstudio.com/">Visual Studio Code</a>), writing (with <a href="https://typora.io/">Typora</a>). But then I also have some high-energy tasks that I regularly perform: image processing, <a href="https://github.com/humphd/have-fun-with-machine-learning">machine learning</a>, <a href="https://www.perpetual-beta.org/weblog/parallel-processing-from-the-command-line.html">parallelised number crunching</a>. When I’m running with all eight processor threads maxed-out, I tend to ensure that I have mains connectivity, because I simply wouldn’t expect the battery to provide power for long under such a heavy load.</p>
<figure itemscope="" itemtype="http://schema.org/ImageObject" style="max-width: 400px;" class="align-center captioned-image"><div data-canvas-image="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgADAAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8AxpLq881v393wx/jWrsdzd+Un7+6+6P41rIkKea/7mL7x/gq9EU8pP3Uf3R/DXiJu54Kb7n//2Q==" style="background: rgba(0, 0, 0, 0.04) url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgADAAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8AxpLq881v393wx/jWrsdzd+Un7+6+6P41rIkKea/7mL7x/gq9EU8pP3Uf3R/DXiJu54Kb7n//2Q==') no-repeat; background-size: cover; padding-bottom: calc((921/820)*100%);" class="rounded-discrete image-loader photo-depth"><img alt="CPU usage monitor, showing all 8 processor threads maxed-out" src="https://www.perpetual-beta.org/assets/images/480/8fbe57942b288cf7be37a526a187f59c.png" srcset="https://www.perpetual-beta.org/assets/images/80/8fbe57942b288cf7be37a526a187f59c.png 80w, https://www.perpetual-beta.org/assets/images/480/8fbe57942b288cf7be37a526a187f59c.png 480w, https://www.perpetual-beta.org/assets/images/768/8fbe57942b288cf7be37a526a187f59c.png 768w, https://www.perpetual-beta.org/assets/images/820/8fbe57942b288cf7be37a526a187f59c.png 820w, https://www.perpetual-beta.org/assets/images/1024/8fbe57942b288cf7be37a526a187f59c.png 916w, https://www.perpetual-beta.org/assets/images/1280/8fbe57942b288cf7be37a526a187f59c.png 916w, https://www.perpetual-beta.org/assets/images/1640/8fbe57942b288cf7be37a526a187f59c.png 916w" sizes="100vw" class="rounded-discrete image-loading"></div>
<figcaption><strong itemprop="title">All eight processor threads are running flat-out here, during parallelised processing of a 1.5m row <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Comma Separated Values"><span class="caps">CSV</span></abbr> data-set</strong></figcaption></figure>
<h3 id="speakers">Speakers</h3>
<p>In describing the speakers of the new <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr>, Apple tells us that they offer 58% more volume; up to <span class="caps">2.5</span>× louder bass; 3× more peak power and 2× dynamic range, when compared to the previous model. These are mighty claims. All laptop users know that inboard speakers are always a compromise, limited as they are by the physical dimensions of the laptop chassis and the lack of space within.</p>
<p>However, with the new <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr>, Apple have raised the bar as to the sound quality you should expect of a laptop. You’re not going to be throwing parties with the <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> as the music source, but you can certainly enjoy music direct from the machine, without using external speakers or headphones.</p>
<h3 id="stealth-mac">Stealth Mac</h3>
<p>The late 2016 MacBook Pro is a beautiful machine. The 15″ model that I have, seems impossibly thin and light. I know, from Apple’s published metrics, that the computer isn’t <em>that much</em> thinner or lighter than the machine it replaces. But, subjectively, it feels a world away.</p>
<p>In space grey, the computer is discreet. It no longer screams “MacBook!” It no longer draws attention to itself. Unlike other social media commentators, I was happy to see Apple do away with both the <a href="https://www.thrillist.com/news/nation/apple-quietly-killed-the-macbook-pros-glowing-apple-logo">illuminated Apple logo</a> on the lid, and the attention-grabbing <a href="https://en.wikipedia.org/wiki/Macintosh_startup">startup chime</a>.</p>
<p>It is now possible to open and boot the <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> in, say a library, without anybody noticing. It’s almost like having a stealth Mac and I, for one, am happy that Apple made these small changes.</p>
<h3 id="conclusion">Conclusion</h3>
<p>The late 2016 MacBook Pro is a decent laptop. It’s not the fastest machine in its class, but is a solid performer. It’s well built (as far as I can tell) and looks gorgeous. Touch Bar, Touch <span class="caps">ID</span> and <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Universal Serial Bus"><span class="caps">USB</span></abbr>-<small>C</small> / Thunderbolt 3 are respectable new features. The keyboard, trackpad and display are all best-in-class and worthy upgrades from my previous model.</p>
<p>On the flip-side, the computer is massively overpriced. The <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Built to Order"><span class="caps">BTO</span></abbr> model I specified came in at an eye-watering £3,<span class="caps">329.00.</span> Add in an AppleCare Protection Plan — <wbr />and you better, since this computer has no user-serviceable or upgradeable components — <wbr />at £<span class="caps">329.00</span> and, let’s say £<span class="caps">50.00</span> for adapters/cables/dongles and your total expenditure sits at around £3,700.</p>
<p>That’s a fair chunk of money. I could rationalise such a large expenditure only because I make my living via my computer and the machine occupies a large slice of my spare time too. But I feel a little cheated. I feel like Apple sacrificed too much for the sake of making a thin computer. I would have gladly taken a thicker <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> if it had offered a <span class="caps">99.5</span> watt-hour battery like its predecessor. Additionally, I would have appreciated an option to upgrade the <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Random Access Memory"><span class="caps">RAM</span></abbr> to 32 or even 64<abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Gigabyte (1,000,000,000 bytes)"><span class="caps">GB</span></abbr> (yes, even at Apple’s exorbitant prices).</p>
<p>In general, I expect to get three years of service out of each computer I buy. With the new <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="MacBook Pro"><span class="caps">MBP</span></abbr> I know that in twelve months — <wbr />maybe even fewer — <wbr />the specifications of this machine are not going to hold up as well as they have with previous iterations.</p>
<p>I’ll close with this: I’m a loyal Apple customer and have been for more than two decades. This is the first major purchase I’ve made, from Apple, that has left me feeling a little buyer’s remorse. If this computer had cost me £2,700 rather than £3,700 then I’d be raving about what a great machine it is. As it is, it feels like a little <em>“fuck you, suckers”</em> from Apple and I can’t help but feel a little disappointed.</p>
<p>Feedback? <a href="https://news.ycombinator.com/item?id=13691466">Discuss on Hacker News</a>.</p>
<div class="footnotes">
<ol>
<li id="fn:1">
<p>I think this is new, I’m almost sure the keys on my previous MacBook were flat. <a href="#fnref:1" class="reversefootnote">↩︎</a></p>
</li>
<li id="fn:2">
<p>Even on my previous <small><span class="caps">MBP</span></small>, I was always able to work with two adjacent panes in my code editor and iTerm, but they were about the only two apps that I was able to realistically work with in this manner. <a href="#fnref:2" class="reversefootnote">↩︎</a></p>
</li>
<li id="fn:3">
<p>Keep in mind that, with the maxed-out processor and <small><span class="caps">GPU</span></small>, my <small><span class="caps">MBP</span></small> will draw more power than a stock machine. <a href="#fnref:3" class="reversefootnote">↩︎</a></p>
</li>
</ol>
</div>
<hr /><p><small>If you liked this post you should visit the <a href="https://www.perpetual-beta.org/archives.html">Perpetual βeta</a> website, where you will find further essays by the author.</small></p><p><small>Formatting messed up in your feed reader? You should <a href="https://www.perpetual-beta.org/weblog/thoughts-on-the-late-2016-macbook-pro.html">view this article in your web-browser</a>.</small></p>
tag:www.perpetual-beta.org,2017-01-15:/weblog/fixing-an-auto-hide-dock-bug.htmlmacOS: Fixing an Auto-hide Dock Bug2017-01-15T20:17:58Z2017-01-15T20:17:58Z<figure class="align-center" style="max-width: 280px;"><div style="background-color: transparent; padding-bottom: calc((1100/954)*100%);" class="load image-loader"><img src="https://www.perpetual-beta.org/assets/svg/computer-bug.svg" alt="All your bug are belong to me" class="rounded image-loading"></div></figure>
<p>When Apple announced the late 2016 MacBook Pro I got my order in immediately. Around four weeks later I took delivery of a sexy space-gray super-computer and got stuck into migrating from my previous machine.</p>
<p>Mine is a built-to-order MacBook, upgraded with the fastest processor, 1<abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Terabyte (1,000,000,000,000 bytes)"><span class="caps">TB</span></abbr> <abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Solid State Drive"><span class="caps">SSD</span></abbr> and the 4<abbr class="data-tip-top data-tip-no-animation data-tip-rounded data-tip-fast data-tip-shadow" data-tip="Megabyte (1,000,000 bytes)"><span class="caps">MB</span></abbr> <span class="caps">AMD</span> Radeon Pro 460.</p>
<p>Like others, I suffered the odd graphical glitch with the 460. For the most part they were minor annoyances and I figured they were driver related and that Apple would fix them with a software update. Sure enough mac<small><span class="caps">OS</span></small> Sierra <span class="caps">10.12.2</span> addressed all the issues I’d experienced, bar one…</p>
<p>When I used the <a href="https://en.wikipedia.org/wiki/Dock_(macOS)">Dock</a> — <wbr />set to auto-hide — <wbr />to switch to a full-screen app in another <a href="https://en.wikipedia.org/wiki/Mission_Control_(macOS)">Space</a>, the app switch would take effect but the Dock would freeze in the new Space (i.e. auto-hiding wouldn’t close it).</p>
<p>If I were to say this wound me up, you can consider that an understatement. Anyway, I spent some time exploring the timings for the auto-hide and I have finally found a combination that eliminates the issue:</p>
<p><code>defaults write com.apple.dock autohide-delay -int 0;</code><br>
<code>defaults write com.apple.dock autohide-time-modifier -float 1.0;</code><br>
<code>killall Dock</code></p>
<p>Now, my Dock works perfectly.</p>
<hr class="grad">
<p><small>Image Credit: MesserWoland based on the graphics by FoeNyx. Own work, copyleft: Multi-license with <span class="caps">GFDL</span> and Creative Commons <span class="caps">CC</span>-<span class="caps">BY</span>-<span class="caps">SA</span>-<span class="caps">2.5</span> and older versions (<span class="caps">2.0</span> and <span class="caps">1.0</span>)</small></p>
<hr /><p><small>If you liked this post you should visit the <a href="https://www.perpetual-beta.org/archives.html">Perpetual βeta</a> website, where you will find further essays by the author.</small></p><p><small>Formatting messed up in your feed reader? You should <a href="https://www.perpetual-beta.org/weblog/fixing-an-auto-hide-dock-bug.html">view this article in your web-browser</a>.</small></p>
tag:www.perpetual-beta.org,2017-01-15:/weblog/closing-the-gap-with-moom.htmlmacOS: Closing the Gap with Moom2017-01-15T18:24:23Z2017-01-15T18:24:23Z<p>I use <a href="https://manytricks.com/">Many Tricks</a>’ <em><a href="https://manytricks.com/moom/">Moom</a></em> application to handle window management on mac<small><span class="caps">OS</span></small>. <em>Moom</em> provides for complete control over a window’s size and position, based upon a user-defined grid. It’s also controllable entirely from the keyboard, which suits my needs perfectly.</p>
<p>One of <em>Moom</em>’s tricks is “move and zoom to full screen” which works the same way as mac<small><span class="caps">OS</span></small>’s maximise control (<kbd>option</kbd>+click a window’s full-screen widget) except that it can be keyboard driven.</p>
<p>However, <em>Moom</em>’s “move and zoom to full screen” shares a niggling “feature” with mac<small><span class="caps">OS</span></small>’s maximise: it leaves a small gap between the window and screen edge — <wbr />on the <a href="https://en.wikipedia.org/wiki/Dock_(macOS)">Dock</a> side — <wbr />when one uses an automatically hidden Dock, as I do. It looks like this:</p>
<figure itemscope="" itemtype="http://schema.org/ImageObject" style="max-width: 632px;" class="align-center"><div data-canvas-image="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgABgAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A6/wj4R8Oar4T0W6vtGtZrie2QtIy8+nPrWu3gXwkrFf+EesuDj7lFFCA/9k=" style="background: rgba(0, 0, 0, 0.04) url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2OTApLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgABgAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A6/wj4R8Oar4T0W6vtGtZrie2QtIy8+nPrWu3gXwkrFf+EesuDj7lFFCA/9k=') no-repeat; background-size: cover; padding-bottom: calc((420/820)*100%);" class="rounded image-loader"><img alt="screen capture illustrating the gap on the macOS Dock edge when maximising a window" src="https://www.perpetual-beta.org/assets/images/480/e63144c09077e5f7cda682ad8049d6a9.png" srcset="https://www.perpetual-beta.org/assets/images/80/e63144c09077e5f7cda682ad8049d6a9.png 80w, https://www.perpetual-beta.org/assets/images/480/e63144c09077e5f7cda682ad8049d6a9.png 480w, https://www.perpetual-beta.org/assets/images/768/e63144c09077e5f7cda682ad8049d6a9.png 768w, https://www.perpetual-beta.org/assets/images/820/e63144c09077e5f7cda682ad8049d6a9.png 820w, https://www.perpetual-beta.org/assets/images/1024/e63144c09077e5f7cda682ad8049d6a9.png 1024w, https://www.perpetual-beta.org/assets/images/1280/e63144c09077e5f7cda682ad8049d6a9.png 1264w, https://www.perpetual-beta.org/assets/images/1640/e63144c09077e5f7cda682ad8049d6a9.png 1264w" sizes="100vw" class="rounded image-loading"></div></figure>
<p>So, not exactly a maximised window then. This has always irritated me, until today. By chance I learned that <em>Moom</em> has a hidden switch, controlled via the command-line, that instructs the software whether or not to ignore this <em>Dock clearance zone</em>:</p>
<p><code>defaults write com.manytricks.Moom "Ignore Dock" -bool YES</code></p>
<p>Boom! That irritating gap is no more. Now “move and zoom to full screen” does exactly what I expect and positioning smaller windows to the Dock edge also ignores the gap.</p>
<p>It’s a small thing really, but it makes all the difference in the world.</p>
<hr /><p><small>If you liked this post you should visit the <a href="https://www.perpetual-beta.org/archives.html">Perpetual βeta</a> website, where you will find further essays by the author.</small></p><p><small>Formatting messed up in your feed reader? You should <a href="https://www.perpetual-beta.org/weblog/closing-the-gap-with-moom.html">view this article in your web-browser</a>.</small></p>
tag:www.perpetual-beta.org,2017-01-15:/weblog/adding-survivability-to-macos-applications.htmlAdding Survivability to macOS Applications2017-01-15T16:19:09Z2017-01-15T16:19:09Z<figure class="align-center" style="max-width: 100vw;"><div style="background-color: transparent; padding-bottom: calc((250/541)*100%);" class="load image-loader"><img src="https://www.perpetual-beta.org/assets/svg/rubber-ring.svg" alt="Stylised rendering of a rubber ring in the sea" class="rounded image-loading"></div></figure>
<p>There are a handful of utility programs that I have come to depend on in my day-to-day computing with mac<small><span class="caps">OS</span></small>. These include:</p>
<ul>
<li>
<a href="https://itunes.apple.com/us/app/flycut-clipboard-manager/id442160987">Flycut</a>: a simple yet effective <a href="https://en.wikipedia.org/wiki/Clipboard_(computing)">clipboard</a> manager (a fork of <a href="http://jumpcut.sourceforge.net/">JumpCut</a>, for those of you with memories as long as mine).<sup id="fnref:1"><a href="#fn:1" class="footnote">1</a></sup>
</li>
<li>
<a href="https://contexts.co/">Contexts</a>: a drop-in replacement for the <kbd>command</kbd>+<kbd>tab</kbd> switcher. I use this, as opposed to mac<small><span class="caps">OS</span></small>’ built-in switcher, as it lists all the windows for each app (even across <a href="https://en.wikipedia.org/wiki/Mission_Control_(macOS)">Spaces</a>). This is helpful when you run with multiple app windows, as I do.</li>
<li>
<a href="https://manytricks.com/moom/">Moom</a>: a best-of-breed window manager. Because, again, I tend to have a lot of windows open.</li>
<li>
<a href="https://qblocker.com/">QBlocker</a>: prevents you from accidentally quitting applications by requiring you hold <kbd>command</kbd>+<kbd>Q</kbd> to quit (with a user-configurable delay).</li>
<li>
<a href="http://snappy-app.com/">Snappy</a>: a screen-capture application. mac<small><span class="caps">OS</span></small> has great screen capture tools out of the box but, <em>Snappy</em> has a handy feature in that a snapshot, taken with the app, will float atop all open windows (even across Spaces), for as long as needed. This reduces the amount of <kbd>command</kbd>+<kbd>tab</kbd> switching I need to perform and is a fantastic time-saver.</li>
</ul>
<p>I want these apps to start when I login and I want them to remain active through the duration of my computing session. Guaranteed availability is important because these apps all share one common ingredient: they each make all of their principle functionality accessible to the keyboard interface. I have committed their keyboard shortcuts to muscle memory. So, if one of these apps crashes and I’m unaware of it, I have this jarring context shift when I issue a keyboard shortcut that isn’t then handled, or the system handles it differently to my expectations. One of the most consequential is that which occurs when <em>QBlocker</em> crashes. In which case my next hold of <kbd>command</kbd>+<kbd>Q</kbd> quits multiple applications rather than one (due to key repeat).</p>
<p>Sadly, applications do crash. So, in the case of essential apps, wouldn’t it be nice to have the computer restart a crashed program without any user interaction? We can have the machine do just that, with <em><a href="https://en.wikipedia.org/wiki/Launchd">launchd</a></em> — <wbr />mac<small><span class="caps">OS</span></small>’ unified service-management framework.</p>
<p>We start by, counter-intuitively, removing the apps from <em>System Preferences → Users <span class="amp">&</span> Groups → Login Items</em> (or by unticking their <em>launch on login</em> preference if they have one).</p>
<p>Next, we determine the path to each app’s executable by right-clicking the app’s icon and selecting <em>Show Package Contents</em> from the context menu. Click into <em>Contents → Mac<span class="caps">OS</span></em> to locate the name of the executable. For example: <em>Snappy</em>’s executable, on my machine, is at <code>/Applications/SnappyApp.app/Contents/MacOS/SnappyApp</code></p>
<p>Open a terminal window and enter: <code>sudo nano /LaunchAgents/com.keeprunning.snappy.plist</code> then, paste the following into the <em>nano</em> editor:</p>
<pre><code class="language-xml"><span class="cp"><?xml version="1.0" encoding="UTF-8"?></span>
<span class="cp"><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"></span>
<span class="nt"><plist</span> <span class="na">version=</span><span class="s">"1.0"</span><span class="nt">></span>
<span class="nt"><dict></span>
<span class="nt"><key></span>KeepAlive<span class="nt"></key></span>
<span class="nt"><dict></span>
<span class="nt"><key></span>SuccessfulExit<span class="nt"></key></span>
<span class="nt"><false/></span>
<span class="nt"></dict></span>
<span class="nt"><key></span>Label<span class="nt"></key></span>
<span class="nt"><string></span>com.keeprunning.snappy<span class="nt"></string></span>
<span class="nt"><key></span>ProgramArguments<span class="nt"></key></span>
<span class="nt"><array></span>
<span class="nt"><string></span>/Applications/SnappyApp.app/Contents/MacOS/SnappyApp<span class="nt"></string></span>
<span class="nt"></array></span>
<span class="nt"><key></span>RunAtLoad<span class="nt"></key></span>
<span class="nt"><true/></span>
<span class="nt"></dict></span>
<span class="nt"></plist></span></code></pre>
<p>Followed by <kbd>control</kbd>+<kbd>O</kbd>, <kbd>return</kbd> to save and <kbd>control</kbd>+<kbd>X</kbd> to exit.</p>
<p>Finally, we register and load our new <em>plist</em>:</p>
<p><code>launchctl bootstrap gui/`stat -f %` /Library/LaunchAgents/com.keeprunning.snappy.plist</code></p>
<p>Wash, rinse, repeat for each application that we require to be “always on” and we’re good to go.</p>
<p>The key commands of our <em>plist</em> file are:</p>
<ul>
<li>
<em>KeepAlive → SuccessfulExit → false</em>: this tells <em>launchd</em> to keep our application running unless it has a successful exit (that is, we intentionally quit it)</li>
<li>
<em>RunAtLoad → true</em>: instructs <em>launchd</em> to ensure our application runs as soon as possible during the boot/login sequence.</li>
</ul>
<p>Fault tolerance for the win. 😎</p>
<p>Via: <a href="https://github.com/tjluoma/launchd-keepalive"><span class="caps">TJ</span> Luoma</a>.</p>
<div class="footnotes">
<ol>
<li id="fn:1">
<p>Why, in 2017, a clipboard manager is not built-in to mac<small>OS</small> is beyond me. <a href="#fnref:1" class="reversefootnote">↩︎</a></p>
</li>
</ol>
</div>
<hr /><p><small>If you liked this post you should visit the <a href="https://www.perpetual-beta.org/archives.html">Perpetual βeta</a> website, where you will find further essays by the author.</small></p><p><small>Formatting messed up in your feed reader? You should <a href="https://www.perpetual-beta.org/weblog/adding-survivability-to-macos-applications.html">view this article in your web-browser</a>.</small></p>