Posts filed under 'Rant'
For about a week, I thought my EpsonScan driver was broken: whenever I selected a folder to dump my batch scans, it would just hang there on the “Browse for Folder” dialog box.
Then I noticed the same problem in NikonScan…, Picasa… and Thunderbird.
Suspicious, huh? I rummaged around and noticed that Windows Update had installed four patches about a week ago. I bit of googling suggested KB908531 might have been the culprit. So I uninstalled KB908531 through the Add/Remove Programs feature in Control Panel and ta da! my computer is usable again.
BTW, you should read Microsoft’s knowledgebase article before you uninstall the patch. Since those are the primary applications for my computer at home, I’ll be living (dangerously) without the patch until they fix it properly.
April 25th, 2006
francis
Someone has finally figured out the ultimate metric for language complexity. Legions of ivory-tower academics can now retire. It’s a solved problem. Who knew it would turn out to be that easy? I guess people have just been overlooking the obvious for years!
December 7th, 2005
tonyg
It so happened that, having just installed the beta of Thunderbird 1.5, one of the first things I wanted to do was compose an email. Early on in the message, I typed the word “summarise”. This spelling is correct in UK English, but clearly is not in US English, as the check-spelling-as-you-type indicator flashed up. “No problem,” I thought, “I’ll simply install the correct dictionary.”
The compose window had a Tools menu, with an Options entry. Choosing this brought up the options dialog, as you might expect. There was a link to click on to install more dictionaries. “Great,” I thought, “they’ve designed this well.” I clicked on the link. Firefox opened up, and took me to the dictionary selection page - so far, so good - and I chose the UK English dictionary, and clicked on its link.
An installation window popped up, I accepted the offer of installation, and after a brief interval a confirmation message popped up indicating I had successfully installed my chosen dictionary.
Problem One: Of course, it had been installed in Firefox. Not a whole lot of use for someone wanting to use the dictionary in Thunderbird.
Being a computer programmer has its advantages sometimes: I know what a URL is! So, smugly copying the URL of the .xpi for my chosen dictionary to the clipboard, and having a tolerant chuckle about the little problems in user interface design we all run into now and then, I headed back to the Thunderbird window to try to ask it to install the extension over there. Some time later: “That’s funny,” I thought. “I cannot for the life of me find the option for installing extensions! Not under the Tools menu, where it usually is, and not under the Options dialog, either. Bizarre!”
Problem Two: It took me several minutes to realise that the Extensions menu is only available on the main Thunderbird window, and is not available on Composition windows. This is the point of this whole rant. What on earth is the motivation for making the menus different like that? Did the designers think they were saving screen real estate? Did they think they were adroitly avoiding the pitfall of confusing the poor, helpless, ignorant users? The space where the function I expected should have been isn’t even being used for anything - it’s filled with empty, useless, function-free menu bar background!
Graphical User Interfaces have been actively regressing since 1976. So much for the creative power of a free competitive market. Thanks a whole bunch, computer industry. Way to innovate.
November 4th, 2005
tonyg
I was recently working on a project where the client wanted us to add some features and updates to a web-facing database which they had paid some big name consultants to develop for them.
Wow, did what we received look impressive. It used some of the latest industry buzz-words: SQL Server, ASP.NET, Web services, to name a few; It came with pages and pages of documentation, with “wireframe models”, field-by-field breakdowns for each page, and even a schema diagram for the database. The documentation itself must have cost quite a bit (at a guess, it must have taken a Word-monkey at least 2 weeks to prepare).
However, when we started digging in, things didn’t look quite as impressive. Firstly, the documentation, detailed and copious as it was, was useless because it didn’t correspond to the actual code. Even the database schema didn’t match - it looked as if the documentation and the implementation had evolved independently.
As we started to take it apart and work out how it worked, more problems started to surface. Here’s a list of some of the more serious bugs we found.
- The schema for one of the tables was too wide; there were several very large VARCHAR columns (thousands of characters per column) in the definition of this table. The schema defined records which could be as big as 24000 bytes, whereas SQL Server has a limit of 8060 bytes. This means that inserts (and updates) of large records could fail or be truncated. The client never came up against this problem presumably because they hadn’t created a record big enough. How could the developers have just ignored the warning messages that SQL Server must have given?
- The website had a search page which sloppily used string concatenation to build the corresponding SQL query. Because no efforts were made to clean-up the user-provided input, this part of the website was vulnerable to SQL-injection attacks! In principle, a remote website visitor could type carefully crafted values into a search field and get the website to execute arbitrary SQL queries!
There were other weird parts in the code. For example, at one stage, the code concatenates several fields into a string using the pipe character (”|”) as a separator, and then later splits it again. Unfortunately, it didn’t make any effort to either check for/escape legitimate pipe characters in the field values, nor document that the pipe character shouldn’t be used in these fields. Why do this? VB.NET has perfectly usable record types (look for the Structure keyword - even QuickBASIC had the TYPE keyword since the late 80’s).
Working on this project has just given me more evidence to believe that the big name consultancies don’t give value for money.
October 19th, 2005
francis
…and produce a usable package system?
The absence of a standardised and user-friendly mechanism to package &
distribute libraries, and to locate and install such libraries has
been a major stumbling block in the adoption of non-mainstream
programming languages for a long time. I wrote about it here in the
context of Scheme.
Haskell is actually in a much better position than Scheme for
addressing this, since there are far fewer implementations (and a
single one - GHC - with an overwhelming market share), and far fewer
incompatibilities between implementations. I have high hopes for
Cabal. However, so far it seems to have failed to deliver on its
promises, as evidenced by the following snippet from the installation
instructions for WashNGo:
In some setting, it will be complicated to get everything to work with
the database connection. The reason is that some versions of c2hs
(0.13.6 in particular) do not install properly as a package: the
hs-libraries component of the package description is missing with the
consequence that programs do not link properly. If you can fix they
you fly.
Installing newer versions (0.14.2 or 0.14.3) is not possible out of
the box because they require cabal with version >= 1.0.1. Alas, GHC
6.4.1 ships with 1.0. Installing cabal-1.1.4 does not help either
because…
.../c2hs-0.14.3 > ./Setup.hs build
Preprocessing executables for c2hs-0.14.3...
Building c2hs-0.14.3...
Chasing modules from: c2hs/toplevel/Main.hs
Could not find module `CForeign':
Oh well.
That’s exactly the kind of thing that will turn off all but the most
determined geeks from exploring Haskell.
October 11th, 2005
matthias
In Ant 1.6, properties can be written in XML files. Can someone tell me why
<property name="some.property" value="some.value"/>
is more desirable than
property.name=some.value
?
Update The import feature is what’s new in Ant 1.6 that makes this usage possible. So, the answer is, “because you can conditionally set properties in the imported files” (rather than conditionally evaluating property files). So really my gripe is (again) with the weird, stilted little language that is Ant.
September 22nd, 2005
mikeb
Next Posts