ACCU World of Code
-
Python Async basics video (100 million HTTP requests)
I found something difficult in Python, which was a bit of a first, so I wrote a whole blog series about it, and now a whole video: Slides: Python Async Basics slides Blog posts: asyncio basics, large numbers in parallel, parallel HTTP requests, addin…
-
Code your way out of a paper bag
I attended nor(DEV):con, a tech conference in Norwich, last week. I gave a 45 minute talk which I called “Code your way out of a paper bag”. A majority of my recent talks involve getting out of, and once into, a paper bag. I’ve used this as a vehicle…
-
Code your way out of a paper bag
I attended nor(DEV):con, a tech conference in Norwich, last week. I gave a 45 minute talk which I called “Code your way out of a paper bag”. A majority of my recent talks involve getting out of, and once into, a paper bag. I’ve used this as a vehicle…
-
Clean git blame history
Place the following in a command file, run it within your repo: #!/bin/sh git filter-branch –env-filter ‘ an=”$GIT_AUTHOR_NAME” am=”$GIT_AUTHOR_EMAIL” cn=”$GIT_COMMITTER_NAME” cm=”$GIT_COMMITTER_EMAIL” if [ “$GIT_AUTHOR_EMAIL” = “timp@paneris.o…
-
Clean git blame history
Place the following in a command file, run it within your repo: #!/bin/sh git filter-branch –env-filter ‘ an=”$GIT_AUTHOR_NAME” am=”$GIT_AUTHOR_EMAIL” cn=”$GIT_COMMITTER_NAME” cm=”$GIT_COMMITTER_EMAIL” if [ “$GIT_AUTHOR_EMAIL” = “timp@paneris.o…
-
Keybase chat bot in 10 lines of bash
I’ve been getting very excited about keybase.io recently, not least because it offers secure conversation, and you can have bots. I wrote a quick bot to simulate Arnold Schwarzenegger which I thought I’d share to demonstrate how easy it is. It is based…
-
Performance of Java 2D drawing operations (part 3: image opacity)
Series: operations, images, opacity Not because I was enjoying it, I seemed compelled to continue my quest to understand the performance of various Java 2D drawing operations. I’m hoping to make my game Rabbit Escape faster, especially on the Raspberry…
-
Performance of Java 2D drawing operations (part 2: images)
Series: operations, images, opacity In my previous post I examined the performance of various drawing operations in Java 2D rendering. Here I look at some specifics around rendering images, with an eye to finding optimisations I can apply to my game Ra…
-
CppOnSea
CppOnSea 2019 Phil Nash organised a new conference, CppOnSea, this year. I was lucky enough to be accepted to speak, so attended to two conference days, but not the workshops. There were three tracks, along with a beginners track, run by Tri…
-
CppOnSea
CppOnSea 2019 Phil Nash organised a new conference, CppOnSea, this year. I was lucky enough to be accepted to speak, so attended to two conference days, but not the workshops. There were three tracks, along with a beginners track, run by Tri…
-
Performance of Java 2D drawing operations (part 1: types of operation)
Series: operations, images, opacity I want to remodel the desktop UI of my game Rabbit Escape to be more convenient and nicer looking, so I took a new look at game-loop-style graphics rendering onto a canvas in a Java 2D (Swing) UI. For more on images,…
-
xkcd-style plots in MatPlotLib
Most programmers I know are familiar with xkcd, the webcomic of romance, sarcasm, math, and language. In order to create diagrams for my machine learning book, I wanted a way to create something I could have fun with. I discovered that Pytho…
-
xkcd-style plots in MatPlotLib
Most programmers I know are familiar with xkcd, the webcomic of romance, sarcasm, math, and language. In order to create diagrams for my machine learning book, I wanted a way to create something I could have fun with. I discovered that Pytho…
-
London Python Meetup January 2019 – Async Python and GeoPandas
It was a pleasure to go to the London Python Meetup organised by @python_london. There were plenty of friendly people and interesting conversations. I gave a talk “Making 100 million requests with Python aiohttp” (slides, Blog post) explaining the basi…
-
Run bash inside any version of Linux using Docker
Docker is useful for some things, and not as useful as you think for others. Here’s something massively useful: get a throwaway bash prompt inside any version of any Linux distribution in one command: docker run -i -t –mount “type=bind,src=$HOME/Deskt…
-
Windows missing from grub menu after Ubuntu install
Windows was missing from my grub menu after I installed Ubuntu. Fortunately it was fixed by running: sudo grub-mkconfig -o /boot/grub/grub.cfg and rebooting. Phew.
-
Does machine learning really involve data?
Many definitions of machine learning start by proclaiming it uses data, to learn. I want to challenge this, or remind us where the term originally came from and consider why the meaning has shifted. For a long time machine learning seemed to be a new…
-
Does machine learning really involve data?
Many definitions of machine learning start by proclaiming it uses data, to learn. I want to challenge this, or remind us where the term originally came from and consider why the meaning has shifted. For a long time machine learning seemed to be a new…
-
Adding CircleCI builds
Just added CircleCI builds to my greylstd and SIPFwd projects.
-
Adding CircleCI builds
Just added CircleCI builds to my greylstd and SIPFwd projects.
-
New home page design
After years of getting around to it, I have redesigned my home page at artificialworlds.net. It’s basically intended to make me look clever or productive or interesting or something. Alternatively, it gives you somewhere to find that thing you know I m…
-
Code Like a Girl T-shirts
There are lots of people missing from the programming world: lots of the programmers I meet look and sound a lot like me. I’d really like it if this amazing job were open to a lot more people. One of the weird things that has happened is that somehow w…
-
Guaranteed Copy Elision Does Not Elide Copies
This post is also available at the Microsoft Visual C++ Team Blog C++17 merged in a paper called Guaranteed copy elision through simplified value categories. The changes mandate that no copies or moves take place in some situations where they were pre…
-
Poor performance in Chrome (especially on mobile) – caused by SVG background images
I have spent the last few hours investigating abysmal performance in my latest little game project Cross The Road. Firefox was fine, but Chromium and Chrome, especially on mobile, was rendering at about three frames per second. When I stopped using SVG…
-
I wrote a book about Genetic algorithms and Machine learning
I’ve written a book pulling together some of my previous talks showing how to code your way out of a paper bag using a variety of machine learning techniques and models, including genetic algorithms. It available at Amazon and you can downloa…
-
I wrote a book about Genetic algorithms and Machine learning
I’ve written a book pulling together some of my previous talks showing how to code your way out of a paper bag using a variety of machine learning techniques and models, including genetic algorithms. It available at Amazon and you can downloa…
-
Interesting Characters (UTF-16, utf-8, Unicode, encodings) video
In which I try to express the weird joy I felt learning about all the odd quirks of the simple task of turning bytes into characters, and characters into bytes. Slides: Interesting Characters slides
-
Elm makes me happy (updated for Elm 0.19) video
Series: Snake in Elm, Elm makes me happy, Elm Basics, Elm Unit Test, Elm JSON With up-to-date examples, and anecdotes from the last couple of years of continuing to enjoy writing web pages in Elm, here’s a new version of my Elm advert: Slides: Elm ma…
-
Godot: make new objects at runtime (instancing) video
Series: 2D Shapes, drag and drop, new objects My Godot 3 game is progressing, and I am starting to think I am actually writing the level editor. Here’s how I wrote code to make new versions of existing objects (by converting them to scenes): Godot ve…
-
You must rewind your incoming buffer when you fail to encode a character in a CharsetEncoder or you’ll get an IllegalArgumentException
I am writing a CharsetEncoder in Java, which is my kind of fun. I was getting a mysterious error when I identified that I could not encode certain characters: Exception in thread “main” java.lang.IllegalArgumentException at java.nio.Buffer.position(Bu…
-
Godot: Dragging and dropping physics objects video
Series: 2D Shapes, drag and drop, new objects Continuing to explore the Godot 3 game engine. I want to make a game where you drag blocks around and balance them on each other, but I couldn’t find much documentation on how to drag-and-drop objects (exce…
-
Godot: 2D shapes bouncing off each other video
Series: 2D Shapes, drag and drop, new objects In which I make a square and a triangle bounce on a rectangle using Godot 3: Godot version: v3.0.6.stable.official.8314054
-
PC-lint Plus and Gimpel’s new website
Gimpel Software (the vendor behind PC-lint and PC-lint Plus) <have recently updated their website, and it is now dedicated entirely to PC-lint Plus. If you are considering upgrading from PC-lint 9.0 to PC-lint Plus, the relevant information is avail…
-
PC-lint Plus and Gimpel’s new website
Gimpel Software (the vendor behind PC-lint and PC-lint Plus) <have recently updated their website, and it is now dedicated entirely to PC-lint Plus. If you are considering upgrading from PC-lint 9.0 to PC-lint Plus, the relevant information is avail…
-
LintProject Pro End of Life Notice
LintProject Pro is a command line only product which can perform a basic per-file analysis of a C/C++ codebase using PC-lint or CppCheck. In many ways it was the proof of concept for Visual Lint, and although it has served us well, it’s getting a bit l…
-
LintProject Pro End of Life Notice
LintProject Pro is a command line only product which can perform a basic per-file analysis of a C/C++ codebase using PC-lint or CppCheck. In many ways it was the proof of concept for Visual Lint, and although it has served us well, it’s getting a bit l…
-
Elm JSON decoder examples
Series: Snake in Elm, Elm makes me happy, Elm Basics, Elm Unit Test, Elm JSON I find JSON decoding in Elm confusing, so here are some thoughts and examples. Setup $ elm –version 0.19.0 $ mkdir myproj; cd myproj $ elm init … $ elm install elm/json …..
-
static_assert in templates
Quiz time! Which of the following programs can you expect to not compile? For bonus points, which are required by the C++ standard to not compile? Program 1 Program 2 Program 3 In case you’re not familiar with static_assert, it takes a constant boolean expression, and if it evaluates to false, you get a compilation … Continue reading static_assert in templates
-
+!!””
In this Tweet, @willkirkby posts: +!!”” that evaluates as 1 in C/C++, but no, JavaScript is the weird language C++ is indeed weird, or at least it’s very weakly typed. Let’s go through all the details of what’s going on here: Summary: Starting from the right, “” is a string literal, which gets converted to … Continue reading +!!””
-
Graft Animation Language on Raspberry Pi
Because the Rapsberry Pi uses a slightly older Python version, there is a special version of Graft for it. Here’s how to get it: Open a terminal window by clicking the black icon with a “>” symbol on it at the top near the left. First we need to in…
-
Disaster Recovery: A Dynamic Redundancy Approach
The problem with disaster planning is that it is not rehearsed. When you need to retrieve a file from backup is when you discover that your backup has been broken for three months. Modern cloud systems, based upon software defined infrastructure and…
-
Disaster Recovery: A Dynamic Redundancy Approach
The problem with disaster planning is that it is not rehearsed. When you need to retrieve a file from backup is when you discover that your backup has been broken for three months. Modern cloud systems, based upon software defined infrastructure and…
-
Why you can’t list-initialize containers of non-copyable types
Have you ever wondered why you can’t list-initialize containers of non-copyable types? This is for instance not possible: If you ever wondered, or if you now are, read on! List-initialization Since C++11, you’re probably used to intitalizing containers like this: This of course also works with user defined types. Let’s say you have a class … Continue reading Why you can’t list-initialize containers of non-copyable types
-
Worksheet: “Tell a story by making animations with code”
I’m running a workshop at the Egham Raspberry Jam on 21st October. The workshop will introduce my little animation language Graft. We will tell a story using animations that we created ourselves using code. The worksheet for the workshop is here: PDF o…
-
Direct access to SonarQube Postgresql Database
I want to change to change the name of a sonarqube project. This cannot be done without performing another analysis. You can just do it in SQL https://stackoverflow.com/questions/30511849/how-to-rename-a-project-in-sonarqube-5-1 but you have to be…
-
Direct access to SonarQube Postgresql Database
I want to change to change the name of a sonarqube project. This cannot be done without performing another analysis. You can just do it in SQL https://stackoverflow.com/questions/30511849/how-to-rename-a-project-in-sonarqube-5-1 but you have to be…
-
My experience upgrading to Elm 0.19
Elm is unstable, so upgrading to the next version can be painful. Here’s what I needed to do to upgrade from 0.18 to 0.19. Replace elm-package.json and tests/elm-package.json with elm.json – e06f5a1728 Switch to the new elm-test – b964b7c7a Re-arrange…
-
Bulk adding items to Wunderlist using wunderline on Ubuntu MATE
If you use Wunderlist and want to be able to bulk-add tasks from a text file, first install and set up wunderline. Now, to be able to right-click a text file containing one task per line on Ubuntu MATE, create a file called “wunderlist-bulk-add” in ~/….
-
Writing a new Flarum extension on Ubuntu
In a previous post I described how to install Flarum locally on Ubuntu. Here is how I set up my development environment on top of that setup so I was able to write a new Flarum extension and test it on my local machine. Recap: I installed Apache and PH…
-
Ubuntu “compose” key for easy unicode character input
I found out on Mastodon recently that the Compose key exists, allowing you to enter special characters using easy-to-remember key sequences (e.g. “<compose>/=” gives you “≠“). To do this on Ubuntu (and probably many other systems), hold SHIFT, …
-
Redirecting all requests to https and www using .htaccess in Apache
I want all requests to artificialworlds.net/rabbit-escape/levels/ to get redirected to use the https protocol, and to include “www.” at the beginning of the URL, and I found lots of Stack Overflow articles, but nothing there worked perfectly for me. He…
-
Example of a systemd service file
Here is an almost-minimal example of a systemd service file, that I use to run the Mastodon bot of my generative art playground Graft. I made a dedicated user just to run this service, and installed Graft into /home/graft/apps/graft under that username…
-
Spaceship Operator
You write a class. It has a bunch of member data. At some point, you realise that you need to be able to compare objects of this type. You sigh and resign yourself to writing six operator overloads for every type of comparison you need to make. Afterwa…
-
Installing Flarum on Ubuntu 18.04
I am setting up a forum for sharing levels for my game Rabbit Escape, and I have decided to try and use Flarum, because it looks really usable and responsive, has features we need like liking posts and following authors, and I think it will be reasonab…
-
Rabbit Escape 0.11 out now!
The RABBOTS are coming! Get the latest version of Rabbit Escape: Android: Rabbit Escape on F-Droid (free, no ads) Android: Rabbit Escape Free on the Play Store (free, no ads) Android: Rabbit Escape on the Play Store (Pay about 60p, identical to the f…
-
Migrating videos from YouTube to PeerTube inside a Docker container
I have quite a few videos hosted on YouTube that I would like to upload to my new PeerTube location, but I don’t want to install all the PeerTube dependencies on my machine, so I did it all inside a Docker image. First I built and started a Docker cont…
-
How to write a programming language articles
Recent Overload journal issues contain my new articles on How to Write a Programming Language. Part 1: How to Write a Programming Language: Part 1, The Lexer Part 2: How to Write a Programming Language: Part 2, The Parser PDF of the latest issue: Overl…
-
Roundup running on Python 3
Following last week’s upgrade of my Roundup instance to 1.6.0, I have now applied the Python 3 patches from issue2550960 with a few more fixes available in my py3-cmeerw branch and now have both wg21.cmeerw.net as well as issues.cmeerw.org working with…
-
Roundup running on Python 3
Following last week’s upgrade of my Roundup instance to 1.6.0, I have now applied the Python 3 patches from issue2550960 with a few more fixes available in my py3-cmeerw branch and now have both wg21.cmeerw.net as well as issues.cmeerw.org working with…
-
Roundup Updated for wg21.cmeerw.net
wg21.cmeerw.net got a major update with Roundup being updated to 1.6.0 and the template converted to being based on jinja2 which should make it more friendly to mobile devices.
-
Roundup Updated for wg21.cmeerw.net
wg21.cmeerw.net got a major update with Roundup being updated to 1.6.0 and the template converted to being based on jinja2 which should make it more friendly to mobile devices.
-
Allow drag-to-side, but not drag-to-top in Ubuntu MATE (Marco)
I love the “tiling” feature in many window managers including Marco that means I can drag windows to the side of the screen and get them covering one half. However, I never use the similar feature that allows dragging a window to the top, and it often …
-
Super Simple Named Boolean Parameters
Quite often we come across interfaces with multiple boolean parameters, like this: cake make_cake (bool with_dairy, bool chocolate_sauce, bool poison); A call to this function might look like: auto c = make_cake(true, true, false); Unfortunately,…
-
Connecting to Slack from an IRC client using slirc
I tried to get back to an IRC interface to Slack using Matrix, and it had some problems. Thanks to Colin Watson’s comment on that post, I tried Daniel Beer’s slirc, and so far it seems to be working pretty well. Here’s what I did: Get a Slack legacy to…
-
Using Matrix to connect to Slack from an IRC client on Ubuntu
Update: I found a better solution using slirc. I like using HexChat to talk to my colleagues, like one other guy. It is fast, and it pops up a new window when someone sends me a direct/private message. Recently, Slack shut down their IRC gateway, forci…
-
Function Template Partial Ordering: Worked Examples
C++ function overloading rules are complex. C++ template rules are complex. Put the two together, and you unfortunately do not get something simple; you get a hideous monster of standardese which requires great patience and knowledge to overcome. Howev…
-
Shooting with Flash (And Motofest 2018)
Talking about shooting with an on-camera flash at Coventry Motofest 2018.I’ve never really used my flashgun before, mostly because on the odd occasion that I have used it at a shoot I ended up with under, or over exposed images and thus never wanted to…
-
Clever Things People Do In Groovy So You Have To Know About Them video
Groovy has lots of interesting syntax that can be used for domain-specific languages, such as Gradle build files, and Jenkinsfiles. I try to demystify the syntax tricks a bit so you have a chance to read and understand what the code is actually doing: …
-
Gitlab certificates
On Ubuntu, cloning a repo from a machine you don’t have a certificate for will give the error: fatal: unable to access ‘https://servername’: server certificate verification failed. CAFuile /etc/ssl/certs/your_filename CRLfile: None You can …
-
Gitlab certificates
On Ubuntu, cloning a repo from a machine you don’t have a certificate for will give the error: fatal: unable to access ‘https://servername’: server certificate verification failed. CAFuile /etc/ssl/certs/your_filename CRLfile: None You can …
-
std::accumulate vs. std::reduce
std::accumulate has been a part of the standard library since C++98. It provides a way to fold a binary operation (such as addition) over an iterator range, resulting in a single value. std::reduce was added in C++17 and looks remarkably similar. This …
-
Perforce Acquires PRQA
Clearlake Capital-Backed Perforce Adds Enterprise-Grade Source Code Analysis to its Portfolio With Acquisition of PRQA
-
Perforce Acquires PRQA
Clearlake Capital-Backed Perforce Adds Enterprise-Grade Source Code Analysis to its Portfolio With Acquisition of PRQA
-
ACCU Conference 2018
We had an absolute blast at this year’s ACCU Conference and if you were there we imagine you did too. For us the highlight had to be the launch of #include <C++>, a new global, inclusive, and diverse community for developers interested in C++. …
-
ACCU Conference 2018
We had an absolute blast at this year’s ACCU Conference and if you were there we imagine you did too. For us the highlight had to be the launch of #include <C++>, a new global, inclusive, and diverse community for developers interested in C++. …
-
Examples of SQL join types (LEFT JOIN, INNER JOIN etc.)
I have 2 tables like this: > SELECT * FROM table_a; +——+——+ | id | name | +——+——+ | 1 | row1 | | 2 | row2 | +——+——+ > SELECT * FROM table_b; +——+——+——+ | id | name | aid | +——+——+——+ | …
-
Custom Alias Analysis in LLVM
At Codeplay I currently work on a compiler backend for an embedded accelerator. The backend is the part of the compiler which takes some representation of the source code and translates it to machine code. In my case I’m working with LLVM, so this repr…
-
East End Functions
There has been a recent stirring of attention, in the C++ community, for the practice of always placing the const modifier to the right of the thing it modifies. The practice has even been gifted a catchy name: East Const (which, I think, is what has…
-
East End Functions
There has been a recent stirring of attention, in the C++ community, for the practice of always placing the const modifier to the right of the thing it modifies. The practice has even been gifted a catchy name: East Const (which, I think, is what has…
-
No more pointers
This was an April Fools post. One of the major changes at the most recent C++ standards meeting in Jacksonville was the decision to deprecate raw pointers in C++20, moving to remove them completely in C++23. This came as a surprise to many, with a lot…
-
emBO++ 2018 Trip Report
emBO++ is a conference focused on C++ on embedded systems in Bochum, Germany. This was it’s second year of operation, but the first that I’ve been along to. It was a great conference, so I’m writing a short report to hopefully convince more of you to a…
-
ACME DNS Validation
I was looking at modifying acme tiny to support DNS-01 validation with a custom PowerDNS backend just a few days ago (in my case to get certificates for an XMPP server where there isn’t a corresponding HTTP server or the HTTP server is hosted on a diff…
-
ACME DNS Validation
I was looking at modifying acme tiny to support DNS-01 validation with a custom PowerDNS backend just a few days ago (in my case to get certificates for an XMPP server where there isn’t a corresponding HTTP server or the HTTP server is hosted on a diff…
-
Fixing Slack emojis in HexChat
If, like me, you are this person: (Source: xkcd.com/1782) You may want to fix the stupid :slightly_smiling_face: messages you receive from Slack via the IRC gateway. Obviously, I’d prefer they went away entirely, but it’s still better to see a characte…
-
Ideas on how lexing will work in Pepper3
I am trying to practice documentation-driven development in Pepper3, so every time I start on an area, I will write documentation explaining how it works, and include examples that are automatically verified during the build. I’ve started work on lexin…
-
Deleting commits from the git history
Today I wanted to fix a Git repo that contained some bad commits (i.e. git fsck complained about them). [I wanted to do this because GitLab was not allowing me to push the bad commits.] I wanted the code to look exactly as it did before, but the histor…
-
Do compilers take inline as a hint?
If you’ve spent any time in C or C++ communities online, you’ve probably seen someone say this: inline used to be a hint for compilers to inline the definition, but no compilers actually take that into account any more. You shouldn’t believe ever…
-
Questions and answers about Pepper3
Series: Examples, Questions My last post Examples of Pepper3 code was a reply to my friend’s email asking what it was all about. They replied with some questions, and I thought the questions and answers might shed some more light: Questions! Brillian…
-
Examples of Pepper3 code
Series: Examples, Questions I have restarted my effort to make a new programming language that fits the way I like things. I haven’t pushed any code yet, but I have made a lot of progress in my head to understand what I want. Here are some random examp…
-
Passing overload sets to functions
Passing functions to functions is becoming increasingly prevalent in C++. With common advice being to prefer algorithms to loops, new library features like std::visit, lambdas being incrementally beefed up12 and C++ function programming talks consisten…
-
Constantly Confusing: C++ const and constexpr pointer behaviour
A quick explanation of how const and constexpr work on pointers in C++So I was checking that my knowledge was correct when working on a Firefox bug.I made a quick C++ file with all the examples I know of how to use const and constexpr on pointers.As on…
-
Working with PDF Highlight Annotations Programmatically
PDFs are the format of choice in academia, but extracting the information they contain is annoyingly hard.I’ve just started working on my degree’s final project. An academic project requires lots of research, which means reading lots of papers.Papers a…
-
Recording gameplay videos on RetroPie
Stop! This blog post is out of date – see Recording gameplay videos on RetroPie for a live version in github that may be more helpful. Credits: this is a slightly corrected and shortened version of How To Record A GamePlay Video From A RetroPie by sels…
-
Resizable UIWindow on iOS
I came across a Todo item in my inbox (I often email myself things todo) whilst tidying it up following Christmas, entitled “Make a resizable UIWindow”. I can remember sending this to myself but not what I was reading or watching that prompted me to do…
-
Resizable UIWindow on iOS
I came across a Todo item in my inbox (I often email myself things todo) whilst tidying it up following Christmas, entitled “Make a resizable UIWindow”. I can remember sending this to myself but not what I was reading or watching that prompted me to do…
-
I don’t have hope
I don’t have hope about the state of society regarding support of trans people.On Trans Day of Remembrance 2017 I organised and spoke at Coventry Pride’s event.I delivered the following words to the attendees. Since I spent so much time crying over wri…
-
The World’s First Distributed C++ Meet-up (*)
(* Probably) Last week my London based C++ user group, C++ London, joined forces with SwedenCpp, based in Stockholm, for a distributed event where we shared video streams with each other. The whole thing was hosted by King, who took care of the audio…
-
The World’s First Distributed C++ Meet-up (*)
(* Probably) Last week my London based C++ user group, C++ London, joined forces with SwedenCpp, based in Stockholm, for a distributed event where we shared video streams with each other. The whole thing was hosted by King, who took care of the audio…
-
Catch2 Released
I’ve been talking about Catch2 for a while – but now it’s finally here The big news for Catch2 is that it drops all support for pre-C++11 compilers. Other than meaning that some users will not be supported (you can still use Catch “Classic” (1.x) – …