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.

Friday, July 13, 2007

Status: July 13

I worked on the wizard UI today. Somehow the progress feels much faster when working with user-visible stuff than internal logic.

Now the wizard is much more complete and almost like in the final version.

Thursday, July 12, 2007

Status: July 12

This week, the progress has been a bit slower than expected. I'm haunted by a mysterious bug that prevents saving the opened configuration files. If I don't make good progress tomorrow, then the schedule is a bit behind.

Wednesday, July 4, 2007

Status: July 4

The work has progressed very well. I am about ready to make a first preview release, as the basic features are working on my computer. Still things to do before developing more advanced features:
  • Clean up the source
  • Testing using different computers

Thursday, June 28, 2007

Status: June 28

Once again, a good day and great progress. I have one serious bug to be solved, otherwise looks good. For some reason, the main screen UI only shows one configuration details, even though it should show all that are parsed. Well, that isn't a blocker in this stage, I can just say that the first release doesn't support multiple configuration files.

In addition to fixing the bug, I should have only pretty straightforward and mechanic work and then make the first release.

Wednesday, June 27, 2007

Status: June 27

Today was another good day and the project progressed in all fronts. I worked on kdesu integration, internal logic and UI. Tomorrow I will work on main screen UI.

Tuesday, June 26, 2007

Status: June 26

Worked on internal data structures and was able to produce a clean solution. Now I have to work on the UI side and then make a first release to CVS.

Monday, June 25, 2007

Status: June 25

This was a very good day. I figured out the bug that was haunting me in the main screen widget. While debugging, I found that the whole widget was too complex and reimplemented it using standard widgets.

After that task was completed, I started backup-manager integration. I had some problems, but currently I'm able to backup my home folder using the tool :) Some values are still hard-coded in the source, but tomorrow I should be able to make good progress in the UI and internal logic.

Tuesday, June 19, 2007

Good news

I got my laptop back and all the source code files are now safe. So fortunately the project continues as planned. First version of main screen widget is implemented, but for some reason it does not work as expected. Tomorrow the first task is to get it working and after that maybe start the backend integration.

Monday, June 18, 2007

Bad news

A serious setback has happened. I was travelling back home on Saturday evening, when I was attacked by three young men. I tried to run away, but they catched me and managed to push me over to the ground. After being kicked in the head for a while, I was unable to defend my backpack, so they took it and ran away. Unfortunately my laptop was in my backpack, so I lost it.

The bad news is that all the source code for the project was in the laptop's hard drive, and no backups were made. This means that I have to reimplement everything that has been done to date. Of course as I have already designed the classes, reimplementing doesn't take too long, but I expect it to take at least a couple of days, maybe even the rest of the week.

So, the lessons learnt:
  1. Always backup your important data on a safe medium.
  2. Never carry your laptop around when not necessary.
P.S. The same group that attacked me was really berserk that night and assaulted somebody else in the exact same location during the same evening: See news article by Helsingin Sanomat (in Finnish).

Thursday, June 14, 2007

Status: June 14

Today I started the main screen widget. The implementation is not pretty and I'm not proud of it, but it will anyway have to be redone. The current implementation is only a prototype, which allows the software to be developed and tested.

Wednesday, June 13, 2007

Status: July 13

No updates for a couple of days. I've been working on the basic functionality. Currently there is a basic wizard, which is able to write a configuration file and open it, so the project is has progressed quite nicely.

One task that is still missing is the main screen widget. A preliminary version should be made soon.

Another (possible) problem that should be taken care of is that the data flow of the program should probably be properly designed. Currently the data flow changes all the time, which is most likely not a good thing.

Thursday, June 7, 2007

Status: June 7

I reworked the parser, because I found a more elegant (?) solution. Still some work to do, but after that it should be fine for the rest of the project. So tomorrow I am going to finish the parser and if there is still time available, maybe do a prototype main screen widget?

Next week will be spent entirely on the user interface.

Wednesday, June 6, 2007

Status: June 6

I worked on the configuration file parser. Although it uses only pretty simple regexes, progress was incredibly slow and the task is not yet finished. The feature must be finished tomorrow or first iteration is at risk.

Tuesday, June 5, 2007

Status: June 5

As planned, I started to implement the tab-based window for editing existing configurations. I had a fair number of problems, but in the end managed to create what I had in mind. I also worked on the wizard classes, which are ready to be used as well.

For the current iteration, three tasks are yet to be done:
  • Design and implement the user interface in detail. This one should not cause any problems, but may be time-consuming.
  • Design and implement the main screen widget. This is likely a hard task. The implementation should therefore be incremental.
  • Implement a parser to read configuration files.
I'll probably work tomorrow on the parser. There are still 8 working days left in the iteration, so the current situation is looking pretty good.

Off-topic: I am using git to manage the project source code internally, which works really well! Once there is something worth releasing, I can easily export a CVS commit.

Monday, June 4, 2007

Status: June 4

The second day of coding is completed. It was both a good and a bad day. I had planned to implement a wizard dialog, but in the morning I found out that such a class was added to QT API in version 4.3. Unfortunately, the documentation was not good and it took several hours just to get the example code working in my project.

After I figured out what the problem was, the development continued and the basis of the wizard classes have been coded.

To be done tomorrow: Finishing the wizard classes and implementing preliminary classes for editing existing configurations. The implementation uses tabs in UI and should be a straight-forward exercise in QT programming.

Friday, June 1, 2007

Status: June 1

The first day of coding is pretty much done. Much of the day was spent planning and reading documentation,

Achievements:
  • The main screen class was started
  • Preliminary plan of needed widgets made
Problems:
  • Not any so far
To be done next:
  • Main screen widget
  • Wizard for creating a new backup task

Friday, May 25, 2007

Alkuun

No niin, blogi on rekisteröity ja odottaa raportointia.

Janne