## Inspiration

Everyone gets tired waiting for their large downloads to complete. BitTorrent is awesome, but you may not have a bunch of peers ready to seed it. Fastify, a download accelerator as a service, solves both these problems and regularly enables 4x download speeds.

## What it does

The service accepts a URL and spits out a `.torrent` file. This `.torrent` file allows you to tap into Fastify's speedy seed servers for your download.

We even cache some downloads so popular downloads will be able to be pulled from Fastify even speedier!

Without any cache hits, we saw the following improvements in download speeds with our test files:

```
|                   | 512Mb    | 1Gb    | 2Gb     | 5Gb     |
|-------------------|----------|--------|---------|---------|
| Regular Download  | 3 mins   | 7 mins | 13 mins | 30 mins |
| Fastify           | 1.5 mins | 3 mins | 5 mins  | 9 mins  |
|-------------------|----------|--------|---------|---------|
| Effective Speedup | 2x       | 2.33x  | 2.6x    | 3.3x    |

```

*test was performed with slices of the ubuntu 16.04 iso file, on the eduroam network*

## How we built it

Created an AWS cluster and began writing Go code to accept requests and the front-end to send them. Over time we added more workers to the AWS cluster and improved the front-end. Also, we generously received some well-needed Vitamin Water.

## Challenges we ran into

The BitTorrent protocol and architecture was more complicated for seeding than we thought. We were able to create `.torrent` files that enabled downloads on some BitTorrent clients but not others.

Also, our "buddy" (*\*cough\** James *\*cough\**) ditched our team, so we were down to only 2 people off the bat.

## Accomplishments that we're proud of

We're able to accelerate large downloads by 2-5 times as fast as the regular download. That's only with a cluster of 4 computers.

## What we learned

Bittorrent is tricky. James can't be trusted.

## What's next for Fastify

More servers on the cluster. Demo soon too.
## Inspiration

In our busy world, people often rush from place to place. Sometimes, people need to stop and appreciate the art and the world around them. Especially now, we were looking for ways to connect local communities safely and creatively. paintAR provides such opportunities.

## What it does

Find art where you least expect! paintARt is an alternative reality app that overlays shared art pieces over everyday landmarks, like walls, posters, and plaques. Users collaborate on, or simply admire, different types of canvases, including murals and image collages.

Open the app and find local virtual art installations on the interactive map. Once you get there, open the camera function and point it at the landmark in real life. When the camera input matches a reference image, a canvas will be virtually projected on your phone screen. Admire, then edit the canvas using an image editor according to a given prompt. Functionality includes text, emojis, brushes, camera integration, cropping, and filters. When you’re done, simply press submit and watch your work be projected in 3d!

The possibilities are truly endless. Collaborate on the same canvas with others or create a collage of your own images in a grid. Share doodles, selfies, dog pictures, anything!

Connect with people across the world as well! Our application supports “portal” canvases, in which artists from different locations across the globe can collaborate and send artistic messages on the same canvas.

## How I built it

PaintAR was built primarily using Android Studio and ARCore. The opening map utilizes Google Play Location services to display the user’s location and surrounding murals in real-time. Images are synced and updated with Firebase Realtime Database and Google Cloud Storage. We also relied on Burhanuddin Rashid’s open source Android Photo Editor for editing images on the phone.

## Challenges I ran into

Setting up ARcore in Android Studio was extremely difficult, especially since most of our team had almost no prior experience with the ARCore SDK. Additionally, learning how to position 2D items in 3D space required learning about the fundamentals of AR, specifically how AR core anchors and tracks 3D models in physical space. We also ran into issues with the data storage, scope, and database portions of our project.

## Accomplishments that I'm proud of

Most of our team had almost no experience with AR mobile development. Creating a functioning AR app in just a day was a fun challenge. We also had little Android Studio experience, with three out of four teammates new to it. We’re proud of being able to work together effectively while also learning.

## What I learned

We learned a lot about the fundamentals of AR, including how virtual objects are represented in physical space. We also spent a significant amount of time learning about a variety of potential backends for our app before settling on Firebase and Cloud Storage.

## What's next for paintAR

We are thinking of adding additional types of murals, such as a 3-d mural, gif and video support, and allowing users to create their own anchor canvases.
![Slipstream Logo](https://res.cloudinary.com/devpost/image/fetch/s--IM9deGvg--/c_limit,f_auto,fl_lossy,q_auto:eco,w_900/http://i.imgur.com/FPBllXi.png)

## Inspiration

We've found that when we are developing an app at lightning speed, it can be a struggle to keep team members and beta testers on the newest build. Existing solutions entail a lot of friction, requiring manual steps to install updated builds of apps and hours or days of approval time for new builds. When testing on a large fleet of devices, a solution that works instantly and completely invisibly in the background would be a huge improvement. That's what we built with Slipstream.

## What it does

Slipstream continually delivers updated app builds to enrolled iOS and Android devices. As soon as a developer pushes a new commit to a designated git branch, the app is built automatically on an Azure cloud server. A push notification is sent to all devices, which instantly install the new build of the app without any user interaction required.

## How we built it

Slipstream uses git and Jenkins to receive new commits and fire off builds for Android and iOS. Once the app is built and all tests have passed, it uses Parse to send a push notification to the Slipstream updater on all enrolled iOS and Android devices. The Slipstream updater seamlessly installs the new version of app within seconds, completely invisible to the user.

## Challenges we ran into

iOS is naturally a very locked-down environment. Hours after the Android updater was working end-to-end, we were still struggling to get the iOS updater to achieve our stated goals. Thanks to the help of fellow PennApps hacker and iOS expert Conrad Kramer, we were able to reverse-engineer a private, hidden API on iOS that did exactly what we wanted!

## Accomplishments that we are proud of

We believe this is the first truly automatic solution for continually updating apps on iOS outside of the App Store. By leveraging private APIs - information that isn't available anywhere on the web - we can do what existing solutions can't.

## What we learned

Many behind-the-scenes tricks on iOS to make it do things it was never intended to do :)

## What's next for Slipstream

We want to make Slipstream available to any team to eliminate the friction of updating apps on development and test devices. This will involve writing clear and complete documentation and building out our web service to allow anyone to Slipstream their app.