Welcome to my programming project archive! I'm continuing to sharpen my
programming skills with many languages.
All projects are non-commercial unless labeled otherwise. Some project code has been omitted per my
institution's
policy on sharing code.
A collection of my favorite programming projects. Click on a project to learn more.
This was a joint project between myself and a peer for RPI's Interactive Data Visualization course
(COMM 4880).
The goal was to create data visualizations which would enable the easy comparison of many video
streaming services.
Data we considered included the cost, genre-distribution, content-overlap, and features of each
streaming service.
The work I completed for this project includes the two data visualizations shown below and general
website
design. View the project's website HERE. Please note that the data displayed is
RANDOMLY generated, and the website
is NOT optimized for mobile devices.
This was a homework assignment I completed for RPI's Principles of Software course (CSCI 2600).
The goal was to use a previously implemented Graph ADT (abstract data type) to store location data for
buildings
on the RPI campus. Using Dijkstra's algorithm, the program is able to calculate the shortest
path between any two buildings on the campus. The program accepts the names of buildings or building
ID numbers as shown on the map below. The program supports the following input commands: "b" will list
all buildings,
"r" will find the path between any two buildings, and "q" will quit the program. When implementing the
functions
for this program, I had to adhere to the Model-View-Control design pattern because modular design,
writing code for
reuse, and design patterns were major focus points for this assignment. I also wrote several unit tests
for each of this program's
functions using JUnit 4.
I enjoyed this assignment because it resulted in a helpful tool, a valuable piece of software that
could be
beneficial for all RPI students. It was also a great experience learning how to write correct code which
is logically organized,
readable, and modular.
This was a homework assignment I completed for RPI's Operating Systems course (CSCI 4210).
The assignment was to write a multi-process solution to a variation of the n-Queens problem. Given
a board of size m x n, this program will report the number of solutions to the n-Queens problem for
that specific board. This solution uses a brute force approach with backtracking: fork() is called and
a new process is created for every potential queen placement. Read more about the n-Queens problem
HERE.
The program can also be compiled with two different precompiler flags. If compiled with the "QUIET"
flag,
the program displays only the first two lines and the final line of output in the top-level parent
process.
If compiled with the "NO_PARALLEL" flag, the program will use a waitpid() call, which will prevent child
processes from running in parallel.
This was a valuable assignment because it taught me how to use a waitpid() call effectively to control
child processes.
This was a personal project with the goal being to learn how to use the Spotify API and to create a
customizable
alternative to Spotify's auto-generated playlists like Discovery Weekly and the Daily Mixes. Given a
list of genres and
artists of the user's choosing, this program will populate a playlist with Spotify's recommedation
system. The program
will add a song only if: (1) its album cover is greyscale, and (2) if it has the appropriate energy
level based on the time of day.
Spotify generates an "energy" level for every song in its catalog, and this program will add songs with
lower "energy" in the morning
and songs with higher "energy" in the afternoon/at night. "Energy" represents "a perceptual measure of
intensity and activity",
according to Spotify's documentation. If the program detects that three iterations have passed without
having found any songs
that meet this criteria, the program will choose different artists and genres from the given lists for
Spotify's recommedation
function and raise the required "energy" value cutoffs. I used the Spotipy Python library to access the
functions of the Spotify API.
I used the Pillow Python library to determine if an album cover is grayscale. After a song's album
cover is downloaded and reduced to a lower resolution, the detect_color_image function below analyzes
the color bands of the
album cover to determine if it is black and white, grayscale, or color. The code for some of this
analysis is from Stack Exchange. See the code below
for acknowledgements.
detect_color_image Function
Below is the vibe_check function that determines the "energy" values of tracks with Spotify's API's
audio
features function.
vibe_check Function
This was a homework assignment I completed for RPI's Operating Systems course (CSCI 4210).
The goal was to implement a single-process multi-threaded TCP server for the Wordle word game.
(In case you've never played Wordle, you can play it HERE.)
Using a simple client program, a user can connect to the server with a port number. The user will then
have 6 tries to guess
a hidden word. Upon receiving a guess, the server will return an eight-byte packet to the client
depending on whether the user guessed the correct word,
guessed an incorrect word, or guessed an invalid word (i.e. a word that doesn't exist). And since the
server uses POSIX threads,
it is able to handle mutiple client connections and Wordle games in parallel. The server also keeps
track of the total number of valid guesses,
wins, and losses via global variables; I had to use mutex locks for thread synchronization,
since each thread has to update these global variables during gameplay. In addition to learning about
thread creation and functions like socket(), bind(), and listen()
for network setup, I also had to write my own Wordle algorithm. I used hashtables to compare a user's
guess
with the hidden word. See the screenshots or assignment PDF below for more details about how these
comparisons are displayed.
I liked this assignment because it was the first time I had worked with low-level network functions.
I also really liked the concept of multi-threaded computing and seeing the obvious benefits it granted
when implemented into this project.
willbordman.com is the first website I've built from scratch. It's been fun creating
these webpages and aggregating the work I've done over the past few years. You can view this
website's source HERE.
Please don't hesitate to contact me if you find any issues. This website is still a work in progress!
Welcome to my 3D design portfolio! I specialize in hard-surface modeling, architecture
visualization, and photo-realistic image rendering. I work almost exclusively in Blender.
All projects are non-commercial unless labeled otherwise/watermarked. All projects were completed exclusively in
Blender unless otherwise specified.
Click on any gallery image to view its project details and
acknowledgements, if applicable.
A gallery for my favorite 3D design projects. Click on a gallery to expand/close it.
Foliage & Tree Models - Botaniq Blender Addon
Canoe Model - Traffiq Blender Addon
Human Models - Humano3D
Some textures are from Textures.com and Poliigon.com
[i]
"Guitar"
2022
Project Acknowledgements
Plant Models - Botaniq Blender Addon
Some textures are from Poliigon.com
[i]
"Find Home"
2022
Project Acknowledgements
Human Model - Humano3D
Rain Generator - Baga Rain Generator Blender Addon
Some textures are from Textures.com and Poliigon.com
Plant Models - Sourced from CGTrader
Some textures are from Textures.com and Poliigon.com
[i]
"Garden"
2021
Project Acknowledgements
Foliage & Tree Models - Botaniq Blender Addon
Some textures are from Textures.com and Poliigon.com
[i]
"Aliens"
2020
[i]
"Dash"
2019
[i]
"Classic"
2021
[i]
"Livingroom"
2018
Project Acknowledgements
Some textures are from Poliigon.com
[i]
"Buoy"
2018
[i]
"Bulb"
2017
[i]
"Breathe"
2019
[i]
"Beach House"
2020
Project Acknowledgements
Some textures are from Textures.com and Poliigon.com
[i]
"Bars"
2019
[i]
"Barn"
2017
Project Acknowledgements
Some textures are from Poliigon.com
[i]
"Army Radio"
2018
[i]
"Air Balloon"
2021
Project Acknowledgements
Human Model - Generated with MakeHuman
Some textures are from Textures.com
Selected Project Details.
From June 2021 to September 2023, I completed many professional 3D modeling and rendering projects for Triumph Modular.
Projects usually included modeling products and creating detailed exterior and interior renders. View
Triumph's website HERE. I created renders
for Triumph's mobile trailer, container, and office furniture divisions. The renders
below are a small fraction of the work I completed.
Objects for Interior Renders
Power Generator for Exterior Renders
Topdown Trailer Render
Exterior Trailer Render
Project Acknowledgements
Final animation song - "Balance" by Sara Tavares
Some textures are from Textures.com and Poliigon.com
Guitar Ad was a week-long project I completed for the 3D Art with Blender course at RPI (GSAS 2961).
The project objective was to make different objects interact. I decided to make this experimental
advertisement
for Yamaha's C40 acoustic guitar. While this is an awful advertisement for a guitar, it was a great
opportunity
for me to learn more about Blender's FLIP fluid simulator. I also found that combining an orthographic
camera
with a glass material and HDRI background yeilded some very cool visuals.
Final Animation
Blender Workspace
Project Acknowledgements
Lightsaber Model - art_em
Darth Vader Model - Konstantin Koretskyi
Lara Croft Model - Tomb Raider
Base Walk Cycle Animation - Mixamo
Final Animation Song - "Test Pilot" by Stilz + The Encounter
Darth Croft was a week-long project I completed for the 3D Art with Blender course at RPI (GSAS
2961).
The project objective was to animate a hybrid model. I chose to combine a 3D model of Darth
Vader with one of Lara Croft from the Tomb Raider series (hence the title, "Darth Croft"). Please note
that I did NOT model Lara Croft, Darth Vader, nor the lightsaber because modeling was not the focus of
this
project. Working with these pre-made models allowed me to spend more time experimenting
with animation and cinematic design in Blender. Gaining more familiarity with Blender's graph, action,
and NLA editors allowed me to create more complex animations than I had ever before. And when choosing
camera angles and material colors, I was careful to borrow design elements from Star Wars while also
creating an
original presentation for this new character.
Final Animation
Overall, I'm happy with how this project turned out, especially considering the time constraint. I
had a ton of fun editing the final animation, syncing sound effects and telling a story.
There are a number of things I would change/improve in a second iteration of this project, but the value
of it stems more from the skills I honed rather than the final result. I learned how to blend
animations in the NLA editor, store rig poses in the pose library, use more constraint modifiers, and
achieve
better looking renders in the Eevee render engine, just to list a few.
Blender Workspace
Video Editing Workspace
Project Acknowledgements
Kara Model - DaxProduction
Animations - Mixamo
Some models are from the Blenderkit Blender Addon
Some textures are from Textures.com and Poliigon.com
Final Animation Song - Detroit: Become Human OST
Kara was a week-long project I completed for the 3D Art with Blender course at RPI (GSAS 2961).
The goal of the project was to rig and animate a character with Mixamo. I chose to design a scene
similar to those seen in the video game Detroit: Become Human. In this game, players will often
need to make a choice that their character will carry out, sometimes changing the direction of the
whole story. I tried to replicate this in the final animation below. This project was the first time I
made a valiant effort to animate a character. The animations
are pretty rough, but I had alot of fun designing the scene, setting up the camera shots, and solving
new problems.
Final Animation
Blender Workspace
Project Acknowledgements
Human Model - Generated with MakeHuman
Plant Models - Botaniq Blender Addon
Some textures are from Textures.com and Poliigon.com
Window is a personal project I completed to improve my modeling and scene design skills.
With an emphasis on photorealism, I modeled nearly every object in this scene. One lesson
I learned is how difficult and time-consuming filling a room with objects can be to do by hand.
What objects do you need to model? Where and how should these models be placed? How many objects
do you need to make the scene feel less "empty"? This was also the first time I posed a character
and created hair for a scene.
Clay Render
An Early Render (that I don't like)
Another point of difficulty with this project was composition. I learned another valuable lesson
that is to frame your scene before you start modeling a ton of detailed objects. After I had finished
filling the scene with these meticulously detailed objects, I wanted to make sure they could all be
seen in the final render. However, I wasn't able to do this with a composition that I liked. The
final composition actually doesn't show half the objects I made for the scene originally. In the end,
I ended up with a result I liked, and I think I did a decent job with the photorealism. Eventually,
I created another version of this scene, shown below.
Another Version
Project Acknowledgements
Final Animation Song - "2009" by Mac Miller
Some textures are from Textures.com and Poliigon.com
House was a semester-long independent study I completed in high school. I chose to
study architecture visualization. It was an extremely valuable learning experience where
I dealt with challenges like scene optimization, render denoising, material displacement,
and much more.