In Pursuit of Powerful, Puzzling, and Private Passwords

(Pardon the excessive alliteration in the title, I got a little carried away. 🙂 )

Last night, I got a message from my instant-messaging program, indicating that it had been logged out of one of my IM accounts because I’d “logged in from another location.” I’m pretty sure that it was an error in the program (rather than someone else actually logging into my account), but it got me thinking, and I realized that my e-mail and IM passwords were pretty weak — I’d created most of them long before I came up with a way to remember difficult passwords, or started using a program to create and store them, and hadn’t thought about them since. In other words, most of those accounts used the same easily-memorable but very weak password.

(This isn’t as much of a problem as it sounds though. All of my important e-mail is GPG-encrypted. But it still isn’t a good idea.)

So I spent a couple hours this morning changing the passwords for all of my IM and e-mail accounts. The Skype one was already secure (because I’d opened it after I improved my password system), and one e-mail account was as well (because the company that runs it insists that I create a new password every few months). I was able to find and change my Yahoo and GMail/Google Talk passwords on the ‘net with minimal effort, and my primary e-mail account is on a server that I control, so that was simple enough as well. But then I ran into trouble.

After digging through the online help system, I discovered that ICQ only allows password changes through their client program, which (of course) is Windows-only. Heaving a put-upon sigh, I fired up my VMware Windows XP system and downloaded and installed it. After that, it was pretty easy, but I shouldn’t have had to do that, in my opinion.

I also discovered that ICQ limits you to eight characters at most in a password. That’s probably secure (my bank uses the same limit, and they can cut off Internet access to the account if someone starts pounding it with a dictionary attack to guess the password), but it’s irritating that I couldn’t use my preferred password length.

Next up: my MSN account. You would expect that you could go to the MSN homepage, log in, and somewhere in all the crap on it find a link to change your password. You’d be wrong, of course… Microsoft could never make things that easy. Nor would they provide any link to a FAQ or help page on how to do it, so after trying and failing to find any information on their site, I did a web search and discovered the way: you have to go to https://accountservices.passport.net/ instead. Of course, it should have been obvious! And they limit password length to sixteen characters, so I couldn’t use my preferred length there either. Grr!

After all that, changing my ISP e-mail password (the last one on my list) was fairly anticlimactic.

Anyway, they’re all changed to secure ones, so if anyone was able to log into my IM account last night, they should be locked out now. 🙂

“Unmanned Aerial Manhood outrage at Kasparov rally”

I’ve debated whether this article really warrants a mention on Geek Drivel, but I’ve decided to post it anyway, primarily for the first paragraph:

Politicians in Western countries talk a lot about the contribution technology can make to politics, but they’re generally on about quite limited ideas like video debates. In Russia, some activists are much more avant garde – seeking to make their (unspecified) point by the use of a remote-controlled flying penis fitted with helicopter blades.

It’s just so amusingly ridiculous that I couldn’t resist. 🙂

“When code goes bad: What to watch for”

This article clarifies a few things that I’ve subconsciously noticed myself — for instance, when you have a function in your program that does more than it should, it becomes hard to succinctly and concisely name it. It also introduces the “three numbers in software” (zero, one, and infinity), and the phrase “inheriting from the clipboard,” which I’ve adopted… there are a few places in my code where I’ve done that myself, and which really should be refactored. Recommended reading for all software developers.

Firefox’s Download Day 2008: Help Set a Guinness World Record!

The people at Mozilla have come up with a neat idea for Firefox 3: they’re trying to set a Guinness World Record for the most-downloaded program in a twenty-four hour period, on an as-yet-undecided day next month. To see a breakdown (by country) of how many people have pledged to do, or to pledge to do it yourself, just go to the page linked above.

Frankly, I think it’s little more than publicity stunt. I don’t think they’ll have any trouble setting such a record, since I highly doubt there’s any competition for it at this point. But publicity stunts aren’t always a bad thing, and spreading the use of Firefox (specifically for the NoScript extension, but also because it’s pretty much the best browser available) is a very good cause.

The Agony of Switching IDEs

(For the unenlightened out there, IDE stands for Integrated Development Environment, a program that usually includes a text editor specifically geared toward program source code, an integrated project manager to keep track of what files are part of your program, some kind of parser for error messages from your compiler, easy ways to call up your compiler and debugger, and possibly similar tools. It’s a programmer thing, you wouldn’t understand. 😉 )

About ten years ago, I was forced to drop Borland C++ and switch to Microsoft Visual C++, because Borland’s compiler simply didn’t support a feature that my project at the time required. It was a very traumatic experience… I’d been using Borland’s compiler products ever since college (Turbo Pascal, Turbo C, Turbo C++, and Borland C++), and I was comfortable with them. Even more, I liked them, as a company, as much as I disliked Microsoft… their no-nonsense license agreement (you could use its products “just like a book”; you were allowed to make multiple copies of a program, as long as only one copy was in use at any point in time) was very innovative and fair, and that I found it impressive might give you some idea of the state of software licenses at the time.

But Borland’s products, preeminent for fifteen years or so, had been going downhill for a while. Each version was buggier than the last, and the aforementioned missing feature was the proverbial straw that broke the camel’s back. I switched to Microsoft’s compiler instead, and was obliged to switch IDEs too.

I hated every second of it. Eventually I got productive with the new editor, but I never learned to like it. Minor features in Borland’s IDE, like the ability to display a faint line at eighty columns so that I knew when I should move to a new line, and the ability to automatically eliminate whitespace characters at the ends of lines… MSVC just didn’t support them. Some of these were politically motivated (you weren’t supposed to care about the number of characters in a line, that was text-mode thinking, nevermind the fact that different computers had different maximum resolutions), others were arrogant assumptions (if you put a space there, even accidentally, we’re going to keep it forever because you must have meant it), still others I never figured out the reasons for. And there were enough of these “minor features” missing from MSVC that I keenly felt the difference. I probably could have learned to write customizations for it that would have made up most of the lack, but I had too much real work to spend time on that. And you pretty much had to use an IDE to write Windows programs, at least the Microsoft way — if you didn’t, you were reduced to a slow and arcane method of creating text files that described the visual “resources” of your program (dialog boxes and the like), which was even more painful. (The excellent and cross-platform wxWidgets library solves that now, in the way that I’ve always wanted things to work.)

Fast-forward to last year, when I switched to using Linux full-time. Since MSVC doesn’t run under Linux (of course), I was obliged to switch IDEs again. As mentioned at the time, I ended up using Eclipse. It’s fully cross-platform, and works with any compiler, so in theory I would never again be forced to switch environments, even if I switched operating systems.

I don’t really require all that much from an IDE. I just want a decent editor, a very basic project manager, an easy way to go to the lines that the compiler is complaining about, and (the number one requirement) that it not get in my way. Eclipse, with the CDT plug-in, did most of that… the editor had a few quirks that I didn’t care for, but it seemed at least as good as MSVC. Until I started using the Boost libraries very heavily in Project X. Eclipse, written in Java, was just too slow… it spent more time “scanning” my files, when I tried to compile them, than it took to actually compile them. And it wouldn’t use the second CPU core to do it, allowing the compiler to use the other one to simultaneously compile the code.

Last week, all of this came to a head when I started working on a new portion of the project, and realized that I was going to have to recompile (for testing) a lot in the near future. I decided that the time spent looking for, and learning to use, a new IDE would be more than made up for by the potential savings in compile-time.

I also wanted whatever I was using to be open-source. I have no problem paying for software (I’ve got several shelves dedicated to the for-pay software that I’ve bought, and I’ve written for-pay software for nearly a decade), but the company that makes it has complete control over it — if it dies or decides to kill off the package, you’re stuffed (there can never be any more updates to it, period), and if they get some nut in charge that has a different sense of what is esthetically pleasing, you get the dubious benefit of his changes, like it or not. Thanks but no thanks, I’d had enough of both with Borland. At least with open-source software, I can continue to update it if I don’t like how slowly it’s moving, or the direction that a later version is taken.

Anyway, the three top contenders, after a bit of research:

KDevelop. Pros: highly recommended, multiple language support, extensible via plug-ins. Cons: Linux-specific, no simple way to support the Boost::Build system that I use, and I have a personal and irrational bias against KDE. I didn’t even want to try it until I’d exhausted the other alternatives.

Anjuta. Pros: also highly recommended and extensible, with multiple language support, and GNOME-based. Cons: also Linux-specific, Boost::Build only supported via a make-based hack. I actually installed this one and gave it a whirl, but when I tried to make a project with it so that I could test it out, it immediately demanded that I install something else first, so I put it off.

Code::Blocks. Pros: highly recommended, extensible, fully cross-platform using the wxWidgets library, can support Boost::Build with minimal settings changes. Cons: C/C++ only, not available via Ubuntu’s repositories. It’s labeled version 8.02, but that’s misleading because it’s using the Ubuntu version number system. It’s actually only on its second major release; the project is about three years old, and its youth shows in a few areas that aren’t as polished as in other projects — such as, when you try to compile a program and come up with errors, and edit the file to fix the first one, going to the next error takes you to the line number that it was originally on, rather than the one that your previous editing moved it to.

Nevertheless, it fits my aforementioned criteria — especially about staying out of my way so I can do my work. It has several of the minor features that I haven’t had since Borland’s compilers, and a few unique ones that I’m rapidly coming to like as well.

So the search is over. I’ve decided to stick with Code::Blocks, at least until I find a darn good reason to change. Maybe I’ll even find some time to contribute code to fix some of the unpolished edges, we’ll see.