I know I wrote a few posts a few months back on creating a new bug tracker with a few ideas derived from other products and from online essays. I think that instead, I’m just going to take Trac, an existing bug tracker or project management and work on it instead. This gives quite a few benefits, while saving a lot of time and motivation.
The problem is that there are many bug trackers or project management web applications for PHP, Ruby and Python. Creating another, well, my motivation was pretty much soaked up in frustration of starting yet another project that would go no where. I also liked Redmine, but I think they have their head in the game and I’m excited to see where they take their web application.
Working on Trac helps me learn Python, learn how Python plugins work, learn how an established web application handles Unicode, Views, etc with regardless to Python and web application development. Unfortunately, my coding probably is not going to be on par with the standards of Trac and so, well, I’m not even going to attempt to make it to where my code can be made upstream. I have faith that anything I can do, the developers working on Trac can do better.
So I created a GIT repository forked from the official GIT repository (http://github.com/jacobsantos/trac). I haven’t started working yet, but I plan on implementing a few ideas of my own. I hope no one worries about this forking Trac, but I’m unsure how far I’m going to get and if I’ll actually succeed in completing the two or three months projected. I’m just doing this for shits and giggles, while learning on the way.
Using Pyramid For Controller
I guess one problem is that Pyramid, from the docs only supports WSGI. Trac on the other hand supports mod_python, FastCGI and CGI. I want to support mod_python and FastCGI and not exactly lose the existing support. For that I guess I’ll need to modify Pyramid to add support for those two. At the beginning, I’m going to simply ignore the lack of support.
I plan on refactoring the controller implementation in Trac and moving it over to Pyramid. I think it would be fun to see how Trac’s controller works and get Pyramid working as a replacement. I think that any Python web development I do will be using Pyramid, so I’ll like to take an existing web application and move it over.
Using SQLAlchemy For Models
I don’t know how Trac does the models, but refactoring Trac to use SQLAlchemy should be a fun project. What I do know, I think makes working on Trac a bit more difficult. I would like to think that SQLAlchemy would be a nice addition, but whatever, for my research purposes, I hope that it will allow me to quickly prototype certain features and get the messy parts of Python MySQL development out of the way.
Web Based Installer / Upgrader
Meh, one of the things I hate about Trac, err, well, at least for version 0.10-0.11. I haven’t actually used the recent version, however, with the refactoring, I’ll be sure to add this. I thinking it will be similar to the way WordPress does this. In that the only thing the configuration file has are debugging and database details. My hope is that if everything is configured correctly that it can serve most needs.
Web Based Accounts and Administration
Yes, Trac already has these, but what it does not have is, I think, Facebook, Google, Yahoo and OpenID integration. I like the way GetSatisfaction handles this and Google and Facebook user integration has made other web sites signing in a breeze. I wish, in my effort to make Trac more user friendly, to support as many integration as possible. As well as provide an authentication bridge, if Trac doesn’t have one already. If it does, I’ll probably just hook in or refactor it to support these ideas.
- Registering – Creating an account either for the Trac install or from an existing integration account. All tickets will keep track based on the internal account system, which I believe is the correct way to integrate the external services.
- Permissions – Trac already has this. It will be simply a matter of tying everything together in with this system.
- Plugin Management – I believe Trac already has this, but I want to extend it with a few ideas.
- Reports / Reporting – Part of my research includes reports (graphs) and other features I plan on getting into when the time comes.
Refactoring Plugin Support
Since I’m moving to Pyramid and SQLAlchemy, I plan on experimenting with enabling and disabling plugins. Allowing plugins to register their own routes with security preventing overriding the existing routes. The plugins will also be able to create their own tables and configuration.
I think this will be fun. Trac already does a lot of plugin support and I want to pour over how Trac does this and experiment with changing how this is done. I don’t know if any of this is possible, but I think it’ll be fun to find out.
Making Wiki a Plugin
I never liked the Trac Wiki and well, I think making it a plugin will allow me to move my focus from it to other parts of the system. I do however like the ability to add pages and content and I wish to add pages as a plugin as well. This might allow Trac to be more of a CMS, but I don’t really think people use the Wiki except as a portal to the ticket and project management.
I don’t plan on stripping everything of the Wiki out. I like the external wiki support and the parser for comments and pages and plugins will stay. Meh, with everything else, this will a low priority or not at all task. I do still plan on adding RSS feeds support and pages support to either replace or supplement the Wiki.
Focusing On Ticket
One aspect of GetSatisfaction that I like is that creating a new ticket is on the front page. I would like to move the focus on tickets to the front, instead of the often irrelevant information on the front page. I also like that GetSatisfaction simplifies and doesn’t force you to sign in until after you are finished, saving your information until you have signed in. I don’t know if this is the best way to do this, but I plan on allowing for both.
I need to look at Lighthouse and see how it is doing its ticket creation. GetSatisfaction is more for end users and Lighthouse for programmers, so there are going to be differences between the two. I think allowing for both and letting the admin decide, if there are differences would be better.
Multiple Projects
GetSatisfaction works by clients and I think that is fine. I do wish to implement this independent of developers and of clients. Projects will exist outside of clients and companies. The problem and focus I think with this is well, I’ll be adding a lot of functionality that won’t be applicable to many Trac installs. I think the best way to implement this is by hooks and allowing for plugins to implement the required functionality.
I want to experiment also with reducing the functionality until it is used. I think that if companies are not used, that it must not be part of the URL for a project. I think that if a project is not created, that it must not be part of the URL. That is to say that there will be a default of everything for when companies and multiple projects are created. It is just to hide it until it is used.
The difference between clients and companies is that a client is a single entity and probably will be no more than a single name in a dropdown. Companies are an organization entity used to allow projects to have duplicate across companies, but unique within companies. Sort of how GitHub works now. I have jacobsantos/trac and Edgewall has edgewall/trac.
Reports
I like how Ohloh has graphs and reports on projects and I wish to duplicate that for Trac. I’m not going to do the same graphs and reports, but they should have a similar look and feel. I want to list developers and contributors and have graphs for their contributions to the project. I want you to be able to click on a commenter name and see what they’ve been doing.
WordPress uses a Props counter and I think I can reproduce that for users as well. Create a sort of profile with an API to access what users have been doing. I do believe that majority of what I’ll be doing once the foundation is completed will be here and improving this.
Agile Development
Part of my research is creating a system where Tickets are assigned to developers or contributors to allow them to focus on tasks that are front and forward. This will include a time estimating and tracking system broken up in chunks. What this means is that if a contributor says they can only devote 8 hours a week and they place on their plate an estimated 10 hours of work, they will receive a notice warning them that they might be taking on too much. It will not bar them from accepting more, but simply note this.
There will be several ways to record actual time. I think interfacing with existing time tracking cloud based solutions will be best as well as providing an API for retrieving and setting time for tickets. One that I like is Toggl and it has an API that I’ll work with. There are other cloud based solutions that provide an API, which I’ll implement as well. I also want to provide a custom solution, but that will come much later. Providing support for existing cloud based solutions should work well enough for now.
So keeping in with the graphing. I hope to display the estimated verses the actual for projects and tasks. If tasks continuously take longer than the estimated time then that will be tracked and displayed for contributors and programmers. There are other fun graphs that I want to experiment with, but for now, these are the basics, if I can implement these, then I think I’ll have a great start.
Weighted Bug Assignments
I read an article or essay a while back that gave an equation for determining the weight for a ticket based on severity, priority, estimated time, etc. It was a weight for how important or likely the ticket was going to be worked on based on multiple factors. I want to play with this, but I think it will be fun to use on a hidden level at least. The research the person did in the blog post was to go on and say that by utilizing the weights and time better, the programmers were able to knock out more bugs and move unimportant bugs to the next release.
Statistics
I want to implement as many statistics and reports as possible based on these statistics and graphs based on the reports. I believe it will be fun to do as well as spice up the product. With everything I’ll be implementing, I don’t think I’ll get to the graphing parts until towards the end. It will provide an incentive to continue development for research sakes.
I think also, I want to sort of provide an opt-in for passing the statistics on to my server, so that I can go over and analyze the data. I do know that many will not do this and I do think that not many people will even use my version of Trac to even pull this off, but I hope that at least a few developers do… for science.
Support Tickets
Why the hell not?
Ripping Off Ideas From Other Sources
I hope to rip off ideas from Redmine, Lighthouse, GetSatisfaction and other bug trackers and project management sources. If there is time. I don’t plan on spending more than 3 months on this project and if I get everything above done, then I think I’ve had succeeded. Really, for my personal projects, I hope to at least use my version more and if I see something from other source that I like, I plan on stealing that idea. I might need to write down where I got all of my ideas for legal reasons, but I don’t think it will be that big of a deal or at least until it is.
Possibly Related Posts: