Chatonka » Linux

Status of TimeVaultNG

January 3rd, 2009

My original reason for working on a replacement for TimeVault was due to me feeling that its core method of taking snapshots using directories and hard linking files was not scalable because of the lack of hard linking directories on ext3 and other file systems. If you have large amounts of directories (for example in source trees or in my own documents hierarchy) each backup takes a non-trivial amount of space just to recreate the directories.

The beauty of starting from scratch means that I can make any of the design decisions without carrying extra baggage from before. This lead to the rewrite existing in KDE4/Qt4/C++ using some of the KDE frameworks such as solid.

I’m still subscribed to some bugs from the old TimeVault and after I had responded to one person asking for a status on TimeVault I thought I should share it with others as well.

If you feel comfortable working with a non-released branch my timevault-external branch has basic support for external devices. I haven’t messed with any of the actual backup code so it shouldn’t mess with your data at all, but I can’t guarantee that. There is more information at the branch https://code.launchpad.net/~astromme/timevault/timevault-external .

Secondly, I have been working on a different backup program that originally had some of the same goals as timevault but has now deviated quite a bit. I have some preliminary work up at https://launchpad.net/timevaultng but nothing close to usable by what I would consider the ‘target’ audience.

With luck, I’ll have more time to work on my next gen concept of timevault more in the coming weeks.

At the moment, I would suggest one of two things.
A: Use the released version of TimeVault if you like the concept of ‘always backing up’. As long as you stop the timevault daemon while your drive is unplugged you should be fine.

B: Learn rdiff-backup and put it in a simple script. That is what I am doing for the time being as it is really flexible. It is also what I am building timevaultng around so you will have a head start on the concepts that will be useful.

Hopefully that clarifies the situation somewhat.

Thoughts on User Interface

December 8th, 2008

Of all of the areas of computing, I’m most interested in user interaction and user interfaces. Although I can program, I care less about the code (Maybe that’s why so few of my projects make it to fruition!) and more about the design and interface. I’ve been working on a personal backup utility in some of my spare time and while this is generally an area that has very little interface to it I found that the design process of even this little app was extremely interesting.

I needed a small preferences interface to let the user choose things such as the destination drive for storing backups, the frequncy of backups, and how long backups were kept. The following image was my first iteration of the preferences window.

If you use KDE4 you might have noticed that the drives view in the window is taken from the “recent devices” plasmoid. I decided that it was a familiar (to KDE4 users) and good way to show devices. When hovered over, the subtext is not “Open with Dolphin” but rather “Use as backup device”.

As cool as the widget is, there were still some flaws with this preferences window. First of all, I needed a separate check box to say whether or not backups were to be taken at all. Additionally, the user only had a choice of Daily, Monthly, Weekly, etc… and not intermediate specifications such as “Every Monday” or “On the 4th day of the month”. And to top it off, there was no way to specify how long to keep backups for. From these problems the second iteration was developed.

This revision keeps the device selection widget (I really like it), but removes the unnecessary text on the left. Additionally, it adds two sliders at the bottom to specify how long to save backups for and how frequently to take them. But this has its flaws, as there is no feedback to the user for how long backups are actually saved for nor how often they are taken. It’s just an abstract “somewhere on this slider”. So, with feedback in mind, the third iteration was created.

I am mostly happy with this last window. There are tick marks on each slider differentiating between major points (I.E. less than a day, less than a week, less than a year, and less than a decade). Additionally, if you move the slider all the way to the right you get “Forever” which is great way to not have to add an additional checkbox that disables truncating backups. The same logic is applied to the Backup Frequency, which allows specification for sometime within each hour, each day, each week, each month, each year or never. Again, we are spared the expense of an extra check box by having the maximum value on the right be “Never”.

The work needed to create this (relatively simple) preferences dialog is fairly significant and definitely not to be forgotten. It can make the difference between having an app that is simple and clean or an app that is cluttered and unusable.

If you feel like following the progress of TimeVault, it is hosted on launchpad at https://code.launchpad.net/~astromme/timevault/timevault-kde4

2.7 RC Update Successful

December 4th, 2008

Success! The backend has changed quite a bit in 2.7 but there shouldn’t be too many differences in the blog (or feed) appearance. Now it’s time to work on KDE 4.2 beta1. There are packages in intrepid-backports that I’m itching to try.

Wordpress 2.7

December 4th, 2008

Wordpress (the software used to power this blog) 2.7 is nearing release. As I’m feeling a bit adventurous today, I’m going to install the release candidate on blog.chatonka.com. If all goes well, you should still see this post later on today.

Later I’ll blog about how I use revision control to manage my wordpress install. It really makes updating vastly easier.

Yay for OOo

November 19th, 2008

I’m working on a fairly complex lab for an engineering class. My writeup for this lab includes diagrams, figure captions, equations, references, headers, and some crazy tables. All of this has been created in Word 2007 on the XP machines in the engineering computer labs. However, I needed to make some calculations dependent on the data in my writeup and the only machine I had access to was my laptop, which runs Kubuntu 8.10 with OO.o 3.0. So, I figured I should give it a try.

Boy am I impressed. Not only did open office open the docx correctly, along with all of the special formatting, it also did so directly from the samba share that holds the files.

Chalk one up for open source =).

Adventures in embedded computing

November 15th, 2008

Atmel makes a cheap ($30) usb development board. I’m working on a final project for E5 (more about that later) and in doing so needed a board that I could program. Interestingly, avr, the type of chip that I would be using, has a full gcc port and associated development environment. The board can be found here:

http://www.atmel.com/dyn/products/tools_card.asp?family_id=655&family_name=USB+Controllers&tool_id=3879

After an hour or so of hacking around with eclipse, avr-gcc and various websites (http://www.avrfreaks.net is great!) and tutorials, I now have an eclipse project that crossbuilds. Using avrsimul I can simulate the processor and run code (and gdb!) on my laptop before I even have the board. So far, I’ve succeeded in setting up avrsimul and hooking in gdb with a simple blinking hello-world program. Unfortunately, there is no way for me to tell if the blinking code is actually working, as I lack the hardware. But anyways, here was the joy of the morning:


astromme@Thor:~/Projects/Eclipse/avr-hello/Debug$ avr-gdb
GNU gdb 6.4
Copyright 2005 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "--host=x86_64-linux-gnu --target=avr".
(gdb) file avr-hello.elf
Reading symbols from /home/astromme/Projects/Eclipse/avr-hello/Debug/avr-hello.elf...done.
(gdb) target remote localhost:1212
Remote debugging using localhost:1212
0x00000000 in __vectors ()
(gdb) load
Loading section .text, size 0x19c lma 0x0
Start address 0x0, load size 412
Transfer rate: 1648000 bits/sec, 137 bytes/write.
(gdb) break main
Breakpoint 1 at 0xbc: file ../src/blinky.cpp, line 21.
(gdb) continue
Continuing.

Breakpoint 1, main () at ../src/blinky.cpp:21
21 int main(void){
(gdb) cont
Continuing.
^C
Program received signal SIGINT, Interrupt.
0x0000008e in stupid_sleep (time=25) at ../src/blinky.cpp:14
14 for(j=0;j<530;j++){
(gdb)

The simulator showed this:


main.c:415: MESSAGE: Simulating clock frequency of 8000000 Hz
Waiting on port 1212 for gdb client to connect...
Connection opened by host 127.0.0.1, port -28232.
decoder.c:737: MESSAGE: BREAK POINT: PC = 0x0000005e: clock = 29

Now on to actually getting the hardware.

Some Photos

November 11th, 2008

This is a great photo showing my desktop. Often it’s that clean, but as with everything, it goes in cycles of cleanliness and dirtiness.

A cameraphone (N78) picture of my workspace

A cameraphone (N78) picture of my workspace

This second photo shows a tree on campus that I think is beautiful in the fall. It has a circle of leaves below it and contrasts nicely with the green grass.

A beautiful tree on campus

A beautiful tree on campus

AMD Graphics in Intrepid

November 9th, 2008

As part of my quest for a quieter desktop, I replaced my old NVidia 6600GT with a shiny new fanless AMD 3450HD card. I had heard good things about AMD graphics working well in KDE4, even with desktop effects and I was interested in having a card that (in the far future it seems) will eventually work with the opensource radeonhd drivers.

In the meantime, it seems that I’m still stuck using the binary-only fglrx driver. And up until a few minutes ago, I was having all sorts of trouble with it. Once I was into a desktop session things were fine, but getting from a computer that was powered off to a working X session was absolutely horrendous. A normal boot would never work, and some magic combination (which I have yet to narrow down precisely) of using the “xfix” option in the recovery menu, copying over old xorg.conf files and restarting the xserver in all manners of ways would sometimes let me see the login screen at the correct resolution.

Finally, I was completely frustrated with fglrx and decided to drop down to 2d only with the current radeonhd drivers (that supposedly work for my 3450HD). Upon trying to install xserver-xorg-video-radeonhd, I discovered that it was already installed. I’m not sure if this is a part of the default Intrepid install or if I installed it and forgot about it, but I decided to just change my driver line in xorg.conf from “fglrx” to “radeonhd” to see what happens. Much to my surprise I got the same black screen as I normally did. Out of curiosity, I decided to remove the radeonhd driver, in case it was conflicting with the fglrx driver, causing my headaches.

I removed the driver, reset the xorg.conf and rebooted. Lo and behold, X11 started up cleanly. I guess all of my problems were related to some sort of conflict with the radeonhd driver and the fglrx driver, even though the latter was the only one listed in the configuration file.

Update: A few days later, everything is still working perfectly.

Handwriting KPart

September 2nd, 2008

I’ve always wanted to add a handwriting component to some of the more interesting note-keeping apps in KDE, such as BasKet. I wonder if having a KPart (like marble does) that let you (as a developer) easily add annotation support would be useful. Not that I know much about creating a KPart yet, but I think that it would fit very nicely with the concept of KDE4

Upgrading WordPress with Subversion

July 2nd, 2008

Wow, this makes my life easier…

http://codex.wordpress.org/Installing/Updating_WordPress_with_Subversion

The above page details the steps needed to maintain a wordpress installation using subversion. This way any changed files between releases (i.e. 2.5.0 to 2.5.1) get updated accordingly, without me loosing any of my important data.