Easy guide to building Mastodon bots

Twitter is dead! Long live Mastodon! I’ve written lots of ‘bots for Twitter – and been part of their developer outreach programme. Lots of us have politely requested improvements … | Continue reading


@shkspr.mobi | 5 years ago

Why doesn't my cable company understand Unicode?

More adventures with Unicode. I logged in to my Virgin Media account to see when my promotional discount would end. Here’s what their billing PDF said. Let’S Ignore The Weird Capitalisa… | Continue reading


@shkspr.mobi | 5 years ago

Twitter's Secret “Guest Mode”

Twitter has an undocumented feature which lets you follow accounts without being logged in. Here’s how I found it, and how you can use it. My crappy old TV has a crappy old web browser on it.… | Continue reading


@shkspr.mobi | 5 years ago

Digital Court

This is the story of my encounter with our justice system. It’s a personal post that doesn’t necessarily reflect my employers’ opinions. September 2017 – I was standing by a… | Continue reading


@shkspr.mobi | 5 years ago

Electrical Neutrality

There’s a new energy provider launching in the UK soon, Elektrique Power. They’ve got an innovative pricing structure that I’d like to discuss. As a base rate, they charge 12p/kWh… | Continue reading


@shkspr.mobi | 5 years ago

Personalisation Is Asymmetric Psychological Warfare

Another privacy nightmare. An airline wants its cabin crew to know your birthday and favourite drinks order, to better personalise its service to you. My first instinct is to recoil in horror. It s… | Continue reading


@shkspr.mobi | 5 years ago

Limitations of HTML's title element

How much do you know about the humble tag? It has been there since the earliest HTML specification. The 1995 spec says: There may only be one title in any document. It should identify… <span class="text-muted"> | </span> <a href="https://shkspr.mobi/blog/2018/06/limitations-of-htmls-title-element/" target="_blank" href="">Continue reading</a> </p> <hr> <small> @shkspr.mobi <span class="text-muted"> | 5 years ago</span> </small> </div> </article> <!-- Feature 1 --> <article class="container box style1 right"> <a href="https://shkspr.mobi/blog/2018/06/how-i-became-leonardo-da-vinci-on-the-blockchain/" class="image fit"> <div style="background-image: url('/imageurl?width=800&id=57626954&url=https%253A%252F%252Fshkspr.mobi%252Fblog%252Fwp-content%252Fuploads%252F2018%252F06%252FScreenshot_20180611-195059__01.jpg'); background-position: center center; background-size: cover; background-repeat: no-repeat; height: 100%"> </div> </a> <div class="inner"> <header> <h2 class="tt-none">How I became Leonardo da Vinci on the Blockchain</h2> </header> <p> Yesterday at the CogX conference, I sat in a room listening to companies pitch their blockchain based startups. Because I hate myself. One in particular caught my attention. On the surface it seems… <span class="text-muted"> | </span> <a href="https://shkspr.mobi/blog/2018/06/how-i-became-leonardo-da-vinci-on-the-blockchain/" target="_blank" href="">Continue reading</a> </p> <hr> <small> @shkspr.mobi <span class="text-muted"> | 5 years ago</span> </small> </div> </article> <!-- Feature 1 --> <article class="container box style1 left"> <a href="https://shkspr.mobi/blog/2016/11/how-do-you-sort-chinese-numbers/" class="image fit"> <div style="background-image: url('/imageurl?width=800&id=57614766&url=https%253A%252F%252Fs0.wp.com%252Fi%252Fblank.jpg'); background-position: center center; background-size: cover; background-repeat: no-repeat; height: 100%"> </div> </a> <div class="inner"> <header> <h2 class="tt-none">How Do You Sort Chinese Numbers?</h2> </header> <p> Imagine you have a series of number you wish to sort. Sorting is a well known computer science problem – generally speaking you compare one value to the next and then move the item either up … <span class="text-muted"> | </span> <a href="https://shkspr.mobi/blog/2016/11/how-do-you-sort-chinese-numbers/" target="_blank" href="">Continue reading</a> </p> <hr> <small> @shkspr.mobi <span class="text-muted"> | 5 years ago</span> </small> </div> </article> <!-- Feature 1 --> <article class="container box style1 right"> <a href="https://shkspr.mobi/blog/2018/06/is-http-451-suitable-for-gdpr-blocking/" class="image fit"> <div style="background-image: url('/imageurl?width=800&id=57485437&url=https%253A%252F%252Fs0.wp.com%252Fi%252Fblank.jpg'); background-position: center center; background-size: cover; background-repeat: no-repeat; height: 100%"> </div> </a> <div class="inner"> <header> <h2 class="tt-none">Is HTTP 451 suitable for GDPR blocking?</h2> </header> <p> Hello, it’s me – the idiot who helped inspire the HTTP 451 status code. I graciously allowed Tim Bray to do the hard work of getting it through the IETF process, and now it is an offici… <span class="text-muted"> | </span> <a href="https://shkspr.mobi/blog/2018/06/is-http-451-suitable-for-gdpr-blocking/" target="_blank" href="">Continue reading</a> </p> <hr> <small> @shkspr.mobi <span class="text-muted"> | 5 years ago</span> </small> </div> </article> <!-- Feature 1 --> <article class="container box style1 left"> <a href="https://shkspr.mobi/blog/2018/06/how-long-should-you-continue-a-boycott/" class="image fit"> <div style="background-image: url('/imageurl?width=800&id=56948407&url=https%253A%252F%252Fs0.wp.com%252Fi%252Fblank.jpg'); background-position: center center; background-size: cover; background-repeat: no-repeat; height: 100%"> </div> </a> <div class="inner"> <header> <h2 class="tt-none">How long should you continue a boycott?</h2> </header> <p> In 2005, Sony put malware on their music CDs and then illegally infected customers’ machines. I’ve not purchased a Sony product since. Their new TVs look amazing, but I’ve decided… <span class="text-muted"> | </span> <a href="https://shkspr.mobi/blog/2018/06/how-long-should-you-continue-a-boycott/" target="_blank" href="">Continue reading</a> </p> <hr> <small> @shkspr.mobi <span class="text-muted"> | 5 years ago</span> </small> </div> </article> <!-- Feature 1 --> <article class="container box style1 right"> <a href="https://shkspr.mobi/blog/2018/06/decentralised-food-safety-reviews/" class="image fit"> <div style="background-image: url('/imageurl?width=800&id=56634235&url=https%253A%252F%252Fshkspr.mobi%252Fblog%252Fwp-content%252Fuploads%252F2018%252F05%252Fblockchaindog-fs8.png'); background-position: center center; background-size: cover; background-repeat: no-repeat; height: 100%"> </div> </a> <div class="inner"> <header> <h2 class="tt-none">Decentralised Food Safety Reviews</h2> </header> <p> In most civilised countries, there is a central authority which inspects restaurants for hygiene and safety. Their job is, broadly, to stop people getting poisoned, falling sick, or dying. ThatR… <span class="text-muted"> | </span> <a href="https://shkspr.mobi/blog/2018/06/decentralised-food-safety-reviews/" target="_blank" href="">Continue reading</a> </p> <hr> <small> @shkspr.mobi <span class="text-muted"> | 5 years ago</span> </small> </div> </article> <!-- Feature 1 --> <article class="container box style1 left"> <a href="https://shkspr.mobi/blog/2018/05/privacy-security-ethics-computer-sciences-judische-physik/" class="image fit"> <div style="background-image: url('/imageurl?width=800&id=55891747&url=https%253A%252F%252Fshkspr.mobi%252Fblog%252Fwp-content%252Fuploads%252F2011%252F02%252Fcyberbully_new_web.jpg'); background-position: center center; background-size: cover; background-repeat: no-repeat; height: 100%"> </div> </a> <div class="inner"> <header> <h2 class="tt-none">Privacy, Security, and Ethics – Computer Science's “Jüdische Physik”</h2> </header> <p> I’m going to tell you an anecdote which is a gross oversimplification of a complex topic. In the early half of the twentieth century, certain physicists made breakthroughs in relativity, quan… <span class="text-muted"> | </span> <a href="https://shkspr.mobi/blog/2018/05/privacy-security-ethics-computer-sciences-judische-physik/" target="_blank" href="">Continue reading</a> </p> <hr> <small> @shkspr.mobi <span class="text-muted"> | 5 years ago</span> </small> </div> </article> <!-- Feature 1 --> <article class="container box style1 right"> <a href="https://shkspr.mobi/blog/2018/04/knowledge-illusions/" class="image fit"> <div style="background-image: url('/imageurl?width=800&id=52634604&url=https%253A%252F%252Fshkspr.mobi%252Fblog%252Fwp-content%252Fuploads%252F2018%252F04%252FAlexa-Screenshot-Doctor-Who-fs8.png'); background-position: center center; background-size: cover; background-repeat: no-repeat; height: 100%"> </div> </a> <div class="inner"> <header> <h2 class="tt-none">Knowledge Illusions – how to confuse an AI</h2> </header> <p> Optical Illusions trick your brain into seeing something that isn’t there. Whether it is spirals which don’t exist, movements which don’t occur, or faces in curved lines – o… <span class="text-muted"> | </span> <a href="https://shkspr.mobi/blog/2018/04/knowledge-illusions/" target="_blank" href="">Continue reading</a> </p> <hr> <small> @shkspr.mobi <span class="text-muted"> | 6 years ago</span> </small> </div> </article> <section id="footer"> <div class="icons"> <h2>Page 18</h2> <ul> <li class="page-item"> <a title="Go to first page" class="page-link track-fragment" href="?query=,facet_who:shkspr.mobi&page=1"><i class="icon fa-angle-double-left"></i> First</a> </li> <li class="page-item"> <a title="Go to previous page" class="page-link track-fragment" href="?query=,facet_who:shkspr.mobi&page=17"><i class="icon fa-angle-left"></i> Prev</a> </li> </ul> </div> <hr> <div class="copyright"> <ul class="menu"> <li> © 2005-2024 <a target="_blank" href="https://in-two.com">IN2</a> </li> <li> <a href="mailto:metablog@in-two.com"><span class="label">Say hello</span></a> </li> <li> Design: <a href="http://html5up.net">HTML5 UP</a> </li> </ul> </div> </section> <!-- Template Scripts --> <script src="/public/templates/overflow/assets/js/jquery.min.js"></script> <script src="/public/templates/overflow/assets/js/jquery.scrolly.min.js"></script> <script src="/public/templates/overflow/assets/js/jquery.poptrox.min.js"></script> <script src="/public/templates/overflow/assets/js/browser.min.js"></script> <script src="/public/templates/overflow/assets/js/breakpoints.min.js"></script> <script src="/public/templates/overflow/assets/js/util.js"></script> <script src="/public/templates/overflow/assets/js/main.js"></script> <!-- Bootstrap and necessary plugins --> <script src="/public/javascripts/vendor.dist.js"></script> <script src="/public/javascripts/app_frontend.dist.js"></script> <script type="text/javascript"> angular.module('Frontend').factory('APIPaths', function() { return { getGetConnectedSetsPath : function(options) {var pattern = '/organise/api/sets/connected?itemId=:itemId';for(key in options) {var val = options[key];pattern = pattern.replace(':' + encodeURIComponent(key), ( (val===undefined || val===null)?'': val));}return pattern;} , getCheckUniqueUsernamePath : function(options) {var pattern = '/check/unique/username';for(key in options) {var val = options[key];pattern = pattern.replace(':' + encodeURIComponent(key), ( (val===undefined || val===null)?'': val));}return pattern;} , getCheckUniqueEmailPath: function(options) {var pattern = '/check/unique/email';for(key in options) {var val = options[key];pattern = pattern.replace(':' + encodeURIComponent(key), ( (val===undefined || val===null)?'': val));}return pattern;} , getCheckExistsEmailPath: function(options) {var pattern = '/check/exists/email';for(key in options) {var val = options[key];pattern = pattern.replace(':' + encodeURIComponent(key), ( (val===undefined || val===null)?'': val));}return pattern;} , getRecordConsentPath: function(options) {var pattern = '/application/consent';for(key in options) {var val = options[key];pattern = pattern.replace(':' + encodeURIComponent(key), ( (val===undefined || val===null)?'': val));}return pattern;} } }) </script> <script> (function(w,d,t,u,n,a,m) { w['MauticTrackingObject']=n; w[n] = w[n] || function() { (w[n].q = w[n].q || []).push(arguments) }, a = d.createElement(t), m = d.getElementsByTagName(t)[0] a.async=1; a.src=u; m.parentNode.insertBefore(a,m) }) (window,document,'script','https://mautic.in-two.com/mtc.js','mt'); mt('send', 'pageview'); </script> <!-- Plausible Analytics --> <script defer data-domain="metablog.co" src="https://plausible.in-two.com/js/plausible.js"></script> </body> </html>