Projects
Lumber Mill Application
Saw Vision
Lease Toolbox
Responsibilities
- C#
- Python
- NoSQL (Couchbase)
- Google Cloud Platform
- Xamarin
- UWP
- Auth0
- REST
- .NET Framework
- Jira
- GitHub
Our company was responsible for developing a Windows application that would create and manage data related to log scaling. This required one application to be used for data entry of log information and another application to be used for managing the contracts and locations of the truckloads of those logs.
Entering the Data
The methodology of scaling a log is a complicated process, but essentially log scalers enter information about the log, like length and diameter. This information is then used to determine how much of the log can be used. It was our job to create an application that could calculate this data in real time and store it in an efficient manner. We deployed this as a Universal Windows Platform application so that it would be accessible with the hardware they would need. I was responsible for building the UI for this application, debugging any issues, developing feature requests, and increasing performance. Since this was being used in a production environment, it was critical that I understood the issues users were experiencing and provide a timely solution.
Storing the Data
Since the information needed for log scaling can change drastically, we stored the data in a NoSQL database through Couchbase. This would allow us to update schemas as needed while still handling large volumes of data. I was tasked with building, deploying, and maintaining the database. Project owners would often have questions about data and it was my role to create the queries needed to provide the answer. Queries were also required for any changes to our data model that required updates to historical data, which I was responsible for writing.
Accessing the Data
Due to the nature of the production environment, we had to allow for offline entry of data that could then be synced later on. While Couchbase offers their Sync Gateway to handle this, we still had to implement our own merge strategies for data integrity. I took the steps necessary to deploy the Sync Gateway and make it available to all users. I did this through the Google Cloud Platform . To keep the application secure, I integrated the Sync Gateway with Auth0. I diagnosed and worked through any issues that arose in our syncing process.
Organizing the Data
The information of the logs needed to be organized under different contracts, which required a separate application. This was built in Xamarin Forms to allow for the most flexibility in our deployment environment. Similar to the log entry application, I was responsible for building the UI for this application, debugging any issues, developing feature requests, and increasing performance. To track the bugs and feature requests, I initiated our use of Jira to manage communication between the clients.
Testing the Data
The rules of log scaling have existed for quite some time. To ensure that our program followed those same standards, the auditing process for these applications had to be robust. I created and reported on unit tests involved with our calculations for log scaling and for our own applications stability.
Responsibilities
- Python
- Firebase
- Labelbox
- OpenCV
- Machine Vision
- NoSQL
- GitHub
Saws in lumber mills are often in need of maintenance, including grinding the saw teeth if they get dull. To assist the mills, our company is building a machine that can capture a picture of the saw teeth and determine if they are in need of grinding through machine learning.
Communicating with Machines
To capture the saw teeth, we needed to be able to move the saw, move the cameras, clean the saw, and present that information to the user. We worked with another company to build the hardware pieces, but we were solely responsible for the software side. As the sole developer on this project it was important to stay self-motivated and organized. We used a Revolution Pi (Industrial Raspberry Pi) to connect to our motors through serial communications. This maximized speed and reliability. We then used a NVIDIA Jetson Nano to process our images and manage the user interface. Not to mention that this was all done 100% remotely, as the machine is located in California. While the troubleshooting involved with this process was rigorous, the satisfaction is worth the effort when you can see (through webcam) an arm move on a machine from a command line call.
Machine Vision
With the machine pieces working, it became important to capture saw teeth themselves. Using FLIR vision cameras, I created the interface necessary to communicate with these cameras and get the images needed to find the appropriate data in Python . This has given me a clear image (pun intended) of what a full cycle development process looks like. From an idea in someone’s head to real images on a screen, I was a part of the entire process. We now continue to work on performance improvements, working with the end users to create the most efficient machine we can.
User Interface
To allow for users to interact with the machine and give the necessary data for our initial dataset, it was vital that we create a user-friendly interface. To achieve this I used Python’s tkinter to create the interfaces. Being in the lumber industry, look was not as important to the user as functionality. It was my responsibility to discuss feature requests with the users. This included things like keyboard shortcuts and layout changes.
Responsibilities
- C#
- UWP
- Auth0
- XML
- GitHub
Due to new legislation, the way that lease schedules were calculated have changed. This can create a hassle for accountants when trying to enter in new information. We teamed up with an accounting firm in Oregon to create an application that would walk accountants through the process in a much friendlier way.
Combining Knowledge
Thanks to my experiences on other projects, the development of this application went incredibly smooth. I was the sole developer for this project, so I decided to stick with what I knew. I built a Universal Windows Platform application, along with Auth0 to handle our authentication of the project. I was able to fully develop this application in a short amount of time due to my efficiency and drawing on previous knowledge. One of my favorite things as a programmer is when the code just flows and on this project that was the case.
Learning New Things
The only thing that I had not experienced before was programming in XML. I had to create Excel worksheets from a UWP application, so it was critical that I understand how to translate that information. I enjoy learning new things, a trait that helps immensely when programming, so this was nothing too strenuous. It is always easier when there is good documentation on a topic. While in my earlier days, I tended to rely on StackOverflow, I have thankfully learned that when you need reliable information it is best to go directly to the source.