Daniel Dawit
Portfolio
ustie
Stack and Explanations
Purpose and Goal
In late 2018, me and a team of two other people wanted to create a discord bot that could meet the needs of individuals through customizability. In the end, there were over 25,000 users who enjoyed the customizability and 24/7 usage that many other discord bots do not often provide. Its community helped shape it into what it grew to through suggestions, bug-reports, and donations.Problems Encountered
This was one of the first projects that all of us had worked on in a team. Therefore, we had to create thorough guidelines for developing code together. Coming up with a system where we could all easily create new commands and handle different events took some time and discussion but the flexibility that javascript provided gave us the ability to create command and event handlers which allowed us to split these things into individual files for us to separately develop in without getting in each other's way.Lessons Learned
I learned a great deal of being able to communicate with a team and the community you're working for. Having that customer first mindset helped grow the community around the bot and served to connect me with other clients looking for their own app.
A Multi-Purpose Discord bot with many options for moderation, entertainment, music, economy, and
more.
A high level of customization through a custom dashboard made with Angular
Edge Coaching
Stack and Explanations
Purpose and Goal
In 2019, a softball coach was interested in making her workflow digital. Rather than using many tools to help her coach, she wanted something where she could do her work in one place. The Edge is an app to organize youth instructors working privately with athletes/students. It puts all aspects of training into one place including (but not limited to) scheduling, drills, measuring progress, communication, payment and notes on training.Problems Encountered
A challenge for this project was that it has quite a lot of code for each aspect that a coach would need. Therefore, it needs to be testable. However, this testing process did not come to mind at the start of development so much of the code had already been developed before we began testing. While Test driven development is not must for every project, it is very helpful to ensure your code is testable and in working condition whenever you refactor code, especially in large projects with multiple people involved. Although this repository is private, here is a code snippet of a unit test written.
import React from 'react';
import {
fireEvent,
render,
waitFor
} from '@testing-library/react-native';
import LoginScreen from '../login/index';
describe("Login form", () => {
const routeMock = (fn) =>
({
params: {
params: {
onLogin: fn
}
}
})
it("Validates input on correct input", async () => {
const email = 'user@gmail.com';
const password = '12345678';
const handleLogin = jest.fn();
const navigation = {
navigate: jest.fn()
};
const {
getByLabelText,
getByText
} = render( <LoginScreen navigation = {
navigation
}
route = {
routeMock(handleLogin)
}
/>);
const emailInp = getByLabelText('Email');
const passInp = getByLabelText('Password');
fireEvent.changeText(emailInp, email); fireEvent.changeText(passInp, password);
const submitButton = getByText('Login'); fireEvent.press(submitButton);
await waitFor(() => {
expect(handleLogin).toHaveBeenCalledTimes(1);
});
expect(handleLogin).toHaveBeenCalledWith({
email,
password,
rememberLogin: false,
username: ''
}, expect.anything())
});
it("Correctly navigates to different pages", async () => {
const handleLogin = jest.fn();
const navigation = {
navigate: jest.fn()
};
const {
getByLabelText,
getByText
} = render( <LoginScreen navigation = {
navigation
}
route = {
routeMock(handleLogin)
}
/>);
const forgotButton = getByLabelText('Forgot Password'); //tests forgot password navigation
fireEvent.press(forgotButton); await waitFor(() => {
expect(navigation.navigate).toHaveBeenCalledTimes(1);
});
expect(navigation.navigate).toHaveBeenCalledWith('ForgotPassword')
const createAccountButton = getByLabelText('Create Account'); //tests the create account button navigation
fireEvent.press(createAccountButton); await waitFor(() => {
expect(navigation.navigate).toHaveBeenCalledTimes(2);
});
expect(navigation.navigate).toHaveBeenCalledWith('CreateAccountFlow')
})
});
Lessons Learned
Working with a team of people has a lot of benefits and if you're able to structure that in a clear way that's transparent to everyone, it can be a lot of fun and the work of setting that up is very rewarding. Because of this project and its use of the scrum framework, I was able to get a certification as a Professional Scrum Developer.Edge Coaching is a scheduling, assignment, analytics, and communication platform that provides coaches, students, and parents a single point of participation in the coaching, learning, and improvement process.
Rating Shift
Stack and Explanations
Purpose and Goal
Every year, an organization called Business Professionals of America hosts an event for different age groups across America. My technical high school, The Delaware Area Career Center, participates in this each year, and I was selected to attend the national competition for the mobile application development event. The theme for that year was to create an app that allows you to review a different type of app. Because of this, I created an app that lets you review, search, and rate all different kinds of app on both the app store and Google Play Store in one spot.Problems Encountered
The challenge for creating this app was determining how to get information about other apps to rate. At first, I wanted to use an api such as 42Matters. However, they had a very limiting free tier that wouldn't last for the duration I needed. Therefore, I needed to scrape the information right off of various websites that provided it. However, in react native, it is difficult to web scrape information that is server side rendered. So I opted to do it on an express server where I could use libraries like puppeteer that could wait for all the information to be loaded. Using this method allowed me to successfully get information about each app and rate, review, and search for them accordingly.
Lessons Learned
Working on this project, I learned that presentation is everything. Being able to communicate well with your audience (judges) that may not know all the technical details is very crucial to gaining support for your work; weather that translates into potential stakeholders or other opportunities for work, being able to communicate to a non-technical audience is an invaluable skill to all engineers.Rating Shift is an app empowering you to review, rate, and search for any app on the App store or Google Play Store. This project landed me a spot in the 2020 national Business Professionals of America competition.
PandoraPVP
Stack and Explanations
Purpose and Goal
This was a project I had a lot of fun working on with a team of four people (two managers, two developers). As a developer, I worked closely with everyone to transform their vision of creating a greek mythology gaming theme into reality. Collaborating on tasks, sharing ideas, and discussing technical approaches have allowed us to leverage our knowledge and expertise.Problems Encountered
Many problems arose while working on this project. One area of concern was plugin dependencies and interoperability. Many plugins we wrote relied on external libraries and other plugins which introduces dependency management challenges. These problems can arise due to multiple plugins attempting to modify the same thing simultaneously. By ensure proper thread safety through spigot asynchronous API's, I was able to optimize resource-intensive tasks, and make sure that different plugins didn't interfere with each other.Lessons Learned
By working with this project, I was able to take the time to thoroughly understand spigot and it's API, familiarize myself with documentation, guidelines, and best practices to use its feature effectively. I was able to invest time into planning and designing how different GUI's interact with each other, and clearly define each plugin's scope, features, and functionality. By working on a team, we were able to create effective collaboration and communication and clearly define roles and responsibilities. I was able to create clear documentation to the managers in how to use and configure each plugin to meet their specific needs. By using these skills and incorporating them into future projects, I can help streamline development processes and create high quality work that meets user and managerial needs.Pandora PVP is a collection of spigot plugins designed for a minecraft server. The plugins range from enhanced moderation, economy, fun and utility intended for thousands of members.