HOME BLOG

Database Trigger

Posted on: February 4th, 2023 by Olu No Comments

Hi folks,

In this post I will talk about database trigger. A few days ago, a colleague working on a piece of software I develop tried to submit some code containing database triggers for review. I hadn’t seen any codebase with database triggers until that point. Another developer who looked at the code felt the triggers ought to be removed. This got me curious about what triggers are what they are used for.

What is a database trigger? A database trigger is procedural code that gets executed automatically when certain events happen on a table or view in a database. Triggers are mostly used for maintaining the integrity of the information in the database. E.g. When a new record (for a new worker) is added to the employees table, a trigger can be used to add new records to the taxes, vacations and salaries tables. Triggers can be used to log historical data too for auditing purpose.

Thinking about trigger, I feel they must be used with caution because it is easy for developers to not even know that the triggers exist. This could lead to surprises and lots of time debugging code. This problem can be minimized though through good documentation.
Also, the use of triggers mean the business logic is handled in not just the application source code but in the database which could make it more difficult to understand how the applcation works. Furthermore, it may take more effort to write and maintain automated tests for database triggers.

That’s all for now. Till next time, happy software development.

 

References

Database Trigger. Wikipedia. https://en.wikipedia.org/wiki/Database_trigger.

How to view what tables a user has privileges on in Oracle

Posted on: November 10th, 2022 by Olu No Comments

Hi folks,

In this post I talk about handy commands you can run to find out what tables a user has privileges on in an Oracle database.

To view privileges for all users, run the following query:

select * from dba_tab_privs;

 

To view privileges for the currently logged-in user, run the following query:

select * from role_tab_privs;

 

The result will show the role, owner, table name, column name, privilege, grantable and common fields for each privilege.

The above command could be very useful when debugging permissions issues.

That’s all for now. Till next time, happy software development.

How to create product demo videos using a Mac

Posted on: October 17th, 2022 by Olu No Comments

Hi folks,

In this article I briefly discuss an easy and inexpensive way to create product demonstration videos using a Mac. The information shared here is based on my experience creating such for our product, Yinkos Hymns Manager.

For screen recording, you can use QuickTime. It comes free of charge on Mac computers. With this software, you can create one of more recordings of your screen and add your voice as you do the demonstration.

If you want to add a splash screen at the beginning of your presentation or anywhere else within it, you can use an app like Gimp (which is free to download), PhotoShop (not free, but you may be able to try it for free) or similar software.

Once you have your images and screen recordings for all aspects of your presentation, you would need  a software to combine them into a single video, including nice transitions between the various videos. You can use iMovie for this. iMovie usually comes built-in on Mac. If it isn’t available you can get it from the App Store free of charge.

 

That’s all for now.

How to execute shell scripts that can throw an error without causing Jenkins build to fail

Posted on: October 1st, 2022 by Olu No Comments

Hi folks,

Usually, if a shell script in a Jankins build throws an error, the build fails automatically. In this post I talk briefly about a technique for running a shell script in your Jenkins CI pipeline without causing the build to fail if the shell script throws an error.
The technique is to use code like the following:

sh("""
set +e
/your/script/that/may-or-may-not-fail.sh
set -e
""")

 

set +e is the default way that bash runs. That is, if a command throws an error, bash displays it, but continues with the script.

set -e forces the script to exit if there’s an error.

That’s all for now. Till next time, happy software development.

How to fix error “my_config.h” file not found in MySQL-python on Mac OS

Posted on: September 30th, 2022 by Olu No Comments

Hi folks,

In this post I will briefly touch on how to fix the error that my_config.h could not be found when trying to install MySQL-python with pip on Mac OS 12.0.x with Python 2.7.x. We assume you installed MySQL via Homebrew.

The error looks like

    _mysql.c:44:10: fatal error: 'my_config.h' file not found
    #include "my_config.h"
             ^~~~~~~~~~~~~
    1 error generated.
    error: command 'clang' failed with exit status 1

 

First, download my_config.h using commands:

cd ~/Downloads
curl https://raw.githubusercontent.com/jacob5412/MySQL-Medium/main/my_config.h -o my_config.h

 

Next, find your MySQL version by running command

mysql --version

Let’s assume your version is 8.0.29.

Make sure the following directory exists /usr/local/Cellar/mysql/8.0.29/include/mysql/.

Then copy the downloaded my_config.h into the directory using command:

cp my_config.h /usr/local/Cellar/mysql/8.0.29/include/mysql/

That’s it. You can now install MySQL-python using command:

pip install MySQL-python

That’s all for now. Till next time, happy software development.

References

Fixing “my_config.h” file not found in MySQL-python (Mac OS). https://medium.com/the-rising-tilde/fixing-my-config-h-file-not-found-in-mysql-python-mac-os-ff97663a8042.

How to be able to switch to another user without entering password

Posted on: September 17th, 2022 by Olu No Comments

Hi folks,

In this post I explain how to switch to another user in Linux without needing to enter a password.

You can do this with the PAM authentication module.

Edit /etc/pam.d/su

vim /etc/pam.d/su

 

Then enter the following lines

auth       [success=ignore default=1] pam_succeed_if.so user = the-username
auth       sufficient   pam_succeed_if.so use_uid user ingroup the-groupname

Save and exit the file.

This will allow you to switch to the-user if you belong to the-group without needing to enter the password for the user using a command like

 su - the-user

 

That’s all for now. Till next time, happy software engineering.

 

References

How to Switch (su) to Another User Account without Password. https://www.tecmint.com/switch-user-account-without-password/

How to use sudo command without password

Posted on: September 17th, 2022 by Olu No Comments

Hi folks,

in this post I discuss how you can use sudo command without password on a Linux system.

Back up your sudoers file

cp /etc/sudoers /etc/sudoers.old

Then, run visudo command

visudo

 

Then enter an entry like

your-user-name ALL=(ALL) NOPASSWD: ALL

 

Then, if visuo uses nano, press Ctrl X to save. Then press enter to finish the save.

Please note: it’s not good security pracrice to let a non-root user run sudo without passwords, so you may want to limit it to some specific commands.

That’s all for now. Till next time, happy software development.

 

References

How to Use sudo Commands Without Password in Linux. https://www.makeuseof.com/using-sudo-without-password/

Some interesting docker commands

Posted on: September 17th, 2022 by Olu No Comments

Hi folks,

Here I will talk about a few interesting commads  to know when working with Docker.

First, what is Docker? According to wikipedia, Docker is a set of platform as a service (PaaS) products that use OS-level virtualization to deliver software in packages called containers. The service has both free and premium tiers. The software that hosts the containers is called Docker Engine. It was first started in 2013 and is developed by Docker, Inc. Docker can package an application and its dependencies in a virtual container that can run on any Linux, Windows, or macOS computer. This enables the application to run in a variety of locations, such as on-premises, in public (see decentralized computing, distributed computing, and cloud computing) or private cloud. When running on Linux, Docker uses the resource isolation features of the Linux kernel (such as cgroups and kernel namespaces) and a union-capable file system (such as OverlayFS) to allow containers to run within a single Linux instance, avoiding the overhead of starting and maintaining virtual machines. Docker on macOS uses a Linux virtual machine to run the containers.

 

How to log in to a Docker artifacts repository

docker login -u someuser -p somepassword the-login-url

 

To build an image, you do

docker build -t name_of_container /path/to/directory-with-dockerfile/

To use a different docker file, you do

docker build -t name_of_container --file=name-of-docker-file /path/to/directory-with-dockerfile/

So, if you’re in the directory with the Dockerfile, just do

docker build -t name_of_container .

 

How to tag your image

docker tag your-image:latest the-repo-url/path/to/your/your-image:latest

 

How to push your image to a repository

docker push the-repo-url/path/to/your/image:latest

 

How to list Docker containers using command

docker ps

 

How to list Docker images using command

docker image ls

 

How to start a container for a particular image, making it run in the background and keeping it running indefinitely (in case it doesn’t already run that way)

docker run -d  tail -f /dev/null

How to log into a container and have a shell (good for debugging)

docker exec -it  /bin/sh

 

How to kill a container

docker kill <container-id>

 

That’s all for now. Till next time, happy software development.

References

Docker (software). < href=”https://en.wikipedia.org/wiki/Docker_(software)”>https://en.wikipedia.org/wiki/Docker_(software),

How to view the list of registered tasks in Celery

Posted on: August 27th, 2022 by Olu No Comments

Hi folks,

In this post I talk about a nice tip that could come in handy while working with Celery. It is how to get all registered Celery tasks. You can use code like:

from celery import current_app
all_task_names = current_app.tasks.keys()
all_tasks = current_app.tasks.values()
foo_task = current_app.tasks['tasks.foo']

all_task_classes = [type(task) for task in current_app.tasks.itervalues()]

The task registry is only populated as the modules containing tasks are imported. If you have not imported all modules you can do like the celery worker does, and import all configured task module sources:

current_app.loader.import_default_modules()

That’s all for now. Till next time, happy software development.

 

References

How to get all tasks and periodic tasks in Celery [duplicate]. https://stackoverflow.com/a/12652113

How to set environment variables on Docker containers via docker-compose file

Posted on: August 18th, 2022 by Olu No Comments

Hi folks,

In this post I briefly go over how to set environment variables in your docker container which is managed by a docker-compose.yaml file.

You can use the env_file flag. Suppose you set environment variables in a file .env, you can read environment variables into a container, service_name as follows:

services:
    service_name:
        container_name: service_name
        ...
        env_file:
          - .env

That’s all for now. Till next time, happy software development.