Downgrade FreetTDS on Mac to Access Sybase Anywhere 10 using Homebrew

There’s a bug in FreeTDS 4.2 that prevents macs from connecting to older Sybase Anywhere databases.

Brew doesn’t naturally have a downgrade version but here’s a way around it

Following the directions here:

  1. edit the ~/.zshrc shell file. (Assuming you’re using zsh as your shell)
  2. add a line


3. Tap the homebrew core (use force because it’s unneeded for most activities)

brew tap homebrew/core -f

4. Edit the FreeTDS script

brew edit freetds

5. replace it all with the 1.3.x version based on the homebrew forumla commit history and github.

6. Save the file

7. install the new script

brew install freetds

Auto Restart MySQL on Fail on Bitnami WordPress

On one of my WordPress sites on a Bitnami image on Lightsail, my MySql instance would fail often. This script restarts it when it goes down.

vim /opt/bitnami/


# Check if MySQL is running
if sudo /opt/bitnami/ status mysql != "mysql already runn

echo -e "MySQL Service was down. Restarting now...\n"
sudo /opt/bitnami/ restart mysql
echo -e "MySQL Service is running already. Nothing to do her
sudo crontab -e

* * * * /home/bitnami/ > /dev/null 2>&1

Deploy a Flask App to Lightsail or other VS

sudo apt update 
sudo apt upgrade 
sudo apt-get -y install python3-pip 

If apt can’t find the module add the repository:

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get -y install python3-pip 

Install pipenv

pip3 install pipenv

Clone your repository

git clone
cd project

Install the environment

pipenv install

I had problems with this and had to uninstall the apt vetrsion of virtualenv

sudo apt remove python3-virtualenv

Look for the green line under Creating virtual environment

Virtualenv location: /home/ubuntu/.local/share/virtualenvs/myproject-qDDIoa4O

Make a note of that location

Configure Gunicorn

pipenv shell
pip install gunicorn
gunicorn --bind 'myproject:create_app()'

in Azure and AWS port 5000 is blocked but you can create an ssh tunnel to test to make sure your app is working:

#Local Terminal
ssh -N -L 5000: <server ip>

in a browser go to and your app should pop up.

ctrl-c to terminate the gunicorn process


to leave the virtual environment

sudo vim  /etc/systemd/system/myproject.service 

Description=Gunicorn instance to serve myproject

ExecStart=/home/ubuntu/.local/share/virtualenvs/myproject-8Mk7vntI/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 myproject:create_app()


Start and enable service:

sudo systemctl start myproject
sudo systemctl enable myproject

Configure Nginx

If nginx isn’t installed

sudo apt install nginx
sudo vim /etc/nginx/sites-available/myproject

i to insert

server {
    listen 80;
    server_name your_domain www.your_domain;

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/myproject/myproject.sock;

esc then :wq to write and quit

Link your site in available to sites-enabled

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled

run test

sudo nginx -t

Restart nginx

sudo systemctl restart nginx

Test from your browser that it’s working


ensure snap is installed

sudo snap install core; sudo snap refresh core

use snap to install certbot

sudo snap install --classic certbot

link the certbot to bin

sudo ln -s /snap/bin/certbot /usr/bin/certbot

Run certbot

sudo certbot --nginx

follow instructions and you’re set.

Running into Problems

One way to diagnose potential problems is to view the terminal journal of the service

journalctl -u <app name> -n 100

Using IF ELSE in R


x <- 5
if (x == 5){ 
   print("x = 5")
#response: "x = 5"

if (x == 6){
   print("x = 5")
#no response

If Else

if (x == 5){
   print("x = 5")
   print("x doesn't equal 5")

#response "x = 5"

if (x == 6){
  print("x = 6")

  print("x doesn't equal 6")
#response: "x doesn't equal 6"

To make a IF NOT statement add the ! function in the mix

x <- 5
if (!(x == 5)){ 
   print("x does not = 5")
#no response

if (!(x == 6)){ 
   print("x does not = 6")
#response: "x does not = 6"

For numbers you can do the same thing with the not equal sign

x <- 5
if (x != 6){ 
   print("x does not = 6")
#return "x does not = 6"

Make a chain of if statements with if, else if statements. (like python’s elif)

x <- 5
if (x < 5){ 
   print("x is less than 5")
   }else if(x > 5){
     print("x is more than 5")
   }else if(x == 5){
     print ("x is equal to 5")
   }else {
     print ("x is not a number")
#return: "x is equal to 5"

Also look at elseif()

ifelse returns a value with the same shape as test which is filled with elements selected from either yes or no depending on whether the element of test is TRUE or FALSE.

x <- 5
print(ifelse(x==5, 'x is equal to 5', NA))
# "x is equal to 5"

print(ifelse(x==6, 'x is equal to 5', 'x is not equal to 5'))
# "x is not equal to 5"

ifelse(x == 5, print('x is equal to 5'), print('x is not equal to 5'))
# "x is equal to 5"
# "x is equal to 5"

y <- 5
ifelse(y == 5, print('y is equal to 5'), print('y is not equal to 5'))
# "y is not equal to 5"
# "y is not equal to 5"

NOTE: ifelse() strips attributes

For Tidyverse look at if_else()