Browsed by
Tag: hacks

Revolutionising Agile With Head-Stand-Ups

Revolutionising Agile With Head-Stand-Ups

So here’s a true story. I work with a normal sized team as per Agile/Scrum guidelines, about 8 people. We have our usual stand-ups every day, at about 10:30 in the morning. As a general rule, people have to join this meeting. Everyone speaks following the Scrum rules, just what is required: What I did, what I am going to do today and if I am blocked. And that’s it. Yet, our discussions diverge, others jump in to help whenever someone mentions why they are blocked, suggesting how it can be solved. It is helpful, it speeds us up in ways because it avoids need for a one-on-one meetings later, and team generally returns feeling the meeting was fruitful.

Yet, it results in our meetings getting extended, we have our stand-ups almost 20, at times 30 minutes long. This is something that has been on our mind for quite some time now, as a general rule, the stand-up should not be longer than 10 minutes, that is why we ‘stand up’, so we realise the time being spent physically, with a minor discomfort and that drives us to close the meeting sooner.

This is when I read about the “plank meetings”. Excited, I suggested to the team and everyone agreed agreed that this could help us reduce the time we spend in stand-up considerably, while giving everyone a healthy boost. We agreed to put it in practice. Now, for those who do not know what plank meetings are here are couple links explaining them. We decided we would start the next Monday, with the next sprint. But destiny seemed to have some different plans. During my yoga session on Sunday morning, it dawned on me that there could be something much more effective than this. It was the Shirshasana that gave me this idea! Shirshasana is an asana in yoga, where you stand on your head and keep the body and legs straight up, like a plank but upside down. This! This could be the thing we need to keep the timings in check.

Now Shirshasana, as a yoga form, has many, many benefits of its own. It is known to direct the blood flow to head and eyes, relieving stress, improving focus, and digestion. But the quality we are looking for most was that it makes us temporarily uncomfortable! Perfect! On the planned day, we started with this instead. There was just one simple rule:

  • No one speaks without first assuming Shirshasana form.

Now you see, there is no rule about when to speak, or who speaks. That is because on the first day we observed that entering this form and exiting from it is not easy, we needed help from others. Meaning it was intuitive that anyone who wanted to speak would have to wait for their turn and to get help from others to speak! This caused a revolution amongst us, we realised that this one change alone has brought us many benefits. Here are our observations:

  • First and foremost, meetings became short.
  • Meetings became fun.
  • Our habits changed to be more healthy. It is not advisable to consume food before performing Shirshasana, and hence we automatically started following better timings for breakfast.
  • Our team found that we were more interactive throughout the day. Somehow activity of helping each-other daily, and needing help from others was turning into a team-building exercise of sort. We may just have saved our company thousands of dollars.
  • More people around us took interest in this seemingly odd practice of standups and that created awareness about health and yoga across the organisation.

We as a team have never been better! Who needs stand-ups when ‘head-stand-ups’ are so rocking!

PS: Reading between the lines is an important skill, for others there are warnings in F12/console.

AWS Cloudwatch log scroller

AWS Cloudwatch log scroller

This is a quick tip about a quick solution to a regular small problem! AWS CloudWatch logs are great, but the search feature on those logs is not. The search only lists the lines that are exact match to your search term. Usually you would want to see a few lines above or below the match as well! Not all logs are single line, unless you spend efforts in ensuring that there are no newlines in the content being logged out. And so, every so often you have resort to ‘scrolling’ through the logs.

The logs load dynamically on scroll of the mouse wheel, and it is tedious (read ‘irritating’) to keep spinning the mouse wheel to scroll through those logs, especially the ECS container logs. So here is a little script which does that for you. Run this in your browser console and specify it the number of times it should run, and done. It does the scroll action, waits for the page to load (fixed) and scrolls again till it has scrolled for the times you specified.

You can also stop the scroll in between by calling clearTimeout on the timer.

Here it is:

Disclaimer: This is still not the best solution for long running tasks / huge log files, you are limited by the load times anyway. This only takes the need for manually scrolling through logs where you would have otherwise done so. For larger logs, it is probably best to export them.

Mute Mic With Keyboard Shortcut On Ubuntu Or Linux Mint

Mute Mic With Keyboard Shortcut On Ubuntu Or Linux Mint

Here is a quick tip for all the automation buffs like me. Turn your mic on and off with just a keyboard combo.

I do all my work remotely. Which is also to say I have a lot of conference calls. And like you, I hate it when people do not mute their phones / mic on laptops when not speaking! (cue in the obligatory meme about not putting your phone on mute during a call!)

I always wished for a hotkey of some sort to mute / un-mute myself during a call. So here is a way to do it.

  1. Use a Linux machine. (This in itself is a great tip! 😉 ) These steps in particular are for an Ubuntu / Linux Mint machine.
  2. Put the following snippet in a bash script file and add it to path. You can also define it as a bash alias and load it from your custom bash profile, but then assigning it a shortcut may not be that easy.
  3. Set a keyboard shortcut to trigger this script. I use Meta+M for this.

Here are the two variants of the script for that:

This script toggles mic state, shows a nice (transient) notification of the changed state, with an intuitive icon! It should also replace previous notification quickly, but somehow it does not seem to work yet.

(cue in the meme about speaking on mute! ;))

Docker As Application Registry

Docker As Application Registry

Docker As Application Registry

Docker is great and solves a lot of problems with deployments. It taught VMs to share the resources, like how VMs taught hardware to share resources! Along with production, I have found that docker can work great as an application registry in a local development environment.
By applications I mean software that you install on your OS and launch them with shortcuts and they continue to live and retain state till you uninstall them; not exactly what containers are designed for but can work as. Something like snap or flatpak but with docker and for servers as well, not just for UI apps.

One advantage this has over using standard installers (like apt-get) is you are at complete liberty to start and stop the background processes, like mysql. If you installed mysql this way, you do not need to go and disable the autostart for it, it just does not matter! Similarly for your SonarQube server, you do not need to install it as a daemon, neither do you need to remember where you downloaded it to be able to restart it. Another advantage is most of such applications do have official docker images, it is the intended way to use them now!

One disadvantage of this method is that you always need to address them with their IP, you will not be able to bind them on host network then. But in my view, it is always better to have a dedicated IP, it emulates production scenario better and does not clutter your local machine ports.
So for apps what you need is containers to live long, be able to identify them with name, start and stop them easily and have a dedicated, static address to be able to reach to them. Most of these things are easy, except for a static IP. But once you create a network, you are set. That is it, it is that easy! Create a virtual network, and start your dockers with a name and static IP in that network. Simple!

To create a network:

docker network create -d bridge --subnet="172.30.0.0/24" --gateway="172.30.0.100" --ip-range="172.30.0.0/24" permanet

Now any app you need, just specify this network and a static IP of your choice; like this:

docker run --name mysql-server --network="permanet" --ip="172.30.0.1" -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql/mysql-server:5.7

More complex containers can be created like this:

docker run -it --name gocd-server --network="permanet" --ip="172.30.0.5" -v /yourhome/docker-volumes/gocd/godata:/godata -v /yourhome/docker-volumes/gocd/home:/home/go gocd/gocd-server

I keep a dedicated directory in my home for docker volumes, so I can back it up and use them as is when I change machines or OS. I also have a script where I add all the containers I need, so it is just a matter of copying the volume directory and running the script to create identical setups. Then even your .desktop files work as is!

Here is an interesting setup script for Jenkins (gist), it externalises all data directories from Jenkins, including the plugins and users and mounts your local m2 repository inside Jenkins so as to avoid downloading the libs again :

docker run -it --name jenkins --network="permanet" --ip="172.30.0.6" 
-v /yourhome/.m2:/var/jenkins_home/.m2
-v /yourhome/docker-volumes/jenkins/workspace:/var/jenkins_home/workspace
-v /yourhome/docker-volumes/jenkins/jobs:/var/jenkins_home/jobs
-v /yourhome/docker-volumes/jenkins/plugins:/var/jenkins_home/plugins
-v /yourhome/docker-volumes/jenkins/users:/var/jenkins_home/users
jenkins:2.32.3-alpine

You can create as many such networks as you wish for logical separation of groups of such apps; in my case this is the third network (172.30 for that reason), since first two were taken up by some compose scripts.

A list of few such containers I use: mysql (different versions), SonarQube, hystrix-dashboard, zipkin, swagger-ui, a redis-cluster for local use, gocd-server, Jenkins, portainer, postgres, pgadmin etc. I even have a couple Windows software running on wine in such containers, we shall talk about it some day.

Cinnamon Crashed, would you like to restart?

Cinnamon Crashed, would you like to restart?

I have been a fan of the Cinnamon DE for years. I like the way it looks and stays out of my way when I am not admiring it and actually doing something useful! But it is somewhat buggy.

This is a quick post about the cinnamon crashes, basically a new reason for it to crash. I was faced with a common issue of cinnamon crashes, suggesting me to restart cinnamon, which when clicked yes resulted in another crash and popup.

Google searches resulted in many solutions, starting with updating cinnamon, resetting the config by deleting the .cinnamon and .local/share/cinnamon directories and verifying if the correct video driver is in use. There was nothing obvious in the syslog, or xsession errors. Nothing helped.

Tired, I reinstalled mint but issue persisted. This was rather peculiar. I mount my home separately, and that of course survives the installs and OSes. This was the first hint at the problem, issue was configuration of something, not necessarily of cinnamon. So I created a new user and tried to login with the user, and voila, cinnamon worked without a crash. So certainly the issue was config for my regular user.

I decided to go about removing related config folders, and the first ones I chose was the gtk-3.0, gtk-2.0 and cinnamon-session directory inside .config directory. And to my luck, cinnamon is working just fine since then.

Probably, I should spend some time to check what exactly from these config was the issue. But at least I now know one more reason why this error might occur and one more way to fix it. And now, you too..!