[Please note: this is a text only version of the on-line magazine, OS/2 e-Zine!.  OS/2 e-Zine! is a graphical, WWW OS/2 publication and, if possible, should be viewed in its HTML format available on-line at http://www.os2ezine.com/ or zipped for off-line reading.  Some graphically oriented articles have been removed from this document.]

OS/2 e-Zine!		February 1, 1999	volume 4, number 2
--------------------------------------------------------------------------
Copyright 1998		Falcon Networking	ISSN 1203-5696

	"Over Three Quarters of a Million Satisfied Visitors!"

Reviews:
*MiniSQL versus MySQL:*

Mid-range, open-source SQL servers have come to OS/2.
This week we compare the two best known free/semi-free databases recently ported to Warp.
* MiniSQL vs. MySQL - Brian Carr 
* Performance Benchmarks 
* Conclusions 

* First Looks and Nifty Gadgets - Christopher B. Wright 
* DragText 3.0 - Chris Wenham 
* GL Cube 2.0 - Sam Henwrich 

Opinions:
* Chris Wenham 
* Chris Wright 

ADMINISTRIVIA:

* How to Subscribe to OS/2 e-Zine! for FREE.
* How YOU can Sponsor OS/2 e-Zine!
* The Sponsors that Make this Issue Possible


Copyright 1999   -   Falcon Networking
ISSN 1203-5696


***********************************

Chris' Rant  - Chris Wenham

_Cutting the Cake the Wrong Way_

Summary: The Presentation Manager, X Windows and other GUIs have cut applications in half the wrong way, making it impossible to seriously try new ways of working without giving up all the programs we like. Chris Wenham explains what the mistake was, and how to fix it.

For the past 20 years, WIMP (Windows, Icons, Menus and Pointers) has been the dominant user interface ever since the mouse became ubiquitous and Super VGA got cheap. If only you knew how awful WIMP really is. Ingenious for its time, WIMP should have been a teaching experiment rather than a production philosophy, now we're still paying for it in under realized power and crippled productivity (how often do you futz with something as trivial as a window size or position?). WIMP has gotta go, but the job of replacing it has been made impossibly difficult because of the way programs and GUIs have been written. The big stupid mistake was in creating a large, complex, but essentially *dumb* terminal called the "Windowing environment" that forced application developers to still design most of the interface themselves.

In OS/2 you use a windowing environment called Presentation Manager (or 'PM' for short) that's bonded with the application in that both must be running on the same machine. Also available in OS/2, but more prominently in Unix is X Windows; essentially the same but which took the "dumb terminal" idea even more seriously - the application doesn't need to be running on the same computer as the GUI. In both cases, Presentation Manager and X Windows aren't much different from the VT220 terminal you use to login to a mainframe or remote computer. All that either do is interpret instructions that explicitly tell them where to put this piece of text, where to put that button, where to put this menu, and so-on. The GUIs can simply display prettier windows and fancier controls than a VT220 terminal can.

This "dumb terminal" design philosophy cuts programs in half the wrong way. First it assumes that the interface can be entirely separate from the program, but that's wrong. Take a word processor for example. It's almost -entirely- interface, merely providing a convenient way of arranging characters in a linear stream. *Bold* and -italics- are part of the presentation, so all the word processor's "guts" have to do is put an invisible marker in the document that says "emphasis starts here and ends there". Is that the way it really works? No, the GUI is endlessly sending messages to the word processor to say "the user just pressed C, the user just pressed H, the user just pressed R" and so-on. The word processor in turn is endlessly sending more messages back that instruct the GUI to "draw the letter C at this pixel location in heavy type, draw the letter H at this pixel location in heavy type, draw the letter R at this pixel location in heavy type". If the word processor and the GUI were separated by a network, as it can be with X Windows and a number of "remote control" programs, then the network will get flooded with useless traffic.

Are you beginning to see how brain-dead this arrangement is?

But there's more. Since the GUI is quite stupid, the program has to explicitly describe how the presentation is supposed to look. The programmer (and the network) has to concern herself with instructions to "put a button at this pixel location and insert the word 'OK' in it, put a button at this location and insert the word 'Cancel' in it". If this arrangement isn't aesthetically pleasing or especially ergonomic to the user -- that's tough. Some programs try to make their interfaces configurable, but what do you get? You get to add or subtract buttons to a toolbar you still don't like, or you get to move that toolbar to the top or bottom of the screen. Big deal. And the vast majority of programs don't even do that, nor can you be sure that two programs will handle that kind of customization the same way. One wants you to drag tool palettes around with the mouse button (Communicator), another wants you to click on radio buttons in a dialog box (Embellish).

And poor you if the programmer puts in no configuration options -and- has a lousy sense of ergonomics.

It becomes clear that while the designers of GUIs and windowing systems wanted to separate the program from the presentation, they drew the dividing line too close to the end and gave the programs too much responsibility. They should have made -smart- GUI terminals, ones that figure out for themselves where all the buttons and menus should go, *or if there even need to be any buttons or menus at all*. They need to take away the responsibility (and the power) the application programmer has in deciding how the program should look when run. They need to put that power in the hands of the users and interface experts instead.

So now a word processor wouldn't concern itself with individual keystrokes anymore, nor where a file-save button would go or a scroll-bar would sit. It'd supply spell-checking services, document type conversions and print formatting instead.

And while it would also be the job of the word processor to build templates for newsletters and reports based on the user's needs, it would be the job of the GUI to decide how it would let the user define those needs. So if I wanted to control the whole shabang I'd choose a GUI arrangement that let me cut and paste, move blocks of text around, change font sizes and everything. But if I was a lawyer that needed to produce lots of legal documents that are all the same except for the client's name, then my "word processor" could be just a space to type the name and a list box of templates. No need for a window that takes up the whole screen and no need for a toolbar of widgets I won't use. No need even to load a "WYSIWYG" editor into memory at all.

The GUI would decide how to display information like a page of text or a table of numbers based on the nature of the data itself or a suggestion from the application. The application would no longer be the final authority.

I could at last decide that I don't need title-bars or free-floating windows anymore, getting rid of them by dividing up my screen into frames where I can dock a spreadsheet at the top, a list of incoming e-mail in the middle, the conversation view of a chat client at the bottom, and a list of news headlines to the side. The spreadsheet would look like a spreadsheet because the application sent the GUI a table of numbers, not because the application itself was meticulously drawing a grid of cells. It might be 1-2-3 under there, now only doing the job of crunching numbers. The list of incoming e-mail will include the first paragraph of the message just under the subject and sender, the way -I'd- like it. It'll also have all the messaging features of PMMail, perhaps because it'll actually be PMMail handling the messages. And the list of news headlines will react to a mouse click by printing the body of the article instead of opening a browser. The printed page will be formatted as if Netscape had printed it, perhaps because it was Netscape and I just told it to skip the display part and get down to sending the page to the printer.

All of this goes way beyond Window Managers or "skins" or other primitive means of customizing the user interface. Look at X Windows and you can see it's a mess of experimentation for fancy window managers trying new widgets and ways of arranging icons, but still stupid by design. No window manager can pluck the controls out of Netscape's "Save As" dialog box and put them in place of the main window's toolbar for people who need to frequently save the web pages they visit. Window Managers and utilities like Dialog Enhancer and X-File for OS/2 also fail miserably when it comes to access for the disabled. Screen readers for the blind are hopelessly compromised by the modern GUI, and how about someone that can't operate a pointing device?

The next generation user interfaces could still take the philosophy of separating the program from the presentation, but they could mean it this time. By removing an application developer's ability to control how a program's interface looks and behaves you force him to concentrate on making a reliable program. And by separating the presentation, you open up the opportunity for developers with new ideas to not only create radically different and better user interfaces, but to guarantee they'll work with all programs. Finally, you give the user the power to arrange things that fit to -their- ergonomic tastes.

***********************************

Chris Wright  - Christopher B. Wright

Summary: Dungeons & Dragons and Word Processing got Chris Wright hooked on computers, and eventually OS/2, but what experiences do you have to share?

I remember the first time I was introduced to a computer. My father had a Commodore PET (tape loaded programs) and was showing me a game called Wumpus, a text driven game where you went on a Wumpus hunt and you had to guess which barrow the Wumpus lived in. Computers were neat toys, I decided, and didn't think much more of them.

Later on, my father showed me another game called the Temple of Apshai, a "graphical" Dungeons &amp; Dragonish kind of game where you went through a dungeon and killed monsters. This is the first game that really sold me on computers as a gaming platform. I played Temple of Apshai for a long, long time -- I practically wore out the program tape!

Then the Commodore 64 came out, and I started playing all kinds of video games. I was sold on the computer then -- as a gaming platform. I liked computers then for the same reason people like Nintendo and Sega sets now, and I absolutely had no other use for them whatsoever. Then, one day, I discovered another computer program that opened a whole new world for me.

It was called a "word processor."

Suddenly, computers were useful. I could use them to put down my thoughts, organize them, save them, and print them out. Instantly, the computer changed from an expensive toy into a tool. Well, a tool that doubled as an expensive toy, at any rate.

As time progressed, and I became more familiar with word processors, I began to realize exactly how powerful these things were. I wrote papers in High School that I re-used (with some editing) in college. To the mixed chagrin and amusement of our High School's administrative staff, I used my IBM PC Clone (an XT, if I remember correctly) to publish one of our three underground newspapers.

PC Technology grew. I started paying more attention. I learned about other, more powerful tools out there that actually let you create more than just a simple document. Did you know you can use a PC program to create a magazine? Or a newspaper? The idea astounded me. The PC was the Common Man's Guttenberg Press, and I had one sitting on my desk.

I went through college using nothing more than WordPerfect 5.0. After I graduated and started working full time, I decided I wanted to be able to do more. I became more and more interested in publishing, and started trying to build a publishing workstation at home.

Because I was poor, I had to buy one computer piece at a time. A motherboard here. A cpu there. Another motherboard because I'd accidentally attach my power supply to it -backwards- causing a rather large hole to be melted through the board (as well as blowing out all the lights on an entire floor of the house I was living in at the time). I bought some RAM, an extra hard drive, a new video card, and some computer books. I learned to suffer the smug expressions of the CompUSA salespeople who looked at me like I was an idiot every time I asked them a question about computer cabling. Eventually, I had managed to cobble together a 486/40 (AMD chip) -with- a math coprocessor -and- a whole 8 megabytes of RAM -- I had a power machine.

The Pentium 60s had just come out, but they tended to burn through motherboards -- I could do that any time I wanted simply by reversing the connection on my power supply. I had an almost-state-of-the-art machine, and I was gosh darn proud of it.

I was intoxicated by speed. The computer could actually keep up with me when I typed! I could actually run WordPerfect 5.2 for Windows -- something that had been pretty much an exercise in futility back when I had a 386/20 SX with 2 (then 4) megs of RAM. I could actually play Ultima 3 at a speed approaching "real time".

After a while I discovered OS/2 -- not because I was looking for a 32 bit operating system, but because a) I was getting tired of the General Protection Fault every time I opened a large document, and b) I was getting sick and tired of waiting for Windows 95 (then called "Chicago"). I picked up OS/2 Warp 3.0 for Windows (Red Box) because it was only $65, because I'd read some good things about it, and because my cousin used it (still does). Mostly, though, it was because it was only $65.

If I have any technical prowess at all, it is because of those early days trying to install OS/2 on my 486. It was roughly five or six months of pure hell. I had to make disks from the CD, I had to install over and over and over again because nothing seemed to work right. Finally, I swapped out my Diamond Speedstar display card for a Micro and lo and behold, everything worked just fine! Then it took me a month just to figure out how to get OS/2 to recognize my 1x CD-ROM drive. Then I couldn't find drivers for my printer. Crappy hardware drivers make for a crappy computing experience, and in the beginning I was miserable. It got better, though, and as I learned (and bought better hardware) I got sucked in to the seductive world that is OS/2.

Then of course was the Internet -- over-hyped though it may be, it connected me to the rest of the world. It introduced me to OS/2 users in California, Florida, New York, England, Russia, Italy, Germany, and even -Canada- (hello, Trevor). It introduced me to interesting sites like "GNU's Not Unix" and the Electronic Frontier Foundation. It even introduced me to Linux -- though the first time we shook hands I ran away screaming and was later found cowering in a corner, rocking back and forth and muttering "God, no, God, no, God, no" over and over again.

The Internet seemed a natural fit with my interest in publishing, and so here I am today, a contributor to a magazine that covers an operating system I bought for $65 because I was tired of waiting for Chicago.

My interest is writing and publishing. Computers are my means to that end. I have definite plans for my machine -- I'm going to write and publish music, text, edit video, create multimedia applications, and make information available to the world at large. I'm using OS/2 because I find that I can best mold it to work the way I feel most comfortable -- and because I find that if I don't do anything stupid, neither will it. I'd like it to have a few more applications, but I have enough right now to make a start on doing the things I want to do.

What about you? What sucked you in to the world of computers? If you're a programmer, what was the reason that you started programming? If you're an end user, to what end are you using it? What was the really great thing about these little beeping electronic boxes that made you say "hey, I think I'll devote a lot of my free time to using one of these?" What promise did computers hold for you when you started on this trip, and has it been fulfilled?

***********************************

First Looks and Nifty Gadgets  - Christopher B. Wright

Summary: A quick look at some new products just appearing for OS/2, as well as nifty little gadgets to make work easier.

Corrections:

In my last article when I featured WarpHelp, an alpha product that is intended to replace the current view.exe help viewer in OS/2, I mistakenly said that the program was being designed by Carl Hauser, Marcus Groeber, and Peter Childs. In fact, none of them are working on this project: WarpHelp is the child of (mailto:cristiano.guadagnino@usa.net) Cristiano Guadagnino, a member of Team OS/2 Italy and someone who has never met Messrs. Hauser, Groeber and Childs.

Carl Hauser, Marcus Groeber and Peter Childs are people who tried to document the otherwise undocumented INF binary format, and Cristiano had included a text file they had written (and made freely available on an old issue of EDM/2) for any programmers interested in the subject.

Also in my last article, I claimed that PMEuro 1.3 by Ulrich M&ouml;ller didn't convert the currencies of countries who are not members of the new European Community -- I wasn't looking hard enough. In fact PMEuro -does- support the US Dollar, and has a screen where you can add other currencies as necessary. Alas, it does -not- automatically update these -- whenever the exchange rates change, you'll have to edit that information yourself.

Gotcha! 1.45:

Screen capture applications are not tools that everyone needs, but when you need one you need a -good- one. Gotcha!, a mailware application by Thorsten Thielen, is at present a very useful one and has the potential to be a very good one if developed further.

Gotcha! has a very simple interface and works very reliably. Using it is as easy as choosing the kind of screen capture you want to take and then clicking on the window (or region) you want to capture.

Unfortunately, it still has a few limitations: it only saves the captures as bitmaps -- not a showstopper, since you can use another application to convert it to whatever file format you prefer, but it would be nice to have the option of saving it in other formats like PNG, GIF, JPEG, TIFF or TGA. Also, you can't define "hotkeys" for the application, meaning you can't simply hit a key combination on your keyboard and activate the program.

Gotcha! 1.45 
by Thorsten Thielen (http://www.informatik.uni-trier.de/CIP/thielen/gotcha/) 
	download from Hobbes Archive 
	http://hobbes.nmsu.edu/pub/incoming/gotch145.zip (110K) 
	Registration: Mailware  

HyperCD (BETA):

What? Another CD Player? Don't we have enough of those already?

It does seem that there is a mini quest out there for software developers to create the "perfect CD Player" application, but this one, while still in beta, has a few nifty gadgets of its own. It goes beyond merely playing your CD through your CD-ROM drive, it also functions as a CD track database, both locally and remotely too. From the readme file:

"Work in progress: Automatic CD-data retrieval for internet-connected machines. When starting HyperCD with the flag '/INET' a SOCKET connection will be attempted to a remote server when an unknown CD is inserted. Also, every CD entered in the system will be automatically forwarded to this server. In order to get this running I need people with a direct-connected OS/2 machine attached to the internet (NOT through a PROXY). The protocol is in place, I have got beta-level server-software ready, and the servers support mirroring. Any volunteers out there?"

So the idea is that eventually, if you don't have the track details for the CD you're playing already programmed, you can log on to the internet and download them from a server instead.

Another interesting feature is a real-time spectrum analyzer that you might have seen before in PM123. Unfortunately it doesn't seem to be very responsive yet in this beta version. Perhaps it'll be a bit more lively in future revisions.

HyperCD (BETA) 
by Jeroen van den Horn (mailto:J.vandenHorn@fiibre.a2000.nl) 
	download from The Hobbes Archive 
	ftp://hobbes.nmsu.edu/pub/incoming/hcdb01.zip (273K) 
	Registration: N/A  

PageMage v0.36:

One of the neatest things about Object Desktop is its ability to create Virtual Desktops. But if you don't use Object Desktop you may be interested in a -freeware- application that works just as well.

PageMage is an oft-neglected utility that has been sitting on the Hobbes archive site since 1995. It seems to have been abandoned to its fate, but the truth is for an app that lists "not completed" in its readme file it seems to work just fine.

PageMage, first introduced in the (http://www.os2ezine.com/v1n7/beta.html) May 1996 edition of OS/2 -e-Zine!-, is a virtual desktop app that is modeled after the virtual desktops found in Unix window managers like fvwm. It sits on your desktop and gives you a "grid" of virtual desktops that you can jump to with the click of a mouse button. The application, which was written in the early Warp 3 days, is very configurable (allowing you to define "sticky" windows that follow you as you click from one virtual window to the next).

While it seems likely that PageMage has been orphaned, it's still a good utility that deserves re-instroduction.

PageMage v0.36 
by Carlos Ugarte 
	download from The Hobbes Archive 
	ftp://hobbes.nmsu.edu/pub/os2/util/wps/pgmg036.zip (59K) 
	Registration: Freeware  

***********************************

MiniSQL versus MySQL  - Brian Carr

Summary: Two important mid-range SQL databases have been recently ported to OS/2. In this review we compare the two together and also see how well they stack up to one of the mainstream industrial-strength databases: IBM's DB2

Databases are usually divided into two categories, the simple personal and small-business database programs such as Lotus Approach and DBExpert, and the full-blown, industrial grade, relational databases that include Oracle and IBM's DB2. But in-between these two are a number of mid-range databases that have recently become available on OS/2. This review puts two of these new alternatives for OS/2 -- miniSQL (also called mSQL) and MySQL -- through their paces to identify their strengths and weaknesses. I also compare these packages to what I have found to be the premier full blown relational database; IBM's DB2.

Controlled almost entirely with SQL (Standard Query Language), they provide a compromise between the restrictions of the first and the expense of the second, attributes that make them very attractive as the back-ends of medium sized web sites or custom small-business applications.

Download and Installation:

Both mSQL and MySQL are light weight relational databases which work on OS/2 and also have versions for Unix and Win32. mSQL is free to use non-commercially, but requires a license fee of $250 (with volume discounts) after a 14 day trial period for commercial applications. MySQL is free to use (even commercially) on OS/2, but requires a license fee if it is distributed commercially (such as would be the case if you were selling an application based on it). The Win32 version of MySQL is only available for use with payment of the licensing fee. If you do distribute MySQL commercially, the basic license fee for MySQL starts at $200 with volume discounts.

Both databases also require the EMX runtime libraries (version 0.9c with Fix Level 4, which is pretty much the standard) already be installed on your system. MySQL also requires FixPak 29 for Warp 3 or FixPack 4 for Warp 4. mSQL requires at least FixPak 6 for Warp 4 and the equivalent FixPak for Warp 3, though this was not clearly documented and caused me some problems in testing it.

I reviewed mSQL 2.0.4.1 Build 5 from (http://www.netlabs.org/projects/msql.html) the mSQL download page. It is a 250K compressed zip file. After unzipping there is an installation script that creates the final directory, copies the files, and creates the OS/2 icons. It takes up about 640K installed, but does not include documentation. There was a bug in the mSQL import utility, mSQLimport, that was not resolved in time for the performance review. The next build of mSQL should include a corrected mSQLimport, however.

For (http://www.tcx.se/) MySQL we reviewed version 3.21.33. The normal HTML references to download MySQL were not working when I looked for it, so had to find my own Hobbes reference. It is a 1.3 megabyte compressed zip file which includes documentation. Like many applications developed on and ported from Unix it decompresses into the final directory structure. It also includes long names, so it's easiest to just unzip it from the root of an HPFS drive.

The documentation for MySQL directs you to install and run MySQL using Unix shell scripts (sh) which require at least passing Unix familiarity since the scripts are not adapted to OS/2. It is also helpful to have the GNU shell, *sh*, installed on your system before you try. A really nice addition to MySQL would be a Rexx installation utility that creates icons and so on as in mSQL. However, these MySQL shell scripts can be skipped by just invoking the server with the command "<tt>mysqld --skip-grant --log</tt>" (it is important to note that there is no space between the skip and grant options) from the '\mysql2\bin' directory and then type "<tt>mysqladmin create sample</tt>". After that you can submit SQL commands to the MySQL client by running "<tt>MySQL sample</tt>".

The first minor problems I encountered with MySQL was a requirement that the environment variable of HOME be set before the console is invoked (otherwise the console client fails with a segment violation). Also, the environment variable of EMXOPT needs to be set to either "<tt>-h256</tt>" or "<tt>-c -n -h1024</tt>" or requests to access more than four or so tables will fail with 'file not found' errors.

Documentation and Debugging:

MySQL includes documentation in .inf format, viewed with the OS/2 VIEW program (my favorite way to get documentation). mSQL does not come with any documentation, but there is an excellent article in (http://www.edm2.com/0606/msql.html) EDM/2 which explains how to set up mSQL and use it with a web server. You can find other documentation at the (http://blnet.com/msqlpc/) mSQL ports home page and there is a reference manual on the (http://www.Hughes.com.au/library/msql2/manual/) Hughes web site. But if you are using mSQL heavily you will probably want to buy the book that Hughes advertises.

Both MySQL and mSQL are supported via E-Mail and I can say with confidence that there are prompt replies to most problems. In comparison, the documentation for DB2 is more accurate and more complete, but there is no e-mail forum to which you can submit simple questions. With DB2 if you get stuck with an error message such as 'transaction log full' (as I did with the 100,000 record test script), it will take a person new to DB2 a fair amount of effort to research the solution to the problem.

But then the error codes in DB2 are better documented than Mini or MySQL and often point you to a suggested solution anyway. For example, when I'm typing in SQL I sometimes forget to specify the "from table" clause. The DB2 error message will often clearly identify the error:

SQL0104N  An unexpected token "where" was found following "select * ".
Expected tokens may include:  "<from_clause>".  SQLSTATE=42601
db2 =>

In mSQL you would get:

ERROR : parse error at line 1 near "* where"
mSQL >

While in MySQL you get:

ERROR 1064: parse error near 'where grp = 5' at line 1
mysql>

_Capabilities_

It is in the area of functionality that MySQL becomes the clear winner when put against mSQL.

mSQL provides a very narrow selection of data types; only 'char' (characters), 'text' (blocks of text up to 32K in size), 'int' (integers) and 'real' (floating point numbers). There is also limited support for a non-standard timestamp variable. In contrast, MySQL supports virtually all SQL data types, including the standard date and time types (which can be very useful when used with the functions to adjust and compare dates and times).

However, there is a good reason why mSQL does not support any data types beyond the most basic. Other than storing and retrieving the data there is very little that you can actually do with the data in mSQL. You can not write an update which uses the current value of a column as a starting point ("set count = count + 1" is the classic example). It is up to you to retrieve the value of the column into your program and then store the new value. Further you can not do computations in the select values. For example if you want Profit (a computed value), you have to select Revenue and Costs and then compute the desired result (Revenue - Cost) in your program. mSQL also does not support the classic summary functions like count, sum, and avg so that all summary report generation must be done by your program.

But MySQL provides virtually all functions you would expect in a relational database with the only exception I found being the ability to do subselects in the 'where' clause of an update. This can be a powerful tool for updating records in a table relative to other records in the same or a different table. The classic example of this is identifying customers who made repeat purchases (a good thing) or who had repeat problems (not a good thing).

Neither mSQL or MySQL supports the usual commit and roll back logic. But if you are just using either to record information (simple inserts) or display information (simple selects) that is not a problem. For transaction processing where a record needs to be updated based on its current values, each database has non-standard techniques to allow the programmer(s) to manually work out the locking and/or roll back logic. This is almost certainly not the right approach if you are doing a lot of transaction processing. In that case it would probably be cheaper in the long run to buy a full blown relational database with built in commit and rollback support.

For light transaction processing, MySQL has the simple and powerful ability to lock and unlock selected sets of tables. The downside of this approach is that it can present severe throughput and reliability problems (if the application with the locks fails, for example). mSQL offers a special timestamp for each record in a table which allows you to write high throughput and reliable transaction processing code, but if the transactions you need to support are very complex, this approach will quickly get so complex as to be untenable. If this was the preferred solution for transaction processing, you could use the standard timestamp supported by MySQL to implement the same logic (with just a little more effort).

Both mSQL and MySQL each come with a useful CGI extension for web servers which allows the integration of HTML and SQL logic to collect information or display results from your database. Without this ability you would normally require separate files and some minimal integration logic to produce seamless integration of the database into your web pages.

***********************************

MiniSQL vs. MySQL: Performance  - Brian Carr

Summary: The three databases, MiniSQL, MySQL and DB2 are benchmarked for comparison using a variety of typical tasks and loads.

Performance measurements were conducted on a comparatively slow system, i.e. 133 mhz Pentium processor with 128 megabytes of memory and a single slow (5,000rpm) SCSI drive. DB2 and other heavy weight relational databases perform significantly better when they have access to multiple drives and multiple CPU's to take advantage of parallel operations, so these measurements distinctly favor mSQL and MySQL. However, the test system is more typical of what a light weight relational database would run on.

All operations were performed via SQL from the 'console' which comes with each database. This measures the performance of the console as well as the underlying database engine. This should not be important for the more intensive requests (which take much longer than a second). For very fast requests the console can be the primary bottleneck. However, for these fast requests, the actual path you take to get to the database engine will also likely be the primary performance bottleneck and you will have to take that into consideration. For most web based applications, the external delays of just getting the request to and from your server dominates over any but the most serious database operations.

As a general rule, the light weight relational databases were much faster on simple requests but the performance degraded as the requests became more complex and the tables being accessed got larger. The following operations were performed in the performance measurements:

Create Table  - Create the test table with several columns and a primary key composed of an ID in two columns and a date. This also created a sorted index into the table based on these columns. 

Load Data - Load the table with data of either 1,000, 10,000, or 100,000 records. The data is real data excerpts from an existing DB2 database. As I could not get mSQLimport to work correctly in time for the performance test, this step was completed by doing the required inserts from the mSQL console (via a script file). However this does not seem to have adversely delayed the load time as the corrected mSQLimport took almost three times as long as the mSQL console to load records in the 1,000 record load. 

Run Stats - An operation unique to DB2, allowing the query optimization steps to choose the appropriate strategy later on.

Simple Update - Update a column in every records in the table based on the value in a different column.

Complex Update - Update a column in those records where there are later records in the same table with the same ID. This entails a table join (literally in the SQL) which should simplified to an index scan of the primary key. This can not be done in mSQL and has to be done in multiple steps in MySQL because of missing functions.

Simple Count - Count the number of records in the table meeting a simple criteria. Since mSQL does not support the count function, all records were retrieved. This would have to be done by your program in order to count the records returned. 

Group Count - Count the number of records in the table after grouping them according to the value in a particular column. Since mSQL does not support the count function or 'group by' option, all records were retrieved after having mSQL order them with the 'order by' option. This would have to be done by your program in order to count the records returned. 

Complex Count - Count number of records in the table meeting a complex criteria based on whether or not there are later records in the same table with the same ID and a later date. This entails a table join (literally in the SQL) which should simplified to an index scan of the primary key. mSQL does not support the count function, so all records were retrieved as this would have to be done by your program in order to count the records returned.

Index Select - Perform a series of quick selects (50) where the record requested can be found quickly through the index (primary key). This should not degrade significantly with table size and then mostly measures console overhead (the overhead of getting 50 requests into and out of the database engine). 

Full Table Select - Perform a series of slow selects (10) where the records requested require a series of full table scans to identify the records. This should degrade linearly with the table size. 


The raw numbers are as follows:

Test Description		mSQL			MySQL			DB2
Table Size		1000	10000	100000	1000	10000	100000	1000	10000	100000
Create Table 		2	2	2	1.7	2	1.7	0	0.3	0.0001
Load Data 		13.3	96.3	960.7	1.7	14.7	140.7	4	45.3	450
Run Stats 		N/A 	N/A 	N/A 	N/A 	N/A 	N/A 	1	4.3	13
Simple Update 		0	4	144	11.7	118.7	1158.3	0.3	5	196.7
Complex Update 		N/A 	N/A 	N/A 	15.3	136.7	1416.7	1	8.3	239
Simple Count 		1.3	5	120.7	0	0	1	0	1	4.7
Group Count 		2.7	41.7	Fail 	0.3	1.3	14.3	1	4	12.3
Complex Count 		68.7	4295	Fail 	0.3	7.3	86.3	0	2.3	51.7
Index Select 		0.3	0	1.7	1	0.7	1	15.3	15	15
Full Table Select 		0.3	2	13.3	0.7	1.7	9.3	4.7	6.7	54


On updates, mSQL could only do the simple updates, but it was blindingly fast. MySQL was a comparative laggard, but this is almost certainly due to forcing a disk write on each update. DB2 did better by caching all writes and then forcing the updates to disk in blocks on completion of the request. Also, the version of mSQL that I tested had a bug (reported and identified but not fixed by the time of this review) that cached too well in that I was unable to see recent additions to a table after an insert completed.

All tests were performed until the results stabilized and then measured three times with the reported results the average of these three. This was important as DB2 learns from previous requests the nature of the requests that are normally submitted and performance improves over time in a consistent environment. Each test was run as a script and all tests were run sequentially with a stop and start of the database engine in between.

mSQL supports table joins in selects, but does not seem to recognize that the specified join did not require building a new (and huge) logical table, but simply required an index scan. As such, the performance of the Complex Count (join) degraded as the square of the table size and was not tested for the 100,000 record table. This test was only run once for the 10,000 record test table due to the long time to complete. mSQL also aborted on the 'order by' clause of the 'Group Count' test with 100,000 records.

DB2 showed the worst performance on the Index Select, which was 50 very easy selects indicating that the normal path through the DB2 console to the database engine and back is about a third of a second. It seems to less than a hundredth of second for mSQL and about a fiftieth of a second for MySQL. However, console performance is seldom an overall throughput issue and the improved error messages by DB2 may warrant the increased delays by the console.

***********************************

MiniSQL versus MySQL: Conclusions  - Brian Carr

Summary: Brian concludes the review with his final thoughts

If your database is expected to be very small (no tables exceeding 1,000 records) and you will be simply storing and retrieving data with no serious analysis of the data, then licensing fees could be the deciding factor between mSQL and MySQL, both of which could do the job. If licensing fees worked out to be the same, mSQL would probably be the better solution as its installation and interfaces are a little simpler.

If you will have medium (10,000) to large (100,000 or greater) tables or will be doing cumulative reports/analysis on the data, MySQL or a heavy weight relational database such as DB2 are your best options. DB2 handles very large databases (million or more records) very naturally and is probably the best option in this case. Otherwise, your primary decision could be based on the amount of time you expect to be spending developing database code (SQL) versus the expected licensing fees (at whatever rate you value your time at). If the development time exceeds the licensing fees by a factor of ten, then I recommend you get a heavy weight relational database. The increased reliability, better documentation, improved error codes, complete functionality (no missing functions), and consistent performance should more than cover the increased licensing fees over the life of the project. I would also recommend you closely look at DB2 as the database of choice if you go for a heavy weight relational database as I have found it to be the most reliable, fastest, and most complete of the relational databases (and, surprisingly, it seems to be increasing its market share based on its technical merits).

miniSQL 2.0.4.1 
by Hughes Technologies (http://www.Hughes.com.au/) 
	download from OS/2 Netlabs 
	ftp://ftp.netlabs.org/pub/dbase/msql/msql2041b5.zip (238K) 
	Registration: US$250  

MySQL 3.21.33 
by T.c.X. (http://www.tcx.se/) 
	download from The Hobbes Archive 
	ftp://hobbes.nmsu.edu/pub/os2/apps/database/mysql2-3.21.33b-bin.zip (1.3M) 
	Registration: Free  

***********************************

DragText 3.0  - Chris Wenham

Summary: It's grown up in a big way. DragText no longer is confined to simply shifting blocks of text around, now it enhances your program objects and provides greater accessibility to your Workplace Shell objects too.

What used to be a utility that simply handled highlighted text like drag-n-droppable objects has adventurously probed further into the category of Workplace Shell enhancement. Rich Walsh, author of DragText, recently released version 3.0 of his brilliantly useful utility and here we talk about how the little enhancement has grown up.

The Basics - Dragging Text:

Highlight some text. Looking at it on the screen you see that it's neatly bounded at either end, encapsulated with inverted colors, ready to do something with. Most of the time you'd cut or copy this into the clipboard in order to move it somewhere else, but what if you could simply move the mouse over it, hold down the right mouse button, and drag it to its destination instead? If you can do that, then you've probably got DragText installed. By holding down the control or shift keys you can control whether the text is copied or moved - just like it is with standard Workplace Shell objects.

DragText will create a "scrap" file if you drag the text to the desktop or a folder, but paste the text if you drag it to another text field or editor window. The same works the other way round too, because if you drag a text file into a text field or editor window, DragText will paste its contents there. Alternatively by holding down the Alt key, DragText will paste its filename instead. Indeed, that's usually the default action for anything other than DragText's own scrap files, so you can easily paste the full path and filenames of executable and other types of file as well. Rather handy for filling in new Program Object templates and passing command line parameters (DragText can insert into VIO windows too).

Yet handier still is the automatic directory listing feature that works when you drag a folders into editor windows or text forms too. With a swish of the mouse you can build instant play lists for MIDI or MP3 jukeboxes, for example.

All of these features have been present in DragText since its beginning, but it has several advanced features too.

Advanced Features:

Viewing the contents of the clipboard is now a little bit easier with DragText's DTClip object, which is designed to stay on your desktop all the time rather than be tucked away into a program folder somewhere. The reason for this is because when you try to drag this object, you end up dragging the contents of the clipboard instead (as long as it's text. Graphics and other data types are ignored).

This DTClip object is separate from the clipboard, however, even though it shares an intimate relationship with it. DTClip can maintain a buffer that you can append text to, separating each snippet with an optional separator (a line of dashes is default). This makes it handy for collecting lists of, say, phone numbers, without having to repeatedly go back and forth between the source and destination. You put text into this buffer either by coping it to the clipboard or by dragging it to any window's titlebar.

Now here's something that caught me by pleasant surprise when I first tried it. With DragText 3.0 it's now possible to access the context menu or icon of an object or file just by typing its name. Open up the OS/2 System Editor, for example, and type "C:\CONFIG.SYS". Now highlight it and hold down CTRL and Shift while you right click on it, DragText will pop up the context menu for the file right there, allowing you to open it, or move it, copy it, any function that's a normal part of the object's menu. Likewise, hold down CTRL and Shift while you drag the highlighted filename with the mouse and suddenly you're dragging the file itself, not merely it's name. It works for any valid path and filename or Workplace Shell object name, so if you typed <WP_DESKTOP> you could access the desktop's menu from it, or <WP_SHRED> will let you access the shredder's.

It took a while to think of what practical use one could put that to, but some of the first I came up with were basic file management from text file listings (such as what you find in the READ.ME files of shareware programs), and convenient shortcuts when you have a cluttered desktop and an empty text field somewhere.

A new life for the System Menu:

A feature that I don't make much use of, but comes in handy during awkward moments, is DragText's enhancement of every window's system menu. That's the button in every title-bar that's to the left of the title and usually lists options for minimizing and maximizing the window. But by right-clicking on it, DragText will open the application or window's object menu - the one with the "Open As", "Properties", "Move" and "Copy" functions in them, among others. If you hold down the CTRL and Shift keys while right-dragging from the system menu you can also move, copy or shadow the original object that was used to launch it. This isn't limited to desktop folders and Workplace Shell classes like you might think. You could move the icon that was used to launch the currently running Netscape browser this way, for example.

Other purposes that DragText puts the system menus to are as general purpose "landing pads". By dragging any object to it you can do anything from find the location of that object (open its parent folder), open the object itself or display its object menu. In this case, it doesn't matter what window's system menu you drag objects to, the effect is always the same.

Better Program Objects:

You know the classic program object, the ones you have to create every time you want an icon that launches a program. They have settings for making Windows applications run in seamless or fullscreen sessions, a place to set the icon and other boring things. DragText enhances them with some nice extras, however.

The first is a place in the properties notebook to set Environment variables, the kind that many major applications insist on needing. Variables that tell it where to find its data files, what timezone it's in and so-on. If you don't want to edit the CONFIG.SYS and reboot just because some program needs such a "SET VARIABLE=VALUE" type variable, just put it in the DragText enhanced program object instead. Only works for OS/2 programs though, not DOS or Windows programs.

The second valuable addition is a scheduler tab that will start the program at any date and time, or interval that you set it for. A simple wake-up alarm could be made by setting it to launch your CD player or MP3 jukebox in auto-play mode, for example. It isn't quite as sophisticated as other WPS schedulers that let you program a complete itinerary though.

Two more are the ability to keep an 8-item history list of all files dropped onto a program's icon (but not launched through an association, unfortunately) and a place to add any Workplace Shell object you want to the program's context menu.

Conclusions:

DragText has always been an excellent utility and a tool that's very hard to find problems with. Rich Walsh is practically a guru on the Workplace Shell's innards and much of what he's learned has manifested itself in DragText's niche filling features. The program is shareware, but while the advanced features will expire after a 6 week evaluation period, the basic text manipulation features remain as a freebie.

In our opinion, DragText is a no-brainer. Install it now and you'll never imagine how you lived without it.

DragText 3.0 
by Rich Walsh (http://www.usacomputers.net/personal/rlwalsh/) 
	download from The Dragtext Homepage 
	http://www.usacomputers.net/personal/rlwalsh/drgtxt30.zip (363K) 
	Registration: US$20  

***********************************

GL Cube 2.0  - Sam Henwrich

Summary: If your doctor advised you to avoid frustration, or you weren't the high school whiz-kid, go to the next article, because this game is not for you.

Welcome, child prodigy. Put away the coke cans and the pizza boxes, because that toy from Professor Rubik that you mastered back in high school has come back to haunt you again. This time its new incarnation does not come as a ball, or on the end of a key chain, it's made out of gorgeously rendered OpenGL graphics and it's brought to you by Aquila Technologies. This is GL Cube for OS/2, and it's going to really show-up the dunderheads at your office who still haven't figured out Freecell.

You remember the game now, the feeling of that block of plastic in your hands, the vinyl stickers adhered to its surfaces. When you bought one from the toy store it was already in its "solved" state, but then you had to start fiddling with it, twisting the sections over and over until all the squares of color were jumbled up and you had to figure out how to get them all back in order again. The cube was a craze for a while, like the Cabbage Patch dolls, but now it's a faded memory in the halls of pop culture. This only means that the new batch of kids on the streets today have never heard of one, and the possibility of impressing them with this new digital version is diminished, but your brains landed you in that nice engineering job with others old enough to remember, didn't it?

GL Cube is easy to install and will not stress your cognitive skills, unfortunately. No room to impress here, you won't have to change any CONFIG.SYS settings, the program uses the standard IBM install utility and creates a desktop folder of icons for you after a few clicks.

Documentation is also lucid and simple, they clearly wanted to focus on the true source of pain; the puzzle itself.

Playing with The Cube:

With your mouse you can rotate the 3D view of the cube on the screen in any axis you please, just hold down the left mouse button as you do it. "Flick" the mouse in any direction, releasing the button at the end of the movement, and GL Cube will tumble endlessly in that direction until you come back to brake it with another click. The sections can be rotated by positioning the mouse cursor on the face you want and holding down the right button as you move. One benefit to being a digital cube is it's now very easy to rotate the -middle- section.

If you don't want to manually shuffle the cube yourself after your brilliance has caused you to solve it, GL Cube will do it for you. This is actually rather fun in itself and a point where GL Cube will show off too, because the program comes with 4 different shuffle animations that it can randomly choose. Most of them send the segments flying out in an "elastic explosion" of color, swirling them and then sucking them back into a solid - but very very shuffled cube.

If your brain should turn to jelly for any inexplicable reason, the computer can also be set to solve the puzzle itself. You may wish to hide this fact from anybody who asks to play with it, because if they watch closely enough they might be able to pick up the technique for solving the cube in less than 50 moves (the theoretical maximum for someone who knows how).

GL Cube can be set to keep score for you too, essential for bragging purposes. It can count how many moves it took to solve the puzzle, plus it can time you as well. There is an option to switch off the timer though. Naturally you can never be as fast without a -real- cube, and you don't want anyone getting the wrong idea.

Extras:

Since OpenGL is a flexible graphics library, GL Cube offers a number of effects to show it off. Lighting is the simplest to choose from and will make it appear as if a light source is shining on the face of the cube. Shadows come next.

But watch out for textures, though. This feature is probably best only for really really fast machines, not really really fast thinkers. Textures can add a lot of personality to the cube, making it look gorgeous spinning there on your monitor, but it's a big drain for the computer's brain -- let alone yours. Better to leave them off unless you have OpenGL accelerated hardware.

Another hit to the CPU, although not as much as textures, is the background. Usually this is just plain black space, but you can load any bitmap you like.

The Rubiks Experience:

Since I'm mortal I wasn't able to solve the puzzle even once in time for this review, so I can't be certain that the program will award you a diploma or some other grand finale. I was surprised, after prying apart one of the real ones back in the 80s, that a solved Rubik's Cube didn't pop a Mensa membership card out of a slot somewhere. But perhaps the reward of seeing a perfectly solved cube is prize enough.

GL Cube 2.0 
by Aquila Technologies (http://webhome.idirect.com/~aquilat/) 
	download from Aquila Technologies Homepage 
	http://webhome.idirect.com/~aquilat/download/glcube.zip (2.3M) 
	Registration: US$10  

***********************************

The companies that made this issue possible

[(http://www.bmtmicro.com/">BMT Micro]
[(http://www.ChipChat.com/os2ezine/) ChipChat]
[(http://www.indelible-blue.com/) Indelible Blue]
[(http://www.modulardreams.com/) Modular Dreams Inc.]
[(http://www.falcon-net.net/98k7343.htm) New York City Transit Authority]
[(http://www.prominic.com/) Prominic Technologies]
[(http://www.prioritymaster.com/) ScheduPerformance]

(http://www.bmtmicro.com/) BMT Micro
Your complete source for over 175 of the best OS/2 shareware applications available.  Drop by today and check out our WWW catalog or download the .INF version.

(http://www.ChipChat.com/os2ezine/) ChipChat Technology Group
ChipChat produces excellent 32-bit OS/2 software for wireless text paging and state-of-the-art multimedia Sound Cards for Micro Channel PS/2 computers.

(http://www.indelible-blue.com/) Indelible Blue
Indelible Blue, a mail order company, provides OS/2 software and hardware solutions to customers worldwide.

(http://www.modulardreams.com/) Modular Dreams Inc.
A growing selection of graphics utilities and applications for OS/2 Warp and Java.

(http://www.falcon-net.net/98k7343.htm) New York City Transit Authority
Soliciting bids for an Automated Software Testing Tool.


(http://www.prominic.com/) Prominic Technologies, Inc.
On-line sales & solutions for VisualAge, DB2, OS/2 Warp, Workspace on Demand, Notes/Domino, AIX Firewall, and Net.Commerce (design/hosting).  The best deals on IBM and Lotus software and hardware (PCs, Servers, and RS/6000s) -- with OS/2 preloads!

(http://www.rsj.de/) RSJ Software
The successful software CD-Writer for OS/2 by RSJ. CD-Writer is suitable for backup, data filing, creating Audio CDs etc. and is compatible with most CD-Recorders.

(http://www.prioritymaster.com/) ScheduPerformance, Inc.
*Dramatically improve performance* on your OS/2 system *now* with the patented priority scanning logic and visual priority identification of Priority Master II.

***********************************

Subscribe for FREE

If you would like to receive notification when new issues of OS/2 e-Zine! are posted or remove yourself from our notification list, use our on-line subscription form at http://www.os2ezine.com/subscrib.htm -or- send an e-mail to subscribe-request@os2ezine.com with only the word:

subscribe

in the body of the message.

Please make sure your software is properly configured with your e-mail address!

If you have problems please (feedback@os2ezine.com) e-mail us or contact us at:

Falcon Networking
4302 NW 25th Terrace
Gainesville, FL 32605

800-595-1974 (US and Canada)
352-335-9693 (elsewhere)

***********************************

Sponsor OS/2 e-Zine!

Corporate Advertisers

OS/2 e-Zine! has space for a very limited number of corporate advertisers.  A variety of affordable high impact, inline graphical advertising options are available.  Arrangements are available for multiple issue insertions.

For more information please (sales@os2ezine.com) contact us via e-mail or phone 800-595-1974 in the US and Canada or 352-335-9693 elsewhere.

Readers Can Sponsor Too!

If you feel OS/2 e-Zine! is useful, entertaining or educational, please send whatever 12 issues are worth to you.  Even sponsorship of a few dollars is appreciated.  Individuals sponsoring US$ 15 (or CDN$ 20) or more will be listed in our Sponsors Page (with an optional link to their home page).

Please (feedback@os2ezine.com) send cash, cheque or money order (International or US, made payable to Falcon Networking) along with:

o A note stating that your contribution is for OS/2 e-Zine! sponsorship
o Your name
o Your address (city, state/province & country)
o Your e-mail address
o Your web URL if applicable.

Alternatively, you may choose to sponsor OS/2 e-Zine! by credit card through (http://www.bmtmicro.com/catalog/ezine/) BMT Micro, Inc.  BMT Micro accepts Visa, Mastercard, Discover, American Express, Diner's Club, and many other credit cards.  Just call:

(800) 414-4268 (Voice) 9:00am - 7:00pm EST
(910) 791-7052 (Voice) 9:00am - 7:00pm EST
(910) 350-2937 (Fax) 24 hours a day
(910) 350-8061 (Modem) 10 lines, all 14.4K, or
(910) 799-0923 (Modem) Direct 28.8K line

Or, use BMT's Secure Order Form (https://secure.falcon-net.net/BMT/order0261.html).  It's safe, fast and simple!

Remember, any amount is appreciated and whether you choose to sponsor or not, you will still be able to enjoy every issue of OS/2 e-Zine! on the WWW!

For more information or any other questions please (feedback@os2ezine.com) see our contact information.

***********************************
Copyright 1999   -   Falcon Networking
ISSN 1203-5696



