Initial commit
Some checks failed
ci/woodpecker/manual/woodpecker Pipeline failed

This commit is contained in:
Isaac Mills 2024-03-18 18:21:35 -04:00
commit e892c2f8a3
Signed by: fnmain
GPG key ID: B67D7410F33A0F61
78 changed files with 6070 additions and 0 deletions

16
src/about_me.jot Normal file
View file

@ -0,0 +1,16 @@
# About me
*Hi!* My name is Isaac Mills. I'm a software engineer and computer scientist who loves harnessing the power of technology to solve problems!
![Myself](images/me.jpg#256x192)
![Me and my dogoo](images/doggo.jpg#192x256)
![My family and I on a hike](images/hiking.jpg#256x192)
![Me in a Neumont CS T-Shirt](images/neumont.jpg#192x256)
- I love learning about computers. Everything from how they work, to new languages, to new ways to use them (I even learned a bit of WGSL and WGPU to make the shader in the background\*)
- I love looking for problems to solve, and working with people to solve them
- As a Boy Scout at heart, I love camping, hiking, backpacking, and just the outdoors generally
- I'm a loyal friend who will be there for you through thick and thin
- I know how to both write code for computers, as well as whip them into shape when they start having problems. I am the IT guy in my family
\*Special thanks to _meico_ from Shadertoy for the GLSL version of your Spectrum Ring shader

1026
src/app.rs Normal file

File diff suppressed because it is too large Load diff

3
src/font.wgsl Normal file
View file

@ -0,0 +1,3 @@
@fragment
fn fs_main(@location(1) : vec4<f32>) -> @location(0) vec4<f32> {
}

7
src/gimp.jot Normal file
View file

@ -0,0 +1,7 @@
# GIMP Experience
GIMP is a lot like Photoshop, but open source and free. Much like Photoshop, I don't think anyone can say they're _"100% fluent"_ in it, but I can say that I _am_ pretty experienced in it.
- This is a funny image I manipulated of a Pillsburry cookie jar that I thought looked like a pufferfish
![Pufferfish Doughboy](images/pufferfish.jpg#256x320)

24
src/inkscape.jot Normal file
View file

@ -0,0 +1,24 @@
# Inkscape Experience
For those who don't know, *Inkscape* is very similar to Adobe Illustrator, but open source and free. I am fluent, and have made numerous things in this program
- This project was for my Senior US Government class. It's a mock political advertisement for the fictional Political Action Comittee _Care_.
![Political Ad Campaign](images/pac1.jpg#256x362)
- This project was for my Senior Web Development class, and the assignment was to make a logo for a fictional company using what knowledge of Adobe Illustrator (Inkscape) we had
![Bitogo Corp logo and sologan](images/bitogo.jpg#256x362)
- This project was also for my Senior US Government class. It's a flag representing the mock country where the Angry Birds franchise takes place
![A mock flag for Bird Island](images/rovio.jpg#256x181)
- This project was for my mother, who is an educator who teaches people how to make books from upcycled materials you can find in your own home. These are a few of the colorways for an Instagram ad campaign I helped her make.
![Classic colorway](images/classic_scrappapercircus.jpg#256x256)
![Block colorway](images/block_scrappapercircus.jpg#256x256)
![Coptic colorway](images/coptic_scrappapercircus.jpg#256x256)

25
src/java.jot Normal file
View file

@ -0,0 +1,25 @@
# Java Experience
I've taken *AP Computer Science A*, as well as my school's post-AP course: *CS Data Structures*. Both courses are in Java.
- This is a painting of Saul Goodman using the [code.org](https://code.org) Neighborhood Painter. It's done using only it's named colors, and was made by generating Java code from an image file. [You can run it here](https://studio.code.org/projects/javalab/fsGVkmFdUWUeePTV6rYXnb21BD3bAjq6oVTMtKd13lE).
![Saul Goodman](images/saul_goodman.jpg#256x256)
- This is an auditory project done with [code.org](https://code.org)'s Java Theater. By using Rust code to parse MIDI files and generate an intermediate format which is parsed by Java, this project contains a library of 27 tracks from various video games which are played using the Theater's comically bad synthesizer. [You can run it here](https://studio.code.org/projects/javalab/SCaGR1_Et1sgc7sxNEvRSf-4RKplGVwIjd7O7WOeKmg)
![Theater playing Sewer Surfin](images/sewer_surfin.jpg#256x256)
- This was my most complicated [code.org](https://code.org) project. It's an entire 30 second short film about my personal narrative composed using only the synthesizer, and the shape drawing functions of the Theater. This was composed using a wide variety of tools
- The frames were composed in [Inkscape](#inkscape).
- The MIDI file was based on the Bad Piggies theme song, and was edited using [MIDIEditor](http://www.midieditor.org/). Within the MIDI file, custom events were used to interleave the frames of the animation with the MIDI notes.
- The MIDI file was put into a big converter which converted the MIDI, as well as all the SVG frames, into a lot of Java code, which in turn generated the movie using the code.org Theater.
[You can view the full movie here](https://studio.code.org/projects/javalab/kvhEgxPPEVMkjFFfNZz_n5L6ADRjLOSM2GMNJjGEcUc)
![Narrative frame 1](images/narrative1.jpg#256x256)
![Narrative frame 2](images/narrative2.jpg#256x256)
![Narrative frame 3](images/narrative3.jpg#256x256)
![Narrative frame 4](images/narrative4.jpg#256x256)
![Narrative frame 5](images/narrative5.jpg#256x256)

1
src/kdenlive.jot Normal file
View file

@ -0,0 +1 @@
# Kdenlive Experience

4
src/lib.rs Normal file
View file

@ -0,0 +1,4 @@
#![warn(clippy::all, rust_2018_idioms)]
mod app;
pub use app::Portfolio;

27
src/linux.jot Normal file
View file

@ -0,0 +1,27 @@
# GNU/Linux Experience
I've been daily driving Linux since the beginning of 2020, and have been hosting a home server running Linux since 2023.
- On my server at home, I am currently hosting
- [WireGuard](https://www.wireguard.com/)
- [Nextcloud](https://nextcloud.com/)
- [code-server](https://coder.com/docs/code-server/latest/install)
- [Forgejo](https://forgejo.org/)
- [Woodpecker CI](https://woodpecker-ci.org/)
- [Vaultwarden](https://github.com/dani-garcia/vaultwarden)
- [scrutiny](https://github.com/AnalogJ/scrutiny)
My daily driver right now, and the distro my server is running on, is the S6 variant of [Artix Linux](https://artixlinux.org/).
![Artix Linux](images/artix.png#128x128)
I've not only daily driven Linux, but I've also tailor made programs for it; using technologies such as Wayland, DBus, Wireplumber, and more.
- An image of my current Linux desktop. The status bar was written entirely by me in Rust ([dotfiles](https://github.com/StratusFearMe21/dotfiles))
![Dotfiles](images/dotfiles.jpg#512x288)
- Linux silliness (also uses my [dotfiles](https://github.com/StratusFearMe21/dotfiles))
![Chicanery](images/chicanery.jpg#512x288)

49
src/main.rs Normal file
View file

@ -0,0 +1,49 @@
#![warn(clippy::all, rust_2018_idioms)]
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release
use eframe::egui;
// When compiling natively:
#[cfg(not(target_arch = "wasm32"))]
fn main() -> eframe::Result<()> {
env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`).
let native_options = eframe::NativeOptions {
viewport: egui::ViewportBuilder::default()
.with_inner_size([400.0, 300.0])
.with_min_inner_size([300.0, 220.0])
.with_icon(
// NOTE: Adding an icon is optional
eframe::icon_data::from_png_bytes(&include_bytes!("../assets/icon-256.png")[..])
.unwrap(),
),
..Default::default()
};
eframe::run_native(
"Isaac Mills's Portfolio",
native_options,
Box::new(|cc| Box::new(portfolio::Portfolio::new(cc))),
)
}
// When compiling to web using trunk:
#[cfg(target_arch = "wasm32")]
fn main() {
// Redirect `log` message to `console.log` and friends:
eframe::WebLogger::init(log::LevelFilter::Debug).ok();
let web_options = eframe::WebOptions {
..Default::default()
};
wasm_bindgen_futures::spawn_local(async {
eframe::WebRunner::new()
.start(
"the_canvas_id", // hardcode it
web_options,
Box::new(|cc| Box::new(portfolio::Portfolio::new(cc))),
)
.await
.expect("failed to start eframe");
});
}

3
src/postgresql.jot Normal file
View file

@ -0,0 +1,3 @@
# PostgreSQL Experience
If data needs basing, my database of choice is PostgreSQL. I've made a couple Discord bots that use PostgreSQL, and every service on my server that uses a DB, I have it hooked up to PostgreSQL. See my [GNU/Linux Experience page](#linux)

3
src/python.jot Normal file
View file

@ -0,0 +1,3 @@
# Python Experience
![Microsoft Technology Associate certificate](images/mta.jpg#512x377)

13
src/reaper.jot Normal file
View file

@ -0,0 +1,13 @@
# REAPER Experience
*REAPER* is a lot like Audacity, but paid and _waaaay_ better.
- This is a short piece of upbeat music I made in REAPER. [You can listen to it here](https://nations.lol/s/pbAN8y6rRw8T6nr)
![Nice Beat](images/nice_beat.jpg#512x288)
- In a Discord chat, a student from my college sent the chat [this piece of music he made](https://www.bandlab.com/track/fefa6cac-62a4-ee11-8926-000d3a428257?revId=fdfa6cac-62a4-ee11-8926-000d3a428257). Someone in chat said they thought it sounded like a Sonic theme, so I remixed his music with [For True Story by Circuit Freq RMX](https://www.youtube.com/watch?v=fgweT5OdLQY&pp=ygUgZm9yIHRydWUgc3Rvcnkgc29uaWMgZ2VuZXJhdGlvbnM%3D). A song from Sonic Generations. [You can listen to the remix here](https://cdn.discordapp.com/attachments/1110262902482542781/1193022053964582943/Get_down_wit_da_true_story_sonic_hedgehog.webm?ex=66077c5e&is=65f5075e&hm=e873c49de116e38e7f048615c6adafd8719913da7640107d15b4b537c4ca031e&)
![The Sonic remix](images/sonic_remix.jpg#512x288)
- I've also edited a podcast using REAPER. However, the podcast was for an assignment my friends were doing, and they would rather the recording not be floating around on the interwebs.

14
src/rust.jot Normal file
View file

@ -0,0 +1,14 @@
# Rust Experience
My language of choice is Rust. Everything I write on my own time, and everything I write if I can, I write it in Rust. Even this portfolio is written in Rust!
This portfolio uses these Rust crates:
- `jotdown`
- `databake`
- `eframe`
- `glyphon`
- `cosmic-text`
- `keyframe`
- `glam`
- `wgpu`

10
src/scratch.jot Normal file
View file

@ -0,0 +1,10 @@
# Scratch Experience
Every software developer worth their salt can say they're proficient in Scratch, but very few can say that they've made an award winning Scratch project. In 3rd grade, [my Scratch project](https://scratch.mit.edu/projects/144210368/) won 3rd place in the The Discovery's 2017 Scratch Code Challenge, hosted by the [Terry Lee Wells Discovery Museum](https://nvdm.org) in Reno, Nevada. To my memory, the competition was separated by grade level, and had ~1,000 international participants.
![Scratch Winner Image 1](images/scratch_winner1.jpg#256x192)
![Scratch Winner Image 2](images/scratch_winner2.jpg#256x192)
- And yes, I do have the medal and the Windows 10 Pro license to prove it
![Medal](images/scratch_medal.jpg#231x512)

68
src/shader.wgsl Normal file
View file

@ -0,0 +1,68 @@
struct Uniforms {
iResolution: vec2<f32>,
time: f32,
iMouse: vec2<f32>,
size: f32,
offset: vec2<f32>,
beamwidth: f32,
paddingtwo: f32
};
@group(0) @binding(0)
var<uniform> uni: Uniforms;
@vertex
fn vs_main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4<f32> {
var x = f32(i32((vertex_index << u32(1)) & u32(2)));
var y = f32(i32(vertex_index & u32(2)));
var uv = vec2<f32>(x, y);
var out = 2.0 * uv - vec2<f32>(1.0, 1.0);
return vec4<f32>(out.x, out.y, 0.0, 1.0);
}
fn modulo(a: f32, b: f32) -> f32 {
return ((a % b) + b) % b;
}
@fragment
fn fs_main(@builtin(position) fragCoord: vec4<f32>) -> @location(0) vec4<f32> {
let iMouse = uni.iMouse + uni.offset;
let frag_coord = fragCoord + uni.offset.xyxy;
var p: vec2<f32>;
var m: vec2<f32>;
if (uni.iResolution.x < uni.iResolution.y) {
m = (2. * iMouse - uni.iResolution) / uni.iResolution.x;
p = (2. * frag_coord.xy - uni.iResolution) / uni.iResolution.x;
} else {
m = (2. * iMouse - uni.iResolution) / uni.iResolution.y;
p = (2. * frag_coord.xy - uni.iResolution) / uni.iResolution.y;
}
let tau: f32 = 3.1415927 * 2.;
let a: f32 = atan2(p.x, p.y);
let mousexy: f32 = atan2(m.x, m.y);
var r: f32 = length(p) * uni.size;
var l: f32 = length(m) * uni.size;
var mouse: vec2<f32> = vec2<f32>(mousexy / tau, l);
var uv: vec2<f32> = vec2<f32>(a / tau, r);
var xCol: f32 = uv.x * 3.;
xCol = modulo((xCol), (3.));
var horColour: vec3<f32> = vec3<f32>(0.25, 0.25, 0.25);
if (xCol < 1.) {
horColour.r = horColour.r + (1. - xCol);
horColour.g = horColour.g + (xCol);
} else { if (xCol < 2.) {
xCol = xCol - (1.);
horColour.g = horColour.g + (1. - xCol);
horColour.b = horColour.b + (xCol);
} else {
xCol = xCol - (2.);
horColour.b = horColour.b + (1. - xCol);
horColour.r = horColour.r + (xCol);
}
}
uv = 2. * uv - 1.;
mouse = 2. * mouse - 1.;
let beamWidth: f32 = (0.7 + 0.5 * sin((uv.x + (mouse.x - 0.2)) * 2. * tau * 0.15 * clamp(5., 0., 10.))) * abs(uni.beamwidth / (30. * uv.y));
let horBeam: vec3<f32> = vec3<f32>(beamWidth);
return vec4<f32>(horBeam * horColour, 1.);
}

1
src/tree_sitter.jot Normal file
View file

@ -0,0 +1 @@
# Tree-sitter Experience