I'm a full time student expecting my B.S. in Fall 2024 and my passion has always been computer science.
|
FriendMastery was my first useful website and compares people's progress on League of Legends, a popular online game. The technologies employed are a PostgreSQL database paired with the Flask web framework on a Debian system. These work together to serve not only static content but dynamic content that depends on user input. Here's an example of a profile: https://lolmastery.net/view/640d51b6-c7c9-4eb5-9cc1-e60d389a8e00. It functions relying on Riot's API, the company who owns League of Legends. On the frontend, Jinja templates help serve content and simplify forms. Javascript (AJAX) is also being used to show dynamic content. I made it to compare players' 'Mastery Score' since there wasn't other sites that compared this metric. There are lots of other sites revolving around League of Legends statistics, however they tend to focus on 'rank' and I never found another that does 'Mastery Score'
My first x86 experience with Linux was hosting Minecraft to play with friends starting in 201 circa January 2019. After trying Ubuntu Desktop and Ubuntu Server I settled on Arch Linux. I got familiar with partitioning disks, port forwarding, and the headless environment. Hosting the game entailed installing many plugins and configuring all the settings and plugins, often in yml formats. All the servers and plugins were .jar format while all the configuration files were basic text or JSON.
I've also hosted a couple Discord bots. I really enjoyed hosting finished music bots other people made that I just needed to configure to make own, however I've also programmed one of my own music bots. I was also playing around with an API for stocks and managed to make a Discord bot that could show a graph and price of a stock using nodejs. I think the one I'm most proud of displayed the hours, address, and other metadata of WingStop franchises. WingStop is a restaurant that serves chicken wings, fries, and chicken sandwiches. I made it as a gimmick however it functioned very well, interfacing with Google's Places API completely in Java. I made these years ago using Discord libraries that have since been deprecated. I've even lost the code for my music bot and WingStop bot, as I hadn't learned about GitHub yet.
Shortly after hosting my first game servers, I made my first web deployment using Linux, Apache, MySQL, and PHP. I made a functioning login system although there wasn't really an enterprise or interest associated with this, I just wanted to see how this stuff worked. I configured Apache using VIM as this was all hosted on Arch Linux, however, I wrote all the html, css, javascript, and php on my PC in Microsoft Web Expression 4. I used Argon2 to hash and salt passwords. Although Arch Linux was interesting to use and helped me learn lots of things, I also took away that I have a great distaste for Arch and it's rolling release model when I need a reliable server.
Right now I have two paid clients I do full stack development for.
https://github.com/brian-chilin
Here I put most of my smaller projects. I even include some solo and group work from school. I private some of my better work because it's deployed, but I'd be happy to share them during a one-on-one session.
Fundamental topics on database management are taught with PostgreSQL. Topics include entity-relationship models, database design, data definition language, the relational model, data manipulation language, database application programming and normalization.
During Fall 2023 I've been studying computer security and principles from blue and red team perspectives. Interesting chapters have included risk and security evaluation and symmetric and asymmetric encryption. For symmetric encryption, I'm attempting to make a program that cracks substitution ciphers. We've also practiced asymmetric encryption using gpg in the command line to securely communicate messages as attachments in email.
Fundamental topics in the design and implementation of programming languages. Programming language paradigms. Also covered comparison of languages in type systems, data types, control flow, subroutines, concurrency, and exception handling. Smaller projects are completed in C++. Also touched Rust, Lisp, and Python.
The first course I took for OOP was AP-CS-A in high school and utilized Java to clearly outline the four concepts of OOP. At city college I took a C++ course that got into objects and encapsulation but none of the other OOP concepts. Most recently, I've reviewed the OOP concepts using Python3 in CECS 277.
This course covered many types of problems and mainly solves them with dynamic programming or greedy algorithms. All the implementations were done in Python or pseudocode, and there's a focus on achieving better time complexity.
Fundamental topics in theoretical computer science. Topics include regular languages, finite automata, context-free languages. Turing machine, computability theory, computational complexity, NP-completeness.
I've been working getting pieces off the second hand market to get my own enterprise grade server running. I've been running an old Debian server and it's served me well for years, however it's running all on consumer grade hardware so I wanted to upgrade and have experience around a real server. Furthermore, my old 'server' doesn't have any kind of redundancy. The new server has redundant power supplies and I'm running the storage in RAID 1 so in the event a drive fails I should lose no data, and be able to rebuild data once the failed drive is replaced. I also just wanted to experience handling enterprise grade hardware just like what's in real servers in real data centers. I think it's neat how the rack units work with mounting hardware, and then many parts in the server are hot-swappable like power supplies, storage, and fans. There's also lots of features that I just haven't see on consumer hardware, like keyholes on panels and facias, the form-factor, internal USB ports, and small status LCDs on the front panel. I also like how the enterprise drives have 'power loss protection' and it's common to even install an 'uninterruptible power supply' in the rack. I'm pleased in how the second hand market is treating me, I'll probably come out of this project for less then what a new moderate gaming machine would cost. At this point, I'm ensuring everything is stable and that I trust the second hand hardware. I'm starting to move my projects off my old hardware and onto this server.
I've already played around with Docker and K3s (mini kubernetes) and had some success on a cluster of three Raspberry Pi's but I really want a strong grip. I'll get more experience containerizing everything on my old server I intend to run on my new hardware. Something I'd really like to learn is how to make auto-scaling applications, such that a deployment can spin up and load-balance more pods when traffic increases and subsequently delete those pods when traffic eases. In the past I thought I wasn't going to use Docker & K8s much, however as I grow to have more and more projects I'm starting to see the benefit and look forward to making the jump moving all my personal projects to Docker & K8s. The simplifications I particularly intend to reap are in deployment, stability, and maybe on day redundancy. Currently, for any project, I write systemctl & NGINX modules particular to that project. It's organized, however I honestly don't have any backups of these because there's a bunch of other stuff mixed in those directories and it sounds like a pain. Moving to Kubernetes will reduce all this to Kubernetes deployment and services that I can keep in each project's folder.
I intend to learn how to use machine learning. I've made progress on my second attempt learning tooling, particularly conda and Jupyter Notebook. I've made a couple models in the past when other people were holding my hand. I think I understand the high level concepts, however to say 'I know machine learning' would be wrong. I want to get better at transforming data by myself into forms that models and libraries work well with and then identifying what to do to make a model better.
I'd take any position and titles that come to mind are software engineering and software development, however I think I need time in industry to really know. I think my portfolio demonstrates I'm growing to an intermediate full-stack engineer, however I truthfully dislike frontend work. I wouldn't overlook a frontend position, however I really enjoy doing backend work like making API endpoints, making database schemas, and laying out flows of data.