init commit

This commit is contained in:
Thomas 2022-04-16 11:43:45 +01:00
commit 33a818199a
147 changed files with 9157 additions and 0 deletions

20
.eslintrc.cjs Normal file
View file

@ -0,0 +1,20 @@
module.exports = {
root: true,
parser: '@typescript-eslint/parser',
extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'],
plugins: ['svelte3', '@typescript-eslint'],
ignorePatterns: ['*.cjs'],
overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }],
settings: {
'svelte3/typescript': () => require('typescript')
},
parserOptions: {
sourceType: 'module',
ecmaVersion: 2020
},
env: {
browser: true,
es2017: true,
node: true
}
};

8
.gitignore vendored Normal file
View file

@ -0,0 +1,8 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example

1
.npmrc Normal file
View file

@ -0,0 +1 @@
engine-strict=true

6
.prettierrc Normal file
View file

@ -0,0 +1,6 @@
{
"useTabs": true,
"singleQuote": true,
"trailingComma": "none",
"printWidth": 100
}

38
README.md Normal file
View file

@ -0,0 +1,38 @@
# create-svelte
Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte).
## Creating a project
If you're seeing this, you've probably already done this step. Congrats!
```bash
# create a new project in the current directory
npm init svelte
# create a new project in my-app
npm init svelte my-app
```
## Developing
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
```bash
npm run dev
# or start the server and open the app in a new browser tab
npm run dev -- --open
```
## Building
To create a production version of your app:
```bash
npm run build
```
You can preview the production build with `npm run preview`.
> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.

3
netlify.toml Normal file
View file

@ -0,0 +1,3 @@
[build]
command="yarn build"
publish="build"

40
package.json Normal file
View file

@ -0,0 +1,40 @@
{
"name": "thomaswilson-sveltekit",
"version": "0.0.1",
"scripts": {
"dev": "svelte-kit dev",
"build": "svelte-kit build",
"package": "svelte-kit package",
"preview": "svelte-kit preview",
"prepare": "svelte-kit sync",
"check": "svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-check --tsconfig ./tsconfig.json --watch",
"lint": "prettier --ignore-path .gitignore --check --plugin-search-dir=. . && eslint --ignore-path .gitignore .",
"format": "prettier --ignore-path .gitignore --write --plugin-search-dir=. ."
},
"devDependencies": {
"@sveltejs/adapter-auto": "next",
"@sveltejs/adapter-netlify": "^1.0.0-next.51",
"@sveltejs/kit": "next",
"@types/sanitize-html": "^2.6.2",
"@typescript-eslint/eslint-plugin": "^5.10.1",
"@typescript-eslint/parser": "^5.10.1",
"eslint": "^7.32.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-svelte3": "^3.2.1",
"prettier": "^2.5.1",
"prettier-plugin-svelte": "^2.5.0",
"svelte": "^3.44.0",
"svelte-check": "^2.2.6",
"svelte-preprocess": "^4.10.1",
"tslib": "^2.3.1",
"typescript": "~4.6.2"
},
"type": "module",
"dependencies": {
"date-fns": "^2.28.0",
"mdsvex": "^0.10.5",
"remark-gfm": "^3.0.1",
"sanitize-html": "^2.7.0"
}
}

10
src/app.d.ts vendored Normal file
View file

@ -0,0 +1,10 @@
/// <reference types="@sveltejs/kit" />
// See https://kit.svelte.dev/docs/types#app
// for information about these interfaces
declare namespace App {
// interface Locals {}
// interface Platform {}
// interface Session {}
// interface Stuff {}
}

15
src/app.html Normal file
View file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="description" content="" />
<link rel="stylesheet" href="/normalize.css" />
<link rel="stylesheet" href="/thomaswilson.css" />
<link rel="icon" href="%svelte.assets%/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
%svelte.head%
</head>
<body>
<div>%svelte.body%</div>
</body>
</html>

View file

@ -0,0 +1,49 @@
<nav>
<div class="left">
<a href="/" class="home">Thomas Wilson</a>
</div>
<div class="right">
<a href="/blog" class="blog">Blog</a>
</div>
</nav>
<style>
nav {
display: flex;
flex-flow: row;
max-width: 100vw;
overflow: hidden;
}
.left {
flex: 1;
flex-grow: 0;
text-align: left;
padding: var(--spacing-base);
}
.home {
color: var(--brand-orange);
text-decoration: none;
font-weight: 300;
display: flex;
width: fit-content;
white-space: nowrap;
transition: 0.3s;
}
.home:hover {
transform: rotate(11deg);
}
.right {
flex: 1;
text-align: right;
padding: var(--spacing-base);
}
.blog:visited {
color: var(--brand-blue);
}
</style>

View file

@ -0,0 +1,41 @@
---
title: "My eating disorder was dangerous because it was powerful (feat. hip hop lyrics.)"
author: "Thomas Wilson"
draft: true
slug: "2016-eating-disorder-awareness-week"
date: 2019-02-28
tags:
- eating-disorder
---
<aside class="medium-note">
I originally published this article in 2017 on my Medium blog. As of this update (late 2019), the reading experience on Medium has become increasingly dominated with banners, footers, and modals which ask you to sign in. I have republished it on my own site, where I will never track you, ask you to sign in, or show you adverts.
</aside>
This post is published right at the tail-end of Eating Disorder Awareness Week 2016. It has been inspired by a lot of people's choices to share their experiences with EDs. I'm trying to do the same: just share my experiences, and how my personal relationship with food and mental health have impacted my life. I've also been unsure if I should publish this on my personal Medium blog (and therefore associate it with me and my professional work and personal identity). Ultimately I think it's important to see how mental health and ED can affect anyone. It simply wouldn't be the same if I published this anonymously. Within reason, experience with mental health or ED doesn't put any limits on the kind or quality of work you can pursue-this is something I want to showcase with actions, not just sentiments. I also think it's important to represent the male corner of this conversation (not that I in any way feel under-represented or pushed into submission). With that in mind I hope any future employers or professionals can see this for what it's intended to be.
Me and food have had a funny relationship since I was little and terrified of choking (still can't swallow pills). Like all things it changed with me in life. Depression hasn't left since aged around 19, and at 24 now anxiety's joining the party a bit too often for my liking-but I guess I'm too much of a polite host to ask it to leave. These are important because, for me at least, my relationship with food was never the problem, it's just been a coping mechanism. Feel sad? Don't eat. Feel stressed? Maybe eat less? Uncomfortable with the fact you're 24 and still get the same acne you did when you were 16? Yeah, definitely eat less.
I only really came to terms with the fact that this isn't what everyone does when I was about 21. That's one of the dangers with mental health-that it's not possible to simply be someone else, so you don't know what's unusual, or what you should watch out for. An interesting point, and one that highlights heavily the importance but difficulty of empathy, but not the one I'm trying to make.
As with any social or human problem, the range of possible factors and causes in eating disorders is huge. This doesn't detract from anyone's pain-that's not even an argument worth having. If someone is homeless because of substance abuse, immigration, or complete lack of financial resources-none of these detract from the problem of homelessness, or suggest that we shouldn't help someone. I've spoken to people who have eating disorders they attribute to the need for control, feelings of security, anxiety-coping mechanisms, guilt, and body dysmorphia. This is not an extensive list.
You ain't worth more cause you got more stuff. I don't care what the colour of your skin is. I don't care 'bout your fortune and fame. I just want for us to have more perspective. And understand that everybody's pain is the same. (Perspective-Blueprint)
Because I never wanted to be super skinny, because I never strictly restricted my calorie intake, because I never went through binge-purge-restrict cycles, I did not believe myself to have any kind of eating disorder. But I do not have a healthy relationship with food, and the absence of all these factors does nothing to argue against that.
The past 6 months of my life have undoubtedly been some of the most turbulent. I left (not by choice) a relationship, and with that I lost one of my most valued supports for dealing with my ED. I lost someone who understood better than most what it's like, but also knew exactly how little tolerance to have for it (spoiler: it was none).
Even though starving myself was never a thing in its own right, I had a lot to cope with and very little to stop me. Quite predictably I spiralled, and for some reason my urge to simply not eat changed into a need to over exercise. In retrospect it's not a surprise things didn't go so well.
Going to the gym 3 times a day and eating 20% below the RDA (probably about 3040% what I should be eating) is bad for your health. But this wasn't about calories for me, this wasn't about losing weight, or gaining muscles, these were just side effects. I did it because I couldn't not.
I was like a toddler in an increasingly small doctor's waiting room-I had too much energy and started bouncing off the walls (bedroom, office, bus, any wall really).
The danger of my situation that it made me incredibly powerful. It put me at the top of my game. It's like drug use. People talk about the long-term health effects, but if it wasn't for the short-term incredibly desirable effects, we wouldn't see the problem with substance abuse that we do today.
At the most simple level: if you're running 10k every day, you get better at running 10k. If you're lifting weights every evening, you can start to lift heavier things.
This is how I justified my behaviours to myself. How can I be unhealthy when I am physically, unquestionably, demonstrably, the most fit I have ever been in my life? I'm getting complements from friends about my body, people are noticing an improvement in my strength and performance. I was hitting personal best 5k and 10k literally every week.
Have you ever heard athletes talk about their training schedule? It's crazy, but they're good and they're proud, and no one's telling them to stop. Have you ever heard anyone successful talk about how they got there, about the sacrifice, devotion, and difficulties? If you want to be good at something you put in hard work, and sacrifice comfort and security. If you're getting good at something, you're not supposed to be comfortable. Is what I told myself.
Long hours, lack of sleep, writing paragraphs for weeks… Trading my social life to writing bars with preciseness (Understand-Rashad & Confidence)
This started bleeding over into other areas of my life. I dance. I started attending workshops for professional and graduate dancers (I am neither of those things). I started choreographing my own work, and corresponding with producers who work with graduate and emerging artists. I started attending as many classes as I could, looking obsessively to find workshops I could wing myself into. I was travelling to the theatre to watch live dance at least every other week. The results? I was in the best place with dance I've ever been in my life. I was the most creatively fulfilled and challenged I've ever been, and I was simply happy proud of the quality of my movement.
With my Ph.D. and work in web-development I would sit down and just work for hours. I had exhausted my body to the point of physical damage, I had no choice but to sit very still and do a lot of work. The quiet introverted kind of work where you can't be distracted. I started taking risks and setting ambitions much higher than I had done before. And I met them. I was producing new software, reading a great deal of literature, and subsequently conducting my most planned research I had ever done in my life. I felt on top of my Ph.D., and I was achieving the things I wanted to do.
All of these things were fuelled almost solely by the thing that underlies my relationship with food, and so I suppose my eating disorder (whatever that is). The voice inside my head that told me I simply couldn't do anything until it physically hurt to move, and kind of ached when you sat still. This is obviously physically dangerous, but the real danger was that the voice followed up on its promise: I was incredibly focused and by literally everything I valued in my life (fitness, dance, and my studies) I was doing well. I was doing really well.
There is no explanation or solution. I can't tell you how I started to realise I was making ultimately bad decisions. In truth I still don't fully think I was-I'm a stronger, more experienced, and focused person because of it. But at the same time, I know that if I had carried on down that road with my head down it would have gone badly. I was falling into bed every night, and would role out in the morning. I am not joking or exaggerating, I was taking every resource my body could find, and exhausting it every day. I was praying and meditating every day that this will end, that I wouldn't wake up tomorrow feeling like I have to physically defeat myself just to function.
Nothing hit me until I started seeing concern in my friends. I have 4 people in my life who I see as my true friends. These are people I trust and respect more than myself. They are all people I love at a very deep level. All of them became obviously distressed when I would talk about my life or wellbeing during this phase. Two of them asked me to consider going to counselling or seeking professional help. This is when I realised I have not made a sustainable choice. This cannot go on forever. This is unhealthy and bad for me, even if it's doing me so much good.
It's only been about a month since I made a conscious decision to get out of that place. In that time I've realised that i) I have to start being selfish, and ii) Wherever I am, or anyone else is, in life-it's temporary, and it's where we're supposed to be. Living with an unusual mental health landscape isn't something that changes with any urgency, and seeing myself lose fitness, and skill in dance is hard. But my outlook is changing. I feel myself wanting to forcibly start controlling my life agin-and this is the danger of eating disorders in my life.
Then I think back to when I was 22 and breaking up with the first girl I ever truly deeply loved in a mother-of-my-children kind of way. And I think back to the year that came after that, and how all I wanted it to do was end. I thought back to desperately searching for my purpose in my final year of my master's degree. I look back on when I really started pushing contemporary dance as part of my life, and wanted desperately to improve.
Whenever we look at things in retrospect we lose the immediacy or urgency that are all we think about in the moment. In 3 years I'll be 27. I know that 27 year old me will tell 24 year old me exactly the same as what 24 year old me tells 22 year old me: be patient. Whatever needs to happen will happen. I am demonstrably not the most trustworthy person to be making decisions about how I should live my life. I should stop trying to make those decisions.
Simz talk to the younger Simz what would you tell her? Try make a mil 'fore you get a deal. See nothing's impossible long as you keep your head up. And when it comes to the points where you're fed up. Take a step back.
What would you say To the younger you? Would you tell you to be patient? Would you say to be true? (Time Capsule-Little Simz & Caitlyn Scarlett)

View file

@ -0,0 +1,107 @@
---
title: "Loss and my ED (ED awareness week 2017)"
author: "Thomas Wilson"
draft: true
date: 2017-03-03
slug: "loss-and-ed-2017"
tags:
- eating-disorder
---
<aside class="medium-note">
I originally published this article in 2017 on my Medium blog. As of this update (late 2019), the reading experience on Medium has become increasingly dominated with banners, footers, and modals which ask you to sign in. I have republished it on my own site, where I will never track you, ask you to sign in, or show you adverts.
</aside>
Last year I wrote a piece for Eating Disorder Awareness Week 2016. Twelve months of living later and things aren't the same as they were.
To recap, twelve months ago I was several months out of an abrupt breakup, which saw me lose a big part of my support network. It turns out that when I'm left to my own devices I'll try and wear my body town until most or all of it hurts as I lay in bed at night, asking why I keep making bad decisions. I did this because it brought me to some extreme levels of focus in my personal and professional life. An accidental outcome of that was an unhealthy calorie deficit. I'm not sure if what I have is strictly an eating disorder. I think at that point we're arguing semantics, though, because it's probably not normal.
## Losing it
Some time around March-April last year, I slipped after a few weeks of progress (more food and sleep, less running). I have vivid memories of sitting, in tears, in my room, on Skype to a dear friend.
I very rarely get angry. Frustration or impatience are well known, but to be truly deeply angry at a person, for a very distinct and obvious action-that was a very unwelcome and new feeling for me. I felt angry that someone could do something, and then appear to just not acknowledge it and move on. If you're mean you say you're sorry. If you've taken my mental and physical stability from me then you've been (perhaps unintentionally) really quite rude.
What struck me is that nothing seems to stop me from feeling these pains. That is: when I'm in a bad place, I always feel the same kind of bad. It's like I said last year-my brain is a toddler in a waiting room, I have to get out. As far as I can tell, this will be the pain I feel for the rest of my life (that section of it where I'm in pain, at least). Acknowledging that was hard. Very hard.
## Losing dance
Until the last nine months, contemporary dance made up an exceptional part of my life. I was dancing four-five days a week, most weeks. This involved open and professional classes and workshops (in the case of the latter, it involved a bit of creative lying).
For me, dance has always required a monastic devotion: ultimate focus on my current actions, while lining up the next 10, 30, or 60 seconds of movement in my head. Picking out moments and extensions I could sink into. A sense that my body existed to move this way, and for a very short period of time my body was not my own. That's pretty appealing when you're seemingly trying to erode your body.
Around the time I wrote the last article I began to realise that being in a dance studio wasn't making me happy. Attending classes with your recently ex-girlfriend while you're simultaneously excelling and nose-diving isn't something I can describe. It guess it was like trying to fly a plane through a thunderstorm. I don't know where I was or if I was going forwards or downwards. Sometimes I would just have to leave the space at a minute's notice, because I couldn't be in there any more.
So I stopped attending classes at my university. So now I'm dancing at most three times a week. I stop seeing progress and start plateauing. I'm frustrated that I can't pick up choreography quickly, I'm lagging in routines, my technique isn't as sharp as it was. And there's nothing I can do about it. I have ideas, I'm trying to work on choreographic pieces, pieces that I feel really passionate about-but what's the point when you can't even do your own ideas justice?
So I made the decision to stop dancing. Beyond a shadow of a doubt, dance saved my life. Knowing I had a class to attend, or an upcoming workshop, or that there's a weekly choreography course starting 40 minutes away and that you could definitely make it back in time if you got the last train… When these 6090 minute periods are your islands, you become very concerned when the sea level rises. But they were putting me in a worse place, so I had to stop.
This has freed up time for me to focus on acroyoga (or sports acro)-a mixture between partner acrobatics and yoga. Twelve months later and I am paid (a symbolic amount) to teach every week, I get to introduce people to something I love on a weekly basis, I train with people who treat me better than I deserve, and I can find moments of complete peace and calm. These moments are no longer mid-pirouette, but in some other equally obscure position, often on some else's feet.
I've recently started seeing dance again. I'm realising that a dance studio is different when it's full of people. Dancers who are driven by their selves or by competition act very differently to artists in a studio with an idea. I'm realising it wasn't dance that meant I had to leave, but the culture. Dance was always a tool for me, but for a lot of people I danced alongside it was an end goal. This produces some truly exceptional performers but I couldn't handle the heat, and nor did I really like the kitchen's decor so for now at least I'm staying out.
## Losing fitness
Demonstrably and repeatedly I am less fit than I was 12 months ago. I cut my PB 10k time by 2025% over the course of a few months. I was fast, by my standards. Putting that 2025% back on to my 10k time was hard. It makes me feel inadequate. If I could do it before, I should be able to do it now.
It's not just that: I can't get up at 7am to work out, then go to work, go to a fitness or dance class at 7pm, then go back to the gym at 9pm. I have all these other things I have to do. Like work a job that excites me and gives me meaning. Like read these excellent books, or spend time with badass humans.
This doesn't mean I don't catch myself in the mirror when I'm getting changed and notice a loss of definition. It doesn't stop me watching other people run or cycle, and constantly compare myself to them. It doesn't mean I don't want to count calories before I go to bed every night to double check I'm doing 'okay'. But it does mean that my life is enriched in other areas.
## The overwhelming gains
I spoke about the people I met through acroyoga. One of whom I now live with. These are people I respect a great deal, with who I meet 24 times a week to share, learn, and play. People who are kind to me, who accept my neurotic sense of what a movement should look like, and who (in the best way) strengthen me physically and mentally. This is a place I can use my physical strength and passion for teaching.
I've recently been involved in a number of creative projects, and I've got several more on the horizon. No it's not choreography as I know it. But it's taking what I loved from dance, and helping me explore it in an environment where I feel I belong.
Some time in June-July I entered a relationship, with a girl I call Angel because I don't know what else you call someone who accepts and understands that sometimes I want to starve myself or make unfair quick judgements of a person or that I have a compulsive need to go to new places, be in bed by 9.30pm, and work too many hours at a job that I value too much.
I have realised that I can damn well do whatever I want for my job. If I want to be a web developer then I can probably just go and do that. So what if I've got a Master's in Environmental Science-a department of chemistry happily pays me for work when I stopped studying their subject at 16. If I want someone to pay me money to keep improving some software I made when I was told explicitly by my supervisor to "not spend too much time on it"-then I should start asking a lot of people very nicely. These people do not care that I specialised in quantitative models of poverty, they care that I can show my current project has value and potential.
I realised that we're living in a world that is literally the best it has ever been. No really, we are doing just fine. Not perfect, could still improve, and perhaps we should stop trusting the general public with internationally consequential votes, but there's like no polio, fewer women are dying in childbirth, and more of these children are living and then learning to read (even the girl ones). I've started giving 510% of my salary to the issues I care about (you're welcome, forest elephants), and 25% of the money I earn from teaching goes to other charities.
I am constantly aware that nothing is permanent, which includes my feelings and life (obligatory reminder that you're going to die). I'm working on being humble. I'm working on being openly thankful. I'm grateful to all the people that made me feel unwelcome and unaccepted, because I was never going to fit in. I'm grateful to the excellent group of humans I have around me very often. I'm grateful to all the artists around me who have a vision and have to see it realised. I'm grateful to the hip-hop artists who reminded me what's important. I'm grateful to the authors who helped me explore these ideas in greater depth. I am grateful to my to my parents and to the universe for just being pretty cool.
Managing a brain that advises you poorly on proper fitness routines, and which overly values an obscure art form you discovered 12 years too late to be any real good at it isn't easy. But nothing's really easy. I don't expect it to be, and I expect my situation to look different in another 12 months.
I strongly agree we should be bringing discussion of mental health to the forefront of people's awareness. But you need to show continuity and narrative. I don't think a mental health story can ever truly be retrospective, because you're always living it. I want this piece to show that mental health is still there, always there, and a part of who I am-and just because it's no longer influencing my life to any great extent, does not mean this isn't an important discussion and it doesn't mean I don't think about it often.
I hope more people who have opened up about their mental health continue these narratives to help themselves and others understand how it affects them day-to-day, but also year-to-year, and event-to-event.
## Wilson's tip-top hip-hop recommendations
Last year I was pretty clear that hip-hop played a massive part in my self-exploration. Below are a couple of the songs that constantly resonate with me, that I keep going back to, and that I think help to explain me a little better.
<blockquote class="hip-hop-lyric">
I ain't got the time to be your enemy
That shit is draining, they're taking up too much energy
I'd rather invest in something that's worth it, the time is precious
So for Simz to waste it is something you'll never see, hold me to it
Wings -Little Simz.
</blockquote>
<blockquote class="hip-hop-lyric">
From the view of an atom the human body's a universe
How impossibly big it be, this symmetry
This brutality, and beauty and synergy
And beyond what we'll live to see, I know nothing can limit me
Just take everything ever and we are that times infinity
<cite>Tiny Glowing Screens pt. 3-Watsky</cite>
</blockquote>
<blockquote class="hip-hop-lyric">
This is your life, you can't escape this bitch when it's hard
Just know that it passes, but you'll collect scars
They never go away, but they will make you who you are
This is a beautiful struggle, I share it in song cause
I can't control this, remember: the moment's beyond us
<cite>Hold Your Head Up-Macklemore</cite>
</blockquote>
<blockquote class="hip-hop-lyric">
I feel the waves getting far too big to handle
Fail to turn this shit the other way
Sail back to the harbor like your average Joe and play it safe
But that's not life it's not what I chose
<cite>Reflection-ATO X EDEN</cite>
</blockquote>

View file

@ -0,0 +1,76 @@
---
title: "Back to Bear, Goodbye Notion"
author: "Thomas Wilson"
date: 2019-08-15
draft: false
slug: "back-to-bear"
tags:
- apps
- markdown
- bear
- notion
---
This piece turned out a little long than expected because I really want to clarify that this is not a “Why Bear is better than Notion” article. It is a “Why Bear suits my needs right now better than Notion” discussion. So theres a little more nuance in my explanation.
The crux of my point it is this: I am a scatter brained person who develops software, makes dance, and exercises semi-seriously - and I need a digital tool to help me manage my thoughts, writing, documentation, and general projects. I previously used Bear, a beautiful and simple markdown-esque note keeping app, but forgot about it when I moved cities and jobs pretty much all at once. In my new life I started using Notion, a cross-platform feature-rich editor, but Ive gone back to Bear.
I went back to Bear because I like the simplicity - it let me categorise, expand, delete, and move things around in a way which is much closer to how I think about my life and work. Also, as a developer, if I want complexity Ill roll my own: between Google Docs and serverless providers I can achieve a lot.
## A brief love letter to Apps
I live my life in a couple of lanes: Im a front-end software engineer in a small team at a rapidly growing scale-up, and also a dancer/producer for a small contemporary dance company, and someone who likes to write and journal for their own personal development. I am asking a lot from any app, I want it to collate my thinking of software architecture; document specific practices across a range of projects; and keep track of myriad side projects, restaurants I want to visit, narrative structures and scene ideas; document research material and my evaluation of it; and outline workflows for funding applications. I want to do these things with as little context switching as possible. I want a killer app that doesnt exist: not only are these a contrived set of requirements, but how I think about each of them, my mental models for them, are different.
But I really love the search. I love apps. I love the promise that a new App brings - its like buying a new blank notebook, non-blank regular book. Its the promise of a new you, a new way of thinking, doing, producing - one step closer to the way you work now, and a more productive, happier, wealthier, and skinnier version of yourself. I think this is the feeling which fuelled first decade after the iPhone was released, when everyone wanted to talk, read, write about the killer app for iOs (and now iPadOS) or OSX (and now OSX).
It definitely feels now like this conversation has slowed down, the conversation is less around specific apps. However, every now and again, hype rises out of Product Hunt or Hacker News to offer up some crafter, artisanal interfaces. Bear and Notion have been two such apps: Ive seen them on twitter, in online publications, and other developers mention them.
## Bear
[Bear](https://bear.app) is a beautiful note-taking App built for the Apple ecosystem (iOS, iPadOS, MacOS) by Shiny Frog. The premise is simple: you write in a markdown (or markdown-esque) syntax, which gives you access to a limited set of features: body text, headings, lists, links, images, inline code, bold, italics. Notes themselves are organised by any number of tags ( anything starting with # ) which can be nested, e.g. `post/post` versus `blog/portfolio`. Its been [recognised](https://blog.bear.app/2017/06/thank-you-yes-you-for-our-2017-apple-design-award/) by Apple number of times for their fantastic visual design. Which makes sense: it does one thing well, feels simple, but can be integrated into very powerful workflows (e.g. exporting to markdown and plain html). This is Apples philosophy, surely.
### In Praise of Bear
There are a couple of things I really liked about using Bear:
- Creating notes comes with much lower entry requirements, I just hit ⌘N and I get a new note, it doesnt need to be anyway, I can just dump whatever I need into it and then organise it later.
- Both apps are visually beautiful, but that doesnt mean I shouldnt mention it twice: the UI is very nicely designed.
- It specialises in one kind of content: slightly-enhanced text, and executes on that one idea well.
- Easy to export: I can get from a note to sanitised HTML, markdown, pdf, docx is two clicks and 5 seconds - which makes it so easy to integrate into any workflow.
### My time with Bear (2017-2018)
After graduating my Ph.D. into my first software development job I was looking around for note taking apps, so I could keep track of what was happening in meetings, product development ideas, and my own personal learnings. My first job came with a lot of context switching - I was on a number of different projects, so flexibility was important.
I came across Bear, probably from an App Store feature, and loved it. But around 6 months after starting the job, I relocated from Southampton to London, and not soon after I started actively looking for new job opportunities. The job I was in was okay, but not what I imagined it would be, or what I needed at that time in my professional journey. this is important because I was going through a lot of personal change and turbulence - I didnt have a system in place for anything, and it would have been pointless to develop one because things were changing so rapidly.
So I left bear behind accidentally, I simply stopped using it and it never occurred to me to start using it again around the time I moved to London in early 2018.
## Notion
Describing [Notion](https://www.notion.so) is much less simple than Bear, they describe themselves as an all-in-one workspace. It offers an astonishing amount of functionality: Kanban boards, structured tables with filters, embedded web pages, todo lists… honestly I do a disservice in trying to list them all.
I started using Notion in early 2018 after moving cities and jobs - two big changes which broke a lot of my old habits and tools. I think I first saw it in a coding livestream by MPJ on his YouTube channel [funfunfunction](https://www.youtube.com/channel/UCO1cgjhGzsSYb1rsB4bFe4Q) , and then finding this [profile by invision](https://www.invisionapp.com/inside-design/ivan-zhou-notion-interview/) on Ivan Zhao, the co-founder and CEO. He seems like a cool guy, really product focused, and making something productive and beautiful. So I started using Notion personally, and at work.
I used it to help me organise my first ever cycle tour across France in 2019 (I got half way through and then rained off - 3/10, would not recommend), to track my route and AirBNBs. I used it to write documentation for projects at work. I kept a track of my personal and seasonal goals (shoutout to [Cortex](https://www.relay.fm/cortex/79) for introducing me to the idea of yearly and seasonal themes.)
### In praise of notion
I initially got on really well with Notion, it had a number of really nice features:
- It is beautifully designed by people who care deeply about visual and software design.It is very obviously a well-considered piece of software.
- Its cross platform, and even has a fully functional web-app, meaning I could access it from anywhere, at any time.
- The number of ways it lets you store and present data, statically and dynamically, make it a very versatile tool. I used it to write long-form opinion pieces, plan cycle tours, and document software projects.
- It provides an opinionated way to store information: systems for categorising are very personal and its very easy to over-architect or make inconsistent. By enforcing a hierarchical structure, its harder to let things sprawl
- The structured content, and collaborative team sharing features built in, make it very obviously an excellent tool for organisations - so its a nice future-proofing tool.
### Moving away from Notion
After 4-5 months, I started to notice some noteworthy drawbacks to using Notion in practice:
- Sporadic offline support. I would get semi-randomly logged out of my machine, and I the data would often not be available locally. To get deep work done, I like to take myself to wifi free areas and focus, and a number of times, Notion put a spanner in that plan.
- I rarely reached for the vast array of functionality available to me. I largely stuck with headings, web page embedding, and some tables, sometimes.
- When I write, I like to be hyper-focused (I am writing this on a plane, in full screen mode, with noise cancelling headphones) - my brain will get distracted by anything I can tweak (colours, spacing, organisation). Notion gave me a lot of options to get distracted by.
- Poor iPad smart keyboard support. Even something as simple as pressing the down arrow to go to the new paragraph wasnt supported. This is my one feature-related complaint.
Underneath all of these was a really nebulous feeling that reaching for Notion felt like work. I had a couple of more systemic, underlying problems with using it which are harder to look past than UI or features.
Fundamentally, I felt a growing gap between how I thought of myself and my work, and how Notion made me present it. Notion organises each file as if it were a page on a website - in a tree-structure, with siblings, parents, children. This meant that everything had to belong somewhere, which is fine for fully formed ideas, organisations, or processes - but I found it didnt support the growth or development of concepts so well. Sometimes this is fine, because you know the content will mature - e.g. when you are documenting the architecture of software: you know the moving parts, their function, and their relationships. It becomes easy to add new parts and modify existing ones.
Sometimes, however, I found this limiting, and I had to force my ideas or notes to fit a structure that I hadnt defined and didnt want to define. I had a number of pages in Notion which were essentially lists of half-formed ideas, or were links to pages for half-formed ideas. This structural organisation felt so final, and high-cost. Like changing anything would require a lot of boilerplate and formulated thinking, when for me the note making and moving _is_ the thinking.
When does something move to its own page versus sitting in bullet list of other whacky ideas? Where does this new page live? In my mind, it belongs with other half-formed ideas, because its in progress, but it also belongs with its thematic brethren: if its a software idea it doesnt belong next to a meal plan, cycle route database, or fitness training regime.
This is at the route of my move away from Notion: I learn best through experimenting and demonstrating to myself - and for this to be accessible, I need to have no investment in the results of experimentation. If I need to set up five different routes on Strava before I find the right one, I will happily just discard the old ones - its 2019 and data has never been cheaper. I could not learn a language, framework, or library by reading the docs or a blog post.
Notion is about creating a product., a well formed artefact. My process is about creating a lot of mess at very low cost. I felt guilty about deleting things or moving them within Notion, which is strictly a personal feeling, and not a design intention by the team behind the product (it might be, but I really dont think it is.) [f1](#footnote-1)
## Returning To Bear
Since moving back to Bear, Ive found writing a lot more pleasant and less intimidating. I actually managed to start _and then finish_ this piece, for example. Migrating all of my information from one to the other has been a little bit of a pain, but its now so easy for me to get started creating something, without worrying about where it belongs or how I should categorise it at the moment of creation. I have my beautiful, overflowing dumping ground, and in six months I look forward to coming back to Notion begging for their opinionated organisational structure. Until then, _vive lors_.

View file

@ -0,0 +1,67 @@
---
author: "Thomas Wilson"
title: "What is CSS-in-JS and why do people keep using it?"
date: 2019-09-20
slug: "what-and-why-use-css-in-js"
draft: false
tags:
- css-in-js
- javascript
- frontend
---
The elders tell us of a time where you would build websites by literally writing your `.html` files. If you wanted to add some styles, youd write them in a `.css` file and then `<link rel="stylesheet">` the two together. So youd write your entire site in semantic HTML, about whatever it is people did back then (like mammoth hunting or pyramid building) and then you would `ftp` that onto your server, and other people could view it. At least as long as they could fight off polio or resist rebelling against the bourgeoisie. Maybe youd go out and celebrate at the tavern afterwards, but actually that one sounds pretty relevant today.
## Component-orientated architectures arrive
In the modern (but still terrifying) world of 2019 - HTML, CSS, and JS remain three central tenants of the internet: HTML providing content, CSS styling it, and JS adding functionality on top of everything. The way we get the result of these technologies, HTTP, has remained pretty constant too.
However, at some point people started to realise that writing _just_ HTML could make it difficult to edit parts of their website. Say you have a navigation header, and you want to add a new page to your website. Well now you need to go through every `.html` file, find the navigation header, and add an item. And what happens if you miss one file by accident?
This is the problem which facilitated the evolution of component-centred architecture: a component being some pre-defined visual element, simply a “thing” on a website: a tweet in a list of tweets, a list of currently trending articles on BBC News, a users avatar image.
This lead to building websites as a set of components which you compose together, as opposed to single monolithic pages. This practice evolved, and more responsibility was handed over to JS and other technologies. People started writing Single Page Applications (SPAs), and static-site generators increased in popularity - where we could define and update components in a single place, and see them updated across our site without having to delve into the nested HTML ourselves. It doesnt matter if the site is actually just a single JS function or runtime which hooks into the browsers URL (e.g. a SPA written in React or Vue) or if it generates a set of HTML files (a static site generator). Component-based architecture is the practice of breaking out our visual element by their role, not their location.
Pairing components with external data sources, like in a CMS or a databases, means that a website does not need to be rebuilt or re-made whenever a new product is added to a store, or the price of an item changes. It has given a lot of power to people in the business, but who werent developers. And its freed up developer time to focus on more developer-y things, like complaining about meetings and fixing their parents wi-fi.
## Where does CSS come into this?
Look, the point Im making is that modern web development considers a web page as composed of many components, which can be shared across pages (and even sites). But the way we do styling with CSS didnt immediately go through a similar revolution. In a lot of cases we were still left with one global CSS file, which we would simply `<style ref=“stylesheet>` into our application.
This isnt to say it was still 1998 - we developed build chains and pre-processors - tools which would generate CSS, but gave us more advanced features - like inheritance and extension, and functions and variables. This made it much easier to update CSS, and quicker to write in general.
Despite this, these processes often output a single global stylesheet. In the past couple of years, some web developers have created technologies which remove this separation between components and styling - allowing developers to declare styles in the same way they declare components.
## Why not CSS-in-CSS?
(First off, lets acknowledge the fact that its now completely valid to specify that Im talking about CSS as in a `.css` file - how weird is web development?)
CSS is incredibly powerful, with a lot of nuance. Its a great technology and some people really love it - it can make websites beautiful and fast and just joyful. Despite what Im about to say, I really like CSS, and Ill use it by default where it makes sense.
Despite this, there are very legitimate criticisms being levelled at CSS. Principally, these criticisms are due to the way that CSS is authored, managed, and generated - and the sprawling, dynamic, and unpredictable HTML content tree which is tightly coupled to it.
There are a couple of problems which emerge from these large, single, often append-only stylesheets. These problems become more apparent, and costly, as an application reaches a certain size, and exists in the real world, where maybe several developers are authoring styles and creating different bits of the website. Even as a solo dev on side projects, Ive felt some of these negatives:
- **Name collision:** Different parts of you application share the same logical name, like `.navigation-item` - but is that the nav item in your footer, side bar, or header ? All of a sudden, css is vying to apply the same styles to three three separate navigation items, which you might not necessarily want to look the same. This can lead to…
- **Over-specific selectors:** To combat the above, you might start chaining your selectors (e.g. `header > .navigation-item`) which is fine, until you have to chain 2, 3, 4 selectors - at which point re-structuring your HTML introduces visual regression and style changes, because your css nesting no-longer matches your HTML.
- **Keeping styles in just-in-case:** It can be surprisingly hard to know which styles in css you are using, especially when paired with the above: its easy to see if a single class name is being used, but much harder to know, reliably, at a glance, if you have `header > .navigation > .navigation-item > .navigation-icon`. Imagine the complexity you add in when you start dynamically rendering elements with a JS library, or just using JS to add or remove classes from elements. This can lead to bloated CSS files which no one wants to touch or modify, for fear of introducing unforeseen regressions. Which is basically…
- **Unpredictable side effects from modifying or deleting code**: This affects the developer experience and process - well-architected software presents a clear process for change, refactoring, or extension. When you cannot make changes with the knowledge of what youre going to affect, or at least _where_ youre going to affect - it is hard to maintain and extend software into the future. You end up with long, append-only style sheets, and worse, the cursed `!important` tag.
- **Source order specificity**: With more of our client-side applications being rendered, loaded, and managed by JS frameworks or libraries - we cannot reliably predict the order which CSS styles will be loaded into the DOM, because it may be loaded only for a specific page - either intentionally, or from automated code-splitting. Files which load later have higher _source order specificity_ and can override styles declared earlier. So styles can be unpredictably overridden by the way our users use the application.
## CSS-in-JS as a solution ?
As the name suggests, CSS-in-JS is the process of using JS to generate valid CSS style syntax. This is opposed to managing their styles by creating separate `.css` files (or `.less` and `.scss` for that matter). It is typically defined alongside a component, e.g. the JSX in a React component, or the template in VueJS. This is strongly related to the component-first architecture of modern web development - an extension of the idea that everything about the View of the application (capital V as in MVC) should be defined in one place - not two (a .js file and a .css)
Its briefly worth mentioning here that CSS [can be scoped](https://medium.com/@pioul/modular-css-with-react-61638ae9ea3e) to single files - meaning that not all of this functionality is specific to JS. However, the ability to generate and modify styles with the JS language offers a lot of the power of CSS to the hands of those without intimate knowledge of the CSS syntax. Dangerous indeed.
CSS-in-JS is _not_ a singly library or package, and it is not an agreed syntax. A number of approaches have emerged from the community to address this problem. Some example libraries include:
- [styled-components](https://www.styled-components.com)
- [JSS](https://cssinjs.org/?v=v10.0.0-alpha.25)
- [Emotion](https://emotion.sh/docs/introduction)
- [Styled-System](https://styled-system.com)
## Why do people keep using CSS-in-JS ?
Fundamentally: **Its a component-first way of thinking**. it takes the way modern web development thinks about web pages, and the widgets on them - and applies that philosophy to way we write our styles. It gives us a one-to-one relationship between our components, and their styling declaration (as opposed to one global stylesheet and many components.) This means your selectors arent traversing the DOM to find the `.navigation-item` that they _really_ mean.
This makes it easy and familiar to think about, and it **centralises our visual code into one place**. This is a nice philosophical benefit, but it pragmatically helps us by constraining where a set of styles are used. This means **they could be edited or deleted with more certainty that we arent about to accidentally change styles across the DOM**.
For me, the strongest advantage of CSS-in-JS is the addition of functionality from a programming language, like JS. **This allows you to set styles based on global variables (e.g. a theme) or local state and props, and use functions and conditional statements.** This adds a huge range of flexibility and functionality, without having to manually add or remove class names from a DOM element. This drastically reduces the cost of creating complex or delightful user experiences (e.g. having cards hover when theyre under the cursor, or a button glow if its toggled on) without tightly coupling it to specific css classes or selectors. UI libraries and frameworks should abstract the author from the implementation details (i.e. managing the DOM), and CSS-in-JS fits this philosophy.
When we declare styles at author time, our library of choice (e.g. styled-components) handles the transformation into valid CSS, and inserts it into the DOM. As part of this, the library will likely generate a unique (hashed) classname, this means **developers dont have to worry about creating unique, or strictly-structured class names for their css** - they can just declare styles, and assume they will be correctly scoped.
Whats more, **the build chain which does all of these is integrated into the existing build process for the website**. We can keep our JS project as purely JS, and dont have to worry about building and bundling `.scss` or `.less` files.
## Articles I found useful
I came across a couple of really nicely written articles when I was researching this piece. Id recommend them if youre curious:
- [Why I Write CSS in JavaScript](https://mxstbr.com/thoughts/css-in-js/)
- [What actually is CSS in JS?](https://medium.com/dailyjs/what-is-actually-css-in-js-f2f529a2757)
- [The State of CSS 2019: CSS-in-JS](https://2019.stateofcss.com/technologies/css-in-js/) - Just pretty cool

View file

@ -0,0 +1,37 @@
---
title: "Culture I devoured in Autumn 2019"
author: "Thomas Wilson"
date: 2019-10-30
draft: false
slug: "culture-i-devoured-autumn-2019"
tags:
- culture
- arts
---
This season turned out to be surprisingly busy with culture. I started the month by talking at two tech events in London, meaning I arrived into the full body of the month having produced some very technical, thoughtful output. I needed some really well-considered and curated culture to put everything back in the right places. Kind of like an internal tidy-up after Id rummaged through all of my draws to produce someone who was definitely more knowledgeable than I am, and probably a lot funnier and more extroverted.
## Historic Centre of Florence
Italy, UNESCO World Heritage Site
Hard as it is to believe now, a stonking four weeks later, but I started off this month in the centre of Florence, Italy. Its a city Ive visited every year since 2014, sometimes alone, sometimes with romantic partners, other times with friends. It is a place unlike anywhere else I have been on earth. The city is old and sprawling, the centuries-old city wall no longer even resembles an outer limit. It is one of the centres of the European renaissance, a hub of craftspeople, artisans, religion, philosophy, and hot blooded commitment to creating something beautiful. I dont care that its full of tourists (myself included). I dont care that I was only there for three full days, and that my Italian really has plummeted. I dont care that its a romanticised ideal that Ive created of a city in a country with some very real economic and political problems, and a culture which I dont think would fit me very well at all. The city reminds me of the wonder and joy of travelling to new places, and to the higher ideals of art and craftspersonship which I value, but can be pulled away from by the urgency of the day-to-day. It is a city which speaks volumes to me, in a quiet, old language that I have to be very still and quiet to hear. The historic centre [is a UNESCO World Heritage site](https://whc.unesco.org/en/list/174/), and I make the rules so I say it counts as culture, and boy am I glad to have had the chance to visit to visit there again.
## House of MinaLima
Soho, London
[MinaLima are a design studio](https://minalima.com/about/) founded in 2002 to create the entire visual language and style of the Harry Potter universe as it was being brought from page to screen. They contributed hugely to the visual props in the franchise. If youve seen the films, you have seen their work: The Daily Prophet (the wizarding newspaper), the most-wanted posters for Sirius Black and Bellatrix Lestrange, the Black family tree tapestry, the penmanship in Molly Weasleys howler that she sends to Ron after he flies a Ford Anglier into a magical tree. The whole thing is situated across four floors in a historic london terrace, with charmingly wonky floors, windows, and ceilings. The walls are full of all of the attention to detail that you could so easily miss by “just” watching the films. I grew up with Harry Potter, the books and the films, and that house felt so wholesome and warm - it is a really wonderful example of an intersection between visual design and world-building. If you are in north-ish London and want to kill 20-40 minutes, go and take a look. Its most wonderful.
## Faith Hope and Charity
The National Theatre, London
This piece makes up the final in a trilogy of new work by Alexander Zeldin. I havent seen either of the previous pieces, though I rather wish I had. _Faith Hope and Charity_ takes place in a community centre in London across a couple of months, seeing a host of believably-guarded and warey characters, as they come for a free lunch and choir practice. While I was watching it, I felt the pacing to be unbearably slow at times - but on reflection, the whole thing was staged and timed exactly as it needed to be. You were never force-fed any ideas, and the eight-or-so principle characters tore you between a number of simultaneous plots or points of interest. Certain people and events became more of a centre-piece later on, but for most of it I got such a real sense of London: disjointed conversations hindered by people not wanting to share or give too much - because they either dont know things about themselves or are scared to let other people see them as weak or frightened. Of people deflecting questions and awkwards conversations by busying themselves, or talking about anything (the biscuits, the leaky ceiling, anything) other than the things which very much needed to be talked about. [Susan Lynch, one of the actresses](https://www.nationaltheatre.org.uk/shows/faith-hope-and-charity) put it perfectly when she said that the piece is “about moments between people, and its about small acts of human kindness… the audience is as vulnerable as the players”. Its also the second time Ive seen Cecilia Noble on stage, and the second time Ive watched her command my attention - the woman is fantastic to watch.
## Akram Khans Giselle
Sadlers Wells, London
I feel lucky that I got a chance to see [this piece](https://www.ballet.org.uk/production/akram-khan-giselle/). Based on the classical ballet, in its characters and broad plot points, but has been adapted into contemporary movement and narrative by Khans choreography and vision. There is always a risk when you see contemporary movement given to classically trained dancers. They could hold back from the rawer moments or the unclean lines. Ballet dancers like to look good, its understandable. For the most part, if you werent looking at them thinking about this - I dont think you would worry so much about it. Tamara Rojos performance as Giselle was, appropriately, otherworldly. From innocence and smitten to fear-driven anger, she mixed vulnerability and strength in a way which I cant imagine ever being able to replicate. The first act was bullish, raucous, misplaced energy. Some wonderful folk dancing, animalistic movement, and very physical violence. The second act, all forty minutes of it, were heartbreaking, and I was furious when the curtain came down without letting me know what I need to do with these new emotions. It was wonderful to see the piece reimagined in this way, and set to a powerfully composed original score and soundscape, which pleased the contemporary dancer in me to no end.

View file

@ -0,0 +1,41 @@
---
title: "Moving my personal site to Gatsby"
author: "Thomas Wilson"
date: 2019-12-31
draft: false
slug: "moving-from-nuxt-to-gatsbyjs"
tags:
- javascript
- gatsby
- vue
- react
---
A few weeks ago I was having a conversation with someone about modern web design, and we spoke about web fonts and variable fonts. In my experience, people who work in software development have a couple of hills that they will die on, if so required. For this person - the idea of not using system fonts (i.e. typefaces which are already installed on a users device) was completely baffling. Why are we increasing the time-to-load and packet size required to display a web page - just for a typeface. What about that horrible (re)appearing text, or worse, shifting text which happens when the browser finally loads the typeface.
System fonts, I had argued to me, are designed and considered specifically for the device viewing the page. Theyre curated in a way that we, as site authors, cannot easily curate.
Ever since they introduced that tiny bit of doubt into my mind, I couldnt help thinking that maybe I should just be using system fonts. Long story short, I rewrote my entire personal site (https://thomaswilson.xyz) from [Nuxt](https://nuxtjs.org) (a Vue.JS application framework) into [Gatsby](https://www.gatsbyjs.org) (a React.JS static site generator). It took me like to evenings and Im happy with my decision.
Look, there were a couple of other factors in this. Like, I had just taken the jump to go freelance so I needed to move my increasing portfolio over to my professional site. I wanted to move some of my older pieces of writing from Medium onto pages on this site. I was creating a beautiful list of my [favourite albums of 2019](/albums-2019). There was a lot going on, and I was finding a lot of friction in the process of writing blog posts for this site.
## Why React, not Vue ?
Fundamentally, I have more personal and professional experience with React. I have created a lot of static sites and dynamic apps with React, Ive used a lot of styling solutions, state management libraries, application architectures, and third-party packages. I know my way around the ecosystem, around React-ive thinking. We should be careful of using tech _just_ because were comfortable with it, but when its your personal website which no one else will see or touch - familiarity is a major benefit.
It definitely didnt help that I was having _big_ problems getting my codebase to build on a new Laptop (a 2019 MacBook Pro, not even something obscure). It couldnt get the Nuxt -> TypeScript build chain to work, despite hours of debugging. Im not a dev-ops or build-chain kind of developer, but really this shouldnt have happened, and should not have been so obscure to solve.
Additionally, at the time of writing, the proposed [V3 of Vue.JS](https://medium.com/the-vue-point/plans-for-the-next-iteration-of-vue-js-777ffea6fabf?ref=madewithvuejs.com) will contain a lot of changes to the library and recommended practices. I am excited to see these changes, and I think Vue.JS is a better web application framework out-of-the-box than React and Angular - I believe V3 will bring a lot of hard-learned lessons about web apps into the framework. However, right now I didnt fancy re-writing most of a failing Vue app to have to re-write it again in a few months. _A la_ AngularJS vibes.
## Why Gatsby?
Ive used Gatsby a few times to build quick/simple sites for friends. Its very fast, both in development process, build process, and then loading times. I was looking for something I could be productive in quickly, at Gatsby was that.
I want to give a special shoutout here to the `gastby-image` package for lazy-loading images (alongside the GraphQL support and `image-sharp` library for image processing. This kind of support for blur-up images, and an easy ability to control image size at build time are incredible, and a great step forward for the modern web.
Speaking of GraphQL (smooth, I know) - I think GraphQL is going to play a big part in web development in the next 3-5 years. No, not everything is going to be re-written to be GraphQL endpoints, obviously. That would be a bad idea, obviously. Yet, as a front-leaning full-stack developer, GraphQL is powerful and expressive enough to make me take notice. Gatsby gives you a GraphQL layer to query for all your data (local files, site metadata) - the chance to get familiar with this tech is something I am appreciative of.
Recently the core-team has been pushing [Gatsby Themes](https://www.gatsbyjs.org/docs/themes/what-are-gatsby-themes/) (as I heard about on [here](http://www.fullstackradio.com/115), [here](https://syntax.fm/show/150/gatsby-themes), and [here](https://syntax.fm/show/150/gatsby-themes)). I love web design (have I mentioned that yet?) - and I love seeing the core-team take such an interesting, systematic approach to design as a core part of their frameworks architecture. It looks like Ill be able to learn a lot about systemised design through Gatsby.
Lastly, I wanted to quickly/easily deploy my personal site on [Netflify](https://www.netlify.com) - a service which can build, deploy, and host static sites incredibly easy. It took, and I am not exaggerating, about 120 seconds to go from creating a git repo to having this website available on the World Wide Web.

View file

@ -0,0 +1,24 @@
---
title: "Re-publishing my writing on my experiences with food and eating disorders"
author: "Thomas Wilson"
draft: false
date: 2020-02-20
slug: "introducing-eating-anthology"
tags:
- eating-disorder
---
**tl;dr** - I have moved the writing I have created on my experiences with eating disorders to this site (and off of Medium.). You can find them [here](/eating-anthology).
For at least the past five years, my mental health has been affected through and alongside a weird relationship with food, exercise, and eating. I find writing helps me clarify my thoughts and my situation to me. While a lot of this writing is intentionally private, there are a couple of piece I want to be publicly available.
Back when I published my first piece on this subject, I put it on medium.com - however that site has recently favoured the advertiser over the reader. Back in 2016 it was very much the opposite, and while I understand they need to make money from people reading their writing - I don't, and so I can afford to favour the reader experience. When I've written something so personal and meaningful, I wanted people to read it in the same way.
So I have collated my writing into a small anthology, which you can find on my personal site, [here](/eating-anthology) or each piece individually at:
- 2016: [My Eating Disorder Was Dangerous Because It Was Powerful](/eating-anthology/2016)
- 2017: [Loss and my ED](/eating-anthology/2017)
- 2020: [My eating disorder will always remind me of the person I was, and am](/eating-anthology/2020)
I've left the initial pieces as untouched - with only some minor styling changes to bring some of the long lyrics I mention into life.

View file

@ -0,0 +1,54 @@
---
title: "Hereabouts devblog #1"
author: "Thomas Wilson"
draft: false
date: 2020-02-24
slug: "2020-02-24-hereabouts-devblog-1"
tags:
- hereabouts
---
Hi, my names Thomas Wilson but I often go by my just my surname. Im 28 years old, currently based in London, England, and I design and build software for a living through my small independent studio [tinyfox studio](https://www.tinyfox.studio). At the beginning of 2020 I quit my job to do this independently, and now Im building _hereabouts_ - an app that provides self-paced walks, tours, hunts, and races for travel adventurers
In this devblog series I want to record to the process of building something modern and beautiful from the ground up.
## My problem/frustration
I love being in places. I love walking around the streets of London, and especially love how London feels like 30-40 little villages that you can find yourself in at any moment. I love learning things about the people who lived and made this place what it is today. Its my favourite part about travelling solo - is that I can walk around a new city at my own pace.
The Pre-Raphaelites had studios in Bloomsbury, Virginia Woolf lived and wrote some of her work just south of Kings Cross, Sherlock Holmes got coked up just east of Regents Park. You could maybe walk between all of these locations in 60 minutes, and comfortably within an afternoon. Maybe youd notice something things if you read the [blue plaques](https://www.english-heritage.org.uk/visit/blue-plaques/) but really whats a sentence to describe a lifes work?
When someone visits London from somewhere else, or when they move here, or even if they just need a good idea for a fourth date - I want them to feel connected to the place and idea of London. Not caught up in frustration at the man who get on the tube before letting other people off, or the blind panic when you misjudge the timing of the turnstiles coming into the tube station. But these are both very real experiences of London, everyone who visits should have them. But theres so much more in a place.
## Hereabouts: self-paced walks, tours, hunts, and races for travel adventurers
Hereabouts is the name of the app I am building to address this problem. I want to create an app that lets people explore a new or old city by giving them guided tours, stories, puzzles, and races.
I want to reach adventurous travellers and sate their appetite to learn more about what makes a place beautiful.
I dont know what exactly it will look like or do. Thats part of the development process.
## What I want to achieve
By building this idea out there are two things I want to achieve, neither of which are overtly technical:
1. I want people to experience joy and connection form the place theyre in or connected to
2. I want to provide high quality story telling and information resources
For a while Ive wanted to build an app that helps people discover a place by being in it. I want to help people discover the same feeling I have when Im somewhere and I learn something about it. I want people to have fun in the real world, in real spaces without being tied to their screen, or a paper guide, or part of a pack of tourists.
I love storytelling, and humans keep re-inventing how the do it. Oral stories, pictures, words, theatre, tv, movies, podcasts. Storytelling is probably the least talked about oldest profession. So I want to share the stories of the people who frequented, built, ruined, or just passed the streets.
I hate that when I go to learn about a certain place, or person, or idea - the information is scattered and made distant. It is made boring - because it is hard work, very skilled and professional work to weave together narratives of people, places, movements, and ideas. But you create value by providing high quality, unique resources that appeal to _humans_ (not _users_.)
## Why build an app?
Something I keep re-learning about myself is that I have this drive to build and create things for me any myself. I first learned this about myself during my Ph.D. where I taught myself software development so I could make a web app for my education research. In the three years since I finished that, I have worked for a large company and a growth-stage VC-backed startup. I happily sacrificed a lot of myself into these jobs because I learned a lot from other people. Being self-taught is a good start but its a terrible middle.
And to be honest, I think the things I want to achieve can _only_ be done on modern handheld technology (i.e. phones) because I want to bring multimedia (picture, audio, text) to someone based on the place theyre in. I think it _could_ be done by being walked/shown around by a professional. However thats not an idea that excited me, and I also think its too much like forced fun. Part of being an explorer or adventurer is being able to go down side streets, get surprise ice cream, or spend twice as long somewhere you find interesting. There should be guidelines, not fences/rails.
This is also overlooking the fact that I am a software developer by trade/craft. It influences to way I see the world, solve problems, and build solutions. I enjoy designing and building software, and Im sure thats affecting my decisions.
I also want to call out a couple of very influential sources to me when thinking about if this is something that I _can_ or _should_ even be doing:
- [Basecamps books](https://basecamp.com/books) - specifically "Rework” and “It doesnt have to be crazy at work” have shown me the kind of company it is possible to build, and the way you can go about making something.
- The [indie hacker](https://www.indiehackers.com/start) movement have been excellent at showing me countless examples of people who have built businesses at various speeds and with various goals.

View file

@ -0,0 +1,129 @@
---
title: "Kickstarting UX Design with ugly working documents: Screens, Components, Actions, and State."
author: Thomas Wilson
date: 2020-03-15
slug: "2020-03-15-ugly-but-functional-ux-design"
draft: false
tags:
- ux
- design
- figma
---
UX design resists standardisation or templates. It cant be a one-size-fits-all approach, and the nature of the product, audience, and production team all mean that something different is needed each time. Whenever I get past the early stages of UX design (like understanding what a product does, and who it does it for) - I find myself with a different working document and process than Ive needed before.
I wanted to share the things I do that give me the momentum to get to a place where I can do this more specific kind of document.
I am a very visual person, so this starts with low-fidelity UI mockups: clunky boxes and text, that I can setup and tear down quickly. My process is built around forcing me to move through all the parts of an app quickly. This means I force myself to encounter all the information an app needs,every way that its displayed, and everything a user can do with it. Seeing these things within a short time makes repetition and patterns more obvious - and helps me make connections and similarities.
## Tl;dr
1. You are going to make a list of all the Screens & Components in your app. Youre going to do it in an ugly-ass looking document that youre never going to share and actively should not spend time to make pretty. Make this document however makes sense for you - Figma, Sketch, Paper, whiteboard, plaintext, WHATEVER I DONT CARE AND NOR SHOULD YOU - YOURE NEVER GOING TO SHARE IT
2. First, make a list of all the **Screens** in your app, and lay them out (roughly, dont fiddle with arrows) in an order that someone could realistically move through your app. I like to group similar screens closely together, and I also look for common screen patterns (e.g. screen with a header and a footer nav).
3. Youre going to make a note of all the high level **Components** on the screens. Start by just making a boring old box with really clear terms on it: e.g. “Account Details”, “Sign in form”, “Create account form”, “Recent transactions”.
4. Go through these high level components and start making the low level, more abstract/utility ones: “TextField”, “Button”, “Icon”, “Label”. And begin to compose these together in your higher level components.But **do not lay them out nicely**.
5. Take your Screens and Components, and list all the variants in **State** that you can have: can a TextField be `selected` or `disabled` ? Can an event in a calendar be `upcoming` or `passed` ? Can the Screen for editing an article be in `edit` mode or `read` mode ?
6. Youre going to look at all the components you have that are **Actions** - i.e. can I click it, slide it, interact with it in a way that does something: navigates me somewhere, opens a modal, logs me out. Use this as a chance to understand all the ways a user can navigate around the app - going from one screen to another.
7. Look at all this amazing information you have about your app or product, and how you can organise it to help your team design and build a product in a way that creates the most value most quickly.
## Why even do UX?
I mean, honestly, if you dont think it will serve you, your product, or your team, dont do it. Dont invest in work uncritically, if you dont see how it ultimately makes you more money or a better product. If you think what Im saying is dumb, dont listen or read - I think plenty of people have useless opinions, especially on the internet.
For clarity, when I talk about UX design, I am talking broadly at developing an understanding of an app or service from the end-users perspective. How will they interpret the thing we put in front of them, and what can a design/engineering team to do make sure that the creative vision is the same as the users experience?
Its like viewing a miniature model of a town: you can see distinct regions, connections between them, and kinds of buildings in each. But you dont get bogged down in the specifics, like “is that store a pharmacy or a grocery store?”.
More concretely, this understanding is useful in making a product that actually does what you want it to. Its no good having an app that does something “in theory” - because truly most of your users dont care about “in theory”. They want to learn a another language, make a claim on their insurance, or get a new beautiful handmade scarf. This is similar to the Jobs to be Done mentality.
From an engineering perspective, as someone who _makes_ apps, doing UX design helps break a “simple” app into exactly how many things need to be built, and what they need to do. It lets me build the necessary things, in a sensible order, and gives me a shared language/understanding that then lets me communicate effectively with a team.
## 0: Screens & Components, State & Actions
Everything I do in this early UX process is designed to help me understand my app along four heuristics: Screens, Components, State, and Actions. These are the things that I find it useful to break an app into - they might be useless to you and thats okay. Do read on, and see what sticks.
- **Screens** - these are easy to intuitively grasp but hard to define. Assuming prior knowledge of the internet: theyre like URLs of a website, which will take you to a specific page, like a profile, sign-up form, or edition of a newsletter. More abstractly, theyre discrete, separate views into an application which are containers of other content (i.e. Components).
- **Components** - are also really hard to define - theyre visual _things_ on the screen. The [ReactJS](https://reactjs.org/docs/components-and-props.html) docs calls them “independent, reusable pieces, [that let you] think about each piece in isolation”. The most commonly thrown-around example of components are Buttons or Cards - theyre just reusable bits of UI, that can be really small (like a button) or larger (like a log-in form).
- **State** - is a way of modelling what information/data the app will store, it usually affects what will be displayed or how it will appear. For example, whats the name of the current logged-in order, what are the details of the current search/filter being set by the user?
- **Actions** - are the things a user can _do_ on a screen, what can they press, swipe, toggle, move, type into, etc. The consequences of these actions can be things like opening a modal (a Component, by the way) or navigating to a new Screen .
### You are creating a low-fidelity working document.
To help identify these things, were going to make a visual representation of each. At the early stage on the UX design process I have to remind myself often that **I am creating a working document** - one that wont be shared widely (or at all) within my team, let alone outside of it. This is just a way for me to organise my thinking. This isnt about making any kind of mockup that looks pretty, or crafting meaningful naming conventions.
Your working document will probably be ugly. Mine _definitely_ are. I have intentionally put ugly images / mockups in this article so you can feel better about how bad yours look and how little you want to share them. Anything you create during this process is meant to serve you, not Dribbble or Instagram. Embrace the brutality and Spartan utility of your UX diagrams.
Trying to optimise for visual and semantic consistency at this stage makes you _feel_ busy, without having to address the important questions. So long as I know what a component or screen means, then it doesnt matter.
I also really encourage you to **work with pencil and paper next to you**. Even if youre prototyping on paper - have more paper ready just to jot down questions, sketches, ideas as they arise to your brain. You cant go chasing down every rabbit hole - it will break your flow, and I really think its important to build up a good flow, in this process. This flowcess. But you also dont want to lose any legitimate ideas or questions you have, they can help you a lot when youre doing higher-fidelity design.
### Oh my plants
In this article Ill be using the example of an app that helps you keep track of all of your houseplants. Ive called it “all my plants” and Ive given it a very predictable green theme.
## 1: Identify Screens
So lets imagine the following user journey in _oh my plants_ - I want to get to a page that has a whole bunch of details about a specific herb. I can get there by searching for it, by seeing it in a list of plants Ive said I own, and perhaps by an automatically created list of plants (like whats in season). This gives us five screens: starting at _Home_ we can end up at _Plant Details_ by going through either of the three possible routes.
![](/assets/blog-images/FF9A9D2E-BB92-4334-8EE6-67BE6F85B14C.png)
This kind of layout, with the arrows drawn between them, is useful at some points, but its exactly the kind of over-optimisation I just warned against. Because what happens if I need to add in a new screen or remove one? I have to re-structure all of the positions and arrow flow.
Robust software architecture is about fighting rigidity and letting developers change individual parts quickly - because requirements are always changing. Good UX design can learn from this - build a working document is about rapid change - the tool you use should work as close to the speed of your thought process as possible so that one isnt lagging behind the other.
Ill end up with something like this: simply a list of screens, in some semblance of order that make sense to me. In Figma I make each of these into its own Component (or Symbol in Sketch) so that when I begin fleshing out user journeys later on (like the pretty arrow diagram above) - well see something less abstract than just white boxes and black text to represent a screen.
![](/assets/blog-images/E8AEAC0A-FAE2-40B9-AABB-3BDA358F6167.png)
## 2: Identify the Components
Once youve got all the screens, start going one-level deeper by identifying Components - distinct bits of UI. I find it most useful to start with the high-level components - i.e. Start with high-level components - things driven by their use cases. I name these in very opinionated ways: “User Owned Plants” is a list of plants the user has said they one, and “In Season Plants” might be a list of plants that are ripe for planting.
After Ive done that, I start identifying the lower level components: things which are not so closely tied to specific use cases. Prime examples are Lists and List Items, as well as Buttons or Cards. Use your own discretion and opinions here: is a `SearchBar` component distinct from a `TextField` - or should they be the same thing? I would advise leaning towards how you communicate things to the user: do you want them to conceptualise a search bar as the same thing as a field in a form? For me, I would keep them as different components, but I could very easily see it argued either way.
![](/assets/blog-images/34B9248A-544A-424A-8047-AE1A2AD07CB4.png)
## 3: Identify State
With your new list of screens and components, youre going to want to go through and make a note of every possible variant based on state.
![](/assets/blog-images/FD4E6849-5A3C-49FA-90E6-578E0754C050.png)
This is when things start to get a little complex/tedious, because it can massively increase the sheer number of screens and components that it looks like youre going to have to design. Its also worth paying attention here to the kinds of State - chances are there arent that many discrete ones, and they can come in groups and are conceptually related: selected/disabled, read-only/edit, locked/available, active/not-active.
When it comes to the actual design, youll be able to share visual metaphors here. In fact I would suggest that kind of consistency can make complex business logic or states feel much more simple than their implementation details. If things are disabled/inactive/locked, for example, the result in very similar to a user: theres a thing on the screen that I cant interact with right now.
### Wait, why do I need state on my components AND screens?
Yeah, this is a very fine line - and totally _is_ a matter of opinion. This is one of the points that makes product and UX design a skilled profession.
For me, it comes back to what I said at the beginning: UX is about understanding how the user will perceive the product. Even if the information were presenting is correct, its the _way_ its presented that makes the difference between a good and a great experience.
Enough talk, lets give an example. Imagine _oh my plants_ knows whens the perfect time to plant each garden herb. It has a `PlantList` screen - which is a simple list view of `PlantListItem`s.
A `PlantListItem` represents one individual plant - which is the thing thats in season. Following that logic, we want to flag each plant as in “in season”.
![](/assets/blog-images/9AA37981-1E94-4C85-8923-4E183CEB439E.png)
In practice, however, the fact that all the plants are highlighted means that none of the plants are highlighted. It also just looks weird and cluttered and busy. Instead, what if the `PlantList` was highlighted with some special way of saying that it is in-season?
## 4: Identify Actions
An action is normally something that changes the state of a component or screen, or that navigates the user around the app.
If you identify actions at this point in the design process, it should be really easy for you. Its probably anything that uses a component like `button` or `select` or `switch` or `tab`... you get the idea.
![](/assets/blog-images/EB659E9B-3FC1-4A0F-B6C2-E1C2622159FB.png)
Conversely, if you recognise there are actions that are triggered by clicking non-typical components, like undecorated `text` or `header` - then maybe these are interaction patterns you need to make discoverable to your users.
Whats considered “typical” depends on the conventions of the platform, e.g. long-press and double-tap on mobile dont really have equals on the web.
## 5: Go forth
Look, you made it all this way, congrats because even I struggled to make it this far down when I was proof-reading. Hopefully at some point along this journey youve thought “wait, why am I doing this next bit, surely I should go off and do something else instead” - then good. Go do that other thing, like thinking about adding new features or, even better, removing others, or making clearer visual metaphors or condensing many metaphors into one.
Youve hopefully got a much more complete and accurate (read: big and scary) picture of your product: all the things it needs to do, what you need to build, and exactly how many designs youve got to flesh out and then build. Or throw over the wall to the developers and hear them argue over for the next 2-9 months.
Take this blueprint forward and make something youre proud of, or ignore my opinions and become successful anyway - I truly do not mind.

View file

@ -0,0 +1,80 @@
---
title: "Why I chose React Native to build a new app in 2020"
author: Thomas Wilson
date: 2020-03-22
slug: "2020-03-22-why-i-chose-react-native-for-app-in-2020"
draft: false
tags:
- react-native
- react
---
I am currently in the process of building herabouts - an app thats like a tour guide, only cooler. Most of my previous engineering work has been web-based (react and vue) because the internet is an accessible and very capable system for building modern applications. However hereabouts needed certain native functionality - like location, reliable offline data access, battery status, and access to the camera. Yes some of these things are _possible_ on the web, but theyre much more native functionality.
Ive made the decision to write the app in [React Native](https://reactnative.dev) - a library for creating applications for native platforms (like iOS and Android) using React and JavaScript.
I wanted to share the reasons I made this decision because despite having worked with React Native for clients in the past, I was cautious about adopting it for a personal project. AirBNB famously [abandoned React Native in 2018](https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a) citing a couple of pretty damning reasons: long initialisation and first-render times; lack of code-sharing between platforms; mixed developer experience.
In the same post, however, they say that most (80%) of their devs found the experience at least slightly positive (subjective as that is), and acknowledged that a lot of their problems may relate to the the size and complexity of their team and product, alongside the early nature of React Native at the time. In the years since that was published, React Native and the surrounding ecosystem (like [expo](https://expo.io/)) have made the development experience of making a native app a _lot_ better. Big tech companies, like [Shopify, have also adopted](https://www.theregister.co.uk/2020/01/30/shopify_shifts_its_mobile_development_to_react_native/) React Native.
Its never a clear choice what tech to use, and its especially difficult when youre starting something new and have no constraints. So I wanted to make sure I was making an informed decision, and this article outlines that process.
## Why not native-native?
I initially started working on hereabouts as a native iOS application, written in Swift. At present (March 2020) Apple are transitioning the way UIs are written in Swift to use [SwiftUI](https://developer.apple.com/xcode/swiftui/). The API for SwiftUI is still in beta (currently beta 4) and still has a few quirks (e.g. see [this Reddit post](https://www.reddit.com/r/iOSProgramming/comments/fd7mpz/holy_shit_how_the_hell_do_i_use_swiftui_its_the/)) that made the process of building an app cumbersome and awkward. I was unsure of the relationship and split of responsibilities between the existing UIKit, storyboard, and SwiftUI. Given how SwiftUI is largely [seen as the future](https://www.macrumors.com/2019/06/03/apple-unveils-swiftui-framework/) of iOS development (and its declarative philosophy shared by react), I didnt want to tie myself to supporting an app written without it, nor did I like the possibility of having to maintain a hybrid UIKit/SwiftUI app where the roles and responsibilities of both parts were changing regularly.
This opened up the possibility of creating my app using a cross-platform library - not because I wanted a cross-platform app, but because I wasnt happy with the native tooling. This just happened to open up the Android market. Previously I made the decision to focus on iOS over Android because a) I am personally all in on the Apple ecosystem, and b) [more money](https://www.businessofapps.com/data/app-revenues/) [is spent](https://sensortower.com/blog/average-publisher-revenue) in Apples App Store and in the Google Play store. Although Im not making hereabouts to get rich, Id certainly like some gin money.
## Reason #0: I already know React
The simplest reason for me choosing React Native, over say [NativeScript](https://www.nativescript.org/) or [Flutter](https://flutter.dev/), is that I already know React. Ive got experience writing production and personal static websites and enterprise apps in it. The declarative and data-bound nature of writing React, especially with [TypeScript](https://www.typescriptlang.org/), comes quite naturally to me now.
NativeScript supports Angular and Vue as first class citizens, which I simply dont use as much as React. I started off my Frontend Engineering career writing apps in Angular, and Ive written a couple of fast and easy websites in Vue. Theyre good frameworks, but right now I think React has a large (if not consistently _good_) community. I know how to handle complexity in React, and I have opinions about styling and architecture that React doesnt fight.
Additionally, Google has a reputation for sunsetting projects with little notice, which makes me a little apprehensive about Flutter.
## Reason #1: React Native isnt a hybrid WebView app
Many peoples gut reaction to creating a cross-platform app is to think of something laggy, and distinctly _un-native_. One of the simple and earliest approaches to adopting cross-platform mobile development was to use web technologies, which are famously cross-platform and system agonistic, and have the native app render the web app (in its own HTML, CSS, JS) through a WebView. This is how platforms like [Ionic](https://ionicframework.com/) and [Cordova](https://cordova.apache.org/) work - and theyre great for very simple apps, but theyre notoriously [not very performant](https://www.netguru.com/blog/why-you-should-migrate-your-app-from-ionic-cordova-or-phonegap-to-react-native).
Native apps are better than, and distinguished from, websites by how “snappy” they feel - how responsive the app is to a button being pressed, giving haptic feedback, and then navigating somewhere. Its hardly noticeable when done right, but when theres a 400ms delay between pressing a button and seeing something happen - you _will_ notice.
However, React Native works differently: you write your views using JSX, and these are then bridged to native code for iOS and Android - meaning, at some point, it becomes native, and is not just a DOM.
Lets just take a second to clarify some of these words: first **[JSX](https://facebook.github.io/jsx/)** is an extension to JavaScript (or to give it its full title: ECMAScript) that introduces XML-like syntax for creating structured data. It looks an awful lot like HTML, but with a few syntactic differences, and the ability to include data in the structure:
```
import React from react
const Message = () => {
return (
<div style={{colour: blue}}>
<h1>Hello!</h1>
<p className=“message__text”>Welcome, friend</p>
</div>
)
}
export default Message
```
**JSX** is [syntactic sugar](https://en.wikipedia.org/wiki/Syntactic_sugar) - its goal is to makes the code easier to write and parse by the humans who have to read and write it. Its also a separate library from React and React Native, but is used by both libraries by default as a way to construct a virtual representation of view elements, like HTML Elements or DOM Nodes. It compiles down to something different, and instructs React to do React-y things like `createElement()` but were not talking about that here.
The second term I want to bring out and talk about is **bridging**. For an application to run natively, it has to be able to talk to the system in a language and API it understands: e.g. UIKit and Objective-C/Swift for iOS, and android.View with Java/Kotlin for Android. This is a distinguishing factor between cross platform apps (like those in React Native) and the hybrid WebView Apps - we can use a cross platform application to communicate with native APIs, like maps or device orientation.
The part of the architecture that lets a JS thread, where a React Native application runs, talk to the native Threads, [is called the Bridge](https://hackernoon.com/understanding-react-native-bridge-concept-e9526066ddb8). The details of how this works are covered for both [iOS](https://reactnative.dev/docs/communication-ios) and [Android](https://reactnative.dev/docs/native-modules-android) in the React Native docs and arent really relevant for this discussion - just know they happen.
This article isnt an explainer about JSX (but JSX is a interesting idea, regardless of what you think about React itself) or Bridges - but theyre two big technological differences between React Native and other libraries that let you use web technologies to write apps.
## Reason #3: The performance and benchmarking discussions are nuanced
One of my core beliefs (read: something I work very hard at, but am not necessarily always good at) is only releasing/selling products that I would be happy for someone to pay for. Above all other things, I want hereabouts to have a native feel - to be responsive and feel intuitive to use. It needs to hit that magical 60fps bar, and _feel_ like a first class citizen on a mobile phone because that is what I would expect from an app that I paid for.
Ive seen a couple of blog posts that (like [this one](https://medium.com/swlh/flutter-vs-native-vs-react-native-examining-performance-31338f081980) from inVerita, and [this one](https://thoughtbot.com/blog/examining-performance-differences-between-native-flutter-and-react-native-mobile-development) from Thoughtbot) about the performance of React Native that had me worried that Id be fighting an uphill battle to get performance two where I wanted it.
Fundamentally, though, good performance in React Native _is_ possible. It requires a [thoughtful consideration around what youre doing](https://reactnative.dev/docs/performance), and building with the tools that let you investigate and profile your app to let you know when theres a problem.
Its much easier to read an article and see how React Native (or any tech) “has bad performance” but this depends too much on what youre doing and how youre doing it. Its a nuanced discussion and it also gets at the whole “software engineering is a skilled profession” thing. The research I did in this area was enough to assure me that I can code myself into a bad situation, but I can code my way (at least mostly) out of it.
So Im not overly concerned about poor performance in hereabouts _just_ because its written in React Native. Of course I am concerned about it, but I dont think this is a problem unique to the platform.

View file

@ -0,0 +1,101 @@
---
title: "Hereabouts devblog #2 - March 2020"
author: Thomas Wilson
date: 2020-04-01
draft: false
slug: "2020-04-02-hereabouts-devblog-2"
tags:
- hereabouts
---
Hi, Im Thomas Wilson, Im a web and mobile engineer building [Hereabouts](https://www.hereabouts.app) - an app thats like a tour guide if the tour guide was like [Roman Mars](https://99percentinvisible.org) after three beers. This is a devblog where I talk about my progress building that app. Also Im very sorry, Roman, youre one of a handful of people who I genuinely aspire to be like please dont take me seriously.
---
Well March 2020 has certainly turned out to be quite the introduction to working on a side project. Its the month that the UK (and Europe, North America, etc.) started nationwide lockdowns to prevent and slow the spread of Covid-19. Social distancing, self isolation, and quarantine are all in full swing.
Imagine starting a side project based almost entirely on being able to travel somewhere new, or even just go outside and walk around. Its a strange time, but everyones talking about it being a strange time, and honestly were all just trying to find a new temporary normal. So with that in mind, heres an inconsequential update on Hereabouts.
Im still pretty undecided on the format of a devblog, which makes this one a brain dump, but definitely the kind of brain dump that you should read.
## Notable things
- The Covid-19 Pandemic.
- By September-October, I want something that I would be happy for someone to download, and happy to ask them to pay for. Assuming theres still an App Store to host on, a functioning economy, cities to visit, or people to buy it. Okay that was my last Coronajoke. And that, my last coronamonteau.
- Decided on running development in 4-6 week cycles. This is based off what Ive read from Basecamp, but also a general understanding about how long things _actually_ take to design and build to a certain quality.
- Started building more formal documentation (in Notion and Figma) for use case + market summaries, user journeys, business entities, and visual design language.
* Purchased hereabouts.app domain, built a [simple landing page](https://www.hereabouts.app) (ReactJS on NextJS, hosted on Zeits Now), and created a mailing list that so far only my friends (and not even my parents (?!)) have signed up for (SendGrid, NowJS API routes, and CloudFlare worker).
* Started building the app. Started in Swift, moved to React Native. Enrolled in Apple Developer Programme (arguably too early - its a motivator)
## What an Emotional Rollercoaster, feat. The Covid-19 Pandemic
This past month has been one of the most varied emotional months Ive had in a long time. I my emotions to be strong in number and force at the best of times, but imagine quitting your job to go freelance in what is possibly the worst time in 30 years.
I am not a stranger to self-doubt. I often think I am about to get fired, when in reality I have never been fired, or come close to being fired. Maybe I have and Ive just instinctively played the “you cant fire me I quit” card.
The big situation here is the SARS-COV-19 pandemic thats needling through the globe right now, causing unnecessary loss of life and bringing an economic recession and a wake of social crises. What a time to be alive.
Can you imagine finally deciding on a side project you want to carry through to production/publication, and then a [global pandemic breaks out](https://www.who.int/dg/speeches/detail/who-director-general-s-opening-remarks-at-the-media-briefing-on-covid-19---11-march-2020). Not great for the global community or economy, or for an app specifically built around the idea of being outside. This comes at at time where most of the advice from European governments is to stay inside, with [increasing](https://www.bloomberg.com/news/articles/2020-03-14/spain-s-coronavirus-cases-jump-36-to-5-753-deaths-rise-to-136) policing and [enforcement](https://www.aljazeera.com/news/2020/03/europe-edging-total-coronavirus-lockdown-200316131203376.html).
Ive had to seriously think if building this app remains a good idea, and I think it is. I really struggle with shiny-things-syndrome, where I flit between and around ideas and never commit fully to something. Hereabouts is the first side project in 3-4 years that I decided to see through seriously _and then did something about_. Its the only one that made it past a line in a note on my iPhone. Its not the only idea Ive got rolling around in my phones notes, and its probably not even the best one. But its one that excites me: its an app I would like to have and use, and its something that I think can offer value to people. Its also going to teach me a lot about launching an app in the real world.
Yes, a pandemic with strong government response _is_ a good mitigating factor - March 2020 has truly been wild, and I dont think anyone would blame me if I let the idea go to find something more stable. Like a Zoom alternative or remote yoga teaching software. Or just a Zoom alternative without extremely concerning privacy policies. Im sure video conferencing cant be that hard, theres no reason that all the alternatives are terrible to use.
Whats more, the current economic climate has seen travel and leisure industries basically tank out, and its looking a lot like many people this year wont be able to take holidays. Some of those holidays will be honeymoons, or retirement cruises, or long-overdue personal relaxation time. This pandemic is making a lot of us suffer in a lot of ways, but I digress. Theres a [global recession](https://www.theguardian.com/business/2020/mar/15/prepare-for-the-coronavirus-global-recession) [threatening](https://www.economist.com/finance-and-economics/2020/03/05/a-recession-is-unlikely-but-not-impossible) and although central economic bodies are all trying to act to mitigate these factors, theres a chance that people dont have money to spend.
I am aware that I dont want to continue under the guise of [hustle porn](https://www.inc.com/serhat-pala/alexis-ohanian-says-hustle-porn-is-most-dangerous-trend-in-silicon-valley-heres-how-to-eradicate-it.html) - I dont want to see this hardship and fight against it _just_ because its a struggle and it makes a great narrative. I dont want to think of myself as a company that was shaped by the COVID-19 quarantine and panic. I dont really see that as an influential factor in what Ive decided to do, or how. Whats more, I dont think end users really care about how or when an app was made, especially as people will (hopefully) start to forget what things were like during these times within months of them ending.
The primary reasons I want to continue development of this idea, at least for now, is how early in development I am and how this remains a side-project. I have other full time work that lets me pay the bills and I dont _need_ this to take off. Ive given this project about 6 months, taking it to the end of summer (September-is) which was always going to be just off-peak for summer for tourism. But it looks like were not going to get peak tourism anyway on account of the global lockdown. I want Hereabouts to be an app that could be used by someone who already lives in a city, and as a cheap day activity for anyone. I think there remains a market for the app, and the possibility that I learn some interesting things from releasing it to a smaller audience.
In short: Im going to continue with development. Its just a weird part of the Hereabouts story - that the worst pandemic in literally 100 years strikes just as I get going with it. What impeccable timing.
## Thinking about development cycle and Topic Lock
I disagree with common practice of two-week sprints and an endless backlog as the best way to manage and drive software development. I think its short sighted and makes you feel comforted by how busy you are and how much work you have to do. If somethings important, it will keep raising itself as important, and I shouldnt move on without it. If something _feels_ important but I forget about it quickly, and didnt latch on and flesh it out - it probably wasnt actually that important.
This is especially true for right now: creating the idea for a new product, and then putting that into concrete UIs and code. What _is_ Hereabouts, what does it do, and how is it used? These questions are the most rabbit-hole kinds of questions, because theres a lot of edge-cases and what-ifs that can found or ruin a feature idea.
I want to feel I have the freedom to go down these rabbit holes because they are important and I dont want to spend time and energy justifying that when I could spend that energy exploring them.
To counteract the (very real) chance that I spend all the time designing or thinking of possibilities, and no time actually building them, I am thinking about how I can integrate the [Double Diamond](https://www.designcouncil.org.uk/news-opinion/what-framework-innovation-design-councils-evolved-double-diamond) process which is a needlessly buzzword-y way of saying that I am consciously separating out the processes of a) generating as many ideas as I can, and b) paring these ideas down to find the useful or recurring ideas.
Alongside that, I am thinking about Topic Lock. This is something I first heard from CGP Grey said in the [Cortex podcast](https://www.relay.fm/cortex/95), in regards to his work as an independent content creator. Its influenced from the way movie studios produce movies, and the Kanban project methodology: have a fixed number of things that are in progress.
I am striving to build a way of working that allows me to create and shape ideas, but also then critically examine the ideas individually and as a collective.
This is getting abstract and Im only a month in, so Im going to save this for another time. But look - Ive been thinking about how to create a process and environment that works well for me, my brain, and the product.
## User Journeys, Internal Documentation, and Design Language
This is my party, Ill do what I want, and I want to start by talking about the tools I used to do this work because I find that more interesting than the work itself. Im not proud of this part of me, but I love well designed, cool, and hipster apps.
[Notion](https://www.notion.so) is hard to describe: its like a Google Doc meets a database. I actually wrote about [why I gave up using Notion](https://thomaswilson.xyz/blog/back-to-bear) back in August so this is a little embarrassing - but I stand by what I said: I cannot use Notion to write long form prose, like this. I am writing this blog post in [Bear](https://bear.app).
Notion does let me capture my thoughts in a much more organised way, compared to plain text and markdown. Im not going to go into detail about how I use Notion specifically, but I am using it for:
- Writing that I dont intend to share but need to refer back to, e.g. business models, elevator pitch. Like a classic Wiki.
- Articulating and formalising the goals I have for a particular development cycle.
- Keeping track of the business entities or key “things” in the code base, like what is a “Tour” and “Place”, etc.
- Noting down research for both the content of Hereabouts (like interesting places), and the meta research around running a business.
Notion gives me freedom but also constrains me a little more than free form text. This is useful when I just need to get my goals and intentions down, and not spend hours worrying about how it looks. Notions got great design by default, kudos.
Theyve also fixed the navigation by Smart Keyboard on the iPad THANK GOODNESS. Not being able to move around in a sensible way without using my slow meaty dumb fingers on the screen was infuriating. I didnt spend dozens of hours of my life forcing vims philosophy into my own world view to have it ruined like this.
### User Journeys and Design Language - Another blog post (in Figma and Notion)
Ive done a _lot_ of work this month doing visual and UX design. The results, and how I manage these parts of my thinking and planning cant / shouldnt be described here because this is a devblog. Ive made a note to write about them in more detail later.
## React Native
I wrote a more in-depth post about [why I choose React Native](https://thomaswilson.xyz/blog/2020-03-22-why-i-chose-react-native-for-app-in-2020), also on my blog. So yeah, Ill be writing this thing in TypeScript, using React Native, and the [Expo platform](https://expo.io).
Lets take a whole paragraph to acknowledge how good a job the Expo team are doing. Honestly, such brilliant tooling.
I started working on this project in Swift: first with SwiftUI then moving to UIKit.As someones whos more fluent in frontend engineering (3 years full-time professionally), having to debug some of the problems and limitations of the new SwiftUI API wasnt productive. I simply dont have the frontline experience of using Swift in a production environment that made debugging and interpreting documentation a viable option.
Moving to UIKit very briefly made sense, but SwiftUI is the future of development on Apple platforms so why waste time working through that.
Id like to come back to SwiftUI in a couple of months/years, when its out of beta. I hear good things about it, and it sounds like theyre bringing in an opinionated declarative philosophy. Im excited to see how this affects the UI development community at large.

View file

@ -0,0 +1,51 @@
---
title: "I don't want to be a unicorn 🦄, an engineer or a designer - I just want to build things better"
author: Thomas Wilson
date: 2020-05-31
draft: false
slug: "2020-05-31-unicorns"
tags:
- frontend
- essay
---
I like building software, or parts of software, which are visual and interactive. I do not particularly enjoy the more abstract, very important, areas like technical optimisation, language design, or anything with the word "distributed" in it. I like building user interfaces (UIs); but also architecting and engineering the code that underlies these interfaces, so that engineers can build delightful and functional UIs, without going through as much effort. Good UI and user experience (UX) should be a norm, a default.
A lot of people either design _or_ code. People with feet in both sides of this skillset are often referred to as Unicorns 🦄, because people who do this are rare.
I don't like the term Unicorn, but it is dangerously close to describing where I am working hard to move my career. I have a difficult time explaining what I do to people. This is a problem when I want some of those people to pay me real human money to do that thing that I can't quite explain. The current software/technology landscape has made it hard for me to feel I can convey my self, my interests, and my skills using the small number of keywords (_Engineer, Designer, Manager_). I don't _want_ to be a unicorn, or an engineer, or a designer - I would like to be seen as a professional who can help teams and companies build things better. And this little essay is nearly 2,000 words asking _why is that so difficult to convey in a way which is taken seriously 🤷‍♀️?_
## Unicorns 🦄
This is a subject I've had to mull over since I entered the workforce 4-5 years ago. I have a very clear memory of listening to [Episode 318 of the Design Details](https://designdetails.fm/episodes/310638) podcast, apparently in mid-late 2019, in which the co-hosts answer a question about the topic of unicorns (emphasis my own, _I've not transcribed the "erms" and "likes" which were superfluous, forgive me_):
> I've been thinking about this idea of a unicorn, I think it's kind of a meme at this point. A designer being a unicorn is a designer who can code. **I think that's actually not possible anymore, or maybe it hasn't been possible for a long time**. And if we add in product management into the that, the ability for a single person to be really good at product, and also really good at design, and then when you get into coding it becomes so broad it's like: okay, can they make iPhone apps? Android apps? Websites? Can they do the frontend and the backend, are they really good at animation and visuals? Can they do user research? There's so many disciplines that to expect that of one person seems entirely unreasonable. And thus, kind of breaks the idea of a unicorn being one person who can do it all.
While I was searching around for other people's opinions on this matter, it's hard to find people praising the idea of hiring a unicorn, or marketing yourself as one. I've seen them called ["so hard to hire they might as well be imaginary"](https://www.atlanticbt.com/insights/myth-full-stack-unicorn-developer/). Or that "[Hiring a generalist typically means you hire someone mediocre at everything.](https://uxdesign.cc/the-mystical-unicorn-designer-c824d992599)". Or criticised as "[creating teams that are light on experience and overly competitive to move onto the next skillset before mastering the previous one](https://www.brianhoadley.com/2019/07/17/a-world-of-increasing-expectation-10x-engineers-and-unicorn-designers/)". These are all valid criticisms that any business looking for a cross-discipline employee should be aware of.
Despite this criticism, I think the relatively recent [expansion and funding](https://www.businessinsider.com/top-low-code-no-code-startups-investors-2020-1?r=US&IR=T) in the no/low code tools space is evidence that creating software shouldn't always be done by those with the technical knowledge or experience. Most directly with tools like Framer, which prides itself on being able to output code from visual prototypes. There's more to software than a robust codebase, and engineers can be better utilised than a widget/JIRA/feature factory. The notion of sliding pizza and some printed-off functional requirements under a door and waiting 3 months for the software to emerge is a funny trope. It's a trope because it was once more widespread than it is today, but also because it implies that engineers are _only_ code machines. That they cannot bring technical and creative energy to a project.
## Specialisation and language
I, like a lot of humans, am not just interested in one thing. I imagine very few accountants go home and keep thinking about accounting (by choice), and I'd imagine even less janitors go home and think about building maintenance. In the west we accept having hobbies and interests outside of work as normal, and to some extent, w expect it. If I go on a date with someone and they have literally 0 hobbies (liking food, travel, dogs, and gin are not hobbies or a personality 🙅‍♀️) that's probably going to be the last date.
In a professional context, however, it's much more common to do one thing, or a narrow set of things. Sure, we change jobs, but this is mostly in seismic events - a promotion, a sideways move, a career change. Economically speaking, allowing people to specialise makes sense - [it's division of labour](https://en.wikipedia.org/wiki/Division_of_labour). We should let jobs be done by those who are good at them, and we can offer more value to a company (and therefore the entire economy) by having a higher unit output per unit input. I can't turn up one day to work and play CEO, then turn up on Wednesday and be HR, then round the week off by being CFO. If you listen closely you can hear all the co/founders of small, scrappy startups blustering "BUT THAT'S WHAT I DO" - listen Jennifer, you know as well as I do that the first thing you'll do if you have money is hire someone to do the things you don't like doing, and they'll do it better than you've been doing it. You'd be mighty annoyed if you hired Benedict to do your accounts for you, and two weeks later he's running your Instagram marketing campaigns instead of running payroll. Stay in your lane Benedict 👎
Look, I got off track, let's bring this back to software. There's a lot of _things_ to build when you're building a system of software to support a modern business. Sometimes, there's not a lot of room for mistakes in these systems: your bank and the government need the highest quality security, search engines need the fastest indexing, e-commerce websites need to load fast, and so on. No one person can master all of these things - if they could, then they would - but I would be so bold as to say that most software engineering teams are more than one person big.
Like a lot of things, the closer you look at each area of software, the more detail you see. I've got a bit of experience working with web technologies - over the past few years, people have been really ambitious about what they can do with the web platform and technologies. The result is a bigger set of moving parts that you can plug together to produce really engaging, sturdy, and high quality software. Arguably, [we're getting a little bit carried away with all we can do](https://macwright.org/2020/05/10/spa-fatigue.html) but let's stay on track.
I really like Chris Coyer's idea of [The Great Divide](https://css-tricks.com/the-great-divide/), a term and an idea which evolved from conversations he has on the podcast he co-hosts ([Shoptalk Show](https://shoptalkshow.com/)). The tl;dr is that "frontend engineer" or "web engineer" no longer gives you enough granularity to summarise someone's job, or skillset. Instead, you can think about it in terms of the "front of the front" and the "back of the front".
This division rings true for me personally. My interests and skills in web are around creating and systemising visual design, and creating accessible, usable pages. Equally valid is someone who loves working with web technologies because the challenges in data fetching, build process, authentication or security. These are different jobs, but both could very easily fit into the category of _Frontend Engineer_ on a job board.
This isn't just a frontend thing: I see similar things happening with DevOps and Reliability Engineering: these are engineers tasked with making sure software is deployed in a sound and reproducible way, and consistently available to the end user. Some people say this is everyone's job, someone people say it's a speciality.
## So...?
So why does any of this matter? Look, if you want to get high minded about it, but you need to know what makes you happy on the day-to-day basis, because life is just a series of day-to-days and we shouldn't underestimate their importance. For me that's about knowing what kind of problems my brain enjoys solving, and what kind of work I find meaningful. It's also about knowing the kind of people I want to work with and for. I cannot really do any of that, if I cannot explain what I do professionally.
To make it more pragmatic, businesses need to know what kind of technical and creative talent they're trying to attract. We need the right words to describe the job - for some companies it _will_ be "all about the koolade-train" - looking for _Design Unicorns._ For others it might be more toned-down, or basic, _UI/UX Engineer_ or _Design-Developer Hybrid._ Even if these jobs are functionally identical, you will be signalling more than just the functional requirements.
The final thing I wanted to end on is something that I only realised when I was in the process of putting my stray and abandoned thoughts together into writing. It is dangerously easy to use these words, like _hybrid_ or _unicorn_ and accidentally misrepresent your ability or competencies. Or if, for example, you're writing - the vagueness makes it all too easy to make sweeping generalisations. The term _Unicorn_ appears to have been adopted for the design-code boundary I discussed, but also a UX Unicorn, and also engineers who work at Unicorn (i.e. >\$1bn valuation companies). We have to use language to make shortcuts, in part because not every*one* can understand every*thing* (like how we say "compiler" when really we mean "magic box"). When we use words like "full stack" or "hybrid" or "unicorn" - they're so vague, you're asking people to fill in the blanks with their own colours or words, which is kind of like asking people to put words in your mouth. Something a true unicorn would never do.

View file

@ -0,0 +1,86 @@
---
title: "Deploying an MVP Rails App with Render like it's 2020 "
author: Thomas Wilson
date: 2020-06-11
draft: false
slug: "2020-06-11-deploy-rails-in-render"
tags:
- devops
---
📚tl;dr - I used [Render](https://render.com/) to deploy a Rails app and database. It was very easy, very fast, and very modern. Would recommend to everyone.
---
Way back before the pandemic I had the idea for [hereabouts](https://hereabouts.app/) - an app that people can use to explore the city they're visiting, or live in. After making a landing page, working hard to build a lot of UI and UX prototypes, and beginning the process of emerging from national and international lockdown from a pandemic, I've had to come to the part where I build out a backend API - to store data, largely.
I've decided to use [Ruby on Rails](https://rubyonrails.org/), a framework for web applications written in Ruby, to build out my backend. I don't want to talk too much about why I made this choice - but the short answer is it's reliable, boring, and I'm fast at building with it (or at least I was, back when I was using it every day). "But Wilson, why aren't you using Microservices™" - I don't know fictional question answer, probably because I don't expect to run into the problems that people argue microservices can solve for you. If you're interested, I think [this panel discussion](https://www.infoq.com/presentations/microservices-panel-value/) gives a good primer.
After building out the very basics of my rails app, I wanted to get it hosted so I could start toying with integration to the mobile app I'm building. And I had an absolutely terrible time of it. I lost the best part of a weekend trying to solve this problem. Why? Why is the "deploy this app to a server" story so unclear, for one of the notorious and used web frameworks in the world.
## The Demands
I've spent the last few years mostly in FrontendLand, where all the cowboys and cowgirls have been absolutely _spoiled_ by the modern deploy process for websites.
You can set [Netlify](https://www.netlify.com/) to deploy a static website in probably under a minute, pay nothing, and it'll watch a git repo and re-build when it sees changes, provide you with immutable URLs for each version, and just... work. The list of integrated features from Netlify is impressive: split testing, cloud functions, a CMS, and some other. Netlify aren't event alone, [Vercel](https://vercel.com) (previously _Zeit_) are building out [NextJS](https://nextjs.org/) (a framework for building websites using React) and will host websites and cloud functions on [The Edge](https://www.cloudflare.com/learning/serverless/glossary/what-is-edge-computing/). It's like [GitHub pages](https://pages.github.com/), [GitLab pages](https://docs.gitlab.com/ee/user/project/pages/) - but taken one step further.
For better or worse - modern software needs more than just a stateless interface - we've got to put data somewhere. I don't want to have something beautiful and clean on the front, but disgusting and cumbersome on the back. Deploys should be frequent, which means they have to be easy and without friction for the developer.
I want to deploy my rails app...
- **Easily** - I want the app to build somewhere, and then be deployed. I am not a DevOps or infrastructure kinda-guy. I can ssh into servers but it makes me nervous, and fundamentally I'd rather use my time to learn things other than unix and server platforms.
- **Cheaply** - I want the server hosted somewhere, I can't just run it locally. But for the next 6-12 months _at least_ it's going to see very little traffic, and I do not want to pay more than I have to for the resources I am not using.
- **Alongside a database** - I'll happily throw up a Postgres database somewhere, and object storage somewhere else. I just want a server (real, or containerised) to run a ruby application, allow network traffic, support environment variables, and map between some ports.
- **Integrated with git** - Having tasted modern dev ops, where test suites run, and deployment happen automatically alongside the git activity, I don't want to go back. I want easy integration between hitting `git push` locally, and seeing something happen on a server.
## ❌ Create a Virtual Server
I've been a fan of [Digital Ocean](https://www.digitalocean.com/)'s no-nonsense pricing and interface since 2014 when I deployed my first Rails app. So I went to their site, spun up a PostgresSQL database and small Ubuntu droplet for a combined cost of \$25/month. An absolute steal, and enough power to probably go un-touched for the next 12 months.
What followed after was an entire day of figuring out how to configure rails to run as a daemon process on ubunutu, which rails-friendly web server to use (I tried _puma_, _passenger_, and _mina_), how to match that to the nginx configuration, and then how to re-deploy that.
I am at a loss as to why there are a) so many different ways to deploy a rails app on an unix system, and b) why trialling each of them in turn produced equally cryptic but entirely dissimilar errors.
For a framework who gives you Convention over Configuration (thank goodness) - why is there no simple, blessed, recommended path for deploying. Surely every rails app that gets spun up has dreams of one day being deployed in the big wide world, it's a basic use case. It is _the_ use case. Why is the advise and experience here so different. Why did it take me, an engineer with at least some experience managing server deploys, a whole day to get something to not work.
**Results:**
- ❌ **Easy:** Running the service wasn't always simple
- ✅ **Cheap**: \$25/month for server and database
- ✅ **Database**: Got a hosted/managed Postgres database
- ❌ **Integrated with git:** No native/simple git integration
## ❌ Deploy on the Cloud
I turned my eyes towards the promising metropolis of Cloud Providers. I've got a few other projects spun up on Google Cloud, so I gave them a go. It's worth noting that I'm using their Cloud Storage for blob/data storage in the app (like images). I could have used AWS, yes.
The platform had some some documentation on [how you could deploy a rails app](https://cloud.google.com/ruby/rails), which was useful. They suggested three possible pathways:
**Deploy on a virtual server with Computer Engine**: We've just been through this with Digital Ocean. Fool me once...
**Deploy with Kubernetes.** I've only got a passing familiarity with containerising apps, solely using Docker. I didn't much fancy having to learn a whole new set of technologies and terminologies to deploy an app, nor did I want to risk copy-pasting things from the internet. I've heard horror stories of resource provisioning getting out of hand, which would obviously affect pricing and cause it to spike. At present, I would rather have a predictable pricing model, and not be worried that it could spike without warning.
**Deploy as Backend As A Service on App Engine**. This is Google's own platform for containerising and distributing apps as serverless. This looked good at first glance, but after using their pricing calculator I could end up paying somewhere between £30-50 per month. This is a fine cost for a production environment, but but not compared to the \$10/mo Digital Ocean droplet I'm comparing it to.
**Results:**
- 🤷‍♀️ **Easy:** I didn't actually try any of them
- ❌ **Cheap**: At least £30/month _just_ for the server
- ❌ **Database**: Didn't come with a database included, would have to u
- ❓ **Integrated with git**: No, but it does integrate with the Google Cloud CLI so it could be easily configured with a hook
## ✅ Used Render.com
I can't remember how I found out about Render. I think they came to my attention when they [won Tech Crunch's Disrupt award](https://techcrunch.com/2019/10/07/daily-crunch-render-wins-the-startup-battlefield/). I think I also heard about them in a conversation about next generation cloud providers making a market by essentially taking a single service in the current cloud providers, and doing it really well. I think that might have been on [this episode of Software Engineering Daily](https://podcastgang.com/podcast/software-engineering-daily/322654317196215).
Using Render to deploy the app took me maybe 30 minutes, and it reminded me a lot of the FrontendLand experience that Netlify normalised. It... _just works_. They've got first-class support for Rails, and so I just connected the git repo and the Render built the container. It _was_ that simple.
Then I spun up a Postgres database, which also just worked.
**Result:**
- **✅ Easy:** Followed [their docs](https://render.com/docs/deploy-rails) on deploying a rails app
- **✅ Cheap**: \$14/month for server and database
- **✅ Database**: Yep, managed Postgres instance
- **✅ Integrated with git:** Yep, automated deploying, with logs

View file

@ -0,0 +1,42 @@
---
title: "Where I go for UI inspiration"
author: Thomas Wilson
date: 2020-08-07T12:00:00
draft: false
slug: "2020-08-07-where-i-go-for-ui-inspiration"
tags:
- design-resources
- design
- links
---
Like anybody who makes interfaces for apps/websites, I spent a lot of time looking at _Design Inspiration_ (read: UIs, real or imaginary, made by other people). This is a really good way to look at visual conventions that other people made, and have used in their UIs and UX.
If I were to examine the time I spent “designing” more closely, and divided it between _actually pushing pixels around in Figma_, and _looking at other peoples work on Dribbble_ I would be shocked and ashamed.
Allow me to justify this though: unless you are one of two-three social media giants, literally nobody spends the majority of screen time in your app. It would be incredibly arrogant to assume your app is good enough that people are willing to learn a whole new style of interaction, navigation, and visual metaphors for it.
In this teeny blog post, I just want to list some of the places I go when I want to find good UI to look at
**A quick caveat though.** These sites are good in the same way that a buffet is good. But theyre also bad in the way that a buffet is bad. If youre not consciously selective in how you expand your UIs, it can feel like a collection of disparate widgets. Would you trust a website that could go from crunchy spring role to full-bodied bolognese, _just because a designer fancied it_? As a designer it is your responsibility to understand the types of data, interactions, and journeys that your app is trying to promote or facilitate. Sometimes “because it looks cool” _is_ enough of a reason - but this might not fly so well on a village GP surgery.
Anyway, this post isnt about that, its about some sweet sweet list of cool sites for design inspiration. Well have I got a twist for you, I actually made two lists (_Inception Horn_).
**Here are some sites that put words to visual design patterns**:
- [UI Guideline](https://www.uiguideline.com/) : Web-focused, component-level naming.
- [ui-patterns](https://ui-patterns.com/patterns) : Mobile-focused, pattern and component-level naming.
- [lookup.design](https://lookup.design) : Another great free library of examples of components used in the wild. Clean UI and tags, with a nice variety.
**Here are almost endless numbers of mockups from people far more talented than I**:
- [UI Sources](https://www.uisources.com/) (💸 paid) : A well-curated collection of app design patterns.
- [mobbin.design](https://mobbin.design/) : Another nicely curated list of mobile app designs
- [UI Movement](https://uimovement.com/) : Primarily mobile and animated interactions.
- [Muzli search](https://search.muz.li/) : Find designs by searching words or colours, a cool little tool run by Adobe.
- [Dribbble](https://dribbble.com/) : Im putting these guys on the list, but they dont need the recommendation.
**And for Colour Palettes**:
- [Muzli Colors](https://colors.muz.li/) : A really nice little tool that shows you a selection of colours in some standard UI mockups (pie charts, chats, cards, etc.)
- [Coolors](https://coolors.co/) : A classic tool I use _very_ frequently to help me find complementary colours.

View file

@ -0,0 +1,15 @@
---
title: "Things I learned this week #1"
author: Thomas Wilson
date: 2020-08-14
slug: 2020-08-14-things-i-learned-1
draft: false
tags:
- things-i-learned
---
- **This tidbit about a literary villa**: Over three days in June of 1816 at a villa in Geneva, Mary Shelley started writing _Frankenstein, or The Modern Prometheus_ and John William Polidori started _The Vampyre_ (which preceded the modern romantic image of vampires). The latter inspired Lord Byron (who was also at the villa, by the way) to write _A Fragment_. Imagine being 2am whiskey drunk at that, wow.
- **This way to think about css/styling**: The decisions we make about the naming, structure, and languages/frameworks for modern styling tools just _move complexity_, they dont solve it. If you use CSS, it doesnt matter too much how do you name it (BEM or utility classes?) or how do you build it (vanilla CSS, post-CSS, SASS?). Likewise, CSS-in-JS vs inline styles wont affect things. _Be consistent_ and _know where the complexity in your codebase is_ ([source](https://shoptalkshow.com/425/))
- **This thing about viruses during a pandemic**: It makes evolutionary sense for a virus to be less virulent (to cause less disease). Those viruses which can infect more people will, by definition, be more evolutionary successful. This is one reason (alongside massive economic, medical, and societal changes) that the global death toll from HIV is lower now than it was in the pandemic of the late 1980s. ([source](https://www.nhs.uk/news/medical-practice/hiv-evolving-into-less-deadly-form/))
- **This puur-fectly fitting French word**: The\** French word for the verb to purr is *ronronner\* - which sounds simply excellent with a French guttural accent.

View file

@ -0,0 +1,15 @@
---
title: "Things I learned this week #2"
author: Thomas Wilson
date: 2020-08-21
slug: 2020-08-21-things-i-learned-2
draft: false
tags:
- things-i-learned
---
- **This useful thinking tool**: good writing starts with observations, and moves to analysis. Making the transition is difficult. One way to spot a mental crutch is to see where you reach for words like "interestingly", "surprisingly", or "notably". These all _hint_ at a significance or meaningfulness, but don't actually clarify it. ([source](https://ocw.mit.edu/courses/literature/21l-001-foundations-of-western-culture-homer-to-dante-fall-2008/writing-resources/obser_ver_anlsis.pdf))
- **This hot takeaway**: Did you know that during the 1970s if you ordered a takeaway coffee it came in a styrofoam cup and a lid without a hole. If you wanted to drink your beverage, you had to take the lid off _and then put it back on_ - can you imagine? Obviously impatient, the hardcore mobile coffee drinkers (think: taxi drivers) kept ripping holes in the lid to drink their Joe on the Go. Where there's demand, there's business and thus was born a [whole field of design](https://designobserver.com/feature/coffee-lids-peel-pinch-pucker-puncture/39790/) for designing the most safe and ergonomic way to drink coffee from a cup without having to actually take the lid off.
- **This Frank etymology**: "Lingua Franca" describes a common language between a group of people. It emerged in the late 1700s and translates functionally as "Language of the Franks", with _Franks_ being anyone broadly from Westen Europe. The original Lingua Franca was a mixture of simplified Italian, Greek, Old French, Portuguese, Occitan (a Romance language spoken around southern France and northern Italy and Spain - [wiki](https://en.wikipedia.org/wiki/Occitan_language)) , Spanish, Arabic, and Turkish ([source](https://en.wikipedia.org/wiki/Lingua_franca#Etymology))
- **These Kinswomen**: King James II had a thing for witty, plain looking mistresses. Two such mistresses were [Arabella Churchill](<https://en.wikipedia.org/wiki/Arabella_Churchill_(royal_mistress)>) and [Catherine Sedley](https://en.wikipedia.org/wiki/Catherine_Sedley,_Countess_of_Dorchester). Arabella is described in [The Ladies Dictionary (1694)](https://books.google.co.uk/books?id=GfQ_TquTZicC&lpg=PP1&pg=PA30#v=onepage&q&f=false) as being "of no less Eminence for learning and ingenuous Parts than her Quality... she had a great facility in poetry and was a celebrated conversant among the Muses". Despite carrying four children for the man, she was later replaced by 16 year-old (yep) Catherine Sedley, who [remarked](https://archive.org/details/sexwithkings500y00herm/page/52/mode/2up) of being chosen that "It cannot be my beauty, for he must see I have none... and it cannot be my wit, for he has not enough to know I have any". James, buddy - you did not deserve these women.

View file

@ -0,0 +1,117 @@
---
title: Why are you like this, JavaScript? Taking a look at JavaScript's single threaded nature.
author: Thomas Wilson
date: 2020-08-23
slug: "2020-08-23-why-are-you-like-this-javascript"
draft: false
tags:
- javascript
- why-are-you-like-this-js
---
Sometimes you hear something so often that you don't really hear it anymore. One of those things for me is words to the effect of "How does this JavaScript code even run?". I choose to interpret this generously as "How does JavaScript itself run", and not "how does this hot garbage code you wrote run?".[^I really hope I don't write as much hot garbage JavaScript as I used to]
There's a lot of ways we could describe JavaScript (including some really colourful adjectives), but objectively it is an asynchronous, single-threaded, dynamic programming language. These characteristics, which are deliberate design decisions, are responsible for a lot of the quirks, gotchas, and design patterns that make being JavaScript developer tricky for anyone just getting started. Luckily it's almost never tricky for anyone else (_he lied_).
For example, have you written and run JavaScript code which:
- Ran in the browser, got in an infinite loop somewhere, and prevented all interactions with the web page (including the ability to close a tab or the browser)?
- Fetched data from another server, tried to access the data, and got an `undefined` or `Promise` related error?
- Written server-side JS with a callback/promise chain for data processing/cleaning and had your code start, but not finish, its execution of this chain - leaving the request hanging for a response.
These are all common problems which I have encountered, realistically, hundreds of times by now. They're each a rough result of the design of the JS run time, i.e. how we go from JS you wrote to the commands being executed on the computer. I don't want to talk about JS run times / environments now, so don't worry about the details. Just know that the JS code you wrote is executed by the computer in a way that makes these kind of errors possible, and even likely, if you're not thinking like JS wants you to.
Over the past couple of weeks, I've been trying to understand why JS wants us to think in this way. I've been asking JS "why are you like this?" and "did I do something to upset you? I'm sorry if I did, but please, this really shouldn't be `undefined`".
## A brief aside: on JS's dynamic-ness
A brief side note before we get into the rabbit hole here: JavaScript will take an awful lot of mistreatment and still run. That's largely because it's a dynamic language (i.e. it isn't typed), and also partly because it'll try and do whatever it can with whatever types of data you give it. It's famous for it: (`false == 0` or `'30' + 10 === '3010'`).
But you better believe that you're renting this flexibility from JavaScript, because at some point it's going to `undefined is not a function` you and act like it did nothing wrong - largely because _it didn't_.
This is an entirely different type of problems and design decisions in the language, which I'm just not going to talk about in this article.
## JavaScript is Single Threaded
JavaScript is single threaded, that means that while something is on the [call stack](https://developer.mozilla.org/en-US/docs/Glossary/Call_stack) - JavaScript is unable to run anything else. Any function that gets called by anything in our JS code is going into the call stack - it's how the internals of our app (specifically the interpreter) knows where it is, and what it needs to do now and next.
So if something long-running is being done on the call stack, like a really long iteration function, then no other functions can be called until that iteration has finished. Say that we have a list of 1 million movies as a massive array of objects, and we want to get all their titles:
```js
const movies = [{title: 'A Knights Tale', rating: 10}, ..]
const titles = movies.map((movie) => movie.title)
```
This `map` function will go into the call stack, it will start executing. So it'll go to our `movies` array, and for each item in it, run our little _anonymous function_ (i.e. function without a name), and then start populating the call stack with a million of these references:
```js
// THIS IS ALL PSEUDO CODE, PLEASE GOLLY PLEASE DON'T TAKE LITERALLY
// Find the specific `movie` from the `movies` array
const movie = {
title: "A Knights Tale",
rating: 10,
}
// Get a reference to the anonymous function
function(movie) {
return movie.title
}
// Then: Add the above function to the call stack
```
This operation will block everything else from running until it's finished. This might sound _sort of_ bad, but if we're often running JavaScript in the browser, that "everything else" can include like: rendering a web page, or allowing a user to interact with the page or browser tab.
At this point you'd want to ask why the lingua franca of the web would allow such a thing to happen. And that's a great question. Unfortunately, this objection doesn't do anything to dethrone JS and its utility in the web. The burden falls on us as engineers to design around this single-threaded ness.
## JavaScript is Asynchronous and Event-Based
So, if JavaScript is single threaded, and blocks everything else from running until it finishes a function - how does it handle asynchronous functions? For example: what happens when I fetch some data remotely (e.g. an updated list of movies) - will it stop everything else from rendering?
This is potentially a really bad design flaw. Especially as the modern web - which can't seem to help itself from making too many HTTP requests. Imagine if every time you wanted to read a BuzzFeed article you had to wait for bit of content, every external tracker, and every ad to load before anything appeared on the screen. It'd be a nightmare and you'd never find out which kind of Frappicino you are.
JS solves this problem, by having an internal understanding of [asynchronous actions](https://eloquentjavascript.net/11_async.html). In the previous example, where we wanted to get a million movie titles (for some reason) - our code is _synchronous_ - there is a simple [Control Flow](https://www.computerhope.com/jargon/c/contflow.htm): the code had a correct understanding that "here are a million items, I need to do this one thing to each of them, one at a time". And thus the single JS thread was occupied with those million and one tasks.
To give an async example similar to an example above, let's try and retrieve a list of movies across ten genres, from a single API:
```js
// NOTE: This code is illustrative, and not perfect, pls ignore edge-cases and separation of concerns problems
// Imaginary API
const MOVIE_URL = "https://www.mymovieservice.com/api";
// A list of genres
const apiEndPoints = [
{
label: "action",
path: "/action-movies",
movies: []
},
// Imagine 9 others
..
];
// Go and fetch remote data and update the array
const updatedEndPoints = apiEndPoints.map((endPoint) => {
return fetch(`${MOVIE_URL}/${endPoint.path}`)
.then((res) => res.json())
.then((moviesData) => {
return {...endPoint, movies: moviesData.movies}
});
});
```
An intuitive understanding of asynchronous behaviour would be for JS to see a call to `fetch` and understand that it needs to:
1. Make an HTTP call to the specified endpoint;
2. Recognise that a response will come back _at some point_, so put this function aside, and get on with something else;
3. Recognise when the data from `fetch` returns, and then do something with it (in this case, format it with `.json()` then run the anonymous data handler function to add the movies
It's worth noting here that JS allows us to have this notion of asynchrony _without_ asking us to manage multiple threads. This is the trade-off we are making with JS's design: we can have asynchronous behaviour relatively simply in our code, without having to manually manage memory threads.
This post is already too long, I think, and I don't want to get into the specifics of how this works - but understanding that JS is able to make these kinds of decisions at run time, and when they're made - is an important part of writing faster, less blocking JavaScript.

View file

@ -0,0 +1,25 @@
---
title: "Things I learned this week #3"
author: Thomas Wilson
date: 2020-08-28
draft: false
slug: 2020-08-21-things-i-learned-3
tags:
- things-i-learned
---
- **This medieval lingo**: Have you ever wondered how to refer to the area where a good-old-fashioned joust took place? You know, jousts? Two men, two horses, two giant poles, and one film where Heath Ledger is irresponsibly handsome? Sorry, I got distracted there - did you know the area where the jousts took places is called a _List_, and the fence that separated the two riders is called the _Tilt_ ([source](http://www.lordsandladies.org/jousting-terminology.htm)). Initially it seemed a little wild to me that people ever jousted without the tilt, seems a little bit like unnecessary risk but that seems a little like mopping up the seawater as the Titanic sinks.
- **This unusual payment**: Between the 12th and 19th centuries there was a menagerie at the Tower of London. Around the 17th century, if you didn't fancy paying the three half-pence entrance fee, you could bring a cat or a dog - which was presumably used for food. [source](https://www.thevintagenews.com/2018/03/03/18th-century-zoo/)
- **This new word**: _[Heterodox](https://en.wiktionary.org/wiki/heterodox)_ or _Heterodoxy_, meaning a belief which deviates from some norm or convention, but not enough to be unorthodox or unorthodoxy.
- **This Minoan jewellery**: About three-four thousand years ago, the Minoans created some [incredible](https://culturetaste.com/blog/45_minoan-malia-bees-history-symbolism.html) [bee](https://www.ancient.eu/image/885/minoan-bee-pendant/) jewellery. Created around 1800-1700 BE by the Minoans in what is now Crete, the Bees were symbols of nature/earth, with honey being used in holy rituals by the culture. I'm amazed that humans made those so long ago, and that they survive until today to be seen.
## Things I've had on rotation
- **Something new**: _Broken Access_ by Theo Alexander (2020). The spacious, elegant classical tones of this piece make it a joy to drift off to and come back to. ([Spotify](https://open.spotify.com/album/2WN5bFYGFunOS7AMGZbmgI?si=dc3ZldZTSZ-r30TMLG4tYQ), [Apple Music](https://music.apple.com/gb/album/broken-access/1513480825))
- **Something old**: _Camp_ by Childish Gambino (2011). While I'm glad that Childish Gambino has evolved into what he is, the mixtape, hype, and always-woke vibes of old Gambino are what you need sometimes. ([Spotify](https://open.spotify.com/album/4yE6WFFun0KjJXbdWkoVrp?si=ZpWDgL4YSz2gTgCg5RYbLQ), [Apple Music](https://geo.music.apple.com/us/album/camp/1450829373))
## Cool things:
- [screenshot.rocks](https://screenshot.rocks/) - Create nice little screenshot mockups in your browser. Found this on [r/webdev](https://www.reddit.com/r/webdev).
- [Arwes.dev](https://arwes.dev/) - A futuristic sci-fi and cyberpunk GUI. I love me some retro-future aesthetic. Found this _everywhere_ because people kept sharing it.

View file

@ -0,0 +1,94 @@
---
title: "Apple, What are you doing?"
author: Thomas Wilson
date: 2020-08-29
draft: false
slug: "2020-08-29-apple-what-are-you-doing"
tags:
- apple
- news
---
I have loved Apple solidly for eight years, since I was 20 and gifted a Mac Mini for Christmas. I wrote my Masters thesis on that thing in a ground floor bedroom of a student house overlooking suburbia at 3am on a Tuesday night. I finished my Ph.D. thesis on a MacBook Air (which certainly didn't deserve to be put through what I asked it to do) as I sat, hunched over, on a rainy November afternoon, in a tiny flat in Paris that smelled like fresh lemon and ginger.
MacOS is the operating system is the vehicle I drove from environmental scientist to software engineer, and so changed my life trajectory inexplicably. I love the build quality of their machines, the UI aesthetic decisions, and the entire world of Open Source software which was opened up to me by its [POSIX](https://en.wikipedia.org/wiki/POSIX) compliance. This is helped by the fact that I moved into a Web Development: an argumentative ADHD-sort of community but one that really likes to share and discuss things openly.
This is the community which modelled to me "this is how a good engineer behaves" - looking around and seeing Kent C. Dodds, Sara Viera, MPJ, Chantastic, Dan Abramov, Sophie Alpert, and so many others just like... be chill patient folk who take the time to explain what they're doing and thinking and making.[^And surrounded, obviously, by so many other who are not chill or patient]
So to see one of the largest companies in the world ([2T\$ now](https://www.macrumors.com/2020/08/21/aapl-closing-in-on-500-mark/)) scrapping with developers and (multi-)national legal systems for using practices which look _an awful lot_ like monopolistic and anti-competitive practices seems wrong to me, and also a lot of other people in the dev and tech spaces.
## The Hey Drama
[Hey.com](https://hey.com/) is an e-mail service released by Indie Tech Darling _Basecamp_. They released Hey with admirable ethical (no tracking) and technological (no unnecessarily complex stacks) intentions to change some aspect of the e-mail domain. They priced their product at \$99/year, which you could only buy through their website.
They created desktop, web, iOS, and Android apps for people to access their Hey e-mail accounts - and before the public release they had their iOS version approved on Apple's App Store. In the lead up from beta to release, Basecamp made bug fixes to their iOS and submitted it for review (as every developer must), and had their app rejected because it did not provide a way for iOS users to create an account in the App.
To be clear - this functionality had never been in the Hey app. It had not been present and then suddenly removed.
Any in-app purchases (IAPs) result in a 30% cut going to Apple (or a 15% cut in the case of a recurring annual subscription after the first year). It's not hard to understand Apple's immediate concern: Apple are missing out on a potential \$30 each time a user downloads the Hey app and creates an account in app and signs up for a year's worth of service. Apple stated that until this IAP option was added, they won't approve any further changes to Hey's iOS app. This meant bugs would go unfixed, weeks-days before Hey was to be released to the world at large.
One can easily understand the outrage this caused in Basecamp, and then further afield. David Heinemeier Hansson (DHH), the CTO at Basecamp and general holder of strong opinions [tweeted](https://twitter.com/dhh/status/1272972718384623616):
\
> There is no chance in bloody hell that we're going to pay Apple's ransom. I will burn this house down myself, before I let gangsters like that spin it for spoils. This is profoundly, perversely abusive and unfair.
In the end, Basecamp offered users the chance to create a two week "trial" account in the app - so _technically_ users without an account could open the app for the first time and get started with sending/receiving e-mails.
This isn't even a satisfying conclusion or resolution - it feels more like Apple just wanted to do... _something_. Tim Cook's recent defence of the 30% cut included the argument that it's only included when a business "acquires a customer on an Apple" ([source](https://9to5mac.com/2020/07/29/tim-cook-antitrust-statement/)). But now you're demanding a way for an App to turn a new user into a customer - even if that process has historically only been done outside the iOS ecosystem (e.g. Netflix)?
If you want to see more about the Hey scandal, Basecamp covered the issue in an episode of their own podcast, [Rework](https://rework.fm/two-weeks/).
## The Fortnite Drama
In the weeks leading up to writing this article, a similar skirmish has started [between Epic Games and Apple](https://www.ft.com/content/a01807f8-606c-4444-8a27-398984e3bf3d). This time it's over Epic's Fortnite, an extremely popular Battle Royale-style game (last-person-standing).
Fortnite was [released](https://fortnite.gamepedia.com/Release_Timeline) on PC in September 2017, and later on iOS in March 2018. The app's in-game economy uses an in-game currency (V-Bucks) that lets people purchase cosmetic items, things that look fun but don't affect the core gameplay. Earlier this year, Epic updated the app to allow users to make IAPs using this in-game currency - as opposed to the system-level iOS integration.
In a similar argument they raised with Basecamp, Apple blocked updates to the App as these IAPs did not use Apple as the platform/payment provider, and so did not offer the 30% cut. As of 28th August 2020, Apple [removed the Developer Account](https://9to5mac.com/2020/08/28/apple-has-now-terminated-epic-games-app-store-account/) associated with Fortnite from the App Store. Users can no longer download the Fortnite App on iOS.
Similar to Basecamp, Epic's rejection of these terms has been very public. In fact, probably more spectacle-making than Hey's, with the release of a [riff](https://www.youtube.com/watch?v=euiSHuaw6Q4) on Apple's famous 1984 Macintosh advert. Additionally, the opening pages of Epic's lawsuit read well enough that one could argue they were written for non-lawyers.
Unlike Basecamp, Epic have so far been willing to create some kind of compromise, no matter how purely _technically_ correct that compromise is. Both Apple, and the US legal system have argued that Epic's repeated, intentional non-compliance with the rules mean that Apple are within their right to remove them from the App Store.
## It's not just Epic Games anymore
The twist in the Fortnite story came when Apple threatened to remove the both the developer accounts associated with Fortnite _and_ [Unreal Engine](https://www.unrealengine.com/en-US/) - a free-to-start video game engine owned by Epic.
In case it is unclear: Unreal Engine is a technology for building games other than Fortnite. It's used by developers across the world, including games in Apple's own _Apple Arcade_
If it went away on iOS anyone building games for iOS that used Unreal Engine just... couldn't. Quoting Kevin Gammill the General Manager of Gaming Developer Experiences at Microsoft:
> "_Unreal Engine's_ sudden loss of support for iOS and macOS would create significant costs and difficult decisions" for game creators, who "would have significant sunk costs and lost time using _Unreal Engine_ for game creation, and would have to choose between (a) starting development all over with a new game engine, (b) abandoning the iOS and macOS platforms, or (c) ceasing development entirely"... It is abundantly clear that Apple's retaliatory steps are intended to harm Epic and its licensees. ([court proceedings p.9](https://cdn2.unrealengine.com/epic-pi-tro-08-23-2020-819871195.pdf))
Luckily the courts swept in and prevented Apple from doing this. U.S. District Judge Yvonne Gonzalez Rogers commented:
> Apple has chosen to act severely, and by doing so, has impacted non-parties, and a third-party developer ecosystem. In this regard, the equities do weigh against Apple
## Creating a Developer Ecosystem
I am concerned that Apple's anti-competitive, monopolistic practices are harming the consumers of _and_ third-party developers for their own platform. So I suppose, actually, my concern is this: Apple aren't distinguishing between end-users and developers - they're both just consumers of a service.
Or perhaps they see little problem with applying pressure to the development community to stop others from raising such vocal fights against the conditions of the App Store and IAPs.
This from a company which famously celebrates quality and diversity of their platform. Every years at WWDC they give out awards for the third-party Apps and games which are well designed.
Equally, from a business perspective they profit from the diversity and quality. The fact that indie-devs, talented teams, and huge corporations can all publish something into the App Store gives the iPhone an appeal across demographic, generations, and personality. Just want e-mail, a PDF viewer, and a spreadsheet viewer? No worries. Want to cram your phone as full of bright-and-loud games, also fine, friend. Artistic type who wants to take and edit photos or videos, check.
Apple are acting acting as if they're irreplaceable, and as if there are no alternatives for developers, or as if this diversity and quality across the board is inevitable and without condition. This is _literally_ why they're on trial for anti-trust - they're abusing their market position, capitalising on a lack of viable alternatives, and influencing the ability of developers to speak out, or find alternative revenue streams.
In the recent antitrust hearings, Tim Cook [argued the 30% cut](https://9to5mac.com/2020/07/29/tim-cook-antitrust-statement/) is justified because the App Store is a trusted place for the discovery (user), distribution (developer), and payment (both) of Apps globally. A particularly pessimistic reading of this statement makes it sound as if the App Store is the _only_ platform for doing so. That without Apple, all businesses, talented designers, and savvy engineers would be unable to reach customers - or that end users would be paralysed by choice or stifled by lack of options. The Wild West of the internet, with its ample e-commerce and payment platforms stands as a blatant contradiction of this statement.
How many people rely, if not entirely then at least notably, on IAP revenue for food and rent? How many people have had to increase prices for IAPs, or to encourage more IAPs just to negotiate around this 30% cut? Epic Games won't go broke because of a 30% cut of purchases made on iOS devices, but an indie-dev easily could.
Apple aren't willing to budge on this 30% figure. PayPal [charges](https://www.paypal.com/us/webapps/mpp/paypal-fees) 2.9% + $0.3 for a transaction, [so does Stripe](https://stripe.com/pricing). Gumroad [charges](https://gumroad.com/features/pricing) 3.5% + $0.3. Shopify [charge](https://www.shopify.com/pricing) 2.4-2.9% + \$0.3. Apple are justifying a 10x increase on web payment providers, and then fight back these claims of injustice from developers who try and find ways around them (ignoring that Netflix, Amazon, and other big players seemingly get around this without problem).
Instead, this is... The Developers' fault? In a [statement made](https://techcrunch.com/2020/08/28/apple-terminates-epic-games/) on the Fortnite case, Apple said:
> Instead [Epic Games] repeatedly submit Fortnite updates designed to violate the guidelines of the App Store. This is not fair to all other developers on the App Store and is putting customers in the middle of their fight
There just seems too much irony, gaslighting, and hypocrisy in this statement. This cannot be an actual lack of self-awareness on Apple's part - someone must have raised these questions internally. Someone must have noticed.
As someone who builds software, it raises serious questions about the value that being on the iOS store adds, and the additional work that would need to be done to make a native app useful over, say, a web-based purchase. If I was building a new product, this would push me more towards web-only or a more read-only iOS experience. It makes me as a developer question how much Apple value my business, especially when they have global insights into the most valuable kinds of apps and could [build out their own](https://www.ft.com/content/a01807f8-606c-4444-8a27-398984e3bf3d) alternatives to crush my business if its part of a popular genre.
This is the environment that Apple are creating for consumers, developers, and businesses who want to use their platforms - and it doesn't seem right. This is bad PR, this seems damaging in the long run. It seems an awful lot like the company could maintain their standards of quality and security without a lot of these practices (he says, with literally no evidence to back it up). It worries me that one company can raise all these questions and concerns.

View file

@ -0,0 +1,28 @@
---
title: "Things I learned this week #4"
author: Thomas Wilson
date: 2020-09-04
draft: false
slug: 2020-09-04-things-i-learned-4
tags:
- things-i-learned
---
- **This world**: The Word _Kipple_ is a word invented by SciFi writer Phillip K. Dick, to mean the kind of rubbish/trash that accumulates if humans don't intervene. [source](https://www.urbandictionary.com/define.php?term=kipple)
- **This part of our brain**: You know when you suddenly remember that you need to reply to that e-mail, drop off that parcel, or pick up eggs before dinner? That's your [prospective memory](https://en.wikipedia.org/wiki/Prospective_memory) - which is kind of the opposite of your normal memory (your retrospective memory) because it "remembers" things which need to happen in the future. Don't think about it too much.
- **This Chopstick Etiquette**: Cultures who eat with chopsticks each have rules about where they can/not be be placed. In mainland China, you should never leave rested chopsticks pointing towards anybody else at the table. In Japan, unused chopsticks should be placed into a rest - and if no rest is provided then one can be fashioned from paper. In Korea, chopsticks must never be placed to the left of the spoon they are paired with. In Thailand, you should never leave your chopsticks stuck into food in a bowl, or to eat rice. In Vietnam, placing your chopsticks in a "V" shape when you're done eating is considered a bad omen. ([source](https://en.wikipedia.org/wiki/Chopsticks#Etiquette))
- **This one person's damage to the Scots Language**: For the past 5-10 years, one guy in America (who does not speak Scots) has been contributing to the Scots language version of Wikipedia. What they've actually just written is the English version with phonetic Scottish pronunciations. As a result, "this person has possibly done more damage to the Scots language than anyone else in history." ([article](https://www.vice.com/en_us/article/wxqy8x/most-of-scottish-wikipedia-written-by-american-in-mangled-english))
- **This unrecognised inventor**: Early video game consoles had their games built into the circuitry of their computer-parts. In the 70s, [Jerry Lawson](https://www.engadget.com/2015-02-20-jerry-lawson-game-pioneer.html), a self-taught African American engineer, invent ed the cartridge, i.e. a swappable bit of memory which you'd insert into the machine to play a game. He built it a console called the _Channel F_ which never had the popularity of the Atari/Sega/Nintendo consoles of the day, and his achievement wasn't ever really noticed for what it was: something that allowed for a Cambrian Explosion of video games.
## Cool articles
- **My three decades alone, basking in the company of a mountain**, Susanne Sener for Psyche ([link](https://psyche.co/ideas/my-three-decades-alone-basking-in-the-company-of-a-mountain)). A personal piece written by a woman who has spent over 30 years living alone in a cabin by a mountain. I've been thinking about this importance of silence/lack of input recently.
- **Popular Writers: A Stephen King interview**, Neil Gaiman on his own blog ([link](https://journal.neilgaiman.com/2012/04/popular-writers-stephen-king-interview.html)). King's written more books than a lot of us ever will, and I really enjoyed the following statement he makes on where/how he arrives at them:
> I never think of stories as made things; I think of them as found things. As if you pull them out of the ground, and you just pick them up. Someone once told me that that was me low-balling my own creativity. That might or might not be the case. But still, on the story I am working on now, I do have some unresolved problem. It doesnt keep me awake at nights. I feel like when it comes down, it will be there...
## What I've had on Rotation
- **Something Almost-New**: _The fall of Hobo Johnson_ by Hobo Johnson ([links](https://songwhip.com/hobo-johnson/the-fall-of-hobo-johnson)). This almost-poetry-almost-hip-hop-almost-punk sound is really great, it's got levity in places and untouched rawness in others. I've really enjoyed it.
- **Something Old**: _Echos, Silence, Patience & Grace_ by Foo Fighters ([links](https://songwhip.com/foo-fighters/echoes-silence-patience-and-grace)). This is such an absolute classic album from the 2000s for me (and I think a whole bunch of other people). If you're in the mood for some Excellent rock vibes, put this on and remember how good it is.

View file

@ -0,0 +1,232 @@
---
title: "Why are you like this, JavaScript? An introduction to Promises by using Fetch."
author: Thomas Wilson
date: 2020-09-06
slug: "2020-09-06-javascript-promises-introduction"
draft: false
tags:
- javascript
- why-are-you-like-this-js
---
Let's start with a correct, but pretty dense, definition: JavaScript Promises are a first-class abstraction for handling asynchronous actions, like:
- Fetching data from a remote API.
- Reading or writing (i.e. opening or saving) a file to the filesystem (in a server-side environment, not in a browser).
- Retrieving a [non-blurred-up](https://css-tricks.com/the-blur-up-technique-for-loading-background-images/) version of an image based on a page-scroll event.
- Using network or system utilities in native mobile frameworks like [react-native](https://reactnative.dev/) or [expo](https://expo.io).
First class? That's a programming term to say that this kind of value (i.e. Promise) can be stored in a variable or passed as an argument. Other first-class citizens in JavaScript include booleans, arrays, and functions. This means that JavaScript has an internal way of representing and understanding Promises, and we don't have to do any kind of coaxing, coercion, or pollyfilling to use them since ECMAScript2015.
Asynchronous actions? Promises represent the _eventual value_ returned from a function (or more broadly, an _action_). This means that when we ask for the value of a Promise, JavaScript can distinguish between what is the value at the time you requested, and is this the last, unchanging value of the Promise. In JavaScript Promises, we call these two states:
1. `pending` - where we've described and started the async operation, but it's not completed, or
2. `settled` - that async operation has completed (successfully or not) and the value we have isn't going to change again.
Let's take an example and show how we can use Promises. Actually, no, let's show how we can't/shouldn't use them. Imagine we own a taco truck, and we have a menu that changes every day. This means we don't want to build a fully static site, and we want to use JS to add a little dynamic behaviour. To make sure our website always shows us today's menu we:
1. Run a `fetch` function as soon as the page loads which retrieves today's Taco Menu as an array of tacos from an API end point,
2. Parse that data to extract the `id` and the `name` for each taco in that array, and
3. Iterate through this parsed list and insert new DOM Elements onto the page using any number of JavaScript libraries or frameworks.
Which in some code would look like[^1] :
[^1]: There are some problems with this example (namely that it's actually using Promises under the hood, but please ignore those)]:
```js
// ⚠️ Code is purposefully error-ful, don't run
// ⚠️ gollyilovetacos doesn't exist (yet) - this is illustrative
const menuItems = fetch("https://api.gollyilovetacos.com/v1/menu_items")
const parsedMenuItems = menuItems.data.menu_items.map(item => ({
id: item.id,
name: item.name,
}))
```
This is going to throw us an error (something like `Uncaught TypeError: can't access property "menu_items", fetch(...).data is undefined`). Why? No legit, it you genuinely don't know, please think about why.
It's because `fetch` returns us a Promise. The code above applies a synchronous way of thinking onto the Promise: we declare it, parse it and parse it (on those two last lines) exactly as if it was synchronous (i.e. the data would resolve immediately) - so on that last line we're looking to get the `data` attribute of the Promise, as if the Promise was an object representing the API response.
Promises are references to the _eventual values_, which is different to storing the value itself. We were trying to access the `data.menu_items` on the Promise which doesn't exist.
The only things that exist on a Promise are: `then` and `catch`. This is the most technical definition of a function: Promises are Objects in JavaScript which have a `then` function, [so says the spec](http://wiki.commonjs.org/wiki/Promises/A).
Before we dig more into promises, I think it's important to ask _why bother_? Especially when the JS community had a way of handling things like this before ECMAScript2015. Promises aren't technically anything new.
## Can't I already do that in JavaScript?
So what? Can't I just use event handlers or callback functions? Yeah, you absolutely can. In fact, these are two ways that we handled async processes in the land before promises. They're both a little bit problematic, however. Events, for example, [can fire before](https://web.dev/promises/#events-aren't-always-the-best-way) we (or rather, the control flow of our program) can assign event handlers to them. This means that can't always guarantee that an event will be handled using the event handler we define.
Alternatively you can use callback functions. Callbacks are kind of like events and handlers, only because you pass pass a function as an argument to a function (possible because functions are a first-class object in JavaScript btw, just like promises) - you don't run the risk of the event firing outside the scope of the event handler function. The problem with callback functions is they can easily get out of hand - as soon as you start chaining data through more than a couple of asynchronous functions, you can end up in [Callback Hell](http://callbackhell.com/): where you're calling callbacks in callbacks in callbacks.
Callback hell is actually a really good example of a particular kind of code smell: technically correct, but difficult for a human to parse, or interpret. We should always be thinking about how code reads to someone new, or even to ourselves if we context switch for five days or six months.
## Using somebody else's Promise: Fetch
I want to round off this introductory post by using the Fetch function: which is one of the more common ways that JS devs interact with promises.
Fetch is (browser[^2]) JavaScript's own in-built function for making HTTP requests, and it uses promises. If you've ever used `XMLHttpRequest` in browser JavaScript, it's a bit like that. If you've not, then you've not got anything to unlearn to alright, let's go.
For now, let's just get our hands on one, and not worry about what it looks like under the hood (as in, medieval fantasy hood not car hood, obviously).
This is one of the benefits of coding to an interface, and if you're really deep into JavaScript land and lost without a map I just want you to know how useful interfaces can be. If you're much newer to JavaScript Land or Software Continent, don't worry I'm just throwing some playful shade.
[^2]: The `fetch` function is [available in most browsers](https://caniuse.com/#feat=fetch). If you're going to do this in the Node /server environment, you'll probably need a package like `node-fetch` or some other polyfill.
### Sidenote: Emojis in code snippets
I like Emoji, I think they can quickly signify meaning. In the code snippets below I use the following emoji in code snippets to explain things:
- ✏️ to signify that you're about to write something, and this is what it is.
- to signify that I'm about to explain an output from the console.
### Back to the show
If you're on a Desktop, I want you to go to Chrome[^3] and open the dev tools (`⌘ + ⌥ + I` on a Mac, `Control + Shift + I` on Windows) and go to the Console tab. We're going to go ahead and get a random _Game of Thrones_ quote because the kind people of the internet have not only created, but made freely available, servers which will serve us wonderful data like this for free ([GitHub link](https://github.com/shevabam/game-of-thrones-quotes-api)).
[^3]: It does actually have to be Chrome, I tried on Firefox and some errors get thrown. Don't worry about them.
We're going to do all of this using Promises and I need to you shut your jaw, I know it's amazing but flies will get in there.
We'll be using an API endpoint to get a random Game of Thrones quote, it's a GET request to `https://game-of-thrones-quotes.herokuapp.com/v1/random`, and it'll return data that looks like:
```json
// An example quote from the Game of Thrones Quote API
{
"sentence": "Fighting bravely for a losing cause is admirable. Fighting for a winning cause is far more rewarding.",
"character": {
"name": "Jaime Lannister",
"house": {
"name": "House Lannister of Casterly Rock",
"slug": "lannister"
}
}
}
```
Actually, if you're really new here, go ahead and just copy-paste that URL into Chrome's address bar. Because it's a GET request, we don't need to worry about anything fancy. You'll get back a plain-old bit of (unformatted and un-syntax-highlighted) text with the data right there in your browser window. This is just like any other HTTP request (the same as going to `https://www.reddit.com`), it's nothing special.
## Calling Fetch
Let's crank the HackerMan dial up a notch and fetch that same data using the console in Chrome's dev tools. In the console type:
```js
// ✏️ Go to the Game of Thrones quotes server and get a random quote
fetch("https://game-of-thrones-quotes.herokuapp.com/v1/random")
// The console will log you something like:
// Promse {<pending>}
```
Oh.
That's actually a little disappointing, no?
So what have we done here? I'm being serious - read the gosh darn code and console output and think about what you did then try and explain it to yourself. I'm being serious, say it aloud or write it out - actually go through with the words that you would need to say.
If you did it, I'm proud of you. If you didn't then _gee golly,_ friend I wish I had your confidence in my knowledge. Here's what we did:
1. We instantiated the `fetch` function with a URL for the Game of Thrones quote API. By default, `fetch` knew that we wanted to make a `GET` HTTP request (and not a `POST` or `PUT`, etc.).
2. The console then logged out the implicit return value of our statement (which was to call `fetch`). From this log statement we can see that `fetch` returns us a Promise.
And that little `<pending>` sitting there? Why that just means it's not `fulfilled` - remember earlier where you learned about the possible states of Promises in JavaScript (`fulfilled` or `pending`. You know, like 500 words ago. That's that! An unfulfilled promise in the wild.
## Storing the Promise in a variable
So how do you actually get the quote in the response, when it comes back?. Well, we didn't store the Promise we generated in the above code-sample, which means we have no way to do anything with it - like check if it's back yet.
Let's fix this, and take a look at the settled promise value:
```js
// ✏️ Go to the Game of Thrones quotes server and get a random quote, and save it to the `quote` variable
const quote = fetch("https://game-of-thrones-quotes.herokuapp.com/v1/random")
// The console will log you something like:
// undefined
// ✏️ Wait a few seconds, then let's look at the value of `quote`
quote
// Will log
// Promise {<fulfilled>: Response}
```
Oh cool, we made the request and it returned... now what? How do we get the data out of it.
You know what's really cool about Promises? When you create them, you don't have to specify what to do on their success/failure right away. You can create the promise, then handle it later. So assuming you did the above, and you've got a variable called `quote`:
```js
// ✏️ Add the onFulfilled event handler to the promise
quote
.then(response => response.json())
.then(data => {
console.log(data.sentence)
})
// Will return something like:
// "Fighting bravely for a losing cause is admirable. Fighting for a winning cause is far more rewarding."
```
You know the drill: tell me what you did here. In a list, out loud, what's happening?
Oh, there's not inline list this time. There's a lot going on here that we've go to break down. Are you ready?
### 1: Call the `then` function
We take the Promise which has a _Game of Thrones_ quote in it (somewhere) and **we call the `then` function**. This is really important: `then` is a function on a Promise.
`then` is a function that takes one or two functions as arguments:
1. Argument #1 : The `onFulfilled` function - which runs when the async operation behind the promise is successfully completed.
2. Argument #2 : The `onRejected` function - which runs when (or if) there's a problem completing the async action.
Here, we're only giving it one argument, so we're only defining the `onFulfilled` part. JavaScript is cool with us leaving the `onRejected` argument as `undefined` so now everyone who didn't like that thing about Interfaces has smug little smiles on their joyous faces.
So we're calling the `then` function with one argument: an anonymous arrow function (i.e. a function that we've not assigned to a variable somewhere else) which takes one argument: which we've called `response` - which represents the HTTP Response that fetch returned to us.
### 2: The `json` function
We call the `json()` method, the return value from which is returned implicitly[^4]. The `json` function is defined on the `Body` of the `Response` object that `fetch` returned to us- so don't worry about where it's coming from.
`json()` essentially takes the HTTP response body that `fetch` got, and parses it like JSON, so that we can treat it like an Object in JavaScript.
One last thing: `json()` is an async function, so it returns another promise.
If you're curious about `json()`, [here's the MDN docs](https://developer.mozilla.org/en-US/docs/Web/API/Body/json)
[^4]: Implicit returns in arrow functions in JavaScript don't have the curly (`{ }`) braces. For example `() => 5` will return `5`, whereas `() => { 5 }` will return `undefined`
### 3: Promise Chaining
Because that first `then` function (implicitly) retuned a Promise (from the `json()` function), we can then call the `then` function on that _that_ Promise so that we can actually handle the data from the API. This is called **Promise Chaining** - because you are flowing the result of one async action into another async action handler.
All this work for a damned quote.
Promise chaining is an application of Functional Composition: the way we compose together individual functions into production lines, or conveyor belts, which take in raw data at one end, and produce formatted data at another.
So we take the result of the fulled Promise that the `json()` function invocation returned - which is a plain-old-javascript object. We refer to this as as `data` in that second `then` function - where we read and enjoy with humour or dread, or whatever it is that GRRM was going for.
This isn't the place to talk about functional composition, but if you're already familiar with JS, you can learn more about it [here](https://www.freecodecamp.org/news/function-composition-in-javascript/).
## Doing the same thing at author-time for Promises
Now that we've covered each of the individual parts of a promise, and you've either got confused and left or scrolled to the bottom, I just want to mention that normally you'll declare your `then` functions in the same place you create your Promise.
This will give you code which looks like:
```js
// ✏️ Go to the Game of Thrones quotes server and get a random quote, then process the data in-situ (so don't take it anywhere else)
fetch("https://github.com/shevabam/game-of-thrones-quotes-api")
.then(response => response.json())
.then(data => {
console.log(`${data.character.name} says:`)
console.log(data.sentence)
})
```

View file

@ -0,0 +1,31 @@
---
title: "Things I Learned this week #5"
author: Thomas Wilson
date: 2020-09-11
draft: false
slug: "2020-09-11-things-i-learned-5"
tags:
- things-i-learned
---
- **This missed opportunity to name something**: Ping Pong is a weird name for a sport, right? Ping Pong is actually a trademarked name, but it's not uncommon to call a thing by a brand name: it's like Hoover vs. Vacuum Cleaner, or Kleenex vs. Tissue. The real-fun fact here is that in 1900 Slazenger, a sports company, filed a trademark for the term Whiff-Waff - and 120 years laters (somehow) _Ping Pong_ prevailed while _Whiff-Waff_ died out, despite the fact that it's clearly more joyful. ([link to an oddly self-righteous article](https://www.worldwidewords.org/topicalwords/tp-whi1.htm)).
- **This stone man**: The Apennine Colossus ([link](https://unusualplaces.org/the-appennine-colossus/)) is a stone sculpture in Tuscany, Italy, which is a personification (embodiment?) of the Apennine mountain region. This is why he's really big, but also I guess why he's made of stone? The use of stone to represent stone is perhaps a little on-the-nose, but the piece is gorgeous and captivating.It was created in the late 1500s by a Flemish sculptor residing in Florence, and some people argue that if it placed in the Piazza della Signora (and not in the private garden of a Medici home some seven miles from Florence) it would be considered a masterpiece.
- **This new word**: _Farrago_ means some kind of confused, haphazard, or disorganised mix - a word around which I appear to have been building a life philosophy.
- **This set of tarot cards**: Don't ask how I got here, but this week I learned one can purchase a Hello Kitty themed set of tarot cards for a cool £250 ([etsy link](https://www.etsy.com/uk/listing/637754503/last-day-70-off-and-free-shipping))
- **This medical condition**: Stendhal Condition, named after a French novelist, is characterised by dizziness, hallucinations, and heart palpitations which come on after being overwhelmed by the beauty of art. Amazingly, that means it's really common in Florence, Italy ([link](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2991758/))
## Cool Articles
- **What to talk about in 1:1s** by Julia Evans on her [_wizard zines_](https://wizardzines.com/comics/1-1s/) site. I really like the simplicity of this piece - it's just a collection of example things you might want to raise to a manager, so that 1:1s can actually be useful to you in the 6-12 month time span, and not just a box to tick, or reason to spend time away from your desk.
- **Against Waldenponding** by Venkatesh Rao on their [_Breaking Smart_](https://breakingsmart.substack.com/p/against-waldenponding) newsletter. No one is quite sure on the effects of so much technology, content, and mediums (podcast, YouTube video, Netflix, Newsletter) on our brain. It's given rise to a counter-culture, which is almost a meme in some tech circles, where someone voluntarily completely disconnects and go to live in a cabin in the woods. This article argues against, and while I don't necessarily agree with all the points the author makes, I think it's an interesting counter point in a debate where I rarely see someone taking an opposing side.
## What I've had on Rotation
- **Something New**: _Pink Elephant_, by Stand Atlantic (Pop Punk). I adore pop-punk, and I think everybody should embrace their inner teenager. This album is cathartic and comfortably pop-punk, but even better than that, it's a great album in its own right - it doesn't rely on nostalgia or tropes. Put it on play and relive the vibrancy of being 17-19 again. ([links](https://songwhip.com/stand-atlantic/pink-elephant)).
- **Something Old**: _Safe in the Steep Cliffs_ by Emancipator (Contemporary Instrumental). I've spent a lot of time this week needing music without words, and I've been rediscovering a lot of my old favourites during my time at University. The tempo and beat of this album is great to head-bop to while you're in a flow state, but perhaps a little too-high energy of more cognitively intense tasks ([links](https://songwhip.com/emancipator/safe-in-the-steep-cliffs))
## Cool Things
- [By the Books](https://mailchimp.com/presents/by-the-books/) - it's like the online experience of browsing a friend's bookshelf, but online. Created / curated by MailChimp.
- [blobs.app](https://blobs.app/) - soft and gooey blobs are becoming more commonplace in UI design. This little web UI will generate a simple svg (or Flutter) blob for you to use. I got this from the Smashing Magazine newsletter,

View file

@ -0,0 +1,26 @@
---
title: "Things I learned this week #6"
author: "Thomas Wilson"
date: 2020-09-18
draft: false
slug: "2020-09-18-things-i-learned-6"
tags:
- things-i-learned
---
- **These ways of thinking**: When we hand over a new problem to our brain there's a lot of things we need to do to solve it. We need to understand the problem and the surrounding/causal concepts as well as the constraints on a solution. For example the challenge might be "what should I write about on my blog this week?", and a constraint might be that it a) can't be boring, and b) can't be too long. When we're doing these mental processes we have two broad types of thinking: _Divergent Thinking_, where we produce a lot of possible solutions and new ideas; and _Convergent Thinking_, which is where we hone in on a narrow "right" answer. Often one will follow the other: we'll generate ideas with Divergent Thinking and filter them using Convergent Thinking. ([source](https://blog.dce.harvard.edu/professional-development/divergent-vs-convergent-thinking-how-strike-balance))
- **A word for this social media phenomenon**: "Sadfishing" is the act of exaggerating or highlighting personal struggle or problems online in order to gain attention. Interestingly, the same kind of person who is more likely to sadfish is also more likely to judge someone else's emotional/personal social media posts as less genuine ([source](https://theconversation.com/sadfishing-frequently-sharing-deeply-emotional-posts-online-may-be-a-sign-of-a-deeper-psychological-issue-126292))
- **This thing about embryonic cells**: It's wild that as an embryo develops, each cell knows what it needs to become. The protein SHH, which actually genuinely short for Sonic Hedgehod (I'm not joking) is a _morphogen_, which means it is used in the process of instructing cells in what they should become. Specifically, SHH, plays a role in the neural development of an embryo - letting cells know that they need to form the nervous system by forming the _nerual tube_ (kinda cool, kinda gross name). Anyway, a beacon emits SHH into the surrounding area and the surrounding cells "eat it up", so the further away from the beacon the further cells know they are from the neural tube (and vice-versa). Nature's cool, yo. ([amazing explanation on reddit](https://www.reddit.com/r/askscience/comments/irxncu/how_does_a_cell_know_what_to_become_if_they_all/g54ffw9?utm_source=share&utm_medium=web2x&context=3))
- **This surprisingly relevant architecture**: Nothing would stop the Italians drinking wine, not even the Black Death. During the 1600s, the Italians started building tiny windows in wine shops through which wine could be purchased and passed, without the need for face-to-face contact. They're called _Buchette del vino_ and during the COVID-19 pandemic, certain Florentine cafes, bar, and gelaterias started re-serving food through them. ([more info](https://buchettedelvino.org/home%20eng/index.html))
- **This thing that oak trees do**: This year is apparently a _mast year_, which means that oak (and other fruit-bearing trees, like beech) produce loads and loads of their fruit (e.g. acorns). Evolutionarily speaking, this means that the animals who feed off these fruits are not able to eat everything the trees produce, and there's a higher chance that there will be leftover seeds for producing baby trees (saplings?) come spring. We're not sure how trees know when they should fluctuate their fruit production, but we suspect it's something to do with the weather in spring. ([source](https://www.woodlandtrust.org.uk/blog/2017/10/autumn-is-back/))
## What I've had on Rotation
- **Something New**: _Boreas_ by The Oh Hellos (Folk). The folksy sound of this band are unlike a lot of similar bands. They're loud and delicate, joyful and mournful - they're a beautiful set of humans, and their new EP brings more of their delightful tones into my life. ([links](https://songwhip.com/the-oh-hellos/boreas))
- **Something Old**: _Oh Wonder_ by Oh Wonder (Gentle Pop). I remember discovering Oh Wonder during my time at uni and I remember vividly listening to them in my car as I was driving around a busy but happy time of my life. This album is calm and gentle, and brings back a lot of those memories. ([links](https://songwhip.com/oh-wonder/oh-wonder))
## Cool Articles
- **A supercomputer analyzed COVID-19 - and an interesting new theory has emerged** by Thomas Smith on [Medium's Elemental](https://elemental.medium.com/a-supercomputer-analyzed-covid-19-and-an-interesting-new-theory-has-emerged-31cb8eba9d63). We're all a little tired of hearing about COVID-19 but in this article, Smith breaks down a lot of the current pathological/biological theories behind COVID-19 which I don't hear a lot of discussion about. I don't think we're giving enough airtime to the global scientific community who are figuring this out as fast as is realistically possible, largely because these things are inherently uncertain and changing. The main takeaway for me was this increased view of COVID-19 as blood/circulatory disease, not primarily a respiratory one.
- **Web Brutalism, Seamfulness, and Notion** by Brandon Dorn on [Viget](https://www.viget.com/articles/web-brutalism-seamfulness-and-notion/). As I've moved further away from design as a UI-centric process (i.e. drawing rectangles and selecting the right kind of grey), I've taken a lot more value from design as a UX or thought process. This piece covers the design/aesthetic/philosophy of brutalism, just in the context of web and software - as an approach which argues that we should embrace the underlying tools, materials, and concepts and not try to design them away. The author makes a compelling point, which is likely too extreme to be useful to many, but there's nearly always value in hearing an apposing opinion made coherently.

View file

@ -0,0 +1,120 @@
---
title: "My experience finding a new job as a software engineer in summer of 2020"
author: Thomas Wilson
date: 2020-09-20
draft: false
slug: "2020-09-20-interviewing-experience-2020"
tags:
- interviewing
---
In late summer of 2020 I moved from freelance software engineer to a full-time position. I want to outline this process for literally anybody who's interested because I've found it useful when other people have done the same - like [this post](https://habr.com/en/post/489698/) about interviewing at Google, [this front-end](https://css-tricks.com/interviewing-front-end-engineer-san-francisco/), and [this more generic post](https://meekg33k.dev/what-i-learned-from-doing-60-technical-interviews-in-30-days-ckda9sn7s00iftss13b0wd0ky).
Web development is a joyfully open community. There's a lot of sharing, most often we share code, but we also share details about the wider context of our field. Navigating a career is hard, and that's not made easier when people don't talk about their experience of moving (up, down, sideways) within and between companies.
It can be hard to talk about these things with your current colleagues without sounding like you're planning on leaving. It's also just a weird industry, where applying for jobs can take a long time, require a lot of standardised hoop-jumping and box ticking, and just generally feels pretty daunting. Not to mention the global pandemic and economic down-turn that hit us in 2020.
Anyway, I've managed to find a new job that I'll be starting in October 2020. I'm (secretly) very excited and hopeful for it, and I want to share what it was like interviewing for a frontend / fullstack software engineering role in the summer of 2020.
**A note on honesty:**
I want to be as honest as possible here, and not skip over mistakes or hurtful events (like being rejected). I still have to be purposefully vague in some places. Honestly, the specifics don't really affect the trends and takeaways as a whole.
I'm also not going to go into detail about my salary here. I would (and do) discuss salary in person with trusted peers because people and companies have (and do) get away with discriminatory (e.g. by gender) pay for people in similar positions. But this is the internet, yo - I'm not going to talk about this right now.
If no one around you is willing or able to talk about salary, it's fairly easy to find average data for your city and job position. For example, the average salary for an engineer (which is a broad definition) in London in 2020 is about £50-60k:
- [LinkedIn](https://www.linkedin.com/salary/search?countryCode=gb&geoId=102257491&keywords=software%20engineer) says £50k
- [Glassdoor](https://www.glassdoor.co.uk/Salaries/london-software-engineer-salary-SRCH_IL.0,6_IM1035_KO7,24.htm) says £52k
- [Hired.com](https://hired.com/blog/highlights/2020-state-of-salaries-report/) says £60k
## Being open to opportunities
I am a software engineer with 3-5 years[^1] of front-end and full-stack experience. I have worked in academia, in large (>500 person), scaling (50-150 people), and small (~5 people) companies. I spent 2.5 years in companies, and about 8 months freelance.
I signalled myself as open to new opportunities for related positions around July-August of 2020. Around the middle of September I accepted a full-time position as a front-end engineer. In all, it took me ~10 weeks from first thinking "I should see what's out there" to signing a contract.
Much of my job hunting was through "passive" platforms, where recruiters and companies would come to me with information about positions. I used LinkedIn, [hired.com](https://hired.com/x/bec1ebaca8237ac16389e129029c0c0b), and [talent.io](https://www.talent.io/ref/iyhqVAh7)[^2]. On the latter two platforms, you have the ability to set salary expectations and create a list of technology stack/work environment preferences.
[^1]: Depending on if you count my PhD as "professional" experience or not.
[^2]: Each of those links are referrer links, we both get a rewarded if you find a job with that platform. If you feel weird about using a referral link it's very easy to get started on both platforms without them.
I also used various job boards, notable hacker new's monthly "Who's Hiring" (which are [consolidated here](https://hnhiring.com/)) post, to look for jobs maybe once a week. There's a lot of nonsense, unclear, non-applicable job postings out there, and it's easy to spend too much time searching the noise for signal.
I want to be in my next position for ideally 3+ years so I was very selective about the companies I wanted to work with. I did not _need_ a new job, and so I could be afforded this luxury.
In that time I had introductory phone calls with 10-15 companies, and interviewed with seven (i.e. arranged a follow-up from the introduction call). I ended up accepting an offer from one, was rejected by one, ghosted by two others, and declined three at the point where they asked me to complete some kind of code challenge.
## The interview process
The interview process for all companies who I spoke with (more than the seven mentioned here) looked surprisingly similar:
1. **A pre-interview interview**. Have a 30-45 minute one-to-one chat with a recruiter or product-person. The point of this chat is for both parties to get a sense for each other. I am good enough at faking extroversion to actually enjoy these, to chat with interesting people about interesting problems. If you're roughly qualified in the technologies, and find yourself actually engaging with the problems the startup are facing, then you'll normally be screened through these calls an invited to the next stage.
2. **A technical chat**. If you make it through the introduction call, a few days later you'll probably have a more focused conversation with somebody, or somebodies, more technical. These chats are about drilling down on the kind of work you've done recently, and examples of your character. Be prepared to have a few case studies for specific projects you've worked on, things which have made you proud, and things which you have done wrong. Smaller companies tend to have more free-form interviews but larger/scaling companies will have a more formalised process with more set criteria. Try to stick to your time, don't ramble (but don't be too short), be honest, and be kind to yourself, your colleagues, and the industry as a whole. If the company think you're as qualified as you say you are, and you're a good ✨cultural fit✨ then you'll make it through this stage.
3. **A code-based test**. At some point they're going to want to see you write code, and you're going to want to show off how able to write code you are. The format of these varied, and I'm really happy to see a move away from take-home tests as the only thing they ask you to do. Methods I either experienced, or would have experienced, include:
- Walking someone through a codebase I had written, or was familiar with.
- Taking a look at the company's codebase, and running a think-aloud style interview where I explain what I'm seeing and what I think about both syntax and architecture.
- A time-boxed take-home problem, i.e. being given a specific coding challenge but with an explicit deadline or limit on time (in the order of days, not hours). The company would tell you ahead of time if you needed to set anything up in particular (e.g. libraries, virtual environments, software).
- The classic homework take-home problem, i.e. being given a problem and asked to submit a solution when it's ready.
4. **An on-site interview**. If you can write the code, and the company like how you write code - then you'll probably be invited to an on-site interview. All companies I spoke to (which weren't 100% remote) had an on-site part of their interview, and all made concessions given the COVID-19 pandemic (only meeting a certain number of people, social distancing measures, etc.)
## The companies
In all, over the summer (6-8 week period) I interviewed with seven companies. I've grouped them by outcome, the order other than that is completely random.
### Sustainable Laundry company
🎊 Accepted an Offer
**What do they do?** They wash clothes, I guess, with the USP of being zero carbon.
**What happened**: one-on-one intro chat with head of tech, two-on-one chat with CEO and head of tech, then an on-site with the wider team. Offer made the following day and accepted two days after that.
### Hospitality/Services adjacent company
🙏 Declined before code-test
**What do they do?** They work with companies in the hospitality and services industry to increase efficiency.
**What happened?** After a productive chat with someone product-focused I had another productive chat with someone in the tech team. I was offered a take-home code test which I declined because I accepted the other job. I was offered contract work at a later date, and would have accepted it if I had the time, they were genuinely a good bunch of people.
### Civil Infrastructure company
🙏 Declined before code-test
**What do they do?** The company use novel software to reduce losses and increase efficiency on civic infrastructure (think roads, water, sewage, power lines).
**What happened?** A successful introduction call with a product person, then a one-on-one with a C-level person. I declined the take-home coding test as I accepted the above offer, additionally their tech stack was far outside my current area of expertise.
### Productivity software company
🙏 Declined after first interview
**What do they do?** A very early stage (almost-finished internal MVP worked on by small team) team building a real-time, collaboration-focused, web productivity tool for teams.
**What happened?** I declined a code-based assessment because I did not believe in the company's mission, especially in a crowded marketplace - they couldn't verbalise a strong, coherent USP or value proposition in a busy marketplace.
### Logistics company
🙅 Rejected
**What do they do?** A growth-stage startup with a vibrant and varied tech team who handle global-level logistic chains.
**What happened?** I was rejected after a personal fit interview with a number of employees. I received specific and targeted feedback.
### HR company
👻 (Almost) Ghosted
**What do they do?** They're working in the talent acquisition space to help recruiters find talent and streamline the process from applicant and recruiter side.
**What happened?** After ~4 weeks I got an e-mail back saying the position had been filled, but was offered short-term contract work with the team.
### Data Privacy Company
👻 Ghosted
**What do they do?** An international data-privacy company who were looking for frontend engineers to improve the UI of their products.
**What happened?** I saw the job advertised online and reached out to the contact e-mail address given (who was the CEO). The CEO asked for a CV and a cover letter which I sent in and never received an acknowledgement or reply.

View file

@ -0,0 +1,26 @@
---
title: "Things I learned this week #7"
author: "Thomas Wilson"
date: 2020-09-25
draft: false
slug: "2020-09-25-things-i-learned-7"
tags:
- things-i-learned
---
- **This unknown origin**: No one is quite certain where the term "rule of thumb" came from. It has been mistakenly attributed to a British Judge's rule that a man can beat his wife if the stick so long as it is less wide than his thumb, however there's no evidence to support that this ruling was ever made. ([source](https://freakonomics.com/2011/07/01/rule-of-thumb/))
- **This heist**: The police recently seized about £2.5m worth of books which were originally stolen in 2017. How were they taken? The thieves cut holes into the roof of the warehouse near Heathrow Airport and (I don't see how this can't be true) hummed the Mission Impossible theme tune as they lowered themselves down on carbon fibre grappling hooks past motion sensors (that bit's actually true) all the way to original copies of books by Newton, Copernicus, and Galileo. The books were stolen by a Romanian crime gang, and found buried under a house in rural Romania. ([source](https://www.bbc.co.uk/news/world-europe-54209366))
- **This thing about conspiracy theorists**: There's possibly an evolutionary reason behind conspiracy theories: people/groups of people who are more likely to believe others are maliciously conspiring against them are less likely to underestimate the power or potential of others. This may increase the survival rate of those who are more suspicious of others. This means that our disposition to believe in conspiracy theories may to some extent be favourable and innate. ([source](https://onlinelibrary.wiley.com/doi/pdf/10.1002/ejsp.2530))
- **This thing about reading**: On average, people onlyy read about 20% of the content on any given web page. This study was done in 2008, and I couldn't easily find a more up-to-date revision. That means most people would only read _one_ of these five wonderful things I learned this week. ([source](https://www.nngroup.com/articles/how-little-do-users-read/))
- **This Roman god**: Domitius is the Roman god who kept a woman in the house of her husband. His wife, Domiduca, protects children on the way back to their parents' house. Thanks for your service Domitius, but I think we can take it from here - you've had a good couple of thousand years, yeah? Domiduca, go take a spa weekend or something - go somewhere outside the house and without children. ([source](https://en.wikipedia.org/wiki/Domiduca))
## What I've had on rotation
- **Something New**: _Fragments_, by Bear's Den and Paul Frith (Acoustic Folk Pop). This is such a gentle album, containing fully instrumental/acoustic remakes of their own songs, from across a number of their own albums. It's a great early autumn playlist to sit inside with, to read to, and to take the pressure out of an evening with. ([links](https://songwhip.com/bears-den/fragments))
- **Something Old** _Blink 182_ by Blink 182 (Pop Punk). I rediscovered this album on a bike ride I took earlier this week, in possibly the last of our summer sun. It was one of the first CDs I ever got, and the words to pretty much every song have been burned into somewhere deep in my brain. The pop-punk energy, distinct vocals, and general teenage melancholy make this a great album all round, if we're being honest. ([links](https://songwhip.com/blink-182/blink-182))
## Cool Articles
- [Mark in the Middle](https://www.theverge.com/21444203/facebook-leaked-audio-zuckerberg-trump-pandemic-blm) by Casey Newton for _The Verge_. This is a great bit of reporting on both Facebook and Mark Zuckerberg's approach to leadership and management. Zuck is a man who appears increasingly out of touch with human and social sentiments that make up a lot of the human experience. The article also highlights some wider tensions around Facebook which I had never previously considered, for example that Facebook employees are largely left-leaning but its customer base is increasingly right-wing; and how Facebook sells its mission to its employees as a democratising force for opportunity and connection for all. Ultimately, however, management within the company seems to continue to ignore the damaging consequences of providing a platform, and even amplifying voices, of hate speech and conspiracy theorists. The recordings in this article are also tightly integrated, and I love the design of the piece as a whole.
- [After 15 Years as a Product Leader, CEO and Now VC, Heres the Advice I Always Share with Future Founders](https://firstround.com/review/after-15-years-as-a-product-leader-ceo-and-now-vc-heres-the-advice-i-always-share-with-future-founders/) on the _First Round_ blog. This is a nice reminder of the importance of always staying product and experience focused, accepting nothing less than what you envisioned. Even as products and teams grow (or bloat), these shouldn't slip (but pretty much always will). There's definitely some gems in there, but not every company can afford Google levels of financial, time, and mental resources. I don't think anyone can just stop everything and only ship excellence (as much as we all want to say we can and do).

View file

@ -0,0 +1,45 @@
---
title: "Software Engineering as a Craft"
author: "Thomas Wilson"
date: 2020-09-28
draft: false
slug: "2020-09-28-software-engineering-as-a-craft"
tags:
- essay
- engineering
---
A few months ago a prominent figure in the tech and software space was uninvited from a conference[^1]. In an (intentionally humorous) summary of this person, Melissa McEwan wrote a [Tech Bullshit Explained](https://techexplained.substack.com/p/tech-bullshit-explained-uncle-bob) about the person. I don't want to talk about any of allegations or (tellingly-immature) reactions to the allegations, but something McEwan said in her post didn't seem to fit, and to me seemed a little too far. She says:
[^1]: I don't want to name them in this post because this isn't about them, or really the situation. Please oh goodness please don't let anything I say here be seen as any critique or defence of anyone or their action.
> They had to make Software Craftsmanship because Agile became too much about project management and not about code. This made software devs sad because they hate it when things arent about them. [Person of Interest] and others thought too much code sucked. And people weren't paying enough attention to writing code that didn't suck. They decided the solution was to LARP as medieval craftspeople. And pretend they were making beautiful woodcarvings instead of pop up windows on websites.
Look, I'm all for making fun of nerds, especially when they put on ill-fitting armour and probably very itchy wool and run at each other in a field, we've all seen _Role Models_. Just as people make fun of the nerds who have nothing better to do on a Tuesday evening than write things no one will ever read because it feels mildly more productive than watching the third episode of Ru Paul's since dinner.
I don't take issue with calling it craftspersonship or artisanal. We can just go ahead and remove all the needless gendering from our language, it adds nothing and does damage as a whole. I also take some umbrage with the fact that damn near everything is _artisanal_: ice-cream, every Etsy store, and now apparently anyone who writes code.
I see the humour in the choice of naming: a bunch of engineers get tired of no one else understanding how hard it is to do their job and how clever and skilled they are. So they look around and the only analogy they can find is _obviously_ something right out of a D&D game or fantasy trope: the student/master, artisan/apprentise model.
And finally, yep, we've all met at least one Grumpy Engineer (TM) or Egotistic Engineer (TM). I think in part it's because the salaries are comparatively high (because they provide high value), another part because of the underlying nature of the job, and a further part selection bias for the kind of people who want to become software engineers. It is a good idea to account for this inflated sense of self-importance when making software: give an engineer 1-12 weeks and at some point they're going to demand this awful code needs a re-write because _they_ wouldn't make something this messy. Part of managing and working alongside/within engineering teams is compressing this need for perfection, or the illusion of perfection, in favour of "yes but also we need to satisfy our customers because they pay you".
I do, however, take issue with the idea that we can use these easily mockable and related things to dismiss or diminish the sentiment behind what lead to the need for Software as a Craft (SaaC?). There's a clear underlying point to me, and one that doesn't even start with _these_ old white men - in 1998 Freeman Dyson drew comparison between the historic practice of craft and the modern (at the time) software development.
In his essay _Science as a Craft Industry_, Dyson puts _Craft_ against _Mass Production_ as two ends of a spectrum. Both approaches have their pros and cons. Mass production has enabled pretty much everything, from water bottles to cars, to become massively affordable and therefore pushed societal advancement as a whole. But mass Production is all about producing one thing: that single factory _only_ pumps out motorcycles or water bottles. It's not going to start producing jigsaws by mistake if you stop watching it for thirty minutes, but nor could you easily turn it into a jigsaw factory very easily.
The original [Arts and Crafts movement](https://en.wikipedia.org/wiki/Arts_and_Crafts_movement) emerged around the turn of the 20th century in response to increased mechanisation and mass production. William Morris was an even first-er "Old White Men" that McEwan could point at. Morris argued strongly that artists and designers see themselves, and their work, as craftspeople would: working by hand to create the highest quality individual work. The Arts and Crafts movement criticised mass production or mechanisation, at times calling for all work to be done by hand and at other saying that so long as machines could produce work (designed by craftspeople, obviously) of good quality, then it was okay to use them.
In a much more moderate, less social reformist, argument Dyson argues for software as a craft from the perspective that humans are a tool-making species. We will continue to use the materials available to us (physical and conceptual) to craft tools and solutions which help us do things. Mass production may help spread those tools, but we're always going to be tinkering and building - and _that_ is the craft. He argues that software development is just as much a craft as the development of better, more precise, more capable scientific equipment:
> Because of the enormous variety of specialized applications, there will always be room for individuals to write software based on their unique knowledge. There will always be niche markets to keep small software companies alive. The craft of writing software will not become obsolete. And the craft of using software creatively is flourishing even more than the craft of writing it ([Science as a Craft Industry](https://science.sciencemag.org/content/280/5366/1014.full?view=full) Freeman Dyson, 1998)
When the production of software is a craft we appreciate, and even require, high levels of proficiency in a the problem domain and the technical tools available. This is what lets someone create, or purposefully work towards creating, software which is better, stronger, more efficient, cheaper, faster, easier to use, more stable, etc. - whatever the problem space demands.
When we see software _only_ as a craft, as something which is entirely small scale in scope and also in team size, we risk producing only small-scale work. Perhaps worse, we risk having pockets of high quality work, undertaken by people who both love the craft, and have the mental aptitude to truly improve the craft. I would argue that software engineers have a duty to share experiences, best practices, evaluations, and tradeoffs. Part of being a craft, then, is the teaching/learning aspect of student and teachers. Though, given the already vast breadth and depth of modern software, all engineers should be coming into the craft with a student's mindset. I digress, though.
Both approaches, software as a craft vs. mass produced software, are necessary. It's a shame that we made the decision to point to the people who made furniture and cutlery 500 years ago and be like "do it like they did it", because they're seemingly very different. However, the fundamental designs of a chair and a fork haven't much changed in the last 500 years, nor have we yet converged on a single utilitarian design for either. Take a metal worker or a carpenter from today and 500 years ago and watch them work, and it probably looks very similar. Now people might learn more from YouTube than they did in the 1500s - and people may not serve a seven year apprenticeship - I'd imagine the two could sit down over a pint and make good conversation.
Ian Martin [makes an interesting point](http://oro.open.ac.uk/10383/) related to this: the decreasingly tangible product of code, i.e. that all we have are files on a hard-drive, may make it easy to forget that writing software produces a _thing_. If you produce a wonky chair or an overly long fork, it's easy to see the quality of work was not great. By calling for a perception of software as a craft, we fight against that ability to forget or not notice the final quality of the product. You could watch two software engineers with different levels of experience, or in different domains, and it wouldn't necessarily be so easy to guess which is which, at least from a distance.
So maybe there _is_ something to be said for the value of software as a craft, for sometimes focusing on the practice of making better, or at least different, software just for the sake of it. It's a shame that some developers get arrogant, zealous, and grumpy enough to give this idea a bad name. No matter how you justify it - as career advancement for yourself, value added to your business, or experience to your users - we should all be seeking to write better code and that doesn't happen by accident - that happens with the careful application and slow refinement of the craft. If you need to wear a leather gauntlet and call yourself Hilda The Blacksmith's Daughter to do that, then sure, buddy, I'm with ya.

View file

@ -0,0 +1,26 @@
---
title: "Things I learned this week #8"
author: "Thomas Wilson"
date: 2020-10-02
draft: false
slug: "2020-10-02-things-i-learned-8"
tags:
- things-i-learned
---
This week's _Things I learned_ is a little shorter than usual because I've been moving house. I hate every part of moving house. Anyway, enough excuses, here are some of the things I learned this week:
- **This thing about reading**: I've been thinking about how much we read recently. I think we'd all like to read more, and you hear so often of speed readers who can devour books in hours. The thing about reading is that you're limited by a) how fast your eyes can move, and b) how much you actually take in when you read. Most Higher Education level readers can read and comprehend no more than about 400 words per minute, but you can typically expect to fall within the 200-400 words per minute range. ([source](https://slate.com/news-and-politics/2000/02/the-1000-word-dash.html))
- **This incredible woman**: Pearl White was an American actress born in 1889 who worked as an adult on stage, screen, and also the circus when she was a kid. She started in America, moved to Paris, and by 1924 (aged 35) she had been divorced twice, saved \$2m, invested in clubs, casinos, and race horses (name three more badass investments) and bought a house in Egypt. She died aged only 49 following years of heavy drinking. ([source](https://en.wikipedia.org/wiki/Pearl_White))
- **This Elizabethan law case**: In 1623 a woman called Susan Baskervile, lived in London and was was married (not all at once) to various theatre- or actor-types (we've all got our flaws, Susan). Susan sued the _Queen Anne's Men_ - a theatre group, because the actors were not able to pay her stipulated pension, which Baskervile was given in the will of her deceased husbands. Not only did she win this lawsuit, but the documentation which was produced provided some of the best evidence in the pay, duties, grievances, and general operations of a theatre company in Elizabethan London. This period was known as the English Renaissance, and because of these documents we know a lot more about the behind-the-scenes aspects of the era. ([source](https://en.wikipedia.org/wiki/Susan_Baskervile))
## Cool Articles
- [The Parable of the Empty Boat](https://sintagma.com/an-empty-boat-on-a-foggy-lake/) a Zen parable explained by _Sintagma_. The core of this parable is that if you were sailing a boat out on a lake and you were crashed into by another boat you would be furious at whoever was in control of that boat. If that boat was empty, floating aimlessly about the lake, then you'd be more willing to accept the random bad accident. It's a nice reminder that bad things can happen and that your reaction to them won't always be constant, so you can control it.
- [The End of Tourism?](https://www.theguardian.com/travel/2020/jun/18/end-of-tourism-coronavirus-pandemic-travel-industry?utm_source=densediscovery&utm_medium=email&utm_campaign=newsletter-issue-107) by Christopher de Bellaigue for _The Guardian_. Travelling, especially for western millennials, has become more about box-ticking than deeper investment, understanding, or a sense of _seeing_ another culture. I've thought this for a while, and it's why I normally holiday in the same couple of places. De Bellaigue puts forward some interesting ideas here bout how the current global pandemic can be a force to promote sustainable and responsible tourism, which tour operators, governments, and tourists may not previously have been encouraged to do.
## What I've had on rotation
- **Something New**: _20/20_ by Knuckle Puck (Pop Punk). I love when a new, fresh Pop Punk album drops, and that's exactly what this is: upbeat but low-key sad, pop punk. I've been really enjoying this album. ([links](https://songwhip.com/knuckle-puck/2020))
- **Something Old** _III_ by Bersarin Quartet (Contemporary Instrumental). I've choreographed/danced to works by this band before - they've got a wonderful ability to create space and ambience around surprisingly little sound. Their sound is delicate and careful, but intense at times. ([links](https://songwhip.com/bersarin-quartett/iii))

View file

@ -0,0 +1,30 @@
---
title: "Things I learned this week #9 (Nobel Prize edition)"
author: "Thomas Wilson"
date: 2020-10-09
draft: false
slug: "2020-10-09-things-i-learned-9"
tags:
- things-i-learned
---
In honour of the announcement of (some of) the 2020 Nobel Prizes, this week's edition contains entirely things I learned when reading about the people and work announced so far. Note that this doesn't include anything about the Peace or Economics prizes, which had not been announced at the time of writing.
I also started a new job this week so I'm running at 5-10% mental capacity so we're in for another short edition this week!
- **This line of poetry**: from Louise Glück's _Lullaby_ "The Soul's like all matter: / why would it stay intact, stay faithful to its one form / when it could be free?". Glück is an American poet who has been publishing poetry since the 1960s. She has also taught at various American colleges. Her work carries various first-person narratives, often looking at intimate human relationships.
- **This weird name**: Before we discovered Hepatitis C, we had only discovered Hepatitis A and Hepatitis B. The thing about Hepatitis C, is that it's chronic and it doesn't present many immediate symptoms (but it'll still kill ya) and we just hadn't isolated the virus yet. Around the 1960s, doctors started noticing something Hepatitis-y in patients who had received blood transfusions, or therapies derived from blood. So for a while, actually about a decade, we called this new virus _Non-A, Non-B Hepatitis_ (NANBH) when really maybe we should have just called it Hepatitis C from the beginning. This year's Nobel Prize in Physiology or Medicine was awarded jointly to Harvey J. Alter, Charles M. Rice, and Michael Houghton for their work in discovering Hepatitis.
- **This use-case for genetic modification**: The Nobel Prize in Chemistry was awarded to Emmanuelle Charpentier and Jennifer A. Doudna for their work on Crispr-Cas9, a tool for gene editing. The _Revive & Restore_ project ([link](https://reviverestore.org/projects/woolly-mammoth/progress/)) is trying to use this technology to create a mammoth-like animal, using the Asian Elephant as a baseline. If this is successful, I put good money on someone farming these animals for food and selling Wooly Mammoth Burgers from a food van. Bonus points to that van being Flintstones themed.
- **This family**: The Nobel Prize in Physics was awarded to Roger Penrose, Reinhard Genzel, and Andrea Ghez for their work on Black Holes. As a child Dr. Penrose, now a maths professor at Oxford, would go for walks with his family. During these walks, his brother and father would play chess entirely in their heads, and Dr. Penrose would run back and forth between them, relaying one's next move to the other.
## What I've had on Rotation
- **Something New** _DEMOTAPE/VEGA_ by BERWYN (Hip Hop/Genre-Queer). This is a personal album, BERWYN puts a lot of himself and his situation into it. It flits between genres but still makes a consistent rap-ish sound and story. This is a good album from a relatively new artist who's obviously got things to say and the ability to say them. ([links](https://songwhip.com/berwyn/demotapevega))
- **Something Old** _Wild Rivers_ by Wild Rivers (Folk). With the shift of seasons from summer to autumn, it's a great time to be pensive. I've always found folk music to fit this mood well, and this album has gentle vibes by the bucket. ([links](https://songwhip.com/wild-rivers/wild-rivers))
## Cool Articles
- _[Meet the Bears of Fat Bear Week](https://explore.org/meet-the-bears)_ on expore.org. Did you know about Fat Bear Week? You should, it's great. You can read all about your new best bear friends, or you can just look at the pictures of chubby bears.
- _[The Widening Responsibility for Front-End Developers](https://css-tricks.com/the-widening-responsibility-for-front-end-developers/)_ by Chris Coyier for CSS Tricks. Every year or so, Coyier, puts out a really great essay on the state of modern web development, without bending to trends, companies, frameworks, or click-baity titles. If you work in web, this piece is definitely worth reading.
- [Why Life Can't be Simpler](https://fs.blog/2020/10/why-life-cant-be-simpler/) on the Farnam Street blog. This article is filled with tiny nuggets worth making a note of, especially if you're in the business of making anything. One of my favourite such nuggets is is that "complexity is like energy. It cannot be created or destroyed, only moved somewhere else. When a product or service becomes simpler for users, engineers and designers have to work harder."

View file

@ -0,0 +1,66 @@
---
title: "Five (and a bit) useful questions to answer in your first week at a new job"
author: "Thomas Wilson"
date: 2020-10-10
draft: false
slug: "2020-10-10-five-useful-questions-new-job"
tag:
- new-job
---
I've just had my first week at a new job (I'm now a frontend software engineer at [Oxwash](https://www.oxwash)), which is cool. I find first weeks intense because I have to balance a) the immediacy of being introduced to everything and everyone in "real life", i.e. not an interview setting, for the first time, and b) trying to convey your long-term personal and professional ambitions to your new bosses without sounding like a career lunatic or emotionless psychopath.
Managing long and short term goals is hard for humans to do, but worthwhile and rewarding when you get it right. Long term goals are rarely immediately relevant or present, it's not always easy to go from "I would maybe like to be an engineering manager" to an actionable thing. It's even harder to consider long term goals in chaotic situations, like when you're being introduced to new people, places, processes, technologies, terminology, and expectations. Plus the added complexity of trying to present yourself as someone who can totally stay afloat and cognisant during all the above.
But if I don't have a long-term idea of who I want to be, even if it's subject to change, I worry that I'll be nudged into doing entirely what's best for the immediate concerns of others or the company. I would rather that my personal and professional development come from a dialog between what others need me to do, and what I think I want to be doing.
For that reason, I came into the first week at a new job with a couple of personal and career-focused questions to help me understand myself and others. These questions ended up being really helpful to me, even if the answer to the questions is was a (polite) "can we come back to this later?".
These are the questions I arrived at when I thought about all these things. They could be riffed on to help find something useful to you, or taken verbatim. I don't think their usefulness is limited to the first week at a new job, nor do I think they necessarily need to be asked to anyone other than yourself. The act of answering your own questions is a good little meditation (and it's at least 50% of the reason I try to write so much).
So yeah, here are the five questions I came up with:
## Imagine 12 months has passed - what could I do that would bring the quality of my work from 'Good' to 'Excellent'?
There are a couple of dangerous implications with this question, especially in a first week: it implies that you are capable of doing excellent work. You may well be, but it definitely sounds like you could be over promising.
Despite that, I found this a useful question because it shows you how people understand, see, and value the kind of work you'll be doing. As an engineer, you'll get a different response to this question from people in management, product, operations, strategy, and tech. This is great - it shows you how the current tech team and offering are seen by the company at large, and how each person/team would define success.
Another little life hack for you is that people rarely have a well defined, concise response to this question. You're probably not going to get told "a 7.5% decline in response times over the next 12 months" (obviously great if you do). Take a note of these points, of what people want, and use them when you're talking about, planning, and polishing tech internally.
## What does the company look like in 12 months, five years, and ten years?
By default, your onboarding will give you a good idea about what you'll be doing immediately, maybe in the next 1-3 months. I found asking this question a great way to prepare me mentally for what I might be doing in the future.
Asking this question to anybody senior in product or strategy (even in C-Suite, if you can) will help you understand what you'll be working on if you stay at the company for a longer (in startup years) amount of time.
As before, this knowledge can help when planning and building software or roadmaps. Things will always change, and your software will always be somehow inflexible or caught off guard, but hopefully this question will help you minimise that.
This question is most valuable in early stage companies, because of the difference between present and planned situation is probably quite large. I have intentionally joined an early stage company, and while they're definitely no longer struggling for product-market fit (if that's even a thing anymore?), the chance that they have already streamlined and perfected everything by now is pretty close to 0%. This is great - you can use your knowledge you're gaining in answering these questions to help get them closer to that goal.
The caveat to this is that the uncertainty and unpredictability could mean that the longer-term projections or ideas are _just_ words. Customers, economies, investors, management, talent, and global pandemics are all winds that will guide your ship. Don't get tied to these ideas, and keep a pulse on it - things can change fast and you'll have to learn when to stick to what you've learned and when you need to learn new lessons.
## When, and how, is my performance going to be evaluated?
This is probably the most boring of the questions, because it is self-serving. However it _is_ important to know how you're going to be assessed, because you want little to no concern about losing your job, failing your probation, or what not. At the end of the day, any good company is going to be equally critical and supportive in examining your work, and feed back to you. This is naturally uncomfortable enough, and so the least you can do is make sure it's not happening against ❓mystery criteria❓.
The answer to this question won't be relevant until you start digging in to actual work. I would still recommend making a note of it. It might encourage you to keep a better log of work you've done, problems you've faced, ways you've improved, or whatever. It might let you know about the company's culture around sharing, feedback, and openness.
## If I'm struggling or have problems, where do I go?
This is the kind of thing you want to know before you need to know it. It might be your direct manager 95% of the time, but it's always good to have an idea about where to go if you were to have a problem with your manager.
Get a sense for which people are best for which problems: management questions, tricky technical work, variable mental health, and ongoing family problems will at some point affect your work. Understanding who needs to be told what, and what kind of support can be offered (internally or externally) is a good thing to suss out.
## What are your immediate team's backgrounds and interests?
Get to know your team, as much as this is _painfully_ obvious, it's surprisingly easy to forget in the chaos of starting a new position. Allow these conversations to happen naturally during your first couple of days working alongside your new team. Don't come in with forced or canned one-liners with your team, this is your first week not a corporate retreat.
I found it useful to get a broad idea about who my team is and what they find interesting. This goes for personal as well as professional interests. We're all complex, complete humans and you'll find something to bond about, even if it's just the weather, crowding on the underground, or the best kind of milk to have in coffee.
Knowing what people do/not know, or where they are/not confident could help you phrase future feedback or explanations in a slightly different way. I'm not always great at asking for explanations of basic terms when someone explains something at a million miles an hour, and I know some people feel similarly. Likewise, when you need feedback or clarity on something, it's good to know where to go in order to get it.
## Bonus Question: Does anybody have any dietary requirements or allergies?
If you're a cook or a baker you might want to bring in some sweet treats now, or in the future. It's always a good idea to know if anyone's going to be excluded, or mortally threatened, if you bring in a particular kind of baked good.

View file

@ -0,0 +1,25 @@
---
title: "Things I learned this week #10"
author: "Thomas Wilson"
date: 2020-10-16
draft: false
slug: "2020-10-16-things-i-learned-10"
tags:
- things-i-learned
---
- **This Tiny City**: St. David's is a city with a population of about 1,000 people. In 1886 it was stripped of its status as a city, being described as "lonely, and the neighbouring district wild and unimproved". In 1994 Queen Elizabeth II requested it be restored as a city, and now it is. ([source](https://en.wikipedia.org/wiki/St_Davids))
- **This Terrible Surgeon**: In the 1800s Robert Liston, a London-based surgeon, was famous for performing amputations quickly. This wasn't just a neat party trick, at a time when surgical complications would kill a lot of people, being quick often meant less pain for the patient and less chance for something to go wrong. Liston once conducted a leg amputation in 28 seconds, during which he accidentally took off the thumb of his assistant and frightened a spectator to death (I'm not joking, he accidentally hit their coat with his knife as he was waiving it about, and the spectator literally died). The patient as his assistant later both died from infections to their wounds. Liston's surgery clocked up a 300% mortality rate.
- **This Monastic Meal Plan**: St. Benedict remains an influential figure in modern Christianity. He wrote a book (a really big book) on how to be a monk and how to run a monastery (which were, at the time, full of monks). St. Benedict thought that monks should have two meals a day, but sometimes one, eaten in complete silence except for one monk reading aloud from the bible. He had a surprisingly well-balanced nutritional plan: fresh fruit and vegetables, two separate dishes, about pound of bread, half a pint of wine (a _hemina_ to be precise), and a except for the sick or very weak, "let all abstain entirely from eating the flesh of four-footed animals". ([source](https://en.wikipedia.org/wiki/Rule_of_Saint_Benedict))
- **This Play Houdini Was In**: Houdini's business model was pretty weird when you think about it: do things that sound and look impossible, like escape from a sealed container of water in handcuffs, and make sure nobody figures out how you do it. Make it so cool and outrageous and impossible that people pay to see it. A very Victorian sensibility. In 1911, Houdini performed his famous _Chinese water torture cell_ trick - in which he escaped from a sealed container of water (chained down, of course). He wanted to patent it, so that others couldn't copy it, but by filing a traditional patent he'd have to reveal how the trick was done as part of the documentation. So instead, he performed the trick once, as a one-act play, to an audience of one. This allowed him to patent the trick as a performance, not as a device, and so did not need to provide any details about how it was done. Incidentally, no one figured out how he did this trick during his lifetime.
- **This Reasonless Nudity**: No one knows why ancient Greek athletes used to perform naked. It was so inherent to the culture that the Greek adjective _gymnos_ (on which 'gymnasium' is based) means 'Lightly clothed or naked' - yet there wasn't a clear reason for doing it. They started doing it about 50 years after the first Olympics and just... liked it, I guess? One story goes that a runner tripped over his loincloth and died, another story is that one sprinter (called Osippus) won a race nude, because he realised it would help him run faster.
## What I've had on Rotation
- **Something New**: _The Quiet City_ by David Wenngren & Library Tapes (Contemporary Instrumental). This is such a beautifully atmospheric album, it's perfect to put on as the evenings get colder and the rain starts coming in. The entire album flows into itself beautifully, and the orchestration is superb. ([links](https://songwhip.com/librarytapes/the-quiet-city))
- **Something Old**: _The Come Up_ by J Cole (Hip Hop). I really love some classic J Cole, this album has such a classic boom bap production sound and style, and the raw energy of an early J Cole. His new stuff is great, he's got a lot to say, but his old stuff is great to remember too. ([links](https://songwhip.com/j-cole/the-come-up))
## Cool Articles
- [How Duolingo designed the new character for its project world](https://www.theverge.com/2020/9/26/21456628/duolingo-app-design-characters-language) by Kim Lyons for The Verge. If you've used duolingo, even if just for a bit, over the years you'll know Duo, the green owl mascot. Recently, Duo'sgrown quite the little friendship circle. This article covers how the company behind the owl developed his new friends. There's a nice mix of psychology, education, and design in this article. It's a good read.

View file

@ -0,0 +1,74 @@
---
title: "Think in Frameworks, build with Libraries - Thinking about CSS in Web Development"
author: "Thomas Wilson"
date: 2020-10-21
draft: false
slug: "2020-10-20-mental-frameworks-in-design-engineering"
tags:
- design
- css
---
I'm a few weeks into starting a new job as a frontend software engineer, and I've been moving around our (Angular) codebases to make a few smaller changes, and bump a number of our core dependencies through a couple of major (e.g. `1.0.0` -> `2.0.0`) versions.
This caused a few visual changes, and in fixing, or at least understanding, what's happened I was rooting around a lot of the component-scoped style files (which are SASS files). I noticed that a lot of the selectors, including nested selectors, are using elements to create queries, for example:
```scss
// random-component.scss
main {
h1 {
font-size: 1.5em;
}
img {
width: 100%;
}
p {
font-size: 1.15em;
line-height: 120%;
padding: 12px;
span {
background-color: #f1f1f1;
font-size: 1.1rem;
}
}
}
```
This is completely valid SCSS - it had done its job of styling `random-component`. There's a million ways to style a modern web app, plus [there's just a set amount of complexity in a design](https://daverupert.com/2020/06/tradeoffs-and-shifting-complexity/)... good CSS won't make it go away, it'll just help you manage it.
But I didn't like it. My gut feeling is that it feels very clinical - there's no notion of what exactly is _in_ `random-component`. It's easy for a computer to read, but not for a human. Sure, it's easy to know that `h1` is probably the page title, but what about that `<span>` nested in the `<p>` - is that an inline name of a product, a code sample, contact information? I wouldn't be comfortable changing this SCSS quickly - because I don't know how limited in scope that `p > span` styling is - is used _only_ for contact information, or for contact information _and_ inline code?
More technically speaking, is my concern that it ties our design specification and our DOM structure very tightly: we need a `main > p > span` in order to apply those styles. This might sound perfectly intentional, but what happens when you want to apply exactly the same styles in a `main > block quote > span` ? Do you copy-paste the code?. What happens if I add a wrapping `div`, `caption`, or another `span` before the actual for-real `span` that we want to give a background colour of `#f1f1f1`? Suddenly our implementation, i.e. our HTML/DOM structure, has changed, which has caused the need for our stylesheet to change.
At the root of these problems is a lack of abstraction between design, i.e. visual metaphors and language we're trying to show our users, and the implementation, i.e. the HTML code we're rendering into a web browser. When you're a small team, or when everyone has good functional knowledge of all the technologies involved, this is perhaps favourable - the code communicates to your audience. But what happens when someone more specialised in design, HTML accessibility, or responsive layouts comes in and starts changing things? The strict coupling of design and implementation could either a) slow down effective change, or b) cause unintended visual changes or regression.
This raises alarm bells in my little engineer brain: a change in HTML structure should not cause a breaking visual change. **The structure of the DOM is largely for computers**: to include the right information in the right format (an image, a header, a table) - and then let the browser render that out, allow accessibility tools to correctly understand it, and even allow other software to parse it to extract data.
**Design, however, is entirely and selfishly for humans**. We style on the web to make them clear and understandable to the human being who is viewing that document. There are, of course, a million other reasons why you'd style something: increase legibility, brand consistency, pure aesthetics, and so on. And when you look at some of the most widely used CSS philosophies, e.g. [Atomic Design](https://bradfrost.com/blog/post/atomic-web-design/), [Block Element Modifier (BEM)](http://getbem.com/introduction/), or [Object Oriented CSS](https://github.com/stubbornella/oocss/wiki)... they're about creating opinionated names.
When I design, I am designing entirely for humans. I am creating visual metaphors, rhythm, conventions, and predictability which is linked to the content of the website, the structure of the page, the intended audience. The same applies to when I am writing CSS: I am trying to write verbally consistent, and mentally clear CSS. **But I have never designed or written CSS for HTML elements**.
When I design, I am asking questions like:
- What kind of data are we showing the user here?
- Do we show this data anywhere else in the application?
- How can the user interact with this screen, and how would I _like_ them to interact with the screen
- Where can the user go from this screen?
Things I am **not** thinking about include:
- How can I trim the user's name so there's minimal whitespace in this `a` tag?
- Will this `p` tag by `flex-grow: 1` ?
- Does this `div` tag need to inherit `display: none` from its parent?
I think of design more as a framework than a library. In technical terms, a library is smaller, focused, single-purpose bit of code or tech that does one thing. There is typically one way to do one thing. A framework, however, comes with more opinions and scope: it's possible to have a "right" and a "wrong" way of doing things (sometimes called the "blessed path").
There are definitely more framework-esque approaches to design. Tailwind CSS and other atomic- or utility-first CSS libraries are increasingly popular. And also incredibly useful or clear for a lot of people. However here we see the CSS classes bundled together into a single _component_ to encapsulate the complexity - you're making a framework based on Components, not CSS class names.
I see a lot of my role as a designer as taking various bits of tech and an understanding of a business context, and using both to create frameworks, and their associated mental models. **I think that in-house design benefits when it comes with its own mental models**. They're bigger, they're tied to a specific business/product - so they're not really sharable or useful to anybody else. But that's okay - because they're _very_ useful to the people who need them.
So that's what I've been thinking about this week: how some SCSS files made me realise that my role as an engineer and designer is to create mental models and frameworks, sometimes using tiny libraries.

View file

@ -0,0 +1,23 @@
---
title: "Things I learned this week #11"
author: "Thomas Wilson"
date: 2020-10-23
draft: false
slug: "2020-10-23-things-i-learned-11"
tags:
- things-i-learned
---
- **This thing about how we sleep**: In Western Europe, about 35% of young adults sleep with a soft toy every night, and about 44% of people keep hold of their childhood soft toy. It can be especially helpful for people with low self-esteem, or higher anxiety to sleep with a soft toy, apparently. As someone who's kept firm tabs on their childhood bear (though I'd say we sleep adjacent, not together), it shocks me that over half of people would throw their teddybear away. ([source](https://www.theguardian.com/global/2020/jan/05/bears-lifeline-adults-who-sleep-with-soft-toys)).
- **This older-than-expected coffee machine**: The Nespresso capsule, those little pods of coffee grounds that you put in the coffee machines to get a single serving of espresso-based coffee, was initially invented 40 years ago by a rocket scientist. Eric Favre came up with the idea in the 1970s while in Rome, when he saw how one cafe in particular (Caffe Sant'Eustachio, if you're curious) was more popular than all the others around it. He noticed that the baristas would aerate the coffee, and extract it for longer under higher pressures - to give it a stronger flavour, and more _crema_. In 1986 Nestle released the first version of the Nespresso machine and capsules to the public, but it took a while to take off, because the public didn't want it - they were happy with their instant coffee (can you imagine being happy with instant coffee?). It took 30 years, but the brand is now worth over \$4 billion.
- **This children's book author**: In the late 20th Century, a 13 year-old Walter Crane was apprenticed to a master woodcarver-cum-political-activist (us millennials think we own the "slash" in occupations and side hustles). Crane got involved in the Arts and Crafts movement, which held that art has the power to educate and inform tastes, and also that "art" doesn't just mean paintings - rather it means anything crafted. Arts and Crafts' most recognisable output is probably William Morris' floral patterns. Crane took a special interest in _Toy Books_ - i.e. those made for young children learning to read. In 1899, in his 20s, Crane illustrated _Steps to Reading_, which was written by Nellie Dale. Dale was a teacher who pioneered a new (at the time) method of teaching children to read: pairing of words with pictures to convey the same meaning. When you write "Jack plays cricket" - you pair it with a nice illustration of a young boy (probably called Jack) playing cricket. At the time, most other books took a phonetic approach: showing each letter and having children say the letters out loud. Crane's illustrations, and understanding of the required manufacturing process (wood engraving apprenticeship, remember?), produced delightful and detailed illustrations for Dane's book, which caused them to remain popular long after more refined teaching methods were discovered. I would highly recommend checking out the images in the [source](https://blog.nationalarchives.gov.uk/the-art-of-learning-to-read-with-walter-crane/).
## What I've had on Rotation
- **Something New**: _Zephyrus_ by The Old Hellos (Folk). I've mentioned this band before, and for good reason. I love their riotous folk vibes, which they've still managed to create during 2020. True, a year full of actual riots, but also a year full of not gathering in groups. ([links](https://songwhip.com/the-oh-hellos/zephyrus))
- **Something Old**: _Animal Magic_ by Bonobo (Instrumental/House). Bonobo's come a long way in the production of his music - his newer music feels so clean and refined, but I've enjoyed rediscovering the simple/rawer sound of his older stuff this week. It's still beat-centric, makes you want to move, and doesn't quite fit in any genre. ([links](https://songwhip.com/bonobo/animal-magic))
## Cool Articles
- [Everything I know about a good death, I learned from my cat](https://www.theverge.com/2015/2/23/8069825/everything-i-know-about-a-good-death-i-learned-from-my-cat) by Elizabeth Lopatto for _The Verge_. For a while now I've been thinking about dignity in dying, and this article is a really great exploration of some of those ideas, but in the context of Dorothy Parker, a cat with cancer. It's a touching article, with some well written points.

View file

@ -0,0 +1,33 @@
---
title: "Tiny thought: Writing for recipe cards"
author: Thomas Wilson
date: 2020-10-24
draft: false
slug: "2020-10-24-writing-for-recipe-cards"
tags:
- tinythought
- essay
- writing
---
_Tiny Thoughts_ are little (500 word) essays. They're concise.
I've spent the past three months consciously trying to write and read more. I want to improve my ability to refine and communicate thought, and doing it in public helps motivate me to produce work.
One of the hardest problems I find myself addressing frequently is my desire to over-explain or provide too much information. I have read many times that good writing is about being concise. Being direct and undistracted help you get your point across. You're not tiring the reader, and you're not brining in unnecessary information. Being concise is good.
A few weeks ago I was listening to the JS Party podcast, a show I subscribe to but often skip. I picked up this episode because its title, _[Content is Queen](https://changelog.com/jsparty/141)_, seemed relevant. I don't see my writing as content, but I know other people view theirs that way - and so I listened it.
Something that came from that episode, which I really liked, was the idea that **you should write like you're creating a small recipe card**. It's a good analogy, and it implies the following things to think about when you're writing:
1. Realise sometimes you're trying to get to a point or a result, you're not trying to be witty or identifiable in your writing style.
2. Identify and sign-post the most important steps in a process, or points in an argument.
3. Figure out how to your points reproducible, undeniably clear, and re-usable.
4. Condense your points down to as small a number as possible, you're writing for a small recipe card.
I don't know how well these items hold for longer pieces, or opinion pieces. Sometimes you want to let your personality shine through in your writing, and sometimes you can let yourself wander. That said, I've been working a lot harder on _deleting_ sentences, rather than adding them in, for the past month or so. I think that's, at least in part, because of this little realisation.
You can see the full transcript for the episode on the[ episode page](https://changelog.com/jsparty/141), but the original quote comes from [Stephanie Morillo](https://www.stephaniemorillo.co/) that sent me on this thought is:
> You know the recipes you get with a Blue Apron or a Sun Basket subscription? They fit on a card, right? And theyre not superfluous and theyre not using all these great words. Every word there is there for a reason, and theyre not gonna give you the back-story and all that fun stuff. They are “You've gotta do this, you've gotta do this, you've gotta do this.” But the great thing is that as a result, you pretty much dont mess up the recipe.

View file

@ -0,0 +1,25 @@
---
title: "Things I learned this week #12"
author: "Thomas Wilson"
date: 2020-10-31
draft: false
slug: "2020-10-31-things-i-learned-12"
tags:
- things-i-learned
---
- **This high fat diet**: Whales, like dolphins but also humans, are mammals. This means they feed their young with milk. As you would expect, the blue whale has the largest mammary glands on Earth each is about 1.5m long and weighs as much as a baby elephant. Blue whale mothers can produce 200 litres of milk per day, with a fat content of 35-50%. For reference, double cream is about 48% fat. It's no wonder blue whale calves gain about 90kg of weight a day for the first year of their lives.([source](https://www.discoverwildlife.com/animal-facts/marine-animals/how-do-whales-breastfeed-underwater/))
- **This 100 year old word**: "Robotics" is 100 years old this year, although it was first published by Czech writer Karel Čapek in a play, _R.U.R. (Rossum's Universal Robots)_, the author credits his brother, Josef Čapek, as the _actual_ inventor of the word. Either way, the word itself derived from the Slavic word _robota_ which means slave or servant, and originally referred to artificially manufactured humans who could be mistaken for real (organically manufactured?) humans, _a la_ Blade Runner's (or Phillip K Dick's) Android.([source](https://en.wikipedia.org/wiki/Robotics#Etymology))
- **This reason behind a medieval punishment**: In the 1500s, Queen Mary, England's first Queen who wasn't just the wife of a king, gained a reputation as "Bloody Mary". Mary was a deeply Catholic woman, which is especially surprising given her father, Henry VIII, formed the Church of England and had a real thing for getting divorced. During her reign, Queen Mary worked hard to stomp out the Protestant faith, electing to burn a lot of its public practitioners. There were numerous, surprisingly socially acceptable, ways to execute someone in Tudor England, but being burnt alive was chosen purposefully. It was supposed to give the victim a taste of the hellfire which was about to overwhelm their soul for all eternity - and a last chance to accept Catholicism and therefore prevent this. ([source](https://getpocket.com/explore/item/the-myth-of-bloody-mary))
- **This Twitter Holiday**:In April 2011, Ed Ball, the now retired British MP, simply tweeted his name. It turns out he was trying to search for articles about him on the site, but instead he just ended up tweeting two words: "Ed Balls". At the time he didn't know it was possible to delete Tweets, but even since learning he could, he's left the Tweet up. Every April 27 some people now celebrate "Ed Balls Day" - which strikes me as as a joyfully silly holiday. Back in 2011 it was slightly more noteworthy for politicians to tweet absurd things. ([source](https://www.bbc.co.uk/news/blogs-trending-39744431))
## What I've had on Rotation
- **Something New** _New Ruins_ by Indian Wells (Contemporary Electronic). I'm not 100% sure what genre Indian Wells fits in - it's beat-heavy, synth-tactic, melodic, and rhythmic. It's good music to work to, but I also enjoy it if I'm out on a run. This EP, released a few weeks ago, has been really great to put on when I need to focus in on something. ([links](https://songwhip.com/indian-wells/new-ruins))
- **Something Old** _All Eyez On Me_ by 2Pac (Old School Hip Hop). Man, 2Pac gets a lot of recognition and for good reason. He put this album out in '97, and it's two hours long - two hours of lyrically detailed, flow-heavy, classic gangsta rap that honestly still stands up in its own right over 20 years later. ([links](https://songwhip.com/2pac/all-eyez-on-me-1996))
## Cool Articles
- [What if Friendship, not marriage, was the centre of life?](https://www.theatlantic.com/family/archive/2020/10/people-who-prioritize-friendship-over-romance/616779/?utm_source=pocket-newtab-global-en-GB) by Rhaina Cohen for _The Atlantic_. I like this article because it's able to point at something we hardly consider, e.g. that the most important and significant relationship in your life will be your romantic one, and ask why that is. I'm not proposing we all try and label someone our platonic soulmate and buy a plot of land in the south of France together (but that would be fun for a bit), but rather ask why we don't have the words or cultural role models to explain this kind of relationship.
- [Quest Sprout: 'The most wholesome thing on the internet'](https://www.bbc.co.uk/news/newsbeat-54646324?utm_source=pocket-newtab-global-en-GB) by Michael Baggs for the BBC's _Newsbeat_. I saw these cartoons popping up on Reddit every now and again, and they lifted my heart. Quest Sprout is the creation of a a New Zealand-based artist and games tester (and all round nerd) who was trying to spread more positivity. Quest Sprout is a tiny, floral character who just loves going on quests but, like the rest of us, is scared sometimes. Quest Sprout is wholesome and reminds us to be kind to ourselves and others. Go and read the article and feel better on the inside.

View file

@ -0,0 +1,67 @@
---
title: "Why are you like this JavaScript? JavaScript Runtimes and Engines"
author: Thomas Wilson
draft: false
book_review: false
date: 2020-11-01
slug: "2020-11-01-js-runtimes-and-engines"
tags:
- javascript
- why-are-you-like-this-js
---
Sometimes you keep hearing words but you're not actually sure what they mean, but you're too afraid to ask and keep forgetting to Google it. For me, two of those phrases have been "JavaScript runtime" and "JavaScript engine". I've never studied Comp Sci at uni, and I've never practically needed to be able to define either of them.
If that sounds similar to you, then buckle up cowboys and cowgirls because you're about to go "oh, yeah, cool" a lot at some pretty basic distinctions that you probably intuitively knew but didn't have the words for.
I think there's innate value in understanding more about where and how your code actually runs. It's rarely directly applicable, but at some point in writing a large-enough app in JS, especially if it's full-stack, you're going to need to know these things. It'll also help you understand why Node.JS and client-side JS are different, and appreciate the overall portability (if not the performance) of JS in the wider context of software engineering. Or throw it out there in your next engineering interview and sound smart and informed, and hope they don't ask any deeper questions 🤷‍♀️
## TL;DR
The JS runtime is the place where JS (or its machine-readable counterpart) is actually run. The browser is a runtime and it's how JS has access to things like the `window` object. Server-side JS runtimes also exist, like Node.JS.
Engines are the bit of software which take our source code, e.g. the human-readable JS code, and transform them to computer-executable instructions. There are a number of ways that engines can do this, some of them use Just in Time (JIT) compilation, but JS is an interpreted (i.e. non-compiled) language.
## JavaScript Runtimes
I just assumed that the JS runtime was the browser or server where the JS actually ran, i.e. where the commands (like `console.log('hello')`) were executed. And I was right, but there's a little more detail to this answer.
JS runtimes get a bit of flack for causing bad performance, whatever that generic term means. Take this [critique from Sebastian De Deyne](https://sebastiandedeyne.com/going-deep):
> Were adding heavy runtimes to support multiple platforms instead of staying close to the metal, and we pay the price in performance.
This criticism brings us a little closer to a useful definition of a Runtime: it **includes the libraries and frameworks which act as the intermediary between the code you've written, and the operating system it is running on**. So if we take this mental model a little further, a runtime is the abstractions that sit between the bare metal and the running program ([StackOverflow source](https://softwareengineering.stackexchange.com/questions/304427/what-really-is-the-runtime-environment)).
Programming languages haven't always needed, or come with, a runtime. Some of the earlier languages, like FORTRAN and COBOL have such a limited set of features and syntax that the language _is_ the runtime (at least conceptually). The difference between the source code (i.e. the code written by an author) and the machine-executable compiled code which are created from the source code, is pretty minimal in these languages. The code you write details explicit manual control over memory allocation, garbage collection (and a bunch of other features) that the source code doesn't need to bring in anything else. The computer can run that file just fine by itself. Obviously this shifts the role of a program from not only its intended computation, to include also the memory allocation and logistics around these computations.
The C programming language is a good example of when we bought in runtimes. C came with the ability to call other libraries or functions to achieve certain things. For example, the `malloc` function allows an author to allocate memory and get a pointer to its location. `malloc` is defined in `stdlib` of C - in a separate C file to the one the author is currently writing. The `stdlib` library defines exactly _how_ memory is allocated through and the correct address is returned. This allows us, the authors, to focus on the logic of our code specifically, and not to have to re-write a memory allocation function in pretty much every bit of C code we write. This speeds us up, reduces errors, creates conventions... all good things in software engineering at scale.
That means that if we were to write a simple C script which invoked `malloc`, when we came to execute our code it would need to also have some way of gaining it access to the `stdlib`, as `malloc` is defined there, not in our code. The `malloc` function is _not_ syntax in the language, in the way that `if`, `char`, and `static` are. The runtime of our C script would include access to the `malloc` function. These libraries would need to be _linked_.
Subsequent languages, famously Java and C#, came with a very heavy runtime - their Virtual Machine (VM). This is what allows both languages to boast portability between architectures and OSs - the source code runs inside of a VM, and the VM abstracts away all the complexity of interacting with the bare metal.
To return to JavaScript briefly, this is how browser-executed JS has access to objects like `window` - which we never define, and which wouldn't be defined if we ran our JS in a non-browser like environment (e.g. Node.JS). **The runtimes of browser Javascript provide our source code with access to these APIs and libraries. They're not part of the core JS language**, like `Function` and `Object` are.
When we talk about JavaScript runtimes we're talking about the environment in which the executing code lives and works.
## Javascript Engines
A JS engine is what gets us from the human-readable JS code into a computer-interpretable set of instructions. E.g. `const name = 'Thomas'` isn't an instruction that an operating system or browser would understand. Instead, we need some way of letting our program find and manage memory, link things together, etc.
Let's take a moment to just cover some technical terms:
- **Source Code** is the original code in JS, e.g. written by a human author. It may also be valid JS which has been minified by a build step.
- **Machine Code** is a set of instructions for CPUs for loading memory, performing specific tasks etc. Machine code is not human readable ([wikipedia](https://en.wikipedia.org/wiki/Machine_code))
Different JS engines go from source code to machine code in different ways, which vary with their target environment and can affect the performance of a script. For examples, the [V8](https://v8.dev/) engine compiles to machine code, whereas [Rhino](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino) compiles JS to Java classes. Let's not talk about the implications of this - just assume that they're comparable but different... ya know?
**The JS engine is what lets our JS code just... run**. Engines are responsible for several low-level machine operations which are necessary on the journey from source code to machine code. They load the script into the computer's memory, link all the necessary libraries together so all parts of the program have access to each other (remember runtimes?), and then find the entry point (i.e. the instructions in the `index.js` file) and start executing those.
Unlike Java or C#, JavaScript is not a compiled language. Compiled languages are transformed to machine-readable code _before_ the program is started or executed. Instead, **JS is an interpreted language**. This means that the code isn't compiled or prepared ahead of execution. It's building the runway as it takes off. The role of the JS interpreter is to take the source code and call the instructions on the processors and CPU of the computer where the code is running.
This is the source of one of the most defining "features" for novice and experienced JS authors alike, the `cannot read property X of undefined` error, caused by the fact that we have tried to access a property (`X`) of something which does not exist (`undefined`). This is a classic kind of error which a compiled language may be able to catch - by checking for potentially undefined variables. But we're getting off track.
With that said, the highly performant V8 engine uses Just in Time (JIT) compilation of JS to machine code. This means the JS source code _is_ compiled, but as close to its execution as possible. I'm not going to go into JIT compilation here because it's a little long, but [Mozilla have a great summary on it](https://hacks.mozilla.org/2017/02/a-crash-course-in-just-in-time-jit-compilers/).
So yeah - the engine is what takes our `.js` files, and allows a computer to do the relevant computer-y things with them. And here we all are, trying to remember which way round the Boolean logic works on `filter()`.

View file

@ -0,0 +1,27 @@
---
title: "Things I learned this week #13"
author: "Thomas Wilson"
date: 2020-11-07
draft: false
slug: "2020-11-07-things-i-learned-13"
tags:
- things-i-learned
---
WHAT. A. WEEK. It feels the entire western world has had their eyes on the US presidential election, and it's been exhausting. Not exhausting in the way that the last 12 months have been for the US, but exhausting in the way that nothing in 2020 has lead us to expect anything good to happen. As I write this, Joe Biden and Kamala Harris have just been elected as president- and vice president-elect. It's not the start of a revolution, the structure of the US political system prevents power being torn too far one way or another (or at least intends to), but it's a collective sigh of relief from me, and a lot of the people in circles I follow.
- **The reason behind this saying**: I recently heard the phrase "A good wine needs no bush" for the first time - it captures the notion that a good product doesn't need advertising. The origin of the saying comes from the centuries-old practice of vintner hanging a sprig of ivy, or other trees, outside the entrance of taverns to indicate they sold the wine. The idea being that a good wine doesn't need to be advertised in order for people to know it is available. ([source](https://wordhistories.net/2017/12/02/good-wine-needs-no-bush/))
- **This Swedish ritual**: It is a cultural institution in Britain to stop work (or chores, or study, or anything) at some point between 1-5pm, to make a cup of tea and have a sit down with some biscuits. In Swedish culture they have _Fika_, where the focus is on taking a break for coffee and some kind of (ideally home-baked) cake. Socialising with your friends or colleagues, and slowing down are central to this ritual.([source](https://www.swedishfood.com/fika))
- **This bit of Joe Biden's medial history**: Joe's been attacked for being old, and it's true, when he get inaugurated he'll be 77 and the oldest US president. In 1988 Joe almost died from having two aneurysms, and later the same year he had a pulmonary embolism. That's wild - those are two things (or three) that could really easily kill a man, but here we are, 30 years later.
- **These emojis coming in 2021**: I love emojis, I love that they're tiny cute works of art which represent parts of our culture and society better than words easily can. I love that anybody can submit an emoji proposal. Because of the coronavirus, some emojis have been delayed for 2021, but as things stand we can expect to see bearded men and women, some new faces, and 200 new skin tone combination for couples and kissing emojis. ([source](https://blog.emojipedia.org/217-new-emojis-in-final-list-for-2021/))
## Cool Articles
- [Is technology scrambling my baby's brain?](https://www.theverge.com/2013/9/3/4660216/is-technology-scrambling-my-babys-brain) by Ben Popper for _The Verge_. I hear a lot of descent for exposing our children to screens at a young age - Tim Cook, the CEO of Apple famously said that he wouldn't let his child use an iPad. Popper takes a serious look, as both a parent and a tech-lover and -journalist, at our collective obsession with forbidding technology to our children, and asks if maybe we've gone too far. It's a well-balanced article on a subject that I think a lot of people are very touchy about.
- [Essays on Programming I Think About a Lot](https://www.jakeworth.com/essays-on-programming-i-think-about-a-lot/) by Jake Worth on their personal blog. If you develop software for a living, or work with teams who do, Worth highlights a lot of one-liners from essays by other software architects and engineers. There's a lot of wisdom in there, and links to the original sources. It's not something I suggest digesting all at once, but better as a slow burn.
## What I've had on Rotation
- **Something New**: Positions by Ariana Grande (pop). No, you don't need anyone else talking about or recommending this album, but it's a good album. I love Ari's self-confident, sex positive, self-loving new album. It's a good take. ([links](https://songwhip.com/ariana-grande/positions2020))
- **Something Old**: effloresce by Covet (instrumental). I don't know what genre this music is, it's like jazz meets acoustic guitar meets softer elements of metal rhythms. I don't know - but I do know that Yvette Young (the lead guitarist of Covet) has a talent that you should listen to. ([links](https://songwhip.com/covet/effloresce))

View file

@ -0,0 +1,27 @@
---
title: "Things I learned this week #14"
author: "Thomas Wilson"
date: 2020-11-13
draft: false
slug: "2020-11-13-things-i-learned-14"
tags:
- things-i-learned
---
Happy Friday 13th. I hope it's spooky and magical.
- **This Roman Beverage**: I'd imagine the Romans were pretty thirsty. The Mediterranean is warm, and you'd work up quite the thirst inventing a whole number system, apartments, a calendar, and like a million kinds of war machinery. Not that I'd know. The Romans bloody loved _posca_: a mix of vinegar and water (or diluted wine), seasoned with herbs and salt. It was incredibly popular in both the military and with citizenry an. The acidic nature probably helped sanitise the water at the time, but unfortunately we're not 100% sure exactly how it tasted - recipes, ingredients, and proportions having changed some over the last 500-2,000 years. I personally don't love the idea of mixing wine, water, and fennel seeds but maybe that's why I've never built a trebuchet ([source](https://getpocket.com/explore/item/my-favorite-beverage-is-a-2-000-year-old-energy-drink-from-ancient-rome))
- **These hunter women**: Growing up my understanding of our women in prehistoric times was that they gathered and gossiped - which is some of the reason language and social bonds are so ingrained in us as humans, and why caring and communicating are typically seen as 'feminine' traits. A recent study of some 400 bodies from over 100 sites across the Americas, dating 6-12 thousand years in age, repeatedly found women buried with large-game hunting tools. Previously, when we'd found women with these kinds of tools, we just assumed that they were used for scraping or cutting - not hunting. But the study found women buried with projectiles and large stones - so they were either grinding some big root vegetables, or hunting big game. Just a reminder that sexism here and now projects onto things in the past ([source](https://bigthink.com/sex-relationships/warrior-women))
- **This reason they're called Roses**: It's pretty established that Roses, the Cadbury's variety box of chocolates, are _the_ taste of Christmas. Maybe they're not quite a bougie as Celebrations, but at least they're not Quality Streets. If you think Quality Streets are better than Celebrations then you should take a look at yourself and ask why you're so poor at judging chocolates. Anyway, here's the fact: did you know that Roses are called Roses after the name of the machinery which wraps the chocolates? ([source](https://en.wikipedia.org/wiki/Cadbury_Roses))
- **This word**: Milquetoast, which means timid or weak or feeble. The meaning comes from the 1920s cartoon character Caspar Milquetoast. The character's name is based on the American dish Milk Toast - which is toast served in warm milk. So a character was given a name after a dish which represented his weak character, and now we use a gallicised version (we Frenched it up a little) of that dish to describe those characteristics. Isn't language cool?
## What I've had on rotation
- **Something New**: Some Kind of Peace by Ólafur Arnalds (Contemporary Classical). I've always found Arnalds' music incredibly peaceful. This new album is pleasantly organic and calming, and doesn't sound exactly like anything he's made before. ([links](https://songwhip.com/olafur-arnalds/some-kind-of-peace))
- **Something Old**: Eagles by Eagles (Rock and Roll). I've been digging into classic rock and roll figures over the past couple of weeks. Eagles are one of my dad's favourite bands, so it feels nice to be among my musical heritage. ([links](https://songwhip.com/eagles/eagles-2013-remaster))
## Cool Reads
- [Labors of Love; The Hidden Burdens of a Romanic "Love Padlock" Tradition](https://99percentinvisible.org/article/labors-of-love-the-hidden-burdens-of-a-romantic-love-padlock-tradition) by Kurt Kohlstedt for _99% Invisible_. The first time I ever went to Venice, there was a brigade of men in high-vis jackets cutting the padlocks off some of Venice's famous bridges. This article covers some of the practicalities involved with this phenomena of engraving your name in a padlock, then locking it to public property and throwing away the key.
- [Car-free neighbourhoods: the unlikely new frontline in the culture wars](https://www.theguardian.com/lifeandstyle/2020/nov/01/car-free-neighbourhoods-the-unlikely-new-frontline-in-the-culture-wars) by Tim Lewis for _The Guardian_. As an avid cyclist and London-resident my gut reaction is that we should get rid of all the cars we can. Ban 'em. Burn 'em. We don't need them. I've had a bike totalled and another one run over by cars. Lewis does a good job at introducing the counter arguments to this way of thinking - a reminder that cities are shared spaces, lived in by many

View file

@ -0,0 +1,114 @@
---
title: "Introducing Figma Variants with 5 Components that aren't Buttons"
author: "Thomas Wilson"
date: 2020-11-19
draft: false
slug: "2020-11-19-figma-variants-without-buttons"
tags:
- design
- figma
---
Figma recently introduced Variants - a way of extending and varying your components. Components in Figma, and in modern web development, are reusable and encapsulated elements of a design - with the classic examples of a Button or a Card.
Variants add new flexibility, and utility, to components in Figma by introducing properties and values to them in a programmatic way. If you have experience writing modern web applications, these variants and properties are like a specific subset of props which you pass to a component. I say subset, because some things will still need to be manually edited within an instance of a component - like the text in a card. Other things, like a "variant" or "type" be be edited (e.g. `info`, `danger`, or `primary`) which in turn could switch the accent colour, and the icon used (from an _i_, to an _alert_, to a _logo_). Think about all the common variations of a component you make for different use cases - variants are a way to define those before you come to use them.
Variants were released relatively recently, and I think they're cool. While they require more conscious work to create, they make it much easier to compose a mockup or design using an existing design system. Additionally, the need to create a set of names for both your properties, and their possible values, forces you to develop a verbal language around your design.
In this piece I'm going to give five examples of where variants have helped me, in the last couple of weeks. I'm not going to use the Button component as an example - because that's a tired workhorse, and I'm definitely a bit sick of it.
## Component Examples
Don't bury the lead, here are some components to show how variants in Figma can be used. None of the are Buttons (did I mention that?), but they are all components I've used in the past couple of weeks. Where I didn't make the component myself I've linked out to the original author.
I've standardised on **Variant** as a property name for a generic "type", "context", "kind", or "variety" in components. This is the same language as [Material UI](https://material-ui.com/) uses to describe this property and variation. I personally don't like to use `Type` - because it's already a word loaded with meaning in typed language. `Context` also has a meaning in React. Naming these kinds of properties is hard, but you have to stay consistent.
Shoutout to [UI Guideline](https://www.uiguideline.com/components) for providing inspiration and starting points.
### #1: Toast
Toasts are those little alerts that pop up or down into a screen with a transient messages. Often you want to vary the accent colour, or icon, depending on the context of the message. There's only one property here (`Cariant`) which controls this accent colour.
- `Variant`: success, warning, danger, info
![An illustration of of the toast component](/assets/blog-images/2020-11-18-component-0-toast.png)
### #2: Note or comment
[Eduard Giménez](http://eduard.io) released a set of comment components into the Figma Community. The [Note This](https://www.figma.com/community/file/905932037239721740) file contains a set of sticky-note-like component which teams can use to annotate their designs in Figma.
Eduard has used two properties on his variants: `Color`, which describes the accent colour of the icon and top of the note, and `Dark` which is a boolean for if the note should be in a dark mode.
- `Color`: Yellow, Peach, Coral, etc.
- `Dark`: true, false
![An illustration of of the note component](/assets/blog-images/2020-11-18-component-1-note.png)
### #3: Calendar Day
I've recently been using the [Eva Design System](https://eva.design/) as the starting point for a design language. As part of this, I've been working with calendars and date pickers - which have turned out to be a classic example of hidden complexity.
Calendar days represent a single day within a week or month view, often used in the date-picker component.
Eva broke them down across three properties, each a boolean flag:
- `Selected`: true, false. Used to show if the day has been selected by the user (or by default), and is indicated with the box surrounding the day.
- `Has events`: true, false. Indicates if there are additional details, events, or context on a specific day. Visually this is represented by the small dot underneath the number.
- `Disabled`: true, false. Let the user know that the day cannot be selected or clicked. Visually greys out the day and reduces contrast between background, border, and content.
![An illustration of of the calendar day component](/assets/blog-images/2020-11-18-component-3-calendar-day.png)
### #4: Card or Modal
I've been building a number of screens and modals recently (as part of my design work at [Oxwash](https://www.oxwash.com/)), and Variants have let me use a common component as the background on each of these instances.
The Card component typically represents the background and container for some content, e.g. a product in a product list. A Modal, however, is normally overlaid on the screen, as if it had a higher Z axis value (i.e. it pops out of the screen). Visually they are very similar, but conceptually they are quite different.
I found by adding or removing an icon in the top-right (e.g. to close a modal) - both were pretty much identical.
- `Platform`: mobile, desktop. Depending on the size of the viewport, you may wish to change padding, but also reduce/increase the size of touch targets.
- `With Button`: true, false. Place a button in the bottom right of the card, for a primary action.
- `With Close Button`: true, false. Place an icon in the top right of the card which acts as a touch target to close a modal.
![An illustration of of the card or modal component](/assets/blog-images/2020-11-18-component-4-card.png)
### #5: Tooltip
I've also been using Tooltips at Oxwash - tooltips are little containers of text that appear on hover (or tap, for mobile) to offer some additional information.
Technically, tooltips are quite complex, but in terms of design I've kept them simple, with just a couple of properties:
- `Colour`: light, dark. To switch between a global light or dark mode UI.
- `Anchor Position`: bottom left, bottom right, etc. Which indicates where the little speech bubble anchor appears on the tooltip.
![An illustration of of the tooltip component](/assets/blog-images/2020-11-18-component-5-tooltip.png)
## Wait, couldn't Figma do that before?
Erm, yeah, sorta? Previously you could use naming conventions of components to help organise related components and then swap them out with siblings/cousins/grandparents. You did this with the naming conventions of the component, e.g. you could organise your three different types of `alert` component by calling them:
- `alert/warning`
- `alert/info`
- `alert/success`
This works when you've only got a couple of variations of a component. Specifically it works when your components only vary along one dimension, e.g. the accent colour of the alert. What happens when we have a couple of aspects the component can vary by? What if we want different components for mobile, for dark mode, for actionable alerts (e.g. with a button or link)?
All we've got is a single string, so we absolutely have to i) maintain **strict naming conventions** of both the possible values of a property, and ii) **identical order of properties** in those strings. For example, the following components both parse well to a human, but would be structured very differently within figma:
- `alert/mobile/warning/dark/withButton`
- `alert/dark/noButton/warning/mobile`
This would make it hard to swap components out with the related ones. Figma essentially creates a directory, or folder, -esque structure so these kinds of inconsistencies eventually force you to move around a lot, or do a lot of searching. **This will also make your components less discoverable**, which is essential if you're a design team who shares Figma files to a wider organisation.
Also it's just messy. I don't like non-productive mess.
## Properties I have found useful
There are a couple of properties I have found myself reaching for, and finding useful - especially when you're trying to work out all the fiddly details in a specific design. These include:
- **Variant**: Inspired by the material UI naming convention, this covers the possible contexts the component can appear in (`info`, `danger`, `warning`, `success`).
- **Platform**: If you're designing the same screen across platforms and viewports you may need to adjust touch targets and font sizes (`mobile`, `tablet`, `desktop`)
- **Errored**: If you're dealing with fields, forms, or processes - it's useful to know how we display a failure state and the related info (`true` or `false`)
- **Disabled**: Useful if you're trying to show a certain form state is invalid, most commonly applied to Buttons (`true` or `false`)
- **Authenticated status**: Who is the current user and what is their relationship to the page/component? Sometimes we want to show/hide certain actions depending on the authentication or authorisation status (`user`, `admin`, or `no-user`)

View file

@ -0,0 +1,29 @@
---
title: "Things I learned this week #15"
author: "Thomas Wilson"
date: 2020-11-20
draft: false
slug: "2020-11-20-things-i-learned-15"
tags:
- things-i-learned
---
"Isn't it getting dark early ?" - how I've started at least half of the conversations I've had this week.
- **This thing that spreads like a disease**: Look, I was a germaphobe before it was cool. I was very aware of how one thing can spread from person to person. However this contagious model of disease doesn't just apply to problems caused by bacteria/virus/any other vectors. Obesity can spread like disease, where if your friendships mostly comprise of obese people who normalise a sedentary lifestyle, or poor diet, you're nearly about 170% more likely to be obese than if you weren't in these friendships. ([source](https://www.sciencemag.org/news/2017/02/should-we-treat-obesity-contagious-disease))
- **This gossip circle**: In Europe and North America in the 1800s-1900s we used to have a tradition called 'Telling the Bees' where people saw it as incredibly important to keep the bees up to date with what's going on in your little provincial circles. Were there any deaths, marriages, children, etc. Though especially they were seen as a sign of mourning, with some people even bringing bees to a funeral. I'm glad that we've stopped doing that bit, but anything which helps us pay more attention to the wonders of bees is good - they're adorable _and_ useful - how many of us can say that?. ([source](https://daily.jstor.org/telling-the-bees/))
- **This obligatory Covid thing**: I took some time this week to ask why and how Covid actually spreads and how we trace that. Given the criticism of the track-and-trace system here in the UK, I wanted to know more about what they're trying to do, and why it's hard. It turns out the majority of new Covid cases are caused by a minority of people. A study in India found 8% of people with covid cause 60% of the secondary cases, with 70% of people not passing it on to anyone. Since the beginning of the pandemic we've been focused on _Super Spreaders_ and this kind of evidence suggests we should continue to maintain that focus. Well done to the 70% who effectively isolate, let's bump that number up. ([source](https://vis.sciencemag.org/covid-clusters/))
- **These rules for artists**: In 1960s America Sister Corita Kent, a teacher and artist, taught a creative class. She brought these ten rules to the classroom and encouraged students to internalise them. They're not just good for students, or young people - they're wonderful reminders about how to live, and ended up being very popular among artists. They contain little wisdoms we'd all benefit from: "Consider everything an experiment" and "Be happy whenever you can manage it". These rules were later attributed to John Cage, so go and read them and attribute them to Sister Corita Kent. ([source](https://www.brainpickings.org/2012/08/10/10-rules-for-students-and-teachers-john-cage-corita-kent/?mc_cid=2193b8fd0b&mc_eid=f6fbd62869))
- **This old meaning**: Did you know eye rolling was once a flirtatious gesture? Now it's used to express sarcasm or exacerbation, but go back a hundred years or so and all of a sudden you're making bedroom eyes 🙄 ([source](https://en.wikipedia.org/wiki/Eye-rolling))
## What I've had on rotation
- **Something New** _Detroit 2_ by Big Sean (Hip Hop). I've been a little late in listening to Big Sean - he got a shoutout from Eminem in _Kamikaze_ - the album where not a lot of other artists got positive attention. This album is packed full of collabs and features - it's a big production hip hop album. It's definitely not my normal kind of Hip Hop but I've been bumping it this week. ([links](https://songwhip.com/big-sean/detroit-2))
- **Something Old**: _Angles_ by Dan le Sac vs. Scroobius Pip (British Hip Hop). This, alongside Em, was one of my first introductions to hip hop/spoken word/poetry in music. It showed me that music can be serious and fun at the same time, that it can be British, and can teach something. Being 16 when this album came out I learned some things from it but, you know, you've not _done_ a lot when you're 16. Re-listening to it now (as a 28 year old) throws me back, but still speaks to me - which speaks to how truthful and personal the music is. ([links](https://songwhip.com/dan-le-sac-vs-scroobius-pip/angles))
## Cool links
- [MYSTICAL](https://www.neilburnell.com/gallery#/mysticalone/) by Neil Burnell (photo gallery). Burnell is a photographer, and this project is all about the beauty and mystery of ancient woodland.
- [When Christmas was Cancelled: a lesson from history](https://theconversation.com/when-christmas-was-cancelled-a-lesson-from-history-149310?utm_source=pocket-newtab-global-en-GB) by Martyn Bennett for The Conversation. With a very different Christmas and New Years on the horizon for a lot of us, which we've got the chance to really mishandle, this article takes a little look at how this might not be entirely unprecedented.
- [UI Coach](https://uicoach.io/) by Nero. This neat little site for improving your design skills generates you a challenge (e.g. "Design a goal management and sharing app"), provides you with a colour palette, font pairing, and icon/illustration set. I firmly believe (past the complete novice stage) we learn the nebulous design skills by _doing_. This is a great idea.

View file

@ -0,0 +1,36 @@
---
title: "Tiny thought: On the separation of design and engineering"
author: Thomas Wilson
date: 2020-11-23
draft: false
slug: "2020-11-23-on-the-separation-of-design-and-engineering"
tags:
- essay
- tinythought
- design
---
_Tiny Thoughts_ are little (500 word) essays. They're concise.
I make user interfaces, and I often participate in, or lead, the process of designing these interfaces. For a while I thought I wanted to transition fully into a design role. Ultimately I am drawn to the certainty and craft of engineering. However, the the mental models, sensibilities, and philosophies of design still appeal to me. I can like both, and businesses need both.
Separating design and engineering is a false dichotomy: design can benefit from the implementation-details of engineering; and engineering benefits from the non-linear and multi-faceted process of design thinking. It's symbiotic.
A while ago I got the chance to work in an environment where the two _were_ separated. The design process and design thinking were both absent, and there was no appetite to bring them in.
During this time the mentality was to copy the UI of an existing, similar, already-successful product. A lot of people on the frontlines of tech have been told "just copy company _X_" where _X_ is AirBNB, Twitter, LinkedIn, Pinterest, whatever. "Just make the UI look like that".
At first glance, the thinking is sound: we don't have the money or time to invest in design, but this other company has. Let the whole design team over at Instagram/Reddit/Uber do the hard work, and we'll just steal from them.
At a personal level, I did not like working in this environment, because I felt alone. At a professional level, the working process was constrained, and the resulting software generic and left behind when the source material changed.
Some software has to be boring: I wouldn't want a whacky or zany bank app, menstrual cycle tracking app, government app, or crisis support app. There is a place for boring UI. Borings UI also removes a layer of difficulty in how the product is built. [^1: I would argue that it's not actually _that_ much easier to build an app with a Boring UI - UI is just one part of any software.].
Behind a lot of boring UIs is a team of individuals who have thought an awful lot about their business, users, and problems. They have considered information architecture, interactions, users, and outcomes.
Just because the end result is boring, does not mean the process of designing it was short and simple.
When you copy _just_ the final product, even a boring one, you diminish your entire business's ability to iterate, and any insight into the _why_ of the UI are lost. You have limited your engineering team. Sometimes this limitation is significant (a client-facing product), sometimes it is not (an infrastructure service).
The product of engineering should not exist without the process of design. The discussions I have had, facilitated, and witnessed when deciding on UIs have made me a better engineer, and have made the product better.

View file

@ -0,0 +1,25 @@
---
title: "Things I learned this week #16"
author: "Thomas Wilson"
date: 2020-11-27
draft: false
slug: "2020-11-27-things-i-learned-16"
tags:
- things-i-learned
---
- **These Tattoos**: In the late 1880s, a man called Sutherland Macdonald became the UK's first professioanl tattoo artist. Although he was already an artist, he started the tattoo craft after a trip to the South Pacific. Macdonald is the reason we have the word 'tattooist' (a portmanteau of _tattoo_ and _artist_) - because the Post Office had to create a new category to place an advert for his services in. He also patented an electric tattoo gun in 1895, and created the first 'safe' green ink which did still contain lead so... ([source](https://mymodernmet.com/sutherland-macdonald-tattoo-history/))
- **This unconventional translation**: In 1900, a newspaper in Reykjavik, Iceland, serialised Dracula - the classic horror novel by Bram Stoker. The translation, entitled _Powers of Darkness_, took some rather strong decisions in the translation. They shortened some parts, adding a deaf-mute handmade to the Count's castle, added some police investigations, completely omitted the fact that the Count drinks the blood of his victims, and removed the original ending by finishing the novel early. So they essentially took Dracula, riffed on it and did a little workshopping (more "yes and"), rewrote the book in another language, gave it the same name and author, and then just presented it like it was the original, just translated ([source](https://en.wikipedia.org/wiki/Powers_of_Darkness))
- **These new bodies**: This week, the details of two new remains of a master and slave were release at Pompeii - the Roman city that was famously wiped out when a volcano erupted nearby in 79AD. The pair consisted of an older (30-40) and a younger (20s) man who had been preserved in ash for the last two thousand years. I'm just going to repeat that once more: two thousand years ago a volcano killed two men, their flesh and muscles were burned away, and then we found their very well preserved bodies in the ash. ([source](https://www.ancient-origins.net/news-history-archaeology/pompeii-remains-0014574))
- **This historical insight**: We know that the nature of religion and spirituality has changed a lot. Way back when we were more hunter-gather, our spiritual views were pretty Shamanistic and Animist: places and things had their own spiritual essence. Then at some point we moved to more mono-, and sometimes, poly-theistic place where we had spiritual entities distinct from worldly places or things. And also we started having Organised Religion. We used to think that this transition happened alongside the move from tribe to central metropolitan areas. It makes sense - if religion is (among other things) a way to teach and enforce morals, it helps to have an "eye in the sky" that sees you if you steal, have sex sex with your neighbour's spouse, or murder. God Is Watching, even if the entire village/town/city is not. However, it actually seems that we evolved as a society and _then_ spiritually. So for a while we had these older religions, as humans moved to larger and more complex settlements and cultures. The link in the source is interesting, go and check it out - it asks what role religion has played, does play, and could play as our socieities become more complex and geographically dispersed. ([source](https://getpocket.com/explore/item/big-gods-came-after-the-rise-of-civilisations-not-before-finds-study-using-huge-historical-database))
## What I've had on rotation
- **Something New**: _Because I Wanted You To Know_ by Matilda Mann (Singer Songwriter). These songs are feminine, and cute, and well produced. This little EP is the feeling of seeing someone cute somewhere and the nerves of talking to them, then hoping they actually text you. ([links](https://songwhip.com/matildamann/because-i-wanted-you-to-know))
- **Something Old**: _Eyes Open_ by Snow Patrol (Sad Pop?). This album takes me back so quickly to being 16 - and also makes me very sad to listen to, but also I really like the music? Genuinely I had to stop listening to it a few times this week because it was just making me too sad. But I kept coming back to it, so... ([links](https://songwhip.com/snow-patrol/eyes-open))
## Cool Articles
- [Jan Morris, historian, travel writer and trans pioneer, dies aged 94](https://www.theguardian.com/books/2020/nov/20/jan-morris-historian-travel-writer-and-trans-pioneer-dies-aged-94) by Richard Lea for _The Guardian_. I only learned about Jan's life, work, and passing on the radio earlier this week. Jan sounded like a really lively, passionate, and sparkly person. If you've never heard of her either, I'd advise reading a little bit about her amazing escapades, and wondering how amazing it would have been to run into her at a pub.
- [Is Resilience Overrated?](https://www.nytimes.com/2020/08/19/health/resilience-overrated.html) by Jami Attenberg for _The New York Times_. It can feel like we live in a culture which celebrates overwork and exhaustion. Attenberg talks about how "You're so resilient" can be code for "You're on your own, sorry". It's not enough to acknowledge difficulty and admire those who go through it, but instead we should be doing what we can to reduce human suffering - which can, at times, involve us getting our own boots dirty.

View file

@ -0,0 +1,28 @@
---
title: "Things I learned this week #17"
author: "Thomas Wilson"
date: 2020-12-05
draft: false
slug: "2020-12-05-things-i-learned-17"
tags:
- things-i-learned
---
It's time of year again: Spotify have released their _Rewind_ - showing you what you listened to throughout this year. After the _year_ (or decade, or complete non-year, whatever helps you) that 2020 has been, I think a lot of people have looked to music for a bit of refuge, or good news, or distraction. Go and check yours out, it's a cool little use of data, presented in a really nice way. In other news, the UK has approved the Pfizer/BioNTech vaccine, and the first people should receive their doses in the next couple of weeks. Things are starting to look up, we may be over the hump of this.
- **These Different Ingredients**: I remain a staunch defender of the Brussels Sprout. They're a seasonal, nutritional, deeply flavoured winter ingredient that goes beautifully fried in butter with garlic, baked in roast tins, or as part of any winter curry. They get a bad wrap, but there's a chance that even over the last 5-20 years we've bred our sprouts to have different (e.g. stronger, or less bitter) flavour profiles than we had before. So the sprouts that gave a bad name to their brethren may no longer be around. Go on - give them a go. ([source](https://www.npr.org/sections/thesalt/2019/10/30/773457637/from-culinary-dud-to-stud-how-dutch-plant-breeders-built-our-brussels-sprouts-bo?t=1606677046048))
- **These COVID-affected Amazon Reviews**: One of the symptoms of COVID-19 is a loss of smell and taste. One consequence of this, especially in the US which is handling this pandemic quite badly, is that people can't smell their scented candles. This is causing an increase in low-scored reviews of scented candles on Amazon, with more people mentioning that the candle has no scent. Whereas, in reality, people could be losing their sense of smell but not recognising it as a COVID symptom. ([source](https://twitter.com/kate_ptrv/status/1332398737604431874))
- **These Best Mince Pies**: Over the past couple of years I've become increasingly aware of the competitive, and critically important, world of Mince Pie judging. Mince pies taste of Christmas, and I'm personally a fan of having them hot (though I'll have a cold pie if the mood takes me). The real question we want to answer every year, though, is "which supermarket does the best mince pie?". Well, this year ASDA and Iceland are both leading the charge for both quality and value for money. Avoid Sainsbury's, though - they're not great and overpriced. ([source](https://www.theguardian.com/lifeandstyle/2020/nov/19/budget-mince-pies-from-asda-and-iceland-top-which-taste-test?utm_source=pocket-newtab-global-en-GB))
- **This Cartoon Trivia**: You know how, in Disney's 1991 _Beauty and the Beast_ his castle is oddly full of weird grotesque sculptures? Like, inside _and_ out? Anyway, a lot of those sculptures are actually based off of previous concepts for Beast that the animators and artists created before arriving on how he would actually look. ([source](https://disney.fandom.com/wiki/Beast%27s_Castle))
- **This Origin Story**: Fun fact: snow globes are man-made, they don't just grow in the wild. I mean, I didn't think they grew on trees but I can imagine that someone would. Again, that someone definitely wouldn't be me. Snow globes were invented in Austria in 1900 by Erwin Perzy, a medical repair man who was trying to invent a brighter light, for use in medical settings. He experimented with water-filled bulbs, in the hope that maybe if he filled it was water and a reflective material - more light would be reflected in the operating theatre. What he actually stumbled on was something that resembled snow, and so he gave up all hope of helping the medical profession and started selling gimmicks.
## What I've had on rotation
- **Something New**: _in Florescence_ (EP) by half•alive (Indie). This little EP is four orchestrated versions of some of half•alive's previous songs - and it's really great. It's light and magical, the vocals really shine through, and the original tone of the pieces is still there. ([links](https://songwhip.com/halfalive/in-florescence))
- **Something Old**: _Yesterday's Gone_ by Loyle Carner (Hip Hop). I've been really getting into Carner's music over the past couple of months - his unique mix of British and American influence is pleasing to me. He's right on the lyrical, poetic, and melodic end of hip hop, and this whole album strikes as very true to himself and his upbringing. His mum has a track on the album, which is just so great. ([links](https://songwhip.com/loyle-carner/yesterdays-gone))
## Cool articles
- [Why Religion Is Not Going Away and Science Will Not Destroy It](https://getpocket.com/explore/item/why-religion-is-not-going-away-and-science-will-not-destroy-it) by Peter Harrison for _Aeon_. This is an interesting piece which looks at how a fanatical belief, in either secularism or religious-ideals, are not conducive to finding a middle ground. Instead they can lead to further conflict and bad-opt
- [The UK has approved a COVID vaccine — heres what scientists now want to know](https://www.nature.com/articles/d41586-020-03441-8?utm_source=pocket-newtab-global-en-GB) by Heidi Ledford, David Cyranoski, and Richard Van Noorden for _Nature_. The past month has been abundant with really great vaccine news for COVID-19. This is a massive step towards getting us closer to our pre-2020 lives. There's a still a lot we're uncertain of with the vaccines, like if people can still transmit the disease if they have been vaccinated; how long do people remain immune for?; or exactly effective are they in certain demographics (primarily age and gender)?

View file

@ -0,0 +1,28 @@
---
title: "Things I learned this week #18"
author: "Thomas Wilson"
date: 2020-12-11
draft: false
slug: "2020-12-11-things-i-learned-18"
tags:
- things-i-learned
---
I took a four day week last week, so managed to spend this week with all the energy that only a 3-day weekend can give you. That said, I've found myself incredibly busy this week. This is the first evening (Thursday) where I've managed to find some time to myself without something pressing. Lockdown continues, Brexit talks and COVID vaccine are competing for media attention, but also I bought two (2!) new types of coffee beans this week sooooo.
- **This fitness advice**: Now that it's winter (and also a lockdown), I have to make my yearly switch from cycling to running as my primary form of cardio exercise. I've been looking into training advice to make sure that I don't ruin my body in the long term, and I came across the following rules-of-thum: if you run, aim for less than 20 miles a week, run 3-4 times a week, and stay below 8mph (~13km/hr). ([source](https://www.active.com/health/articles/why-too-much-running-is-bad-for-your-health))
- **This cat fact**: Cats purr for a number of reasons, not just when they're happy and content. Some people have made the argument that the kitty vibrations can help heal them, or strengthen their bones. This is perhaps why cats typically seem to be fine with jumping (but never falling, ever) off of high things. They also purr to comfort themselves if they're feeling stressed, which is 10/10 adorable. I can relate strongly to the second of these two purposes, I grew up with an _incredibly_ loud purring cat _waaaay_ before the ASMR trend came to light. ([source](https://www.wired.com/2015/05/why-do-cats-purr/))
- **This Tweet**: "You eat sausages your whole life but you refuse vaccine because you don't know what's in it." It's not really a thing I learned but I love the drama. ([@julianpopov](https://twitter.com/julianpopov/status/1329726890307891205?s=12))
- **This early herbal pioneer**: Elizabeth Blackwell lived in Scotland during the early 18th century. In 1737 she published _A Curious Herbal: Containing Five Hundred Cuts of the Most Useful Plants Which Are Now Used in the Practice of Pyysick_ - perhaps not the most catchy title. But it contained 500-some full-colour paintings of local plants used in medicine, at a time before we had even begun to categorise plants thoroughly. Blackwell produced each of these drawings while taking care of her young child, while her husband was locked up for money he owed his debtors. The images are striking and classically beautiful, but also gave information for each plant's medical use ([source](https://www.brainpickings.org/2020/01/29/elizabeth-blackwell-curious-herbal/?mc_cid=32daffc59e&mc_eid=f6fbd62869))
- **This bardic AI**: Deep-speare is an AI trained to write sonnets, _a la_ actual Shakespeare. The researchers fed a deep-learning algorithm nearly 3,000 sonnets and then asked it to write its own. Unsurprisingly, the algorithm was able to spot (and reproduce) the structural patterns in a sonnet (14 lines, the rhyming patterns), but it was also able to pick up on the syntactic and language itself: posing problems, comparisons to nature, the rhythm of writing. Take the following example of a quatrain (four-line section): _shall i behold him in his cloudy state; for just but tempteth me to stop and pray; a cry: if it will drag me, find no way; from pardon to him, who will stand and wait_. It's oddly poetic but maybe a little abstract. This all came before the more recent GPT-3, which has produced consistent, intelligible, long-form writing in the past few months. ([source](https://spectrum.ieee.org/artificial-intelligence/machine-learning/this-ai-poet-mastered-rhythm-rhyme-and-natural-language-to-write-like-shakespeare))
## What I've had on Rotation
- **Something New** _Something to Feel Good About_ by Will Joseph Cook (Pop, 2020). Spotify decided to pass this album to me last week and it's cute. It's very cute. ([links](https://songwhip.com/will-joseph-cook/something-to-feel-good-about))
- **Something Old**: _Backbone_ by Roam (Pop Punk, 2016). I remember this album coming out and playing it (responsibly) loud on the speakers in my car as I was driving around. It's got great teenage summer energy. ([links](https://songwhip.com/roam2/backbone))
## Cool Articles
- [Here comes the COVID-19 Baby Bust](https://www.theatlantic.com/family/archive/2020/11/covid-19-pandemic-births-baby-bust/617149/?utm_source=pocket-newtab-global-en-GB). COVID-19's had a couple of effects on family life, with a lot of couples making big decisions about marriage/divorce and children/no-children. This piece takes a look at the likely dip in birth of (American) babies, and how we might expect to see that self-correct over the next couple of years.
- [Real Talk: Behind the Music with 99pi Composer Seal Real & Her New Album](https://99percentinvisible.org/article/real-talk-behind-the-music-with-99pi-composer-sean-real-on-her-new-album/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+99pi+%2899%25+Invisible%29). If you don't listen to the _99 Percent Invisible_ podcast, you should. If you do, then you probably know how beautiful the soundtrack is, and how well it fits the story and pacing of the piece. This piece shines a light on Sean Real, 99PI's composer, and their process of creating, and recently releasing, music.

View file

@ -0,0 +1,26 @@
---
title: "Things I learned this week #19"
author: "Thomas Wilson"
date: 2020-12-18
draft: false
slug: "2020-12-18-things-i-learned-19"
tags:
- things-i-learned
---
- **All of these species named after David Attenborough**: The man's a living legend (he's also like 94 - he was a teenager in the 1930s which was _before the second world war_ - this isn't the fact by the way, this is just some incredible side-facts). The collective scientific community has named over 20 species of animals and plants after him, including _Attenborosaurus_ - the marine dinosaur, _Pristimantis attenborough_ - a Peruvian frog, and _Acisoma attenboroughi_ - a dragonfly. ([source](https://www.atlasobscura.com/articles/heres-every-living-or-extinct-creature-named-after-david-attenborough))
- **This naval rule**: I recently came into some _Navy Strength_ gin (60% lol), and I wondered why something would be called Navy Strength. It turns out that The Royal Navy used to require a certain amount of gin on board, to give out in rations to their sailors. This went on until the mid 20th century, by the way. To make sure that the gin was strong enough, they used to burn it to make sure it had a high enough (and pure enough) alcohol content. ([source](https://www.craft56.co.uk/blog/post/what-is-navy-strength-gin/))
- **These tiny drivers**: In a study to look at how an enriched environment can improve the ability of rats to learn and acquire new skills, some researchers at the University of Richmond TAUGHT SOME RATS TO DRIVE. Yes, they built tiny little cars for them, and encouraged them to drive towards treats. Yes, that's right, these tiny bastards got to drive adorable tiny cars _and_ got treats. Ugh, what a life they're living. Unsurprisingly, the researchers found that rats who lived in a more social and enriched environment learned to drive much quicker than those kept in smaller numbers in bare cages. Check out the video in the linked article to watch tiny animals drive tiny cars. ([source](https://arstechnica.com/science/2019/11/these-rats-learned-to-drive-tiny-cars-for-science/))
- **This early cultivated food**: I thought that the first crops we started cultivating and harvesting, about 10,000 years ago, were grains/grasses like wheat. However, maybe 1,000-1,500 years before that we were selectively breeding and harvesting figs, so they may have been one of the first plants humans looked at and thought: "That's delicious, and I bet I can improve that". ([source](https://science.sciencemag.org/content/312/5778/1292.1))
- **This way that we actually learn programming**: A lot of people who do software engineering have drawn parallels learning a programming language and human languages, maths, and music. I've always been a little skeptical of these analogies - the foundations of recognising rules and patterns aren't unique to software engineering, they're generic problem solving skills, and language acquisition is like... a whole thing. Recently, some people at MIT took some programmers, put them in an FMRI machine and showed them snippets of code and asked them to predict the output of the code, in order to examine which parts of their brains were involved in the processing of the information. The study found that parsing the code activated the _multiple demand network_ - a cross-cortex region of the brain involved in many processes, and not specialised especially to language or mathematics. As a result, learning code isn't _exactly_ like learning maths or a language, and while we can maybe draw generalities in the way we teach it, we shouldn't be dogmatic about it. ([source](https://news.mit.edu/2020/brain-reading-computer-code-1215))
## What I've had on Rotation
- **Something New**: _evermore_ by Taylor Swift (Singer Songwriter). Taylor dropped her second album of 2020 last week, which is good. Law of averages says that we have to have something good come from this year. This is a sister album to _folklore_, which she dropped over summer. The production quality, lyricism, and collaboration on this albums bring it true to her country/folk roots - it's earnest and true, but knows when to be tongue in cheek or when to crack a wry smile. While nothing will ever replace _Red_ in my heart, _evermore_ is genuinely a fantastic album that surprised me with how much I loved it. ([links](https://songwhip.com/taylor-swift/evermore))
- **Something Old**: _Cole World: The Sideline Story_ by J. Cole (Hip Hop, 2011). Y'all know I love hip hop, and when your favourite rappers call out J. Cole as one of their favourites, you know he's worth a listen. I've been diving deep into his older, early albums this year. _Cole World_ has jazz keys, samples, and lyrical hooks everywhere, but it also starts to bring in some of the more electronic/synth elements that are more familiar to modern Cole and hip hop in general. I can see entirely why he's rated by other rappers: he's good, he's sharp, and he's versatile. ([links](https://songwhip.com/j-cole/cole-world-the-sideline-story))
## Cool Articles
- [The New Relationships That Fizzled Out in Quarantine](https://www.theatlantic.com/family/archive/2020/05/new-relationships-coronavirus-pandemic/612352/) by Ashley Fetters for _The Atlantic_. The COVID-19 pandemic has been a wild, wild time for anyone single and dating. My experience as a young metropolitan who, pre-pandemic, was in the dating scene is that a lot of people would go on a lot of dates with a lot of other people. A lot of the guidelines and laws around social distancing seem to ignore anyone who's not cohabiting with their partner, and I've seen and heard of people feeling as though they've completely lost a year of their dating life. People in pre-existing relationships have had to go through a whole other set of problems. As someone rapidly approaching 30, this isn't necessarily a year in dating that I feel I could lose easily. I think this situation is going to bring about a very particular set of personal and romantic issues in the next 24 months as people re-start dating. Fetters does a great job of bringing some case studies to light around this, from earlier in the pandemic, as dating changed suddenly and rapidly.
- [Zoom and Gloom](https://aeon.co/essays/how-empathy-and-creativity-can-re-humanise-videoconferencing?utm_source=pocket-newtab-global-en-GB) by Nigel Warburton for _Aeon_. I've heard a lot of people declaring how 2020 has shown all of us how unnecessary the office is, or conversely how completely irreplaceable the office is. At the same time, we're learning how the tools we have in place for remote work are largely inadequate. Something has to give here. In this piece, Warburton looks at the need to design tools which place human empathy above all else, especially in a time where we've suddenly pushed pretty much all video-conferencing tools to their natural limits. This is a great reminder that things don't have to be the way they are, and that, although I think we need a blend of online and in-person work time, we shouldn't write off either type of experience given what we've all gone through this year.

View file

@ -0,0 +1,53 @@
---
title: "How are we going to write about 2020 from 2022 onwards?"
author: "Thomas Wilson"
date: 2020-12-20
draft: false
slug: "2020-12-20-how-are-we-going-to-write-about-2020"
tags:
- essay
- "2020"
---
2020 has been a terrible year in so, so many ways for so, so many people. At the very least, the Covid-19 pandemic has stolen a year from us all. I would say most of us have gone through a personal and collective trauma this year.
I do not believe this year will be a turning point for us as a society. I don't think this will be the moment people stopped flying transatlantic for a 2pm lunch meeting in LA. In 2025 people in offices are going to be just as much a victim of presenteeism as they are now. We're not going to value our independent artists or our local pubs any more, we're going to frequent franchises and chains. We're not going to pay healthcare staff more and politicians less. We're not going to have a meritocracy in government and purely data-led policy. We're not going to learn all the lessons we need to learn to stop anything like this from ever happening again - because our collective memory is short, and because our minds are excellent at rationalising our actions to ourselves.
I do believe that this is going to be a cornerstone in the life of everyone over the age of 14. This will be a comparison point for every freedom of movement we make, even if it's a fleeting memory as we board a plane or check into a hotel in 2050. We will remember the impact of distance in our relationships, and recognise the luxury of being inattentive to them. We will justify ordering aperitifs and dessert at restaurants. We will remember not being able to leave the house before we bid on a house with barely a fist full of dirt, or which is distant form our loved ones. We will consider it as we walk home, head-fizzy-drunk, from a friend's dinner party. The muscle memory in our hands and fingers will surface countless washings after getting home from any shop.
As individuals we are going to remember this year, and a culture we are going to try and move on from it.
How are we going to write about, and talk about this year in 2022?
Other than the inevitable trend of clinical and popular postmortems and retrospectives; of memoir from political and healthcare staff; in coded language from press-releases (_due to the global health situation_) - how do we relay what this year is and has been? Are we going to want to pretend it never happened, or will it crop up in books, plays, music, movies, or series? Will it be examined, blamed or credited, or will it become kind of harmless shorthand which takes the sting out of the year?
What are the analogies and comparisons you can draw on to explain this year? I have never experienced anything so physically and mentally stifling. There is no analogy for the drawn out uncertainty, the frustration, and the limited personal freedom, the conjuring of temporary hope and imagined futures almost solely to get us through a now which extends certainly backwards and hazily forwards.
I think I'm leaving the year stronger than I came into it, but there was a real dip in the middle there where things could have gone either way. Despite being better off, there is space left in my life from the friends and family I haven't seen in a year, by the art I haven't witnessed, the meals I haven't eaten, the texts I haven't artfully crafted or "accidentally" ignored, the wine I haven't drunk, the music I haven't heard crammed into tiny spaces with bustling strangers and distorted speakers, the sunsets I haven't seen, the taxis I didn't take, the impulse purchases I didn't make, the hands I didn't shake and the embraces I missed.
If you're lucky, the horrific scenes of crammed hospitals, overflowing wards, and people dying alone were fed to us through the screen or told to us by others. If we are not, we have lived them, or love someone who has lived them.
I have lost no one I know and I have managed to find and maintain fulfilling employment. I have been lucky, but I mourn the passing of this year from my life in a way that I don't know how to vocalise. I do not think I have regressed as a whole, but parts of my life have.
Doesn't every mental struggle feel like this, though? As though it could not be pinned down and showcased in words? In my experience, the feeling of being _in_ a storm and then describing it afterwards are two very different skills. Once you're far enough way from something you can see the shape of it, its limits and reaches, with more clarity.
I can't do that for 2020 yet. I can't write a eulogy for this year which I desperately want buried and refunded. I am too close, and the loss feels too fresh and not yet finished - it is December 2020 as I write this and I know more will be taken from me, and more still demanded.
How long will it take for us to feel finally, firmly, like we can judge our vantage point far away enough to have some kind of valid, or at least semi-unused, criticism? Something other than a reaction.
I feel as though maybe in the last two or three weeks we have broken the back of the Covid pandemic. With three vaccines approaching, or already reaching, approval.
But perhaps the thing I have had to learn, and have seen us all trying to learn, over and again from this year is how little we can grasp time, or how poor we are at understanding and processing problems of this scale. That's not to speak of the people who make no allowance for the collective good, only for hedonistic and short-term impulses.
How often we have been six weeks away form this all being over? How the creation, approval, distribution, administration of a vaccine will solve anything - when in truth each is a herculean effort of knowledge, logistics, and finances. The world is going to have to produce billions of doses of vaccines. Billions. Each of which as to get into a person's bloodstream, and administered during a pandemic.
This year has felt entirely like waiting just that little bit longer. Like hanging on until the daily deaths and cases get below a set limit. Like things aren't good now, but we'll accept it because they _will_ be.
How are we going to write about that feeling and that uncertainty? How can words do justice to successive realisations that both the problem and the solutions are so much more complicated than anyone was saying - because nobody wanted to be the one to say them, to reduce the substance of our hopes.
This has been a year of loss and trauma. We don't understand the full limit of either of those things, and how are we going to talk about it afterwards? Because there will be an afterwards.
How long will it take for these things to seep into our cultural and personal narratives? And how will we, in the future, draw from them? Will they become like war poems we read once a year, and become synonymous with charities and remembrance services? Or will they become briefly loved and adopted as a way for us to make sense, or something good, from all this?
I am very interested in how future us will write about this once it's passed.

View file

@ -0,0 +1,17 @@
---
title: "Things I learned this week #20"
author: "Thomas Wilson"
date: 2020-12-27
draft: false
slug: "2020-12-27-things-i-learned-20"
tags:
- things-i-learned
---
This week's post comes a little lighter, on account of it being Christmas and all. I didn't want to break a streak, but also I want to get back to eating far too much and doing far too little. So let's get on with it:
- **This etymology**: The word _apocalypse_ comes from the Greek _apokaluptein_: to uncover, or reveal. This original meaning got adopted in bible translations in the context of _revelations_ - which makes sense. Something have been revealed or uncovered. However, most of the revelations in the bible aren't... great news? So it started taking on a more negative, destructive tone. ([source](https://www.etymologynerd.com/blog/apocalypse-now))
- **These first festive TV advert**: Having a heart-warming, mini-movie of a Christmas advert has become a staple in the past decade. My personal favourite is the animated woodland scene and accompanying Lily Allen soundtrack for [John Lewis is 2013](https://www.youtube.com/watch?v=mer6X7nOY_o). One of the pioneers of the British TV Christmas advert was OXO, the famous broth/gravy company, [here's their 1984 advert](https://www.youtube.com/watch?v=EQXxbW7qYFQ), in which our child protagonist tells of her "most wonderful Christmas ever". From across the pond, Coca Cola's 1995 _Holidays are Coming_ [TV Ad](https://www.youtube.com/watch?v=X13N-Bx17Oc) has now reached meme status, becoming synonymous with the festive season itself. From 2007, John Lewis started a trend of high production, narrative-driven adverts which I'm honestly really glad we have. ([source](https://www.anthonygregg.com/insights/a-short-history-of-the-british-tv-christmas-advert/))
- **This most popular nut**: What do you think the most popular nut of Victorian England was? My gut reaction was peanut, all the other nuts seem a little too fancy or exotic for wide consumption. However it turns out that chestnuts were the most popular nut in Victorian England. So there's a nice bit of trivia for you, and also it's roughly festive themed. ([source](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2442131/))
- **This science of snowballs**: You know how some snow makes excellent, compact snowballs which are perfect for throwing, but some is either a fine powder or ice which can't be thrown for love or money? It turns out that the underlying physics behind snowballs relies on the pressure of you compacting the snow together, with your delightfully mitten'd hands, allowing some of the snow inside the snowball to melt back to liquid water. Then when you stop compacting the snow, the lower pressure forces the water to refreeze into ice, and it acts like a cement or a glue to hold all the snow together. When it's too cold (and powdery snow), the pressure from your hands isn't enough to melt the snow, and if it's too warm then the. ([source](https://www.wonkmagazine.co.uk/physics-of-snowballs))

View file

@ -0,0 +1,30 @@
---
title: "Things I learned this week #21"
author: "Thomas Wilson"
date: 2021-01-01
draft: false
slug: "2021-01-01-things-i-learned-21"
tags:
- things-i-learned
---
Happy New Year 🎊🥳🍾 It's been one hell of a ride, 2020, and I hope that I never know another year like you. This has been quite enough. We're at least six months from being slightly out of the woods, but we've made it through nine-to-twelve (depending on where you live) months of surprise pandemic. We can make it through another six. I don't care that 365 days or a rotation around the sun is arbitrary. Money is arbitrary and so is language and art - let it be arbitrary but celebrate. I hope your festivities were socially responsible, and served you. I hope your 2021 is better, and I hope we see in 2022 surrounded by people, live music, fireworks, champagne, and a general hustle and bustle.
- **These good boys**: Across the world, several dog trainers and medical researchers have been trying to train sniffer dogs to identify people who are positive for Covid-19. One of the big problems with this disease is asymptomatic carriers who may unwillingly infect others without knowing. Having dogs who can sniff-out people who may be positive, especially in high-touch areas like airports or event venues, is a great tool. It's also pretty cool that a) there's a reliable Covid-19 smell, and b) dogs can identify it. This research is still in the early stages, but it's arguably looking promising, even if we're not quite sure _what_ the dogs are sniffing out, exactly. ([source](https://www.nature.com/articles/d41586-020-03149-9))
- **This version of the English Language**: E Prime is a version of language without the verb _to be_. Proposed by D. David Bourland, Jr. in 1965, Bourland believed that people rely too much on _to be_ in English writing and that it weakens the impact or strength of a statement, or distracts the reader from the subject. The infamous non-apology "mistakes were made", for example, would simply not do. It was also an attempt to stop us comparing things that aren't comparable - for example can a candle _be_ burning, or does the candle burn? Look, it's wild idea that would never take off, but it's a nice smell to look for in your writing. Try and be more conscious when you're writing things ([source](https://simple.wikipedia.org/wiki/E_Prime))
- **This Railway Dog**: In late 1800s, Bob the Railway Dog, was adopted by the South Australian railway community at large. Conductors would let him hop up into the front of a train, where he would travel thousands of miles around the country. This lifestyle was a little dangerous for a small dog (as it would be for any human) and during this time he fell off trains, had his coat catch fire, and almost got caught under several moving carriages. ([source](https://en.wikipedia.org/wiki/Bob_the_Railway_Dog))
- **These letters from Santa**: For twenty three years, up until 1943, JRR Tolkien wrote _Letters from Father Christmas_ to his children. The letters feature a broad cast of characters, including his elf (naturally) secretary, and Polar Bear, a polar bear (naturally), who just keeps getting into mischief. The letters have Father Christmas chronicling some of his (mis)adventures around the North Pole. ([source](https://en.wikipedia.org/wiki/The_Father_Christmas_Letters))
## What I've had on rotation
- **Something New**: _Be Slow_ by Harrison Storm (EP, acoustic singer-songwriter). The last week of a year always feels like a little bit of a blur. In 2020, the preceding nine months have also felt a little slippery. Storm's five song EP contains the right mix of chilled and comforting songs for this time of year. ([links](https://songwhip.com/harrison-storm/be-slow))
- **Something Old**: _Sign No More_ by Mumford and Sons (Folk). This album is very good, though maybe a little overplayed in the early 2010s. Some distance has done it wonders, as has nine months apart from rowdy crowds. The lovely harmonies and chaotic instrumentals are delightfully timeless. Would recommend a re-listen. ([links](https://songwhip.com/mumford-and-sons/sighnomore))
## Cool reads
- [Seasons in a Pandemic: Mary Shelley on What Makes Life Worth Living and Natures Beauty as a Lifeline to Regaining Sanity](https://www.brainpickings.org/2020/04/16/mary-shelley-the-last-man) by Maria Popova for _Brain Pickings_. A beautiful little tribute to Mary Shelly' semi-autobiographical _The Last Man_, a novel about a pandemic which one-by-one kills of humanity. Covid references aside, Popova lays out some of Shelly's personal traumas that lead her to write this book, and quotes some of Shelly's writing about the reassuring rhythm of nature's seasons. If you like well written and researched newsletters, you'll bloody love Brain Pickings, you can sign up for it [here](https://www.brainpickings.org/).
## Fun things
- [2020 Ipsum](https://2020-ipsum.com/). You've heard of Lorem Ipsum, the placeholder Latin-looking text that you use as dummy text in design? This is that, but instead of Latin-esque words, it's 2020 buzzwords that are kind of like a stream of consciousness from a... year.

View file

@ -0,0 +1,73 @@
---
title: "2021 Theme: The Year of Discourse"
author: "Thomas Wilson"
date: 2021-01-02
draft: false
slug: "2021-01-02-yearly-theme-2021"
tags:
- "2021"
---
Resolutions are dumb. They're unsustainable and you can fail at them. Humans are just awful at long-term behaviour or thought-pattern change. Instead, I like themes: broad ideas that only try to guide you, not dictate. They're not a single _thing_, they're like a north star, or a prompt for conversation and reflection when you pause for it. CGP Grey [condensed his thoughts](https://www.youtube.com/watch?v=NVGuFdX5guE) on them into a neat little six-minute video. If you're more into it, or like podcasts, [here's](https://www.relay.fm/cortex/110) an episode of Cortex to listen to.
## A brief eulogy for 2020
Coming into 2020 I was hopeful. It was going to be the _Year of Making Space_, where I was going to trim away as many of the routines and commitments I had put myself in, to see what would happen. To see where my brain would go with this new time and opportunity.
I had handed in my notice at a job I liked but didn't love any more, I was going to go freelance for a little while, and I was going to use this as a chance to find the things that I loved. I was in a contemporary dance company and we were actively producing a piece to be performed in May. I had the entire of February off, for a proper rest. I was maybe thinking about planning another long-distance cycle tour, after getting (most of the way) across France last year.
I'll save the quips and the suspense - none of those things happened.
### 2020 pt.2: Year of Survival
Between March and April of 2020 there was a bloodbath. It's a vivid and morbid word to use. People were dying, and we were all scared. Large parts of the economy went into free-fall. Budgets were cut, people let go, customers canceled orders and subscriptions. Nothing felt safe or exempt. It was every person and every company trying to figure out how, or if, they could survive for the next one-to-six months. It was a bloodbath.
It was a bad time to be the newest freelancer on a team. I don't want to talk about the specifics of the lessons I learned during this time, but I would summarise them as "good to know, but over-priced".
My burning mental image from this year is one of trying very hard to keep my head above the water. It turned into the _Year of Survival_. I had to draw a card then play it immediately, and I'm grateful that I made it through.
Things eventually worked out, as they are want to do. I found employment at a company with a great team and vision, I moved house, I got a haircut, I did a lot of Zoom Happy Hours, made bread, and I neglected some plants until they died. Pretty standard 2020 things. Now, it means I can come into 2021 with a few more liquid assets in my attention economy.
## 2021: Year of Discourse
I have decided that 2021 is the _Year of Discourse_. I am currently thinking about this in two parts:
1. How do I present and communicate?
2. What do I do with ideas presented by others?
I would like to consider how I present myself, my work, hobbies, thoughts, ideas, affections... I would like to think about how the things I feel and know on the inside are shown on the outside.
I want to balance this focus on self with a focus on others. While I don't feel I have ever struggled with accepting or facilitating feedback or information, I want to focus more on _doing something_ with that it.
I initially started with the _Year of Presentation_, which focused only on the first of these points, but the idea didn't fit. It felt too selfish. It also sounded a little synonymous with the _Year of PowerPoint & Keynote_, which I'm not ruling out.[^1]
[^1]: Shoutout to [Prezi](https://prezi.com), who I'm surprised to learn have adapted pretty well to the death of Flash.
### Why ?
During this summer I was interviewing for new jobs. I ended up getting the one I really wanted, but one of the other companies rejected me on the basis that I did not have good self-knowledge or self-awareness.
I was surprised by this feedback. I think it's the first time someone's levelled that criticism. In fact I've often heard the opposite: too self-critical and under confident. I try to keep a good tab on my shortcomings and this isn't one of them. I spoke this through with a few close friends and they agreed that it seemed a little out of character. Despite this, a group of people I did not know met me, interacted with me, and together agreed that this was appropriate feedback, so I do not want to dismiss it.
They met the professional version of myself, who is wholly more confident and opinionated than my actual self. For the sides of my personality which I showcased, their feedback was probably accurate. I can't let my ego stop me from hearing valid criticism. I don't want to dismiss this feedback by justifying it or explaining it away - because that isn't going to lead to meaningful change.
This is what gave me the initial idea for thinking about presentation and interactions, i.e. _Discourse_.
### Cynical Everything (™️)
I am worried this could be the moment in my career where I turn into the Cynical Developer (™️). That person on the team who hates everything they don't like (or know). Who's not open to change or different ways of doing things, and who only has one moral framework (their own).
I don't want my opinion to become inflexible, and I don't want that reputation. Nor do I want this to be the precedent that I set myself on the pathway to mastery of something. I don't want to be a Cynical Anything: cook, fitness person, artist, creative, friend, whatever.
I want to remain open-minded and engaging, and obviously in love with the things I chose to do with my time. And if I don't love it, or care about it - don't hold opinions about it too tightly. Let parts of it go. The _Year of Discourse_ is about opening that journey up, to share it and show it in an inviting and collaborative way.
## Season #1: Winter 2021
I bloody love seasons. I fell in love first by eating with them, and then the Covid-19 pandemic made me fall in love with simply watching them. Time passes, the rhythms flow, and everything has its time.
I want to spend the Winter of _The Year of Discourse_ working on the implicit beliefs I have: recognising them and putting them into words. I'm hoping this will help me realise how differently I could be doing things, and potentially some of the things which are guiding my actions or decisions. I'm also hoping it will let me cut away anything which is holding me back.
Some of this is going to look like writing, which could be public or private, professional presentations, and conversations with friends. I think the process of discovering these things and then refining them is the valuable part of the work. I do not think the product will have much value for others. I don't want to rush through everything with the intention of producing something sharable, or wrap-up-able.
Hopefully I'll keep you updated 🤷‍♀️

View file

@ -0,0 +1,26 @@
---
title: "Things I learned this week #22"
author: "Thomas Wilson"
date: 2021-01-09
draft: false
slug: "2021-01-09-things-i-learned-22"
tags:
- things-i-learned
---
This week the UK Government has brought us _Lockdown The Third_, a threequel in the franchise after the straight-to-TV movie that was the November lockdown. Cases, deaths, and hospital admissions are at an all-time high in our country at the moment, with London in particular looking pretty scary. It might be the "the last push" like this (boy, I really hope it is the last push), but that doesn't help the healthcare workers being forced forward/backwards/downwards by this whole situation. So for goodness sake, just stay inside. Call out people who are making selfish choices. We're all making decisions for everyone else around us, it really is that simple. Arrange FaceTime calls, yoga sessions, happy hours, online games, book clubs, Netflix watch parties, and craft dates with people. Life isn't going to be normal for a while, but we're going to get through this together and then one day get irresponsibly drunk as we sit in or outside a pub until closing time with the people we love, and think about what life looks like now. Until then just... learn to crochet or cook or something.
- **This cat**: Mike the Cat guarded the British Museum, who was "probably the most famed British feline of the 20th Century". Which seems like a narrow competition, but look, I don't want to detract from Mike's notoriety. After a decade's service, he passed away in 1929, and officials at the museum placed a memorial stone near the Great Russell Street entrance of the museum. ([source](https://en.wikipedia.org/wiki/Mike_%28cat%29))
- **This not-fireworks display**: At Mariana Bay, Singapore, officials organised a light show performed (which feels like the wrong word) by five hundred drones. Just watch the video, it's mesmerising to watch them twinkle, form into animals, or just geometric patterns. ([YouTube video](https://www.youtube.com/watch?v=r7Ul_EmHiJM))
- **This over-qualified actor**: Y'all have seen _Stranger Things_, right? The Netflix original 80's horror show which lives in my heart forever because I watched it during my Ph.D. with my housemate and like a whole bunch of popcorn. Mate, honestly it's so good. Anyway, there's this iconic scene right at the end of the third season where the world is about to end, and some of the characters are driving their iconic 80s car away from a world-consuming monster. The Duffer brothers took nearly three minutes of screen-time during this climax for an over-the HAM radio [rendition](https://www.youtube.com/watch?v=6EiRjwjp30I) of the title theme from _The Never-Ending Story_. It's baffling and I'm amazed it got approval. Susie, the long-distance (previously almost certainly fictitious) girlfriend is played by Gabriella Pizzolo, played the title role in Matilda on Broadway in 2013. Pizzolo gets less than a minute's screen time but she rocks it. Bonus fun fact: the composers for the show (Kyle Dixon and Michael Stein), who produced the iconic synth-heavy score and title theme music weren't even told about this musical number until they turned to set one day. ([source](https://www.hollywoodreporter.com/live-feed/stranger-things-season-3-finale-neverending-story-song-explained-1222689))
- **This other Ancient Egyptian Script**: We all know that ancient Egyptians wrote in hieroglyphs: the pictorial script of birds, plants, and other symbols which were ubiquitous in their crypts and monuments. However, after around 700BCE, most cultures in the Ancient Egyptian period had at least two scripts in use at any one time: hieroglyphs to record what was morally good and should endure for eternity (like holy texts and things you'd write on your culture-defining monumental tombs), and _demotic_ (meaning popular) which was a more cursive script used for day-to-day things. That said, we estimate only about 1-5% of the Ancient Egyptian population were literate. The script survived in use until about the second century BCE, when it was replaced by _Coptic_ - notably it wasn't replaced wholesale by Latin, as one might expect when the Roman emperors decided they owned the Nile now. ([source](https://www.ucl.ac.uk/museums-static/digitalegypt/writing/hieratic.html))
## What I've had on Rotation
- **Something New** _In Sickness & in Flames_ by The Front Bottoms (Rock/Punk, 2020). I only just discovered this rock/punk-ish duet, and I'm a little bit in love. It's like they're shouting poetry, or little truths, or little anecdotes that _are_ connected most of the time, but sometimes it's a very loose connection. It's energetic, it's erratic, it's honest, and it's not so hardcore or edgy that it's exclusionary or difficult to listen to. Put it on when you next go for a walk sometimes. ([links](https://songwhip.com/the-front-bottoms/in-sickness-and-in-flames))
- **Something Old** _A Moment of Madness_ by Izzy Bizu (R&B, 2016). I was recommended this album as something to have on in the background if I needed to get something else done, and I really liked it. It's upbeat, soul-ish R&B that can stand its own as the centrepiece of music, or can hold into the background. It's gentle and doesn't demand your attention, but he clear voice and clean production doesn't wither under it. ([links](https://songwhip.com/izzy-bizu/a-moment-of-madness))
## Cool Articles
- [DALL·E: Creating Images from Text](https://openai.com/blog/dall-e/) by Open-AI. Isn't this a terrifying little read. The Open-AI team show how they trained an AI to generate images from free text prompts. For example they gave it the phrase "A storefront with 'Open AI' written on it", and the AI went ahead and made it. Trained on a corpus of labelled images, it was able to throw together these images on demand. Some of them are terrifying because they're so accurate - others are terrifying because they're 90% of the way towards making the image, and sit in the 'Nightmare Fuel' region of the uncanny valley.

View file

@ -0,0 +1,77 @@
---
author: "Thomas Wilson"
date: 2021-01-10
draft: false
slug: "2021-01-10-an-ode-to-plaintext-notes"
title: "An ode to note taking with markdown files"
tags:
- notes
- markdown
---
This is based off a _sesh_ (think _lightning talk_, but... cooler?) I gave at [Oxwash](https://www.oxwash.com), where I am a frontend software engineer. I wanted to give an overview for how I take notes in pretty much every area of my life, including my job but also for holidays, notes from books I am reading, and for writing posts like this.
Over the past twelve months my thinking has converged towards the idea that plaintext files (like Markdown) are a great choice for note making and keeping. Please, let me explain why.
I'm not going to talk about any particular software in this post, just explaining why I think plaintext is cool. God I love the internet.
## What do I want in notes ?
The entire argument I am about to make relies on a couple of assumptions. The first is that you want some kind of personal productivity or knowledge management infrastructure in your life. You might not want any, or you might be okay with the default _Notes_ and _Tasks_ apps on your phone. That's fine.
The second is that this is the kind of thing you can get down and nerdy about.
Now that I've weeded out anybody remotely cool, let's talk note taking and productivity.
No matter what tool I am using to take notes, I am trying to optimise for a couple of non-negotiable things:
1. The **speed** of getting an idea out of my brain. My brain can get a little cluttered, and ideas can sometimes clamber over each other as they try to get out.
2. The ability to **find** a note after I've written it. I don't care how it works, I can adapt, but normally at least one of the following things will stick around in my brain to let me find something:
- A bit of the filename
- A rough time when I made the note
- A list of directories it's probably in
- I remember that I mentioned the file in another file
3. I am able to **integrate** my meta-work easily into my actual work, as:
- A software engineer
- Someone who writes blog posts that no one reads
- Part of my ongoing professional development and research
- Reading / reviewing / keeping notes on books
4. A note can be **deleted** (or discarded) when I'm done with them, without impacting anything else.
5. I want the reasonable ability to **own** my data and I don't want it to be in a **proprietary format**
## Atomic vs. Ecosystem productivity tools
I've gone through a lot of productivity tools and techniques in the past ten-ish years, where I've gone from undergraduate, to doctorate student, to software engineer in small and large companies. Right now, plaintext, specifically markdown (`.md`), account for maybe 90% of my productivity and meta-work. I rarely find myself needing to move outside of them.
Previously, I flitted between two productivity ideals:
1. **Atomic tools** where one job is done by one thing - task managers for TODOs, spreadsheets for data, notes for... notes. I have previously used apps like [Bear](https://bear.app/) (markdown-like notes), Google Sheets, and [Todoist](https://todoist.com/) (task manager).
2. **Ecosystem tools** where one tool should contain everything: TODO lists should be aware of personal budgets, should be linkable to meeting notes and product designs. [Notion](https://www.notion.so/) is the current Platonic ideal of this philosophy.
I found atomic tools difficult to manage in practice, because you have to figure out how to tie multiple disparate systems together. You've also got to learn how multiple tools think about data and workflows.
I didn't like ecosystem tools as much as I wanted to, because in practice they're trying to be a consumer-friendly operating system for information and workflows. As an engineer, I didn't like how ridged they are. Nor did I like how proprietary they are. I'm good to not put all of my valuable information onto a boat captained by an engineer out in San Fransisco who doesn't particularly want to resist the siren call of VC funding.
Plaintext isn't an atomic tool, because it can contain a variety of different kinds of information. Nor is it an ecosystem, because it can't (ergonomically) contain every kind of information. Previewing tables and images in markdown is... not particularly user friendly.
That said, plaintext notes are simple and accessible - every smart device I own can download files from the cloud, and has a way of editing them. Sure the editing experience is inconsistent, sharing external web pages or files into them is also a bit of nightmare, but the file format is present. And how much of success is just turning up?
## Plaintext is kinda like Lego
The fact that plaintext is _just_ text _is_ a disadvantage. But plaintext still lets you put different kinds of information together in the same place. They're composable and combinable. One note can contain TODO lists, links to web pages, single-sentence thoughts, headings for structure in the document. That means I can have a file that represents a single day, a project, or a planned period of work - I don't have to divide everything off arbitrarily. And I can do this differently for every note.
You can also link things together at the file level. By naming convention or location of the file, or just calling a file out - things can link together easily.
A single plaintext note can easily support most things from infancy to adolescence. Some things, like data-heavy lists or tables, have practically no room to grow (at least not without software-based enhancements). Others, like a collection of notes and quotes from books I am reading, are able to expand almost infinitely. Most things, sit somewhere in the middle.
Importantly, when something outgrows the medium of a plaintext document I am able to link the two. Even if this only a one way link, from markdown to a URL, or a copy-paste job from an e-mail. Is it perfect? No, but it's just plaintext. It's open source, it's human readable, and it makes sense to me. The computer doesn't need to understand everything I do and say, it just needs to remember what I say and let me do the figuring out.
## Notes are a tool that serve you
Digital note taking brings together two very opinionated groups: people who think about software or digital systems, and people who work in research or communication. It is easy to find a lot of zealous doctrine online about what makes "good" notes.
Take their ideas as inspiration. Or ignore them. They're not going to hunt you down to ask why you don't implement their note template, and if they do they're probably weak from sunlight deficiency and lack of social awareness.
If you're serious about creating and then maintaining a habit, it has to offer some clear benefit to your life. Following an additional set of rules and guidelines for their own sake may work for some people who love following rules. **You do not serve the monolith of your notes archive - it serves you.**
If your notes are long and sprawling, that's fine. If they're short and clipped, cool.

View file

@ -0,0 +1,14 @@
---
title: "Design Resource: Free Fonts from Awwwards (2021)"
author: "Thomas Wilson"
date: 2021-01-15
draft: false
slug: "design-resource-free-fonts-from-awwwards"
tags:
- "design"
- "design resources"
- "link"
---
Awwwards have put out a collection of free (or free-adjacent) fonts. You can find them [here](https://www.awwwards.com/awwwards/collections/free-fonts/).

View file

@ -0,0 +1,26 @@
---
title: "Things I learned this week #23"
author: "Thomas Wilson"
date: 2021-01-15
draft: false
slug: "2021-01-15-things-i-learned-23"
tags:
- things-i-learned
---
- **These underwater drawings**: Go back to 1860s and ask someone what coral reefs, or fish, or literally any marine life looked like. Go on. I bet they'd tell you they had no idea. How would they? Sure, we'd been sending people down there since the 1500s in these giant metal bells but those were more function-over-form. You couldn't really see out of them. Around the 1400s we maybe started sending people down with metal crates over their head and tubes attached to their suits to feed air to them. But what are they gonna do, take picture on their under-water cameras or pull out a little canvas to sketch the scenery. In the 1860s a guy did literally that latter thing, which is so metal. Eugen von Ransonnet-Villez designed a special 2 feet wide, 3 feet tall diving bell with glass viewing ports for light and the view. He sat in his little underwater cupboard and drew what he saw. He dangled his legs out the bottom so he could move around a little, which is perhaps my favourite mental image. A full version of his published work, entitled _Sketches of the Inhabitants, Animal Life and Vegetation in the Lowlands and High Mountains of Ceylon: As Well as of the Submarine Scenery near the Coast Taken from a Diving Bell_, can be found [here](https://www.biodiversitylibrary.org/item/108743#page/22/mode/1up) (description of the underwater stuff starts on page 21). ([source](https://www.atlasobscura.com/articles/underwater-illustrations?utm_source=pocket-newtab-global-en-GB))
- **This coffee myth**: I always assumed I had to drink extra water before/after coffee, because it dehydrated me. Turns out that's a dirty filthy lie. A study in 1928 found that increased coffee consumption was associated with higher urine output. That's right, some science was done at a time before we had invented the synthetic toothbrush bristles found that if you drink more coffee, you also pee more. And then we just carried on believing that coffee made you pee more (which I guess isn't a lie). Some 2016 research investigated caffein consumption and dehydration - finding no evidence that increased caffein consumption works against your hydration. It is worth remembering that coffee isn't just caffeine, however. Either way, don't worry too much about it. ([source](https://www.livescience.com/55479-does-caffeine-cause-dehydration.html))
- **This pilgrimage**: Chartres Cathedral, near Paris, has a 42-foot single-pathed labyrinth pattern inlayed in their floor. We don't actually know who built it, or why, just that it came about in the early 13th century. Around the time it was constructed, it became impossible for Christians to make a pilgrimage to Jerusalem - because of political issues. Luckily we've spent the past eight centuries working together to overcome these woefully antique problems. The labyrinth arose at a time when people wanted, but were unable, to undertake an important journey, in every sense. Chartres Cathedral became a pilgrimage destination for European Christians - with the single winding path acting as a tool for meditation and therapy as the walker made their winding (but definitely small) journey. Single-pathed labyrinths actually have a long, and continuing, history as tools to help guide and sooth thoughts. These single-path labyrinths are still used in therapeutic and mindfulness contexts because they are seemingly complex but they don't let you make choices, and they always lead to successful completion. ([source](https://www.atlasobscura.com/places/labyrinth-chartres-cathedral))
## What I've Had on Rotation
- **Something New** _Kokoro_ by Stefano Guzzetti (Piano, 2020). This past week I've been doing a lot of deep work, which I like to do in silence. So when I come to have music on, I don't want anything that jolts or shocks my system. Guzzetti's _Kokoro_ is a delightful hour of melodic, pleasing, and still complex-in-places piano. It's good for these rainy, dark days where really who wants to leave the house anyway? ([links](https://songwhip.com/stefano-guzzetti/kokoro))
- **Something Old** _Murs 3:16 9th Edition_ by Murs (Hip Hop, 2004). I absolutely love going back to find some of the great albums and artists of 21st century hip hop. This album has that timeless boombap style of productions: samples, synths, and drum machines. Murs' _Have a Nice Life_ received a lot more critical acclaim, and deserved it (it's a maturer sound - I'll pick it some week), but this _3:16_ gives a sense of perspective with its relative immaturity, anger, and hard-stances. Love where you've come from, as well as where you're going - and that's what this album reminded me of. ([links](https://songwhip.com/murs/murs-316-the-9th-edition))
## Cool Reads
- [State of JS 2020 Results](https://2020.stateofjs.com/en-US/). If you're a software engineer who writes for the web, you should read this article. It breaks down responses from almost 25,000 software engineers, and gives State of the Union for frontend technologies, and highlights where things could head in the future. The [Svelte](https://svelte.dev/) framework really shone through this year, and TypeScript continued its dominance in the wider ecosystem.
- [Dense Discovery Issue #120](https://www.densediscovery.com/issues/120). I've mentioned Dense Discovery in previous editions of _things I learned_, but I want to give a shoutout to this week's edition in particular. It's such a well curated, thoughtful newsletter run by [Kai Brach](https://twitter.com/KaiBrach). I really advise [signing up for the newsletter](https://www.densediscovery.com/). This week's issue had the following quote which stuck out to me, as someone who has recently found themselves thinking "I really just should get my head down and finish this book", without considering my enjoyment of that book:
> ... as a society we increasingly see reading as mining a text for information instead of it being an exercise of contemplation. He calls it the Silicon Valley view of the mind that treats brains like computers: the more effective the input and the data processing, the better and therefore more successful the output. There is a whole category of tech innovation that wants to make reading more efficient from the many speed-reading apps to subscription services that give you the time-saving gist of annoyingly comprehensive books.

View file

@ -0,0 +1,25 @@
---
title: "Things I learned this week #24"
author: "Thomas Wilson"
date: 2021-01-23
draft: false
slug: "2021-01-23-things-i-learned-24"
tags:
- things-i-learned
---
- **This fitness research**: I've long been a fan of interval training to help improve my running and cycling speed. High intensity interval training (HIIT) is a method of training where you mix short bursts of intense activity (e.g. a 30 second sprint) between longer periods of low-intensity exercise (e.g. 90 seconds slow jog). It's time-efficient, evidence-backed, and makes me uncomfortably sweaty so it must be good. Our current guess is that by pushing through into very high intensity activity you trigger different physiological responses, compared to sustained moderate exercise. It turns out it might also be useful for less active, older adults - not just younger people and athletes. Some researchers at the University of Texas looked at a HIIT regime with just 4 seconds of exercise in a sixty second interval (4 seconds on, 56 seconds off), repeated fifteen times back-to-back. So fifteen minutes total, just sixty seconds of high intensity exercise. The researchers worked with both young adults (no age mentioned) and older adults (50-68 years old) and found that and found improvements to their strength and performance after three sessions a week over eight weeks. This is great news if you're looking to make the most of your exercise, but not great news if you hate running/cycling so fast you feel like you could be sick. ([source](https://www.nytimes.com/2020/12/30/well/move/can-4-seconds-of-exercise-make-a-difference.html?utm_source=pocket-newtab-global-en-GB))
- **These sheep**: North Ronaldsay is a three-mile long island off the Scottish coast which used to be moderately populated (a couple of hundred people) and sustained by the seaweed which would wash ashore from the stormy North Sea. In the nineteenth and twentieth century we would burn seaweed for potash - a valuable industrial ingredient. We've moved on from burning seaweed for potash, so the while island is still populated by seventy two people, it's also the home to some pretty unique sheep. Sheep love to eat things, like peoples' crops, so in 1832 the residents of North Ronaldsay constructed a two-metre high drystone wall (also the longest single drystone wall in the world, by the way) to confine the sheep to part of the shore. Nearly two hundred years later, and the sheep have adapted to life on the coast of a tiny island in the North Sea - mainly by eating seaweed instead of grass (or peoples' crops). They remain some of the few pure English-bread sheep stock in the world, and also they look incredibly grizzly. Seriously, go look at some pictures of them, they totally look like an old haggard Scottish shepherd. ([source](https://en.wikipedia.org/wiki/North_Ronaldsay_sheep))
- **This vegetarian cereal inventor**: John Harvey Kellogg (of Corn Flake fame), born in 1852 (i.e. twenty years after that dry stone wall), was one of America's early popular proponents of a meat-free diet. It's the reason he was dead keen on getting nutritional plant-based foods out there, despite his first recipes being incredibly bland and basically gruel. He wasn't vegetarian for the environmental or animal rights reasons that many associate with vegetarianism today. No no. He believed that a diet rich in meat was too full of fat and rich flavours (this is often _the_ argument people give as to why they "could never go vegetarian", so maybe work on your marketing, John). Kellogg believes that these irresistible flavours were basically making us too horny. Meat increased our sexual appetite, and therefore eroded our moral fibre. These beliefs actually pre-date the man's cereal infamy, and he opened the _Battle Creek Sanitarium_, a sort of health retreat / rehab centre / healthcare facility - but two hundred years before the term "wellness retreat" really became popular. Here, he evangelised a plant-based diet and outdoor exercise. While there he ended up boiling some wheat, and thought "this bland mush is so boring but healthy I bet it's great for your soul and wouldn't make anyone horny" - or something like that. So yeah, now we have Corn Flakes and Cocopops. ([source](https://www.smithsonianmag.com/smart-news/american-vegetarianism-had-religious-upbringing-180956346/))
- **This CV of one of Parler's Founders**: _Parler_ is (was?, no wait, [is](https://www.theguardian.com/media/2021/jan/19/parler-website-partially-returns-with-support-from-russian-owned-technology-firm)) a Twitter-clone social media for people on the right of the political spectrum. The appeal comes from years of claims that Twitter was suppressing free speech. It's not that spending four years posting increasingly inflammatory and violent rhetoric isn't inherently appealing to social media. No. Twitter is hiding your tweets. So Parler was founded by a software engineer (John Matze) and billionaire heiress Rebekah Mercer. Some fun facts about Mercer, and why you should definitely trust her to run a tight ship: i) she owned a bakery in New York in the mid 2000s (and apparently made awful cookies), ii) she never does public interviews, and iii) she (and her father) were invested heavily in Cambridge Analytica (that unethical, and arguably illegal, data mining company). No, I'm sure she's got all the _bona fides_ to manage a social media company where "[there are going to be no fact checkers](https://www.forbes.com/sites/abrambrown/2020/06/27/parlers-founder-explains-why-he-built-trumps-new-favorite-social-media-app/?sh=3be1bad25016)", and they can quickly handle the pivot after being de-platformed from the vast majority of the internet. ([source](https://www.townandcountrymag.com/society/news/a9204/rebekah-mercer-donald-trump-transition/))
## What I've Had on Rotation
- **Something New**: _SUCKAPUNCH_ by You Me at Six (rock/pop punk, 2021) . The band's seventh studio album is the first in a couple of years to make me feel like You Me At Six made me feel in 2013. The slightly electronic, punky, rocky vibe (_a la_ their cohort Panic! At the Disco, All American Rejects, et. al) of SUCKAPUNCH has the high energy, and distinct Essex vocals of Josh Franceschi that make it lovable. ([link](https://songwhip.com/you-me-at-six/suckapunch))
- **Something Old**: _Have a Nice Life_ by Murs (hip hop, 2015). Last week I recommended Murs' 2004 album, and the difference in production and content between these two is notable. An altogether more mature and even sometimes humble album, that has an absolutely fantastic golden era classic beat production. This one's going on my list of classic. It's not surprising I love this sound, Murs is currently collaborating with Slug and Eligh - two of the first rappers I loved when I first discovered hip hop. Anyway, this album is really great you should listen to it. ([link](https://songwhip.com/murs/have-a-nice-life))
## Cool Articles
- [Here are some (entirely serious) predictions about tech in 2021](https://www.wired.co.uk/article/tech-predictions-2021) by Matt Reynolds for _Wired_. This delightful little satirical piece riffs on some of the zeitgeist/pop culture moments from 2020, which exist regardless of pandemics. My favourite is the prediction that in December 2021 we discover an asteroid on a collision course for earth, meaning that "existential panic can resume as scheduled". Very good.
- [Longevity Linked to Proteins That Calm Overexcited Neurons](https://getpocket.com/explore/item/longevity-linked-to-proteins-that-calm-overexcited-neurons) by Veronique Greenwood for _Quanta Magazine_. This is a neat little piece of science journalism covering something published in _Nature_ in 2019: that mice and worms with higher concentration REST (a protein which slows neural firing) have longer lifespans. There's a couple of really nice mental models in the piece, which slightly re-framed the ageing process for me. Notably the idea that ageing is a process where the body loses the ability to maintain equilibrium. It is not able to respond to environmental (or social, or cognitive, or whatever) stressors and return to a baseline "normal" state.

View file

@ -0,0 +1,19 @@
---
title: "My Top Albums of 2020"
author: "Thomas Wilson"
date: 2021-01-27
draft: false
slug: "2021-01-27-top-albums-2020"
tags:
- project
- albums
---
Just a quick blog post to highlight that I've published my 2020 _Top Albums of the Year_. You can find it [here](/albums-2020). Seriously, go check it out.
I really enjoy making little specially art-directed pages like this. It feels very "this is what the internet was made for". It's just a quirky little bespoke designed page which oozes my love for music. No tracking, no adverts, just a quirky font and cool colour scheme.
If you want to take a look at last year's albums, check out my [Top Albums of 2019](/albums-2019)
Anyway, hope you're keeping well.

View file

@ -0,0 +1,25 @@
---
title: "Things I learned this week #25"
author: "Thomas Wilson"
date: 2021-01-29
draft: false
slug: "2021-01-29-things-i-learned-25"
tags:
- things-i-learned
---
- **This etymology**: The word "peculiar" has come to mean odd or unique, so obviously its Latin root word (_peculium_) means somebody's cattle. Cows were pretty valuable assets back in the day: you can eat them, milk them, use them as work animals, so they became a symbol of wealth. Later, _peculiaris_ evolved from this same root word to mean "of private property", i.e. belonging to one person. This link makes sense too - if cattle are the stereotypical idea of property and wealth, then they'll start to become synonymous. Sort of like how 'estate' mingles land and social status (sorry to introduce a second etymology here to explain the first, bad form, I know). This latter meaning, of private property, has more clear links to "unique" or "individual", a connotation which arose in seventeenth century Europe, and which remains dominant today. ([source](https://uselessetymology.com/2019/11/12/the-etymoooology-of-peculiar/))
- **This statue of Lenin**: Hey remember back in the 1920s when Vladimir Lenin headed up the Soviet Union and shaped and popularised the communist ideal? As part of the zealous, world-domineering showmanship for the Soviet Union, Lenin had his face put on a whole bunch of things, including a lot of busts. I mean a _lot_ of busts. Lenin's personal brand was so strong during his leadership that his face was put on stamps, posters, newspapers, crockery, and generally anything. That's not to mention the fact that entire towns, as well as buildings and streets, were named after him. In a show of undeniable rigour and commitment to science (and communism), in 1958 a bunch of scientists and explorers from the USSR trekked to the most remote part of Antarctica, called the 'pole of inaccessibility', and erected both a research station and a Lenin bust. Out there, in the most remote part of the Antarctic desert in a bust of Lenin, cast in a synthetic polymer because no one's quite stupid enough to take marble to one of the hardest to reach places on earth. Originally pointing towards Moscow, a bunch of American made their way to the research site and rotated him to face Washington. So in '66-67 another bunch of Russians went out to un-rotate him and point him towards his home land. Now-a-days, little plastic Lenin is being slowly buried by the inevitable snow, and in about ten years he'll likely not be very visible. ([source](https://www.worldabandoned.com/pole-of-inaccessibility))
- **This second largest bird**: If I was an emu, I wonder if I'd feel self conscious about being second-rate to my taller, more famous cousin, the ostrich. But look, there are some wild things about the emu that I just did not know. For example, did you know that the male emus take responsibility for guarding and incubating the eggs. They'll not eat, and so likely lose weight, just to stay with the eggs and I don't think anything could make me want to do that. Another fun emu fact is the infamous 1932 _emu war_ in Australia, where the animals such a nuisance (they kept eating the corn that humans wanted to eat) that the army tried to get rid of them but failed. Third emu fact: aboriginal Australians discovered that you could use emu oil (don't ask how it's collected, it's pretty sad and unpleasant) to oil and treat your tools. These days we use emu oil as a topical (i.e. on the skin) treatment for joint and muscle pain, as well as healing damaged skin. Last fun emu fact for now: they're the only bird with calf muscles. Because their bodies are so big, and wings are so small, the extra muscle allows them to move at faster speed, which is a clear evolutionary advantage. ([source](https://en.wikipedia.org/wiki/Emu))
- **This use for leaches**: Imagine, if you will, that it is the 1800s and you need a way of detecting if a storm is coming. Imagine also that you happen to have a bunch of leeches lying around, because scientists in the 1800s had stuff like that. Oh, to be a rich white victorian scientist. George Merryweather was one such lucky soul, and he invented the _Tempest Prognosticator_. As the name suggests, it's a device which is able to alert you to when a storm is coming. It came about after Merryweather noticed that his leeches would become more active (i.e. wriggle more) before a storm hit. He surmised that leeches must be sensitive to changes in air pressure, and will want to seek shelter when a storm is coming. He used this new-found knowledge to build a contraption (which is totally the right word for what he built) which placed leeches in glass jars, attached strings to the sides of the jars, and then attached those strings to bells. So that when the pressure dropped, and a storm was coming, the leeches would writhe around and cause a "tinkle tinkle" of the bells. Merryweather never managed to successfully sell his Tempest Prognosticator to anyone, which is surprisingly because who wouldn't want to tend to a dozen jars of leeches every day? In an attempt to break into the luxury market, he constructed an ornate (i.e. hand crafted and artisanal) version for display at the 1851 _Great Exhibition_ in London. ([source](https://en.wikipedia.org/wiki/Tempest_prognosticator))
## What I've had on Rotation
- **Something New** _Kvitravn_ by Wardruna (2021, ...Folk Rock?). I don't know how to describe this album. It's sort of metal, sort of rock, but definitely Celtic. Just listen to it, you'll know in the first few minutes if it's for you, or if it's some kind of medieval torture method. I personally find it earthy and grounding and moving. ([links](https://songwhip.com/wardruna/kvitravn2021))
- **Something Old** _Invaders Must Die_ by The Prodigy (2009, EDM). This album takes you all the way back to 2009, but it still stands up really well as an EDM album. It's the signature sound of The Prodigy, and it's got me through some runs/cycles over the past couple of weeks. Maybe it's got me a little too hyped, but is that really a bad thing? ([links](https://songwhip.com/the-prodigy/invadersmustdie))
## Cool Articles
- [How Supergiant Secretly Launched Hades - Developing Hell #01](https://www.youtube.com/watch?v=JzyE9hi912c) (video series) by _Noclip_. Noclip produce really high quality documentaries about video games on YouTube. They've got a multi-part series which covers the development of _Hades_, the most recent game from _Supergiant Games_. They cover the multitudinous efforts required to create a video game which is beautiful to experience and fun to play.
- [Experience: I drink more than 50 cups of tea a day](https://www.theguardian.com/lifeandstyle/2021/jan/15/experience-i-drink-more-than-50-cups-of-tea-a-day) by Yasmin Lee for _The Guardian_. I'm a super nosy person, so articles like this appeal to me. Lee gives an overview of what it's like to be a tea taster. I'm very unsophisticated with my taste for tea (much to the chagrin of my best friend) - but it sounds like a pretty cool job, to be honest with you. You get to make and taste delicious things 🤷‍♀️

View file

@ -0,0 +1,41 @@
---
title: "Tiny Thought: Frontend Engineering is a Fullstack Problem"
author: "Thomas Wilson"
date: 2021-01-31
draft: false
slug: "2021-01-31-frontend-is-fullstack"
tags:
- tinythought
- essay
- fullstack
---
_Tiny Thoughts_ are little (500 word) essays. They're concise.
Hypothesis: Frontend engineering cannot exist in isolation from backend technologies.
What sparked this: Thinking about building the next generation of web software at [Oxwash](https://www.oxwash.com).
All software is either...
1. Used by a human for a human-scale (i.e. nebulous and larger) task like updating a status on social media, download a bank statement, or send a message.
2. Used by other software to complete some computer-scale (i.e. smaller and specific) task like upload a file to S3, compress an image, query a database.
Frontend software is, by definition, the bit used by humans. Good frontend software makes the human user aware of what they can(not) do, and what's going on in the system. How many unread messages do I have? What class do I have at 4pm this Thursday?
This information is communicated in the User Interface (UI). UIs are interpreted by humans. The metaphors and language developed during design then used in UI are intended solely to communicate and explain. Humans can bend, abstract, and change concepts or language. So although UIs _should_ be consistent, they can not be. You can present your blog page as a "recent articles" page, and as a list view for the `posts` table in your database. Both are true, but have different ideas about how "computery" an app is.
When a human tells the UI that they wish to _do_ something, the UI then has to talk to another bit of software. Software cannot bend, abstract, or change its ideas. A blog post _is_ a row in a database. Software has a pre-specified language of things it can do: the Application Programming Interface (API).
Frontend engineering is about working with both APIs and UIs. The skill of a frontend engineer can be proxied by their ability to design one or both. It's a skill because if you make these languages too similar, you risk a UI which is too technical or an API which is too inflexible.
A lot of engineers write code for engineers. I've seen (and written) "clean" code which prematurely optimised and abstracted. This does not guarantee a good Developer Experience (DX) when you actually _use_ the API. Nor does it make the user experience or product quality inherently better.
These are strong code smells if I'm building version 1, or the API only has one consumer.
As a frontend engineers, we have to advocate for users and software, situation depending. We should make better interfaces.
Recognising the need to design singular interfaces (APIs and UIs), and using a shared language is GraphQL's fundamental distinction from REST. GraphQL acknowledges that provider and consumer need to know about each other.
If your product _is_ an API you should think especially hard about clear concepts and language.

View file

@ -0,0 +1,26 @@
---
title: "Things I learned this week #26"
author: "Thomas Wilson"
date: 2021-02-06
draft: false
slug: "2021-02-06-things-i-learned-26"
tags:
- things-i-learned
---
- **This heartening fact**: Altruism, more specifically altruistic behaviour, is an action done (at cost) by an individual for the benefit of another individual. Why do humans, and other social animals, engage in altruistic behaviour? How does it makes sense on the evolutionary balance sheets? There is increasing evidence that altruism is an evolved, or more specifically _phylogenetic_, behaviour and that it is not learned. As social creatures, humans have an innate ability to empathise with each other. It's one of the psychological reasons behind what makes horror films scary and emotional films draining. We're not able to stop ourselves from identifying, and sharing, in the emotional turmoil and mortal dangers we see on the screen. Disney and Pixar have mastered making us feel things for non-human animated things, like toys, souls, and fish. We, individual humans, favour people who have been kind or altruistic to us and we neglect those who have not been. This gives an evolutionary preference to societies where cooperation and bonding is stronger or more common, and therefore where altruism is more prominent. ([source](https://www.annualreviews.org/doi/abs/10.1146/annurev.psych.59.103006.093625), and [PDF Download](https://science.umd.edu/faculty/wilkinson/BIOL608W/deWaalAnnRevPsych2008.pdf))
- **This cubic poop**: The bare-nose wombat poops cuboid pellets. About one hundred little cubes every day - so they're like tiny geometric poop machines. Interestingly, the faeces of wombats in captivity are rounder than their wild-and-free counterparts. This could mean that poop shape is an indicator of overall health and wellbeing. The wombats are the only mammal that make not-round faeces, and to uncover how this even happens some scientists dissected a couple of wombats' intestines. Don't worry, at least one of them was accidentally killed by a vehicle, which makes me wonder if they had the study lined up first, or if it was an impromptu affair? Anyway, the cubic shape comes from the irregular thickness of the animal's intestinal lining. Faeces sits in the intestines for quite some time, while the gut compresses and compacts it to extract water and nutrients. Your guts do this too, by the way, which is cool but also gross to think about. What these wombats have that we (and every other mammal) don't, other than 10x cuter faces, is the ability to compact some parts of the poop harder and faster, and some parts slower and gentler. This difference, somehow idk, produces a shape which isn't a cylinder. Look, if you need some bleach for your mind, just google "bare nose wombat". Here, [I'll do it for you](https://duckduckgo.com/?q=bare+nose+wombat&t=h_&iax=images&ia=images). ([source](https://www.sciencemag.org/news/2021/01/how-do-wombats-poop-cubes-scientists-get-bottom-mystery))
- **This Italian cyclist**: Gino Bartali won the Gira d'Italia (twice) and the Tour de France (once) before the Second World War, and then once again for each _after_ the War. Because he was so well known, during the Second World War he was able to cycle long distances around Tuscany unmolested by newly-Nazi authorities who didn't want the bad press of arresting a local celebrity. Personally I think the Nazis could have made a couple of other, higher impact, decisions if they cared about their public image that much. During this time, Bartali ran messages, photographs for forged documents, and news of raids for the Italian and Jewish resistance groups in the area. In total, these groups helped about 800 Jews escape death, and Bartali himself hid a Jewish family in his cellar - allowing them to escape death. His pivotal role in the resistance at the time largely came to light after the death of Giorgio Nissim, a Jewish accountant from Pisa who died in 2000. Nissim kept details in his diaries. Bartali didn't speak openly about his role, even after The War ended. He's attributed the quote "The good is done, but it is not said. And certain medals hang on the soul, not on the jacket" (though unfortunately I couldn't track down the exact source). ([source](https://en.wikipedia.org/wiki/Gino_Bartali#Rescues_and_Resistance_role_during_World_War_II))
## What I've had on rotation
- **Something New**: _Isles_ by Bicep (2021, EDM). I've been stepping up my cycling training over the past couple of weeks. I'm back on the turbo trainer for interval and sixty-to-ninety minute training sessions three or so days a week. What I'm saying is there's a reason I've got more into EDM this past couple of weeks, despite the fact that we're _still_ in lockdown. This is a great, upbeat (pun intended), electronic album which isn't monotonous but stays optimistic enough for when the going gets tough and the tough get sweaty. ([link](https://songwhip.com/bicep/isles))
- **Something Old**: _When This Is Over_ by Shad (2006, Hip Hop). This is a hip hop album with a heart of gold, full of good intentions, and little narratives. If you "don't like hip hop" then this might be an album to check out. There's little bragging, violence, or general gaucheness that some people associate with hip hop (not unfairly, to be honest). To me, Shad is more of a storyteller who chose Hip Hop music as his narrative. It was nice to rediscover this album a decade after I had it on heavy rotation circa 2011. Both myself and my taste in music have changed since then, but this stands up. ([link](https://songwhip.com/shad/when-this-is-over))
## Cool Articles
This week I've found two beautifully designed, and well considered essays. Sometimes the stars align, and your inbox / random internet wanderings bring you some really beautiful pieces.
- [Newsletters](https://www.robinrendle.com/essays/newsletters) by Robin Rendle. I love newsletters and the independent web. The web should be more about allowing people to do weird, expressive, niche things _just because_. Rendle outlines this much better than I can/do.
- [Designer as Writer](https://stasaki.com/designer-as-writer/) by Stas Aki. (Best viewed on desktop). This is a stunningly designed essay/treatise on the similarities between design and writing. Namely that both are about communicating a clear message and understanding the reader/user. Aki riddles the article with quotes, photos, and examples. It's very good.

View file

@ -0,0 +1,31 @@
---
title: Website Design 2.0 Changelog
author: Thomas Wilson
date: 2021-02-12
draft: false
tags:
- redesign
- technical
slug: "2021-02-12-website-design-2-0-changelog"
---
I've redesigned the blog. This post just covers the technical whats and hows of it all.
## What's changed ?
- **New Dark theme colours**: Look around. Look at this dark purply-grey. Look at the same brand-orange, and the deliciously crisp white text. New colours!
- **100% More Portfolio**: I completely revamped the homepage so that it actually showcases my writing and my work. The content isn't hidden behind anything anymore.
- **50% Less Bio**: I've shortened bios and text on the home page, they made the site feel a lot more static and like a placeholder site than I wanted.
- **Blog Series Highlight**: I've highlighted, and made accessible, certain series on my blog (like my "Things Week I Learned" series). You can now filter for just these posts on the blog page.
- **Personal Brand**: The site sizzles a little bit more with personal brand and little "moments" in the UI. It's a "website experience". This includes little self-aware UI labels which seem very post-modernist and bring me joy.
- **Tags**: I added tags to blog posts. They don't do anything right now though lol.
## Yeah but how?
I bloody love talking about workflows and processes. By brevity here is a mercy and a kindness:
- **Design**: Any and all visual design was done in [Figma](https://www.figma.com/about/). I bloody love Figma.
- **Code**: This site was, and remains, a static site built with [Gatsby](https://www.gatsbyjs.org/) (and therefore on [React](https://reactjs.org/) and [GraphQL](https://graphql.org/))
- **Deployment**: [Netlify](https://www.netlify.com/), and they do a _stunning_ job.
- **Writing**: Everything is Markdown ([markdown is cool](https://thomaswilson.xyz/blog/2021-01-10-an-ode-to-plaintext-notes)). I write with [iA Writer](https://ia.net/writer) for longer pieces (like this) and [Obsidian](https://ia.net/writer) for research and emergent writing.

View file

@ -0,0 +1,19 @@
---
title: "Things I learned this week #27"
author: "Thomas Wilson"
date: 2021-02-13
draft: false
slug: "2021-02-13-things-i-learned-27"
tags:
- things-i-learned
---
- **This seventeenth century petition**: In 1674 in England, a pamphlet was made and published, titled _The Women's Petition Against Coffee_. The women (or alleged women, we don't actually know who wrote this) were fighting against the new trend of coffee houses in London, which had arrived some time in the 1650s. These proto-cafés became political and intellectual hubs in London, just as they had in other parts of the world, where men would meet and discuss all sorts of dangerous things like politics and science. The result was a bunch of intellectual, babbling, effeminate, arty-farty, pull-yourself-together-and-get-in-with-it men who couldn't muster so much as an ounce of passion. Or so say the authors of the pamphlet, who lamented that when a wife of a coffee house attendee "approaches the nuptial bed, expecting a man that ... should answer the vigour of her flames, she on the contrary should only meet a bedful of bones, and hug a meager useless corpse". Ouch. Drinking coffee (unlike it's manly brother, ale) was wasting away their husbands. The chances that the monarchy at the time were trying to iron out the crinkles caused by a civil war several years previous probably has little or nothing to do with this desire to keep people away from places where ideas could be discussed openly. We also suspect that sex workers at the time found custom in coffee shops, so maybe your man's coming home already sexually satisfied and blaming it on all the heady ideas of democracy he's been ingesting with William and Frances at the pub. ([source](https://www.smithsonianmag.com/smart-news/meet-pro-temperance-women-who-crusaded-against-coffee-180965039/))
- **This maybe-gay-maybe-brothers Ancient Egyptian duo**: About 4,500 years ago, during the fifth dynasty of Ancient Egypt Khnumhotep and Niankhkhnum were the royal manicurists. So I guess part one of this thing I learned is that four thousand years ago the kings of Egypt had chief manicurists who would oversee the lesser manicurist. The shared tomb of Niankhkhnum and Khnumhotep was uncovered in 1964. The fun fact here being "shared". Ancient Egyptians buried people together so they could accompany each other in the afterlife. Often families would be buried together, with their servants if they had any. Because obviously one mortal lifetime of servitude is but an entrée to an eternity spent at the beck and call of a rich Ancient Egyptian family. Niankhkhnum and Khnumhotep were both dudes, by the way, in case you couldn't tell from the names. Depictions of the pair found within the tomb suggest the two could have been lovers (they're embracing, face-to-face), which would have made them the oldest recorded same sex couple. Some historians have argued they were brothers, as both are depicted in some frescos with wives a children - all of whom sit forlorn in the background of the frescos, playing second fiddle to the men. Also having a wife and children doesn't mean they weren't... anyway. Honestly, we'll never know unless we all end up in the Ancient Egyptian afterlife, in which case I'll hunt down these guys, get my nails did, and get the tea. ([source](https://en.wikipedia.org/wiki/Khnumhotep_and_Niankhkhnum))
- **This Stuart Little Trivia**: On one of the walls of the set for 2000's Stuart Little, a banger of a film about a family who adopt a talking mouse, there is a painting. [This](https://i.guim.co.uk/img/static/sys-images/Guardian/Pix/pictures/2014/11/27/1417112053124/da55bcb8-cd42-4f13-861a-d346f664d344-540x324.jpeg?width=620&quality=45&auto=format&fit=max&dpr=2&s=02e425e654cdf4836312936b04506c6c) painting. When Gergely Barki, a researcher at Hungary's National Gallery, watched this film in 2009 (with his daughter at Christmas, or so he insists) he noticed this painting and nearly immediately recognised it as one which disappeared from the gallery in the 1920s. Barki had only ever seen it before as a faded black-and-white photograph from a 1928 exhibition, so props to this man for remembering something so well when I keep buying noodles as part of my grocery shop, forgetting I have three unopened packets at home already. The piece, Barki knew, was Róbert Berény's _Sleeping Lady with Black Vase_, an Avant-Guarde. Barki started sending e-mails off to set and production crew for the movie in a bid to find the piece. A meagre two years later, Barki heard back from a set designer who had purchased the painting for cheap at an antiques market in Pasadena, California, specifically for the Stuart Little set. After the wrap, she had taken the piece and hung it in her home before selling the painting to a private collector, who subsequently returned the painting to Hungary to give it back to the National Gallery there. I'm joking, obviously, it was sold at auction for €230,000. ([source](https://www.theguardian.com/world/2014/nov/27/stuart-little-art-historian-long-lost-hungarian-masterpiece))
## What I've had on rotation
- **Something New** _Medicine at Midnight_ by Foo Fighters (Rock, 2021). Dave Grohl, am I right? At only 30 minutes, this short album is punchy, with the distinctive vocals and sonic styling of Foo Fighters. I like the band, but I'm not an authority on them or the genre - so from a casual visitor to the Fields of Rock take a very uncontroversial opinion: this is a good album. ([links](https://songwhip.com/foo-fighters/medicineatmidnight))
- **Something Old** _Donuts_ by J Dilla (2006, Hip Hop). J Dilla was one of the most influential figure in early hip hop in Detroit, if not the world. He pioneered and pushed the boundary of sampling as a musical instrument, finding, shifting, and relaying musicality from samples. [Vox did a superb video on him](https://www.youtube.com/watch?v=SENzTt3ftiU). This album is a great way to connect with what was once the forefront of hip hop. J Dilla died three days after the release of this album (aged 32), and to think of the lost talent and beats is pretty heartbreaking. ([links](https://songwhip.com/j-dilla/donuts))

View file

@ -0,0 +1,132 @@
---
title: "Swift Closures: Inline functions explained by a web developer"
author: "Thomas Wilson"
date: 2021-02-17
draft: false
slug: "2021-02-17-closures-in-swift"
tags:
- swift
---
Hi, I'm Thomas. I'm a frontend engineer who's learning swift. Let's talk about _closures_ in Swift from a very (very) introductory level. I'm assuming you've got some familiarity with JavaScript. You should definitely check out [Apple's documentation on Closures](https://docs.swift.org/swift-book/LanguageGuide/Closures.html), it's _so_ much better than this page but also, like, less funny?
Closures are inline function definitions.
We have inline functions all over the place in JavaScript. Callback functions, including those in promises, are often declared in JavaScript:
```js
// Ever written an express routers?
router.use('/users', (req, res, next) => { .. })
// Ever write a promise?
fetch("https://www.google.com").then((res) => { .. })
```
Like JavaScript, Swift has functions as a first-class citizen. That means they can be passed around like any other variable. That's pretty cool, and if you come from a pure JS background you might not realise it. You might think it's pretty annoying. But it's not. Try filtering a dataframe into a subset in Python using Pandas without the `filter`-like function syntax (don't @ me).
We use closures in Swift in exactly the same use case: when we need to pass a function as an argument to a function. For example, if we are passing a custom `sort`, `map`, or `sorted` function on an array.
In the same mental model that React uses, a SwiftUI View is like a React component: it's fundamentally a function: `f(state) => ui` - UI is a function of state.
Understanding Closures in swift will help you write, and read, SwiftUI examples.
The name's a little confusing. In JavaScript a _closure_ is the scope at which a function is declared and its relationship to the surrounding variables. Coming from JS, I had a little trouble getting my head around them.
## Ground 0: Function Declarations
Defining inline, full-blooded functions in Swift is pretty standard, and could probably be intuited by any engineer with one or two languages under their hat:
```swift
func multiply(number: Int, by:Int) -> Int {
return number * b
}
```
It would be perfectly valid syntax to pass this function around by simply referencing its identifier (`multiply`).
## Removing some syntax
But what if we don't want to have to declare named functions everywhere. Especially if we're literally just going to use it once?
In JavaScript you define the function inline with the same syntax as you would anywhere else. BUT NOT IN SWIFT. Why? I don't know, friend, by let's explore the _what_ not the _why_ first.
Swift comes with a set of **syntactical sugar** for declaring closures. Syntactical sugar is a way of making code shorter or more readable. Syntactical sugar often replaces boilerplate or verbose code, and results in identical functionality to its un-sugared sibling.
This syntactical sugar looks like:
```swift
{ (parameters) -> ReturnType in
// expression
}
```
Let's give a _real_ simple example. We're going to take an array of `Int` and convert it to an `Array<String>`:
```swift
let strings: Array<String> = [1,2,3,4,5].map({ (n: Int) -> String in
return "The number is \(n)"
})
```
## The `in` keyword
This syntax looked odd to me. The key (pun intended) to me grokking it was understanding the `in` keyword. Typically I have only seen this associated with iterators (in languages like python and JS):
```python
# This is Python code
for name in list_of_name:
print(f"Hello, {name}")
```
In Closures, in Swift, **the `in` keyword signifies that we've reached the end of our parameter and return type. Everything after the `in` is the action function expression.**
## Implicit Types for Even Less Syntax
You better believe that's not all the syntactic sugar. There's still stuff we're going to get rid of.
Once we declare types in one place, e.g. in a variable, generic, parameter, then we don't need to duplicate that typing. We _can_ but we don't have to.
Swift is able to find the implied types elsewhere in the code, and therefore we can remove them in the closure.
In the following example the `boastfulString` variable is declared as the `Array<String>` type, so the map function doesn't need to be told twice:
```swift
let boastfulStrings: Array<String> = [10,20,30,40,50].map( { n in return "I have \(n) tacos!"})
```
By using implicit types we can get rid of two redundant parts of the closure declaration.
- **The surrounding parentheses for the parameters:** `(n: Int)` becomes `n`). We can do the same with multiple parameters: Say we had an argument that took three parameters: `(name: String, age: Int, averageScore: Float) ..` could become `name, age, averageScore ..`
- **The return type of the closure**: We know the function needs to return us a `String`, it's in the variable declaration. So `(n: Int) -> Int in ..` can become `n -> ..`
Swift is super ready for you to give it an `Array<String>` and will actually get pretty mad if you dont'. You'll run into compile-time errors with anything else.
## Implicit Returns
Man, talking of redundancies, that `return` doesn't look like it's doing much on that one line there. JS, Ruby, and Rust all have implicit return types - and so does Swift. That means you don't need to use the `return` keyword to tell Swift "this is the bed that the function should hand back".
This is more syntactic sugar: we're choosing conciseness and simplicity over explicit and verbose. Having `return` or omitting it in this example does exactly the same thing. You don't have to like this, or us it in your code. It's your choice, but you should definitely know about it. Also it's probably useful in those scenarios where you _just need something to work_:
```swift
let boastfulStrings: Array<String> = [100, 150, 200].map( { n in "I have \(n) taco!" })
```
Look how concise that statement is.
## Shorthand Argument Names: spend those \$
But we can be more concise.
What else can we get rid of?
That named parameter, `n`:
```swift
let regretfulStrings: Array<String> = [2,4,6,8].map( { "I ate \($0) too many tacos ):" })
```
These are **shorthand arguments**. Where `$0` refers to the first argument in the function. `$1` to the second argument, `$2` to the third...
Now we're _really_ favouring conciseness over explicitness.

View file

@ -0,0 +1,21 @@
---
title: "Things I learned this week #28"
author: "Thomas Wilson"
date: 2021-02-19
draft: false
slug: "2021-02-19-things-i-learned-28"
tags:
- things-i-learned
---
- **This collective noun**: If I was to make a list of small-talk and first date conversation topics it would go something like this: food, the tube, podcasts or books, and then collective nouns for animals. How many times have I been told the words "a parliament of owls" in my life? I don't know, but I love re-remembering every time. This week I learned a new collective noun, and I'm sorry if you heard this one already: a scurry of squirrels. Of also a "dray" of squirrels. But I think "Scurry" is cuter and definitely deserves the headline. ([source](https://www.quora.com/What-is-a-group-of-squirrels-called))
- **This early gay selfie**: This week I came a picture of some early gay rights activist. Two handsome Victorian looking gentlemen holding a sign which read "Not married but willing to be". Which is beautiful in sentiment and heartbreaking in reality. I think it popped up on one of my social feeds, and I hunted it down. It looks like the photo re-surfaced last year when Hugh Nini and Neal Treadwell published _Loving : A Photographic History of Men in Love 1850s-1950s_ ([buy it on Hive (UK)](https://www.hive.co.uk/Product/Hugh-Nini/Loving--A-Photographic-History-of-Men-in-Love-1850s-1950s/25003310)). The Guardian took some of the photos from this piece and published them with some nice art direction on their website. The two un-named gentlemen I saw were photographed circa 1900s in Provenance, USA. Also of note is a very early selfie, entitled "In the mirror" - it's a photograph of two men taken in a mirror with a simply darling 1900s camera on the table between them. In a time when they couldn't have photos taken or developed by anyone (what with homosexuality being illegal), it makes a lot of sense. ([source](https://www.theguardian.com/artanddesign/gallery/2020/oct/16/men-in-love-from-the-1850s-nini-treadwell-in-pictures))
- **This colour**: The browser has some default colours, like <code style="color: black; background-color:white;">black</code> or <code style="color: blue; background-color:white;">blue</code>. Some of them are a little odd, like <code style="color: indianred;background-color:white;">indianred</code> or <code style="color: mediumquamarine">mediumquamarine</code>, but they're there. You can use whatever colour you want in the browser (and people do), but you have to define them with computer-readable code like <code style="color: #BD1A0F">#BD1A0F</code> or <code style="color:#0FBD7E;">rgb(15,189,126)</code>. So being a human-readable colour name isn't the usual or standard approach. CSS comes with <code style="color:rebeccapurple;background-color: white;">rebeccapurple</code>. This colour, which was the colour used in the original branding for Twitch, the online streaming platform, is named in memory of Rebecca Alison Meyer, the six year old daughter of Eric Meyer. Eric is one of the pioneers in standardising CSS, one of the three truly foundational and essential web technologies. This particular shade of purple was Rebecca's colour. After Rebecca passed away from brain cancer, this colour was added to the CSS standard, and so comes with every browser, as a beautiful little reminder and honorary to Rebecca. ([source](https://medium.com/@valgaze/the-hidden-purple-memorial-in-your-web-browser-7d84813bb416))
- **This French translation**: You know pie charts? The worst form of data visualisation (@ me you cowards). In French these can be translated to _diagramme circulaire_ (formal) or _camembert_ (informal). Yeah, it's a funny joke: ha ha the French love cheese they saw a graph and saw cheese \*twiddles moustache\*. But we looked at exactly the same thing and saw pie. What does that say about us? Would you rather have a pie or some fresh bread with a baked camembert and garlic? Learning this fact made me happy, and then made me sad that my culture just doesn't love camembert like the French do. ([source](https://www.quora.com/How-do-we-say-%E2%80%98pie-chart%E2%80%99-in-French))
- **This health advice from Leondardo**: One of the most famous figures of the Italian renaissance, Leonardo was one cool guy. He had a pretty varied mental diet: anatomy, fluid dynamics, natural science, art (obviously), inventing underwater breathing gear, optics, engineering, and so on. In one of his notes he detailed a mixture of mental and physical advice for staying healthy. Go and [read it](https://www.pbs.org/food/the-history-kitchen/leonardo-da-vinci/). The advice is surprisingly modern, reasonable, and holistic. He advises to remain standing after eating, which is [good advice](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3119587/) for weight loss. "Beware anger and avoid stuffy air", the latter of these points is something with a [surprisingly detailed history](https://www.smithsonianmag.com/history/when-fresh-air-went-out-fashion-hospitals-180963710/). Similarly he advocates to "rest your head and keep your mind cheerful". Leonardo understood well that our physical and mental health, our sleep, food, and physical activity all contribute to making us happier. That's not to say it's all good advice: he calls medicine "ill advised", says exercise shouldn't be "too strenuous" so as with everything, take it with a punch of salt. ([source](https://www.pbs.org/food/the-history-kitchen/leonardo-da-vinci/))
## What I've had on Rotation
- **Something New**: _Dark Days_ by Yard Act (2021, Indie Rock). This is a four track EP from a new-ish band from Leeds, UK. It's punk, and genuinely quite funny, painting a really rich portraits of characters in sometimes-singing-sometimes-talking tones. It reminds me a little bit of The Streets in the lyric/narrative blurred line. I am really excited to see the band drop an LP! ([links](https://songwhip.com/yardact/darkdays))
- **Something Old**: _Bits of Naaz_ by Naaz (2018, Pop). This fresh, clean pop sound sounds like happier times to me. It's lovely songwriting and and pleasing melodies. I'm always a fan when someone contrasts obviously drum-machine beats over more organic samples and Naaz does that nicely throughout this album. ([links](https://songwhip.com/naaz/bitsofnaaz))

View file

@ -0,0 +1,38 @@
---
title: "Opinions from 48hr on Clubhouse"
author: "Thomas Wilson"
date: 2021-02-20
draft: false
slug: "2020-02-20-opinions-from-48hr-on-clubhouse"
tags:
- clubhouse
- social-media
---
Clubhouse is a new audio social network platform for iOS. It's basically like having a moderated voice-only Zoom call. The entire network is largely three entities:
1. **Users**: Human beings who use the app. Clubhouse have taken a pretty hard line on non-human (e.g. business) accounts.
2. **Rooms**: Pre-scheduled or impromptu virtual rooms that users can go in. Rooms are where the conversation happens. Only users on the stage can speak to the room. One or many people can be speaking in a room at any one time. Rooms are moderated by a user, who can add or remove users from the stage. Their role is to keep the conversation on track and civil. Everyone else in the room can hear the person/people speaking on the stage. If you're not on the stage, you can't be heard.
3. **Clubs**: Are groups of users. They're like Facebook groups or group DMs.
For the past couple of days I've been dipping into some clubhouse rooms. I've heard discussions on sustainability between small UK businesses, startup advice for new founders, large investors talking about the ecosystem, hiring fairs, language learning, news discussion, and random chats.
The audio-only format is interesting and unique. It's part podcast, part zoom call, part audio-only Twitter thread. I have really enjoyed the relaxed, low-effort format of this. It feels alive and human, but maybe that's my socially-deprived Covid brain talking. I've been very impressed by people's civility (it is indeed still early days and invite only), and I've seen moderators do a good job of keeping people on topic, and stopping spam. I do worry that there's potential for spam and un-civility.
I don't know where this new audio-only format, or Clubhouse specifically is headed. It may very well be a flash in the pan.
I have been _so_ impressed by people's generosity. People have offered sincere and useful advice to startup founders, posed interesting questions, and disagreed with (at least some) civility and generosity.
I wonder how much of this is because the format is new and the audience is self-selecting. I think there _is_ something about the medium:
1. **It's engaging**: Humans are social creatures. We're wired to like the sound of conversations and storytelling. It's how we learn and remember a lot of information. Having the voice of the person making the statement, and not a plaintext tweet (and maybe gif or emoji) does draw attention, and is just easier to interpret.
2. **It's low activation energy**: Having a conversation is the natural and easy thing in the world, so I think people are willing to give more, and more detailed, information. You can't stop to double-check and research (and you're not expected to), and you're not backspacing over your replies to make
3. **It's synchronous**: Twitter, Instagram, and Tik Tok will always bet here with content to present you when you're back. If you miss something on Clubhouse it's gone. When life returns to not-lockdown, this might be incredibly impractical. For the now, a world without meet-ups and informal gatherings, it does a surprisingly good job of re-creating these feelings.
4. **It can be on in the background**: If I'm working on something monotonous which requires my attention sometimes but not always (re-plotting plants, inbox clearing, unclogging my shower drain) Clubhouse has been great to have on the background. My previous go-to here would be Podcasts, but I've become increasingly selective about what I'm listening to and why. There isn't that pressure with Clubhouse.
I'm interested to see where this goes. It does have the feel of a side hustle. It's not low maintenance like Tik Tok or Instagram - they'll put videos in front of you and just ask you to swipe up and down. Will it become like LinkedIn, or will it become something a bit freer? Is it the right time for audio social media, is it even a good idea? Vine failed in the 2010's but TikTok is bloody huge now.
With everything, it comes down the quality of the content. That requires there to be excellent club and room moderation tools. If the team want growth, they'll need to work on discoverability: finding people, clubs, and rooms with certain areas needs to be easier.
I've been doing this for two days, so I'm sort of an expert.

View file

@ -0,0 +1,30 @@
---
title: "Things I learned this week #29"
author: "Thomas Wilson"
date: 2021-02-26
draft: false
slug: "2021-02-26-things-i-learned-29"
imageUrl: "preview-images/29.png"
tags:
- things-i-learned
---
- **This lineage of cats**: Chartwell House, in Kent, England, was the home of Winston Churchill. It's now owned and operated by the National Trust, a British institution, allowing visitors to see the gardens and houses. During Churchill's life, he had a marmalade (white and ginger) cat, called Jock. A few months after Chartwell House was handed over to the National Trust by the Churchill family, the family made the request that there always be a marmalade cat with a white bib and four ginger paws. Presently, Jock VII ([picture](https://nt.global.ssl.fastly.net/images/1431875523698-8.jpg&crop=16:7)) reigns the house, while Jock VI ([picture](https://nt.global.ssl.fastly.net/images/1431772588870-jock-on-steps-website-size.jpg&crop=16:7)) is living in a peaceful retirement with one of the house's staff. The public life wasn't befitting the older gentleman, so the sprightly Jock VII has taken the public-facing duties, allowing his predecessor to take the rest he deserves. ([source](https://www.nationaltrust.org.uk/chartwell/features/jock-vii-of-chartwell))
- **This fact about smartphones**: Smartphones are hella distracting, y'all. Over the past couple of weeks, I've been making a special effort to reduce how much I allow myself to be distracted during work (and other time). We all know that deep work requires uninterrupted time and concentration but that's so... boring. So not fun. And our phones _really_ want our attention. Or to be more accurate, some of the biggest and richest companies in the world are employing some of the cleverest people alive to make us want to spend more of our time, more often, on apps and platforms. And it's working, Instagram is very relatable. In some research which examined the effect of even being _near_ your phone, the researchers found a 10% reduction on working memory (i.e. how many things can you hold in your immediate attention and memory) and Fluid Intelligence (your ability to solve novel problems, independent of previously acquired skills). This was when the participants left their phone in their bag, and were uninterrupted by it, compared to when they were asked to leave it in another room. ([Summary link](https://www.sciencedaily.com/releases/2017/06/170623133039.htm) and DOI: 10.1086/691462)
- **This board game**: CoraQuest is an adorable co-op fantasy tabletop game for up to four people. It was created by a father-and-daughter duo Dan and eight-year-old Cora during the Covid lockdown in the UK. It initially started as a homework project, which allowed Dan to encourage his daughter to do art, creative writing, maths, and computing but evolved into a fully fledged game. If I can step in here a minute and preach the importance of project-based learning... guys it's important and it's practically the only kind of learning we do once we leave school so why is it never really done in school? Dan, who has been a gamer and D&D enthusiast, was able to offer support and guidance to the team, and shared it with other play testers and families during the development. Both families and other game developers ended up pitching in advice, feedback, and even some artistic assets. How encouraging this must have been for Cora! The end result to all this is a Kickstarter campaign which raised £130,000 more than its £12k target, being supported from over 5,000 individuals. This is such a wholesome story, my goodness. ([source](https://www.dicebreaker.com/games/coraquest/news/coraquest-board-game-kickstarter))
- **This fourteenth century witchcraft accusation**: Alice Kyteler was the first person in Ireland to be condemned of Witchcraft. The accusations against Alice ran from spiritual (denying the Christian faith and attempting to overpower the church) to corporal (murdering three husbands) to somewhere in between (having a sexual affair with a demon). I'm actually pretty sad Kyteler didn't leave a memoire behind. Alice's only real sin seems to be a particular taste in men, specifically rich money lenders: she just kept marrying them until they died. Which they did, three times with three separate men. And then she'd marry another one (who also died, more likely than not). What I will say is that at some point around the untimely death of your second and very rich husband, people are going to start getting suspicious. Especially in small town Ireland in the the 1320s. By the time her fourth husband started falling ill, people were pretty suspicious and so naturally accused her of witchcraft. Nothing so fortunate may happen to a woman who is not a witch, so the church said. What followed was a protracted and political attempt to convict Kyteler. Given that she had become so socially prominent (and rich, because of those dead husbands), accusing her and taking her in for questioning was a very difficult affair. Like impeaching someone. The bishop in charge of convicting her was waylaid and even imprisoned while he tried to make the formal accusations. Say what you like about Kyteler (like "this woman is trying to corrupt good Christian men by selling them love and hate potions", true story) but she wasn't a powerless fool. After several months, the church kidnapped and tortured one of Kyteler's servants (Petronilla de Meath), who confessed to witchcraft and implicated Kyteler in the acts. Let's not ask how using torture to extract (almost certainly fake) confessions gives you the moral upper hand. It was a simpler time. Kyteler high-tailed it out of the historical records after that, so it was likely that she was never caught. If she was captured and killed the church would have gloated all over the historical record. She may have fled to England, what a story! ([source](https://en.wikipedia.org/wiki/Alice_Kyteler))
## What I've Had on Rotation
- **Something New** _Super Monster_ by Claud (2021, Pop). I don't know where this new wave of pop has come from. I'd like to say Covid's had us all making music in our bedrooms for the past year but I think we're starting to hear from people who've been making music in the bedroom for the last 4-5 years. Gen Z. I'm talking about Gen Z. I'm new to Claud, their music has a fresh light pop vibe, which is great as we're coming into spring. They're also signed to Phoebe Bridger's Saddest Factory record label, which is a good thumbs up for me. ([links](https://songwhip.com/claud-3/super-monster))
- **Something Old** _Poverty's Paradise_ by Naughty by Nature (1995, Hip Hop). It's old school hip hop, and the intro skit track starts with the sound of a live crowd which we all miss. It even gets better from there, which is great too. This is a real '90s New York Hip Hop vibe, drum machines, reverb, and Nas-style horn sample sequences. They rhyme "everybaaaaady" with "paaaaaahrdy" and tell you to clap your hands but still have a gritty quality to them. ([links](https://songwhip.com/naughty-by-nature/povertys-paradise))
## Cool Articles
- [This tweet from weetabix](https://twitter.com/weetabix/status/1359074254789165059?s=20). A light-hearted tweet that I think did the rounds a few weeks ago. Truly horrifying, I'm not okay.
- [Shit's Broken: Why we need mindful notification and how to design them](https://thistooshallgrow.com/blog/mindful-notifications/) by Clo S for _This Too Shall Grow_. The attention economy is a good way to think about, and make better decisions in, the modern world. It's easy to forget about because people and companies are designing things to stop you thinking about it. Sorry to get all tinfoil hat here. This article was a nice reminder about understanding what is important when all our apps and platforms are telling us that they alone are important. I particularly like this quote from Clo, which I think summarises the problem nicely: "the LinkedIn announcement that someone you dont know started a new job, are given the same importance as an email from your client saying they accepted your budget". The author goes on to talk about how you can just go ahead and turn off anything that isn't important. And if you're involved in making products, design _mindful notifications_ that align the urgency and prominence of a notification with that of its content.
## Fun Things
- [I Miss my Bar](http://imissmybar.com/?utm_source=densediscovery&utm_medium=email&utm_campaign=newsletter-issue-126). It's a dark-noise style machine but with bar sounds. Put it on and pretend you're outside your own house.

View file

@ -0,0 +1,180 @@
---
title: "How to run Xcode tests for a SwiftUI iOS codebase with GitHub Actions"
author: "Thomas Wilson"
date: 2021-02-27
draft: false
slug: "2021-02-27-github-actions-xcode-tests"
tags:
- swift
- github-actions
---
Tl;dr
1. Make sure you've got a repo on GitHub.
2. Make sure you've got at least one set of tests in your Xcode codebase.
3. Create the file below in `yourproject/.github/workflows/main.yml`:
4. Replace the `yourproject`s and `YourProject`s with your file name
5. `git add .github/workflows/main.yml && git commit -m "Add test GitHub action" && git push`
```yml
# Run My App's tests whenever someone pushes to `main` or creates a PR into `main`
name: CI
on:
# Triggers the workflow on push or pull request events but only for the main branch.
push:
branches: [ main ]
pull_request:
branches: [ main ]
# We're only going to have one job, `test` but you can add this
jobs:
test:
runs-on: macOS-latest
steps:
# Checkout the code to the working directory
- uses: actions/checkout@v2
# Install xcbeautify so the logs are human-friendly
- name: install xcbeautify
run: brew install xcbeautify
# Run the tests
- name: Run the xcode tests
run: xcodebuild clean test -project YourProject.xcodeproj -scheme YourProject -destination "platform=iOS Simulator,name=iPhone 12" | xcbeautify
```
## What are Github Actions
They're bits of code you write which are executed whenever _something_ happens on your GitHub repo. These bits of code can do whatever (they're just functions that run on a container), like:
1. Run the tests in your repo (what we'll be doing today)
2. Build an artefact from source code then publish that to a directory
3. Send out an e-mail or hit a web-hook whenever something happens
4. Build your static site and upload it to S3, GitHub pages, or wherever.
If you've used other tools, GitHub actions are like TeamCity, CircleCI, Jenkins, or any other CI/CD pipeline tool, but built right into GitHub. If you've not heard of, or used those tools, [I explain a bit more about it below](#do-it-locally).
## The working parts
We don't actually write "actions", we write **workflows**, which contain one or more **jobs**, which contain one or more **steps**.
The details for a single workflow is written in [yaml](https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html), as common plaintext format used by a lot of DevOps tools.
We put the yaml file in `yourproject/.github/workflows/workflow-name.yml` where `yourproject` is the root directory of your project and `workflow-name` is the name you wish to give the workflow.
There are three root-level yaml properties we're going to set:
1. `name` Is the human-readable name for the entire workflow. Call this "CI" or "Run all tests" or "Send e-mail".
2. `on` configures what exactly needs to happen for this workflow to run. By default, every job and step will run on every event.
3. `jobs` Is a list of the jobs we'll be doing. In this example there's just one: running the tests
```yaml
name: CI
on:
# Triggers the workflow on push or pull request events but only for the main branch.
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: macOS-latest
```
Not how we're telling the `test` job that we're going to run on `macOS-latest`. Github gets us a container running that environment, which is cool.
### Checking out the code so we can access it in our tests
By default, a job in a GitHub action just gives us an empty container, so we need to tell it to copy the code into our current working directory.
There's an easy way to do that: the `checkout` action is a third-party GitHub action that checks out our current working branch to the current working directory. [Here are the Checkout docs](https://github.com/actions/checkout).
By adding the following we make sure we have access to our code:
```yaml
jobs:
test:
runs-on: macOS-latest
steps:
# Checkout the code to the working directory
- uses: actions/checkout@v2
```
### Installing xcbeautify
The default Xcode logs are horrible: they're verbose and unintelligible. Xcbeautify is a CLI tool that formats them to give us more readable useful information.
Luckily the `macOS-latest` platform comes with homebrew, the MacOS package manager, already installed, so we just need to tell our `test` job to install it:
```yaml
jobs:
test:
runs-on: macOS-latest
steps:
# Checkout the code to the working directory
- uses: actions/checkout@v2
- name: Install xcbeautify
run: brew install xcbeautify
```
This step in our job has two things:
1. `name` is a human-readable name, useful for us and the UI in GitHub
2. `run` is the thing you want to type onto the CLI. When that's done, the job will move on to the next step
### Run the Test
The last step in the job is to run the tests using the `xcodebuild` CLI tool. This is actually pretty easy and simple, just make sure you clean-up the names and details in the script below.
Node how we're **piping** (i.e. the `|` character) the results from `xcodebuild` through the `xcbeautiful` command. That's a unix-ism, it's pretty powerful (or so I'm told, I'm just a frontend engineer here).
```yaml
jobs:
test:
runs-on: macOS-latest
steps:
# Checkout the code to the working directory
- uses: actions/checkout@v2
# Install xcbeautify so the logs are human-friendly
- name: install xcbeautify
run: brew install xcbeautify
# Run the tests
- name: Run the xcode tests
run: xcodebuild clean test -project YourProject.xcodeproj -scheme YourProject -destination "platform=iOS Simulator,name=iPhone 12" | xcbeautify
```
### Commit, baby
You're good to go, let's add the file we made to our git repo, make a single commit and push it up `git add .github/workflows/main.yml && git commit -m "Add test GitHub action" && git push`
(We're assuming the `main.yml` file is the one you made, if you called it something different, change that).
### Go check GitHub
Go to your GitHub repo, click the "Actions" tab, and watch with glee.
<h2 id="do-it-locally">Why can't I just run these things locally?</h2>
You can. If you already know why, you can skip this section.
I come from a frontend engineering background, where having test coverage has typically been difficult or different to the backend world. So answering this question is as much about learning facts/words as it is about understanding that the software design, development, and deploy process can be different. I know. I'm sure some engineers are tutting or shaking their heads at me. TUT AWAY, FRIENDS I'm standing in my truth here.
GitHub's actions are part of a broader practice of CI/CD (continuous integration and delivery) in software. The idea of CI/CD is to commit code frequently, and have automated processes in place to detect the introduction of errors to the codebase.
CI/CD can also automate any other previously manual processes, like building, deploying, or publishing software. The roles of CI/CD and automation can grow and expand as your team or product become more complicated. In this example we're just using it to run tests because **well written tests give you confidence that your code does what you think it does**.
As teams grow, having actions run automatically means that institutional and team policies (like having all tests pass before anything goes into `main`, formatting code, running a smoke-test before publish) are adhered to without manual intervention. This reduces the barrier to actually publishing code.
Integrating the CI/CD pipeline right where your code is hosted is different to having a third-party service watch your git repo. It's first-party and also probably cheaper (maybe).
GitHub actions are versatile "something" that triggers these bits of code to run can be:
1. Someone pushes to your `main` branch
2. Someone opens, closes, or comments on an issue
3. Someone creates a PR from any branch to any branch
For a full list, see Github's [full list of events](https://docs.github.com/en/actions/reference/events-that-trigger-workflows) that can trigger a workflow.

View file

@ -0,0 +1,31 @@
---
title: "Things I learned this week #30"
author: "Thomas Wilson"
date: 2021-03-03
draft: false
slug: "2021-03-03-things-i-learned-30"
imageUrl: "preview-images/30.png"
tags:
- things-i-learned
---
- **These no longer fictional bridges**: You know the bridges on the Euro notes? There are seven of them total (notes and bridges) which represent seven different architectural styles. They were originally designed in 2002 and were (at the time) fictitious bridges which didn't exist anywhere - so that no country felt special or left out. Robin Stam, an architect from the Netherlands, has gone ahead and designed and built them all irl, for cyclists to use. The money willed these bridges into existence, which is cool. [source](https://www.atlasobscura.com/places/euro-banknote-bridges)
- **This mis-attributed quotes on 2021 coins**: The Royal Mint is releasing a set of £2 and 50 pence pieces in 2021 with quotes from Lewis Carol's famous _Alice in Wonderland_. It turns out that the people who chose the quotes didn't check their sources, and ended up using quotes from adaptations and derived work. They went onto Goodreads and copy-pasted, so from what I can tell The Royal Mint is run by thirteen year olds who left their homework until the last minute. I support the notion that we should never let a fact get in the way of a good story, so I think this is marvellous on one level. Maybe it'll be like the bridges and a Dutch architect will come and re-write Lewis' work for us. There you go, there's your coin trivia and your callback gag - this one's a twofer. ([source](https://www.theguardian.com/books/booksblog/2021/mar/01/off-with-their-heads-why-are-lewis-carroll-misquotes-so-common-online))
- **This Geocache**: I know about geocaching, but I don't _know_ about geocaching. I don't get it. The idea is simple: hide something somewhere (public or out of the way), then tell a select few people on the internet where to find it. You can also go find the things that people have hidden. It's like Pokémon Go but with real things (lame). One of the engineers who worked with the Perseverance rover (who has now landed safely on Mars, which is pretty cool) is into geocaching. As an homage to this, the team have printed a Geocaching tag (like a unique identifier) on the calibrating tools for the rover's equipment. When Perseverance gets to mars, it will take a picture of this equipment and send it back to earth - and that's the code people can use to tag/find/achieve (I don't know the lingo, sorry) the little cache. The question for me is if this is still geocaching, an not marscaching (marcaching?) ([source](https://www.geocaching.com/blog/2020/07/geocaching-and-nasa-head-to-mars-with-the-perseverance-rover/))
- **This heartening panic fact**: Although mass panic and hysteria _did_ define the early reaction to the Covid-19 pandemic, at least in the UK (couldn't get flour or toilette paper anywhere), panic isn't actually the common or expected response to disasters. It's fun to stereotype and be pessimistic but the social normals that have emerged during Covid have been around patience, space, and understanding. The language we use can be direct (there is a pandemic wear a mask) or indirect (things are tough at the moment), but these qualifiers are normally followed with "so let's do something good". Yeah, we all get a bit annoyed sometimes and some people can't seem to understand making the slighted accommodation for others, but if you think about it - we've done an alright job (except for the bit where we caused and then did not contain a pandemic). The interesting question here is actually why people act so generously, cooperatively, and altruistic during a disaster (like a pandemic, fire, or other natural disaster). From a purely game-theory perspective, acting in your own self interest during a crisis or resource shortage _does_ make the most sense. Social creatures that we are, we're likely to copy these behaviours when we see then, but why are these norms short lived, not sustained? That's the interesting research angle from this crisis, I think. ([source](https://www.nature.com/articles/s41562-020-0884-z.#Sec7))
## What I've Had on Rotation
- **Something New**: _Bach: The Cello Suites - Recomposed by Peter Gregson_ by, err Peter Gregson (2018, Classical). Bach wrote some banging cello suites, you definitely recognise Cello Suite 1 (famously in G Major). Gregson takes on the ambitious task of reinterpreting Bach's cello suites, and I don't know enough to explain why, but this album is stunning. It feels fuller, more harmonic, and less performative than the originals. Where the originals might be a spectacle, this album is immersive and surrounds me when I'm listening. It's a good album to write to, and also a wonderful way to justify any expensive headphones or speakers you've bought yourself. ([links](https://songwhip.com/peter-gregson/bach-the-cello-suites-recomposed-by-peter-gregson))
- **Something Old** _10 Things I Hate About You Soundtrack_ various artists (1999, rock?). I recently re-watched _10 Things_ which is genuinely a really good film and everyone should (re)watch it. I was taken by much I loved the rocky soundtrack. Ugh, Barenaked Ladies, Spiderbait, Letters to Cleo... it's nostalgic and grungy. Just listen to it ([Spotify playlist](https://open.spotify.com/playlist/1nEkyAwvRpjWeCTl1Vdn0x?si=fpnAu3J5TiGkSm_dcLeHDA) and [YouTube Playlist](https://www.youtube.com/watch?v=4fYAy7CLj0c&list=PL5CF9943C2ACF125B))
## Cool Articles
- [Brené Brown on Empathy](https://www.youtube.com/watch?v=1Evwgu369Jw) (VIDEO). A really nicely illustrated reminder about empathy. A little ABC but also a good thing to be aware of. Be kind, y'all.
- [Taste for Makers](http://www.paulgraham.com/taste.html) by Paul Graham (San Francisco and Silicon Valley darling). I've been asking the questions "how do I design a good product" lately. It's a hard question to answer, and one of the fundamental (but un-actionable) points is about taste. Ira Glass' famous quote [The Gap](https://www.thisamericanlife.org/extras/the-gap) covers similar ground.
## Cool Things
- [doodad.dev](https://doodad.dev/). If you're a software engineer or web design geek this is a very pleasing collection of utilities. I love the early Mac callback.
- [iOS Icon Gallery](https://www.iosicongallery.com/). A collection of iOS App Icons, for design inspiration or general perusing. Some of them are very pleasing.

View file

@ -0,0 +1,64 @@
---
title: "The Frustrating Mismatch of Design by User Journey but Build with Components "
author: "Thomas Wilson"
date: 2021-03-06
draft: false
slug: "2021-03-06-design-workflow-build-components"
imageUrl: "preview-images/question-mark-exclamation.png"
tags:
- design
- ui
---
How do you design a good app?
It's a charmingly amateurish question, but I've spent the past five years primarily trying to design and build web apps and I don't know the answer.
I regularly get sick of looking at my current and old designs and ask "why don't these look like a competent adult made them, and can I make them actually good?". I'll typically then do two things:
1. Go to Dribbble and meander around until I find things that look vaguely like what I want and then get frustrated that these mockups are so simplified and informationally un-dense they're only partly applicable to my current situations, and
2. Do a web search for "how to design good UI", then get given countless "seven tips to improve your UIs" and "UX fundamentals for UI design" that will tell me that a UI is basically just colour, spacing, and typography which, yeah true, but is incredibly unhelpful in the abstract.
These are two vastly different types of data: one is a finished product for an often fictional or simplified use case, and the other are abstract design principles. Mushing those things together to understand, critique, and then be able to produce your own design _is_ the skill of becoming a better designer. It's not intuitive or easy and you can't just search for the answer on the internet.
## Build in Components
But as an engineer I want to, because that's how I find a _lot_ of my answers. That and doing it wrong the first time.
Being an engineer I build web, and more recently mobile, interfaces. Both of these technologies have been moving towards the component-model: building self-contained little _things_ or _widgets_ that are composed together to make bigger things, like screens and applications. React, Vue, Svelte, and Angular all use this model. SwiftUI introduced it for iOS and Swift, and Jetpack Compose (seems) to do the same for Android and Kotlin.
This component model is declarative. I'm not 100% convinced I actually know what _declarative_ means because I am not a clever man, but broadly I think of it as `f(state) => ui` - which is to say that the UI is a function of state. Given some data, this is what the UI will look like. You get to say "when the data looks like this, do that with it". For example if an item in a list is selected, make sure this text is underlined, or this string in the cart should be the total cost of every item in the cart with the `£` character put in front of it.
Components as a first class citizen in building UIs lends itself really well to encapsulation: a component should care only about the data that it needs to present information to the user, and contains the complexities of any internal interactions or logic. It doesn't need to be aware of anything else.
Let's illustrate this with a button (I'm sorry, I know it's tired and over-worked, but it's simple). Imagine we have a Button component that only takes two bits of data (like a prop, or an input, or an argument): a `label`, the text that goes in the button, and an `onClick` function to describe what happens when a user presses/clicks the button. The benefits of encapsulation work for everyone:
1. The button only has to do what it needs to do. It doesn't care if a label comes from an internationalisation (i18n) file, a database, or generated dynamically when the user does something (like added above £100 worth of products to their cart).
2. The page / larger component (like a molecule in Atomic Design) doesn't need to contain boilerplate code about rendering and event-handling for buttons. If I had four buttons on a screen (which, let's just be clear, _would_ be madness) the page they're on doesn't need to worry about anything but finding a label and an event handler.
These are really great benefits for the engineers building UIs and web software. They can make code easier to understand, more consistent throughout the codebase, and more separated. These are not guaranteed (I can make any code into spaghetti, honestly it's a super power) but they are easier to achieve with this component-first idea of software architecture.
## Design in User Journeys
But that's not how the user of a UI thinks about buttons at all. Nor is it helpful when you're trying to design your app. The buttons on a screen let our users, guests, customers, patients, staff, _whoever_ achieve something. And as a designer thinking about the specifics of the button is part of the job, but it can't be done in isolation to every other part of the web page.
It's so easy to find good advice on building components in code. There are tricky conversations to be had about them, about how to extend them and manage them as the complexity grows, but that advice is pretty specific and concrete. It is so much harder to get someone's opinion on figuring out how a button integrates with the Sign Up page, a "buy now" button on a product card, a "add two factor authentication" button, or a "request help" button. These are questions about the purpose and intention of the app you are building.
We are taught to build at the focused and specific level of components, but to design with with _so much more_ information in our working memory. What screen am I on, how did I get here, and where can I go? How do I know if my data is saved or (in)valid? What does it look like if I'm browsing versus editing? If these questions aren't answered properly it creates this weird jilted UI and UX experience as I move around a product. Seeing a mocked up screenshot from a single state of a single page on Dribbble is never going to help me answer these questions, no matter how pleasing the curves, shadow, and pastel colours.
## The Frustration
I have experienced (and witnessed) the bike shedding meets deer-in-the-headlights moment of designing a new app or website where you're terrified to make decisions about the label placement on your forms. It genuinely stops me from making decisions and moving forward, especially at the beginning, when your app is an idea and a mostly blank Figma file.
The form inputs aren't important, but they are when they represent 50% of the screens you have currently designed. I have been terrified to move on from designing my sign up screen until I have perfected the form and form input components. Because I was so aware that they're components: they'll be used everywhere. They are perfect lego blocks and if I get them wrong here _everything_ will look terrible.
My fixation (or obsession) with designing by components has limited my ability to focus on anything bigger. But as a user, my fixation on the flow through an application will stop me noticing anything smaller. Yeah, the onboarding was confusing, and I can't figure out how to access my profile page but _holy smokes_ have you seen the border radius on the cards and the top navigation? They match perfectly!
No matter how perfect your button is, it's not going to salvage an app with competing or confusing Calls to Action, with disjointed screen layouts, mixed metaphors, or obscured ideas. Similarly, the UX conventions of colour, spacing, and typography won't help you answer these questions. Yet if you don't build a system around these basic elements, the visual clarity and rhythm of your UI as a whole _will_ suffer.
Similarly, if you don't build your codebase with well encapsulated components, you're going to have a real hard time modifying and extending your app's code.
Designing an app demands that we ask questions about the app, not the components, that we see the entire blueprint. Building components demands we exclude all thoughts about the app at large and focus solely on this little corner, this one detail. This is the titular frustration of having to build in components, but design by user journey and flow.
That's it. That's the end of the article and I'm sorry I can't close with a unifying theory, or three step framework to build perfect UIs every time. I just want to build actually good apps, and it's difficult, ya know? The context switching between design and developer brain is hard.

View file

@ -0,0 +1,27 @@
---
title: "Things I learned this week #31"
author: "Thomas Wilson"
date: 2021-03-13
draft: false
slug: "2021-03-13-things-i-learned-31"
imageUrl: "preview-images/31.png"
tags:
- things-i-learned
---
This week we celebrated International Women's Day. My love and support goes out to anyone who identifies with that label. Let's keep pushing for fair representation and pay, acknowledgement of domestic labour as work, and maybe some systemic government-backed support for domestic abuse victims and sex workers that doesn't involve the police where it's not necessary. Anyway, here's a funny [a bit by Iliza Shlesinger](https://www.youtube.com/watch?v=o3XxRrfoPYE) that I love.
- **This hijab-wearing model**: Halima Aden is a Somali-American model who first came into popular attention, aged 19, in 2017 when she walked at an event for Kanye West's _Yeezy_ brand. She also won Miss Minnesota, and was the first hijab-wearing woman to do so. She was described as a "different beauty" and honestly, it's [easy to see why](https://duckduckgo.com/?q=Halima+Aden&t=h_&iax=images&ia=images). Earlier this year, Aden announced that she would be leaving the fashion industry after feeling like she was compromising her religious beliefs. Aden represented the figure head of "Modest Fashion", a recent movement by western fashion labels to design looser fits and bigger silhouettes, in line with some cultures' expectations of modesty in the way (mostly women) dress. There's a pretty difficult conversation to be had here about the western/European/American perception of modesty as oppression, and the religious foundation of modesty. Fundamentally though a woman (and any person) should be able to chose what they wear and how they would like to show/cover their body. That just seems like a human right. Aden is a cool example because she's standing by her beliefs, despite the success she was seeking and following (almost 1.5m followers on the 'gram). As a younger, and newer model, in a famously cut-throat and often problematic industry, it can't be easy to make those decisions, or to speak out. Good on you, Halima. ([source](https://www.theguardian.com/fashion/2021/mar/04/the-pressure-is-to-appear-normal-the-crisis-in-modest-fashion))
- **This reason to stop talking**: I'm sure many other introverts can relate to the scenario: you're talking with someone you don't know particularly well, or maybe professionally, and there's a little voice in your head that's like "dude why are you still talking?". Well I hate to feed your insecurities but that voice has a point, y'all. In some research involving 252 strangers who were paired up randomly to talk (they were given some task to complete but told that they can chat for as long as they want before they started), a Harvard study found that only 2% of couples both agreed that the conversation was the right length. That's like two of the 126 couples. 69% of participants wanted the conversation to be shorter (preach, sis), and said that the conversation could have been about half the length. My advice from this research: wait until your new conversation partner is half way through a sentence and stand (if you're standing, try crouching suddenly) and say that it's been fun chatting but you don't want to bore them. In earnest though, don't be afraid to cut a conversation short if you feel it's dragging: the feeling might be mutual. ([source](https://www.sciencemag.org/news/2021/03/when-should-you-end-conversation-probably-sooner-you-think))
- **This reason to not give anyone any certificates**: You can be motivated by two types of influences: internal or external. Internal motivations are ones you make yourself: you want to do something because you enjoy it. External rewards are given to you by others: you want to do something because you'll get paid, or get an award. Internal motivators are stronger that external ones, the presence or expectation of an external validation (like a certificate) isn't enough to make us want to do something as much as if we ourselves decided we wanted to do it. The distinction between these two things isn't clean, in turns out. By providing an external reward for a behaviour, even if it wasn't expected or explicitly stated, you can reduce someone's intrinsic motivation for that thing. In one study, children were asked to pick any activity they wished (like colouring in), and were later given a reward for it (a certificate with a gold seal and a bit of ribbon). After doing so, children were less likely to chose that activity freely (i.e. without expectation of an external reward). As one 1999 meta anlysis states, "even when tangible rewards are offered as indication of good performance", they typically decrease intrinsic motivation for interesting activities". Given how powerful internal motivations are in allowing us to live a fulfilled life, the authors suggest instead focusing on highlighting how completing or performing a task helps us feel fulfilled. Reminding someone of how they felt during, or after a task, for example. This is an almost counter-intuitive way of thinking about things, we're so keen to give feedback and praise and recognition (and scholarships and grants and jobs), where this could be damaging the processes that actually go into the performance. ([source](https://pubmed.ncbi.nlm.nih.gov/10589297/))
## What I've had on rotation
- **Something New**: _Organ_ by Dimension (EDM, 2021). This is a safe space and I need to not be judged. This is a pretty four-on-the-flour Electronic/House/DnB album which I just love. It's perfect for running and cycle training at the moment, especially as I'm trying to shed the sludge that comes from winter and my complete inability to resist Christmas chocolates and sweets. It's got that old 2007 Pendulum vibe that I remember listening to on my first MP3 players. ([link](https://songwhip.com/dimension/organ))
- **Something Old**: _Temple_ by Matthew And the Atlas (Folk, 2016). Matt Hegarty, the lead singer of this band, has a distinct voice with a lovely tomber. Hearing this album again brings me right back to 2016, and writing my Ph.D. There's also an unplugged/acoustic rendition of this album available, which I recommend heartily. They're a great mix of indie rock and folk, and the sister acoustic album means that it can fit every mood. ([links](https://songwhip.com/matthewandtheatlas/temple))
## Cool Articles
- [Things I Made that Sucked](https://www.swiftjectivec.com/things-i-made-that-sucked/) by Jordan Morgan. This little self-critique _slash_ reflection from someone who's designed and built indie apps for a while is nice. It doesn't take itself too seriously, and isn't preachy, it feels honest. If you're a maker of anything, you too have made things that suck, and I like that articles, like this, can normalise things like that.
- [Stop Keeping Score](https://www.theatlantic.com/family/archive/2021/01/checklist-achievements-happiness-boxes/617756/) by Arthur C Brooks for _The Atlantic_. A nice short piece by Brooks which reminds us that we don't have to achieve our "30 things before 30" lists. A fact I find heartening because I've only got ten months left before I hit thirty and man this pandemic isn't going anywhere in that time. Anyway, a nice reminder that we can do our best work, be ourselves, and enjoy what we do without a prescriptive list.

View file

@ -0,0 +1,28 @@
---
title: "Things I learned this week #32"
author: "Thomas Wilson"
date: 2021-03-20
draft: false
slug: "2021-03-20-things-i-learned-32"
imageUrl: "preview-images/32.png"
tags:
- things-i-learned
---
Following on from International Women's Day last week, news of Sarah Everard's body being discovered broke on the 10th of March, a week after she went missing from Clapham, London. There have been subsequent vigils (and protests) to remind us all that [violent and sexual crimes against women are under-reported and under-convicted](https://www.who.int/news/item/09-03-2021-devastatingly-pervasive-1-in-3-women-globally-experience-violence), and that any fair and just society needs to build systems that don't let people think (let alone know) that they can hurt or sexually assault another person and probably get away with it. It's a bit of a rough or tone-deaf transition, but let's look at some things I learned this week:
- **This charmingly pre-covid advert**: I stumbled across [this advert](https://preview.redd.it/7bip7x8yl5m61.jpg?width=960&crop=smart&auto=webp&s=861e8a1096d8b66130f925d70743c018b35e3afd) for Choices Hotels, which asked (presumably sometime in 2019) "What's your 2020 Vision". Imagine giving your 2021 answer to this question to anyone from 2019, it'd sound fifty shades of dystopian. My 2020 vision was mostly the inside of my house, and being genuinely excited when I could eat dinner outside or go for a walk (also outside). Anyway, what's your 2022 vision? Rats? Locusts? Black Mirror but it's real life? Personally, I'm hoping the dead rise and consume us all.
- **This surprise concert**: Yo-Yo Ma, the famed American cellist, recently received the second dose of his vaccine (he's 65, which is pretty cool). He briefly set up shop in the waiting room of the vaccine centre for about 15 minutes, to play for the people waiting for their vaccines. As a classical musician, Ma has probably missed performing live to people, so I imagine this wasn't just a joy because he had received his vaccine. ([Guardian video](https://www.youtube.com/watch?v=BWWzmha1_jE))
- **This forbidden confectionary**: It's illegal to buy or sell chewing gum in Singapore. You can buy prescription gum (like nicotine gum), but you have to get it from your doctor. Why is it illegal? Train vandals, that's why. In 1987, the government in Singapore funded a \$5b railway system, and people kept vandalising the door sensors of these trains by sticking their gum to them. So the government looked around, at their gum covered pavements and train sensors and thought _enough is enough_ and outlawed the buying and trading of chewing gum. The total ban was lifted, to allow for medical exceptions, in 1992 when Wrigley, of gum manufacturing fame, lobbied the United States government to explicitly name gum in a legal free trade agreement (the USS-FTA) between the two countries. Despite the country of Singapore having a population of some 3.2 million in 1992 (which would have been about half the population of New York City), the company defended their position. Likely because they didn't want any other country looking over at Singapore's infamously clean train sensors and asking if they should do the same. ([source](https://en.wikipedia.org/wiki/Chewing_gum_sales_ban_in_Singapore))
- **These wine merchant scales**: Lord Byron was one of our first celebrities, namely a poet and a scoundrel. Byron as obsessed with his weight and would travel, sometimes multiple times a day, to Berry Bros. & Rudd, a wine merchant in Covent Garden, to use their scales to weigh himself. Berry Bros. & Rudd also happens to be the oldest wine and spirit merchant in the UK, being founded in 1698, by the way. It being the early nineteenth century these scales weren't the little box that you stand on and look down at, hope in your heart, but rather giant versions of kitchen balancing scales, used for weighing wine barrels. Byron's weight reportedly varied from around 9st to 13st, and he appeared to have yo-yo'd in weight for most of his adult life, starting at Cambridge University and up until his death (at age 36). With scales being so inaccessible, to know how much you weighed was itself a status symbol - and apparently, various members of the gentry (men and women) had their weights recorded in Berry Bros. ledger, though these records haven't all survived. ([source](https://hekint.org/2018/10/05/lord-byron-and-his-strange-relationship-with-food/))
## What I've had on Rotation
- **Something New**: _Evering Road_ by Tom Grennan (2021). Grennan's slightly gruff but clear vocals remind me of Dermot Kennedy or James Bay (in his first album). Evering Road is full of poppy ballads and I hope this comes to be one of my albums of Summer 2021. ([links](https://songwhip.com/tom-grennan/evering-road))
- **Something Old**: _What's Going On_ by Marvin Gaye (1971). My father actually recommended this one on his Facebook page and blog. This album is such a beautiful re-discovery, Gaye was just a talented man, the vocals, instrumentals, and production sit just right on this album. Seriously, the sax in _Wholy Holy_... my goodness. ([link](https://songwhip.com/marvin-gaye/whatsgoingon))
## Cool Articles
- [The Future of Group Messaging](https://thejarren.com/group-messaging/). This is a really great piece about the UI and UX of modern group messaging. There's not a lot to distinguish between how we communicate these days, but various platforms bring their own ideas of what is (not) important. Some focus on instant messages (WhatsApp, iMessage), inboxes (e-mail), or group chats (Slack). Most of these paradigms result in a user experience which is either a) a 90's-style online forum, or b) iMessage/Messenger chat bubbles. These don't reflect the way we do group messages these days: where four people are having three conversations at the same time but one of them is important. As a persistent de-railer of conversations, I contribute to the chaos this post tries to solve, by arguing for a better (more first-party and actually useful) threading metaphor, to allow these conversations to happen in parallel.
- [The edge of our existence: A particle physicist examines the architecture of society ](https://thebulletin.org/premium/2020-12/the-edge-of-our-existence-a-particle-physicist-examines-the-architecture-of-society).

View file

@ -0,0 +1,76 @@
---
title: "Dash Cycle #00 - The Beginning"
author: "Thomas Wilson"
date: 2021-03-21
slug: "2021-03-21-dash-cycle-00-the-beginning"
draft: false
tags:
- dashdot
- buildinpublic
imageUrl: "preview-images/C00.png"
---
Hello. I'm building an app called Dash Dot, it's a native iOS app for interval training that is a) well-designed, and b) privacy- and utility-focused. This post covers the first (approx.) six weeks in designing and building the app.
I've never made a truly native app before (I have written things in React Native before, though), nor have I ever successfully released a product to the world. Maybe this will be the time 🤷‍♀️
I want to #buildinpublic so this is a proto-changelog for a product that I'm hopeful will exist one day.
**Cycle?** I don't like the "sprint" terminology that agile practices use to describe how features are developed. Nobody sprints all the time, that's ridiculous, and building a product is a long slow burn. Also, I don't have a product to iterate on, I'm currently working forwards from "wouldn't this be a good idea". I need longer than two-week springs to make a difference. In line with Basecamp's six-week "bets" and Linear's "cycles", I want to work in _cycles_, as in lunar cycle or life cycle: longer (six-ish) periods of work where I focus on broader goals.
This cycle (#0) lasted seven weeks:
- Started: 2021-02-01
- Ended: 2021-03-21
## What do I have right now ?
- **An idea** of what I want to build, how it offers value, and a route to monetisation
- **MVP Features** that I want to build before I release (into Test Flight), and a rough shape for the functionality I want to add on after that.
- **A very messy Figma file** that needs tidying up but _does_ contain screens for a lot of the app: dashboards, timers, config pages, profile pages.
- **A working swift iOS app** that lets you configure a timer and do some very primitive navigation
## What have I done that I'm proud of?
- Decided to make this app, don't overlook that
- Learned a _whole_ lot about Swift and iOS development. I don't think I'd written any Swift code before 2021, and I've spent the past four years building predominately frontend web software in JS/TS, so I'm pretty proud of this.
- Visually designed and prototyped the principle workflow for creating a timer, completing it, and viewing your account
- Created code that travels the entire vertical stack (i.e. end-to-end) that allows a user to create, save, update, and delete a timer
- Toyed with JIRA and Linear for project management
## What went well?
- I actually built something, I have an idea of the product and I have the first few screens that make this a little bit closer to a reality. That's a cool feeling
- Rapid low and medium fidelity UI prototypes and iteration. I didn't waste too much time wanting to get the perfect UI done before I started, so I've built with a very Spartan UI in Swift, but have worked in parallel in Figma to know what the content (if not the presentation and layout) of my screens will be.
- I'm proud to be focusing on UX and UI that actually makes sense for humans. I tried a lot of competitor/existing interval timer apps and wow are they non-intuitive. They just expect you to poke around, do things without confirming them or making clear what they're about to do, and have unclear iconography and buttons. I'm happy to be building and designing an app that takes these things seriously.
- Early validation of the idea from discussing it with friends (which isn't real validation, I know)
## What didn't go well?
- **UI Design != software design**. Although the two relate closely, I made the mistake of tying my initial software design to the UI/UX design. Although the two should be similar, they shouldn't be identical. I made my code too strict and tightly linked to the UI implementation. I have been working to combat this in more recent code design.
- **Better code design** I should make more effort to design systems on paper _before_ I start coding, not code > get stuck > design > delete & rewrite code. Obviously, you can't just plan to the exclusion of coding, but you can spend 10-15 minutes getting your ideas on paper, yeah?
- **TDD**. Related heavily to the above: I tried to use test-driven development (TDD) from day 0, but it made it hard to prototype and change things. Maybe if I was a better engineer I would have designed a better system from the get-go, but my style of doing things is a little more "let's see what happens if I do this". - I ended up designing and building one system, then splitting it out, dividing it, and re-naming parts which made my tests redundant and all fail, so I'm basically going to have to go back and re-write tests for everything - This may not have been the best approach - slowly refactoring code and tests in parallel would probably have been a good idea, but I decided I'd rather just go ahead and write the code instead. If this was an established app in production I would definitely have done code and tests together.
- **Writing in a new language**. I'm having to learn about both Swift and iOS development _as_ I construct the app itself, so there have been several sizable re-shuffles and re-architectures
- **A messy Figma File that's hard to navigate**. I haven't settled on a UI/UX design, there's been a lot of iteration - which means the business components exist but the UI components are _very_ minimalist and industrial (read: bad)
## What has been most challenging?
- Learning a new language (Swift) for the development
- Learning and implementing the architectural patterns for iOS development (e.g. Model-View-View Model)
- Having to learn the entire vertical stack before building a feature: persistence, animations, layout & styling, etc. The process feels a lot more like full-stack engineering than frontend, despite thinking otherwise as I went into this.
- Shifting from the predominately functional style of building React applications to the more Object-Orientated way in Swift.
## What do I do next?
In order, here are the things I want to do in the next cycle:
1. **Finalise the current architecture and add tests**: The code that lets you create and configure a timer is functional (it walks), but I can probably do some tidying. In fact I can definitely do some tidying. I absolutely want to have tests in my code, even if TDD didn't work out this time and I've had to write code _then_ tests, that's still preferable to writing no test.
2. **Solidify the design**: I've got a lot of possible UIs and medium-fidelity prototypes, with various colour schemes and mental/visual metaphors in my current Figma file, I need to settle on the Colour Palette & Design Tokens so that I can build consistent UIs. I need to get rid of old ideas (I'll probably move them to some kind of 'Archive' part of the file so that I can go back to them later). This should create a consistent UI and UX across the various user journeys.
3. **Allow someone to complete a timer**: Design the architecture and UI that would allow someone to select a timer they have made, and actually complete it
4. **Buy some domain names**: I need to start thinking about the keywords and handles I'll be using online
5. **Decide on JIRA vs Linear**: How to manage software development? What an ever-turning wheel
Note the lack of marketing and advertising here? I'm aware that this should start early but I don't want to do anything until I'm sure that I'll have something that I'd be happy letting someone else use.
Hopefully, Cycle #1 will last from now until the beginning of May 2021, but I also expect it could last longer. Right now it's about making ideas solid and building code - and that happens when it happens.

View file

@ -0,0 +1,25 @@
---
title: "Things I learned this week #33"
author: "Thomas Wilson"
date: 2021-03-26
draft: false
slug: "2021-03-26-things-i-learned-33"
imageUrl: "preview-images/33.png"
tags:
- things-i-learned
---
- **This cassette revival**: Last year's (2020's) sale of tape cassettes, the 90's mainstay of car sound systems and OG Walkmans (Walkmen?) were the highest they have been since 2003. An increase of 94% on 2019. Despite having inferior sound quality to CDs and vinyl, the medium is a lot cheaper and easier to produce which means a lower initial investment and potentially higher profits, which is great for indie musicians. Especially given how reluctant modern streaming services are to pay musicians and livable or useful fee for their streams. The global pandemic has made it a lot harder for musicians to tour, and a the related economic recession has made shifting merch a little harder. The sudden demand for cassettes is part of the "you can't hold a digital download" trend which has seen a resurgence in tangible, physical things. It makes sense, if you love music or artists, then you want things that resonate with that belief: band Ts, a vinyl collection, a feeling of belonging, ya know? ([link](https://theconversation.com/audio-cassettes-despite-being-a-bit-rubbish-sales-have-doubled-during-the-pandemic-heres-why-157097))
- **This money making chimp**: Raven, who is a chimpanzee, is the most successful chimpanzee on Wall Street. In 1999, she created an index fund by throwing darts at a list of 133 internet companies. The fund saw a 213% return on investment, outperforming thousands of professional Wall Street brokers. So here's your reminder that humans like to construct stories and narratives around what is actually chaos, and like to believe that we have more control than we actually do. Anyway, yeah, Raven the chimpanzee. ([link](https://www.guinnessworldrecords.com/world-records/most-successful-chimpanzee-on-wall-street))
- **This paper computer**: _Magic: The Gathering_ is the oldest collectible card game, which had its first set of cards released in 1993. There are literally billions of _Magic_ cards in circulation right not, which is cool. It's actually a really fun game, you should totally play some time. Anyway, _Magic_ is technically Turing Complete, a term used to describe a machine that can take and perform any arbitrary computer algorithm, i.e. any set of arbitrary instructions. This means that (practicality be damned) _Magic: The Gathering_ can perform anything that most programming languages could. The authors of the cited study acknowledge that using this technique might be possible but in practice "may effect an individuals ability to successfully execute the combo due to concerns about the sheer amount of time it would take to manually move the tokens around to simulate a computation on a Turing machine. This would not be a concern for two agents with sufficiently high computational power" so I guess we should just let the robots play the game for us now. ([source](https://arxiv.org/abs/1904.09828)).
## What I've had on rotation
- **Something New** _TIME_ by Jess Gillam (Classical, 2020). Gillam is a classical saxophonist, and this album is a collection of modern classical pieces. It's all really beautiful. It contains the (rightfully) popular _On The Nature of Sunlight_ (Max Richter) and _Dappled Light_ (Luke Howard) which act almost like the gateway drugs for lesser known composers and arrangers, and the result is an album which really fills the space without ever feeling cramped. I am far from a classical music person, and definitely not a saxophonist, but Gillam comes across as crisp and precise, supported by her ensemble. ([links](https://songwhip.com/jessgillam/time))
- **Something Old** _We The Kings_ by We The Kings (rock, 2007). Oh wow, I didn't remember this album at all until it started playing and then suddenly it _was_ 2007. This is peak in-ear headphone buds plugged into my MP3 player and walking to or around college. According to Spotify, the band is most popular in Chicago (USA), Jakarta (India), and Singapore (where chewing gum is still illegal btw) - I never would have guessed that combination of cities (and city states) in a million years. ([links](https://songwhip.com/we-the-kings/we-the-kings))
## Cool articles
- [Nothing breaks hearts like A.I](https://pudding.cool/2021/03/love-and-ai/) by Pamela Mishkin for Pudding. Pudding is pretty much everything I love about the internet: nerdy cool people making nerdy beautiful things. In this piece, Mishkin uses GPT-3, probably the most advance text-generating AI, to generate part of a personal romantic essay-cum-story. It blurs the lines about what's real: the details or the sentiment. The piece is also incredibly well produced and presented. You can tap to re-generate certain parts of the text, to rotate wheels. For example, half of this sentence was generated by GPT-3: "GPT-3 doesnt care about my friends. It doesnt care that I work at a start-up, live in a city, that I am quarantined in a house with two other people. It doesnt care that Omar and I didnt have the language to say what we wanted from each other, that we fought about his insecurity and my loneliness, that I felt like I was losing myself. It doesnt care which of my sentences are tired or stale or cliche." Could you guess which part? Which of that feels like it wasn't written by a human?
- [Why growing mushrooms at home is everyone's new pandemic hobby](https://www.theguardian.com/lifeandstyle/2021/mar/17/mushrooms-as-houseplant) by Adrienne Matei for The Guardian. This is such an odd piece, and I can't explain it but looking at pictures of mushrooms makes me deeply uncomfortable. They're so alien, and they're almost in an uncanny valley: my brain can't decide if they're alive or not. They're plants but they're not. Apparently there's been a boom in growing them indoors since the beginning of the pandemic, which is cool I guess but not for me. I love when people grow (and then eat) things. Matei also reports that some people have started growing mushrooms to trade for eggs and bread - so we've been in the pandemic long enough for an emergent goods-and-barter economy to arise.

View file

@ -0,0 +1,27 @@
---
title: "Things I learned this week #34"
author: "Thomas Wilson"
date: 2021-04-02
slug: "2021-04-02-things-i-learned-34"
draft: false
imageUrl: "preview-images/34.png"
tags:
- things-i-learned
---
# Things I Learned #34
Weve made it to the Easter weekend. Spring has arrived here in London, which is to say it was 20 degrees C earlier this week and this morning it was 0, windy, and overcast. This time a year ago, my mental state was dominated by COVID-19 (something I barely even think about now), but that also lead me to notice the beauty of spring for the first time. Im normally more of an autumn person. My wildflower seeds have started to come up, my tomatoes have been sown, and I made an asparagus risotto this week (largely so I could drink white wine while cooking, _al la_ my middle-aged housewife dream).
- **This product search duopoly**: I try and keep things pretty fun and light hearted here. Find some irreverent fact about a victorian butterfly hunter, you know. But Im also interested in tech and business as a force for good and change (and therefore also as a point of stagnation of source of moral evil). The past couple of years have seen increasing calls for big tech firms, like Amazon and Google, to be disassembled. They have so many resources available to them that they stifle market forces and creativity by being able to undercut any competitor, and subsidise initially unprofitable efforts in some areas (e.g. logistics) through their massive profits in others (e.g. cloud computing and advertising). As a case-in-point, approximately 60-70% of people who need to find a product online will start their search at either Amazon or Google. The problem for small businesses then becomes about discoverability and visibility: how do people find them. So they go to advertisers. Who are the advertisers: Google & Facebook (and most commonly, Amazon). Amazon will allow businesses to advertise on their platform, and compete against their own products. This hardly seems fair or right, but it does sound hella profitable. ([source](https://www.emarketer.com/content/do-most-searchers-really-start-on-amazon)).
- **This Victorian butterfly collector** Margaret Fountaine (18621940) lived in England and was a wealthy and independent woman who amassed a collection of some twenty-two thousand butterflies, and a million pages of personal journals. Despite her immense contribution to entomology (the study of insects) and lepidopterology (the study of butterflies) her contributions are largely noted as an assistant or amateur. This is, of course, entirely unrelated to the fact that she was a woman, and therefore unable to participate in the meetings of these societies. In 1897 Fontaine became a member of The Royal Society, though her contributions to science remain largely under-appreciated and rarely spoken about, namely because they are neither professional nor amateur. If you get the chance, read about the life Fontaine read: travelling across Europe (and the British Empire) to collect samples and view other butterfly collections. ([source](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4321127/))
- **This imaginary designer** Nikolay Ironov is a Russian designer but is also an AI. Ironov had created static and animated logos and logos for various clients (heres their [portfolio of work](https://www.artlebedev.com/nikolay-ironov/)): theyre a real mix of geometry and typography. I quite like them. The AI was created and maintained internally within the Art. Lebedev Studio, but kept completely isolated. Thats why it was given a human name, and was introduced to the team as a remote employee - even getting its own employee page. Its quite a cool concept but also a little terrifying - Im sure all of Ironovs colleagues werent super pleased to find their work has been outsourced to an AI. ([source](https://www.rbth.com/science-and-tech/332370-russian-ai-graphic-designer-fooled))
## What I've had on rotation
-**Something New** _Justice_ by Justin Bieber (pop, 2021). After 2020s frankly insulting _Changes_, this new album from Bieber is a breath of humanity and honesty. The album doesnt rush but its poppy, its perhaps a bit laboured in its expression of love and gratitude for his wife but its a good album. ([links](https://songwhip.com/justin-bieber/justice)) -**Something Old** _Ocean Avenue_ by Yellowcard (pop punk, 2003). I went back this week to try and find some good grunge and rock from the 90s but ended up getting stuck on this album. Im not regretful, and Nirvana can wait for me. Probably related to my We The Kings re-listen that I mentioned last week. Im not even really sorry, early 00s emo music is in my bones. ([links](https://songwhip.com/yellowcard/oceanavenue))
## Cool articles
- [Squark Notes #7 (newsletter)](https://squarknotes.substack.com/p/squarknote-7 "Squark Notes #7") by Susan Fowler Rigetti. Rigetti is a writer and refugee from tech (shes the woman who ousted allegations of sexual abuse from Ubers CEO). She posts a newsletter every six-to-eight weeks, and its worth a subscribe. This edition contained the advice to write more than one thing at once. Or, if youre any kind of creative: always have multiple songs, poems, paintings, side hustles, whatever. I can butcher her sentiment, but she does it far more justice: “when someone has _one_ thing and only one thing is that nothing ever happens with it. Sometimes its because that one thing simply isnt good. Sometimes that one thing is really amazing, but its not the right time or place and things just dont come together in the right way”

View file

@ -0,0 +1,89 @@
---
title: "How much is just-enough system design for new apps and software?"
author: "Thomas Wilson"
date: 2021-04-08
slug: "2021-04-08-just-enough-software-design"
draft: false
tags:
- software
- software-architecture
---
I wrote this because of a paralysing problem in coding: how much should I design my new apps architecture before I dive into code if I can only learn about my apps architecture by coding it?
Im building Dash Dot, an interval timer iOS app from scratch, and this is the problem Ive been facing this month.
The temptation is to answer all possible questions about your app before you start coding it, but you have to resist. Its good to have an awareness of what parts make up the whole of your system. If you dont, youre going to have to refactor and restructure your code frequently, especially at the beginning. But if you wait too long, if you _only_ answer questions, then youve got only theoretical answers.
The issue is keeping your code and your design in-step with each other. If your code gets ahead of your design, its a mess and youve got to refactor and wrangle chaos. If your design gets ahead of your code, youve got a monotonous boring slog to just implement (potentially over-engineering, or outdated) solutions to changing problems.
Code _is_ discovery.
Design _is_ discovery.
But theyre different kinds of learning, and you need them both. You can split the things you know about your software into two buckets:
- **Obvious**: These are properties that you can glean, or deduce relatively quickly, just by thinking through your code. Your core business entities need to be persisted, so you need a way of talking to a persistence layer, and you need a way of communicating data from your persistence layer (like a database) to your codes logic (like an Entity). You need something to manage the publishers in your system, and you need a way for your other components to subscribe to these publishers.
- **Emergent:**: These things become clearer or more important as you start coding. You might notice that your Entity class has reached 400 lines in length, and realise you need a Factory class to take away some of that logic. You realise that youre passing around data through a lot of initialisers - does it need to be centralised somewhere?
As you become a more experienced software engineer and architect, more things are in the Obvious bucket, and less things are in the Emergent.
The problem with Emergent Properties is that they are often Unknown Unknowns. Of course, this is a spectrum too. The more you deal with software architectures, the more you know the kinds of boundaries that become problematic.
Building the code means we learn more, but not knowing enough means the code we write is less useful. There are some lessons we can learn without coding. My advice? **Do just enough design so that you can maximise your learning by building**. How do you know how much is “just enough”? Thats the whole problem, mate.
Ive been working on the meta skill of asking myself “is this enough design to get going?”, and then accurately answering myself. Thats what I want to share and talk about.
## The Takeaways
Were all busy, heres what Id recommend:
- **Work over dogma**: Get the app building and working. Want to list restaurants near you: get that webpage running, that map rendering, and that database queried. It doesnt matter how beautiful your abstraction if you cant show your user a list of nearby taco vans.
- **Design and develop with your brain in mind**: I know that I like to do. I like to dive in and get started, so I have to train myself to wait and think things through for a bit before I start. You might be paralysed by the need to perfect the architecture before you even open your text editor. Whatever technique works for you, use that.
- **Good systems change fast**: The code youre writing at the beginning of an app will either a) live forever, or b) live for the next three days. Make sure new code can be, refactored, renamed, extended, and divided easily. If its hard to change, youll do bad things or workarounds because its easier than doing the right thing.
## Swinging the pendulum
My thoughts and approaches to building a new codebase have swung quite a bit over the last two months. I have been developing _a la_
1. Test-driven development (TDD): build all code from the ground up with tests first. The satisfying red, green, refactor cycle is very rewarding.
2. Interpretive movement development: do what feels right in the moment, just validate with the UI, man.
3. UML-driven development: spent _literally_ hours creating classes, methods, and relationships to understand the system.
### TDD
TDD was my first approach. Its how I learned Rails back in the day (or at least how I was encouraged to). I have often bemoaned a lack of _any_ testing in a lot of the professional projects Ive worked on and I thought to myself “this app will have flawless testing. I will be the jealousy of the town”.
Why was I doing TDD? Because I liked the idea of the finished product. I liked having a codebase which I _knew_ worked, it was inarguable. I had green ticks on my CLI, and the knowledge that a particular ticket or branch were complete.
I spent a couple of weeks heavily pursuing this goal. However it fell apart. When youre building early systems and foundational code it is _highlly_ likely that things will change. In fact, Id say its certain. If youre writing perfect code on day 1 then bully for you but boy am I not that kind of engineer.
“But Thomas, write your tests first to help design your API”. Yeah, actually good criticism. I agree - I think having code _and_ tests consume the API of a class forces you to think about abstraction early. It forces you to decouple things. However, **you dont know everywhere your code is going to be consumed**, especially on day 1. You dont know when certain parts of the codebase are going to grow in complexity and size (and reduce in readability) and need to be split out. And now youve doubled the work required in a refactor: you cant quickly and easily move code about, chop it up, rename it, etc.
“But Thomas, the tests mean that your API surface remains stable so that even when you do that kind of refactoring, the end result still acts as expected”. Right again, in theory. This is great when there is other code in your project which already depends on the stuff youre refactoring, and you want absolute certainty that what youre doing wont break a consumer. But thats just not whats happening here. This is the first step of whittling away the wood to let the sculpture emerge, I dont have to be delicate everywhere. I really wanted TDD to work for me here, and maybe if I was more intelligent and could preemptively know my API it would work. Or, if I was further into the project, it would let me know that Im doing okay with my refactor.
As a tool for writing the first bits of a new project, TDD just did not work for me.
### Interpretive movement design
Talk about a kickback reaction. Freed of the expectations of TDD and of the need to really write atomic and comprehensive tests, I just went about doing the thing every engineer loves to do: write code.
I created classes, and modules and methods and functions and utilities and it was lovely. I named things in a way that made sense in the moment and things felt right. I wasnt constrained by anything and could get my ideas onto the screen quickly.
This is a great example of where the “software engineering as a craft” argument gains credibility. This was a swing too far away from discipline and rigour, and towards creativity and reactive-ness. There was no structure to wrangle my code into readable, clear ideas.
It didnt force me to notice similarities in my codebase. **It didnt encourage me to make similar solutions for similar problems, and I ended up writing code which was tightly coupled to its context**. Code should be decoupled. The canonical example for this was when I found myself with three Entity classes (the ActiveRecord-like classes which wrapped several persisted entities, like a “timer”) and three drastically different approaches to similar behaviours. I had different APIs and implementations for how I validated, persisted, updated/deleted my data - I stored different bits of information about them and under different names.
This was a bad approach - I had let myself get too excited with the joy of writing code, and hadnt taken a step back. “But Thomas, couldnt you have exercised a little bit of self-restraint?”. Look. Yes. I have known for a _very_ long time that I, as a person and professional, would much rather learn and discover while and through doing, rather than plan and prepare beforehand. Its mixed-blessing. Self-knowledge isnt about trying to change these things but rather putting myself in positions where this isnt a problem (wisdom to know the difference, and all that).
The interpretive-movement style of development was useful. It helped patterns emerged and it also helped me _do_ a lot more than I did with TDD. The result was always on the output: I want to see this data on the screen, I want to be able to have these kinds of interaction. Unlike TDD I was thinking a lot more as a real-life human user of my software, not like a software user of my software. But it needed to be paired with a little more forethought, and something which would help me anticipate similarities before they occurred.
### UML-driven development:
Does anything feel quite so engineer-y as drawing bloody giant UML diagrams. You know the ones, with the boxes and class names and methods and arrows. Theyre great. I started drawing these when I came to the next logical part of my app (i.e. how do I, as a user of the app, _do_ a timer).
I sat down with the fantastic (and free) [diagrams.net] (formerly draw.io) tool to draft up the parts of my system, what they would be called, how they would communicate, what was similar and unifying, and what were the distinct parts.
I immediately made the decision to use this diagram as a sketch or an outline. I didnt want to specify every method, every relationship, every movement. It was about the high-level system design, and not about the specifics. UML diagrams may feel productive, but at the end of the day theyre not code.
For me, facing myself to write this broad-outline UML diagrams was _just enough_ design to make the code I was writing feel productive. It guided the direction and structure of the work I was doing, but it was vague enough that I could split things our and change implementation details. For example in a couple of places, I leaned heavily into the _Dependency Inversion_ or _Inversion of Control_ but these didnt need to be specified in the diagram before hand
**I knew this approach was just-enough design because before I started writing code I noticed when too much responsibility was being put in one place, and when similarities between components started arising**. Just like the frustration of UI/UX design - it was impossible to design a good system by focusing wholly on the components. Components should serve the system and architecture as a whole.

View file

@ -0,0 +1,26 @@
---
title: "Things I learned this week #35"
author: "Thomas Wilson"
date: 2021-04-11
slug: "2021-08-11-things-i-learned-35"
draft: false
imageUrl: "preview-images/35.png"
tags:
- things-i-learned
---
The slightly cold-snap here in London continues. The optimistic sewing and sprouting that took place in my garden (such as it is in urban West London) have largely had to retreat to the comfort of the indoors. Covid-related deaths continue to fall in the UK, as we begin optimistically opening up after a _very_ long winter. Ive started to have more normal moments - more going into a (socially-distanced) office, going to (socially-distanced) gatherings of people outside of my household. With this spirit of early optimism (and copious tree pollen) in the air, lets begin:
- **This fact about parachutes**: according to a study published in the British Medical Journal in 2018, the authors found the use of parachutes “did not significantly reduce death or major injury”. Rather than a serious study into the efficacy of parachutes for people jumping out of planes (spoiler alert: parachutes will probably stop you from dying, not wearing a parachute almost certainly will not), the authors were taking a tongue-in-teeth approach to the double-blind randomised-trials — the gold standard in medical research. They argue that sometimes we arent able to effectively control, model, or simulate real-life situations for the benefit of experimentation. This is important in fields like medical research, where areas of discussion range from deeply personal experiences (like mental health and trauma) to almost purely biomechanic discussions (like vaccine efficacy). Part of expertise and knowledge is (in my humble opinion) knowing what constitutes “proof” or evidence in your current area of study. ([source](https://www.bmj.com/content/363/bmj.k5094))
- **This (yet) another impact of the pandemic**: I like bikes. I think theyre cool. In 2019 I cycled across France on a bike (and Ive not stopped talking about it since). Since the start of the pandemic, bicycle use in the UK has increased to 120% of its use relative to the year prior. Its up over 150% on weekends - suggesting that more Brits are getting out for weekend rides. Ive noticed a much more diverse set of people out on rides during my spring training: its not just [MAMIL](https://en.wikipedia.org/wiki/Mamil)s - Ive seen more women and partners of (presumably) pre-existing cyclists, more amateur groups and also a lot more international riders. The other week I was absorbed by a peloton of six-some Polish (I think) riders on a mix of hybrid and commuter bikes who seemed to be enjoying South Londons cycle superhighways rather a lot. Comparatively, tube and rail use are both down 70%, and cars about 15%. So-called “active travel”, like cycling and walking, is an essential part of meeting carbon emission goals. A journey made by bike represents about 30x lower CO2 emissions than a fossil fuel-burning car, and 10x lower than an electric car. ([source](https://theconversation.com/cycling-is-ten-times-more-important-than-electric-cars-for-reaching-net-zero-cities-157163?utm_source=labnotes.org))
- **This hat piracy**: Benjamin Hornigold was a pirate in the 1700s, and youve probably not heard of him. His second in command was Edward Thatch, who went by “Blackbeard”. Hornigold and Thatch ran a thirty gun ship, the most heavily-armed ship in the area at the time, around the Bahamas in the 1700s. Piracy was rife as the Spanish Succession war had come to an end, leaving a lot of sailors and soldiers out of jobs. With no successful re-skilling plan in place, a lot of them too to looting merchant ships around Jamaica and the Bahamas. My favourite story from Hornigolds time as a pirate is the time he and his crew (about 350 men) got rip-roaringly drunk and threw their hats overboard during the night. The next day they attacked a merchant ship, stole the crews hats, left their goods untouched, and carried on. Hornigold later turned pirate-hunter (job title goals), a position at which he was pretty much entirely unsuccessful. ([source](https://www.thevintagenews.com/2017/07/07/notorious-pirate-benjamin-hornigold-once-attacked-a-merchant-ship-only-to-steal-the-crews-hats/))
## What Ive had on rotation
- **Something New** _The Wind_ by Balmorhea (2021, Contemporary Classical). A couple of really beautiful classical albums came out this week but this is the one Ive been drawn to. This is the first album in a while which has been produced largely by just Rob Lowe and Michael A. Muller - the original duet of Balmorhea. This shows - there are moments that are so typically _them_ in their sound and composition. Apparently, it was recorded in the same studio as Nils Frahm records, and it has the same acoustic reverence as Frahms can bring. ([links](https://songwhip.com/balmorhea/the-wind))
- **Something Old** _The Resistance_ by Muse (2009, Rock). I dont know why I completely ignored Muse while they were pumping out albums like _The Resistance_, so Ive gone back to give them some time. The musicality on this album is lovely, the production does feel a little dated in places but there are some real timeless moments. This isnt so much a rediscovery as a “getting round to it” discovery. Im still very glad that I did. ([links](https://songwhip.com/muse/the-resistance))
## Cool Articles
- [How to avoid death by PowerPoint](https://www.youtube.com/watch?v=Iwpi1Lm6dFo) by David JP Phillips for TEDxStockholm. Everybody hates giving presentations. Everybody hates watching presentations. With these things in mind lets at least work to make them at least a little bit more focused and usable. Phillips focuses on very actionable and psychology-focused tips for improving your PowerPoints. Theyre essentially around limiting the number of things you audience has to focus on. That comes from the visual design as well as the overall structure of your presentation. Give it a watch, its a little masterclass in giving good presentations, like watching Steve Jobs introduce an iPhone.

View file

@ -0,0 +1,93 @@
---
title: "Dash Cycle #01: (re)organising"
author: "Thomas Wilson"
date: 2021-04-12
slug: "2021-04-12-dash-cycle-01-reorganising"
draft: false
tags:
- dashdot
- buildinpublic
imageUrl: "preview-images/C01.png"
---
I'm building DashDot: a privacy-focused interval training app that doesn't suck. The second cycle of development lasted March 15 - April 12. Let's look at where we are.
## Goals
Here are the things I wanted to achieve in this cycle:
1. ✅ Finalise the code architecture and restore tests
2. ✅ Allow someone to complete a (timed) timer
3. ✅ Focus on the persistence of timers and workouts. Make sure that relationships between these entities are persisted.
4. ✅ Buy domain names (for app and company)
5. ✅ Decide on ticketing / management software and method. JIRA vs. Linear
6. ✍️ Solidify and scale-back the UI design
7. 🙅 Make the UI nice
8. 🙅 Continue with TDD and high test coverage
## Designing Code Architecture
This cycle I started running into the limitations and assumptions of my previous software architecture. Four weeks ago I did not have any strong opinions or experience on architecture for a SwiftUI app, but now I do. I wrote about my experience with this [pretty extensively](/blog/2021-04-08-just-enough-software-design) elsewhere. In summary, I've taken a very Rails-esque approach to the design: splitting my software into models, views, view models, and interfaces. Dividing by function rather than domain model will make some people mad, but it's actually really helped keep everything clear in my head.
I ended up doing a pretty major refactoring of the architecture, which mean that a lot of my previously-written tests were no longer useful, and had to be deleted. I was only attached to them via the sunk-cost fallacy, so away they went.
I also got to draw some pretty gnarly, sprawling UML-style diagrams in this process to help me really flesh out my thinking. That was cool.
I've still not reached the same level of test coverage as I had before, but I _do_ have a much more readable and consistent code architecture so I think the pros outweigh the cons.
## Allow someone to complete a timer
Creating a timer and doing a workout are the two core workflows in DashDot. This cycle I focused on that user journey: letting someone select a timer they wanted to complete and then start doing it.
There are a couple of complications here (obviously) but this workflow now functions. In DashDot you can now select a pre-existing timer, and start _doing_ it. The app will persist your progress and process as you go, and progress you through the intervals, etc.
So far you can only complete timed intervals (not distance). That'll be one of two focus points for Cycle#02.
## Persistence and relationships
I spent a good few days really getting into CoreData, managed object contexts, and the ORM-like way of managing relationships between entities.
DashDot now persists records of your activities, your workouts, and your timers - all without any fuss. This is an essential feature and I'm glad it's done
I have created an Active Record-like pattern for my business entities, as I didn't like the idea of manually modifying the generated classes from CoreData. This allows me to have some helper methods on my models to access related data, and to treat what's in the persisted CoreData layer as DTOs. This is definitely my web influence coming through: treating the data persistence as dumb and largely stateless objects. I'm not sure if this is the best, or most Swifty, way of doing things - but it's the way that lets me move faster.
## Purchase domain names
I needed domain names for both the app and for the company I'd be publishing it under. I've purchased both of those and I'll share when there's actually something on them.
## Project management: JIRA & Linear
I had previously been using JIRA to manage my tickets and things to do. I discovered Linear (I think because someone on [Under The Radar](https://www.relay.fm/radar) mentioned it).
I've completely switched to Linear for managing my tasks. I like it because:
1. It has a native app, even if it's just an Electron wrapper, it feels surprisingly native
2. It's free (for me a one-person team)
3. Phenomenal keyboard shortcuts that let you move between tasks and screens, update and create tickets, and do all sorts.
4. Their idea of "cycles" fits almost perfectly with how I want to think about software development. They're essentially four-week sprint-like phases. You pick a four week period, acknowledge what you can/not get done during that, and make sure things stay in scope.
5. Nice integration with GitHub - generating branch names for tickets and tracking their progress through PR to merge status. Even working as a one-person team, this helps me focus on "one things at a time".
Using Linear comes with a lot less friction than JIRA.
## Scale-back the UI
I had a bloody massive Figma file with a whole bunch of screen prototypes and idea exploration. By the time I had spent four weeks doing more code-heavy tasks I had lost track of what was where, what I liked and didn't like. There was too much in the Figma file and things were too hard to find.
So I copy-pasted everything into an "archive" tab in the file, and largely started from scratch. I used a more simple and iOS-like design. It's a lot more boring, yes - but it's also a lot more achievable.
Every now and then I go back to the archive and look to see if I had any interesting UI ideas, bits of data, or conventions that I'd like. In general however I am trying to stick to a _very_ simple and limited UI. No fiddly bits or tricky bits, I want to get something out there.
I have started this process of redesign, and it'll continue into Cycle#02. The UI I have in the app at the moment is... not good or consistent, but it is functional for testing. So I need to improve it.
I've become a lot more involved and aware of the iOS-specific design scene. Reading a lot of app reviews and listening to podcasts so I can get a better sense of "what makes a well-designed app".
## Make the UI Nice
I wanted to have a fully redesigned and implemented UI by the end of this cycle. That did not happen, I had other things to do. I'm working on it though.
## Continue TDD
I wanted to continue to develop with tests are the forefront, however the severe refactoring and reorganisation I've done have left a lot of my old tests useless, and I decided to move with greater speed by not having as many tests before I commit code.
This decision will come back to bite me, I'm sure, but I want to focus on producing something usable and interactable. The code is not the message, the code is the vehicle.

View file

@ -0,0 +1,26 @@
---
title: "Things I learned this week #36"
author: "Thomas Wilson"
date: 2021-04-16
slug: "2021-08-11-things-i-learned-36"
draft: false
imageUrl: "preview-images/36.png"
tags:
- things-i-learned
---
The cold snap in London is teasing us. Is it over? hopefully. But it will still be ~1C at night so dont get too complacent. Still, the days already feel long. I can hardly remember it being dark at 4pm but Im sure Ill remember as soon as October comes. Theres a lot of spring, summer, and autumn between now and then though. Heres some things I learned this week
- **This Breaking Bad character**: Mike Ehrmantraut is one of my top three characters in Breaking Bad (Walter and Gus, in case youre wondering). He almost wasnt a significant character at all. Bob Odenkirk, who plays Saul, was needed on set during the filming of season two of Breaking Bad, and so the show writers Brough Mikes character in to act as a go-between for information in the episode. Its one of those happy little accidents that remind us that if we roll with an unexpected change or limitation, the we can create something lovely. Maybe its different to what we imagined at the beginning, but it can still be good. ([source](https://screenrant.com/how-met-mother-breaking-bad-connection-mike/))
- **This one book**: Lord of the Rings, the famous and seminal work for fantasy fiction by JRR Tolkien was written as one book. It was published as three, presumably because someone said to him “John, these four hundred and eighty thousand words will not fit in one book, you need three books or well need to sell a magnifying glass to everyone who buys a copy” and then I presume John answered first with a poem or song and then gave his actual answer. Oh, he didnt? Because thats not how people speak? Sorry, sometimes I forget myself. Tolkien considered what we now now as “books” as simply “volumes” in the story. The crazy part about this fact is that Tolkien wrote every word of Lord of the Rings before he published them, and here I am in 2021 waiting for like a dozen fantasy authors to write book #2 or 3 in their trilogy. ([source](https://scifi.stackexchange.com/questions/47419/is-lord-of-the-rings-a-trilogy-of-books-in-tolkiens-opinion))
- **This demographic fact**: About a third of new-born babies in the UK have at least one parent from outside the UK. London is a very multi-cultural city, and were carrying this figure heavily: 69% of babies are born to at least one parent from outside the UK here, with Newham topping out at 86%. I think thats cool - the more children that grow up seeing people from different places, seeing different cultures to the one theyre surrounded by immediately… thats only a good thing. In a very left-wing-cant-we-all-just-get-along way: Im happy to see this. ([source](https://fullfact.org/immigration/parents-born-outside-uk/))
## What Ive had on rotation
- **Something New** _Kings Disease_ by Nas (2020, Hip Hop). This album won the grammy for best hip hop album and I hadnt heard that it even existed before. Whoops. Nas, of Illmatic fame, is undoubtedly one of the fathers of modern hip hop. Though, to quote Jay Z on Blueprint: he did put out one good album in ten years. Luckily it was good. Unfortunately I meant I had him written off as a forebear without being an active artist. _Kings Disease_ is good. Like, actually good - not just good because I want it to be good. The beats are slick the vocals and tight, the themes are good. Having two good albums over several decades isnt a great hit rate. As if Ive not said enough to crucify myself in the eyes of the real Hip Hop Heads: this album reminds of Common in places, and thats a good thing to me. ([links](https://songwhip.com/nas/kings-disease))
- **Something Old** _Summer Suite, Vol 1_ by Chad Lawson (2010, Classical). I go through phases of working in silence and to music. Im emerging from a more silent phase at the moment, but the light and upbeat vibe of this album is a perfect transition piece for that. Pop it on when you dont think you want sound but silence doesnt feel right either. ([links](https://songwhip.com/chad-lawson/summer-suite-vol-1))
## Cool Articles
- [Greta Thunberg: It just spiralled out of control](https://www.irishtimes.com/news/world/greta-thunberg-it-just-spiralled-out-of-control-1.4528477 "Greta Thunberg: It just spiralled out of control") by Leslie Hook for _The Irish Times_. A few years ago, Greta was fully in the limelight - very publicly active and outspoken. Shes recently turned eighteen and is back at school in Sweden, studying full time. In this piece, Hook gives a humanising account of Thunbergs current beliefs and attitudes. I was interested to learn that she doesnt actively talk about solutions to the climate crisis, seeing that as the job of others with more knowledge and expertise. Shes reluctant to give answers to the big questions, which I have mixed feelings about. Give the article a read, Gretas a cool person and I think we could all take a bit of her urgency.

View file

@ -0,0 +1,25 @@
---
title: "Things I learned this week #37"
author: "Thomas Wilson"
date: 2021-04-24T10:24:00
slug: "2021-04-24-things-i-learned-37"
draft: false
imageUrl: "preview-images/37.png"
tags:
- things-i-learned
---
This week Ive been focusing on perspective and gratitude. Its harder than it sounds if you feel things are unfair and not in your favour. But, to quote about a million throw cushions on Pinterest: you cant control life, only how you react to it. So this week I am choosing to react by being grateful. Even if it has to start out feeling like a very pointed lie, or jibe to my less patient self. Anyway here are some things I learned this week:
- **This misunderstood emperor**: Nero (AD 37-68) was the last roman emperor to be descended directly for Caesar Augustus, the first Roman Emperor. Nero has a reputation for being a little… callus. Hes the one who “fiddled while Rome burned” during the Great Fire of Rome in AD 64, and had his mother and (maybe) both of his wives murdered. But apparently much of what we know about him came from biased and vilified accounts of him and his life, which were pushed after he “committed suicide” (if youre forced to commit suicide its more spiritually aligned to murder, I propose) and a new emperor came to power. And then three others after the first, all within the space of a year. When Nero tragically killed himself independent of any political pressures or personal accusations, the power-vacuum left by him had to be filled by other ambitious men. Taking the Roman Empire from stable and long-lasting (normally) emperors into this rocky period required some careful PR work, and a lot of work was done to legitimise and justify the need for his death and the change. Hence much of the accounts and writing left about him are vastly anti-Nero. Our knowledge is largely influenced by the survivorship bias: the things which have survived (like official records and accounts by historians of the time) are obviously walking the party line. However, evidence from graffiti and the common folk, reveal that Nero was actually pretty liked by people, and our image of him as a tyrant is maybe undeserved. He competed in the public games, and acted on stage… He was probably a well-known and well-liked figure at the time. Scandelous though it may be to have an emperor perform on stage and race a chariot. He did still kill his own mother and wives though, lets not forget that. ([source](https://www.artlyst.com/previews/notorious-roman-emperor-nero-explored-new-british-museum-show/))
- **This health benefit of tea**: Coffee will forever remain my first love, but as I mature into a young gentleman, Im looking for any excuse to eat biscuits at about 4pm. Tea is one such excuse, but I ended up catching feelings for tea. Coffee gets a bad wrap for being full of caffein though, and although there are no negative health effects of chronic caffein consumption, I dont want to be dependent on it. Tea, although containing caffein, is thought to boost our mood and calm us, despite caffeins tendency to lead us towards jitters if we get a little over-buzzed. For instance, a study on South Korea found that adults who regularly drank tea were 21% less likely to develop depression over their life - the same effect as about 2.5 hours of exercise a week. Its unclear if this is because of individual or mixed chemicals in tea (like epigallocatechin gallate or l-theanine), or the ritual of preparing and then consuming the tea itself. Dont underestimate the fact that simply taking 5-10 minutes out of a day to sit down and not be stressed is probably good for us. Nevertheless, it does appear that drinking tea (and not a placebo) does help people a) feel more relaxed, and b) produce less cortisol (the stress chemical) - so in reality, it is likely some combination of the two. ([source](https://www.nature.com/articles/d41586-019-00398-1))
- **This bee weapon**: Bees are cool and really useful. Did you know that they create their own air-circulation system? To keep the temperature in a hive a comfy ~30C, the bees beat their wings to circulate air around the hive. Unfortunately, bees are also under attack sometimes, and not just from cartoon bears with a hunkering for honey. One way that bees can defend themselves from invasive species, like wasps or hornets, is to gather around the invading individual and focus the hot air at the new guest. This essentially cooks them, or overheats them. Thats pretty hardcore, bees. ([source](https://ideas.ted.com/bees-can-remember-human-faces-and-7-other-surprising-facts-about-these-important-insects/?utm_source=pocket-newtab-global-en-GB))
## What Ive had on rotation this week
- **Something New** _Wake_ by WVNDER (2021, Pop Punk). It feels a little like cheating to call a seven-song twenty-four minute CD an “album” but Ill take it. WVNDER not only have great album artwork (I had a little poke around and couldnt easily find the credited artist). This is a tight little pop punk/emo pop album with clean vocals and lovely moments. ([links](https://songwhip.com/wvnder/wake))
- **Something Old** _Perotin_ by The Hilliard Ensemble (1989, Choral/Classical). This is one to listen to with headphones, or a good surround-sound. The medieval-era vocals are wonderful to work, walk, and exist to. ([links](https://songwhip.com/the-hilliard-ensemble/perotin))
## Cool articles
- [Neuroscientist Christof Koch on How the “Qualia” of Our Experience Illuminate the Central Mystery of Consciousness](https://www.brainpickings.org/2017/05/25/christof-koch-consciousness-qualia/) by Maria Popova for _Brain Pickings_. Popova has a gift for merging the scientific and the poetic, though this is slightly easier where the two meet naturally. The study of consciousness is like that: were yet to have any functional answers. Instead its an area of science where interpretations reign supreme. If I was a cleverer man when I was sixteen years-old and chasing my studies, I wouldve chosen subjects that would let me into neuroscience. In this piece, Popova introduces the _Romantic Reductionist_ approach to studying consciousness, adopted by Christof Koch. Koch is a currently-active academic in the realm of consciousness, and his approach merges the reductionist (“things can be explained as a system of discrete and interacting parts”) and romantic (“things are beautiful and not the sum of their parts”).

View file

@ -0,0 +1,70 @@
---
title: "Excommunicate your ideas"
author: "Thomas Wilson"
date: 2021-04-27T20:55:00
slug: "2021-04-27-excommunicate-your-ideas"
draft: false
tags:
- essay
- side-projects
---
Your side-projects deserve a decisive, merciful death at your hands. You dragged them into this world, youll fling them out. And do it quickly.
I want to talk about killing our much beloved side-projects, and why this is totally a good idea. Then I want to talk about why this could be a terrible idea. Im not here for resolutions.
There are two parts of my personality, plucked from the universe-scale D&D Players Manual, which make the question “should I carry on with this side project?” difficult to answer:
1. ** I like to flip-flop** - just because you made a decision in the past doesnt mean its the best decision, or that you owe your current time your past self. Your past self was probably dumb and optimistic anyway. What do you know now that you didnt know when you made the choice? Do you know that youre not enjoying yourself, that you dont have the money, that its not worth the time or investment? Cool, just put your tools down. This kind of thinking got me out of working freelance, a decision I thought I would love but actually did not. _Vive lempoi_.
2. **I like to commit** - if youre going to make a decision, act like youve made the decision. Sometimes thats about writing a blog post about random things you learn every week even when you dont want to. Sometimes its about finishing puppy school (with your dog, obviously), or building an MVP of that website youve wanted to build since 2014. Inaction is a choice. Relaxation and space are a choice. You can commit to restoring some inner peace and spend every night for four months in silent meditation, or watching Netflix, or going on dinner dates with different friends. Or you can commit to learning a new language, reaching a new fitness goal, whatever. I really dont care what the goal is, but I like to achieve goals.
These two make for often uneasy bed fellows. Not quite sitcom-worthy misanthropes, but the two can make it difficult for me to feel confidently happy or fulfilled. Second guessing? Thats a lot easier.
I am a front-end and full-stack software engineer by trade and craft. For the past several months I have been building DashDot, an iOS app for interval training. I started this project because it solves an actual problem I have, and because I wanted to try building something for a different platform.
Im going to stop building that app. Im not going to caveat that sentiment with “for now” or “at the moment”. I have excommunicated it from my life, and I have no intention to pick it back up, or open that Xcode project. I might do those things, sure. I might try again in the future. I just dont think I will within the next lunar cycle, and Im not setting any expectation to myself that I will, either.
The minute I made that decision, I felt lighter. I was free from doing something that I had increasingly come to resent. Im not going to go into all the nerdy details about why I didnt like iOS development - but the short of it is that I do not want to do it. So I wont.
Maybe Im weird and this is totally natural to some. Maybe some people love giving things up and can do so without nary a backward glance. Youll know were similar people if hearing that you can do this, that you can simply _stop_, is a gleeful relief or reminder, not an obvious re-statement. Got a side project that simply isnt worth the investment any more? Great, kill it. No ones going to come looking for the body.
Though the _killing_ metaphor is satisfyingly dramatic, I think excommunication is the better analogy. The idea of the project isnt dead, I can still go back to it. You can start building your ideas again whenever you want. Instead, Ive made the choice to have no interaction with it: Im not going to design, build, refactor, or plan anything else to do with this project. Its going to take up no more of my mental time and energy. It has been banished from my kingdom of effort and attention.
## You might be ready to excommunicate when…
You ever catch yourself, mid-activity and think “wait why am I doing this”. How might you know when its time to excommunicate that project from your life? Here are some smells Ive been looking out for
- **Does it spark joy?** - 2019 internet meme aside, Marie Kondo [has a good point](https://www.youtube.com/watch?v=9AvWs2X-bEA): how does your body respond when you think about, or work on the project? Are you excited by what youre doing or could be doing? Is it heading in a good direction? Or are you just a little weary?
- **Is it worth it?** - is all this time, money, and mental energy youre putting into the project actually giving you something back? Investment and returns arent just money: does it feel like a good use of your time and attention? If youre finding it hard to justify to yourself, think about why?
- **Where is this going?** - follow through the thought process for “what happens next” for the next weeks and months. One of the last straws for me and my most recent side project was realising that even if things become wildly successful and people love the app, the thought of having to build, improve, and support an iOS app just did not feel like a good reward. And then if things went badly Id have to do active work to get more users so that I could support an app I didnt want to support. Is the project leading me closer to the life I want to live? No?
## But what if I just keep picking things up and putting them down?
Im worried about being that guys who gets a new personality-defining hobby every other month. I dont want to be telling my friends how great it is to feel the wet clay between your fingers, and then eight weeks later consider my chances as a professional oboe player. Theres nothing wrong with that, you have to pursue your own happiness in this life, but theres more than that.
I worry sometimes that I jump between things, never finishing them or accomplishing anything with them. But also, massive spoiler alert, no matter how long your streak on Duolingo, youre still going to die. If you can wring joy from the scarce few hours we have on this giant hunk of space rock then, by all means, flit between things. Flit away. Keep flitting. This is [hedonism](https://plato.stanford.edu/entries/hedonism/), which I think gets a bad wrap and has a lot less to do with Roman orgies that youd think.
However, if you only ever get a few steps down a road, or you only do something when it is interesting or enjoyable - we miss out on something.
Vasari, the first art historian and also debut biographer of Leonardo, [wrote in reference](https://academic.oup.com/brain/article/142/6/1842/5492606) to the famous renaissance artist, architect, natural scientist, and polymath: “if he had not been so variable and unstable, for he set himself to learn many things, and then, after having begun them, abandoned them”. Leonardo was a flitter.
If youve got the mental horsepower of Leonardo (which I certainly dont), then the curiosity does us benefit. Even with his almost mystic mental capacity, and despite working in one of the most productive and talented eras of artistry in European history, Leonardo left behind very few finished paintings. He left behind a lot of notebooks, with questions and observations, and he undoubtedly pushed a thousand tiny journeys forward, but he rarely reached “done” in his work.
There are no more than eighteen surviving paintings which can be attributed to Leonardo (if you ignore all credible questioning on many of these works). Though to be fair his portfolio includes things like _The Last Supper_ and _Mona Lisa_, possibly two of the most recognised pieces of western art. This is compared to the literally [dozens of paintings by Raphael](https://en.wikipedia.org/wiki/List_of_paintings_by_Raphael) (who died at 37, a full thirty less life years than Leonardo), or Michelangelo who painted (or supervised) the _entire ceiling of the Sistine Chapel _, which accounts for over 500 squared metres and then also he sculpted _David_. To be fair, Michelangelo was probably a bit too dedicated, and maybe could have loosened up a bit.
Unfortunately, no ones really doing anything comparable to painting the Sistine Chapel anymore. I dont know why, maybe were all too remarkable to be remarkable anymore, or maybe weve become numb excellence. Youre not sacrificing an era-defining oeuvre so you can go to an introductory macrame class or get three pages into your bullet journal before never opening it ever again. But I do still think we owe it to ourselves to commit a little before abandoning ship. The process of mastery and craft run deep in us, I think.
Thats because new hobbies or side projects are both themselves (i.e. making a clay pot, writing a book), but they are also meta-projects: the process of planning how you will dedicate your time and attention around them. The ability to engage with the terrible, awful imitation you have made and the shining exemplar you were trying to reproduce, and asking yourself “how did I get this so wrong?”. This is another time to mention [The Gap](https://vimeo.com/85040589) by Ira Glass.
If you hang around for long enough, you notice the transition from a project as itself, to a project as a meta-project. I think theres something inherently valuable in going through that, and I dont think you can force it.
To give an example from my domain, when I dip into a lot of forums for web developers I see piles of novice engineers asking ill-formed, basic questions which either have a one-line answer (“how do I get data from an API in python?”) or no answer (“which JS framework should I learn?”). But a lot of the conversations I see happening between experienced engineers, or at talks from engineers - these are more philosophical or ideal. Broad, cross-technology approaches, team and inter-discipline management or integration. Once you have reached conversational fluency with the details, you can go one level higher. I really enjoyed learning the basics as an engineer but I am _really_ enjoying the work of a journeyman.
Similarly, with writing I deeply enjoy the feeling of _having_ written, I dislike much of the reality of writing consistently. I love having a blog where Ive written consistently for nearly a year, but I hate the Saturday morning fear that this might be the week I dont write a blog post about things I have learned. I love organising thoughts after they lay strewn in a text document, having stumbled over each other in a rush to get out of my brain. I love that I nearly always have a conversation starter or something to mention when Im out at the pub. Or if I was out at the pub and there wasnt a pandemic.
Some of these things are about the actual act of writing but others are, more broadly, because I write. And I think I have only come to enjoy these things, and to even _see_ them in the first place, because I have committed to a regular writing practice. I dont think I would have got there if I decided to flit between ideas, or if I had committed to only writing when I feel like it or when something comes up. I do not know if I would even think to write something in the first place if I hadnt.
Ultimately, it still doesn't matter, obviously. Ill be dust in a hundred years and no one cares if I do or dont commit to things, so long as I seem happy. But there is hope among all the fatalism. But I think the things you gain, and the muscles you exercise at the beginning of something are different to whats necessary when the motivation runs out and youre looking to improve. **If those are the muscles you want to build, stop flitting.**All this, of course, if youre able to healthily bare the cost of getting there.
Sometimes the answer is a resounding and valid “no”, “I really dont want to” or “I hate this”. If it is, excommunicate the project from your life. Put it deep in that freezer.

View file

@ -0,0 +1,28 @@
---
title: "(Not) Things I learned this week #38"
author: "Thomas Wilson"
date: 2021-05-01T10:24:00
slug: "2021-05-01-things-i-learned-38"
draft: false
tags:
- things-i-learned
---
# (Not) Things I learned this week #38
This week seems to have really flown by. Ive decided to take purposeful and intentional time for rest and personal recuperation this week. Im not feeling burned out, but I could certainly smell some distant smoke on the wind. So heres to taking evenings to get around to those household repairs Ive been putting off, to that growing pile of unread books. I said 2021 was my _Year of Discourse_ and as we transition from winter to spring, Im checking in with myself. Im observing the change of weather, daylight, and flowers. If you get 15 minutes to just sit in a public park, I would strongly recommend.
Because of that Ive not been browsing the internet as much this week, so instead Im just popping in with some music and reading recommendations.
## What Ive had on rotation
- **Something New** _if I could make it go quiet_ by girl in red (2021, Pop). Ive been listening to girl in reds singles since the algorithm started pushing her to me. The algorithm was right, guys. I love the mellow, low-key sad but energetic vibe of this album. The production makes you want to bop in some places and listen carefully in others. ([links](https://songwhip.com/girl-in-red/if-i-could-make-it-go-quiet))
- **Something Old** _Blink-182_ by Blink-182 (2003, Pop Punk). _I Miss You_ came on a shared speaker this week and everyone in the room knew all the words, and also how to mimic the winey American grunge accent. I got this album in physical when I was in the last year of primary school, or early secondary school (I cant remember anything, dude). Its a great album from a seminal pop punk group who are still influencing the genre. ([links](https://songwhip.com/blink-182/blink-182))
## Cool articles
- [Breaking Camp](https://www.theverge.com/2021/4/27/22406673/basecamp-political-speech-policy-controversy) by Casey Newton for The Verge. Indie tech darling, Basecamp, really messed up this week. In a company-wide memo they initially banned “societal and political” discussions at work, before backtracking a little, and clarifying that they meant “just not on the work chat”. To me this strikes of peak tech-bro culture where rich white men believe they can divorce themselves, and exist entirely independent of politics. Unfortunately, running a large, outspoken and (broadly) successful company is inherently a political act. I get the impression that DHH and Jason Fried (the two men at the helm of the company) didnt see the value in doing the work to create a company which actively combats racism/sexism in the workplace. I mean, I get it, it _is_ work but also for some people simply surviving somewhere where they dont feel welcome is also work. As I write this, about 25% of Basecamps employees (including the heads of marketing and design) have resigned. Unfortunately, I cant help but shake the feeling that this is what Basecamp wanted, given that they offered a six-month severance package to employees who wished to leave (if they had been there longer than a year). Theyll now be creating an ideological silo with low diversity of opinion and/or representation. What happens now? I honestly dont know.
- [A 23-year-old coder kept QAnon online when no one else would](https://www.bloomberg.com/news/features/2021-04-14/qanon-daily-stormer-far-right-have-been-kept-online-by-nick-lim-s-vanwatech) by William Turton and Joshua Brustein for Bloomberg. Some of the biggest modern questions, which came to a undeniable and ugly head in January 2021, are about free speech, access to platforms, the responsibility and role of social media platforms in relation to their content. Its a concern that “free speech” is becoming coded language for extreme and polarised speech. Its worrying that individuals and groups are able to find willing audiences to listen to at-best-grey-area rhetoric, and at worse false and actively damaging speech. The authors of this article look at someone whos making hundreds of thousands of dollars a year by providing technical services and platform to these damaging figures. Perhaps my favourite quote from the article is:
> Lim argues that the real political crisis facing the U.S. is not extremist violence but erosion of the First Amendment. He says that restrictions on online speech have already brought the U.S. to the verge of communist tyranny, that “we are one foot away from 1984.” After a moment, though, he offers a sizable qualifier: “I never actually read the book, so I dont know all the themes of the book. But I have heard the concepts, and Ive seen some things, and I thought, Whoa! Thats sketchy as f---.’ ”

View file

@ -0,0 +1,27 @@
---
title: "[LinkedIn Post] Being so customer-centric your customers think youre a robot"
author: "Thomas Wilson"
date: 2021-05-05T20:07:00
slug: "2021-05-05-customer-centric-like-a-robot"
draft: false
tags:
- linkedin
- emails
- humans
---
(This is a cross-post of [a short article I wrote on LinkedIn](https://www.linkedin.com/pulse/being-so-customer-centric-your-customers-think-youre-robot-wilson))
Stop me if youve heard any of these: “your call is valuable to us”… “on a scale of 1-10 how would you rate our…”, ”at {companyName} we care deeply about our customer experience…”
Have you literally ever believed anybody when youve heard or read these things? I have not. Not even once.
But we should care. I know Oxwash does. We care a lot that people send us their wedding dresses, bedding, favourite band Ts and home team jerseys. Its one of the top three reasons I decided to work at Oxwash - everyone genuinely cares 💙 Im a front-end engineer, I make software that real customers use every day, and I care that they have a good experience. At very least I care that we should know if our software is confusing our new customers.
👇 The good news is, its actually really easy to stand out. Literally all you have to do is act like youre a human being who cares. So Im bringing **four tips on how to talk with your customers like youre a human who actually cares about them**
1. 🕵️‍♂️ **Focus on who you want to talk to**: Youre not going to be able to talk to everybody all of the time. You have other things to do. I started talking to first-time Oxwash customers. Its enough that Im fielding e-mails every day, but theyre not banging down my door. I think its really important your software is understandable to first-time users. If they dont stick around long enough to learn the…quirks of your system then theres a problem. You might care about your longest customers, or those in a certain age range or who work in a certain sector. Start small, you can always go bigger.
2. 🤖 **Automate (but not too much)**: How many e-mails in your inbox were hand-crafted and delivered by artisanal humans? Probably less than half. Use automation services to send-off e-mails based on database and software events. Use snippets (shoutout to TextExpander and SuperHuman) so that certain thing (like instructions on how to update your version of the app in the App Store) arent hand typed every… single… time. But always, _always_ put something hand-crafted into a reply, especially when someones taken the time to send you useful feedback.
3. 🎁 **Share your findings**: We now run monthly reviews with product, strategic, and technical staff. Every single bit of feedback (critical and complementary), every suggestion, every point of contention is brought up and discussed with real humans so that we can do something with that information.
4. ⏳ **Respect peoples time**: Every e-mail I send asking for feedback always gives people the chance to reply with “1”, “2”, or “3” (which stand for “good”, “bad”, “Im too busy at the moment”). Id love a considered and detailed response from every customer, but Ill settle for more data overall, if it means sacrificing a bit of depth. Trust me, people love telling you what could be improved, but rarely care to gush about your software to you.

View file

@ -0,0 +1,34 @@
---
title: "The Weekly #39 (or #1, whatever)"
author: "Thomas Wilson"
date: 2021-05-06T19:44:00
slug: "2021-05-06-weekly-39"
draft: false
tags:
- weekly
---
Im going to stop writing my “things I learned” blog posts. They dont serve me in the way that they used to. As [I wrote recently](/blog/2021-04-27-excommunicate-your-ideas): kill your ideas and side projects, gladly and without delay.
Death is more of a transition, though. The _things I learned this week_ post is becoming simply \_The Weekly.
Im not sure what Im going to use it to write about, Im going to take a few weeks to try some new formats out. Starting next week. This week I had to kill an old(-ish) friend.
Thirty seven weeks ago (in August of 2020) I started writing a weekly blog post with a collection of random tidbits I had learned that week. Id also put music recommendations and any cool articles I had come across. It was a great way for me to justify the time I spent on random corners of the internet, and share my love for the world. Theres just so much cool stuff going on. Bees cook their enemies, authors write seminal science fiction books over a summer in an Italian villa with other famous poets, some dudes stop millions of pounds worth of books from Gatwick airport.
But I dont browse the internet as much anymore. If you keep looking at your screen the algorithms will keep serving you up content and it felt a) distracting, and b) like you would never reach the end of it. The algorithms are much less inclined to serve you up random historical facts, and much more inclined to show you snappy videos and hot takes. This is the problem with advertiser-driven models of business. But I digress.
I hate homework, and browsing the internet, fighting against the gain of _The Feed_ , started to feel like homework. The knack to a healthy side project is tricking your brain into thinking that its not homework (it definitely is though).
So I was doing something I didnt enjoy or want to do because I felt I had to. Thats disingenuous. I dont want to be disingenuous and I want to spent my time on projects that fulfil me (even if I never do ship them).
**What now?** I want to keep doing weekly posts. I get a lot from it. For the past two weeks Ive put out a post nearly every 2-3 days. I obviously dont need the impetuous to write this week. But some weeks I do. As much as I bemoan “it feels like homework”, sometimes we need that homework. Delayed gratification and all that.
So Im going to continue writing weekly, and call them _The Weekly_. Ive got a few ideas about the kinds of thing Id like to write about, most entirely in the realm of non-fiction, but still distant enough from my day job that Im not just a software engineer all day every day. But hopefully something with a little more overlap to other areas in my life. Something where the algorithms of content can keep their tentacles away from.
Im uncertain if I would like to write timely or evergreen content. I see the benefit in both. I have written both. Lets see.
This _is_ the The Weekly #39 (or #1 depending on how you count). Its taken me a few days to decide this was the best idea, and I dont much fancy trying to whip up something entirely new in the next two days. Accept this apology or dont.
**You should write** If you are reading this dont write anything but think you might like to, or would simply like to write more, do it. Weekly. First thing on Saturday morning or last thing on Friday, pull up a chair to your kitchen counter, pour yourself a mug of something hot or a glass of something fun, and start writing. No ones going to read it anyway.

View file

@ -0,0 +1,64 @@
---
title: "The Weekly #40: Garlic & The Ancients"
author: "Thomas Wilson"
date: 2021-05-15T10:11:00
slug: "2021-05-15-weekly-40"
draft: false
tags:
- weekly
---
Okay lets learn us how over the past 3000 years garlic has been espoused by healers and spiritual leaders to ward off disease and evil. Itll take you down a rabbit hole of medical advice, social segregation, and spiritual prohibition.
Garlic (_Allium Sativum_, of the*Allium* genus) has set its roots deep in the human story. And lets get one thing straight: garlic is bloody great. Its scientifically categorised in a group of foods called “please dont take these away from me”. Smash it, chop it, then fry it. Or top-and-tail the bulb and put it in camembert. Pop whole cloves in with your salmon, soy sauce, and lemons. Its versatile. Tell me youre not drooling a little bit, you liar.
## The Ancients
Records of our obsession with this tiny _Allium_ starts some three thousand years ago, with the Ancient Egyptians, and continue upwards through Europe and Asia.
### The Egyptians
Heres what we know about Ancient Egypts relationship with garlic: i) It made up a massive part of the lower class (i.e. slaves) diet, ii) they recognised it medically, iii) Tutankhamen was buried with some.
The Egyptians knew it was an excellent nutritional supplement. It went alongside some probably very bland (but calorific) grains. Porridge and gruel with a side of garlic. Humans will find joy and love near anywhere, but Im sure its a little harder to find when its 30+ degrees, youre building a pyramid, and everyone else around you smells almost exactly like theyve not bathed for well over a month, and have only eaten porridge and garlic.
This wasnt just random guesswork from the Egyptians to keep their slaves alive longer. The Ebers Papyrus is one of very few surviving full-length (about twenty metres all-in, not a joke) hieratic documents. Its a medical treatise largely about herbs, dating from some 1550 BC. It recommends garlic as a treatment for abnormal growths. As a fun aside, it also tells us that the Egyptians recognised the heart at the centre of a super important circulatory system.
But if garlic was a to medical and nutritional supplement, its odd that a couple of bulbs ere found in Tutankhamens tomb. It would be like burying the queen with some chia seeds. Of course, its always possible that it was left there by a careless labourer on their lunch break, but it could also have been so that the emperor would have something to keep him going in the afterlife. Or it could have been that he just really liked it (my personal favourite theory).
### Medieval Europe
Some two thousand years later, medieval Europe saw garlic as a nutritional or medical plants. It was given to relieve constipation and prevent heat-stroke. Just like the Ancient Egyptians, it was consumed by manual labourers to stave off heat stroke.
Medieval healers werent messing about: they recognised its medical properties and were bullish on eating it raw. Specifically this advice comes from the writings of Abbess Hildegard of Bingen (1098-1179), who was canonised in 2012. Hildegard was a polymath and advocate for scientific observation and method _way_ before it was cool for anybody (especially a woman) to do those things.
To her, our physical and spiritual selves were natural. In general, Hildegard sounds cool: she had prophetic visions of the end-of-days and wrote poetry and composed music. She also left behind medical writings (insofar as medical writings had come in the twelfth century). In these, much as in her spiritual writings, she oriented her attitudes of what was good in terms of _viriditas_, a Latin word meaning “greenness”, as in lushness and growth. Though she didnt create the term, or really use it consistently, Hildegard saw a lot to be admired and emulated in nature.
To medieval doctors, garlic was “hot food”, to be consumed during winter. I dont mean hot as in heated, I mean hot as in “this food will affect your heat humours”. Medieval science understood our body in terms of humours (hot/cold, wet/dry, sweet/bitter). Hildegard recommended we consume garlic in moderation, lest it make our blood too hot.
### Judaism
This idea of garlic as a hot food isnt unique to Europe. It spread to the middle-east, back to Egypt. The _Talmud_, the central text of Rabbinic Judaism, refers to Jews who celebrate Shabbat (Sabbath) as “Garlic Eaters”. Despite this culturally-identifying level of garlic love, not all Jewish figures advocated for it.
Maimonides (1138-1204) was a Sephardic Jewish philosopher who omitted all favourable mentions of garlic from his texts - advising minimal consumption, especially during the summer months.
## Garlic is a spiritual force
Garlic wards off evil. Although weve moved on from understanding garlic as a “hot food”, in many places garlic is seen as a ward against malign spirits.
It goes without saying that garlic can ward off a vampires. We use to hand wreathes of it on our house and over doorways to ward off the evil eye. Allegedly King Henry IV was baptised in garlic water.
The Ancient Greek goddess Hectate (goddess of crossroads, night, magic, and witchcraft) favoured offerings of garlic. They were seen as a way to ward-off evil.
In certain religions (Jainism, Brahman Hinduism, Buddhism) the consumption of garlic is prohibited. Jains believe its harvesting is too harmful for the plants, but other eastern religions see it as too stimulating, and to interfere with our spiritual wellbeing.
I dont think there are many other plants so beloved and feared across the world. To be seen as associated with witchcraft and night, and as worth burying alongside your beloved emperor king. Garlic has touched the collective human story, and its cool that so much history lives in something so commonplace
## Bibliography
- [Wikipedia - Garlic](https://en.wikipedia.org/wiki/Garlic)
- [Kew Gardens - Allium](http://powo.science.kew.org/taxon/urn:lsid:ipni.org:names:528796-1)
- [Historical Perspective on the Use of Garlic](https://academic.oup.com/jn/article/131/3/951S/4687053?maxto..)
- [Historical, chemical and cardiovascular perspectives on garlic: A review](https://www.phcogrev.com/article/2007/1/1-7)
- [Plant offerings from the classical necropolis of Limenas, Thasos, northern Greece](https://www.academia.edu/download/45254705/Plant_offerings_from_the_classical_necropolis_of_Thasos.pdf)

View file

@ -0,0 +1,64 @@
---
title: "The Weekly #41: Productivity is a daily ritual"
author: "Thomas Wilson"
date: 2021-05-21T20:32:00
slug: "2021-05-21-productivity-is-a-daily-ritual"
draft: false
tags:
- weekly
---
The Weekly is a 1000-word-or-less essay on something Ive been thinking this week. Lets talk about how productivity is (basically) a scam and how daily and weekly rituals are the backbone of any sane person's productivity.
I once had the goal to move to Paris. I didnt achieve it (there was a pandemic). I had a goal to learn Italian (laziness). Weve all got visions of our future where were cleverer, skinnier, more intelligent, or in my case simply the same person but somewhere else.
But we dont _do_ visions. We reach them. But actually we dont reach them because the [Hedonic Treadmill](https://en.wikipedia.org/wiki/Hedonic_treadmill) keeps us all both in motion and stationary at the same time.
Im going to put the tinfoil hat on properly in about 500 words, but I genuinely dont think productivity people want us to be productive, and “productivity” isnt a thing. Its a thing only because businesses and organisations need way to quantify the impact theyre having.
You are not a business. You are an individual. You do not have to justify yourself economically to anyone. You are whole, you are complete, you are enough.
But we all want to be just a little bit…_more_.
The secret to doing that little bit extra is in ritual. Every day youve got to wake up and do the hard work of redefining what “being productive” looks like. One day it will be writing a eulogy for a family member, the next it might be six hours of visual design work, or a board meeting. Can you compare these things? Maybe, but what a waste of mental effort you could have spent _doing things you actually wanted to do_.
Im going to share what that actually looks like.
## My ritual
There are two ways I store my productivity system: in my physical notebook ([the Leuchtturm 1917 Hardcover A5 with Dotted Paper](https://www.leuchtturm1917.co.uk/notebook-classic.html)) and a digital Second Brain ([Obsidian](https://obsidian.md/)).
I use these to do two things:
1. **Weekly Note** — Every Sunday I dedicate a double-spread on my physical notebook to a list of things I want to do that week. Theyre grouped roughly by work (ship feature x), personal (2 x Runs), side-project (refactor below-the-fold section of landing page).
2. **Daily Notes** — Every day I have a double spread in my notebook and a daily file in Obsidian. One side of my paper has a list of high-level tasks (go for run), and the other has a list of things I might have thought about (luck is about increasing your surface area). The digital daily note is infinitely editable. I use it as a scratch pad for writings, or sub-tasks, or links to things Ive done that day.
Every week, before I create the next-weekly note, I review my previous week. I look at what I did during the days, I look at what I wanted to get done, and I index things: thoughts that came up, projects which might be important for long-term use.
The entire process is vague and not-specific. But if I go into any more detail its not going to be useful to literally anyone else. How many other people are working in a small laundry startup, building language-learning tools, and taking nerdy notes on a small subset of podcasts because one day maybe something will stick and Ill be able to sound insightful in a conversation. There are none.
## /Puts on the tinfoil hat/
Despite not making it to an apartment in Paris (yet), I like to think that I am a productive person. I got a PhD and once knew a lot of French. A lot of people would like to think theyre productive. Globally, the [personal development market is valued at around \$38b](https://www.grandviewresearch.com/industry-analysis/personal-development-market). Theres a lot of money to be made by helping people be more productive.
A pessimist would say theres a lot of money in making people feel unproductive, and that you can make them productive.
People will try and sell you a framework, app, or system that will solve all your personal productivity problems. For a long time I was very committed to time-chunking, task managers, and efficient email. I dont religiously adhere to these anymore.
Or worse, there are the Vaynerchuck-esque “hacks” which promise, as [Pilta Clark writes in the FT](https://www.ft.com/content/d4e5d722-d6d3-4cca-bc89-4e596821295f) puts it, “to transform useless, Solitaire-addicted sloths into hard-charging models of efficiency”.
Learning the click-baity _14 Must Know Tricks For Productivity From A Wall Street Manager_ isnt going to help you.
Thats because knowledge isnt the problem. We dont have a knowledge deficit. We have abundance. An overwhelming abundance, things we want to do, or should do, or feel like we should want to do. If only we had the time to achieve them.
When theres \$39b dollars at stake, and you want to keep it there, there are two things you can do:
1. **Keep everyone feeling unproductive** — make everyone feel like theyre underperforming and need to keep up. Tell them they are unproductive and that your book or consultation or software are the only way to change that.
2. **Keep giving people new goals** — as soon as youve achieved one goal, move immediately to the next. Or why even achieve it, just drop it and move on.
Most worthwhile goals require sustained effort. Fat comes back, muscles decay, French words _disparaissent_ , and your fingers will forget a G-minor scale very quickly.
The modern personal productivity industry is selling you a solution to a problem it created to benefit itself. People started making money off that. Loss aversion keeps that idea alive.
Productivity is a daily ritual.

View file

@ -0,0 +1,70 @@
---
title: "The Weekly #42: Metaphors for Design - Brutalist Architecture, Gardens, and Video Games"
author: "Thomas Wilson"
date: 2021-05-28T18:14:00
slug: "2021-05-28-the-weekly-42-metaphors-for-design"
draft: false
tags:
- weekly
---
_The Weekly_ is a weekly essay on something Ive been thinking about in the last seven days. Theyre less than a thousand words long. This week I want to talk about the metaphors we use when we talk about designing for the web.
I read two (fantastic) pieces on the web this week:
1. [What even is a website anyway?](https://manuelmoreale.com/thoughts/what-even-is-a-website-anyway) by Manuel Moreale, who cited,
2. [Brutalist Web Design](https://cmhb.de/brutalist-web-design) by Carl Barenbrug
Sometimes I have no time for Medium-style self proclaimed “think pieces” about the web and technology. Theyll expound self-indulgently on non-actionable points, while the rest of us get on with the mundane tasks of building things. This is a criticism I throw un-ironically from the glass house of my personal website.
The above pieces are good. Very good, actually. They remind you it doesnt have to be like this. We dont have to design and build websites and web apps against a feature list that never stands still. That were building for _our_ audience, not the public.
When I started web development, I internally compared what I was doing to Googles work. Now its Stripes (their designers are ~ artists ~ though) and a milieu of other web apps. Every user, we tell ourselves, is expecting an experience which rivals AirBNB, and Reddit, and Etsy. Even when they land on our dinky little personal site.
I dont think they are. I think we, the people who design and build things on the internet, are. Not every blog needs a load-balanced Elastic Search instance against it. Heck, not every website needs Card or a Menu component.
You can build a feature complete website with maybe a dozen html tags and a single CSS file. Does it even need JavaScript? Itd be heckin fast and SEO optimised to boot.
It doesnt matter what other people are doing. Your website probably wont turn into the next Reddit or Tumblr. A website can be feature complete. A feature list can _not_ grow.
Barenbrugs piece (mentioned at the top) argues that we can see websites like Brutalist Architecture: created and inhabited by humans…
> Brutalist architecture not only reduces construction to its basic materials, but it also finds beauty in that simplicity.
I like being reminded of this. I like the Brutalist Architecture metaphor.
There are two other metaphors which I think about a lot when I step back from building.
## That Garden Metaphor
I heard about [this quote](https://www.goodreads.com/quotes/749309-i-think-there-are-two-types-of-writers-the-architects) this from George R R Martin, in the context of writing:
> I think there are two types of writers, the architects and the gardeners. The architects plan everything ahead of time, like an architect building a house. They know how many rooms are going to be in the house, what kind of roof they're going to have, where the wires are going to run, what kind of plumbing there's going to be. They have the whole thing designed and blueprinted out before they even nail the first board up. The gardeners dig a hole, drop in a seed and water it. They kind of know what seed it is, they know if planted a fantasy seed or mystery seed or whatever. But as the plant comes up and they water it, they don't know how many branches it's going to have, they find out as it grows.
I like this metaphor because it is chaotic and unpredictable. Its non-committed and it changes. I think these are good qualities to have in technology, and life.
Gardening acknowledges the life of a project is out of your control. Something you can guide, and give suggestions to, but eventually something that will thrive best when given good conditions and space.
## The Video Game Metaphor
I cant remember where I heard this first. I found some [good](https://evilmartians.com/chronicles/level-up-for-ux-design-lessons-from-videogames) [articles](https://www.nngroup.com/articles/usability-heuristics-applied-video-games/)[on](https://www.invisionapp.com/inside-design/the-ux-lessons-i-learned-from-video-games/) it, though.
Video games are expertly and intentionally designed. Everyone who designs things can learn something from them. I like the analogy for two main lessons:
1. Your design needs to get out of the way
2. Design can reduce friction, not make everything easy
**Get out of the way.** No one plays a game for the User Interface (UI) or Heads Up Display (HUD) design. But a bad design will ruin your experience as a player. Because it gets in your way.
Nobody goes to QuickBooks because they just want poke around. People go to QuickBooks to make sure their receipts, invoices, and payroll are up to date then they _get the hell out of there_. Nobody opens the inventory in Diablo II to browse, you open it to check the stats on your fire staff and equip or sell it.
I work at a laundry company. I agonise over creating the best user experience and interface elements I can. People dont go to our website because they want to look at a list of things they _could_ get cleaned. They go there to get their things cleaned then get out. People dont want to notice my new Receipt component design.
**Reduce friction.** Video games are challenging. It makes them rewarding. Hollow Knight is maybe the most frustrated I have felt in 2021 so far and _we are in a pandemic_. Hades is so frustrating I could cry at times.
If QuickBooks goal was to remove all stress and difficulty from a users life, theyd just say “pay us \$1/mo and well do all your accounting and filing and youll never have to worry about it”. The business fails but the customer succeeds.
Your website or app is one thing your user will do today. Then, if youre lucky, theyll forget about you completely, and move on. Theyre okay with the friction of the task at large. Taxes are annoying, bank statements are annoying. But you cant solve that unless you become a government or bank.
Dont solve the puzzle, be a good puzzle piece.

View file

@ -0,0 +1,77 @@
---
title: "The Weekly #43: Vision, problem, and action"
author: "Thomas Wilson"
date: 2021-06-05T10:16:00
slug: "2021-06-05-weekly-43-vision-problem-action"
draft: false
imageUrl: "preview-images/43.png"
tags:
- weekly
---
The Weekly is a weekly essay where I write about something Ive been thinking about in the last seven days. Theyre under 1000 words, and this week I want to talk about vision and problems when youre building a new product.
Im building [the lexicon](https://www.thelexicon.app), where I am (un-ironically) trying to build the worlds most useful language learning resources. I like Duo Lingo, but I dont think it helps you much in the real world ™️. Its born out of my desire (and previous moderate success) to be come proficient in French. The pandemic slashed my French proficiency, though.
Over the past few weeks Ive been thinking more about this product idea. I think theres enough scope in the vision of “best language learning resources in the world” that I can meaningfully do something new. I think I know enough about computers and learning to do something impactful.
The first thing I did? Set up a landing page with a sign-up form for a mailing list, and released two (free) sets of flash-cards with the most common words. If you want them, you know where to find them.
None of these things (which took real time and energy) solve any of the core problems that Im trying to solve, though. Ive got a vision for the company, and these things move me generally in the direction of it. I cant sell anything if people cant find where to buy it.
But I dont think I solved the high value problems.
In his essay _how to get startup ideas_ Paul Graham says:
> You should only work on problems that exist. And yet by far the most common mistake startups make is to solve problems no one has… The verb you want to be using with respect to startup ideas is not "think up" but "notice”… The most successful startups almost all begin this way.
I created this vision because I noticed a problem: I want to learn a language in an efficient way, that gets me to real-world use quickly. Having a landing page does nothing to solve that particular problem.
What Graham says is (probably) true, but I also think they miss out on another dimension of problems: the specificity / uniqueness of them.
## Getting Specific: Flashcards
Lets get specific.
I produced some flashcards sets. These keeps within the vision, but what problems do flashcards solve?
1. Target-language translations of words (_être_ ➡️ “to be”)
2. They decide what words youre learning
3. The can be used in [Active Recall](https://en.wikipedia.org/wiki/Active_recall)
This list, broadly, runs from most generic to most opinionated solutions.
**1. Bilingual translation** Could you learn French with resources which _just_ showed you the words in the target language. _Verser_, _manifestation_, et _vaccin_.
Have you just learned _to pour/contribute_, _protest_ (noun), and _vaccine_ ? No. You maybe could have guessed the latter, though.
To remove the bilingual elements of language-learning flashcards would be an unexpected feature. Maybe replacing them with image/sound [can help](https://link.springer.com/article/10.1007/s11145-018-9906-x) (an auditory component for French ↔️ English translations would be beneficial) but largely, you need the bilingual text. This isnt a high-value problem.
**2. Decide what words**What words should I learn? This is a more interesting problem. Its actually one of the core problems that lead me to think about the lexicon. I dont think we teach useful words to new language-learners.
The problem of “what words do we learn, and in what order” is a problem worth solving. So I used data-backed findings to decide on the most common verbs. This is a higher-value problem.
**3. Encourage Active Recall **Active Recall is, almost irrefutably, a core component of any language-learning practice. When you use flashcards, you should see the prompt and guess the answer (actually guess it, like, say it aloud) before viewing the answer. Anything else is passive recall or lying to yourself.
Active recall is essential to any effective language learning practice, and I was leaving it as optional. “Here”, I said, “are some flashcards. You know how to use them effectively, right?”.
A foolish assumption that was probably false (no one teaches these skills _de facto_ in schools) which essentially let the user determine exactly how effective or useful the language-learning resource was going to be
I had a chance to solve an important and unique problem (how to pair the “right” words with the “right” learning method) and I delivered it in static flashcards. I moved towards the vision without solving the particular problems: actually increasing your French vocabulary.
I left the hard work of solving the problem to the customer. I shifted responsibility.
## Visions are slopes, problems are places
I was guided by a vision, without thinking about the unique and important problems.
A vision is like a slope. Its easy to know when youre heading up or down hill, and you can conform to a vision by degree: head directly down hill, or go diagonally.
If a vision is a slope, a problem is a place. Or a least a region. The further away from the problem you are, the easier it is to head towards it. When you havent started, doing almost anything will get you closer. Setting up a landing page and a mailing list, for example.
But you get a bit closer and youve got to change bearing. You were heading east, but now youve got to head north-east. And then north-north-east. Anything other than that and you start veering away your destination. Maybe youll find a different problem along the way (the infamous _pivot_) or maybe you wont.
A mailing list, a landing page, and some static flashcards are not the worlds most useful language learning resources. Theyre part of the vision but not the product,
Set vision, solve problems.

View file

@ -0,0 +1,65 @@
---
title: "The Weekly #44: Thinking about Conspiracy Theories"
author: "Thomas Wilson"
date: 2021-06-10T20:18:00
slug: "2021-06-10-weekly-44-thinking-about-conspiracy-theories"
draft: false
imageUrl: "preview-images/44.png"
tags:
- weekly
---
_The Weekly_ is a series of essays under one thousand words where I write about something Ive been thinking over the last seven days. This week I want to talk about misinformation and conspiracy theories surrounding Covid-19, and why theyre more harmful than previous conspiracy theories. Ive been a little busier than usual this week, so lets get into it
Alongside the actual pandemic of Covid-19, the World Health Organisation (WHO) has declared an [infodemic](https://www.who.int/health-topics/infodemic#tab=tab_1): the “false or misleading information in digital and physical environments during a disease outbreak”.
The consequences of misinformation worsen the effect of a disease on a population (thats us). They can work directly by encouraging less-safe (i.e. less adherence to preventative measures, like wearing a mask or social distancing), as well as specifically dangerous (intentionally attempting to spread the disease) behaviour.
## Compassion & Sympathy
Before I begin, I also want to add that over the past few weeks I have felt a lot more sympathy for those who believe COVID-19 misinformation. [They are typically associated with](https://www.cambridge.org/core/journals/psychological-medicine/article/coronavirus-conspiracy-suspicions-general-vaccine-attitudes-trust-and-coronavirus-information-source-as-predictors-of-vaccine-hesitancy-among-uk-residents-during-the-covid19-pandemic/FEC34AA0D1972E3A761C784A39D26536) lower education, lower trust in the government, lower income, and lower scientific trust.
[An American study](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8083329/) which looked at adherence to social distancing measures in American citizens found that those who disregarded social distancing were more likely to to have great “pseudoscientific beliefs, lower governmental and institutional trust, lower risk perceptions, and [conservative political] affiliation”.
I used to think believing the conspiracies was a choice, and now I think its much more a consequence of feeling unheard. Of seeing the world as unfair, and seeking a reason other than ignorance or a bureaucracy-over-people government.
Believing these conspiracy theories is easier when you dont want the world to be unfair. When you dont want there to be a disease that doesnt threaten you, but does threaten others. So you have to sacrifice something for “nothing” in return . Ill touch on cognitive dissonance later, but I think were retrofitting what were seeing into what we want to believe.
##  Belief in multiple conspiracy theories
Im near the end of R. Brothertons [Suspicious minds: why we believe conspiracy theories](https://www.bloomsbury.com/us/suspicious-minds-9781472915641/). In it, they talk about how belief in conspiracy theories are often correlated. If you believe in one, youre likely to believe in another. Even when theyre unrelated.
Previously, this would mean believing that the Kennedy assassination was connected to 9/11. Or that the Freemasons secretly run our governments and plan our wars. But what do you do with that information? Trot it out at parties to a silence nobody feels comfortable filling, or share it among your co-conspirators to nods and disgruntled feelings?
You might be (probably) wrong, but youre also (probably) not hurting anybody with your beliefs.
The Wikipedia page for [Covid-19 Misinformation](https://en.wikipedia.org/wiki/COVID-19_misinformation) runs several thousand words, and details at least ten broad categories of misinformation. These fall into a few groups:
- **The disease**: e.g. the belief that COVID-19 was created and released by a secretive global organisation or government to control the global population; or that the mortality of the disease is not worth worrying about.
- **Medical and scientific responses**: e.g. the belief that vaccines or medications are not safe or could even be designed to actively harm people
- **Social responses**: e.g. the belief that some government or secret organisation are trying to make us obedient to their commands
These are _massively_ different types of arguments. But they all push behaviour in one direction: less adherence to public health policy. Less social distancing, less vaccination, more deaths and suffering.
Separate among the conspiracy theories which have emerged are that COVID-19 was a virus invented as a weapon to control global population, as a trigger to get us to inject microchips into our brains for mind control or to impart our ability to reproduce, and as a way to get us used to wearing face-coverings to make us more obedient citizens.
If youve got brain control, you dont need to persuade anyone. If youre trying to control population in a physiological way, why do you need wilfully obedient citizens?
Its possible to hold conflicting beliefs in our head. Our brains will shape them until theyre in-accordance with each other. We call that [cognitive dissonance](https://en.wikipedia.org/wiki/Cognitive_dissonance), and it saves us from a lot of distress and time wasted in examining everything we believe and do before we assimilate something new.
Now, with COVID-19, even disconnected beliefs are pointing peoples actions in a single direction. Belief a maligned global power set against the free will of the people, or corrupt medical researchers, or an evil foreign state all point towards the belief that adherence to public health behaviours should be ignored because COVID-19 is a) not-existent, b) not dangerous, or c) a weapon to control us, and should be ignored.
Belief in one conspiracy theory makes you more likely to believe another, even when theyre not related. Even when theyre directly opposing.
## Conspiracy theories fill a vacuum
We do not know everything about COVID-19. The origin and nature of the virus itself, our governmental and societal response to it. The chance that we, in June of 2021, know everything there is to know about a pandemic which is still happening are very low. We do not know everything. That statement is caution.
This need for caution, of not overstepping our boundary or certainty, has left gaps in peoples understanding of the disease.
A theory with less evidence than the one it opposes shouldnt be able to dislodge one with more explanatory power. But they can. When theyre more appealing or more conforming or more sensible to the people hearing them.
Were already susceptible to these beliefs, and we dont have the infrastructure (legislative, technological) to stop them spreading. So theyre spreading. And theyre changing actions.
So theyre causing unnecessary deaths.

View file

@ -0,0 +1,38 @@
---
title: "The infinite coast of problem solving"
author: "Thomas Wilson"
date: 2021-06-13T19:48:00
slug: "2021-06-13-infinite-coast-of-problem-solving"
draft: false
tags:
- lexicon
- design
- product
---
Im currently designing and building the lexicon, ambitiously explained as “the most useful language learning resources in the world”.
The problem is that theres a lot involved in that, you know? Theres theoretical questions like “what does most useful mean?” and “how do humans learn languages”?
Then theres small problems like “what is the shape of the JSON I send to the client?” and “how do I generate prompts & questions for language learning?”.
Ive been thinking about these problems, in some capacity, for legitimately years. So its no wonder that I come to them with so much gusto.
A lot of the questions are nebulous. “Best” is subjective, and learning is a spectrum. Proposing theories and ideas is okay, but making something and finding out is even better.
The questions are big, and important to me, and so I dont want an imperfect solution. The tech has to scale, the processes have to be automated, everything has to be _just so_. Im building tools for problems I havent encountered but know I will encounter. Or would encounter, if I just got on with the work.
Problem solving is fractal. Every step you propose to get from A to B has a whole subset of steps if you look at it closely. If youre not careful it goes from A -> B, to A1 -> A2, to A1.i -> A1.ii.
Its like how [the coastline has theoretically infinite length].
What Im saying is that this week I challenged myself: no code, just design. Just product problems and questions. No infinite coastlines, no cartography.
So I made some designs. Theyre down below. This is what happens when I ask the question “what could the future of language education _actually_ look like” and then demand a concrete answer from myself.
![the lexicon dashboard](/assets/blog-images/2021-06-13/dashboard.png)
![guessing a word](/assets/blog-images/2021-06-13/guess-empty.png)
![guessing a word with answers](/assets/blog-images/2021-06-13/guess-answers.png)

View file

@ -0,0 +1,31 @@
---
title: "The Weekly #45: This is an old story"
author: "Thomas Wilson"
date: 2021-06-27T08:40:00
slug: "2021-06-27-weekly-45-this-is-an-old-story"
draft: false
imageUrl: "preview-images/45.png"
tags:
- weekly
---
The Weekly is a series of essays where I write on something I've been thinking about over the last seven days. They're under a thousand words. There's some stuff going on in my professional life (positive stuff, but still stuff, you know?) so it's going to be a short one this week. It's better to publish than not.
I want to talk about old stories. I mean things that people have been experiencing for thousands or tens or thousands of years. I take a _lot_ of joy from realising when I'm seeing, or involved in, and old story.
There are some cliché old stories: sitting around a campfire, the smell of freshly cooked bread, hearing somebody sing or read a story out loud. There's a chance that literally everybody in your family tree for the last one hundred (or two hundred) generations has experienced these things. If humanity makes it another one hundred generations, they'll probably experience them too. These things are old stories.
I take a special kind of joy in realising that I'm in the middle on an old story. Let me give an example. A few weeks ago my company held their Christmas/Summer party (lockdown had us delayed). We all got on a boat, and went up and then down the Thames for a bit. While on the boat, some people got a little too familiar with the bar. Some people got too drunk on a boat.
People getting a little too drunk on a boat: old story.
Watching somebody sweep the dust from their shop floor out on to the street: old story.
Picking blackberries off the plant while passing by: old story.
Noticing the summer solstice: old story.
Old stories make the world feel richer to me. They bring me closer to the human experience, and away from the personal experience. They make me feel like I'm a part of something, and humbled. We've come really far in the last one hundred years, but some things have been the same for the past couple of thousand. And they'll stay the same. We're all still people.
Try and keep an eye out for old stories, they're fun.

View file

@ -0,0 +1,16 @@
---
title: "Out of office: summer 2021"
author: "Thomas Wilson"
date: 2021-07-08T15:47:00
slug: "2021-07-08-out-of-office"
draft: false
---
Summer has always been a time for _doing_ and living. It doesn't feel right to force at least one piece of writing out of my brain every week. Discipline and routine are useful tools for living, but so is taking a summer break. I'm going out of office for the next couple of months, so I can focus on the latter. I want long cycles, solitary train rides, food eaten outdoors, and adventure. This is what summer is for.
So there will be less writing in public, and more living in private for a little while. It's been a weird 18 months with a pandemic, but this year I feel I can have a more "normal" summer. So I'm going to do that. Shame that I won't be going to Florence, though.
Take care and stay safe, I'll be back when the days start drawing in ✌️

View file

@ -0,0 +1,22 @@
---
title: "Back in office: summer 2021"
author: "Thomas Wilson"
date: 2021-10-11T07:16:00
slug: "2021-10-11-back-in-office"
draft: false
---
After a year and a half of very new normal, summer 2021 was pretty perfect. I mean, the weather wasn't summery, being around a lot of strangers (and even friends) felt odd, and there seemed an _awful_ lot of pressure to make this The Best Summer Ever.
I'm pretty grateful for a lot of small moments this summer.
Here are some of those moments:
- Moved to Oxford and filled a moderate-sized house with an unwise number of plants
- Climbed Helvellyn and Haystacks in the Lake District
- Ate food outside with friends
- Ate food inside with family
- Watched campfires
- Drank gin on hot evenings and cold nights from between clinking ice and wedges of citrus
- Cycled through sunny mornings and afternoons

View file

@ -0,0 +1,39 @@
---
title: "It feels like the handbrake has come off"
author: "Thomas Wilson"
date: 2021-10-25T18:11:00
slug: "2021-10-25-the-handbrake-has-come-off"
draft: false
---
Over the past two months I have inherited leadership of an engineering team I have worked in for the last twelve months. In the last two weeks I've seen the speed of development go from not-slow, to almost inarguably fast (given current resource constraints).
I've spent months slowly attempting to unpick the parts of the team and company which were bottlenecks. There's actually some very interesting conversations around what makes a bottleneck, and how do you spot one. But I want to talk about the feeling of not moving fast, and then all of a sudden moving quickly.
The analogy I've been giving is that it's like I'm in a car facing down hill, and then the handbrake came off.
At first I was like _ahhhhhh!_, but now I'm more like _ahhhh?_. Ya know?
For the year before this I had been a member of a very small engineering team, where I had written or reviewed 90% of the code that went into production. I, broadly, knew all of the projects, and what was happening.
Now, with a larger team (six) and some well-experienced hands in and incoming, things are starting to happen that I don't _fully_ understand. Sure, I understand the what and the why, but the how isn't as in focus. I'm a frontend engineer by trade, dev-ops is... _hand-wavy_ it works?
This is the _ahhhhhhh!_ moment. The fear that things are happening, decisions are being made, changes to passing, and I've had full visibility on the result but far less on the process. And that scares me because what if things start going wrong?
I trust all the engineers in my team implicitly, you have to, but it's still scary. Things still go wrong.
And the _ahhhhh?_ ? That came when I saw the cadence of our releases going up, the quality and security of our software being cemented (test-driven development and refactoring), and both deeper and wider features being shipped.
Yes, it's terrifying and I feel a little out of control, but it's been about two years since I've felt like I'm part of such a productive engineering organisation. It feels like the value proposition of engineering is apparent, not promised.
There are lot of parts to this improvement, including but not limited to:
- **Test-driven development** at unit, functional, and integration level
- **A simple git workflow** for `main` -> `feature` -> PR -> `main`
- **Pair programming** for 10-50% of my day
- **Feature-driven tickets**, by moving to a monorepo and unifying development & deployment, engineers ship an entire (cross-cutting) feature all at once
I'd love to talk in detail on each of these, but for now I'll just say that I am confident each of these highly correlate to better developer productivity.

Some files were not shown because too many files have changed in this diff Show more