Intro

The purpose of this portfolio website is to help me keep track of past works as well as help fellow engineers and companies alike review my stack. My portfolio will be continuously updated so I can look back on my past projects to keep track of my own progress. I hope the clear quality discrepency between each project is something that gives new engineers confidence while being something seasoned engineers can appreciate.

Whoever you are, I hope this site serves its purpose to you well. Feel free to visit the contact page to send me an email with questions or business inqueries at any time and for any reason. Also, if you'd like you can read my story on the about me page.

Work

GXRift/RiftStats is stat-tracking application that can be utilized by all League of Legends Players world-wide. Many similar website exist to help players improve their play and track their progress, unfourtunately the stats given by those websites were not ones I found beneficial to me and my circle of friends. I figured the best way to fix that dilemma was to create my own, and so I did!

The application utilizes the Riot Games API to retrieve dynamic data for individual players and each game they've played (including the stats for all 9 opponents a searched player has in each game). I created simple but effective algorithms to take data from each match(100 matches, each multiplied by 10 to include data for each opponent) to display the stats I wanted to see. The largest obstical I faced were the APIs call limits. I realized that for this site to work for every LoL player, I needed to store the data locally and have players individually call the API only when needed. I used Python and Flask to do this by storing 100 of the most recent matches a searched player was found in. A page load will only access the local data, and there is a very high likelihood that a new user search will be successful because a former opponent has also had their data retrieved. If not, a user can click update to call the API and store more data in the database.

WhatsForLunch is a clone of Instagram, it was created to help myself and 3 collaborators hone our React and Python skills. Myself, Jaron Degen, Andrea Jackson and Quincy Jones used an Agile workflow through every phase of the production cycle over the course of five days to complete the project.

My job in particular was to implement a backend with Python and Flask. This backend handled the storing and retrieval of User, Social, Image and Comment data. The Flask server was called on specific page loads based on the currently logged in user. Flask-SQLAlchemy was used in conjunction with SQL to actually store and retrieve the data.

OP Champs is an homage to Riot Games' flagship title: League of Legends. As a player of the competitive video game for almost 10 years, I really wanted to utilize my new found React skills on a game I was and am so passionate about. This application is a simple database used to display Champion and Universe lore for the game. Riot developers and story writers have put in a lot of time into each of the 154 champions and their individual stories yet it's hard to find a resource where users can not only find the stories, but also discuss it with others. OPChamps was created to do just that.

The schema for the website is quite simple. Auth and data stoage are handled with an Express backend while the frontend is rendered using React. At the time of create, rReact was a newly aquired skill and this project served great practice for myself. The Express backend stores User, Comment, Champion and Region data.

AverageReads was my first deployed application. In collaboration with 3 others, we created a clone of the popular Amazon website GoodReads. The website allows users to find new and noteworthy books to mark as 'read', 'reading', or 'wants to read' similarly to the actual goodreads website.

Javascript is used on both the frontend and the backend of this project. The frontend uses the Pug view-engine to render the pages while Express and Sequelize take care of storing Book and User data.

About Me

My name is Daniel Black and I've always had a passion for solving problems. Early in my life I decided that a career in the investment industry would allow me to follow that passion. I spent countless years honing my craft to be the best I could be in my field. When I finally landed what I would have considered at that time to be my dream job, I felt that I was finally in a position to satisfy my desire of solving problems.

Unfourtunately, I realized that the industry I decided to pursue was not one that I could do that consistently. A brokage firm should care about their clients enough that my own methodology for finding the right stocks shouldn't be utilized, rather I should be using the firms methodology. At that point I decided it was time to do some soul searching and move on.

Coupled with my enduring passion for technology, it was a matter of time that I'd find my self pursuing a career in software development. I do still have an ardent relationship with investing, but it became clear to me while working in the field, that what I really loved was the analytics and the algorithms involved in finding the gem in the rough. Introducing myself to programming was the single greatest choice I have made in my lifetime, as I've quickly realized there are an infinite number of problems to be solved and algorithms to be written.

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