Stepping Down From President of Techlahoma

As of January 15, 2019, I am no longer the President of Techlahoma. I am still on the board however, and will serve out the remainder of my term through the end of 2019. I am also still running OKC.js and will still help organize ThunderPlains 2019.

My life has gotten a bit crazy this year for some personal/family reasons, and I also wanted to free up some more time to work on personal projects that I have been neglecting for some time now. Stepping aside as President will allow me to focus a lot more on my family and some other things I have been wanting to achieve in 2019.

Techlahoma’s new President for 2019-2020 is Jeff Lowe, and I know he will do a great job during his term, keeping the community’s best interests in mind.

Building a Custom Swing Set

Sometimes it’s good to spend some time away from the computer and do some real hands-on work. Last weekend I planned and built a swing set for my 3 kids to use and enjoy, and to encourage them to spend more time outdoors. It turned out pretty big – I used 10-foot long supports and a 16-foot long top beam this time around instead of 8-foot supports and a 12-foot beam like last time.

Future plans include a fort attached to the right side as well – perhaps in the spring :). Continue reading

Using window.confirm as a Promise

When writing a modern JavaScript application that uses Promises or async/await, it is sometimes useful to wrap other things in promises so they can more easily be used in a standard way throughout your codebase or in promise chains.

This is especially true if a built-in feature has the same properties of a promise, but is not one. The window.confirm API is one that I wrap a lot in my applications:

function confirmDialog(msg) {
  return new Promise(function (resolve, reject) {
    let confirmed = window.confirm(msg);

    return confirmed ? resolve(true) : reject(false);

And now we can use it just like a normal promise:

confirmDialog('Do you really want to delete this?')
  .then(() => doYourDeleteAction(
  .catch(err => alert('Unable to delete!'))

Now if you ever want to replace that confirm dialog with some custom version with a fancy UI like a modal window, you can do so much easier – just by updating the confirmDialog function itself.

Chromeless: Switching to Firefox

I have been a long-time Google Chrome user, but have been wanting to switch to Firefox for the past several months, but could not get myself to do it full-time. The interface was a bit dated, and the browser in general didn’t feel faster. I used Firefox Developer Edition for a while which had the newer UI now available in Quantum, but the lack of plugin/add-on support killed my web surfing experience, and I ultimately went back to Chrome.

Then everything changed when the Firefox team announced Firefox Quantum.  I downloaded it to try it out, and was off to the add-on site. The team did a good job ensuring most of the popular add-ons were up-to-date and working with the new changes in Quantum. I was able to quickly find and install the add-ons I needed, and have been using Firefox full-time ever since. It’s a joy to use, and consistently uses significantly less memory than Chrome. It’s my new go-to. Congrats, Firefox team – thanks for the hard work and the great release!

My Biggest Regret of 2017

Now that 2017 has come to a close, I can safely say that my single biggest regret of 2017 was selling my Bitcoin in mid-January.

For those not following Bitcoin, it means that I missed out on the huge upside – over 1,000% increase in price. D’oh!


My $202.84 worth of BTC would now be worth nearly $4,000. Oof.

ThunderPlains 2017

ThunderPlains is coming up fast – just two days away! This is the fifth year of co-organizing the conference, and we always have a great time with the local community.

Grab some tickets to ThunderPlains 2017 if you have not done so already – it will be a lot of fun to meet everyone else in tech working along side you in your own community. There is a lot more tech activity than you think – right under your nose here in Oklahoma!