<!DOCTYPE html>
<html lang="en-gb">
    
  <head>
    <link href="https://gmpg.org/xfn/11" rel="profile">
    <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="Cache-Control" content="public" />
<!-- Enable responsiveness on mobile devices -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<meta name="generator" content="Hugo 0.58.3" />

    

<title>tommorris.org</title>


<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="tommorris.org"/>
<meta name="twitter:description" content=""/>

<meta property="og:title" content="tommorris.org" />
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://tommorris.org/" />

<meta property="og:updated_time" content="2022-06-29T16:35:00+00:00" />


    






<link rel="stylesheet" href="/scss/hyde-hyde.4a5fde71e005c25891918328f40ca67474a10cbc6be42c3051f07130ac3c7ee4.css" integrity="sha256-Sl/eceAFwliRkYMo9AymdHShDLxr5CwwUfBxMKw8fuQ=">


<link rel="stylesheet" href="/scss/print.2744dcbf8a0b2e74f8a50e4b34e5f441be7cf93cc7de27029121c6a09f9e77bc.css" integrity="sha256-J0Tcv4oLLnT4pQ5LNOX0Qb58&#43;TzH3icCkSHGoJ&#43;ed7w=" media="print">



    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <!-- Icons -->
    <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/apple-touch-icon-144-precomposed.png">
    <link rel="shortcut icon" href="/favicon.png">
    <link rel="alternate" type="application/rss+xml" href="https://tommorris.org/index.xml" title="tommorris.org" />

    

</head>


    <body class="theme-base-tm ">
    
<div class="sidebar">
  <div class="container ">
    <div class="sidebar-about">
      <span class="site__title">
        <a href="https://tommorris.org/">tommorris.org</a>
      </span>
      
      <p class="site__description">
        
      </p>
    </div>
    <div>
	<ul class="sidebar-nav">
		 
		
	</ul>
</div>

    <p>
      <section class="social">
	
	<a href="https://twitter.com/tommorris" rel="me"><i class="fab fa-twitter fa-lg" aria-hidden="true"></i></a>
	
	
	
	&nbsp;<a href="https://github.com/tommorris" rel="me"><i class="fab fa-github fa-lg" aria-hidden="true"></i></a>
	
	
	
	
	<a href="https://mastodon.social/@tommorris" rel="me"><i class="fab fa-mastodon fa-lg" aria-hidden="true"></i></a>
	
	
	
	
	
	
	
	&nbsp;<a href="https://keybase.io/tommorris" rel="me"><i class="fab fa-keybase fa-lg" aria-hidden="true"></i></a>
	
	
	
</section>

    </p>
    <p class="copyright">
      &copy; 2022 Tom Morris
      
    </p>
  </div>
  <div>
  </div>
</div>

        <div class="content container">
            
  <div class="post-list">
    
    
      
        
      
      <div class="post-list__item" class="h-entry">
        <span class="item__title--big">
          <a href="/posts/2022/writing-better-api-documentation/" class="u-url p-title">Writing better API documentation: a few lessons from enterprise integration</a>
        </span>
        <span class="item__date">
          Jun 29, 2022
        </span>
        <span >
        
        Over many years working on API integrations, I&rsquo;ve seen a whole lot of ways that the experience could be less frustrating. This isn&rsquo;t a definitive list but a personal collection of a few recurring problems with documentation I&rsquo;ve seen in different REST APIs that could be avoided.
Explain what a field does
Consider API documentation like this:
 String[] tags - &ldquo;This field contains tags for the post.&rdquo;
 This is not helpful.
        
        </span>
        
          ... <a class="read-more-symbol" href="/posts/2022/writing-better-api-documentation/">➦</a>
        
        </div>
        
     
      
        
      
      <div class="post-list__item" class="h-entry">
        <span class="item__title--big">
          <a href="/posts/2022/possible-vulnerability-sainsburys-nectar-website/" class="u-url p-title">Possible vulnerability in Sainsbury&#39;s and Nectar website</a>
        </span>
        <span class="item__date">
          Mar 16, 2022
        </span>
        <span >
        
        In February, I discovered a potential vulnerability in the Sainsbury&rsquo;s and Nectar website. Sainsbury&rsquo;s is one of the UK&rsquo;s main supermarkets, and Nectar is the loyalty card programme they own in partnership with a bunch of other retail brands like Argos, Esso and British Airways.
The vulnerability is not that exciting and I have no way to know whether it is possible to misuse it without breaking the Computer Misuse Act 1990, which I obviously don&rsquo;t want to do.
        
        </span>
        
          ... <a class="read-more-symbol" href="/posts/2022/possible-vulnerability-sainsburys-nectar-website/">➦</a>
        
        </div>
        
     
      
        
      
      <div class="post-list__item" class="h-entry">
        <span class="item__title--big">
          <a href="/posts/2021/iterm2-url-matching-is-pretty-neat/" class="u-url p-title">iTerm2 URL matching is pretty neat</a>
        </span>
        <span class="item__date">
          Mar 20, 2021
        </span>
        <span >
        
        For many years, other developers told me about iTerm2 and I ignored them. I really shouldn&rsquo;t have. The stock macOS Terminal was fine, I thought. What a mistake.
There&rsquo;s lots to love about iTerm2, including the ability to script it in Python. But a really amazing quick win is the support for Triggers. Triggers allow you to set a regular expression that gets acted on every time they appear in the terminal.
        
        </span>
        
          ... <a class="read-more-symbol" href="/posts/2021/iterm2-url-matching-is-pretty-neat/">➦</a>
        
        </div>
        
     
      
        
      
      <div class="post-list__item" class="h-entry">
        <span class="item__title--big">
          <a href="/posts/2021/too-sarcastic-for-the-twitter-joke-police/" class="u-url p-title">Too sarcastic for the Twitter joke police: an adventure in automated moderation</a>
        </span>
        <span class="item__date">
          Feb 18, 2021
        </span>
        <span >
        
        In which computers built by Silicon Valley-funded companies fail to get British humour.
        
        </span>
        
          ... <a class="read-more-symbol" href="/posts/2021/too-sarcastic-for-the-twitter-joke-police/">➦</a>
        
        </div>
        
     
      
        
      
      <div class="post-list__item" class="h-entry">
        <span class="item__title--big">
          <a href="/posts/2020/never-trust-a-time-machine-made-by-a-computer-company/" class="u-url p-title">Never trust a Time Machine made by a computer company</a>
        </span>
        <span class="item__date">
          Dec 31, 2020
        </span>
        <span >
        
        In which Apple makes me very, very weary.
        
        </span>
        
          ... <a class="read-more-symbol" href="/posts/2020/never-trust-a-time-machine-made-by-a-computer-company/">➦</a>
        
        </div>
        
     
      
        
      
      <div class="post-list__item" class="h-entry">
        <span class="item__title--big">
          <a href="/posts/2020/using-ast-parsing-for-deriving-iam-rules/" class="u-url p-title">Using AST parsing for deriving IAM rules</a>
        </span>
        <span class="item__date">
          May 19, 2020
        </span>
        <span >
        
        With enough metaprogramming, security can be fun.
        
        </span>
        
          ... <a class="read-more-symbol" href="/posts/2020/using-ast-parsing-for-deriving-iam-rules/">➦</a>
        
        </div>
        
     
      
        
      
      <div class="post-list__item" class="h-entry">
        <span class="item__title--big">
          <a href="/posts/2020/thats-not-what-the-law-says/" class="u-url p-title">That&#39;s not what the law says: the coronavirus regulations</a>
        </span>
        <span class="item__date">
          Apr 08, 2020
        </span>
        <span >
        
        If you want a rule of law, maybe read the law?
        
        </span>
        
          ... <a class="read-more-symbol" href="/posts/2020/thats-not-what-the-law-says/">➦</a>
        
        </div>
        
     
      
        
      
      <div class="post-list__item" class="h-entry">
        <span class="item__title--big">
          <a href="/posts/2020/hart-contracts-not-smart-contracts/" class="u-url p-title">Hart contracts, not smart contracts</a>
        </span>
        <span class="item__date">
          Feb 06, 2020
        </span>
        <span >
        
        Why a philosophical argument shows the folly of Smart Contracts
        
        </span>
        
          ... <a class="read-more-symbol" href="/posts/2020/hart-contracts-not-smart-contracts/">➦</a>
        
        </div>
        
     
      
        
      
      <div class="post-list__item" class="h-entry">
        <span class="item__title--big">
          <a href="/posts/2020/nhs-data-commandments/" class="u-url p-title">The NHS Data Commandments and the memory hole</a>
        </span>
        <span class="item__date">
          Feb 04, 2020
        </span>
        <span >
        
        Back in 2018, the British government published a document on the World Wide Web. This happens fairly often. In fact, they have a whole publishing platform for this. I started writing a post critiquing this document, as I felt it was a poorly considered idea. Before I got around to publishing it, the document disappeared from the Internet. Life went on. I was busy, and there are always many more blog post drafts that don&rsquo;t ever get written or published.
        
        </span>
        
          ... <a class="read-more-symbol" href="/posts/2020/nhs-data-commandments/">➦</a>
        
        </div>
        
     
      
        
      
      <div class="post-list__item" class="h-entry">
        <span class="item__title--big">
          <a href="/posts/2019/essential-reading-on-the-mit-media-lab/" class="u-url p-title">Essential reading on the MIT Media Lab</a>
        </span>
        <span class="item__date">
          Sep 08, 2019
        </span>
        <span >
        
        A peek inside the embattled Media Lab.
        
        </span>
        
          ... <a class="read-more-symbol" href="/posts/2019/essential-reading-on-the-mit-media-lab/">➦</a>
        
        </div>
        
     
  </div>
  

<ul class="pagination">
    
    <li class="page-item">
        <a href="/" class="page-link" aria-label="First"><span aria-hidden="true">&laquo;&laquo;</span></a>
    </li>
    
    <li class="page-item disabled">
    <a href="" class="page-link" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a>
    </li>
    
    
    
    
    
    
        
        
    
    
    <li class="page-item active"><a class="page-link" href="/">1</a></li>
    
    
    
    
    
    
        
        
    
    
    <li class="page-item"><a class="page-link" href="/page/2/">2</a></li>
    
    
    <li class="page-item">
    <a href="/page/2/" class="page-link" aria-label="Next"><span aria-hidden="true">&raquo;</span></a>
    </li>
    
    <li class="page-item">
        <a href="/page/2/" class="page-link" aria-label="Last"><span aria-hidden="true">&raquo;&raquo;</span></a>
    </li>
    
</ul>


        </div>
        
  
  <script defer src="https://use.fontawesome.com/releases/v5.5.0/js/all.js" integrity="sha384-GqVMZRt5Gn7tB9D9q7ONtcp4gtHIUEW/yG7h98J7IpE3kpi+srfFyyB/04OV6pG0" crossorigin="anonymous"></script>

  <script>
	(function() {
		var script = document.createElement('script');
		window.counter = 'https://tommorris.goatcounter.com/count'
		script.async = 1;
		script.src = '//gc.zgo.at/count.js';

		var ins = document.getElementsByTagName('script')[0];
		ins.parentNode.insertBefore(script, ins)
	})();
</script>

    </body>
</html>
