1<!DOCTYPE html> 2<html lang="en"> 3<head>
4<script>var _rollbarConfig = {"accessToken":"295d6d2e8f934257b0f4ddb304115b52","autoInstrument":true,"captureUncaught":true,"captureUnhandledRejections":true,"hostSafeList":[],"hostBlockList":[],"ignoredMessages":[],"payload":{"environment":"production"}};</script>
vendor: 1 bytes, line 4
4
5<script>!function(r){var e={};function o(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return r[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.m=r,o.c=e,o.d=function(r,e,n){o.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},o.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},o.t=function(r,e){if(1&e&&(r=o(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var t in r)o.d(n,t,function(e){return r[e]}.bind(null,t));return n},o.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return o.d(e,"a",e),e},o.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},o.p="",o(o.s=0)}([function(r,e,o){"use strict";var n=o(1),t=o(5);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdn.rollbar.com/rollbarjs/refs/tags/v2.26.1/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,e,o){"use strict";var n=o(2),t=o(3);function a(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}var l=0;function i(r,e){this.options=r,this._rollbarOldOnError=null;var o=l++;this.shimId=function(){return o},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[o]={handler:e,messages:[]})}var s=o(4),d=function(r,e){return new i(r,e)},c=function(r){return new s(d,r)};function u(r){return a((function(){var e=this,o=Array.prototype.slice.call(arguments,0),n={shim:e,method:r,args:o,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)}))}i.prototype.loadFull=function(r,e,o,n,t){var l=!1,i=e.createElement("script"),s=e.getElementsByTagName("script")[0],d=s.parentNode;i.crossOrigin="",i.src=n.rollbarJsUrl,o||(i.async=!0),i.onload=i.onreadystatechange=a((function(){if(!(l||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)){i.onload=i.onreadystatechange=null;try{d.removeChild(i)}catch(r){}l=!0,function(){var e;if(void 0===r._rollbarDidLoad){e=new Error("rollbar.js did not load");for(var o,n,a,l,i=0;o=r._rollbarShims[i++];)for(o=o.messages||[];n=o.shift();)for(a=n.args||[],i=0;i<a.length;++i)if("function"==typeof(l=a[i])){l(e);break}}"function"==typeof t&&t(e)}()}})),d.insertBefore(i,s)},i.prototype.wrap=function(r,e,o){try{var n;if(n="function"==typeof e?e:function(){return e||{}},"function"!=typeof r)return r;if(r._isWrap)return r;if(!r._rollbar_wrapped&&(r._rollbar_wrapped=function(){o&&"function"==typeof o&&o.apply(this,arguments);try{return r.apply(this,arguments)}catch(o){var e=o;throw e&&("string"==typeof e&&(e=new String(e)),e._rollbarContext=n()||{},e._rollbarContext._wrappedSource=r.toString(),window._rollbarWrappedError=e),e}},r._rollbar_wrapped._isWrap=!0,r.hasOwnProperty))for(var t in r)r.hasOwnProperty(t)&&(r._rollbar_wrapped[t]=r[t]);return r._rollbar_wrapped}catch(e){return r}};for(var p="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,captureEvent,captureDomContentLoaded,captureLoad".split(","),f=0;f<p.length;++f)i.prototype[p[f]]=u(p[f]);r.exports={setupShim:function(r,e){if(r){var o=e.globalAlias||"Rollbar";if("object"==typeof r[o])return r[o];r._rollbarShims={},r._rollbarWrappedError=null;var l=new c(e);return a((function(){e.captureUncaught&&(l._rollbarOldOnError=r.onerror,n.captureUncaughtExceptions(r,l,!0),e.wrapGlobalEventHandlers&&t(r,l,!0)),e.captureUnhandledRejections&&n.captureUnhandledRejections(r,l,!0);var a=e.autoInstrument;return!1!==e.enabled&&(void 0===a||!0===a||function(r){return!("object"!=typeof r||void 0!==r.page&&!r.page)}(a))&&r.addEventListener&&(r.addEventListener("load",l.captureLoad.bind(l)),r.addEventListener("DOMContentLoaded",l.captureDomContentLoaded.bind(l))),r[o]=l,l}))()}},Rollbar:c}},function(r,e,o){"use strict";function n(r,e,o,n){r._rollbarWrappedError&&(n[4]||(n[4]=r._rollbarWrappedError),n[5]||(n[5]=r._rollbarWrappedError._rollbarContext),r._rollbarWrappedError=null);var t=e.handleUncaughtException.apply(e,n);o&&o.apply(r,n),"anonymous"===t&&(e.anonymousErrorsPending+=1)}r.exports={captureUncaughtExceptions:function(r,e,o){if(r){var t;if("function"==typeof e._rollbarOldOnError)t=e._rollbarOldOnError;else if(r.onerror){for(t=r.onerror;t._rollbarOldOnError;)t=t._rollbarOldOnError;e._rollbarOldOnError=t}e.handleAnonymousErrors();var a=function(){var o=Array.prototype.slice.call(arguments,0);n(r,e,t,o)};o&&(a._rollbarOldOnError=t),r.onerror=a}},captureUnhandledRejections:function(r,e,o){if(r){"function"==typeof r._rollbarURH&&r._rollbarURH.belongsToShim&&r.removeEventListener("unhandledrejection",r._rollbarURH);var n=function(r){var o,n,t;try{o=r.reason}catch(r){o=void 0}try{n=r.promise}catch(r){n="[unhandledrejection] error getting `promise` from event"}try{t=r.detail,!o&&t&&(o=t.reason,n=t.promise)}catch(r){}o||(o="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(o,n)};n.belongsToShim=o,r._rollbarURH=n,r.addEventListener("unhandledrejection",n)}}}},function(r,e,o){"use strict";function n(r,e,o){if(e.hasOwnProperty&&e.hasOwnProperty("addEventListener")){for(var n=e.addEventListener;n._rollbarOldAdd&&n.belongsToShim;)n=n._rollbarOldAdd;var t=function(e,o,t){n.call(this,e,r.wrap(o),t)};t._rollbarOldAdd=n,t.belongsToShim=o,e.addEventListener=t;for(var a=e.removeEventListener;a._rollbarOldRemove&&a.belongsToShim;)a=a._rollbarOldRemove;var l=function(r,e,o){a.call(this,r,e&&e._rollbar_wrapped||e,o)};l._rollbarOldRemove=a,l.belongsToShim=o,e.removeEventListener=l}}r.exports=function(r,e,o){if(r){var t,a,l="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDB
5Request,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(t=0;t<l.length;++t)r[a=l[t]]&&r[a].prototype&&n(e,r[a].prototype,o)}}},function(r,e,o){"use strict";function n(r,e){this.impl=r(e,this),this.options=e,function(r){for(var e=function(r){return function(){var e=Array.prototype.slice.call(arguments,0);if(this.impl[r])return this.impl[r].apply(this.impl,e)}},o="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,_createItem,wrap,loadFull,shimId,captureEvent,captureDomContentLoaded,captureLoad".split(","),n=0;n<o.length;n++)r[o[n]]=e(o[n])}(n.prototype)}n.prototype._swapAndProcessMessages=function(r,e){var o,n,t;for(this.impl=r(this.options);o=e.shift();)n=o.method,t=o.args,this[n]&&"function"==typeof this[n]&&("captureDomContentLoaded"===n||"captureLoad"===n?this[n].apply(this,[t[0],o.ts]):this[n].apply(this,t));return this},r.exports=n},function(r,e,o){"use strict";r.exports=function(r){return function(e){if(!e&&!window._rollbarInitialized){for(var o,n,t=(r=r||{}).globalAlias||"Rollbar",a=window.rollbar,l=function(r){return new a(r)},i=0;o=window._rollbarShims[i++];)n||(n=o.handler),o.handler._swapAndProcessMessages(l,o.messages);window[t]=n,window._rollbarInitialized=!0}}}}]);</script>
vendor: 1 bytes, line 5
5
6<script type="importmap" data-turbo-track="reload">{ 7 "imports": { 8 "application": "https://d32hgpjj5y625p.cloudfront.net/assets/application-f207b082d340e2d7ef1faf6a3963b9409fa3147fb7e312868adaa67e76083f68.js", 9 "turbo_stream_actions": "https://d32hgpjj5y625p.cloudfront.net/assets/turbo_stream_actions-ff801f8567a3558f4a5e50a81da697f29e835e2fa46cc6bf769179d5831663dc.js", 10 "@hotwired/turbo-rails": "https://d32hgpjj5y625p.cloudfront.net/assets/turbo.min-ddd8b828c747ffd95dbdfaa87b2414d120a316eed8407f19f78e777d074e5e96.js", 11 "trix": "https://cdn.jsdelivr.net/npm/[email protected]/dist/trix.umd.min.js", 12 "js-cookie": "https://cdn.jsdelivr.net/npm/[email protected]/dist/js.cookie.min.js", 13 "sortablejs": "https://cdn.jsdelivr.net/npm/sortablejs@latest/Sortable.min.js", 14 "jquery-sortablejs": "https://cdn.jsdelivr.net/npm/jquery-sortablejs@latest/jquery-sortable.js", 15 "@hotwired/stimulus": "https://d32hgpjj5y625p.cloudfront.net/assets/stimulus.min-976b4e166c7f712397cad15409e0b976dfd9f2373f5e04d9f4520f0d5a7597f5.js", 16 "@hotwired/stimulus-loading": "https://d32hgpjj5y625p.cloudfront.net/assets/stimulus-loading-39227295c8a6d71e10ca2a94dede18522ced047f6ccbf8788e926f8be14aff1b.js", 17 "controllers/add_subscriber_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/add_subscriber_controller-fd9fe8936dd464dc1cbae3d31c3bc986e5e2114ee003fab4e5418f3efdaa46be.js", 18 "controllers/application": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/application-44e5edd38372876617b8ba873a82d48737d4c089e5180f706bdea0bb7b6370be.js", 19 "controllers/arrow_sortable_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/arrow_sortable_controller-d4e97af69712b31f7f40abf5e96bde45ecbc3f2bf3f69ae9850ffe07abe45f75.js", 20 "controllers/design_nav_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/design_nav_controller-2f712f7500c82845450b65dec862659df22dea1d2d39a17b9469d7070bb1d233.js", 21 "controllers/design_page_section_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/design_page_section_controller-f1a457031a27726cd23bb568294b137349e91d691cdbe35758af8b0e4cce37f4.js", 22 "controllers": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/index-d92597c94be3b5a5adba9c0f17fb1601585e59e54ed1e242cd99ce6f935198e5.js", 23 "controllers/manage_subscribers_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/manage_subscribers_controller-93a288f637c86f52c4661a1427e3ffb7c2bf46f425ce2a36ff995c948bcf7c89.js", 24 "controllers/modal_form_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/modal_form_controller-ed45881813baad0b886a257c8389b563a3f232cbc408f66cf4da53daa38bc4c1.js", 25 "controllers/newsletter_builder_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_controller-f2f1e3b58c8d4436bcdd8eea1d3b71a276a963c5e87549fffa49bab275bc9580.js", 26 "controllers/newsletter_builder_image_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_image_controller-13937df8f37d686d07b0834fdc8e977b71cc4e700adfc069d1c499f0cbb6b6b6.js", 27 "controllers/newsletter_builder_image_form_fields_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_image_form_fields_controller-5fb397c6153ab53d8aec1e3027c32a699349fbdbf1ebee1143215f8bd6eee05a.js", 28 "controllers/newsletter_builder_modal_form_fields_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_modal_form_fields_controller-9e5fb79d742394fa9eaeeddb437123dd78ed2f87d4cea5d220a404e294795000.js", 29 "controllers/newsletter_builder_replaceable_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_replaceable_controller-21efea64bf8648e6883566d7b7be4c37654a24e08b2367dfeed4e44956097ee8.js", 30 "controllers/newsletter_builder_tags_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_tags_controller-0eb8d1f271977faa68a92a53741979bf58ffc86c075f84f2d25deafbd3a60e47.js", 31 "controllers/newsletter_message_schedule_modal_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_message_schedule_modal_controller-c70893dd83a505fe506ad4430a1f8439966c9f4d9c8392d85895e73869ca3122.js", 32 "controllers/search_modal_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/search_modal_controller-35710a5ac2b54272c5c23a69e0adb29820848de5844d613f73d58a2ea27a61f3.js", 33 "controllers/section_card_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/section_card_controller-6e39fd28ad51d887ed0c7a10d2c51b3ff3a1bd36621fdcf810dbc908a2f82624.js" 34 } 35}</script>
35 36<link rel="modulepreload" href="https://d32hgpjj5y625p.cloudfront.net/assets/application-f207b082d340e2d7ef1faf6a3963b9409fa3147fb7e312868adaa67e76083f68.js"> 37<link rel="modulepreload" href="https://d32hgpjj5y625p.cloudfront.net/assets/turbo_stream_actions-ff801f8567a3558f4a5e50a81da697f29e835e2fa46cc6bf769179d5831663dc.js"> 38<link rel="modulepreload" href="https://d32hgpjj5y625p.cloudfront.net/assets/turbo.min-ddd8b828c747ffd95dbdfaa87b2414d120a316eed8407f19f78e777d074e5e96.js">
39<script type="esms-options">{"nonce":null}</script>
vendor: 1 bytes, line 39
39
40<script src="https://d32hgpjj5y625p.cloudfront.net/assets/es-module-shims.min-a0e02f0f37eb67badf69f69d30f3d3ef921c0ba3d076579d03a937c6b1c29d2d.js" async="async" data-turbo-track="reload"></script>
vendor: 1 bytes, line 40
40
41<script type="module">import "application"</script>
41 42<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"> 43<title>About | Alastair Miles</title> 44<meta name="csrf-param" content="authenticity_token" /> 45<meta name="csrf-token" content="fmtO2eDbt1-Y58xpaT43eiBWpEO-uxxsAsXwqX6eq27fSskE5VgdVFMXM5mJkwd68KQRg2iOSnT8SPwRGXmEyg" /> 46<meta name="csp-nonce" /> 47<meta content="width=device-width, initial-scale=1, shrink-to-fit=no" name="viewport"> 48
48<script> 49 window.renderTurnstile = function () { 50 $('.cloudflare-turnstile-widget').each((i, widget) => { 51 turnstile.render(widget, { 52 sitekey: '0x4AAAAAABCVYQo6ZyG97FYI', 53 callback: function (token) { 54 $(widget).parents('form').find("input[type='submit']").prop("disabled", false); 55 }, 56 }); 57 }); 58 }; 59 window.turnstileLoaded = function() { 60 if (document.readyState === "loading") { 61 document.addEventListener('DOMContentLoaded', renderTurnstile); 62 } else { 63 renderTurnstile(); 64 } 65 }; 66 document.addEventListener("turbo:frame-load", renderTurnstile); 67 </script>
67 68 69
69<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?onload=turnstileLoaded" async defer></script>
69 70 71<meta content="About Alastair Miles" name="description"> 72<meta content="About | Alastair Miles" property="og:title"> 73<meta content="About Alastair Miles" property="og:description"> 74<meta content="https://authoralastairmiles.com/about" property="og:url"> 75<meta content="website" property="og:type"> 76<meta content="https://res.cloudinary.com/wellfleet/image/upload/b_auto,c_pad,h_630,q_auto,w_1200/u4myrydu5jp2f0da6s63yqtvy8z1.jpg" property="og:image"> 77<meta content="1200" property="og:image:width"> 78<meta content="630" property="og:image:height"> 79<meta content="image/jpeg" property="og:image:type"> 80<meta content="summary" property="twitter:card"> 81<link rel="icon" type="image/x-icon" href="https://res.cloudinary.com/wellfleet/image/upload/c_lpad,b_rgb:031222,w_32,h_32/c_lpad,w_28,h_28,co_rgb:ffffff,l_text:Prata_24_bold:AM/v1701462860/favicon.png" /> 82<style type="text/css"> 83body { 84 --background-color: #031222; 85 --accent-color: #0bcad2; 86 --text-color: #ffffff; 87 --accent-contrast-color: #000000; 88 --logo-font: "DM Serif Display", serif; 89 --logo-font-weight: 400; 90 --logo-font-case: none; 91 --header-font: "Oswald", sans-serif; 92 --header-font-weight: 400; 93 --body-font: "DM Sans", sans-serif; 94 --background-image-url: url(); 95 --mailing-list-background-image-url: url(); 96} 97 98 99</style> 100<link href="https://authoralastairmiles.com/about" rel="canonical"> 101<link href="//fonts.googleapis.com" rel="preconnect"> 102<link crossorigin="true" href="//fonts.gstatic.com" rel="preconnect"> 103<link as="style" crossorigin="anonymous" href="https://fonts.googleapis.com/css2?display=swap&family=DM Serif Display:wght@400&family=Oswald:wght@400&family=DM Sans:ital,opsz,wght@0,9..40,400;0,9..40,700;1,9..40,400;1,9..40,700" rel="preload" type="text/css"> 104<link crossorigin="anonymous" href="https://fonts.googleapis.com/css2?display=swap&family=DM Serif Display:wght@400&family=Oswald:wght@400&family=DM Sans:ital,opsz,wght@0,9..40,400;0,9..40,700;1,9..40,400;1,9..40,700" rel="stylesheet" type="text/css"> 105<link rel="stylesheet" href="https://d32hgpjj5y625p.cloudfront.net/assets/website-5164b3cb3279842da358c6c907e0cf5e9d72106743dddf3c2802599bbf187c77.css" media="all" />
106<script src="https://d32hgpjj5y625p.cloudfront.net/assets/website-51048669aa058af730a2050187f188c2dff273ff3c464e46b7b3f7ddaf6ad92b.js"></script>
106 107<turbo-frame data-turbo="true" id="analytic_tags"> 108
109<script src="https://d32hgpjj5y625p.cloudfront.net/assets/custom_tracking-31af88ace985edb56eb121c6755d1a01a338931beedac126e877338b80684370.js"></script>
109 110</turbo-frame> 111</head> 112<body class="biography_modules_controller show_action " data-turbo="false"> 113<main role="main"> 114<div class="min-vh-100 d-flex flex-column"> 115<div class="header my-lg-2"> 116 117<nav class="navbar navbar-expand-lg py-1 d-flex justify-content-between flex-wrap container"> 118<div class="author-name text-wrap mb-0 left-aligned"> 119<a class="text-reset text-decoration-none m-0 p-0" href="/">Alastair Miles 120</a></div> 121<button class="d-block d-lg-none btn p-0" data-bs-target=".navbar-collapse" data-bs-toggle="collapse"> 122<svg width="1em" height="1em" style="fill: none; stroke: currentColor; vertical-align: middle; " viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> 123<path d="M1 2H19" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 124<path d="M1 9H19" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 125<path d="M1 16H19" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 126<path d="M1 2H19" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 127<path d="M1 9H19" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 128<path d="M1 16H19" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 129</svg> 130 131</button> 132<div class="collapse navbar-collapse navbar-nav-scroll flex-grow-0 flex-wrap mh-100"> 133<div class="mobile-menu-header d-flex d-lg-none align-items-center justify-content-between px-2 px-md-6 pt-3"> 134<a class="author-name text-reset text-decoration-none mb-0" href="/">Alastair Miles</a> 135<button class="btn p-0" data-bs-target=".navbar-collapse" data-bs-toggle="collapse"> 136<svg width="1em" height="1em" style="fill: none; stroke: currentColor; vertical-align: middle; " viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg"> 137<path d="M1 1L17 17" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 138<path d="M1 17L17 1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 139<path d="M1 1L17 17" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 140<path d="M1 17L17 1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 141</svg> 142 143</button> 144</div> 145<ul class="navbar-nav mt-1 mt-lg-0 px-2 px-md-6 n"> 146<li class="nav-item py-1 py-lg-0 font-body-medium"><a class="nav-link" href="/about">About</a></li> 147 148<li class="nav-item py-1 py-lg-0 font-body-medium"><a class="nav-link" href="/books/sub-luminal">Book</a></li> 149 150<li class="nav-item py-1 py-lg-0 font-body-medium"><a class="nav-link" href="/updates">Updates</a></li> 151 152<li class="nav-item py-1 py-lg-0 font-body-medium"><a class="nav-link" href="/blog">Blog</a></li> 153 154<li class="nav-item py-1 py-lg-0 font-body-medium"><a class="nav-link" href="/mailing-list">Mailing List</a></li> 155 156<li class="nav-item py-1 py-lg-0 font-body-medium"><a class="nav-link" href="/contact">Contact</a></li> 157 158<li class="nav-item py-1 py-lg-0 font-body-medium"><a class="nav-link" href="/press-kit">Press Kit</a></li> 159 160<li class="nav-item py-1 py-lg-0 font-body-medium"><a class="nav-link" href="/pages/free-story-dark-age">Free Story!</a></li> 161 162<li class="nav-item d-flex pt-2 pt-lg-0 gap-2 gap-lg-0 justify-content-center"> 163<a target="_blank" name="Goodreads" class="nav-link d-flex align-items-center" href="https://www.goodreads.com/book/show/215359242-sub-luminal"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 164 viewBox="0 0 48 48" style="fill: currentColor; stroke: currentColor; vertical-align: middle; " xml:space="preserve" width="24px" height="24px"> 165<path d="M32,17c0.5,3.9-0.5,8.3-3.8,10.6c-2.3,1.6-5.5,1.5-7.4,0.6c-3.9-1.8-5.2-6.2-4.9-10.2c0.5-6.4,4.3-9.2,7.9-9.2 166 C28.7,8.7,31.3,12.1,32,17L32,17z M47.6,6.2v35.3c0,3.2-2.6,5.9-5.9,5.9H6.4c-3.2,0-5.9-2.6-5.9-5.9V6.2c0-3.2,2.6-5.9,5.9-5.9h35.3 167 C44.9,0.3,47.6,2.9,47.6,6.2z M35.2,29.8c0,0,0-3.6,0-22.8h-3v4.2c-0.1,0-0.1-0.1-0.2-0.1c-1-2.2-3.8-4.9-8-4.8 168 c-5.5,0-9.2,3.3-10.6,8.2c-0.5,1.6-0.6,3.2-0.6,4.8c0.2,8.2,4.7,12.4,11.8,12.1c3-0.1,5.7-1.8,7.3-4.7c0.1-0.1,0.1-0.2,0.2-0.3 169 c0,0,0,0,0.1,0c0,0.4,0,3.2,0,3.6c0,1.6-0.2,3.1-0.8,4.6c-0.8,2.2-2.3,3.6-4.7,4.2c-1.9,0.4-3.7,0.4-5.6-0.1c-2.3-0.6-3.8-2-4.3-4.4
170 c0-0.2-0.1-0.1-0.2-0.1h-2.8c0.1,1.1,0.3,2.1,0.9,3.1c2.5,4.3,8.7,5.1,13.5,3.9C33.3,39.7,35.2,35.2,35.2,29.8L35.2,29.8z"/> 171</svg> 172 173</a><a target="_blank" name="X" class="nav-link d-flex align-items-center" href="https://x.com/AlastairMAuthor"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 174 viewBox="0 0 48 48" style="fill: currentColor; stroke: currentColor; vertical-align: middle; " xml:space="preserve" width="24px" height="24px"> 175<path class="st0" d="M36.7,3.8h6.7L28.7,20.7L46,43.6H32.4L21.8,29.7L9.6,43.6H2.9l15.8-18L2,3.8h13.9l9.6,12.7L36.7,3.8z 176 M34.3,39.5H38L13.9,7.6h-4L34.3,39.5z"/> 177</svg> 178 179 180 181</a></li> 182 183</ul> 184</div> 185</nav> 186</div> 187 188 189<div class="website-content mt-4 flex-grow-1"> 190<div class="biography-module container round-left" id="biography-module" itemprop="author" itemscope="" itemtype="https://schema.org/Person"> 191<div class="row gap-6 gap-lg-10"> 192<div class="col-md-auto text-center order-md-0"> 193<img class="author-image mw-100" alt="Alastair Miles" itemprop="image" loading="lazy" src="https://res.cloudinary.com/wellfleet/image/upload/c_fill,f_auto,h_660,q_auto,r_max,w_660/u4myrydu5jp2f0da6s63yqtvy8z1" /> 194</div> 195<div class="col"> 196<h2 class="font-logo-medium" itemprop="name">About Alastair Miles</h2> 197<div class="biography font-body-large mb-2"> 198<div class="text-break font-body-large rich-text"> 199<p>Alastair Miles was born in Kent in the 70s, which seems like an increasingly long time ago. He works as a design engineer, or a close approximation of one, and he loves all things space related. He combines elements of humour, space exploration, science fiction, philosophy and adventure in his works. His writing competes with other interests in whatever spare time life is prepared to grant him.</p> 200</div> 201</div> 202<ul class="list-unstyled d-flex flex-wrap gap-3 justify-content-start"> 203<li><a target="_blank" rel="noopener" class="social-link font-body-large fw-bold flex-shrink-0" itemprop="sameAs" href="https://www.amazon.co.uk/Sub-Luminal-Alastair-Miles/dp/196383206X/?_encoding=UTF8&pd_rd_w=LzsFr&content-id=amzn1.sym.a4ac6c4d-6ae7-4d95-b5e0-812c9dcfc72e%3Aamzn1.symc.fc11ad14-99c1-406b-aa77-051d0ba1aade&pf_rd_p=a4ac6c4d-6ae7-4d95-b5e0-812c9dcfc72e&pf_rd_r=AQS1320QS1VC19CMG2XP&pd_rd_wg=h9nhr&pd_rd_r=a78651cb-a5f3-4a99-9037-659339aff364&ref_=pd_hp_d_atf_ci_mcx_mr_ca_hp_atf_d">Amazon</a></li> 204<li><a target="_blank" rel="noopener" class="social-link font-body-large fw-bold flex-shrink-0" itemprop="sameAs" href="https://www.goodreads.com/book/show/215359242-sub-luminal">Goodreads</a></li> 205</ul> 206 207</div> 208</div> 209</div> 210 211 212</div> 213<div class="mt-auto container"><div class="footer mt-8 mb-2 pt-2"> 214<div class="d-flex flex-wrap font-body-small"> 215<div class="mb-1 mb-md-0"> 216<strong> 217Copyright 2182026 219</strong> 220 <a class="text-reset text-decoration-none amp-link" href="https://authoralastairmiles.com">Alastair Miles</a> 221</div> 222<div class="mb-2 mb-md-0 me-auto"> 223<div class="d-inline opacity-75"> 224<div class="d-none d-md-inline"> 225| 226</div> 227Built with 228<a target="_blank" class="text-reset text-decoration-none amp-link" href="https://authorwebsites.bookbub.com?source=ausite_ref">Author Websites by BookBub</a> 229</div> 230</div> 231<div class="ms-md-1 d-flex gap-2"> 232 233</div> 234<div class="ms-auto ms-md-3 d-flex align-content-center"> 235<a title="rss" class="opacity-50 text-reset d-flex align-items-start" href="/feed.xml"><svg width="16px" height="16px" style="fill: none; stroke: none; vertical-align: middle; margin-top:3px;" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 236<path fill-rule="evenodd" clip-rule="evenodd" d="M5 17C5 18.104 4.104 19 3 19C1.896 19 1 18.104 1 17C1 15.896 1.896 15 3 15C4.104 15 5 15.896 5 17Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 237<path d="M1 7C7.627 7 13 12.373 13 19" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 238<path d="M1 1C10.941 1 19 9.059 19 19" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 239</svg> 240 241</a></div> 242</div> 243</div> 244</div> 245</div> 246 247 248 249</main> 250</body> 251</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.