Deep Freeze and the blinking Microsoft Office button: annoyance at its finest

If you’ve ever used Office 2007, I’m sure you’re familiar with this eyesore:

blinking ribbon

Microsoft’s support site states:

Why does the Office Button blink?

The Office Button should only blink when you have not clicked the button to view the commands. The blinking is a “look at me/click here” feature, because many people think that the button looks like a decorative logo, rather than a button to click to see commands. If you click the Office Button one time, it should stop blinking.

At this time, there is no way to turn off the blinking.

It stops blinking when you click it for the first time after installing Office. But of course, if your institution has Office and uses Deep Freeze, it blinks the first time you use Office, and then blinks again the next time you use Office after logging out. And the next time. And so on.

A side note: if you have to make your usability enhancement strobe at the user to get them to use it, it’s not a usability enhancement. It’s an obnoxious and misguided feature that should never have seen the light of day.

Posted in Images, Thoughts | Tagged , , , , , , | Comments closed

How to live with Rhythmbox’s custom sorting feature

Rhythmbox has a feature which allows you to enter a custom sort name for tracks’ artist and album field. So for example, if I wanted tracks by The Knife to appear amongst the Ks in my library, I could specify the sort name “Knife, The” for those tracks. Same for albums.

This sounds like a nice feature, but I have a few issues with it.

  1. The feature is hidden in a tab of tracks’ properties window. I have used Rhythmbox for several years now, and after a rebuild of my rhythmdb.xml file a while ago, I had absolutely no idea why my tracks were suddenly sorted differently. After a few months of puzzlement and fruitless web searching about it, I finally came across a thread on Ubuntu Forums which helped me figure out what was going on.
  2. Automatically rebuilding the rhythmdb.xml file seems to result in inconsistent sort names. I did not specify any custom sort names, but Rhythmbox specified a lot for me. However, for some reason it was inconsistent with many tracks. Half of my albums from The Knife were artist-sort-named as “Knife, The”, while the rest had no sort names. I didn’t investigate why this occurs, but I noticed it seemed to be on the basis of albums; all tracks within any given album were artist-sort-named the same, but other albums from the same artist were often different.
  3. There’s no global on/off toggle for this feature. I wouldn’t mind this feature’s problems if I wasn’t forced to deal with it all the time. Disabling custom sorting altogether would be useful as I have no need for this feature.

These problems were all compounded by the fact that my library is about 125 GB and holds over 13,000 tracks. Rebuilding rhythmdb.xml takes ages.

I attempted to solve the inconsistent sorting issue by selecting the tracks with custom sort orders, going into properties for those tracks, and clearing the appropriate fields. This invariably resulted in one of two outcomes:

  • Rhythmbox apparently does nothing, or possibly reverts the change immediately. Upon checking properties again, the fields seem to be the same as before.
  • Rhythmbox appears save changes to rhythmdb.xml, but begins to do a ton of disk I/O, bringing everything to a crawl, and I am forced to kill the process. This occurred when I attempted to select and clear the fields for all of my tracks at once. When I started it again, it continued to thrash my disks, so I deleted the XML file and let it start fresh (I didn’t think to save a backup).

I eventually came up with a quick and dirty way to clear the fields from rhythmdb.xml using sed. Obviously you will want to quit Rhythmbox before doing this. (Mind the text wrapping…)

cd ~/.local/share/rhythmbox
sed 's/<mb-artistsortname>.*<\/mb-artistsortname>/<mb-artistsortname><\/mb-artistsortname>/g' rhythmdb.xml > rhythmdb2.xml

This will find and clear all instances of the artist sort name field which have something in them. I’m not sure what the field is for album sort order, but if you find that, you can alter the command to do the same for that field.

After this, you will want to check the new file (rhythmdb2.xml) to make sure the command did what it was supposed to. Then you can rename it to rhythmdb.xml, but I suggest you hold on to the original untouched rhythmdb.xml just in case Rhythmbox doesn’t like the new and improved one. (Restoring a backup is much less painful than rebuilding the file from scratch.)

Once I did this and re-opened Rhythmbox, I was pleased to see that MC Frontalot was no longer next to Sage Francis in my library. However, I’m a little anxious knowing that this inconsistent sort behavior will probably reoccur once I add new tracks to the library, as Rhythmbox will then make new entries for them. I could always run this command again, but I would prefer not having to do so.

Posted in IRL Crap, Music | Tagged | Comments closed

I type weird

Recently I bought a Microsoft Natural Ergonomic Keyboard 4000. Upon starting to use it, I immediately noticed that I have some pretty bizarre typing habits.

Let me start by saying that I’m a touch-typist (in the sense that I type without looking), and I use the Dvorak layout on every computer I use (if I’m going to be using said computer for any more than 5 minutes).

I was always a hunt-and-peck guy until I switched to Dvorak (that’s a story for another post), but in a way, I think I still have some bad habits from before I learned to touch-type. Or… almost learned to touch-type.
Read More »

Posted in IRL Crap, Programming | Tagged , , , | Comments closed

Toroidal array with deletable nodes

Edit: apparently the term toroidal array is a concise name for a grid with the wrapping behavior which I implemented in the Grid class I wrote. So, obviously that much has been done before, as I suspected when I originally posted this article. However, my node “deletion” system may still be something new. Actually, the deletion system seems to be horribly bugged, and I don’t have time to fix it.

I wrote a pair of classes to handle a 2×2 or larger grid of nodes. Each node borders 4 other nodes. For example, a 3×3 grid would look like:

0 1 2
3 4 5
6 7 8

Node 0 would be connected to node 6 to the north, node 1 to the east, node 3 to the south, and node 2 to the west. (Node connections wrap to the other side of the grid when the node is on an “edge” of the grid.) Node 4 would be connected to 1, 5, 7, and 3, respectively.

Upon deleting a node, the hole is filled by the remaining nodes. I’m probably not the first one to implement something like this, but I was kinda bored and felt like coding it from scratch.

See full article for source code and further details.
Read More »

Posted in Programming | Tagged , , , , , , | Comments closed

Copying arrays in Java

I recently started learning how to develop Android apps. I’m working on a game at the moment, and I had been tearing my hair out over what I thought was the most elusive bug ever.

Basically, I have two integer arrays: currentLocations and initialLocations. They hold the “room numbers” of various game objects/NPCs within the game. At the start of the first game, both arrays are populated with random values:

public class GameClass extends Activity {
	private static int[] currentLocations = new int[6];
	private static int[] initialLocations = new int[6];

	...

	private void setupLocations {
		for (int i=0; i<7; i++) {
			currentLocations[i] = getRandomLocation();
			initialLocations[i] = currentLocations[i];
		}
	}
}

Then, throughout the game, currentLocations is changed (most notably, the player’s location changes). After the first game ends, the player is asked whether the locations should be mixed up. In the case that the player wants to keep the initial locations, this function is called:

private void restoreInitialLocations() {
	currentLocations = initialLocations;
}

However, in my testing, every time the game ended and the initial locations were “restored”, it seemed like the player would start a new game in the same place he left off.

The only place I made changes to initialLocations was in setupLocations(), so I was quite perplexed. I eventually thought to display the values of initialLocations in the game in real-time to track what was happening. After I did, I noticed it was quite literally holding the same values as currentLocations.

After a few minutes of thinking about it, I realized that the statement in restoreInitialLocations() was the culprit. I don’t know why it makes initialLocations into a pointer of sorts to currentLocations, but I now faintly remember, from way back when I was first learning Java, that the proper way to copy the values of one array into another is:

for (int i=0; i<7; i++) {
	currentLocations[i] = initialLocations[i];
}

That’s a lesson I hope I won’t have to learn again anytime soon!

Posted in Programming | Tagged , , , , | Comments closed
  • Recent Posts

  • Topics

  • Archives