What are accessors and mutators?

Accessors and mutators are public member functions in a class that exists solely to set or get the value of a class member variable. They are often referred to as getter and setter or set and get functions. I will use the term setter for mutators and getter for accessors for this article.

Many programmers think why we should create getter and setter functions when we can declare public member variables and access them easily using the object of the class. But, there are many benefits from a software engineering point of view to create classes with only private member variables and use getters and setters to manipulate their values.

One of the primary benefits of object oriented design is combining the data and the methods that operate on them into a single component. This is referred to as encapsulation. It allows you to hide the actual implementation of the class from the users of the object. It allows the programmer to make changes in the hidden part of the class design without affecting the users of the objects derived from the class. So if you created some complex class and sold it to a bunch of other developers, you could make changes to your class to improve performance of the hidden part, and they would not have to rewrite their code to use newer versions.

Another crucial benefit of setter functions is that, you can validate the data before set the value. For example, we have created one class for accounting and let’s assume the maximum value for any transaction is 10000. With a public variable, there is no way to stop someone from setting this value to 20000.

Naming conventions

Typically, programmers name getter functions as “get” followed by the name of the variable being accessed and setter functions as “set” followed by the variable name.

Getters and setters in use

The example below adds getters and setters to our Accounting class.

class Accounting
  int transactionLimit;

  // setters
  bool setTransactionLimit(int);

  // getters
  int getTransactionLimit();

// Setter function perform input validation
bool Accounting::setTransactionLimit(int l) {
  if (l < 0 || l > 10000)
    return false;
  else {
    transactionLimit = l;
    return true;

// Simple getter functions. This hide the 
// actual method of storage from object user.  
int Accounting::getTransactionLimit() {
  return transactionLimit;

In above class, the setter functions also validate the input and return true if the value is acceptable or false if not. In that way, the programmer using the class can know if the provided value is valid and write the code to respond in an appropriate manner.

Setup and use a virtual python environment in Ubuntu

With virtualenvwrapper (user-friendly wrappers for the functionality of virtualenv)

Install virtualenv

Install virtualenv with

sudo apt-get install virtualenv

(for Ubuntu 14.04 (trusty) install python-virtualenv)

Install virtualenvwrapper

The reason we are also installing virtualenvwrapper is that it offers nice and simple commands to manage your virtual environments. There are two ways to install virtualenvwrapper:

As Ubuntu package (from Ubuntu 16.04)

Run sudo apt install virtualenvwrapper then run echo "source /usr/share/virtualenvwrapper/virtualenvwrapper.sh" >> ~/.bashrc

Using pip

  1. Install and/or update pip

    Install pip for Python 2 with
    sudo apt-get install python-pip

    or for Python 3
    sudo apt-get install python3-pip

    (if you use Python 3, you may need to use pip3 instead of pip in the rest of this guide).

    Optional (but recommended): 
    Turn on bash autocomplete for pip Run
    pip completion --bash >> ~/.bashrc

    and run 

    source ~/.bashrc 

    to enable.
  2. Install virtualenvwrapper Because we want to avoid sudo pip we install virtualenvwrapper locally (by default under ~/.local) with:
    pip install --user virtualenvwrapper


    echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.bashrc
  3. Source virtualenvwrapper in .bashrc

    echo "source ~/.local/bin/virtualenvwrapper.sh" >> ~/.bashrc

Setup virtualenv and virtualenvwrapper:

First, we export the WORKON_HOME variable which contains the directory in which our virtual environments are to be stored. Let’s make this ~/.virtualenvs

export WORKON_HOME=~/.virtualenvs

now also create this directory


and put this export in our ~/.bashrc file so this variable gets automatically defined

echo "export WORKON_HOME=$WORKON_HOME" >> ~/.bashrc

We can also add some extra tricks like the following, which makes sure that if pip creates an extra virtual environment, it is also placed in our WORKON_HOME directory:

echo "export PIP_VIRTUALENV_BASE=$WORKON_HOME" >> ~/.bashrc

Source ~/.bashrc to load the changes

source ~/.bashrc

Test if it works

Now we create our first virtual environment. The -p argument is optional, it is used to set the Python version to use; it can also be python3 for example.

mkvirtualenv -p python2.7 test

You will see that the environment will be set up, and your prompt now includes the name of your active environment in parentheses. Also if you now run

python -c "import sys; print sys.path"

you should see a lot of /home/user/.virtualenv/... because it now doesn’t use your system site packages.

You can deactivate your environment by running


and if you want to work on it again, simply type

workon test

Finally, if you want to delete your environment, type

rmvirtualenv test


Internet Banking – The Pros And Cons

Over the last decade, millions of people in India have adopted online banking as their preferred method of conducting financial transactions. This way of banking has become quite popular because to the convenience with which one can monitor their account, make payments online, and transfer money between accounts. This is especially true for Indians who are always pressed for time to physically visit the bank.

Online banking also has several non-transactional functions that are very useful. Despite its convenience, however, this way of banking has a few drawbacks. These must be understood to secure your funds and avoid issues in the future.

Key Benefits of Internet Banking

Customers who choose internet banking over traditional branch office visits are eligible for different benefits.


Technology has made it extremely simple for both the bank and the customer to access many services online. Financial planning capabilities, functional budgeting and forecasting tools, loan calculators, investment analysis tools, and equity trading platforms are among the services provided. These are available on the bank’s website as simple applications. Furthermore, most banks offer online tax forms and tax preparation services.


Convinience is the most promising advantage that outweighs any shortcomings of internet banking. Making transactions and payments at the click of a button from the comfort of your own home or office is a convenience that no one wants to give up. Keeping track of your accounts via the internet is becoming faster and more convenient than going to the bank. Even non-transactional services, such as ordering cheque-books online, updating accounts, enquiring about interest rates on various financial products, and so on, are much easier to access via the internet.


In recent years, internet banking has taken a stride forward with the evolution of mobile internet banking. Internet banking provides the consumer with unrestricted mobility, allowing you to conduct financial transactions even when on the move.

Another significant advantage of internet banking is that it is environmentally friendly. It saves paper and reduces pollution by eliminating the need for individuals to travel physically and emitting no emissions.

Better Rates

Banks stand to benefit from the adoption of internet banking because it requires less physical effort on their part. The requirement to expand office space and hire more employees to deal with clients is reduced drastically. The banks benefit financially as a result of this. Also, a part of the savings can be passed on to consumers by higher deposit rates and lower lending rates. To encourage internet banking, most banks provide no-deposit or low-deposit accounts. They also have reduced penalties for taking money out of Fixed Deposits early.

Drawbacks of Internet Banking

However, the current trend of exclusively using the online mode has a few pitfalls. This may prove costly in the long run unless guarded against from the beginning.


Security is the most serious flaw in the internet banking method, and you must avoid it at all costs. Even though your account is protected by a variety of sophisticated encryption technologies, there is always the risk of hacking by criminal forces in the cyber world.

On the internet, hacker attacks, phishing, malware, and other forms of unauthorized behaviour are all too frequent. If you only use the internet for banking, identity theft is another major risk. To combat identity theft, most banks have made it essential to post scanned copies of approved checks online. When creating an account and before using online banking services, you should review the bank’s security rules and precautions.

Online banking is a significant move in the right direction as far as the convenience of the customer as well as the banker is concerned. But it must be applied with adequate precaution to avoid falling prey to unscrupulous elements scouring the internet.


Online transactions take a toll on the relationship with the banker which the traditional visit to the branch office used to foster. Personal relationships with the staff at the banks come in handy when requesting faster loan approvals or a special service which may no longer be available to the public. The manager has many discretionary powers. These include waiving penal interest or service fees. Additionally, personal contact also meant that the banker would provide essential financial advice and insights which are beneficial to the customer.

Complex Transactions

There are many complex transactions which cannot be sorted out unless there is a face to face discussion with the manager. This is not possible through internet banking. Solving specific issues and complaints requires a physical visit to the bank and cannot be achieved through the internet. Online communication is neither clear nor specific enough to help resolve many complex service issues. Certain services such as notarisation and bank signature guarantees cannot be accomplished online.

Redirecting HTTP to HTTPS Using .htaccess File

Chrome and Firefox have started showing insecure warnings to the visitors on websites without SSL certificates. Therefore, using an SSL-encrypted connection for safety, accessibility or PCI compliance reasons is necessary. For SSL-encryption, buy SSL certificates and install them to your websites.

But, installing SSL certificates will not show secure, you should also redirect all your HTTP traffic to HTTPS. In order to force your web traffic to use HTTPS, edit the codes in the .htaccess file. Before we move onto redirecting HTTP to HTTPS, here’s how you can edit .htaccess file. If you already know skip to Redirection steps.

Editing .htaccess File

There are instructions/directives in the .htaccess file that tell the server how to act in certain scenarios and directly affects how your website functions. Common directives in .htaccess file:

  • Redirects
  • Rewriting URLs

Ways to edit an .htaccess file:

  1. Edit the file on your computer and upload it to the server using FTP.
  2. Use “Edit” mode in FTP program that allows you to edit a file remotely.
  3. Use a text editor and SSH to edit the file.
  4. Use the File Manager in cPanel to edit the file.

Editing .htaccess in cPanel File Manager

Note: Backup your website in case something goes wrong.

  1. Login to cPanel
  2. Files > File Manager > Document Root for:
  3. Now select the domain name you want to access
  4. Check “Show Hidden Files (dotfiles)”
  5. Click “Go”
  6. After a new tab or window opens, look for the .htaccess file.
  7. Right click on the .htaccess file and click on “Code Edit” on the menu.
  8. A dialogue box may pop up asking about encoding. Click “Edit” button to continue.
  9. Edit the file
  10. “Save Changes” when done.
  11. Test your website to make sure it is done correctly. In case, there is an error, restore to the previous version and try again.
  12. Once you are done, click “Close” to close the window.

Redirecting HTTP to HTTPS

1. Redirect All Web Traffic

If you have existing code in your .htaccess, add the following:

RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R,L]

2. Redirect Only a Specific Domain

For redirecting a specific domain to use HTTPS, add the following:

RewriteEngine On RewriteCond %{HTTP_HOST} ^yourdomain\.com [NC]RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R,L]

3. Redirect Only a Specific Folder

Redirecting to HTTPS on a specific folder, add the following:

RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteCond %{REQUEST_URI} folder RewriteRule ^(.*)$ https://www.yourdomain.com/folder/$1 [R,L]

Note: Replace “yourdomain” with your actual domain name wherever required. Also, in case of the folder, replace /folder with the actual folder name.

Think it was useful? Share this article to help them come on HTTPS

Best alternative to set a PostgreSQL schema using PHP PDO

To set the PostgreSQL DB connection, schema parameter is not to be included

$Conn = new PDO('pgsql:host=localhost;port=5432;dbname=db', 'user', 'pass');
$result = $Conn->exec('SET search_path TO accountschema');
if ( ! $result) {
die('Failed to set schema: ' . $Conn->errorMsg());

Is this a good practice? Is there a better way to do this?

In order to specify the default schema you should set the search_path instead.

$Conn->exec('SET search_path TO accountschema');

You can also set the default search_path per database user and in that case the above statement becomes redundant.

ALTER USER user SET search_path TO accountschema;