HTML/OS



  • So I was asked if I knew anybody I could recommend for contract work on a home-grown ERP sort of system, written in something called "Aestiva HTML/OS". I'm told it's similar to PHP. And being the curious sort, I dug up some documentation, probably against my better judgment. And let me tell you, where we're going, we won't need eyes to see.

    The HTML/OS Database (PDF).

    The whole thing reads like a really long apology for all the (awful) design decisions. Here are a few choice excerpts.

    Unlike database architectures where databases are multiple tables combined, here a database and a table are the same. The simplification does not limit queries, speed, or the ability to organize data, because HTML/OS supports on-the-fly “database joins.”
    HTML/OS databases are stored directly on the server. This design eliminates the need for database servers. This is possible because Web environments already include a Web server. In addition, current hardware caching and operating system caching technologies make database servers unnecessary. This was not possible in the past. Today, databases stored directly on hard drives can be faster than those utilizing database servers.

    We are in deep WTF territory right out of the gate here. I can't say I've ever seen anybody claim that web servers and caching are new, modern replacements for database servers. And have fun scaling out your database that has to live on the web server.

    Moving Beyond SQL

    Unlike SQL data architectures, the HTML/OS database is integrated with HTML and the HTML/OS language. Since SQL was invented many years before the advent of the Web it has no such capabilities. In addition, HTML/OS includes database management functions, natural language indexing, and other functions not a part of SQL.

    4GL Language

    HTML/OS uses a 4GL or Fourth Generation Language. What is a 4GL? It’s a database language that needs only single commands to perform complete data operations, such as the loading of a record into an HTML form. 4GLs eliminate the need for structures to hold intermediate data. Plus, 4GLs can be faster than SQL languages, because database functionality can be compiled into the engine.

    Another attractive feature of 4GLs is their simplicity. Few commands are needed to deliver database functionality. In HTML/OS most database functionality is delivered with the following functions:

    • DBCREATE––Creates new database using configuration file
    • DBADD––Creates new database record using variables
    • DBGETREC––Loads fields in database record into variables
    • DBEDIT––Saves variables to fields in database record
    • DBDELETE––Deletes specified record in database
    • DBFIND––Searches database and returns search results
    • DBFINDJ––Joins search of one database with another

    In summary, 4th Generation Languages have database engines toughly on par with QuickBasic random access data files. Got it.

    The DBDELETE function deletes a specified record from a database. The function has two parameters. The first is the database name. The second is the record number to be deleted.

    That should lead to some really fun concurrency issues/race conditions.

    Comparison of HTML Batch Process with Stored Procedures in SQL

    The batch processing methodology used in HTML/OS has multiple advantages over SQL methods. First, data processing is done in the HTML/OS language, not in the database engine. This means the programmer has the HTML/OS language available when processing records. In SQL, the programmer is limited by SQL, which as a programming language, is minimal at best. Second, the data processing is done in the application, not in the remote database. This creates a natural separation between the program and the database. If the database engine is placed on a different server, it does not continue to suffer the overhead created by the program, since programs don’t run inside the database engine. This makes HTML/OS databases and HTML/OS applications easier to scale.

    Yeah, database programming is so much easier when each client process is responsible for all its own in-process data processing and caching. And I can't even begin to guess why anybody would think a client/server model on par with Access would be even the least bit scalable.

    I could go on and on, but... ow...



  •  I love the testimonials.

    "You could spend hundreds of thousands of dollars on SQL Server 7,
    ColdFusion and a team of Web developers. But why do that when you get
    more power and more reliability with HTML/OS? Plus you can do the
    development yourself."

    It looks like it was built by idiots for idiots.

    The manual actually reads more like a lazy developer who can't bother to consider the fact that someone might want to store all the data on another server, and uses cop-outs to justify to the pointy-haired-boss why it can't be done through HTML/OS.

    "Why can't I move our 100Gb of data off the web server?"

    "Are you from the past! With the caching and [other completely irrelevant stuff] web servers can do today, you don't NEED anymore hardware!"

     

    "We're going to need to get you to learn some SQL to continue with this project."

    "SQL?! Pfft, that's so 3rd generation! HTML/OS is 4GL!!"

     

    I pity the fool who has to migrate from something like Oracle or MySQL to this.



  • This implements almost all of the anti-patterns. I thought for sure it was a joke, but there's a ton of people on the forums...

    Nice find :)

    I was going to post a question on the forum basically saying "this is all a joke, right?" - but such talk is expressly prohibited by the user agreement. I wonder why they had to put that in there :)



  • The forums are hilarious too:

    https://www.htmlos.org/secure/htmlos/77134.47.2161240331048643716

    function na_change_img_src(name, nsdoc, rpath, preload) {
     var img = eval((navigator.appName.indexOf('Netscape', 0) != -1) ? nsdoc+'.'+name : 'document.all.'+name);  if (name == '')
      return;
     if (img) {
      img.altsrc = img.src;
      img.src = rpath;
     }
    }

    ... wow.



  • Aw, the forum broke. I guess someone is "testing" his security.



  • @RHuckster said:

     I love the testimonials.
    "When I got HTML/OS I had no knowledge of HTML or programming. Now I
    have one of the largest vitamin stores on the Web. And I built it
    myself."

    --David Greenwalt, President, ThePowerStore.com

     http://thepowerstore.com/

    WTF?

     



  • This is another gem from the htmlos forums:

     

     

     



  • OK here's what we do...

    Set up a web site, a simple store or something, we'll sell weed or something that people really want, so the site becomes popular, and when the HTML/OS crap comes crashing down, we'll sue them for lost revenue.

    "I was making $1000 a minute selling crack on the web, then I found HTML/OS, and it messed up my web site so bad, I couldn't even sell crack anymore..."



  • @db2 said:

    Unlike database architectures where databases are multiple tables combined, here a
    database and a table are the same. The simplification does not limit queries, speed, or the
    ability to organize data, because HTML/OS supports on-the-fly “database joins.”

    Isn't this that NoSQL stuff that's all the rage nowadays among the cool kids using Ruby on Rails and Django?



  • Their URL-scheme is really annoying. What I'm really scared of is the numbers are some kind of hash of the content or something to index it, so as soon as you change the content, the path also changes. This makes bookmarking and even search engine indexing useless. In any case, if you needed to rebuild your site on another server or some such, chances are all the URLs are restructured completely.



  • Holy cow - did not know htmlos was still going. I remember seeing this in 1998 (iirc) and thinking then they'd have a hell of a time going up against PHP. Even then, PHP was already taking hold as a default install option in many shared hosting systems, as opposed to commercial offerings like htmlos. ColdFusion seems to have been the one exception from that 97/98 era that survived.



  • I used to use medical flight tracking software that was written using the 4GL database language.  I didn't know if the software was just that poorly written, the database backend was that bad, or both.  No automatic refreshes of flight data (so new calls didn't pop up on the screen automatically), no record editing concurrency (I couldn't be putting notes into a medical record while someone at another terminal was putting notes in), if someone left for the night with a record open on their terminal you were screwed . . .

     I'm thinking the authors were a much, MUCH bigger WTF than 4GL, but for all the magic and hype they were touting with 4GL, the software certainly didn't help the database's reputation.  The fact that all the data was stored on their servers and there were times when we ended up seeing other agencies' data (HUGE HIPAA violation) didn't help things either.

     It looks like they're still in business.  Hopefully their software has gotten much, MUCH better.  



  • iHTML was the other one I was thinking of from back in the day. I had a friend who had purchased iHTML and their shopping cart (written in iHTML, naturally). There were things he wanted done, but he couldn't find iHTML consultants by that point, and felt rather tied in to having to deal with the original iHTML developers exclusively.

    I'd figured html/os purchasers were in the same boat.



  • As an additional note, this is somewhat old documentation - I believe the product has actually been renamed since. I don't have any idea if it's been improved significantly, but I'll just naively hope that it has. And I'm almost tempted to learn it. Apparently there are enough people capable of writing checks that it's survived over a decade.



  • Re: Nasty Looking Vitamins

    @El_Heffe said:

    @RHuckster said:

     I love the testimonials.
    "When I got HTML/OS I had no knowledge of HTML or programming. Now I have one of the largest vitamin stores on the Web. And I built it myself."
    --David Greenwalt, President, ThePowerStore.com

     http://thepowerstore.com/

    WTF?

    Took me 12 gallons of water to swallow the New Victron Quattro vitamin.  But there's just so much minerals in it it was worth it!  I had been having sinewave problems, but this inverted them like nothing else.!!!



  • @RHuckster said:

    Their URL-scheme is really annoying. What I'm really scared of is the numbers are some kind of hash of the content or something to index it, so as soon as you change the content, the path also changes. This makes bookmarking and even search engine indexing useless. In any case, if you needed to rebuild your site on another server or some such, chances are all the URLs are restructured completely.

    That's probably why they prohibit indexing of their site...in the Rules of Conduct, with no robots.txt.


  • Discourse touched me in a no-no place

    @Buzer said:

    That's probably why they prohibit indexing of their site...in the Rules of Conduct, with no robots.txt.
    I wonder if Mr. Murdoch got the idea from them, or vice versa.



  • @db2 said:

    The whole thing reads like a really long apology for all the (awful) design decisions. Here are a few choice excerpts.

    Unlike database architectures where databases are multiple tables combined, here a database and a table are the same.

    I've met people who had ideas like this.  They were the ones failing "Introduction To Databases" on my IT degree.



  • I liked this, from the forums:

    [url]https://www.htmlos.org/secure/htmlos/77134.2146.2290171947448643716?[/url]

    @ftmfwb said:

    Is there a way to add a field to an existing db via code instead of the dbconsole?

    I was looking through the tag references and did not see an option.

    Thanks.

    @jack78 said:

    There is not an easy way to add a field with tags.

    You could copy the database conf file, add a filed to the conf file, use DBCREATE to make a new database from the conf file, then use DBTRANSFER to move the data from the original database to the new database, delete the original database, and finally use DBMOVE to rename the new database. If you do that then backup your database and keep users out while you are working on it.

    That sounds like a fun thing to do every time I want to migrate new config from Dev to Test or Production. Certainly much easier than the clunky old "open the script file and press F5" method I've been using until now, with those boring SQL commands like "alter table <table_name> add <stuff>".


Log in to reply
 

Looks like your connection to What the Daily WTF? was lost, please wait while we try to reconnect.