Jump to content
Sign in to follow this  

The state of KDYv2

Recommended Posts


First of all, to get this started on the right note: I apologize for being out of touch. Life has been... much. I'll spare you the gruesome details in the first couple of paragraphs, but suffice to say that my road has until very recently been very rocky. Further down in this post, I'll give you a bit of a slice of life to help give some context as to what's been going on - not for sympathy, but hopefully as a way of a bit of explaination.

Second: KDYv2 is not dead. In point of fact, it's been reborn a couple of times during the development cycle - there were a number of false starts that hit technical dead ends. However, a few months ago, I pivoted hard, and frankly restarted development from the ground up, and it's going much much better this time around. Again, further down on this post, I'll get into some techincal details for those who are curious.

Third: **** the proton torpedoes, full throttle ahead - and other such clichés. 
KDYv2 is still going to have all the features that I had planned out way back. I haven't dialed back the parameters from my original vision in the slightest. I am determined to do this, and do this right this time around - and in the last few months, it feels much more attainable that it ever did originally. Additionally, while wrapping away at my keyboard weaving functions and callbacks, I've been doing some testing and prodding. I'll get into that later.

The not so brief Engineering Brief

I don't know how many of you are in the realm of the technical. ****, I'm not even formally trained (Yay for being self-taught), so I may oscilate between accurate technical terms, innaccurate technical terms, lay-speak, and straight up obscure metaphors.
KDYv1 is built on a LAMP stack. It's PHP7 running on Apache, backed by a MySQL database running on a Linux (Centos specifically) server out in California. For Rendering (what actually produces the image) is a program called wkhtmltoimage, which basically starts up a browser, reads an HTML file, and takes a screenshot.
This was (and for now, I guess, still is) adequate. This isn't NORAD, I needed something that satisfied what I wanted out of it.

What I wanted grew. I didn't exactly code it with a lot of flexibility in mind. The primary content that you find on the site is only about half of what's going on. Yeah, you can make custom ships and squadrons, and damage cards, and even a miscellanious (read sloppy) card type that serves as a catchall for things I didn't think of at the beginning - but you know all those different factions you see? and defense token definitions? even the dice colors? That's all stuff that's defined on the other side of the admin wall, and I didn't exactly build it all that well (in fact, right now, the site will break if I add another defense token, which is why you haven't seen the new one from the Onager and Starhawk). For even an even bigger cringe-worthy practice: the rendering system is pretty much all hardcoded - a glorified string.replace call that slots database values in to a static html page. KDYv1 worked, but it's definetly a jury rig.

I wanted to do this the RIGHT way, in a way that would allow for me, and others, to actually extend it's capabilities rather than be confined to them. Now it was a matter of how...

I hate HTML inputs - with a passion. Text Fields and Checkboxes, and all that? I hate them. I started off as a web designer (I still think in CSS, to this day) and inputs are the bane of my designer existance - it's really hard to get a consistent look/feel with any kind of vanilla input field. Now look at KDY, with it's MULTITUDE of inputs of all sorts (and the layout really isn't working as it is). I've tried 5 different times on the v2 Project alone to get inputs to behave in a consistent way using HTML and CSS (and even oldschool javascript like jQuery). I cannot tell you just how frustrating it was to get them to behave. I didn't want to build this site again using that workflow ever again.

I did some reading and I jumped around from something called WebComponents, an immerging web standard (still in it's infancy at that point - still kinda is) that let's users make their own HTML components. Cool!... except if ever you thought jQuery was painful, this was worse.

I spent a few months idling poking around until I happened across a framework called React... Remember that I was pretty heavy into LAMP stack dev. I had never touched NodeJS. I didn't even know that cross-compiling was a thing. I wrote my javascript on a simple js file that the HTML that my php script generated linked to and that was it. An ENTIRE website written in javascript? Are you insane? Might as well light yourself on fire in order to stay warm.

But I was pretty desperate at this point. If I ever wanted to touch web-dev ever again, I knew I had to get out of PHP for the front end. After months and months of struggling to get my head around it, the MERN stack finally clicked in my head - I could code and design a front end that I was happy with! So I start to lay out some pages, start coding up some endpoints on the API using my tried and true PHP skills, that even my own front-end would hook into, and... well... it was pretty painful. I realized that PHP was still holding me back, even for the back-end - so I ditched it... again.

Now, here's the thing about the modern Javascript ecosystem. Everything is a module. If there's a thing you want done, there's a module for it. There's probably forty modules for it. Just download the module, import it, and, well... now you've got a module that does the one thing you want as well as half a dozen other things, and never QUITE in the same way that you want... a perfect example out there is something called ExpressJS. It's a wrapper and extender of the native http-server module for Node, and it's really powerful, and really flexible - except that it does WAY more than I need it to, and the signal-to-noise ratio was getting really low. I had to contort what I wanted around this thing.

And that's when I realized I was on the right path: I wrote my own purpose-driven restful http-server module in 3 hours. THREE HOURS. It would've taken me days to lay the ground work to do the exact same thing in PHP - and my node server was fractional-C-speed by comparison.
Hot **** - now we're cooking.

The Slice of Life / Oversharing

Content Warning: Alcoholism, Suicide Attempt & Depression (not me; non-graphic).

Let's face it - I'm a technical designer, not a content writer - my posts tend to be stream of consciousness as it is - and I would surprise myself if this one wasn't. Also, fair warning: I don't like full stops and I use commas and hyphens almost interchangeably (if you couldn't tell already).
Another quick point: I'm pretty dead-set against the stigma surrounding mental health topics. A lot of people, particularly on the internet, seem to be against the idea of sharing - gotta filter the online persona (sometimes aggressively deny it, and berate those who do while we're at it) - naw, man - you gotta let people be open and honest about life - the strength comes from the sharing.

I can't remember how long I've been working on KDYv2. It's been long enough that I MAY have moved house twice since I started on it. About three years ago, I got a phone call from my brother that my father attempted. He had just been fired for not showing up to work, and seemingly endless debt suddenly loomed up on him. I spent Christmas that year going back and forth from his house to the hospital helping him get things sorted. The four of us: my brother, my partner, my metamore, and I helped dust him off, and get him on his feet. He started the process of getting him on retirement and hung out until we collectively felt like he had enough stability that I could get back to work.

Life went on for about two years. That may I moved into my first real MY apartment (with two other people, but I was the majority rent payer and financial provider for everyone who lived with me). If any of you are in the greater New York area, you have experienced first hand just how high the cost of living here can get. I don't make six figures (and I don't know that I ever will). I spent a lot of time working to make ends meet. We stayed there for two years. I kept touch with dad every once in a while, but I had my nose to the grind wheel in a big way. I indulged in some hobbies to help keep myself from being completely burned out, but there was a lot to tank. Things were oscillating between "ugh, this in painful but doable" and "You know, I think I've really got a handle on this life stuff".

About 4 months before our second lease was up, I got a phone call from my dad. He'd taken a pretty bad fall and ended up in hospital. He was quite frail and as the circumstances started to get explored, he leveled with me in that he had been drinking - a lot. Depression and loneliness (he was living alone at this point) is a **** of a thing, and alcohol can be quite a salve. I spend a few weeks going back and forth between his house and work again while he's in detox/physical therapy. In a few days, we all reached a conclusion: it would be best for me to move back in with dad. The plan was to give him some company and support while he recovers, give him some financial assistance that his retirement can't quite cover. In the same stroke, I save approximately a thousand US per month on housing alone. 

What I was not prepared for was just how curmudgeonly he is. I'll spare you a deeper voyage into my childhood traumatic backstory (what other people call childhood), but this has been a trip. In a lot of ways, I'm realizing how much I had unlearned from having moved out a decade ago - and being better for it - It's particularly highlighted because of how much I feel like I stand in deep contrast of both him, and where I was while I lived with him. I'm peeling back layers of negative behavior and toxic masculinity on his part: "Dad, that's not fair and you know it. you need to put yourself in their shoes for a minute". It's been a **** of trip over the last 5 or 6 months while I've lived here, but progress is being made in slowly getting him to emotional self-sufficiency.

For myself, I'm spending 5-to-6 hours per day commuting, but I only go into the office three times per week, and the days that I do go in I spend the train-ride tapping away at the keyboard. I got a pay bump at work - they still aren't paying me what I'm worth, and my skills are still very underutilized, but I make enough money that I don't feel like I'm comfortably hanging off a cliff anymore. To sum up, the spinning of my head is starting to slow down after the rapid-hard pivot I had to make. I'm okay, and I'm ready to get back to work.

Scouting the Outer Rim.

Tabletop Simulator and Vassal are great programs. I adore them both. I've already decided that KDYv2 will be built around an API. I've already have had multiple conversations with the developers of Tabletop Simulators and they've already started implementing features that will help Tabletop Simulator load content from KDY. I've spent some time writing a few scripts and plugins for TTS and while there are still some hang ups that have yet to be resolved by the developers, I'm confident that a fully featured integration with TTS and KDYv2 will not only be possible, but incredibly experience rich. I have fantasies of hosting a TTS tournament in stream in a virtual arena-like set. (I may have already built a Sorosuub Blimp [a play on Goodyear Blimp] as a fun tangent). Now, bear in mind that this is end-game stuff, and there are a lot of steps that need to happen first, but I've already done a lot of the research on how it should be done.

So where are we now?

Well, this may be slightly discouraging to hear, but this is a pretty new iteration of KDYv2 (one could really call it KDYv2.5) - I learned a lot from my first pass, so I am of the firm belief that this won't be anywhere approaching as painful as the last time. I've already gotten the new UI library pretty much done. I'm taking another solid pass at the database schema and then I work on the API and proper Front End in parallel.
Let's get into things that I've learned from the first pass, and what I want to do maximize the efficacy of those things learned.

I need to take more time planning. I'm good at off the cuff, and it's handy to be flexible, but I found myself refactoring classes really often. I really want to hammer out a full database schema and figure out how they should be related before I create my first table. In this way, I'm finding I'm lacking on tools. My housemates are going to love that my room will mirror a scene out of A Beautiful Mind, or any conspiracy-theorist trope, complete with red yarn connecting pieces of paper, but I need to be better about externalizing the design process. 

I need to be more transparent - and this isn't even for the benefit of the community - I do better with positive encouragement, and it's taken me a long time to realize that it's okay to seek it out. To that end, I'm batting around the idea of doing weekly coding streams. I'm also going to be better about periodic updates. I need to get into the habit of posting small regular updates rather than giant brain-dumps like this. I think that'll help manage burnout and give you guys a better look into what's going on. Another idea that I'm kicking around is weekly snippets about some of the features explained out. I realized that I've never really gone into depth about what the rendering system beyond a few paragraphs here and there. The hang up is that it'll be hard to show off before building it. In order to get any kind of effective showcasing, I'd be forced to spend some time building a bare-bones prototype, and why do that when I can just build the thing. Still, if anyone has any ideas on what they'd like to see on regularly scheduled updates, I'd be happy to embrace it. One caveat though: I don't like being on camera one bit - so any videos would either have to be audio conversations, or voiceovers.

Project management. For those of you who are so inclined, have a look at a youtuber named Wintergaten. If you've ever seen the musical marble machine, that's him. Well, he's in the process of building a second, better one, and he's been at it for years. As you may have guessed, I find the parallels in his ambition and the trials he faces to be eerily similar, and thus inspirational (I highly recommend checking him out). One of the things that he did a few years ago was sit down and plan out (with the assistance of a volunteer Actual Project Manager) discrete chunks. The mantra of "Break it down into parts" is great in theory, but until you actually commit those individualized chunks into discrete structures, the "smaller chunks" that exist in your head will always coalesce into the larger whole unless you commit some serious mental bandwidth to maintaining it (and wouldn't that mental bandwidth be better served in actually working on things rather than reinforcing the walls between the preciously segmented chunks?). Right now my "project management" consists of a color-coded text file with little square bracket checkboxes indicated what is unstarted, unfinished, and finished. This text file isn't even the whole thing, it really only covers the UI library - this clearly will not scale. I don't have a solution to this one yet, but I know it's a thing that I should deal with soon, lest momentum carry me past the point where I'll spend more time trying to get myself organized than working on the actual project.

I'm building Kuat Drive Yards, and so can you!

My own sense of anxiety is yelling at me as I right this: "You're lucky you're getting community support, but really who would want to help, this is awfully presumptuous of you" - and that part of my brain may be right, but screw it - go for the gold. Suppose for a moment you want to help. That's really awesome of you, and I'd love to take you up on it, but I'm not really sure how to make the best use of any help that would be offered. I'm not management material (I loathe the idea of being asked to be a manager at my dayjob) - I have a hard enough time allocating my own resources let alone other people's. I gots no idea what I'm doing, and I'll be the very first to admit it. That said, if there is sufficient interest, I will totally sit down and figure out how folks would best be able to help - I can already tell that anyone who would be willing to donate some Project Management skills would be very welcome.

Eventually, when we get closer to the endgame, I will need to pivot to make a slew of 3D models, and while I'm an Okay-level 3D artist, that may be one of those things that may be better served by someone else.

The design of the cards on KDY have been met with mixed reviews. Some of that is because of the limitations of the rendering engine that I wrote, and some of that is because by the time I got to the renderer, I just wanted the bloody thing to work. When things get closer to the endgame, again, I'd love to see what other folks might think for a good design to serve as the system default renderer.


Anyways - getting back at it - thanks for reading all of this, and being overall just generally awesome.

Fly safely, but not too safely.

Share this post

Link to post
Share on other sites

Oh yes, I'm definitely thankful for your work. KDY has become an accumulation of many nifty and creative upgrade ideas for this great game.

There is the occasional fan-made 1-point card that offers 10 black dice at long range out of every fire arch...






... but there are many people who made a genuine effort to come up with great new ideas. Thank you for creating a forum for them and thank you for the long and hard work on version 2.5.

Edited by JadinED

Share this post

Link to post
Share on other sites


1. Thanks for all the work you have, and continue to put into KDY.

2. I have been going through my own rough couple of years, so you have an open invitation to vent to me anytime. (Wife, cancer & most importantly 18 months No Evidence of Disease!) Sometimes it's better to listen to someone else's problems then dwell on my own.

3. I am a luddite, that embraces tech that I can wrap my head around. Programming is beyond me, but I am still very much willing to help. Possibly with 3d models, and finding a print on demand option to link up with KDY 2.0. 

I am also willing to help with funding. KDY has brought me countless hours of enjoyment and much needed distraction. So don't hesitate to ask.

4. I absolutely look forward to reading any KDY updates, so keep them coming. 


Share this post

Link to post
Share on other sites

Thanks everyone. I appreciate all the support, despite the rambly nature of my postings.

@cynanbloodbane I appreciate in particular the offer of financial backing, but I think I'm doing okay on that front for right now - I have vaguely considered opening up a Patreon when things get a bit closer to release date with some neato rewards (I still have the KDY resin dice masters sitting on a shelf, for example).

Two things on my mind

> I think I'm going to turn Fridays into my "Outing Nights" - be it an update post, a coding stream, a tutorial, a casual Q&A, or a journey into my workshop while I work on non-KDY things, too. 

> As I'm parsing through things, the thing that keeps coming back up in my head is a "You need a project management system, or a project manager" - I was a bit of a project manager at work for two years, but it was kind of off-the-cuff-all-the-time. I wasn't all that great at it (and I didn't get really all that well trained at it, either; thank gods I moved over to the dev team to be a code monkey - we're still a fairly small company that's still finding it's way around how the "right" way to do things is </tangent>) - Like I said in my original post, I've done some cursory research into a PBS, but that tends to be a bit more engineering oriented than software oriented. I'm kinda groping my way around this in a haphazard way, so if anyone has any thoughts on effective and accessible project management systems, I'm down to try anything out.

Share this post

Link to post
Share on other sites
3 hours ago, ISD Avenger said:

Love the site. Looking forward to the next version.

If there was a way to screen for ridiculous designs that would be great. 50 dice front arc, 99 hull etc 🙄

define "ridiculous"

I mean, I know what I think is ridiculous, and you know what you think is ridiculous, but they aren't the same, and there's no real programmatic way to filter based on an interpretable and subjective criteria without user input (ie: ratings).

Share this post

Link to post
Share on other sites
3 hours ago, ISD Avenger said:

If there was a way to screen for ridiculous designs that would be great. 50 dice front arc, 99 hull etc 🙄


18 minutes ago, ThatRobHuman said:

define "ridiculous"

If I was going to make an SSD, I mean a real SSD, it would need more than 99 hull.

Although I agree with the sentiments of @ISD Avenger, ridiculous is very subjective and also relative to what the author is going for.

Now if we could have a search filter that would show/hide items based on our tolerance for "ridiculousness", that would be nice.

Share this post

Link to post
Share on other sites

@ThatRobHuman I think a Patreon would be great, when you are ready for it. I am usually really quiet on here, but I have been a huge fan of your work and following along as much as I can. My wife also loves reading up on what you are doing as she is self taught at coding as well and thinking about following it as another career path. All that being said, thank you so much for all the work you have put into this project and continue to do. My wife and look forward to reading your posts and hope that things continue to level out for you.

Share this post

Link to post
Share on other sites

Yardmaster's Log.

Let's talk databases (riveting, I know). First and foremost - I cannot emphasize this enough: I have no idea what I'm doing. That is to say, that while I've used MySQL for years and have even been learning OracleDB at work, I have no idea what "best practice" is.

KDYv2's databaes is going to be a complex, intwoven, cross-linked beast. Let's leave out implicit tables for now (things like Users, News Posts, all the mundinities that will store meta-level information). Everything starts off as being a row in the Content table. This stores IDs, status's, datetimes of creation/editing, usernames of the creator, editor, etc.
As you start to narrow down the type of content, you end up joining tables that relate to that piece of content in what is kind of an allegory to class-based architecture. Let's take two examples, one "simple" and one more complex.

Damage Card:
This one is easy. 
Row in the Content table has your basics, like I said: content_id, creator_id, created_dtm, name, title (which is different from name, name shows up on the site, title shows up card itself, but uses name as a fallback).
Next table that gets joined on is literally "swa_dmgcard" - this has a Foreign Key pointing to the content_id of the content table, naturally, but also contains things like a link to the damage type entry (Ship, Crew, potentially more), the card text, and a few house-keeping entries, like the obverse and reverse default card renderers.
Like I said: fairly easy - information is spread across a minimum of 3 tables.

this one is a bit more oopmhy.
First, you have the content table, naturally, as well as the swa_dice table. The swa_dice table points to swa_diefaces and swa_dieshapes (That's right: support for 6 or 10 sided dice if you are so inclined) as well as simple things like base color and icon color (black on white or white on black?)
The swa_diefaces link to an icon asset to display what symbol you want on the die (or null if blank)
the swa_dieshapes is easier as that basically just tells us how many faces a given die should support, as well as some Tabletop Simulator specific info you may need.
In addition to that, there's a cross-ref table that says "Ah, die number 2? well for the first face it's this die-face, second faces is dieface 19, third face is dieface 94,etc"

Now imagine how a breakdown of data stored as ships would have to be structured...
Content covers your basics, On the swa_ships table you'll need things like faction, point value, genre, command rating, engineering rating, silhouette icon, TTS model, and so on.
That's not even covering things like arcs (which will need to be it's own piece of content to cover the variable nature of arcs, plus there's going to be a "fifth" arc for the Starhawk and Onager... ugh).
Also consider the dice setup - cross-reference tables up the wazoo.

To this end, I started using a tool to help me map out the database structure... Unfortunately, it lost about 7 hours worth of work because of a bug, and I can't say I trust it anymore... So I took this last week to write a basic tool that does pretty much the same thing!
I'll post a screenshot if y'all are interested. Over the next two weeks, the mission is to complete the database schema - top to bottom. This will let me map out how the endpoints really need to be structured and start building my DB interface scripts.

Bonus: I got my hands on a 3d printer and have been plucking away at making new ships (check out my twitter or instagram for more). I may have a few ideas for patreon rewards after all...

Share this post

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Create New...