A Mind for Numbers
diff --git a/pages/DeepWork.html b/blog/DeepWork.html
similarity index 99%
rename from pages/DeepWork.html
rename to blog/DeepWork.html
index 6c241d1..54310aa 100755
--- a/pages/DeepWork.html
+++ b/blog/DeepWork.html
@@ -1,8 +1,8 @@
id: deepwork
title: Deep Work
-date_created: 2021-02-27
-date_last_updated: 2021-02-27
-description: Thoughts on Deep Work by Cal Newport
+previous: ewt
+next: habits
+date: 2021-02-27
---
Deep Work
diff --git a/blog/TheMythOfPerfection.html b/blog/TheMythOfPerfection.html
index a04e5cc..2943fd2 100755
--- a/blog/TheMythOfPerfection.html
+++ b/blog/TheMythOfPerfection.html
@@ -1,6 +1,6 @@
id: mop
title: The Myth of Perfection
-previous: onreading
+previous: thestart
next: foundation
date: 2021-01-15
---
diff --git a/blog/TheStart.html b/blog/TheStart.html
index cef0ee1..7a7259a 100755
--- a/blog/TheStart.html
+++ b/blog/TheStart.html
@@ -1,6 +1,6 @@
id: thestart
title: The Start
-next: onreading
+next: mop
date: 2021-01-01
---
- If you are here you are probably thinking of getting me a gift.
- I do very deeply appreciate it and thank you for the thought.
-
-
- I am not much of a receiving gift person.
- I don't like having a lot of things and am quite particular about what I do get.
- I would much rather spend time together.
- If you can spare the time to sit down and have a nice conversation or do something together that would be wonderful.
-
-
- There are a few people in my life that I think are an exception to this rule.
- If you are one of these people you know it and I say do whatever you see fit.
- Otherwise if you feel that you must give me something I would suggest cash.
- Not sure what I will use it for but there are always various things that I am eyeing, usually larger purchases.
- I will certainly let you know what use it went to.
-
-
- Regardless, thank you so much, I really appreciate it.
-
",
- article.reference, article.title
- )
- })
- .collect();
- Ok(list)
+ Ok(articles)
}
diff --git a/src/html/garden.rs b/src/html/garden.rs
index e818020..a05dae1 100644
--- a/src/html/garden.rs
+++ b/src/html/garden.rs
@@ -1,27 +1,47 @@
use axum::{
- extract::{Extension, Path},
- http::StatusCode,
response::IntoResponse,
routing::{get, Router},
};
-use std::collections::HashMap;
-use super::{get_page, AppState};
+use super::templates::{
+ ArchServerTemplate,
+ BooksTemplate,
+ EdgeDetectionTemplate,
+ GardenTemplate,
+ HtmlTemplate,
+ TakTemplate,
+};
pub fn get_router() -> Router {
Router::new()
.route("/", get(garden))
- .route("/:page", get(page))
+ .route("/ed", get(edge_detection))
+ .route("/books", get(books))
+ .route("/tak", get(tak))
+ .route("/archserver", get(arch_server))
}
-async fn garden(state: Extension) -> Result {
- get_page(&state.db, "garden").await
+async fn garden() -> impl IntoResponse {
+ let garden_page = GardenTemplate {};
+ HtmlTemplate(garden_page)
}
-async fn page(
- state: Extension,
- Path(params): Path>,
-) -> Result {
- let page_id: &String = params.get("page").unwrap();
- get_page(&state.db, page_id).await
+async fn edge_detection() -> impl IntoResponse {
+ let edge_detection_page = EdgeDetectionTemplate {};
+ HtmlTemplate(edge_detection_page)
+}
+
+async fn books() -> impl IntoResponse {
+ let books_page = BooksTemplate {};
+ HtmlTemplate(books_page)
+}
+
+async fn tak() -> impl IntoResponse {
+ let tak_page = TakTemplate {};
+ HtmlTemplate(tak_page)
+}
+
+async fn arch_server() -> impl IntoResponse {
+ let arch_server_page = ArchServerTemplate {};
+ HtmlTemplate(arch_server_page)
}
diff --git a/src/html/mod.rs b/src/html/mod.rs
index bb84243..34f86ef 100644
--- a/src/html/mod.rs
+++ b/src/html/mod.rs
@@ -1,66 +1,11 @@
-use crate::database::page::Page;
-use askama::Template;
-use axum::{
- http::StatusCode,
- response::{Html, IntoResponse, Response},
-};
use sqlx::PgPool;
-pub mod api;
pub mod blog;
pub mod garden;
pub mod root;
+pub mod templates;
#[derive(Clone)]
pub struct AppState {
pub db: PgPool,
}
-
-/// A wrapper type that we'll use to encapsulate HTML parsed by askama into valid HTML for axum to serve.
-pub struct HtmlTemplate(pub T);
-
-/// Allows us to convert Askama HTML templates into valid HTML for axum to serve in the response.
-impl IntoResponse for HtmlTemplate
-where
- T: Template,
-{
- fn into_response(self) -> Response {
- // Attempt to render the template with askama
- match self.0.render() {
- // If we're able to successfully parse and aggregate the template, serve it
- Ok(html) => Html(html).into_response(),
- // If we're not, return an error or some bit of fallback HTML
- Err(err) => (
- StatusCode::INTERNAL_SERVER_ERROR,
- format!("Failed to render template. Error: {}", err),
- )
- .into_response(),
- }
- }
-}
-
-#[derive(Template)]
-#[template(path = "article.html")]
-pub struct ArticleTemplate {
- footer: String,
- content: String,
-}
-
-#[derive(Template)]
-#[template(path = "page.html")]
-pub struct PageTemplate {
- content: String,
-}
-
-pub async fn get_page(db: &PgPool, path: &str) -> Result {
- let reference: String = path.to_string();
- let page: Page = match Page::read_by_reference(db, &reference).await {
- Ok(a) => *a,
- Err(_) => return Err(StatusCode::NOT_FOUND),
- };
-
- let template = PageTemplate {
- content: page.content,
- };
- Ok(HtmlTemplate(template))
-}
diff --git a/src/html/root.rs b/src/html/root.rs
index 9e69f9f..b42d51e 100644
--- a/src/html/root.rs
+++ b/src/html/root.rs
@@ -1,20 +1,31 @@
-use crate::html::{api, blog, AppState};
use axum::{
- http::StatusCode,
response::{IntoResponse, Redirect},
routing::{get, Router},
Extension,
};
+use rand::{seq::SliceRandom, thread_rng};
use sqlx::PgPool;
+use std::error::Error;
use tower_http::services::ServeDir;
-use super::{garden, get_page};
+use crate::database::{
+ link::{Link, LinkType},
+ PsqlData,
+};
+
+use super::{
+ blog, garden,
+ templates::{
+ AboutTemplate, AiTemplate, BlogrollTemplate, ContactTemplate, HomeTemplate, HtmlTemplate,
+ LinksPageTemplate, NowTemplate, UsesTemplate,
+ },
+ AppState,
+};
pub fn get_router(pool: PgPool) -> Router {
let assets_path = std::env::current_dir().unwrap();
let state = AppState { db: pool };
Router::new()
- .nest("/api", api::get_router())
.nest("/blog", blog::get_router())
.nest("/garden", garden::get_router())
.nest_service(
@@ -36,34 +47,65 @@ pub fn get_router(pool: PgPool) -> Router {
.layer(Extension(state))
}
-async fn home(state: Extension) -> Result {
- get_page(&state.db, "home").await
+async fn home() -> impl IntoResponse {
+ HtmlTemplate(HomeTemplate {})
}
-async fn now(state: Extension) -> Result {
- get_page(&state.db, "now").await
+async fn now() -> impl IntoResponse {
+ HtmlTemplate(NowTemplate {})
}
-async fn about(state: Extension) -> Result {
- get_page(&state.db, "about").await
+async fn about() -> impl IntoResponse {
+ HtmlTemplate(AboutTemplate {})
}
-async fn contact(state: Extension) -> Result {
- get_page(&state.db, "contact").await
+async fn contact() -> impl IntoResponse {
+ HtmlTemplate(ContactTemplate {})
}
-async fn uses(state: Extension) -> Result {
- get_page(&state.db, "uses").await
+async fn uses() -> impl IntoResponse {
+ HtmlTemplate(UsesTemplate {})
}
-async fn ai(state: Extension) -> Result {
- get_page(&state.db, "ai").await
+async fn ai() -> impl IntoResponse {
+ HtmlTemplate(AiTemplate {})
}
-async fn blogroll(state: Extension) -> Result {
- get_page(&state.db, "blogroll").await
+async fn blogroll(state: Extension) -> impl IntoResponse {
+ let blogroll_page = BlogrollTemplate {
+ blogs: match get_links_as_list(&state.db, LinkType::BLOG).await {
+ Ok(list) => list,
+ Err(_) => Vec::new(),
+ },
+ };
+ HtmlTemplate(blogroll_page)
}
-async fn links(state: Extension) -> Result {
- get_page(&state.db, "links").await
+async fn links(state: Extension) -> impl IntoResponse {
+ let links_page = LinksPageTemplate {
+ articles: match get_links_as_list(&state.db, LinkType::ARTICLE).await {
+ Ok(list) => list,
+ Err(_) => Vec::new(),
+ },
+ };
+ HtmlTemplate(links_page)
+}
+
+pub async fn get_links_as_list(
+ pool: &PgPool,
+ link_type: LinkType,
+) -> Result, Box> {
+ let mut links: Vec = match Link::read_all(pool).await {
+ Ok(a) => a.iter().map(|x| *x.clone()).collect(),
+ Err(_) => Vec::new(),
+ };
+
+ let mut rng = thread_rng();
+ links.shuffle(&mut rng);
+
+ let list: Vec = links
+ .into_iter()
+ .filter(|link| link.link_type == link_type)
+ .collect();
+ Ok(list)
}
diff --git a/src/html/templates.rs b/src/html/templates.rs
new file mode 100644
index 0000000..643c315
--- /dev/null
+++ b/src/html/templates.rs
@@ -0,0 +1,124 @@
+use askama::Template;
+use axum::{
+ http::StatusCode,
+ response::{Html, IntoResponse, Response},
+};
+
+use crate::database::{article::Article, link::Link};
+
+/// A wrapper type that we'll use to encapsulate HTML parsed by askama into valid HTML for axum to serve.
+pub struct HtmlTemplate(pub T);
+
+/// Allows us to convert Askama HTML templates into valid HTML for axum to serve in the response.
+impl IntoResponse for HtmlTemplate
+where
+ T: Template,
+{
+ fn into_response(self) -> Response {
+ // Attempt to render the template with askama
+ match self.0.render() {
+ // If we're able to successfully parse and aggregate the template, serve it
+ Ok(html) => Html(html).into_response(),
+ // If we're not, return an error or some bit of fallback HTML
+ Err(err) => (
+ StatusCode::INTERNAL_SERVER_ERROR,
+ format!("Failed to render template. Error: {}", err),
+ )
+ .into_response(),
+ }
+ }
+}
+
+#[derive(Template)]
+#[template(path = "article.html")]
+pub struct ArticleTemplate {
+ pub footer: String,
+ pub content: String,
+}
+
+#[derive(Template)]
+#[template(path = "page.html")]
+pub struct PageTemplate {
+ pub content: String,
+}
+
+#[derive(Template)]
+#[template(path = "links.html")]
+pub struct LinksPageTemplate {
+ pub articles: Vec,
+}
+
+#[derive(Template)]
+#[template(path = "blog.html")]
+pub struct BlogTemplate {
+ pub articles: Vec,
+}
+
+#[derive(Template)]
+#[template(path = "now.html")]
+pub struct NowTemplate {}
+
+#[derive(Template)]
+#[template(path = "garden.html")]
+pub struct GardenTemplate {}
+
+#[derive(Template)]
+#[template(path = "books.html")]
+pub struct BooksTemplate {}
+
+#[derive(Template)]
+#[template(path = "Tak.html")]
+pub struct TakTemplate {}
+
+#[derive(Template)]
+#[template(path = "time.html")]
+pub struct TimeTemplate {}
+
+#[derive(Template)]
+#[template(path = "uses.html")]
+pub struct UsesTemplate {}
+
+#[derive(Template)]
+#[template(path = "gifts.html")]
+pub struct GiftsTemplate {}
+
+#[derive(Template)]
+#[template(path = "contact.html")]
+pub struct ContactTemplate {}
+
+#[derive(Template)]
+#[template(path = "ai.html")]
+pub struct AiTemplate {}
+
+#[derive(Template)]
+#[template(path = "blogroll.html")]
+pub struct BlogrollTemplate {
+ pub blogs: Vec,
+}
+
+#[derive(Template)]
+#[template(path = "EdgeDetection.html")]
+pub struct EdgeDetectionTemplate {}
+
+#[derive(Template)]
+#[template(path = "ArchServer.html")]
+pub struct ArchServerTemplate {}
+
+#[derive(Template)]
+#[template(path = "interests.html")]
+pub struct InterestsTemplate {}
+
+#[derive(Template)]
+#[template(path = "home.html")]
+pub struct HomeTemplate {}
+
+#[derive(Template)]
+#[template(path = "about.html")]
+pub struct AboutTemplate {}
+
+#[derive(Template)]
+#[template(path = "blog_footer.html")]
+pub struct BlogFooterTemplate {
+ pub previous: String,
+ pub next: String,
+}
diff --git a/src/lib.rs b/src/lib.rs
index 3721438..57ff0b6 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,5 +1,5 @@
#![allow(async_fn_in_trait)]
-use crate::database::{article::load_articles, page::load_pages};
+use crate::database::article::load_articles;
use database::link::load_links;
use sqlx::PgPool;
use std::error::Error;
@@ -35,7 +35,6 @@ pub async fn run_server(pool: PgPool) -> std::io::Result<()> {
pub async fn run_load(pool: &PgPool) -> Result<(), Box> {
load_articles(pool).await?;
- load_pages(pool).await?;
load_links(pool).await?;
Ok(())
}
diff --git a/pages/ArchServer.html b/templates/ArchServer.html
similarity index 98%
rename from pages/ArchServer.html
rename to templates/ArchServer.html
index cd62ecd..c35861f 100755
--- a/pages/ArchServer.html
+++ b/templates/ArchServer.html
@@ -1,9 +1,7 @@
-id: archserver
-title: Arch Server
-date_created: 2023-08-28
-date_last_updated: 2023-08-28
-description: The set up for my Arch cloud server that hosts this website and some other stuff.
----
+
+{% extends "base.html" %}
+
+{% block content %}
Arch Server
@@ -275,3 +273,4 @@ sudo certbot renew
I will endeavor to update it when things do.
Slowly grow from something mostly taken from Derek's guide (thank you so much for that) to something uniquely my own and serving the my exact needs.
+{% endblock %}
diff --git a/pages/EdgeDetection.html b/templates/EdgeDetection.html
similarity index 96%
rename from pages/EdgeDetection.html
rename to templates/EdgeDetection.html
index b661346..4c571c0 100755
--- a/pages/EdgeDetection.html
+++ b/templates/EdgeDetection.html
@@ -1,9 +1,7 @@
-id: ed
-title: Edge Detection
-date_created: 2021-02-01
-date_last_updated: 2021-02-01
-description: Edge detection algorithm project for a ML course I took for my Masters
----
+
+{% extends "base.html" %}
+
+{% block content %}
Edge Detection
@@ -96,3 +94,4 @@ description: Edge detection algorithm project for a ML course I took for my Mast
I have done a little bit of machine learning with convolutional neural networks, but for most libraries this portion is already done for you.
Understanding what is going on under the hood was very interesting.
+{% endblock %}
diff --git a/pages/Tak.html b/templates/Tak.html
similarity index 97%
rename from pages/Tak.html
rename to templates/Tak.html
index 0e1cc63..1ebda26 100755
--- a/pages/Tak.html
+++ b/templates/Tak.html
@@ -1,9 +1,7 @@
-id: tak
-title: Tak
-date_created: 2021-05-01
-date_last_updated: 2021-05-01
-description: My effort at making a functioning python program to play Tak.
----
+
+{% extends "base.html" %}
+
+{% block content %}
Tak
@@ -115,3 +113,4 @@ description: My effort at making a functioning python program to play Tak.
I had this in mind when I was writing it so made sure that the GUI was disconnected from the actual mechanics behind the game.
This will hopefully make it easier to connect to an agent for training.
+{% endblock %}
diff --git a/pages/about.html b/templates/about.html
similarity index 96%
rename from pages/about.html
rename to templates/about.html
index 936623d..dbbeb46 100644
--- a/pages/about.html
+++ b/templates/about.html
@@ -1,10 +1,8 @@
-id: about
-title: About
-date_created: 2020-01-01
-date_last_updated: 2023-11-01
-description: About me
----
-
My greatest joy in life is learning new things.
Early on I leaned almost exclusively toward the sciences.
@@ -59,3 +57,4 @@ description: About me
Trying to live more in line with what feels right internally.
A wonderful exploration and adventure.
+{% endblock %}
diff --git a/pages/ai.html b/templates/ai.html
similarity index 90%
rename from pages/ai.html
rename to templates/ai.html
index 84790ea..80f3b1f 100644
--- a/pages/ai.html
+++ b/templates/ai.html
@@ -1,9 +1,7 @@
-id: ai
-title: AI
-date_created: 2024-08-08
-date_last_updated: 2024-08-08
-description: How I use AI.
----
+
+{% extends "base.html" %}
+
+{% block content %}
AI
Common page I am seeing start to show up is an AI page explaining how creators use AI in their writing.
@@ -23,3 +21,4 @@ description: How I use AI.
I may use them for work, but I don't see them ever touching this website or personal projects.
I do these things for the joy of doing them, and I don't want to give up any of that process.
{% endblock %}
diff --git a/pages/blogroll.html b/templates/blogroll.html
similarity index 57%
rename from pages/blogroll.html
rename to templates/blogroll.html
index aa6fa24..4d7ca5f 100644
--- a/pages/blogroll.html
+++ b/templates/blogroll.html
@@ -1,9 +1,7 @@
-id: blogroll
-title: Blogroll
-date_created: 2024-08-08
-date_last_updated: 2024-08-13
-description: A list of blogs that I follow
----
+
+{% extends "base.html" %}
+
+{% block content %}
Blogroll
I follow quite a few blogs.
@@ -16,5 +14,16 @@ description: A list of blogs that I follow
The list gets randomly shuffled each time to expose new links at the top to visitors.
Just an idea that I had, please contact me if it causes anyone issues.
-
+
+ {% for blog in blogs %}
+
{{blog.title}}
+ {% match blog.description %}
+ {% when Some with (description) %}
+ : {{description}}
+ {% when None %}
+ {% endmatch %}
+
+
+ {% endfor %}
+{% endblock %}
diff --git a/pages/books.html b/templates/books.html
similarity index 89%
rename from pages/books.html
rename to templates/books.html
index 0d0bbaa..a02d10a 100755
--- a/pages/books.html
+++ b/templates/books.html
@@ -1,9 +1,7 @@
-id: books
-title: Books
-date_created: 2021-01-06
-date_last_updated: 2024-08-13
-description: Root page for all things in the Awstin/Book vendiagram overlap
----
+
+{% extends "base.html" %}
+
+{% block content %}
Books
I love to read.
@@ -16,15 +14,12 @@ description: Root page for all things in the Awstin/Book vendiagram overlap
Currently Reading
- Just finished Elantris.
- Just started Wild Problems by Russ Roberts.
- A book on making the sort of decisions that we can't make my just logically looking at the data.
- Without a right or wrong answer, the bigger life questions.
- Have been feeling stuck on one of those lately and as I was scrolling through the books on my e-reader this jumped out at me.
+ Get to pick a new book to start.
Read so far in 2024
+
Wild Problems - Russ Roberts
Elantris - Brandon Sanderson
The Burnout Society - Byung-Chul Han
Reaper's Gale - Steven Erikson
@@ -39,8 +34,8 @@ description: Root page for all things in the Awstin/Book vendiagram overlap
I am always happy to meet new people.
I can be contacted by email at awstin@achubb.com.
+{% endblock %}
diff --git a/templates/content_with_list.html b/templates/content_with_list.html
new file mode 100644
index 0000000..ee64976
--- /dev/null
+++ b/templates/content_with_list.html
@@ -0,0 +1,2 @@
+{{content|safe}}
+{{list|safe}}
diff --git a/pages/garden.html b/templates/garden.html
similarity index 86%
rename from pages/garden.html
rename to templates/garden.html
index 8ae09c7..dddf18f 100644
--- a/pages/garden.html
+++ b/templates/garden.html
@@ -1,9 +1,7 @@
-id: garden
-title: Garden
-date_created: 2024-07-31
-date_last_updated: 2024-08-08
-description: Home page and starting point for exploring my digital garden
----
+
+{% extends "base.html" %}
+
+{% block content %}
My Garden
Hi all, welcome to the starting point for exploring my digital garden.
@@ -27,7 +25,7 @@ description: Home page and starting point for exploring my digital garden
Slash pages that I have implemented so far.
Have a few more in mind that will be coming soon.
- Interests, colophon, and links I think.
+ Interests and colophon I think.
- If you are here you are probably thinking of getting me a gift.
- I do very deeply appreciate it and thank you for the thought.
-
-
- I am not much of a receiving gift person.
- I don't like having a lot of things and am quite particular about what I do get.
- I would much rather spend time together.
- If you can spare the time to sit down and have a nice conversation or do something together that would be wonderful.
-
-
- There are a few people in my life that I think are an exception to this rule.
- If you are one of these people you know it and I say do whatever you see fit.
- Otherwise if you feel that you must give me something I would suggest cash.
- Not sure what I will use it for but there are always various things that I am eyeing, usually larger purchases.
- I will certainly let you know what use it went to.
-
-
- Regardless, thank you so much, I really appreciate it.
-
-
- Awstin
-
+
Gifts
+
+ If you are here you are probably thinking of getting me a gift.
+ I do very deeply appreciate it and thank you for the thought.
+
+
+ I am not much of a receiving gift person.
+ I don't like having a lot of things and am quite particular about what I do get.
+ I would much rather spend time together.
+ If you can spare the time to sit down and have a nice conversation or do something together that would be wonderful.
+
+
+ There are a few people in my life that I think are an exception to this rule.
+ If you are one of these people you know it and I say do whatever you see fit.
+ Otherwise if you feel that you must give me something I would suggest cash.
+ Not sure what I will use it for but there are always various things that I am eyeing, usually larger purchases.
+ I will certainly let you know what use it went to.
+
+
+ Regardless, thank you so much, I really appreciate it.
+
+
+ Awstin
+
{% endblock %}
diff --git a/pages/home.html b/templates/home.html
similarity index 93%
rename from pages/home.html
rename to templates/home.html
index 80b001e..a102d38 100644
--- a/pages/home.html
+++ b/templates/home.html
@@ -1,9 +1,7 @@
-id: home
-title: Home
-date_created: 2020-01-01
-date_last_updated: 2024-07-30
-description: Home page
----
+
+{% extends "base.html" %}
+
+{% block content %}
Awstin Chubb
About me
@@ -52,3 +50,4 @@ description: Home page
Here is my contact information.
+{% endblock %}
diff --git a/templates/interests.html b/templates/interests.html
new file mode 100644
index 0000000..27f7ce9
--- /dev/null
+++ b/templates/interests.html
@@ -0,0 +1,72 @@
+
+{% extends "base.html" %}
+
+{% block content %}
+
Interest
+
+ This is a quick stop to see an overview of the various interests that I am currently pursuing.
+ I suspect that most of them will wind up with their own pages.
+
+
+
Programming
+
+ As well as it now being my day job programming is something that I am fascinated by.
+ Computers in general as the most ubiquitous tool that we use fascinate me.
+ My computer serves as my workshop and computing in general as a subject of study.
+
+
+ I do most of my programming in Rust.
+ I like the performance of the language and the strong type system.
+ It feels worth the extra headache sometimes to have code that runs once it compiles.
+
+
+ Most of what I do personally and for work would be considered fullstack.
+ Websites/apps and the corresponding backend service.
+ I prefer simpler technology for my own work.
+ Html and CSS over Typescript and React.
+ The sites and the code are simpler and perform better I find.
+
+
+
Brazillian Jiu Jitsu
+
+ I have spent a lot of time on martial arts in my life.
+ Early on it was striking.
+ Tae kwon do, Muai Thai.
+ It took me all of one class in BJJ to realize that it was the one for me.
+
+
+ I love the cerebral nature of it.
+ Endless depth in the game, and also personalized.
+ Everyone fights differently based on their temperment, physique, and skills.
+
+
+ In training we can go hard.
+ Harder than in any other martial art I have ever tried.
+ The grappling nature of it and respecting the tap makes it safer to train much more like we would fight in competition.
+
+
+ The art also has a lot of tradition and respect involved in it which I have loved ever since I did Tae Kwon Do in a very traditional school when I was younger.
+ It makes it more then just a sport.
+ It has a philosophy, and that structure also engenders much more of a feeling of cameraderie I find.
+
+
+
Technological Independence
+
+ The last few years I have been slowly working to remove myself from reliance on cloud services that I don't host.
+ I don't trust the large tech companies that run all of these things to have my best interests at heart.
+
+
+ The digital world has become a core part of my life, as I think it has for us all.
+ Just as I would be suspicious if I needed someone else's permission to use my computer itself, or any other tool/gadget/anything that I own, I feel that way about applications and data as well.
+ So I am doing my best to host everything myself, use open standards, run my own server.
+
+
+ The process of setting this all up and maintaining it is fascinating.
+ So many neat tools, great communities, and infinite ways to personalize my setup.
+
+
+ At the moment it requires a certain level of tech savvy that I am grateful to have.
+ I would like to see what I can do to make it acheivable for anyone with a minimum of technical knowledge to have.
+ Everyone deserves to be the final arbiter of their digital lives, private and public.
+
+ A collection of links to interesting posts that I have found.
+ In a random order to shuffle what links are at the top.
+
+
+ {% for article in articles %}
+
{{article.title}}
+ {% match article.description %}
+ {% when Some with (description) %}
+ : {{description}}
+ {% when None %}
+ {% endmatch %}
+
+
+ {% endfor %}
+
+{% endblock %}
diff --git a/pages/now.html b/templates/now.html
similarity index 97%
rename from pages/now.html
rename to templates/now.html
index 6d46b5a..bc8e78f 100644
--- a/pages/now.html
+++ b/templates/now.html
@@ -1,9 +1,7 @@
-id: now
-title: Now
-date_created: 2020-01-01
-date_last_updated: 2024-08-08
-description: What I am up to now.
----
+
+{% extends "base.html" %}
+
+{% block content %}
Last updated: 2024-08-08
@@ -84,3 +82,4 @@ description: What I am up to now.
+ I spend a lot of time thinking about... well time.
+ How to use it, what it means.
+ The way that we perceive and value it.
+
+
+ My opinion on it has change a lot in the last decade.
+ I have slowed down.
+ No longer trying to maximize every moment spent.
+ Fill my days to the brim with "productive" things.
+
+
+ That results in living always being put off until later.
+ And the more I thought about it and explored what others have thought/written on the topic the more that I realized that mindset does not have an end.
+ There will always be more to do and another reason to put it off.
+
+
+ So I have worked to change my mindset in recent years.
+ To be more mindful and take joy in how I do things as opposed to only focussing on how efficiently.
+ I have discovered that the scenic route is worth it.
+ Efficiency is for the things that must be done but that I don't enjoy as much in and of themselves.
+ Or if I truly enjoy the more efficient method/enjoy the process of exploring that efficiency itself.
+
+
+
Remote work
+
+ An interesting aspect to time I have noticed is remote work.
+ It is one of those things that feels like just upside when thinking about it.
+ It then shows a few downsides when put into practice.
+
+
+ Upside obviously is that it gives significantly more freedom with my time.
+ Can do stuff around the house during breaks.
+ Saves commuting time, packing lunch.
+ I can use my home desk setup that I have customized just the way that I like it.
+ It gives the freedom to work from elsewhere if I am visiting family or otherwise traveling.
+
+
+ The downsides took some more time to become apparent.
+ Which means that I did not prepare for them.
+ I like to tinker and work on my own stuff.
+ This website, my server, etc.
+ The lack of clear division between where I do work for myself and for my employer.
+ When I sat down to work on my own things it was all too easy to log onto my work laptop instead.
+
+
+ There is always a deadline coming up, or an issue to fix for our stakeholders.
+ An endless amount of work to be done.
+ So there wound up being some guilt around spending that time working on my own things.
+
+
+ I worked remotely, even part of the time for 2 years without being aware of how it was changing how I was relating to my space at home.
+ It took a few months where I switched to working fully at the office.
+ Treating it like the jobs that I have had in the past that required physical presence.
+ Where work was left at work.
+
+
+ Now to work comfortably at home again I have some rules that I go by.
+ Hard stop at 17 unless I am oncall.
+ Leave the laptop unplugged from the docking station at my desk.
+ Thre are some situations that have been exceptions, but I am acutely aware of them.
+
+
+ Keeping this balance is important and if I notice it start to slip again I will go back to fulltime at the office.
+
+{% endblock %}
diff --git a/pages/uses.html b/templates/uses.html
similarity index 98%
rename from pages/uses.html
rename to templates/uses.html
index ffdcc33..e8209e5 100644
--- a/pages/uses.html
+++ b/templates/uses.html
@@ -1,9 +1,7 @@
-id: uses
-title: Uses
-date_created: 2024-06-30
-date_last_updated: 2024-06-30
-description: Things that I use
----
+
+{% extends "base.html" %}
+
+{% block content %}
Things I use
Analog stuff
@@ -163,3 +161,4 @@ description: Things that I use
Language Learning:Duolingo