Monday, April 18, 2016

Detecting and moving duplicate files with C# Windows Forms

In 2011, I wrote a Perl script that moved mp3 files based on name matching:

Thanks to cloud services such as dropbox, my duplicate-pruning needs have become more complex.
I now have photos and videos coming in from multiple sources that are mostly the same set, but not completely. These sources have different names for the files. On top of that, I don't really benefit from command line interfaces when it comes to routine maintenance of these files.

And so I'm revisiting that problem in 2016 using C# and Windows Forms instead of Perl.

Differences from my previous attempt:
  • Works with any file
  • Uses binary comparisons instead of filename comparisons
  • Human-friendly UI
  • Progress-indicator
  • Optional filter to include or exclude files based on their extension
  • Ability to cancel an operation in progress
  • Preview mode + Log files, in case you just wanted to know the duplicates without moving them
Source code is hosted here:

Windows users who trust me can download the exe here (choose 'View Raw'):

Saturday, April 16, 2016

Relationship Symmetry Part 2

Part 1 was written in 2012 and exists here:

I eventually gave Twitter and Facebook another go. Unlike my previous life as a superconnector, I wanted to keep this new iteration of social networking small, intimate, and secret as a means of staying in touch with a trusted inner circle. Eventually, friends of friends added me and I had to add them back… because symmetry.  And then industry people added me, and so I added them back… because symmetry. And then we released a game, and it felt important to engage and be a “brand”. I made my account public using my real name.  Journalists and fans of the game added me, and I added them back… because symmetry.

Being recognized as a human is meaningful. When you are in the same room with a person, there is an unwritten social contract to reciprocate any attention a person gives you as a courtesy for extending humanity to a person beyond what you might give to an inanimate object in the room. A mute feature allows that covenant to be broken without the penalty of letting the other person know that you’ve broken that agreement to pay attention to each other. It is a thing that people do when they want the benefit of a connected status without the attention burden. Attention is the primary difference between a friend and a rolodex entry. For me, symmetry is the gateway to humanity. Asymmetrical relationships are relationships that one would have with a business, a god, a subordinate, or an inanimate object. For many folks, posting on Twitter or Facebook is like leaving a prayer out there for an apathetic god that exists only in their own mind... because we are so very hungry for a relationship with the universe, and we want our thoughts to matter to "something".

I’ve never been good at doing things halfway. My need for symmetry consumed parts of my day as I tried my best to not mute anyone and maintain a level of attention to my feeds that would honor those who deemed me worthy enough to follow. But the math just wasn’t sustainable. The urge to mute became strong with prolific announcers of repeating/mundane events, oblique references, or pictures with words over them. What’s even worse was that I became obsessed with likes, retweets, and followbacks as a means of validating my own sense of self worth. This is what it means to be a brand: You broadcast a persona to the world, and that makes a second you exist outside of your meatspace who desperately wants to stay alive. My Twitter and Facebook feeds were filled with brands hungry for validation participating in an inherently asymmetrical attention economy.

In the end, I was still hungry. My need for connection was not being met. Like junk food, social media made it easy to engage in verbs associated with human connection, but the nutritional value of those verbs were not enough to sustain an actual meaningful relationship with other human beings. It was as if I was in a room filled with people wearing noise-canceling headphones while shouting into a megaphone. I took a look at myself in the mirror and noticed that I, too, had a megaphone for a mouth and noise-canceling headphones instead of ears. I was no longer human, yet I was desperately starving for humanity.

I’ve never been good at doing things halfway. Keeping an account alive and not using it would mean that there is this dead version of me out there that people can treat like a live person who might be expected to pay attention or follow back or get outraged at the wrongs they see... and I do all of those things, but for some reason, none of that seems to matter in the world of single-serving internet friends. Everything is a single serving interaction that gets thrown away after it is done, and that false perception of connection threatens to serve as a mental replacement for the types of meaningful interactions that happen through direct email or phone calls. To resolve any ambiguity about the value of my friendships, I deleted my Facebook and Twitter accounts once again - For the last time.

Instead of a room full of brands, I am choosing to be in a room where I can have a mutual conversation with another person on purpose with the intention of building a relationship as if we were making eye contact in the same room. These symmetrical interactions are the ones that matter in the longrun. I've made peace with the fact that most of the general public does not know who I am or cares; this is an honest reflection of an uncomfortable truth that I've tried so hard to look away from for a very long time. My world is now the smallest it has ever been, and my energies are much more focused on things that I have actual agency over.