$3k Bug Bounty – Twitter's OAuth Mistakes

Imagine the scenario. You’re trying out some cool new Twitter app. It asks you to sign in via OAuth as per usual. You look through the permissions – phew – it doesn’t want t… | Continue reading


@shkspr.mobi | 5 years ago

Open Glasgow's Moral Maze

Glasgow City Council has released a treasure-trove of open data. Nearly one-hundred datasets ranging from Live Traffic Information – to historic climate data. A fantastic boon for researches … | Continue reading


@shkspr.mobi | 5 years ago

Using the WordPress MShots Screenshot API

A few years ago, I wrote about Google’s secret screenshot API – a slightly cumbersome way to take website screenshots for free. There’s another service which you may find simpler … | Continue reading


@shkspr.mobi | 5 years ago

Using Alexa to save our marriage

One evening, my wife turned to me in bed and said, “Winter is coming…” Well, what she actually said was “Get your frozen feet away from me, you cold-blooded monster!” … | Continue reading


@shkspr.mobi | 5 years ago

Should you use SRI for self-hosted scripts?

Here’s a curiosity which I found while stumbling through the Sony PlayStation store. The website loads internally hosted scripts using SRI (SubResource Integrity). Why? Does your work require… | Continue reading


@shkspr.mobi | 5 years ago

OpenBenches – some stats

For the last year-and-a-bit, Liz and I have been running OpenBenches.org. An open data website dedicated to memorial benches. Here are some rough and ready numbers about how it has gone so far. 9,8… | Continue reading


@shkspr.mobi | 5 years ago

Dynamic JavaScript and SRI

Some external JavaScript libraries are dynamic. That’s a problem for the SRI model of security. How can this be fixed? Definitions Suppose I want my website to have the latest version of the … | Continue reading


@shkspr.mobi | 6 years ago

The Myth of the Pixel Perfect Grid

If you’ve spent any time with graphic designers, you’ll know that they love spending your money on imperceptible tweaks to your image files. “It must be pixel-perfect!” they… | Continue reading


@shkspr.mobi | 6 years ago

Redirect GitHub ID to Username

Scratching my own itch here… GitHub users have a username (mine is @edent) and have a user ID number (mine is #837136). If you want to redirect a user ID to a username, you can use the little… | Continue reading


@shkspr.mobi | 6 years ago

Responsible Disclosure: CloudFlare – more interested in tracking than security

CloudFlare claim they want to secure the web – but they seem more interested in tracking their customers than giving them decent security. Upon registering with the Internet giant, users are … | Continue reading


@shkspr.mobi | 6 years ago

People who live in smart-houses, shouldn't throw parties

I have friends. More than one! I also have a home full of smart-gadgets which are controlled by apps. The two don’t mix. This is yet another complaint about solipsistic app design. Let’… | Continue reading


@shkspr.mobi | 6 years ago

Annoyed by Android's circular icons? how to fix them

One of Android’s mottos is “Be Together; Not The Same”. What does that mean to you? To me, it means that you don’t need to conform to a single way of doing things. Sadly, Go… | Continue reading


@shkspr.mobi | 6 years ago

Telnet Control of Toshiba Smart TVs

Here’s how to control the Toshiba 49U6863 – and other similar models – using Telnet. Quickstart At the command prompt, type telnet 192.168.0.123 4660 then type 1012 and your TV wi… | Continue reading


@shkspr.mobi | 6 years ago

YoreComputer – examining 1980s popular computer culture

There’s a lovely Twitter feed called Yore Computer – run by Rob Manuel, it randomly tweets out scans of 1980s computer magazines. A wonderful mix of nostalgia, dated references, primiti… | Continue reading


@shkspr.mobi | 6 years ago

Who owns the copyright to X-rays of my skull?

I popped round to an NHS dentist a few months ago – and they stuck my head on one of these contraptions. The Kodak 8000C takes a panoramic X-ray, giving a superior view of your teeth. Nifty. … | Continue reading


@shkspr.mobi | 6 years ago

Security issues on ArtChain

One of the problems with the BlockChain goldrush is that it attracts a lot of people who don’t necessarily have the required technical skill to safely run a service. This in turn reduces trus… | Continue reading


@shkspr.mobi | 6 years ago

Extracting your data from Untappd

I rate every pint I taste using the Untappd app. Think of it like TripAdvisor for lager, stout, cider, bitter, and all manner of other beery goodness. Seriously, I’ve reviewed over 600 differ… | Continue reading


@shkspr.mobi | 6 years ago

Domain hacks with unusual Unicode characters

Unicode contains a range of symbols which don’t get much use. For example, there are separate symbols for TradeMark – ™, Service Mark – ℠, and Prescriptions – ℞. Nestling am… | Continue reading


@shkspr.mobi | 6 years ago

Forbidden Unicode

I have been receiving letters from a dear friend by the name of Ophiuchus. He has been researching some curious anomalies in the Unicode Standard. While I cannot vouch for all he has written, I tho… | Continue reading


@shkspr.mobi | 6 years ago

Snarking on the Internet

It’s fun to grumble about a product. Sending snarky tweets, writing ranty blog-posts for those sweet HackerNews page-views, and generally complaining about how crap something is. Admit it, yo… | Continue reading


@shkspr.mobi | 6 years ago

Why Android Pie Won't Be Getting the Copyleft Symbol

Google is a company with nearly unlimited resources. It often chooses to use its power for the greater good of the Internet. Creating amazing projects like digitizing every printed book, bringing I… | Continue reading


@shkspr.mobi | 6 years ago

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 | 6 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 | 6 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 | 6 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 | 6 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 | 6 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 | 6 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"> | 6 years ago</span> </small> </div> </article> <!-- Feature 1 --> <article class="container box style1 left"> <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"> | 6 years ago</span> </small> </div> </article> <!-- Feature 1 --> <article class="container box style1 right"> <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"> | 6 years ago</span> </small> </div> </article> <!-- Feature 1 --> <article class="container box style1 left"> <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"> | 6 years ago</span> </small> </div> </article> <!-- Feature 1 --> <article class="container box style1 right"> <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"> | 6 years ago</span> </small> </div> </article> <!-- Feature 1 --> <article class="container box style1 left"> <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"> | 6 years ago</span> </small> </div> </article> <!-- Feature 1 --> <article class="container box style1 right"> <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"> | 6 years ago</span> </small> </div> </article> <!-- Feature 1 --> <article class="container box style1 left"> <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 21</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=20"><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>