# List tables that don't have primary keys in a MySQL database

Whenever I restore a database dump on a MySQL InnoDB Cluster, most of the time, the error I face is related to missing PRIMARY KEY attribute because as per MySQL's official documentation:

Every table that is to be replicated by the group must have a defined primary key, or primary key equivalent where the equivalent is non-null unique key.

What I would usually do is, run a simple query to determine the list of the tables that don't the PRIMARY KEY attribute:

select tab.table_schema as database_name,
tab.table_name
from information_schema.tables tab
left join information_schema.table_constraints tco
on tab.table_schema = tco.table_schema
and tab.table_name = tco.table_name
and tco.constraint_type = 'PRIMARY KEY'
where tco.constraint_type is null
and tab.table_schema not in('mysql', 'information_schema', 'performance_schema', 'sys')
and tab.table_type = 'BASE TABLE'
and tab.table_schema = 'your_database_name_here'
order by tab.table_schema,
tab.table_name;


Hope you found this tip useful!

# Playing around with ImageMagick

ImageMagick is not a new tool for me but I haven't really talked about how it comes in handy whenever I wanted to resize and/or compress images efficiently using the terminal instead of using some image conversion service found for free online.

To get started, make sure you install ImageMagick on your machine. This is the command I use for Fedora Linux:

sudo dnf install ImageMagick


For example, if you wanted to compress an image's quality to 80%, here's you can do it:

convert -quality 80% src.png dest.png


Great! What if you want to do it for hundreds of images in a directory, then you can easily do something like this:

find . -type f -name '*.png' -exec bash -c 'convert -quality 80% "$1" "${1%}_compressed.png" ' bash  {} \;


You can do the same to resize the images while keeping original aspect ratio intact:

convert -resize 450x450 src.png dest.png


And similar to the one above, you can do the same for multiple images like so:

find . -type f -name '*.png' -exec bash -c 'convert -resize 450x450 "$1" "${1%}_resized.png" ' bash  {} \;


I have just scraped the surface of this image manipulation tool and if you are interested to know more, read the official manpage on how to use it.

Hope you found this tip useful!

# Install Cisco Anyconnect Client on Fedora Linux

Cisco Anyconnect Client is a SSL VPN Client with VPN functionalites that enables an organization to secure its endpoints. Although, I use it a lot at office, I have only used it on Windows 10 so far.

One day, when I was on my vacation, I had to connect to a server remotely but this time, I tried doing it via Linux and it worked well!

Fortunately, the client is available for Windows, macOS and Linux. You can go to the Downloads page and download the tarball archive for Linux.

tar -xvf anyconnect-linux64-4.10.00093-predeploy-k9.tar.gz


## Install Cisco AnyConnect Client for Linux

Now that the file has been extracted, you can navigate to the vpn directory in anyconnect-linux64-* directory:

cd anyconnect-linux64-*/vpn/


Execute the vpn_install.sh script:

sudo ./vpn_install.sh


## Connect to VPN via Terminal

The GUI version was crashing on both KDE and GNOME desktop environments. Whereas, it was a smooth experience when connecting via the Terminal.

For easy access, you can create an alias in your .bashrc file:

alias anyconnectvpn="/opt/cisco/anyconnect/bin/vpn"


Save and restart your terminal for the changes to take effect.

After that, you can connect to VPN like this:

anyconnectvpn -s connect <IP_ADDRESS>


Once executed, you'll be prompted to enter your credentials and if all goes fine, you should be connected.

## Disconnect VPN via the Terminal

You can execute the following command to disconnect:

anyconnectvpn -s disconnect <IP_ADDRESS>


Sometimes, it can be tedious to write these commands all the time especially when you're in a rush, this can really get in your way.

To solve that, you can easily store your credentials in a file like .my_vpn_creds in your home directory:

y


Save the file and create another file named my_vpn_connect.sh:

#!/bin/bash

echo "Connecting to VPN.."
/opt/cisco/anyconnect/bin/vpn -s  < ~/.my_vpn_creds connect ${VPN_SERVER}  Save the file and make the file executable: sudo chmod +x my_vpn_connect.sh  Now, you'll be connected to the VPN automatically by just executing this script: ./my_vpn_connect.sh  This saved me a lot of time and I hope it does the same for you as well! 🤗 Hope you found this article useful! # Setup a virtual environment for Python development virtualenv is a tool used that allows you to install and isolate Python packages that are specific to your project rather than installing them globally on your system, which might, at some point, break other tools or services in your system. In this simple guide, I'll show you how to install and create your own Python virtual environment for development. Before you begin, please make sure that you have installed Python 3 or greater on your system. ## Install virtualenv Using the pip tool, you can execute the following command: sudo pip install virtualenvwrapper  Then you need to add the following lines to your .bashrc startup file (found in the home directory). These lines determine where your virtual environments should live, the location of the script installed and the location of the development project directories: export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS=' -p /usr/bin/python3 '
export PROJECT_HOME=$HOME/Devel source /usr/local/bin/virtualenvwrapper.sh  Next, restart the startup file: source .bashrc  Once done, it'l execute a bunch of scripts for a few minutes and once the installation is successful, you can start using the mkvirtualenv command to create your virtual environment. ## Creating a virtual environment Really, it's quite trivial to create a virtual environment like this: mkvirtualenv my_virtual_environment  Once done, you'll notice that your terminal looks something like this: (my_virtual_environment) user@desktop:~$


This indicates that you are inside the virtual environment and can begin installing your Python packages and begin developing your application.

## Using the virtual environment

There are a few commands that I'd like to share (and you should also know) while working with a virtual environment:

• deactivate — get out of the current virtual environment
• workon — list available virtual environments on the system
• workon name_of_environment — activate the specified virtual environment
• rmvirtualenv name_of_environment — remove the specified virtual environment

## Conclusion

If you are a Python developer or write code in Python, then virtual environments are super handy and disposable especially while testing and working on different projects.

Unless, your project is package-dependant, you don't really need to isolate your development environment.

# Install TeamViewer on Fedora Linux 36/37

Usually, I use it access remote servers or my computer at work but I myself never did it on a Linux workstation. It worked out for me, so it should work for you too!

You can find the latest release on TeamViewer's official site.

Make sure that you have install wget on your system to easily download it via the Terminal:

wget https://download.teamviewer.com/download/linux/teamviewer.x86_64.rpm


During installation, it failed for me as I was missing a certain libminizip.so module. So, I looked up online and found the module and downloaded it on my workstation:

wget https://rpmfind.net/linux/fedora/linux/updates/36/Everything/x86_64/Packages/m/minizip-compat-1.2.11-33.fc36.x86_64.rpm


rpm -i minizip-compat-1.2.11-33.fc36.x86_64.rpm


## 3. Install TeamViewer

Now, the final step is to install the RPM package for TeamViewer:

rpm -i teamviewer_15.37.3.x86_64.rpm


Hope you found this short guide useful!

# Connect to a Remote Windows machine from a Linux machine

Last week, my Windows machine was down and I was struggling to connect to a remote server as I'm using Fedora Linux at home.

I tried installing and using GNOME Connections but it crashed and didn't work well for me. I found another tool named rdesktop which was stable and worked well for my case.

Installing it is as easy as typing the following command using the dnf package manager:

sudo dnf install rdesktop


Now, you can connect to your remote desktop machine using the following command:

rdesktop -d <domain> -u <username> -p - <ipaddress>


Upon execution of this command, you'll be prompted to enter the password and after that, you're all good to go!

Hope you found this tip useful!

# Exploring Europe

Sharing about my experiences and the places that I explored in my short three-day trip to Europe.