Cover

Projects

Below are a selection of projects I have personally built.

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

Seam carving is an algorithm which implements content-aware image resizing 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 uesed 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 reuseful 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!