This learning module Tom and James learned about UDP (User Datagram Protocol), which is a communication/internet protocol. UDP allows for the transfer of data without establishing a connection. Tom and James used Java for this learning module to create and utilize UDP sockets (known as DatagramSockets within Java). This week Tom and James decided they would simplify UDP in Java to allows for the sending of simple Strings simulating that of a map with keys and values. Meaning you could send the number 2 with the key "val" and get the number 2 on the other side from the key "val". On the left was just a simple test program that would just receive a message sent to it from the other UDP socket typed in by the user.
This learning module Tom and James would learn cryptography hashing and encryption. They would once again use Java for this learning module. Tom and James would learn about RSA and AES encryption for the sending of data. They would learn about Hashing and Salting for passwords using PBKDF2 with SHA1. Using TCP they would make a simple Account Manager that would allow for storing of data on accounts that would be encrypted and decrypted during and after transfer. The passwords would be stored using hashing and salting. As seen on the left is a simple example of this account manager code (This program also works across multiple wifi networks along with different computers).
This learning module Tom and James would learn about Augmented Reality. They would use Unity and Unity's AR Foundation to accomplish this. Throughout the learning module they would learn about things such as plane detection and ray casting. In the end they ended up making a simple game as seen on the left where you just had to fire lasers at the enemies before they hit you. Also on the left you can see our full presentation along with more videos of our progress.
This learning module James would learn Android Studio and try to make some projects on Android using past knowledge mixed with new knowledge. On the left and bottom you can two of the 5 mini projects James had made. The first week James had made three mini projects. First was just a simple UDP packet sender app that would send a message typed in by the user encoded in UTF 8 bytes and then decoded on the other side and printed out to the console. Second was a TCP image receiver that would receive an image chosen by a user on the computer and display it on the phone. Third was a simple webcam stream from the computer to a phone using UDP, James would then turn this in to his fourth project by making it a full video call with audio and the phones camera stream on the computer. Fifth was a simple program where you can control your computer from your phone and move your mouse around using a virtual joystick, along with a livestream of the computer on the phone. On the left you can see the video call (you can see the phones camera stream on the computer screen) and below you can see the app where you can control your computer from your phone (virtual joystick on left, left click is purple button on the right).
Android Studio and Sockets on Mobile Devices Write Up
This learning module James would learn how to decode MP4s and would attempt to develop an application similar to YouTube in that of what he would call "GoodeTube". GoodeTube would be built in Java using libraries such as xuggler and javacv for the decoding/encoding of MP4s. James would also create a server to upload videos and buffer content to a user, and would learn to use services such as no-ip (used to mask the ip address in this case). On the left you can see James's presentation of what he did week by week along with the final GoodeTube application. In the video at the end of the presentation James creates an account, changes his profile picture, shows the upload video interface, and watches a video.
Decoding MP4s and Application Development Write Up
In this learning module, James and Tom learned how to use APIs such as Yelp's API, Amazon Web Service Polly, and Mapbox's map API. James and Tom using these APIs wanted to create a location-based game like Pokemon Go. In the game, James and Tom ended up creating you would receive voice calls in-game from customers and using the Yelp API would ask for an item from a local business. You would then have to go pick up this item and bring it back to a base you placed at the start of the game. Users would also create an account at the start of the game and their passwords would be encrypted and saved with their data on a server. The app was programmed in Unity with C# and the server was programmed in Java.
This learning module James and Tom learned about HTTP, Web Sockets (using ws, socket.io, and other libraries), and Node.js. James and Tom ended up creating three different projects during this final learning module. The first project they made is a Capture the Flag game that allowed you to pick a team and join other people's games online on a website. The second project they made is a simple chat website in which users can join rooms and send messages and images to the other people in that room. The final project they would make is a clone of Kahoot called notkahoot. You could host a game at notkahoot.com/host and create a game at notkahoot.com/create and then play a game at notkahoot.com or notkahoot.com/play. The first project was programmed using Unity WebGL and a Node.js server using ws. The other two projects were made using React and a Node.js server using javascript.