A crisis is defined as a specific, unexpected, non-routine event or series of events that creates high levels of uncertainty and a significant or perceived threat to high priority goals.
What I am doing this week
- Continuing to complete my Appeals database App at work (This will be ongoing until completion)
- Worked on our requirements for the project.
- Small AWS update
- Data Structures
After watching the Golang Object Relational Mapping (GORM) course on PluralSight, I started to work on an appeal import process. The course is from 2015 and doesn't have much of the new features GORM has now. One thing that scared me was the instructor talked about how MySQL, PostgreSQL, and SQLite were the only databases GORM supported. I quickly visited the GitHub repo. GORM uses this concept called Dialects that are basically an interface for whatever database driver that GORM uses to do its relational mapping. Luckily for me, 2012 SQL Server and beyond is now supported in GORM. This was a huge make or break for using this tool for my project.
GORM basically takes the carefully constructed Golang structs I create and creates a relation model that is comparable inside the database of my choice. Everything has the same syntax since that is taken care of in the dialects for each relational database management systems, or RDBMS for short. After the schema is built it should be very simple to perform queries against my new database using the GORM API. GORM supports its own syntax and also raw SQL statements in case I have a query that would perform better with my SQL.
First step I took with the database was to take the existing tables used in the appeals database and convert it to something GORM would understand. As I was putting everything into one struct I noticed that this wasn't pretty to look at. I wanted to take the unruly single table I was using for all of the appeals and transform it into a 3rd normal form (3NF) database. Although this would mean more tables and more glue to stick everything together for queries, it would also mean a more maintainable model because data is organized better. 3Nf means better space utilization because in a single table model you would have to null out a bunch of fields you are using. In a multi-table model you only use what you need and if you have to null a bunch of fields it would only be contained in that one sub-table. Although not a requirement from the appeals unit at my work, it was definitely on my todo list way back when I first picked up this project.
I am still playing around with GORM but creating that structure in Go and having it map directly to database tables was a great first step for me.
For both classes, we had a mandatory online meeting via slack and google docs to flesh out the software requirements for this course. I think we did a good job working together as a team. Everyone showed up on Tuesday in the Slack channel to give feedback to what they imagined the requirements should look like. My contributions include:
- Cover page, without names
- Stakeholder matrix layout with suggestions for the first stakeholder
- Stakeholder footer with an explanation of impact and influence
- Listing out every functional with "The system shall..." (Got that one from a IEEE software standards document)
I feel like the actual functional requirements was lacking something. I mentioned it to the group, but I really didn't have a good answer to why it felt off. I was imagining that each requirement would be broken down into actors and other useful information a group of stakeholder would find useful if they needed to reference this document again.
Anyways I am happy with the turnout from the group and it all really felt like it was a group effort.
Quick update with the project. I am moving some of the Archive server data to the newly encrypted hard drive because I have had a lot of failures with a specific bay on the SAS array. If another HDD was to fail I would have data loss that is not backed up anywhere. It is critical to get that data off as soon as I can.
I have reached out to a contact at the enterprise offices of technology services and security or EOTSS for short (formally MassIT and A.K.A. ITD for Massachusetts) and they generated the security change control need to provision the AWS instance in our border. We are really making progress.
Little side note: I asked the professor teaching the course if it was fine if I coded the labs in Golang since that is what I am most comfortable using. Java is the bane of my existence and really detest working for it. She was fine with submitting the labs in that language. I even suggested I will document the code and even provide the compiled executable with a SHA-256 hash and Virus Total scan link showing the Unix executable was clean. The only thing is the exam has some coding programs in Java, so I cannot entire escape it.
I had to re-write a lot of the lab in Go and that has taken me longer than what I was expecting but I accomplish it. I think re-writing the labs in more critical fashion is helping me grasp the real concepts of the class. Everyone else just has to complete a few methods expanding an already provided data structure class. I, on the other hand, am really breaking the data structure concepts down and translating that to a completely different language.
I am pretty excited for this class now.
Other PluralSight Course
I started to take another PluralSight course after I identified an area I feel is lacking in my professional development toolkit, communication. Luckily, they have a path for technical communication and thought that was a great place to start. The course I am running through now is Crisis Communication and Technology: Communicating with Colleagues and I have already picked up on some effective crisis communication strategies. The quote from above is a quote I liked from the beginning of the course. I think I will try to complete this path.
- Finish appeal import job using GORM
- Attach newly mapped appeal tables to existing webserver
- Get AWS instance CMS approved
Wenzel, K. (2014, July 8) Database Third Normal Form Explained in Simple English - Essential SQL Blog