Programming Tools

I intend to return to daily blogging within a few weeks, but I’m going to surface temporarily to talk about programming tools.

It didn’t take long, working on Project M, before I realized that my software development tools needed an upgrade. First off, bug-tracking software. I didn’t have any.

With Project Badger, I needed it, but didn’t realize that I did. I managed to muddle through by keeping a text file of open issues, a very detailed revision history in the program’s documentation for closed ones, and extensive e-mail archives. It wasn’t pretty… among other things, it wasn’t very good for keeping track of ideas for new features, so I tended to implement them on an as-needed basis, without much long-term planning. But it did the job so far as my customers were concerned, and I didn’t know of any better way.

When BigCo bought the company, I was introduced to their bug-tracking software. Their crap bug-tracking software. It got the job done, but it was obviously designed more for keeping track of programmer time for accounting purposes than anything else, and it was painful to use. Nevertheless, it opened my eyes to the possibilities, and after some time and research, I decided to recommend Fog Creek’s FogBUGZ for our team instead.

FogBUGZ worked, and worked very well indeed. We’re still using it. But of course, the license for it belongs to BigCo, not my company, and I needed something for Project M and any new projects I came up with. I really like FogBUGZ, but my company budget doesn’t presently stretch to cover FogBUGZ price. I looked at several free alternatives, but it didn’t take long to realize that they were universally craptastic, so I started looking at lower-cost alternatives.

I finally decided on Atlassian’s JIRA. It has a 30-day free trial, I could set it up locally on my Linux system to try it out, and best of all a “starter license” (which is plenty for my current needs) is only $10. A year. So I loaded it up and tried it out.

It wasn’t an entirely smooth transition, but once I got up to speed on it, I found JIRA to be very capable. Not quite as polished as FogBUGZ in some respects, but a little more polished in others. It does the job, and does it well, so I happily paid my ten dollars.

Next up, I needed something to put it on. I’d originally installed it on a virtual machine on my laptop system, but that stretched the laptop’s capabilities a little further than I like. A visit to our local Best Buy produced an el-cheapo desktop machine, which now resides in a corner of our office, sans keyboard, mouse, or monitor. It didn’t take long to put a copy of Ubuntu Linux on it, and it now supports both an instance of JIRA and the company’s Git source-code repository. For security, it’s tucked away behind our firewall; the only Internet-facing evidence that it exists is a single non-standard Secure Shell (SSH) port, configured to allow access solely via public-key authentication, by which I can tap into it whether I’m at my desk or twelve time-zones away. Have I mentioned that I really love technology? 😉

A few weeks ago, I realized that I also needed a better build system. I’d been using the build system that’s part of the editor and development environment I’m presently using, but as Project M gets larger, its limitations have become progressively more apparent, and progressively harder to get around. When I realized last week that I needed to refactor the project into several modules, and the amount of pain that I’d have to go through to do that, I decided it was time to grit my teeth and make the switch.

Unfortunately, I didn’t know of a viable alternative. I knew I could get the venerable “make” program to do it, but I’ve written and maintained makefiles before, and without non-standard extensions they’re a real pain to keep up to date. There are a number of make-style replacements too, but which ones are even worth looking at?

I finally decided on SCons. Most make-style programs have their own mini programming language, but SCons takes that to an extreme — it uses a real programming language, Python. That’s what decided me: it’s not perfect, but with the power of a full programming language behind it, it provides all the flexibility that I could possibly need. It took a couple days to get high enough on the learning curve to convert Project M to it, but it’s pretty much done now, and it’s very nice.

I’m still looking for the perfect programmer’s editor, but not too seriously. I’ll probably end up writing my own some day, but there’s too much else to do right now. For the moment, I’ll have to be happy with what I’ve got.

One last note. I had reason to use Subversion again tonight. It has been a couple of years since I’ve used it much, and I had to do a lot of fumbling around before I finished what I was doing. Git is so much more advanced, and easier to use, that it just plain ain’t funny. Joel Spolsky had a point last year.

Scammers ahoy! (NSFW for language)

I’m busy, so I shouldn’t be writing this, but it’s so funny I can’t avoid it.

I got a call about an hour ago. The caller ID said “Unknown Name, Unknown Number.” Background noise of a busy call center, so I’m thinking a survey or a telemarketer. A survey I’ll just politely decline to take. But if I’m bored and feeling nasty, and a telemarketer doesn’t immediately take no for an answer, I’ll play along with him to waste his time, drive up the costs, and keep him occupied so he can annoy fewer other people (you’re welcome). And if I’m lucky, it’ll be a really pushy one, and I can indulge in some profanity, which I normally avoid. Loud profanity. Very cathartic, I highly recommend it.

As I was bored and feeling nasty, I really hoped it was an annoying telemarketer.

I’m taking mental bets for and against that, while simultaneously repeating “hello?” several times, when a guy with a very thick accent (from India, I think) came on. I could barely understand him, but eventually he got across that my computer was infected, and they were calling to fix it.

It’s not often you can bet all sides of an issue with yourself and still lose. I’ve hit the jackpot — this is no mere telemarketer, it’s a scam artist! (No one calls for that kind of thing. Not your ISP, not Microsoft, and not some third-party company. Period.) I decided to play along and see where it would lead.

He walked me through finding the Windows key, then calling up the Run dialog. Then he had me type “eve”, but after that I couldn’t understand what he was saying, so he passed me to a second person (also with a thick Indian accent, but more understandable). He had me erase that and spelled out “eventvwr” for me, and it was ridiculously funny how hard it was for them to even get that far. That’s safe enough to run, so I kept playing.

He had me look in the Application and System logs for any errors or warnings, and tried to have me read him something from one — I think it must have been the event code, but I couldn’t understand his repeated instructions, so he decided to move on to the next line of the script, and said that they meant there was a virus in my computer.

After a long spiel, most of which I couldn’t understand, he told me that one of their technicians would log into my computer and fix it.

Uh-uh. Only a very select group of people are allowed into my computers, and only via heavily secured channels. If I’d known these guys were going to call, I’d have set up a honeypot system for them to waste their time on, but I was using one of my development systems. No way I was letting anyone in there.

“No,” I said, “I don’t think so.”

“Why not?” he asked. This was a third person, who had taken over the call while I was going through the Event Viewer window.

“Because you’re a scammer.”

“Why you say I’m a scammer?” He doesn’t sound shocked or affronted. I guess he’s still hoping to salvage something from the call.

“Because,” I said with malicious sweetness, and still in a reasonable tone, “nobody calls about this kind of thing, you fucktard.”

“You are an idiot. How much you know about computers?” Still no real emotion in his voice, he sounds bored if anything, but he starts talking a little faster. I have a very strong mental image of him sitting back in a swivel chair and crossing his legs while fidgeting with a toothpick, a look of disgust and disdain on his face. I’m not sure why.

“I’m a software developer. I know exactly what goes on in them. I’m also an electronics technician. I can build one. From chips and blank circuit boards, if necessary.”

“You know nothing.”

Oh, this was getting funny! I’ve produced my credentials — legitimate ones too, I am a software developer, I did work as an electronics technician for many years, and I really have traced and etched my own circuit boards from blanks and built a (really, really simple) computer from them — and he’s trying to claim that compared to him, I know nothing?!?!

“You are an asshole. You are an idiot,” he continues. “Are you an asshole?”

“To people like you, yes I am.” Still maliciously sweet and reasonable.

We traded insults back and forth a few more times, me getting more amused and him getting more angry and frustrated, until he realized that insulting me wasn’t getting him anywhere either. Then he hung up.

Man, I really wish I could have recorded it. It was very cathartic. And I didn’t even raise my voice once. Any telemarketers who call today are going to get a very polite and contented person, even the pushy ones.

Google pointed me to a British article on this exact scam from the middle of last year. According to the article, I should expect the scammers to flood this entry with broken-English “testimonials” claiming that they fixed some problem for the comment author. I might even leave them up to be mocked.

This kind of thing isn’t so funny for people like my sister-in-law, who might be taken in by the ploy, though. If I could figure out a way to stop it, I’d do it in a heartbeat.

Busy, busy, busy…

…so busy, in fact, that I’ve decided to take a blogging hiatus.

I’ve written a post a day for nearly two years straight, missing only a handful of days. I like that pace, and I plan to resume it, but not until I’ve got the bulk of Project M finished. That may be a few weeks or a few months, I won’t know until I’m a lot closer to that point.

I’ll still post on occasion if I find something interesting, but I haven’t had a lot of time to keep up with the news recently. (In fact, I’ve got nearly two months’ worth of news backed up to scan through… my blog entries have been relying on a cache of articles that I’d previously bookmarked as comment-worthy, which is nearly exhausted.)

For those keeping score at home, Project M is going quite well, but ridiculously slowly. In my previous projects, I sometimes took design shortcuts that I later regretted, and rarely tested things as well as I should have. This time, I’ve committed to designing the bones of the program right, from the ground up,1 and writing automated testing suites for any components where they make sense. And any code that I come up with that looks usefully reusable is getting put into a library of cross-platform classes and functions, with at least a minimum of documentation, which will make it much easier for me to write new programs and much easier to get others (or myself, after time away from it) productive on the code in a minimum amount of time.

It’s a lot of extra time and effort up front, but it also means far fewer bugs later, and that I shouldn’t have to go back to redesign and rewrite large portions of code in order to add new features. That means less time later that I’ll have to spend on older programs, and more time I’m free to work on new ideas, which should directly improve the bottom line in the long run.

Software developers rarely get the opportunity to think long-term and do code right. Management always wants things done yesterday, and it doesn’t matter how much of a nightmare the code is behind the scenes because neither they nor the customer will ever see it. There are cases where that’s necessary, but I believe that investing extra in the design step will pay off big in the long run. We’ll see.


1 For instance, I’ve spent the last several weeks coming up with a correct and easy-to-use design for handling Unicode strings in various encodings. One that makes it all but impossible to confuse, for example, variables holding ASCII strings and ones holding UTF-8-encoded strings, even though the two use the same underlying storage type. And makes it trivial to convert as needed between ASCII, UTF-8 for Linux and for storing Unicode in single-byte strings, the UTF-16 used for Windows Unicode, and UTF-32/UCS-4 for single-symbol-per-character string manipulation. That kind of design work fascinates me, and the classes I’ve come up with are a true joy to use.

This Year in Spam

The amount of blog-spam that Geek Drivel has gotten recently is ludicrous. Since late June (when the statistics were last reset), my anti-spam software has blocked nearly 42,000 spam messages (of which I saw and had to personally deal with maybe fifteen — that software is good). Roughly 15,000 of them came in between then and the end of October. The other 27,000 have come in since the beginning of November — i.e. in the last two months. That’s roughly 450 (failed) attempts a day, up from about 120 a day before Hallowe’en.

I don’t know what’s behind the near-quadrupling of spam attempts, or whether it’s linked to the massive amount of e-mail spam that everyone seems to be getting recently, but it’s looking more and more like a new botnet.

I really wish people would secure their systems so that botnets couldn’t happen. I really wish that software developers would secure their programs so that malware cretins couldn’t exploit them to break into systems. I really wish the malware guys would just go play real-life Frogger (very badly). But mostly, I really wish that 2011 will be the year that the Internet becomes spam-free while staying completely usable.

Of course, I don’t expect any of those to happen.

“The United States of Autocomplete”

One of the first things GoddessJ complained about, when she got her new iPad for Christmas, was that the autocomplete kept adding a ‘y’ to the end of her name. I call her ****y, and her family; no one else is allowed to, and she doesn’t refer to herself that way either. I had to tell her that she could turn off the autocomplete feature to stop it. Autocomplete might occasionally be useful for people who can’t type and don’t want to learn how, or on certain devices like phones, but mostly it’s just a royal pain in the arse, in my opinion.

On the other hand, Google’s autocomplete can be amusing. Here’s an example of what comes up when you type in the names of each of the states. My sister and her husband lived in North Carolina for a time… and yes, as the map says, they worked for a furniture manufacturer. 😉 (I’m not sure why Illinois comes up with “lottery” though. Maybe there was a huge jackpot there recently?)

Here are many other examples of what happens when the collective subconscious of an entire nation get hooked up to the Internet. It ain’t pretty… though it can be pretty funny. 🙂

“Scientists figure out structure of enzyme that causes plaque to stick to teeth”

Interesting work, with even more interesting potential uses. Though as the comments point out, it’s probably not enough to stop cavities (or “caries,” in dental terms) in the long run.

From comment #17, another interesting tidbit: there’s a sweetener called “Xylitol” that not only doesn’t add to tooth decay, it actually kills off the cavity-forming bacteria.

“Leading PC manufacturers dropping VGA support by 2015”

Technology marches on — and leaves laggards behind. One of my three remaining external monitors only has a VGA port; two others that I only got rid of earlier this year1 predated any kind of digital connector. Fortunately there are adapters. 🙂


1 I got rid of them only under protest. They were old desk-hogging CRT monitors, one2 of which was my first 17″ monitor, circa 1990. I wasn’t using them, but they still worked just fine, within their limitations, and I had fond memories of that older one. Despite this, my wife insisted that we get rid of them when we moved, and I had to reluctantly agree that I couldn’t foresee any circumstances when I might use them again.

2 It still had the OS/2 sticker that I’d proudly put on it when OS/2 2.0 was released. Yeah, I used OS/2, from its 2.0 release in mid-1992 until late 1995. During those years, it was a much better platform for writing DOS programs than DOS was, even with DESQview and QEMM (which I used for a long time before that).

Asymmetrical Capacitor “Lifters”

Here’s my Christmas present to my readers: there’s an phenomena which has not yet been fully explained, called the Biefeld-Brown effect, that apparently produces a gravity field directly from electricity.

The effect was discovered early in the twentieth century, but abandoned due to technical limitations and all but forgotten, which is why I’d never heard of it before.

The lifting effect had been theorized to come from something called “corona discharge,” which would require an atmosphere and make it useless for space propulsion. But a few years ago, experiments at NASA’s Marshall Space Flight Center (Huntsville, Alabama) strongly suggested that although that may be the greater part of it, the effect was also actually warping gravitational fields.

That’s thrust, space enthusiasts — thrust that requires no reaction mass whatsoever.

And that’s huge news. Why? A space vehicle can only carry a limited amount of reaction mass. If it can’t refuel (as most of today’s satellites cannot, for instance), it will eventually run out. For a satellite, that means that what goes up, must eventually come down — with a crash.

So far as I know, the only other method of propulsion we’ve got that requires no reaction mass is the ion drive, which produces only a very tiny thrust. It can be useful if your craft is in no hurry to get where it’s going, but for manned space travel, it’s far too weak to be viable. I don’t think most satellites can make use of it, they’re too heavy for its thrust to make an appreciable difference to their orbits.

But this apparently produces a stronger thrust than an ion drive can, which may make it a viable contender for future space vehicles. In fact, the idea of using gravitational warping for thrust has also been used in science fiction since at least 1972 — the fictional “KK drive” in Alan Dean Foster’s Humanx Commonwealth universe is described as producing a huge gravity well in front of the ship, which drags the ship along with it as if it were falling toward a planet that is constantly moving away from it. Which always struck me as kind of like lifting yourself up by your shoelaces, but in theory it should work.

And yes, the effect can also apparently be used to produce antigravity. 🙂 Though only for very light things, at least so far.

For science geeks like me, this is a good time to be alive.

The most exciting phrase to hear in science, the one that heralds new discoveries, is not ‘Eureka!’ but ‘That’s funny…’
— Isaac Asimov