Welcome to taskrambler, the multi user task organization and management tool. If you ever felt working together is difficult and I really don't know whats going on at the moment this tool might be helpful.
Right now this is a HTTP server. It's written from scratch in C and serves as the user interface provider for taskrambler.
It delivers static assets placed within the project to webbrowsers. In fact the pages you read right now are delivered by taskrambler.
The plan is to build a multi user task management system inspired by taskwarrior. Users may log in and manage the tasks they have to do. Priorize them, assign them to projects, track the time spend on a given task and so on. Users also can configure who would be able to see what task and users with special roles, like managers will be able to see all tasks of their team, etc. It will be possible to create reports about what work was done etc.
Additionally this will serve as a ticket system. Tasks may be assigned to users and all the things possible with a ticket system will be possible here too. So this will combine a personal task management tool with a ticket system. Thus providing a getting things done tool that will improve the productivity of all persons working on a project.
It is not another web server and it is not a web application as you might be used to. It will not run under any given web server. It brings it's own web server.
About two year ago I stepped across the C10k problem. At that time, and in fact still right now, I don't feel experienced enough to face this problem. But anyway, it made me curious. Curious if I would be able to write an HTTP server by my own. So I started work on this.
Well, there are enough web servers available right now, even the C10k problem has brought up some really interesting exemplars. So I decided not to build another multi purpose HTTP server application but try another thing. I wanted to build an application with a user interface provided via browser. But what kind of application.
At the time I started this I was working for bigpoint, which is one of the worlds biggest browser game providers. So the first answer was obviously to build a game. But soon I realized that it needs much to build a game from scratch. You need a fascinating storyboard, well ballancing and game design and so on. So I dropped this idea again.
Approximately at the same time I started working with taskwarrior which I found a really useful tool. I thought what about making something like this but for multiple users. It is pretty clear to you what you need for this and it would be cool to have something like this... and with some luck there are others who might be interested in such a thing too.
From the first day on the idea was to build this completely in C. This primary decision for this was that I really like the language and it had been a very long time since I last had the opportunity to do something in that language. Maybe another reason was that I had the hope to compete with some of the other C10k webservers. And well, taskrambler does not perform to bad at all. I did not choose C++ also I like some of the object oriented concepts because as most other OOP languages I think of it as bloated with stuff I never need. Please don"t flame on this, its only my opinion.
There are three things I really like in OOP, objects and their definition via classes, interfaces and inheritance. Why? Because if you ask me the whole topic is about reusability and maintanability. Obviously a well designed class is reusable. What makes it well defined? It implements an interface an reacts in a sane way on it. Well and inheritance is "sometimes" a good way to prevent duplicate code.
Some time ago I had read a book called Object oriented programming with ANSI-C from Axel-Tobias Schreiner. It has some really interesting concepts in it but goes a step to for for my taste with creating an own code preprocessor and other things. Anyway this was the base of a class like code framework which consists mostly of preprocessor code and some C code lines, as well as a code convention. This gives me the possibility to implement a well defined interface on various objects. I can extend and inject classes. All objects have a constructor and a destructor and if needed a clone constructor. Finishing this was the first building block of taskrambler.
The next goal was a working HTTP server implementation. I created a lot of classes, rewrote then dropped them again and thought about other solutions. At a given point I was really disappointed because on heave load the servers droped connection and I was unable to find out why. At that point I stopped working on this for over a year. But now I started again added some new cool code and think that the connection wasn"t been dropped by taskrambler but by the kernel. Shortly before I loose connection I found a kernel log entry that says that syn flood protection was been activated.
Right now this is an HTTP server that is able to handle cookies, speeks SSL and implements the subset of the HTTP protocol that I need. It performs not to bad but others should mesure this, I have no time for this. I know a lot of places where optimization is still possible.