For the last few months, I’ve been using every spare 20 minutes here, or 1 hour there, to develop v3.3.0 of Quickhash-GUI. It has been really hard work, I won’t lie. There was a build up of bugs and feature requests going back a year or more that I really wanted to get wrapped into v3.3.0, especially because 29th May 2021 is the ten year anniversary of QuickHash-GUI! The picture below was the v1 release, for Linux, released back in 2011.
And then below you can see v3.3.0, fresh out the compilation factory, released on 29th May 2021. Very similar still, in many ways, to the end user, but very different behind the scenes. For starters, it evolved from being for Linux only and just having MD5 and SHA-1 available, to fully cross platform, being made available for Windows next and then OSX since 2014. And it had a tabbed interface added that has been part of it now since around 2015 when v2.0 was released. And then since v3.0 came out, it has used SQLite behind the scenes. Extra hash algorithms were added such as SHA256, SHA512, SHA-3, xxHash, Blake, and most recently, the CRC32 checksum. And now with v3.3.0, the addition of the libewf library for hashing Expert Witness Format (EWF) forensic images, otherwise commonly known as “E01 images”, along with a sleuth of other new features and fixes.
How far it has come, hey. But still pleasingly familiar.
So, why has developing v3.3.0 being so hard recently? And why are the development cycles of the tool now only once or twice a year compared to 4 or 5 times a year, many years ago? Well to help explain that I thought it might be fun to to talk you through “a day in the life of…”, to lift the veil a little on the development of QuickHash with a description of my average Saturday\Sunday for the last 3 months…..
A day in the life of…probably most middle aged developers in 2021
Get up at 06:00 to walk the dog. We fostered her at first as an emergency rescue and then adopted her, saving her from an unpleasant end-of-life certainty back in December 2020. If I don’t walk her first thing, she destroys things, and follows us like a land shark! If I walk her though, she sleeps. So my loss of sleep gives my family some peace from the otherwise rather irritating dog who is rather challenging at the best of times and in constant need of training and exercise.
I get back at about 07:00. Throw a slice of toast down my throat. Get showered. Make kids pancakes. Take son to football practice. Back by 11:00ish. Train dog for 30 minutes or so, so that she rests some more in the afternoon, try and do some stuff with the kids if I can like every father tries to do, and perhaps even try and take them out somewhere if the appeal outweighs the lure of technology devices and YouTube videos of…kids playing on games. Otherwise, wife and I do the house chores; wash the mountain of clothes that were only worn for 20 minutes but somehow ended up in the laundry basket. Hoover up, and mop the floors. Maybe a few small DIY jobs while the washer is spinning the laundry, or more commonly, do some car repairs like trying to free some rusted anti-roll bar link only to find I am missing some essential tool for the job so then I have to run down to the car hardware store to buy whatever part or tool it is I am missing, even though its a job I am unlikely to need the tool for again for another year. Finish that task, then usually visit my mum who is now living alone with a disability and help her with some stuff and give her some company. Get home again. Cut the grass (Spring to Autumn) maybe, if it is dry. Walk the dog again for another hour so she sleeps at night. Get back and do some exercise for 30 minutes to keep me tip top. Get showered. Help cook tea. While that is cooking help wife with sorting out kids uniforms for school; ironing, folding etc. Eat tea. Return to the ironing to finish off the items we didn’t get sorted before tea (because I hate a half finished job). Help with kids bedtime routine which is more like wrestling with a swarm of angry bees these days. Spend an hour or so with the wife watching TV so she doesn’t forget who I am. Its now around 22:00. I’m knackered and falling asleep. But, Quickhash-GUI is calling. The e-mails and bug reports and feature requests are in my Inbox.
So up to the study. 1 hour, 2 hours, and commonly 3 hours later, after debugging or adding new code, its off to bed. Sometimes it is with a feeling of accomplishment. More commonly, it is with a feeling of frustration of having spent 3 hours achieving nothing and getting no further forward. Often, I advanced no further on some debugging than what I started with. Commonly, it is only thanks to the help, tips and advice given by the open-source community that help me solve things.
Up again the next day, often only 5 or 6 hours later, at 06:00 to walk the dog and repeat the similar structure for Sunday. Rinse and repeat for the week days, except now we throw a 9-10 hour working day into the mix doing a job that is not especially trivial.
This is why developing Quickhash-GUI is hard. Developing any software is hard, even when you don’t have a busy life, and even if you are an expert. This is why it often holds bugs. This is why features sometimes take weeks, months or even years to implement and this is why new versions are less frequent now than they were 10 years ago. Because life these days for me at least is not like it was 10 years ago and I am not a programming talent that sees solutions within 3 seconds of looking at code.
When I first started the project, it was to give me something to concentrate my programming efforts on and my kids were babies so they slept a lot! I wanted to make a data hashing tool for Linux that was easy to use, and that would help people using Live CD’s, especially, compute hashes of data easily. And I wanted to advance my programming skills. That was the objective. Back then, it was a small project as the first screenshot shows, downloaded a dozen times a week, and did little more than hash a file or some text. So it didn’t matter how long things took. Ten years later, it is a whopping project with thousands of lines of code each carefully considered for cross-platform compilation, DLL dependencies, permission considerations, filesystems considerations, a 39 page user manual, and a dedicated website of its own, and much more besides. It’s downloaded hundreds of times a day. It is used by government agencies, specialist IT companies, Universities, schools and colleges globally. Training institutes, Military outfits. Hobbyists. And I learned recently that even the movie industry uses it to check archives of Hollywood films. And who knows who else uses it or for what.
Many old lines that I wrote years ago which today I can’t even remember why I wrote them still exist, because of my fear of deleting it in case it destroys some OnClick or OnChange event which then keeps me awake for another 3 hours. It uses half a dozen additional libraries, with C libraries like libewf being the most recent edition to allow for the hashing of forensic images. That’s right – that thing that is usually done by expensive commercial forensic tools. It makes Windows API calls, and Apple move the goal posts with every release of OSX. And it’s still mostly just me, with a few guys who helpfully and generously use some of their time to sort things out for me like packaging etc, or some new SQL statement or whatever on Github, and in the forums. So yeah, it is hard going.
Between 4th December 2016 and May 2021, the download count is now nearly 500K (485Kish). When we add the 400K downloads it had on Sourceforge between 2011 to late 2016, it is now approaching the 1 million download mark. So, in the software sense, I guess you could say it has done OK for itself. I am proud to run this project despite its imperfections. And as we pass the 10 year boundary, and as we approach the 1 million downloads boundary, I have much more I want to do, but not the time, resource or skill to do it alone. Perhaps it is time to have people join the project?
In the meantime, here is to the next ten years. And if you read this far, thank you for paying the interest, and thank you for your readership.
All the best.
(post image is courtesy of my photography friend, Mr Nickerson, who also made the logo…..thank you sir!)
Leave a Reply