Compare commits
56 Commits
af6076a24c
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 98fd81bd01 | |||
| 1b54a93d03 | |||
| c61fec03da | |||
| d8c664b9e0 | |||
| bce09e45c2 | |||
| 9c38c61f56 | |||
| 007fe255c3 | |||
| ee555c07bf | |||
| f947049144 | |||
| 21ea975ccc | |||
| 2a84fafca6 | |||
| 852b625878 | |||
| a33430a4a8 | |||
| 91b6b46d4f | |||
| 526cf942c8 | |||
| 35b1f42a31 | |||
| d498fceaa9 | |||
| 6dda0a2b62 | |||
| 8cff5de85e | |||
| 3e602844f8 | |||
| c6c3f90f89 | |||
| b0750c3c79 | |||
| 9b3ed7e034 | |||
| 84057a4434 | |||
| d48352ced2 | |||
| 800bd38adb | |||
| 9734614396 | |||
| 20c71c46ab | |||
| f1cbe1faf4 | |||
| 368f4d9ea6 | |||
| 3472a9ca77 | |||
| 9363bff72c | |||
| 6556cfd313 | |||
| 92696c31bc | |||
| 1125ef2d9e | |||
| e8dd33484a | |||
| 06d77cc51b | |||
| 8a5ddceef5 | |||
| ce3a225c47 | |||
| f8ffb0475c | |||
| 6dc840a3f7 | |||
| 70239a83cd | |||
| bdce9ba496 | |||
| 08f079b4e2 | |||
| dd4b41b3a7 | |||
| f308864967 | |||
| 5e06dcfc15 | |||
| 6b73704925 | |||
| d9e0bb7b76 | |||
| bb3496584e | |||
| 1fb94729f4 | |||
| 03a8ac049c | |||
| 1d740f4226 | |||
| 03b84351d7 | |||
| 12060a97c6 | |||
| 971ef3dd1c |
@@ -6,23 +6,38 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: /bin/sh -e {0}
|
||||||
|
|
||||||
|
env:
|
||||||
|
PATH: /run/current-system/sw/bin:/run/wrappers/bin:/usr/bin:/bin
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: self-hosted
|
runs-on: homelab
|
||||||
steps:
|
steps:
|
||||||
|
- name: Configure git
|
||||||
|
run: git config --global --add safe.directory /servers/site
|
||||||
|
|
||||||
|
- name: Create repo
|
||||||
|
run: |
|
||||||
|
[ ! -d /servers/site ] && git clone https://git.jeremyjanella.com/jjanella/site.git /servers/site || true
|
||||||
|
|
||||||
- name: Pull
|
- name: Pull
|
||||||
working-directory: /opt/site
|
working-directory: /servers/site
|
||||||
run: git pull origin main
|
run: git pull origin main
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
working-directory: /opt/site
|
working-directory: /servers/site
|
||||||
run: cargo build --release
|
run: |
|
||||||
|
nix develop --command cargo build --release 2>&1
|
||||||
|
|
||||||
- name: Restart site
|
- name: Restart site
|
||||||
working-directory: /opt/site
|
working-directory: /servers/site
|
||||||
run: |
|
run: |
|
||||||
pkill site || true
|
pkill site || true
|
||||||
export RUNNER_TRACKING_ID=self-managed
|
setsid ./target/release/site > server.log 2>&1 &
|
||||||
nohup ./target/release/site > server.log 2>&1 &
|
|
||||||
sleep 1
|
sleep 1
|
||||||
pgrep site && echo "Site is running!"
|
pgrep site && echo "Site is running!"
|
||||||
|
|
||||||
|
|||||||
Generated
+100
@@ -0,0 +1,100 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"fenix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"rust-analyzer-src": "rust-analyzer-src"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1779612045,
|
||||||
|
"narHash": "sha256-+7lfNVnmXJDkiRYHd5NoNwYoyUcc0LcXPaIJqjO7VWM=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "fenix",
|
||||||
|
"rev": "d7be747f0a65af378de515fc3cee131bf99a008f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "fenix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731533236,
|
||||||
|
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1779508470,
|
||||||
|
"narHash": "sha256-Ap9KJX+5xHIn3bPIpfNgT6MEXdAECECwo4/rmlQD74M=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "29916453413845e54a65b8a1cf996842300cd299",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"fenix": "fenix",
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rust-analyzer-src": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1779569060,
|
||||||
|
"narHash": "sha256-NSnk5D+3KEfRdbgPijs33N2RAKSG6A74SwfnynLcouo=",
|
||||||
|
"owner": "rust-lang",
|
||||||
|
"repo": "rust-analyzer",
|
||||||
|
"rev": "987ea33645ab1c709b1df6823038abcb2fe8973e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "rust-lang",
|
||||||
|
"ref": "nightly",
|
||||||
|
"repo": "rust-analyzer",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
description = "Rust development environment";
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
fenix = {
|
||||||
|
url = "github:nix-community/fenix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
outputs = { self, nixpkgs, flake-utils, fenix }:
|
||||||
|
flake-utils.lib.eachDefaultSystem (system:
|
||||||
|
let
|
||||||
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
|
toolchain = fenix.packages.${system}.fromToolchainFile {
|
||||||
|
file = ./rust-toolchain.toml;
|
||||||
|
sha256 = "sha256-gh/xTkxKHL4eiRXzWv8KP7vfjSk61Iq48x47BEDFgfk=";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
devShells.default = pkgs.mkShell rec {
|
||||||
|
nativeBuildInputs = [ pkgs.pkg-config ];
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
toolchain
|
||||||
|
clang
|
||||||
|
llvmPackages.bintools
|
||||||
|
typst
|
||||||
|
];
|
||||||
|
LIBCLANG_PATH = pkgs.lib.makeLibraryPath [ pkgs.llvmPackages_latest.libclang.lib ];
|
||||||
|
RUSTFLAGS = (builtins.map (a: ''-L ${a}/lib'') []);
|
||||||
|
LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath (buildInputs ++ nativeBuildInputs);
|
||||||
|
BINDGEN_EXTRA_CLANG_ARGS =
|
||||||
|
(builtins.map (a: ''-I"${a}/include"'') [ pkgs.glibc.dev ])
|
||||||
|
++ [
|
||||||
|
''-I"${pkgs.llvmPackages_latest.libclang.lib}/lib/clang/${pkgs.llvmPackages_latest.libclang.version}/include"''
|
||||||
|
''-I"${pkgs.glib.dev}/include/glib-2.0"''
|
||||||
|
''-I${pkgs.glib.out}/lib/glib-2.0/include/''
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
{ pkgs ? import <nixpkgs> {} }:
|
|
||||||
let
|
|
||||||
overrides = (builtins.fromTOML (builtins.readFile ./rust-toolchain.toml));
|
|
||||||
libPath = with pkgs; lib.makeLibraryPath [
|
|
||||||
# load external libraries that you need in your rust project here
|
|
||||||
];
|
|
||||||
in
|
|
||||||
pkgs.mkShell rec {
|
|
||||||
nativeBuildInputs = [ pkgs.pkg-config ];
|
|
||||||
buildInputs = with pkgs; [
|
|
||||||
clang
|
|
||||||
# Replace llvmPackages with llvmPackages_X, where X is the latest LLVM version (at the time of writing, 16)
|
|
||||||
llvmPackages.bintools
|
|
||||||
rustup
|
|
||||||
typst
|
|
||||||
];
|
|
||||||
|
|
||||||
RUSTC_VERSION = overrides.toolchain.channel;
|
|
||||||
|
|
||||||
# https://github.com/rust-lang/rust-bindgen#environment-variables
|
|
||||||
LIBCLANG_PATH = pkgs.lib.makeLibraryPath [ pkgs.llvmPackages_latest.libclang.lib ];
|
|
||||||
|
|
||||||
shellHook = ''
|
|
||||||
export PATH=$PATH:''${CARGO_HOME:-~/.cargo}/bin
|
|
||||||
export PATH=$PATH:''${RUSTUP_HOME:-~/.rustup}/toolchains/$RUSTC_VERSION-x86_64-unknown-linux-gnu/bin/
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Add precompiled library to rustc search path
|
|
||||||
RUSTFLAGS = (builtins.map (a: ''-L ${a}/lib'') [
|
|
||||||
# add libraries here (e.g. pkgs.libvmi)
|
|
||||||
]);
|
|
||||||
|
|
||||||
LD_LIBRARY_PATH = libPath;
|
|
||||||
|
|
||||||
# Add glibc, clang, glib, and other headers to bindgen search path
|
|
||||||
BINDGEN_EXTRA_CLANG_ARGS =
|
|
||||||
# Includes normal include path
|
|
||||||
(builtins.map (a: ''-I"${a}/include"'') [
|
|
||||||
# add dev libraries here (e.g. pkgs.libvmi.dev)
|
|
||||||
pkgs.glibc.dev
|
|
||||||
])
|
|
||||||
# Includes with special directory paths
|
|
||||||
++ [
|
|
||||||
''-I"${pkgs.llvmPackages_latest.libclang.lib}/lib/clang/${pkgs.llvmPackages_latest.libclang.version}/include"''
|
|
||||||
''-I"${pkgs.glib.dev}/include/glib-2.0"''
|
|
||||||
''-I${pkgs.glib.out}/lib/glib-2.0/include/''
|
|
||||||
];
|
|
||||||
}
|
|
||||||
+3
-2
@@ -3,8 +3,6 @@ use axum::{
|
|||||||
};
|
};
|
||||||
use tower_http::services::ServeDir;
|
use tower_http::services::ServeDir;
|
||||||
use askama::Template;
|
use askama::Template;
|
||||||
// use typst::model;
|
|
||||||
// use typst_html;
|
|
||||||
use std::{collections::HashMap, fs, io::{Error, Write}, process::{Command, Stdio}};
|
use std::{collections::HashMap, fs, io::{Error, Write}, process::{Command, Stdio}};
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
|
|
||||||
@@ -117,6 +115,9 @@ async fn get_post(
|
|||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
|
// unsafe {
|
||||||
|
// std::env::set_var("TYPST_FEATURES", "html");
|
||||||
|
// }
|
||||||
|
|
||||||
let home_html = Html(
|
let home_html = Html(
|
||||||
HomeTemplate {
|
HomeTemplate {
|
||||||
|
|||||||
+74
-15
@@ -1,21 +1,80 @@
|
|||||||
#import "@preview/treet:1.0.0": *
|
#import "@preview/treet:1.0.0": *
|
||||||
|
#show list: set text(font: "DejaVu Sans Mono", weight: "bold")
|
||||||
|
|
||||||
|
|
||||||
= About me
|
= About me
|
||||||
University of Toronto student in Computer Science interested in research and development. Fascinated by finding, understanding, and developing solutions to technical problems. Fields of interest include cybersecurity, robotics, software engineering, automation, data science, machine learning, and ethics. A constant learner always looking to build technical skills, and share what I learn.
|
Computer Science student at the University of Toronto with experience in cybersecurity, firmware, low-level development and software engineering. Interested in deep technical work, solutions architecting. A continuous learner interested in owning problems, researching and implementing solutions.
|
||||||
|
|
||||||
|
// === What can I do
|
||||||
|
|
||||||
I enjoy competing in capture the flag competitions (cybersecurity and the backyard game), working with robotics, automating tasks and thinking through problems.
|
=== Interests & Skills
|
||||||
|
|
||||||
I've competed in a few hackathons which are cool, but I prefer spending large time frames incrementally understand solutions to much larger problems, and attempting solutions to those.
|
|
||||||
|
|
||||||
I think automation is one of the most powerful abilities we have. As a species we are on the brink of mass automation, which can either liberate our lives into a post-scarcity utopia, or give a small percentage of us more control over the rest than anyone ever has had.
|
|
||||||
|
|
||||||
An odd and maybe abstract thing I enjoy is design philosophy. Some examples are creating software to building moral structures through logic to methods of learning new skills.
|
|
||||||
|
|
||||||
NixOS has to be my favourite distribution of Linux. My attraction to its design philosophy is that if something works, it will always work anywhere, and can still be worked on long after everything around it has moved on. Its hard to put into words but this feels like debian level stability with arch-like freedom to explore software.
|
|
||||||
|
|
||||||
When I'm not nerding out on math, software, ethics, and optimal ways of learning things, I manage to get outdoors. I like mountain biking through trails, snowboarding, hiking through scenic areas, swimming, and basketball. The next thing I'll be getting into is likely SCUBA diving.
|
|
||||||
|
|
||||||
I wrote this myself. While AI communicates ideas better than I do, I want to ensure that my and only my thoughts are written. That is true for anything on this site.
|
|
||||||
|
|
||||||
|
|
||||||
|
#html.elem("div", attrs: (class: "tree"))[
|
||||||
|
#tree-list(
|
||||||
|
indent: "│ ",
|
||||||
|
empty-indent: " "
|
||||||
|
)[
|
||||||
|
- Research & Development: I'll never get bored learning, truly understanding, and engineering something new
|
||||||
|
- Computer Science: I love the chance to use and actively seek ways to use concepts within computer science
|
||||||
|
- Linux
|
||||||
|
- Nix & NixOS: I could give a Ted Talk on how awesome this is for dev ops
|
||||||
|
- Perfectly reproducible, time independent environments
|
||||||
|
- Given infinite time lets rewrite the world's infrastructure
|
||||||
|
- IoT / microcomputers & microcontrollers
|
||||||
|
- Hosting servers
|
||||||
|
- Docker
|
||||||
|
- OCI images with Nix
|
||||||
|
- Programming
|
||||||
|
- Rust: Given infinite time lets rewrite the world's codebases
|
||||||
|
- C/C++
|
||||||
|
- Python
|
||||||
|
- Bash
|
||||||
|
- Assembly
|
||||||
|
- Functional
|
||||||
|
- Object Oriented
|
||||||
|
- Design patterns
|
||||||
|
- SQL
|
||||||
|
- GDScript
|
||||||
|
- Cyber security
|
||||||
|
- Reverse engineering assembly
|
||||||
|
- Binary patching
|
||||||
|
- Anticheat
|
||||||
|
- CTF's
|
||||||
|
- CompTIA PenTest+ certified
|
||||||
|
- AI exploitation
|
||||||
|
- Tricking image classifiers
|
||||||
|
- Prompt injection techniques
|
||||||
|
- Extracting sensitive data with statistics
|
||||||
|
- Side channel attacks
|
||||||
|
- Van Eck Phreaking / TEMPEST
|
||||||
|
- RF Sensing
|
||||||
|
- SPECTRE
|
||||||
|
- OSINT
|
||||||
|
- Machine learning
|
||||||
|
- UTAT Satellite Firmware Development
|
||||||
|
- Automation: Why do something once when it can be automated in triple the time?
|
||||||
|
- Robotics
|
||||||
|
- Programming and computing paths & trajectories etc
|
||||||
|
- AI - how much can this actually do, when orchestrated into a full platform?
|
||||||
|
- Langchain
|
||||||
|
- Random conjectures & problems
|
||||||
|
- Collatz Conjecture
|
||||||
|
- Travelling salesman
|
||||||
|
- Graph Reconstruction
|
||||||
|
- Math
|
||||||
|
- Stats
|
||||||
|
- Philosophy
|
||||||
|
- Ethics
|
||||||
|
- Consulting
|
||||||
|
- Nix
|
||||||
|
- Cybersecurity
|
||||||
|
- Software engineering
|
||||||
|
- Game development: Problem solving & engineering outlet
|
||||||
|
- Developing a game with plans to release
|
||||||
|
- Touching grass
|
||||||
|
- Mountain biking - especially technical trails
|
||||||
|
- Hiking
|
||||||
|
- Snowboarding
|
||||||
|
- Swimming (Used to lifeguard & teach lessons!)
|
||||||
|
]
|
||||||
|
]
|
||||||
@@ -184,3 +184,8 @@ body {
|
|||||||
background-image: linear-gradient(330deg, #222, #040404);
|
background-image: linear-gradient(330deg, #222, #040404);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tree {
|
||||||
|
font-family: "JetBrains Mono", "Fira Code", "Cascadia Code", "Source Code Pro", monospace;
|
||||||
|
line-height: 1.05;
|
||||||
|
overflow-x: scroll;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user