End of Week report

I have been recently working on a project for the company, a proof-of-concept type project to test my capabilities after finishing their bootcamp. I am loosing my confidence in the retention of the knowledge that has been fed to me. This does not mean I am loosing focus, or determination. Just my confidence in taking what they have shown me and apply it solo.

Basic structure of the project. Have a relational database for the data store. The database and data I will create depending on the guidelines given by the project paper. A simple storage of user data, manager and employee roles, with data representing a simple reimbursement functionality. This part is a breeze. I am very comfortable with the skills needed for this.

To communicate with this database, I need to create a Spring application, ensure that I use Hibernate and create REST endpoints to communicate with the web-based front-end. I thought I had this handled. Creating the beans, repositories, and services etc. I have ran into several problems along the way, causing a restructure in the database at least once to accommodate the attempts at a solution. I tackled the simple login functionality first, and I have ran into a dead end. I am currently unsure what to do next other than scrapping the project and starting fresh again.

Using the examples provided, I have attempted to manipulate the information to suit my individual need. An error has finally came that I have no idea how to work around at this time. Having to do with a null session. What perplexes me is before the restructure of the database, I was not having this issue until I fail at login. Now I have it no matter what. The database is being accessed properly, I see within the logs the data that was accurately pulled from the database.

I haven’t even started on the front end due to the issue I have ran into. The great thing about how I am doing this, once I have a whole working login application working, I will be able to quickly add all other functionalities. This is because I am doing a full stack development of the single user story, then I will just recreate my steps for all other parts of the application. It is a wonderful process that I am very comfortable in performing.

So to finish the stack, I will be using an Angular front-end. I am very confident in working in Angular, and going to continue expand my knowledge of the framework. I am probably going to be using Bootstrap for the styling of the page instead of material, but I have not arrived to a decision.

I will not totally scrap this project and start anew, but I will create a new project off a different method that I have found. If I can quickly get a working example, I might migrate my project to this new method and then quickly iterate upon it to create the full application. This may remove any bugs or settings that I have missed and unable to figure out. Luck to me, and I will deliver future updates.

A Change of Plans [again]

The beauty of working in the software development industry is that there may be changes in what you are planning to do, and you must be prepared to take this on. Especially when working in an agile environment where a long-term goal is simply the viability of a product (vs the planned destiny of the project).

Status new Project

I have been assigned by the the company a new project. It is more or less a proof of concept deal than something that will be put into production. Due to the intern nature of my position, they wish to gain a greater understanding of my capabilities. This is good, I want the more practice, this time with consequences.

So, what is it? A reimbursement system. Simple employee / manager user roles, authentication and a database. Employee makes a request for reimbursement, manager can approve or deny.

A number of technologies are required, including the Spring framework, Hibernate, a relational database and a web-based front-end. I will be using Spring Boot as an overall driver of the backed, Angular for the front end, and the Oracle Database technologies. Angular will be up to date, Spring will be built on Java 8, and the database will be simulated by using Oracle Express Edition 11g installed locally.

If I am able to get a working product by the weekend, I will work on adding some additional goals that the initial document suggested, and a few ideas of my own. The focus of the blog will be upon this project until it’s completion. Studies will be focused on gaining answers to the issues that arrive (before asking around). I will continue with the previous work after this project is completed.

This will increase the frequency of these posts once again. Starting with the next posting (possibility tonight) I will work towards showing my process in this development cycle, just throw out ideas, and highlight the difficulties I have experienced during the process (and how I overcame them).

Sprint 2 Week 3

Much progress has been made on the Angular course work. I am pretty impressed in this course. It is really as complete as advertised, so far.

Over the week I have had a number of opportunities to talk to potential clients. I have came to a realization that I am struggling in aspects of development that I should not be! This is disappointing.

For example, code challenges. I have been avoiding them. They are more of an academic practice than actual development experience. At least this is the mindset I have had until recently. It appears that management does actually look at these exercises as a gauge of capabilities and competence. On top of that, they expect such tasks to be done in short spurts. Due to my avoidance, I am not prepared to do them upon request. I mean, I should have no issue, which is why I am disappointed.

So, to overcome this, Sprint 2 may be extended back to 5 weeks. I will be joining a number of core code challenge sites to bring those type of skills back up to par with my capabilities. This is not for a self-confidence thing, but a necessity for the job.

As far as additional Angular knowledge I have gained, I now know about how to make directives, and use them. This is pretty easy to do. I am surprised that I have not been introduced to this at an earlier time. More and more I learn, more and more I find what I do not know. To be honest, this is pretty exciting for me!

Sprint 2 Week 2 Overview

Due to how I have taken this sprint, making it a learning and retraining sprint, I have cut back dramatically on the content of the posts. I will perform a weekly posting of what has occurred during the sprint. This may be split into mid-week and end of week postings as planned last week. For this week, I have decided to forgo the bi-weekly reviews and go with a mid to end of week review and update.

As far as progress with the project, the main purpose of this dev cycle, very little is new. I have implemented an addition to the project, a new chart based on the information gained from the Udemy course that I have signed up for. I like how he has split the features and component plans down, and this is reflective of what was asked by a potential client recently. I am a very visual thinker, so these charts and images really assists me in the understanding of and break down of the project at hand. As I finalize the documentation throughout the sprints, I will update that information within these postings. I will also be working on the documentation website based from these postings.

Aivoeve Model breakdown

As seen within the above image, I have broken down the application components and models based off the features that I am going to implement in the first iteration of the application. At the end of Sprint 3 these features would be working, from back-end to front-end. This is just the front-end Angular application breakdown represented in a format that I understand it to be.

I started with the features of the application. The overall Application Login and the EVE SSO Login. This is separated due to the nature of the game EVE Online. One physical individual typically has more than one eve online characters, and with how the laws and regulations of EU customer identity protection is implemented by CCP, the characters will be identified as separate entities, even separate from the login of the account that they reside on. Each account is limited to 3 characters, but CCP recognizes that each individual can have multiple accounts. So there is a need to separate these two login schemes, and then tie them together within the application itself. I do plan on implementing a scheme that will prevent me, as the developer and database manager, to not identify individual data to individual accounts, but this is not planned yet. The characters in question are called Capsuleers, so this is the term used within the application logic. Mail functionality is the initial focus of the application, thus the mail features are what remains. This will be expanded, but not within Sprint 3.

Next I focused on the components, as understood by an Angular application context. We have the root component, which is simply the application entery point. The header will stretch across all other components, but seperate from the root. Each feature will have a component dedicated to its functionalities, with each list consisting of two different components. One to repersent a summary of each item within the list, and the other to contain all summaries into one view for the user.

Lastly I looked at how the data is modeled. I realized that there will be sharing of models between features, so there will be fewer models than features. This will also allow me to better structure the directory tree within the application. This would be better demonstrated as I start to implement these ideas, after any additional changes required during the first week of Sprint 3.

As far as the training is going, I have realized that I am flowing through the work quicker than anticipated. I may end up completing the course within week 4 of this sprint, instead of stretching to week 5. I look forward to completing this training sprint and working on the next phase of the project.

Next posting will be next week.

Sprint 2 Week 1 – End of Week Report

This week production on the product has came to a stand still. A potential new direction has arrived, which would require re-training. With this, I shall get my mind back in track for training. I have signed up for a Udemy course in Angular and have started going through that. This way I will not only have my thought processes back to being trained, but also gain a stronger insight on Angular. So far I have learned only one minor trick with angular, but then I have only just started this program.

As far as the progress of the application goes (remember, from this point, most of the progress shall be minimal until either I have this new assignment, or I have completed this Angular course), I have started research on how to connect the MongoDB Atlas to the Spring Boot project. I added functionality within the backend to allow for the communication with the Mail Service Database. I added functionality within the frontend to allow for communication with the backend through a restful API.

I then decided to just refactor the Mail Service and Mail Database Service. They are going to be combined into a single Mail Service with the code hosted on the encripted Keybase GIT. This was done due to my understanding of Spring Boot and how the communication between services are structured. I found that it will be easier to just keep with industry standards, allowing the Discovery service handle communications between services. This removed the requirement placed upon the project to keep the two services separated. The database is going to communicate with the Discovery Service, so might as well keep the Mail Service with its database. I will re-post the finished code on a public repo after the completion of the project.

I wanted to implement a new technology found while researching the MangoDB solution, Lombok. It appears to be so much easier to setup the beans using Lombok. Then I found that I had to change the directory structure of the project to be able to utilize Lombok, taking it out of the understood industry standards. I have decided to pull Lombok back out of the project to avoid any further issues.

In an attempt to reduce the complexity of the project, I have redone the Angular front-end. At this moment, there is no front-end formed. Due to starting the new Angular training session, I have decided to hold off on new implementations, using some of the techniques I will learn, combine with what I have already been instructed, and then relaunch the new front-end after the completion of the training sessions.

Due to the new cadence of the project, I will skip Monday’s blog posting and just have a mid-week touch-up and a end-of-week report. I will still consider next week the end of sprint and create another PowerPoint presentation at the start of Sprint 3 (which will most likely consist of a training sprint). If this is so, then I will have just an end-of-week reports for that sprint.

Till Wednesday next week!

Sprint 2 Week 1 – Midweek Report

As stated in the previous posting, the PowerPoint presentation has been completed. A dry run of the presentation was performed in private. Continuation of the development process has commenced. A work-flow was attempted before documentation, which was not too successful. Some research has been conducted on how to create a quick wire frame of the application which resulted in me discovering Figma. The workflow of the application reminded me of Xcode back when I was doing mobile development. Due to this influence, I created a basic prototype of the mobile functionality of the application. This allowed me to formulate how to break down each aspect of the application into its components. Today I will continue the process of implementing a functional front end, which should start to communicate with the back end to make the calls out to the EVE Online API.

During my research notes were not taken, so there is a lack of material in this posting. Off to finishing up the basic front-end before Friday!

Sprint 2 – Week 1 – Start

Note: I am still working out the format for these posts. I am working under an agile scrum process, so iterations to how I deliver this information may, and will, change slightly.

Each week I will start off with what have lead up to the start of the week, and delve into the day’s agenda. The first half of the first day of a new sprint is dedicated to the creation of the presentation about the previous sprint.

Last sprint was a mix bag of success and lack of success. The first week was much slower than expected, with much of the work done thrown out and redone. By the second week, things became organized and a firm standing for the project has been established. The previous post contains all the details of this process. In the end, there was much success.

Earlier today the presentation slideshow was developed, with a few notes that was not within the sides themselves. Upon writing this post a download of images is occurring that would be used within the slideshow. The goal was to get the presentation completed by lunch, which I believe was 90% successful.

Later on today and into tomorrow I will be working on getting the microservices communicating between each other, and then getting the front end communicating with the back end. If this runs smoothly (which I expect it to do so), the business logic would start to be implemented.

Wednesday will be the mid-week stand-up. Until then, here is the presentation. Note that it is a live document, so it will change over time (until the end of today).

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!