Software Pricing (19 December 2004)
I've recently been thinking about software pricing. Here's a picture of Augustin Cournot who was
responsible for investigating supply and demand and imperfect competition in Economics:
Joel on Software recently wrote an excellent article on software pricing. But he stopped just
when it was getting interesting, so I've written the unauthorized sequel.
New update (late 2004)
More changes and improvements:
- The format used by the Time() and Filetime() functions has been changed to
conform to ISO
8601. Dates and times are now represented as "YYYY-MM-DD hh:mm:ss.dd" where YYYY
is the year, MM the month (01 to 12), DD the date (01 to 31), hh the hours (00
to 23), mm the minutes (00 to 59), ss the seconds (00 to 59) and dd the
fractions of a second (00 to 99).
- The Program-Add Resource File command has been improved to work with RC files and DLG
files from other applications (primarily C/C++ programs). You can now automatically create a class
that uses an existing RC or DLG file.
- In the Developer Environment, display areas for filenames have been made larger, and filenames
will wrap where necessary. This makes it easier to read long filenames.
- If the dialog editor renames a dialog, the project window is automatically updated, and the
code editor prompts whether to rename the event handler.
- When a new dialog is added to an application, the dialog editor checks the dialog name is
unique among all the classes, and automatically creates the event handler.
- The Example Browser dialog (File - Open Examples) now indicates which is the main
- A new example program has been added for DBC (Design By Contract). DBC is an object oriented
programming technique using pre-conditions and post-conditions, and the example is "db1.cls".
Ubercode is one of the few languages that supports DBC using pre-conditions and post-conditions
that can be checked by the compiler.
- The Run-Start in Debugger command has been improved so it automatically switches debug
information on and compiles the minimum number of classes necessary.
- The Run-Info command has been improved so it shows which classes have been compiled with
full debug information.
- Other than these improvements, no bugs or errors have been found.
New update! (9 October 2004)
It's a while since I put any pictures here, so here is the view from the top of Cologne
cathedral in Germany (I took this photo several years ago when I worked there). The river you can
see is the Rhine which runs through West Germany.
Anyway, over the last 3 days I've released a new build of Ubercode with the following
- But first an important announcement - Ubercode is mostly bug free so I'm going to
release v1.0 for sale as soon as possible in 2005. Ubercode will initially be for sale over the
net, and will ship as a packaged CD with a starter manual. The cost will be in the US$50 region
(+/- 50%), between 30 and 49 UK pounds sterling.
- Other improvements - there is a new Example Browser dialog (File - Open Examples). This
dialog allows you to view all the example programs on disk. The browser gives a summary of each
program and the files used. Examples may be compiled and run directly from the Example
- Under Windows 2000 / Windows XP, printer names consisting of 32 characters or more caused a
printer bug. The bug occurred because a Windows API structure used for printing (the dmDeviceName
field in DEVMODE) only has enough space for 31 characters, and printer names longer than this could
not be stored. The bug has now been fixed, because Ubercode now obtains the printer names in a
- The default installation folder has been changed to c:\Program files\Ubercode to be
consistent with the Windows installer guidelines.
- Fixed a bug which sometimes caused the focus to be restored incorrectly in a group of radio
buttons. The bug was caused because the group toggle code assumed radio buttons were created using
an increasing sequence of control i/ds, which is not necessarily so. The fix uses a new routine
FindGroupHwndRange that finds the first and last controls in a group by window handle (HWND)
instead of by control i/d.
- Fixed a bug in the dialog editor which prevented Bitmapbutton objects from correctly saving the
Transparentcolor property. The bug was caused by an error in the conversion code that saved
property lists back to the RC file format.
- Fixed a bug in the installer. The installer now correctly detects when the exact same version
of Ubercode is being installed twice, and generates a warning message.
- Fixed a compiler bug. The compiler now correctly reports an error when function main()
is declared without the public modifier. Previously the compiler did not detect this as an
- Fixed a run time library bug whereby it was possible to select disabled menuitem objects using
menu accelerators (short cuts), in the situation where the menuitem was enabled but its parent was
not. A new routine MenuIsItemAvailable has been created for this purpose.
- The website has been tidied up and has been given its three-monthly service. Some of the html
files have names more closely matching their purpose.
- Added more introductory web pages that give a
quick overview of Ubercode.
New release! (6 June 2004)
Well here it is folks! To celebrate the 60th anniversary of the liberation of Europe by the
British, American and Canadian forces, a new release of Ubercode (version 1.0.0602) is available.
This uses simplified class syntax, and has the following improvements:
- Changed the structure of Ubercode classes so the division of a class into exported and private
sections is no longer required. Instead classes use public and private keywords as
modifiers on declarations which is much easier. The Hello
World program shows the new syntax.
- To support earlier classes that previously separated the exported and private sections,
prototype declarations are allowed. This makes it possible for interface declarations to be
preceded by public and for the full declaration to be repeated later on in the same class
(also using the public keyword).
- Changed all support code to use the new public / private format.
- Re-ran all code and error validation tests to check they worked after the compiler
- Reviewed the Language Reference Manual (LRM) to bring it up to date with the new syntax.
- Revised and re-tested all the example programs so they use the new syntax.
- Updated the Learning to Program manual to use
the new syntax, and re-tested the example programs.
- Fixed a bug with exec + EXEC_WAIT if the executed program was shown in a minimized
state. Previously the focus was left on a button in the Ubercode program even though the parent
window had been disabled. This made it possible to press the button which caused strange effects.
The bug was fixed by defocusing the control, and by new internal routines SaveFocusControl() and
- If the debugger was deactivated when the focus was on a push button, the button sometimes kept
the focus. This is related to the previous bug, and has been fixed.
New release! (14 February 2004)
Happy Valentine's day everyone! In case your dream date didn't turn up, here's a consolation
prize in the form of a new release of Ubercode (version 1.0.0122). This has the following
- Improved descriptions of errors occurring when duplicate constants, types or functions are used
in a class. The error messages now show the original and the duplicate line numbers, to help error
- Symbol files use CSV format instead of structured expression format.
- Minor bug fixes.
- Doesn't sulk if not given chocolate.