In 2021, I mashed together this quick utility, a very simple gui front-end to fdupes because I needed to clean up a bunch of documents. It was also an experiment in trying out Flutter Desktop.
Last year I released it to the public on github, more as an educational tool for people wanting to see some flutter desktop app source. Because these days, I’m force to work on macOS, I also released a mac version of an app for the first time in my life. 😳
Turns out, there is 1 other person in the world, who used my app. He noticed the app wouldn’t find the fdupes exec if it was launched from the gui. It was a known shortcoming, but this bug report triggered me to make a better effort. 😉
In v0.2.1, when the exec is not found, you can locate it manually. The location is stored so that subsequent launches automatically use fdupes from the specified location.
Maintenance update to stay compliant with Google Play store.
Although functionally, nothing changed, a lot has changed under the hood, so let me know if you experience any problems.
Rant
You may have noticed a lot of updates flying by last week. Over the past few months a ton of policy violations accumulated. I postponed updating the app since I am redeveloping the app from scratch and wanted to avoid going through the whole mess of getting the app compliant and approved, basically investing time in an app that will be deprecated soon.
However, I realized that rebuilding the app would take longer than expected (after all, it is an accumulation of work over 10 years) and that it would put too much pressure on me to deliver the app soon. If I didn’t take any action, the current app would have been removed from the app store last weekend, so I decided it is better to make the app compliant and provide continuity. It took me a whole week, each day putting in hours after work, to get the app approved.
As any developer will confirm, an app store approval can be a huge struggle. Even when you fix everything, your app still gets rejected. I noticed a bug in the review process in which they give feedback for an older version of the app. They claimed I repeatedly asked for permission even if the user granted permission. I fixed the bug, but they kept rejecting for the same reason. I filed an appeal asking for clarification, they responded the exact same thing (so appeal was basically useless). Some policy fixes need several days to be picked up and acknowledged by Play store. It only seemed to move forward after these policy fixes “trickled through”. I had so many fixes to do, from changing to app bundles, changing signing, upgrading to allowed versions of billing/analytics, upgrading android target, etc that it seems the review system choked on it..
The annoying thing was: I accidentically omitted a commit for some release but that’s when the review process got into the rejection loop. A few 1000 users were experiencing a crash and the fix was ready to release, but google would fail to accept it, even though it got accepted the day before! 🙄 These days, this has a snow ball effect: because they notice my app crashes more than its peers in the same category (Utilities), Google decides it should bury your app deeper in search results, lol.
Here’s the screenshot, for your entertainment:
So, the funny thing is they caused this problem themselves and even now when the bug is fixed, it will take some time until the average crash rate is low enough and Google reinstates my reputation.
Also, for anyone struggling with rejection with the notice “Your icon does not fill the entire icon space.”: you have to specify a 512×512 icon resource, just for TV, which does not have a transparent background. But be sure that the foreground stays within the allowed bounds! Life saver 😉
Anyway, that’s it for today. I know the current app is in a bit of broken state: the overlay is blocking input on certain screens, the service is being killed after some random time (google deployed a policy change end of 2023, before that no problem).
So rebuilding the app should fix all these things 🤞 AND make it easier to add new features. 🎉
A few years ago, I wanted to clear out the duplicates I had in my Google Drive. It’s not a trivial task as deleting files with the same filename does not cut it: I receive tons of generated pdf’s with the same filename and when time is short (or when being lazy 😉), I just save it to Google Drive as is. The inevitable consequence is: one day cleanup is needed. 😁
Anyone familiar with linux might think of the ‘fdupes‘ utility: it not simply compares the filename but, according to the manual:
comparing file sizes and MD5 signatures, followed by a byte-by-byte comparison
Excellent. Except, when you have to go through tons of documents and files, it’s not that practical. So, with my 2021 new year’s resolutions still fresh in my head, I persevered and coded a quick gui mashup.
Workflow
The gui presents a list of all file duplicate groups.
When you click on a group, you are presented with a list of all duplicates.
You inspect what the document is about by clicking on the filename, which opens it with the default viewer for this file type.
You rename one of duplicates to the desired final filename by clicking the ‘Edit’ icon.
You delete the renaming files using the ‘Trash’ icon.
The UI prevents you from deleting the last one 😉
Simple, but effective!
Release
I coded this a few years ago, but apparently never got to publishing the code, or even just a blog post. This weekend, I cleaned up the project and added the macOS platform (originally only linux was supported). I feel weird about supporting macOS, but the world is how it is: if you want to publish your app for iOS, you need to buy Apple hardware..
After a nice long beta period of 4 months (I forgot about it 🫢), 0.2.11 has been promoted to production. Highlight is the eternal loading state bug fix. On the technical side, I migrated crashlytics from Sentry to Firebase. You can disable reporting in the settings.
Changes since 0.2.7:
0.2.11 - 2023-03-26
===================
* fix eternal loading state + various bugfixes
* disable mark all as read button during loading
* replaced SentryLog by Firebase crashlytics
* center implicit refresh indicator + bigger text
* bump min sdk to 21 (firebase dep -> multidex)
Just in case you wonder about the changes since 0.2.5:
0.2.7 - 2023-01-25 ================== * fix utf8 html decode for titles * fix padding on progress indicator
0.2.6 - 2023-01-22 ================== + added setting: open in external browser
CoinGeek News is a very simple app to read the CoinGeek news in a more structured way (i.e. chronologically). The goal is to add some features like favorites, filtering on metadata, etc. The app has been in open beta since June 2021, and I had the intention to release to production only when some more value had been added. However, since I’ve already been using myself for more than 2 years now, I guess it could be useful for some other people too..
The past few weeks, I’ve been cleaning up the app and making it Play store compliant (both technical and privacy wise) so today, I can finally publish to production. 🥳
Current features under development are favorites and post tags.
Changelog
0.2.5 - 2023-01-21
==================
* url launcher fix
0.2.4 - 2023-01-20
==================
* clear cache: ask confirmation
* try to fix elusive crash on startup
0.2.3 - 2023-01-19
==================
* mark all as read: ask confirmation
* improve settings section visuals
+ settings show database stats
0.2.2 - 2023-01-18
==================
* gdpr compliant
* flutter3 upgrade
The Coingeek news site is my favorite source for blockchain news. I discovered it a few years ago but didn’t really visit regularly back then. I read the occasional shared post on twitter or one that popped into my google now feed. If I didn’t have time right away to read an article that peaked my interest, I visited the site some time later to catch up. However, most of the time, it turns out I had a really hard time finding back that article. On the site there is nowhere a timeline with the latest articles in a chronological order. Also, not all articles get posted on social media, or even if they’re posted, I might not notice them (I don’t feel like reading crypto twitter every day 🙄). So although I like the coingeek website, for me it’s not very practical. But hey, no big deal, I hear you say? you can’t read everything..?
I agree, until last year 🙂 During Coingeek Conference days, there are so many exciting announcements, you don’t want to miss any article! So for the last conference in October 2020 I quickly mashed together a prototype app so I could follow the news. It’s a very basic app right now and it doesn’t do much, but since I use it almost every day, I thought someone else might find it already useful too..
I do have some ideas to enhance it: favoriting, search (online/offline), post preview, filter using tags, …