Keeper

TL;DR
We developed Keeper, a simple and efficient Windows-based application for archiving data to external drives, in just one day using Python and the PyQt library. The app streamlines backups with minimal user input, featuring options to select target disks, files, and archive configurations, including zip compression. Key insights include handling Windows shortcuts and optimizing copy performance. Keeper demonstrated impressive speeds, transferring 100GB in 15 minutes compared to hours with standard Windows tools.

For Eventiq, we implemented a small project to create a simple yet versatile application that would allow employees to easily copy data to external drives for backup and thus motivate them to archive data more frequently. The most important factor was both the ease of use, or as few clicks and selections as possible, and that the application would run on a Windows operating system.

For this project, we set ourselves the challenge of creating the whole thing in one day. Therefore, we chose the Python programming language, specifically the PyQt library for creating desktop applications, with which we have partial previous experience.

Application control

The application consists of four main blocks. In the first block, the user selects the disk on which the backup data will be saved, which will typically be an external disk, but can be any other disk. In the second block, the user chooses what files or folders they want to archive - there are several pre-selected folders, but also the option to choose any data from any connected drive. The third block deals with the configuration of the resulting archive - either it is possible to overwrite an existing backup (i.e. the archived Documents folder will be mapped to <disk-letter>: \C\Users\<user>\Documents) or create a new backup (the Documents folder will be mapped to <disk-letter>:\<date>\C\Users\<user>\Documents); and the user can choose to save the entire archive as a zip or leave it as a folder. The last block is a button to start the backup, which shows a progression during the archiving process determined by the number of files.

Interesting findings

During the development process, we gained two new insights into how the Windows operating system works. The first insight is that creating a shortcut to a program or folder is not the same as creating a symbolic link, and that we have to write the correct shortcut copying ourselves. In fact, shortcuts are actually files with the .lnk extension, and no Python data copying library allows you to copy these shortcuts except as files. However, we wanted to archive the target of the shortcut and then create a new shortcut in the archived folder that would reference the archived version. Fortunately, it is possible to get the target path from an existing shortcut and create a new one via the win32api library.

The second insight was that for Windows to be able to show a neat progress bar with copy speed, the amount of data to copy, etc. consumes quite a bit of resources, which greatly affects the copy speed just to give the user more accurate information about the current copy status. We did not do any specific tests in this area to present here, but we were able to copy roughly 100GB of data in about 15 minutes between two hard drives using Keeper, which is consistent with the actual read and write speed of a hard drive. Copying this amount of data using a standard Windows tool took several hours and was actually done overnight.

NoxLabs is a team of engineers and designers specializing in web and mobile development. We're passionate about building beautiful software and welcome new project ideas.

Want to work with us? Drop us a message