---
title: "Hello!"
description: "Hi! I'm Abi, a UK-based Computer Science student, photographer and programmer."
---
{% extends "_layouts/base.html" %}

{% block head %}
<style>
    #contact:target {
        background-color: yellow;
    }
</style>
{% endblock %}

{% block aside %}
{% include "_includes/aside.html" %}
<br>
<div style="padding-top: 20px"></div>
<a href="/blog/the-modern-web-sucks"><img src="/assets/img/graphics/stamp-yrownwebsite.png" alt="maybe you should make your own website" title="Maybe you should make your own website"></a>

<div class="webring" style="padding-top: 20px">
    <a href="https://anna-maths.xyz">« Anna Williams</a> | webring | <a href="https://charliew.net/">Charlie Wilson »</a>
</div>
{% endblock %}

{% block main %}
<h1>Hi there!</h1>

<p>I'm Abi, a UK-based Computer Science student, <a href="/photography/">photographer</a> and programmer who's currently studying at the University of Birmingham.</p>
<p>You've come across my personal website, something that's existed on the internet <a href="/timeline/">in various forms and on various domains since about 2018</a>. Here, you can find some of my writing about technology and my other interests - some of which include music, photography, railways, making things and crafts - though you might not find details about everything.</p>
<p>While you're here, you might want to take a look at <a href="/projects/">some of the projects I've been working on</a>,
    <a href="/now/">what I'm up to now</a> or <a href="/blog/">a bit of my writing</a> (mostly about tech).
    There's also various other things that are discoverable through the <a href="/sitemap/">sitemap</a>.</p>
<div>
    <p class="small-margin">I exist in a few other places on the internet too - notably, as:</p>
    <ul>
        <li><a href="https://github.com/codemicro">codemicro on GitHub</a> though most of my code goes on <a href="https://git.tdpain.net">my self-hosted forge</a> primarily</li>
        <li><a href="https://news.ycombinator.com/user?id=akpa1">akpa1 on Hacker News</a></li>
        <li><a href="https://app.thestorygraph.com/profile/akpa1">akpa1 on The StoryGraph</a></li>
    </ul>
</div>

<h2 id="contact">Get in touch</h2>

<p>If you'd like to send me an email, feel free to drop me a message at <code><noscript>hello at this domain</noscript><span id="scrambled"></span></code>.</p>

<script>
    String.prototype.replaceAt = function(index, replacement) {
        return this.substring(0, index) + replacement + this.substring(index + replacement.length);
    }

    const doUnscramble = (elem) => {
        const ops = [[9, 6], [2, 4], [5, 7], [4, 8], [14, 6], [12, 4], [15, 6], [10, 2], [1, 10], [3, 8], [4, 5], [9, 8], [12, 14], [15, 4], [3, 6], [5, 3], [12, 14], [4, 9], [0, 4], [6, 2], [14, 11], [1, 2], [15, 11], [10, 1], [10, 1], [4, 7], [4, 2], [1, 13], [2, 1], [10, 4], [4, 8], [3, 1], [14, 8], [13, 2], [13, 9], [7, 0], [14, 1], [3, 12], [5, 14], [15, 2], [0, 3], [8, 12], [14, 4], [10, 4], [0, 8], [0, 6], [14, 6], [7, 5]];
        const tofn = (i) => {
            console.log(i, elem.innerText);
            let s = elem.innerText;
            const t = s.charAt(ops[i][0]);
            s = s.replaceAt(ops[i][0], s.charAt(ops[i][1]));
            s = s.replaceAt(ops[i][1], t);
            elem.innerText = s;
            if (i !=  0) {
                setTimeout(tofn, (0.02 * Math.pow(ops.length - i, 2)) + 20, i-1);
            }
        }
        tofn(ops.length - 1);
    }

    const elem = document.getElementById("scrambled");
    elem.innerText = "ieahola.pntkne@l";
    doUnscramble(elem);
</script>

{% endblock %}

{# This Python script will generate the scrambled text and output a list of alterations to put in the above

#!/usr/bin/env python3
import sys
import random

INPUT_STRING = sys.argv[1]

incp = list(INPUT_STRING)
transformations = []

for i in range(len(incp) * 3):
    a = random.randint(0, len(incp)-1)
    b = None
    while b is None or b == a:
        b = random.randint(0, len(incp)-1)

    incp[a], incp[b] = incp[b], incp[a]

    transformations.append((a, b))

print("".join(incp))
print(list(map(list, transformations)))

#}
