WordPress PageSpeed Improvements.
Optimize PageSpeed for WordPress.
Context
Candle Inc wanted to improve their Core Web Vitals to support better SEO. With only access to WordPress I configured several plugins to speed the site up.
Stack
WordPress
Learnings
I was able to dive into which optimization plugins help the best with this kind of work. The plugins used: Asset CleanUp, WebP Converter for Media, Lazy Load for Videos, and W3 total cache.
EE Lessons.
WordPress plugin for structured content.
Context
Empowering Education (EE) is a non-profit that provides mindfulness content for educators to bring to the classroom. Users will log in to the online service to access lessons, download content, and see usage examples.
Requirements
Create a structured form allowing site editors to manage lessons. Provide a non-developer way of modifying the output template. The downloadable content must be restricted based on user access.
Example
A user has access to age band K-2 and visits the K-2 Mindfulness page. Once logged in, they are able to download the associated content.
Stack
PHP, WordPress, WordPress Custom Post, Advanced Custom Fields, Divi, Memberful
Learnings
This was a fun project. It allowed me to work with WordPress and extend it’s feature base. I was able to create a custom post type (the EELesson post type). I integrated with Advanced Custom Fields to build the form. EE already chose Divi as their templating engine, I was able to build a custom template. And lastly, they use Memberful for user role access. By utilizing each of the integrations already present, EE is able to manage this feature on their own.
MMC Conference of Workshops.
Organize attendance for presentations.
Context
Each year members will attend a workshop. The workshop contains a number of talks allowing teachers to share the newest information in their field, or something they did during the year with their students. The workshop is split into 3 periods. Each period contains a number of talks. Each talk has a limited capacity of attendees.
Requirements
Build a service that allows members to register and pay for the workshop. When a member registers, they will pick 3 talks they would like to attend for each period. When an administrator is ready to create the schedule for all members, they will run a script. The script will organize the schedule based on time of registration (earlier gets placed in their top pick). If a talk is full, the member will be scheduled for their 2nd pick, and same for the 3rd pick. The administrator can now look at the schedule and adjust accordingly, forcing certain members for attendance (maybe a sibling is interested in attending).
Stack
Node.js, KeystoneJS, MongoDB, PayPal API
Learnings
This was the first time I worked with KeystoneJS, Node.js, and MongoDB in a Production setting.
KeystoneJS is an all-encompassing CMS. Allowing a quick ramp up for user registration. The administration was already wired up. The biggest learning here was configuration and template convention. Learning how to name files to make sure KeystoneJS picked them up. The second biggest learning was how to register Mongoose Models. There were some pain points while hosting a Node.js app on a shared and managed hosting platform. For example, I couldn’t turn MongoDB into a service meaning the Node.js app needed to start MongoDB separately and wait for database response.
I’ve used Node.js before for side-projects. I did need to understand how to restart the application when an exception occurred; Nodemon was particularly helpful. Debugging locally was convenient with VSCode. Everything else outside of KeystoneJS was similar enough to JavaScript for me to work with; and even write unit tests.
CAD Handwheel Generator.
Windows GUI exports printable CAD handwheels.
Requirements
A naval challenge project. It is too costly for naval craft to carry extra handwheels. Each naval craft may have many different sized handwheels. As an alternative, vehicles will have onboard a computer and a 3D printer. An operator can enter in handwheel dimensions and output a procedurally generated CAD file for 3D print to replace any broken handwheels. Internet will not be available, and the program must be executable offline.
As an additional feature, allow multiple handwheel dimensions at a single time with a CSV.
Stack
C#, .NET 3.1, WPF, Python, FreeCAD.
Due to the lack of internet, the application needed to be self-contained; there can be no remote dependencies. That meant we first needed to find a parametric CAD program that could be downloaded and packaged. FreeCAD was able to do this, and allowed Python scripting to interact with a saved parametric CAD output. Based on the requirements for a Windows machine, the choice was C#.NET 3.1 (for LTS) and WPF for GUI.
Learnings
This was the first time I worked with .NET 3.1, WPF, and Python.
I worked previously with .NET Framework and WinForms. The difference between .NET 3.1 and .NET Framework was minimal. The feature that stood out most for me was the self-contained packaging. Producing a single .exe file that contained all the necessary .NET dependencies and application was fantastic, especially for this self-contained application.
I chose WPF for 2 reasons. I wanted to try it out. And it is a newer, more supported, framework. I liked the XML layout. It reminds me of Android layouts.
I chose to depend on Python as little as I could in this project. It was a necessary hook into FreeCAD, however I wanted a future developer to only need knowledge in one domain (C#/.NET). If they need to diagnose Python, it should be straightforward with little logic. The only thing Python does here is pass values into FreeCAD and call a render method.
Design Decisions
UI
I wanted the UI to look like a handwheel. I’m not sure if the operator would know what each input meant unless given context of what the measurement means among the bigger picture.
Import/Export
There is an import/export feature which saves .json files. This allows an operator to keep track of different handwheel variations. This also helped with testing to allow quick entry of valid inputs and invalid inputs.
CSV
Early on I decided to export a blank CSV with headers matching the input values. It is such a small program that documentation would be overkill. This was a feature I wanted to feel intuitive. Because there are enum values, I did choose to add documentation into the CSV with lines prepended by a # as a comment.
Parametric Input
This is what the parametric CAD file looks like open in FreeCAD.