Projects

Below are a selection of projects I have personally built.

Email Scraper

Dec 2016

Technologies: javascript

What?

Given a query or a spreadsheet of queries returns possible email addresses. The tool works by googling for the given query, opening the first 10 results and scraping the web pages for email addresses.

Why?

While building an outbound B2B email marketing campaign I needed to find email addresses for a list of leads. Instead of googling each individual query I decided to automate the process. As this is a common use case I decided to automate the process.

How?

The scraper runs on AWS EC2 as a docker container with a nodeJS backend written with ES6+ syntax. The backend makes requests to google and sub pages in parallel and updates the progress of the query using websockets to the frontend.

Record and Replay Javascript

Dec 2016

Technologies: javascript

What?

Records user invoked javascript events and replays them at a given speed. This could be used for reproducing user sessions for site analytics or screencasts.

Why?

I became curious by a Stack Overflow user’s question to record and replay a user’s behaviour.

How?

For full details of how this works, see this answer I posted.

Floripa Surf Webcams

Apr 2017

Technologies: javascript

What?

Splits the screen into webcam live streams of surf beaches in Florianopolis. Used regularly by surfers in Floripa.

Why?

As a tool for surfers in Florianopolis to check the waves!

How?

I integrated streams from multiple sites using jwplayer.

HNTV

Apr 2017

Technologies: javascript

What?

Splits the screen into webcam live streams of surf beaches in Florianopolis. Used regularly by surfers in Floripa.

Why?

As a tool for surfers in Florianopolis to check the waves!

How?

I integrated streams from multiple sites using jwplayer.

Treasure Game

Apr 2017

Technologies: javascript

What?

A game where the goal is to find the treasure.

Why?

I found it hard to explain binary search algorithms to non technical people. I invented this game as a tangible way to explain this concept to non programmers.

How?

Allows user to solve game and has a computer auto solver which uses a binary search algorithm. Built with webpack and integrated with giphy service.

San Francisco Hot Events

Feb 2018

Technologies: javascriptalgoliameetup.com

What?

Lists events in San Francisco using meetup.com API. Allows filtering by events which are almost full, are popular, have food, have drinks or are of a particular category.

Why?

While in San Francisco I found that I missed out on a bunch of great events as they were already at full capacity. I found meetup.com to be quite noisy and lacking features so I implemented a better interface.

How?

A periodic lambda job on AWS polls the meetup.com API and updates an index on Algolia. The frontend to the webapp is hosted on AWS cloudfront / S3 and connects to algolia.

Identify My iPad

Apr 2018

Technologies: javascriptamp-html

What?

Identifies the possible pseudonyms of any particular iPad model and then suggest compatible top rated iPad accessories.

Why?

The iPad naming scheme is quite ambiguous and there are many pseudonyms for a particular iPad model. I found it laborious to identify which iPad cases are compatible with my iPad and ended up buying an incompatible case, thus identifymyipad.com.

How?

This site uses google amp for super fast viewing on mobile. Taking data from official apple support and reading reviews on many cases I compiled the content for the site.

Fube - Social Music Web App

Apr 2016

Technologies: ruby-on-railsangularjspostgresqlfacebook-api

Fube is a social music discovery tool I designed and built. A lot of great music is shared on facebook but there is no easy way to listen to it in a playlist or filtered by genre. Fube aggregates songs posted by you and your friends on facebook. It merges the facebook, youtube and freebase APIs. Fube is built on Ruby on Rails and angularjs.

Fube has officially been approved by facebook, has over 300 users and is currently in it’s beta phase.

Live link http://fube.io/

Seam Carver - Image Processing

May 2015

Technologies: nodejshtml5canvasalgorithmsgulpimage-processing

Javascript implementation of a content-aware image resizing algorithm called seam carving. Crops an image by removing the “least important” seams in the image. An “unimportant” pixel refers to a pixel which is very similar to its surrounding pixels. A seam is like a one pixel column in the image which can zig-zag between adjancent pixels. A dynamic programming algorithm is used to calculate these seams efficiently.

Here I reimplement this famous algorithm in the browser! It is rare to see such a complex and powerful image processing algorithm in the browser and challenging to have it run smoothly. I also altered the original implementation to make my own optimization such that only affected pixels need be recalculated when a seam is removed.

Angular Server Time

Apr 2016

Technologies: angularjssocket.ionodejs

An open source reusable library built for node/angular web apps dependent on synchronizing browser times across devices. Uses a variation of the network time protocol (NTP) algorithm. Includes server and angular code.

This library is available on npm and was used in real time volleyball software.

Python Timer Util

May 2015

Technologies: pythondjangotimer

A timer util that I found so useful and reusable in profiling backend code I decided to package it up as an open source library (pip). It allows developers to quickly find bottlenecks in their code with just one line.

Git Sub Dir

Jan 2014

Technologies: pythongithub-api

An open source tool I made for downloading a subdirectory of a github repository.

The project has 26 stars and 17 forks on github, at time of writing.

Smart Search

May 2015

Technologies: pythonFlaskelasticsearchangularjs

Whilst working at Chaordic I was working on the search team. The search product personalizes search results of any ecommerce website to match what the user has clicked or bought in the past. Chaordic is the biggest ecommerce platform in Brazil, integrated with 60% of Brazil’s ecommerce. Chaordic’s search platform receives over 1000 rpm.

I developed the autocomplete widget which lead to a 50% increase in search usage and 10% increase in ecommerce sales.

I also made backend and frontend optimizations which were crucial in an AB test win between our product against global leaders in ecommerce search, SLI systems.

Saraiva was one of our clients and is the biggest book shop in Brazil with over 20% of the market. Below is their search which I helped develop.

Neuron-Astrocyte Networks

May 2013

Technologies: pythonmachine-learningneural-networksnumpypybrain

For my final year project I created one of the first ever computational models of a learning neuron-astrocyte network.

Background: Contrary to popular belief, neurons are not the only cells in the brain which perform learning and cognitive functions. For decades, artificial intelligence researchers have made computational models of neural networks but failed to acknowledge the role of astrocytes. If you are interested in a more comprehensive background information on the topic please read my literature review.

Why?: While on placement in Spain, I was researching the role of astrocytes in Alzheimer’s disease. I was fascinated by the fact that their abundance and diversity is proportional to intelligence and yet their role in intelligence is largely overlooked. At the time I was also curious about artificial intelligence (AI) and was intrigued to see how AI researchers had modelled astrocytes. Suprisingly, few researchers had made computational models of astrocytes, and so my project began.

My work presents a novel model of neuron-astrocyte networks and challenges one of the pioneering neuron-astrocyte network models.

Real Time Scoreboard

Feb 2016

Technologies: expressjsangularjsnodejsmysqlweb-socketssocket.io

My client required a real-time scoreboard platform for a volleyball competition. The scoreboard, timer and buzzer were required to be synchronized across several devices in real-time. The web app development had been started and I was required to finish it off.

I implemented the following functionality:

  1. CRUD REST api for matches, teams and courts.
  2. Deployed and maintained linux server.
  3. NTP-like server-browser clock synchronization library.
  4. Cross-device real-time timer functionality.
  5. Cross-device real-time buzzer functionality.
  6. Cross-device real-time scoring system.
  7. Some style changes for responsivity.

The code was successfully used intensively for several weeks in a large national volleyball competition involving thousands of games.

HTML5 Checkers Game

Feb 2014

Technologies: VanillaJSHTML5-canvas

Personal side project.

An Object-Oriented javascript and HTML5 canvas implementation of a checkers game. The game includes the option to play against a relatively simple computer I implemented.

Angular Slideout Directive

May 2015

Technologies: angularjs

An open source reusable angular directive I built for mobile-friendly website menus.

The menu supports multiple layers of navigation and is available on npm.

CSS Generator

May 2013

Technologies: pythondjangoalgorithmsCSSsprites

Automates CSS positioning and sprite cropping using image detection algorithms and HTML5 canvas.

In other words: input a spritesheet and a background image, the algorithm matches the sprite to the background image, outputs a bunch of HTML, CSS and a functioning website.

The algorithm runs in linear time to the number of pixels and optimized front-end build time from 5 hours to 1 minute.

Language tool / Anagram solver

May 2015

Technologies: angularjspython

Often people learning a foreign language have problems remembering the difference between similarly spelt or similarly sounding words. This project aims to help people disambiguate similarly spelt words via two main functions.

Firstly, it organizes the dictionary by word prefix and displays it in a tree format. Technically known as a Trie data structure. Navigating the tree to a leaf word will fetch the wikipedia page for that particular word.

Secondly, it efficiently computes all anagrams for all words in linear time and space to the number of words.

The project uses python for the word analysis and angularjs on the frontend. It was used successfully by my girlfriend in several private english lessons that she taught.

Super Refresh Chrome Extension

May 2015

Technologies: chrome-extensionjavascript

A chrome extension I built for helping developers out whilst debugging sites. Adds shortcuts for wiping cookies and local storage.

Used extensively by me and work colleagues.

Available on the chrome web store.

Google Docs Referencing System

May 2013

Technologies: google-apps-script

Personal project.

Whilst writing my final year project I craved a simple referencing system for google docs so I built one.

The referencing system is built using google apps script. The script works by scanning the document for pubmed URLs (a medical publications database), gathers information from the pubmed API and generates a bibliography.

I used the system during my final year thesis but nowadays there are much more complete options for google docs.

Here is a video of the citation system in action:


Markdown Chat Client

Sep 2014

Technologies: expressjsnodejswebsockets

Personal project.

Useful for developers who are using a chat client and would like to include code snippets.

The web client was built using web sockets, bootstrap and node.

I used it for sometime to collaborate with colleagues at work.

Click me!