Showcasing designs, projects, collaborations, and accolades.

About this guy

profile bg profile pic

I recently graduated from Western Governors University with a BS in Software Development. I went through the C# program and enjoyed pushing myself. I was also able to work in HTML, CSS, Javascript, and Python.

csharp logo python logo html5 logo css3 logo js logo freecodecamp logo

I started my professional career in the Audio/Video industry. For 14 years I integrated systems in Government, Corporate, Education, Hospitality, and Retail. I've been involved in everything from designing systems, installation, rack fabrication, audio and control programming.

Audio Programming Cert AMX Programming Cert SVSI Networking Cert

I have been in the IT industry for ~5 years. I am employed at L3Harris as a Systems Administrator and I work in the Data Center supporting the physical infrasturcture and backup systems.

project plus logo a plus logo


Here I have mini programs or modules I have been working on.

student app overview

WGU Mobile App

Here are screenshots from my mobile application built in C# using Xamarin. This app was built for one of my assignments at Western Governors Univeristy. The app is for students to keep track of their terms, courses, and assessments.

I am using a sqlite db on the phone to store the students information. When you schedule an assessment you will be given a reminder notification on the phone.

Note: Not available for download. Please contact me if you require further information.

schedule app overview

WGU Schedule Application

This application helps schedule appointments for customers and notifies users of the appointment date and time.
I am using a MySQL database to store information as well as login users.

Note: Not available for download. Please contact me if you require further information.

inventory app overview
inenvtory app modify part page

WGU Inventory Application

This is an application to keep track of products and parts in a product. You can add, edit, and modify each part as well as add them to a specific product. This makes use of DataGridViews and BindingLists.

Note: Not available for download. Please contact me if you require further information.

Pi Slideshow

Pi Slideshow Inventory

We have multiple Raspberry Pi's that run slideshows through out the office. They have a custom api that monitors certain directories. It looks for certain files in these directories that tell it when to cache new images for the slides or reboot the unit. The Pi's also report in so we can see when they were last updated.

I made a simple web app to pull the inventory list and tell me if the units are currently online and also offer a few controls of the units. I would like to add a drag and drop area so I can easily upload new files here.
Grafana Dashboard
Grafana Dashboard2
Grafana Dashboard3
Grafana Dashboard4

Grafana Dashboards

I built a few Grafana dashboards to monitor our Datacenter environment. It pulls information via SNMP and provides alerts through an SMTP relay. The layout view is an SVG map of all the temperature probes in the room and update based on the temperature value. The green indicates temp is normal. Red would be an alert and Yellow or Blue would be a warning.

The rack locations also show the current temperature reading at that probe.

I used Telegraf to gather SNMP info from devices and store it in InfluxDb. Grafana is the front end for display.
Shuttle Location

Shuttle Location

Web app that checks your Geo location against pre defined stops and shows you the closest shuttle stop and how much time left until the next shuttle arrives.

Optionally select the drop down to see all stops.

GitHub Link

Running App

Note: Runnign app is best viewed from phone.

Time Charge Code

Daily Time Charge Code Tracker

Simple program to help me keep track of daily time code activites. Enter in the time you worked and a descpition and it to the list. At the end of the day you can export it to an xlsx file.

The date is adjustable. The Time field is required and the description field is not required. Other allows you to add a specific time code not listed.

BSS Chassis Configurator

I needed a quick way to count inputs and outputs for a BSS Soundweb London system without doing it in my head.

BSS and Crestron v4.2

This is a Simpl+ module I created to work with the existing 4.2 modules BSS offers. This is used to control the BLU103 and I also provide an example file. I utilize the new DI String protocol for setting and getting the phone number, caller ID, and speed dials.


The existing #include file for AMX control of BSS devices, didn't have the DI String protocol or the ability to control the BLU103 so I added these features.
Node Red Example

BSS and Node-Red

Example flow to hard code mute controls into Node-Red. There are many ways to do this here is one way.
I am working on a config module so check back later if you need more features.

If you want to take a look at it, copy paste the below code into a Node-Red environment.
                                [{"id":"93bed85f.4b55a8","type":"function","z":"9030ce.c4382f3","name":"Mute FB","func":"msg.payload = msg.payload[15];\nif (msg.payload ==0) {\n    node.status({fill:\"white\",shape:\"ring\",text:\"Unmuted\"});\n} else if(msg.payload ==1) {\n    node.status({fill:\"red\",shape:\"ring\",text:\"Muted\"});\n}\nreturn msg;","outputs":1,"noerr":0,"x":680,"y":240,"wires":[["193d7ed7.142ba1"]]},{"id":"193d7ed7.142ba1","type":"debug","z":"9030ce.c4382f3","name":"","active":true,"console":"false","complete":"payload","x":870,"y":240,"wires":[]},{"id":"170c7e10.27d0b2","type":"tcp request","z":"9030ce.c4382f3","server":"","port":"1023","out":"time","splitc":"0","name":"BSS","x":530,"y":240,"wires":[["93bed85f.4b55a8"]]},{"id":"a35bfb9e.f46ab8","type":"comment","z":"9030ce.c4382f3","name":"BSS fixed control with Subscribe","info":"These are fixed commands for muting/unmuting. Strings are pulled from Audio Architects 3rd Party Controller. \n\n- Feedback string is piggy backed with the set command.\n    - Doesn't update from unsolicited feedback.\n- Commands from buffer in function are in hex.","x":410,"y":160,"wires":[]},{"id":"55e77944.b38a78","type":"inject","z":"9030ce.c4382f3","name":"Muted","topic":"","payload":"true","payloadType":"bool","repeat":"","crontab":"","once":false,"x":170,"y":220,"wires":[["dec7b2f4.86a0e"]]},{"id":"22b4680d.27a1a8","type":"inject","z":"9030ce.c4382f3","name":"Unmuted","topic":"","payload":"false","payloadType":"bool","repeat":"","crontab":"","once":false,"x":160,"y":260,"wires":[["dec7b2f4.86a0e"]]},{"id":"dec7b2f4.86a0e","type":"function","z":"9030ce.c4382f3","name":"Mute State Control","func":"if(msg.payload==0){\n    msg.payload = new Buffer([0x02, 0x88, 0x00, 0x1B, 0x82, 0x1B, 0x83, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x89, 0x03, 0x02, 0x89, 0x00, 0x1B, 0x82, 0x1B, 0x83, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x88, 0x03]);\n    node.status({fill:\"white\",shape:\"ring\",text:\"Unmuted\"});\n}else if(msg.payload==1){\n    msg.payload = new Buffer([0x02, 0x88, 0x00, 0x1B, 0x82, 0x1B, 0x83, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x88, 0x03, 0x02, 0x89, 0x00, 0x1B, 0x82, 0x1B, 0x83, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x88, 0x03]);\n    node.status({fill:\"red\",shape:\"ring\",text:\"Muted\"});\n}else {\n    msg.payload = \"Check Input\";\n}\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":240,"wires":[["170c7e10.27d0b2"]]}]


Side stuff I'm working on.


Zachman Crest Table

I wanted a nice coffee table so I made one.
First I designed the family crest logo. Then I built this basic table and carved out the crest. I took some time to silver leaf the emblem and then put a thick coat of resin to help protect it. Here is an image after I applied the resin to the table.
I'm still working on adding a nice leather pad around the outside for a place to put my feet and so the kid doesn't knock her head on it.