Categories
My Ramblings

Personal Development Goals

So this is a conversation that I had with my boss this week and thought it could be a good place to get my thoughts out about the personal development goal and some ideas about it. The conversation wasn’t just about this, but also my goal for the year in terms of what projects I achieve. He had already given me some of the things that I would be accomplishing in this year so I didn’t need to worry much about the goals.

In terms of my personal development goal, well, I was a bit unsure of what to do. He had given me some ideas and I also had thought of some for myself during the meeting but never really came to a conclusion as to what I should put down. So how about let’s talk through the goal.

So a personal development goal is basically as it reads: what skill do you want to develop in the next year? And that kind of question is so broad because sometimes you don’t even know what you should or want to learn even now. As well as there should be a way to measure your development so by the end of the year you have something conrete to show for your development. My boss gave me some ideas and I’ll expand on them.

So first, and arguably the hardest to measure is time management. Now this is a skill that can apply to most anyone. Don’t think I havea to go too deep into this one, but being able to manage your time to the point you don’t feel overwhelmed or behind schedule or ensuring that you have the time in order to work on things and stay productive is a great idea. Highly recommend this for the people that feel like that need to work on their time management. Also a good fall-back option if you can’t think of any.

Another one is a programming language in terms of data analysis, data visualization, and web development. Of course you are not limited to those types of usage for programming language but those are more relevant for my position. You could learn to write a script that will be able to take in data and format it and print out a graph that gives valuable information or make a web app that allows the user to control what you want to visualize or some internal tool that the company would have a great use for, it’s a vague but also specific type of goal that I really like since you can specify what you language you want to learn, but not entirely sure what you could use it for in terms of business value.

The next one is documentation. Now this is something that I’ve never learned much about and so far I’ve done a little bit of this in my position, but this would make it so that I would be doing more documentation on project requirements, or the test plan or the test report and so on. I really like this one simply because I do not have the best skills in terms of documentation, but something that’s extremely useful in the field in general.

The last one I will go over is Cloud Application development. Recently I saw a teammate use AWS for scaling to run a job and that got me interested in maybe learning more about AWS/Google Cloud Engine/Azure since those are both incredibly valuable skills for jobs as well as something that we’re seeing more and more of. Another highly recommended development goal. Doesn’t help that there’s a class here at OSU about this exact topic so if you’re still missing one class to finish the program like I am, its a good way to get the most usage out of your development goal during the year.

Now personally, I’m going with the programming languagae goal. I dipped my toes into Golang in summer and since then, I’ve been looking for a good project to learn this incredibly useful language in. Haven’t found it in the personal project realm, but putting it to use for a web application or for developing a cloud application I can see this being incredibly useful in the long run and hope to develop some great Golang skills by learning more and more about what I can do.

Hope you maybe start to think about your development goal and maybe even come up with one for this year!

-Gianluca

Categories
My Ramblings

Personal Projects

Now back on to a topic more similar to that of the capstone project: our own personal side projects.

Of course, now a lot of our time is concentrated on our capstone project, but I’m sure there are going to be people out there that want to work on some sort of side project because this capstone may have given them that they could really use the skills they learned throughout the course of this degree to make something and expand their knowledge. Well I’m here to do two things, one much shorter than the other: help you figure out what projects you can do, and my own project that I will be taking on.

Let’s start with the shorter one: finding your project. Personally, I have looked a lot at different project idea lists out there. A lot of them are incredibly helpful in order to learn different parts of building software, from taking input, databases, web apps, and so on. But while those lists are great, I found that I wouldn’t be very motivated to actually even start them. They were definitely going to be of help in learning, but I never really was able to start something that I didn’t have at least a passing interest in. Sure coding/programming was and still is a huge interest, but I didn’t want to put in time to make something that I would just discard basically right after.

So what I figured was to find something I was interested in and look for an idea in there. There are so many ideas that you could find in your everyday life or a hobby. For example, my first project was about half a year before I started here at Oregon State and it was a simple desktop app to get the info you wanted about Board Games from BoardGameGeek.com and output it to a .csv file. I wanted a fast way to get the info without having to go in and manually search it up each and every time. Simple project that took a long time just because I was learning about programming a desktop UI for the first time and learning new concepts. Looking back, I could definitely improve the app, but I had a lot more incentive to make it because I was going to use it.

Now that ties in perfectly with the side project I’m going to work on. I don’t remember if I mentioned, but I’m a huge soccer fan and on top of that, I’m a huge Football Manager fan too. It’s a game where you become the manager of a team basically anywhere in the world and try to turn your team into a world beater. Sounds fun, right? It truly is! But I’ve found that tracking my saves can be a bit of a slog at times. I want to be able to go back in time and see my squad composition 5 seasons ago and see where I improved, or to see my results against a specific team or manager. And on top of that, compared players and teams across saves AND version of Football Manager (20 vs 21 vs 22 for example). So my idea was to make a save tracker for FM. And honestly, I need to put this down on paper in some capacity in order to get my ideas down right.

Now it sounds pretty pedestrian in how to make it, just a few forms to add some players, results, etc. But the issue is that there are so many stats to take into account and some people may want more specific stats or the like. And on top of that, manually adding players, results, transfers, and so on can be a massive time sink with how many stats there are to add. So I would have to implement some sort of backend database (SQLite in my case only because its a desktop app) and be able to read a file (either .html or .txt) and imput the players that way.

That’s just the basic functionality I’m talking about here, and I know there’s so much more I can talk about, but it gives you a glimpse into what my plan is after I complete this capstone project as well as the program and have time after my full-time job in the night.

Feel free to comment on my project or even about an idea you have for a project. Enjoy your little project hunting on the side, but do make sure to actually write the ideas down so you don’t forget later on!

-Gianluca

Categories
My Ramblings

Home Servers

Now here’s a technology that I’ve been heavily looking into the past few weeks/months/years. It’s not necessarily a new tech, but it’s something that has started to gain a little bit of traction, at least from what I can tell. I can’t really, or want to, pin down a time where the home server started to become a subject people started to think about more and making services for home servers/labs. I will say though, that the introduction of the Raspberry Pi to the market really catapulted this idea into the mainstream, or at least the more tech based mainstream. You probably have heard of it, especially if you are on a Computer Science capstone blog, but in case you haven’t, the Raspberry Pi is a single board computer that can be used to learn programming and have some practical uses, from monitoring internet speeds to hosting a file server. The uses for the Raspberry Pi are lengthy but one of the things many people use it for is for home servers.

While the first iterations of the Raspberry Pi weren’t that powerful (if I remember correctly, generally having less than 1GB of RAM), the newest Raspberry Pi 4 has RAM from 1GB to 8GB which means it can host a lot more. I don’t want to make this post only about the Pi, but you can see how this is such an incredible tool that many people use because of the power consumption (which is incredibly low) and small form factor. The biggest use of the Raspberry Pi that I have seen is definitely in what’s called a Pi-Hole. Pi-Hole is a network ad-blocking system which is insanely useful to have. If you have other people in your house and they aren’t necessarily tech literate or don’t want to spend the time adding an ad-blocker to their browser, then this is an easy fix. It allows people to browse the internet with minimal to no ads as well as saves bandwidth on the internet because you’re browser won’t start to even load the ads in the first place! It’s amazing that people were able to develop something like this and it technically can cost less than $100 total (not including power over months). But let’s look more at home servers in general.

Home servers can really be run on any computer. Take an old laptop that you have, that can be a server, albeit not the greatest, and you can start to use it for your needs, which I will get into soon. But the more common ways to have a server are either through an old desktop (which is what I have), buying a used server that’s in desktop form, or (probably the best, but can be expensive) is having a server rack. There are pros and cons to each, but I feel like having a server rack may be excessive for some people’s use cases thus an old desktop or a used server would be the way to go in my opinion.

Now, what do you want to do with that server? Well there’s a LOT you can do. Let’s start at the practical uses. You can have a file storage system, you can have a media server where you put your downloaded videos/music/photos on for use on a TV or other computer. You could also use it for hosting your personal wiki or even to develop code on. Take a look at this GitHub repo. It has a huge list of different free self-hosting network services and web applications that you can put on your server. Generally you would host your services on a Linux OS as many services may not work well on Windows or simply because you have to buy a license, while with Linux, the OS images are free and plentiful. Of course there are different ways of hosting (container services or just normal hosting on the computer) but in reality you can do whatever works best for your hardware and what you are willing to learn. In my opinion, Docker is the best current one as it allows you to have containers of the services and easily stop/run/restart them. I’m still learning about Docker, but personally its one of the better ways of hosting services

Now the only big question remaining about hosting is how to access the server and applications within the server. Every server has an IP address and you can easily access the apps within the server with a port that the application is using. For example, Portainer, a service to help with managing your Docker containers, uses the port 9000 so if you had a server running with Portainer all you would need to access the Portainer web GUI is <Server’s IP Address>:9000 in the address bar and bam you have reached the site. But say you want to access the server by typing in a name instead of only numbers, well then its gets a little bit trickier. You first would need to have a domain name (at least I think, but is how I will be setting it up myself) and then set up a reverse proxy in order to access those sites with subdomains (www. or wiki. are examples of subdomains). Now this is the part that I’m still a bit hazy on, but I just know that reverse proxies are important to accessing servers and their applications. Lastly, in regards to accessing the server/apps on it, is the question of do you want to access it outside of your home internet? Generally the answer may be sure, but also do keep in mind that it will expose your network to malicious attackers so you would have to use multiple safeguards through firewalls, fail2ban, or other ways to ensure that attackers do not get ways to your network. Another favorite option is using a VPN in order to access your sites/files which is also a secure way but you have to look at your needs and really see if you would like to and need to expose your apps to the wider internet.

And that concludes my little talk about home servers. There’s a lot of other things I could mention like which OS to use, VMs vs Containers, etc. but that would make the post too long since there is so much about home servers that you should know before delving into actually creating one for yourself. But if you do decide you want to have some sort of home server, I’d recommend reading a lot about how to secure your server and your network and just general knowledge things about servers like types of storage, what you would want to host, how to host and so on. There are so many resources out there that will clear up anything you have! So got out and enjoy the world of home servers, if you want to of course!

-Gianluca

Categories
My Ramblings

Organization

Organizing is a concept that many people struggle with and eventually kinda sorta figure out down the line. I know its something that I struggle with daily, either physically or on my computer’s file system. Taking a look at my file system, all I know is that everything is everywhere and there once was a semblance of organization before I got lazy and started to not put files in their right place. There are some things in my file system that are in their correct place, basically only my school files just to make sure that I don’t spend too long searching for a critical file for class.

When it comes to physically organizing my space, its been a ride. I moved in to my first apartment with my fiancĂ© back in May and only last month in December did we finally have a sense of organization in our place. The office was in a constant state of “it’ll be fixed soon” until then and only finally was the office and rest of the apartment organized. But unfortunately, I change up my desk setup every so often because I need a refresher of it. Thankfully it looks like now I’ve gotten the final set up with cable management and a more cleaner looking desk and this looks to have a lot more staying power than any of my previous setups.

While I spent a lot of time talking about my trying to organize an already disorganized thing (be it files or room), I want to talk about why organizing your file structure and code for a project from the get-go is so much more important than you might assume. Recently, one of my teammates decided to reorganize the project repo in order to have a clearer structure of what file does what and where things should go. While not revolutionary, it was really crucial to how our development will go in the future. Now knowing that the file called “gmaps.dart” is where the Googe Maps screen lives makes it easier to find and fix any potential errors and even test the errors/fixes that you make on it.

Having an asset folder is also crucial as you can dump your images (and give them descriptive names!) and then quickly add them to your screen without much issue. He has set this up at the best time: the beginning of the project because its so much easier to organize a few items instead of 15 different items.

On top of that, the actual code itself needs to be organized in a way that makes sense too. When designing code, if the language you are using has an entry point (the main function in Java, Dart, etc), you have two options for where to place it: the beginning or the end. There are pros and cons for each, which seem to be more about how you work personally. I rather have it at the top because its the entry point for the code, but having it at the bottom makes almost the same amount of sense.

When it comes to functions, having functions that call other functions close to each other is also good organization as you can more easily see what the function does and make sure that you pass/return the correct things in order to make the function work. Of course there are some exceptions to this rule, but by and large, having functions close to each other when one calls another makes it easier to compartmentalize your code.

There’s also the option of outsourcing your functions to other files in order to not muddle your main file and have different files for different operations which is hugely beneficial, especially if you have a bigger project.

Overall, there’s much to talk about when it comes to organization. Attempting to organize something utterly disorganized is a task in of itself, but rewarding at the end, but having something be organized from the get go is even more rewarding since you don’t need to go through that work to organize it. But it all comes down to if you are able to keep it up. Probably the hardest part about organizing is the simple idea of keeping up your organization, and while it may seem easier, you might slip up and forget and undo all your hard work to organize.

Start organizing your things in order to help clear yourself of time of finding things and to give yourself a nice feeling of knowing where everything is and not feeling anxious about the place around you.

-Gianluca

Categories
Capstone

My Desk Setup

My capstone project is just beginning basically. I’ve been tasked to create a preliminary draft and continue to iterate a UI for the app we are making but I discussed most of my thoughts on UI in my previous post. So today, I’m going to talk about something that I interact with literally every day, unless I’m on vacation: my desk.

My desk!

So there’s a lot to unpack here that’s for sure! First off, yes I have 4 monitors. I’ve found in the past few days that I don’t necessarily use all my monitors so I’m doing to down size to just 3 which should still be more than enough for my needs. In regards to the setup of 4 monitors, it took some trial and error to get to this style. I hadn’t ever had a vertical monitor before and decided that it could be of use, especially for programming, but I have yet to use it for that simply due to it being to the side. If it was in front of me it would be used a lot more than it currently is.

For what’s powering the monitors, to the right of my desk (standing desk from Fully) I have my PC hooked up. It has an AMD 3700X CPU, 32GB of RAM and the Nvidia 3070 GPU, which I had to pay an arm and a leg for in the current market where everything is way above MSRP. I built my first computer back in 2016 and slowly upgraded the components to the point where the only things from my original PC are my CPU cooler and the storage. The rest is all new and upgraded from their original.

Continuing on my desk you have my keyboard which is the Glorious GMMK Pro mechanical keyboard that I “built” a few months ago. The “built” is the fact that I didn’t have to do any soldering like I would with other keyboards, mainly because I don’t trust myself to do that as well as I don’t know how to just yet, but maybe soon. I also have a split keyboard (put away here) that I use for work where I switch up my monitors to the laptop dock input for work.

Speaking of work, you can see my work laptop in the far left of the picture where it is hooked up to a dock in order to connect to 3 of my 4 monitors for work.

I have 3 macro pads here (one on the right and 2 on the left), mainly for small macros but haven’t really thought of things to automate just yet, but I’m willing to hear any ideas you may have!

Above the monitor are 2 cameras, one for work and one for personal computer. Could have used just one but it is a pain to reconnect the cable each time I have work thus I have one for each for now. And above the left monitor is a key light which helps me stay in good lighting for my work calls.

In regards to the applications I use the most on my computer, it’s mainly the Vivaldi browser, KeePass XC for my passwords, Steam (game library), Discord, Spotify, Windows Terminal (from the Microsoft store for access to Powershell/Windows Terminal/WSL in the same window), Everything (file search that’s faster than the built-in one) and Visual Studio Code where most of my coding is done.

So that’s my setup! I’m usually found here during the day and night either doing work, doing homework, or playing video games. It’s something that I have put a lot of effort to being a place where I can be for hours on end.

Like I said above, this blog isn’t as much as a capstone post this week since I talked about my first part of the project last week, UI, but next week we should have more to talk about the project and my thoughts on the process for working through the draft process and any other part of the capstone that I do. Hope you enjoyed my post about my setup! Let me know if there’s any questions you may have about either the setup, the project or anything else in general!

-Gianluca

Categories
Capstone

The User Interface

Designing a User Interface (or UI) is something that I consider an art of sorts. There’s such a thin line between the UI being too cluttered (functionality) and being too minimalistic (aesthetic). Sometimes one element makes that difference, while sometimes its the size of the elements. Walking that line can seem easy before you start, but when you really start to design the app, you notice how hard that is. It can start off with an innocent want of adding a button at the bottom of the screen simply because its such an important function that the user needs to needing to have all functionality of the program in the main screen. I’ve struggled with this many times, from making a web application for class, working on a desktop UI for a personal project, or redesigning a form for work where you have to meet the needs of the client. I haven’t found the secret to making a good UI, but looking at different UIs from around the internet (web apps, phone apps, desktop apps, etc.), I’ve noticed that the most important aspect of a UI is great User Experience (or UX). User experience can be broken down into many factors like loading times, but I’m only going to focus on the UI here.

When you look at the UI of different popular apps, you can see why they are so popular. They just are intuitive to use. Take a look at Twitter’s UI below

From Google Play Store

Thankfully its a nice app to look at, and the UI really drives forward the notion of it being really easy to use. Look at the bottom row for example. Four icons which are universal in many other applications. The home button to take you back to the home screen (in this case your timeline), the search button to search, the notification bell for notifications and the email icon for your direct messages. Above that last button is the create Tweet button. And all of that takes up so little space and gives so much more for the timeline you have created for yourself.

Twitter’s app is just one of many, but notice how much the UI lends itself to having a great experience with the app. Your focus is on the main timeline, but can quickly switch to a different panel as needed with the tap of a button. It is something that we must strive to do in our own UIs for the capstone. UI design is not easy, usually you would go through many types of designs in order to find the right one that fit the requirements of the client, but once you do you still have to refine it to the point where the UX is great and the user is not frustrated with how your app is laid out. And this is all before even beginning to start the actual coding of the app and its functionality. Design takes the longest and gives the most reward to your app since it can be the reason a user keeps coming back to your app to use it.

In the end, UI is arguable the most important aspect of an application simply due to how it can take an app from mediocre to a daily used one. There still is always a fine line to walk between functionality and aesthetics, but if you can hit it correctly (like Twitter has in my opinion), the app becomes something that you try to emulate in your own projects down the line.

Now to work on the UI for the capstone!

— Gianluca

Categories
Capstone

The Start of a Journey to Cap Off My Time at OSU

Starting off a blog is always something I struggle with. I’m not the best writer, but I know that my writing will improve over the next 10 weeks simply because the more practice I have, the better I’ll get at it. Blogging to me is an art form that I just don’t get how to create. Sure, I’ll read blogs from time to time, but starting one is daunting. You need to learn the ins and outs of search engine optimization, market yourself well, and so on. There’s so much to start on for the capstone blog, but for now, a simple introduction should be perfect.

My name is Gianluca and I’m a 24 year old who’s graduating from Oregon State’s post-baccalaureate program in June of 2022. I’m super excited to finish the program because I’ve learned so much more than I ever could have without this program since it brings the structure that I need for learning a new subject entirely. I have many hobbies but if I were to list my top ones they would be video games, soccer, board games, biking, and learning about new technologies.

I know this seems fairly short, but there’s not much to say about the capstone yet since we’re just starting out, but over time I’m going to get more in-depth about my progress and how my team is moving along in getting our project to completion. As well as hopefully improving my writing skills. I’m so excited to have you join me in my journey to completing this degree! Andiamo ragazzi!

-Gianluca