Toby Flemming

Full Stack Developer

About Me

Web Development Immersive graduate from General Assembly with 3 years prior experience as a Software Developer. I have a passion for emerging technologies, particularly in web development, pushing myself to find new and innovative ways of creating applications that are functionally sound and intuitive.

When I’m not behind a computer I’m at the beach. Surf Life Saving has become a big part of my life, doing voluntary patrols and competing in surf boat rowing. Bodyboarding, playing soccer and following the English Premier League are other interests of mine.

Contact Me

Latest Projects

TranExec

Executive Coaching

The client company for this project delivers Executive Coaching; mentoring Store Managers, Area Managers and above. After completing a face-to-face workshop (with approximately 18 people) each participant is then scheduled a one-on-one phone coaching session. This is currently done by passing around a piece of paper and then manually recording the appointments electronically.

The aim of this project was to essentially streamline the appointment booking procedure. This was achieved by allowing the organisers to setup the event in the months prior to the workshop, and then allowing the participants to book appointments digitally in real-time.

This project has been an initial demonstration for the client to show what can be achieved. There is great potential for this project to be extended to include a complete management system; facilitating the ability to track participants through sessions and report on actions needing attention.

Technical Stuff

  • Ruby on Rails used for the CRUD system used by admins - Adding/removing projects, workshops, participants, appointments
  • postgreSQL database to store client data
  • Single page application to allow clients to book appointments in realtime using Backbone.js and websockets (websocket-rails gem)
  • Custom calendar functions used to produce iCal events that can be exported
  • Codebase

    Drawsome

    Real time canvas drawing

    The purpose of this project was to take an existing application (Drawful by Jackful games) and use our recently acquired web development skills to reproduce it. Drawsome is a game designed for 3-8 players, each competing on separate web browsers.

    The game features free-hand drawing onto a blank space, made possible through HTML5's Canvas API with help from the Paper.js library. In order to achieve a real-time drawing effect across all clients, websockets were used for client/server communication. While the 'drawer' interacted with the games canvas, graphical data was sent through our Ruby on Rails backend and emitted to all participating players. This was all tied together using a single-page Backbone application to give the user a pleasant gaming experience.

    Technical Stuff

  • Interface made possible by Basscss
  • Ruby on Rails backend for keeping track of players and games running
  • Realtime player interaction using a Rails websocket gem
  • postgreSQL database
  • Games controlled via a master/slave arcitechture - one player selected to host game
  • Codebase

    Live Demo

    Deaddrops

    Location-based file sharing

    Deaddrops is a file sharing platform that allows users to upload and share content. The difference between this application and regular file sharing sites is that content is uploaded based on the user's current geographical location. Other users will not have visibility of that content until they are within a 100m radius of the files position.

    Users wishing to discover nearby content can use the application's map interface. By analysing each individual file and its location, a heatmap is generated to indicate where files are in relation to the current user's location. If the user was located next to a large cluster of files they would see a geographical hotspot on the map.

    For more background information on the original Deaddrops concept made popular by Berlin-based artist Aram Bartholl click here.

    Technical Stuff

    • HTML5 geolocation to track the location of users and file uploads
    • Ruby on Rails backend for CRUD system
    • Latitude/longitude reverse-geocoded for location-based queries on the database
    • Utilising the Cloudinary API to store files uploaded by users and accessed via the discovery interface

    Codebase

    Live Demo

    Tic Tac Toe

    2 player javascript game with Artificial Intelligence

    Being a web-based game that runs client-side, the logic used to determine the various game states was implemented using JavaScript. Click event handlers on the 3x3 grid were setup to receive input from the users. Upon each player move the game checked for ending game and incrementing the player score counters appropriately.

    Players also have the choice of playing against a computer with Artificial Intelligence, lots of Artificial Intelligence. Using a minmax algorithm, the computer player maps out all possible game states in order to choose the optimal move. This means that the AI is unbeatable!

    Codebase

    Live Demo

    Document Editor

    Custom PDF builder

    The BSM Document Editor is a Graphical User Interface that allows users to create their own import/export documentation. Pre-configured components are made available in the toolbar that can be dragged and dropped onto a virtual page. Components can then be easily adjusted to fit requirements for size and appearance.

    If requirements go beyond the capabilities of predefined elements, users have the ability to create custom elements. From that point they have full control over how the element behaves, including content formatting via custom language expressions and custom mappings to the system database.

    Once complete, the user can produce a web-preview of the document before saving it as a Document Type.

    Technical Stuff

  • jQueryUI used for element controls - dragging, resizing, snapping to grid
  • In-house PDF libraries used to produce output
  • Backend server used for interpretting element positions, parsing document expressions and returning responses (errors, PDF files)
  • Future Billing Agreements

    Application module

    Whilst working as a Software Developer for BSM Global Pty Ltd, we were faced with an issue involving client fees. Our company consultants were responsible for manually setting new fees following the start of every year and this was becoming unreliable.

    My solution featured a simple interface whereby consultants could log into a client site and setup future billing agreements e.g. 1 year from now, 2 years from now... They were able to set and forget, knowing that new settings would automatically be applied at the correct time without further user action.

    The interface consisted of three panels. The left-most panel included individual form fields for the clients settings. A simple slider at the bottom allowed users to switch from year to year without having to reload the page.

    The application also used historical client data to deliver revenue forcasts in real time as client fees are changed or tweaked. Data visualisations helped consultants make better judgements e.g. what fees need to be altered in order to maintain a steady increase in revenue over time?

    Technical Stuff

  • CGI programs written in C to serve up content
  • JavaScript/jQuery for form interactions
  • AJAX requests to backend server to update data visualisations
  • Google Graphs used to represent data
  • Linux Cron jobs used to apply new settings at the beginning of each year
  • First Ionic App

    Simple bank account

    While studying at General Assembly, students were required to complete regular homework tasks. One of the tasks was to create a simple web interface for a pair of bank accounts. Each bank account allowed users to deposit/withdraw funds.

    After completing the web interface I decided to take my project a step further and implement the bank account using Ionic's framework for developing hybrid mobile apps. Using the components made available by the Ionic library I was able to develop a simple mobile application that could run on both Android and iOS platforms.

    Technical Stuff

    • App interaction using angularJS HTML directives
    • Data-binding for handling account balances between views and controllers
    • jQuery used to add/remove classes on elements displaying account balances
    • 3 controllers (MainController, CheckingController and SavingsController) used to create appropriate scoping

    Codebase

    Live Demo

    Connect