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