fixup CV and first page

This commit is contained in:
Ville Lindholm 2024-10-03 17:53:36 +03:00
parent 161e9b0b8d
commit 327835f871
No known key found for this signature in database
6 changed files with 229 additions and 42 deletions

42
content/blog/test.md Normal file
View File

@ -0,0 +1,42 @@
---
title: "If by Rudyard Kipling"
date: 2024-10-02T12:14:57+03:00
tags: ["poetry"]
draft: false
---
If you can keep your head when all about you
Are losing theirs and blaming it on you,
If you can trust yourself when all men doubt you,
But make allowance for their doubting too;
If you can wait and not be tired by waiting,
Or being lied about, don't deal in lies,
Or being hated, don't give way to hating,
And yet don't look too good, nor talk too wise:
If you can dream—and not make dreams your master;
If you can think—and not make thoughts your aim;
If you can meet with Triumph and Disaster
And treat those two impostors just the same;
If you can bear to hear the truth you've spoken
Twisted by knaves to make a trap for fools,
Or watch the things you gave your life to, broken,
And stoop and build 'em up with worn-out tools:
If you can make one heap of all your winnings
And risk it on one turn of pitch-and-toss,
And lose, and start again at your beginnings
And never breathe a word about your loss;
If you can force your heart and nerve and sinew
To serve your turn long after they are gone,
And so hold on when there is nothing in you
Except the Will which says to them: Hold on!'
If you can talk with crowds and keep your virtue,
Or walk with Kings—nor lose the common touch,
If neither foes nor loving friends can hurt you,
If all men count with you, but none too much;
If you can fill the unforgiving minute
With sixty seconds' worth of distance run,
Yours is the Earth and everything that's in it,
And—which is more—you'll be a Man, my son!

View File

@ -1,33 +1,52 @@
<div id="resume">
<!--<img src="https://asdf.com" alt="Picture of Ville Lindholm"> -->
<h1>CV</h1>
<h2>Ville "Will" Lindholm</h2>
<!--
<p>Web: <a href="https://lindholm.dev">lindholm.dev</a></p>
<p>Email: <a href=#>ville@lindholm.dev</a></p>
<p>Twitter: <a href="https://x.com/lindholm_dev">@lindholm_dev</a></p>
<div id="description">
<p>
I am a software engineer currently based in Helsinki, Finland, with a deep knowledge of web-based apps
and APIs. I am interested in writing code that is readable, (appropriately) scalable and
well-architected.
I am always curious about new paradigms, patterns and tools.
</p>
<p>
In my spare time I write poetry and fiction, read a lot of books and dabble in improvisational theatre
and windsurfing. I also contribute to open source projects when I have the energy!
</p>
<div style="display: flex; justify-content: space-between;">
<h1><span class="onlyPrint">Ville Lindholm &mdash;</span> Curriculum Vitae</h1>
<button class="noPrint outline"
data-tooltip="Just print to PDF as usual, I have custom CSS styles to make it look nice!"
data-placement="left"><i class='bx bx-printer'></i> PDF version</button>
</div>
<div class="onlyPrint">
<div class="grid">
<div><i class='bx bx-envelope'></i> &langle;first_name&rangle;@&langle;last_name&rangle;.dev</a></div>
<div><i class='bx bx-globe'></i> <a href="https://lindholm.dev">https://lindholm.dev</a></div>
<div><i class='bx bxl-github'></i> <a href="https://github.com/vlindhol">@vlindhol</a></div>
<div><i class='bx bxl-linkedin-square'></i> <a
href="https://www.linkedin.com/in/villelindholm/">villelindholm</a></div>
</div>
-->
<hr />
</div>
<div id="description">
<p>
I am an experienced full stack software engineer currently based in Helsinki, Finland. I am interested in
writing code that is readable, (appropriately) scalable and
well-architected. I am always curious about new paradigms, patterns and tools.
</p>
<p>
In my spare time I write poetry and fiction, read a lot of books and dabble in improvisational theatre
and windsurfing. I also contribute to open source projects when I have the time!
</p>
</div>
<dl>
<dt>Recent Experience</dt>
<dt>
<h3>Recent Experience</h3>
</dt>
<dd>
<div class="note-box">
<strong>Years of experience: ~12 years</strong>. This is a rough estimate: I started learning
programming as a teen in 1999 and my first programming job was in 2002,
constructing web shops in Perl for my local ISP. I then worked on and off with coding until I graduated
university, so it's hard to put a number on my "years of experience".
</div>
</dd>
<dd>
<div class="no-page-break">
<h2><a href="https://memfault.com/">Memfault</a> <span>2021 &mdash; 2024</span></h2>
<h4><a href="https://memfault.com/">Memfault</a> <span>2021 &mdash; 2024</span></h4>
<p>
<b>Full-stack developer</b> for a web app that ingests data from millions
of IoT devices. Migrated the service from Heroku to AWS. Developed
a more advanced permission system. Developed a "batch operations"
a more advanced permission system (backend + UI). Developed a "batch operations"
API for common tasks in the UI (think e-mail batch operations).
</p>
<p>
@ -38,14 +57,15 @@
</p>
</div>
<div class="no-page-break">
<h2><a href="https://www.moominls.com/">Playvation / Moomin Language School</a> <span>2019 &mdash;
2021</span></h2>
<h4><a href="https://www.moominls.com/">Playvation / Moomin Language School</a> <span>2019 &mdash;
2021</span></h4>
<p>
<b>Senior Software Developer</b>. Backend and admin/content creation UI of
an educational mobile app for children (built with Unity). Implemented a
GraphQL API for the admin web app, and substantial UI/UX improvements. Added a
robust DevOps pipeline instead of manual deployments, bringing deployment time
down from hours/days to minutes (on both AWS and AWS China).
down from hours/days to minutes (on both AWS and AWS China). Also worked on the
product itself, a Unity-based mobile app, mainly on asset organization improvements.
</p>
<p>
<i>
@ -54,9 +74,9 @@
</p>
</div>
<div class="no-page-break">
<h2><a href="https://www.duodecim.fi/english/">Duodecim Publishing Company Ltd</a> <span>2017
<h4><a href="https://www.duodecim.fi/english/">Duodecim Publishing Company Ltd</a> <span>2017
&mdash;
2019</span></h2>
2019</span></h4>
<p>
<b>Lead developer</b> for <a href="https://www.ebmeds.org/en/">EBMEDS</a>, a CE class IIa
medical
@ -81,44 +101,56 @@
</dd>
</dl>
<dl>
<dt>Education</dt>
<dt>
<h3>Education</h3>
</dt>
<dd>
<div class="no-page-break">
<h2><a href="https://www.aalto.fi/en">Aalto University</a></h2>
<h4><a href="https://www.aalto.fi/en">Aalto University</a></h4>
<p>
<strong>Bachelor's degree:</strong> Applied Physics 2010<br />
<strong>Master's degree:</strong> Applied Physics 2014<br />
<strong>Bachelor's degree:</strong> Applied Physics<br />
<strong>Master's degree:</strong> Applied Physics<br />
<em>Major:</em> Energy physics (Fusion energy and plasma simulation)
</p>
<h2><a href="https://www.helsinki.fi/en">University of Helsinki</a></h2>
<h4><a href="https://www.helsinki.fi/en">University of Helsinki</a></h4>
<p>
<strong>Bachelor's degree:</strong> Nordic literature 2014
<strong>Bachelor's degree:</strong> Nordic literature
</p>
</div>
</dd>
</dl>
<dl>
<dt>Skills</dt>
<dt>
<h3>Skills</h3>
</dt>
<dd>
<div class="no-page-break">
<h2>Proficient</h2>
<h4>Proficient</h4>
<p>
TypeScript, React, AWS, Python, REST and GraphQL APIs, Agile and
Shape Up work processes, HTML and CSS.
<strong>Languages/Frameworks</strong>: TypeScript, Python, React, HTML and CSS.
</p>
<h2>Intermediate</h2>
<p>
Rust, C, Swift, C#
<strong>Databases/Infra</strong>: REST and GraphQL APIs, AWS, Terraform, Ansible, PostgreSQL,
ClickHouse, Redis, RabbitMQ, shell scripting.
</p>
<h2>Beginner/curious</h2>
<p>
C++, Elixir, various Lisps
<strong>Other</strong>: Scrum, Canban and Shape Up work processes
</p>
<h4>Intermediate</h4>
<p>
Rust, C, Swift, C#, C++
</p>
<h4>Beginner/curious</h4>
<p>
Elixir, Common Lisp, Zig
</p>
</div>
</dd>
</dl>
<dl>
<dt>References</dt>
<dt>
<h3>References</h3>
</dt>
<dd>
<div class="no-page-break">
Available on request (don't want to expose contact information needlessly for bots to scrape).

View File

@ -0,0 +1,51 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Open Graph metadata -->
<meta property="og:title" content="Lindholm Software">
<meta property="og:description" content="Ville Lindholm is a freelance software developer.">
<meta property="og:image" content="https://lindholm.dev/portrait.jpg">
<meta property="og:url" content="https://lindholm.dev">
<meta property="og:type" content="website">
<!-- fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Caprasimo&display=swap" rel="stylesheet">
<link href="https://fonts.cdnfonts.com/css/junicode-2" rel="stylesheet">
<!-- icons -->
<link href='https://unpkg.com/boxicons@2.1.4/css/boxicons.min.css' rel='stylesheet'>
<!-- pico helps with some basic CSS styling -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.css">
<!-- the rest is ours -->
<link rel="stylesheet" href="/style.css">
<title>{{ .Site.Title }}</title>
</head>
<body>
<header class="container noPrint">
<nav>
<ul>
<li>
<h4><a href="/" class="contrast">{{ .Site.Title }}</a></h4>
</li>
</ul>
<ul>
<li><a href="/cv" class="contrast">CV</a></li>
<li><a href="/blog" class="contrast">Blog</a></li>
</ul>
</nav>
</header>
<main class="container">
{{ block "main" . }}{{ end }}
</main>
</body>
</html>

View File

@ -0,0 +1,3 @@
{{ define "main" }}
{{ .Content }}
{{ end }}

16
layouts/index.html Normal file
View File

@ -0,0 +1,16 @@
{{ define "main" }}
<div
style="text-align: center; display: flex; justify-content: center; flex-direction: column; align-items: center; height: 50vh;">
<img src="/images/portrait.jpeg" alt="Picture of Ville Lindholm"
style="border-radius: 50%; width: 150px; height: 150px;" />
<hgroup>
<h1>Ville Lindholm</h1>
<p>Freelance Software engineer</p>
</hgroup>
<div style="display: flex;">
<a href="https://github.com/vlindhol"><i class='bx bxl-github'></i></a>
<a href="https://x.com/lindholm_dev"><i class='bx bxl-twitter'></i></a>
<a href="https://www.linkedin.com/in/villelindholm/"><i class='bx bxl-linkedin-square'></i></a>
</div>
</div>
{{ end }}

43
static/style.css Normal file
View File

@ -0,0 +1,43 @@
:root {
/* Add Junicode in front of the default Pico fonts, from https://picocss.com/docs/css-variables#all-css-variables */
--pico-font-family-sans-serif: "Junicode", system-ui, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, Helvetica, Arial, "Helvetica Neue", sans-serif, var(--pico-font-family-emoji);
}
h1,
h2,
h3,
h4,
h5 {
--pico-font-family: "Caprasimo", cursive;
--pico-font-weight: 400;
}
/* handy classes for showing/hiding stuff for printing */
@media print {
.noPrint {
display: none;
}
}
@media screen {
.onlyPrint {
display: none;
}
}
/* for displaying notes */
.note-box {
border: 1px solid #cce5ff;
background-color: #e9f7ff;
color: #004085;
padding: 15px;
border-radius: 5px;
margin-bottom: 20px;
}
.note-box::before {
content: "";
font-size: 20px;
margin-right: 10px;
vertical-align: middle;
}