summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Smeding <tom@tomsmeding.com>2026-05-03 14:40:34 +0200
committerTom Smeding <tom@tomsmeding.com>2026-05-03 14:40:34 +0200
commit1caf35480ecc8fbd6c1e900de019d21616103990 (patch)
treecde5188975ad156b71a126341f5b55c99577daf1
parent885e122474852868715269ca095a059611b6114a (diff)
Update homepage
-rw-r--r--index.html62
-rw-r--r--publications.json2
-rwxr-xr-xwebserver.js26
3 files changed, 66 insertions, 24 deletions
diff --git a/index.html b/index.html
index 5096b22..701797d 100644
--- a/index.html
+++ b/index.html
@@ -1,7 +1,8 @@
<!DOCTYPE html>
-<html>
+<html lang="en">
<head>
<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Tom Smeding</title>
<style>
@font-face {
@@ -36,6 +37,11 @@
body {
font-family: mononoki, mononoki-webfont, monospace;
text-align: center;
+ font-size: 12pt;
+}
+h2 {
+ margin-top: 25px;
+ margin-bottom: 18px;
}
div.main-content {
display: inline-block;
@@ -44,11 +50,22 @@ div.main-content {
div.longtext {
text-align: left;
}
-summary {
- cursor: pointer;
-}
-#pubs-ul {
+#pubs-table td {
text-align: left;
+ vertical-align: top;
+ padding-bottom: 10px;
+}
+#pubs-table td:first-child {
+ padding-left: 0;
+ padding-right: 5px;
+}
+.pubs-at {
+ color: #777;
+ font-size: small;
+ white-space: nowrap;
+}
+.pubs-title {
+ font-weight: bold;
}
@media (prefers-color-scheme: dark) {
body {
@@ -61,6 +78,9 @@ summary {
a:visited {
color: #99f;
}
+ .pubs-at {
+ color: #999;
+ }
}
</style>
</head>
@@ -69,7 +89,7 @@ summary {
<h1>Hi!</h1>
<p>
I'm Tom Smeding. I love programming, playing the piano, thinking about languages (both natural and programming), and occasionally mathematics.<br>
- I'm a PhD candidate in computer science at Utrecht University in the Netherlands.
+ I'm a postdoctoral researcher in computer science at the University of Edinburgh.
</p>
<p>
You can reach me via
@@ -89,22 +109,20 @@ summary {
<a href="https://orcid.org/0000-0002-4986-6820">ORCiD</a>.
</p>
<p>
- I have code on <a href="https://github.com/tomsmeding">Github</a> and my
- <a href="https://git.tomsmeding.com">own server</a>.
+ I have code on my <a href="https://git.tomsmeding.com">own server</a> and on
+ <a href="https://github.com/tomsmeding">Github</a>.
</p>
<p>
I've also <a href="/blog">written some notes</a> at some point.
</p>
- <details><summary><u>For a list of my academic publications, click here.</u></summary>
- <ul id="pubs-ul">
- <!--PUBS-REPLACE-START--> (Info missing, server misconfigured, sorry) <!--PUBS-REPLACE-END-->
- </ul>
- </details>
- <h2>My research</h2>
+
+ <h2>About me</h2>
<div class="longtext">
<p>
- Currently my primary research interest is in <a href="https://en.wikipedia.org/wiki/Automatic_differentiation" target="_blank">automatic differentiation</a> (AD), as seen through the lens of <a href="https://en.wikipedia.org/wiki/Functional_programming" target="_blank">functional programming</a> (FP), in my case mostly using the programming language <a href="https://haskell.org" target="_blank">Haskell</a>.
- My PhD supervisors are Gabriele Keller and Matthijs V&aacute;k&aacute;r.
+ In my postdoc at the University of Edinburgh, I am looking at compilation and optimisation techniques for array programs with static and dynamic sparsity.
+ Before that, during my PhD at Utrecht University in The Netherlands (supervised by Gabriele Keller and Matthijs V&aacute;k&aacute;r), I worked on <a href="https://en.wikipedia.org/wiki/Automatic_differentiation" target="_blank">automatic differentiation</a> as seen through the lens of <a href="https://en.wikipedia.org/wiki/Functional_programming" target="_blank">functional programming</a>.
+ Before that, I completed my master's degree at Utrecht University in 2021 and my bachelor's degree at Leiden University in 2018.
+ I was born and grew up in The Netherlands.
</p>
<p>
In general I am enthusiastic about lots of things in computer science; I enjoy functional programming and thinking about programming techniques that make FP work well, but I also have some experience in more low-level programming (in C and C++), some of it in <a href="https://stats.ioinformatics.org/people/5681" target="_blank">competitive</a> <a href="https://2019.nwerc.eu/" target="_blank">programming</a>.
@@ -112,9 +130,19 @@ summary {
Furthermore, I like being able to do all of those things while enabling the compiler to prevent me from making mistakes as much as possible; typically, I do this by using the type system of the programming language I'm working in.
</p>
<p>
- Also send me your favourite esolangs :)
+ I think that in software development and science, and indeed in the world more generally, there is tremendous value in understanding.
+ Having a good understanding of what you are doing, as well as the layer of abstraction right below what you are doing (e.g. the compiler you use, or the research method you are applying, or simply the perspective and background of the person you're speaking with), is essential for producing quality and dependable results.
+ It's also just more fun than poking something with a long stick, and it's an investment: the more things you have a good mental model of, the easier and quicker it is to achieve insight in the next thing.
+ </p>
+ <p>
+ I like esolangs, send me your favourite ones :)
</p>
</div>
+
+ <h2>Academic publications</h2>
+ <table id="pubs-table"><tbody>
+ <!--PUBS-REPLACE-START--> (Info missing, server misconfigured, sorry) <!--PUBS-REPLACE-END-->
+ </tbody></table>
</div>
</body>
</html>
diff --git a/publications.json b/publications.json
index a673859..39de522 100644
--- a/publications.json
+++ b/publications.json
@@ -94,6 +94,7 @@
"authors": ["tom"],
"title": "Reverse Automatic Differentiation for Accelerate",
"note": "Master thesis at Utrecht University. Supervisors: Trevor McDonell, Matthijs V&aacute;k&aacute;r.",
+ "thesis": true,
"links": [
{"type": "pdf", "url": "https://studenttheses.uu.nl/bitstream/handle/20.500.12932/38958/report.pdf?sequence=1&isAllowed=y"},
{"type": "code", "url": "https://github.com/tomsmeding/accelerate/tree/no-explode"}
@@ -104,6 +105,7 @@
"authors": ["tom"],
"title": "Fast Large-Integer Matrix Multiplication",
"note": "Bachelor thesis at Leiden University. Supervisors: Peter Bruin, Kristian Rietveld.",
+ "thesis": true,
"links": [
{"type": "pdf", "url": "https://www.universiteitleiden.nl/binaries/content/assets/science/mi/scripties/bachelor/2017-2018/smeding-bsc-scriptie.pdf"},
{"type": "code", "url": "https://github.com/tomsmeding/bachelor-thesis"}
diff --git a/webserver.js b/webserver.js
index 98a9640..b0d5578 100755
--- a/webserver.js
+++ b/webserver.js
@@ -106,23 +106,35 @@ function padLeft(s, len, fill) {
function buildPublicationsHTML(info) {
let res = "";
for (const obj of info.pubs) {
- if (res.length != 0) res += "\n\t\t\t";
+ if (res.length != 0) res += "\n\t\t";
const seen = new Map();
- res += "<li>";
+ res += "<tr>";
- res += obj.year;
+ res += "<td>" + obj.year;
seen.set("year", true);
if ("month" in obj) res += "-" + padLeft(obj.month + "", 2, "0")
seen.set("month", true);
- res += " ";
+ if ("conference" in obj) {
+ const idx = obj.conference.lastIndexOf(" ");
+ if (idx != -1 && !isNaN(+obj.conference.slice(idx+1)))
+ res += "<br><span class=\"pubs-at\">(" + obj.conference.slice(0, idx) + ")</span>";
+ else res += "<br><span class=\"pubs-at\">(" + obj.conference + ")</span>";
+ }
+ if ("journal" in obj) res += "<br><span class=\"pubs-at\">(" + obj.journal + ")</span>";
+ if ("preprint" in obj) res += "<br><span class=\"pubs-at\">(preprint)</span>";
+ if ("thesis" in obj) { res += "<br><span class=\"pubs-at\">(thesis)</span>"; seen.set("thesis", true); }
+ res += "</td>";
+
+ res += "<td><span class=\"pubs-authors\">";
res += obj.authors.map(key => key in info.authors ? info.authors[key] : key).join(", ");
seen.set("authors", true);
+ res += ".</span><br>";
- res += ": &ldquo;" + obj.title + "&rdquo;.";
+ res += "&ldquo;<span class=\"pubs-title\">" + obj.title + "</span>&rdquo;<br>";
seen.set("title", true);
if ("conference" in obj) res += " At " + obj.conference + ".";
@@ -141,7 +153,7 @@ function buildPublicationsHTML(info) {
seen.set("note", true);
if ("links" in obj && obj.links.length > 0) {
- res += " [";
+ res += "<br>[";
const anchors = [];
for (const link of obj.links) {
let name, url;
@@ -177,7 +189,7 @@ function buildPublicationsHTML(info) {
}
seen.set("links", true);
- res += "</li>";
+ res += "</td></tr>";
for (const key in obj) {
if (!seen.has(key)) {