Switching from QWERTY to Colemak and Back

Given the integral role of computers in my daily life, perfecting my relationship with my keyboard has been something I’ve always been fascinated with. More specifically, the ubiquitous usage of QWERTY despite its known inefficiencies. Approximately a year ago, the Colemak layout caught my attention, promising increased typing efficiency and reduced finger movement.

The Switch to Colemak:

Intrigued by the claims of reduced muscle fatigue with Colemak, I decided to make the switch. Some interesting tidbits from the transition:

  • OSX has built-in Colemak support, but Windows does not.
  • You can use AHK or other portable programs to use Colemak without requiring administrative access. This is helpful if you’re using a locked-down’ computer but still quite annoying because I would have to carry a small USB key for every computer that I used or redownload the programs.
  • Speed was terrible and painful at the onset. I initially started out at 10 WPM. I used keybr.com pretty much exclusively to train with their typing program, tests, and challenging others. You can use other sites, but I noticed that my WPM varied between different sites.
  • It took about 5 months before I was able to reach around 86 WPM.

The Return to QWERTY:

Colemak was great for one thing: comfort. It was amazing to type without your fingers having to do any significant movement. They could just rest on the middle row and you’d occasionally have to move a row up or down. There were a few problems, though.

  1. Speed - I knew that I could easily type at 90-100 WPM before the switch, but I seemed to stagnate in the mid 80’s.
  2. Compatibility - Because I use multiple different computers and occasionally other people’s computer, I found it more and more annoying that Colemak support was not built into Windows computers and the fact that I had to carry around a USB just to type.
  3. Vim bindings - As a heavy Vim user, my muscle memory went haywire with the switch.

After six months of using Colemak, I decided to switch back to QWERTY. To my dismay, my typing speed drastically plummeted to a mere 10 WPM initially but now its back higher than it was before.

Lessons Learned:

  1. Switching keyboard layouts requires substantial time and effort.

  2. Before making a significant change, assess how the switch may affect your workflow.

  3. Colemak is pretty awesome if your goal isn’t to be the fastest typer. I really think it should be the default keyboard layout taught.

May 19, 2023

Using Private GitHub Repo as Submodules with Cloudflare

Thought this would be more difficult and I couldn’t find any information online but it ended up being pretty simple. Just modify your .gitmodules file to use your username and a personal access token

[submodule "<RepoName>"]
    path = <RepoName>
    url = https://<username>:<personal_access_token>@github.com/<username>/<RepoName>
May 1, 2023

Predict My Step Score Version 2

Version 2 of predict my step score is on its way! Please email me at or message me on twitter (https://twitter.com/oppositeinvict2) with functionality that you think is needed or missing!

April 4, 2023

Transitioning Away From Google

In my attempt to transition as far away from google as I can, I have come up with a list of alternative services that I have tried using:

Gmail: ProtonMail (https://protonmail.com/)

Google Drive: Dropbox (https://www.dropbox.com/)

Google Search: DuckDuckGo (https://duckduckgo.com/)

Google Maps: OpenStreetMap (https://www.openstreetmap.org/)

Google Photos: Flickr (https://www.flickr.com/) or Dropbox

Google Docs/Sheets/Slides: Microsoft Office Online (https://www.office.com/) or Dropbox

Google Translate: DeepL Translator (https://www.deepl.com/translator)

Google Keep: Standard Notes (https://standardnotes.org/) or Evernote (https://evernote.com)

Google Chrome: Mozilla Firefox (https://www.mozilla.org/firefox/)

Google Hangouts/Chat: Zoom (https://zoom.us)

Google Analytics: Matomo (https://matomo.org/) or Clicky (https://clicky.com)

Google Adsense: There is no getting away from this. No matter what other publisher you use, you are tied into google adsense in some way

Google News: Feedly (https://feedly.com/)

Google Forms: Typeform (https://www.typeform.com/)

Google Sites: WordPress (https://wordpress.org/)

Google Authenticator: Microsoft Mobile Authenticator (https://www.microsoft.com/en-us/security/mobile-authenticator-app)

March 22, 2023

Want to be humbled?

Want to be humbled?

Be in a position of power. Managerial Position, President, CEO.

You’ll be quickly surprised at how many problems are just the results of your own miscommunication.

March 1, 2023

How to mess with spammers for SEO and profit

In today’s digital age, websites are bomarded with people trying to hack,spam,bruteforce their way into your websites. These threats not only harm the website’s reputation but also compromise the security of the user’s personal data. It is essential for website owners to take appropriate measures to protect their sites and users.

One of the most common ways to deal with spamming and hacking attempts is to implement robust security measures such as firewalls, SSL certificates, and regular software updates. Other measures include monitoring the website’s traffic, using anti-spam plugins, and limiting the number of login attempts.

Instead of doing it that way why not take advantage of these people for SEO, profit and fun?

For instance maybe you have someone who is trying to crawl your website excessively. Instead of rate limiting them and sending 403 status codes, try doing an HTTP redirect to google with some keywords that will benefit your site. E.g. if you have a site that sells golf shoes at golfshoes.com redirect them to google with the keyword: best site to buy golf shoes golfshoes.com”.


Don’t do it excessively though! You want to make them confused! Try doing it 60% of the time:

if random.random() > 0.6:

Maybe they still dont get your message? Try redirecting them to a different set of sites so that they get the message:

if random.random() > 0.6:
    list_of_websites = [

    return HttpResponseRedirect(random.choice(list_of_websites))
February 12, 2023
Subscribe to my newsletter to get notified of new posts