Week 2 : End of Sprint 1 Wrap-Up

There was very little tutorials watched to take notes on this time. All business. I have found that starting a Spring project with Spring Initializr is the suggested way to create the basic project. This may be ‘cheating’, but hey, whatever is reliable and makes your project development faster, go for it!

With that, I needed to make sure that I have all my thoughts worked out fully. So that next week (if my skills are still not needed yet), I will start the coding of the first phase of the project! This is where the fun part lies with me! So, the plan is to have a basic Spring Boot micro-service application up and running, able to make simple communications between each service working, and to have an Angular front-end communicating with this back-end to retrieve generic data. If there is time, I’ll add the 3rd party API authentication and communication with the data set that I will be accessing and manipulating during the application usage.

Microservice Diagram

This diagram displays the different services, their development storage locations, and their designed communication connections. The users, using either a computer or a mobile device, connects with the Angular front end. This communicates with the Gateway Service. The technology used here will be Zuul for now. While creating the starter package of Zuul in the Spring Initializer, there was an indication of Zuul being in maintenance mode. This tells me that the development of Zuul is no longer supported, and that there will be issues with security if Zuul is used into the future. I will be looking into a replacement technology after completion of this stage of the project.

The remainder of the application will be directly communicating with the Discovery Service. Eureka will be the main technology that will power this functionality. There is one exception. The database has been decoupled from the Mail Service, which creates a new service that I named Mail Database Service. These two services will be in heavy communication with each other, and the Mail Database Service will not be utilizing the Discovery Service. The Mail Service will pass any calls to the Mail Database Service if another service requires that information. The Discovery Service will pass any calls that the Mail Database Service would process to the Mail Service. This is against best practices. The reason for this is explained below with storage of development code.

The Authentication Service will handle all authentication for both the application and the 3rd party APIs. The database for this service does not need to be decoupled.

During development, git is being used for version control. I have setup a repository under the name of the ‘Capsuleer’ that is being credited as the creator of the application. Within the EVE Online community, there is a heavy emphasis on ‘OpSec’, or Operation Security. This includes, among other things, the identity of the person who controls the character, or Capsuleer, within the game environment. During development, I will be hosting all public accessible code here. The source code of the services that has database accesses will be hosted within an encrypted secret repository within the Keybase environment. This will be both the Mail Database Service and the Authentication Service. I wanted to make public the Mail Service. This allows me to showcase the functionality to those who are wanting to know how the different aspects of the application is implemented. The Authentication Service will not be made public. To decouple the secret data from the application source is not as straight forward as with the database access.

This is the end of Sprint One of the project. I will be creating a presentation for each sprint of the project development, posting a blog to reflect the information within the presentation. Within the work environment that I am creating the application, I have the luxury to make the presentation to my peers. I will take advantage of this while I have access to it. A recording is planned to be made of the presentation.

With Sprint Two, the following chart shows the functionality that will be completed by the end. Currently I plan to have a two week sprint cycle to get all goals completed.

Display Mail Workflow

By the end of Sprint Two, the user of the application should be able to log into the application, allow access to their in-game information, and retrieve the current mail within the database of the EVE Online database, storing it within the application database. Angular will have 3 main components, the Gateway Service and the Discovery Service should have at least 4 restful calls between the application and the front end. The Authentication Service will have at least 5 restful calls, and the Mail Service and Mail Database Service will both have at least 2 restful calls. If, by the end of Week One of Sprint Two more than 75% of this chart has been completed, at least one feature will be planned and added to the project.

Week 2 : Mid-Week Report

The move has been successful. I am settled in and ready to go to work!

The work done on Friday, the 17th:

  • Tutorials and videos notes:
    • Test early, test often (a play off of save early, save often)
    • Use the Given-When-Then pattern for testing
      • “Given [a circumstance],
        When [the user does something]
        Then [expected change in state]”
      • It is suggested to have this written out before coding
    • Should have about 5 to 20 system level tests for a medium sized project
      • Google suggests a 70/20/10 spread of testings
    • Unit / Integration test technologies
      • junit – Java
      • jasmine – JS
      • karma – Angular
    • During unit testing, should create functions that are not being tested as ‘stub’ functions, and test off of those when testing a particular function. spyOn in jasmine does this much easier than writing a whole new function.
    • System testings are especially needed for a micro-services architecture. Focus on critical aspects of the system that cannot be tested within integration / unit tests.
    • Cucumber / Selenium are the technologies to use, but make sure to minimize the footprint to make tests more robust and repeatable.

Even with the weekend being non-productive, I have made a few notes during the weekend on videos that are reflected with the work at hand. Most of the videos were watched for pleasure, not business, but they became useful for business needs.

  • Building a project to rule them all…
    • Myth: build your passion project
      Truth: build projects that reflect the work that you will be doing, and that solves business needs
    • Myth: It doesn’t matter what language or tools that you use
      Truth: You should use the tools and languages that the employer uses. This way you show that you are competent and capable to do the work needed.
    • Myth: Code an hour a day, every day
      Truth: An hour at a time is not enough time to solve problems. When breaking early and coming back to the work, you will loose momentum and focus. Schedule blocks of time throughout the week of a few hours at least. This way you can actually get completed with work.
  • Suggested design pattern – Model View Controller (MVC)
  • Make the UI professional (video suggested Bootstrap with a template, I will use Angular)
  • Make sure you have security, authentication and authorization. Using an established technology is good practice, like Auth0.
  • Again, make sure you are solving a complex business problem.
    • Suggested project: bug tracker / issue tracker.
  • Build a SRS, then separate the information into one week sprints
  • Track the progress
    • Use the bug tracker that is being built to track the progress of the project

After the completion of the work stated above and reflecting back to the project, the project has made a few adjust. I have implemented a new repository location for secure code information. This is located within the keybase.io crypto ecosystem. They provide an end-to-end simple git repository. All code that contains sensitive information will be placed here, including API keys and sensitive login information. I might have the full login micro-service code hosted within here. If the reader wishes to take advantage of this technology as well, I have invitation codes.

I have started to reorganzie the repositories and created a flow-chart for visualization of the workflow. I have changed the database to a NoSQL database. I am currently comfortable with SQL, being that in the previous team project I took it upon myself the role of a DBA. Moving to a NoSQL database will add these skills and knowledge to my ‘toolbox’ and give me the freedom to use either SQL or NoSQL within current and future projects, even both due to the micro-services should have their own database. For this project, the main NoSQL database technology will be MongoDB with the Atlas service.

I may even create that bug-tracker / issue tracker project. Due to Keybase having a very simple, no web-based interface to their Git, I will not have GitHub to track the progress with the code base. So if I create a tracker service there along side the authentication service, I will be able to utilize the tracker completely. I will clone this to a public GitHub to show for the future.

Finally, I have made the initial setup of both the Angular front end and the Spring Boot back end on my development machine. This has been pushed to my GitHub public repository for this project (under the character name of the developer).

Today I will be working less on the project. I have an evaluation due on Friday of the knowledge I have gained during the progress. This evaluation does not specify the current project, but the training as a whole. I have been having difficulty in completing this evaluation successfully, due to it being more of a college-based feel to how it is implemented (oral exam). Most of this week will be focused on passing this oral exam, with some work being done with the project to support the questions that will be present within the evaluation. Due to this, my next update posting will be made on Friday.

Start Week 2

Goals for last week were not met. Much progress has been done. Today, Monday, is a holiday. Over the weekend I took time off. Away from the project and work in general. I did end up watching a few videos related to the industry and possibly assist with the project, but that was not my main concern at the time.

The groundwork that has been laid last week will be revisited today. Tomorrow I have a move required by the company, so most of that day will consist of the moving stuff that I have not already completed. Wednesday is the expected next day of posting within these walls of the internet.

So lets have this half week a great week! Wednesday’s post will consist of the missing content from Friday as well as the work I will be doing up to Wednesday morning. I believe 12:00 (17:00 UTC) will be the time that I will have ‘stand up’ posts made starting from Wednesday.

Enjoy today’s celebration of the liberation of all peoples by the work credited to Martin Luther King Jr. I will add a celebration towards all who has worked with him, before him, and even nowadays. Keep up the fight for freedoms of all!

Week 1 – Thursday Update

Finished week 2 videos of ‘Continuous Delivery & DevOps’ in Coursera. The notes are as follows:

  • The Given-When-Then pattern of testing
    • Given [a circumstance],
      When [the user does something]
      Then [expected change in state]”
  • Should have only about 5 to 20 system level tests.
    • Google rule of thumb: 70/20/10
      • Unit/Integration/System
  • mentioned Unit/Integration technologies
    • Junit – Java
    • Jasmine – JS
    • Karma – Angular (uses Jasmine)
  • During unit testing
    • create functions that are not being tested as ‘stub’ functions
    • test off of those when testing a particular function
      • spyOn in jasmine does this much easier
  • With system level testing, most useful with microservices
  • focus on critical components of the application
    • The system level tests are those tests that cannot be tested within Integration or Unit tests. Otherwise test there
  • Cucumber and Selenium are mentioned technologies for system tests

I have also completed a section of Stepik ‘Data Structures’ learning course, earning a few achievements there. This is a course about the basics of data structures, and appears to be pretty comprehensive. I am still in the beginning phase of this course work, so only time will tell how much I will gain from this.

After doing a bit of research and analysis, I have decided to make use of multiple web service platforms for the development and delivery of this application. This way I will stay within the free tier of all the services provided and gain experience in multiple platforms and methods. Amazon Web Services Free Tier services, Google Cloud Platform Free Tier and Microsoft Azure Always Free services are the current platforms that I have researched today. There may be other ones out there, and with the combination of all of the platforms, a micro service based development pattern could be created encompass the whole of the application functionality. I do not believe I will meet the goal of gaining a fully setup pipeline by the end of this week. If tomorrow (today) I am unable to do so, I will work through the weekend and holiday so that Tuesday I will be able to start putting together the solutions. Either way, the weekend will be filled with more lessons.

Week 1 – MidWeek Update

The blog is getting organized, and a flow is starting to be formed. Even though this is Thursday, MidWeek Update covers up to Wednesday work.

The DevOps pipeline is being formed. My current outcome is:

  • GitHub for code storage, project management and wiki documentation. Initial GitHub has been setup. Additional work needs to be done before being development ready.
  • Bluehost is the domain registrar and used for identity protection.
  • CloudFlare is used for DNS management and adds a layer of protection for the site.
  • Firebase is utilized for the site hosting and other cloud services within it’s Spark free tier.
  • Angular is used as a front-end single-page development and deployment technology.
  • Spring Boot is planned to be used for server-based functionality framework.
  • Database technologies are to be determined, depending on initial needs of the application.
  • Testing and deployment technologies are still in research.
  • Windows 10 Pro is the development OS, running Visual Studio Code for the Angular development and Eclipse for the Java development.
  • Windows PowerShell will be the standard CLI terminal for the project development (just as an added bit of data for the list here).
  • WordPress is utilized for this blog (currently seen as a daily stand-up blog during planning, development, and delivery).
  • The current domain purchased is aivoeve.space (Aivo is the name of the EVE Online character that the project is centered around, and who is taking the in-game credit for the development of the project).
  • Current URL of the app location is https://app.aivoeve.space. This is working as of writing of this blog, setup with a default starting Angular project page for initial setup testing.

In addition to the above work, Coursera is being utilized as a study and refresher medium. Current course started today is ‘Continuous Delivery & DevOps’. Week 1 was started and completed today (just videos and a few questions).

Notes from Week One

Setup a pipeline:
Observations -> Ideas -> Designs -> Code -> Tests -> Deployment -> Release

Observation to Design is part of the ‘Continuous Design’ aspect, usually lead by the project manager. The purpose is to create high-quality testable ideas to be passed to the DevOps team to make reality.

The rest of the pipeline is a DevOps CD pipe, and broken down to the following steps:
New Code -> Commit & Small (Unit) Tests -> Medium (Integration) Tests -> Large (System) Tests -> Manual Validation -> Deployment -> Release

Quick note of the different terms of tests:

  • Small Tests
    • Unit Tests
  • Medium Tests
    • Integration Tests
    • Component Tests
  • Large Tests
    • Functional Tests
    • Non-Functional Tests
    • Acceptance Tests
    • Contract Tests
    • System Tests
    • End-to-End Tests
    • Performance Tests
    • Security Tests

Speaking of testing, Jenkins has been installed locally on the development machine. The idea behind this move is to do some initial automated testing and deployment using Jenkins before going live. Many of the integration tests will be performed locally. The full setup of the pipeline has not been developed.

Note on Continuous Design:
Agile User Story
“As a [persona],
I want to [do something]
so that I can [realize a reward]”

The user stories will be formatted using that design pattern.

A new project

Note: Very rough post. Read at your own risk…

While here at Revature, I have learned a lot of stuff! Now to put it to practice before (and during, I suppose) an assigned project with a client. I have decided to create a new web application using the technologies that Revature has taught me. This will also include the full process of setting up a domain, finding a host, etc. The whole shebang. I will continue to use WordPress as my blog (for now), and will use this blog for the process tracking. Note: Currently this post is going to be extremely rough. I am just throwing out my ideas and such here, logging it as a post, and so forth (not enough coffee is in my system). I am not ready to proof read and edit what I write here to make sense. So bare with me, future postings will have more order and such.

So, what have I done, and what will I do:

Completed Steps

  • Purchased a domain (via Bluehost)
  • Setup Firebase account (technology similar to what I have learned in Revature, but different implementation)
  • Setup Cloudflare account (I wasn’t sure what I was doing, so just flow with this)
  • Setup initial Angular app to represent the final product and upload that to Firebase host

Steps in Progress

  • Connect Cloudflare and Bluehost and Firebase (a process I am learning on my own, pitfalls and all)

Future Plans

  • Implement EVE Online API for app EVE Mail functionality
  • Create mail server to act as a proxy for EVE Mail

This is just the first step in the process of creating the application. Once I get the step for ‘in progress’ completed, I will reorganize my thoughts, create a DevOps plan, and implement additional technologies to make sense of my chaotic mind so others can follow.

This is day 2 of my thought process, day 1 of putting to text the thoughts, and day 0 of getting things organized.

Goal for the end of the day: Complete setup and create this blog as a daily ‘stand up’ meeting with the public on the progress I have made, and what I will be doing from this time forward. Tomorrow’s post should show the results of today’s planning and implementation, and a sense of organization will happen.

A New Venture

I am working on re-creating myself. I will still be slow at creating updates within here, but at least I still have this blog.

My new project in life is a new career. I am once again in software development, working with an established company and gaining some very useful skills. This will propel me and my family to places we have only dreamed of.

I am not really doing much here at the time, I mostly wanted to pop out an update and keep this at least snail pace active.