Compare commits

..

3 commits

Author SHA1 Message Date
89be03ccf0
Added 1st capstone blog post 2023-08-25 21:04:55 -04:00
2553233d81
File in wrong directory 2023-08-25 20:12:18 -04:00
49721d7a6b
Update CV and front page 2023-08-25 20:09:32 -04:00
5 changed files with 133 additions and 150 deletions

View file

@ -1,80 +0,0 @@
---
title: "Graduation"
description: "It's official!"
pubDate: "Aug 16 2023"
heroImage: "/post_images/graduation.jpg"
---
Hi all, sorry for the huge delay in updates, hopefully you can cut me a just little slack... __as I
finally graduated!__ I took an admittedly long break after classes ended in June and I am so happy
to be able to say that I have officially completed my bachelor's degree in Computer Science. I was
just going over some of my projects this afternoon as I continue to refine my CV and it's really
incredible how far I've come. Like many of life's great moments I couldn't have done any of this without
support, and I want to thank my partner Valerie. From the bottom of my heart, I appreciate all that
you've done to help me on this journey.
My final projects for Computer Graphics Shaders as well as Intro to Databases went exceptionally
well. For my shaders class I chose to create a realistic motion blur based on documentation in Nvidia's
[GPU Gems 3](https://developer.nvidia.com/gpugems/gpugems3/part-iv-image-effects/chapter-27-motion-blur-post-processing-effect).
I was rather excited about this project and I'd like to go through a few details for anyone who might
be interested, otherwise feel free to skip ahead.
I used a two pass process with OpenGL and GLSL in which I first simply rendered an object to a texture. Then to create a
per-fragment blur effect I sample the depth buffer in the fragment shader to find each pixel's current
position and world position.
// Sample depth buffer
float dbAtPixel = texture(uDepthBuf, vec3(st, 1.));
// Find view position
vec4 viewAtPixel = vec4(s * 2 - 1, (1 - t) * 2 - 1, dbAtPixel, 1);
// Convert to world coords, -1 to 1
vec4 worldPos = viewAtPixel / viewAtPixel.w;
Next, I multiply the world position by a "blur position" (a stand-in for the
direction of movement) to find a previous position. This allows me to calculate a velocity.
// No previous view in a static image, so we make one up with uBlurPos
vec4 prevPos = worldPos * uBlurPos;
// Put in range -1 to 1
prevPos = prevPos / prevPos.w;
// Find pixel velocity and scale it if desired
vec2 velocity = uVelScale * vec2((currPos - prevPos)/2.);
In the third and final stage I sample the color buffer in a loop, using the velocity to cacluate
each fragments color. The number of times the color buffer is sampled directly impacts the quality
of the effect, with higher sample rates resulting in a smoother and more realistic blur.
// Sample color buffer
vec4 color = texture(uColorBuf, st);
// Add velocity to st coords
st += velocity;
// Continue sampling color buffer until preferred number of samples is reached
for (int i = 1; i < uNumSamples; ++i, st += velocity) {
vec4 rgba = texture(uColorBuf, st);
color += rgba;
}
// Average samples to get blur color
color = color / uNumSamples;
Of course, all of that was very boring if you don't know what it means. Let's see what it actually
looks like!
![2D bunny with orange and red stripes](/post_images/graduation/bunny_no_blur.jpg)
![2D bunny with orange and red stripes and a low quality blur](/post_images/graduation/bunny_low_sample.jpg)
![2D bunny with orange and red stripes and a high quality blur](/post_images/graduation/bunny_high_sample.jpg)
With those two classes completed I began the spring term and my final Capstone Project, a three
month long grind to produce a complete piece of professional quality software. I was grouped with
two other students and selected for the "3D Escape Room Game" - a video game intended to mimic the
experience of a real life escape room. This was the first full video game we had ever created so
naturally I was incredibly excited, but quite nervous too! I'll have a lot more to say about this
project in the near future, I was required to write a few blog-style assignments so I intend on
posting those as a series too. Unfortunately I don't think I'm allowed to make our code public, but
on the bright side you will be able to download and actually play the game!

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 KiB

View file

@ -0,0 +1,45 @@
---
title: "Capstone Blog Series #1: Introductions"
description: "First of four posts that I wrote for my OSU Capstone Project"
pubDate: "Aug 25 2023"
heroImage: "/post_images/server-guts.jpg"
---
_Originally posted to blogs.oregonstate.edu on Apr 6, 2023_
To begin my inaugural post in this series Id like to tell you a little bit about myself. My name
is Andy, and Im excited to have you all with me as we navigate the next three months. I was
interested in computers at a very young age, and I went on to build my first desktop when I was in
high school. Since then Ive built many more as well as a few home servers to host my own cloud
services. Despite my interest in computing I had always considered it a hobby, and my first degree
was in Ethics, History, and Public Policy. I thought I wanted to be lawyer (I didnt). Instead of
continuing my education I went to work for an insurance company. While I wasnt sure whether
insurance would be my career, I liked the people I worked with and it paid the bills. I ended up
working in claims processing for seven years until, unfortunately, I experienced some health issues
that forced me to leave the workforce altogether. It was not a happy time, yet as with any
life-changing event it also brought new perspective. As I began to recover I realized that, despite
the setbacks, I had a very rare opportunity to pursue an entirely new course in life. Where I had
previously only considered tinkering with computers a mere hobby, I became determined to leverage
my skills and start a new chapter.
I have taken on many roles in both my work and personal life. Ive led projects, participated in
teams, collaborated in multi-disciplinary settings, and worked alone. One thing Ive learned about
myself is that I am adaptable. I honestly dont know what role I might settle into as a programmer
in a room full of other tech people because its a new experience for me in many ways. However, I
am becoming increasingly confident in my ability to rise to a challenge, and I suspect that my
flexibility will continue to be an asset in this new setting as well. I am not particularly nervous
about working in a group, Ive done it many times before. Thats not to say I dont have concerns
though. Namely, group work is rarely fair. Different people have different talents, expectations,
ambitions, and the list continues. It is my hope that my teammates and I are able to communicate
well enough that our contributions are equitable, even if they cant be perfectly equal.
I was actually quite overwhelmed when I first browsed the list of projects that are available for
this term. Did I want more experience with low-level programming? Embedded systems? An industry
project? It was a lot to absorb. I gradually began to narrow things down and, to speak plainly, I
selected the projects that sounded like the most fun. I have no doubt the process will be
educational too, but considering its my last term at OSU I also wanted to create something that
would be meaningful to me personally. To that end, I focused on projects that would allow me to
enhance my skills with operating systems/computer architecture, graphics, and games. In addition to
learning more in those areas of personal interest, I also hope to gain a better understanding of
what its like to work collectively on a codebase. My previous classes have prepared me with theory
and isolated exercises, now its time to put that knowledge to use.

View file

@ -16,19 +16,13 @@ import TimeLineElement from "../components/cv/TimeLine.astro";
when I was in high school. Since then Ive built many more as well as a
few home servers to host my own cloud services. These experiences have led
me to become a strong proponent of free and open source software due to
its transparency, quality, innovation, and diversity.
</div>
<div class="mb-5">
Despite my interest in computing I had always considered it a hobby, and
my first degree was in Ethics, History, and Public Policy. I ended up
working in insurance for seven years until, unfortunately, I experienced
some health issues that forced me to leave the workforce altogether. It
was not a happy time, yet as with any life-changing event it also brought
new perspective. As I began to recover I realized that, despite the
setbacks, I had a very rare opportunity to pursue an entirely new course
in life. I am currently in the progress of finishing my Computer Science
degree and I can't wait to start the next chapter!
its transparency, quality, innovation, and diversity. Despite my interest
in computing I had always considered it a hobby, and my first degree was
in Ethics, History, and Public Policy. Seeking to change the course of my
career, I recently earned my Computer Science degree and I can't wait to
start the next chapter!
</div>
<div class="mb-5"></div>
</div>
<div class="mb-5">
@ -38,22 +32,94 @@ import TimeLineElement from "../components/cv/TimeLine.astro";
<div class="time-line-container grid gap-4 mb-10">
<TimeLineElement
title="Bachelor of Science Computer Science"
subtitle="2021 to 2023 at Oregon State University, Corvallis, OR"
subtitle="Sep 2021 to Jun 2023 at Oregon State University, Corvallis, OR"
/>
<TimeLineElement
title="Bachelor of Arts Ethics, History, and Public Policy"
subtitle="2005 to 2009 at Carnegie-Mellon University, Pittsburgh, PA"
subtitle="Aug 2005 to May 2009 at Carnegie-Mellon University, Pittsburgh, PA"
/>
</div>
<div class="mb-5">
<div class="text-3xl w-full font-bold">Work History</div>
<div class="text-3xl w-full font-bold">Technical Skills</div>
</div>
<div class="mb-10 text-justify">
<ul class="list-disc md:columns-5 columns-2 mx-6">
<li>C</li>
<li>C++</li>
<li>C#</li>
<li>Python</li>
<li>Go</li>
<li>x86 Assembly</li>
<li>MASM</li>
<li>OpenGL</li>
<li>GLSL</li>
<li>Unity</li>
<li>JavaScript</li>
<li>Node.js</li>
<li>Bash</li>
<li>Git</li>
<li>Software Configuration Management</li>
<li>CI/CD</li>
<li>Linux</li>
<li>Linux Server</li>
<li>MongoDB</li>
<li>MySQL</li>
<li>UX Research</li>
<li>Eclipse</li>
<li>Emacs</li>
<li>PyCharm</li>
<li>Visual Studio</li>
<li>Agile</li>
<li>Jira</li>
<li>Trello</li>
<li>Asana</li>
<li>Slack</li>
<li>MS Teams</li>
<li>Office Suite</li>
</ul>
</div>
<div class="mb-5">
<div class="text-3xl w-full font-bold">Professional Experience</div>
</div>
<div class="time-line-container mb-10">
<TimeLineElement
title="Career Break: Health and Well-Being"
subtitle="Mar 2017 to Present"
title="Volunteer Technical Consultant"
subtitle="Apr 2020 to Present at The Rocky River Chamber Music Society"
/>
<TimeLineElement
title="Senior Representative, Annuity Claims"
@ -63,59 +129,12 @@ import TimeLineElement from "../components/cv/TimeLine.astro";
<TimeLineElement
title="Representative"
subtitle="Feb 2010 to Mar 2013 at New York Life Insurance Company"
desc="Processed death claims against life insurance policies and annuities. Assisted claimants and their representatives in both establishing new claims and finalizing existing claims."
desc="Processed death claims against life insurance policies and annuities at a rate of up to 30 express claims per day or 20 traditional claims per day. Fielded up to 50 phone calls per day from claimants and their representatives for assistance in navigating the insurance claims process."
/>
<TimeLineElement
title="Work Study Assistant, Equal Opportunity Services"
subtitle="Jan 2006 to May 2009 at Carnegie-Mellon University"
desc="Converted existing student and employee files from traditional paper to a digital database. Proctored distraction reduced test-taking environment for learning disabled students. Acted as primary on-call contact for after hours assignments. Directly assisted the Manager of Disability Resources in meeting the needs of disabled students as delineated by federal guidelines and University policy."
desc="Converted existing student and employee files from traditional paper to a digital database. Proctored distraction reduced test-taking environment for learning disabled students. Acted as primary on-call contact for after hours assignments. Worked closely with the Manager of Disability Resources in meeting the needs of disabled students as delineated by federal guidelines and University policy."
/>
</div>
<div class="mb-5">
<div class="text-3xl w-full font-bold">Volunteering</div>
</div>
<ul class="list-disc mx-6 mb-10 grid gap-2">
<li>
Technical Consultant for the <a href="https://rrcms.org"
><strong>Rocky River Chamber Music Society</strong></a
> (2020-Present)
</li>
</ul>
<div class="mb-5">
<div class="text-3xl w-full font-bold">Skills</div>
</div>
<ul class="list-disc md:columns-5 columns-2 mx-6">
<li>C</li>
<li>C++</li>
<li>C#</li>
<li>Python</li>
<li>Go</li>
<li>x86 Assembly</li>
<li>MASM</li>
<li>OpenGL</li>
<li>GLSL</li>
<li>Unity</li>
<li>Node.js</li>
<li>MongoDB</li>
<li>MySQL</li>
<li>Emacs</li>
<li>Visual Studio</li>
<li>PyCharm</li>
<li>Eclipse</li>
<li>Git</li>
<li>CI/CD</li>
<li>Agile</li>
<li>Jira</li>
<li>Trello</li>
<li>Asana</li>
<li>Notion</li>
<li>Linux</li>
<li>Linux Server</li>
<li>UX Research</li>
<li>Office Suite</li>
</ul>
</BaseLayout>

View file

@ -15,14 +15,13 @@ const last_posts = posts.slice(0, 3);
<div class="text-xl py-1">Greetings, fellow human 🤘</div>
<div class="text-5xl font-bold">I'm Andy Scott</div>
<div class="text-3xl py-3 font-bold">
CS Student & Free Software Advocate
Programmer & Free Software Advocate
</div>
<div class="py-2">
<text class="text-lg">
I created this site to showcase my projects as well as occasionally blog
my journey toward earning my computer science degree. Feel free to
navigate the site via the sidebar, or continue reading if youd like to
know more about my recent work!
my journey toward earning my computer science degree. Now that I've
graduated I've decided to keep it going and continue to share my experiences!
</text>
</div>
</div>