Please stay healthy!

Remote Lectures

All Meetings

Schedule here:

High Quality Work!

Self-Motivation!

Despite the chaos:

Revised Project Proposals

Feedback this week!

Lecture 17

Hands-on Day! (C++ Functions and Classes)

// part 3
class SingletonConverter
{
   public:
       static SingletonConverter* getInstance( ) {
       
       	    static SingletonConverter* instance;
            return instance;
       
       };
       ~SingletonConverter( );
        float fromFtoC(float temp) {
            return ((temp-32)/1.8);
        };
   private:
       SingletonConverter( );
};
  //... in main
  SingletonConverter *c = SingletonConverter::getInstance()
  float convertedTemp = c->fromFtC(temp);
  //...

Lazy Loading!

But does it work?

#include <iostream>

//
// Singleton Converter w/ Lazy Loading
//
class SingletonConverter
{
   public:
       static SingletonConverter* getInstance( ) {
            static SingletonConverter* instance;
            return instance;
       };
       ~SingletonConverter( );
        float fromFtoC(float temp) {
            return ((temp-32)/1.8);
        };
        
   private:
       SingletonConverter( );
};

int main()
{

    SingletonConverter* i1 = SingletonConverter::getInstance();
    SingletonConverter* i2 = SingletonConverter::getInstance();
    SingletonConverter* i3 = SingletonConverter::getInstance();
    
    if (i1 == i2) {
        std::cout << "yes";
    }
    
    if (i1 == i3) {
        std::cout << "yes";
    }

}

Pointer arithmetic!

int carton[10];
int carton[10] = { };
int carton[10] = { 1, 3, 7 };

Array

#include <vector>

// ...

std::vector<float> allTemps;

std::cout << allTemps.size();

while(1) {

	std::string temp;
	std::cout << "Please enter a temperature or x to stop.";
	std::cin >> temp;

	if (temp == "x") {
		break;
	}

	allTemps.push_back( std::stof(temp) );

}

Vector

Dynamic containers..

Templates!

Developer

IT Operations

Software Developer

SysAdmins / IT Ops

should know a little bit of both!

Deployment

Delivery to Client or Customer

Make Software Accessible

Containers

Virtual Machines

Docker

All other platforms..

$ docker run --detach httpd
$ docker ps
$ docker inspect ID
$ docker pause ID
$ docker unpause ID
$ docker kill ID
$ docker run -it python:2.7

We can never know it all.

But we can be curious.

alias docker=podman

MicroVMs for AWS

No daemon required

# A basic apache server. To use either add or bind mount content under /var/www
FROM ubuntu:12.04

MAINTAINER Kimbro Staken version: 0.1

RUN apt-get update && apt-get install -y apache2 && apt-get clean && rm -rf /var/lib/apt/lists/*

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80

CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

Dockerfile

Base Docker

Author and version

Install Commands

Environment Variables

Open Ports

Executable Commands

This command can be overwritten when starting the container!

ENTRYPOINT ["/bin/bash"]

Fixed Command!

We will now create our own

Dockerfile

to specify a container

that downloads C++ code from Github,

compiles it,

and then runs it!

We will deploy the container using

This time just watch!

We will do it later together..

1. Create                   repository and clone it.

2. Add C++ code.

3. Create                  Dockerfile.

4. Build and tag Docker container.

5. Push container to                        !

6. Modify C++ code.

7. And see what happens...

#include <iostream>
#include <vector>


class SingletonConverter
{
   public:
       static SingletonConverter* getInstance( ) {
            static SingletonConverter* instance;
            return instance;
       
       };
       ~SingletonConverter( );
        float fromFtoC(float temp) {
            return ((temp-32)/1.8);
        };
   private:
       SingletonConverter( );
       
};

int main()
{

  std::vector<float> allTemps;

  while(1) {

      std::string temp;
      std::cout << "Please enter a temperature or x to stop entering temperatures.\n";
      std::cin >> temp;
      
      if (temp == "x") {
          break;
      }
      
      std::cout << "Stored " << temp << "!\n";

      allTemps.push_back(std::stof(temp));
      
  }

  std::cout << allTemps.size() << " temperatures stored!\n";

  float averageTemp = 0;
  for (int i=0; i<allTemps.size(); i++) {
    averageTemp += allTemps[i];
  }

  averageTemp /= allTemps.size();

  std::cout << "The average temperature is: " << averageTemp << "\n";

  std::cout << "Converted to Celsius, this temperature is " << SingletonConverter::getInstance()->fromFtoC(averageTemp) << "!\n";
  
}

converter.cc

FROM ubuntu:18.04

MAINTAINER Daniel Haehn version: 0.1


ADD converter.cc converter.cc

RUN apt-get update
RUN apt-get install -y g++
RUN g++ -o converter converter.cc

ENTRYPOINT ["./converter"]

Dockerfile

Docker commands we used today:

# build the container from the Dockerfile
docker build -t TAG .

# run the container interactively
docker run -it TAG

# login to DockerHub
docker login

# deploy the container
docker push TAG:latest

Container Orchestration

Run many containers on a cluster

Scalability

Docker Swarm

Kubernetes

easy

complex