Managing overlay icons for Dropbox and TortoiseSVN and TortoiseGit

I imagine like many involved in web development, I rely heavily on a number of version control applications: I use Dropbox, Subversion (SVN) and Git.

For years I’ve used the TortoiseSVN client for Windows. It integrates with the Windows Explorer shell making it quick and easy to manage your version controlled code within Explorer.

I like that I don’t need a separate full-blown application that acts as an interface between the code on my PC and the SVN repository; I like that I don’t need to use a command prompt; but I love that TortoiseSVN adds overlay icons to tell me the state of each file (is it up to date, changed, added, etc.?).

These folders are all up to date, and in sync with the SVN repository.
These folders are all up to date, and in sync with the SVN repository.

Recently I’ve started using Git at work and so I’ve also installed TortoiseGit which does something similar.

This is the Bootstrap repo cloned to my PC.
This is the Bootstrap repo cloned to my PC.

And of course Dropbox does the same: it shows you which files have been synchronised with the cloud, and which are in the process of uploading.

My Dropbox folders are up-to-date, synchronized successfully with the Cloud
My Dropbox folders are up-to-date, synchronized successfully with the Cloud

The problem

The problem, though, is that each of these applications uses multiple overlay icons but Windows only uses the first 15.

TortoiseSVN and TortoiseGit both use the same nine icons:

Nine folder, each has an icon on top of it such as ticks, crosses or pluses.
TortoiseSVN and TortoiseGit both use nine icons.

Dropbox uses eight icon overlays. If you have OneDrive installed (which you will if you use Windows 8 or above) then it uses three. And Windows itself uses a few to indicate offline files or enhanced storage.

That’s 22 icon overlays, and like I said: Windows only uses the first 15.

So, inevitably you end up with some icons missing, and depending on which these are it can make life just that little bit harder when trying to figure out quickly whether a file is in sync or not, or whether it’s not even been added.

That means you need to make a choice about which icons you want to use and which you don’t.

What Microsoft should do…

This functionality was introduced in Windows 95, to still limit this value to 15 icons when we now have a 64-bit operating system and literally gigabytes of RAM and terrabytes of hard disc scpace seem mad.

Microsoft should now either

  1. increase the limit from 15 to, say, 256 or 1024 or whatever multiple of eight they choose, or
  2. provide a set of standard overlay icons (that can be updated as part of the current Windows theme) for the most common overlay icons (e.g. normal, read only, added, modified, deleted, ignored, conflicted, locked, question mark) that any application can hook into.

How to fix it

Anyway, the most straight-forward way to fix this is by editing the Windows Registry.

The icon overlays can be found in the following key:

Computer \ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ ShellIconOverlayIdentifiers

It turns out you can safely rename the folders which will reorder the icons. The folders are just containers for the real information contained within them.

1. Backup

Export (backup) the ShellIconOverlayIdentifiers folder in its entirety, in case you need to restore it later.

2. Prioritise which icons you need

My current preference is for the following:

  1. 1TortoiseNormal
  2. 2TortoiseModified
  3. 3TortoiseConflict
  4. 6TortoiseDeleted
  5. 7TortoiseAdded
  6. 8TortoiseIgnored
  7. 9TortoiseUnversioned
  8. DropboxExt1 (green Synced)
  9. DropboxExt2 (blue In progress)
  10. DropboxExt5 (red Sync problem)
  11. DropboxExt7 (grey Folder not synchronizing)
  12. EnhancedStorageShell
  13. SkyDrivePro1 (ErrorConflict)
  14. SkyDrivePro2 (SyncInProgress)
  15. SkyDrivePro3 (InSync)

You can use whatever naming convention you prefer. I rename the original folder names with a number prefix and an underscore, e.g. 01_1TortoiseNormal. Folders that I want to drop to the bottom I prefix with a simple x, e.g. x5TortoiseReadOnly.

UPDATE: Some users are reporting that they prefix with a space as this appears to be the trick that OneDrive/SkyDrive has used.

In regedit it looks like this, with the unprioritized icons dropping to the bottom of the list.

List of registry keys
List of registry keys

3. Restart Explorer

  1. Close any Windows Explorer windows.
  2. Press Ctrl+Shift+Esc to open Task Manager.
  3. Look for Windows Explorer listed under “Background processes”.
  4. Right-click it and select “Restart”.

Your taskbar will disappear a couple of times as the Explorer process is restarted, but you should now see all the overlay icons you want within your folders.

(Currently I’m having issues with OneDrive — formerly SkyDrive — but as I don’t rely on it for too much I’m not that bothered, to be honest.)

Update

“Gijssays” posted a comment below in January 2016 that reads:

QUOTE

There is an even more permanent solution to this problem:

  1. Go to the registry key ShellIconOverlayIdentifiers
  2. Right click > Permissions… > Advanced
  3. Now disable inheritance, take ownership of this key and check “Replace all child permission..”
  4. Once you are the owner of the key you can permanently remove OneDrive / Dropbox or whatever keys you do not need.
  5. To secure this key from future edits make it read-only for the SYSTEM user.

END QUOTE

I have not tried this solution but I wanted to surface it into the article in case it helps anyone.

Zdenek Polach has also created a script to fix this. See The Overlay Icons Nightmare – TortoiseGit, SVN, Dropbox War Solved.

Using Akismet on WordPress Multisite

Akismet is a WordPress plugin for dealing with comment spam. It’s pretty good and simple to set up:

  1. Sign up for an Akismet plan (from free for a personal site, to $50 per month for enterprise).
  2. Use the API key generated to activate your plugin.

The API key (like a license key) is in the format abcde1f23456.

And that’s fine if you have only one site, but if you’re running WordPress multisite then you don’t want to have to activate Akismet individually for each sub-site. That’s just tedious.

Wouldn’t it be much better if you could just add the API key once?

Akismet doesn’t offer that option within the user interface on Multisite. Undeterred, I went in search of a way to do it.

How to do it

The wonderful folks over at WPMU DEV have a really useful blog post from July 2013 about how to do this: How to use Akismet on WordPress Multisite with 1 license key.

The good news it’s really simple:

  1. Open wp-config.php in your favourite text editor.
  2. The WPMU DEV article recommends that you add the API code  below the comment /* That's all, stop editing! Happy blogging. */ but I prefer to add it below the define() block for Multisite. But you can add it where you like, really.
  3. Add the following code define('WPCOM_API_KEY','abcde1f23456');
  4. Save wp-config.php and upload it to your site.

Your wp-config.php file will then look something like this:

[php]
/** Multisite */
define(‘WP_ALLOW_MULTISITE’, true );
define(‘MULTISITE’, true);
define(‘SUBDOMAIN_INSTALL’, false);
define(‘DOMAIN_CURRENT_SITE’, ‘www.example.com’);
define(‘PATH_CURRENT_SITE’, ‘/’);
define(‘SITE_ID_CURRENT_SITE’, 1);
define(‘BLOG_ID_CURRENT_SITE’, 1);

/** Define WordPress.com API key for Akismet in WordPress Multisite */
define(‘WPCOM_API_KEY’,’abcde1f23456′);
[/php]

Like many things on this blog I’ve added this here primarily for my own reference, but I hope it helps you too.

The real credit on how to do this, of course, goes to Sarah Gooding from WPMU DEV: thank you.

Happy spam-free blogging!

Viewing Trello label titles on cards

UPDATE: Trello now includes this capability ‘out of the box’.

On a desktop or laptop browser, simply click the label colour—it will expand to include the name of the label.


It’s no secret that I’m a fan of Trello.

I use Trello pretty much exclusively on Google Chrome, as there are plenty of plugins written to extend its capabilities; far more than for Firefox, which surprises me a little.

One of my favourites is Scrum for Trello, which allows me to add Agile story points very simply. My new favourite is this: Card Color Titles for Trello.

Default labels

In Trello you may set an unlimited number of labels. Originally, there were only six, organised in the order of the original Apple logo.

Here are the labels that Trello themselves use for their development board.

Trello label names
Trello label names

When applied to cards, the labels appear as coloured bars at the top of each card.

Trello development board with standard labels.
Trello development board with standard labels.

The problem is, and particularly now with unlimited labels, it can be difficult to remember what each colour means—especially if you use different labels on different boards.

Card color titles for Trello

That’s where the Card Color Titles for Trello plugin comes in: it adds the name of the label to the label.

Labels, colours, titles—it all makes sense now
Labels, colours, titles—it all makes sense now

I’ve been using this for the last week and it has been so useful, particularly at work where we have labels for MoSCoW prioritisation. It has made re-ordering cards so much easier and quicker.

It’s definitely an extension to add if you use Trello on Chrome: Card Color Titles for Trello on Chrome web store.

Continually improving our work habits with retrospectives

Retrospective objectives board
At the end of sprint #14 we identified three actions that would improve our processes going into sprint #15._

One of the principles behind the Agile development method we use is that “at regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behaviour accordingly.” (Source: Principles behind the Agile manifesto)

This is about continuous improvement. It’s about slowly but surely getting better at what we do. It’s about recognising that our processes are not perfect, that we are not perfect, but that together we will slowly work to improve things.

The Japanese have a word for this: kaizen (改善), which means “change for better”.

We run two-week sprints: from Monday to Thursday on week one, and again Monday to Thursday on week two. A portion of Friday is kept clear each week for support and maintenance, but the larger part of the second Friday is devoted to planning in the afternoon, following a sprint retrospective in the morning.

The retrospective is always facilitated by someone; so far, it’s always been me.

Step 1. Ground rules

Before the retrospective, as a team we collectively look over our Trello board (where we track our projects) to look at what work we completed during the sprint, and evaluate whether we successfully met our sprint goals or not.

This allows us to go into the retrospective with a clearer picture of what happened. So much happens during a sprint that it can be hard to remember what we did two weeks ago.

Then we set the ground rules for this session and all agree to the following:

  1. We will stick to 1 hour.
  2. We will be honest.
  3. We will accept everyone’s opinion without judgment.
  4. We will try to not interrupt.
  5. We will talk from our own perspective, and not speak for anyone else.
  6. We will not make jokes about other people in the room.
  7. We will not check mobile phones, email, etc during the retrospective.

As part of setting the stage for the retrospective, I read out what is known as Norm Kerth’s ‘prime directive’, and ask everyone to verbally agree to it.

The prime directive, which was written by software consultant Norm Kerth, sounds quite Star Trek-y, but it’s not quite as geeky as that. Its purpose is really to help ensure that teams have the right culture of openness and honesty.

This is what I read out:

Regardless of what we discover, we understand and truly believe that everyone did the best job they could, given what they knew at the time, their skills and abilities, the resources available, and the situation at hand.

Step 2: Brainstorming

For the next 20 minutes — though it’s usually shorter — armed with a stack of Post-It® notes and a Sharpie® each (other sticky notes and pens are available), we individually reflect on the last sprint and brainstorm ideas that fall under the following headings, which I put up on a whiteboard:

  • Enjoyable
  • Frustrating
  • Puzzling
  • More
  • Same
  • Less

Step 3: Mute mapping

Ideas have been grouped and categorised
Ideas have now been grouped, circled and a category label given to each.

Having filled the whiteboard with a colourful patchwork of ideas, the first thing I do is read out each idea. We now hear what everyone has written. Sometimes this prompts new ideas; these get added to the board.

I then set a timer for 10 minutes during which we silently group all the cards into categories. There are three rules:

  1. Put related ideas close together.
  2. Put unrelated ideas far apart.
  3. No talking.

It’s a surprisingly effective technique.

Once done, I take a whiteboard pen and draw circles around each group of sticky notes and we give collectively decide on a label, e.g. content strategy, social, tech, tools, training, time management, etc.

Step 4: Vote

Having categorised the ideas, each member votes on which categories should be improved during the next sprint.

I hand out five magnets to each member of the team. Participants can use them as they like, depending on how strongly they feel about the issues raised. They may put all five magnets on one category, or one magnet each on five categories, or somewhere in between.

Step 5. Retrospective objective

There should now be a clear winner.

Or two.

Or sometimes three.

We clear the board of all the other categories and discuss which category or categories we should focus on during the next sprint, and brainstorm ideas to finally agree on specific actions to improve how we work.

These objectives then become actionable tasks during the next sprint. Sometimes we might add something to our process, or else we might remove something. Either way the idea is to make things go better.

Slow PCs

Sometimes it’s obvious and the actions that come out of it are pretty simple to fix. During the first retrospective, for example, almost the entire team identified that their PCs had too little memory for the work they were expected to do with it. Simple fix: order more memory. The total cost was about £200 but as our PCs now start up a little faster and don’t grind to a halt while trying to multi-task or open enormous graphics files we must already have recouped that cost through increased productivity.

Daily stand-ups are too long

Another example. It was identified during one retrospective that our daily stand-up meetings were taking too long. There are only seven of us so they shouldn’t be taking any longer than 15 minutes maximum, if you stick to the guide of two minutes per person plus two minutes.

The retrospective objective for the next sprint was simply this: use a timer for stand-up meetings. A simple solution and it proved very effective.

We ran timers every day for the following two sprints and now we don’t need one: daily stand-up meetings are now as short as they should be, and any extra chat is left to the end and optional.

Screenshot of sprint timer showing bar chart
Sprint timer results proving that our daily stand-up meetings are now shorter.

Ad hoc requests

Sometimes the answer isn’t quite so straight forward. A noticeable frustration was noted during our last retrospective about ad hoc requests that land on our desks from time to time. There had been a surprising number during that past sprint.

On the surface it looked like they all fell outwith our general team objectives. But as we discussed them more fully it became clear that only one did. What initially seemed like an enormous mountain of a problem turned out simply to a simple conversation to have with someone.

The real value in retrospectives

This is where the real value of holding regular retrospectives becomes apparent for me. These often small niggles, if left unaddressed, can prove to be destructive in the long term. Not only do they affect productivity but they can also destroy team morale.

How long had people been grumbling about their PCs being slow? Six months? A year? Longer? One this was identified it took 10 days to resolve.

If our stand-up meetings had continued to run for 30 or 40 minutes then that too would have had a detrimental affect on the team. Not just that it eats into development time it may have led to some team members not sharing valuable information for fear that the meeting went on too long. And as we all know from Master Yoda, fear leads to anger, anger leads to hate, and hate leads to suffering.

Collectively unpacked what was behind those ad hoc requests, I felt, gave us a real clarity about the different types of requests we get, how to evaluate whether we take them on straight away or not, and how to deal with them.

In identifying that all it required was a conversation, it gave us an opportunity to build bridges and educate rather than defensively close doors.

At the end of this week we’ll sit down for another retrospective. I don’t know yet what we’ll discover, but I do know that it will be valuable and another step towards us becoming a better team.

Originally published on the University of St Andrews web team blog.

Write! (beta) — a distraction-free text editor for Windows

Write! A distraction-free text editor for Windows. Here it is showing the navigation bar.
Write! A distraction-free text editor for Windows. Here it is showing the navigation bar.

A few months ago, while I was editing some documents in Markdown, I came across Write! — a new text editor (still in beta) that is being marketed as “writing instrument for digital age [sic]” and a “distraction-free text editor that does not suck”. So I downloaded it and took it out for a spin.

I like it, but…

For the most part I like Write! It’s clean, it’s fast, and it has a minimal set of usable features that don’t get in the way.

It’s like a prettier Notepad but with a spell checker, a navigation bar on the right-hand side (like Sublime Text), and a basic understanding of Markdown (so you can make text bold, for example, by typing **example**).

I have a couple of issues, though, which prevents me from using this as my text editor of choice for writing.

Proprietary format

My main niggle is that by default Write! saves to its own proprietary format. This is a zipped, XML-based file format (.wtt), and as far as I can tell this isn’t compatible with the OpenDocument text (.odt) format. The simple document above (showing the first chapter of JRR Tolkien’s The Lord of the Rings) contains the following files:

  • document.xml — the actual document, plus some meta data such as word count.
  • history.xml — an undo history.
  • package.xml — this seems to define the package format and encoding (UTF-8).

You can export to PDF, OpenDocument, plain text, and three flavours of Markdown (Textile, Markdown, and Wiki) but that has more of a disruptive workflow than simply tapping Ctrl+S every few minutes.

Similarly, it would be great to be able to associate Write! to open certain file types, such as text (.txt) or Markdown (.md, .mdown) files.

Not full Markdown support

By default I tend to use basic, vanilla Markdown rather than Textile or Wiki). By default Write! is configured to support a mixture of the other two. That’s not a problem as a quick visit to the settings will put that right.

Write! settings dialog
Write! settings dialog

But Write! only supports a small subset of Markdown:

Supports

  • Headers prefixed with hash (# for H1, ## for H2, etc.).
  • Unordered lists using minus (-) and plus (+).
  • Numbered lists.
  • Links (but you cannot easily edit the link, text or title).
  • Emphasis (italics and bold) using asterisks (*) or underscores (_).
  • Automatic links in the format <http://example.com/>.
  • Backslash escapes, e.g. \*literal asterisks\*.

Does not support

  • Setext style headers (underlined using equal signs or dashes).
  • Blockquotes.
  • Unordered lists using asterisk (*).
  • Code blocks — 1 tab, 4 spaces or three backticks (“`).
  • Inline code using single backticks (`.example {}`).
  • Horizontal rule.
  • Images.
  • Automatic links for email addresses, e.g. <address@example.com>.

Cannot type with help window open

This seems to be a basic requirement that has been overlooked: if I tap F1 to bring up the help text (shortcuts and markup) I cannot keep the help window open while typing into Write! If I start to type I get an irritated ‘bong!’ sound from my PC.

Surely I should be able to refer to the help text while typing.

Conclusion

If Write! supported at least:

  1. The ability to select which format to save to by default (even on a document-by-document basis); (MUST)
  2. The ability to open certain file types in Write! (MUST)
  3. Full support for Markdown. (MUST)
  4. Ability to type while referring to the help text. (SHOULD)

then I would without a doubt use this text editor for all sorts of small writing tasks, such as writing documentation, journalling, text editing, etc. Until then, I’ll just keep updating the beta and see what gets added in the future.

For me this is definitely one application to keep an eye on but it isn’t for production use quite yet.

Bonus

What is nice is that you can vote for future features from the website’s Feedback link. One of those suggestions is to save in plain text format; I’ve just submitted an idea to fully support Markdown.