I am Vikram Grewal

IOS Developer, Full Stack Web Developer, Endless Learner

Learn More

About Me

I'm a new grad from San Francisco State University who has excellent skills building IOS applications that are able to be used by people all around the world. Thrives on developing exceptional mobile applications that provide fluid user experiences across multiple devices. Always ready to dive head first into any project and enjoys learning new technologies.

In the second half of 2018, I joined Pieced Co. where I work directly with the CEO to develop their internal IOS application. I am now looking for a full time role as an IOS developer to learn more and improve my skills to create better mobile applications!

I love working in teams and collaborating on projects. Excellent written and verbal communication skills. Interested in challenging technical roles building mobile applications.

Work Experience

Pieced

IOS Developer San Francisco, CAAugust 2018 - Present

Developed and deployed initial internal IOS application to automate sending customer orders to clothing factory.

Worked directly with CEO ensuring end-to-end needs were met.

Integrated Auto Layout, so that user interface is responsive for both iPhone and iPad.

Simultaneously managed multiple features meeting strict deadlines.

Designed and implemented SQLite database.

Included multiple CocoaPods to ensure great user experience.

Created automation scripts to analyze SQLite database and send clothing orders to factory via REST API.

Built responsive dynamic interfaces after extracting information from custom created JSON resources.


Portfolio

Pocket Fitness

An IOS application that allows users to keep track of their fitness journey.

Architected application using MVC design pattern. Implemented login authentication using Facebook Login API, Keychain, and UserDefaults. Created all view layouts programmatically using AutoLayout. Managed SQLite database using SQLite.swift dependency. Packaged external optional resources that can be added using JSONSerialization. Deployed beta testing for application through TestFlight.

Technical Tools Used: AutoLayout, SQLite, CocoaPods, TestFlight, Facebook Login, Serialization, UserDefaults, Keychain

Match!

A node.js application built on the Express web framework.

Using Node.js with Express.js framework for the app/game. This allowed us to follow a MVC architecture guideline. PostgreSQL was used for the database as thats the technology heroku uses. Bootstrap was used as the front-end framework and Handlebars.js was used to template our views. The socket.io node module was used to accomplish real-time communication between the clients and server. This was necessary for the chat box and the turn-taking logic for the game. The emit method for socket.io was used to broadcast messages to the different game rooms, such as informing the user that their turn has started. While our express server was running, we were constantly listening to these messages to broadcast to the correct users about what needs to be done next.

Home Place

A full stack web application built to replicate the functionality of a real estate website.

Created front end of application using EJS template engine to script Bootstrap, HTML/CSS layouts. Deployed backend using Express framework. Architected application using MVC design pattern. Implemented authentication using Passport.js middleware. Designed RESTful API to serve correct data following HTTP Protocol. Used Cloudinary API/middleware to implement photo uploading using cloud services. Managed and modeled database objects using Sequelize MySQL wrapper. Added Google Places / Google Autocomplete to validate postings.

Tank War

A Java game that involves two tanks going to war with each other.

Game was built from scratch. We ended up using a JFrame that held a JPanel that then held Jcomponents, which we felt made it the easiest to draw out the game. The game frame holds an instance of our players, game, view controller(key listener) and views (game objects). Each component that is drawn on screen extends our abstract game object class, which then extends our JComponent class. Another important part of the program was collision detection, ie the class that lets us detect when two objects are connecting. For example when a bullet hits a wall or tank, it can tell the program what it needs to do. In our game instance we have an instance of our collision detection class. This class then holds an instance of our game. In order to have quick access to object locations. Using our method called getRectangle which we can use to get access to coordinates for given object.

Web Server

The purpose of this project is to write a web server application capable of a subset of the HTTP protocol.

Created a mock web server that was able to handle the following methods: Read, and store, standard configuration files for use in responding to client request, parse HTTP Requests, generate and send HTTP Responses, respond to multiple simultaneous requests through the use of threads, and logging.

Expression Evaluator

Expression Evaluator is a simple calculator with a GUI that evaluates simple mathematical expressions using operators (^, *, /, +, -).

The GUI evaluates the expression as each button is pressed keeping the current state of the calculator. If the next button is not a valid command compared to the current state of the calculator, then the expression will not change. This uses conditional checks. Once the expression is a valid expression of infix notation, the expression will be converted to postfix notation. Evaluating a postfix notation expression is a much lighter task than evluating an infix notation expression. To convert an infix notation to postfix expression, only one stack is used to hold the operators. When we encounter we an operand we add it to a new expression, but when we encounter an operator we must push it to the stack(if it is empty). Otherwise, we must compare the current operator's precedence with that of the stack's top operator. If the current operator is of less or equal precedence, we pop the operators into the expression. Parentheses makes it slightly more complicating since the precedence only slightly matters. Once the expression is converted, you just push the opererands to a separate operand stack. If you encounter an operator, you perform the execute method of the operator with the top two operands returning and pushing that value to the stack.

Skills

Here are various aspects of IOS development I have experience working with.

Swift
Objective-C
Cocoa
GCD
Dependency Management
Unit Testing
Source Control
Core Data
SQL
Interface Builder
AutoLayout
Adaptive Layout
RESTful Web Services