Friday, May 17, 2019

Tornado of Souls solo

About one year ago I recorded the solo from “Tornado of Souls”, by Marty Friedman, from the classic Megadeth album “Rust in Peace”, from 1990. I’ve seen many people saying that it’s the hardest Megadeth solo, so I decided to incorporate it into my band’s set list, by replacing the “Hotel California” solo, after noticing some theming similarities. The result is pretty great. Unfortunately, in my band gigs, I hardly find someone who can appreciate the effort I put in learning it.

Anyway, this is the take I recorded about one year ago, using my Suhr Modern Satin, which I’m rather disliking the thin tone these days.

Friday, February 8, 2019

Chrome 72 annoying F6 key behavior

On all browsers, since immemorial times, I’ve been using the F6 key to go to the URL bar and select the whole URL. My current browser is Google Chrome, which in its version 72 changed the behavior of this F6 key, which now puts the focus on the tabs or somewhere else. You have to hit the F6 key twice in order to focus the URL bar.

And I’m not the only one who noticed this:

Fortunately, there’s a bug to the issue:

I wonder who in the hell decides changes like this. I’m seriously pissed about this change, and already considering go to Firefox, which I already use at work. I really hope they revert this stupid nonsensical change. Stop fixing what isn’t broken.

Follow up: I just installed Chrome 74.0.3729.108, and the F6 key is working properly again. Such a relief.

Thursday, February 7, 2019

A very simple, raw Win32 WinLamb program

Months ago I noticed that WinLamb was missing a simple, introductory example. I never really had time to write and publish one. Until today.

Click lines is a very simple program, inspired by Charles Petzold, which draws lines upon mouse clicks. Just this. It’s intended to be a very simple showcase of WinLamb, showing how to create raw windows, raw custom controls, and handling messages. I usually use dialog boxes on my real-world programs, but for this one I really kept it bare-bones, with no dialogs.

I hope it can be useful to anyone interested in WinLamb.

Wednesday, January 30, 2019

TypeScript DeepReadonly generic type

I’m finding TypeScript to be a great, modern programming language to work with.

Today I needed to use the readonly modifier to an object, so that all members of this object would be readonly too. This is particularly useful when working with Redux, which relies upon immutable objects. The problem is that readonly is not recursive; if the object is marked as readonly, the nested properties can be freely modified.

I found this implementation, which is based on this code written by Anders Hejlsberg himself, and it appears to work great. To make it reusable, I published it as a public Gist:

The file “DeepReadonly.ts” can now be reused whenever you need it.

Thursday, January 24, 2019

Git commit with specific date

Very interesting Git option I just found: --date. When making a commit, you can specify the date manually. However, if you make a new commit with a past date, it will still be shown as the last commit, even with a date prior to the previous commit.

A new commit at January 1, 2019, 12:00, specifying timezone UTC-2:

git commit -m "Comment" --date="2019-01-01T12:00:00-02:00"

Changing the date of the last commit, using UTC+0 as timezone. Will be prompted to write the comment:

git commit --amend --date="2019-01-01T12:00:00Z"

This goes hand-in-hand with this current date trick.

Friday, January 11, 2019

Node.js script to kill a JBoss instance

I’ve been dealing with consecutive JBoss restarts lately at work, and I needed a quick way to kill a running JBoss server instance. First I wrote a PHP script, but then I translated it to JavaScript, so it could run upon Node.js, which I’m using a lot lately.

I’m using it a lot.

Tuesday, January 8, 2019

Reading a file line by line in JavaScript and Node.js

While writing a small Node.js utility in JavaScript, I needed to read a text file from disk, line by line, into a string array. I wrote a small utility function to this task, which is async, returning a Promise.

Usage is pretty straightforward:

const readLines = require('./readLines');

async function foo() {
  const lines = await readLines('myFile.txt');