feat: remove stuff; spellcheck

This commit is contained in:
Aaron Yarborough 2024-08-22 15:36:15 +01:00
parent 7e3ae3a7f0
commit c42fff09cb
14 changed files with 50 additions and 265 deletions

27
.vscode/settings.json vendored
View file

@ -1,10 +1,33 @@
{
"cSpell.words": [
"aaronjy",
"apos",
"Aurelia",
"Datatrial",
"Dirents",
"Sitecore"
"doesn",
"fiftyfiveandfive",
"Firestore",
"Goodreads",
"helpdesk",
"Hetzner",
"Integra",
"Levantine",
"Orangebus",
"pipdig",
"quot",
"Radr",
"Recon",
"Sitecore",
"sportank",
"Umbraco",
"Yarbz"
],
"files.autoSave": "off",
"standard.autoFixOnSave": true,
"prettier.enable": false,
"editor.defaultFormatter": "standard.vscode-standard"
"editor.defaultFormatter": "standard.vscode-standard",
"[javascript]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
}
}

View file

@ -1,8 +0,0 @@
---
title: JavaScript/HTML5 tile editor
desc: A rough tile editor for a top-down, 2D, tile-based browser game project.
---
I built this 2D tile editor using an HTML 5 canvas and vanilla JS in a few days, as I wanted to create a bespoke editor for my tile game rather than relying on the open-source variants. The reason for this was that I was using my own file format for level files.
[![YouTube thumbnail](https://i3.ytimg.com/vi/7w3fTHYEGbE/maxresdefault.jpg)](https://www.youtube.com/watch?v=7w3fTHYEGbE)
[Watch YouTube video](https://www.youtube.com/watch?v=7w3fTHYEGbE)

View file

@ -28,6 +28,9 @@ experience:
end: Present
desc: >-
* Leading a small team of developers on a UK public sector project for the Department for Education (DfE)
**Skills:** ASP.NET Core · Microsoft Azure · Azure Data Factory · Git · C# · Full-Stack Development · Umbraco · Web Development · Microsoft SQL Server · Cloud Development · Microservices · Technical Requirements · Agile Methodologies
- position: Software Development Tutor
employer: Yarbz Digital Ltd
start: Sep. 2023
@ -50,7 +53,7 @@ experience:
* Designed and built a proof-of-concept using Angular, Node.js, and gRPC, enabling real-time voice input streaming from web browsers to medical speech recognition software, leading to its active use by doctors for efficient communication.
* Maintained and improved the Integra Planner event management platform used by thousands of people for multi-day events, specifically for GARA Choruses.
* Maintained and improved the Integra Planner event management platform used by thousands of people for multi-day events, specifically for GALA Choruses.
* Enabled efficient event planning and management by utilizing Angular, Ionic for mobile apps, AWS, SQL Server, and .NET Core.
@ -69,7 +72,7 @@ experience:
**Skills:** Amazon Elastic Container Registry (ECR) · TypeScript · Amazon ECS · Tailwind CSS · Node.js · Amazon Web Services (AWS) · Next.js · React.js · docker · Front-End Development · NoSQL · AWS Lambda · HTML · Agile Methodologies · User Interface Programming
- position: Software Architecht
- position: Software Architect
employer: T101
start: Sep. 2020
end: Jul. 2021
@ -158,7 +161,7 @@ experience:
end: Sep. 2015
desc: >-
* I worked as an IT Support Technician and Developer Trainee. My
responsibilities included dealing with IT issues via an IT helpdesk
responsibilities included dealing with IT issues via an IT help desk
system. I also worked on improvements to internally-developed software
that was used by our Arboricultural staff. I also provided updates to an
internal MVC application used by office staff to log data, arrange

View file

@ -1,25 +0,0 @@
---
title: عرايس (arayes)
desc: Originally from the Middle East, Arayes are pita or flat bread stuffed with spiced and seasoned meat.
---
## You will need
- Lebanese bread
- 500g fatty beef
- parsley
- 1 white onion
- 2 garlic cloves
- lebanese black pepper spice
- lebanese mixed spices
- red pepper spice/paprika
- cinnamon
- 1tbsp salt
- 1bsp olive oil
## Method
1. Blend together parsley, onion, garlic, olive oil
2. Mix the meat with the spices (to taste) and mix in the mixture from the first step to make a kofta mixture
3. Stuff the kofta mix into the the lebanese bread (as thick or as thin as you like, though I prefer a thin layer of kofta)
4. Fry the kofta-stuffed bread on both sides in a thin layer of oil (or paint the oil on the bread on each side before adding to the pan)

View file

@ -1,21 +0,0 @@
---
title: Manakish (pan)
desc: Dough typically topped with za'atar, cheese or meat. A popular breakfast food from the Levant.
---
## You will need
- flower
- 1tbsp sugar
- 1 tsp yeast
- 1/4 cup vegetable oil
- 1/2 tsp baking powder
- cheese (mozarella, akkawi) or za'atar for filling
## Method
1. Mix the flower, sugar and yeast together in a bowl, and add a 1 cup of warm water. Keep mixing until it turns to a goo-like consistency
2. Cover the bowl for 10 minutes
3. Add the oil, baking powder and a further 1.5 cup of flower, and stir
4. Once the dough comes together, knead it until it is combined fully, and separate it into small blobs of dough.
5. Roll each blob out and fry it for 2 minutes on either side in the pan, adding your preferred filling on top while it's cooking (cheese or za'atar, or both)

View file

@ -1,24 +0,0 @@
---
title: Red lentil soup
desc: A simple spiced red lentil soup, based loosely on a Turkish recipe.
---
## You will need
- 2 cups red lentils (washed)
- 1 white onion
- 1 garlic clove
- 1 tbsp ginger paste
- 1 tbsp salt
- 1 tbsp cumin
- 1 tbsp olive oil
- 1/4 tsp tumeric
## Method
1. Dice the onion and fry in oil until slightly browned
2. Paste garlic and add with ginger into the pan
3. Add lentils and stir
4. Add cumin and tumeric
5. Add 6-7 cups of boiling water
6. Simmer and stir occasionally with lid on for 30 minutes
7. Serve with sumac and parsley on top

View file

@ -1,29 +0,0 @@
---
title: Spicy sausage pasta
desc: Shamelessly stolen and tweaked from Gordon Ramsay, this dish is quick to make and satisfyingly filling.
---
## You will need
- 1 red onion
- 2 bell peppers
- 6 spicy sausages (removed from skins)
- garlic (to taste)
- paprika (to taste)
- 1 cup rice
- white wine
- vegetable stock
- tomatoes
- parsley
## Method
1. Chop and fry red onion for 5-6 minutes until caramelised
2. Chop and add the bell pepper
3. Add sliced garlic
4. Turn pan to hot, and add the sausage meat and fry everything together for a few minutes
5. Add paprika (1stp, though to taste)
6. Stir in the rice and allow it to fry with everything else for a minute
7. Drizzle white wine into the pan to lift the flavour off the bottom of the pan and into the food
8. Cover everything with stick (2:1 stock to rice) and simmer until the rice is cooked
9. Add fresh sliced tomatoes and parsley

View file

@ -1,43 +0,0 @@
---
title: Doctor Who episodes ranked
pubdate: 2024-03-25T13:10:30.001Z
desc: All doctor who episodes (eventually) between 2005 and 20014 ranked into tiers.
---
# Doctor Who episodes (2005 - 2014)
All doctor who episodes (eventually) between 2005 and 20014 ranked into tiers. Anything after 2014 with Peter Capaldi as The Doctor isn't included, as they're so bad I refuse to acknowledge their existence 🤓
Tiers are:
* **S**: Stellar, amazing, groundbreaking, no notes.
* **A**: Overall pretty damn good. Not quite reaching into S tier.
* **B**: Better than the average Dr. Who episode. Nothing amazing, but a bit better than run-of-the-mill.
* **C**: Your bog-standard Who. Nothing special.
* **D**: Bit of a let-down, but we've had worse...
* **E**: Bottom of the barrel. You wouldn't watch these if you had a choice.
* **F**: Absolute dog shit, laughably bad, what were they thinking?
## The List
| Tier | Title | Season | Episode | Notes |
| ---- | ------------------------- | ------ | ------- | ----- |
| S | The Girl in The Fireplace | S2 | E4 | |
| S | Blink | S3 | E10 | |
| S | Midnight | S4 | E10 | |
| S | Silence in The Library | S4 | E8 | |
| S | The Impossible Planet | S2 | E8 | |
| S | The Satan Pit | S2 | E9 | |
| A | Dalek | S1 | E6 | |
| A | The Empty Child | S1 | E9 | |
| A | The Doctor's Wife | S6 | E4 | |
| B | The Unquiet Dead | S1 | E3 | |
| B | Father's Day | S1 | E8 | |
| B | The Doctor Dances | S1 | E9 | |
| B | Bad Wolf | S1 | E12 | |
| B | The Parting of The Ways | S1 | E13 | |
| B | Forest of The Dead | S4 | E9 | |
| C | Rose | S1 | E1 | |
| C | The End of The World | S1 | E2 | |
| C | Tooth and Claw | S2 | E2 | |
| E | Closing Time | S6 | E12 | |
| F | Love and Monsters | S2 | E10 | |

View file

@ -9,8 +9,6 @@ function Header () {
<nav>
<Link href='/'>Home</Link>
<Link href='/writing'>Writing</Link>
<Link href='/recipes'>Recipes</Link>
<Link href='/fun'>Fun</Link>
<Link href='/cv'>CV</Link>
</nav>
</header>

View file

@ -1,17 +0,0 @@
import React from 'react'
import DefaultLayout from '@/layouts/DefaultLayout/DefaultLayout'
import Article from '@/components/Article/Article'
import { getStaticEntryPaths, getStaticEntryProps } from '@/lib/content'
const CONTENT_PATH = './content/fun'
export const getStaticPaths = () => getStaticEntryPaths(CONTENT_PATH)
export const getStaticProps = (ctx) => getStaticEntryProps(CONTENT_PATH, ctx)
export default function FunSingle ({ attributes, html }) {
return (
<DefaultLayout>
<Article attributes={attributes} html={html} />
</DefaultLayout>
)
}

View file

@ -1,31 +0,0 @@
import DefaultLayout from '@/layouts/DefaultLayout/DefaultLayout'
import React from 'react'
import Link from 'next/link'
import { getStaticEntryListProps } from '@/lib/content'
export const getStaticProps = () => getStaticEntryListProps('./content/fun', '/fun/')
export default function Fun ({ entries, urlPrefix }) {
return (
<DefaultLayout>
<section>
<h1>Fun</h1>
<p>Hobby projects, helpful scripts, and other fun bits and bobs!</p>
</section>
<section>
{entries.map((e) => (
<div key={e.attributes.title}>
<h2>
<Link href={`${urlPrefix}${e.slug}`}>{e.attributes.title}</Link>
</h2>
{!!e.attributes.pubdate && <p>{e.attributes.pubdate}</p>}
<p>{e.attributes.desc}</p>
<Link href={`${urlPrefix}${e.slug}`}>Read more</Link>
</div>
))}
</section>
</DefaultLayout>
)
}

View file

@ -27,26 +27,32 @@ export default function Home () {
</section>
<section>
<h2>Tech I like</h2>
<h2>Tech I Like</h2>
<ul>
<li>
<strong>Sites:</strong> At the moment, I mainly use node with TS (or
JS for small projects) and Next.js to build sites and apps.
<strong>Web Development:</strong> I primarily use Node.js with TypeScript
(or JavaScript for smaller projects) alongside Next.js to build websites
and applications.
</li>
<li>
<strong>Scripts:</strong> My go-to for scripting is either Python or
JS, mainly because I&apos;m comfortable with these languages, and their
library ecosystem usually has everything I need to do what I need to
do.
<strong>Scripting:</strong> My preferred scripting languages are Python
and JavaScript, as I&apos;m well-versed in them and they offer extensive
libraries that typically cover my needs.
</li>
<li>
<strong>APIs:</strong> If I need something more robust for API or
back-end architecture than node, I usually go for dotnet core/C#
using ASP.NET. A strongly-typed language with an opinionated web
framework like ASP.NET helps to keep everything neat and tidy.
<strong>API and Backend Development:</strong> For more robust API or backend
architecture, I often choose .NET Core with C# and ASP.NET. The strongly-typed
nature of C# and the structured framework of ASP.NET help maintain clean and
organised code.
</li>
<li>
<strong>Cloud Hosting:</strong> When possible, I opt for hosting on a
DigitalOcean droplet. If more extensive cloud services are required, I usually
opt for Google Cloud Platform (GCP), which I find more user-friendly than Azure
or AWS. I also self-host services on shared server hosting running Ubuntu Server, typically with Hetzner.
</li>
<li><strong>Cloud:</strong> If I can get away with it, host on a droplet on Digitalocean. If not, my go-to is usually GCP because it&apos;s less soul-destroying than Azure and AWS (and I&apos;ve used it the most)</li>
</ul>
</section>
<section>
@ -87,7 +93,7 @@ export default function Home () {
<h2>About this site</h2>
<p>www.aaronjy.me is a static site (i.e. a bunch of HTML, JS, CSS and image files) written in JavaScript using Next.js. Tacit is being used as a micro CSS framework, and various smaller bits of custom CSS have been applied on top.</p>
<p>The site is hosted inside a Google Cloud Storage bucket with a load balancer sat in front of it. The load balancer is required as Cloud Storage doesn&apos;t support a) custom domains, b) HTTPS out of the box or c) a global CDN solution.</p>
<p>One of the biggest benefits of a website made of simple static files and assets is that I can deploy it easily, almost anywhere, and for very little money. Obviously, hosting cost is mostly relative to the amount of data transferred (i.e. the number of visitors accessing your site and downloading its assets), but I anticipate paying only a few pennies a month as things stand (unless my little site becomes incredibly popular overnight for some bizarre reason...)</p>
<p>One of the biggest benefits of a website made of simple static files and assets is that I can deploy it easily, almost anywhere, and for very little money.</p>
</section>
</DefaultLayout>

View file

@ -1,17 +0,0 @@
import React from 'react'
import DefaultLayout from '@/layouts/DefaultLayout/DefaultLayout'
import Article from '@/components/Article/Article'
import { getStaticEntryPaths, getStaticEntryProps } from '@/lib/content'
const CONTENT_PATH = './content/recipes'
export const getStaticPaths = () => getStaticEntryPaths(CONTENT_PATH)
export const getStaticProps = (ctx) => getStaticEntryProps(CONTENT_PATH, ctx)
export default function RecipesSingle ({ attributes, html }) {
return (
<DefaultLayout>
<Article attributes={attributes} html={html} />
</DefaultLayout>
)
}

View file

@ -1,30 +0,0 @@
import DefaultLayout from '@/layouts/DefaultLayout/DefaultLayout'
import React from 'react'
import Link from 'next/link'
import { getStaticEntryListProps } from '@/lib/content'
export const getStaticProps = () => getStaticEntryListProps('./content/recipes', '/recipes/')
export default function Recipes ({ entries, urlPrefix }) {
return (
<DefaultLayout>
<section>
<h1>Recipes</h1>
<p>Some of my favourite recipes. Most of them are variations of recipes I have found online, but some I&apos;ve cooked up myself!</p>
</section>
<section>
{entries.map((e) => (
<div key={e.attributes.title}>
<h2>
<Link href={`${urlPrefix}${e.slug}`}>{e.attributes.title}</Link>
</h2>
{!!e.attributes.pubdate && <p>{e.attributes.pubdate}</p>}
<p>{e.attributes.desc}</p>
<Link href={`${urlPrefix}${e.slug}`}>Read more</Link>
</div>
))}
</section>
</DefaultLayout>
)
}