roncli.com blog
The blog of roncli
roncli.com blog
roncli.com
blog
Profile
roncli
Houston, Texas, United States
Labels
Coding
CTG Music
Editorials
Games
Miscellaneous
Music
Servers
Silliness
Software
Sports
Trax in Space Beta
Weather
Recent Posts
WTF did Revival Productions just do?
A Tale of Two Communities
The Final Stretch
A Two Tiered, Untiered OTL
Secretly, you wish you could've done what I did
What have I done since roncli.com v2?
It's Done. It's Finally Done.
The Big Picture is Starting to Wear on Me
A Low Bang to Buck Ratio
win-acme
Archives
February 2005
March 2005
April 2005
May 2005
June 2005
July 2005
August 2005
September 2005
October 2005
November 2005
December 2005
January 2006
February 2006
March 2006
April 2006
May 2006
June 2006
July 2006
August 2006
September 2006
October 2006
November 2006
December 2006
February 2007
March 2007
April 2007
May 2007
June 2007
July 2007
August 2007
September 2007
October 2007
November 2007
December 2007
January 2008
February 2008
March 2008
April 2008
June 2008
July 2008
September 2008
December 2008
February 2009
July 2009
August 2009
September 2009
October 2009
November 2009
February 2010
March 2010
April 2010
June 2010
July 2010
August 2010
September 2010
October 2010
November 2010
December 2010
March 2011
June 2011
July 2011
August 2011
September 2011
October 2011
December 2011
January 2012
February 2012
April 2012
July 2012
November 2012
July 2013
April 2014
July 2014
August 2014
November 2014
December 2014
March 2015
April 2015
May 2015
June 2015
July 2015
September 2015
January 2016
February 2016
May 2016
July 2016
November 2016
March 2017
January 2018
May 2018
June 2018
January 2019
January 2021
February 2021
March 2021
August 2021
October 2021
December 2021
August 2022
November 2022
October 2023
February 2024
April 2024
Wednesday, October 11, 2023
The Final Stretch
Posted: 12:40:00 AM 0 comments
After much stalling on my part, the Overload Game Browser has finally migrated away from Windows over to Linux. This now makes 4 out of the 5 websites I wanted to move off the Windows box completed, leaving one last beast: the Overload Teams League.

This means I'm on the final stretch of a project that's gone on for almost two years now. It definitely feels like the light at the end of the tunnel. Now I just need to figure out what that light is.

The first thing I want to do after all this is done is give The Observatory its own website. I haven't updated anything having to do with it on this site in a long time, and the database I was using for it is massively out of date. In addition, I need to recreate the bot that was used for it so that the show runs much smoother. That will take time, however, and I'll be lucky to have it done by Season 35.

After that, who knows? I have a number of ideas on what comes after that, but haven't made any solid plans for anything yet. There's so many possibilities that I don't feel like I can even choose something until I finish up everything else I'm working on. I feel like I have an ocean of possibilities in front of me, but no clear direction to swim in. Yet!

In the meantime, a lot of other things are falling into place for me to resume a regular streaming schedule. More on that to come later, but I have a number of exciting projects in the works for the stream that I will be putting out there soon.

Labels: , , , ,

Saturday, August 13, 2022
What have I done since roncli.com v2?
Posted: 2:13:00 AM 0 comments
Nothing.

That's it. That's the blog post.



OK, so that's not entirely true. Actually, a lot has happened since the end of 2021. Allow me to recap.

  • I needed a break from hardcore coding. I was going hard for about a year, and needed some time to do something else for a while. I still did some coding, but it wasn't for the big picture projects.
  • Return to work sprung back up. I now travel to the city two days a week for my job. I was not ready for the level of fatigue this would bring on those days.
  • I moved. My wife and I bought a house, and I now live in Pittsburg, California, pretty close to a BART station. It's gorgeous here, we have awesome views of the delta and surrounding hills. The house, however, is cursed.
  • My ability to keep up with everything waned for a while. Having to worry about house searching during the week and actually going to look at houses on the weekend while juggling about a half dozen other responsibilities. For those keeping track, I temporarily gave up maintaining olmod, running the Observatory, and streaming regularly.

While things with the new house have been pretty hectic - see aforementioned comment about the house being cursed - life has been pretty damn good otherwise. I still feel my top goal in terms of coding is to get off of the Windows VM, so I'm going to start picking things up again to move into that direction. But first thing's first.

I've been doing a lot of modernization of some older projects, and have been forcing myself to catch up on super old issues. I want to get the issues list for my personal projects down to zero (excepting FusionBot, read on for more on that) before moving the Overload game tracker to a Docker project. After that, the next real big task is going to be combining the OTL and the Azure server manager into one project, and then moving it to a Docker project. The last big project is giving The Observatory its own website and reinstituting the bot so I don't have to directly deal with Borjarnon making a mockery of the event. (I still love you, Borj.)

After that? I don't think I can commit to anything after that other than shutting down the Windows VM once and for all. I have a lot of ideas as to what I want to do next, but getting to that point is going to take dedication... the same level of dedication I gave last year to my coding projects. It's not unreasonable for me to finish all these things within a year, but I also know how easy it is to burn out, so I'm taking it carefully and giving myself time to do other things that I enjoy. I believe that taking things one step at a time while leaving room for other things will help prevent the burnout I experienced at the release of roncli.com.

Labels: , , , ,

Friday, December 17, 2021
It's Done. It's Finally Done.
Posted: 1:52:00 AM 0 comments
I give to you the complete. The informative. The functional. roncli.com version 2.0.

While it's been out here in beta for the last couple weeks, I formally released version 2.0 on GitHub earlier this evening, shipped it out to its new home in Azure, finished up all the remaining content changes I needed to make, and popped off.

OK, so the celebration was more subdued than that, but I tell you, this has been a journey. I've done so many things that are new, I don't even know where to begin.

roncli.com is the product of nine Docker containers. All of these containers run simultaneously on the same server to get the website to function.

  • Certbot - For keeping the SSL certs up to date.
  • Logger - A node.js application that logs Docker output to Azure Application Insights.
  • Nginx - This web server acts as a reverse proxy for the applications on the server.
  • Redis - Caching for the main website.
  • MongoDB - The main data store for the website.
  • MariaDB - The data store for the photo albums.
  • PhotoPrism - The photo album service that stores over 3,000 pictures used on the website.
  • ronc.li - The redirection service for roncli.com.
  • roncli.com - The main website.


roncli.com uses a whole bunch of tools to make it tick, including some mainstays like express. I also have written my own, including something called Hot Router, an express router that lets me create classes that are picked up by the router to determine what page to load when a certain URL is hit. It connects to a whole bunch of third party services for things such as my blog, my music releases, my coding projects, my gaming stats, and more. And, it has a super cool résumé page that I'd been wanting to do for a long time.

Being finished with this site doesn't mean it's time to stop, though. Next, I'll be doing a release of olmod for the Overload folks, doing some long overdue updates to the Overload Tracker and the OTL, and then it's on to moving all the Overload projects off of the Windows server and retiring it, finally.

There's still a long way to go, but I feel roncli.com was the biggest project that hadn't been moved yet. It was a complete rewrite from the ground up, which the tracker and the OTL will not be. Hopefully I can complete everything I want to do within the next few months and free myself up to do some stuff other than websites for once.

We'll see how that goes in the coming months, but until then, enjoy the new roncli.com!

Labels: , , , ,

Saturday, October 09, 2021
The Big Picture is Starting to Wear on Me
Posted: 10:59:00 PM 0 comments
Eight months ago, I wrote on The Big Picture, a summary of my initiative to get off of my Azure Windows VM and on to Linux VMs running Docker containers with Node.js websites backed by MongoDB databases. It's a meta-project of sorts, and it has taken a certain mental discipline to keep at it.

The Trax in Space 1 archive was easy to port, and since porting it I've learned that I didn't need to restrict downloads so much on it, so I increased the download limit. Six Gaming was full of challenges, and even today I find things I have to change with it because I didn't do it right the first time. I'm currently working on rebuilding this site and have been for several months now, and I'm itching to get back to the Overload-related projects, and to move on from this whole thing.

I said this back in February:

This is, of course, a multi-part project that has taken on a life of its own in recent months, and it's one I am enjoying greatly so far. It's really expanded the boundaries by which I am able to operate websites and related online services.

Boy, that's an awful lot of enthusiasm. Sigh. We were so young back then.

Since then I've worked through major bugs, tackled big architectural design questions, learned a hell of a lot about MongoDb... and have bored myself to death with this project.

Look, it's not like I knew this was going to be a huge project. Just the opposite, I knew what I was getting into. I remember how long it took me to complete roncli.com the first time, and I'm still looking at coming in at well under a fifth of the time it took me to complete it the first time around. I've learned a lot in 7 years, and it's showing with how fast I'm getting stuff done. But when I take a look at the big picture, it just seems so... slow.

I am to the point I want to work on something else. I want to update the OTL for season 7 and beyond. I want to add some amazingly cool things to olmod. I want to make games of my own. And, I want to get back to regular streaming again.

But every time I sit down to code, I am reminded of the plot: get off that monolithic Windows VM, and you'll have the freedom to do what you want and when you want when this is all done. So I go heads down, jam my EDM playlist, and spit out another couple of files on whatever I'm working on, making a bit of meaningful progress until I get bored and go for a walk, play some games, or write a blog post.

I'm sure a lot of this stems from the fact that I've been essentially stuck at home for 19 months. I'm bored to death with that, too. No train rides to The City, and very few outings outside of the usual Friday routine of dinner and groceries. While 2021 has been infinitely better than 2020 when I didn't get out at all, I can't shake the feeling this year that I'm accomplishing very little.

Of course, my GitHub contribution graph will tell you otherwise, and when I look at things logically, I know I'm getting stuff done. I just wish I could fast forward to the end of the big picture so I can move on to the next big thing... perhaps something a bit more exciting.

Labels: , , , , ,

Sunday, August 29, 2021
A Low Bang to Buck Ratio
Posted: 2:08:00 AM 0 comments
The story behind Six Gaming is long, complex, and probably can't be covered in a single post. If I were to sum up what Six Gaming is today, the answer would be "probably should be dead, but stubbornly isn't". I knew this going into redesigning the Six Gaming website, yet I did it anyway. Why?

There's a number of personal reasons involved. My outside hope that some day everyone stops being super busy with life and commits to a podcast again, which is what the original community was built around after our WoW guild died. The only reason I decided to stop streaming it is because no one could commit to the schedule except for me. The website also has a Discord and Twitch bot that promotes streamers, hosting them on our Twitch page, which would be a great tool if the community was still active. However, it's not active, so the main reason I used to justify upgrading Six Gaming? Knowledge building.

Six Gaming is the first website that I've built that runs with a MongoDB back end. It's the second site I've built that uses Docker containers. It's also the second site I've built on my current generation of node.js website architecture, but the first time I've done it within Docker. The website uses Discord.js, Express, FullCalendar, the node.js wrapper for IGDB, the node.js wrapper for MongoDB, and the Twitch.js library that is being rebranded as the ridiculously-named Twurple. However, when I talk about my website architecture, I don't mean the libraries I'm using, but rather the way the website is put together.

I drew some inspiration from the now-defunct Rendr library. It was a node.js library that worked with Backbone.js to let you code a web site just once to render web pages on both the client and server side, making it easy to create single page applications. I was turned on to this library while working for the startup Sift back in 2013, and ultimately used it for my personal site roncli.com. Of course, as soon as I released that site, Rendr stopped getting updated, so I stopped using Rendr and started rolling my own.

The first website I used this new architecture with was the Overload Teams League. I didn't go too far with it, only making it so that there are views that can be rendered either client or server side. I didn't go as far as making it a single page application, that wouldn't come until version 2.0 of roncli.com. The back end architecture is your run of the mill MVC application, nothing too exciting going on. What made everything tick, however, was a custom-built router that I would eventually release to NPM called Hot Router. It's called that, because it has an option that lets you hot-swap controller files while the site is live while the application is running. That was super useful for debugging the first few sites created with it, but the hot swapping has become less useful now that I've gotten better at using Docker.

All of the above is setup for one of the more amusing issues I encountered while working on Six Gaming's website, and there were plenty. Being only my second Docker project, I won't talk about what I can only describe as "newbie mistakes". However, the biggest thing I found was what I term the memory leak from hell.

I discovered it when I was working on the Hot Router project. The gist of the problem is that for weeks after the launch of six.gg, I had a very slow memory leak that would break down the server after about a week. It drove me insane that I couldn't find it. The lengths I went to in order to find the leak were insane. First, I wrote my own calls to the docker.sock API, logging the metrics to Application Insights. That alone instantly doubled the cost of the server while I had the metrics active. The price you pay.

This led me to learn the memory leak was happening in the node.js Docker container. In order to find the memory leak, I had to connect the node.js instance inside Docker to Google Chrome's dev tools. Once I did that, I spent hours pouring over memory logs, slowly narrowing the problem to my shiny new router. Did making the router a module cause the memory leak? Did I screw something up porting the code over from being inline in the project to its own module?

No, the memory leak was there all along. I tried comparing Date objects to see if they were different. While you can compare to see if they are greater than or less than each other, trying to compare that they are equal or not equal actually doesn't work. This was causing Hot Router to always treat the controllers as if they were just hot swapped. It would delete the cache of the controller and re-require it. As it turns out, the act of deleting the cache and re-requiring it caused the memory leak. That, combined with the date comparison bug, resulted in a slow memory leak.

As I was fixing that bug, it dawned on me. I run the Overload Game Tracker, and that site had been suffering from a memory leak for over a year. It runs an early version of the routing code that Hot Router uses. Turns out I solved a very old memory leak by finding the leak in an entirely different application.

Anyway, Six Gaming's website has been humming along for a while. It was a lot of effort for not a lot of reward. However, this project taught me a ton about Docker, MongoDB, and more. And everything I learned from this is going into my most ambitious project yet... my own website! More on that in a future post.

Labels: , , , ,

win-acme
Posted: 2:05:00 AM 0 comments
Here's a great piece of free software for IIS administrators who want to easily manage their SSL certificates from Let's Encrypt.

win-acme is a self-guided command line utility that allows you to quickly and easily take an IIS website and get an SSL certificate on it. After struggling with utilities like ACMESharpCore, ZeroSSL's Crypt-LE, and Posh-ACME, I realized that all of these tools, while powerful, didn't have any ease of use whatsoever. When I first looked at the text interface for win-acme, I didn't think it was going to be as easy as selecting options from a menu.

It's as easy as selecting optinos from a menu.

Within 5 minutes, I had 7 websites with shiny new SSL certs, and I had gotten them scheduled them for a regular renewal. I didn't have to do any configuration or any PowerShell scripting, it just worked. Give it a try if you're running websites on IIS!

Labels: , , , ,

Thursday, March 25, 2021
Overload has truth; next it needs balance
Posted: 6:31:00 PM 0 comments
Overload multiplayer was put together in around a month, went through another month of testing, and ended up being rather underwhelming to play. Ranked multiplayer queues died out after the first couple weeks, those that remained were either gaming the system or late to the party. Mercifully, ranked multiplayer did not survive very long.

However, multiplayer soon began to thrive in the form of the Overload Teams League. I founded the OTL in 2019 for pilots who wanted to play team games. It caught on pretty quick with 6 teams by its second month. At first, we dealt with the frustrating limitations of poor server choices, shoddy networking, and always demanding to Bammer "RESTART YOUR SERVERS!!!". But shortly after Revival Productions folded in February of 2019, a glimmer of hope appeared in the form of olproxy, a piece of software that allowed Overload LAN servers to act as Internet servers. For the first time, Internet games were playable without official servers.

Over time, this expanded to olproxy being incorporated into olmod, a collection of mods for Overload with the aim to improve multiplayer game play. A large number of improvements have been included in olmod since then, including larger game sizes, reporting to a tracker, sniper packets, lag compensation, and more. What hasn't been addressed is weapon balance.

Multiplayer weapon balance has not been great since Overload launched. Ammo weapons have been shown to dominate, and the energy weapons are a mixed bag with cyclone being dominant and reflex being weak. Hunters used to be super strong until an early nerf was added to olmod. Creepers and time bombs used to be excessively out of sync between client and server. Despite this, people still played, but bigger issues existed because people couldn't understand what they were seeing. Ship positions were not consistent. People were saying that 50ms in Overload felt worse than 100ms in Descent 3. (While seemingly unbelievable, this was learned to be a true statement since Overload intentally adds a minimum of 83ms of lag to game play; 33ms for processing controls smoothly and 50ms to be able to interpolate ships smoothly.) Slowly over time, the net code was deciphered and unravelled, and we learned some shocking things about how the net code was implemented. In addition to the intentionally added lag, your entire controls are sent to the server every frame for processing server-side. Every button press, mouse movement, or swing of the joystick would be part of that send. But because client and server frames don't match up one to one, this would cause errors in position and rotation, and weapon firing that was often out of phase, meaning what you saw on your screen wasn't what was happening on the server.

First, we fixed the weapons. Sniper packets made it so that every time you fire something client-side, that is what was seen server-side. This also eliminated some super bad parts of the game, such as disagreements as to how many missiles you have, what weapon you're using, what side of the ship you're firing a missile out of, and more.

Second, we fixed most of the intentional lag and made it so that it would try to compensate for lag, predicting where ships will be in the future, making them easy to hit. Then we revisited weapons, also compensating them for lag so that they'd be easier to dodge.

I say "we" because this is a team of developers doing this. Arne de Brujin created olproxy and olmod and showed us what is possible. I've contributed a bunch of code, and Tobias, Whollycow, and derhass have been instrumental in keeping things on track. We even have occasional contributors like terminal, luponix, and D.Cent provide extra quality of life for both players and developers.

And now we're ready to tackle balance.

Players are now seeing the game closer to the truth than ever before, and as a result they have honed in their skills better than ever, showing us that, yeah, there are serious balance problems with the game. It's not like we didn't already know this. However, now that we are seeing closer to the truth, we can begin to understand exactly what these balance problems are, and hopefully start finding common ground in regards to what needs to be balanced.

Labels: , , ,

Thursday, February 25, 2021
I Thought I Wasn't Going to Ever Blog about Trax in Space again...
Posted: 2:08:00 AM 0 comments
Well, I hope at least a couple people get a good chuckle out of the title. Fortunately for them, this post is about something else entirely: the Trax in Space 1 file repository.

I've maintained this site, with some interruptions, since around the time TiS1 shut down, which I believe was some time in 2003 or 2004. It was a simple site written in Classic ASP that had one purpose - serve files. When I lived in Houston, I maintained this site on my own server that was literally right next to my desk. I had unlimited bandwidth, great Internet speeds for the day, and was able to let people download what they wanted.

Fast forward to October 2015, when I moved from Houston to Belmont. The site was unceremoniously removed from the Internet, and I really had no idea how I wanted to get it back up. I had roncli.com up in Azure for quite a while by that point, but didn't really know what the cost was going to be for me to put the whole 14 GB repository online, so I just... didn't.

It didn't take long for people to notice it was gone, either. In December 2015, I received my first email regarding someone willing to host the site. As a man of technological pride, I silently declined, promising to myself to put it up soon. It took me 2 1/2 years to do so. This was the birth of the Github repository for tis.roncli.com, rewritten entirely in Node.js. However, there was a twist. Because I wasn't sure what kind of cost bandwidth would have, I limited downloads to 50 per 24 hours, a limit that still exists to this day. People have been generally happy that it's back, but have been asking for the 50 download limit to be removed. I've largely been unwilling to do that, simply because I'm not sure what the cost of doing so would be. However, it's a question that I will be willing to revisit after this current project is complete.

Last year, I started learning Docker, and figured TiS1 would be a great first project. I learned how to set up Azure Storage, where all the files now live. I learned how to run certbot properly, got nginx as the web server, and log failures to Azure so that I can monitor what's going on. It's been awesome. The server is a Linux VM that's super small compared to the one I'm running, and is all open source, so no fees for it being a Windows VM with SQL Server on it. It's pretty cheap to run, too: about $10/month.

TiS1's transition has been a success, and kick started me on my next project... moving Six Gaming into Docker, a project that was full of... let's say "learning experiences". I'll talk about Six's challenges in my next post.

Labels: , , ,

Monday, February 08, 2021
The Big Picture
Posted: 4:16:00 PM 0 comments
Sometimes, it's a good idea to take a step back and look at what you're doing and what you've done, and ask, "Can this be better?"

I recently did this with my Azure Windows VM. For a while, I've been just loading up any new website or venture I've created onto my VM. This, however, has proven to be problematic when it comes to some of my more recent projects, including the OTL and the corresponding Overload Game Browser. These two projects are by far my most used websites on the server, and they continually push the limits of what this VM can do. Timeouts have become more and more frequent, and as more and more data piles into the database, the problem is just going to keep getting worse.

So I asked the question, "Do I need to be on a Windows VM?"

Some years ago, the answer would have been "yes". I was running .NET Framework 4-point-something, and had a lot of Microsoft-specific things on the system, including a Microsoft SQL Server. Now, however, every site I host is written in Node.js. The only thing remaining that requires anything Microsoft is the SQL Server.

So I asked the question, "Do I even need SQL Server?" I don't think I do. MongoDB exists, and I have been figuring out how to work with that for some time.

As such, I've begun a massive project to try to move away from this Windows VM and retire it permanently. For a while, I wasn't sure how I was going to do it, but as part of a learning course pilot at work I picked up Docker. My goal is to move every project that I have on that server into a group of Docker containers and run them on their own Linux VMs. Linux VMs are much cheaper than Windows VMs, and if something starts running out of resources I can just up the VM size accordingly.

So what is going to move?
This is, of course, a multi-part project that has taken on a life of its own in recent months, and it's one I am enjoying greatly so far. It's really expanded the boundaries by which I am able to operate websites and related online services. In coming posts, I will talk about each project separately, and what each site's status and future is.

Labels: , , , , ,

Tuesday, January 02, 2018
The Descent DXX-Retro 1.4 Roadmap
Posted: 5:46:00 PM 0 comments
For some time now, I've been a Collaborator on the DXX-Retro project. Originally I just started helping out on various odds and ends, but lately my focus has been on the observer mode of the game.

Over the past two years, I've essentially been waiting on the project owner, Drakona, to work up the networking code to send client ship status to the observers. It's one thing to see the ships flying around in observer mode, but another entirely to know everything about those ships. That is, shields, weapon loadout, what weapons you're about to fire, etc. Unfortunately, her last commit to the project was February. Of 2016.

I get that priorities in life change, especially when you become a two-time parent. :) The Descent community, however, hungers for more, and as a result I've decided to finish off observer mode in Drakona's absence. There's actually quite a lot to make that happen, so I've created the v1.4 Roadmap. In this post, I discuss the rationale behind the roadmap, and what to expect from Retro in the future.

DXX-Retro has largely served its purpose to the competitive community, but two outstanding features remain to be added. Both of these were promised by Drakona to the late JinX. One of these features, observer mode, was even kind of named after him, "JinX Mode". The other feature was specific for Descent 2, and that is Capture the Flag Classic, which brings D3-style CTF play to D2.

In February of 2016, Drakona and I released an early version of DXX-Retro v1.4X5, which gave us a taste of observer mode. This only gave us the visuals. While we could see ships flying around, we didn't know anything about those ships other than what their opponents knew. This was always wanted, but we never really came up with a plan to do it. And, in the past 2 years, nothing has been worked on to support this. Unfortunately, Drakona just hasn't had time to work on it, and my work has therefore stalled.

While it hasn't been a great situation, the community has gotten a lot of mileage out of observer mode. So much so that a Twitch show was made out of it which continues to enjoy success among the community. However, there's a lot that we miss on the broadcasts because we don't have those shield numbers, the weapon loadouts, and whatnot. And after two years, the time has come to just get it done.

So, I'm getting it done. The roadmap includes 5 future releases along the 1.4 line. The first will be v1.4X6, which I'm hoping to finish this week. This will include the shield numbers appended to the pilot names under the ship. I want to also include a way to indicate damage, and will be working on ideas for that.

The second release will be v1.4X7, which will get the rest of the ship status in the game and make any necessary upgrades to the observer mode UI that we want to change from previous versions. I'm *considering* adding my custom-made Observatory UI to Retro, but am not sure that's needed.

The third release will also be v1.4X7, but this time for Descent 2! Once I know what I'm doing in D1, I can apply that to D2, and we can have an observer mode for both games.

The fourth release will be v1.4X8, also only for Descent 2. This will include Capture the Flag Classic, where instead of the "egghunt" style game where flags are worth 5 and kills are worth 1, we'll instead make the flags spawn in the base, only have teams be able to score if their flag is in their base, and have team points be based on flag captures only.

And finally v1.4 will be the final release for the 1.4 line, which will include any bug fixes, documentation updates, and any other housecleaning duties we need to do for a proper release.

After that, the future for Retro is murky at best. There are no less than 50 open issues on GitHub for Retro right now which vary from essential to nice-to-have to outright silly. Also to keep in mind, the DXX-Rebirth is nearing a v0.60 release that is essentially a codebase refactoring in addition to a ton of other updates. I would love to see a Retro v2.0 not only based on Rebirth v0.60 but something that can also follow that version as well, instead of being a complete fork that forgets where it came from. This in and of itself would be a monumental task.

Until then, however, we'll keep Retro focused on what we need to release v1.4, and if I can keep it going without the need for added help, perhaps that will be much sooner on the horizon than expected. Here's to some better Descent in the near future!

Labels: , , ,

Tuesday, March 07, 2017
Observing the Swiss
Posted: 2:29:00 PM 0 comments
Running The Observatory is super fun. Being a self-proclaimed 6 degrees of freedom junkie, watching pilots pull off incredible moves just to avoid taking an extra 10 points of damage here or there is fascinating.

The format of The Observatory is largely inspired by CoNDOR, the racing league for the game Crypt of the NecroDancer. Over there, they have their main commentator and several referees who work in the background to ensure that everything goes smoothly. However, on The Observatory, I am afforded no such luxury.

Therefore, I've tried to automate as much as I can to ensure that I can spend time focusing on the action rather than on administering of the tournament. To this end, drawing on my experience from making SixBotGG for Six Gaming, I created FusionBot for The Observatory.

This bot takes care of a number of fun (and not so fun) admin tasks, but the one thing I wanted to highlight was the algorithm I created to create a Swiss pairing system for the qualifier tournaments. In a Swiss tournament, everyone plays a round every game, with the idea being that as the tournament progresses you will play opponents who are closer and closer to your skill range.

A manually-ran Swiss tournament often will have the tournament director throwing players who have the same number of wins in a pile, and randomly determining from that pile who plays who. There are ways to ensure people don't play each other twice, and even ways to govern who gets a bye round.

For The Observatory, I had added constraints that required some custom programming. For instance, players can't play each other if neither of them can host a multiplayer game. But as a general algorithm, here's how I managed to get a working Swiss algorithm in node.js.

1) Get a sorted list of players


This part's pretty easy. You want a list of players sorted by their performance.

var eventPlayers = Object.getOwnPropertyNames(event.players).filter((id) => !event.players[id].withdrawn).map((id) => {
    return {
        id: id,
        eventPlayer: event.players[id],
        ratedPlayer: ratedPlayers.find((p) => p.DiscordID === id) || {
            Name: obsDiscord.members.get(id).displayName,
            DiscordID: id,
            Rating: 1500,
            RatingDeviation: 200,
            Volatility: 0.06
        },
        points: event.matches.filter((m) => !m.cancelled && m.winner === id).length,
        matches: event.matches.filter((m) => !m.cancelled && m.players.indexOf(id) !== -1).length
    };
}).sort((a, b) => b.points - a.points || b.ratedPlayer.Rating - a.ratedPlayer.Rating || b.matches - a.matches || (Math.random() < 0.5 ? 1 : -1));

Here, I get all of the players in the tournament that haven't withdrawn and return an array that includes the player's ID (which for a Discord bot is simply their Discord ID), their player information for the tournament, their ELO, the number of wins they have in the match, and the number of matches they play. We then sort this so that the people with the most points are on top, and break ties on ELO, least number of matches played, and in the case that everything is even we just flip a coin.

2) For each player, match them to a potential opponent


Here, we create a recursive function that attempts to match players based on a set of criteria. In that function, we get the players that have yet to be matched up, and find potential opponents for the first player in that list.

var remainingPlayers = eventPlayers.filter((p) => matches.filter((m) => m.indexOf(p.id) !== -1).length === 0),
    firstPlayer = remainingPlayers[0],
    potentialOpponents = remainingPlayers.filter(
        (p) =>
            p.id !== firstPlayer.id &&
            event.matches.filter((m) => !m.cancelled && m.players.indexOf(p.id) !== -1 && m.players.indexOf(firstPlayer.id) !== -1).length === 0 &&
            (firstPlayer.eventPlayer.canHost || p.eventPlayer.canHost)
    );

You see here that the list of remaining players can't exist in my "matches" array. We get the first player and a list of potential opponents. Opponents cannot be yourself, cannot have been already played, and as is a special case either you or your opponent must be able to host a game. Inside the recursive function, if there is only one player in "remainingPlayers", we check to make sure that the player hasn't had a bye before. That is, if they've played as many matches as there have been rounds in the tournament, the bye is okay. If not, we fail attempt at making a matchup. Failed attempts get interesting, and we'll get to that in a moment.

if (remainingPlayers.length === 1) {
    if (firstPlayer.matches >= event.round) {
        return true;
    } else {
        return false;
    }
}

Now we start a loop through potential opponents. As long as there is a potential opponent available, we will try to assign them the match until we run out of opponents. How we determine who to match an opponent up is where the fun math comes in:

let index = Math.floor(potentialOpponents.length / Math.pow(2, event.round + 1));

With this formula, in an 8-person tournament, the top player will play the 5th seed in round 1, the 3rd seed in round 2, and the 2nd seed every round thereafter (assuming all other conditions for being a potential opponent have been met). This is far better than throwing names into a pile and drawing randomly. Since it uses math, it makes later round matches more meaningful, and allows for earlier matches to be scheduled fairly. Here's the loop in its entirety:

while (potentialOpponents.length > 0) {
    let index = Math.floor(potentialOpponents.length / Math.pow(2, event.round + 1));
    matches.push([firstPlayer.id, potentialOpponents[index].id]);
    if (remainingPlayers.length <= 2) {
        return true;
    }
    if (matchPlayers()) {
        return true;
    }

    matches.pop();
    potentialOpponents.splice(index, 1);
}
return false;

We push the match onto the matches array, but if we don't ever return true because we run out of remaining players or we can't match future players, we basically back the match out of the matches array and try again until we run out of matches to try. The "matchPlayers" function is our recursive function this resides in.

3) Determine who's home


In chess, there's a concept of determining who gets the white pieces. In Descent, it's about whose home level you're playing in. Here in The Observatory, we don't want people playing home or away too many times in a row, so we have a way to make sure that happens as infrequently as possible:

match.sort((a, b) => (
    (event.matches.filter((m) => !m.cancelled && m.home === a).length - event.matches.filter((m) => !m.cancelled && m.home === b).length) ||
    (event.matches.filter((m) => !m.cancelled && m.players.indexOf(b) !== -1 && m.home !== b).length - event.matches.filter((m) => !m.cancelled && m.players.indexOf(a) !== -1 && m.home !== a).length) ||
    (Math.random() < 0.5 ? 1 : -1)
));
eventMatch.home = match[0];

The "match" is the array of players, and we sort the array in a way that makes it so that the player who has played home the least gets it next. In the case they've both played home and away identically, we flip a coin.

Summary


Putting together a Swiss algorithm for pairings wasn't too hard, and in fact was more about getting all of the nuances of a Swiss tournament just right. A lot of trial and error was had, and the first two seasons of the Observatory resulted in some pretty spectacular failures. But the code is pretty solid now, and you can find the whole function under "generateround" in fusion.js. I would like to break this algorithm out of the bot and into its own NPM module at some point, perhaps that's something for a future CodeShare episode!

Labels: , , , ,

Tuesday, January 19, 2016
Report Card: 2015
Posted: 12:38:00 AM 0 comments
I often do a "Year in Review", but this year I thought I'd change it up a bit. Last year, in addition to reviewing what happened the previous year, I added some goals for 2015. This year, instead of just reviewing what happened last year and adding the goals, I figured I would also add in a kind of "report card", where I grade myself on how I did towards those goals from the previous year.

I'll be honest. These goals stayed with me all year long. When I thought about what I want to do, I compared that to my goals. Having goals I actually thought about has made me learn a bit more about myself than I knew before.

So, without further ado, here's the 2015 report card!

Music


2015 Goal: Complete and release full versions of "All In My Head" and "Paper"

There's no beating around the bush here, neither of these goals happened. In fact, I was musically silent for the first half of the year. I did, however, come out with three different pieces of music, but none of them were original works.

In 2015, I started a podcast with Dr. Zing and Morfod called the Self-Destruct Sequence Podcast, which is a podcast all about Descent. Dr. Zing kind of dropped off the face of the Internet a few months ago, but Morfod and I picked it back up late last year, and have been having fun with the episodes this year. I mention this in the music section because when we were putting the first episode together, we wanted to have some Descenty music, and I delivered in a big way.

Our title music, Self Destruct Sequence, is a remake of the level 1 music, while our outro, Mars Processing Sequence, is a remake of the level 8 music. Both had electronic elements, and two guitar tracks each that I performed myself. This is the first time I've actually been happy with guitar tracks that I've created, especially the lead guitar parts. Hopefully I can take my experience from this and translate that into better guitar tracks in my music in the future.

The third piece was something I couldn't get out of my head, a piano cover of the song "The Wight to Remain" by Danny Baranowsky, which is best known as the music to Zone 4 Level 3 in the game Crypt of the NecroDancer. This has always been a beautiful track to me, and could be the launching point of a piano-only soundtrack to the game, if I get so inspired to complete some day. I even put the song's score up on flat.io if you so desire to try to play it yourself.

So while I kept the dust off of my music, I didn't do what I set out to do. At all. I tried to work on "Paper" once, but couldn't get any inspiration for the one part I still don't have a working idea for. Maybe that will change in 2016, but unfortunately, this gets poor marks this year.

2015 Grade: D

2016 Goal: Complete and release full versions of "All In My Head" and "Paper". For real this time.

Coding


2015 Goal: Finish the updated roncli.com site

Well, you're looking at it, baby. I'm still quite proud of this accomplishment, and it really took a load off my shoulders last year when I completed it. It's even gotten a few updates since that fixed some bugs and added (and, sadly, removed) some features.

So with the main 2015 goal accomplished, what else have I done in 2015? A quick glance at my GitHub profile shows I've contributed to Descent's DXX-Retro source port (this was the mouse fix), and started a series of Descent 3 tools written in node.js, including the rebirth of Descent DSN. However, in recent months, coding's not exactly been a priority to me.

The main project I have going right now is getting Six Gaming's official website off the ground. It is going to be started pretty much directly from roncli.com with a Six Gaming theme. At first it's just going to be a static page with links pointing to most of our presence on social media. Later, it will include episode-specific links for the Six Gaming Podcast, and the final version will be a full fledged social site where people can come to find other people with whom to play games they enjoy.

So 2015 was good, and 2016 has a clear goal. Looks good to me!

2015 Grade: A

2016 Goal: Finish the Six Gaming site

Gaming


2015 Goal: Grow Six Gaming into a bigger and more general gaming community

So at the beginning of 2015, I had this great idea to make Six Gaming a big community, not just for World of Warcraft, but for all the games we play. Over the years, we found that many of the gamers in Six Minutes To Release enjoyed other games as well, so it made sense to want to cater to that while keeping the close-knit community we've created from the core members of the guild over the previous 7 years.

Two major events accelerated this goal to fruition. First, Showsan got the jump on me. When he returned from his service in the military, he came in and lit a fire under everyone. He basically rebooted the Six Gaming Podcast, gave it a new format and new life. Since then, we've added a ton of cohosts that bring their own unique perspective on the games that we are playing. The Podcast has stayed fresh and has been enjoyable because of it, and we recently completed our 100th episode, which we call... Episode 48. Don't ask.

Second, Warlords of Draenor happened. What a bad expansion! I would rehash what I've already written, but suffice to say that not much has changed, and on top of it we're looking at another 6-8 months until Legion, which will make a 12-14 month content drought, similar to the one at the end of Mists of Pandaria, and exactly what the devs previously said they didn't want to do. Add in their stance on flying, and I honestly couldn't tell you if I trust Blizzard to get WoW right anymore. Legion is their last chance to get it right for me, and until then I am probably going to be doing some different things.

Like Descent. Descent: Underground made it known that Descent still exists for a lot of people, and despite the issues they are having (a topic for a future blog post), I am genuinely excited for a release of a new Descent game, even if it's not by the same people who gave us the first three. Naturally, a new Descent game has raised interest in the original games, and Descent 1, 2, and 3 have all seen an uptick in activity.

Case in point is the Descent Champions Ladder. It went from 1,408 games played in the fall 2013 season, down to 938 games in spring 2014, and down further to only 504 games in fall 2014. At the end of that season, Descent: Underground was announced, and the spring 2015 season saw a massive ressurgance with 2,218 games played. The late 2015 season, which was only 3 months, had 1,416 games played, and not even 3 weeks into early 2016 we have 510 games played.

Playing Descent again has been awesome, and has inspired me to learn a new control scheme. I used to be all keyboard, and now I do mouse and keyboard. I play at the high bronze/low silver level on the DCL currently, but I feel I have a lot to learn about the game both mechanically and philosophically.

I've also been involved with the Crypt of the NecroDancer community, racing most recently in CoNDUIT 7, and will be playing again on CoNDUIT 8 on the 29th. I'm not that great, which is why I'm in the "junior" league, but it's still a whole lot of fun getting some competition in. I still need to complete story mode and an all characters run to unlock Coda (I have no false impressions that I will BEAT Coda, mind you), so there's still plenty of room for improvement. I'm mainly known for having the Bard Deathless world record at 112 wins, and have performed fairly well at deathless mode with a few other characters as well.

I've also done a ton of streaming on Twitch. While I've stopped playing League of Legends, I still stream things such as my DCL games, Crypt of the NecroDancer runs, and even some Sublevel Zero speedruns. Basically, if I play it, it ends up on Twitch at some point.

Gaming has become a central part of what I do. I play a wide variety of games, involve myself in the Six Gaming, Descent, and Crypt of the NecroDancer communities, do two weekly podcasts involving games, and stream many times a week. I don't see this slowing down in the near future, so the only thing to do in 2016 is embrace it.

I have plans to start a regular Descent-themed competition show on Twitch, and am most interested in growing my stream large enough to get partnered. I don't think partnering will happen this year, but I at least want to get started. I've played with some ideas for growing my YouTube channel as well, but nothing's really stuck, but I'll keep trying.

2015 Grade: A+

2016 Goal: Substantially increase my streaming presence on Twitch

Life


2015 Goal: Get back to the Bay Area at least once

I think I nailed this one, at least in text. However, my experience thus far has been... less than ideal.

So instead of taking a trip to the Bay Area, I actually MOVED out here. In October, I packed my things, drove West a few days, and settled into the Belmont area. Central to everything, I've done... nearly nothing since I've gotten here. Sure, I've ventured to Pier 39 in the city, finally ate some Iguanas down in San Jose, and have occasionally taken in some of the area's scenic routes, I've yet to really do something... defining when it comes to the Bay Area. Seriously, I've seen more of the Bay Area the last time Kathy and I came out here in February 2013.

This is compounded by the fact that many of the people I knew and hung out with here are gone. One of the reasons I gave for moving out here was to be close to people I knew and give myself opportunities to "get out" every so often. I have done that a grand total of zero times since I got here.

There have been several reasons why I haven't really capitalized on my new living situation. The first is that I work remotely, yet am wanting to work locally. My job in Houston allowed me to work remotely when I told them I was moving and giving what I thought was going to be my two weeks. While the remote working part of the job has been going okay, I know through my experience with Sift that this isn't something I want to do forever. I have been really slow on advancing this agenda, however.

Second is that I've found myself in somewhat of a funk recently. I can't really put my finger on why, just that I find that I don't have the energy to do a whole lot since just before Christmas. My focus has been poor in coding-related projects, and I don't really feel that I've "settled in" very well. I don't at all regret making this move, in fact I think it's the best thing I've done for myself in a long time. However, I need to really break out of whatever it is that's causing me to, for lack of a better description, lose time doing nothing.

So, yeah, I made it out here, but... what next? Well, the first thing is going to be transitioning to a local job. Even before then, though, I need to find a way to get more active again. I have a plan, it's just acting on it - or more accurately getting over what's preventing me from acting on it - is proving challenging.

I hate these lethargic, stagnant days. I've had them before and have gotten past them, and have no doubt I will again. But the time until that happens can be downright depressing some days.

Oh, and there's this house thing. Yeah, we want a house. Soon.

2015 Grade: C

2016 Goal: Get more active, find local employment, and begin planning moving into a house

Overall


I've had an up and down year for sure. I recognize that my strongest point currently is with gaming, and recently that has been the outlet I go to in order to unwind and have a good time. I also find enjoyment in coding, but need to find a way to motivate myself to finish projects like I did with roncli.com. While my music still remains on the back burner, I am doing my best to keep sharp and avoid going flat... okay, I'll stop with the music puns! I recognize that I need to make some changes in order to improve my quality of life in my new surroundings, and am hoping that I can get those taken care of quickly.

2015 Overall Grade: B

Labels: , , , , , , , , , , , , ,

Thursday, July 30, 2015
Windows 10 public "beta"
Posted: 12:20:00 PM 0 comments
If you've at all been keeping up with the news, you've undoubtedly read that Windows 10 is a godsend, a vast improvement over previous versions of Windows, and that you should upgrade to the latest version and you'll have absolutely no regrets.

One thing that Windows 8 had over Windows 10, however, is that it worked.

Don't get me wrong, Microsoft got a lot of things in Windows 10 right. They took the god awful start screen in Windows 8 and managed to blend it with the typical Windows 7 start menu in an appealing way. They added an action center for your notifications. They even made speech recognition a thing with Cortana, which is a pretty decent addition even if I'm not going to use it much.

But there is SO MUCH wrong with Windows 10 right now that I say that casual users should not bother upgrading until they fix the major issues. Keep in mind that I spent much of yesterday upgrading all my drivers and software in an effort to eliminate these issues, to no avail.

Perhaps the biggest issue I have with Windows 10 is items missing in the start menu and from Cortana's search. Sure, Voicemeeter may not be a common application. Skype is. No matter how I install Skype, through the "Get Skype" application they added in Windows 10, or through Chocolatey, Skype simply does not appear on my start menu at all. Even if I find Skype.exe and make a shortcut to it and throw it in c:\ProgramData\Microsoft\Windows\Start Menu\Programs, I still end up without access to it unless I pin it to my taskbar. What the hell, Microsoft? Having items in the start menu has been a basic Windows feature for TWENTY YEARS. You couldn't get that right?

Now, I think this might be due to the fact that Windows 10 hasn't finished indexing my computer (it was about 40% done last night when I went to bed), but still, you shouldn't have to index the start menu. If it's there, let me use it! Ugh.

Another pretty noticeable issue is the fact that sometimes you can't right click on a tile in the taskbar. If you try it, you might get a context menu, or it might do nothing. Annoying when you're trying to close windows. The workaround for me was to hover over the tile to bring up the preview, right click THAT, and close the application that way. Or you can Alt+F4, but I have so much running at any one time that often right clicking the taskbar is simpler.

A huge problem for me is the case of the disappearing USB display. I run a three monitor setup, with two standard 1080p monitors side-by-side and a DoubleSight 1024x600 touchscreen below the main display. It's wonderful when it works, and had no problems in Windows 8.1. And to be fair, it works most of the time in Windows 10... up until the point that I run Crypt of the NecroDancer full screen. And even then the screen will continue to work while the game is running. The moment I alt-tab out of the game, the display freezes up, EXCEPT for the mouse. Then I'll go back into the game and the display will be fine. When I quit the game, though, that's when the display freezes up for good, and is entirely useless.

The worst part about this is that it so far seems to only happen with Crypt of the NecroDancer. Not Descent. Not Portal. Not World of Warcraft. Not other full screen games. It's something Crypt is doing when it's full screen that is killing that display. I thought it might be drivers, but I have the latest Windows 10 drivers for both the DoubleSight display and my AMD card. This is seriously messed up.

The list of annoyances continues:

  • Occasionally when you hit the Windows key, you can't type to search, and remains this way until you reboot. (Workaround is to use the Win+S combination to search via Cortana, which is the same thing, really).
  • The location finder is way off. I live in southeast Houston, and it shows my location up around The Woodlands. Within a 14 mile radius, of course. Oh, The Woodlands is 50 miles away.
  • You have to be an absolute power user to figure out how to get separate images as backgrounds on different monitors and NOT have Windows try to do a slideshow of those images. Basically, highlight the icons you want as your 3 background images and left click Set as Background Image. Then go into c:\Users\\AppData\Roaming\Microsoft\Windows\Themes and delete the slideshow.ini file. If your images are not on the desired screens, flip the numbers on the filenames in this directory and REBOOT after changing them to see the updates.
  • The action center will refuse to open sometimes, and behave that way until you reboot. See a theme here?
  • Some live tiles don't work. The calendar application used to display today's date, now it just display's the application's icon.
  • PC Meter for my 8GadgetPack gadgets is not being detected by those gadgets, resulting in some of them not displaying information, such as CPU or GPU temperatures.

This is just an example of the beta-ness of Windows 10. Many of these issues would cause the average user so much frustration. Do yourself a favor and stay away for now, unless you are a power user, or have very basic PC needs. Hopefully Microsoft gets on the ball and fixes these soon. Without pushing a broken update.

Labels: , , ,

Wednesday, June 03, 2015
roncli.com has arrived!
Posted: 4:21:00 PM 0 comments
I've been talking about it for almost six years. I've started and restarted the project numerous times. Finally. Finally, it is here.

Welcome to the new roncli.com!

roncli.com is written in Node using the Rendr framework, backed by Redis for caching and Microsoft SQL Server for data storage, running on Windows Server 2012 R2 through IIS 8 using iisnode, and being hosted on a Microsoft Azure virtual machine.

It is still a little rough around the edges. For instance, I don't have a solid deployment task, and the error handling is not production quality. For a personal website, though, I don't mind this for a 1.0 release.

The content is all here. All of my Blogger and Tumblr posts are in the Blog section. All of my releases from SoundCloud, which include a few new additions, are available in the Music section. A few of the projects I'm working on, including this website, is available in the Coding section. All the games that I play, including videos of some of my streams, can be found in the Gaming section. And a whole lot of extras are found in the Life section.

RSS feeds are available for the Blog, Music, Coding, and Gaming sections, so you can more effectively stalk me, as my wife so succinctly puts it. I even went fancy and got me a short URL: http://ronc.li. Yeah, I'm a geek.

Some things that are no longer available:

  • My old music directory that had random musical stuff in it, I got rid of that, although the music itself may resurface later.
  • My Descent 3 levels. Those moved to the DMDB.
  • The ModPlug Player mirror. You can still get it at OpenMPT, and I am working with modplug.com to get their link updated.

Overall I am quite happy with the outcome, even if it's 9 weeks after my initial goal for production. Come in, check out the site, and let me know what you think.

Labels: , ,

Friday, May 22, 2015
Coding down, content to go
Posted: 1:36:00 AM 0 comments
I am happy to report that 68 months to the day after I first mentioned that I had begun work on the new roncli.com, I have FINALLY finished coding it. Mind you, it still needs content. It just doesn't need code.

So what the hell took me so long?

First, the project was restarted 4 times. First, it was going to be part of a website solution called Gate. That project was too daunting, so I restarted, focusing on just roncli.com, and writing it in ASP.Net. Then, I decided I wanted to do it in Node.js, starting it in Express. I ditched the outline of that attempt and restarted it again in the same technologies.

Finally, I discovered Rendr and on May 9th of last year I restarted it one last time. This is the one that stuck.

Scope on the project had changed wildly over these 5+ years, but one thing remained constant and that was the purpose of the site. roncli.com highlights my interests: music, coding, gaming, and life. With each restart, I continued to narrow focus on what was important to me in a website that shows off these topics. I did a lot of simplification over time, and in the end came up with a website that is ultra personalized for me and my interests, yet easily extensible.

I learned a lot about Rendr and it's moving parts, and contributed in one way or another to about a dozen different open source projects. I even created one not just to help others get started with developing in Rendr, but to get my next websites off to a quick start as well.

So what's left?

  • Blog - I will be converting all of the tags on Blogger and Tumblr to a unified format. Likely Tumblr's format will win, which means I will have to change tags on 400+ Blogger posts. Fun.
  • Music - I need to upload my entire catalog to Soundcloud. My followers are going to get spammed to high hell with my music, and some of it's pretty bad. Hehe.
  • Coding - I am going to launch with my GitHub projects, and I need to do write ups on them. In the case of roncli.com, I plan on doing a video series for it as well.
  • Gaming - I am usually fairly modest when it comes to my personal projects, but this page? I fucking knocked it out of the park, bitches. From this one hub, you will be able to follow my adventures with the Six Gaming Podcast, and practically track my every move when I play World of Warcraft, Diablo III, League of Legends, Descent, and more. I also need to move my Quadra FAQ over, as well as link to my Descent levels, which now reside on the DMDB.
  • Life - I have many, many pages to create for this part. I plan to put Aries Wing, my Descent fan fiction, online, along with pictures and videos from past vacations. This section needs the most fleshing out, but it is the section I have the most freedom with as well.

This will begin in earnest this weekend. With all that I have coming up, I need to get this out sooner rather than later. I am already nearly 2 months behind my original timeline for 2015, and the calendar is not ticking away any slower. So here's to late nights and lots of asskickery. This site's going to be fun for me to launch.

Labels: , , , ,

Thursday, May 21, 2015
Stuff I've been up to
Posted: 1:52:00 AM 0 comments
It's been a rather busy month so far. I've been getting lots of stuff done and have been slowly progressing in my competitive gaming.

League of Legends


I've won another series and am now at Bronze II on the season, but not even Colz can stop me from getting wrecked by bad teams it seems, I'm 2-4 since placing into Bronze II. My mechanics are really bad, and I'm starting to wonder if I should be playing more than once a week to improve at my mechanics, but then I remember that it's Ron's Bronze Plays, and the plays won't be bronze if Ron gets good.

Descent Champions Ladder


I've won 3 more games against silver pilots recently, and that has rewarded me with becoming a silver pilot myself. I was never all that great at competitive Descent 1, and playing the masters of today really makes me feel that I have more to learn than just piloting. Granted, some of these pilots have spectacular aim as well, which is why I'm planning on switching over to mouse once my mouse patch gets into DXX Retro and becomes generally available. I'm almost to where I am today in skill with it, but need a lot more practice. I'm going to a Descent LAN in July, and I'm hoping that is when I'll be able to make the switch over to mouse.

roncli.com


I actually have good news about the website!



That's right, I'm almost DONE! There are only 4 bugs left. The font loading issue hasn't happened lately and I might be able to get rid of it. The login from cookie is a really strange bug that I can't reproduce, but is something I need to figure out and fix before launch. The allowed playlists deal was just a bad design decision I made earlier that I need to fix. And the fix image widths bug is where I have really big images that aren't being scaled down, which is causing the layout to break.

After that, it's all about content. The blog is easy enough, but adding the songs to Soundcloud will take time, and I need to write the pages for all of the rest of the content I intend to have. That alone might take days, but at least the major coding milestones have all been hit. I'm nearly 2 months behind my original target, but I think it'll be worth the wait!

Labels: , , , , , , , ,

Wednesday, April 08, 2015
Overdue update
Posted: 2:57:00 PM 0 comments
The Descent: Underground wiki has been taking up a lot of my free time, but I'm catching up.

League of Legends Ron's Bronze Plays


I'm finally in Bronze III after having a win on Lux and 2 on Janna. The promotional series games were so hard, we were actually quite behind in one of them. Thanks to Veg for helping me get through them!

I played with Colz last week and only went 1-2, but thankfully the losses came before the wins and didn't hurt my place in the standings any, so I go into week 11 at Bronze III and 26 LP.

Descent


If you've been following my DCL videos on YouTube, you'll see I've finally found some success, winning 6 matches in the past 2 weeks, including a match against the top bronze player to give me that spot. I feel like my aim is slowly coming online, but I'm going to try to play some "measuring stick" games against LotharBot (I've been scoring between 8 and 9 points) and Behemoth (between 5 and 6 points) today to see if that indeed is the case. I rediscovered the map June Bug, and am rapidly learning just how much I loved playing that map, too bad it was never all that popular.

The lagging website


I was expecting to have the new roncli.com done this month, but Descent: Underground has pretty much taken over. However, with that Kickstarter campaign winding down Friday, I should have time to resume my efforts, get something presentable, and move on to the next project.

Labels: , , , , , , ,

Friday, March 27, 2015
Slowing it down
Posted: 2:20:00 PM 0 comments
Not a whole lot going on this week. Work has been slow on roncli.com, but I'm hoping to pick it up and finish off major coding this weekend. Right now I'm working on allowing files to be uploaded straight through the website, which will allow me to manage the files without having to do something silly like FTP.

The Six Gaming Podcast was in rare form this week, as we had a solid episode and a good roundtable discussion about how microtransactions have been shaping modern gaming.

Ron's Bronze Plays returned for more League of Legends action, and this week I teamed up with Veg. The first game seemingly almost guaranteed disaster when I was put onto Jinx, but I outplayed the other ADC enough to earn a win and a promotional series. The next game I was on Janna, but our team could never get going as every lane seemed to feed. The best game of the day was next up with a 54 minute epic Morgana. Despite not having the kill lead, we kept up with objectives enough to grow a 10000 gold lead. Although we got aced twice in the enemy base, being 3-inhibitored multiple times allowed us to just play patient with Baron, and march in and win. The final game wiped all that out, however, as it ended up being a 3v5 after our jungler failed to connect and our ADC didn't start playing until about 3 minutes, and ragequit another 3 minutes later after having a severe level disadvantage. As a result, I remain in Bronze IV, but am still a game away from a second set of promotions. One of these times they'll go my way.

Finally, on my YouTube page, you'll find a metric boatload of Descent and Descent 2 videos I've been uploading, including my horrible start to the DCL. The highlight was an absolute crazy game in Fuzed where Jackeh outlasted me in a game to 20, win by 2. The final score was deep into overtime, 26 to 24. Fantastic game. I still have yet to earn my first win, the skill of the pilots still playing is clearly above mine. I have some targets to try to get that win off of, however, and will hopefully get on the board before the end of the current DCL season, which ends at the end of the month.

Labels: , , , , , , ,

Wednesday, March 18, 2015
Whirlwind Week
Posted: 3:01:00 PM 0 comments
A roundup of what's been a Janna whirlwind of a week!

Schedule


I've come to realize that, even after ending Six Minutes To Release's raiding run, I still only have one night a week to myself. That night is tonight. Every other night, I've got something going on:


It's a pretty busy schedule, but I look forward to a lot of these things throughout the week as well. Things feel pretty balanced right now. I still long for 40 hours days, though.

Descent: Underground


This past week, though, things got a bit crazy, because I found out that one of my favorite games of all time is being rebooted.

Descent's fast-paced, six-degrees-of-freedom combat made addicts of us all! Descent's frenetic and pulse-pounding action were light-years ahead of its 1995 release date. Like us, many of you still share war stories of your epic network battles. You remember your heroic shots, your death-defying maneuvers, and matches ending with a narrow escape as the tunnel collapsed behind you.

Sadly, as consoles took over and PC games were pushed aside by publishers, great games like Descent were left to languish in obscurity. A whole generation of gamers grew up without Descent's heart-pounding, non-stop action, robbed of the true 6DoF space adventure that is their birthright!

The Drought Ends TODAY!

This is a quote from the Kickstarter for Descendent Studios' Descent: Underground. This is a brand new Descent title, setup as a prequel to the original Descent series.

On one hand, I can't contain my excitement. I backed this project early and big once I learned of the direction that former CIG developer Eric "Wingman" Peterson was taking it. To have another Descent game being made from a set of dedicated developers who are listening to the community to make the game the best Descent game ever made is like a dream come true.

On the other hand, the Descent community has had its share of disappointments.

The official Descent 4 game was cancelled. Numerous projects have been started to try to mimic the Descent experience. Many of them have been cancelled, and those that did make it to production had no community support and were simply not Descenty enough for the community to back. And others who have tried to bring Descent back have been issued cease & desist legal documents by Interplay.

So why now? More importantly, why Descendent Studios, a team that never found the Descent community until after they launched their Kickstarter? While I have faith in their ability to deliver on their project, my faith with Interplay is not there. I really have to question Interplay's motives. Do they plan on this being some kind of cash grab? Are they thinking of screwing over Descendent much the same way PTMC's Dravis screwed over the Material Defender at the start of Descent II? That would be ironic.

Six Gaming Podcast


So the podcast happened this past week, with Episode 5 and its highlights now available on YouTube.

I'll be blunt, it's not our best showing. News seemed to be disjointed, the hosts were distracted with Twitch chat trolls, and the Round Table section was rather, well, bland. Hopefully next week, we'll be a little more exciting. SGP always seems to be better with more hosts.

Ron's Bronze Plays


This week I played with Colzaratha's smurf. It didn't seem to help a whole lot.

The first game, he played Ahri while I played Morgana. He did not have a good game. Every lane lost, and we slowly bled out. The second game was much of the same. I was again on Morgana against a Graves/Annie combo in the bottom lane that our ADC fed substantially.

We got our first win in game 3 when I played Janna. I had some strong Janna play this weekend, and got some crucial knockups to force the win. I tried to make it two straight on Janna, but despite more strong play, the rest of the team didn't have it in them.

In the final game, Colz and I switched roles, with me going mid Lux and him on Morgana. I went off for a 12/2/21 carry, and Colz and I ended in style. Result of the 5 games was an increase in 11 LP to Bronze IV and 88 LP.

Website Update


Last night, I was able to finalize the data I'm putting in the game box on the website. My article about the sorry state of gaming APIs really came to mind. While the Blizzard API has come a long way and the League of Legends API is pretty good, the Steam API still sucks (it's still missing an achievement feed), and an official XBox API isn't even a thing yet.

Really. It's 2015 people. Let my data go! Let my data be free!

Anyway, I still have to code out detailed pages for my WoW feed, get profile pages for my Diablo 3 characters, display detailed history of my ranked play in League of Legends, and at least show off the games I am playing on Steam, even if getting the achievements I have for them is rather archaic.

But honestly, this is the home stretch. After that is the life section, which really is just going to require me to set featured pages.

After that, I have a lot of content to update, which includes transferring my music collection to SoundCloud, updating all the tags on my Blogger and Tumblr sites, and recreate many of the pages from the existing site on the new one. That's not really a lot of stuff. Hopefully coding can be completed this weekend, and I can start on the content next week. I'm still committed to finishing by the end of the month.

Labels: , , , , , , , , , , , , , , ,

Monday, March 09, 2015
Update on roncli.com redesign
Posted: 5:03:00 PM 0 comments
For about five years now, I've grown to despise the style of my home website and this blog. Yeah, it was okay at first, but even my limited design skills have surpassed the current design of the site. It's long overdue for a change.

My design goal for the new site was to do something custom and have fun with it. Technology for the sake of technology, if you will. I came up with a good set of topics for the site and, in my head, figured out what each section would look like. Eventually I wrote up an outline of requirements, and then translated those requirements into a project in Asana to keep me organized.

Then, those tasks sat there. roncli.com was created as a project in Asana in February of 2012, over 3 years ago. I started the site in ASP.NET, then switched over to a solution in node with Express as the web server and Backbone as the front end. Neither of these solutions got far. I was just far too busy with other things to make a project of this magnitude worth doing.

However, once I switched jobs earlier this year, finding the time to work on the project became much easier. In May, I rebooted the project for a 3rd time, moving to a solution in the young Rendr library for node. Since then, with the exception of a month and a half towards the end of last year (thanks, Warlords of Draenor!), I have made steady progress.

And, that progress is accelerating.

I divided the project into 7 major milestones:

  • Framework - Basic things such as the site design and account management.
  • Blog - Interfacing with Blogger. I expanded this to include Tumblr as well, because I wanted to include my creative works as well.
  • Pages - On the old roncli.com site, pages are basically /page.asp?PageID=1. I hated that then, and I hate it even more now that I know about things like SEO. The new site allows for arbitrary HTML pages to be created anywhere at any time, not limited by the site design but only by the HTML I use.
  • Music - Included with this section is a media player that accepts YouTube and SoundCloud media.
  • Coding - A basic section that shows the projects that I am working on.
  • Gaming - Dedicated to all things games, this section reads in data from various gaming APIs for display in one section.
  • Life - Largely based on the Pages section, this section is simply a collection of things that don't fit in the other categories.

So far, 5 of those seven milestones are complete. I'm currently working on the Gaming milestone, which is a bit more involved than the others simply because I'm reading from no less than 4 data sources to get the data that appears on the site, and coordinating the APIs required for them are kind of a pain. The last milestone, Life, is simply content, so really I'm very close to being functionally complete, which is very exciting.

The drive to complete this site ultimately came from a number of different forces. First, this site is showcasing me. Everything I share with the world will be somewhere on that site in one form or another. Second, it showcases that I can actually code what I say I can code. With node being a relatively new technology, and rendr a very new framework (rendr just went 1.0 this year), having a body of work is something I can point to and say yeah, I can do this.

Lastly, I kind of want a new start. Not in the sense that I am starting over as a new persona, but rather a new home base from which I can operate out of. When I do something, I want to be able to share with people a place I can be proud of. To me, roncli.com needs to be a thing, not just a dumping site for files and old hobbies.

My goal is to launch by the end of the month, so if you follow me, be sure to keep an eye out for the new site. I'm very excited about what I am doing, even if it's just on a small scale. I have other plans beyond roncli.com as well, but getting the base established was a big necessity for me before trying to branch out from it.

Labels: , , ,