The Final Quest: Capstone Archives
Version 1.0: The Introduction
![](https://osu-wams-blogs-uploads.s3.amazonaws.com/blogs.dir/8107/files/2024/09/thumbnail_FullSizeRender-1-scaled.jpg)
Hello, and welcome to my blog! This masterpiece will chronicle my experiences as I traverse my capstone project in Computer Science…but before we get to that, let me introduce myself.
My name is Kjirsten, pronounced KEER-sten (English), SHER-sten (Norwegian), or simply KJ. I grew up in a small town (pictured above) on the Oregon coast. You can tell it truly is a small town by the lack of buildings in the photo. And yes, it was taken within city limits. Nowadays, I live in Texas and have worked in sales, project management, and purchasing. Oh, and life has changed a little. I’m currently living in a dry climate (no ocean in sight), a major city (almost 2 million people), and am now completing a degree in… Computer Science?
I suppose to understand the track from small-town nature lover to big city Computer Science geek, we might need to rewind a little. Well, actually, we’ll need to rewind a lot, back to freshman year of college.
After graduating from high school, I initially went to a private University, where Philosophy through the 400-level was a requirement of any major. As an undeclared major myself, I started with Philosophy 101. The first few weeks we were introduced to boolean logic, and not long after, logical fallacies. Then, as a fan of logic and reasoning, it wasn’t long before I fell in love.
Alas, shortly after my newfound love was discovered, the limited professional careers deterred me from a Philosophy major. Being a lover of math and logical systems (and also, oddly, waste to energy plants and energy systems), I hopped over to Mechanical Engineering. The knowledge I’d gained from philosophy on logic and reasoning, abstraction, and algorithmic thinking was packed away for another day.
Years later, I looked to continue my education. Not any less logical in approach, I began to pursue the engineering colleges. This time, my love of philosophy would finally relate to a Computer Science degree. My previous education with boolean logic and reasoning became an integral facet in this decision. This time, however, the nature lover in me would add another degree to the mix: Sustainability.
As of today, that is who I am. A lover of logic and algorithms with a side passion to integrate technology for a more sustainable future.
What I’ve Learned Along the Way
A sneak peek into all the fun I’ve had in coding
Python
Implemented with Object-Oriented Programming, Functional Programming with microservices for data analysis, and Web Development.
JavaScript
Full-stack web development using JavaScript, creating interactive web pages with front-end and back-end integration.
SQL
Database management and data manipulation. My main project in SQL was combined with JS and Handlebars to create a Library management system.
Handlebars
Utilized Handlebars with Node.js to render HTML pages featuring dynamic content, specifically data retrieved from an SQL database.
React
Created dynamic web pages with interactive front-end components using React. These components were integrated with RESTful APIs to ensure efficient data retrieval and interaction.
Networks
Developed a comprehensive understanding of network protocols by implementing Reliable Data Transfer (RDT) and traceroute programs. Gained hands-on experience in socket programming!
The Final Quest: Capstone Archives
Version 1.1: Shapefiles and Geospatial Data
And so we embark on to the main content of this blog: the capstone. With my Sustainability degree in mind I have ventured in to working with Shapefiles, more broadly, Shapefiles and environmental data. Perhaps after spending too much time in programs like ArcGIS I have developed a strong desire to handle the Shapefiles myself. Or, more accurately, I want to know what is going on behind the scenes.
Of course, if we (my capstone team and I) are going to be working with environmental data, it is pertinent that we get the Shapefiles into a more usable form. That’s where I come in. I will be tackling the job (feel free to be impressed) of converting the Shapefiles into GeoJSON for data analysis (this is where you give an audible ‘wow’).
On a more serious note, I will be using some new libraries this time. While I have worked with converting data to JSON before, it has primarily been in other formats. On top of that, this data will need to be encrypted. This task will be a bit foreign to me, so I will be hitting the books to optimize my approach.
With all of that being said (at length), I am excited to tackle something new, and I am feeling that the finish line of this part of my education is in sight. As I begin this final experience, I am reminded that the next chapter is quickly approaching and that I will likely be a beneficial member of a corporate team one day. I will approach this capstone with that in mind, honing my skills where I am able.
What is a Shapefile?
A shapefile is a popular geospatial vector data format for geographic information system (GIS) software. It is used for mapping and analysis, and is actually a set of files (listed below).
Mandatory Files
- .shp: Stores the geometry of the features (points, lines, polygons).
- .shx: Contains the index of the feature geometry.
- .dbf: Holds attribute data in a tabular format.
Optional Files
- .prj: Contains the coordinate system and projection information.
- .xml: Stores metadata about the shapefile.
- .sbn and .sbx: Spatial index files that improve spatial query performance.
- .cpg: Specifies the character encoding used.
The Final Quest: Capstone Archives
Version 1.2: Adapting to New Systems
It’s no surprise that technology has been changing, from artificial intelligence to robotics, the past ten years have seen an onslaught of fast-paced advances. In my secondary degree, Sustainability, clean energy is moving forward as many developed countries make initiatives to scale renewable energy and diminish fossil-fueled power. The world is beginning to look different to me.
I find myself opening my AI-powered chatbot in the morning to practice a new language. 안영하세요 오늘 아침은 어때요? Hello, how are you this morning? It responds to my greeting, and we have five minutes of conversation like this while I eat my breakfast. It is not lost on me that I have adapted to this new form of engagement. Likewise, it is also not lost on me that I am not alone in my new habits, and that those habits will shape industries and careers.
It would be a lie to say that this doesn’t cause me some level of trepidation. Technology moves fast and there is a sense that keeping up will be difficult. There is a sense that there may be a world where I cannot hone my skills fast enough, that I will always be one step behind. The perfectionist in me balks at such a thought.
A few days ago, these thoughts plagued me. One night ago, I opened my Language’s lab homework. This week was Prolog, a few weeks ago it was Raku, and meanwhile, in Theory class, we have completely immersed ourselves in Turing machines. The Prolog lab was done quickly, and it was interspersed with a smile — ‘what a fun new puzzle’, I said to myself as I finished my submission. Next, a proof on Undecidability. ‘Ah! There are still limits like this.’
Reflecting back, I think I am quite adaptable. Moreover, I think that my brain might enjoy new challenges. After this revelation, I am not so concerned about my future anymore. I feel that these new obstacles will also make me smile.
The Final Quest: Capstone Archives
Version 1.3: Writing Clean Code
Martin Fowler, paraphrased
Clean code is designed with readability in mind. It focuses on quality and reliability while reinforcing the ease of collaboration and debugging. Simply put, it is easy and quick to understand. Although some are better than others at writing clean code, there is always room for improvement. In this case, practice leads to improvement. Personally, I would like to focus on practicing writing fewer and more meaningful comments.
As I learn new coding languages and new disciplines, I tend to comment heavily. This helps me process new information and techniques. However, as I move beyond the initial learning phase and into development, it is imperative to scale these comments back. After all, if the code is understandable and clear, it does not need additional commenting. My awareness of this has increased as I approach graduation.
Code smells are defined as weaknesses in design that increase the risk of bugs or program failure in the future. These may not be glaringly evident at the time of creation, but may become so as the program evolves. Long methods (over 25 lines), large classes, duplicate code, and dead code fall into this category. Personally, my focus is on long methods.
Writing numerous small to medium-sized programs lends itself to writing first and organizing second. This means it is easy to dive in and then clean up and organize the code later. In school, the majority of the programs are smaller. As a result, toward the end of my degree, I find myself focusing more on strengthening my design rather than simply functionality. Part of this focus has been on reducing the length of methods to make them shorter, more readable, and easier to edit or adapt.
A shifted focus to design and planning has also led to a goal of creating future-proof code. When planning my programs, I now evaluate how they might need to be adapted in the future or how they might evolve. For instance, are there functions that could serve multiple purposes? Will the data I plan to use change over time? If so, can I write the program to adapt to these future changes? My end goal is to create quality programs that withstand the test of time as much as possible, avoiding code that may quickly become obsolete.
The Final Quest: Capstone Archives
Version 1.4: Exploring Technologies
Within the project, I am focusing on utilizing the cryptography, geopandas, pandas, and shapely libraries. These libraries are implemented in Python, and the Python program will be called from an AngularJS environment.
Of these technologies, I am most excited about working with the pandas library since I have worked with it before and really enjoy working with data. My previous experience has made pandas one of the easiest technologies to adapt to.
On the other hand, my least favorite technology for this project has been AngularJS. Although I won’t have much involvement with the frontend, aside from tying the backend in, I will likely need to become somewhat familiar with AngularJS. Previously, I have only worked with Node and React, which means there will be a learning curve. Additionally, the existing codebase is quite large, so I will need to read and become familiar with AngularJS in the context of the existing code as well. Despite this, the experience will be helpful in learning to adapt to diverse codebases.
Cryptography was also new to me and required some studying to become familiar with. I specifically worked with the Fernet library for encryption, and it took some time to figure out exactly how I wanted to create keys and store them. After researching and working with the library, I have found that it is very straightforward and adaptable.
If I could start over, I might look at using a different encryption library. However, the project sponsor has a previously existing codebase that already utilizes certain libraries. They recommended working with cryptography, along with the other libraries. I don’t believe that there are any major deficiencies when it comes to cryptography though.
My favorite technology overall has to be the geopandas library. Geopandas is a powerful tool for working with geospatial data. It allows us to take Shapefile’s .shp file, which holds geographical data, and convert it into a GeoDataFrame. From there, the GeoDataFrame can be easily converted into a GeoJSON object, which can then be encrypted for secure storage and transmission. This capability makes working with geographical data like latitudes and longitudes much more manageable and efficient.
If I were to have the freedom to choose my entire tech stack, I would probably substitute AngularJS out for React or Node. Preferably React since our team is working with some more complex modals for map display and interaction. Despite this, I don’t think AngularJS is a large detractor and ultimately leads to us learning to adapt to diverse existing codebases.
“The unexamined life is not worth living.”
Plato’s Apology, 38a
-
The Final Quest: Capstone Archives
—
by