Killer App

User avatar
DGDanforth
Posts: 1061
Joined: Tue Sep 17, 2013 1:16 am
Location: Palo Alto, California, USA
Contact:

Killer App

Post by DGDanforth »

I am looking for a way to increase the presence of BlackBox in the general programming community.
We need a "killer app" which grabs peoples attention.

Here is a sketch of what might work and also might satisfy our need for platform independence.

Web based BB
It may be possible to have BlackBox run in web browsers.
If so then platform independence is handle by the browser.
The app would be a simple CMS (content management system) like Tribiq/Zenerio, etc.
It would make use of 'slim binaries' for rapid upgrades and loading. By 'slim binaries' I mean
the general idea not necessarily the explicit form used by Michael Franz.
The modular structure of Component Pascal should run rings around other web systems.

I also could see a directory system that extends across servers so that one could drag and drop
modules into server space in exactly the same way we now do with windows. There would
really not be a distinction between my disk and the server disk. All of that would have to be
set up initially, of course.

Speed of execution would depend upon how WebBB was designed. Java Virtual Machine (JVM)? Java Scriipt in the browser? Some other way?

These are just some ideas I am throwing out there. Any other thoughts?
-Doug
Ivan Denisov
Posts: 1700
Joined: Tue Sep 17, 2013 12:21 am
Location: Russia

Re: Killer App

Post by Ivan Denisov »

There is an web-compiler for Oberon.
http://oberspace.dyndns.org/oberonjs.html
http://oberspace.dyndns.org/Oberonjs.pdf (in Russian)

It makes possible to work with your idea without deprecated technologies like Java. The modern way is HTML5 with JavaScript.

I imagine this as some code from BlackBox server translated to Oberon and loaded by client side. This OberonJS Compiler prepare client side to interact with server by some simple messages protocol.

I think, that I will be able to make some demonstration later.
User avatar
DGDanforth
Posts: 1061
Joined: Tue Sep 17, 2013 1:16 am
Location: Palo Alto, California, USA
Contact:

Re: Killer App

Post by DGDanforth »

I also found some work on Oberon Script and have sent an email to the author
asking whether his work is available.
cfbsoftware
Posts: 204
Joined: Wed Sep 18, 2013 10:06 pm
Contact:

Re: Killer App

Post by cfbsoftware »

The code can be downloaded from the webpage at the URL you mentioned (see the section with the heading Code)
User avatar
DGDanforth
Posts: 1061
Joined: Tue Sep 17, 2013 1:16 am
Location: Palo Alto, California, USA
Contact:

Re: Killer App

Post by DGDanforth »

cfbsoftware wrote:The code can be downloaded from the webpage at the URL you mentioned (see the section with the heading Code)
Yes, but
"It consists of a compiler that translates the full Oberon language into JavaScript code, and a small runtime system that detects and compiles at load-time script sections written in Oberon Script."

I know nothing about JavaScript and hence do not know how to interpret his 'code'. I need to do my homework.
Ivan Denisov
Posts: 1700
Joined: Tue Sep 17, 2013 12:21 am
Location: Russia

Re: Killer App

Post by Ivan Denisov »

There is some example here: http://sage.com.ua/OberonScript/canvas.html

However Alexey said that their OberonJS goes much further than Ralf's work. So the better to use OberonJS.

Here the example of Ajax technology:
http://oberspace.dyndns.org/index.php/t ... l#msg21065


You can put this into the online compiler and press "Compile & Run":

Code: Select all

MODULE JsString;
   IMPORT JS;

   TYPE T* = POINTER TO RECORD END;

   PROCEDURE Create*(s : ARRAY OF CHAR) : T;
   VAR
      res : T;
      i   : INTEGER;
      c   : CHAR;
   BEGIN
    JS.do("res = ''");
    i := 0;
      WHILE (i<LEN(s)) & (s[i]#0X) DO
         c := s[i];
         JS.do("res += String.fromCharCode(c);");
         INC(i);
      END;
      RETURN res
   END Create;

   PROCEDURE At*(jstring : T; i : INTEGER) : CHAR;
   VAR
      res : CHAR;
   BEGIN
      JS.do("res = jstring.charCodeAt(i);");
      RETURN res
   END At;

   PROCEDURE Length*(jstring : T) : INTEGER;
   VAR
      res : INTEGER;
   BEGIN
      JS.do("res = jstring.length;");
      RETURN res
   END Length;

   PROCEDURE ConvertToArray*(jstring : T; VAR text : ARRAY OF CHAR);
   VAR
      i : INTEGER;
   BEGIN
      i := 0;
      WHILE (i<LEN(text)) & (i<Length(jstring)) DO 
         text[i] := At(jstring, i);
         INC(i)
      END;
      IF i<LEN(text) THEN text[i] := 0X; END;
   END ConvertToArray;

END JsString.

MODULE XmlHttpRequest;
   IMPORT JS, JsString;

   TYPE T* = POINTER TO RECORD END;

   PROCEDURE Create*() : T;
   VAR res : T;
   BEGIN
      JS.do("res = new XMLHttpRequest ();");
      RETURN res
   END Create;

   PROCEDURE Open*(r : T; method, url : ARRAY OF CHAR);
   VAR 
      m, u : JsString.T;
   BEGIN
      m := JsString.Create(method);
      u := JsString.Create(url);
      JS.do("r.open(m, u, false);");
   END Open;

   PROCEDURE Send*(r : T);
   BEGIN
      JS.do("r.send()")
   END Send;

   PROCEDURE GetResponseText*(r : T; VAR text : ARRAY OF CHAR) : BOOLEAN;
   VAR
      t   : JsString.T;
      res : BOOLEAN;
   BEGIN
      JS.do("t = r.responseText;");
      res := TRUE;
      JS.do("if (t==null) res = false;");
      IF res THEN 
         JsString.ConvertToArray(t, text);
      END;
      RETURN res
   END GetResponseText;
END XmlHttpRequest.

MODULE Test;
   IMPORT JsString, XmlHttpRequest, JS;

   VAR
      req    : XmlHttpRequest.T;
      text   : ARRAY 2048 OF CHAR;
      isText : BOOLEAN;
BEGIN
   req := XmlHttpRequest.Create();
   XmlHttpRequest.Open(req, "get", "test1.txt");
   XmlHttpRequest.Send(req); 
   isText := XmlHttpRequest.GetResponseText(req, text);
   JS.do("alert(isText);");
   JS.do("alert(JsString.Create(text));") 
END Test.
User avatar
DGDanforth
Posts: 1061
Joined: Tue Sep 17, 2013 1:16 am
Location: Palo Alto, California, USA
Contact:

Re: Killer App

Post by DGDanforth »

Where do you get the module JS used in "IMPORT JS"?
Bernhard
Posts: 68
Joined: Tue Sep 17, 2013 6:56 am
Location: Munich, Germany

Re: Killer App

Post by Bernhard »

Hi Doug,

I do not know where you could get it, if you can get it at all, but I guess that it is the JavaScript runtime system and it might be a pseudo module similar to SYSTEM ...

just try the online Compiler: http://oberspace.dyndns.org/oberonjs.html
and the repository: https://github.com/vladfolts/oberonjs

I had to use Google Chrome's translate to arrive there ;)
--
Bernhard
User avatar
DGDanforth
Posts: 1061
Joined: Tue Sep 17, 2013 1:16 am
Location: Palo Alto, California, USA
Contact:

Re: Killer App

Post by DGDanforth »

bernhard wrote:Hi Doug,

I do not know where you could get it, if you can get it at all, but I guess that it is the JavaScript runtime system and it might be a pseudo module similar to SYSTEM ...

just try the online Compiler: http://oberspace.dyndns.org/oberonjs.html
and the repository: https://github.com/vladfolts/oberonjs

I had to use Google Chrome's translate to arrive there ;)
--
Bernhard
Bernhard,
I hadn't realized that one could modify the text in the example of the online compiler.
I thought that was a one time example.
One can modify it for arbitrary Oberon-7 code. That's neat.
Now I need to understand github and exactly what and how to get the files to my machine
so I can generate web pages off line.
-Doug
User avatar
ReneK
Posts: 214
Joined: Tue Sep 17, 2013 9:16 am
Location: Vienna, Austria, Europe

Re: Killer App

Post by ReneK »

As you may remember, some time ago I wrote that Modula-2 became the language on the Amiga, because it was an easy to use language that supported writing games. It was easier to learn than C and the only alternative back then on the Amiga, and it was fast.

I proposed back then that we would have to find a niche for BB, where it fulfilled its job better than others. We need a "selling point".

As is, BBF is not suitable for writing games that are not round based. It was designed for portability between systems (Windows and Apple back then), and this was a selling point before Java took over the field. But back then, OMi discontinued the multi-platform approach, and BBF became a nice launguage and framework among many.

I think your idea of a Killer App, Doug, is exactly what we need. But I'm not sure that web services are the niche where we can shine. Developing on a IIS with Visual Studio and JQuery has a vast amount of tools and helpers and prefabs, jump starting development. I do not see that we are yet there. The O3 is the most mature server software on the BBF, and compared to IIS or apache, it is not mature at all, and there is no documentation for it. None at all. And even if we choose that way, we will be promoting the O3 more than the BBF (which is fine, if we integrate O3 as a fixed part of the framework, not an optional addition). The BBF IDE is more than 10 years old, and it shows. It badly needs adaption. It is till 32 bit, where 64 bit is currently standard. Integration of databases is currently only possible via ODBC. And lastly, the framework does not support multithreadding, which is totally fine in a desktop application, but with a service application, this is a problem. A common approach to scaling servers is to add processors and RAM. This will not work for BBF, since RAM is limited to 4GB in 32 bit, and throwing more processors at a single task system is stupid.

Yes, I know that Josef strongly opposes multithreading, and I can see the wisdom there, but if we want to become the webserver environment or even a competitor in that market, we will have to think of a conservative way to deal with these issues.
Post Reply