Categories

Tags

Page 2 of All Articles

Recursive functions in TypeScript

In working with the Slate framework for building rich text editors recently, I found myself faced with a scenario where I needed to loop through the editor’s value. The value that comes out the editor is an array of objects that is nestable, I assume infinitely, by way of the […]

Recursive types and interfaces in TypeScript

When writing out a type or interface in TypeScript for something that will be fed into a recursive function you could cop out and use any or you could properly define the structure. Fortunately, both type and interface allow you to be self referential in terms of defining properties. Let’s […]

Error: Cannot resolve a DOM point from Slate point

By way of recommendation (thanks Brewer), I’ve been messing around with Slate.js a ton. Such is life, I did have my fair share of issues, particularly in terms of getting it to function like a chat message input where hitting Enter will submit the form and reset it to it’s […]

Resetting a Slate.js editor to an empty state

I’ve been messing with Slate.js and happen to be using it in the context of having a persistent editor on the page that can be used post from. It’s sort of like a chat’s message input, it’s always there, and when you submit it, it resets back to it’s original […]

Resetting the undo/redo history of a Slate.js editor

Slate.js has some wonderful undo/redo history under the hood, by way of the React hook useMemo. Out of the box is works great, but if you want to reset your editor back to an empty state (in scenarios where the component is persistent on the page), the undo/redo history will […]

Submit on enter except when shift is pressed in JavaScript

Been working on something recently where I wanted to implement a submit handler when a user hits the enter key in an input. That’s not that big of a deal, sniff out the key being pressed, and if it’s the Enter key, go ahead and execute the submit handler. Since […]

Detecting modifier keys being pressed with JavaScript

Been hot on a new [old] project recently and I’ve not only been coding my ass off, but delving into some territory that I haven’t delved into as of late. The latest is in terms of determining if a modifier key has been pressed in conjunction with another key press. […]

VPS Showdown - April 2020 - DigitalOcean vs. Linode vs. Vultr

Yes, this month’s post actually has less providers. There’s a good reason though. This month I decided to switch it up and compare some of the “CPU”-centric instances that some of the providers are touting these days. Because Lightsail and UpCloud don’t offer plans like that (not that I could […]

Making and feeding a sourdough starter

Not sure what it is about a quarantine that has people itching to bake. The interest in my sourdough starter has exploded over the last few weeks. Ton of inquiries on how to get one started, how to care for one, and/or how to procure some of my starter. My […]

Protected routes with React Router v5

React Router makes it extremely easy to define routing in your React application, but out of the box doesn’t concern itself with which routes should require authentication and which ones should now. I’ve solved this problem in a past life, using React Router v4 and looking back at the code […]

Speed Comparison: GitHub vs. GitLab (2020)

Been a minute since I’ve done one of these comparisons. The first one took place in 2016 with annual follow ups in 2017 and 2018. Then there was the curious case of 2019 where I had this post in my queue but never actually ran the benchmarks. I think the […]

Connection reset with webpack-dev-server inside Docker

After a very brief foray into using create-react-app, razzle and next.js recently, I decided that this old dog still prefers to go it alone and just build things out without the aid of frameworks and boilerplates. With that, I was quickly reminded of an issue that I’ve run into in […]

VPS Showdown - March 2020 - DigitalOcean vs. Lightsail vs. Linode vs. UpCloud vs. Vultr

Was really hoping to get another provider into the mix for March, of even get some graphs / charts into the mix, but February really got away from me with life stuff. Been working my way up through the pricing tiers with the providers, and I’m not entirely sure when, […]

Complete CI/CD pipeline with GitLab Runners

Automation is one of the best ways to improve productivity. Even as a development team of one, spending a bit of time on DevOps and improving your developer quality of life can pay off immensely. Automated tasks strip away cognitive load. No more forgetting to deploy code because the process […]

Converting integers to Roman numerals with TypeScript

My buddy Robert has been seeking new opportunities in the software development realm, and recently ran into a coding challenge that I haven’t thought about in a good long time: converting an integer to Roman numeral. Now, I actually hate these kinds of brain teasers in the context of interviewing […]

Coming home to Chrome/Chromium

Ever fearful of a return to the Internet Explorer / Micro$oft controlled landscape of the original browser wars, I’ve always tried to keep my options open and rely on more contrarian browser options. Sometimes those browsers were based on Chromium, like Brave. Other times, they used a different rendering engine, […]

VPS Showdown - February 2020 - DigitalOcean vs. Lightsail vs. Linode vs. UpCloud vs. Vultr

Expanding upon last month, this month’s VPS Showdown features another, more expensive plan, at the ~$40 mark (Vultr being the outlier as their High Frequency plans are 20% more expensive, but seemingly worth it from the sheer metrics perspective). Notable changes since last month, Vultr introduced managed load balancers for […]

How to fix ugly Chrome window borders on Linux

So I’m back to dabbling with Google Chrome as my main browser, backpedaling somewhat on last year’s [yet another] switch to Firefox. Technically I’m running Chromium, the less Googley version of Chrome on Linux, and Google Chrome stable on Android and Chrome OS. This isn’t a post delving into why […]

Fixing distortion and red lines when moving items in Diablo III on a MacBook Pro

For season 19 of Diablo III, the wife and I decided that we were not only going to play the season, but actually set out to complete all of the objectives for the season. As we’re pretty much filthy casuals when it comes to Diablo, we did both accomplish what […]

Padding strings and numbers with JavaScript

Programming languages can change pretty regularly, and I try to carve out some time periodically to catch up on the latest and greatest the languages I love have to offer. With that, recently I was poking around on JavaScript’s string prototype and came to realize that there were some string […]

VPS Showdown - January 2020 - DigitalOcean vs. Lightsail vs. Linode vs. UpCloud vs. Vultr

Brand new year with a brand new VPS Showdown, and I know what you’re thinking, “Why have you not included my favorite provider into your comparisons yet”? Big reason has to do with time, while these posts have become more optimized, they still take a chunk of my time every […]

The end of a decade

Usually for the last post of the year I do a bit of a retrospective / lessons learned kind of post. Not going to bore you with that this year. Instead, I want to talk a bit about the concept of a decade. The only time I personally seem to […]

Installing `pacman` breaks dependency replaced by `yay`

Even though I’ve been using Arch Linux for a few years now, from time to time, I do run into small issues that are unique to Arch. One such issue happened when I was trying to upgrade my system, only to be blocked immediately with some sort of dependency mis-match […]

Another two weeks with Firefox

A few years back, I went all in on Firefox and Duck Duck Go for a few weeks, only to wind back up on Chromium. Duck Duck Go has been my default search engine since then, but Firefox ended up being somewhat underwhelming for me, and I ran into a […]

How to bypass the SSH host key check

If you’ve ever connected to a new server via SSH, you were probably greeted with a message about how the authenticity of the host couldn’t be established. The message and prompt looks something like this: The authenticity of host '1.2.3.4 (1.2.3.4)' can't be established. ECDSA key fingerprint is SHA256:nKYgfKJByTtMbnEAzAhuiQotMhL+t47Zm7bOwxN9j3g. Are […]