Learning Theory (Vol. 1)

(This applies to most skills in general, be it e-sports, physical sports, music, etc. and even architectural thinking, competitive programming, software engineering and whatnot)

Really, how does the body actually do that?

“I actually consciously look at the falling notes and think to myself that I must press down my right ring finger then my left index.”… Says nobody ever. NOBODY.

So, you want to be a Pokémon master? Well well, let’s talk about…

  1. Conscious vs unconscious mind
  2. Crystalized vs liquid intelligence
  3. Progressive overload
  4. Break down and drill
  5. Fresh vs tired
  6. Repetition
  7. Speed vs accuracy
  8. Bored vs surprised
  9. Promises
  10. Resting
  11. Rewards

Conscious vs unconscious mind

Conscious mind is general purpose (think CPU).

It can do everything, but it is slow and requires mental effort.

Skill output from conscious mind often has low parallelism (can’t multitask well), and is inconsistent and unreliable.

Unconscious mind is purpose-built (think GPU, or more accurately FPGAs or ASICs).

It can’t do most things, but whatever it can do, it does them really well and effortlessly.

Skill output from unconscious mind often has high parallelism (can multitask well), and is consistent and reliable.

(Unconscious mind is used interchangeably with subconscious mind)

Key Takeaways:

To master most skills – we first understand its intricacies and learn the right form with the conscious mind, then shift / drill it into the unconscious mind for execution.

Crystalized vs liquid intelligence

Crystalized intelligence determines how much you already know. In general it breaks down over time, but is relatively permanent with periodic refreshing.

Liquid intelligence determines the rate at which you can learn and adapt. In general, it decreases with age, but having more crystallized intelligence can also help you crystalize liquid intelligence more efficiently.

As an example…

On average, a younger person picks up new dance moves faster than an older person – Liquid intelligence decreases with age.

However, an older dancer with more moves under his belt can pick up new dance moves faster than a younger person who knows fewer dance moves – Liquid intelligence crystalizes more efficiently with more crystalized intelligence.

Key Takeaways:

“The more you know, the faster you learn. The faster you learn, the more you know.” – Kelvin Ang

Aim to learn broadly, even if it’s a bunch of easy skills. It will eventually aid you in learning the harder skills. Move on and learn something else if you’re stuck with something.

Progressive overload

While it is difficult to change the amount of liquid intelligence a person has, you can directly and artificially boost the amount of crystalized intelligence by focusing on the lowest hanging fruits first. This in turn allows liquid intelligence to crystalize more efficiently.

In other words, having a strong foundation in easier skills allows you to learn harder skills more quickly and with greater quality than if you were to jump straight into the harder ones.

Key takeaways:

When learning any skill, focus on the low hanging fruits / easier skills and learn and master as much of them as possible to allow you to learn the harder skills more easily.

Build your own learning list in terms of difficulty, and learn them in order (remember to rearrange if you find that some tricks are harder than you initially thought).

Break down and drill

When learning a skill, we are usually motivated by the end result (watching a very cool trick, a very skilful execution of something, etc.), and we’re usually tempted to jump straight into attempting the end result.

Most difficult skills are usually a compound of many constituent skills, and their original inventors usually discovered them after knowing the constituents.

It is very important to keep this in mind, and be able to break down a complex trick into discrete small steps that you can practice with drills, which you can later combine back into the whole trick.

An example of breaking a trick down:

  • A [full cab no-comply] is just a [backside 180 pivot] followed by a [frontside no comply 180] so you can drill those first.
  • A [backside 180 pivot] is simply a larger [backside kickturn] so you can drill that first.
  • A [frontside no comply 180] is just [stepping off to the right with the front leg], followed by a [frontside 180 pop with the rear leg], followed by [hopping back onto the board with both legs], so drill those separately.

Other than drilling broken down steps of a trick, it is also important to do fundamental drills. Think of a pianist or a singer doing scales.

Key takeaways:

Break down tricks into smaller steps and drill them separately before combining them back.

If a particular step is too difficult, continue breaking it down or do a nerfed version of it first (e.g. doing steps on grass, doing on flipped board, etc.).

Remember to drill foundational skills for widespread general benefits, much like how a pianist or singer practices scales.

Fresh vs tired

Doing something while mentally fresh (like in the morning, or in the beginning of a session) naturally allows you to use more of your conscious mind.

Doing things while mentally tired (like at the end of a tiring work day) naturally forces you to rely more on unconscious mind for application of skills.

Alcohol artificially inhibits your conscious mind (causing you to use more of your unconscious mind), so you might find that alcohol may allow you shoot better in a game or have better game sense or “gut feeling” in a game you already know, but cause you to suck badly in a completely foreign game or task.

Caffeine on the other hand artificially boosts both your unconscious and conscious mind, allowing you to squeeze in some extra progress.

Key takeaways:

When you’re mentally fresh, your conscious mind dominates, so aim to learn new skills and find more details.

When you’re mentally tired, your unconscious mind dominates, so aim to solidify your existing skills.

Repetition

There are two goals to repetition.

Initial repetition with conscious mind helps you understand intricacies of something and to be “able to do it“.

Further repetition trains your unconscious mind to take over tasks from the conscious mind, to be “able to do it without thinking“.

Be wary when using repetition. Repetition eventually trains things into your unconscious mind, even if it is not done correctly. This negatively impacts the learning and causes progress to plateau – “I attempted this 500 times, every day, but still making very minimal progress“.

Key takeaways:

Do repetitions early in the session to learn new tricks, and focus conscious effort on building the right form.

Do repetitions later in the session to master new tricks, but avoid long-term repetitions with the wrong form.

Speed vs accuracy

Once a particular trick is possible (but not perfect), it is easy to forget about accuracy and jump straight to doing it fast.

However, it is important to remember that repetitions with bad form causes the bad form to stick, and doing it faster just causes it to stick harder.

Unless a skill is inherently speed oriented, it is most important to focus on form and accuracy first, and only increase speed if you can do it while maintaining form and accuracy.

Form and accuracy comes from conscious effort. Speed is naturally achieved from unconscious effort.

If needed, use a spotter, video recording or mirror to ensure that you are keeping up with or progressing towards the right form.

Key takeaways:

Focus on form and accuracy over speed unless the particular skill requires speed, and never intentionally increase speed while forgoing form and accuracy.

Have a spotter, or use video recording, to ensure that you are always using the correct form.

Bored vs surprised

When you repeatedly do something, you start to get bored. Your conscious mind is disengaged. As a result, you stop noticing details, leading to less improvements.

Repetitions in boredom causes bad habits to stick if you’re not already doing the right thing.

You can repeatedly trick yourself into a surprised state by doing circuits. This allows you to learn quicker.

When doing each set of repetitions, your conscious mind is usually more engaged in the beginning of a set, while it gradually disengages towards the last few reps in a set.

Therefore, within each circuit, use shorter sets help to learn, and longer sets help to remember.

Key takeaways:

To improve quickly and avoid bad habits, always shake things up to keep your mind engaged. Use circuits, rotations, challenges, etc. to “surprise” your mind, and add new tricks into your mix. Avoid letting yourself feel “bored”.

Within each circuit, use shorter sets to learn, and longer sets to remember.

Promises

Pushing your limits is important, but it is often very easy to cut yourself some slack and give up too early, especially when it gets tough.

Making promises helps to push you past your limits, and keeps you focused on achieving more than you normally would.

You can make yourself a promise by setting a target repetition count (“I’m going to do 100 of this trick now“), or better yet, a training schedule or strategy.

You can reinforce promises by telling it to someone else, and it works especially well if you also tell the person when you’ve completed the promise.

An intermediate strategy, almost as effective as making a promise to someone else, would simply be to say or announce your repetitions verbally when you’re doing them.

Key takeaways:

To push yourself past your limits and keep yourself focused, declare what you want to do before you do them, count out load verbally, and tell someone else exactly what you want to do before and after you do them.

Resting

It is common to be surprised by unexpected improvements whenever you go for a short break, or when you try something again the next day.

Neurons make new connections over time, even when resting, to prepare for the next encounter. Coupled with being fresh and surprised after a rest, you’ll usually get a boost in performance and learning rate.

In general, practicing 1 hour per day over 5 days yields greater results than practicing 5 hours in one day. Spreading a difficult trick over a few sets or days lets you improve more quickly than stagnating on it for an entire session. Effectively, we can combine the advantages of resting, surprise and freshness.

If you want to learn a manual, throw it in occasionally during your sessions, and do it often and across many days, instead of focusing entire sessions on the same manual.

Key takeaways:

Spread difficult tricks you want to learn throughout your session, and across many days. Mixing in 5 difficult skills that you want to learn into your sessions often yields better results than focusing on just one in an entire session.

Rewards

No matter how good or how fast of a learner you are, there will eventually be a time when it becomes a grind towards minuscule improvements.

Without something internally or externally motivating you, you’ll eventually dry out and stop.

Let’s be real here. Most skills and talents are meant to be shared, witnessed, or used competitively.

The easiest way to keep yourself on fire is to incorporate social aspects to your game – post videos of yourself in social media, have friends or communities that share the same interest, get your friends to play, compete in ladders and leagues, etc.

Key takeaways:

Unless you already have some really strong and permanent internal motivation for training, it is important to integrate social aspects in your game to keep yourself motivated.

Post on social media, be part of a group or community or create one, rope your friends in, compete in ladders and leagues, etc.

In all chaos there is a cosmos, in all disorder a secret order

Hundreds of vectors joined head-to-tail, each rotating at a constant rate, unknowingly drawing the symbol of chaos in a surprisingly orderly fashion. Explanation: The Fourier Series.

\[ f(t) = \sum^\infty_{n=-\infty} c_ne^{\frac{2n\pi}{T} it} \] \[ c_0 = \frac{1}{T} \int^T_0 f(t) dt \] \[ c_n = \frac{1}{T} \int^T_0 f(t) * e^{-\frac{2n\pi}{L} t} dt \]

The Fourier Series

In the beginning, Fourier was trying to solve the Heat equation, which is a PDE describing how heat, with an initial distribution, propagates through a medium over time.

\[ \frac{\partial}{\partial t} T(x, t) = \alpha \frac{\partial^2}{\partial x^2} T(x, t) \]

The above equation says that:

The [rate of change over time of heat at a particular point x in the medium] is proportional to the [rate of change over time of heat gradient at a particular point x]

If you can find any T(x, t) that satisfies the above equation, and satisfy the initial and boundary conditions, then this T(x, t) can describe the way the heat distribution changes over time.

To start off, Fourier noticed that if we have an absurd initial heat distribution that looks exactly like a cosine wave with amplitude h, we can show that it satisfies the Heat equation.

Let:

\[ T(x, 0) = h cos(x) \]

Then:

\[ \frac{\partial}{\partial t} T(x, 0) = \alpha \frac{\partial^2}{\partial x^2} T(x, 0) \] \[ = \alpha (- h cos(x)) = -\alpha T(x, 0) \]

The above equation says that:

The [rate of change over time of heat at a particular point x in the medium] is proportional to the [heat at a particular point x in the medium]

This means that whatever cosine of arbitrary amplitude we start with, we’ll just get the same cosine with shorter amplitude in the next timestep. This is recursively true for all t >= 0.

Therefore:

\[ \frac{\partial}{\partial t} T(x, t) = -\alpha T(x, t) \]

Note that the above simply describes exponential decay over time. The solution for the above is simply:

\[ T(x, t) = C e^{-\alpha t} = h cos(x) e^{-\alpha t} \]

But to really solve a PDE, we also need another ingredient in the recipe: The boundary conditions T(0, t), T(L, t).

To find T(0, t) and T(L, t) for the Heat equation of a medium of length L, observe that if we split the heat distribution along the length of the medium into infinitely many points, the temperature difference between the last two points on both edges always approaches zero.

Therefore:

\[ \frac{\partial}{\partial x} T(0, t) = \frac{\partial}{\partial x} T(L, t) = 0 \]

We need to verify that our function T(x, t) also satisfies the above.

\[ \frac{\partial}{\partial x} T(x, t) = -h sin(x)e^{-\alpha t} \] \[ T(0, t) = T(L, t) = 0 \] \[ \iff L = n\pi \text{ for any integer } n \]

Evidently, our function T(x, t) only satisfies the boundary condition for very specific medium lengths L where L is a multiple of π.

To get around this, we can scale our cosine function to have a period that matches any medium of length L:

\[ T(x, t) = h cos(\frac{2\pi}{L} x) e^{-(\frac{2\pi}{L})^2 \alpha t} \]

Notice that if we scale the cosine in this way, the second partial derivative with respect to x will end up with an extra constant term. To ensure that the partial derivative with respect to t matches, we will also have to add that scaling into the exponential term.

\[ \frac{\partial}{\partial t} T(x, t) = \alpha \frac{\partial^2}{\partial x^2} T(x, t) \] \[ = -\alpha h (\frac{2\pi}{L})^2 cos(\frac{2\pi}{L} x) e^{-(\frac{2\pi}{L})^2 \alpha t} \]

In fact, we can have infinitely many solutions that can satisfy the boundary conditions for a medium of length L. More generally, we can have:

\[ T(x, t) = h cos(\frac{n\pi}{L} x) e^{-(\frac{n\pi}{L})^2 \alpha t} \] \[ \text{ for any integer } n \]

With this, we actually have the solution to describe ALL cosine shaped heat distributions that start with the amplitude h and period L, over a medium of length L and thermal diffusivity a.

We can currently only solve heat distributions in the shape of cosines with very specific periods. How can we solve the Heat equation for anything?

Fourier noticed that if we have two initial heat distributions T_1 and T_2:

\[ T_1(x, 0) = h_1 cos(\frac{\pi}{L} x) \] \[ T_2(x, 0) = h_2 cos(\frac{2\pi}{L} x) \]

We can make a third initial heat distribution T_3…:

\[ T_3(x, 0) = T_1(x, 0) + T_2(x, 0) \] \[ = h_1 cos(\frac{\pi}{L} x) + h_2 cos(\frac{2\pi}{L} x) \]

… and we immediately have the solution for it:

\[ T_3(x, t) = T_1(x, t) + T_2(x, t) \] \[ = h_1 cos(\frac{\pi}{L} x) e^{-(\frac{\pi}{L})^2 \alpha t} \] \[ + h_2 cos(\frac{2\pi}{L} x) e^{-(\frac{2\pi}{L})^2 \alpha t} \]

Due to linearity, any initial heat distributions described by the sum of any of these cosine waves with specific periods can be solved by the sum of all their solutions.

BUT… that’s not very useful yet.

At this point, Fourier asked a really absurd question: “If we can describe any heat distribution solely by summing arbitrarily many of these cosine waves of specific periods and arbitrary amplitudes, how can we write that down Mathematically?”

The general solution of the Heat equation:

\[ T(x, t) = \sum^\infty_{n=0} a_n cos(\frac{n\pi}{L} x) e^{-(\frac{n\pi}{L})^2 \alpha t} \] \[ = a_0 cos(\frac{0\pi}{L} x) e^{-(\frac{0\pi}{L})^2 \alpha t} \] \[ + a_1 cos(\frac{1\pi}{L} x) e^{-(\frac{1\pi}{L})^2 \alpha t} \] \[ + a_2 cos(\frac{2\pi}{L} x) e^{-(\frac{2\pi}{L})^2 \alpha t} \] \[ + … \]

Of course, whether this could work was still unknown to him at that time. Besides, even if we knew the individual periods of the cosines that make up the solution, we will do not know the individual amplitudes a_n.

What we really want to find out first is how we can represent an initial condition with cosines, so we can simply ignore the t terms for now.

\[ T(x, 0) = \sum^\infty_{n=0} a_n cos(\frac{n\pi}{L} x) \] \[ = a_0 cos(\frac{0\pi}{L} x) \] \[ + a_1 cos(\frac{1\pi}{L} x) \] \[ + a_2 cos(\frac{2\pi}{L} x) \] \[ + … \]

Now, let’s think about what these a_n terms actually mean. In particular, we look at the first term a_0.

Clearly, the entire first term is a constant as a_0 is a constant and the terms on the right evaluates to 1. But what does it really mean?

If we think about what happens when t is very large, we can see that every subsequent term falls to 0, leaving only the a_0 term remaining (i.e. the heat along all points on the rod is constant).

Therefore, a_0 is actually the average heat of the medium. Another way of expressing an average is through an integration:

\[ a_0 = \frac{1}{L} \int^L_0 T(x, 0) dx \]

The Fourier observed that every other term in the summation goes to zero when summed over the length of the medium as all the chosen cosine functions are odd:

\[ a_0 = \frac{1}{L} \int^L_0 T(x, 0) dx \] \[ = \frac{1}{L} \int^L_0 \sum^\infty_{n=0} a_n cos(\frac{n\pi}{L} x) dx \] \[ = \frac{a_0}{L} \int^L_0 cos(\frac{0\pi}{L} x) dx \] \[ + \frac{a_1}{L} \int^L_0 cos(\frac{1\pi}{L} x) dx \] \[ + \frac{a_2}{L} \int^L_0 cos(\frac{2\pi}{L} x) dx \] \[ + … \] \[ = \frac{a_0}{L} \cdot L \] \[ + \frac{a_1}{L} \cdot 0 \] \[ + \frac{a_2}{L} \cdot 0 \] \[ + … \] \[ = a_0 \]

Applying Euler’s formula to convert our cosine into an exponential pair, we would expect our previous averaging formula to still hold:

\[ a_0 = \frac{1}{L} \int^L_0 T(x, 0) dx \] \[ = \frac{1}{L} \int^L_0 \sum^\infty_{n=0} a_n (e^{\frac{n\pi}{L} ix} + e^{-\frac{n\pi}{L} ix}) dx \] \[ = \frac{a_0}{L} \int^L_0 \frac{1}{2} (e^{\frac{0\pi}{L} ix} + e^{-\frac{0\pi}{L} ix}) dx \] \[ + \frac{a_1}{L} \int^L_0 \frac{1}{2} (e^{\frac{1\pi}{L} ix} + e^{-\frac{1\pi}{L} ix}) dx \] \[ + \frac{a_2}{L} \int^L_0 \frac{1}{2} (e^{\frac{2\pi}{L} ix} + e^{-\frac{2\pi}{L} ix}) dx \] \[ + … \] \[ = \frac{a_0}{L} \cdot L \] \[ + \frac{a_1}{L} \cdot 0 \] \[ + \frac{a_2}{L} \cdot 0 \] \[ + … \] \[ = a_0 \]

Note also, that each pair of exponentials are just odd mirrors of each other, so we can further simplify:

\[ a_0 = \frac{1}{L} \int^L_0 T(x, 0) dx \] \[ = \frac{1}{L} \int^L_0 \sum^\infty_{n=0} a_n \frac{1}{2} (e^{\frac{n\pi}{L} x} + e^{-\frac{n\pi}{L} x}) dx \] \[ = \frac{1}{L} \int^L_0 \sum^\infty_{n=0} a_n * e^{\frac{n\pi}{L} x} dx \] \[ = \frac{a_0}{L} \int^L_0 e^{\frac{0\pi}{L} x} dx \] \[ + \frac{a_1}{L} \int^L_0 e^{\frac{1\pi}{L} x} dx \] \[ + \frac{a_2}{L} \int^L_0 e^{\frac{2\pi}{L} x} dx \] \[ + … \] \[ = \frac{a_0}{L} \cdot L \] \[ + \frac{a_1}{L} \cdot 0 \] \[ + \frac{a_2}{L} \cdot 0 \] \[ + … \] \[ = a_0 \]

Here comes the genius observation that Fourier made to allow us to find any arbitrary a_n. Fourier noticed that we can use a simple trick to kill off all coefficients except a_1 – by multiplying in an additional exponential term.

\[ a_1 = \frac{1}{L} \int^L_0 T(x, 0) e^{-\frac{1\pi}{L} x} dx \] \[ = \frac{1}{L} \int^L_0 \sum^\infty_{n=0} a_n e^{\frac{n\pi}{L} x} e^{-\frac{1\pi}{L} x} dx \] \[ = \frac{a_0}{L} \int^L_0 e^{\frac{0\pi}{L} x} e^{-\frac{1\pi}{L} x} dx \] \[ + \frac{a_1}{L} \int^L_0 e^{\frac{1\pi}{L} x} e^{-\frac{1\pi}{L} x} dx \] \[ + \frac{a_2}{L} \int^L_0 e^{\frac{2\pi}{L} x} e^{-\frac{1\pi}{L} x} dx \] \[ + … \] \[ = \frac{a_0}{L} \int^L_0 e^{-\frac{1\pi}{L} x} dx \] \[ + \frac{a_1}{L} \int^L_0 e^{\frac{0\pi}{L} x} dx \] \[ + \frac{a_2}{L} \int^L_0 e^{\frac{1\pi}{L} x} dx \] \[ + … \] \[ = \frac{a_0}{L} \cdot 0 \] \[ + \frac{a_1}{L} \cdot L \] \[ + \frac{a_2}{L} \cdot 0 \] \[ + … \] \[ = a_1 \]

Thus, we now have the general formula to find the coefficients for the Heat equation:

\[ a_n = \frac{1}{L} \int^L_0 T(x, 0) * e^{-\frac{n\pi}{L} x} dx \]

Therefore, the complete solution for solving the Heat equation is:

\[ T(x, t) = \sum^\infty_{n=0} a_n * cos(\frac{n\pi}{L} x) e^{-(\frac{n\pi}{L})^2 \alpha t} \] \[ a_0 = \frac{1}{L} \int^L_0 T(x, 0) dx \] \[ a_n = \frac{1}{L} \int^L_0 T(x, 0) * e^{-\frac{n\pi}{L} x} dx \]

To generalize out of the Heat equation PDE for any periodic function f(t) of period T, we first introduce the sine components into the equation, each with its own coefficients b_n:

\[ f(t) = \sum^\infty_{n=-\infty} (a_n * cos(\frac{2n\pi}{T} t) \] \[ + b_n * sin(\frac{2n\pi}{T} t)) \]

Once again applying Euler’s formula, we can rewrite this as:

\[ f(t) = \sum^\infty_{n=0} (a_n * \frac{1}{2}(e^{i\frac{2n\pi}{T} t} + e^{-i\frac{2n\pi}{T} t}) \] \[ + b_n * \frac{1}{2i}(e^{i\frac{2n\pi}{T} t} – e^{-i\frac{2n\pi}{T} t}) \] \[ = \sum^\infty_{n=0} (\frac{1}{2}(a_n – ib_n)e^{i\frac{2n\pi}{T} t} \] \[ + \frac{1}{2}(a_n + ib_n)e^{-i\frac{2n\pi}{T} t}) \] \[ = \sum^\infty_{n=0} \frac{1}{2}(a_n – ib_n)e^{i\frac{2n\pi}{T} t} \] \[ + \sum^{-1}_{n=-\infty} \frac{1}{2}(a_n + ib_n)e^{-i\frac{2n\pi}{T} t} \] \[ = \sum^\infty_{n=-\infty} \frac{1}{2}(a_n – ib_n) e^{i\frac{2n\pi}{T} t} \] \[ = \sum^\infty_{n=-\infty} c_ne^{i\frac{2n\pi}{T} t} \]

The above is known as the exponential form of Fourier Series. To find c_n, the complex coefficient of each term, the same method used in finding a_n in the general Heat equation applies.

\[ f(t) = \sum^\infty_{n=-\infty} c_ne^{\frac{2n\pi}{T} it} \] \[ c_0 = \frac{1}{T} \int^T_0 f(t) dt \] \[ c_n = \frac{1}{T} \int^T_0 f(t) * e^{-\frac{2n\pi}{L} t} dt \]

A layman / practical interpretation of the above is…

You can break down a periodic complex function f(t) with period T into a sum of exponentials.

To find the coefficient c_n of each exponential term, simply integrate your original function multiplied by its respective exponential along the whole period.

To think that Fourier achieved this in 1822 is simply mind-blowing.

Euler’s Formula

Right. Just installed MathML block for WordPress because I want to talk about Fourier Series.

I’m just going to write a quick sidetrack required for the next post (and also for testing the MathML block).

Here’s the Euler’s formula discovered in 1748.

\[ e^{ix} = cos(x) + isin(x) \]

This can be visualized as a unit complex number that rotates clockwise around the origin on the complex plane for every increase in x.

We can reverse the direction of the rotation simply by doing:

\[ e^{-ix} = cos(x) – isin(x) \]

With this, we can easily represent any cosine as:

\[ cos(x) = \frac{1}{2} (e^{ix} + e^{-ix}) \]

Likewise, sines can be represented as such too:

\[ sin(x) = \frac{1}{2j} (e^{ix} – e^{-ix}) \]

Feel the 64GB RAM…

…3600MHz 16CL.

All this to satisfy the minimum requirements of Premiere Pro 2021 memory leak edition.

Coastline paradox – do coastlines have an infinite perimeter?

The infinite perimeter arises from the assumption that coastlines can fract infinitely (as in fractals).

While mathematical fractals have infinite perimeter, coastlines eventually will just be bounded by the perimeter of all atoms on the coast combined.

So… No, they don’t.

But you might ask how do we know which atoms do we consider part of the coastline?

That, of course, is a question best left for a debate on ontology.

Pbee Tone Generator

JavaScript frequency generator.

https://github.com/Syraxius/PbeeToneGenerator

This cute little tone generator is used for replicating a science experiment featured in a Steve Mould video.

Essentially, we generate pure tones near or close to the resonant frequency of a body of air enclosed by a membrane, causing the membrane to vibrate. Then, we visualize the vibrations through a laser beam.

Time travel / teleportation machines cannot be constructed, or this universe is not infinite

If the universe is infinite, then all possible states should exist.

If time travel / teleportation machines can be constructed, then it can be represented by at least one state.

If the universe is infinite and time travel / teleportation machines can be constructed, then there would be an infinite number of time travel / teleportation machines.

If there’s an infinite number of time travel / teleportation machines, then every point in time and space would be the target of an infinite number of time travel / teleportation machines, and there would be constant chaos.

Therefore, time travel / teleportation machines cannot be constructed, or this universe is not infinite.