Initial commit
+ Contains base files and a resume file + More links are planned for the future + Might need some cleanup work and testing in the future
This commit is contained in:
commit
eb4876c739
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/target
|
||||||
|
**/*.rs.bk
|
1176
Cargo.lock
generated
Normal file
1176
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
19
Cargo.toml
Normal file
19
Cargo.toml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
[package]
|
||||||
|
name = "jsite"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Joey Hines <joey@ahines.net>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
rocket = "0.4.2"
|
||||||
|
serde = "1.0"
|
||||||
|
serde_derive = "1.0"
|
||||||
|
serde_json = "1.0"
|
||||||
|
|
||||||
|
[dependencies.rocket_contrib]
|
||||||
|
version = "0.4.2"
|
||||||
|
default-features = false
|
||||||
|
features = ["tera_templates", "serve"]
|
||||||
|
|
6
README.md
Normal file
6
README.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# My Website
|
||||||
|
|
||||||
|
A simplistic website written in Rust using the [Rocket]("https://rocket.rs/") using [Tera]("https://tera.netlify.com/")
|
||||||
|
templates.
|
||||||
|
|
||||||
|
View the website at www.ahines.net
|
133
src/main.rs
Normal file
133
src/main.rs
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
#![feature(proc_macro_hygiene, decl_macro)]
|
||||||
|
|
||||||
|
#[macro_use] extern crate rocket;
|
||||||
|
#[macro_use] extern crate serde_derive;
|
||||||
|
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
use rocket::Request;
|
||||||
|
use rocket_contrib::templates::Template;
|
||||||
|
use rocket_contrib::serve::StaticFiles;
|
||||||
|
use std::{fs, io};
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
struct MDFile {
|
||||||
|
file_name: String,
|
||||||
|
link_name: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the rendered template of the index page of the website. This includes links and md
|
||||||
|
/// pages included in `static/raw_md`
|
||||||
|
#[get("/")]
|
||||||
|
fn index() -> Template {
|
||||||
|
|
||||||
|
let mut map: HashMap<&str, Vec<MDFile>> = HashMap::new();
|
||||||
|
let mut links: Vec<MDFile> = Vec::new();
|
||||||
|
|
||||||
|
match get_pages(&mut links) {
|
||||||
|
Err(_) => (),
|
||||||
|
Ok(_) => (),
|
||||||
|
}
|
||||||
|
|
||||||
|
map.insert("links", links);
|
||||||
|
Template::render("index", &map)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Gets all the raw md pages contained in static/raw_md/
|
||||||
|
///
|
||||||
|
/// The md page can start with a number
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `links` - A reference to a vector of string to insert the links into
|
||||||
|
fn get_pages(links: &mut Vec<MDFile>) -> io::Result<()> {
|
||||||
|
// Gather all of the md files in static/raw_md/
|
||||||
|
let mut entries: Vec<PathBuf> = fs::read_dir("static/raw_md/")?
|
||||||
|
.map(|res| res.map(|e| e.path()))
|
||||||
|
.collect::<Result<Vec<_>, io::Error>>()?;
|
||||||
|
|
||||||
|
// Sort so they are always in the same order
|
||||||
|
entries.sort();
|
||||||
|
|
||||||
|
//
|
||||||
|
for entry in entries {
|
||||||
|
let file_name = entry.file_stem().unwrap().to_str().unwrap();
|
||||||
|
let link_name;
|
||||||
|
if file_name.chars().next().unwrap().is_numeric() {
|
||||||
|
link_name = &file_name[1..];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
link_name = file_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
let md_file = MDFile {
|
||||||
|
file_name: String::from(file_name),
|
||||||
|
link_name: String::from(link_name),
|
||||||
|
};
|
||||||
|
|
||||||
|
links.push(md_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns a rendered template of a raw md page if it exists
|
||||||
|
///
|
||||||
|
/// #Arguments
|
||||||
|
///
|
||||||
|
/// * `page` - a string containing the name of the md file to look for
|
||||||
|
#[get("/<page>")]
|
||||||
|
fn md_page(page: String) -> Template {
|
||||||
|
let mut map = HashMap::new();
|
||||||
|
let mut md_files: Vec<MDFile> = Vec::new();
|
||||||
|
|
||||||
|
match get_pages(&mut md_files) {
|
||||||
|
Err(_) => (),
|
||||||
|
Ok(_) => (),
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut file_name = String::new();
|
||||||
|
for md_file in md_files {
|
||||||
|
if md_file.link_name.eq_ignore_ascii_case(page.as_str()) {
|
||||||
|
file_name = md_file.file_name.clone();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut contents = match fs::read_to_string(format!("static/raw_md/{}.md", file_name)) {
|
||||||
|
Ok(contents) => contents,
|
||||||
|
Err(_) => {
|
||||||
|
map.insert("error_page", page);
|
||||||
|
return Template::render("404", map)
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
contents = contents.replace("\n", "<br>");
|
||||||
|
contents = contents.replace(" ", " ");
|
||||||
|
|
||||||
|
map.insert("page", page);
|
||||||
|
map.insert("md_data", contents);
|
||||||
|
Template::render("md_page", &map)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[catch(404)]
|
||||||
|
fn not_found(req: &Request<'_>) -> Template {
|
||||||
|
let mut map = HashMap::new();
|
||||||
|
|
||||||
|
map.insert("error_page", String::from(req.uri().path()));
|
||||||
|
|
||||||
|
Template::render("404", &map)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn rocket() -> rocket::Rocket {
|
||||||
|
rocket::ignite()
|
||||||
|
.mount("/", routes![index, md_page], )
|
||||||
|
.mount("/static", StaticFiles::from("static"))
|
||||||
|
.attach(Template::fairing())
|
||||||
|
.register(catchers![not_found])
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
rocket().launch();
|
||||||
|
}
|
BIN
static/logo.png
Normal file
BIN
static/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.1 KiB |
27
static/raw_md/1resume.md
Normal file
27
static/raw_md/1resume.md
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
Joey Hines - joey@ahines.net - Auburn,AL
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
Education
|
||||||
|
---------
|
||||||
|
* Masters of Science in Electrical and Computer Engineering
|
||||||
|
* Auburn University, Auburn, AL. GPA: 4.0. Expected May 2021
|
||||||
|
* Bachelors of Science in Computer Engineering
|
||||||
|
* The University of Texas at Dallas, Richardson, TX. GPA: 3.59. May 2019
|
||||||
|
|
||||||
|
Technical Skills
|
||||||
|
----------------
|
||||||
|
* Programing Languages: C, Python, Java, Rust, Verilog
|
||||||
|
* Operating Systems: Linux, Windows
|
||||||
|
* Version Control: Git, SVN
|
||||||
|
|
||||||
|
Work Experience
|
||||||
|
---------------
|
||||||
|
Auburn University - Graduate Research and Teaching Assistant - August 2019 to Present
|
||||||
|
* Command and Data Handling (CDHS) team lead for a cube satellite project
|
||||||
|
* Collaborated with other team members to develop mission software
|
||||||
|
* Instructed an embedded systems lab course covering the fundamentals of embedded programing on a microcontroller
|
||||||
|
|
||||||
|
Crestron Electronics - Intern - Firmware Engineering, BSP Group - Summer 2018 and 2019
|
||||||
|
* Worked with other engineers on U-boot and Linux kernel development for an embedded control system.
|
||||||
|
* Adapted existing device drivers, including a UART driver, for use in the context of the control system.
|
||||||
|
* Optimized Linux Kernel and user-space apps for memory usage.
|
47
static/style.css
Normal file
47
static/style.css
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
.blinking{
|
||||||
|
animation:blinkingText 0.8s infinite;
|
||||||
|
}
|
||||||
|
@keyframes blinkingText{
|
||||||
|
100%{ color: transparent; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.text {
|
||||||
|
font-family: "Ubuntu Mono", monospace;
|
||||||
|
color: whitesmoke;
|
||||||
|
}
|
||||||
|
|
||||||
|
.body {
|
||||||
|
font-size: large;
|
||||||
|
}
|
||||||
|
|
||||||
|
.heading {
|
||||||
|
font-family: "Ubuntu Mono", monospace;
|
||||||
|
color: limegreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
.no_underline {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link {
|
||||||
|
color: #268BD2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.center {
|
||||||
|
max-width: 1250px;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.terminal {
|
||||||
|
background-color: #292929;
|
||||||
|
padding: 5px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prompt {
|
||||||
|
color: limegreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: black;
|
||||||
|
}
|
28
templates/404.html.tera
Normal file
28
templates/404.html.tera
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{% extends "base" %}
|
||||||
|
|
||||||
|
{% block command %}
|
||||||
|
./error.sh
|
||||||
|
{% endblock command %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
</p>
|
||||||
|
<pre class="text">
|
||||||
|
,--, ,--,
|
||||||
|
,--.'| ,----.. ,--.'|
|
||||||
|
,--, | : / / \ ,--, | :
|
||||||
|
,---.'| : ' / . : ,---.'| : '
|
||||||
|
; : | | ; . / ;. \; : | | ;
|
||||||
|
| | : _' |. ; / ` ;| | : _' |
|
||||||
|
: : |.' |; | ; \ ; |: : |.' |
|
||||||
|
| ' ' ; :| : | ; | '| ' ' ; :
|
||||||
|
\ \ .'. |. | ' ' ' :\ \ .'. |
|
||||||
|
`---`: | '' ; \; / | `---`: | '
|
||||||
|
' ; | \ \ ', / ' ; |
|
||||||
|
| : ; ; : / | : ;
|
||||||
|
' ,/ \ \ .' ' ,/
|
||||||
|
'--' `---` '--'
|
||||||
|
</pre>
|
||||||
|
<p class="text body">
|
||||||
|
<br>Page: {{ error_page }} Not found...<br>
|
||||||
|
{% endblock content %}
|
27
templates/base.html.tera
Normal file
27
templates/base.html.tera
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/static/style.css" xmlns="http://www.w3.org/1999/html">
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Joey Hines.</title>
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Ubuntu+Mono&display=swap" rel="stylesheet">
|
||||||
|
<link rel='shortcut icon' href='/static/logo.png'/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="center">
|
||||||
|
<a class="no_underline" href="/"> <h1 class="heading"> Joey Hines.</h1></a>
|
||||||
|
<div class="terminal">
|
||||||
|
<p class="text body">
|
||||||
|
<span class="prompt">joey@ahines:~$</span> {% block command %}{% endblock command %} <br/>
|
||||||
|
{% block content %}{% endblock content %}
|
||||||
|
<br/>
|
||||||
|
<span class="prompt">joey@ahines:~$</span> <span class="blinking"> ▊ </span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<h6 class="text"> © <script type="text/javascript">document.write( new Date().getFullYear().toString());</script> Joey Hines</h6>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
21
templates/index.html.tera
Normal file
21
templates/index.html.tera
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{% extends "base" %}
|
||||||
|
|
||||||
|
{% block command %}
|
||||||
|
./about.sh
|
||||||
|
{% endblock command %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
> Aspiring Embedded Software Engineer <br/>
|
||||||
|
> Electrical and Computer Engineering Masters Student at Auburn University <br/>
|
||||||
|
> Graduated from the University of Texas at Dallas with a BS in Computer Engineering <br/>
|
||||||
|
> Maker of Basic Websites <br/>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<span class="prompt">joey@ahines:~$</span> ls <br/>
|
||||||
|
{% for link in links %}
|
||||||
|
<a class="link" href="/{{ link.link_name }}">{{ link.link_name }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
<a class="link" href="https://www.github.com/joeyahines"> github</a>
|
||||||
|
<a class="link" href="mailto:joey@ahines.net"> email</a>
|
||||||
|
<a class="link" href="https://www.linkedin.com/in/joeyahines/"> linkedin</a> <br/>
|
||||||
|
{% endblock content %}
|
11
templates/md_page.html.tera
Normal file
11
templates/md_page.html.tera
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{% extends "base" %}
|
||||||
|
|
||||||
|
{% block command %}
|
||||||
|
cat {{ page }}.md
|
||||||
|
{% endblock command %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<br/>
|
||||||
|
{{ md_data | safe }}
|
||||||
|
{% endblock content %}
|
Loading…
x
Reference in New Issue
Block a user