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
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: , , , ,

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: , , , ,

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: , , ,

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: , , , ,

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: , , ,

Tuesday, July 08, 2014
Open Source Adventures
Posted: 5:53:00 PM 0 comments
One thing I've always appreciated is open source software initiatives. Of course, in the beginning it was more an appreciation of "thank you for letting me use your stuff for free" without giving back. Over time, though, I've embraced the promise of open source. With LibWowAPI, I put out a .NET library that some found useful enough to contribute back to the project. It's awesome when you get other people interested in what you do.

Another thing I've grown to love is bleeding edge technology. While it took me forever to adapt .NET, I'm now always keeping on top of the latest and greatest technologies.

With these shifts in mentality, I've managed to learn things like Node.js and rendr simply by diving in and trying them. But lately, just trying hasn't been enough.

I've moved the source code of roncli.com to GitHub, and with it is a new Node.js code base that uses rendr. I just recently finished the login, registration, and forgot password work flows, which was a big step. But now I've sidetracked myself into upgrading the tools that rendr uses.

Specifically, I came up on an issue with Browserify and Grunt. I upgraded Browserify and some of its dependencies to the latest version, but this completely broke rendr, even when I fixed my configuration files to work with the latest version of everything.

It took me a couple of days, but ultimately I found the problem was mainly lack of Windows compatibility with some of the dependent projects these bigger projects use. Since ultimately I plan to have my website on a Windows server but want to have the flexibility to move to another server if I need to, I debugged the issue and found that there were three separate projects that had bugs.

Within two days, I have created three pull requests to fix the issues I am seeing, all with the goal of getting rendr to work with the latest and greatest of all the modules rendr is using. It's kind of cool, because contributing back to these projects means I'm not only helping myself, but hopefully I'll be helping a lot of other people out in the future as well.

Labels: , , , , , , ,

Monday, April 07, 2014
All Good Things and Such
Posted: 10:18:00 AM 0 comments
It's been a long time since I've written anything of substance here, so let this post serve as a catch up to what's been going on.

Since April of 2012, I have had the pleasure of working on the iOS application known as Sift. The company developing Sift is a San Francisco Bay Area startup, of which I am a founder. Needless to say, I put in many hours of work into the product.

Sift was more than a job to me. It was an opportunity to do something big, and perhaps make a profound impact in the way people shop online. It's still in its infancy, but the product that we put out there is pretty awesome.

However, I decided to step away from the company in February after three months of consideration. It was a very difficult decision for me, as I truly believed in the product and the company. I was a remote worker in a high-impact position, and I found that it wasn't easy maintaining the visibility required of such a position in a remote location while still being able to get done the stuff that needed to get done. This became especially true as the company grew, both with more internal employees and having to work with multiple contractors outside of the company (and the country), which would have me going as early as 8 am and as late as 2 am. Combine that with the demanding travel schedule - I spent only 8 of the final 18 weeks of 2013 at home - and it's not hard for most people to see how stress levels were through the roof.

Extreme stress levels aren't something I'm particularly fond of, which led to my decision to move on. I did spend a good deal of time with the company, accomplishing and learning plenty along the way. I learned much about the open source world, and found that I very much enjoyed working with Node JS. I met a lot of awesome people as well, and I can only wish for their further success as Sift continues to grow.

While leaving was certainly not a decision I came to lightly, I'm quite happy that I was able to leave my second startup on my own terms after being able to accomplish so much for them. My first startup, Trax in Space, ended in financial disaster, and I wasn't ready to step away when it all fell apart. This time, I look back fondly on the experience, knowing that I was a major contributor, and that the company is still growing upon the foundation that I helped to build.

So what's next for me? Well, back to the Monday through Friday, 8-hour a day grind, resharpening and honing my .NET skills while bringing my schedule back to a sense of normalcy that I have found was very much missed. What else?

Music. I'm slowly getting back into my music, and as always have several songs floating around. I want to get myself a new electric guitar next, as my last one bit the dust some years ago. In the meantime, I post things I'm working on to my creative blog as I work on them.

Coding. I'm in the process of upgrading all of my .NET projects to 2013, will be updating LibWowAPI, and plan on slowly transitioning my websites over to Windows Azure. I plan on learning Rendr and incorporating it into my personal website, roncli.com, as a way of learning and showing off my node.js skill. And I am wanting to figure out Xamarain so that I may be able to write mobile games.

Gaming. And of course, I spent a ton of time between jobs gaming. I'm big time into Diablo 3 these days, have gotten into streaming my gaming experiences, and am a regular host on the Six Gaming Podcast where we talk all about gaming.

Seems like I'm getting back to my roots these days. That could be a sign of some wonderful times to come.

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