My Projects

  • Apples2Oranges
    Artificial Intelligence that can distinguish between pictures of apples and oranges

    [CODE]
  • TV-Tracker
    An iOS app to easily keep track of your favorite TV Shows

    [CODE]   [DOWNLOAD]
  • JeffersonClub-Client
    A cross-platform mobile app to manage community service hours and volunteering

    [CODE]
  • APUSH-Companion
    An iOS app to help students prepare for the AP US History Exam

    [CODE]   [DOWNLOAD]
  • FavoriteEmojis
    An iOS jailbreak tweak that changes the "Frequently Used" emoji keyboard section into a custom favorites list

    [CODE]

View All Projects

Essay Typer


What is it?

This is a way to transfer your files directly from one device to another. To establish a connection to each other, you and the recipient exchange a set of generated "codes". After that, you can send the recipient as many files as you want (until you close your browser). Also note that there's a 15 second timeout while connecting, so type fast! (This limit wasn't set by me, it's a feature/limitation of Google Chrome)

Why?

In peer-to-peer file transfer, your data never gets sent to another server, so it's faster and more secure. You also don't have to worry about the file size limits that exist in emails or texts.

How?

This implementation uses WebRTC to establish a connection between browsers and is (almost) completely serverless. In order for peers to discover each other, a STUN (Session Traversal Utilities for NAT) server must be used. This server finds a network path between the two peers by implementing the ICE (Interactive Connectivity Establishment) protocol. After finding a path, the peer initiating the connection generates an SDP (Session Description Protocol) offer, which must be sent to the other peer. After the recipient receives the first peer's offer, they generate a SDP answer, which must be sent back to the first peer. After both peers receive each other's handshake, the connection can be established and data can start passing directly between them. Normally, a signaling server is used to send the initial handshake. However, I wanted to rely on as little external servers as possible (without hosting my own server instance of course), so I decided to let the users send this data directly to each other. To make this feasible, the handshake had to be heavily compressed. First, the data was first split into smaller chunks, and each chunk was assigned a key. Finally, the combination of shorter keys are assigned to a single key. Each "code" generated is actually a key linked to a chunk of encoded JSON handshake data. If the initial ICE connection fails, it's most likely an issue with a firewall or symmetrical NAT, so sending data directly between the two peers isn't possible.

Share Files





Receive Files



Privacy Policy

This purpose of this policy is to inform visitors regarding the collection, use, and disclosure of personally identifiable information (PII). If you do not agree to the following policy you may wish to cease use of this service. This service is provided at no cost and is intended for use as is.

Information Collection & Use

This app uses a third party service that may collect certain personally identifiable information for advertisement attiribution / identification (Google AdMob). I do not control the actual advertisements seen / displayed by advertising partners. Advertising partners partners may collect data and use cookies for ad personalization and measurement. Clicking on any advertisements may track your actions by using a cookie saved to your device. Where ad preferences are requested as 'non-personalised', cookies may still be used for frequency capping, aggregated ad reporting and to combat fraud and abuse.

Cookies

Cookies are files with a small amount of data that are commonly used as unique identifiers. These are stored on your device's internal memory. This service does not use “cookies” explicitly, however, it may contain third party libraries that use such “cookies” to collect information and improve their services.

Security

No method of transmission over the internet, or method of electronic storage is 100% secure and reliable. Therefore, I cannot guarantee its absolute security.

Changes to this Policy

I may modify this policy at any time. Thus, you are advised to review this page periodically for any changes. These changes are effective immediately after they are posted.