Most codebases which have been worked on by many people, over a long, long time, usually have some parts which are not very nice. Here are some parts of the Go codebase (in no particular order) which could do with cleaning up -
Some of the DAOs in the Go codebase still use iBatis. Some use Hibernate. This causes, for instance, the transaction management to be more complicated than it should be. It also stops Go from easily supporting multiple databases.
It was a planned and slow strangler move from iBatis to Hibernate, which got slower over time, rather than quicker.
Need to move iBatis code over to Hibernate whenever any work around an area is done. Might need to allocate some time specifically to move, too.
Go uses a 2.3.x release of Rails, which recently got deprecated. Probably don't need to say much more about this. :( It causes Go to not be able to take advantage of new improvements in Rails. Causes people to have to use antiquated Rails contructs rather than the new ones.
It's a daunting task, because of API changes in Rails, dependency on JRuby, RSpec and other gems. It feels like one upgrade was missed a few years ago and then it was too late.
Will need to first upgrade JRuby and Jetty to the newer revisions, since newer Rails releases do not support the old JRuby revision that is used (corresponds to Ruby 1.8.6). Then, need to do a pretty big upgrade to all Rails code in the codebase. Need to bring in Bundler into the codebase for gem management. Biggest hurdles will be:
-
Default ERB syntax has changed, so most ERB files will not work out of the box, but will silently fail when viewed (will show ERB code on the rendered page).
-
RSpec needs to be upgraded, since the old gem will not work with the new JRuby/Rails combination. Most tests will fail.
-
Prototype and jQuery: Should migrate to jQuery. There are a few pages which still use Prototype.
-
JSUnit: Should move to a more modern Javascript unit-testing framework. Though JSUnit is not very bad, the feedback loop is a little slow because the JSUnit server needs to be restarted every time the JS code changes, while testing. A framework like Jasmine will work better.
-
Some Javascript code needs refactoring/remodeling. For instance, vsm_renderer.js has tests, but is not well organized.
A consequence of a long-running project, probably. Some amount of stranglers left behind. Some cleanup should have been done before, but wasn't. Needs to be done now.
generate images for every release (automation)
use maven for modules with rake for scripting & buildr for installers. currently we use ant for building osx installer.