Natural Language Understanding to Emoji 🗣️
Tags: nlp, showdev, dailycode, webdev
Published: 2019-01-02 00:06:12

---
title: Natural Language Understanding to Emoji 🗣️
published: true
description: A small web app I built for fun that uses artificial intelligence to match an emoji to the emotional sentiment of some custom text or the last few Twitter posts of a Twitter handle.
tags: #nlp #showdev #dailycode #webdev
---

For a good while now, I've been wanting to put together some kind of professional portfolio of my work so I can have something to show for myself and attract new clients. It's not like I can take the code I write for my day job as developer at a private company and publish it to Github 🤷🏾‍♂️. So, I started off with something relatively simple and fun. I came up with an idea of a small web app that uses natural language processing to match an emoji to the strength of an emotional sentiment for a piece of text. I just finished up my initial MVP of the app and you can check it out at [nlpmoji.com](https://nlpmoji.com). Feedback in the comments here is welcome!

I want this project to help me continue to flex and sharpen some of my Java muscles. Although I am a full stack developer, I work on whatever the team needs my help on. These days, that skews more towards front end work for our particular project. I also wanted to subscribe to the idea of [writing code daily](https://johnresig.com/blog/write-code-every-day/) to become a better developer. Good literary writers are constantly writing, whether they're good ideas or not, to keep those skills sharp.

![sharpened pencil](https://images.pexels.com/photos/159731/pencil-education-pencil-sharpener-art-159731.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940)

# Stack
### TypeScript
This is a must have for me whenever I do any front end development for any long lasting web app with more than a few dozen lines of JavaScript. Lot's of developers are still a bit apprehensive about static typing for JS, but once you try it, if you do it right, you won't want to do it any other way.

### React
Gotta love my virtual DOM and JSX.

### Bootstrap 4
The visual design aspect of web development is probably the least fun piece for me. I leave the styling of core components to folks that actually know what they're doing; so Bootstrap was the easiest choice for me, but I might make some design tweaks later on.

### Java + Spring Boot ❤️
It was an absolute pleasure to work with Spring Boot. From easy setup to the documentation and resources for doing pretty much anything.

# Infrastructure
Since this was a small hobby project, I wanted to keep costs as low as possible. With the combination of the below Gitlab, Google App Engine, and Firebase, unless I receive a ton of unexpected traffic, I should be able to run my entire application stack for free.

### GitLab
I wasn't ready to open source the project just yet, so at this point I was looking for a solution that would give me private repos. Gitlab was also great with the issue management functionality and the nice UI that it provided. I took advantage to create my own Kanban board that I used to track items I wanted to complete for project MVP.

### Google App Engine
With a sweet [$300 credit for GAE resources for a year](https://cloud.google.com/free/), and overall cheaper pricing than AWS, I decided to go with Google for deploying this thing. I'm not married to GAE in any way, and can switch over to another platform service provider without too much fuss.

### Firebase
This is a great choice if you just have some [small static files you want to host for free](https://firebase.google.com/pricing/).

# Services
* [IBM Watson Natural Language Understanding API](https://www.ibm.com/watson/services/natural-language-understanding/) for the actual NLP heavy lifting. I didn't care much to reinvent the wheel in this part of my app, and they offer a decent number of transactions for free every month.
* [Twitter SDK](https://developer.twitter.com/en/products/tweets) for Twitter natural language processing. They also have a decent number of transactions you can make for free if you stay under their rate limit (which I make sure to do by implementing Guava's rate limiter in the backend of the app).