Software
As a seasoned software developer, I specialize in creating bespoke software solutions tailored to a variety of needs. My expertise encompasses a range of applications, from efficient command-line tools and DLL plugins for 3DS Max to comprehensive GUI software. I am adept in developing within game engines like Unity and Godot, ensuring smooth deployment across Windows and Linux platforms.
One of my key strengths lies in crafting high-performance software for real-time applications. This skill ensures that the tools I develop not only meet but exceed operational demands in demanding real-time environments. For a detailed insight into my work in this area, I invite you to explore the 'Realtime' section of my website.
My development approach is adaptable for command-line interfaces, which is crucial for effective integration and use in render farm environments, thus supporting extensive rendering tasks and complex computational processes. I have a proven track record of working harmoniously with both artists and programmers, effectively bridging creative and technical realms. My expertise in writing clear documentation and producing comprehensive video tutorials enhances the accessibility and user-friendliness of my software.
In every project, I prioritize user experience design, thorough testing, and debugging, ensuring the delivery of reliable and high-quality software solutions. I actively engage with users to understand their specific needs, developing software that not only aligns with but also optimizes their workflows.
Login Beaver
Login Beaver is a series of C# pieces of software written to remind users when to log into an account that facilitates farm rendering. It ran through task scheduler and featured installers to create and setup the scheduled tasks.
At Designstor, as with most companies dealing with rendering 3D scenes, our render farm was a key component of our workflow. This setup included not just dedicated machines in a server rack but also the office workstations of our team members. This approach allowed us to harness additional computing power when team members were not actively using their machines, significantly boosting our rendering capabilities
However, integrating user workstations into the render farm presented its own set of logistical challenges. Ensuring that machines were properly logged in for rendering was a delicate balance. Scenarios such as team members working late remotely and forgetting to log into the render system, or forgetting to log out in the morning, could lead to complications like license mix-ups, render errors due to lack of resources, or slow-downs for their workstations throughout the day.
These situations, while seemingly minor, affected both the individual user and the overall efficiency of the render farm, and this could be particularly troublesome, especially when we were counting on all machines contributing to the workload for specific projects or deadlines.
We understood that these challenges weren't born out of negligence or malice, but were instead a consequence of the multitude of tasks and responsibilities our team members had to manage daily. It was also crucial to avoid any scenarios where team members might feel their additional hours were being overlooked, particularly if they were greeted with queries about not logging into their render accounts after working late.
To tackle this, I aimed to find a solution that was both helpful and non-intrusive. The traditional approach of using reminders and holding meetings to address these issues proved to be only temporarily effective; over time, I noticed a tendency to revert back to old habits. Therefore, a more sustainable and gentle method was needed to ensure consistent participation in the render farm without adding to our team's workload.
Our answer lay in a series of custom software tools I developed, designed to gently remind team members of the most common render farm scenarios. These ranged from popup notifications to reminder emails, depending on the situation. This system of reminders proved to be an effective solution, ensuring the smooth operation of our render farm and alleviating any potential stress for our team. They helped form habits and turned into appreciated reminders when people were busy with other tasks. It was a testament to how a thoughtful approach to software could make a significant difference in our daily operations. All parties preferred this solution, and it was significantly more consistent in results.
From an engineering perspective, the decision to structure our solution as individual modules, despite sharing substantial portions of code, proved highly advantageous. This modular approach facilitated a highly iterative workflow, allowing us to focus on refining and enhancing each component independently. It eliminated the complexities and burdens often associated with maintaining a larger, all-encompassing piece of software. This strategic choice not only streamlined development but also enabled more flexible and efficient updates and improvements over time.
Scenarios
Scenario 1
[Workstation]
Popup notify for artists when not logged out of render.
Scenario 2
[Workstation]
Notify/email user when they forget to log into render after working for the day.
Scenario 3
[Utility Machines]
Utility machine, restart at midnight after current deadline task complete.
Scenario 4
[Render Node]
Cycle the machine Mon,Fri morn after task complete when only render is logged in.
Scenario 5
[Workstation]
Notify user if they launch “Deadline Worker” in their user space and render is not logged in.
DS SYNC: File Synchronization
Written in C#, DS Sync was a Designstor custom-built service, operational on all machines at our office, designed specifically to synchronize files to their required versions. It utilized a custom, YAML(ish) format for specifying files and copying, only under certain conditions — such as updating only newer files or those different in size.
One feature that set DS Sync apart was its intelligent token system, which allowed for targeted copying to user directories. Additionally, I developed 'helper' Python scripts to generate sections of the YAML file and perform spot checks before deployment across our network.
DS Sync was the kind of tool that operated quietly in the background. Its efficiency and reliability meant that it went unnoticed, as files and resources were always up-to-date and available when needed. Often, the best tools are those that seamlessly integrate into our workflows, silently ensuring everything functions perfectly.
The Rationale Behind ds sync
The creation of DS Sync stemmed from a challenge common in our industry: the need for precise synchronization of software, plugins, and libraries. Inconsistent versions could lead to broken renders in unpredictable ways.
I evaluated numerous off-the-shelf solutions, but often they fell short of our needs or were prohibitively expensive, especially considering our limited requirement from their extensive feature lists. I tried alternative approaches, including using Deadline for scheduled tasks, custom batch files, and more. However, these solutions were either insufficient or in the case of the batch files too rickety and daunting to let loose on the network.
Eventually, I decided to take the plunge and develop our own Windows service. This decision proved to be immensely beneficial. The only regret I had was not undertaking this task sooner, as DS Sync turned out to be far more efficient and less development time than I had initially anticipated.
Backup beaver
Backup Beaver is a custom backup solution crafted in C# specifically for Designstor's unique requirements. It was engineered to facilitate local file backups while also addressing particular needs. The system boasts an array of features including targeted compression tailored to a variety of file types, robust versioning, incremental backups, detailed logging, automated cleanup, comprehensive reporting, and support for regex filtering to efficiently manage file selection and exclusion.
A standout feature of Backup Beaver was its innovative use of our render farm for file compression tasks. High-level compression can be resource-intensive, but Backup Beaver harnessed the farm's power to compress hundreds of files concurrently. This distribution of workload ensured efficient use of computational resources. The render farm tasks were given a special status that allowed them to be interrupted for image render jobs, ensuring that our production workflow remained unaffected.
Operational on a server, Backup Beaver utilizes UDP broadcasting to share progress updates. This function permits the development of auxiliary modules that can track the backup status in real time. Every backup operation not only captures a complete snapshot but also documents the incremental changes, safeguarding every version of our data. Scheduled cleanups and deletions are managed with precision, relocating files to predetermined folders, thus optimizing storage management.
ip Task List
ipTaskList is a straightforward task management tool I crafted for my personal use at Improbable Pixel. After trying numerous task list applications, I realized I needed something that simply allowed for efficient ASCII usage with intuitive highlighting. Despite my initial hesitation, rooted in the common programmer's instinct to avoid unnecessary complexity, I decided to forge ahead with its creation.
My apprehensions quickly faded as the development process proved to be remarkably swift. I dedicated a single weekend day to coding and have been using the tool ever since. It's highly customized to fit my workflow, featuring basic markdown-like highlighting, checkbox functionality that dims completed items rather than striking them through, and rudimentary text editing features. I'm very pleased with the result; ipTaskList has become an indispensable part of my daily routine, helping me to decompose larger tasks into manageable subtasks with ease.
DS Archive beaver
DS - Archive Beaver is a custom tool designed to streamline the process of archiving .comp file assets for Blackmagic Fusion. Its primary function is to gather all associated assets, replicate them into a single directory, and modify the .comp files to ensure all internal file paths are relative. This facilitates ease of transfer and project portability. Additionally, the tool generates detailed asset reports, enabling users to swiftly identify and resolve issues with missing files by pinpointing the exact tools affected.
Crafted in C#, DS - Archive Beaver is capable of parsing the .comp file format native to Blackmagic Fusion and producing comprehensive reports. These reports are web-browser friendly, allowing for convenient access and review of the status and integrity of all assets involved.