QubeKwest Wiki

There is now a wiki for QubeKwest. It seemed to me like it would be a more useful format for storing large amounts of game related information than an arbitrary collection of blog posts would be. It took longer to get it working than I wanted, but it does work.

The adventure of getting a wiki up and running proved to be one fraught with peril. For a previous project (years ago) I installed MediaWiki (the wiki system used under the hood by wikipedia.org). I managed to get it to run, eventually, but the system kept its secrets close to its chest and I was unable to actually figure out how to actually use it. Before you get to judging me for that, I didn’t try all that hard.

With that in mind I decided to try a wiki system called Tiki. This proved to be a total nightmare. After several hours, I was still fighting with PHP extensions while trying to make it happy. It used package management software to help install additional things that had its own set of requirements. In the end I did finally manage to get it to work only to discover that the version the Tiki website told me to download as the latest version actually wasn’t. In fact, trying to use it, there were messages that popped up telling me the “latest” version I was using was actually so old it wasn’t supported anymore. I ended up starting over and installing it again from their SVN repository to get the nagging messages to go away. The final install size was almost 580MB!

After using Tiki for a few days, I ran into several things that I hated even more than installing it. As it turns out, the interface is a bit of a disaster, the online documentation is either completely wrong, for old versions, or is just generally misleading in some way or another. It was a convoluted mess just to get a search box to appear on a wiki. Can you imagine a wiki without search support right out of the box?

As I used it more, I ran into issue after issue. The way you have to use images is absolutely terrible. You have to upload them, which makes galleries, and then you have to refer to them basically by number if you want them to appear correctly. Pages in the wiki had horrible formats (I assume this was just by default and could be improved, but I wasn’t inclined to do so). The search results came up with nothing more than a page name and a spot that looked like it was going to have more information but didn’t.

The issues I experienced were surely just the tip of the ice berg since I’d only used it for a couple of days. I couldn’t take it anymore. I scrapped the entire Tiki install and installed MediaWiki. Amusingly, this time with vastly more success than my first time from years back. In fact, the install was fast and painless (just a few minutes), and using it has been absolutely great so far.

As for the actual wiki content that will go on the site, the amount of information we are talking about was almost instantly daunting. When I created a block type list page. That resulted in 331 wiki pages I will need to write, and that’s until I end up adding more block types. I suspect I will write a collection of small tools that is intimately aware of the data structures in QubeKwest to generate a bunch of the wiki pages for me. That would leave it to just copying and pasting or figuring out how to import them instead of having to hand write them all.

Over the course of “whenever I feel like it” I will document things on the wiki, and I’m glad to have the place to do that now. I’m calling that a little bit of progress.

Getting Back to Work Again

As I previously mentioned, spending money tends to provide me with project motivation. The opposite has proven to be true of rejection. The failure to acquire a registered trademark let all the wind out of my sails and started another long period of not working on QubeKwest (which is absolutely still what I’m calling it even if I didn’t manage to trademark it).

In the past I found myself drawn back to this project after these long gaps of not working on it got to a certain length. That is what is happening again now. It’s been long enough, so my brain is starting to want this project again. So far, I’ve only managed to update libraries that have been updated since I was last using them (but I haven’t confirmed that the project config remains correct or that the code that uses them still compiles). Next, I will start trying to figure out what I was doing from a code perspective when I stopped working on QubeKwest.

Without looking too closely I’m pretty sure Vulkan via LWJGL will be where I dive back in because that was the last thing I remember doing. As before, I will have a lot to read and learn, much of which qualifies as reread or relearn to be honest because I’ve forgotten it. I will try to stay focused on that, and naturally, I may not quite succeed. That’s okay, the things I’m mentally wandering off to do that aren’t what I should be working on to “get a cube on the screen” are still probably useful to the project as a whole.

For those following along with the blog, I will continue to tell stories here about how things are going.

Attempted Trademarking

I find I tend to get a bit extra motivated to work on QubeKwest when I spend a bit of money. Sometimes that means software to help to make sure my concurrent code isn’t going to blow up. Other times that means buying piles of books. This time it meant applying for a registered trademark for QubeKwest. The post you are reading has been in draft status for months now as I worked through the process of trying to get the trademark and update it as things move along.

The real first step was to have a random idea and desire to get QubeKwest trademarked. Once I’d done that, I headed over to LegalZoom and went through the process of filling out the application. The application I’m referring to at this point is the one on LegalZoom, not the actual application for the trademark. That comes later.

The first bit of resistance I ran into was a field on the LegalZoom application for a trademark that was marked as optional. This field asked me to define the “Class” of the trademark. That is essentially the way the trademark is designated to a certain type of good or service. I went into the list of classes and spent a good 20 minutes searching and reading the choices, only to decide that since the field was optional, I would skip filling it in for fear of getting it wrong. After a few days, LegalZoom contacted about the fact that I hadn’t specified a class.

This was a little more confusing than it probably should have been because LegalZoom has a page devoted to the list of classes complete with examples of things that fall under those classes. This page didn’t match the email they sent me with suggested classes at all. In fact, had the reference page said the same things their suggestions in the email had said, I would have filled it in immediately during the initial application. Instead I needed to call them up and have a quick discussion about what it should be.

After that, the ball was once again rolling in the right direction. The next step was to wait for the trademark search. This search is to make sure I wasn’t trying to trademark anything that someone else already had. I obviously hoped I wasn’t, and I had definitely spelled it differently than anyone else. This search took a few days to start, and then another few days to finish. The results were voluminous because they had attempted to separately match Qube and Kwest. Nothing that came up was the same but I studied the list all the same. After looking over the search results, I decided that none of the matching results were similar enough to QubeKwest to result in a conflict. Thus, I informed LegalZoom to continue the process.

For reasons I don’t fully understand, LegalZoom then proceeded to email me multiple times and then even to call me to tell me to review my search results. I suspect it was just multiple automated systems that were just lagging behind the process I had been following. Since I’d already done the approval and contact to tell them to carry on, there was nothing to do but to look over the emails and listen to the robocall to make sure I hadn’t missed anything and then move on with my day.

Next, with the search behind me and thankfully confirming that I should be able to apply for a trademark successfully, the process moved on to the part where I have to actually apply for the trademark. LegalZoom filled out all that paperwork for me, and that meant it was up to me to simply look it over and give them final approval to send it in for me. It took me a few hours to quadruple check everything over and then I gave them my blessing to send it on to the US Trademark Office.

The result of saying “go” was that I was directed to a USPTO signature page where I had to make sure everything looked good, agree to a few things, and then electronically sign the application. This in turn sends the information back to LegalZoom, and then I think they sent in the real application. It’s all getting a little fuzzy at this point in the process because there seems to be a fair number of things that are going back and forth behind the scenes that I don’t see or need to approve (since I already previously did so).

Naturally, the US Trademark Office is a busy place, so this part involved a whole lot of patience. Like months and months worth of patience. In fact, from the point where the application was accepted by the USPTO, they told me I wouldn’t even be assigned a lawyer to work on my application for at least three months. I guess that’s just how long the backlog is for lawyers over there. After almost three months, my application was assigned to a lawyer and within almost no time was suspended (denied) for being similar to another name. Weirdly, I never found the potentially misleading name through either the trademark search that was done by LegalZoom or with the one I later did on my own. Apparently whatever secret list the USPTO has for searches had it though.

In the end, I spent a pile of money, Legalzoom felt genuinely worthless in the process, and I was denied. I am now the proud owner of nothing more than I was at the beginning, and I’m out a small pile of money without anything to show for it. I have no intention of changing the name of this project, at least for now, because I don’t consider the name to be misleading or confusing with other game names.

Process Timeline

  • April 25, 2019 @ 1:55 PM – Completed the LegalZoom application.
  • April 29, 2019 @ 12:18 PM – LegalZoom informed me that I needed to clarify the “Class” for the trademark.
  • April 29, 2019 @ 1:09 PM – LegalZoom updated the trademark to “Class 009.”
  • April 30, 2019 – Trademark search started.
  • May 03, 2019 @ 8:53 AM – Trademark search completed.
  • May 03, 2019 @ 9:14 AM – Sent instructions to continue filing the application without changes.
  • May 03, 2019 – LegalZoom’s Peace of Mind Review™ started.
  • May 04, 2019 @ 12:03 PM – LegalZoom’s Peace of Mind Review™ done.
  • May 04, 2019 @ 12:55 PM – Electronic Signature Accepted for new trademark application.
  • May 06, 2019 @ 3:06 PM – Application sent to USPTO and my trademark application was given a serial number.
  • May 06, 2019 – LegalZoom shipped QubeKwest Trademark package to me.
  • May 13, 2019 @ 1:25 PM – Trademark package arrived from LegalZoom.
  • May 21, 2019 – USPTO status: New application will be assigned to an examining attorney approximately 3 months after filing date.
  • July 18, 2019 – USPTO status: New application assigned to an examining attorney for examination.
  • July 20, 2019 – Trademark application for QubeKwest was suspended (ie: denied) due to it being potentially confusing with another existing trademark.
  • July 20, 2019 – Process is now complete, no point in appealing.

Vulkan Startup Code

I’ve been studying books, code examples, tutorials, and frankly anything I can get my hands on regarding Vulkan. What follows is a bit of what I’ve learned in the process.

The first thing I bumped into is that Vulkan uses different shaders than OpenGL does. Or perhaps more accurately, almost the same shaders, but with restrictions and rules all over, and in a different format. OpenGL uses GLSL (OpenGL Shader Language), a C-like text based language, for shaders. Vulkan uses a compiler that turns GLSL that follows special rules into SPIR-V (Standard Portable Intermediate Representation for Vulkan) which is a binary (byte code) based language. The trick here is learning to understand enough about GLSL and SPIR-V that you can figure out what all the compiler errors you get when trying to compile your shaders mean.

The next thing I figured out is that getting through all the start up code for Vulkan is borderline nightmarish. OpenGL magically hides a lot of things in the drivers. This includes everything from the GLSL compiler and linker to the hidden state that lets the whole thing work with relatively few methods. That means that the start up code for OpenGL is a relatively lean process that involves compiling a couple shaders with the driver and linking them together into a shader program and not too much else. In contrast, to get Vulkan up and running is about a zillion lines of code that involves at least a dozen different types of objects that have to be picked over and assembled together.

I’m working on crafting this Vulkan start up code into my graphics engine. At this point it has been a lot of work and research, which I admit has slowed down my posting here, but I swear I am plugging along and I suspect I have a long way to go still. Please try to bear with me.

Java Bump

Somewhere in my travels on the interwebs, I came to realize that OpenJDK version 10 was already at “end of life” because version 11 had come out and was deemed the LTS version (long term support). This meant that version 10, while obviously still functional, wasn’t a great choice. It also meant version 11 could be the version I settle down on for a long time to come (several years at least it sounds like). Related to this was the additional good news that there were no changes to the code required to keep the project compiling properly.

Then came the issue of the Java documentation. Since the last time I talked about Java, the “no longer free” thing Oracle was doing to the licence for Java has come to pass. This came with some baggage I wasn’t fully prepared for. I’d already dealt with switching to OpenJDK, I’d already made sure I had OpenJFX available, but I’d simply assumed that the online Java API documentation would still be available for download. This was a requirement due to my desire to be able to work on the project fully offline if I had to.

This is where it gets kind of weird. OpenJDK doesn’t include or produce the JavaDocs for the API. I didn’t think this would be a problem because they should still be available from Oracle and those should be close enough to accurate to cover any needs I was likely to have. I headed over to Oracle’s site, clicked the “I accept” radio button for the documentation license like I had a hundred times before, clicked the download link, and was taken to an Oracle single sign on page.

Ok, no problem, I can apparently just make an Oracle account. I don’t particularly want to do so, but at least I seem to have a path forward. I start filling in the form to create an account and realize that they are asking me required questions about my work phone number, company, and job title. At this point I have become suspicious that I’m not really supposed to be signing up for an account as a person, so I pull the rip cord and start trying to come up with another way to get the docs. This is pretty frustrating because they won’t let me download the documentation that they clearly provide on their live site for free.

It stands to reason, at least in my head, that I should be able to generate the JavaDocs for the API on my own if I can locate the source code for the JDK. As it turns out this is a very simple thing to do. It’s available as a separate download on the OpenJDK site (assuming you live in a country where downloading it is allowed). That meant I just needed to unzip it and try to figure out how to configure the javadoc tool to build the API docs I want.

Due to Java modules, this actually proved to be a bit more complex than I thought it would. I’m an old hand at Java and I like and use packages all the time, but modules never seemed to really offer much value to me so I never spent any time learning how they work. New information to me was that when they are in use (as they are for the OpenJDK project) they pretty considerably change the way JavaDocs are generated.

After quite a bit of reading the documentation for how to make JavaDocs on code with modules, I finally managed to come up with this:

> cd src      // the place I extracted the source code to
> ..\bin\javadoc -d ..\docs --module-source-path=. --module-path=. --module=java.base -html5

I ran it and in about a minute I had an epic pile of documentation sitting in my docs directory and I was officially ready to go. Hopefully this helps someone else too, or perhaps it will just help me again later, which is also great.