The lack of file tags in Windows

So, I’m supposed to be working on this month-long challenge.  But hey!  I found some other project to work on.  It’s in service of my recent computer switcheroo, with which I’m a little obsessed lately.

Since recently switching from OS X on an iMac to Windows 10 on a laptop, I sorely miss file tagging. I’ll admit, this is one feature that I had not given much thought when I was preparing for the big leap to another operating system.

Though I’m happy with my switch, I’m also trying not to live in denial.  This is still Microsoft we’re talking about.  They have made incredible advancements as of late with their Windows 10 version.  And yet, in some areas they are very much behind in innovation compared to Apple.

File tagging is a glaring example.

tags in OS X
tags in OS X

If you’re at all interested in the Getting Things Done ethos, then you probably know all about this computer software feature.  On an Apple computer, you can tag a file or folder with a color and/or keyword.  These tags are then searchable.  They can help your workflow dramatically.

For instance, in a folder of downloaded bank statements, it would be incredibly handy to know which ones I’ve balanced against my personal finance software, and which still need to be done.  Tag the files accordingly!

But after my switch, I can’t do this on Windows 10.  And I use Google Drive to be able to do my personal work anywhere, so a file-tagging solution that is platform independent is pretty necessary.

Hence, I began looking for a solution, 3rd party or homemade.

Allegedly, Microsoft pays lip service to file tags, but these aren’t compatible with all filetypes.  So that’s a non-starter.

But then I found this 3rd party solution which sounds very promising.  But it’s not platform universal, so apparently your tags get vaporized when you email them or open the files on some other OS.  You can apparently export your tagging database as an XML file for importing on another computer, but that’s not very intrinsic a solution.  I do like how this solution plugs itself into Windows Explorer and the context shell menu!

File Metadata integration with Windows Explorer
File Metadata integration with Windows Explorer

But ultimately, I think that this won’t be a future-proof solution for my needs.

So instead, I built my own workaround.  And I did it with scripting:  AHK 1 to be exact.  It’s a really fun, easy-to-use scripting language that runs exclusively on Windows.  Don’t even get me started on my frustrations with the native scripting on OS X.  I always intended on learning it one day… until the day I got out of the Mac world altogether.

Requirements

  1. Platform independent.  This means I could use the files that I tag both on Windows and OS X (I don’t happen to ever use Linux, so that wasn’t a priority for me).  Their tags won’t become lost when opened on another platform, though the actual tagging process will only be conducted on a Windows computer.
  2. Transferable.  This is a slightly different requirement than platform independence.  The tags shouldn’t get lost when files are emailed, messaged, or synced across cloud services.
  3. Searchable. The tagging architecture must be plainly identifiable in some way, such that they can be searched easily.
  4. Non-destructible.  The tags must not interfere with the files’ usability.
  5. Extensible.  The tags and tokens should be configurable, such that the user can setup their own tagging schemes and change them over time.

I came up with the following:

File renaming

It’s as inelegant a solution as I am old.  But the longer I thought about it, it’s the easiest to implement, the quickest to set up, and meets all the above requirements.  In the scheme that works for me, I have three tags:

  • untagged files
  • tagged with some sort of “todo” keyword
  • tagged with a “done” keyword

Sample output

original: bank_statement_07232015.pdf

tagged: bank_statement_07232015 @TODO.pdf

retagged: bank_statement_07232015 @Done.pdf

Implementation

For this script to work as painlessly as possible, I used global shortcut keys to tag the files one way or the other.  One or more files can be tagged or untagged simultaneously.  Alternatively, you can bring up a GUI to do the tagging.

wtf

You can find the source code on my GitHub.  Here is the source…

Code sample

Day 15: display testing

This post is part of the GaSiProMo challenge.   You can read more about this here.

So I have my display working sort of.  It’s definitely showing good old ASCII characters.  Here’s a quick video of it in action:

You can see my code at GitHub.

I’m quickly realizing that I will need a more sophisticated text parser to make this thing usable.  ‘Cuz sending a character at a time for bit-fiddling pretty much sucks.

Platform Interchange

I suppose that the “Slippery Slope” phenomenon applies to me right now.  A chink in my Apple armor developed some time ago.  Then I got out of the iPhone world all together, which amazed me as much as it did my friends.

The recent maturity of Google’s cloud services (Photos, Drive, Music, etc.) had a considerable hand of this transition.  It’s very hard to argue with free, no matter who you are.

But then you do pay for free.  You pay with your time investment and commitment to the new platform.  For me, that cost has been relatively low.

That brings me to the next big hurdle to topple: OS X and my iMac.

It just suddenly made sense to me to consider the possibility of changing that hardware platform too.  Why not?  When literally all of my documents are cloud-based, I’m free to experiment with any kind of computer.

I’ve been a faithful Apple guy for the better part of 2 decades.  I’ve owned these machines in this order:

  1. PowerMac G4
  2. iMac 24″
  3. Mac Mini Duo
  4. MacBook Pro
  5. MacBook Air

They’ve all been pretty awesome.  But times have changed for me, my interests morphed.  And now?  I changed to an Asus 15″ hybrid laptop.  It’s a beautiful machine.

  • i7 64-bit CPU
  • 8GB RAM
  • nVidia video
  • 1TB hard drive
  • Windows 10.

That last spec is what finally made this all possible.  The Windows 8 debacle proved to be a non-starter for switching from the beautiful, consistent OS X.  But Windows 10 was finally showing itself to be ready to handle my needs.

I’m about a month into this big switch.  So far, I’m loving the choice.  It’s different, but good.  Not everything has been perfectly smooth, but no computer platforms are.

In particular, I really really miss filesystem tagging.  If you use those on OS X, you’ll be sorely disappointed with its lack on NTFS and Windows.  There are of course third party software solutions for this, but I don’t think they will work with Google Drive or Dropbox across other filesystems and operating systems.  For instance, I still work sometimes on my wife’s MacBook, so I need file tagging / coloring to work across them both.

The only solution I can think of is to simply make subfolders for my files.  The layout could look like this:

\Folder\Statements\2015\

…and then inside here, I could put:

\TODO

..and

\DONE

Then I get full syncing across platforms, and most importantly, visibility on where I left off.

Details aside, I’m the first to admit that there’s a certain polish lacking over here on this side of the computer and phone fences.  I miss that homogeneous sheen that OS X and iOS seem to exude.

And yet, for sheer horsepower and agility, I’m really appreciating what Windows 10 and Android devices offer.

Day 6: early firmware testing

This post is part of the GaSiProMo challenge.   You can read more about this here.

Things are progressing nicely.  I have the display fully wired now to the Mega.  It’s a spaghetti mess, but it’ll work.
I have the serial port on the Arduino working nicely for debug.  I also did a fair amount of thinking with regards to data and address packetizing.  It quickly became apparent that doing a bunch of digitalWrite calls for all this pins (8 data, 5 address, per character of the display) would be a nightmare.

Here is the character map for the display.

ipd2131 ASCII chart
encoded character map

So I came up with a character array method to do this.  I tested tonight with the serial port debugger to verify correct character parsing.

So far so good.

Day 3: Arduino setup

This post is part of the GaSiProMo challenge.   You can read more about this here.

I’ve had a bad experience with Arduino.  But perhaps I was just cranky that night.  I was also unlucky with a defective Uno.

The good news is that for my new project (which has a deadline), my new Arduino Mega is not in fact defective.  I can attest its functionality tonight, at 10:45pm.

This platform is pretty slick.  They cleverly have positioned it between full language control and  GUI-only.  The syntax is mostly C strict.  But there are abstracted functions and methods that keep the very low-level hardware constructs from mucking up the works.  In a word, Arduino has “de-engineered” the sometimes maddening experience of working in firmware on any given microcontroller.

In mere minutes, I had a PWM signal outputting a nice fade on an LED.  This would have taken me a chunk of time on the Atmel micro that is used on the board.

The IDE lacks a lot of polish, but then I suppose that’s not unintentional.  IDEs are precisely where a lot of engineers get cranky (see above), and IDEs are not the point of hardware design.

So I don’t have much to update for my project, but this little stepping stone is encouraging and enlightening.  Get it?  Englightening?

Day 1: setup

This is day 1 of the GaSiProMo challenge.   You can read more about this here.

I got the display mounted to a breadboard. How about that, it’s green!

20151101_220058The display has a self test diagnostic mode built in, which is incredibly handy. Saw little cute LED bits flashing and twinkling. So the thing appears to be alive, after all these years!  Here is some video too:

The majority of my project frustrations seem to revolve around toolchains.  I hate changing tool sets because the learning curves are so steep.  After a few hours, I finally sided with an Arduino Mega board.

Next step: wire up the display to the Arduino. This will be a big trek into the unknown for me. I haven’t done much with Arduino yet.

GaSiProMo

I’m a notorious task-starter, and not a great task-finisher.  My garage is littered with old projects that are collecting more dust than accolades.  I can lean on the old, dependable excuses 1 but really that’s lame.  If every moment is the new normal, then there aren’t any excuses.  Our hobbies define us, and I love my hobbies.  So it’s time to get serious about some side projects.

One thing that I’ve always responded to positively when it comes to my side projects is a good deadline.  Nothing motivates like external pressure.

The deadline this time?  Something called the Galactic Side Project Month  (GaSiProMo) challenge.  You’ve heard of Hackathons or Codefests?  This is similar, but with a more sane schedule of an entire month for completion.

It was tempting to submit one of my more languishing, challenging old projects.  But in the end I decided on something new and fresh, one that is slightly more achievable.

Osram 5x7 display module
Osram 5×7 display module

For GaSiProMo, I’m going to get this display up and running.  It’s an intelligent LED matrix.  I might even throw in a keypad to change the patterns and such.

I’ve had this display module lying in my Big Bin of Parts for… more than 10 years.  At this point:

  1. I’m not convinced it even works.
  2. I don’t know what color the LEDs are (the module comes in yellow, red, and green).
  3. And I’m certainly not convince it will be that cool, but at least it’s a project that I’ve always wanted to do.

So there we go.  I’ll post regular updates here and over at the GaSiProMo website.  It’s time to blow the dust off some of these old projects.

Modernizing my email

A few months ago, I did an overhaul of my digital life.  Those posts were all about switching smartphone platforms from Apple iOS to Android.  What was most revealing to me was not the hardware and software differences, but just how I get things done now.

In the end, I’m not unhappy with my switch.  I tend to get things done better on Android.  That’s not a light admission, as I’m a longtime Apple product user.  So to begin the switch away from the Apple ecosystem is somewhat shocking to me.

The next target in my lifehacking experiment?  Email.  It’s a corner of my digital life that is kind of scary.  There’s old chests full of dusty “hello”s and “newsletters” and “for sale”s that I haven’t been able to get rid of.  I have email from my college days (when I first started emailing… when everyone first starting emailing).

And for just about as many moons, I’ve had this here domain name, ElectroLund.com.  Along with it, I’ve been using self-hosted domain email (youknowwho@electrolund.com).  But the price of vanity email is quite high in this modern age of ubiquitous cloud communication.  In other words, a self-hosted address isn’t exactly portable.

Not exactly.  There is IMAP, which sort of worked for me for a time.  But there are costly storage constraints when considering 10 years of email to keep on a server.  And I’ve switched hosts many, many times.  Relocation is exhausting, and simply takes away from what I really should be doing here: writing, soldering, and writing about soldering.

Yeah, so back to the whole thinking smarter and not harder…  I’ve never been known for early adoption of technology, though I follow it obsessively.  Case in point is this whole cloud revolution.  So the next 600-700 words will sound positively adorable to all of you who are on the bleeding edge.

I just discovered gmail.

Not really, but kind of definitely.  I mean, I’ve had a gmail account attached to my google login for, like, ever.  But I hadn’t been utilizing its full potential at all.  So as I further pondered how I get stuff done with my digital life (with regard to my phone, my music, my photo library), it made sense to reexamine how my email could benefit as well.

Enter gmail.  It immediately made better sense to me to use one more product of Google’s.  After some research, I discovered that they support downloading of external email accounts — like my electrolund.com account!  This was a revelation.  Because I could do 100% of my email management from one tool, rather than two.

But it doesn’t just stop there.  It’s not that I simply needed a better email client.  What I could benefit from even further was the extended power of Google’s ecosystem.  Let’s dive in.

Server stability

Google might very well be the most stable network of servers on the planet.  They have server farm after farm, acres of redundant machines all keeping my content up at 99.999999999% of the time.  That’s a metric that I’ll never be able to touch with my self-hosted email.  So migrating my email through their servers just makes good sense.  And that I did.  All ~5,000 of them transferred up onto the cloud pretty painlessly.

Search

Google is search.  So it would make sense that searching your email inside Gmail is pretty fantastic.  And fast!  I’ve been amazed at the speed of the results.  Also, there are a wealth of complex search tokens you can use, like AND and OR and others.  I get consistently faster, better results from searching gmail that I have in any local email client on a computer.

Spam filtering

For my self-hosted email, I was relying on a third-party filter product called MXGuarddog.  It’s pretty awesome and they give you free filtering with an ad placed on your website.  I was very happy with it.

But let’s face it, why not just let Google do it.  They’re really good at the algorithm business.  And besides, all that is integrated in the same tool (gmail), along with my gmail mail account.  One stop shopping.

Cloud access

I’m restating the obvious here.  “Clouds” are so ubiquitous now that we take them for granted.  But not until I began to use Google’s cloud for actually getting stuff done in my life that I saw how truly awesome it was.  To have access to all of my email, dating back to ~1999, is pretty amazing. I’m no longer hamstrung by size limitations.  Only the limitation of my free Google account, which currently weighs in at 17GB.  Gigabytes!  That’s incredible.

Connected cloud applications

Here’s where you begin to see some GTD power coming through.

  • Google Photos
  • Google Drive

Being able to compose a new email, or reply to a received email, and attach any photo I’ve ever taken on my phone, by simply clicking the Photos attachment is mind boggling to me.  Gmail is inherently connected to the Photos product, which lately has been making waves for its intelligence.  That’s power.  Keep in mind that I’m at no time ever connecting a cable to my phone to get these photos up into the cloud.  They just magically appear there within seconds, at the ready for later use in other products like gmail.

gmail attachment managment
gmail attachment managment

Now onto Google Drive.  Here’s a little gem of a connected feature.  When you receive email with attachments, let’s say a bill or invoice PDF, you have some interesting options.  In my case, I have various family records in my Google Drive.

Now in the old days of my antiquated email workflow, I would need to be at my desktop computer, download the attachment, and then place the attachment in some local hard drive (from which I did all manual periodic backups).

But now… Drive. In gmail, there is an option to save any attachment to your Drive.  Did you get that?  Here’s what’s happening behind the digital scenes: an email attachment’s link in Gmail can be relocated to a new reference in the Drive product.  In so doing, Google’s bread and butter (extremely intelligent indexing) gets you free storage, in that you don’t have this file in two locations.  You now only have it in one: where you want it, filed away in your Drive.  Back in Gmail, in the original email message, is only a reference to the Drive location.  Genius.

Shortcomings

So far, I haven’t quite completed the transition for my GTD uses.

For instance, I’ve been a longtime paid user of the wonderful products Mail Act On and MailTags by Indev Software, both tools that plug into Mac OS X’s mail client.  They extend the functionality of Mail by allowing you to tag your mail, and to sort the mail with shortcut keys.

Now in switching my mail to Gmail, the above tools don’t get obsoleted.  They simply change a little.  I use them differently.  Obviously, they can only be used from Mac computers.  So when I’m on my work Windows machine or my Android phone, I don’t have access to them.

There are other oddities between platforms that are annoying, but not deal breakers.  In Gmail, the concept of “stars” and “importance” isn’t compatible with OS X’s Mail client.  That’s been frustrating, as I relied on both for my GTD workflow when I was working exclusively on my Mac.

So some of those details aren’t quite ironed out yet.  But I think I’m nearly in the 21st century now… along with nearly the rest of the civilized world.