Ubercode News Archive (2004)


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:

Picture of Augustin Cournot

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 class.
  • 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.

View from top of Cologne cathedral

Anyway, over the last 3 days I've released a new build of Ubercode with the following improvements:

  • 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 Browser.
  • 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 different way.
  • 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 error.
  • 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 changes.
  • 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 RestoreFocusControl().
  • 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 improvements:

  • 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 tracking.
  • Symbol files use CSV format instead of structured expression format.
  • Minor bug fixes.
  • Doesn't sulk if not given chocolate.