New Year - Toooo much work
- 29 min read - Text OnlyThe new year, 2025
Another year has come and gone, and unfortunately not with as much writing as I had hoped. Instead, I gained new skills and refined existing skills.
Reflecting on last year
Right after working myself ragged for FurSquared, I got introduced to VR Chat. For those not in the know, it is far closer to what "The MetaVerse" promises than any of Meta's own products. Which is to say: You can be with your friends and meet new people, while appearing how you want to your peers.
The 3D Metaverse
The social vibe I feel from social VR like this is similar to furry conventions—where people accept you for what you want to be or be seen as, instead of the body one wears in the world.
It was a nice way to relax after work and left me feeling happier than burning hours away on an anime series like "Reincarnated as a potato, I'll use my hash-brown powers to level up" (this title is made up, yet a lot of them sound like this.)
Yet, I could not merely "play" VR Chat. I continued to experience dysphoria in how I was represented inside. To overcome this, I gradually developed my skill set in 3D sculpting, retopologizing, weight painting, rigging, creating blend shapes, and texturing within Blender. That isn't all though.
To appear in VR Chat, which runs on the Unity engine, I have to use the Unity SDK to create my own avatar package that VR Chat's SDK will validate and upload. Within this package includes animations, configurations, shaders, textures, meshes, constraints, and other metadata that make an avatar work within the social game.
VR Chat enables a lot of creativity and uniqueness by exposing much of their engine. At the same time, this exposure makes it difficult to perform well, especially in larger events like Furality.
I do try to keep my avatars performant in public-ish events. Not everyone does. Many that run around in poorly performing avatars lack the skills to improve what they've bashed together from online assets. There is a healthy set of public avatars available, though any customization requires the account owner to use Unity to upload avatars.
Dysphoria is a significant blocker for several that want to use VR Chat and lack the drive to develop these creative skills.
Every week, folks get together to show off what they've added and improved on their avatar. It is a culture of creation, rather than consumption.
In a culture of mass consumption, the best we can hope for is that someone with the artistic freedom and budget creates enough high fidelity avatars with enough customization to fit most people's sense of self identity.
I think that may be what's limiting VR Chat, besides the price tag of VR. We'd have to shift away from mass consumption to individual creation and expression. Otherwise, we end up in the world depicted by The Congress (2013).
The moment June began, I had to pause all my 3D work. I still attend VR events, I just haven't been as creative now that my dysphoria had been managed.
Planning, designing, problem solving
The FurSquared Convention staff took a hiatus for the last few months, and now it was time to get back in gear.
A few new changes: we needed a better task management system. Plane was our answer. We also needed a way to share team email accounts while auditing who responded to emails. FreeScout was the answer.
While not so robust as using Ansible to update things, stuff is working and with a tolerable cost per month.
Shortly thereafter, FurSquared's legal entity got Non Profit (501(c)(3)) and Charity status (509(a)(2)) with the IRS. Subsequently we moved everyone to Google Suite org accounts and are leaving behind personal accounts.
We met up in August at the hotel to discuss what will happen in the next year and what needs to improve. I took many notes during 2024's convention setup and execution, which has been distilled into the following series:
- Issues identified at FurSquared 2023
- A Critical issue for Conventions: Size
- A Reflection of 2024's Registration Technology
- Technology plans for FurSquared 2025 and Beyond
Since I set up Plane, I have created over one hundred and sixty tasks across Dealers and Registration technology. With a mix of must have, want to have, and dependency relationships, all this planning enabled two additional tech staff to contribute to the launch of Dealers.
Breaking ground with Vendors
Throughout August, eighty hours went into figuring out a lightweight declarative form schema, which would enable the ambitious goal of reimplementing Google Forms through database configuration.
I broke ground while traveling to and from DEF CON.
I may write more about DEF CON later. If you are curious, I live-posted the presentations I attended to my fediverse account (@cendyne@furry.engineer
).
Store credit card numbers? No. Do not.
Thankfully, I took a break to go camping. I can say without a doubt that cell reception in state parks is terrible and trying to do VR while tethering in a tent as it is raining is a bad time.
Three of them
Camp out kitty
Once the database schema tech was evaluated, we had sign in with Google, and I got the form technology put together, two others joined in building out the Vendors application.
[Object Object] my beloved
I got a reasonable two to three hours of volunteer contribution from two tech staff each week. I set both up for success by providing detailed task descriptions, unblocked them so at any point they could contribute without waiting, and at times mentored them as they touched this new technology.
There's a reason why I've recorded thirty nine hours into "Project Management". Enabling others to do effective work with minimal risk to the time table requires ruthless attention to detail.
With a mere two to three hours a week to work with, I had to minimize how much time each spent reestablishing their mental context. Every relevant detail and recommendation relevant to the objective was accessible and proved effective given the circumstances. If they spent two hours warming up to the task, they would never get it done, and they would not feel like they contributed. Instead, by paying off the design cost myself and predicting what they'd need to know to achieve the goal, I've enabled these two to succeed.
Next up, I went to Big Little Fur Con, a convention where I meet most of my west-coast friends. For the last two years it has operated on the weekdays, which significantly reduced its attending population. While this unfortunately prevents those without available PTO to attend, it has improved the accessibility and pace of the convention.
An idea struck me for registration that I could not let go of while I was spending time with friends. On the way home, my flight got delayed and I missed my connecting flight. With all that downtime I created a tokenized input. Now we can compose strings of pronouns without letting someone choose "attack helicopter".
This UI has been stewing in my head for months. Finally it is out.
Two weeks later, we reached a point where all must-have tasks were complete and I could sign off on its use in production.
I am so relieved. The furry work project Ive been doing for the last 3 months is finally live!
Dealer / Vendor signups are now available at vendors.fursquared.com
Registration 3.0
Without even a week off, I began working on registration. I forked the work done for the vendors application, started a new schema, and removed all the vendors specific code from the fork and immediately worked to replace the one-off alpine apps I wrote in 2022.
A brief intermission with Aquatifur, which operates at an indoor water park resort. Though, my rooming arrangements did not include this option and other room related issues made it difficult to enjoy the convention.
Basing it on the dealers foundation turned out to be a good move. Registration is a scanner-assisted data-entry workflow and I had plenty of reference material for functional server side JS with Hono and my own form framework.
Around this time, Next.js was a serious consideration at work and I began investigating it. Truly, I wished I started with NextJS in June. It would have been far easier to make a pleasant application with it than what I ended up with.
As I do Next.js foundation building at work — on top of supporting, leading, and mentoring my team — I feel the choice I made with registration was appropriate. The vendors application foundation is suitable to rapidly add features to and operates well in a low-bandwidth environment like registration.
Registration needed a few more things though before feature work could begin. While it will be mobile friendly, it will predominantly operate on 16:9 touch-screen laptops. Lots of big screen buttons and gutters for information on both sides.
Then came attendee lookup.
Rather than implement the happy path up front, I prioritize the fallback first: manual input.
As if on a speed run, I reimplemented 2022's check-in applications in record time. Swag, Check In, Refunds, Cash Vouchers, and even reimplementing the customer facing registration frontend.
And then Midwest FurFest came!
Registration finally met and exceeded expectations for attendees. The line continued to move consistently to the point where people complained they could not play their Nintendo Switch in line.
When I reached the station, I was processed in 45 seconds. A majority of that time was me signing a form saying I received my badge. I suspect this is used as evidence in the case of a chargeback.
Swag was handled better by separating concerns. A bag with key items was picked up at one table and inside was a voucher to pick up a shirt at another table. The first table: five stars. The last table: two out of five.
Once again, the shirt crew was under staffed and lines formed behind it. Without any crowd control, some even lined up thinking it was the way out of registration.
I had a lot of fun and at the end I was really out of it. I unintentionally left my backpack with my belongings in a public space with friends and came back with some chapstick, only to realize I left it there in the first place.
Oops, I just set myself up for a short term burn out. All this work, furry work, and then intense and continuous social interaction left me inoperable.
Two weeks pass and I'm only managing to get my day job done. Everything is ahead of my own schedule, so it isn't a stressor.
Dealers finally picking up again gave me a second wind and I worked on HID input scanning.
Great news is that the vendor system that I planned out and developed with the help of Roury and Cale has finally achieved its mission
To receive applications for vendors; to give staff the tools to communicate with vendors and select those that are accepted, wait listed, or declined; to receive tax information and other confidential information only accessible to the treasurer; and to integrate with registration to receive payment for their vending area on site.
Several vendors have completed this lifecycle and it is a weight off everyones shoulders to have this all come together with minimal friction.
Your scanner support just arrived. They can't have my formats. I have special formats. Look, look with your special scanner. My format!
Though, given my timeline, I won't be able to add WebSerial support in time. HID input scanning will do for now. It works by sampling the first three inputs in a short time window and determines if there is an inhuman short and consistent duration between each keydown event. Once this determination is made, it reverts any modified <input>
fields and throws up a scanning modal to capture the rest of the input.
My end of the year vacation is working out, plenty of furry work is getting done and I'm finally improving my personal space. It looks like doing work, furry work, and everything else is too much for me to be healthy. I will have to do better next year on pacing my work and not being so aggressive with my own goals.
Throughout December, I have also gotten a better understanding of the Zebra Programming Language! I can now accurately determine if a print is beyond the print head, and apply other options like peeling or cutting if there is an appropriate attachment. Aaaand, I have collected a few too many printers to experiment with.
This isn't all of them, I swear.
What am I these days?
Professionally, I focus on application and cloud security, including cryptography, AWS infrastructure, and I enjoy designing a paved path that enables others to do great work that remains secure and performant.
From 2014 to 2023, my day jobs predominantly were focused on backend environments. Here and there, I did frontend work with ancient Visual Basic 6 and AngularJS.
While implementing WebAuthn in 2023, I got it in my head that I needed a firm control of web frontend technology. If I could not achieve it without a framework, I am convinced that I will not understand it.
Despite my existing emphasis, the needs of my day job and the needs of this convention have pushed me to develop and refine my skills as a frontend developer. This pressures me into towards an all-around skill set once more.
In 2025, I believe I will have a skillset to independently create any web based application I am looking to do. It is likely that I will reuse the form tech I made for other projects too.
The new year - 2025
Hooray! It's the new year!
Wow, I worked way too much last year.
Can I stop now? No?
What do I need to do to survive until the end of January?
- New Cash registration support
- New Cash admin support
- More API hooks into the old backend
- Basic registration edit form
- CI for registration
- Deploy new registration the first time
- Set up bot-based deploy for registration
- Reconnect everything and swap everything
- CI and deploy for the attendee facing vendors frontend
What about by the convention (before February 19th)?
- Cash-only transactions filter for attendees that commit chargeback fraud
- Admin Sign in with mobile QR code
- Permission reduction
- Training videos
- New volunteer time keeping activity
- Emergency contact activity for security
- Artist Alley sign up
What about the day job?
By March 31st, 2025, I need to have our checkout page comply with PCI requirements 6.4 and 11.6.
You may have noticed a new page for Amazon's checkout. I suspect this is part of their PCI compliance work. There are no third party resources in their new checkout page. All the hosts contacted are:
www.amazon.com
m.media-amazon.com
images-na.ssl-images-amazon.com
fls-na.amazon.com
Unlike Amazon, which is its own payment processor, we have to use others like Stripe to conduct business. In order to operate under the new requirements we have to continuously audit what scripts are on our pages intended for credit card entry.
Given the monstrous mess that AngularJS is and the heaps of hacks tacked on top over the years, it is looking far more appetizing to rebuild our web experience from the checkout page and backwards. In November, I selected Next.js for that task rather than Hono, given what I learned from the ongoing dealers work.
However, to release a checkout page in Next.js, I had to redo a fair amount of foundational work, from visual components to transparent session attestation between backends to backend and frontend API integrations. Which, are going great by the way.
The rest is hooking up ALL the payment processors, determining delivery options eligibility, and other pricing finaglisms. At least, I don't have to deal with a buy now pay later capitalist scourge on society.
What about after March? Any rest then?
Probable some. Like last year, I anticipate getting back into 3D modeling again until I need to do more 2026 development. Which, I hope to write about when I do.
For example, of all the zebra printers I have, what's the best in the used market? Or those DEF CON presentations I went to?
I'm not out of things to write about. I merely need to raise writing in my priorities.