Android App: Displaying a Canvas of images taken by a DJI Drone according to JPG Tags.Summer 2018

The DJI drone has no problem taking pictures, but when it comes to finding the location of the pictures, we need to search through the properties and the details of the JPG taken in order to find their latitude and longitude in degree-minute-seconds.

So what I made here is, given a file name, this application will go through all the files located in the SDCard of the Android device, and gather the information of the images and put them in a visual layout.

Here is what the parsed JPG metadata looks like, I made a struct called JPGMetadata that stores all the important values of the file located in the SDCard. An other functionality of this struct is to facilitate the data conversion of the Latitude and Longitude thats first in degree-minute-seconds to decimal figures.

Below is the part of the code that given a JPG file, parses the JPG data and stores them into an Array of a struct called JPGMetadata.

The above code is a subclass of the code below as it this part of the code is actually getting the Tag names. To increase readability of the below code, I made more "human language" friendly tags that are mapped to the TiggTagConstants that are used in order to get the JPG metadata.

This following part of the code is for having a bigger idea of the file containing the many pictures taken by the DJI Drone, it serves as a way to understand what are the limits of the canvas map we need to build such as how many pictures are taken, and what are the corner locations of the whole map if we were to resize all the pictures into one big rectangle. This will also contain the dates of the first picture and the last picture in order to be able to iterate through many different "photoshoot" taken by the DJI, such as day 1 pictures, day 2 pictures etc...

And finally, here is the canvas where I display the pictures according to their locations. This part also rechecks that the correct permissions were given by the User in order for the App to read the SDCard.

Android - Java - TiffTags = Canvas

Part of server for file upload, download, delete.Summer 2018

This is a smaller part of a bigger code, but that's the only part that I am allowed to display.

This code's main purpose is to parse data sent by the HTML client as queries and get information such as the file names that needs to be downloaded, deleted or uploaded. And if downloaded, keeping track of which files were downloaded in the session information in order for the user to not need to download again the same files by mistake. The uploading is done to the Meteor server that I work with.

Python - Flask - Meteor - OS

Tablesorting algorithm for all web browsers Summer 2018

This is a project that I did for sorting an HTML Table according to which column was selected.

The code is well commented, I would recommend going through it! More on this project soon!

Monkeyrunner : Android App simulationSpring 2018

This project's whole purpose is to test other projects. As our android application in our research team is very complex, it is hard to keep track of all the buttons and switches that the user might need to press or enable.

That is why I came up with a way to firstly find any touchable view that exists in a specific view, (call it main-view if you wish), then list all the positions of the touchables according to their screen location and finally be able to activate them using an android adb tool called monkeyrunner.

The following code takes a view and gets the appropriate locations of all the children touchable view. I would like to point out that I am using Log.d with a special tag for the communication between the adb shell logcat, the monkeyrunner, and the android.

Here is the code for the monkeyrunner to firstly run the android program on the device, and then read all the log outputs with a special tag.

Here is the code for the monkeyrunner that takes how ever many parameters you want in pairs of two, first the ID of the android button you wish to press, second, the time pause needed in order to activate the button.

I ran into quite a lot of problems whilst trying to run monkeyrunner as my batch file had paths that lead to nowhere. Since I had to do a number of changes to the original file, I decided to also provide that file in here.

John Deere Project : TangoSpring 2018

This is a project given to me and four other ABE students.

We were assigned on making a new design for the automated mower Tango, a John Deere product mostly recognized in Europe. Our assignment consisted of increasing or decreasing the height of the mowing blade according to how much load stress the grass created. This assignment challenged our knowledges in mechanics, electronics as well as software as all three were required.

As a bonus deliverable we also came up with a Tango App that enabled Wi-Fi communication between the Tango and an Android application. This application served as a remote controller for the Tango. This simple idea seemed to have increased the desirability of the Tango by the viewers by a considerable amount and we were very much complimented on our work and our enthusiasm to give a good final product.

Feel free to take a look at our presentation which does a perfect job of describing our accomplishments as a team.

I believe this was a very good experience for me, learning how to work with a team was very entertaining and enjoyable as it promoted and encouraged me to work and do better to impress my coworkers as much as the potential consumers.

Mechanics - ESP8266 Wi-Fi - HTML Post/Get - Arduino - PTC Creo - Android - Java - XML

Tango Workflow
Tango Team

Here are the codes for the Android Application as well as the Arduino Code, commented especially for the later users who wish to understand the functions as easily as possible.

Robot modeling and control class tutorial Spring 2018

This is a website that I have created after the request of one of my professors who wished to show that robot modeling or graphics modeling is not as complicated as it looked. I believe I did a good amount of work considering the timeline I had (~2 days). Feel free to visit the website here on my other github account ABEUIUC from which I host the webpage.

HTML - Robot Modeling - CSS - JS - Jquery

Interpreter on EC2 Instances Fall 2017

Creating multiple EC2 instances where users will have an interactive computational environment in which you can combine code execution, rich text, mathematics, plots and rich media. This has been used for a workshop that my research professor and multiple other performed in Australia. The workshop webpage can be found here.

AWS - Route53 - S3 Bucket - EC2 - Python - HTML - CSS - Javascript - MXNet - IPython - PyTorch - sqlite3 - Jupyter

aws workflow

DJI Drone Data Gathering Spring 2017

Android App that lets the user select an area from Google Maps or chose an previously saved area from the users personal S3 Bucket. The user can then chose to deploy an automated DJI-Drone whose mission is to take pictures of the selected area. These pictures are then displayed on the App and saved in the S3 Bucket with their specific world coordinates and time. Click here for the video of the app working. This app has been used by 5 farmers located in Illinois. The workflow of the mission is displayed bellow.

DJI - Android - AWS - S3 Bucket - SQL - XML - Google API

Workload Calendar Fall 2017

A webpage where users can register and save their personal informations as well as enter their work times. This is used for the undergraduate students who earns credit hours according to their working time. The workloads are made easy to observe thanks to graphs created in d3js.

Python - Flask - d3js - Javascript - HTML - CSS


My Farm Everyday Spring 2017

Android app that displays agriculture data to user (typically farmer) overlaid on Google Maps. The data is downloaded from the client's personal AWS S3 Bucket. The pictures are displayed in accordance to the timeline the user choses.

Android - MySQL - XML - Google API

app image
app image
app image

Dynamic Website Spring 2016

This website lets you create, edit or remove sections from it’s own content, with a user friendly interface. These sections are saved and populated from a MySQL database using Flask. This website’s main purpose is to let users who aren’t familiar with HTML be able to enter their own personal contents without the need of assistance.

Python - Flask - MySQL - HTML - CSS - Javascript

Factorial Trees Spring 2015

Randomly generated Tree using d3js. There is upto 15000 nodes so it can sometimes take a while to display. Feel free to refresh the page to view different trees.

d3js - HTML - CSS - Javascript

Simple Image Processing Fall 2014

An image processing algorithm that is able to detect individual objects. And feedback it’s own error in detection according to how close the objects are to perfect circles as the objects in question was M&Ms.


Loading Logo Fall 2014

A simple logo I've created on my spare time, while trying to understand d3js better.

d3js - HTML - CSS - Javascript

Gears Fall 2014

Little project done whilst trying to understand d3js better.

d3js - HTML - CSS - Javascript