The Curious Engineer

All blogs / Science

Robin's Blog

blog.rtwilson.com

A remote-sensing PhD student talking about interesting things...

SciencePythonGeneralEngineering blogs

Posts
251 from 11 Nov 2008 to 10 Sep 2026
Posting
monthly (9 in the last year)
Kind
personal blog
Feed
https://blog.rtwilson.com/feed/

2026 9

  1. New site for my John Snow Cholera Map data
  2. How to fix a weird pandas and pyarrow issue with BirdNetPi
  3. Some recent, and not so recent, talks and activities
  4. How to decorate a simple but effective child’s birthday cake
  5. How to bypass SSL for PROJ reprojection
  6. Pharmacy late-night opening hours analysis featured in the Financial Times
  7. How to fix osm2pgrouting error ‘relation “__waysXXXX” does not exist’ and speed up the import
  8. Today I Learned – in 2024 and 2025
  9. Favourite books I read in 2025

2025 4

  1. More links – June 2025
  2. Learning resources for GIS in Python with cloud-native geospatial, PostGIS and more
  3. A load more links
  4. My talk at FOSS4G UK South West 2024

2024 33

  1. The Feynman approach to small monetary compensation
  2. Join the GeoTAM hackathon to work out business turnovers!
  3. How to convert hex-encoded WKB geometries in PostGIS
  4. I won two British Cartographic Society awards!
  5. Searching an aerial photo with text queries – a demo and how it works
  6. Who reads my blog? Send me an email or comment if you do!
  7. A load of links…
  8. Accessing Planetary Computer STAC files in DuckDB
  9. Introducing offline_folium
  10. Introducing pyAURN – a Python package for accessing UK air quality data
  11. How to install the Python triangle package on an Apple Silicon Mac
  12. How to subscribe to releases on Github
  13. Some matplotlib tips – a reblog
  14. I was interviewed on a podcast!
  15. New Projects page on my website
  16. Simple segmentation of geospatial images
  17. What’s the largest building in Southampton? Find out with 5 lines of code
  18. Free GIS Data site update – all links now working!
  19. British Placename Mapper – follow-up and links to cool maps
  20. How to display images with custom paths relative to the project in QGIS Attribute Forms
  21. More book recommendations from 2020 onwards – Part 1
  22. Simple self-hosted OpenStreetMap routing using Valhalla and Docker
  23. Some easy recipes
  24. Explore UK place names on a map – my new web app
  25. My geospatial PDF talk at FOSS4G 2021
  26. Fixing SQL error ‘invalid reference to FROM-clause entry for table’
  27. One reason for getting a ‘No HTTP triggers found’ error when using Azure Functions with Python V2 programming model
  28. How to speed up appending to PostGIS tables with ogr2ogr
  29. How to create a Windows USB boot stick using Ventoy
  30. How to fix GeoPandas drop_duplicates on geometry column not getting rid of all duplicates?
  31. How to easily reload a QGIS layer
  32. How to create an x64 (Intel) conda environment on your Apple Silicon Mac (ARM) conda install
  33. How to get segment-geospatial working on Microsoft Planetary Computer

2023 6

  1. Upcoming talks: Cafe Sci Oxford & PyData Southampton
  2. Pandas-FSDR: a simple function for finding significant differences in pandas DataFrames
  3. How to get GeoParquet support in GDAL/OGR from conda-forge
  4. Travel times, over time
  5. Beach wheelchairs at Sandown, Isle of Wight and Barry, South Wales
  6. Karabiner Elements and Goku for custom keyboard shortcuts in MacOS

2021 1

  1. Py6S v1.9.0 released – plus code cleanup and how I got M1 support for the underlying 6S model

2020 4

  1. Pint + SQLAlchemy = Unit consistency and enforcement in your database
  2. A Python sqlite3 context manager gotcha
  3. Favourite books I read in 2019
  4. Talks I’m giving this year

2019 16

  1. Creating an email service for my son’s childhood memories with Python
  2. Automatically downloading nursery photos from ParentZone using Selenium
  3. Using SQLAlchemy to access MySQL without frustrating library installation issues
  4. A couple of handy zsh/bash functions for Python programmers
  5. Easily specifying colours from the default colour cycle in matplotlib
  6. Markdown in WordPress – and writing blog posts is fun again
  7. Five new-ish Python things – Part 1
  8. Setting limits for a choropleth layer manually with leaflet-choropleth
  9. Automatically generating a legend for a choropleth layer in Leaflet
  10. Easily hiding items from the legend in matplotlib
  11. Calculating Rayleigh Reflectance using Py6S
  12. Automatically annotating a boxplot in matplotlib
  13. Matplotlib titles have configurable locations – and you can have more than one at once!
  14. I am now a freelancer in Remote Sensing, GIS, Data Science & Python
  15. Less than a week left to bid for a day’s work from me
  16. Bid for a day’s work from me

2018 15

  1. I give talks – on science, programming and more
  2. Mismatch between 6S atmospheric correction results & those from coefficients
  3. PyCon UK 2018: My thoughts – including childcare review
  4. PyCon UK 2018: My talk on xarray
  5. Automatic PDF calendar generation with pcal
  6. Assumptions in Remote Sensing
  7. BankClassify: simple automatic classification of bank statement entries
  8. Android + OpenCV = Confusion…
  9. Cloud frequency map for Europe & update to cloud frequency web app
  10. Attending EGU in a wheelchair
  11. Blogroll
  12. Some recent papers of mine
  13. Roadside leafiness from space – Part 2
  14. Roadside leafiness from space – Part 1
  15. Quick way to delete columns from a shapefile

2016 29

  1. Regression in Python using R-style formula – it’s easy!
  2. Reminder about cross-platform case-sensitivity differences
  3. ‘Got multiple values for argument’ error with keyword arguments in Python classes
  4. Showing code changes when teaching
  5. Reading AERONET data in Pandas: a simple helper function
  6. Conda revisions: letting you ‘rollback’ to a previous version of your environment
  7. Data sources for parameterising Radiative Transfer Models & atmospheric correction algorithms
  8. Non-traditional references to my work – and why they’re important
  9. Resources for learning Python for Remote Sensing – or switching from IDL
  10. Software Sustainability in Remote Sensing
  11. I’m an academic in a wheelchair – why is it so difficult?
  12. How to: speed up viewing Samba network shares in OS X
  13. How to: rescue lost code from a Jupyter/IPython notebook
  14. Previously Unpublicised Code: RPiNDVI
  15. My thesis writing timeline – analysed using Dropbox and Python
  16. How to: Set the Python executable used to run .py files from the command-line on Windows
  17. How to: Get Sublime Text style editing in the IPython/Jupyter notebook
  18. Ten Little IDL programs in Python
  19. Programming link clearance 2015: Python edition
  20. How to: Get Python packages which need a C compiler installed easily on Windows
  21. Job: Research Assistant with Python & Remote Sensing/Image Processing experience
  22. Hacking the Worcester Wave thermostat in Python – Part 3
  23. How to: add simple new commands to LaTeX to help with writing papers
  24. Hacking the Worcester Wave thermostat in Python – Part 2
  25. Hacking the Worcester Wave thermostat in Python – Part 1
  26. My MSc project: a simple ray-tracing radiative transfer model (with code!)
  27. Deprecating AutoZotBib
  28. Behind the paper: Are visibility-derived AOT estimates suitable for parameterising satellite data atmospheric correction algorithms?
  29. Previously Unpublicised Code: PyMicrotops

2015 24

  1. My 2015 Python life
  2. My top 5 ‘new’ Python modules of 2015
  3. An easy way to install Jupyter Notebook extensions
  4. Convolution in python – which function to use?
  5. Previously Unpublicised Code: manifestoclouds
  6. Bokeh plots with DataFrame-based tooltips
  7. Scientific software metrics with Depsy – a great new tool!
  8. Calculating percentiles in Python – use numpy not scipy!
  9. van Heuklon ozone model now available on PyPI and conda
  10. Happy 7th Birthday Blog!
  11. Orthogonal Distance Regression in Python
  12. Previously Unpublicised Code: RTWIDL
  13. Blue Marble: From Apollo 17 to DSCOVR, an EPIC journey
  14. Two great IPython extensions
  15. How to: get nice vector graphics in your exported PDF ipython notebooks
  16. Introducing recipy: effortless provenance tracking with Python
  17. How I became Dr Robin Wilson: Part 2
  18. Interactive cloud frequency web map, with Google Earth Engine
  19. How I became Dr Robin Wilson: Part 1
  20. How to: load the Google Maps Places library through Google API Loader
  21. IPython tips, tricks & notes – Part 1
  22. How to: Log electricity usage from a CurrentCost EnviR – Part 2
  23. How to: Log electricity usage from a CurrentCost EnviR – Part 1
  24. Note: Mounting over an existing directory ‘hides’ the files

2014 20

  1. Review: High Performance Python by Gorelick and Ozsvald
  2. Behind the paper: Spatial variability of the atmosphere over southern England, and its effects on scene-based atmospheric corrections
  3. What’s new in Py6S
  4. How to: Fix weird ENVI startup file issues
  5. Simple parameter files for Python class-based algorithms
  6. How to: Find out what modules a Python script requires
  7. How to: Solve GDAL error ‘An error occurred while writing a dirty block’
  8. How effective is my research programming workflow? The Philip Test – Part 4
  9. How to: Create a Landsat Metadata database, so you can select images by various criteria
  10. How effective is my research programming workflow? The Philip Test – Part 3
  11. Software choices in remote sensing
  12. How effective is my research programming workflow? The Philip Test – Part 2
  13. How to: Fix ‘WARNING: terminal is not fully functional’ error on Windows with Cygwin/Msysgit
  14. Review: Rackspace Cloud (+ free open-source project hosting)
  15. How effective is my research programming workflow? The Philip Test – Part 1
  16. How to: Convert OSM waypoints defining polygons into Shapefile
  17. How to: Fix Flask WSGI webapp hanging when importing a module (such as numpy or matplotlib)
  18. Py6S now has Continuous Integration & better tests
  19. New Py6S and RTWTools websites
  20. How to batch export PDFs to other filetypes in Adobe Acrobat

2013 16

  1. The benefits of an academic website
  2. You’ve done your literature review – what about a data review as well?
  3. Configuring legends in ArcGIS – a (slightly) less horrible way to do it
  4. Encouraging citation of software – introducing CITATION files
  5. Beware: Latitude/Longitude co-ordinates in ENVI may not be in WGS-84
  6. van Heuklon Ozone model implementation in Python
  7. Please specify a license for your software (and even your code samples!)
  8. A simple way to improve sustainability, reproducibility and releasability of your code and data
  9. Review: Programming ArcGIS 10.1 with Python Cookbook
  10. John Snow’s Cholera data in more formats
  11. Resources for Sustainable Software and Reproducible Research in Remote Sensing presentation
  12. Converting latitude/longitude co-ordinates to Landsat WRS-2 paths/rows
  13. Can I atmospherically-correct my images with Py6S?
  14. Py6S: Run a radiative transfer model with a user-defined input spectrum
  15. My first academic paper – on Py6S
  16. Major update to Free GIS Data site

2012 11

  1. Review: Code – The Hidden Language of Computer Hardware and Software by Charles Petzold
  2. Validating the validation?
  3. Updated Snow GIS data
  4. I signed the Science Code Manifesto – and you should too!
  5. In praise of ProjectTemplate for reproducible research
  6. Announcing bib2coins – convert BibTeX files to COINS metadata
  7. How to: Make your Sphinx documentation compile with ReadTheDocs when you’re using Numpy and Scipy
  8. How to: Set raster values to NoData easily in ArcGIS 10
  9. Announcing DateRangeParser: Parse strings like “27th-29th June 2010”
  10. Producing polar contour plots with matplotlib
  11. John Snow’s famous cholera analysis data in modern GIS formats

2011 45

  1. How to: Solve the ‘Ctrl-Space (auto-complete) not working’ problem in Eclipse
  2. How to choose a co-ordinate transformation in ArcGIS
  3. Free Julian Day calendar poster download
  4. Please use sensible colours in your maps
  5. Interesting Remote Sensing Applications #1: Estimating shop profits from space
  6. Standard test images for Remote Sensing
  7. Rules of thumb in Remote Sensing
  8. Fun with the OS Gazetteer
  9. Thoughts on academic conferences, or “Conferences aren’t lectures!”
  10. Get more detailed messages for maths errors in IDL
  11. The new iPython is awesome!
  12. Reading data from instruments via RS-232 simply in Linux
  13. How to: Fix a network printer suddenly showing as offline in Windows Vista, 7 or 8
  14. Essential OS X software #1 – Mail Attachment Reminder Plugin
  15. Using PyDev with with the Enthought Python Distribution
  16. Categorised list of Free GIS Datasets
  17. Why I hate my Toshiba laptop
  18. Review: Dreamhost web hosting
  19. Alfred – the new Quicksilver?
  20. My programming journey
  21. An ode to PDFs (and PDFs as a first class filetype)
  22. Review: Asonic External USB 2.0 8 Channel Sound Card
  23. The best debugger is a good compiler
  24. How to: Consolidate your internet presence
  25. Review: Machine Learning: An Algorithmic Perspective by Stephen Marsland
  26. Finally – a way to move an ArcGIS map to another computer without breaking it
  27. Programming << Pointers << Parallel Programming
  28. Review: Matplotlib for Python Developers by Sandro Tosi
  29. My LaTeX preamble
  30. Amazing software you haven’t heard of
  31. Git helps me get round to using source control
  32. Want to write some code? Get away from your computer!
  33. How to: Set up a simple service to run in the background on a Linux machine (using daemontools)
  34. Review: R Graphs Cookbook by Hrishi Mittal
  35. My new bookcase – arranged by the XKCD ‘Purity’ comic
  36. Review: Python Geospatial Development by Erik Westra
  37. How to: Fix ArcGIS 9.3 Licensing Error 96,7 – Valid name, but no record
  38. Review: The Geek Atlas by John Graham-Cumming
  39. My favourite OS X software
  40. Git + DTerm = Great Source Control in OS X
  41. Review: R in a Nutshell by Joseph Adler
  42. Small Notes from a French Country
  43. How to: Reset the Software Update URL in OS X
  44. Reproducible Research: Why it’s great, and why I’ll do it
  45. Review: Statistical Analysis with R: Beginner’s Guide by John M. Quick

2010 16

  1. Coughs on a train
  2. My 3 favourite things about my MacBook Pro
  3. Lessons learnt from: My dissertation
  4. How to: Fix problem where EndNote only shows the EndNote Web toolbar in Word
  5. Review: A Thousand Years of Nonlinear History by Manuel De Landa
  6. Review: Image Analysis, Classification and Change Detection in Remote Sensing (with algorithms for ENVI/IDL) by M. J. Canty
  7. Finally…a nice way to download satellite images!
  8. Leaky abstractions in science
  9. Default deny: A signal of academic maturity?
  10. Producing grids of plots in R with ggplot2: A journey of discovery
  11. How to: Fix sudden VPN problem in Vista
  12. How to: Find closest objects in ArcGIS with Python
  13. Aeolian Philosophy or “What is a sand dune?”
  14. My academic values
  15. How to: Snap points to lines in ArcGIS with Python
  16. Art: in other words?

2009 1

  1. Rats got unfairly blamed for bubonic plague

2008 1

  1. Wisdom and Knowledge