About Me/Who I Am

Who I Am

My name is Larry Joshua Crotts. I am a Computer Science student at the University of North Carolina at Greensboro. I have a long and driven interest in computer science, mathematics, theory, numbers, and all things technology.awesome work.

My interest started when I was around two years old; I would sit in my father's lap while he used the computer. I was mesmerized by all the things that you can do. As I grew, I began to play video games excessively. Once I reached around nine or ten years old, I made my first webpage. It was a simple blog for some photos that I took. However, that one website was the catalyst of my interest in creating things on the computer. I eventually gained interest in creating video games, as opposed to just playing them. At first, I used simple websites to create 2D sprite-based games with drag-and-drop elements. However, I quickly realized that I wanted to design my games from the ground up. That was when I discovered programming.

Once I started high school, I enrolled in a course called Multimedia and Webpage Design. And, while it was a very trivial course, it did show me the foundations of building a website from scratch in HTML and CSS. Moreover, after the summer of my freshman year, I took my first ever course on Computer Science. I was finally able to learn how to write code in C++ and Visual Basic. Now, did I build anything spectacular with these two languages in a tenth-grade level class? No, absolutely not. However, again, it continued my expand my programming horizons. Finally, in the eleventh grade, I took the renown course called AP Computer Science A. This, by far, was my favorite course in high school. Using the Java programming language, we walked through several labs and projects in preparation for the big AP exam in May. Nowadays, almost five years after taking AP CS A, I still have fond memories of my teacher, and the amazing students that left a significant impact on me.

My career in college did not start out at UNC Greensboro; for one year, I was at Forsyth Technical Community College, in an effort to save money before transferring to a four-year college. However, unfortunately (and fortunately now that I think about it!), due to a significant mistake on the community college's part, I was placed on an Associate in Applied Science path, instead of the typical transfer path, meaning I took course that would end up not transferring to UNCG. I had to correct this mistake myself, and, out of pure frustration, I applied to UNCG, thanks to the good word of mouth from my former AP CS teacher, who got in contact with the former head of the computer science department at UNCG. Successively, come the Fall of 2018, I began my fulfilling career as a Spartan.

After a slow start at UNCG (taking only four classes), I met my now fiancé, and took a whopping six classes in the Spring of 2019. My reputation grew exponentially once people realized that I was an outstanding programmer. From that semester alone, I gained a whole network of students and friends that I hope will last a lifetime. Additionally, due to the word of mouth in the department, I was contacted by a professor who asked me to be her research assistant on a project that summer (Summer of 2019). Of course, I was ecstatic, and gladfully accepted the offer. During the summer, I also applied to the Accelerated Bachelor's to Master's program in Computer Science, and, to my surprise, was accepted. This program allows students to get their Master's degree only one year after receiving their Bachelor's. This means that, during my final two years as an undergraduate student, I have to take four graduate-level classes. Very tough, but also incredibly exciting.

One arduous summer later of working on a complex and convoluted codebase, we enter the Fall 2019 semester. Like the previous semester, I took six classes, one of which was graduate-level (theory of computation, of course!). I also started my job as a teacher's assistant for the Intro to Computer Science course, where I would grade the lab assignments and tests, and, during the lab sessions, would walk around to any student requiring assistance. Additionally, I served as a tutor in one of the computer labs. This brings us to the current day, in the Spring of 2020, where I still work as a tutor and TA, but I also serve(d) on the Search Committee for a new assistant professor in the computer science department. I participate(d) in reviewing the copious amount of applications, narrowing the pool for video interviews, and finally the soon-to-come in-person interviews. It is really interesting to see the hiring process on both sides, as opposed to only sending out applications, and rarely hearing back from internships! By the end of the semester, we had all endured COVID-19 (and are still pushing through it to this very day), and my GPA was sadly no longer pristine (one A- in AI...). However, I've come to realize that a perfect GPA doesn't strictly define someone. I wanted to maintain a 4.0, but I am okay with what I have.

I love computer science. I love programming. I love mathematics, and theory. I also really enjoy helping others learn and grow in this very difficult and demanding field of study. Watching my students finally solve a complex problem that they have been stuck on for hours makes me grin very stupidly, because I remember back when I was in that initial phase. But, I should note that, that does not under any circumstances mean that I'm done learning. I'm far from that. In fact, as a computer scientist (and hopefully future instructor), I doubt I'll ever truly be done learning from others, as well as the constant new technologies that appear on the daily.

Relevant Coursework

Currently, I am a rising senior at the University of North Carolina at Greensboro. I have taken several courses throughout my high-school and college career that give a good indication of my experience level. As a student in the Accelerated Bachelor's to Master's program, I have to take four classes at the graduate level while I am an undergrad. Those course are marked in bold. I have earned an A (or currently have an A) in every course on this list.

  • CSC - 654 - Algorithm Analysis and Design (SP20)
  • CSC - 471 - Principles of Database Systems (SP20)
  • CSC - 461 - Principles of Computer Architecture (SP20)
  • CSC - 429 - Artificial Intelligence (SP20)
  • CSC - 652 - Theory of Computation (FA19)
  • CSC - 340 - Software Engineering (FA19)
  • CSC - 339 - Concepts of Programming Languages (FA19)
  • CSC - 350 - Foundations of Computer Science II (SP19)
  • CSC - 330 - Advanced Data Structures (SP19)
  • CSC - 261 - Computer Organization and Assembly Language (SP19)
  • CSC - 250 - Foundations of Computer Science I (FA18)
  • CSC - 230 - Elementary Data Structures and Algorithms(FA18)
  • [Forsyth Tech] CSC - 249 - Data Structures and Algorithms (SP18)
  • [Career Center] AP Computer Science Principles (2016-2017)
  • [Career Center] CISCO Network Engineering 1/2 Honors (2016-2017)
  • [Career Center] AP Computer Science A (2015-2016)
  • [Walkertown High School] Computer Science (2014-2015)
  • [Walkertown High School] Multimedia and Webpage Design (2013-2014)

CS Interests & Research

The Optimization of Largely-Populated Emitters in Particle Systems

My current research (along with the rhetorical natural language project) consists of optimizing particle systems that are typically limited by dynamicly-allocated data structures such as ArrayLists. I introduce several algorithms that attempt to improve performance and increase overhead for more complex and higher quantity particles.

PDF unavailable at this time.


Binary Space Partitioning - A Focus on Rendering and Compression Algorithms

In my graduate algorithm analysis course, we had to write a research paper investigating some advanced topic in algorithms. Being that I enjoy computer graphics and video games, I chose binary space partitioning, which plays part in both rendering and compression. I also studied several algorithms that cope with partially-ambiguous polygons by splitting them at some point. Lastly, I worked with Andrew Matzureff to explain various rendering methods that, while are not mathematically proven, provide good future research potential. Note that this paper is not published.

To view the paper, click the link below.

PDF of Binary Space Partitioning Paper


Automatic Detection of Rhetorical Devices in Science Policy Articles

For the Thomas Undergradute Research Creativity Expo, I worked with Dr. Nancy L. Green on a research project focused on detecting rhetorical devices used by authors in scientific policy articles to persuade or sway the opinion of readers. We developed a graphical user interface in Python, and used the Natural Language Toolkit. Due to the COVID-19 outbreak, all presentations moved to a virtual layout. Thus, in order to ensure that our work was not in vain, I recorded a narration. We are continuing this research throughout the summer of 2020.

Source Code
PDF of PowerPoint Presentation


Software Engineering Ethics Debater

For the start of my undergraduate research experience, I worked with Dr. Nancy L. Green on a project revolving around artificial intelligence and software engineering ethics. My job was to modify a preexisting application (AVIZE) written in Java to better accomodate this new research. It is a graphical program that allows users to create argument trees with premises, conclusions, and critical questions through the use of case studies, ethical data, and argument schemes. We have since submitted a paper to COMMA 2020 (under review). This application was pilot tested in the fall 2019 semester at UNC Greensboro for her artificial intelligence ethics special-topics course (CSC-495) in the successive spring semester.

Source Code


Natural Language Processing

Nowadays, most, if not all of what we see on a daily basis is text on a screen. Whether it be on Twitter, Facebook, Instagram, or any of the other millions of websites. Computers can analyze this text to recommend items for users to purchase, who they like based on their political comments, and even more somewhat nefarious things like finding out where you live! My work thus far has included writing a Python script to detect antithesis, parison, and metaphor rhetoric devices in poltical/scientific articles. Rhetorical devices essentially build a wall of text from the ground up. So, having a machine to identify these can come in real handy!

Parallel Computing

Parallel and high-performance computing are the future. With the vast amount of complex data and information that has to be processed, modern machines are not up to the task on their own. This is where distributed networks and parallel computing come into play. Working closely with the hardware (such as CUDA with NVIDIA, OpenMP, etc.), software engineers write programs that achieve peak performance. I for one wish to delve further into this powerful science and technique.

Embedded Software Engineering

Today, numerous devices we use everyday have computers such as our phones, tablets, and gaming consoles. However, computers are used in far more applications than just these; massive machines such as cranes, cars, home appliances, and many more all use computers, and software engineers have to write programs to accomodate them and their environments. Often, one must write code on extremely limited hardware, which may also exist in harsh temperatures/weathering. Optimization and situational planning are the keys here, and I want to learn more.

Compiler Design

Compilers have existed in Computer Science since the earliest days of programming. Machines do not understand words and phrases, so a compiler has to translate the programmer's high-level syntax and paradigms to a numeric [binary] representation. The Java Virtual Machine for example has a very sophisticated compiler (which is also a interpreter). C, C++, and others are likewise compiled languages. Furthermore, they're one of the lowest levels that source code reaches before it's fully recognized as commands and opcodes by the processor/machine.

Projects

Throughout my career as a Computer Science student, I have worked on several projects that showcase/exhibit my software engineering prospects and knowledge.

Many of these projects have since been archived, and all (with the exception of one) have their source code published on Github. Most contain bugs and unfinished pieces/aspects. My intention in creating them was to further my programming horizons.

Website with Database Interface (PHP, MySQL, HTML, CSS)

For the first time ever, I had to write in PHP. For my database class, we were required to write a website that interfaces with a SQL database. I chose MySQL and PHP because they were the most relevant choices. As I said, before this project, I had never written a single line of PHP, and I was very inexperienced in SQL. After this, while I don't enjoy web development or front-end any more than I previously did, I learned a lot about remote connections to databases, and how to establish said connection between the front-end HTML and the back-end MySQL/PHP code.

GitHub: Source



Rhetorical Devices Detector (Python)

For my undergraduate research project in the 2019-2020 school year, I worked with Dr. Nancy L. Green to develop an application that allows for detection of several rhetorical devices in science policy articles (loaded in via XML). We used Python, and the Natural Language Toolkit to build a GUI for an pleasant user-experience.

GitHub: Source




Deterministic Pushdown Automata Parser (Java)

A GUI program that lets users create their own DPDA schema, input a string, and follow it through the diagram.

GitHub: Source




Lock Out Protocol (Java)

A top-down 2D zombie-esque shooter game! Zombies have taken over, and you must stop them!

GitHub: Source




SWED: Software Engineering Ethics Debater (Java)

Dr. Green wanted a way for users to create argument trees with a supplied argument scheme, case study and ethical evidence. This application lets users easily do that.

GitHub: Source




MySQL Graphical User Interface (Java)

For my Lock Out Protocol project, I always had to log in to the Google Cloud suite to alter the database. I created a way to easily manipulate tables and data in a presentable format.

GitHub: Source




[Revived] Standards Game Engine (Java)

I thought to myself: why use something complex like LWJGL, when I can just write it from scratch? This is the revived version of my original Standards library.

GitHub: Source




Castlevania Legion (Java)

A remake of my original Castlevania game, back better than ever with new monsters, weapons and physics!

GitHub: Source




Breakout (Java)

B Image

Recall Breakout from the original arcade machines? This is a remake of that. Fun, addictive, with colorful graphics and exciting, bubbly music!

GitHub: Source




Hash-Table Implementation (C)

hashtable

Writing a data structure like a hash-table in C lets you really understand what's going on behind the scenes. I tried to recreate that.

GitHub: Source




Database Implementation (C)

DB

Learning SQL is fun and all, but it's even more fun to go down to the level where everything happens, and rebuild it from the ground up.

GitHub: Source




Castlevania (Java)

B Image

My first game written in Java. I love the Castlevania games, and this is a poor representation of that.

GitHub: Source




Personal Website (HTML/CSS/JS)

Site

I'm not the best at HTML, CSS, nor JavaScript. This is a prime example of that. Hence why I love embedded software engineering.

GitHub: Source




Standards 2.0 Game Library (Java)

Standards 2.0

The original iteration of the Standards library. This engine, while trivial, is still the basis for many of my projects today.

GitHub: Source




Elementary Virtual Machine (Assembly Instruction Set Implementation) (C)

Virtual Machine

Assembly is one of my favorite languages for a couple of reasons. One is because I love working as close to the hardware as possible. The second is because I'm absolutely insane.

GitHub: Source




iOS Calculator (Swift)

Calculator Image

A simplistic calculator app written in XCode. It is based on a queue data structure for parsing input and output.

GitHub: Source

Resume/CV

The link to my resume can be found here. Any references are available upon request, and any questions should be addressed to me as soon as possible.

Elements

Text

This is bold and this is strong. This is italic and this is emphasized. This is superscript text and this is subscript text. This is underlined and this is code: for (;;) { ... }. Finally, this is a link.


Heading Level 2

Heading Level 3

Heading Level 4

Heading Level 5
Heading Level 6

Blockquote

Fringilla nisl. Donec accumsan interdum nisi, quis tincidunt felis sagittis eget tempus euismod. Vestibulum ante ipsum primis in faucibus vestibulum. Blandit adipiscing eu felis iaculis volutpat ac adipiscing accumsan faucibus. Vestibulum ante ipsum primis in faucibus lorem ipsum dolor sit amet nullam adipiscing eu felis.

Preformatted

i = 0;

while (!deck.isInOrder()) {
    print 'Iteration ' + i;
    deck.shuffle();
    i++;
}

print 'It took ' + i + ' iterations to sort the deck.';

Lists

Unordered

  • Dolor pulvinar etiam.
  • Sagittis adipiscing.
  • Felis enim feugiat.

Alternate

  • Dolor pulvinar etiam.
  • Sagittis adipiscing.
  • Felis enim feugiat.

Ordered

  1. Dolor pulvinar etiam.
  2. Etiam vel felis viverra.
  3. Felis enim feugiat.
  4. Dolor pulvinar etiam.
  5. Etiam vel felis lorem.
  6. Felis enim et feugiat.

Icons

Actions

Table

Default

Name Description Price
Item One Ante turpis integer aliquet porttitor. 29.99
Item Two Vis ac commodo adipiscing arcu aliquet. 19.99
Item Three Morbi faucibus arcu accumsan lorem. 29.99
Item Four Vitae integer tempus condimentum. 19.99
Item Five Ante turpis integer aliquet porttitor. 29.99
100.00

Alternate

Name Description Price
Item One Ante turpis integer aliquet porttitor. 29.99
Item Two Vis ac commodo adipiscing arcu aliquet. 19.99
Item Three Morbi faucibus arcu accumsan lorem. 29.99
Item Four Vitae integer tempus condimentum. 19.99
Item Five Ante turpis integer aliquet porttitor. 29.99
100.00

Buttons

  • Disabled
  • Disabled

Form