Well, it’s not March, is it?
I’ve been evaluating Boa Constructor. To be exact; I’ve spent much of the last two days deep within it, using it in anger since there is no better way that I know of to see how well a development environment works. And it’s nearly wonderful. Nearly but not quite, almost.
What it does have going for it is its completeness; in the one package you get Python and ZPT syntax highlighting, Zope and filesystem browsing, edit-run-debugging and most anything else you could want. For yanking Zope files off the server, hacking them about in a decent editor with an understanding of syntax, it’s excellent. The source Explorer is brilliance in a tabbed window, the self-building UML and Hierarchy views do just what they say on the tin. Much kudos to the developers. If I did wxWindows development, I’ll warrant I’d find it even more useful; perhaps one day.
But where it falls down, it falls down hard. I mean, the sort of thing that will make you scream and use words that get you Looked At by your loving spouse.
Let’s start with the keybindings. There may be a rationale behind their choice, some abtruse phiosophical system requiring unique insight of a shaman on peyote, or an open, uncluttered, left-field perspective that an old hacker like me is never going to have… but I suspect not. Okay, I can live with someone deciding that, say, the Gnome keybindings are the be-all and end-all of keyboard conventions, but BC isn’t even self-consistent. And what’s worse, it’s dangerous. Take Ctrl-U. In Python mode, it’s unindent. Unconventional, perhaps, but there it is – Indent is Ctrl-I (I for Indent, I assume) which matches the more common Tab. But in HTML mode (or more exactly, Zope Page Template mode), it’s “convert selection to lowercase”. If, like me, you’re someone who keeps HTML indented to track the various levels of tag and subtag, then you’re likely to select a block of text and do Ctrl-U to “unindent” it. The silent conversion of every uppercase character to lowercase is so visually subtle that you miss it, and then wonder what the heck it was that messed up all your lovely mixedCaseScriptNames.
And whilst I’m on about indenting… call me awkward, but I rather like to use two-space indents for complex code. BC is unforgiving in this respect – you follow its rules and be grateful, baby, leading to muttered curses while you struggle to work out how you can fix the jagged indentation in what was, before editing, a perfectly good method.
I could go on about it… how the effect of selecting whitespace and hitting tab is never quite what you expect, how Ctrl-Q is used for closing files (how charmingly quirky) or the bindings that the debugger uses for step into/out/over are dissimilar to every single other package I’ve ever used, but hey, that would be tedious, and this blog is tedious enough already.
Debugging is… odd. Let’s assume you’re working with a Python application. You set up the command line (an option in the File menu, naturally, where else?) and click Debug Application. Let me take a moment here to note the way in which BC relies heavily on toolbars full of icons. Untitled icons which (and I say this with all due respect and acknowledgement of my own lack of artistic skills with a crayon) are often so abtruse in their visual cues as to be hieroglyphic. But that’s okay, because if you float your pointer over them, they pop up a tooltip to remind you what they do. As long as the window they’re in has the focus… so you find yourself clicking on title bars, then floating your pointer over icons and WAITING. Mystery Meat Navigation at its finest.
Anyway, let’s assume you wish to debug. You click Debug Application. That, sort of, starts the debugger. The pointer (we’re on Windows here, to give some context) changes to the arrow-with-hourglass to tell you to hang on. And you wait. Eventually you move the pointer and find that it changes back to an arrow – looks like you didn’t have to wait after all. But your debugging has not yet started. Now you must go over to the Debug window and either Step or Run the code (again, using the appropriate icon). Now you’re debugging.
And so a trackback occurs (happens to even the best of us, don’t take it personally). You get the full and detailed error in a tiny little panel at the bottom of the Debug window. Well, you do as long as it’s less than about twenty characters. There’s an Errors tree-control type thing in another panel but don’t worry about it, nothing happens when you click on it. Oh, and to get an interactive shell a la Pythonwin when you’re at a breakpoint, you need to click the Eval In Shell icon. No, I wouldn’t have guessed that either.
And so on, and so forth.
It would be easy to get me wrong here – I’m still using it and probably will keep on doing so, but with that continuing sense of dislocation and awkwardness as I pause before hitting F8 to step and wonder if I’m remembering the BC, VB or Pythonwin conventions. Where it’s good, it’s very good – a model of the sort of integration to which any IDE can aspire, a flagship of what free software can be. But when it’s bad, it’s horrid.
 http://www.shriekback.com/lyr_JamSci.htm (Achtung). Memories of my college days…
 Take it as read that the word I used was dissimilar to “heck” in the first two letters.