Random Notes

Blocked in China

Screenshot from website showing codestats.net is not accessible from China

Read more…

Pure TypeScript Setup for Simple Projects

I’ve long had certain issues with modern web development, and I even wrote a little tool of my own to help me manage such an environment. So I look for ways to minimise the complexity of my setups while still maintaining some modern conveniences. Now I’ve started to use a setup that relies on TypeScript and modern browsers’ builtin features. This is a very minimal setup consisting just of TypeScript, plain CSS, and maybe a tiny build script.

Read more…

Blog Moved to New Server, Mebe Refactoring

After moving Code::Stats to its own server, the old Online.net box this blog was running on was going to waste, and more importantly, wasting my money. So I got a new tiny box from Hetzner and finally got over to dumping the blog on it. But of course I had to use the opportunity to also refactor it a bit…

Read more…

Alt Text for Text: Accessibility of Unicode Content

Unicode contains a lot of great and useful things. And as things tend to go, people find creative uses for them. It’s currently trendy to use some of Unicode’s special characters for “font effects”, (assuming you have good font support, you should see cool double struck letters reading “like this example”). There are easy converters available for finding out the best styles.

Read more…

Node.js Profile Processing Taking Forever

I was doing some Node.js V8 profiling work at the office near the end of the day and noticed my profile processing was taking a long time. I figured it is just processor intensive and left it running for the day while I went home. To my surprise, the next day it was still running! htop showed me it had accumulated 12 hours of CPU time and was still not finished. This led me to track down a related issue and how to fix it.

Read more…

Code::Stats Server Migration and Sticker Sales

Read more…

Filter uWSGI Logs Based on Path

I was wondering today how to filter uWSGI logs based on the request path because we had an endpoint that was filling our logs with meaningless information. At least for me this was surprisingly difficult to find. So here is an example command line option:

--log-filter '^((?!/api/foo/bar).)*$'

The log-filter flag takes in a regular expression that is used to include lines that match the filter (so it works as a whitelist). To filter lines that don’t contain something, you can use a negative lookahead.

Ultimate Hacking Keyboard Review

History (or How I Got the UHK)

So it turns out mechanical keyboards are like a drug to me. After I tried my first one at work, I had to get more. At the same time I started to pay attention to the ergonomics of my typing. I noticed that when I typed a lot, my fingers and wrists would start getting fatigued quickly. My typing style also had space for improvement, with my left hand stealing a lot of work from the right hand and my fingers hitting the wrong keys. I was a touch typist, but following my own style that was hardly optimal. All this got me looking for something different, an ergonomic keyboard.

Read more…

Converting IBM Wheelwriter to USB Keyboard

The first part of this post contains background on how I got the keyboard and how I progressed with it. If you’d like to jump straight into the conversion instructions, click here.

Quick link to GitLab repo of this project: Nicd/qmk_firmware

Obtaining the Wheelwriter

After getting my Cherry finished, my brother messaged me that his company was emptying their old office and were throwing away some sort of IBM typerwiter. He asked if I would be interested in taking it instead, to save it from going to the landfill. Of course I was, and so I was soon in possession of a working IBM Wheelwriter 6747-2. The Wheelwriter is an electric typerwiter introduced by IBM in 1984 to replace the earlier Selectric. It has a keyboard with similar construction to that of the famous IBM Model M, using the same buckling spring mechanism. The unit my brother saved for me is from 1986.

I myself had no use for a typewriter, but I was very interested in its keyboard, that seemed to be in perfect condition. All the keys responded properly, so it was just a matter of disconnecting the keyboard and converting it into USB usage. This is how my conversion story started.

Read more…

Mebe 2: Elixir Boogaloo

After quite some time in development, I’ve now deployed Mebe 2 on this site, to replace the aging Mebe codebase. The earlier blog engine was written with Phoenix, which while being a great framework, was a bit heavy handed for the engine’s minimal needs. Mebe 2 has the old engine’s Markdown parsing and DB logic, but the web side is totally rewritten. The framework I chose is Raxx, because it’s quite minimal but also mainly because I just wanted to learn it. Alternatives are good.

The new blog engine has proper Distillery releases, so keeping it running and making new fixes and features is a lot easier. It’s still in very early development, though, as it’s missing tests and proper docs et cetera, but I figured I’d start dogfooding it already, as this remake process has kept me from writing new posts. So hopefully in the near future I’ll come out with some new stuff! See you till then!