During the summer of 2019, I worked for WYFT Inc as a Software Developer Intern. WYFT, abbreviated from Where’d You Find This, hired me for this full-time paid internship position, where I worked over a ten-week period between May 27 and August 20, 2019.
The goal for the summer internship was to work in a group of four interns including myself (all of whom were current undergraduate or graduate Computer Science students at various colleges and universities in the United States), to develop Android and iOS phone applications to connect artists, art lovers and
small art businesses with each other from all across the United States.
Using the application, an art lover would be able to register and create a free WYFT account on his/her Android or iOS phone using the user’s email address and a password. The account would then enable the user to create a profile using the user’s contact details, a profile photo as well as the user’s artistic
preferences, based on whether the user self-identified as an artist or art seeker or both. The application would also have a built-in functionality to view profiles of other public users on the platform and connect with them using their contact details.
Art enthusiasts on the platform would be able to search for various types of art exhibits based on their preferences of art categories and their location. They would also be able to upload photos of art exhibits they attend and the application would have a built-in functionality to create “hotspots” in locations
where a large number of art photos have been uploaded onto the application. These “hotspots” would then show up on the built-in maps on the phone applications of other art seekers who would look for art in the given region and give them access to real time information about popular art exhibits and events
happening around their location of interest.
Artists would be able to use the platform to create public art profiles of their art and increase their outreach towards a wider variety of art enthusiasts based on their genre and attract interested art lovers from all over the United States, by advertising samples of their art and details of future art exhibits and art events and making them publicly viewable by any user on the application who would search for their art category.
In the first week, we, the interns, mostly planned about how we could execute all the functionalities for the application through regular team meetings and agreed on various strategies, approaches and target dates by which we would like to finish various parts of designing the application. We set up a private GitHub repository for the application code and created a project on Android Studio, which we connected to our GitHub repository using git version control. We agreed to finish working on the Android application first, and, depending on the amount of time we would have left at the end of finishing the Android application, decide on whether we would also work on the iOS application, and, if so, how much. We were instructed by WYFT to use the Multi-OS Engine module available on Android
Studio to create an iOS application at the end. We spent time studying in depth about how the Multi-OS Engine module could be used to create a common backend for the iOS application using the Android application and planned in advance the strategies we would use to complete that application. We set up
a team channel on Slack and installed Zoom and agreed on times for any remote future project meetings on Google Hangouts.
In the second week, we worked on designing a user interface for the Android WYFT application. We used the WYFT logo for the application’s front appearance and used Java in Android Studio to create a simple register/login page for the Android application. A playlist of videos on the YouTube channel of an Android application expert called “PRABEESH R K” proved extremely useful to us for learning about the working basics of Android Studio. We used a simple Sqlite database to store usernames (emails) and passwords of registering users so that they could be logged into the application platform and the registration/login functionality seemed to have been achieved successfully by the end of the final project meeting of the second week.
At the start of the third week, we realized it was a grave mistake to use Sqlite for the purposes of storing login information of users because Sqlite was a local database on the client device itself. There was no way to store the sensitive login information on a WYFT server using Sqlite on the client device. We
quickly proceeded to create a database for the login information of WYFT users on the MySQL server. We also installed MySQL Workbench to track the information stored in the database and SQLite Studio to create a remote local database on the server system as well for quick look up and data transfer.
In the fourth week, we understood that there needed to be a route for the transfer of registration data between new users from the application platform and the MySQL server so that the data could be used to authenticate logins. We understood that we needed a routing API that implemented the http get request to access the data from inside the application registration page and have it successfully matched and transferred into WYFT’s MySQL account. We installed the Webstorm IDE for JavaScript and used the JavaScript libraries, Node.js and Express.js to create an API that was able to update the records on the
MySQL server and tried to integrate the API into our project in Android Studio without much success.
At the start of the fifth week, we realized that the issues we were having were caused due to the lack of suitable libraries that enabled running JavaScript inside a Java environment. Even though a library called Script Engine seemed promising at first, we failed to seamlessly integrate it inside the Android Studio project. At this point, we choose to alter our approach and taught ourselves the basics of PHP, since it could be referenced very easily inside a Java project in Android Studio. We built another fully functional API, this time on PHP, to perform the function of data transfer from the Android Studio project into the MySQL server. We installed the cross-platform web server, XAMPP, to integrate the PHP API into the Android project and finally achieved the successful implementation of the registration, login and home page viewing functionalities with much success. At this point, we used the application simulator/emulator available on Android Studio to test out the WYFT app to our satisfaction and the testing’s remarkable success marked the joyous middle checkpoint of our internship experience.
In the sixth week, we began to implement the location functionality of the Android application by integrating the Google Maps API into the platform. The license to use Google Map functionalities on the WYFT application was purchased beforehand by the company and we used extra dependencies on the
Android application branch of our project and on GitHub to allow the map to be loaded and used inside the application and to track popular locations on the map on the basis of user activity on the map. WYFT also had an account on Amazon Web Services (AWS) and we used this cloud computing facility to store a
database of popular locations on the application and update the data in real time using more PHP APIs. The data would be sent to AWS and retrieved back using similar routing APIs we built using PHP and XAMPP to set up a http communication medium between the application project on Android Studio and
AWS.
In the seventh week, we worked on implementing the profile page functionality for users of the WYFT app. We used Java and Kotlin classes to configure the layout of the profile page through xml files to create a customized profile page display for WYFT and allow users to upload a profile picture and enter personal details that would be displayed on the profile page and made publicly viewable to other WYFT users and be stored and transferred across the WYFT MySQL database using yet more routing APIs built using PHP.
In the eighth week, we focused on executing the upload functionality on the application so that users could upload pictures of art locations and exhibits on the WYFT platform. To store the user images, we used a database on Amazon’s Simple Storage Service (S3) that would allow us to store pictures uploaded by a user. We had to construct a slightly modified PHP API that would be able to retrieve a hyperlink to a given image on the S3 database as a URL object and be able to enable displaying the final image on the Android application depending on the access rights of the user requesting the image as well as the access specifier of the image, and also to have the capacity of showing an appropriate error message when access was denied. This proved to be a very complicated process that was finally resolved after much trial and error and the application simulator on Android Studio was also starting to slow down considerably due to the large volume of data being transferred across many APIs at any given moment and we decided to stop adding more dependencies to the Android application by the end of the final project meeting of that week.
By the start of the ninth week, we already had a very satisfactory and fully functional Android application and we decided to dedicate the remaining internship time towards working on the iOS application in order to at least double the outreach of WYFT. We created a common directory on Android Studio and transferred the appropriate section of our code so far into the common directory to serve as a common backend for both the Android and iOS applications. We separated the frontend we had already constructed for the Android application into a separate directory called android and added it as a dependency on the main common directory and ran tests to find that the Android application was
working successfully after the file hierarchy reorganization. We then created a new Multi-OS Engine module called iOS and added this as a dependency to the common directory, in order to enable the iOS application to receive the entire backend information from the work done so far. Hence, by the end of
the week, we had a fully functional Android application and an iOS application with a fully functional backend and common file directory but no user interface or frontend/user end for the iOS application.
During the tenth and final week, we installed Xcode and accomplished designing the client end user interfaces of the registration/login page of the WYFT iOS app, the homepage, the map page as well as a general structure for the profile page. By the time we finished doing that, the internship was officially over and we left the project complete with the company wishing to make some small bug fixes with the help of more experienced Software Developers before the final public release of the applications.
We had a wonderful experience interning at the company and were given a very graceful and delightful farewell with a full payment as well as an extra bonus for the successful hard work and were extended warm and enthusiastic verbal offers to rejoin the WYFT family at any time in future when we would again be available to work.
As of now, the company is finishing up on legal paperwork to set up its foothold in the market of artists and art enthusiasts and working on establishing the lawful ownership of the WYFT application before planning to release both the Android and iOS applications for WYFT Inc to the general public, especially the community of art lovers.
Copyright © 2022 Mohammad Fahim Tajwar - All Rights Reserved.
We use cookies to analyze website traffic and optimize your website experience. By accepting our use of cookies, your data will be aggregated with all other user data.