Developer's Diary - for when you think it can't get any worse.
2011
February - First test on an iPad and it's running natively! Kind of cool but the teensy iPhone sized controls look silly. It's clear that the image dimension control is inadequate as the iPad crams the tiny doodles into the top left of the screen
March - Replaced the image scaling system but now uploads look flaky and there's a host of zooming issues.
Crammed this page into the site, called by the Diary list on the home page. Used Dynamic Drive's favicon tool to generate the wee icon that sits on the browser tab.
Massive effort to get the app submitted before the end of the month. So much going on at the moment that it would be a shame to have this uncomplete. Turns out there was far too much to do
April - Failed in so many ways to meet our (artificial) targets
Attempted to submit and thought we could get away with uploading and only then writing the prerequisite documentation page. But as soon as we started it became clear that this was going to be a much bigger task than we'd imagined. Four days later and a little fiddling with PHP and it now exists (see Support), but uses a very crude trick to mimic a nice looking table of contents frame.
The consensus seems to be that AJAX is the prefered method of loading < div > content.
Worse than that, a host of glitches surfaced while running through the "reachability" tests. This is Apple's requirement that the app notify the user when a relevant network service becomes unreachable. Fair enough but it's easy to screw up and it's a common cause of app rejection
May - Discovered that it had been accepted! Quickly withdrew it for lack of a marketing plan and then discovered a few bugs, one of which was was a subtle, annoying little creature. Good riddance. Added a couple of nice features and resubmitted and now it's available (hooray!) but can't see it on iTunes. Why not?
June - Video conversion, at last! After banging our heads against the wall it is simply a matter of delving into the AV (audio-visual) framework documentation. There are only a few classes required to initialise a video and then it's just a matter of copying the DF 'tween frames to the video, one at a time, with the appropriate time signature. The resulting video can be written to a .mov (QuickTime) file and saved in the app's private documents directory on the device, then exported to the user's photo/video album. No need to write a load of http (or include the Google YouTube api) to send it to YouTube as that's built into the photo/video management app.
July - Work on v1.2 stuttering but the mathematical algorithm made it easy to add a couple of useful features - pinch gesture to resize a curve and rotate gesture. Not yet applied to a whole frame (multiple curves) although this shouldn't be difficult. The video export was a source real trouble,caused by the iPhone running out of memory while it was accumulating video frames. Out of our depth there but the workaround seems to be to export the video into a series of small files, then build a single, large file from them. Nuisance.
August - This record left intentionally blank
September - Short term success can lead to long term failure! Exporting the flicks into video format was much easier than we expected, but so slow! And there was a memory leak that we could not nail down. This obstacle was beating us down throughout August (hence no comments) until a solution appeared out of desparation. - In-App purchasing! Let the server do the video export and let the client pay for the video. That way the free app (yes it's coming) will provide a revenue stream.
October - A solution, but a complex and convoluted one, requiring a home PC to poll (yuck) the server in order to check whether or not an export has been requested. Should the PC app locate one, it calls another program to download the doodle and settings info from the server then convert that into a series of still images that get crammed into a QuickTime video format. This step is complicated by the difficulty we've been having creating a file that YouTube recognises. The solution to that was to get QuickTime to perform an export, requiring an automation script. Phew! Then the data is uploaded to the server blah and blah and what a nuisance.
November - In-App purchasing is not conceptually difficult, but it's no picnic to test. The 'products' don't exist until the app has been approved, so how do you test it while the sofware is being developed?! Apple lets you fake an iTunes account, and the 'purchase' occurs within a sandboxed environment.
December - iOS displays a scrolling selector wheel for multiple choices but it seems like overkill when there are only three choices. So we created our own but it doesn't look great and for the next release (inshah' allah) there will only be one export format: video. On the server-side, the help page for mobile devices is much better with a little Ajax. With the javascript document model (that works fine on Safari) page content can be requested from the server and positioned in place without a full refresh, which saves on bandwidth. Nice!
2012
January - JSON (pronounced Jason) is a lightweight way to describe software objects compared to its older brother XML. It's the mechanism used by Apple's servers to validate a purchase and, somewhat surprisingly, it works exactly as the technical description says. So, for once, a bit of work that didn't require a lot of hair-pulling (inshah'allah).
February - The answer to video conversion was ffmpeg. The original solution relied on Apple's QuickTime to convert the .mov to an .mp4. This was slow and the only way the calling program could determine if the conversion was successful was to continually check for the output file (and check that it wasn't open). Clunky. Ffmpeg is a fast and efficient open source video conversion tool with a bewildering range of options. We call it using NSTask.
March - More "challenges" to overcome as uploading a video that's been converted from a Flick can fail if the upload is exceptionally large. It may also be a simple http setting but we can't control these (curse these shared Linux servers!). The hack that we found was to transfer the file in chunks. Primitive!
April - Both the upgrade and the Lite version were accepted by Apple. Revised the php "views" counter (which is not the same as hits) and it's clear that this page is never viewed by a human! Which means that you are the first! But the point of it is really to make subtle changes to the site so that Google's spiders will elevate it's ranking. The target is page one for
iPhone Animation App.May - Calligraphy with openGL. Adapted Apple's GLPaint example to create an iPad utility that can replay a curve with the same pace. This is important as the pace gives a sense of how the master calligrapher pauses or sweeps sections of text.
June - More openGL. The iPad version of this app includes layers, which allow the artist to paint with different colours. Although it's obvious, it isn't as easy as it sounds as the 'Tween engine works by matching curves based on their drawing order. So what if one's green in one frame and orange in another?! The 'tween colour might get ugly. By using individual layers for each colour we can avoid this, but it's a headache to code. The developer's are spending more time each day in the local pubs.
July - Alright I admit that (so far) there have been very few takers of the video export feature (which took months of hard graft). Who even knows about it?! Videos have been tricky to support in web development because of the mutually incompatible codecs and the wars between the browsers. Animated GIFs, however, are lightweight, standard and easy to plunk into a site to give it a bit of oomph, and that's what we're doing, with many thanks to Laszlo Zsidi for GifMerge.
August - The programmers are all at music festivals I'm not too keen on the way they act when they come back. Lethargic and prone to fits of weeping.
September - The end of summer sees our fondly-regarded
intern
return to school.
We are very pleased with the progress he made on our openGL project, especially the
implementation of a Verlet
physics engine.
October - Optimisation (UK spelling) seems to have been the theme as the recent versions of Xcode seem to be equipped with simpler profiling tools. More likely, it was just laziness on our part that allowed code including repeated, slow graphics calls that made some operations lag.
November - We were working on special effects with openGL ES (the lightweight version for mobile devices) and had this idea that it would look really good if we could have falling snow (a bunch of particles) stick to the lighted positions of an image. It does! But rewriting the backing texture on every frame update is costly if it's not done with smarts. Something our dimwit team never had in abundance.
December - The appstore closes over the holidays, so we became anxious as we thought about all the
people who would miss out on the latest enhancements to the app: (that's right)
- Memory - After many hours of profiling we noticed that it wasn't being recycled efficiently
- Gifs - Nobody uses it, so we thought we'd improve it (because we never learn)
- Gestures - As above, and for the same reason.
2013
January - Working hard on the iPad version - DoodleFlick Biggie is its name - we discovered that Apple's advice that iOS apps should be release as dual-use, whenever possible, was very difficult to follow with this graphics-intensive app.
Almost every screen (UIView to Xcoders) needs to be rejigged to take advantage of the iPad's size. In the end we gave up and decided to fork the development. Maybe one day...
February - Unforeseeable delays! Our lead developer took time out to install a
Velux
window in his roof (sounds complicated) and then our "camp cook" suffered a
fractured clavicle. We persevere!

March - Leap Motion invited a few select developers to get to work on their interesting new motion-detecting device. We believe that we were chosen to participate because DoodleFlick is so cool. Could this be the beginning of DoodleFlick 3d?
April - Yes, it appears. DoodleFlick is making its way to the Mac
May - Loss of our Turkish coder to the struggle against fascism in his home country. He's been wrapped up in the occupation of Taksim square
June - We are making our doodles
dance!
July - Temporarily abandoned work on the Leap Motion controller when a step upgrade in the driver caused all of our hard-won listening software to go deaf!
August - The programmers have decided to swap vacations for go-slows. That's nice for them and saves them a load of money, but doesn't help any interesting animation software make it to the light of day. Shame on them!
September - Outbreak of fecklessness turns our employees into zombies. They were never going to amount to much anyway.
October - Selecting from a list on cocoa touch is cumbersome so we built a selector
in the style of the one used by Fallout

November - The Hallowe'en season always seems to bring out the spooky side of our animation ideas. But this year we just used a cool trick to make a light sculpture out of a pumpkin
December - When the mood of Scrooge makes its annual appearance, we refuse to submit, for a while. Then we just can't help but loathe the insistent, hyper marketing that takes over every media outlet until, abruptly after Christmas, it simply fades into furniture sales.
2014
January - Clips allow short repeating sequences to be embedded within a track.
February - Multiple tracks with their own settings enable animators to overlay doodles.
March - Time to apply animated GIFs (soft G) to the rewarding activity of language learning. Flashcard systems like Anki allow the student to attach graphics to their cards. What better way to remember action words than an animated GIF?!
April - But some of us are interested in web apps and, for their sake, we've started reducing our focus on objective-c and turned our gaze towards html5!
May - and here it is. (Well, at least a demonstration of the principle)
June - Animations can be quite emotional
so we've attempted to make an animated list
of them here
Jul- Our background artist is having another exhibition so we have rebuilt her website using Javascript to build the html dynamically. Much easier to maintain!
July - Who knows what happened in July this year?
August - We generally avoid messing around with music, but when one of developer's started moonlighting
as a lounge pianist, we thought that it was time to develop an app to
help carry a load of musical scores on a phone.
September - Vancouver
was where many of DoodleFlick's concepts took root. This month saw one
of our minions head to great quiche-eating la-la land for consultation with one North
America's most original thinkers,
Erik Whittaker.
October - This site uses the Zend php framework to drive its in-app purchases, but we were very impressed by the work from codeigniter with its lightweight mvp paradigm.
November - When we're avoiding work, we're pleased to be situated in the West Country (image from the
Daily Mail) where there are pretty views to keep our visual cortex pleasantly
occupied while we fret about implications of our design changes.

https://www.flickr.com/photos/28752865@N08/9694525094, by Karen Roe
December - Apple try to wring money out of their customers by prodding them into upgrading their software and, consequently, buying the latest hardward. Tricky for us, churning our old products, but we've created a nice, shiny selector for iOS 7.
2015
January - We have always wanted a larger audience (than the robots who are, currently, the only
things that browse this site) so one of us has written some pointless eye-candy
here 
February - At Doodleflick we care so much about quality that we are unable to complete any work without fretting over it for days.
March - .htaccess is the 'front desk' of a REST enabled application. It directs the server to call up pages based on the instructions contained therein.
April - The White Hart in Somerton is this Spring's choice for a nice lunch on the way to the extreme Southwest of England, where men are manly and kids are childish.
May - Some doubts about time travel are based in our discomfort at breaking established, testable laws of physics. Conservation of momentum (objects don't change change direction on their own) and action-reaction, both from Isaac Newton, would have trouble with a person standing in a time capsule, sitting on Earth, speeding around the sun, suddenly moving in at a completely different direction, although in the same location relative to earth, but at a different point in the planet's orbit/daily rotation etc.
Similarly Einstein's famous equation of mass and energy presumes that matter cannot move faster than light, the energy of a system is presumed to be constant over time, and other difficulties are troubling for us.
So let's attempt to skirt around these problems with tangible objects, and focus on information. However we travel through time, with or without lugging our bodies, we require a transfer of information between temporal locations. We can make it as simple as possible by considering a machine that only transfers numbers. It has a simple display showing it's current value, let's make it a positive integer, a keypad to set its value, and a send button that sends the value forward or backward in time.
This machine works perfectly well when travelling forward in time. We enter the value, wait a minute and voila! the value is still on the screen. This is the trivial case of forward time travel. Even after thousands of years, assuming our machine is kept running, some future historian can look back and see exactly what we entered.
Now we'll deploy the non-trivial case of travel into the past. We'll wait in front of the machine for the number sent by our future selves, then a minute later send it back to our past selves, creating a neat circle of time travelling information. So we switch the machine on and it shows the default zero, wait for the time we've agreed that our future selves will send a value, confirm it, and then send it back to our past selves. Now we might be disappointed to see the zero unchanged, in which case we simply wait, then press the send button a minute later, but it's unlikely to convince anyone that the machine is anything more than a digital display.
To improve the test, we'll ensure that the machine's value changes by adding 'one' to the value we receive, then pressing send after a minute. Now we have a paradox. Whatever number, N, the machine returns, it must have been N-1 a minute before, but as it's looping recursively, the N-1 must have been zero at some stage, at which point it didn't work, because the machine only allows positive integers, and the previous number can't have been -1.
June - Fermat's last theorem was solved by Andrew Wiles, using an implausibly complex proof. A corollary of the theorem is the Martini conundrum. If you have a Martini glass marked up it's side at equal intervals, and you discover the perfect mix by filling it with Vermouth to mark N, and further adding vodka to mark P, then you will never be able to scale up the measurements using the same intervals.
July - It turns out that there are an unknown number of pentagons that "tile the plane". Pretty cool!
August - In England
from https://www.flickr.com/photos/39415781@N06/9422179761 by ell brown, licensed under CC BY 2.0.
September - We need to fix some design flaws that were committed into our application in the past. Would it be possible to travel into the past to sort these bugs out, or would that create an impossible paradox?
October - Our most junior developer was sent to the Hogeschool in Amsterdam to study International Business but we since discovered that he was spending all his time here!
November - We like the Peterson Graph.
![]()
Petersen1 tiny by
Leshabirukov
Own work by uploader based on
https://en.wikipedia.org/wiki/File:Heawood_Graph.svg.
Licensed under
CC BY-SA 3.0
via Commons.
December - Some of our developers are "politically correct" and prefer the term Winterval but we'll stick with Christmas.
2016
January - Because Node.js uses an event-driven, non-blocking I/O model, we considered it for our web development, but then discarded it because we're too dim to understand what event-driven, non-blocking I/O means, and also after we read this.
February - Here's some more on Node.js
March - Because Doodleflick uses a proprietary algorithm to analyse doodles, we take a great interest in anything similar; that's why we spend a lot of time here.
April - Is Google's Tilt Brush something we should look into at DoodleFlick's?
Have a look at this video to see what we're thinking.
May - At Doodleflick we are concerned with "concerns". In software terms this might mean anything from general storage mechanisms to low-level calculations, depending on the level of detail the developer is working on.
In most cases software can be logically separated into different units (sections of code), which deal with separate concerns, and thereby avoid the need for the units to know particular information addressed by a other units.
June - "Separation of concerns" is the term Edsger Dijkstra used to describe the motivation for modular code, which allows the programmer to reduce the complexity of the system being designed. "Coupling" occurs when different concerns are engaged within a single module and highly coupled code is notoriously difficult to disentangle and extend.
July - from wikipedia, "Cross-cutting concerns" are aspects of a program that that affect other concerns. These concerns often cannot be cleanly decomposed from the rest of the system in both the design and implementation, and can result in either scattering (code duplication), tangling (significant dependencies between systems), or both.
August - A squad went out on ops - 7 of 'em in exos. They got to the target. We could hear 'em… we could see the ordnance three miles away. It was over so fast. Pow pow pow, four maybe five big, big flashes, and then some. There was radio chatter and then - they were calling in hit - the exos were sending May Days. Their voices went dead - the men. The exos were still sending data, but it was all fucked up, all confused. The drones were down. And half an hour later they came out of the woods - the exos - at a trot, carrying their pilots, alarms flashing. All dead. All burnt and shot to hell. Fuck. Bobby and the guys just pressed the release and the pilots… The pilots just fell out, still smoking.
September -
When we watch film footage from the Great War or around that time, we can clearly make
out individuals, architecture, animals and machinery. The films were made in black and
white and often have no sound so they often overdubbed with soundtracks of marching,
gunfire or celebration, and some colourization techniques have been mildly successful
in rendering the scenes more realistically. We're at the point where history can be
synthesized. Is this a kind of synthetic Time Travel?
October - A design pattern is the
re-usable form of a
solution to a design problem. The idea was introduced by the architect Christopher
Alexander and has been adapted for various other disciplines, most notably computer science.
November - This month
the team was diverted by the Tank Museum
because most computer programmers (or "software developers") are nerds at heart.
December - Millions who bemoaned the US election result have taken comfort from the thought that, after The Donald commits some serious blunder, the dupes who voted for him will wake up to their folly, the scales will fall from their eyes, and they will think twice, in future. Experience suggests that, on the contrary, his supporters will just blame someone else.
2017
January - As educated, well-traveled world citizens, the development team don't generally fall for conspiracy theories, like 911. In the States, if you're going to gear the country up for war there's no need to stage an atrocity. It's sufficient to show a jihadi gobbing on the American flag to get half the population cheering on the bombers. So why kill your own people in an operation that could easily unravel?
Also, if you want to invade Afghanistain and Iraq, while bolstering hatred for Iran and Palestine, wouldn't it make sense to place at least one dude from those countries on the team? We don't want to go overboard and have an entirely Palestinian team or anything. The people aren't stupid! But come on, most of them were nationals of a strategically imporant ally.
February - Returning to software development, which is what we sometimes do, the observer pattern is a software design pattern where one object (the subject), maintains a list of observers, and notifies them when something changes, usually by calling one of their methods.
Like idiots we started with a botched implementation of this pattern. Now we're fixing it. Repent at leisure
March - Michel Thomas is a character worthy of a movie. But is it true?
We don't know, but one of us is using his method to learn a foreign language. It's the opposite approach to Babelfish. He leverages cognates (same sounding and meaning words) to get the student talking in very short time.
April - Despite trying to get traction with our desktop client of Doodleflick (for pros!), we find ourselves increasingly concerned with website development. Is this a permanent thing?
May - We avoid international travel, being tree-hugging hypocrites, but it's sometimes necessary and some of us have had to get new passports. They now come with a built-in biometric identifier, designed by idiots so that they can be read by anyone with the right equipment. At least we didn't get the wrong kind.
June - Once armed with passports, we are able to travel abroad. At Doodleflick we predict that
this is going to become redundant, thanks to the morons (can they be they same people who
devised the passports?) who have decided to leave the European Union

July - Charlie Garde died this month. The little boy was born with a complex, congenital disease that brought him so close to death that the hospital treating him decided to take him off life support. The parents objected. They were offered speculative treatment in the United States where "life is sacred". Tricky.
August - To wind down, some of the team entered a race in Whitby. As clearly demonstrated by some of the barges, sailing is still firmly fixed in the past, but what about these sailboats with wing sails?
September - For our end of the summer jolly we took a trip to le Mont Saint-Michel. It consists of
leucogranite, which solidified from an underground intrusion of molten magma about 525
million years ago, during the Cambrian period
https://commons.wikimedia.org/w/index.php?curid=1190649 - Uwe Küchler
October - In fact, we've had it with coding and have become more interested in traditional buildings, like the cob walls found in the southwest of England.
November - The Turkish language is very logical and elegant. That's why we put so much store in our Turkish programmers. For example : Siz o zaman orada imişsiniz. = It is said that you were there at that time.
December - PV. Artists often have a "Private View" of their work on the first day of an exhibition. The French call it a "vernissage", as in varnishing, where wine is the varnish. We took the crew to this one.
2018
January - We like maps here, and spend many hours plotting routes on them, rather than simply flick on the SatNav. But this map lets you travel in time!
February - Dieting for Lent. There's strong evidence that the body benefits from some fasting. Is the pain worth it? I suppose it depends on the individual and how porky they are.

March - Dieselgate - Our German allies, previously known as the Krauts, are stereotyped as honest to a fault, but the engineers at Volkswagen were devious bastards of the highest order when they built a test evasion condition into their pollution reduction system. It seems that Rudolf's system is simply unable to work without whacking great gobs of soot.
April - The real-world coding cycle:
- System is (re)written.
- The original "architects" eventually leave the company one by one.
- The "new" guys say "this is shit, let's rewrite it it in a new perfect way with all the new technology"
- return to (1)
May - "Birds sing about their nests." It sounds like someone has been drinking Electric Kool-Aid, but the idea encapsulates the relationship between motor skills and other neurological processes dedicated to patterns. The ability to weave twigs and strips of material into a solid structure, like knitting - pearl eight, drop one, requires a neural system or systems, with properties that can "bleed out" into other cognitive processes. Almost all song-birds weave nests.
June - Edouard's law? The processor scale of integrated circuits reflects the dimensions of their problem space.
- A 4 bit processor can control a switch, or a hexadecimal digit on a display. This is like a single point, or 0D problem.
- An 8 bit processor can control a line of text, which approximates to one dimension.
- With 16 bits we can work in two dimensions, on a whole page of text or an image.
- 32 bits lets us work on 3D images or moving images, which are both 3D.
- A 64 bit processor provides the horsepower necessary to run moving, 3D images, like immersive games.
- By extension, what maps to 5 dimensions, such that we need a 128 bit processor? Abstract pondering aside, it's beyond a human's cognitive ability, so I propose that there will never be much demand for it apart from in high end workstations.
July - Fermat's Final Martini? Agent Double-0 Zero has a favourite recipe for a vodka
martini, mixed in a conical measure with evenly spaced gradation lines. He pours the
Vermouth up to line x, then adds vodka until it reaches line z. One day, after a botched
operation following too many drinks, he's captured. Before execution he's asked
"Any final requests?" and replies by demanding a martini, with
his favourite, exact proportions, x and z. Then he adds "And as it's my
final drink, could you please pour the vodka first?"
This is impossible
as the line y must be (z^3-x^3)^(1/3).
By Fermat's final theorem y is
irrational. There is no line y! Instead, after a few tries, they say "Ha ha!
You win again Oh Oh Zero," then laugh uproariously after they shoot him in
the head.

August - After a long, hot summer (the Brits go on about how great it was in '76 - fondly remembering the drought) our minds are again on solar cars. One objection is that pasting photovoltaic panels onto a car won't provide sufficient power to drive it along at realistic speeds. That may be true but ignores the fact that most cars sit outside all day long. With sufficient battery storage an electirc or hybrid vehicle could store enough solar energy to drive it to work and back.
200 watts x 8 hours = 1.6 kilowatt hours = almost 20 kilowatts for 5 minutes(!)
September -
(Ruth Hartnup Flickr https://www.flickr.com/photos/95142644@N00/9241724598)
September - Howe Sound in the Pacific Northwest
(from britishcolumbia.com)
October - The borders between English counties, such as this one between Dorset and Devon,
can be neglected, and all the better for it. (from
Monkton Wyld)
Path through Buriton Woods 4 - https://www.flickr.com/photos/24350382@N07/5104049747
November - A whole century after the end of the Great War, (very basic) artificial intelligence has been put to use bringing old film footage back to life by cleaning and colourising. In Peter Jackson's "They Shall Not Grow Old" human judgement is leveraged with computer processing. It can't be long before AI is used to break down a film sequence into separate objects, the surface texture and lighting extracted, and the whole reconstructed in CGI to enable high-quality re-enactments.
December - a fencepost error can occur if a person makes an intuitive supposition that a fence only needs as many posts as dividing the length by the length between posts. If the fence is not an enclosure, it needs an additional post at the end. This is a common bug in computing and the team at Doodleflick check for these kind of faults before they release their code for general use.
2019
January - January - Bitcoin is a clever idea with a malign impact on society. At Doodleflick we couldn't give a shit about privacy if that means the ability to transfer capital anonymously.
February - GIF (with a soft g) is a compact, popular image format that supports animation. Our earlier iOS effort supported an animated GIF generator that comprised awkward upload, process, download steps. Very clunky, and Apple's development framework has advanced significantly since then, making it easy to create various formats without connecting to the network.
March - Usk is not a common name, but it's definitely an interesting one, and the
place is a (yet another) picturesque part of Wales.
from https://commons.wikimedia.org/w/index.php?curid=141383620 - Greg Fitchett
April - Within the team there exist those who enjoy the diversion of sci-fi and thriller films, but as we are (ahem) mostly deep thinkers, we're a bit tired of the zombie trope. The worst of these is the way that the first character to be bitten takes far longer to fall to the illness and, as the characters fall, it takes progressively less time, to the point that they are instantly rabid near the end.
May - A creative consultant from Vancouver visited the team this month. He lived in a
part of the city known for its relative poverty. That was almost thirty years ago
and we know that Canada has been attempting to tackle the problems of drug abuse
in the meantime. This is what it looks like now
(from Google maps)
June - The Cotswolds is a small, pleasant part of England sitting on an
escarpment along the river Severn. It
offers many views like this (from pinterest)
(geograph.org.uk Roger)
July - While we're on pleasant parts of England, Hollocombe Water is a stream in Devon
that runs through Horry Mill
- https://www.sitebites.co.uk/tips-from-the-sitebites-studio/image-copyright-tips/
- https://search.creativecommons.org
- https://parish-council.website/using-images-on-your-website-copyright-issues/
- https://www.dacs.org.uk/advice/articles/websites-social-media-and-copyright