Solved: Ctrl+F3 hotkey not working

I had a problem where the key combination Ctrl+F3 stopped working everywhere. In most editors, this moves a selection to the next instance of the currently select string of characters, so it’s a quick way to skip through all the uses of a function inside a file, for example. It’s a deeply-seated part of my muscle memory, and having it not work is frustrating.

The reason for this turned out to be Parsec, which I had recently installed, and which registered for several global hotkeys that are very commonly used in IDEs. And since Windows prioritizes global hotkeys over application hotkeys, it was eating all my Ctrl+F3 commands. Changing the Parsec hotkeys made my problem go away.

Developers: Don’t do this. Ctrl as the sole modifier for a hotkey should be reserved for applications, where it isn’t already used by the OS (like Ctrl+F, Ctrl+Z, Ctrl+V and Ctrl+C). Same goes for unmodified function keys. F1, F3 and F10 have a canonical purpose in every application. Any combination of modifiers with F1 is probably used by an IDE. Microsoft used to publish interface guidelines that spell this out, but I cannot find a recent version of them, only this page that says it’s discontinued.

D-Link 320L NAS repair

I have had a cheap-ish D-Link NAS running at my home for years. Last week, it broke. The drives were audibly still spinning up, and the activity light was blinking, indicating that it booted, but then went dark. Nothing on the network, no way to tell what was up.

There are two 4 TB drives in the enclosure, configured as RAID1. My immediate suspicion was that the mirroring might be out of sync. A bit of Google research told me that the box is a tiny Linux machine using Linux RAID partitions.

The first thing I did was to remove one of the drives. That made the other one the only drive in the array, and with no discrepancies, the NAS showed up on the network again, and allowed me to take a backup of my data. Which only confirmed my earlier suspicions.

Next, I put both drives in an old Linux desktop that had the required SATA slots, and Linux’s mdadm recognized them as being formatted for a RAID, but out of sync. dmesg said something about kicking sdb2 out of the array, so I used mdadm -a to put the array back together, and the array began rebuilding, which took a few hours, but eventually gave ma a working RAID1 array again. I was able to insert the drives back into the D-Link enclosure, and now it boots up and works just as before.

Lessons learned:

  1. My D-Link NAS cannot recover on its own.
  2. Linux skills pay unexpected dividends.
  3. I should have configured remote syslog logging before this happened. Fixed that first thing.
  4. It is probably time to buy a new device. This one is out of service, has never been 100% reliable, is pretty loud, and has no fancy extras.

Now that I know the disks are still in good shape, I’ve ordered a 2-bay Synology. I’m looking forward to the built-in Plex server, support for more than SMB 1.0, and hopefully a better management interface, too.

Only you can see that

I made a shocking discovery today: Gamers don’t care about graphical quality. I was sitting together with a dozen other nerds looking at four of them play FIFA 08, and commented on how bad the lighting in that game is (a “where is the light source that is throwing those shadows?” sort of comment). When I explained why it couldn’t be the way it was, one of the guys said “only you would see something like that”.

To me, and everyone working in games, what looked like a cheap mix of shadow maps and stencil shadows was glaringly obvious, and we know the PS3 can probably do better. But to these guys, all with different backgrounds, it not only didn’t matter – they didn’t see it! Why are we spending bazillions of dollars on ever more refined tricks like AO (“look how the shadow in the corner of the room are very realistic – oooh!” when even simple shadows are something players don’t pay attention to?

Games Compatibility on Integrated Graphics (Intel GMA 3100)

Last year I bought a new PC, and because I didn’t know which graphics card to get at the time, I decided to do a little self-experimentation and see what life is like with integrated graphics. After all, more and more people buy cheap laptops these days, and integrated graphics are getting better all the time. I bought an Intel G33 board which has a GMA 3100 (no X) chipset. The specs say it can do DirectX 9.0b, and Shader Model 2.0. Enough for quite a lot of games, but not for the latest and greatest. Continue reading

How to get Flex Builder 3 and Eclipse 3.4 Ganymede to play nice

There are a lot of good things I can say about Eclipse, but I have two griefs: One is the fact that I have way too much stuff in the menus that I never use. The other is that I’ve spent way too much time fiddling with the installation of plugins. Yesterday was no different: Upgrading to Ganymede left me without a working Flex Builder plugin. The MXML editor simply breaks with a traceback:
org.eclipse.jface.util.Assert$AssertionFailedException: Assertion failed:
at org.eclipse.jface.util.Assert.isTrue(Assert.java:185)
at org.eclipse.jface.util.Assert.isTrue(Assert.java:170)
at com.adobe.flexbuilder.editors.derived.editor.FlexMultiPageEditorPart.setActivePage(FlexMultiPageEditorPart.java:569)

I did find a solution here (make sure to restart eclipse with -clean afterwards), but this kind of fiddling with the installation is not something I should have to do. Especially not with a plugin that’s as important as Flex Builder. Adobe, I’m looking at you!

ActionScript 3 Learnings

I’m learning a lot about AS3 these days. It’s not a bad language, and it’s basically Javascript for Flash. Among the learnings:

  • Actionscript is still really, really slow. About 50-100 times slower than C s my guesstimate, based on what I know about Javascript benchmarks.
  • getters and setter are very slow. It’s 20 times faster to access a variable directly than it is to access it through a getter.
  • I really, really miss arrays of atomic types. Array is an array of object-references (and smart pointers, even), and it’s memory-hungry and not fast.
  • ByteArrays are faster than Arrays and use a lot less memory. I’ll try to use them more.
  • I think in C. Even after two months, I’m still writing int i every time I should write var i : int.
  • I miss block scoping of variables. Especially in for loops.
  • The Visual Studio debugger blows the socks off the Flex debugger

Despite all this I’m starting to really enjoy coding in Flash and getting noticeably faster every day.

Bookmark Everything!

I’ll be celebrating 16 years on the internet this summer, and as anyone can imagine that means I’ve seen a lot of crap. Even with the big storage of useless information that I call my brain, that means I have a lot of bookmarks, and with Firefox 3, I notice my habits of bookmark-keeping have changed substantially: I bookmark everything now.

Before FF3, keeping more than a few hundred bookmarks was self-defeating. Finding anything in the mass was hard, adding something to the right folder so it could be found again was getting progressively more difficult, and a Google search was almost always more efficient for finding things. FF3 changed this in three major ways:

  • By default, one click on the star icon saves the link to my unsaved bookmarks, and even if that means it doesn’t show up in any folders, it gets searched when I type a keyword in the URL bar (aka awesome bar).
  • I can now tag bookmarks, which saves me having to have any folders at all. All I do is click the star again, and tag the page with the first 2-3 associations that come to mind. This is great, and I keep adding new tags, but again, the awesome bar searches them when I need something later – and even if I don’t remember anything about an article I read, or even its title, I may remember that it had to do with cookie monster and that maybe I tagged that.
  • Foxmarks. This isn’t new to FF3, but I find that investing in a big bookmark collection is only worth your time if you don’t lose it every two years.

What about you? How big is your bookmark collection, what do you bookmark, and how many of you have managed to save any bookmarks from the 90s?

NOD32 Antivirus

I decided to test another virus scanner. I’m generally not interested in them, but there are people who are, and I’d like to be in a position to give a favorable recommendation for one or the other. It’s always easy to name the ones I don’t like (NAV, Antivir), or won’t trust again (AVG), and my recommendation so far has been for avast!, although the user interface it forces on you is really, really terrible.

So now I’m checking out NOD32 (30 day trial). It gets pretty good review, the interface is nice and clean, and it seems to be much less of a system hog. I like that I can really customize what it does – I especially don’t like my virus scanner to scan every file I touch, because that seriously cramps my compile times. So far the only fault I can find is with the explorer menu, and the lack of an option to turn off the balloon that comes up every time it updates its virus definitions.

Nokia 6300: “Memory card in use by another application”

I miss my old phoneToday when I connected my Nokia 6300 to the PC with the USB cable, I got the error message in this post’s title. The 6300 has not been a great phone for me (I miss my Ericsson W810i), but at least upload over USB had been painless until today. It’s full of really bad engineering like this:

When your background image is an animation that’s stored on the memory card, it will lock the memory card.

Yes. It seems somebody made the memory card an exclusive resource, and the code that’s playing background animations locks this resource. Solution: Reset the theme to factory settings. Upload podcasts again.

Adventures in Optimization

This weekend I thought it would be a good idea to run the Eressea server both with and without optimizations enabled and compare the output. In theory, I thought, optimization should not change the results, and different results would hint at bugs like uninitialized variables or illegal memory access.

Needless to say, the output wasn’t the same. It was slightly different, and it looked like a small error snowballing towards the end. I’ll spare you the tale of a day trying to narrow down the exact location, and cut right to the chase:
Continue reading