From 22773e89f32c167f962b9986acd74650d8efa8da Mon Sep 17 00:00:00 2001 From: Youwen Wu Date: Fri, 28 Jun 2024 22:35:45 -0700 Subject: [PATCH] feat: add portfolio page --- ' | 33 +++++++ src/routes/about/computing/+page.svelte | 84 ++++++++++++++++++ src/routes/portfolio/+page.svelte | 75 +++++++++++++++- .../portfolio/images/team-1280-logo.png | Bin 0 -> 22585 bytes 4 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 ' create mode 100644 src/routes/about/computing/+page.svelte create mode 100644 static/assets/portfolio/images/team-1280-logo.png diff --git a/' b/' new file mode 100644 index 0000000..0e9b31a --- /dev/null +++ b/' @@ -0,0 +1,33 @@ + + + + Portfolio | Youwen Wu + + + + +
+

Portfolio

+

+ Here's some of the stuff I've worked on which I think is notable or interesting enough to write + about. +

+ + + Jankboard + + +
+

+ Jankboard is a fully custom control dashboard for Team 1280's robot competing in the 2024 + season of the FIRST Robotics Competition. +

+
+
+ team 1280 logo +
+
+
+
diff --git a/src/routes/about/computing/+page.svelte b/src/routes/about/computing/+page.svelte new file mode 100644 index 0000000..d134f53 --- /dev/null +++ b/src/routes/about/computing/+page.svelte @@ -0,0 +1,84 @@ + + My Computing Setup | Youwen Wu + + +
+
+

My Computing Setup

+

+ I'm generally very particular about how I use my computer and the software that runs on it. I + don't always configure my tools in the most "user-friendly" way, but rather the most efficient + way for me. In other words, I prefer function over form -- if something can be done faster in + a terminal, I wouldn't use the GUI version. I also generally prefer free software, as in + software which respects the four essential freedoms. However, I'm not a fanatic, and I run proprietary blobs in my firmware and drivers to get my + hardware to function properly. +

+

First, some brief hardware details

+
    +
  • Intel Core i7-13700KF
  • +
  • RTX 4080 (Founder's Edition)
  • +
  • 32GB DDR5 memory at 5200 mt/s
  • +
+

+ The other hardware details of my computer are not particularly interesting. I do have an AIO + water cooler. +

+

Software

+

+ I run Arch Linux with the + Hyprland desktop environment. My OS choice is + mostly pragmatic, I don't feel strong allegiances to any particular distro. I simply use Arch + as it lets me configure my system exactly how I want and has an up to date and large user + package repository. I've also been interested in looking into + NixOS, but I don't yet have 40 hours per week to + configure my operating system, unfortunately. I use Hyprland because: +

+
    +
  1. + Tiling window managers are infinitely superior and anyone who disagrees has never + experienced productivity. +
  2. +
  3. + Hyprland implements most modern Wayland features which is very important as I'm on Nvidia. +
  4. +
+

I also keep a Windows installation around, mainly for gaming.

+

Code editing

+

+ One of the most used pieces of software on a developer's computer is their text editor, so I + spent a lot of time settling on one. In the past, I used Visual Studio Code, but I've since switched to + Neovim. VS Code is a fine editor and I recommend + it to anyone new to programming, but it just doesn't make sense for me to run a full electron + app when I don't need any of the fancy GUI features and I can work faster in Neovim. Modern + code editing has mostly become editor-agnostic anyways with the advent of + LSP, so most + of the important features are available in practically every editor anyways. +

+

As for my terminal, my main priorities (in order) are:

+
    +
  1. Performance
  2. +
  3. Font rendering quality and support (ligatures, etc)
  4. +
  5. Additional quality of life features
  6. +
+

+ Since my editor (Neovim) runs purely in a terminal, performance is the most important since + any perceptible latency or lag quickly becomes extremely annoying. Otherwise, it would + probably shift down to the bottom of the list. +

+

+ I've tried kitty and + Alacritty but ended up settling on kitty. Although + Alacritty (allegedly) has better performance, kitty is practically the same in day-to-day use (and + I heard it has better latency, too). I ended up choosing kitty mainly due to its more versatile + configuration as well as support for font ligatures. It also has tabs and native multiplexing, + which the maintainers of Alacritty refuse to support (which is fine, with tmux or zellij, but native + is nice to have). +

+
+
diff --git a/src/routes/portfolio/+page.svelte b/src/routes/portfolio/+page.svelte index 00de89c..824decc 100644 --- a/src/routes/portfolio/+page.svelte +++ b/src/routes/portfolio/+page.svelte @@ -1,5 +1,8 @@ @@ -8,4 +11,72 @@ - +
+

+ Portfolio +
+

+

+ Here's some of the stuff I've worked on which I think is notable or interesting enough to write + about. +

+

Projects

+
+ + + Jankboard +
+
+ Robotics + License: GPLv3 + Web Technology + Rust +
+ + +
+
+

+ Jankboard is a fully custom control dashboard for Team 1280's robot competing in the + 2024 season of the FIRST Robotics Competition. +

+

+ It displays the robot's telemetry through a network connection established via the + NetworkTables protocol, including speed, orientation, acceleration, heading, and other + vital metrics. It also features a full 3D robot visualization and looks like a Tesla UI. + It was used in production for the first time at the Central Valley Regional, where we made it to the playoffs as 2nd pick. +

+

+ It's built with Tauri, + Svelte, and + Rust. +

+
+
+ + +
+
+
+ team 1280 logo +
+
+ +

Research

+
+

Nothing here for now...

+
diff --git a/static/assets/portfolio/images/team-1280-logo.png b/static/assets/portfolio/images/team-1280-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1b6ccff71afb1059fab9d88522f194ca01224fd5 GIT binary patch literal 22585 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 N002ovPDHLkV1i|BQpW%Q literal 0 HcmV?d00001