This commit is contained in:
2025-03-24 16:55:05 +00:00
parent 617b07318e
commit 9a99d9db46
6 changed files with 0 additions and 0 deletions
Executable
+110
View File
@@ -0,0 +1,110 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This template originates from:
% http://www.LaTeXTemplates.com
%
% Authors:
% Jan Vorisek (jan@vorisek.me)
% Based on a template by Jan Küster (info@jankuester.com)
% Modified for LaTeX Templates by Vel (vel@LaTeXTemplates.com)
% Adapted for personal use by Joshua Coles (josh@coles.to)
%
% License:
% The MIT License (see included LICENSE file)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass[9pt]{developercv} % Default font size, values from 8-12pt are recommended
\definecolor{Accent}{HTML}{367DA2}
\definecolor{BarTitle}{HTML}{000000}
\definecolor{BarColor}{HTML}{000000}
\definecolor{BarTitle}{HTML}{1C2331}
\definecolor{BarColor}{HTML}{1C2331}
\definecolor{SectTitleColor}{HTML}{367DA2}
\definecolor{EntryTitleColor}{HTML}{367DA2}
\usepackage{enumitem}
\usepackage{ifthen}
% Enable to disable litigates for ATS
%\usepackage{microtype}
%\DisableLigatures{encoding = *, family = *}
\newboolean{include-sensitive}
\setboolean{include-sensitive}{true}
\begin{document}
\input{header.tex}
\cvsect{Who Am I?}
\begin{minipage}[t]{0.8\textwidth}
\vspace{-\baselineskip} % Required for vertically aligning minipages
% Working in the domain for over 10 years, software engineering is a profession and a passion.
I am a passionate and adaptable software engineer with a strong focus on delivering high-quality, maintainable solutions. With experience across a range of technologies and industries, I thrive on understanding the business and organisational context behind software, ensuring that technical solutions align with real-world needs.
I believe that effective communication, problem-solving, and a willingness to continuously learn and adapt are key to delivery effective solutions.
% Working in the domain for over 10 years software engineering is a profession and a passion. My drive throughout has been to understand the business and organisational context of the problem, as the most important component of any technical solution.
% I have been working with software for over 10 years with problems and technologies.
% My drive over 10 years has always been addressing real problems that I encounter with the tools to hand — treating specific technologies as secondary to understanding the organisational context of the problem.
Through my work at Better Conversations Foundation, I led the development of a real-time web application, collaborating closely with users to continuously evolve the product where
% In my work at the ONS, I was responsible for software delivery, helping to manage a large team of contributors under a tight timeframe.
% Combined
I have developed a love and appreciation for correct solutions that respect their user and customers. I am excited about the opportunity to work with a collaborative, ambitious team like Ghyston’s where I can contribute my experience while continuing to grow as an engineer.
%am excited to see how AI can enhance this mission in otherwise intractable domains.
% Typing trailer:
% Throughout my work I have developed a love and appreciation for strongly typed languages and maximising the compile-time assurance that can be achieved. This has consistently paid dividends in greater development velocity, and the elimination of issues before shipping.
% AI trailer:
% My recent work surrounding AI has shown me its use in solving otherwise intractable problems and providing insight into unstructured data and, I am excited to explore its further applications.
\end{minipage}
\hfill
%\begin{minipage}[t]{0.275\textwidth}
% \vspace{-3\baselineskip} % Required for vertically aligning minipages
% \colorbox{SectTitleColor}{\textcolor{white}{\MakeUppercase{\textbf{Proficiency}}}}
% \vspace{0.5\baselineskip}
% \begin{barchart}{3}
% \baritem{Typescript}{80}
% \baritem{React}{70}
% \baritem{Rust}{70}
% \baritem{Python}{60}
% \baritem{Git}{80}
% \baritem{Ruby}{75}
% \baritem{SQL}{60}
% \end{barchart}
%\end{minipage}
%
% Experiences
%
\input{experiences.tex}
%%%%%%%%%%%%%
% EDUCATION
%%%%%%%%%%%%%
\input{education.tex}
%%%%%%%%%%%%%%%%%%%%%%%%%%
% ADDITIONAL INFORMATION
%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{minipage}[t]{0.5\textwidth}
\vspace{-\baselineskip} % Required for vertically aligning minipages
\cvsect{ADDITIONAL QUALIFICATIONS AND TRAINING}
\href{https://betterconversations.foundation/index.html}{\underline{Better Conversations}} — 2022 \\
ISO9001 and ISO27001 training — 2018
\end{minipage}
\hfill
\begin{minipage}[t]{0.5\textwidth}
\vspace{-\baselineskip} % Required for vertically aligning minipages
\cvsect{Interests}
Long distance running; politics and governance and the applications of technology therein; previous committee member of Philosophy Society at University.
\end{minipage}
\input{references.tex}
\end{document}
+221
View File
@@ -0,0 +1,221 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Developer CV
% LaTeX Class
% Version 1.0 (28/1/19)
%
% This class originates from:
% http://www.LaTeXTemplates.com
%
% Authors:
% Jan Vorisek (jan@vorisek.me)
% Based on a template by Jan Küster (info@jankuester.com)
% Modified for LaTeX Templates by Vel (vel@LaTeXTemplates.com)
%
% License:
% The MIT License (see included LICENSE file)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%
% CLASS CONFIGURATION
%%%%%%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{developercv}[2019/01/28 Developer CV class v1.0]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{extarticle}} % Pass through any options to the base class
\ProcessOptions\relax % Process given options
\LoadClass{extarticle} % Load the base class
%%%%%%%
% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS
%%%%%%%
\setlength{\parindent}{0mm} % Suppress paragraph indentation
\usepackage[hidelinks]{hyperref} % Required for links but hide the default boxes around links
\newcommand{\lorem}{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus.} % Dummy text
\pagestyle{empty} % No headers or footers
\usepackage{moresize} % Provides more font size commands (\HUGE and \ssmall)
%%%%%%%
% PAGE LAYOUT
%%%%%%%
\usepackage{geometry} % Required for adjusting page dimensions and margins
\geometry{
paper=a4paper,
top=1.75cm, % Top margin
bottom=1.75cm, % Bottom margin
left=2cm, % Left margin
right=2cm, % Right margin
headheight=0.75cm, % Header height
footskip=1cm, % Space from the bottom margin to the baseline of the footer
headsep=0.5cm, % Space from the top margin to the baseline of the header
% showframe, % Uncomment to show how the type block is set on the page
}
%%%%%%%
% FONTS
%%%%%%%
\usepackage[utf8]{inputenc} % Required for inputting international characters
\usepackage[T1]{fontenc} % Output font encoding for international characters
\usepackage[default]{raleway}
%\usepackage[defaultsans]{droidsans}
%\usepackage{cmbright}
%\usepackage{fetamont}
%\usepackage[default]{gillius}
%\usepackage{roboto}
\renewcommand*\familydefault{\sfdefault} % Force the sans-serif version of any font used
%%%%%%%
% FontAwesome and Icon blocks
%%%%%%%
\usepackage{fontawesome}
% Command to output an icon in a black square box with text to the right
% The first parameter is the FontAwesome icon name, the second is the box size and the third is the text
\newcommand{\icon}[3]{%
\vcenteredhbox{\colorbox{Accent}{\makebox(#2, #2){\textcolor{white}{\large\csname fa#1\endcsname}}}}% Icon and box
\hspace{0.2cm}% Whitespace
\vcenteredhbox{\textcolor{black}{#3}}% Text
}
%%%%%%%
% Graphics and Charts
%%%%%%%
\usepackage{tikz} % Required for creating the plots
\usetikzlibrary{shapes, backgrounds}
\tikzset{x=1cm, y=1cm} % Default tikz units
% Command to vertically centre adjacent content
\newcommand{\vcenteredhbox}[1]{% The only parameter is for the content to centre
\begingroup%
\setbox0=\hbox{#1}\parbox{\wd0}{\box0}%
\endgroup%
}
% Bar Chart
\newcounter{barcount}
% Environment to hold a new bar chart
\newenvironment{barchart}[1]{ % The only parameter is the maximum bar width, in cm
\newcommand{\barwidth}{0.35}
\newcommand{\barsep}{0.2}
% Command to add a bar to the bar chart
\newcommand{\baritem}[2]{ % The first argument is the bar label and the second is the percentage the current bar should take up of the total width
\pgfmathparse{##2}
\let\perc\pgfmathresult
\pgfmathparse{#1}
\let\barsize\pgfmathresult
\pgfmathparse{\barsize*##2/100}
\let\barone\pgfmathresult
\pgfmathparse{(\barwidth*\thebarcount)+(\barsep*\thebarcount)}
\let\barx\pgfmathresult
\filldraw[fill=BarColor, draw=none] (0,-\barx) rectangle (\barone,-\barx-\barwidth);
\node [label=180:\colorbox{BarTitle}{\textcolor{white}{##1}}] at (0,-\barx-0.175) {};
\addtocounter{barcount}{1}
}
\begin{tikzpicture}
\setcounter{barcount}{0}
}{
\end{tikzpicture}
}
% Bubble Chart
\newcounter{a}
\newcounter{b}
\newcounter{c}
% Command to output a number of automatically-sized bubbles from a string in the format of '<size>/<label>', e.g. \bubbles{5/Eclipse, 6/git, 4/Office, 3/Inkscape, 3/Blender}
\newcommand{\bubbles}[1]{
% Reset counters
\setcounter{a}{0}
\setcounter{c}{150}
\begin{tikzpicture}[scale=3]
\foreach \p/\t in {#1} {
\addtocounter{a}{1}
\bubble{\thea/2}{\theb}{\p/25}{\t}{1\p0}
}
\end{tikzpicture}
}
% Command to output a bubble at a specific position with a specific size
\newcommand{\bubble}[5]{
\filldraw[fill=black, draw=none] (#1,0.5) circle (#3); % Bubble
\node[label=\textcolor{black}{#4}] at (#1,0.7) {}; % Label
}
%----------------------------------------------------------------------------------------
% CUSTOM SECTIONS
%----------------------------------------------------------------------------------------
% Command to output section title headings
\newcommand{\cvsect}[1]{% The only parameter is the section text
\vspace{\baselineskip} % Whitespace before the section title
\colorbox{SectTitleColor}{\textcolor{white}{\MakeUppercase{\textbf{#1}}}}\\% Section title
}
%----------------------------------------------------------------------------------------
% ENTRY LIST
%----------------------------------------------------------------------------------------
\usepackage{longtable} % Required for tables that span multiple pages
\setlength{\LTpre}{0pt} % Remove default whitespace before longtable
\setlength{\LTpost}{0pt} % Remove default whitespace after longtable
\setlength{\tabcolsep}{0pt} % No spacing between table columns
% Environment to hold a new list of entries
\newenvironment{entrylist}{
\begin{longtable}[H]{l l}
}{
\end{longtable}
}
% First argument for the leftmost date(s) texct,
% Second is for the bold entry heading
% Third is for the bold right-aligned entry qualifier
%Fourth is for the entry description
\newcommand{\entry}[4]{%
\parbox[t]{0.175\textwidth}{% 17.5% of the text width of the page
#1 % Leftmost entry date(s) text
}%
&\parbox[t]{0.825\textwidth}{% 82.5% of the text width of the page
\textbf{\textcolor{EntryTitleColor}{#2}}% Entry heading text
\hfill% Horizontal whitespace
{\footnotesize \textbf{\textcolor{EntryTitleColor}{#3}}}\\% Right-aligned entry qualifier text
#4 % Entry description text
}\\\\}
%%%%%%%
% Customised Helpers
%%%%%%%
\newcommand{\slashsep}{\hspace{2mm}/\hspace{2mm}}
\newcommand{\emailaddr}[1]{\href{mailto:#1}{#1}}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\newcommand{\kwdlst}[2][\slashsep]{%
\def\nextitem{\def\nextitem{#1}}% Separator
\renewcommand*{\do}[1]{\nextitem\texttt{##1}}% How to process each item
\docsvlist{#2}% Process list
}
+18
View File
@@ -0,0 +1,18 @@
\cvsect{Education}
\newboolean{include-education-dates}
\setboolean{include-education-dates}{true}
\begin{entrylist}
\entry
{\hfill}
{MSc Mathematics and Physics (Hons) (Sandwich)}
{University of Bath}
{1st Class Honours. Placement with the ONS between academic years 2 and 3.}
\entry
{\hfill}
{Prior Qualifications}
{Reading Blue Coat School}
{4 A Levels: A* Maths, A Further Maths, A Physics, A Chemistry\\
GCSEs: 1 A* with distinction, 8 A*s, 2 A’s, 1 B. Including A* with distinction in Further Maths, A*s in Maths, Sciences, English and Computing.}
\end{entrylist}
+80
View File
@@ -0,0 +1,80 @@
\cvsect{Experience}
\begin{entrylist}
\entry
{Present}
{Lead Software Engineer}
{Better Conversations Foundation}
{Returning to the foundation after my degree I have focused on:
\begin{itemize}[itemsep=-2pt,topsep=2pt]
\item End-to-End Product Delivery: I lead the development of a real-time web application for delivering coaching session to large audiences, from initial concept to full-scale product, engaging frequently with users and continuously evolving it to meet fast-evolving business needs.
\item Support the professional growth of junior developers through hands-on mentorship and guidance.
\item Spearheaded further AI work, including Model Context Protocol support and significant contributions to FOSS software projects to enable AI use in security-sensitive environments.
\item Producing a course for a high profile business cohort based in Oceana.
\end{itemize}
\kwdlst{Ruby on Rails, Ruby, Turbo, Stimulus, iOS, Project Management, Mentorship}}
\entry
{Final Year}
{Dissertation Project, AI Applications in Lagrangian Physics}
{University of Bath}
{My dissertation focused on incorporating Lagrangian Mechanics into physics-informed neural networks. My key contributions include,
\begin{itemize}[itemsep=-2pt,topsep=2pt]
\item Creating and optimising the core physics procedures in JAX to improve correctness compared to legacy implementations; allow for their use in loss functions; and reducing runtimes by a factor of $10^4$.
\item Researching, designing, and validating training methods.
\end{itemize}
The completed report can be found \href{https://files.joshuacoles.me/final-year-report.pdf}{\underline{here}}.
\\
\kwdlst{JAX, Neural Networks, Machine Learning, AI, Numpy, Flax, Tensorflow, Keras, Python}}
\entry
{Summer 2023}
{Software Developer}
{Better Conversations Foundation \& Amphora}
{
I lead efforts exploring the feasibility and application of AI based features in the main product.
\begin{itemize}[itemsep=-2pt,topsep=2pt]
\item Integrating vector based search and retrieval-augmented generation into the application in a non-intrusive manner.
\item Presenting work to customers and facilitating input on direction and feature fit.
\end{itemize}
Once I completed my work with Amphora, I moved to work at a connected non-profit, Better Conversations Foundation as their primary developer.%, working on their e-commerce and scheduling systems and initiating development on a real-time coaching flight-plan solution.
\begin{itemize}[itemsep=-2pt,topsep=2pt]
\item Implementing the e-commerce and scheduling systems for managing cohorts and staff.
\item Prototyping real-time coaching flight-plans to allow coordination between Facilitators as sessions progress
\end{itemize}
\kwdlst{Ruby on Rails, Stripe, Langchain, Vector Databases, Python}}
\entry
{2022 -- 2023\\{\footnotesize{part time aside studies}} \\\\2021 -- 2022\\\footnotesize{placement year}}
{Software Developer}
{Office for National Statistics}
{I joined a team working designing and developing software for processing the results of the 2021 Census. After the end of my placement I was kept on to assist with the next phase of product development and solution design. In this role I worked with sensitive data from the Census in isolated production environments and thus obtained SC clearance. Key contributions include,
\begin{itemize}[itemsep=-2.5pt,topsep=2pt]
\item Taking a leading role as release manager for the product and was heavily involved in requirements gathering for the new features.
\item Developing tools for debugging and observability in sensitive production environments, greatly increasing the our ability to diagnose production issues quickly.
% \item Restructuring a core service to decrease code duplication and increase test \& type coverage.
\item Designing architectures for the next stage of the project to address additional business needs.
\end{itemize}
This role gave me an appreciation for how the interpersonal aspects of successful team are crucial for the overall success of a project. This was especially important when interfacing with the wider organisation on the direction of the project.\\
\kwdlst{React, Redux, Express, Jest, Cypress, Redis, SQL, Postgres, HBase, Scala, Cloudera, Jenkins, Docker, Typescript, JavaScript, Linux, Microservices, Agile, Scrum}}
\entry
{2017 -- 2021\\\footnotesize{Holidays \& Part time}}
{Software Developer}
{Amphora}
{I worked independently to explore and investigate new technologies including,
\begin{itemize}[itemsep=-2pt,topsep=2pt]
\item Creating and maintaining SAML based customer access mechanism for confidential documentation.
\item Designing subscription management product using Wordpress as a Headless CMS for presentation under multiple service offering.
\end{itemize}
\kwdlst{SAML, Groovy, Java, Ruby on Rails, Ruby}}
\entry
{2011 — present}
{Ongoing Personal Projects}
{}
{My latest personal projects are focused on data analysis on different aspects of my life. This is done with a strong focus on self-hosting and privacy. Recent work includes:
\begin{itemize}[itemsep=-2pt,topsep=2pt]
\item AI based techniques for recipe extraction.
\item Database and platform for cross-domain analytics in my life.
\item ETL pipelines focused on breaking down data-silos.
\item Hosted across multiple servers with live monitoring and log and metrics aggregation.
\end{itemize}
A history of these is available on my \href{https://github.com/joshuacoles}{\underline{GitHub}} or \href{https://git.joshuacoles.me/explore/repos}{\underline{personal Gitea}}, along with this \href{https://git.joshuacoles.me/joshuacoles/cv}{\underline{CV and build process}}.
\\\kwdlst{Rust, Python, ETL, CI/CD, Github actions, Postgres, Caddy, Docker, Prometheus, Grafana, System administration}}
\end{entrylist}
+33
View File
@@ -0,0 +1,33 @@
\begin{minipage}[t]{0.45\textwidth}
\vspace{-\baselineskip}
\colorbox{Accent}{{\HUGE\textcolor{white}{\textbf{\MakeUppercase{Joshua}}}}}
\colorbox{Accent}{{\HUGE\textcolor{white}{\textbf{\MakeUppercase{Coles}}}}}
\vspace{6pt}
{\huge Full-stack Developer}
\end{minipage}
\begin{minipage}[t]{0.275\textwidth}
\vspace{-\baselineskip}
\ifthenelse{\boolean{include-sensitive}}{%
\icon{MapMarker}{12}{Bath / Reading}\\
\icon{Phone}{12}{+44 7564 199236}\\
\icon{At}{12}{\emailaddr{me@joshuacoles.me}}\\
}{%
\icon{MapMarker}{12}{South England}\\
\icon{At}{12}{{me at this domain}}\\\\
Personal information \\ omitted in web version
}
\end{minipage}
\begin{minipage}[t]{0.275\textwidth}
\vspace{-\baselineskip}
\icon{Globe}{12}{\href{https://git.joshuacoles.me/explore/repos}{Personal Gitea}}\\
\icon{Github}{12}{\href{https://github.com/joshuacoles}{github.com/joshuacoles}}\\
\icon{Linkedin}{12}{\href{https://www.linkedin.com/in/joshua-coles-a79498151/}{LinkedIn}}\\
\end{minipage}
\vspace{0.5cm}
+27
View File
@@ -0,0 +1,27 @@
\cvsect{References}
\newboolean{include-references}
\setboolean{include-references}{false}
\ifthenelse{\boolean{include-references} \AND \boolean{include-sensitive}}
{
\begin{entrylist}
\entry
{Employment\\Reference}
{Steve Gibbard}
{DevOps Technical Lead, Office for National Statistics}
{Line manager and Tech Lead while at Office for National Statistics \\ DevOps Technical Lead, Office for National Statistics\\Email: \emailaddr{steve.gibbard@ons.gov.uk}}
\entry
{Employment\\Reference}
{Mathew Cooke}
{Director of Operations, Amphora Research Systems}
{Email: \emailaddr{mathewc@amphora-research.com}\\ Contact Number: +44 1344 28863\\Address: Molly Millars Lane, Unit 6, Wokingham, RG4}
\entry
{Academic\\Reference}
{David Tsang}
{Senior Lecturer, Department of Physics, University of Bath}
{Project Supervisor \\Email: \emailaddr{dcwt21@bath.ac.uk}\\\href{https://researchportal.bath.ac.uk/en/persons/david-tsang}{\underline{Research Profile}}}
\end{entrylist}
}
{Available upon request}