Mandelbrot Set Python

First let me get out the way the glaring problem of Python being a terrible language to make a Mandelbrot Set generator in. Mandelbrot Generators need speed to make the best possible images with the highest resolutions. Python, compared to a language such as C – which would be a much better language to program this project – is incredibly, incredibly slow to run. This is due to multiple things, mainly Python being an interpreted language meaning each line of code is compiled line as the program is executed, while a compiled language like C is converted into a binary file before runtime. The reason I used Python is because 1. I am a million times more competent with Python than any other programming language, and 2. Sufficient quality images can be acquired in Python in a relatively reasonable amount of time; good enough for this little experiment.

The Mandelbrot Set

The Mandelbrot Set is a set of numbers. A list of numbers which satisfy one rule. First, we must take the entire set of numbers, which in this case is a small area on the complex plain, with real numbers going along the x axis and imaginary numbers going up the y axis.

Complex numbers: the complex plane, addition and subtraction

If you throw a dart onto the complex plain, the position that dart landed can be described by taking it’s position on the x dimension and y dimension and combining them together, this is a complex number; a number combining a real part and an imaginary part.

A Mandelbrot Set generator takes every position in this plain (every complex number), with certain bounds and a set level of fidelity, and applies this formula to it.

    \[Z_{n+1} = Z_n^2 + c\]

What this does is takes the number 0, square it, and add the current complex number to it. Then it does this again, but instead of Z being 0, Z is now the number which the last calculation created. This is repeated many times and this iteration will do one of two things. First, and true for basically all complex numbers save a few around 1 to 2 x or y on the plain the iteration will blow up as it is squared over and over again, so it will go off to infinity. However, due to the nature of mathematics, there are some numbers which do not spiral off into infinity, instead doing something far more remarkable. These numbers make a series of calculations which turn into a loop, they stabilise out into a repeated pattern of numbers that never expand to infinity. Complex numbers which do this are in the Mandelbrot Set.

So, if you repeat this process over and over again for many complex numbers you create a group of complex numbers which are in the set. But a list of numbers is not very interesting. The magic happens when you give the numbers a colour, most commonly black, and place them back onto the complex plain:

The Mandelbrot Set

A fractal: a beautiful shape with infinite complexity buried in the reality of the universe.

In addition to simply colouring the numbers that are in the set black, pixels can also be coloured by taking the number of iterations it took the program before the complex number began to increase to infinity, essentially a measurement of how “stable” that position is.

By simply subtracting the red and green values of the pixel by the iteration count multiplied by some arbitrary constant to give it more of an effect, a blue colouration can be given to the space around the set:

Going even further than this, a spectrum of colours can be mapped to the number of iterations, creating some brilliantly colourful sets.

Mandelbrot Set - How to plot the Mandelbrot set
I have not added this feature to my code yet

The Mandelbrot set is just one of many fractals which can be made this way, playing around with the formula can yield some incredible results.

Z3

When you increase the power, the number of “bulbs” increases.

This website

I created this website to display the many programming/electronics projects I have done over the last 3 years.

Here is how I made it.

Inspiration

Going into the project, I already had a little experience setting up websites. I had made my own HTML website in the past and had explored using Jekyll themes combined with Github Pages to create a nice little website. The experience making the Jekyll website was admittedly quite painful at times due to my lack of understanding in the realm of web design and full-stack development.

WordPress

Inspiration

My aim for this time round was to make a simple website where I could easily create posts to create a record of projects I do in my free time, while most importantly, not becoming the disorganised mess resembling my last website. By this point, I had heard of WordPress, and was not really sure what it did or how to use it. I did know however that it was used to create exactly what I wanted on this website – something I stumbled across from YouTube.

So I began researching WordPress, discovering its two types: wordpress.org and wordpress.com. I was determined however to spend nothing on this website, so I strayed away from wordpress.com where almost everything is hidden behind a paywall.

Setup

I already had an old computer lying around so I wanted to use that as the server for the website rather than paying for third party webhosting (despite it costing very little to set up a small site). Unfortunately the population of helpful WordPress tutorials online seemed to be predominantly aimed at the paying version of WordPress, which didn’t speed things up. I did find this tutorial however, which was brilliant to get me set up but did create quite a few problems later along the line due to it being quite old and out of date.

After running into a few problems where I foolishly decided to change tutorials and installed something which confused my database software, I managed to get onto the WordPress dashboard. I began to explore and was really impressed with the ease of use of the software, and how everything was organised very well – something my last website was dearly missing.

Themes

WordPress Dashboard

Far too much time was spent on the Themes page, where I scrolled for ages looking for the perfect layout for my website. After trying a few, I began to make a few realisations. Firstly, it seemed all the themes I wanted to use where created by 3rd party companies which all had links to their own websites presenting new paywalls to unlock the full suite of functionality on their template. Another thing which bugged me was sometimes when activating a new template, an entire library of plugins where installed to satisfy the template’s requirements, making me feel even more overwhelmed by the enormous amount of pages and configuration on the WordPress dashboard.

For this reason, I decided to pick the inbuilt “Twenty Nineteen” WordPress theme, the exact same as the website previously mentioned. I really liked this theme due to its simplicity and lack of hidden paywalls due to being an inbuilt theme. Admittedly, this theme is probably very overused so to make myself a bit more unique I will undoubtedly change it in the future.

Domain

Now to buy a domain – the only thing I was forced to spend money on in this entire project. I bought the domain henrytechblog.com domain from Google Domains for £10/year and connected it up to my IP.

Let’s Encrypt

HTTPS

My website was nearly ready to go but there was one annoying thing I wanted to fix and that was the site was using the HTTP protocol rather than the far, far more secure HTTPS protocol. This meant my browser displayed a little “Not Secure” icon next to the URL – not very professional.

Going into this, I was under the impression all I had to do was flip a switch on my Apache web server, and it would start to use the safer protocol. This, it turned out, was very far from the truth. I immediately discovered that to make your site use HTTPS, you needed a TLS certificate, in order for browsers to guarantee the site was not faking it’s use of HTTPS. One of these certificates can cost from £25 – 200, a sum I certainly was not ready to pay.

Due to HTTPS effecting sites ranking in search engines, this creates an unhealthy bias against small companies which cannot afford to pay for these certificates. Enter Let’s Encrypt, a non-profit company set up to tackle this problem by basically just giving out free TLS certificates.

From there I was pointed to Certbot, an ACME client which uses Let’s Encrypt’s services to automatically applies a TLS certificate to your server, and keep it up to date. The process after that was satisfyingly simple, all I had to do was follow the tutorial on Certbot’s website, and after some brief confusion where I forgot to change my port forward to use the 443 port (default for HTTPS), I had my website using the new web protocol.

Conclusion

I am now in the process of creating articles for all the projects I have done in the past. Now, thanks to the ease of use of WordPress, I will be able to make pages on my website for the projects I do, as I do them, so they can go into more depth and detail. The future vision of this website is a platform for me to upload my experiences so they are easily accessible, and easy to give to potential jobs or universities as evidence of experience in certain areas.

Thanks for reading