Skip to content

Month: July 2020

Getting things done with attention deficiency

People see me as an efficient and productive developer, but as many people I am very easily distracted and this productivity is only the visible outcome of an internal war that has been spaning several decacades.

If you also find yourself struggling with guilt of not getting things done fast enough, I hope some of this may help you in your fight.

Sleep well

Super cheesy I know. So much to do, not enough time in the day, right? What years of sleep deprivation taught me is that “nothing good ever got done after 22:00”.
Go to sleep on a decent time, (I didn’t say early, because I’m unable to go to sleep early myself) and treat you a good 7-8h of sleep per day. Do it for a few days, and witness yourself getting super powers:

  • you will remember what you read more vividly (e.g. while reading documentation)
  • your ideas will flow faster and clearer
  • your attention to details will rise up (e.g. preventing typos)

Get a few sleep-less days, and you’ll get back in the constant haze of brain numbness, not remembering what you were doing 10 minutes ago, staring at your screen blankly, your idea well dry as hell.

Procrastination as a red flag

Society likes to point fingers at slackers and procrastinators, while it seems two very different beasts to me.
Over the years, I identified a few activities as things I would always postpone:

  • social activities such as making business phone calls
  • paperwork
  • writing documentation
  • providing negative feedback to people

Anything else I would gladly do, but I couldn’t be bothered to do any item on my todo list, and no amount of reminders was motivating me.

Then I realized they all shared some similarities:

  • they were mandatory
  • they made me uncomfortable

Mandatory, obviously, otherwise I would have just scratched them off from my todo and it would have been the end of the story.
But uncomfortable? I’m a serious introvert, so people-related activities take me a lot of energy to deal with, and often leave me exhausted. I also suffer from dyscalculia, and this has made my life complicated at many levels, including accounting and invoicing, and all paperwork that includes numbers in general. Finally, writing documentation using frameworks like sphinx involves a lot of time-consuming setup and were not fun at all.

How to deal with these then? Well, I have to do achieve the goals, but maybe the means are wrong:

  • phone calls and hard discussions have to be made, but I don’t have to do them all in a row. I need to recover some of my “people” energy in between calls, and stop when my energy is low
  • I hired an assistant to do my paperwork for me
  • I moved from full-fledged documentation to just writing a README in Markdown, for which I see immediate results without having to re-compile the project and deal with ToC warnings

When the guilt is gone, only remain pain points that you need to address so you can move on being efficient again. Procrastination was just the red flag to show you something was off.

Remove distractions

I was raised doing my homework next to the TV, then moved on to listening to songs while studying, and my memorisation skills were terrible back then. I would remember everything from class, but couldn’t work straight back home. Then one day I decided I needed extra focus on something, dropped the headphones and remained in total silence while working. I was able to get in the zone, and focus for longer stretches, with less mistakes, and less daydreaming.

Since then, whenever I’m doing something that requires just a bit of concentration, I just remain in total silence, and it makes all the difference from even music droning in the background, etc.

I also disabled all notifications on my computer and my phone, because I figured out they would properly screw up my focus and get me out of the zone constantly. My phone only now rings for actual phone calls, but otherwise I can forget about the rest of the world for as long as I want while I’m working, and whatever I’m doing has my complete attention for as long as needed.

Make sure you also inform your family, room mates, etc. that you need concentration, since they might be used to bug you all the time and not understand (or not take it seriously) any restriction you could put in place. Remind them that when you’re at work, you’re not in a good setting for being social.

Practice your will

I think that’s where most people give up. When you find yourself being distracted, it’s important to regain control of yourself and push through it. Don’t guilt-trip yourself to “do your job”, but encourage yourself “ok, I just need to re-focus for the next 2 minutes to get back in the zone”. Before you figure it out, you’re focused again.

Start from the cheese

One tip that I often give to aspiring developers, is to start from the end goal and reconstruct your way to there. Instead of starting from the problem definition, start from the expected outcome, and walk backward, asking yourself, ok, to get to step Z, I will need output of Y, then Y need output from X, and X needs output from V and W, … all the way to A, the problem definition.

This is very easy to put in place when you do TDD, you just describe your desired output as your assertions, then walk backwards to your original inputs.

Fine your productive times of the day

We all have our routine, but also tiles during the day when our energy is more suited to different activities. For me:

  • Morning is for meetings, reports, simple code reviews, emails
  • Lunch break is for lunch, keeping up with news, watching shows on Netflix
  • Afternoon is for uninterrupted work, creative activities or complex code reviews
  • Dinner is for family time
  • Evening is for learning, playing with new technology, or just playing games

It’s because I’m usually waking up late, so morning flies by, and I’m not fully awake before lunch. Afternoon can stretch until early night if I need to get something out of my system,and I know I can’t sleep well if I’m not done with my ideas, this is why I’m putting learning at the end of the day.

This is my routine because this is how I live and feel good. You need to figure out when you have the best energy for each activity in your routine and even if it’s unusual, go for it.

All work and no play …

As you may have understood, work takes up a large part of my day, often overflowing over the weekend. At some point, even enjoyable activities get me cranky for no reason, and I contemplate switching careers.

Obviously in these days, my productivity is a flat zero.

Know yourself

At the end of the day, these are just personal reflections from many years of living and working with attention deficit. I’m not a doctor, I didn’t read anything about the topic, I’m just describing how I work around this myself, and how I managed to both use my hyper-focus as a booster, and reduce the amount of distractions through the day. I hope this may help anyone in the same situation, in any case you are not alone 

Comments closed

Buildling a Kubernetes cluster in my basement

For some recent customer work I had to deploy some Docker images on Kubernetes, but didn’t want to setup a full-fledged cluster (nor pay for one) as it was going to be a temporary environment anyway. I therefore dusted off an old PC I had laying around in my basement, and decided I would use it as the base of my cluster.

What I needed

  • At least 3 VMs to install Kubernetes (1 master + 2 nodes)
  • One VM to host GitLab + GitLab Registry
  • One VM to run a GitLab Runner (for pipelines)

Setting up the host

After some back-and-forth discussions with my colleague Kenny van de Maele I went on using Centos 7 to host the VMs, mostly because I was already proficient with Centos and very happy with the platform.

After booting Centos Minimal ISO, I was able to quickly set up the host machine, then I just had to enable my network card (which was not enabled by default) using nmcli d and nmtui as described in the following blog post: https://lintut.com/how-to-setup-network-after-rhelcentos-7-minimal-installation/

Building the VMs

Google was good to me by putting this link in the top results, which was exactly what I was looking for: https://www.cyberciti.biz/faq/how-to-install-kvm-on-centos-7-rhel-7-headless-server/

Since I was going to repeat the process a few times, I just gathered all the bits from the blog post into a single script, and ran it multiple times after altering the $VM variable where the vm name is set. You could also remove it completely from the script itself, and run the script like this:

$ VM=centos7-vm1 ./build_vm.sh

D=/var/lib/libvirt/images
VM=centos7-vm1 ## vm name ##
mkdir -vp $D/$VM
cd $D/$VM
echo "instance-id: $VM" >> meta-data
echo "local-hostname: $VM" >> meta-data
cd $D/$VM
cat >user-data << EOF
#cloud-config
 
# Hostname management
preserve_hostname: False
hostname: $VM
fqdn: $VM.oasis.local
 
# Users
users:
    - default
    - name: eric
      groups: ['wheel']
      shell: /bin/bash
      sudo: ALL=(ALL) NOPASSWD:ALL
      ssh-authorized-keys:
        - <the authorized-keys fingerprint for my private key>
 
# Configure where output will go
output:
  all: ">> /var/log/cloud-init.log"
 
# configure interaction with ssh server
ssh_genkeytypes: ['ed25519', 'rsa']
 
# Install my public ssh key to the first user-defined user configured
# in cloud.cfg in the template (which is centos for CentOS cloud images)
ssh_authorized_keys:
  - <the authorized-keys fingerprint for my private key>
 
# set timezone for VM
timezone: Europe/Brussels
 
# Remove cloud-init 
runcmd:
  - systemctl stop network && systemctl start network
  - yum -y remove cloud-init
EOF
cd $D/$VM
cp /var/lib/libvirt/boot/CentOS-7-x86_64-GenericCloud.qcow2 $VM.qcow2
cd $D/$VM
export LIBGUESTFS_BACKEND=direct
qemu-img create -f qcow2 -o preallocation=metadata $VM.new.image 20G
virt-resize --quiet --expand /dev/sda1 $VM.qcow2 $VM.new.image
cd $D/$VM
mv $VM.new.image $VM.qcow2
mkisofs -o $VM-cidata.iso -V cidata -J -r user-data meta-data
virsh pool-create-as --name $VM --type dir --target $D/$VM
cd $D/$VM
virt-install --import --name $VM \
--memory 1024 --vcpus 1 --cpu host \
--disk $VM.qcow2,format=qcow2,bus=virtio \
--disk $VM-cidata.iso,device=cdrom \
--network bridge=virbr0,model=virtio \
--os-type=linux \
--os-variant=centos7.0 \
--graphics spice \
--noautoconsole
cd $D/$VM
virsh change-media $VM hda --eject --config
rm meta-data user-data $VM-cidata.iso

If you want to configure the VM memory and CPU count, you can do so by editing the command starting by virt-install [...] --memory 1024 --vcpus 1

Configuring bridge networking

After I was done with setting up the VMs, I realized KVM was hosting them on a separate network subnet than the rest of my LAN, which is perfectly fine, but was preventing me from connecting directly to the VMs. Since I’m using Ansible to configure my VMs, I need to be able to SSH directly into them, and I didn’t want to bother with using the host as a jump-host.

It only required 2 configuration changes on the host and adding a permanent route in my router:

Disabling the host firewall

# service firewall disable

I tried several fixes to have iptables not drop packets aimed at the VMs subnet, but unfortunately my experience editing rules was too rudimentary and I didn’t want to spend too much time securing a temporary platform hosted in my basement and only accessible from my LAN.

Enabling IP forwarding

This can be done by editing /etc/sysctl.conf and setting the parameter
net.ip_forwading = 1

Afterwards, a simple call to /sbin/sysctl -p will persist the parameter.

Adding the route

My LAN subnet is 192.168.1.0, and the VMs subnet is 192.168.122.0, so I had to use the host (which has IP 192.168.1.223 on my network) as gateway to brige both networks. Be sure to give your host a fixed IP if you want to set up a permanent route on your LAN.

“Oasis” is the name of the host, I was careful to assign it a fixed IP so I could add a permanent route
Your mileage may vary depending on your network solution vendor, but for me it looked like this on my Ubiquiti controller when I was done

I now realize this is already a lot to process, I will most likely make a second blog post on the actual Kubernetes install, stay tuned.

Comments closed

Powerslide SUV Next Renegade 125 Review

Unboxing and first look

I remember when the Rollerblade Coyote commercials aired in 1997, I was really into skating at the time, and lived in a small town surrounded by forests and dirt paths. The idea of skating on uneven surfaces was a dream of mine, but the price tag was crazy high for the teenager I was so it remained a dream for a long time.

Fast forward a few summers, and I’m now an adult with a bit more disposable income, living in Belgium (known for its waffles and broken-beyond-repaid sidewalks). Combined with the all-year-long wet weather, it’s not the most welcoming place to be skating.

Early June, out of curiosity, I wanted to check whether those off-road skates were still a thing, and realised they still were, and that several other manufacturers started their own lines of off-road skates.

I spent a few days reading reviews and watching videos, and crossed my fingers while purchasing my first pair.

Most reviews are a few years old and it wasn’t easy to cross-reference opinions about these skates, since the branding and models have evolved a bit over time. Here is a 2020 review of the SUV Next Renegade 125 skates by PowerSlide.

Here are a few videos I watched that convinced me to purchase:


James Mackey has several other reviews of the Imperial SUV
This one convinced me on the 125mm when I was also hesitating with 150mm

I ordered the skates from https://www.der-rollenshop.de/, which provides a good choice and reasonable prices. Shopping experience was quite good and they were kind enough to let me know that my order would be delayed because the bottle of anti-rust lubricant I ordered together with the skates was out of stock.

The box contains the skates and a Torx tool, so no need to order a separate one. I also ordered a nordic tire pump from Powerslide with an integrated gauge, since I had read that inflating had to be precise in order to have the best skating conditions without risking to blow a tire.

Size-wise, I do a 10 UK, ordered the 44-45 size and they fit perfectly, even without using the head moulding.

Comparison with Fitness skates

I started skating as a teen with street/agressive skates (my beloved K2 Fatty), but later on I moved to fitness models that I thought would be more comfortable to wear on the long run. I now own a pair of Fila Primo Evo that served me well, but are still not very practical on broken roads and pavements, and I managed to fall badly at least once due to gravel.

Compared to fitness skates, the Renegade 125 are massive. I read reviews, and kinda expected this, but they feel much heavier. The impression might also come from the hard boot, but they feel stiff and bulky.

The wheel train length is also something to pay attention to. You can see on the pictures below that the wheels extend beyond the boot by a good 5cm, so you need to be careful when crossing skates.

125mm vs 80mm

Skating experience

I’ll say it again, the Renegade 125 feel heavy when worn, and you’ll quickly feel it in your butt and knees.

I read people complaining about acute pain on the arch of the left foot when used for some time. I did experience it on the first run, but for me it was a fold in the liner that was too rigid and rubbing hard against the top of my left foot. I re-did the lacing so it would fit the curve of my foot top better, and on the second run I didn’t experience any pain, even after riding for 1h.

Tires add a huge lot of friction to the skates, to a point it feels like skating on a … bike. It is not possible to do any kind of slide with them on, so if you try a power slide or power stop, you’ll end up flying in the air.

As a result, a lot of your kinetic energy will be dissipated in the ground, and if you start to skate you’ll quickly slow down and stop. I think it’s a double-edged situation, because if you’re riding on hard surface where you’d probably pickup a lot of speed, then you don’t really need SUV skates. On the other hand, this offers much more control and stability when riding off-road, so you don’t accidentally end up in a tree because you couldn’t break quick enough. Just stop skating and you’ll stop within a few meters.

They are surprisingly manoeuvrable for their size and weight, I was able to make (relatively) short turns, and overall riding in the city was very smooth. I never had the impression I was riding skis for example.

The real deal here is the fact you can get a smooth skating experience over every type of surface. I went over pavements, broken sidewalks, manholes, road, tarmac, gravel and even small potholes and not only I couldn’t feel the difference (vibrations are well absorbed by the inflatable tires), but I kept control in all situations. Not once I felt like I was going to tip or have my wheel stuck in anything, while it was a constant concern when riding my fitness skates.

Accelerating on broken pavement? Sure. Jumping on gravel? Yep. I didn’t try riding on wet surfaces yet, but given the grip they have, I am not worried anymore of clouds passing by.

Update: real-life review

Most video reviews feature paid pro-skaters who use them as skis to go down slopes, but this is not what I had in mind when I bought them. Here is a small video I took on a sunny afternoon, and how they perform on the kind of surfaces I am usually skating over.

Summary

The Renegade 125 skates are a niche product, for people who are tired of only skating 10 days per year when the roads are empty, clean and dry. They require a strong lower body to operate, and can appear frustrating if you expect the “fitness” experience on all surfaces. You’ll get a lot of freedom, but you’ll have to sweat for it.

I think it’s a good compromise between the “nordic” skates and regular fitness skates, and the first few rides were very pleasing. I’ll soon try a longer trail with some forest path to really test them out, but since my original reason for purchasing them was all-weather skating on the Belgian roads, so far I’m very pleased.

Comments closed