## Inspiration

We wanted to create a multiplayer game that would allow anyone to join and participate freely. We couldn't decide on what platform to build for, so we got the idea to create a game that is so platform independent we could call it platform transcendent.. Since the game is played through email and sms, it can be played on any internet-enabled device, regardless of operating system, age, or capability. You could even participate through a public computer in a library, removing the need to own a device altogether!

## What it does

The game allows user-created scavenger hunts to be uploaded to the server. Then other users can join by emailing the relevant email address or texting commands to our phone number. The user will then be sent instructions on how to play and updates as the game goes on.

## How I built it

We have a Microsoft Azure server backend that implements the Twilio and SendGrid APIs. All of our code is written in python. When you send us a text or email, Twilio and SendGrid notify our server which processes the data, updates the server-side persistent records, and replies to the user with new information.

## Challenges I ran into

While sending emails is very straightforward with SendGrid and Twilio works well both for inbound and outbound texts, setting up inbound email turned out to be very difficult due to the need to update the mx registry, which takes a long time to propagate. Also debugging all of the game logic.

## Accomplishments that I'm proud of

It works! We have a sample game set-up and you could potentially win $5 Amazon Gift Cards!

## What I learned

Working with servers is a lot of work! Debugging code on a computer that you don't have direct access to can be quite a hassle.

## What's next for MailTrail

We want to improve and emphasize the ability for users to create their own scavenger hunts.
## Inspiration

For my project I wanted to see if I could use state of the art machine learning and crowd sourcing methods to make something not only innovative and exciting, but also fun and whimsical.

Although I'm not artistically talented, I like doodling, whether it's when I'm supposed to be paying attention in a class, or for games like "Draw Something". I got the idea for this project after learning about Google Quick Draw project, where they crowdsourced millions of doodles (including some of mine!) to train a neural network, and then released the drawings for the public to use. I really liked the cartoony vibe of these drawings, and thought it would be fun to use them to make your own doodles.

## What it does

The overarching theme of the app is to create drawings using crowd-sourced doodles, and there are two main ways it does this.

First, you can add to the image using voice commands. The picture is split into an (invisible) 8x6 grid, and you can specify where you want something placed with regular Cartesian coordinates. For example, you can say "Tree at 4 dot 3", which would draw someone's doodle of a tree on square (4, 3).
If you're planning on placing a lot of the same item at once, you could instead say a command like "Frying pan across 7" which would fill row 7 with frying pans, or "Monkey down 0", which would fill the first column with monkeys. If you don’t like a doodle, you can click refresh to try a different user submitted doodle, and if you want to simply restart the whole drawing, you can say “Erase” to get a blank canvas (full of possibilities!).

The second way to create a drawing is you can paste in a link to an actual photograph, and the program will doodle-fy it! It will attempt to detect prominent objects in the photo and their location, convert those objects into doodles, and place them in the blank canvas so that they're in the same position relative to each other as in the original.

## How I built it

This program was built using Python, the GUI using PyQt, and image creation through Pillow.

I use Google QuickDraw's open dataset to access some of the millions of doodles submitted by people around the world, each corresponding to some category like "car", "tree", "foot", "sword", etc, and these are the building blocks for Doodle My World's images.

For the voice commands, I used Microsoft Azure's speech services to convert the commands into text. The program then searches the speech transcript for certain keywords, such as the object to be doodled, its coordinates, whether or not to fill a row, etc. The name of the object is fed to Google QuickDraw, and if it's matched with a doodle, it will add it to the canvas at the coordinates specified (the box coordinates are converted to pixel coordinates).

For the photo conversion, I used Azure's computer vision to analyze photos for objects and their locations. It detects prominent objects in the photo and returns their pixel coordinates, so I put in the list of objects into QuickDraw, and if a doodle was available, I placed it into the image file at the same relative coordinates as the original.

## Challenges I ran into

One of the main challenges I ran into was getting the APIs I was using to work together well. Google's QuickDraw based its data off of things that were easy to draw, so it would only identify specific, simple inputs, like "car", and wouldn't recognize Azure's more specific and complex outputs, like "stationwagon". One way I got around this, was if QuickDraw didn't recognize an object, I'd then feed in what Azure calls its "parent object" (so for a stationwagon, its parent would be car), which were often more general, and simpler.

Another issue was that QuickDraw simply didn't recognize many common inputs, a specific example of which was "Person". In this case my workaround was that whenever Azure would detect a Person, I would feed it in as a "smiley face" to QuickDraw and then draw a shirt underneath to simulate a person, which honestly worked out pretty well.

## Accomplishments that I'm proud of

This was my first time attempting a solo hackathon project, so I'm really happy that I managed to finish and reach most of my initials goals. This was also my first time creating a front end GUI and doing image manipulation with Python, so I learned a lot too!

## What's next for Doodle My World

There are a lot of voice commands that I wanted to add, but were more like stretch goals. One idea was to be able to specify more specific ranges rather than just single rows or columns, such as "Star from rows 3 to 5" or "Mountain in half of column 2". I also wanted to add a "Frame" command, so you could create a frame out of some object, like stars for instance.

Because of the disconnect between the specifics of Azure compared to the generality of QuickDraw, I'd originally planned on adding a thesaurus feature, to get related words. So for instance if QuickDraw doesn't recognize "azalea" for example, I could run it through a thesaurus app, and then feed synonyms to my program so that it could eventually recognize it as a "flower".
## Inspiration

● Phone provides addition security against malicious acts

● Organizes license information clearly, points on licenses, endorsements, restrictions, organ donor, under 21 before, expiration and etc…

● Faster information updates

● Adaptable and extensible standard

## What it does

● The state’s DMV creates a master key and master root certificate.

● The user’s device generates a key, which is then signed by the state’s certificate

● Authority after proving the user’s identity and possession of the physical drivers license.

● The relying party (bar, cop, etc) generates a random string (“none”), which is read
 by the user’s camera or via NFC, signed by the user’s key/certificate, and uploaded
 to a server or transmitted via NFC.

● User can scan a QR code with their phone instead of presenting a physical license

1. The Driver supplies their drivers license ID and other identifying information to the DMV’s server.
2. The DMV responds with challenge questions, and the Driver replies with the answers.
3. After successful identity verification, the Driver supplies the DMV with a RSA-4096 bit public key. The private key is always stored on the Driver’s device. It must never be uploaded anywhere; loss of the device should result in the loss of the key.
4. The DMV creates and signs a JSON Proof with the Driver’s public key and data from the license, and provides this to the client. The DMV must not sign a JSON Proof with a serial number containing more than 18 hexadecimal characters.

## How I built it

● DMV
-4096 bit RSA key
-Stored in Azure Key Vault
-Only generated once; needs to be cycled every ~20 years as it doesn’t expire
-Explicitly trusted by Relying Parties
-Signs JSON Proofs after validating identity

● Driver
-4096 bit RSA key
-Supplies the DMV with its public key and identity validation information

● JSON Proof
-Signed by the DMV
-Contains the Driver’s public key, expiration and license information.

● Relying Party
-Has list of all state DMV public keys to be used to verify JSON Proofs.

●Signatures
The DMV signs the JSON Proof below with SHA256, which the client presents along with the JSON. The Relying Party must verify this signature.

## Challenges I ran into

●Running into problems with Android Studio and Azure

## What I learned

●Tons about Cryptography and secure solutions to problems we face today

## What's next for Copia

●Improving our proof of concept implementation