Category: Software development

  • API Gateway

    Reading Time: < 1 minute

    Kong

    Kong is a cloud-native, fast, scalable, and distributed Microservice Abstraction Layer (also known as an API Gateway or API Middleware). Made available as an open-source project in 2015, its core values are high performance and extensibility.

    Actively maintained, Kong is widely used in production at companies ranging from startups to Global 5000 as well as government organizations.

    CA Layer 7 / API Gateway: was owned by CA Technology, formerly Computer Associates. Sold it to Broadcom the chip company in recent years. It used slightly older technology as Kong, apigee and Okta.

    documentation:

    architecture:

  • Spring batch, Spring Scheduler, PCF

    Reading Time: < 1 minute

    Was experimenting running scheduled job on PCF. One natural choice is PCF scheduler, which comes with the Pivotal Web Services (PAAS). Googled around and found this example on DZone. The spring batch code is here. There was a small typo in the manifest.yaml,

    path: build/libs/payment-processing-spring-batch-0.0.1-SNAPSHOT.jar
    Note the snapshot.jar file name does not match what’s specified in the build.gradle file.

    The correct file name is

    spring-batch-job-0.0.1-SNAPSHOT.jar

    The rest of the manifest.yml looks good, in fact I used the following options for my spring scheduler app manifest.

    no-hostname: true
    no-route: true
    health-check-type: none

    But PCF scheduler is not available in our environment. The Spring Scheduler is used instead. I followed this Get Started Guide from Spring. In my case I need to use Cron Expression, here is the code sample and here is the guide to cron expression.

    Last but not least, in my case I need to send out email notification for the cron job conditionally. I used the java email code sample here.

    ======

    Some PCF references

    pivotal web serivce

    cf login -a https://api.run.pivotal.io/

    https://console.run.pivotal.io/tools

    https://docs.pivotal.io/pcf-dev/index.html

    cf login -a api.local.pcfdev.io --skip-ssl-validation
    

    https://tanzu.vmware.com/tutorials/getting-started/local/deploy-the-sample-app

  • How to generate a Lets encrypt SSL cert

    Reading Time: < 1 minute

    I followed the instruction here https://certbot.eff.org to get a free SSL cert for my website: (pretty cool, huh 🙂 (found it here)

    To actually do it, I just go to the website: Scroll down a little, select the software and the system my website is running on, and it will generate all the command-lines for me, here is my link 🙂

    There is one small glitch after the installation of ssl cert: that is in the wordpress, I need to set the home page from http to https.

    Also, an older post Move WordPress from Share Hosting to DigitalOcean

    Yet another post related to this. Btw, I noticed the ssl cert renews automatically.

    Earlier: I summarized it on twitter.

  • Couple agile tools

    Reading Time: < 1 minute

    Point Poker: free (accepts donation). A nice pointing tool, click start session, for collaborators: put in name, and join the session.

    Fun Retro: there are free and non-free choices. The free ones are public. It’s a bit like Trello. For that matter, if someone likes to keep it private, I think Trello is a good alternative: just put in swimming lanes such as liked, learned, lacked, longed for and action items

    scrumpoker-online

  • Job search advice amid COVID-19 pandemic

    Reading Time: 5 minutes

    We are at unprecedented times, in terms of the pandemic, and the economy aftermath. The IT software dev job market is not impacted as much as some of the hard hit ones such as. travel and leisure, but nobody is also insulated when there is a typhoon. For example, locally here in St. Louis, Enterprise rent a car, the largest car rental company in the US and in the world, has laid off more than 2,000 people, IT division included. I recall about 10 years ago I wrote a post about job search, and I like to update it, amid the time change and this specific pandemic change.

    Some obvious things

    No onsite interviews, remote or video interview only these days. Zoom is the most popular choice, and for developers there are some white-boarding online software. Realtime white boarding is actually quite challenging, from my personal experience, on both ends. It also depends on the friendliness of the interviewer, some interviewers like to be “above the interviewee”, they give the problem, did not like to talk or give hints, and expect a quick answer right away. On the other hand, there are some other interviewers who are more open and friendly, and sometimes they will throw a dog bone to rescue. As interviewer I always try to be the former, as I personally have been in the receiving end of “bad interviewers”, and don’t like the experience. Once at an onsite interview (long time ago), a guy who maybe quite sharp, made this comment: it sounds like you did much better than the other guys came in earlier, they really don’t know what they were talking about. And at least you put up this and that, blah blah blah… is this a compliment? I guess my English is already good enough to appreciate the underlying tone there. On the other hand, I can always appreciate good / friendly interviewers, once (not in coding or white boarding) during an onsite interview, the interviewer saw my schedule and saw that I was stuck in the little room all day, he offered let’s talk a walk, and talk in the company cafeteria. It was year early / winter 2005 as I recall, in middle of New Jersey.

    Websites

    Below two the most popular websites now.

    Indeed: note Indeed.com is No. 1 in terms of the number of jobs. I found my last job and current job via Indeed.com. This is mind boggling when you think about it. I am not sure whether it exists in 2010. It’a an aggregator website. A bit like Google for information search.

    LinkedIn: linkedIn became more meaningful too, I got a job offer in my last round job search and the lead is from LinkedIn. Many companies now post jobs at LinkedIn. Besides the number of jobs, we all know LinkedIn is the top 1 place that recruiters congregate. And as I built profile at LinkedIn, I also received more unsolicited messages or requests from mostly recruiters or website SEO people. Most recently I decided to be more discreet on accepting recruiters request. Most recruiters are young enthusiastic people and I bet they send out things blindly. This brings to another point.

    Also, stackoverflow has a job portal, and some of the jobs are looking good too.

    Recruiters

    I think recruiters are still useful, if we are more discreet and we ask what we want. I have some recruiters friends from both ends as well: job search, or candidate technical screen. And I keep in touch with them from time to time, as a part of relationship building. Sometimes this could be a simple “hi” when the recruiter is in the hallway or in the office. I do understand, on linkedIn, or via database, sometime some younger recruiters will cold call (the reason I pick up the reason was probably the call from number is an agency I know). And we need to keep things in perspective that’s a part of their job and paycheck too. Also keep in mind we live in a small world especially in the St. Louis IT job market, and sometimes the table can turn quickly. I recall seeing a former coworker at two separate places (and I remember he was not being nice to me 🙂 I don’t have grudges against him, but I just know I probably won’t use him as reference, and vice versa.

    Code Test

    Not white-boarding or pairing either remote or on spot, but something like hacker rank, or filtered.ai. Those are okay as they are usually not overly difficult, they are fair test in other words. There is some random ones, which is usually some problem a tech lead, an architect came up with. And some of those can be nasty. Once I spent 24 hours on a problem, and could not solve it. I solved it a day later. Also noted the behavior type questions on filtered.ai or company recruiting website. Those are easy ones to score points, so don’t waste the opportunities. Usually they let you re-do if the first recording does not look good. The coding test, if done properly, you can run the unit test on the editor and you know it’s failed or passed.

    (Update 05-19-2020) There are a lot of online code playground or white boarding tools for code testing on the spot. Those are mostly collaboration tools, with some syntax highlighting. But it’s usually not as powerful as the hacker rank or filterer.ai as the latter ones usually have the build-tests, so basically you will know your code is good enough or not by passing those tests (tests are usually hidden though). Tools such as code labstack (Update: 03-01-2023 no longer available, here is alternatives programiz, and jdoodle) are still pretty useful. One thing I am not sure is how they manage the sessions. From interviewer (hiring side) point of view, it maybe helpful to give a heads up if a quick code test is expected so that the candidate is aware. I have seen candidate just bail out without even trying. I have been on the receiving end of this kind of test as well. Again the interviewers friendliness (more precisely helpfulness, do they just want to see the candidate fail, or they want to be as human as possible) varies. (sample java code question here). Also JavaScript code playground such as codepen.io (more links for codepen clock 1 mine and clock 2 Dan Abramov) and jsbin.com .

    (10-31-2022) Found another website codio (may not be free), today I happened to use it for Python coding as I was helping a high school student on AP CS course (STEM focused high school in LA area, it seems they require AP CS as a course).

    My javascript code samples.

    Last but not least, problem solving questions. One example: Suppose we have 8 balls: one is heavier than the other 7, the other 7 are identical. Now we have one balance (or scale), and we can put balls on two sides to weigh and compare. Use as few attempts as possible, to find the heavy ball? A follow up question is, if we have 2 or 3 attempts, how many balls can we handle (again one heavy ball with many identical lighter balls). 

    About me. Also you may read about my other post on related topic.

    Also, please note this guide on job search. I haven’t read the whole thing but it appears good. Much longer than this blog. Last but not least, this post is a good read too (Helen Anderson @helenanders26).

    The Science Behind Making Software Engineering Interviews Truly Predictive of Job Performance by Geoff Roberts.

  • GCP Cloud SQL hibernate issue

    Reading Time: < 1 minute

    It complains the table does not exist when in the data.sql we were trying to insert some data. Turns out the table did exist but the default table name was lower case, while we were using Upper case both in the data.sql and the java hibernate entity. The fix is to add one line in the application.properties file. Note this is a spring boot app. Also note the data.sql was used to load initial data in spring boot.

    spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

    I found out about it as I first work around the issue by doing something like shown in this article. But I was thinking this was not right. I was able to find out once I connect to the cloud sql db via proxy. Also refer to this stackoverflow discussion. 

    DROP TABLE IF EXISTS employee;
    
    CREATE TABLE employee (
      empId VARCHAR(10) NOT NULL,
      empName VARCHAR(100) NOT NULL
    );
    

    Also Spring Data

    Spring data REST reference: this is by default will be shown in the root of the website.

    the key seems to be adding this in pom:

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency>

    Last but not least, to disable the end points or to show the available ends points for spring boot app, we can use actuator.

    management.endpoints.web.exposure.include=mappings

    We can show the end points at:

    /actuator/mappings

  • Java thread and interview questions

    Reading Time: 2 minutes(Update 2026-04-11) Refer to this coding example at GitHub.

    (Update 3 10-28-2020) Link to JoelOnSoftware

    (Update 2  10-27-2020)

    Java
    1) What is the difference between and interface and an abstract class(pre Java 8)?
    2) Name a design pattern you have used (or would like to use)?
    3) How would you implement the Singleton Design Pattern?
    4) Since Java 8, what is the preferred way to avoid an NPE?
    5) What goes on the heap and what goes on the stack? What can you tell me about the Garbage Collector in java? Can you have memory leaks in java?

    API development
    1) Difference between SOAP and REST
    2) Difference between REST and RESTful
    3) What are the best practices that are to be followed while designing RESTful web services?
    4) Some of the methods (verbs) in REST: 1) GET, POST, PUT, DELETE; 2) Is Post idempotent?
    5) Describe some of the API management tools you used, for example, Swagger, Apigee etc?

    Microservices Cloud environment (Azure, AWS or GCP)
    1) What are some features of a Microservices architecture?
    2) What is 12 factor application? List some of the factors and explain them.
    3) What cloud providers did you use? What are their strength and weakness? Or some pain points?
    4) What are some of the frameworks and tools you used for micro-services development?
    5) How do you monitor the apps? Do you have any recommendations or best practice for logging and tracing?

    Some devops and automation experience as well (i.e. Docker, Kubernetes)
    1) Where did you deploy the micro-services you or your team developed? Or what is your deployment environment? Is it IAAS (infrastructure as a service), or PAAS (platform as a service)?
    2) How do you deploy apps to the dev, test and production environment? Did you use any CI / CD tools?
    3) What are the main steps in a pipeline build / deployment?
    4) Have you done any automated testing / validation?
    5) For cloud infrastructure build out, do you use the console (UI), command line or some kind of source code (yaml etc) as well as tools such as Terraform?

    (Update 09-01-2020) Java 8

    (baeldung) Introduction to Java 8 Streams

    Lambda Expressions and Functional Interfaces: Tips and Best Practices

    New Features in Java 8

    GitHub (eugenp) :

    Core Java 8

    Core Java 8 (part 2)

    Also:

    Java 8 Features with Examples

    Prominent Java 8 Features With Code Examples

    (Update 05-19-2020) There are a lot of online code playground or white boarding tools for code testing on the spot.

    (Original ) Hibernate map one to many (Vlad Mihalcea)

    A collection of the posts I saw recently.

    Java World
    Introduction to Java threads (need to check the link?)

    Java 101: Understanding Java threads, Part 1: Introducing threads and runnables

    Others
    Java Callable Future Example

    Java – Multithreading

    Java Thread Tutorial: Creating Threads and Multithreading in Java

    Vaadin chat example
    It needs multi session (thread) support when we need to use tabs to chat back and forth. The app description is here.

    The annotation to support this: @VaadinSessionScope

    Java interview questions
    Placeholder: I still need to clean up the list below (to incorporate my recent interview experience).

    aop
    dependency injection
    refactor
    agile
    test driven
    code review (what to look)
    static vs. final
    interface
    spring
    hibernate

    java generics

    tree set vs hash set

    tree map vs linked hash map
    https://dzone.com/articles/hashmap-vs-treemap-vs

    .equals() vs ==
    https://www.journaldev.com/18302/java-string-equals

    Elasticsearch 

    Digitalocean installation

    Get started

  • Javascript jasmine node.js and Alexa

    Reading Time: 2 minutes

    (Update 11-23-2023) It’s funny, I found out when I changed the mac input mode from English to Chinese (Pin’yin), and it messed up all the special symbols in the javscript code, double quotes, semi colon, bracket etc. It’s probably due to the difference between Ascii and Unicode.

    (Update 10-14-2023) I messed up the folder name AWS lambda – the fix is to correct the folder name. I typed something like “oralce” instead of “oracle” for the folder name. Took me a while to find out. The error message says it could not find the index.mjs file which is usually the entry point for node.js app (including lambda function on AWS).

    {
      "errorType": "Runtime.ImportModuleError",
      "errorMessage": "Error: Cannot find module 'index'\nRequire stack:\n- /var/runtime/index.mjs",
      "stack": [
        "Runtime.ImportModuleError: Error: Cannot find module 'index'",
        "Require stack:",
        "- /var/runtime/index.mjs",
        "    at _loadUserApp (file:///var/runtime/index.mjs:997:17)",
        "    at async Object.load (file:///var/runtime/index.mjs:1032:21)",
        "    at async start (file:///var/runtime/index.mjs:1195:23)",
        "    at async file:///var/runtime/index.mjs:1201:1"
      ]
    }

    I encountered some other error too, and some of which includes traceback to my own code, which gives hints on what went wrong. Another tricky one is whether to include { in the import statement (When should I use curly braces for ES6 import?).

    Another error from Oracle DB is it didn’t like the SQL with single quote, and at the same time the sql itself has a condition of =’1’. Put the slash before the single quote to escape the single quote before 1, in cloud 9, and cloud 9 automatically add double quote around the sql, and it seems solve the issue.

    {
      "errorType": "Runtime.UserCodeSyntaxError",
      "errorMessage": "SyntaxError: Unexpected number",
      "stack": [
        "Runtime.UserCodeSyntaxError: SyntaxError: Unexpected number",
        "    at _loadUserApp (file:///var/runtime/index.mjs:1058:17)",
        "    at async Object.load (file:///var/runtime/index.mjs:1093:21)",
        "    at async start (file:///var/runtime/index.mjs:1256:23)",
        "    at async file:///var/runtime/index.mjs:1262:1"
      ]
    }

    (Update 12-22-2022)

    The Modern JavaScript Tutorial

    w3school

    (Original 02-27-2019 below)

    Alexa

    Alexa Account Linking: 5 Steps to Seamlessly Link Your Alexa Skill to User Systems That Require Authentication (Sebastien Stormacq, done)

    User Account Linking in Alexa with ASP.NET Web API (Heather Downing, Okta)

    Linking Your Alexa Skill Securely with Okta (Jefferson Haw, Okta)

    Account Linking : Amazon Alexa and ForgeRock OpenAM using OAuth2 Authorization grant (karthik, Medium)

    How to set up Account Linking for Alexa with Auth0 and Jovo (Kaan Kilic, Jovo)

    Build an Alexa Skill in Node.js with Jovo (Jan Konig, Jovo, done) : If a user responds with a name, the MyNameIsIntent is triggered. The code is shown below in index.js

    Webhook.listen(port, () => {
    console.info(`Local server listening on port ${port}.`);
    });

    Webhook.post(‘/webhook’, async (req, res) => {
    await app.handle(new ExpressJS(req, res));
    });

    also, how to test the code in AWS Lamda…Click “Test” right next to the “Save” button and select “Alexa Start Session” as the event template…

    Interaction-Based Authentication for Alexa Skills with Auth0 (Joao Angelo, Auth0)

    Developing Alexa Skills Locally with Node.js: Account Linking Using OAuth (Juan Pablo Claude)

    The Alexa Skills Kit SDK for Node.js helps you get a skill up and running quickly, letting you focus on skill logic instead of boilerplate code.

    JavaScript
    Node.js based testing (npm test)

    jasmine official website

    commonly used commands:
    npm install –save-dev jasmine
    npm init
    npm test

    Sample project can be seen here: (please contact me if the repository is private)

    Also from Okta dev blogs:
    Learn JavaScript in 2019 (David Neal)

    Add Authentication to Your Vanilla JavaScript App in 20 Minutes (work in progress):

    With ES6, async/await brings you added control over asynchronous programming by leveraging promises but in a synchronous way. You can use async/await to make your code cleaner while maintaining non-blocking operations. github

    Note this post has some examples that uses angular as well.

  • Spring, Spring Boot, React and OAuth

    Reading Time: 4 minutesBaeldung : A Comparison Between Spring and Spring Boot

    Tutorials from Okta
    Working in progress

    Identity, Claims, Tokens – An OpenID Connect Primer, Part 1 of 3 (Micah Silverman, below 2 and 3, are also by Micah)

    OIDC in Action – An OpenID Connect Primer, Part 2 of 3

    What’s in a Token? – An OpenID Connect Primer, Part 3 of 3

    Secure Service-to-Service Spring Microservices with HTTPS and OAuth 2.0 (Matt Raible) : some errors due to java certs

    Completed

    Build a Basic App with Spring Boot and JPA using PostgreSQL (Andrew Hughes): this example uses Springboot, postgres and Okta single page web app, groups / users and authorization server (default). It goes through a basic springboot app using postgres, before adding the auth (token) from okta. It’s a very good example of how we secure an end point as well as authenticating via user group (admin vs normal / everyday user). The OIDC debugger tool created by former Okta engineer Nate Barbettini is very slick too.

    Secure a Spring Boot REST API with JSON Web Token Plus references to Angular integration (Nouhoun Y. Diarra) : a small typo: the health check URL should be http://localhost:8080/actuator/healthTutorial:

    Develop Apps with Secure WebSockets in Java (Jimena Garbarino): 

    Secure Reactive Microservices with Spring Cloud Gateway (Matt Raible) link to my github

    A Quick Guide to Spring Boot Login Options (Andrew Hughes)

    Easy Single Sign-On with Spring Boot and OAuth 2.0 (Micah Silverman): note the need for JDK 11 (I used Amazon JDK 11), and please remove the double quotes around claim name and re-type (copy paste does not work well from blog post to okta dev console)

    Build Spring Microservices and Dockerize Them for Production by Raphael do Vale. As I was finishing up the regular part (the exercise before docker), the service discovery reminded me of Hashicorp Consul tutorial I followed along a while ago. Note this tutorial used Netflix Eureka which is a bit more cool than pure command lines from Consul / Vagrant 🙂 Note this for Docker (quote the tutorial): You must store the file school-ui.properties in the same folder specified on the volume mapping (in the example above, the relative folder ./config-data). This is also my first complete tutorial on Docker container running java web apps (on my local MacBook and Windows 10). In the past I followed tutorial that runs Chef as well as Tomcat / Jenkins on docker (GCP).

    Build a Secure Notes Application with Kotlin, TypeScript, and Okta by Matt Raible. Note the last part also talked about how to push code to Pivotal Cloud Foundry and deploy the apps there. This is interesting as I have done the PCF 15 minutes tutorial in the past (and recently).

    Bootiful Development with Spring Boot and React (Matt Raible at Okta): I followed this tutorial until the point that I get the basic beer list (in other words, I made both the basics of Spring Boot and React work). This is my very first venture into React, and I had to install “yarn” as well using brew install. In the process I had to upgrade the Xcode via command line.

    Also: Use React and Spring Boot to Build a Simple CRUD App (Matt Raible at Okta): I made small mistake when initiating the project with Spring website: I copied / pasted the dependency frameworks, which seems does not have any effect when the pom.xml was created. So I added the dependencies manually.

    			org.springframework.boot
    			spring-boot-starter-web
    		
    		
    			org.projectlombok
    			lombok
    			provided
    		
    		
    			com.h2database
    			h2
    			runtime
    		
    

    Also in my Eclipse, I need to install Lombok manually by following instruction here. Note Matt did mentioned the IDE cannot recognize some of the Lombok things if there is no plugin. In the past I used to install Plugin via the menu inside Eclipse. I noticed “Whitelabel error” when I was hitting the end points: http://localhost:8080/api/groups/ (this is working as expected actually, before I add any JUG meeting to the list, as I don’t have access to the default list).

    Last but not least: I need to make a small adjustment in GroupEdit.js sample code

    'X-XSRF-TOKEN': this.state.csrfToken, (it was just csrfToken and Yarn did not like it)
    

    (more…)

  • Docker – second take

    Reading Time: 3 minutes(Update 08-26-2020) Technically 3rd take. I was following along with the Google Cloud Storage ClamAV tutorial, and had an issue of not being able to connect to port 3310 on GCP. (Update 08-29-2020) It was solved. Some tips:

    ====

    1) There were some typos: such as the directory related to the git project, as well as environment variable for the bucket (in couple places);

    2) Need to run the below command before deploy: Assign bucket permissions before “gcloud app deploy” (as in section Create the malware-scanner service: step 5)

    3) https://github.com/GoogleCloudPlatform/docker-clamav-malware-scanner/issues/1 (move the local variable out of the large bracket {})

    4) https://github.com/GoogleCloudPlatform/docker-clamav-malware-scanner/pull/4 (the solution is to increase the memory footprint in the app.yaml file)

    ====

    Last but not least, one does not have to delete the project, the quick way to save the money is just to turn off the app via app engine => settings => disable application.

    I also looked around and found another ClamAV tutorial using Java. The second one worked for me locally. I was also able to put an image to the docker hub (using the code from the spring boot docker tutorial). I was able to push the docker image to pcf too. The one thing remaining is I had a 502 gateway issue when I test the end point (local was working fine; postman tip here). Actually later I was be able to make the GCP example (the node js example) work locally too. Now the next step is to make them work in a PCF or a GCP cloud environment (not just local).

    (Update 02-04-2019) What Is Container Orchestration? (by Isaac Eldridge at New Relic).

    I also followed along the Exploring Docker [1] – Getting Started by Traversy Media. I did make the node.js and MongoDB work on my local MacBook, but I could not make them working on my DigitalOcean droplet due to mismatch of Docker versions of “Docker Compose”, the root cause was the Ubuntu on my Droplet was a a bit old (14.0.4). I need to upgrade it to make the versions compatible.

    Some more links for the Traversy Media docker-node-mongo example. Youtube video here. Github repo here.

    Two more (TBD, or for references): Dockerize a Node.js app connected to MongoDb

    Containerizing a Node.js Application for Development With Docker Compose

    (Update 02-13-2018) So I found out today I have AWS bill of

    $2.62 (mostly due to EC2 instances) today. This is due to the fact that I did fire up the VM as well as the docker swarm instances (total 9? maybe due to I ran the deploy script multiple times?) Anyway I fired up the instance last night, this evening I looked at the “instances” and looked at the bill, I know what happened. I still did not make the connection from outside to ec2 working though. For the time being, I “terminated” the docker swarm, and stopped AWS VM.

    (Update 02-12-2018) I am also following the tutorial at Docker’s official website. I am at step 6 here. And right now, I am stuck in connecting to the AWS vm (was following this Docker guide): step 6 “docker node ls”. I did follow the steps to create docker credentials for AWS.

    error during connect: Get https://192.168.99.102:32768/v1.35/nodes: http: server gave HTTP response to HTTPS client

    Note this IP address looks like the local default machine: one thing I am not quite sure is how the local connects AWS

    (Original 01-31-2018) I installed docker on my mac a while ago and did a simple tutorial. But I never had much chance to play with it until recently. After the training, esp. after I saw use docker container to host Tomcat, and then use Jenkins to startup Tomcat (build and deployment), this whole thing got me interested in docker again. Note I have been learning about docker contain and they seem to be the future deployment model for scalable mobile apps backend: e.g., I know the Robinhood app (the free stock trading app) is container based in the back.

    Some resources I used to get started:
    1) Youtube docker tutorials (11-18-2018: such as this one Demystify Docker; also noticed this one Docker for GCP. I will see if I can do the training exercise again I mentioned above).
    2) Install docker or docker.io on Ubuntu (I have a digitalocean droplet / VM, and its OS is Utuntu);
    3) Overcome the error message:
    FATA[0000] Get http:///var/run/docker.sock/v1.17/version: dial unix /var/run/docker.sock

    The answer is this:

    The problem is that your user has not been added to the docker group.

    Try:

    sudo usermod -a -G docker
    If you don’t want to log in/out from your current shell, run:

    newgrp docker

    Last but not least, install Jenkins on Ubuntu 14.04.

    Other error messages (note I am on a Mac)
    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? (when I tried to run some docker command)

    It seems the solution is
    eval “$(docker-machine env default)”

    References:

    How To Remove Docker Images, Containers, and Volumes

    Docker Usage

    Part 1 — Virus Detection Service using ClamAV and Java

    Part2 — Dockerized File Virus Detection Service using ClamAV and Spring Boot