Skip to content

jmclellan/pathfinder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pathfinder

What is it?

This is a small pet project ive had on my mind for a little while. Simply put its a TSP solver with a gui around it. Ill be building this out in my spare time to get a more comfortable with building out entire projects. pet project where users can use go, enter coordinates of sereral places they would like to visit, and a best path is returned.

technologies

  • Golang, Javascript, React, more to come

TODO:

  • alpha complete
    • frontend
      • add title
      • add map
        • add visualization for coordinates
        • add visualization during optimization (connect all points and randomly iterate through paths)
      • add popup alerts for error messages
    • backend
      • standardize path finding so we can easily add in new attemptes without having to rewrite frontend/backend interactions
      • optimize path finding
        • cached path finding to cut down on computation time
        • add a nieve random search endpoint
    • integrations
      • add database to periodically store user trips for analysis later
        • explore storing summary data
        • store longer data set which can be used to test proposed solution against true solution and measured for speed

Wishlist

adding improvements/tweaks to be made here before they are pulled into a next version

  • optimize path finding
    • add simulated annealing find best path
    • add controls to be able to commit a specific amount of computation time to calculating an optimal route
    • use go ffi to leverage speed and efficiency of a rust library
  • integrations
    • add user accounts & authentication
  • add centralized logging
    • log rotate set up upon vagrant up
    • logging levels used
  • improve system resiliancy
    • Dockerize/Pod-ify application
      • use system to manage clusters
    • application on vm to restart services as required
    • do not allow system to get overloaded when optimizing requests
      • backplaneing returns appropriate error code instead of taking on too much work
      • queue requests if they cannot currently be run
    • investigate hosting application over multiple machines
  • optimize website
    • profile react componants
    • compile react code to static js files and serve directly via nginx or apache
    • profile reverse proxy
  • functionality improvements
    • users can select a starting point from which all paths begin
    • users can select an ending point at which all paths end (potentially the starting point)
    • users users can see their search history
    • users can look up famous lanmarks by name and their long & lat will be added automatically
    • some sort of admin portal where we can see uptodate monitoring of the system
    • explore use of web gl http://examples.webglearth.com/#markers
    • users can log into an account of their own
    • users can go to a profile page and edit information about themselves
    • road data taken into account
  • host version of the site online somewhere
  • create tests
  • connect tests to github to testing will happen on pushes
  • deployment
    • expore exporting as an rpm or set of rpms
  • System resiliancy
    • improve go instalation
    • programs run as a service
  • logging improvements
    • centralized logging service
    • log files written
    • log rotate initialized
  • improve header
    • login button floats to the far right right
    • add log in page

Past efforts:

  • POC complete
    • users have a portal where they can enter a list of coordinates.
    • users can submit these coordinates to the server and have an optimized route returned to them
      • backend support
      • front end support
      • communication between the two via reverse proxy for single enpoint
    • basic front end styling
    • basic make file added
      • command to rebuild go server
      • command to run node server
    • abstraction between host machine (runs in a virtual machine)
    • project can be cloned and built on a clean machine (untested but as long as a machine supports vagrant there shouldnt be any issue)