Compare commits
No commits in common. "485abd8d8163196d7d0b0927aaff09350092c06b" and "8ec6c9aead7590ac54db50b4c552a8f55e0fdaf6" have entirely different histories.
485abd8d81
...
8ec6c9aead
16 changed files with 52 additions and 383 deletions
289
Cargo.lock
generated
289
Cargo.lock
generated
|
|
@ -20,23 +20,6 @@ dependencies = [
|
|||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "arraydeque"
|
||||
version = "0.5.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236"
|
||||
|
||||
[[package]]
|
||||
name = "async-trait"
|
||||
version = "0.1.89"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "atomic-waker"
|
||||
version = "1.1.2"
|
||||
|
|
@ -106,9 +89,6 @@ name = "bitflags"
|
|||
version = "2.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
|
||||
dependencies = [
|
||||
"serde_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "block-buffer"
|
||||
|
|
@ -190,55 +170,6 @@ dependencies = [
|
|||
"phf_codegen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "config"
|
||||
version = "0.15.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e68cfe19cd7d23ffde002c24ffa5cda73931913ef394d5eaaa32037dc940c0c"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"convert_case",
|
||||
"json5",
|
||||
"pathdiff",
|
||||
"ron",
|
||||
"rust-ini",
|
||||
"serde-untagged",
|
||||
"serde_core",
|
||||
"serde_json",
|
||||
"toml",
|
||||
"winnow",
|
||||
"yaml-rust2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "const-random"
|
||||
version = "0.1.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359"
|
||||
dependencies = [
|
||||
"const-random-macro",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "const-random-macro"
|
||||
version = "0.1.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
"once_cell",
|
||||
"tiny-keccak",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "convert_case"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
|
||||
dependencies = [
|
||||
"unicode-segmentation",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "core-foundation-sys"
|
||||
version = "0.8.7"
|
||||
|
|
@ -279,12 +210,6 @@ version = "0.8.21"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
|
||||
|
||||
[[package]]
|
||||
name = "crunchy"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
|
||||
|
||||
[[package]]
|
||||
name = "crypto-common"
|
||||
version = "0.1.7"
|
||||
|
|
@ -311,35 +236,6 @@ dependencies = [
|
|||
"crypto-common",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dlv-list"
|
||||
version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f"
|
||||
dependencies = [
|
||||
"const-random",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "encoding_rs"
|
||||
version = "0.8.35"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "erased-serde"
|
||||
version = "0.4.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_core",
|
||||
"typeid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "errno"
|
||||
version = "0.3.14"
|
||||
|
|
@ -356,12 +252,6 @@ version = "0.1.9"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
|
||||
|
||||
[[package]]
|
||||
name = "foldhash"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
|
||||
|
||||
[[package]]
|
||||
name = "form_urlencoded"
|
||||
version = "1.2.2"
|
||||
|
|
@ -455,30 +345,6 @@ dependencies = [
|
|||
"walkdir",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.14.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.15.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
|
||||
dependencies = [
|
||||
"foldhash",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashlink"
|
||||
version = "0.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1"
|
||||
dependencies = [
|
||||
"hashbrown 0.15.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "http"
|
||||
version = "1.4.0"
|
||||
|
|
@ -630,17 +496,6 @@ dependencies = [
|
|||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "json5"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1"
|
||||
dependencies = [
|
||||
"pest",
|
||||
"pest_derive",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
version = "1.5.0"
|
||||
|
|
@ -674,15 +529,6 @@ version = "0.4.29"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
|
||||
|
||||
[[package]]
|
||||
name = "markdown"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a5cab8f2cadc416a82d2e783a1946388b31654d391d1c7d92cc1f03e295b1deb"
|
||||
dependencies = [
|
||||
"unicode-id",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "matchit"
|
||||
version = "0.8.4"
|
||||
|
|
@ -737,16 +583,6 @@ version = "1.21.4"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
||||
|
||||
[[package]]
|
||||
name = "ordered-multimap"
|
||||
version = "0.7.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79"
|
||||
dependencies = [
|
||||
"dlv-list",
|
||||
"hashbrown 0.14.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot"
|
||||
version = "0.12.5"
|
||||
|
|
@ -779,12 +615,6 @@ dependencies = [
|
|||
"regex",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pathdiff"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3"
|
||||
|
||||
[[package]]
|
||||
name = "percent-encoding"
|
||||
version = "2.3.2"
|
||||
|
|
@ -973,30 +803,6 @@ version = "0.8.10"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
|
||||
|
||||
[[package]]
|
||||
name = "ron"
|
||||
version = "0.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4147b952f3f819eca0e99527022f7d6a8d05f111aeb0a62960c74eb283bec8fc"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"once_cell",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"typeid",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rust-ini"
|
||||
version = "0.21.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "796e8d2b6696392a43bea58116b667fb4c29727dc5abd27d6acf338bb4f688c7"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"ordered-multimap",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustversion"
|
||||
version = "1.0.22"
|
||||
|
|
@ -1033,18 +839,6 @@ dependencies = [
|
|||
"serde_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde-untagged"
|
||||
version = "0.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058"
|
||||
dependencies = [
|
||||
"erased-serde",
|
||||
"serde",
|
||||
"serde_core",
|
||||
"typeid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_core"
|
||||
version = "1.0.228"
|
||||
|
|
@ -1089,15 +883,6 @@ dependencies = [
|
|||
"serde_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_spanned"
|
||||
version = "1.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26"
|
||||
dependencies = [
|
||||
"serde_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_urlencoded"
|
||||
version = "0.7.1"
|
||||
|
|
@ -1214,15 +999,6 @@ dependencies = [
|
|||
"unicode-segmentation",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tiny-keccak"
|
||||
version = "2.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
|
||||
dependencies = [
|
||||
"crunchy",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.52.1"
|
||||
|
|
@ -1264,37 +1040,6 @@ dependencies = [
|
|||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "1.1.2+spec-1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee"
|
||||
dependencies = [
|
||||
"serde_core",
|
||||
"serde_spanned",
|
||||
"toml_datetime",
|
||||
"toml_parser",
|
||||
"winnow",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_datetime"
|
||||
version = "1.1.1+spec-1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7"
|
||||
dependencies = [
|
||||
"serde_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_parser"
|
||||
version = "1.1.2+spec-1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
|
||||
dependencies = [
|
||||
"winnow",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tower"
|
||||
version = "0.5.3"
|
||||
|
|
@ -1369,12 +1114,6 @@ dependencies = [
|
|||
"once_cell",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typeid"
|
||||
version = "1.0.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
|
||||
|
||||
[[package]]
|
||||
name = "typenum"
|
||||
version = "1.20.0"
|
||||
|
|
@ -1393,12 +1132,6 @@ version = "2.9.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-id"
|
||||
version = "0.3.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "70ba288e709927c043cbe476718d37be306be53fb1fafecd0dbe36d072be2580"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.24"
|
||||
|
|
@ -1483,9 +1216,7 @@ name = "website"
|
|||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"axum",
|
||||
"config",
|
||||
"lazy_static",
|
||||
"markdown",
|
||||
"tera",
|
||||
"tokio",
|
||||
"tower-http",
|
||||
|
|
@ -1568,26 +1299,6 @@ dependencies = [
|
|||
"windows-link",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winnow"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "yaml-rust2"
|
||||
version = "0.10.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2462ea039c445496d8793d052e13787f2b90e750b833afee748e601c17621ed9"
|
||||
dependencies = [
|
||||
"arraydeque",
|
||||
"encoding_rs",
|
||||
"hashlink",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy"
|
||||
version = "0.8.48"
|
||||
|
|
|
|||
|
|
@ -5,9 +5,7 @@ edition = "2021"
|
|||
|
||||
[dependencies]
|
||||
axum = "0.8.9"
|
||||
config = "0.15.22"
|
||||
lazy_static = "1.5.0"
|
||||
markdown = "1.0.0"
|
||||
tera = "1.20.1"
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
tower-http = { version = "0.6.8", features = ["fs"] }
|
||||
|
|
|
|||
|
|
@ -1,15 +0,0 @@
|
|||
use std::collections::HashMap;
|
||||
use tera::{
|
||||
Value, to_value, try_get_value
|
||||
};
|
||||
|
||||
pub fn load_markdown(args: &HashMap<String, Value>) -> tera::Result<Value> {
|
||||
let value = args.get("path").ok_or("path not provided")?;
|
||||
let path = try_get_value!("load_markdown", "path", String, value);
|
||||
let content = std::fs::read_to_string(format!("static/{}", path))?;
|
||||
|
||||
let html = markdown::to_html(&content);
|
||||
dbg!(&html);
|
||||
Ok(to_value(&html)?)
|
||||
}
|
||||
|
||||
33
src/main.rs
33
src/main.rs
|
|
@ -1,5 +1,3 @@
|
|||
pub mod functions;
|
||||
|
||||
use std::collections::HashMap;
|
||||
use tera::{Context, Tera};
|
||||
use axum::{
|
||||
|
|
@ -18,11 +16,7 @@ use axum::{
|
|||
use tower_http::services::{ServeDir, ServeFile};
|
||||
|
||||
lazy_static::lazy_static! {
|
||||
pub static ref TEMPLATES: Tera = {
|
||||
let mut tera = Tera::new("templates/**/*").expect("failed to parse templates");
|
||||
tera.register_function("load_markdown", functions::load_markdown);
|
||||
tera
|
||||
};
|
||||
pub static ref TEMPLATES: Tera = Tera::new("templates/**/*").expect("failed to parse templates");
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
|
|
@ -57,20 +51,15 @@ async fn render_template(Path(params): Path<HashMap<String,String>>) -> Result<H
|
|||
let lang = params.get("lang").ok_or(StatusCode::BAD_REQUEST)?;
|
||||
let tail = params.get("tail").map(|s| s.as_str()).unwrap_or("index.html");
|
||||
|
||||
let pb = normalize_path(format!("{lang}/{tail}"));
|
||||
let parent = pb.parent()
|
||||
.map(|p| p.to_string_lossy().into_owned())
|
||||
.unwrap_or_else(|| "".to_string()) + "/";
|
||||
|
||||
|
||||
let mut path = format!("{lang}/{tail}");
|
||||
if path.is_empty() || path.ends_with('/') {
|
||||
path.push_str("index.html");
|
||||
}
|
||||
|
||||
let mut context = Context::new();
|
||||
context.insert("lang", &lang);
|
||||
let main_css = include_str!("../static/main.css");
|
||||
context.insert("main_css", main_css);
|
||||
context.insert("path", &parent);
|
||||
|
||||
match TEMPLATES.render(&pb.to_string_lossy(), &context) {
|
||||
match TEMPLATES.render(&path, &context) {
|
||||
Ok(html) => Ok(Html(html)),
|
||||
Err(e) => {
|
||||
eprintln!("Tera error: {}", e);
|
||||
|
|
@ -78,13 +67,3 @@ async fn render_template(Path(params): Path<HashMap<String,String>>) -> Result<H
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// returns a normalized path to an index from the input string,
|
||||
// guaranteed to end in index.html
|
||||
fn normalize_path(input: String) -> std::path::PathBuf {
|
||||
let mut pb = std::path::PathBuf::from(input.clone());
|
||||
if !input.ends_with("index.html") {
|
||||
pb.push("index.html");
|
||||
}
|
||||
pb
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
## Home Page — Spencer Whitehead
|
||||
|
||||
Pour accéder à la version française, veuillez cliquer [ici](/fr/).
|
||||
|
||||
This is the personal website of Spencer Whitehead. I am a fourth-year Ph.D. candidate at Duke University, expecting to graduate in early 2027. My primary research interests are in gauge theory, four- and eight-dimensional differential geometry, and the applications of computer algebra systems to solving problems in geometry.
|
||||
|
||||
[Resume](resume)
|
||||
|
||||
[Publications](publications)
|
||||
|
||||
[Homelab](homelab)
|
||||
|
||||
[View the code for this website](https://git.touhou.ca/spencer/website)
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
* dynamically scoped
|
||||
* very cool
|
||||
|
|
@ -1,23 +1,46 @@
|
|||
@media (prefers-color-scheme: dark){
|
||||
body {
|
||||
background:#000
|
||||
}
|
||||
}
|
||||
body{
|
||||
margin:1em auto;
|
||||
max-width:40em;
|
||||
padding:0 .62em 3.24em;
|
||||
font:1.2em/1.62 sans-serif;
|
||||
line-height:1.6;
|
||||
color:#444;
|
||||
background-color:#EEEEEE
|
||||
font:1.2em/1.62 sans-serif
|
||||
}
|
||||
|
||||
h1,h2,h3 {
|
||||
line-height:1.2
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0044CC;
|
||||
text-decoration: underline;
|
||||
@media print{
|
||||
body{
|
||||
max-width:none
|
||||
}
|
||||
}
|
||||
body {
|
||||
margin:40px auto;
|
||||
max-width:850px;
|
||||
line-height:1.6;
|
||||
font-size:18px;
|
||||
color:#444;
|
||||
padding:0 10px;
|
||||
background-color:#EEEEEE
|
||||
}
|
||||
|
||||
a:hover, a:active {
|
||||
color: #003399;
|
||||
a:link {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a:active {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,2 +1,3 @@
|
|||
User-agent: *
|
||||
Allow: /
|
||||
Disallow: /
|
||||
Allow: /en/academic/
|
||||
|
|
|
|||
|
|
@ -6,9 +6,7 @@
|
|||
<meta name="language" content="{{ lang }}">
|
||||
<title>{{ title }}</title>
|
||||
</head>
|
||||
<style>
|
||||
{{ main_css | safe }}
|
||||
</style>
|
||||
<link rel="stylesheet" href="/main.css">
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
||||
{% endmacro %}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
<body>
|
||||
{{ common::nav() }}
|
||||
<h2>Homelab</h2>
|
||||
<main role="main">
|
||||
The website you are currently viewing is being served by my personal computing homelab, a cluster of three nodes orchestrated by k3s.
|
||||
|
||||
<h3>crusader</h3>
|
||||
|
|
@ -21,5 +20,4 @@
|
|||
<h3>blackprince</h3>
|
||||
<code>blackprince</code> was built in 2025. It has an AMD Ryzen 7 7700XD chip, an Nvidia GeForce 1080 GPU, and 64GB of DDR5 3200 RAM, running Linux Mint 22.
|
||||
It is primarily used as a personal computing node, and for running more intense computations for research purposes.
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,10 @@
|
|||
{% import "common.html" as common %}
|
||||
{{ common::meta(title="Home Page", lang="en") }}
|
||||
<body>
|
||||
{{ load_markdown(path=path ~ "content.md") | safe }}
|
||||
<p>Pour accéder à la version française, veuillez cliquer <a href="/fr/">ici.</a></p>
|
||||
<p>This is the personal website of Spencer Whitehead. I am a fourth-year Ph.D. candidate at Duke University, expecting to graduate in early 2027.
|
||||
My primary research interests are in gauge theory, four- and eight-dimensional differential geometry, and the applications of computer algebra systems to solving problems in geometry.</p>
|
||||
<p><a href="resume/">Resume</a></p>
|
||||
<p><a href="publications/">Publications</a></p>
|
||||
<p><a href="homelab/">Homelab</a></p>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
<body>
|
||||
{{ common::nav() }}
|
||||
<h2>Publications</h2>
|
||||
<main role="main">
|
||||
<p>This page contains a list of my published (scholarly) works with plain-language descriptions of the results.</p>
|
||||
<article>
|
||||
<p><strong><i>On a smoothness characterization for good moduli spaces</i></strong>, joint with Dan Edidin and Matt Satriano, published in <i>Advances in Mathematics</i> in April 2024.</p>
|
||||
|
|
@ -39,6 +38,5 @@
|
|||
<p>Any time one builds a four-dimensional object in three-dimensions, it is necessary to "project a dimension away": for example, by placing the skeleton of a three-dimensional cube in front of a light source, one can project it to a two-dimensional image on a wall.
|
||||
Not all projections are equal: some (like the <a href="https://en.wikipedia.org/wiki/Stereographic_projection">stereographic projection</a> distort lengths, while others (such as the orthogonal projection, where we imagine an infinitely strong light source placed infinitely far away) may cause edges to cross each other. In this project, we created <a href="https://git.uwaterloo.ca/Zome-Maple/Zome-Maple">a software package in Maple</a> to determine what projections could actually be constructed in the Zometool building system, and to generate plans for building complicated geometric projections in Zometool. We focused especially on a class of shapes called <a href="https://en.wikipedia.org/wiki/Wythoff_construction">Wythoff constructions</a>, which are the result of looking at images of a point in a system of mirrors called a kaleidoscope.</p>
|
||||
</article>
|
||||
</main>
|
||||
</body>
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@
|
|||
</address>
|
||||
</header>
|
||||
|
||||
<main role="main">
|
||||
<section>
|
||||
<h2>Education</h2>
|
||||
|
||||
|
|
@ -149,7 +148,7 @@
|
|||
</ul>
|
||||
</article>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
|
|||
|
|
@ -4,13 +4,10 @@
|
|||
|
||||
|
||||
<body>
|
||||
<h2>Page d'accueil — Spencer Whitehead</h2>
|
||||
<main role="main">
|
||||
<p>To access the English version, click <a href="/en/">here.</a></p>
|
||||
<p>N.B. : ma langue maternelle est l'anglais ; je m'en excuse d'avance pour les éventuelles fautes sur cette page. En cas d'erreur, veuillez m'envoyer un e-mail à <a href="mailto:spencer@firemail.cc">spencer@firemail.cc</a>.</p>
|
||||
|
||||
<p>Ceci est le site web personnel de Spencer Whitehead. Je suis doctorant en quatrième année à l'université Duke. Je m'intéresse à la recherche en géométrie différentielle, particulièrement en dimension 4 et 8. J'étudie aussi les applications des systèmes de calcul formel aux problèmes de géométrie. Je prévois de soutenir ma thèse en avril 2027.</p>
|
||||
<p>
|
||||
<p><a href="resume/">CV</a></p>
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -4,14 +4,14 @@
|
|||
<body>
|
||||
{{ common::nav() }}
|
||||
|
||||
<header role="banner">
|
||||
<header>
|
||||
<h1>Spencer Whitehead</h1>
|
||||
<address>
|
||||
Courriel : <a href="mailto:spencer@firemail.cc">spencer@firemail.cc</a><br>
|
||||
Tél. : +1 984 312 9089
|
||||
</address>
|
||||
</header>
|
||||
<main role="main">
|
||||
|
||||
<section>
|
||||
<h2>Formation</h2>
|
||||
|
||||
|
|
@ -148,7 +148,7 @@
|
|||
</ul>
|
||||
</article>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# updates static files in the deployment without a full rebuild
|
||||
POD=$(sudo k3s kubectl get pods | grep website | awk '{ print $1 }')
|
||||
echo "Recursive copy static to $POD:/app/static/"
|
||||
sudo k3s kubectl exec $POD -- sh -c "rm -rf /app/static/" || echo "Error in deleting directory"
|
||||
sudo k3s kubectl cp static "$POD:/app/static/" || echo "Error in copying new files"
|
||||
|
||||
Loading…
Reference in a new issue