Down to Two

I’ve done it! I’m down to two terms left in my bachelor’s degree. Last term was challenging but I was able to achieve the GPA I wanted. There are only 4 courses left to take before graduation and it’s really starting to sink in that the time has almost come. While it’s exciting to be down to two terms left, it is not exciting to discover that I am also down to just two group members for our project, including myself.

Next Steps

After consulting my professor / project sponsor, we will likely have to alter the features a bit to adjust to now only having two team members instead of 3. I chatted with one of my teammates and we have started brainstorming ideas on what we may want to cut. Likely it will be some of the more advanced features like showing file transfer history or letting a user transfer files to more than one person.

Over the break I spent about 30 hours learning some of the technologies we will need for our project, and after the recent news of losing 1/3rd of our team, I am glad I put in that extra time. Prior to the term starting I updated our project from .NET Standard 2.1 to the more recently released .NET6 during the prior term we had some issues with the dependencies of using the database framework we had decided on, MariaDB. This dependency issue caused us to go with .NET Standard 2.1.

After further discussion, we are thinking it’s going to be better to stick with the latest version of .NET for not only security reasons, but also for a better-looking website on our resume. It hasn’t been decided for sure, but at this point we will likely use Azure cloud services for hosting and for our database since it has a higher chance of working seamlessly with our project. The last thing we need is to end up spending countless hours trying to get unfamiliar components to work together.

New Concepts

After spending some extra time learning our technologies (C#, Blazor, HTML/CSS, Bootstrap, and MudBlazor), I am feeling much more confident about being able to complete this project. One of the most difficult things so far for me was understanding what was happening with the front-end design. I came from a community college where the web development class I took did not even mention bootstrap. We did some basic things with HTML/CSS and that was it. After completing the course, I didn’t use any of those tools again for at least 2 years. While some of this was due to me going part time, I do feel like web development experience has been the biggest gap in my CS education. At this point, the JavaScript/HTML/CSS knowledge is about 95% self-taught.

The fact that my web development experience is minimal, means that this is a great opportunity to polish my skillset and prepare me for a software development career. The front end was so difficult for me to understand because there were so many layers of abstraction going on. First, there is CSS who is the base styling layout for designing a web page after the HTML, next there is Bootstrap, which I’ve learned is basically just a bunch of premade CSS classes that make a web developer’s life easier. Then, there is MudBlazor, which is Razor Components that utilize Bootstrap and CSS. The model looks about like this:

CSS, Bootstrap, MudBlazor Hierarchy

Coming from barely understanding CSS, it’s understandable why I was having difficulty developing at two layers of abstraction above.

Encapsulation

One of the most enjoyable things in building software is encapsulation, and that’s exactly what I was able to do with Razor Components. This is a concept I was not able to fully understand without understanding some of the basic web development techniques, but now that I’ve developed a better understanding, I’ve been able to create a couple of sweet Razor Components.

Any well-designed website contains a consistent user interface, and that is what I want to build with Transfer.Me. The consistent user interface consists of the upper navigation bar

The Main Navigation Bar

As well as potentially a footer which hasn’t been implemented yet. What I’ve done so far is create these two pieces as components. Each of them contained 10s of lines of code. The beauty is now that they are components, adding them to future web pages will just be to add a single line that calls these components.

The Coming Weeks

I also spent a couple hours updating the team’s Trello Board. We are about to start planning our first Sprint, which will have to accommodate for only having two people. We will also have to finalize our adjustments on features. The exciting news about all this is that I will be able to learn more about these technologies, but the not so exciting part is that I will get less experience developing software with multiple people. Since there are only 2 team members, it almost feels more like a duo than a “team.” In the end, maybe this will end up being a good thing I can mention in an interview about being flexible and adjusting to an ever-changing project. After all, isn’t that what Agile is about?

Version 0.0.1

My team has finally made it to the exciting stage of actually starting out project! We finally have our repository and our development environment setup. The repository will be public and viewable throughout the iterations of the project at: https://github.com/AlexGrasley/transfer.me. This is an exciting stage of the development process. My mind is fresh, I haven’t run into any difficult issues to solve, and I’m eager to get started on the project! I always try to appreciate this time because it is not yet tainted by the frustration of the inevitable issues we will run into along the way😊. I don’t mean to sound jaded, since a lot of the joy I get out of software development comes from overcoming those issues, but they can also be frustrating at times.

While we have the repository and development environment setup, there is still some work to do before we actually get to work on building the first real version of our app. As a team, we have done well on working through the writing assignments during the course that are designed to help us plan. We divided some of the components of the project into 3 main topics:
1. Cryptography
2. Database
3. Front end & Back end
You could argue that front end and back end deserve their own “number” since they will be such large components of the project, but we figure we will continue planning as we go.

I think that planning out a software project, especially when new to a certain framework or language, can be more easily done in an iterative manner. Since none of us have a plethora of experience developing in C# or. NET, the planning for the front back end will have to be done as we learn more about the project. To put it in different terms, a car mechanic wouldn’t want to plan how he would perform maintenance on an engine, if he doesn’t even know how to do something simple like change the oil. The Plan

The Plan

The first thing I hope we can accomplish as a team is to build some wireframes. Wireframes are diagrams that outline how a project should work to the user. Building Wireframes is something I did in CS352 (Usability in Engineering), while it was obnoxious at first and seemed a little redundant, as we created and analyzed the wireframes, we did have significant improvements on the UIs we were building.

Img credit: https://balsamiq.com/learn/articles/what-are-wireframes/

We may also want to generate some User Stories. I can see the potential for the usefulness of user stories, as I did it in CS361 (Software Engineering), but the scale of the project we made user stories for was so small that I couldn’t see the value. I’m hopeful we can at least try creating some user stories to see if they are beneficial to us.

Trello

The next thing we want to do before development, but after we do some user interface design, is to build up our Trello board. It’s best for us to do this after we have done some additional planning so we have a better idea of what the front end will look like, and in turn, how the back end will behave. I feel confident in my ability to create and organize different Trello cards and assign it to some team members since this is something I have done for the past 6 months or so at work, and also had experience doing in CS362. I think once we have a solid list of specific, well defined tasks, we will be ready to start development.

I’m looking forward to utilizing Github as a team, combined with project management software like Trello, and communication software like Teams, to collaborate as a group. I’m looking forward to Stand up meetings, Code reviews, Sprint planning, and Sprint reviews. These are all popular buzzwords I’ve heard in the software industry, but never actually got a chance to take part in myself!

Keep an eye on our repository: https://github.com/AlexGrasley/transfer.me, to see the progress throughout the term! See you next week 😎

The Grind

It’s getting into the thick of the term now and things are getting busy. As of now I’m trying to balance being a new dad/husband, increased responsibilities during the 45 hour work week, and increased workload from the 11 credits I’m taking. I’ve been in school now a combination of part time and full time for 7 years, this is my 8th. I’m extremely excited about graduating and I’m optimistic about how my work experience, combined with my experience at OSU can help further my career. I dream of the day where I only have to work and don’t have to take classes anymore. While I have enjoyed my CS classes throughout my education, I’m ready to start coding more at work, and less in my hours outside of work. Even though life is busy, work has been very exciting recently!

Automating My Job

Right now there are not a lot of new developments with my senior project. So it seems like an opportune time to discuss some of the exciting things I have been doing during my day job. I currently am a service desk technician, but my workplace has been very receptive to improving processes using scripting, or any other method I come up with. I started learning some PowerShell in my spare time at work, and I found that it’s basically a programming language. To me, it really codes codes like a combination of Python and C++, two languages I’m very familiar with. I knew that it was a scripting language but I did not understand it’s capability to make such advanced programs/scripts.

Using PowerShell has been exhilarating and inspiring so far. I was able to take an existing script that was probably 300-400 lines of code used to create ActiveDirectory users that my organization had, and improve on it drastically. The project is now north of 4000 lines of code and automates essentially the entire user creation process for Active Directory. Office365, and AzureAD. I was able to use a PowerShell Module to import data that defines what permissions and licenses users get. The script I created uses some of my knowledge of control flow, data validation, and advanced data structures like nested hashes. This has been a fantastic project that I will certainly bring up when interviewing for future jobs.

Gitting better with Git

The PowerShell Script I wrote for work was a huge learning experience. It was the first time I had ever worked on such a large project. It was especially challenging because not only was I learning PowerShell and learning some of the oddities with ActiveDirectory, but I was also learning how to better use source control and trying to utilize Project Management Software as best I could.

I had done some of these things in classes, but for me, until you do it in the real world with a project where source control actually makes sense, it’s difficult to really learn how to use it best. I reached out to some friends and did some research on best practices and I know I’ve come a long way with using source control. I finally see the value of source control for real, it has saved me several times when I have accidentally made a mistake. My favorite method of using source control so far is to use a structure similar to this:

In this diagram, the black center line is the main branch that contains the working version of the code and the colored lines are different branches. Whenever I want a new feature implemented, I create a copy of the working branch, develop on it with multiple commits. When a branch/feature is completed, I merge it into the main branch. If I’m working on another branch that was copied at the time before the most current merge, it’s simple enough to just pull the changes from my most recent commit and my active branch will update. This makes it easy to separate different features and implement them into the main branch when I want to.

I’ve also learned how to use tags and versioning. Tags have been been useful for when I reach a “checkpoint” in my code. They allow me to easily define certain features that I’ve implemented, and allow me to keep a script version. With each version having a certain amount of changes. The most beneficial thing I’ve learned here is how to properly version software, and how to write patch notes and how to best communicate that to the team that will use them.

Updates on TransferMe

The experience I’ve had from work building a large PowerShell script makes me excited for the time where I can work on a large scale project with my 2 teammates. We are going to be setting up our development environment soon, adding notes to our Trello board, and getting our GitHub repository set up. I did some more research on the cryptography side. My teammates have been researching the website design and the database design. It will be exciting to work together to build a large scale project that we can all be proud of!

TransferMe!

A great deal was accomplished this week, we have finally chosen a name, TransferMe! We are hoping to get the URL Transfer.me but it’s unclear whether it is available. The team agreed that this name is equally descriptive of the product, short enough to remember, and rolls well off the tongue. We used our Trello board to brainstorm names and this is the one we collectively decided on. We have started using our communication platform Teams and Trello collectively. Turns out, the Trello board has an extension for Teams that allows us to do everything within the Teams app. I’m loving the setup so far!

The First Conflict

This past week we developed some of the project requirements. We had a team assignment that required us to write a 2000-4000 word document that described goals needed to complete the project in more detail. This also required that research be done on different frameworks and technologies we will use, as well as brainstorming some UI concepts and overall flows of the program. We encountered our first minor ‘conflict’ as a group, at least it was a conflict in my eyes; but I am proud of the way we handled it. I sent out a message to the Team 5 days prior to the due date about collaborating on the document and long story short, I received no response until 2 days prior to the due date. I stated that we need to communicate better going forward, and coordinated a meeting time to go over some of the group decisions, in the end I think we all contributed to the assignment equally and we will be a better team going forward because of this!

Moving Forward

After completing the project documents, we are onto the next iteration of planning. We scheduled a meeting and discussed some of the technologies we will need to use for the project. To me, the most daunting part of the project isn’t writing the code, but knowing where to begin and what pieces of the project to work on first. During the meeting, we discussed the cryptography method we plan to use, as well as the database, the framework, the source control, and the IDE we will be using for the project.

For cryptography, we plan on using Diffie-Hellman Key Exchange and ElGamal. We are hopeful that we can use Diffie-Hellman once to establish a secure connection between two people, then on future transfers, we can use ElGamal to achieve adequate security and efficiency. I’m sure there will be challenges as we implement this, but we plan to use a Framework called BouncyCastle which has a highly regarded cryptography library for C#, the language we will be using for the project.

For the database to store files, one of our team members is familiar with an open source database platform called MariaDB. MariaDB acts as a MySql databse so the language will not be difficult for newcomers to work with assuming they have had a small bit of Sql experience (which I have)! The framework, as discussed in the previous blog will be Blazor, a C# web framework that will allow us to build our site using WebAssembly. WebAssembly will be beneficial to us because all C# code is run as assembly language locally on the system. This makes for a fast, responsive web page as well as generating code that is not viewable in the devtools in the browser.

For source control, we will be using Git and GitHub to manage our project. I’m really excited to work with multiple developers on a large scale project. As of now, I’ve only used source control for projects that I have been the sole developer. I can imagine on a large scale project with multiple developers, things could get complicated if not everyone is in agreement with how to use the product. Once we get the development environment setup we will have to have another meeting to discuss how we will utilize source control in the most efficient manner. The IDE we will be using is Visual Studio. This seemed like the simplest choice since the program, the framework, and the language are all written by Microsoft. I believe this is the best choice.

What’s To Come

Our next assignment for the course is an individual assignment, but will aid in a better understanding of the different technologies we will use. This is the first time we will begin setting up the development environment together. I will plan to try coordinating a meeting with the team to discuss who wants to work on what. What I think the team needs most is to develop some type of diagram that will give an overview of the different components and their functions. Something like this diagram, but with specs relevant to our project.

I’m hoping that soon we will all get the development environment setup, a diagram drawn, source control established, and have a final meeting so that we can really start planning the development of this project. I get the feeling it may take longer than we expect…

Name TBD

This week, we had their first two meetings with both of our project sponsors. A bit unexpected, but our project sponsor was a former student who completed the entire project last year. The project was intended to be taken down but was not. Long story short, my team will be recreating the same project from scratch! We will be modifying the project requirements slightly, but the main concept will still be the same. Since the project sponsor was a former student who was not expecting to be a sponsor, we will be working partly with the student and partly with our instructor throughout the year. The good news is we have more flexibility in what we create. The bad news is, we have to start completely from scratch. Now, we must also come up with a new name for our project. Hence the title of this blog post, Name TBD.

First Impressions

Our first meeting was with the former student who initially proposed the project. Thankfully, they were kind enough to assist us in developing project requirements and even offered to help us if we got seriously stuck. They gave us beneficial advice about using trusted cryptography libraries, so we do not have to reinvent the wheel. Our sponsor also gave us advice on a specific framework for .NET and WebAssembly which they used in the project. The framework is Blazor. This framework is intriguing because it enables us to use mostly C# for web development. With traditional web design, the languages used are mostly HTML, CSS, and Javascript . While there will still be a need to use some of the traditional web design tools, using a framework like Blazor will give us increased flexibility which will allow us to spend more time learning the C# language and the .NET framework.

Second Impressions

Out next meeting was with our professor, Bill Pfeil. We went over the project requirements and stretch goals. Which as of now, are:

Project Requirements & Goals

Bill gave us solid feedback on the project scope and encouraged us to accomplish the stretch goal peer-to-peer transfers. Overall, he though this was a great project choice for a senior project. My teammates and I have some background in security which makes us ideal candidates for this project. As it stands, it appears I have taken the most security classes, being the only one who’s taken Cryptography, Defense against the Dark Arts and Intro to Security at Oregon State. I am excited to apply some of the theoretical knowledge I learned in the Cryptography course into this project. Specifically the stretch goal of implementing Diffie-Hellman key exchange.

Next Steps

The next steps I’m hoping to accomplish with my team is to start developing a UML-like diagram to outline the different components of our project. Since most of us have not worked on a project with this big of scale, I believe understanding how different components of our software will interact with each other will be critical in maintaining good development speed. We also need to further define our project requirements down to the small details and start thinking about other questions we have. I’m hoping we can start development sometime around the end of winter term. If we can get an adequate development plan in place, we may even be able to begin work during winter break!

The Beginning

The time is finally here! I have been assigned my senior project! I’ve been excited and anxious for this time since I started at OSU 2 years ago. At this point, being nearly done with all my classes, I’m mostly excited. My team and I will be working on rewriting a website called Crypter. Crypter is a free encryption platform that allows users to encrypt messages and files, then send them to whoever they wish. The caveat is, the user has to send the decryption information to the recipient manually.

I’ve actually wanted to use something like this in the past but did not know of any viable free solutions. Maybe Crypter can be that solution. I can’t count how many times in the past I’ve looked at job offers or contracts and they require a Social Security Number sent back in a PDF via email. Since email typically uses SMTP, none of this data is encrypted and could be susceptible to packet sniffing. Crypter could be an answer to that problem.

Another benefit of Crypter is that it doesn’t require an account and it is very simple to use. If anyone reading wants to try this out, feel free. Just head over to https://crypter.dev and test it out. The process is very straightforward and doesn’t require any sign up. To encrypt files:
1. Choose a message or file to encrypt
2. Select Encrypt
3. Copy the link and the decryption key
4. Send to the recipient or decrypt it in a different tab.

Here are some snippets of the process

After selecting “Decrypt your message” Crypter shows the original message, as long as the decryption key was correct.

Why Crypter?

I selected Crypter as one of my top options because I am excited to learn more about the .NET Framework, and I’ve also taken several classes in the security realm. .NET development excites me because I believe it will become increasingly in demand for software developers in the future since it is so simple to install and run applications on any system, as long as they have the appropriate .NET framework version. I know several colleagues, friends and acquaintances who work for organizations using almost strictly C# and the .NET framework. In my career, I’ve had the opportunity to develop a few small projects in C# and have gotten to see the benefits of .NET but I’m hoping to become more proficient going forward.

During my time in IT, I’ve gotten to explore various aspects of computer security which has always been fascinating. More recently, I’ve taken cryptography, along with other security classes at OSU that I feel will be helpful when working on the implementation details for this website. In my career, I’ve seen sophisticated malware, seen how YARA signatures are created to protect against malware, and most importantly for this project, how files are encrypted and decrypted using certain cryptographic functions.

Questions & Ideas

Currently, I have a few questions that I hope can be answered during our first few meetings with our project sponsor. The first one would be knowing what encryption scheme is used to encrypt the message and is it collision resistant? The other, which isn’t necessarily a question about Crypter itself, the user has to share the key with it’s recipient, how can they do that in a safe way? Maybe a solution could be: once a user creates an account, there could be an encrypted messaging platform, so the user could have a seamless experience sending the message to it’s recipient. As of now, I could see someone encrypting a message, then emailing or sending it using another chat form that is unencrypted, which completely defeats the purpose. This isn’t an issue with Crypter in itself, but I’m curious what the ideal flow would be for a user.

I’m excited to keep this blog updated as I work with my team to develop solutions and get some of these questions answered! See you next week!

It’s All Coming Together

I am finally near the end of my education! It’s been a long and challenging journey. It started as a carefree high school graduate with no direction, motivation, or inspiration. I went to community college only because it was the thing to do, and my mom worked there so I got free tuition. If it weren’t for free tuition, I may have never gone to college.

What did this lead to? Me wasting my time, not putting in effort and getting sub-par grades as I did in high school. However, I had always had a passion for computers. Whether it was fixing computers, learning about software, or playing games. This led to me getting a job working computer sales at Best Buy; which further sparked my interest in computers.

During my 3rd year at Community College, I took an intro to Computer Science class. My Professor, Andrew Scholer, inspired me to dig deeper into computer science and the thought of building software with computers became exhilarating to me. It was also at this time that my mom stopped working at the college and I had to pay full price for tuition again. Ironically, this was one of the best things that happened for my education. It forced me to take my education more seriously since it wasn’t being given to me.

Coming to OSU & Advancing my Career

Fast forward two years and I have finally finished my associates degree in 5 years. Not great, but better than not finishing it at all. I was proud of myself. I was hoping to get a bachelors in computer science but I was unsure where to go after my associates. In my heart, I wanted to go to OSU but my GPA was too low to get into pro school. I had somewhere around a 2.7 after finishing my associates. Luckily, OSU decided to drop the pro school requirement right when I was looking to transfer. I was able to get accepted into the CS program and have a fresh start!

At this point I had advanced my career at Best Buy and was working as a repair technician at Geek Squad. It was inspiring seeing some of the crossover between the computer science I was learning at school and some of the systems I was working on at work. I started playing around with scripting in Bash and used some scripts to automate some of my work when I had to repair Apple systems. This is when I truly started seeing the value of computer science in practice.

No More Free Time

During my college career, I had been working full time and doing school part time. I thought that starting at OSU would be a good time to put all of my focus on school. So I decided to take one term of 16 credits. It was nice only working 10 hours a week, but the commute from Salem to Corvallis was very taxing. I also found that I spent most of my time trying to get everything done on time instead of immersing myself in the course material like I wanted to.

For this reason, I decided to take a different path and started looking for a new job so I could go back to part time school. I was hoping to find a job that paid better. One where I could apply my computer science knowledge and support my growing family. I initially got a job as a technician for the state of Oregon and worked there for a year. Eventually I moved into a more open ended role at a local business. I felt this new position would be a better opportunity to grow my career.

In my new role I’ve been able to apply programming experience by doing some scripting and system administration with PowerShell. The culmination of my job and education experience has made learning new technologies much easier. It feels like things are all starting to come together. It was difficult leaving a stable job with fantastic benefits, but I believe it was the right choice. Time management has been very difficult though. Working 45 hours per week, making time for my wife and seven month old, while taking 8 or more credits has been challenging.

The Coming Year

This will be the 8th, and possibly final year of my education. This journey has taught me the importance of hard work, time management, and dedication. At OSU I’ve been able to keep my grades over a full point higher than in high school and college. For me, all it took was some motivation and direction. For my capstone, I am hoping to get a project where I can utilize the teamwork skills I’ve learned while working in IT, as well as the programming skills I’ve learned at OSU. I am excited to work with a team to build a project that is something we can all be proud of!

Cheers to what should be a great year!