Basic rebuilt complete
BIN
assets/favicon.png
Executable file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
assets/files/SpeedReadingWorkbook.epub
Executable file
BIN
assets/files/SpeedReadingWorkbook.pdf
Executable file
BIN
assets/images/ConvolutionTime.png
Executable file
|
After Width: | Height: | Size: 61 KiB |
BIN
assets/images/CurrentDrop-1.png
Executable file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
assets/images/CurrentDrop-2.png
Executable file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
assets/images/CurrentDrop.png
Executable file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
assets/images/CurrentMove-1.png
Executable file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
assets/images/CurrentMove-2.png
Executable file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
assets/images/CurrentMove.png
Executable file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
assets/images/Horizontal3x3.png
Executable file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
assets/images/Horizontal9x9.png
Executable file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
assets/images/InputImage.png
Executable file
|
After Width: | Height: | Size: 881 KiB |
BIN
assets/images/LevelingTool.jpg
Executable file
|
After Width: | Height: | Size: 6.8 MiB |
BIN
assets/images/Output3x3.png
Executable file
|
After Width: | Height: | Size: 309 KiB |
BIN
assets/images/Output9x9.png
Executable file
|
After Width: | Height: | Size: 394 KiB |
BIN
assets/images/TakPieces.png
Executable file
|
After Width: | Height: | Size: 9 KiB |
BIN
assets/images/TakProgram.png
Executable file
|
After Width: | Height: | Size: 33 KiB |
BIN
assets/images/Vertical3x3.png
Executable file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
assets/images/Vertical9x9.png
Executable file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
assets/images/Victory.png
Executable file
|
After Width: | Height: | Size: 24 KiB |
|
|
@ -96,6 +96,11 @@ code {
|
|||
color: var(--red);
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
@media (max-width: 1024px) {
|
||||
html {
|
||||
line-height: 1.75rem;
|
||||
|
|
|
|||
9
src/html/api.rs
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
use axum::{routing::get, Router};
|
||||
|
||||
pub fn get_router() -> Router {
|
||||
Router::new().route("/hello", get(hello_from_the_server))
|
||||
}
|
||||
|
||||
async fn hello_from_the_server() -> &'static str {
|
||||
"Hello!"
|
||||
}
|
||||
389
src/html/blog.rs
Normal file
|
|
@ -0,0 +1,389 @@
|
|||
use crate::html;
|
||||
use askama::Template;
|
||||
use axum::response::IntoResponse;
|
||||
use axum::{routing::get, Router};
|
||||
|
||||
pub fn get_router() -> Router {
|
||||
Router::new()
|
||||
.route("/", get(html::root::blog))
|
||||
.route("/fsdi", get(fsdi))
|
||||
.route("/independence", get(independence))
|
||||
.route("/pri", get(pri))
|
||||
.route("/gs", get(gs))
|
||||
.route("/srw", get(srw))
|
||||
.route("/tw", get(tw))
|
||||
.route("/lt", get(lt))
|
||||
.route("/writing", get(writing))
|
||||
.route("/lim", get(lim))
|
||||
.route("/ile", get(ile))
|
||||
.route("/dmwi", get(dmwi))
|
||||
.route("/wgl", get(wgl))
|
||||
.route("/dm", get(dm))
|
||||
.route("/llf", get(llf))
|
||||
.route("/habits", get(habits))
|
||||
.route("/deepwork", get(deepwork))
|
||||
.route("/ewt", get(ewt))
|
||||
.route("/afh", get(afh))
|
||||
.route("/mfn", get(mfn))
|
||||
.route("/sdl", get(sdl))
|
||||
.route("/foundation", get(foundation))
|
||||
.route("/mop", get(mop))
|
||||
.route("/onreading", get(onreading))
|
||||
.route("/thestart", get(thestart))
|
||||
}
|
||||
|
||||
async fn fsdi() -> impl IntoResponse {
|
||||
let template = FirstStepsToDigitalIndependenceTemplate {
|
||||
previous: "independence",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/FirstStepsToDigitalIndependence.html")]
|
||||
struct FirstStepsToDigitalIndependenceTemplate<'a> {
|
||||
previous: &'a str,
|
||||
}
|
||||
|
||||
async fn independence() -> impl IntoResponse {
|
||||
let template = IndependenceTemplate {
|
||||
previous: "pri",
|
||||
next: "fsdi",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/Independence.html")]
|
||||
struct IndependenceTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn pri() -> impl IntoResponse {
|
||||
let template = PetsWorryAndInformationTemplate {
|
||||
previous: "gs",
|
||||
next: "independence",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/PetsWorryAndInformation.html")]
|
||||
struct PetsWorryAndInformationTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn gs() -> impl IntoResponse {
|
||||
let template = GraduateSchoolTemplate {
|
||||
previous: "srw",
|
||||
next: "pri",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/GraduateSchool.html")]
|
||||
struct GraduateSchoolTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn srw() -> impl IntoResponse {
|
||||
let template = SpeedReadingWorkbookTemplate {
|
||||
previous: "tw",
|
||||
next: "gs",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/SpeedReadingWorkbook.html")]
|
||||
struct SpeedReadingWorkbookTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn tw() -> impl IntoResponse {
|
||||
let template = ThisWebsiteTemplate {
|
||||
previous: "lt",
|
||||
next: "srw",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/ThisWebsite.html")]
|
||||
struct ThisWebsiteTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn lt() -> impl IntoResponse {
|
||||
let template = LevelingToolTemplate {
|
||||
previous: "writing",
|
||||
next: "tw",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/LevelingTool.html")]
|
||||
struct LevelingToolTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn writing() -> impl IntoResponse {
|
||||
let template = WritingTemplate {
|
||||
previous: "lim",
|
||||
next: "lt",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/Writing.html")]
|
||||
struct WritingTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn lim() -> impl IntoResponse {
|
||||
let template = LessIsMoreTemplate {
|
||||
previous: "ile",
|
||||
next: "writing",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/LessIsMore.html")]
|
||||
struct LessIsMoreTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn ile() -> impl IntoResponse {
|
||||
let template = ImmersiveLearningAndExperimentationTemplate {
|
||||
previous: "dmwi",
|
||||
next: "lim",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/ImmersiveLearningAndExperimentation.html")]
|
||||
struct ImmersiveLearningAndExperimentationTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn dmwi() -> impl IntoResponse {
|
||||
let template = DoingMoreWithMyIdeasTemplate {
|
||||
previous: "wgl",
|
||||
next: "ile",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/DoingMoreWithMyIdeas.html")]
|
||||
struct DoingMoreWithMyIdeasTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn wgl() -> impl IntoResponse {
|
||||
let template = WhyAndGettingLostTemplate {
|
||||
previous: "dm",
|
||||
next: "dmwi",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/WhyAndGettingLost.html")]
|
||||
struct WhyAndGettingLostTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn dm() -> impl IntoResponse {
|
||||
let template = DisciplineAndMotivationTemplate {
|
||||
previous: "llf",
|
||||
next: "wgl",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/DisciplineAndMotivation.html")]
|
||||
struct DisciplineAndMotivationTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn llf() -> impl IntoResponse {
|
||||
let template = LookingLikeAFoolTemplate {
|
||||
previous: "habits",
|
||||
next: "dm",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/LookingLikeAFool.html")]
|
||||
struct LookingLikeAFoolTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn habits() -> impl IntoResponse {
|
||||
let template = HabitsTemplate {
|
||||
previous: "deepwork",
|
||||
next: "llf",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/Habits.html")]
|
||||
struct HabitsTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn deepwork() -> impl IntoResponse {
|
||||
let template = DeepWorkTemplate {
|
||||
previous: "ewt",
|
||||
next: "habits",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/DeepWork.html")]
|
||||
struct DeepWorkTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn ewt() -> impl IntoResponse {
|
||||
let template = ExercisingWithoutTimeTemplate {
|
||||
previous: "afh",
|
||||
next: "deepwork",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/ExercisingWithoutTime.html")]
|
||||
struct ExercisingWithoutTimeTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn afh() -> impl IntoResponse {
|
||||
let template = AskingForHelpTemplate {
|
||||
previous: "mfn",
|
||||
next: "ewt",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/AskingForHelp.html")]
|
||||
struct AskingForHelpTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn mfn() -> impl IntoResponse {
|
||||
let template = AMindForNumbersTemplate {
|
||||
previous: "sdl",
|
||||
next: "afh",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/AMindForNumbers.html")]
|
||||
struct AMindForNumbersTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn sdl() -> impl IntoResponse {
|
||||
let template = SelfDirectedLearningTemplate {
|
||||
previous: "foundation",
|
||||
next: "mfn",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/SelfDirectedLearning.html")]
|
||||
struct SelfDirectedLearningTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn foundation() -> impl IntoResponse {
|
||||
let template = TheFoundationTemplate {
|
||||
previous: "mop",
|
||||
next: "sdl",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/TheFoundation.html")]
|
||||
struct TheFoundationTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn mop() -> impl IntoResponse {
|
||||
let template = TheMythOfPerfectionTemplate {
|
||||
previous: "onreading",
|
||||
next: "foundation",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/TheMythOfPerfection.html")]
|
||||
struct TheMythOfPerfectionTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn onreading() -> impl IntoResponse {
|
||||
let template = OnReadingTemplate {
|
||||
previous: "thestart",
|
||||
next: "mop",
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/OnReading.html")]
|
||||
struct OnReadingTemplate<'a> {
|
||||
previous: &'a str,
|
||||
next: &'a str,
|
||||
}
|
||||
|
||||
async fn thestart() -> impl IntoResponse {
|
||||
let template = TheStartTemplate {
|
||||
next: "onreading"
|
||||
};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog/TheStart.html")]
|
||||
struct TheStartTemplate<'a> {
|
||||
next: &'a str,
|
||||
}
|
||||
|
|
@ -3,6 +3,10 @@ use axum::{
|
|||
http::StatusCode,
|
||||
response::{Html, IntoResponse, Response},
|
||||
};
|
||||
pub mod root;
|
||||
pub mod blog;
|
||||
pub mod projects;
|
||||
pub mod api;
|
||||
/// A wrapper type that we'll use to encapsulate HTML parsed by askama into valid HTML for axum to serve.
|
||||
pub struct HtmlTemplate<T>(pub T);
|
||||
|
||||
39
src/html/projects.rs
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
use crate::html;
|
||||
use askama::Template;
|
||||
use axum::response::IntoResponse;
|
||||
use axum::{routing::get, Router};
|
||||
|
||||
pub fn get_router() -> Router {
|
||||
Router::new()
|
||||
.route("/", get(html::root::projects))
|
||||
.route("/archserver", get(archserver))
|
||||
.route("/tak", get(tak))
|
||||
.route("/ed", get(ed))
|
||||
}
|
||||
|
||||
async fn archserver() -> impl IntoResponse {
|
||||
let template = ArchServerTemplate {};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "projects/ArchServer.html")]
|
||||
struct ArchServerTemplate;
|
||||
|
||||
async fn tak() -> impl IntoResponse {
|
||||
let template = TakTemplate {};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "projects/Tak.html")]
|
||||
struct TakTemplate;
|
||||
|
||||
async fn ed() -> impl IntoResponse {
|
||||
let template = EdgeDetectionTemplate {};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "projects/EdgeDetection.html")]
|
||||
struct EdgeDetectionTemplate;
|
||||
75
src/html/root.rs
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
use crate::html;
|
||||
use askama::Template;
|
||||
use axum::response::IntoResponse;
|
||||
use axum::{routing::get, Router};
|
||||
use tower_http::services::ServeDir;
|
||||
|
||||
pub fn get_router() -> Router {
|
||||
let assets_path = std::env::current_dir().unwrap();
|
||||
Router::new()
|
||||
.nest("/api", html::api::get_router())
|
||||
.nest("/blog", html::blog::get_router())
|
||||
.nest("/projects", html::projects::get_router())
|
||||
.route("/", get(home))
|
||||
.route("/now", get(now))
|
||||
.route("/about", get(about))
|
||||
.route("/contact", get(contact))
|
||||
.nest_service(
|
||||
"/assets",
|
||||
ServeDir::new(format!("{}/assets", assets_path.to_str().unwrap())),
|
||||
)
|
||||
}
|
||||
|
||||
async fn home() -> impl IntoResponse {
|
||||
let template = HomeTemplate {};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "home.html")]
|
||||
struct HomeTemplate;
|
||||
|
||||
pub async fn blog() -> impl IntoResponse {
|
||||
let template = BlogTemplate {};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog.html")]
|
||||
struct BlogTemplate;
|
||||
|
||||
pub async fn projects() -> impl IntoResponse {
|
||||
let template = ProjectsTemplate {};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "projects.html")]
|
||||
struct ProjectsTemplate;
|
||||
|
||||
async fn now() -> impl IntoResponse {
|
||||
let template = NowTemplate {};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "now.html")]
|
||||
struct NowTemplate;
|
||||
|
||||
async fn about() -> impl IntoResponse {
|
||||
let template = AboutTemplate {};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "about.html")]
|
||||
struct AboutTemplate;
|
||||
|
||||
async fn contact() -> impl IntoResponse {
|
||||
let template = ContactTemplate {};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "contact.html")]
|
||||
struct ContactTemplate;
|
||||
80
src/lib.rs
|
|
@ -1,11 +1,4 @@
|
|||
use anyhow::Context;
|
||||
use askama::Template;
|
||||
use axum::{
|
||||
response::IntoResponse,
|
||||
routing::get,
|
||||
Router,
|
||||
};
|
||||
use tower_http::services::ServeDir;
|
||||
use tracing::info;
|
||||
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
||||
mod html;
|
||||
|
|
@ -19,22 +12,9 @@ pub async fn run() -> anyhow::Result<()> {
|
|||
.with(tracing_subscriber::fmt::layer())
|
||||
.init();
|
||||
info!("initializing router...");
|
||||
let assets_path = std::env::current_dir().unwrap();
|
||||
let port = 8000_u16;
|
||||
let addr = std::net::SocketAddr::from(([0, 0, 0, 0], port));
|
||||
let api_router = Router::new().route("/hello", get(hello_from_the_server));
|
||||
let router = Router::new()
|
||||
.nest("/api", api_router)
|
||||
.route("/", get(home))
|
||||
.route("/blog", get(blog))
|
||||
.route("/projects", get(projects))
|
||||
.route("/now", get(now))
|
||||
.route("/about", get(about))
|
||||
.route("/contact", get(contact))
|
||||
.nest_service(
|
||||
"/assets",
|
||||
ServeDir::new(format!("{}/assets", assets_path.to_str().unwrap())),
|
||||
);
|
||||
let router = html::root::get_router();
|
||||
info!("router initialized, now listening on port {}", port);
|
||||
axum::Server::bind(&addr)
|
||||
.serve(router.into_make_service())
|
||||
|
|
@ -42,61 +22,3 @@ pub async fn run() -> anyhow::Result<()> {
|
|||
.context("error while starting server")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn home() -> impl IntoResponse {
|
||||
let template = HomeTemplate {};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "home.html")]
|
||||
struct HomeTemplate;
|
||||
|
||||
async fn blog() -> impl IntoResponse {
|
||||
let template = BlogTemplate{};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "blog.html")]
|
||||
struct BlogTemplate;
|
||||
|
||||
async fn projects() -> impl IntoResponse {
|
||||
let template = ProjectsTemplate{};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "projects.html")]
|
||||
struct ProjectsTemplate;
|
||||
|
||||
async fn now() -> impl IntoResponse {
|
||||
let template = NowTemplate{};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "now.html")]
|
||||
struct NowTemplate;
|
||||
|
||||
async fn about() -> impl IntoResponse {
|
||||
let template = AboutTemplate{};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "about.html")]
|
||||
struct AboutTemplate;
|
||||
|
||||
async fn contact() -> impl IntoResponse {
|
||||
let template = ContactTemplate{};
|
||||
html::HtmlTemplate(template)
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "contact.html")]
|
||||
struct ContactTemplate;
|
||||
|
||||
async fn hello_from_the_server() -> &'static str {
|
||||
"Hello!"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,31 +5,30 @@
|
|||
<div id="content">
|
||||
|
||||
<ul class="no-bul">
|
||||
<li><a href="/blog/FirstStepsToDigitalIndependence">First Steps to Digital Independence</a></li>
|
||||
<li><a href="/blog/Independence">Independence</a></li>
|
||||
<li><a href="/blog/PetsWorryAndInformation">Pets, Worry, and Information</a></li>
|
||||
<li><a href="/blog/GraduateSchool">Graduate School</a></li>
|
||||
<li><a href="/blog/SpeedReadingWorkbook">Speed Reading Workbook</a></li>
|
||||
<li><a href="/blog/ThisWebsite">This Website</a></li>
|
||||
<li><a href="/blog/LevelingTool">Leveling Tool</a></li>
|
||||
<li><a href="/blog/Writing">Writing</a></li>
|
||||
<li><a href="/blog/LessIsMore">Less is More</a></li>
|
||||
<li><a href="/blog/ImmersiveLearningAndExperimentation">Immersive learning and Experimentation</a></li>
|
||||
<li><a href="/blog/DoingMoreWithMyIdeas">Doing more with my Ideas</a></li>
|
||||
<li><a href="/blog/WhyAndGettingLost">Why and Getting Lost</a></li>
|
||||
<li><a href="/blog/PersonalUpdate2021-03">Personal Update March 2021</a></li>
|
||||
<li><a href="/blog/DisciplineAndMotivation">Discipline and Motivation</a></li>
|
||||
<li><a href="/blog/LookingLikeAFool">Looking like a Fool</a></li>
|
||||
<li><a href="/blog/Habits">Habits</a></li>
|
||||
<li><a href="/blog/DeepWork">Deep Work</a></li>
|
||||
<li><a href="/blog/ExercisingWithoutTime">Exercising with little time</a></li>
|
||||
<li><a href="/blog/AskingForHelp">Asking for Help</a></li>
|
||||
<li><a href="/blog/AMindForNumbers">A Mind for Numbers</a></li>
|
||||
<li><a href="/blog/SelfDirectedLearning">Self Directed Learning</a></li>
|
||||
<li><a href="/blog/TheFoundation">The Foundation</a></li>
|
||||
<li><a href="/blog/TheMythOfPerfection">The Myth of Perfection (in scheduling)</a></li>
|
||||
<li><a href="/blog/OnReading">On Reading</a></li>
|
||||
<li><a href="/blog/TheStart">The Start</a></li>
|
||||
<li><a href="/blog/fsdi">First Steps to Digital Independence</a></li>
|
||||
<li><a href="/blog/independence">Independence</a></li>
|
||||
<li><a href="/blog/pri">Pets, Worry, and Information</a></li>
|
||||
<li><a href="/blog/gs">Graduate School</a></li>
|
||||
<li><a href="/blog/srw">Speed Reading Workbook</a></li>
|
||||
<li><a href="/blog/tw">This Website</a></li>
|
||||
<li><a href="/blog/lt">Leveling Tool</a></li>
|
||||
<li><a href="/blog/writing">Writing</a></li>
|
||||
<li><a href="/blog/lim">Less is More</a></li>
|
||||
<li><a href="/blog/ile">Immersive learning and Experimentation</a></li>
|
||||
<li><a href="/blog/dmwi">Doing more with my Ideas</a></li>
|
||||
<li><a href="/blog/wgl">Why and Getting Lost</a></li>
|
||||
<li><a href="/blog/dm">Discipline and Motivation</a></li>
|
||||
<li><a href="/blog/llf">Looking like a Fool</a></li>
|
||||
<li><a href="/blog/habits">Habits</a></li>
|
||||
<li><a href="/blog/deepwork">Deep Work</a></li>
|
||||
<li><a href="/blog/ewt">Exercising with little time</a></li>
|
||||
<li><a href="/blog/afh">Asking for Help</a></li>
|
||||
<li><a href="/blog/mfn">A Mind for Numbers</a></li>
|
||||
<li><a href="/blog/sdl">Self Directed Learning</a></li>
|
||||
<li><a href="/blog/foundation">The Foundation</a></li>
|
||||
<li><a href="/blog/mop">The Myth of Perfection (in scheduling)</a></li>
|
||||
<li><a href="/blog/onreading">On Reading</a></li>
|
||||
<li><a href="/blog/thestart">The Start</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
A Mind for Numbers
|
||||
|
|
@ -95,7 +99,7 @@ If you can explain it in a way that they can understand you have a very good gra
|
|||
</p>
|
||||
<p>
|
||||
Books like this do their part to fix the problem of studying faced by students everywhere.
|
||||
the more that we know of and use them the better off we will all be.
|
||||
The more that we know of and use them the better off we will all be.
|
||||
So if this sounds interesting to you take a look at the book A Mind for Numbers and save on time and frustration when learning something new.
|
||||
</p>
|
||||
<p>
|
||||
|
|
@ -104,5 +108,6 @@ the more that we know of and use them the better off we will all be.
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-02-05 <a href="/blog/SelfDirectedLearning">previous</a> / <a href="/blog/AskingForHelp">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Asking for Help
|
||||
|
|
@ -130,5 +134,6 @@ It also forced me to improve my work ethic.
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-02-12 <a href="/blog/AMindForNumbers">previous</a> / <a href="/blog/ExerciseWithoutTime">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Deep Work
|
||||
|
|
@ -155,5 +159,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-02-27 <a href="/blog/ExercisingWithoutTime">previous</a> / <a href="/blog/Habits">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Discipline and Motivation
|
||||
|
|
@ -64,5 +68,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-03-20 <a href="/blog/LookingLikeAFool">previous</a> / <a href="/blog/PersonalUpdate2021-03">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Doing more with my Ideas
|
||||
|
|
@ -94,5 +98,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-04-10 <a href="/blog/WhyAndGettingLost">previous</a> / <a href="/blog/ImmersiveLearningAndExperimentation">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Exercising with Little Time
|
||||
|
|
@ -133,5 +137,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-02-19 <a href="/blog/AskingForHelp">previous</a> / <a href="/blog/DeepWork">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>First Steps to Digital Independence</h2>
|
||||
<p>
|
||||
|
|
@ -44,7 +48,7 @@
|
|||
Some of the packages available on Arch are different than OpenBSD so I had to sort out some replacements.
|
||||
</p>
|
||||
<p>
|
||||
The differences you can see <a href="/projects/ArchServer">here</a>.
|
||||
The differences you can see <a href="/projects/archserver">here</a>.
|
||||
</p>
|
||||
<p>
|
||||
So far I am using it to run my calendar and contacts, some file backups, a personal git server, and this website.
|
||||
|
|
@ -60,5 +64,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2023-08-28 <a href="/blog/Independence">previous</a>
|
||||
<a href={{previous}}>previous</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
|
||||
<h2>
|
||||
|
|
@ -93,5 +97,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2022-01-07 <a href="/blog/SpeedReadingWorkbook">previous</a> / <a href="/blog/PetsWorryAndInformation">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Habits
|
||||
|
|
@ -177,5 +181,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-03-05 <a href="/blog/DeepWork">previous</a> / <a href="/blog/LookingLikeAFool">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Immersive Learning and Experimentation
|
||||
|
|
@ -119,5 +123,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-04-16 <a href="/blog/DoingMoreWithMyIdeas">previous</a> / <a href="/blog/LessIsMore">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Independence
|
||||
|
|
@ -36,5 +40,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2023-07-05 <a href="/blog/PetsWorryAndInformation">previous</a> / <a href="/blog/FirstStepsToDigitalIndependence">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Less is More
|
||||
|
|
@ -83,5 +87,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-04-24 <a href="/blog/ImmersiveLearningAndExperimentation">previous</a> / <a href="/blog/Writing">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Leveling Tool
|
||||
|
|
@ -26,7 +30,7 @@
|
|||
The result was this.
|
||||
</p>
|
||||
<figure>
|
||||
<img src="/images/LevelingTool.jpg" alt="LevelingTool" />
|
||||
<img src="/assets/images/LevelingTool.jpg" alt="LevelingTool" />
|
||||
<figcaption>Version 0.1 Leveling Tool</figcaption>
|
||||
</figure>
|
||||
<p>
|
||||
|
|
@ -53,5 +57,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-06-28 <a href="/blog/Writing">previous</a> / <a href="/blog/ThisWebsite">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Looking Like a Fool
|
||||
|
|
@ -83,5 +87,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-03-13 <a href="/blog/Habits">previous</a> / <a href="/blog/DisciplineAndMotivation">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
On Reading
|
||||
|
|
@ -68,5 +72,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-01-08 <a href="/blog/TheStart">previous</a> / <a href="/blog/TheMythOfPerfection">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Personal Update March 2021
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
|
||||
<h2>
|
||||
|
|
@ -77,5 +81,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2022-07-23 <a href="/blog/GraduateSchool">previous</a> / <a href="/blog/Independence">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Self directed learning
|
||||
|
|
@ -82,5 +86,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-01-29 <a href="/blog/TheFoundation">previous</a> / <a href="/blog/AMindForNumbers">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
|
||||
<h2>
|
||||
|
|
@ -44,7 +48,7 @@
|
|||
</p>
|
||||
|
||||
<p>
|
||||
<a href="/files/SpeedReadingWorkbook.epub" download>Epub Download here</a><br><a href="/files/SpeedReadingWorkbook.pdf" download>PDF Download here</a>
|
||||
<a href="/assets/files/SpeedReadingWorkbook.epub" download>Epub Download here</a><br><a href="/assets/files/SpeedReadingWorkbook.pdf" download>PDF Download here</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
|
@ -57,5 +61,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-07-10 <a href="/blog/ThisWebsite">previous</a> <a href="/blog/GraduateSchool">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
The Foundation
|
||||
|
|
@ -72,5 +76,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-01-22 <a href="/blog/TheMythOfPerfection">previous</a> / <a href="/blog/SelfDirectedLearning">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
The Myth of Perfection
|
||||
|
|
@ -71,5 +75,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-01-15 <a href="/blog/OnReading">previous</a> / <a href="/blog/TheFoundation">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Where I started:
|
||||
|
|
@ -45,5 +49,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-01-01 <a href="/blog/OnReading">next</a>
|
||||
<a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
This Website
|
||||
|
|
@ -83,7 +87,7 @@
|
|||
It is important to take the time to ensure that the things that we create are as simple as possible while still doing everything they need to do.
|
||||
It often makes them harder to make in the first place but the extra investment of time and energy upfront make maintaining and modifying them much simpler.
|
||||
Overall it saves much more time then it takes, but the time saved is spread out over years and is less noticeable.
|
||||
Kind of like good <a href="/blog/Habits">habits</a> where the cost is now and the rewards are later.
|
||||
Kind of like good <a href="/blog/habits">habits</a> where the cost is now and the rewards are later.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
|
@ -98,5 +102,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-07-05 <a href="/blog/LevelingTool">previous</a> / <a href="/blog/SpeedReadingWorkbook">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Why
|
||||
|
|
@ -98,5 +102,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-04-02 <a href="/blog/PersonalUpdate2021-03">previous</a> / <a href="/blog/DoingMoreWithMyIdeas">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Writing
|
||||
|
|
@ -71,5 +75,6 @@
|
|||
</div>
|
||||
|
||||
<footer>
|
||||
2021-05-08 <a href="/blog/LessIsMore">previous</a> / <a href="/blog/LevelingTool">next</a>
|
||||
<a href={{previous}}>previous</a> / <a href={{next}}>next</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@
|
|||
<div id="content">
|
||||
|
||||
<ul class="no-bul">
|
||||
<li><a href="/projects/ArchServer">Arch Server</a></li>
|
||||
<li><a href="/blog/SpeedReadingWorkbook">Speed Reading Workbook</a></li>
|
||||
<li><a href="/blog/ThisWebsite">This Website</a></li>
|
||||
<li><a href="/blog/LevelingTool">Leveling Tool</a></li>
|
||||
<li><a href="/projects/Tak">Tak (Board Game)</a></li>
|
||||
<li><a href="/projects/EdgeDetection">Edge Detection</a></li>
|
||||
<li><a href="/projects/archserver">Arch Server</a></li>
|
||||
<li><a href="/blog/srw">Speed Reading Workbook</a></li>
|
||||
<li><a href="/blog/tw">This Website</a></li>
|
||||
<li><a href="/blog/lt">Leveling Tool</a></li>
|
||||
<li><a href="/projects/tak">Tak (Board Game)</a></li>
|
||||
<li><a href="/projects/ed">Edge Detection</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
<style>
|
||||
ul {
|
||||
@apply list-inside;
|
||||
}
|
||||
</style>
|
||||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Arch Server
|
||||
|
|
@ -280,3 +279,4 @@
|
|||
<footer>
|
||||
<a href="/projects">Back to Projects</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Edge Detection
|
||||
|
|
@ -19,7 +23,7 @@
|
|||
This is the sample input image we used for some of the testing.
|
||||
</p>
|
||||
<figure>
|
||||
<img src="/images/InputImage.png" alt="Input" />
|
||||
<img src="/assets/images/InputImage.png" alt="Input" />
|
||||
<figcaption>Input image</figcaption>
|
||||
</figure>
|
||||
<p>
|
||||
|
|
@ -34,8 +38,8 @@
|
|||
3×3 was the smallest kernel that we used.
|
||||
</p>
|
||||
<figure>
|
||||
<img src="/images/Horizontal3x3.png" alt="Horizontal line 3x3 kernel" />
|
||||
<img src="/images/Vertical3x3.png" alt="Vertical line 3x3 kernel" />
|
||||
<img src="/assets/images/Horizontal3x3.png" alt="Horizontal line 3x3 kernel" />
|
||||
<img src="/assets/images/Vertical3x3.png" alt="Vertical line 3x3 kernel" />
|
||||
<figcaption>3x3 Soebel Kernels (left:Horizontal, right:Vertical)</figcaption>
|
||||
</figure>
|
||||
<p>
|
||||
|
|
@ -43,7 +47,7 @@
|
|||
This includes their reflections in the water below, though the reflection did dampen the edges a fair bit.
|
||||
</p>
|
||||
<figure>
|
||||
<img src="/images/Output3x3.png" alt="3x3 detection output" />
|
||||
<img src="/assets/images/Output3x3.png" alt="3x3 detection output" />
|
||||
<figcaption>3x3 Edge detection output</figcaption>
|
||||
</figure>
|
||||
<p>
|
||||
|
|
@ -52,8 +56,8 @@
|
|||
Here are the 9×9 kernels we used.
|
||||
</p>
|
||||
<figure>
|
||||
<img src="/images/Horizontal9x9.png" alt="Horizontal line 9x9 kernel" />
|
||||
<img src="/images/Vertical9x9.png" alt="Horizontal line 9x9 kernel" />
|
||||
<img src="/assets/images/Horizontal9x9.png" alt="Horizontal line 9x9 kernel" />
|
||||
<img src="/assets/images/Vertical9x9.png" alt="Horizontal line 9x9 kernel" />
|
||||
<figcaption>9x9 Soebel Kernels (left:Horizontal, right:Vertical)</figcaption>
|
||||
</figure>
|
||||
<p>
|
||||
|
|
@ -61,7 +65,7 @@
|
|||
This results in a much more textured image.
|
||||
</p>
|
||||
<figure>
|
||||
<img src="/images/Output9x9.png" alt="9x9 detection output" />
|
||||
<img src="/assets/images/Output9x9.png" alt="9x9 detection output" />
|
||||
<figcaption>9x9 Edge detection output</figcaption>
|
||||
</figure>
|
||||
<p>
|
||||
|
|
@ -80,7 +84,7 @@
|
|||
CUDA uses the graphics card so has many more cores to work with but has more overhead.
|
||||
</p>
|
||||
<figure>
|
||||
<img src="/images/ConvolutionTime.png" alt="Convolution time graph" />
|
||||
<img src="/assets/images/ConvolutionTime.png" alt="Convolution time graph" />
|
||||
</figure>
|
||||
<p>
|
||||
Unless you have access to a large number of CPU cores CUDA is almost always better.
|
||||
|
|
@ -96,3 +100,4 @@
|
|||
<footer>
|
||||
<a href="/projects">Back to Projects</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<!-- prettier-ignore -->
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div id="content">
|
||||
<h2>
|
||||
Tak
|
||||
|
|
@ -24,7 +28,7 @@
|
|||
Here is the program interface.
|
||||
</p>
|
||||
<figure>
|
||||
<img src="/images/TakProgram.png" alt="Home Board" />
|
||||
<img src="/assets/images/TakProgram.png" alt="Home Board" />
|
||||
<figcaption>Tak Program</figcaption>
|
||||
</figure>
|
||||
<p>
|
||||
|
|
@ -44,7 +48,7 @@
|
|||
The capstone has the best characteristics of both and can squish walls to flat if it lands on them alone.
|
||||
</p>
|
||||
<figure>
|
||||
<img src="/images/TakPieces.png" alt="Pieces" />
|
||||
<img src="/assets/images/TakPieces.png" alt="Pieces" />
|
||||
<figcaption>Tak pieces (left to right: flat, wall, capstone)</figcaption>
|
||||
</figure>
|
||||
<p>
|
||||
|
|
@ -62,8 +66,8 @@
|
|||
Then they are dropped from the “bottom” of this inverted stack as you move.
|
||||
</p>
|
||||
<figure>
|
||||
<img src="/images/CurrentMove-2.png" alt="Move view" />
|
||||
<img src="/images/CurrentDrop-2.png" alt="Drop view" />
|
||||
<img src="/assets/images/CurrentMove-2.png" alt="Move view" />
|
||||
<img src="/assets/images/CurrentDrop-2.png" alt="Drop view" />
|
||||
</figure>
|
||||
<p>
|
||||
The comparison needs to be done from the “bottom” of the inverted stack in your hand to the top of the stack that the piece will land on.
|
||||
|
|
@ -81,7 +85,7 @@
|
|||
If a move creates a road for both players the active player wins.
|
||||
</p>
|
||||
<figure>
|
||||
<img src="/images/Victory.png" alt="Victory" />
|
||||
<img src="/assets/images/Victory.png" alt="Victory" />
|
||||
<figcaption>Victory!</figcaption>
|
||||
</figure>
|
||||
<p>
|
||||
|
|
@ -115,3 +119,4 @@
|
|||
<footer>
|
||||
<a href="/projects">Back to Projects</a>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
|
|
|
|||