Thread related messages & avoid being an automated spammer.

Photo by SUNBEAM PHOTOGRAPHY on Unsplash

In part one I wrote about why and how we built a Slack bot. We use our bot as middleware to send notifications from a browser app. The bot exposes endpoints mapped to methods like chat.postMessage in Slack’s web-api. We POST to the endpoint with a block-kit-builder formatted message. Each message to Slack returns a message ID (ts) which we use to thread related messages. It’s a great way to avoid spamming our channels.

Drone pilots use our app to upload imagery to our services. We want to notify a channel when:


Leveraging Cloud Optimised GeoTIFFs (COGs) to display high resolution drone imagery on a web application. Save on processing and storage at the same time.

Written by: Sean Rennie & Alasdair Hitchins

Photo by Tim Mossholder on Unsplash

TL;DR

COGs leverage HTTP GET range requests and smart organisation for fast web access. They are as performant as map tiles making them a lower cost alternative. COGs are less power hungry to process (up to 10x) and need less storage for the same resolution (savings of 40%-80%). They are also more versatile. COGs are simply GeoTIFFs and can be used by teams for image processing in all the usual ways.

A Cloud Optimized GeoTIFF (COG) is a regular GeoTIFF file, aimed at being hosted on a HTTP file server, with an internal organization…


… and using it to send status messages or other notifications to Slack from any browser app

Photo by Loic Leray on Unsplash

TL;DR

If you are looking for a way to send messages to a Slack channel look no further than their webhooks. But if you need to send those message from a client side app running in a browser you‘ll need some extra help. Web-hooks are POST requests and will fail CORS pre-flight checks done by the browser. You could hack it by using a 'Content-type’: ‘application/x-wxw-form-urlencoded header. This skips pre-flight check and POST’s as a “simple” request. But it’s definitely a hack and if the receiving server changes its policy you’ll be dead in the water. Instead you’ll need to build…


Four things I learned trying Angular for the first time.

Photo by kalei peek on Unsplash

I’ve been working professionally and using React exclusively for about two and a half years. Last week I applied for my dream job that came with a caveat — they use Angular. No, not AngularJS! That would be a deal breaker — fortunately the latest versions (currently 11).

I was asked to do a technical test which they said I could complete in React (a green light for a solid company if you’re interviewing). But I wanted to test myself so I committed to doing it in Angular as well. I reached into the docs and time boxed my attempt…


Photo by T.H. Chia on Unsplash

A migration guide for react-leaflets latest major version (3). I’ll walk through some reasons to upgrade, whats changed, examples of what I had to change and even a special case involving two synced maps.

Paul LeCam’s react-leaflet library is a powerful set of React bindings for Leaflet. The latest major version overhauls the library to modern React, making use of hooks and doing away completely with classes. It’s also been re-written in Typescript 🎉! In my view this brings react-leaflet closer to the “wood” rather than a “React flavour” of Leaflet. The new core library makes building custom components really easy, giving React developers the full power of Leaflet and its plugin ecosystem.

Hats off to you Paul, thanks for the amazing work. Below is my attempt to add something to the community. …


Using Apollo’s new react hooks to create simple to use local state in a react application. This one uses Typescript.

Photo by Priscilla Du Preez on Unsplash

Edit: 2020–10–26: This article was using Apollo Client v2.x, since then Apollo have released v3.0 which come with much better local state management features (Reactive variables). I suggest you check it out.

I’ve recently started having a play with and using Apollo Client’s local state management features in my React app. I found that creating custom hooks as an abstraction over the cache read write logic made it really easy to use.

In this blog post I’m going to walk…


An adaption of Luke Hall’s great article, State Management with React Hooks and Context API in 10 lines of code, for my React Typescript app. The obvious result being type-safety for your global state and IntelliSense when using VS Code

Credit where credits due: It must all go to Luke for his article. It really is an elegant solution.

Photo by Fotis Fotopoulos on Unsplash

You should be comfortable with these things

This article assumes you are familiar with a few things as I wont go into the background of each.

Disclaimer: I don’t claim…

Sean Rennie

Software engineer with a love of maps and anything geospatial. I enjoy techno, the outdoors, tequila & coffee. Currently working at Hummingbird Technologies

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store