Neck pain

In the past few weeks, my neck pain has been more of a mental burden than a physical one. I’m writing this as an exercise in therapy for myself and hopefully to remind myself (and anyone reading this) to sit upright, take breaks, and don’t take your body for granted.

I’ve been thinking about what has caused my neck pain. I sit at my computer for many hours a day, some days even after work, I’m sitting here gaming.

The main cause has been the passiveness about the position that I sit in. Whenever I am on the computer, it has been due to extending my arms too far out and leaning my neck over the keyboard to get closer to the monitor. So, moving the monitor and keyboard+mouse closer to me has helped a lot.

Next, my chair, Kristen helped me find an aeron chair from craigslist about 3 years ago. I’ve had it throughout the pandemic and as my neck pain was becoming more annoying, I never gave it a thought that maybe my chair was incorrectly adjusted. Turns out, it was a combination of my desk being too tall which caused me to lift up my chair even more and eventually not touch the floor with my feet. Dangling feet meant I had to rest them somewhere, what better place than on top of each other on top of the chair’s legs? Well, that meant my whole lower body was stiff and tense the whole time I sat on the computer. This led to fatigue in a short amount of time. So, lowering the chair and desk helped.

Taking account of how long have I been sitting in this position helps, I have gone a couple of hours in a row of just sitting here. Which just sounds bad writing it out. And it’s clearly true, I was fatiguing my whole body.

So, a few things to check:

  • Adjust height of chair, desk, and monitor.
  • Monitor should be eye level, a bit higher so you’re not looking down.
  • Mouse and keyboard should be within arm’s reach comfortable, elbows bent about 90º while resting on the arm rest of the chair.
  • Neck and back are straight, resting against the back of the chair.
  • No headrest needed, this will signal if I’m getting tired looking to rest my head should instead mean I should take a break away from the computer.
  • Feet should touch the ground comfortably.

Gardening my projects

For a long time, I’ve attempted to work on side projects outside of work and I have either lost the motivation or strived to build something too big to keep the momentum going. This did result in some sort of a weird burnout feeling within me. I have often felt like a project with good intentions, a lot of motivation, and even decent planning was still run off track because I did something ‘wrong’. This ‘wrong’ feeling I was getting kept alluding me because once the intense motivation went away, I would let the project rot. Either the planning was not done properly or the technologies used were missing something. Needless to say, it had nothing to do with what I was working on, it always was mismanaging my time and motivation, motivation wears out quickly.

Recently, I found a post called My product is my garden, the author talks about how there are moonshot ideas or unicorn startups where growth is the only thing that matters, but then there are projects that are niche, small, and focused on something particular. For me, I’ve spent a long time thinking about how I would go about building a product. It usually boils down to a simple to use product (reduce complexity and resist adding features for the sake of adding features), respectful of the user’s data (don’t track everything), and slowly evolving (no sudden pivots).

The blog post really resonated with me, I had not heard of an analogy similar to this before so I’m fully embracing it now. Step one is trying to build something but step zero is to not build something huge, start it up just like you would start a garden.

Following this approach, I’ve decided to pick up work on Bookends (again, for the 5th time or something). And some other projects I have been neglecting even starting. My hope is that if the trend of the past few months continues, the gardening approach could yield some satisfaction. Satisfaction from my projects will first be achieved by just continuing work on them and also by launching them for my own sake. I don’t have large ambitious goals for my projects becoming the best of the best, just the best I’ve done.

Summer 2021 projects

The past few months have been a mix of productive and lazy days. Some days, I got up and was focused for most hours, got some work done and also some personal tasks done and others were a wash. But overall, I think the pandemic’s languishing feelings are starting to subside as I try to figure out a schedule for myself and a routine that works best for my mental health, physical health, and other factors that contribute to my well-being.

I wanted to recap some projects (of various kinds) that I’ve worked on in the past few months.

GMMK Pro keyboard

This project has been the most relaxing thing I’ve worked on in a long time. Taking apart the switches and the keyboard was new to me. Overall, I would probably build another board but not for awhile since this board is great for now.

Quotes project

I wanted a simple to use quote saving program, this does just that in the command line. I think I spent 2-3 days working on it in total.

House refinancing

Not a technical project but I spent a bunch of hours working on a house refinance. My original interest rate on the house was 3.75% and now it’s 2.5% which is a fairly nice reduction in interest. On top of that, my original loan to value ratio (LTV) was around 90% which required a PMI on that house, now that the value of the house has increased, the LTV ratio was below 80% (the mark which banks considered okay to not require PMI payments) so I’m saving an additional $175 a month on that.

Now Playing for

This project is one of my favorite projects I have worked on. I originally built this as a way to learn Svelte and then it turned into a real useful project (I use it almost everyday now). I’ve marked this project as “done” on github because as it sits today, it works as intended and I don’t want to add more features to it.

Using styled-components with next.js

I’ve been trying to learn some typescript and as part of building something with it, I’ve also started using next.js for easier react set up. I ran into an issue where styled-components were not loading in the browser but they were not throwing an error in my editor or the build log. So after some googling, I found a page talking about including the styled-component as a plugin into the next.config.js file. Like so:

module.exports = {
  reactStrictMode: true,
  plugins: [["styled-components", { ssr: true }]],

This seemed to fix the issue for me.

GMMK Pro build, with MT3 Dasher keycaps

I’ve been putting off writing this post for a long time. One reason is that I wanted to use the keyboard for awhile before writing about it.

Official page for the GMMK Pro ->

So today, I sat down and wanted to write this post.

Background on the GMMK Pro keyboard

The pre-order for this keyboard opened up some time in 2020 but I wasn’t aware of it so I made my order in March of this year. This meant I was in the “flex batch” which had a delivery date of some time between June and August (iirc). The wait wasn’t too bad because it gave me time to think about the components I wanted. I wasn’t familiar with Glorious as a company to expect anything so it was all up in the air until I got the board delivered.

I won’t do a fully unboxing or anything like that, I will cover the board as my build currently sits with before and after photos of the board with and without keycaps.


All prices are before taxes

GMMK Pro board$170
Glorious Panda™ (36x switches)$25
Kailh Speed Silver (120x)$37
Kailh Purple (120x)$37
Drop MT3 Dasher Keycap Set (base kit)$110
Durock V2 screw-in stabilizers$26
Krytox 205 lube$23
Permatex dielectric grease$8
Cherry MX switch opener$8
Kailh switch opener$9
4-Claw stem holder (prong tool) $6
00 Philips screwdriver$4
Total cost of components $463

That’s a hefty list of components and also a whole lot more than what I’ve spent on a keyboard before this. After tax, that’s over $500. I will explain some important components below, and some I hope are self-explanatory.


After using the Topre keyboard and its dupe the Niz Plum (see full write up here ->), I actually walked away thinking that the different force required on different parts of the keyboard is a great idea. There is no reason I’ve seen/read online except that “it’s how it has always been done” for using the same type of switches throughout the whole board. So I decided to go with a multi-switch type option.

Glorious Pandas

These are the dupes of the Holy Pandas and since the Holy Pandas cost more and are harder to come by, I opted for these when placing the final order for the keyboard on Glorious’ website. Key specs about these that mattered to me is that they’re a tactile switch with a 67g spring.

I used these on the index and middle finger keys (you can see the orange keys in the image above). I used the pandas on the escape and F13 b/c those keys I wanted to feel similar to the middle of the keyboard (and the contrast looks cool).

Kailh Speed Silvers

These keys occupy most of the board, they are some of the lightest switches you can buy in terms of actuation force, at about 27g. This makes them insanely easy on the weaker fingers like the ring and pinky finger. For keys like semi-colon ; and A, I do notice that there’s some times an accidental press b/c my finger’s just resting there. In terms of overall feel, these are linear switches so there’s hardly any feedback which I am okay with for the

Kailh Pro Purples

These were the wildcard switch I went for, they are in the middle between the other two when it comes to actuation force, at about 50g. The tactile feel is there but I don’t notice it much because they’re under keys that are not pressed very often as part of the normal typing experience. I used these for the function row, the arrow keys and the navigation cluster.

Bad switches / weak switches

While working on the board, one of surprises that I ran into was how often some of the switch connectors got bent. I messed up about 20 switches, with the Kailh speed silvers being the easiest to damage. I’m not sure if it’s possible to get the switch working after the connector bends but since I had so many extras, I went with the safe approach of using a new switch each time. I believe only 1-3 pandas were broken like this. This could also be because I installed so many more silvers.

Taking apart the keyboard and lubing the switches

I took the keyboard apart twice, the first time to install the Durock stabilizers. The installed stock stabilizers were way too sticky to use, I’m not being a snob about this. The stock stabs were way too lubed. I tried them with a non-lubed Kailh silver switch, the keycap would not even return to its initial position after pressing it and pressing down felt really hard (no matter which switch I used).

The second time I had to take the board apart was because I needed to shave off some plastic from the Durock stabs. Yes, as Taeha mentioned in his build video, the Durock stabs are a bit too big for the case and they will get stuck. Also, make sure to tighten the screws to their absolute limit and press in the plate and case together so that the foam is really in there and not moving around at all. I had to take the board apart the second time because after going through the installation of switches and keys, I realized about half the keys didn’t work because the plate and the case were not tight enough to make the switch and PCB connect sufficiently. I think I broke one of the side LEDs when putting together the board the second time around.

Lubing the switches was a relaxing activity. I did about 10-25 switches a day (I would do this after work at night). It took me about a whole week to get the board ready for use. I went with the Krytox for the panda switches and the dielectric grease for all the Kailh switches. The krytox isn’t as thick as the dielectric grease so the pandas do feel very smooth. All the lubed switched feel extremely smooth to press.

One thing to note, the Kailh switches use a different switch opener than all other MX style switches. This is why I have two switch openers listed in the component list.

MT3 Dasher keycaps

I love my SA profile keycaps that Kristen got me as a gift about 3 years ago, I used them on my previous keyboard and they just felt amazing. The SA profile helps a lot with reaching the Function row and the number row. The MT3 profile is a different profile but the top function row feels similar to the SA profile. The keys have a concave dome shape at the top where fingers can sit and pressing the key down really feels good. I think the plastic used makes a bit of a difference compared to some of the cheaper keys I’ve used before, but this might be just because the MT3 keys look so good.

MT3 Dasher kit –

Thoughts on typing experience

Overall, I’m happy with the board. The switches feel great, the key profile fits well on this board. The color scheme isn’t my absolute favorite but still I like it.

The LEDs are nice but I rarely use them, they’re good for testing the switches before you use the board. The rotary knob is one of my favorite things about this board. I have always been a TKL/80% fan and this being a 75% (no full nav cluster and arrow keys moved down a bit) is not a huge change so I think it was a good layout choice. I do like having the function row available to me.

The type-c connection is useful, I don’t really care about wireless keyboards so this board checks the box for me on having the right way to connect to computers.

Being built with aluminum, it is a hefty weight and feels sturdy. The gasket mounting with the foam in between does help the typing experience feel a bit better. It doesn’t have the “tin” sound that my previous MX Cherry board with a plastic case had.

Negatives, things that could be changed

The board comes with two large LEDs on the side, they are used to indicate if the caps lock is on 🤦‍♂️. This is one of the features I care the least about because my caps lock key is turned into a control key with no caps lock ever being used. As I mentioned before, I might’ve broken one of the LEDs as well when reassembling the board the second time around so that doesn’t help the case either.

The inability to use aftermarket stabilizers without some effort wasn’t fun. In my case, I had to use an x-acto knife and shave off some of the plastic from the sides of the Durock stabs. Reassembling the board shouldn’t have taken as much effort as it did. I had to squeeze the board with a lot of force in order to get the PCB and switches to make connections.

The lack of macOS software and the inability to use QMK right now feels like Glorious really did oversell the board. I think the Keychron Q1 might be a better buy if you’re considering QMK / via support a must.

Once in awhile, there are some double presses of some keys and also the board doesn’t respond in some cases when the computer wakes from sleep. I never had this experience with any of my other boards.

Closing thoughts

If you’re thinking of buying a barebones board with no switches and no keycaps, I would urge you to look at other options alongside the Glorious GMMK Pro. It’s a good looking board but for the price, it feels like I was oversold on some of the features.


“Looking for bliss in a blah day” — Adam Grant

Weekend project progress: routes for Larri

This morning, I started working on a simple weekend project in which the goal is a deployed API server that does one simple thing. The business logic and the API behavior isn’t too important to me because the focus of this project is actually learning more about deployment.

So far though, I’ve been only concentrating on getting a working version of the app locally.

It’s call “Larri Adda” which comes from a song about a bus stop.

The main goal is to get a DigitalOcean server and database working together properly.

What I’ve learned so far is:

  • Routing in Express is extremely flexible, it’s my first time using express.Router which is pretty powerful.
  • When using route parameters (like /user/:id), use {mergeParams: true} within the route file that expects to use route params in order to actually receive them from the parent file.
  • I’m using bits of code generated by Github Copilot which blows me away with how good it is guess what I’m trying to do!

Next on my list is to get MongoDB working with my app and I don’t want to do that today so maybe I’ll do that tomorrow 🤣

TIL: null is an object in Javascript

I’ve been in a lull about learning concepts related to programming and web development the past few months so yesterday when I got an email about Just Javascript, I signed up for the course to check out how it will be.

So far, I’m running into pleasant surprises like how there are only nine data types in Javascript.

  1. Numbers (1, 3.14, -500)
  2. Strings (“hello”, ‘samson’, ‘a long sentence’)
  3. Booleans (true and false)
  4. Undefined (undefined)
  5. Null (null)
  6. BigInts (not sure about these yet)
  7. Objects ({})
  8. Functions (sum => x + x)
  9. Symbols (uncommon but used for referring to unchanging values)

Well, after learning about these, I also ran into an interesting quiz question in the course, what is the value of null when checking with typeof()? Turns out it’s "object". This was a surprise to me but I guess it’s been a bug for a long time.

Here’s a lot more info about it from someone who knows JS way better than me:

The history of “typeof null”.

Is the Keychron Q1 a GMMK Pro dupe?

So I finished building my GMMK Pro last week (a writeup is in my drafts for that). I got an email from Keychron the same week I got my GMMK Pro shipped. I waited about 6 months after reserving the board to be able to buy the GMMK Pro so timing was a total coincidence, I think. I’ll have more thoughts on the GMMK Pro in its own post but for now, I wanted to mention the new announcement, Keychron’s Q1 board.

So far, Keychron has had great entry level mechanical boards but one of the features they’ve been lacking is the ability to use QMK for custom firmware/key mapping and the ability to buy the barebones board, without keycaps and switches.

Well, that changes with their latest announcement. Unlike most of their boards that they put through Kickstarter, this one will be available on their website some time around the end of July or early August and will start shipping in September.

The reason I’m writing this post is because the feature set for the GMMK Pro and the Q1 look oddly similar, almost like they looked at the GMMK Pro and said “how can we replicate this and make it just a tad less expensive”.

Below I have a comparison of features:

FeatureGMMK ProKeychron Q1
Layout / number of keys75% TKL – 83 keys (ANSI US)TKL – between 83 – 87 keys
Rotary knobYes, comes with all boardsNot at launch, will be added later
Price$170 barebones aluminum case option
Varies between $200-350 for additional options
$140 for base option
$170 for basic kit (keys and switches)
Case materialAluminum, polycarbonate, or brassAluminum only
Wireless / bluetoothNoNo
ANSI/ISO optionYes – not at launchYes – at launch
RGBYes – south facing RGB Yes – south facing RGB
StabilizersPreinstalled GOAT stabsUnknown at launch
Third-party stabs?Yes – but durock v2 take some
work fitting into the plate
Yes – support for both Cherry
and Durock V2
Hot swappableYesYes
QMK / VIA supportNot at launch – planned for mid-2021Yes
ColorwaysBlack and silver (known as white)Unknown but marketing page shows Blue, Gray, Gunmetal
Typing Angle6º – no legsUnknown – no legs

Hopefully this is a helpful list of features you can review and decide for yourself if the Q1 is a dupe or will have its own audience.