Category Archives: Uncategorized

Personal Projects and ChatGPT

A Fun Way To Build Your Resume

Let me preface this by explaining how the Online Capstone Project works (if you aren’t enrolled in the class). We are mostly focused on working on our specific projects. In my case that is the Malware Analysis project. However, we still have posted reading on a weekly basis. These serve as short introductions to useful material for students preparing to finish their academics and move into the professional world in the realm of software engineering. This week, one of the “Explorations” was titled “Programming Projects” [1]. In short, this class article described how building hobby projects is a good way to build out your resume, especially if you are light on work experience in your chosen field.

Let’s first consider the benefit of working on your own personal project. Well there is the obvious benefit, it shows a direct example and proof of your skills to employers. However, it also shows motivation and the ability to bring a project from start to completion [1]. Beyond just resume building, it can also be a great way to build up new skills and gain experience in new technologies.

Sounds great right? Well if you are anything like me, often the hardest part of this process is deciding on a project and getting started. There are unlimited possibilities when it comes to designing your own personal project. What do you do if you cant decide?

ChatGPT to the Rescue

Honestly, this Exploration got me thinking…..and thinking. Lately, even before this article, I had been wanting to start a personal project, especially as my time in this program wanes. I like to feel like I am always learning. However, I am often quite indecisive. I research and come up with ideas, and often get so bogged down in the decisions I don’t even end up starting anything.

I am sure you have heard of ChatGPT. It has been everywhere in the news lately. It is an AI chatbot that operates in a conversational manner [2]. You can ask it any question and have an actual conversation with it. It remembers previous questions and statements so that you can refer back to things said earlier in the conversation. It’s very cool.

Well, I thought, maybe Chat GPT can help me decide on an idea for a personal project? My idea was that I would tell it a bit about what skills I had and what I wanted to work on. I even thought that I could tell it my timeframe for completing a project and have it give me options based on that as well.

Prompts

Instead of just telling you about the results I received, I thought I would build out this blog post to include prompt suggestions if you want to use ChatGPT for similar reasons. I find that I get the most out of ChatGPT when I am as specific as possible. Therefore we have two options here. We can either tell it exactly what we want: a general topic, a technology and a timeframe. Or, we could set up ChatGPT in a manner that lets us perform the same process for multiple project ideas.

In preparation for this article, I spent quite a bit of time experimenting with prompts and found the following to be the most successful.

ChaptGPT: Intro Prompt

We ask Chat GPT to generate a project idea for us based on a general topic, technology and a timeframe. We also ask it to breakdown the project based on learning outcomes, skill prerequisites and how to get started. Lets see what ChatGPT gives us in response.

ChatGPT: Response Part 1
ChatGPT: Response Part 2

Wow! ChatGPT gave us exactly what we asked for. Now we have a decent outline for this sample project. It even gave us a week by week task breakdown. What if we want an alternative project? Lets ask ChatGPT!

ChatGPT: Alternative Project Part 1
ChatGPT: Alternative Project Part 2

Another great idea! We get another detailed project outline, with enough information to get us started.

What if we have questions for ChatGPT about the prerequisites? We will tell ChatGPT that we are not confident in our machine learning concepts. Lets have it give us a recommendation for how to proceed.

ChatGPT: Follow-up Prompt

ChatGPT has given us an outline for how to develop our machine learning fundamentals before we tackle the project. It even recommended online courses and books to read.

Conclusions

Well I think that it is clear that this is a great way to generate project ideas in a fun and interactive manner. I have shown enough to get you started, but you can really take this as far as you would like. You can ask ChatGPT to flesh out the outline more. You can ask it to give you additional resources for learning skills. The possibilities are endless. Just make sure to keep in mind that ChatGPT doesn’t always return up to date or correct information. It was trained on information that ended in 2021. So take everything with a grain of salt.

References

  1. https://canvas.oregonstate.edu/courses/1901255/pages/exploration-programming-projects?module_item_id=22693141
  2. https://openai.com/blog/chatgpt/

An Update: What I’ve Been Up To

Photo by Kevin Ku on Unsplash

During my last blog post, I briefly introduced my project for this term. I cant really believe it, but we are coming upon the Midpoint Archive assignment next week. If you aren’t aware of what that assignment entails, we basically need to compile and report on everything we have been working on over the last few weeks. I imagine that it is supposed to signify the halfway (Mid) point of the Capstone Project. Regardless, time has really been shooting by at light speed. It may seem late, but I think that now is actually the perfect time to give you a more in depth introduction to my project and what my team has accomplished over the last month. I have firmly wrapped my head around exactly what we are doing and what is expected of our final results.

My project is the Malware Analysis research project. Briefly, our goal is to document the process of setting up a safe virtual lab environment to use for malware analysis and then to document the basics of the actual analysis. No one on my team has ever dealt with malware in an educational manner before. Additionally, there are certain characteristics that the virtual needs to conform to, in order to be safe to use. While we have all had some experience with virtual machines in the past, the specifics of this project were new to all of us. What does this all mean? It meant that we had to accomplish a lot of work up front in order to contextualize, for ourselves, exactly what we were going to be accomplishing. This is part of the reason I held back on this particular post. It is hard to talk about what you are doing when part of the project entails figuring that out. Yes, we had specific goals. But how do you set up a virtual network? What hypervisor should we use? What is Basic Static Analysis? What is Basic Dynamic Analysis? These are the types of questions we had to consider during the planning stages of this project.

We had a lot of questions, and taking the time to answer these questions for ourselves meant that we ended up with a fairly robust project plan. We built out background information that helped us determine why someone might want to engage with a project like ours. We also defined, for ourselves, a lot of the terms specific to this project and malware analysis. For example, basic static analysis refers to when an analyst studies a piece if malware without actual viewing the actual code or running the malware [1]. Basic dynamic analysis refers to when an analyst studies the behavior of malware while it is actually running using various techniques and tools [2]. We broke down tasks as much as we would and decided what each of us would be working on from week to week. We also decided on the tools we would be using during the completion of our research project. For example, we decided on using the Virtual Machine Hypervisor VMware Workstation Pro. A Hypervisor is software that generates and hosts virtual machines [3]. This hypervisor is not free, like some of the alternatives [4]. However, Oregon State University offers licenses to active students. It offers a lot of control over settings for Virtual Machines and Virtual Networks [4]. Because we are dealing with malware, we wanted to have as much control over our lab environment as possible.

Photo by Jason Goodman on Unsplash

Once we had our general plan, we moved to actually setting up the Lab Environment. This took a bit over a week to set up properly. We took our time for set up and documentation in order to make sure that our environment met our specifications exactly. We did not want to take chances when dealing with malware. Even though we will not be dealing with extremely dangerous samples, the point of this project is to generate a guide that malware analysts can use to get started with their own endeavors. Additionally, this set up has many different parts. We first had to create new Virtual Machines. We ended up generating three machines, one Windows 10 and two Linux. We also needed to set up the machines with any necessary tools, for analysis, before they were disconnected from the Internet. We then needed to create a virtual network. A virtual network is a network that is created using software instead of hardware [5]. This virtual network needed to be as isolated from the physical machine and live Internet as it possibly could. Next, you have to set up the machines to use this custom virtual network. Finally, you need to adjust any other miscellaneous settings for maximum safety.

Furthermore, this past week we actually began analyzing a real malware sample. We made sure to properly source the malware. We then performed several methods belonging to Static Analysis on the sample. These included computing hash values for files and running them against known signatures, String Search, and PE Header Analysis. Perhaps in a future blog I will delve deeper into what these techniques entail. But, I don’t want to bloat this post too much with a long aside. Overall, we were able to learn information about the sample using various tools and techniques. We documented how we accomplished all of these tasks as we went.

Photo by Drew Beamer on Unsplash

Finally, lets briefly talk about what will be coming up for our team in the next few weeks. The next task we need to accomplish is to begin Dynamic Analysis of the sample. This will involve actually running the malware (exciting!). We will get to see firsthand how it behaves. I have a feeling that this will be the most exciting portion of the project. After that, we will be repeating the processes for other samples. Finally, if we have time, we will be completing a secret (for you) extension of the project. Be sure to stay tuned to learn more!

References:

  1. Ninja, Security. “Static Malware Analysis.” Infosec Resources, Infosec Resources, 12 June 2021, https://resources.infosecinstitute.com/topic/malware-analysis-basics-static-analysis/#:~:text=Basic%20static%20analysis%20consists%20of%20examining%20the%20executable,will%20allow%20you%20to%20produce%20simple%20network%20signatures.
  2. “Basic Dynamic Analysis.” Infosec, Infosec, 8 Nov. 2022, https://www.infosecinstitute.com/skills/courses/basic-dynamic-analysis/.
  3. “What Is a Hypervisor?: Vmware Glossary.” VMware, 21 Jan. 2023, https://www.vmware.com/topics/glossary/content/hypervisor.html.
  4. “Windows VM: Workstation Pro.” VMware, 3 Feb. 2023, https://www.vmware.com/products/workstation-pro.html.
  5. “What Is Virtual Networking?” VMware, VMware, 25 Jan. 2023, https://www.vmware.com/topics/glossary/content/virtual-networking.html.

Malware Analysis: An Introduction and Practicing What I Preach (or Stress Management Part 2)

Photo by Michael Geiger on Unsplash

My Project is….(Drum Roll Please)

Its been a while, huh? Well … about two weeks to be precise. Now maybe that isn’t that long a period of time, but it really does feel like ages to me. That is because many things have changed and shifted in CS 467 : Capstone Project. The last time I posted, we had not yet been assigned to project teams and a lot was still uncertain. Fast forward two weeks, and we are just past the planning stages of our assigned projects. We are now truly entering into the main event. I am tempted to call it the “development” period, but I won’t. For many teams, it actually is the development period for their projects, the time when they build out their software. However, that isn’t really the case for myself and my team. I have been assigned to the project “Malware Analysis”. I will get into what the goal of the project is shortly. However, the aspect of the project I have been hinting at, is that it is a research project. My team isn’t focused on building a product. We have been given an overall goal and have been tasked with generating a final report based around how we accomplished it.

You could probably tell by the project name that we will be dealing with malicious software (Malware). The project has multiple interconnected goals. The first goal is to create a safe virtual environment that an analyst can analyze malware on. This environment should be composed of multiple virtual machines that all connect to each other through a virtual network. The second goal is to use this Virtual Lab to perform actual Malware Analysis on malware samples. There are two basic types of analysis, Static and Dynamic. These are our focus. The Malware Analysis project will culminate in a final report that basically details the steps required to accomplish these two tasks. The idea is that our report can serve as a foundation for further Malware Analysis tasks, for us or for other analysts [1].

Photo by Glenn Carstens-Peters on Unsplash

Bringing it Together

Now, this blog post does have a purpose beyond just introducing my project (though it is an intriguing subject). If you recall my previous post, Blog Post 1: A Wide Open Vista, I discussed how I generally react to and deal with new (stressful) situations. I likened the feeling to emerging from a forest, where you were able to follow a path and your viewpoint was limited, onto a trackless and wide plain. I found myself in this exact situation this week. I decided that this gave me an opportunity, within this blog post, for some continuity with my previous post. I also have some new thoughts on the subject to share.

There is a difficulty, and therefore value, in bringing methods into practice. As I mentioned above, this week was the real start to the Capstone Project in many ways. Yes, my team and I spent quite a bit of time last week doing background research and fleshing out how we could accomplish those three goals for our project. However, that was for a specific and narrow goal. That goal was the completion of what amounted to a Project Plan Proposal. I had my comfort blanket, a bullet point list of what needed to be included in the report. This week, though a lot of what I’m doing is similar to my tasks last week, something feels different. This is probably for three reasons. Firstly, I no longer have my bullet point list for what to do. We did generate a breakdown of what each team member would be doing each week, but that isn’t quite the same. I only have three decently vague overall goals. Secondly, it is time to actually begin setting up the Malware Analysis virtual lab. I have emerged onto the wide open plain in my analogy from last time. Thirdly, it is hitting me that I will be purposefully interacting with Malware. This is exciting, but also a bit intimidating.

Photo by Hans-Peter Gauster on Unsplash

A Good Thing

I have mentioned this previously, but I will say it again. This sort of feeling is normal. I would venture that everyone feels this way, to some extent, whenever they are starting anything new that they want to succeed in. I feel this way all the time and that is okay. In fact, it is a good thing. This week, I recognized that a large reason I felt this way is that I care. I want to accomplish the project’s goals alongside my team and help us write a great final report. What could be wrong with that?

One of the hardest parts about new situations is getting started. You can feel stuck, not knowing where to begin. I mentioned in that first blog post that when I am in a new situation, I try to focus on “movement”. To me, that means doing anything that pushes me towards my goal. It doesn’t have to be the most efficient use of my time, the important point is that I build up momentum (an object in motion tends to stay in motion…). It is then easier to see where I am going and what I need to do to get there. In the Project Plan, our team broke down what we should each be accomplishing each week. However, somehow, this week I found myself not knowing where to begin. So, following my own advice, I just started. It didn’t really matter where I began, just that I did. So I started by downloading the hypervisor our team had decided to use to set up or virtual lab. We had decided on VMware Workstation Pro 17, for several reasons. I got it setup and designated where I would be storing our virtual machines. I could then move onto looking into where my team could download Disc Image Files (ISOs) for the Operating Systems we wanted to use on the virtual machines. This then led me to researching how VMware Workstation Pro 17 allows users to configure virtual networks. I went on from there. The technicalities aren’t the important part here. Once I got going, it became much easier to decide what I would do next.

Lastly, I wanted to mention something that I did not cover in the last blog post. Having a team can be great when you are faced with uncertainty. I recommend talking to them if you are feeling unsure about your direction. The process of bouncing ideas off of my teammates and discussing what each of us was doing helped me immensely in determining where I was going this week.

Photo by sydney Rae on Unsplash

Closing Thoughts

I started off this week a bit worried to be honest. I am sure I’m not the only one. However, I am now feeling quite positive and confident (I hope you are too). Yet, I am hesitant to offer advice to anyone. Chances are that I do not know you well. However, I can say that my methods work well for me. This last week has only further demonstrated that for me. I believe part of it is getting to know yourself. Luckily, I am mostly aware of where my stress is stemming from. That allows me to target it. That being said, maybe my thoughts will resonate with someone else. I hope we all have a great term!

References

  1. “Malware Analysis, EECS Project Portal. , https://eecs.engineering.oregonstate.edu/capstone/submission/pages/viewSingleProject.php?id=pf4xE8KXc0Jf8Td8. [Accessed: Jan 25, 2023]

Blog Post 1: A Wide Open Vista

Photo by Chris Linnett on Unsplash

The Calm Before The Storm (Or Is It?)

It is the first week of class and it is time for our first Blog Post. What do we write about? Most of us haven’t chosen or been assigned projects and groups. It almost feels like the class hasn’t really started as of yet. What could we possibly write about? Yet, the class has started. In fact, this first week will frame the rest of the class. Likewise, this Post will set the scene for the rest of the content I will be posting on this blog. This week offers a generous opportunity for all of us to take inventory of where we are at this point in our studies. This includes both technical aspects and emotional/personal. As I do this for myself, I find my mind lingering on how I react to new situations.

For many of us, those who haven’t yet worked as a Software Engineer or Developer, this type of class could be a completely new experience. New experiences can be stressful. I want to take the opportunity, in this Blog Post to discuss how I handle stress management and feeling “stuck”. Specifically, when faced with a new situation that I do not yet have the context or previous experience to understand and/or predict. I will use this class and my preparations for it as some examples. In my opinion, being able to prepare for and deal with uncertainty in a healthy way is an important personal and professional skill. I will share my perspective and what actions help me when I am feeling lost and stressed.

It is also important to mention that every person is different. They handle stress and anxiety in different ways. It is not my intention to tell anyone how to feel or what works for them in terms of stress reduction. I only want to explain what methods help me manage my stress and how I approach these types of situations.

Emerging From the Forest

Photo by Lucas Parker on Unsplash

As I begin this class, I find myself met with a plethora of conflicting emotions. I imagine I am not alone. The first and most prevalent, is excitement. I love what this class represents. It is the culmination of everything we have learned up until this point. Not only specific technical skills (languages, algorithms, etc.), but how to learn new skills. It is also an opportunity to build something I can be proud of. However, the open ended and self-guided nature of this class also brings up feelings of uncertainty and confusion. Whenever I am faced with a new situation, I experience similar emotions. I am sure that you would all agree that this happens all the time while studying Computer Science. When you aren’t familiar with what you are doing or the dynamics of the interactions you will be having, it is natural to experience stress and anxiety. That’s why it is important to develop methods to deal with these emotions in a healthy and productive manner. So while I still experience these emotions, I’ve become very comfortable with being uncomfortable.

The first step I take while preparing for a new or stressful situation like this is to admit to myself that I am not perfect. I allow myself to doubt, to worry. What if I don’t have the skills to properly complete the capstone project I am assigned to? What if I don’t get along with the people on my team? These might be questions someone would ask themselves at the start of a capstone project. I don’t feel the need to block these questions out of my mind. Pretending these worries do not exist will not make them go away (at least that doesn’t work for me). Doubts only become negative and toxic when you allow them to control how you feel and function. I acknowledge my doubts, then move on. I try to focus on solutions instead of dwelling.

I let my doubts define the actions I need to take to overcome them. I actually write myself a list. If you are concerned that you don’t have the skills to complete a project, figure out what skills you need to teach yourself. If you are worried that you will not get along with teammates, research how professionals handle team conflicts. Again, focus on solutions, don’t dwell on uncertainties. For myself, even the act of dissecting my doubts and creating a plan to combat them makes me feel more confident in myself. That, in turn, reduces my stress and anxiety regarding the situation. In fact, I followed this exact method this morning. I was feeling worried because recently I had to take multiple terms off (not in a row) from the program for personal reasons. I started to doubt my abilities and memory. However, I wrote a list of my doubts and how I could overcome them. I realized things were nowhere near as bad as I had imagined, and I now have a plan for how to address any skills I need to brush up on.

Furthermore, when I am dealing with stress that is manifesting due to uncertainty, my philosophy is to focus on “movement”. What do I mean by that? I find that I think best in these situations by making any type of progress. If I don’t know where exactly to start, I just pick a likely starting place and begin. It is easy to get caught up like a deer in headlights. What should I do? Where do I begin? Sometimes the most important thing you can do for yourself when you are stuck is to just do something. Make some sort of progress, even if in the end it ends up that it wasn’t all that important for your goal. As you progress you will be able to determine what is and is not necessary. Maybe you start by researching a new technology for your project. While you are researching it, you discover that it won’t work for your needs. However, in your research you learned of alternatives that might be just what you are looking for. Don’t let yourself get stuck at the beginning of a task. In my opinion, that is the easiest portion of a project to get stuck on. For this class, I was feeling nervous, so I started this blog. I couldn’t start the project, but at least I could get my thoughts and feelings out.

Finally, I find it helpful to remind myself that new experiences are one of the best parts about being alive. Yes, there might be some hard days ahead, but I am investing in my future. I didn’t learn to read or cook in one day. There were challenges and more than one dish my family had to force down on my behalf. Now these skills comprise two of my favorite hobbies. You never know when you might be learning or participating in something that could change your life for the good. I hope that CS467 turns out to be that sort of experience.

Wrapping It Up

Photo by Max Duzij on Unsplash

All of the previous classes I have taken in this program have been much more guided than this class. I was told what to study and given the exact documents and resources I needed to succeed. It was like I was walking on a path through a forest. I found my way by staying on the track laid out before me. Sometimes a rock obstructed the way, but I was always able to find where the path picked up. However, now I have emerged from the forest and in front of me a large trackless plain stretches out to all horizons. This isn’t only represented by this class, but by especially by my future software engineer career. This is a good thing. I believe that it is in these types of circumstances that we truly grow. If you keep the training wheels on forever, you wont ever really learn how to ride a bike. New experiences can be one of the best parts of life. I look forward to learning and will continue to practice and develop my stress management techniques to help me along the way.

Blog Post 0: Self Introduction

Hey everyone!

I am new to the practice of blogging. Of course, I am familiar with what a blog is. I have even read several of them over the years. I just never really considered that I would ever write one. In fact, I used to wonder about how blog writers kept coming up with topics, post after post. Well….. here I am (wish me luck!). It sometimes seems strange how often I find myself performing tasks that I never considered I might be required to do or even want to do. Well, for better or worse, I am excited to give this a shot and I will do my utmost to inject a bit of my personality into these posts. Hopefully, that will make them engaging to read.

I thought the best way to begin would be to write a short post introducing myself. My name is Claude and I was born, raised and currently live in the New England region of the USA. I love to cook, read, and travel. In terms of cooking, I like to cook dishes from places I’ve visited and places I want to visit. I enjoy books of all types and lengths, though I would say that I generally read speculative fiction for pleasure. I particularly enjoy really long fantasy books/series (think Lord of the Rings or The Wheel of Time) and pretty much always have a book that I’m currently reading. Who knows, maybe I will find a way to incorporate those passions into this blog. Stay tuned!

My first degree was in Physics at the University of Richmond. My original goal was to pursue a PhD in a subfield of Physics and go into academia. I had even taken the GRE, applied to several different programs and been accepted to a few of them. However, as sometimes happens in life, I realized that my heart wasn’t truly invested in the path I had laid out for myself. Additionally, I didn’t have the desire to teach at the middle school/high school level. I might get more into this situation during a later post (we will see).

I was actually introduced to programming through physics. When I decided not to pursue a PhD in Physics, I performed a self inventory of what I had learned in college and what I was interested in. Through a bit of experimentation, I discovered that I really enjoyed the sense of building something with programming. I enjoyed the technical aspects of CS and programming, but also fell in love with the inherent creativity it offers. I explored a bit on my own, and eventually ended up applying to this program.

Professionally, before and after entering this program, I worked for a local construction company. I functioned in a managerial position. I wore many hats but an important aspect of my job was moving the company further into the digital world. This involved aspects of inventory management, online presence, advertising and a whole lot more. I would say that the greatest benefit I received from this job was truly learning to work as part of a team. I recently stepped back from that position in order to focus on finishing my CS degree.

I am very excited to get to know many of you throughout this class. If you happen to find my blog and are not in CS467, welcome as well! If you think we have similar interests, feel free to reach out to me. I’d love to discuss cooking, travel, or reading with you.