Skip to content
Archive of posts filed under the software category.

A New Article Series: Ripsaw

Several years ago I wrote a Windows application called “Ripsaw” that implemented the basic functionality of the Unix tail utility in a graphical application, with a few twists of my own. I had intended to release the application as an open-source project, and although I still use the tool quite a bit I never got around to giving it the necessary polish for a public release. I’ve only shared it with a few friends and co-workers.

I’ve just downloaded Beta 2 of Microsoft Visual Studio 2010, and I’ve decided to create a new version of Ripsaw from the ground up so that I can become familiar with the new IDE and compiler. Besides being a chance to finally get Ripsaw right, this will also be an opportunity to create a series of articles on how I develop a complete application, from the first ideas through design, implementation, testing, and release. I’ll walk you through all of the design decisions and trade-offs, the problems I run into along the way, and the development methodologies I use.

I would really appreciate your feedback, ideas, suggestions, and criticisms. This is going to be fun!

Share

Does Your Company Need a Consultant?

My current project is coming to an end, and although I’m looking at a couple of new projects to pick up, I thought it might be prudent to update my resume. If my skills look like they might be a match for a need you have in your company, please let me know!

Share

The Hitchhiker’s Guide to UI Design

Larry Osterman talked about Windows 7 user interface changes in a post today, and it generated a minor comment storm, in which I participated. He talked about some buttons that used to be obvious buttons in Windows Vista, but which were made “flat” in Windows 7 so that they’re no longer obviously buttons until the user hovers over them with a mouse.

I gave my opinion a couple of times, coming down on the side of non-flat buttons. The whole discussion, though, reminded me of a couple of passages from The Hitchhiker’s Guide To the Galaxy that describe the design of the ship The Heart of Gold.

The cabin was mostly white, oblong, and about the size of a smallish restaurant. In fact it wasn’t perfectly oblong: the two long walls were raked round in a slight parallel curve, and all the angles and corners of the cabin were contoured in excitingly chunky shapes. The truth of the matter is that it would have been a great deal simpler and more practical to build the cabin as an ordinary three-dimensional oblong room, but then the designers would have got miserable.

That sounds like everything I dislike about UI design these days, particularly in Flash and Silverlight apps where designers feel compelled to recreate UI widgets that behave almost, but not quite, entirely unlike standard widgets.

A loud clatter of gunk music flooded through the Heart of Gold cabin as Zaphod searched the sub-etha radio wave bands for news of himself. The machine was rather difficult to operate. For years radios had been operated by means of pressing buttons and turning dials; then as the technology became more sophisticated the controls were made touch-sensitive — you merely had to brush the panels with your fingers; now all you had to do was wave your hand in the general direction of the components and hope. It saved a lot of muscular expenditure, of course, but meant that you had to sit infuriatingly still if you wanted to keep listening to the same program.

That sounds a lot like where flat buttons are headed. In fact, it sounds strikingly like an iPod.

Share

An API is Forever

An API is an interface. Those of you that have worked with COM already know that once an interface is published, it can never, ever change. Ever. Not until the end of time. The reason is that some bit of code somewhere is going to be using that interface, and if you change it you’ve just broken that code. Of course, not changing an interface also means not deleting a portion of it.

Continue reading ‘An API is Forever’ »

Share

Useless Gadget Features

I guess I would never make it as the CEO of some electronic gadget company, because I would never dream of loading down every gadget with a web browser and a picture viewer. I love my Nintendo Wii; I’ve spent hours playing Mario Kart or bowling with the kids. I even got Wii Fit, though I use the Balance Board more for Shaun White Snowboarding (and get a better workout doing it). But I’ve never looked at pictures on my Wii. I’ve only browsed the web just to see what it looks like, and whether a couple of my sites were readable (not very).

So, I’m dying to know why gadget companies feel that it’s necessary to load down every product with useless stuff like this? If a professional geek like me doesn’t even bother to use these features, then who is using them?

I’d much rather see gadget makers spend some time and resources on the core functionality of their gadgets (do you hear me, phone people?) than on browsing, social networking, or photo viewing.

Share

Pre-emptive Snarkiness

It’s all about the sense of humor, people. First of all, read the “pre-emptive snarky comment” that I wrote in the earlier entry about the dragsens utility. It’s pretty clear that, first of all, I’m tipping my hat to Raymond Chen by even adding a pre-emptive snarky comment. Second, it should also be clear that I’m mentioning the size only because I’m trying to head off any snarky comments about it. Alas, that just doesn’t stop some people.

In my first comment to Raymond’s article I mentioned that it took me only eleven minutes to write the utility. That was the entire point of the exercise, really. If the utility happens to be useful as well, that’s fantastic. In fact, the reason that I bothered to take an extra 30 seconds and link in the C runtime was to make it easier to use. Just copy it to your favorite USB drive, and off you go. If you don’t have 84KB free on your drive for the ZIP file, then that’s still okay. You can download the source and VS project and build it any way you like. Not a problem.

So, despite the fact that I clearly stated that I was aware that I could make the utility very tiny if I wanted to take the time to do so (when I said, “Of course you could. So could I.”), someone still didn’t get it. I guess quoting me out of context, or perhaps even putting words in my mouth, is more fun.

If I wanted to make it smaller, perhaps I could dispense with the CRT altogether. Perhaps I could write it in assembly language. Who knows. It doesn’t matter. I just wasn’t inclined to take any more time gold-plating what I regarded as a very simple exercise. The utility does what it is supposed to do, with a very tiny investment in programming time. That’s all I was out to prove. I made the source freely available, with no strings, in case anyone wanted to tweak it to handle some situation that I didn’t think about, or perhaps wanted a different implementation (like setting the width and height separately).

As Raymond might say, I can’t believe I had to write that.

Share

Windows Drag Sensitivity Utility

Inspired by an article by Raymond Chen about how to correctly change the Windows mouse drag sensitivity, I wrote a quick utility called dragsens. It’s a small command-line utility that will allow you to change the number of pixels the mouse has to travel before a drag operation is initiated. Just download and unzip the utility, then run it at the command line, supplying a single parameter that is the number of pixels for the mouse to travel.

If you’d like modify the utility, or examine its source, you may download the Visual Studio 2008 project. If you just want the utility itself, you may download a ZIP of the executable.
Continue reading ‘Windows Drag Sensitivity Utility’ »

Share

Barcode Generator

More fun with one of my favorite languages: A barcode generator written in JavaScript that will create an EAN-13 barcode. The page is completely self-contained and uses no graphics or server-side code.

I’ve only tested the page in Internet Explorer 6, Internet Explorer 7 beta, and Firefox 1.5. I’m not going to target older browsers, but I am interested in hearing about problems in current browsers other than those mentioned above.

Share

The pbrain Programming Language

>I’ve been working really hard lately – 70 or more hours a week. Consequently, I haven’t had many opportunities for diversion. After staring at the same application all day, every day, though, it’s important to step away and give my brain another puzzle to solve now and then. One such late-night/early-morning excursion produced The pbrain Programming Language. This language is an extension of an extremely tiny Turing-complete language called Brainf**k (yes, the name contains a really, really bad word).

Update: A pbrain Compiler for .NET

Since I was halfway home with the interpreter, I decided to go ahead and write a compiler for .NET platforms.

Share

Updated MMP Mancala

>I’ve received a few complaints from people who downloaded my Mancala game, telling me that certain DLLs were missing. I’ve rebuilt the game and repackaged the installation file to include all necessary files. I apologize for this oversight.

Share