-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e79f1c3
commit 58249b1
Showing
29 changed files
with
487 additions
and
53 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
As a Graduate Research Assistant at the AM³ Lab, University of Arkansas, I played a pivotal role in advancing the cutting-edge field of 3D printing technology. The AM³ Lab is dedicated to developing next generation 3D printing technologies and promoting the use of 3D printing technology to better our lives through excellent research, education, and service to the global 3D printing community. | ||
|
||
Initially on-boarded as a volunteer, I assisted in troubleshooting and enhancing the 5th-Generation 3D printers. My dedication and problem-solving skills quickly earned me the position of Graduate Research Assistant, where I continued my contributions to the field. | ||
|
||
My primary focus during my time with the lab was developing a groundbreaking swarm 3D printing process designed to enable the production of large-scale structures using a fleet of mobile robots. This innovative approach involved a combination of hardware and software components, including custom-built transporter robots, SCARA 3D printers, and a modular print & power-delivery floor. | ||
|
||
Most notably, I was instrumental in transitioning from the 5th-Generation platform to the 6th and 7th-Generations. This transition involved separating the SCARA arm from the mobile base, and optimizing the hardware for improved robustness, efficiency, and quality. I assumed a significant role in these evolutions, taking charge of software development and contributing to hardware enhancements. | ||
|
||
One of my key contributions was the implementation of Computer Vision for localization and navigation within the transporter's control system, enabling semi-autonomous operation - a significant advancement in the field. | ||
|
||
Not only was my work at the AM³ Lab a valuable learning experience, but also a contribution to the lab's mission of pushing the boundaries of 3D printing technology. I am proud to have been part of a team dedicated to revolutionizing manufacturing and enabling mass customization through next-generation 3D printing innovations. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
As the Lead Robotics Engineer at AMBOTS Inc., I had the privilege of spearheading the transformation of groundbreaking research from the AM³ Lab at the University of Arkansas into a game-changing commercial product. AMBOTS Inc. is dedicated to revolutionizing the future of manufacturing through its patent-pending swarm 3D printing and assembly technologies, which were originally conceived by Dr. Wenchao Zhou in 2015. | ||
|
||
Our vision at AMBOTS was nothing short of a manufacturing revolution - a world where production is fully digitized and automated, allowing for the creation of customized products on demand, all at a remarkably low cost. Similar to how a swarm of bees collaborates to build its nest, our smart and autonomous mobile robots were engineered to work seamlessly together, translating digital designs into tangible products. | ||
|
||
The team and I achieved some remarkable milestones some of which include: | ||
|
||
- Our groundbreaking work earned us recognition within the industry, including winning the prestigious "3D Startup of the Year" by 3D Natives. We were also featured on GE Reports as one of "The 5 Coolest Things On Earth This Week" and received coverage on CBS, including an appearance on "The Henry Ford's Innovation Nation." | ||
|
||
- We filed patent applications to protect our swarm 3D printing and assembly technology, solidifying our position as pioneers in the field. | ||
|
||
- Our dedication and innovation secured Phase I and Phase II of the SBIR grant, totaling $1,225,000 in funding, which fueled our continued growth and development. | ||
|
||
- We landed our company's first customer, validating the real-world applicability of our technology. | ||
|
||
My time as the Lead Robotics Engineer at AMBOTS Inc. was marked by a relentless dedication to pushing the boundaries of what's possible in advanced manufacturing. I am proud to have played a pivotal role in bringing the vision of fully automated, on-demand, and cost-effective digital manufacturing closer to reality. Our journey continues, and I look forward to witnessing where the future of this transformative technology takes us. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
As a contract software engineer, I led the strategic planning, development, and successful launch of the AIC Mobile App and Management Portal for Atlantic Insurance Company Limited. | ||
|
||
This innovative app, available for Android and iOS, was meticulously designed with a customer-centric approach to enrich interactions with the company. | ||
|
||
Its features includes access to insured item details, a digital certificate of insurance, timely renewal notifications, claims filing, quote requests, office location guidance, and more. | ||
|
||
This endeavor reflects AIC's commitment to delivering unsurpassed customer service, upholding integrity, demonstrating professionalism, and fostering teamwork in line with Atlantic Insurance Company Limited's values. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
The goal of the AMG GT3 Wheel project was to design and build a functional, 3D-printed replica of the Mercedes Benz AMG GT3 steering wheel for use in Sim Racing. | ||
|
||
An Arduino Nano powers the wheel and features a thumb-slide joystick, eight pushbuttons, and a pair of paddle shifters. The wheel is directly compatible with the Thrustmaster ecosystem. | ||
|
||
You can find the 3D-printable files on Thingiverse along with an assembly manual, circuit files, and Arduino code. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
Android Calculator is a calculator app developed for a mobile programming class assignment at the University of Arkansas. | ||
|
||
The app was designed in Photoshop using popular calculator apps for design reference, then programmed in Java using Android Studio. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
The Apple Charging Station, initially sketched in 2016, was later revived and given as a gift to a friend. | ||
|
||
Redesigned in Autodesk Fusion 360, printed using wood-infused PLA, and finished with a wood stain. Supports charging of an iPhone, Apple Watch, and the original AirPods. The charging modules are interchangeable to support different product dimensions. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
The real-time multiplayer Blokus game, developed by Charles Tucker and Pablo L. Guerra, was designed using Flutter and Supabase as part of the final project for GMU’s ISA 681 ([Secure Software Design and Programming](https://dwheeler.com/secure-class/)) class. The game provides an engaging multiplayer experience, leveraging Supabase as the backend and Flame as the game engine. | ||
|
||
The project requirements were as follows: | ||
|
||
> You are part of a small development shop that has been asked to develop a network-enabled game system. The games will be played between competitors that do not trust each other and may try to cheat. | ||
> Your software must actively prevent players from cheating, that is, from exploiting the program to win or to force other players to lose. Act as if players who win will earn money, while players who lose will lose money; thus, the system must know which players win or lose, and must enforce the game rules even if the players are actively trying to circumvent the rules. Note that a system where all competing users log in as a single account cannot possibly meet this requirement. The software must support at least 50 simultaneous players (in most cases this implies there will be a large number of simultaneous games). | ||
> The program must be designed to be secure. You must avoid vulnerabilities like SQL injection, buffer overflows, accepting invalid input, and passing sensitive data unprotected. You will also need to authenticate all users. You do not need to prevent out-of-game collusion. | ||
## Materials and Methods | ||
|
||
The game was developed using the Flutter framework, written in the Dart programming language. The Supabase platform was used to provide real-time functionality for multiplayer gameplay, while the Flame game engine was used to implement the game mechanics and rendering. | ||
|
||
User authentication was handled using the Supabase Magic Link feature, which allows users to sign in by clicking a link sent to their email address. The link is valid for a limited time and contains a one-time password, ensuring secure authentication. | ||
|
||
Real-time communication between players was facilitated by Supabase’s 'Realtime' feature, which allows clients to subscribe to changes in the database and receive updates in real-time. This feature was used to synchronize game state between players, ensuring all players in a game room see the same board and pieces, without impacting performance. | ||
|
||
Turn validation is handled based on the game rules, ensuring only the player with the given ID and color can place a piece on the board. The game logic enforces the rules of Blokus, such as piece placement, rotation, and adjacency restrictions. | ||
|
||
A session timeout feature was implemented to handle cases where a player disconnects or leaves the game. If a player does not make a move within ten minutes, they are automatically forfeited, and the game continues without them. | ||
|
||
Upon finishing the game, a score screen is displayed showing the final scores and the order in which pieces were placed. | ||
|
||
## Results | ||
|
||
The development of the real-time multiplayer Blokus game met several key project requirements, but also revealed some limitations. The primary outcomes include: | ||
|
||
1. Real-time Multiplayer Gameplay: Supabase’s ‘Realtime’ feature successfully synchronized the game state across multiple players, ensuring that all participants in a game room experienced the same board updates simultaneously. This demonstrated the effectiveness of using Supabase for real-time communication in a multiplayer gaming environment. | ||
2. User Authentication and Security: The implementation of Supabase’s Magic Link authentication provided a secure login method, preventing unauthorized access. This met the project’s security requirements by ensuring that only authenticated users could participate in the game. | ||
3. Turn Validation and Rule Enforcement: The game logic enforced Blokus rules, restricting piece placement and ensuring only the correct player could take their turn. This reduced the likelihood of cheating and maintained the integrity of the game. | ||
4. Session Timeout Feature: The inclusion of a session timeout mechanism automatically forfeited inactive players, ensuring that the game could continue without disruption. This feature maintained the flow of gameplay even if a player disconnected or became inactive. | ||
5. Unresolved Issues: Despite these successes, the game had some unresolved issues. The score calculation logic was inconsistent, sometimes failing to correctly tally the final scores. Additionally, the endgame logic was incomplete, occasionally leading to games that could not properly conclude. The game also initially implemented a peer-to-peer architecture for turn validation, which did not align with the professor’s preference for a server-client model. | ||
|
||
## Discussion | ||
|
||
This project effectively demonstrated the capabilities of Flutter, Supabase, and Flame in building a secure, real-time multiplayer game. While core functionalities were successfully implemented, the issues with score calculation and endgame logic highlight the need for further refinement. The initial peer-to-peer approach for turn validation, although functional, did not meet the optimal security standards offered by a server-client model. Addressing these issues in future iterations will be crucial for enhancing the game’s reliability and scalability. | ||
|
||
## Conclusion | ||
|
||
The real-time multiplayer Blokus game prototype showcased the potential of modern web technologies in developing secure multiplayer experiences. Despite challenges like inconsistent scoring and incomplete game logic, the project provides a strong foundation for future development. Transitioning to a server-client architecture and resolving existing issues will be key to building a more robust and scalable multiplayer game. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
F1 Sim Engineer, co-developed with Viktor Soendergaard for a mobile programming class at the University of Arkansas, is a companion app for the F1 2019 sim racing game. | ||
|
||
The app is written in Java and uses the UDP protocol to communicate with the gaming device to receive and display live telemetry data sent from the F1 2019 game. The app obtains various data from the game, including event information, race details, number of laps, number of participants, weather conditions, vehicle setup, vehicle status, and telemetry. This information is displayed live during the race is saved to the local database for later review. |
31 changes: 31 additions & 0 deletions
31
assets/docs/project_descriptions/flutter_resume_builder.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
The Flutter Resume Builder is an open-source, user-friendly progressive web application designed to simplify the creation of professional resumes. Key features include resume creation, editing, downloading in PDF and JSON formats, importing existing resumes, direct printing, and optional image integration. These functionalities make it an intuitive and versatile tool for job seekers and developers, offering a seamless platform for crafting polished and impactful resumes. | ||
|
||
## Materials and Methods | ||
|
||
Developed using the Flutter framework and Dart programming language, the Flutter Resume Builder is designed as a Progressive Web App (PWA) to ensure broad compatibility and accessibility. | ||
|
||
**Key Features:** | ||
|
||
- **Create and Edit Resumes:** Users can input personal details, work experience, education, and skills, with real-time editing and immediate visual feedback. | ||
- **Download and Print:** Resumes are downloadable in both PDF and JSON formats, with a print feature for producing hard copies directly from the browser. | ||
- **Import Resumes:** Existing resumes in JSON format can be imported for quick updates, simplifying the maintenance of professional documents. | ||
- **Optional Image Integration:** Users can add an image such as a QR code, logo, or headshot to their resume. | ||
|
||
The app’s responsive design ensures smooth operation on desktops, tablets, and smartphones. Testing across various browsers and devices was conducted to guarantee a consistent and reliable user experience. | ||
|
||
## Results | ||
|
||
The Flutter Resume Builder delivers a comprehensive web application with the following outcomes: | ||
|
||
- **Ease of Use:** An intuitive interface streamlines resume creation and customization with real-time previews. | ||
- **Flexible Export Options:** Users can download resumes in PDF for sharing or printing, and in JSON for easy future editing. The print feature simplifies producing physical copies. | ||
- **Cross-Platform Compatibility:** The PWA design ensures consistent performance across devices and platforms, whether on desktop or mobile. | ||
- **Efficient Resume Management:** The import feature allows easy updates to existing resumes, supporting ongoing professional development. | ||
|
||
## Discussion | ||
|
||
This project demonstrates how Flutter can be used to create a cross-platform PWA that effectively meets users’ needs for resume creation and management. Features like multi-format downloads, printing, and real-time editing ensure a robust user experience. Future enhancements could include additional resume templates, advanced customization options, spell-check, grammar suggestions, and cloud storage for better document management. | ||
|
||
## Conclusion | ||
|
||
The Flutter Resume Builder is a powerful and accessible tool for creating, editing, and managing professional resumes. Leveraging the strengths of Flutter and PWAs, it provides a reliable and efficient solution for job seekers and developers. While there is room for further enhancements, the current version is a solid foundation for users looking to streamline their resume-building process. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
The Handroid project was a science fair submission for my junior year of high school. The idea was inspired by arms developed in medical fields, where mechanical arms can mimic finger movements. | ||
|
||
The shape of the arm was made using foam, cardboard, pieces of wood, and fiberglass. Rubber tubes are used for the fingers with incisions made at the bending points. The fingertips are each connected to a fishing line, which routes internally through the finger and arm, then attaches to the horn of a servo motor. An Arduino microcontroller controls the servo motors and receives input from a modified glove with flex sensors attached to each finger. When the input glove is worn, the flex sensors record the amount of bending of each finger which the Arduino uses to determine the degree of rotation for each servo motor to replicate the users' finger movements. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
The LED wall decor was made as an art piece for a friend. The signs' colors and patterns are controllable using the Blynk app. | ||
|
||
It features an Arduino MKR1000 controlling eight RGB LEDs and connects to the internet using its onboard WiFi module. The LED cover plate is interchangeable using magnets. A USB micro cable is used for continuous power, but the device can also be powered using a 3.7V LiPo battery and charged with the MKR's onboard charging circuit. One of the LEDs was not working at the time the photos were taken. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
Macro Pad is a programmable interface used for executing custom macros (button combinations or input sequences). It allows for extended control and execution of complex commands with a single button press. | ||
|
||
The device features an Arduino Micro, 16 Cherry MX switches, a rotatable and pressable knob, and a micro USB port for connecting. |
Oops, something went wrong.