looking for a few good ideas

  amongst the irregular verbiage


miscellaneous thoughts from the bytestream

Thank You Derek Crudginton

This is exactly what I needed to know:

Installing Oracle 10g r2 on Solaris 5.11 is painless except before you ./runInstaller you have to edit the ./install/oraparam.ini and change line 42 to something like:


Then it will pass the first check and continue with install.

Essential Software List 2007

Time for a round-up of the Free and/or Open Source tools I've been using on my work laptop.

1. Eclipse 3.3 (IDE, Java and generic)

I've been dipping into various versions of Eclipse for Java development for years. Its plugin architecture is brilliant (see below). Out of the box it handles Java development as sweetly as any "Professional" edition out there. It also has a built-in editor for Ant build files (an XML dialect) which I'm finding particularly handy right now. One feature I really appreciate is the ability to create a "generic" project that basically just lists all the files in a directory, regardless of what type of file they are. Very handy for my current work which involves a series of versioned directories containing  various flavors of text files. Which brings me to:

2. Afae Plugin for Eclipse

"Afae" stands for "Another Freebooter's All-purpose Editor". It doesn't appear to be under active development and has stalled at version 0.9, but don't let that stop you from using it. It adds a TextMate-flavored text editor to Eclipse that allows me to edit .sh, .bat, .sql, and other types of files in syntax-colored goodness. It has a bunch of other features that I'm not using (such as a "post to blog" button on the toolbar?) but I've found the text editing to be solid.

3. DiffMerge

I've mentioned this before. Since then it is up to version 3.1 but it is still free, and although other file comparison tools probably have more features, I've grown to like this one.

4. AstroGrep

I have long ago given up on making Windows Search find anything on my file system. How I long for the File Manager applet in FoxPro for DOS 2.0. That thing was fast. AstroGrep is a GREP utility for Windows, with a simple UI on top. It's fast, and I can search the contents of text file with regular expressions. On my latest project I have found it invaluable.

My Office Bookshelf

Those of you curious about what I've been up to lately regarding my working day may be interested in perusing my office bookshelf.

This is a lot of fun.

Advancing Backwards

I've posted a new article on the Spacefold site: VFP 9.0 Reporting System Fundamentals. (I couldn't let L have all the fun.)

In other news, I've un-installed Office 2007 (Word, Excel, and PowerPoint) and reinstalled the 2003 versions. Ah, it feels so good to go back. So much snappier.


So, what makes an "enterprise" application architecture?

As far as I can tell, it's the 'eee's after the dollar sign.


DiffMerge is a tool recently made freely available from SourceGear. If you are not a programmer then you probably have no need of this, but if you do find yourself needing to compare two different versions of source files, then I recommend this tool

I used WinMerge for a while, but the other day I needed to do the file comparison thing and I found that on my laptop, not only had I not installed WinMerge, I didn't have an installer conveniently located in my c:\downloads folder either.

Since I regularly read Eric Sink's Blog, I knew about DiffMerge, and so I gave it a try.

It's excellent. It blows WinMerge out of the water. Recommended.

Expression Web vs Visual Studio 2005

I'm happy to know that Visual Studio .NET 2008 ("Orcas") is going have the HTML designer from Expression Web built-in. It's much better than the editor in VS 2005.

Unfortunately my copy of Expression Web appears to be missing the third checkbox in the CSS options dialog, shown below:

Can anyone tell me where to find it?

Putting it all together (V)

This series of posts began here.

Previously I covered the design of some standard controls for virtual hardware. Now let's put them together into a mockup of a software synthesiser. I chose to revise Arturia's CS-80V because it's the greatest synth ever. Here's the controls for one voice module:

(Click on the image to zoom)

Things to note:

  • The toggle buttons that enable the high and low pass filters on the voice are colored green, to match the filter level sliders.
  • The current input focus is located on the VCF initial level (IL) slider, indicated by the red dot. If you pressed the TAB key at this point, the dot would move to the attack level (AL) slider.
  • The range of the PWM percentage slider is 60-90%, reflected in the displayed value of the control. At its minimum setting, the slide shows a value of 60.
  • Likewise, the VCA sustain (S) slider shows a maximum setting of "10", while the release slider is the default 0-99.

That's all I planned to say for now on this topic. If I think of anything else I'll continue the series. Thanks for reading.

Postscript: I implemented the mock-ups using Visual FoxPro 9.0. The controls are more-or-less fully functional (even if the control panel itself doesn't do anything!) If you would like to experiment with the controls, you can download the VCX library  here.

The Toggle Button (IV)

This series of posts began here.

Last time I looked at the design of a value slider control. Another useful control that should be made a standard UI component in virtual hardware is the toggle button. This should be substituted for situations where checkboxes and option buttons (radio buttons) are space-consuming or aesthetically displeasing:

Toggle buttons can be clicked to switch between "on" and "off" states. If you group two or more of them together, you can use them to switch between many options. This design allows for color to be used to highlight contols that are related in function, and it shoulb be obvious what state the control is in and whether or not you can change the value.

Next, we'll put it all together in a mock-up of the CS-80 voice control panel.

The Value Slider (III)

This discussion began here, and continued here.

A modest proposal: Virtual audio hardware manufacturers should define and agree to use some additional standard controls for their user interfaces instead of inventing their own widgets. It's Anarchy in the UI out there... the causes for it are reasonable: 1) the standard dialog controls specified by OS vendors such as Apple  and Microsoft are boring, incapable, or not compact enough; 2) they are trying to distinguish their products from others; 3) their intent is to make their software mimic the UI of the original hardware that they are modelling.

This discussion is an attempt to address reason #1. I think reason #2 is not valid. Guys, make your products excellent and usable, and believe me, you'll be distinguished from those that don't. One way of making your products usable is to use standard controls in your editing interfaces!

Arturia's CS-80V is a case in point for reason #3. The software mimics the original front panel of the Yamaha CS-80 synthesiser religiously, and looks great. Except when you try to edit a patch, and then it's horrible.

There's a fourth reason: multi-platform support. It is very hard to use standard UI widgets when you are also trying to write software for Macintosh, Windows, and perhaps Linux as well. Much easier to roll-your-own controls. That's no excuse to ignore standard behavior, though.

I think there is room for a middle ground, where virtual hardware interfaces can be designed to look good, resemble the source hardware where appropriate, but use standard controls to improve usability. All we need is a couple more standard controls: a Value Slider, and a Toggle Button. In this post I'm going to look at how a Value Slider control could express the principles of UI I established last time. Later on I'll look at the toggle button.

The Value Slider

Sliders already exist in most standard GUI toolkits, but they are not ubiquitous, and I don't want to be constrained by their default specified appearance. So here's ours:

It consists of four main visual components: a perimeter rectangle; a colored bar proportional to the value of the control; a handle widget to grab with the mouse pointer to set the value; and a label that displays the value in text form.

When the slider is adjusted with the mouse, I recommend that a tooltip or similar metaphor is used to display a more precise value (see above).

So the control expresses its value in three increasing levels of detail: 1) the size of the colored bar; 2) the value displayed in the control, and 3) the more precise value displayed in the tooltip.

Color and Clarity
We've got some flexibility here. We can decide not to show the text representation of the value if we like, or move the text display to the other end of the control when the handle would otherwise obscure it:

We can use color to relate and distinguish controls. We are also not limited to a horizontal orientation:

Here I am using the red and green color to distinguish between the level of high-pass filtering applied, and the amount of resonance in the filter circuit.

The slider on the right is an experiment to see how it handles the concept of +/- deviations from a center value. This is an important type of value editing in virtual audio hardware and our control should be able to express it clearly.

Typically, UI controls can be in one of a number of states: Enabled and editable; Disabled; and Read-Only. Our control should express its state visually:

The difference between disabled and read-only is subtle. Both states are not editable, and the control should express this fact clearly so that a user is alerted to it and doesn't attempt to change the value. However a read-only control is allowed to receive the keyboard focus (more on this below), whereas a disabled control will not.

One problem common to many applications, not just virtual hardware implementations, is that high-resolution displays tend to make everything look smaller on the screen, unless they've been explicitly written to deal with this problem. Our value slider control should be designed in such a way that it can be scaled easily:

Controls should not respond to mouse-wheel events unless they have the focus. That really needs to be engraved on stone tablets and placed in the temple of the whatever, high atop the thing. Take the following as an example: You're in Cakewalk SONAR 6.0, scrolling down the list of tracks, and an input trim control scrolls up underneath the mouse pointer. Suddenly, you're scrolling the value of the input trim control instead of the track list. (Note: they fixed this in 6.2)

On the other hand, if you click on a control, you should be able to use the mouse wheel to change the value. The control has to have an understanding of focus. Once a control has focus, you should be able to use the keyboard to change the value also. I suggest the + and - keys.

Some values need precise editing. In situations where dragging the slider does not allow for the necessary level of precision, you should be able to double-click the control to get to an editor:

Next up, I'm going to talk about the second proposed standard control, the toggle button. Should be simpler.

I Hate Knobs (II)

This post continues a previous discussion. Click here for the first in the series.

Having complained about the state of standards in user interface widgets in virtual hardware (soft-synths and FX modules) in the world of digital audio workstations, I will offer a list of design attributes that I consider important when designing a UI:

  • Clarity: Facilitates a clear representation of the current value  of the control.
  • Color: Supports the use of color to enhance clarity while retaining compatibility with a high-contrast display mode.
  • State: Supports clear distinctions between the following states: Enabled vs. Disabled; Read-only vs. Editable.
  • Scalability: Supports resolution independence (it must be easily re-sizeable).
  • Behavior: Provision of sensible responses to both Mouse scroll wheel events and keyboard actions (shows when the control has focus).
  • Precision: Provides for high-precision value adjustments.

These go somewhat beyond the standards as laid out in documents from Apple  and Microsoft (for example), but I think there is some room for inovation here, especially in this area, and especially on the Windows platform. Next, I'll propose some additional "standard" UI controls and how they might be used in a theoretical peice of virtual hardware.

This discussion continues here.

I Hate Knobs

Here begins a series of posts discussing the state of the art of User Interface design in music software.

I'm annoyed at the current state of visual representation of virtual instruments such as VST and DXi synths and effects. For example, here is what the Vintage Channel 64 (VC-64) effect looks like when launched from inside Cakewalk's SONAR 6:

You can click on this image for a larger view.

This user interface (UI) is simply hideous. Form and function have been sacrificed to looks, in the sense that it's appearance is mimicking a physical piece of equipment. Trying to adjust the parameters with the mouse is difficult and error-prone, and I am not brave enough to try using the keyboard - I don't even know how I would do that. (There is a caveat here that this particular module is bundled with SONAR 6 Producer edition and there is a theory that the interface has been made deliberately hard to use so that people are pushed in the direction of buying the commercial version of the software. I believe the original UI of the commercial plug-in on which this version is based can be seen here. It's a little better.)

Here's another example: a section of the UI from WaveArt's TrackPlug module.

You can click on this image for a larger view.

This is somewhat better, in that it doesn't try to be "photo-realistic" in the appearance of its controls. Certainly the readability is much better - you can easily see what value each control is set to. However, I still find that this style of knob is tricky to use with the mouse. How is each value adjusted? Do you click, hold and drag? In which direction?

I admit to liking the graphical representation on the right side of the screen shot. I haven't used the plug-in, but I assume you can grab the bright orange nodes with the mouse and move them around. But I'm still guessing.

Here's an example of "soft hardware" that I really enjoy the look of:

You can click on this image for a larger view.

TCElectronic's DVR2 module is specific to ProTools, I believe, so again I haven't had the pleasure of trying to interact with it. But while I love the subtle use of color, I am resigned to having to become familiar with another style of "look and feel" of the UI control components. Are those round things buttons or toggles?  How do I adjust the value of the Hi-Cut frequency? Which widgets are read-only and which ones are editable?

One of the reasons I find this confusing state annoying is that the problem has been addressed by software development frameworks for years. We take it as read that any development toolkit will provide a set of standard control widgets that meet certain requirements of a UI,  a certain level of completeness of design and function that remove the burden of ease-of-use from the developer.

I will conceed that perhaps music software such as FX processing modules and digital audio workstations may bring additional UI requirements that standard development environments do not find necessary to support, but why do these custom UI widgets seem to use this as an excuse for total UI anarchy?

In future posts I am going to discuss standard UI requirements and make a modest proposal: a set of standard UI widgets that support both conventional UI needs, and the requirements of attractive "soft hardware" implementations.

This series is continued here.

An alternative to checkboxes for logical fields in Grids

I've never really been happy with how checkbox controls look when contained in Grid columns, displaying logical values. Lately I've been using the method described below.

Given a table with a logical column such as:

create cursor FILMLIST values ( VIEWED L, TITLE C(50) )

I use an expression for the grid column instead of referencing the table column name directly:

Alignment=2-(Middle Center)
ControlSource = iif(FILMLIST.VIEWED,"ü"," ")

The default textbox control in the column will display the logical value as a tick mark (the WingDings character for ü):

This is all you need to do for a read-only column. For my users, I make the column editable by adding some code to the textbox's .DblClick() event:


This toggles the logical flag when the user double-clicks the mouse in the column - and handles possible NULL values as well.

As an exercise for the student, try adding support for toggling the flag using the keyboard SPACE bar.

Windows Reveals Too Much

My current laptop is running Windows XP Media Center Edition. It came pre-installed, it wasn't really my idea of a good time. (At the time, my understanding was that it would come with a free upgrade voucher to Windows Vista Business. This turned out to be Vista Home Premium instead. Either way, Vista will never be installed on this machine.)

So MCE doesn't really allow you to "lock" your desktop. That feature isn't in the OS. Instead, when you attempt to lock the desktop with the WinKey-L combination, you get the "switch user" screen. OK, maybe not so bad, you still have to enter a password to get back in to the desktop.

What I find very annoying is that you can see how many unread emails the user has. Even if Outlook isn't currently running! It's things like this that make me want to switch to Thunderbird or some other non-MSFT email client.

Considering I want to leave my laptop open, but locked, in my cubical while I am away from my desk, I really don't like having information spewed out like this. It gets worse: if you hover the mouse over the current user icon, you can see their email address. Who thought that one was a good feature to implement?

I know, I know, the glib answer is that I shouldn't be running a non-business grade OS on a business laptop. Windows XP Professional would give me the security I want. It's my fault for deciding I could live with Windows XP Media Center edition on my work machine. These are the trade-offs.

Oh Jeeze

Why do I do this? After I promised I would never install another peice of Microsoft Software on my laptop if I could help it. I'm attempting to install the Expression Web upgrade (replaces FrontPage 2003):

Can someone please tell me why it doesn't like OneNote? I like OneNote. I use it a lot. Please God tell me this is an error in the message string table and nothing to do with some kind of horrible incompatibility with Office 2003.

[UPDATE: It installed fine. It didn't kill OneNote. It must be a visual error only. Probably meant to say "Microsoft Office FrontPage" or similar.]

All entries in Computers:

Thank You Derek Crudginton
Essential Software List 2007
My Office Bookshelf
Advancing Backwards
Expression Web vs Visual Studio 2005
Putting it all together (V)
The Toggle Button (IV)
The Value Slider (III)
I Hate Knobs (II)
I Hate Knobs
An alternative to checkboxes for logical fields in Grids
Windows Reveals Too Much
Oh Jeeze
Windows Meh
The Aero Program Managers are on crack, apparently
ARGB values using binary manipulation functions in VFP
What's wrong with Vista
SYS(16) and the Debug Info checkbox
Sounds like WGA is getting worse and worse
End of an experiment
Observations on Right-aligned labels in VFP9 Reports
What feature?
Not so fast
Scratch that. Rewind.
Unexpected Critical Error
Taste and compare
Windows Vista first impressions
FONTMETRIC(), TXTWIDTH(), and screen DPI in Windows
Tie a UI Ribbon 'round that old menu tree
Spanish Article
Structured error handling with NEWOBJECT errors
Windows Genuine Validation My Arse
Extending the Report Builder's Multiple Selection dialog
Inno Setup is a sweet piece of software
Image manipulation and storage in C# - part 1
Why do report layouts in VFP9 need wider field/expression controls than in VFP8 and earlier?
Pessimism is Positive
Techniques for alternate Report Previews in VFP 9.0
COM Interop
VFP: Exploring and Extending Report Preview
ASP.NET and impersonation trouble
Google, IntelliTxt, and the nature of evil
VFP OleDbDataReader and returning COUNT(*)
VB vs C#
DevCon Report
You're Welcome
Spam Report for July
Leveraging CityDesk's keywords
But we knew this already
Obfuscated Spam: Welcome
USB conflict?
Catching up at play
Our own personal cloud
The Spam Experiment - Results
Working at WonkaTech
Spam Experiment so far
HotMail and Security
Audio Hard Drive Hell
A static variable trap
Why static methods that instantiate
Why Napster is bad
When to use Interfaces
.NET and the real world
Introducing the Visual FoxPro Debugger
Programming for multiple back-end databases in Visual FoxPro
Object-oriented menus in Visual FoxPro
Manipulating the Windows Registry in Visual FoxPro
Programming events using the FoxPro Library Construction Kit