Tuesday, September 4, 2007

Project report

The implementation of the project was completed successfully, with only two missing features. One of them, splice size for dar archices, is very easy to implement and can be added to the software in 30 minutes. The other, archiving over SSH, is also pretty easy to implement technically, but getting it to the UI without completely cluttering it is a major challenge, and was left undone for now.

The UI has some drawbacks compared to the plan. The main screen UI is very ugly, but has desired functionality. Because of my lack of visual skills, I was unable to design a better looking UI. That can be of course fixed easily, once a good design has been made. Other drawback compared to the plan is that I had wanted to present directory choosing using a tree + checkbox widget. Unfortunately there is no standard widget for that and the schedule did not permit creating a new one from scratch.

The implementation uses standard Qt classes and is therefore very simple and readable code. The implementation uses many object oriented techniques. One problem in the implementation is that there is a lot of duplicated code in the wizard and edit window classes. So if a change is done to the software, the code must be changed in two places. I was unable to find a solution to this, due to slight differences in the code and schedule problems.

There were several problems in the implementation of the project. The most severe one was that the project plan was actually worthless in implementation phase. I had planned to implement the project iteratively and incrementally, but because some basic classes needed to be working before anything could be built on top of them, the schedule was impossible to achieve and actually the project ended up being done in a semi waterfall-iterative way.

There was another problem that caused a lot of wasted effort. I had wanted that the software was so elegant, that it could be used with a user priviledges and if it needed root priviledges, then a password dialog would be presented. Implementing that was too hard for my skills and I produced terrible spaghetti code and kludges. So after a week I scrapped the plan and now the security model is a unix standard, which means that if you need root priviledges, run it as a root and if not, then run it as a user.

Weird Qt bugs and missing or incorrect documentation caused some problems, but they were expected.

Integration with the parent project. Distribution was a bit more problematic than expected. Due to very early freeze dates, there were no chance of getting the software in the official repositories for Gutsy release in October. For unofficial repos, that is of course possible once a .deb package is made.

So what would I do in a different way if I had the chance? First and foremost, better planning and design. Of course iterative model means that not much can be planned beforehand, but at least a rough architecture plan and class diagram would have made the project plan much more realistic. I ended up rewriting much of the code during the project. If that could have been avoided by better design and planning, the time could have been used in a much more productive way.

What project opportunities could this project create? The most natural is to implement the drawbacks and missed functionalities listed earlier. After that, it could be possible to add more logic to the software. The software could check if the input values given by the user are feasible and offer corrections. Other than that, more distant goals could be for example desktop integration, where user could right click a directory in file manager and choose "Backup this directory with Kbackupmanager" and a new wizard window would open.

Wednesday, August 15, 2007

Status: August 15

Today was both a very good and very bad day.

I got a lot of things done, but in the afternoon found out that the very first feature that I had implemented, importing existing configuration files, had broken. I spent the rest of the day debugging and got some information, but the regression is still open. Fixing it is the top priority for tomorrow morning, after that I can continue with other tasks

Tuesday, August 14, 2007

Status: August 14

I ran into some problems today and had to refactor the code quite a bit. That was quite an exercise, but the result is a lot cleaner codebase than before. Fortunately, all the major features are now working at least in a prototype state. Now just mechanical coding work, UI stuff, documentation and testing.

Friday, August 10, 2007

Status: August 10

The work on the editing window continues as planned. If nothing goes wrong, the project should be in a very good state next week.

Thursday, August 2, 2007

Status: August 2

Designing user interfaces is hard. The wizard is missing a couple of relatively unimportant options, but there is no intuitive place for them and adding them would mean major refactoring. Maybe I'll leave it as it is for now and investigate it later, if there is time.

Currently the wizard works completely and generates correct configuration files. Now I just need to work on the editing window and after that, the project is pretty much completed, apart from lots of little details that need to be sorted out.

Monday, July 23, 2007

Status: July 23

I ran into a strange bug today. Suddenly the project did not build anymore and error messages were useless. After several hours of debugging and googling, I found out that it was probably due to qmake, which didn't for some reason produce a correct makefile. After editing the makefile by hand, project started building again and work continued.

Friday, July 20, 2007

Status: July 18

The work has progressed nicely. Only big feature to be done is cron integration, otherwise the work is only basic UI stuff. Or should be.

Currently all the basic features are working.