Автор Тема: [Oberon-07/11, js] Demos  (Прочитано 28076 раз)

DddIzer

  • Гость
Re: [Oberon-07/11, js] Demos
« Ответ #30 : Октябрь 19, 2013, 09:43:00 pm »
Если словеса туго воспринимаются, вот настоящий текстовый интерфейс: https://www.youtube.com/watch?v=GCcTT-B8bIQ
Разница, как говорится, на лицо.
да но сама возможность, то никуда не делась?

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: [Oberon-07/11, js] Demos
« Ответ #31 : Октябрь 19, 2013, 09:51:09 pm »
Если словеса туго воспринимаются, вот настоящий текстовый интерфейс: https://www.youtube.com/watch?v=GCcTT-B8bIQ
Разница, как говорится, на лицо.
да но сама возможность, то никуда не делась?
Возможность чего? Ну можно команду с кнопкой вставить и вызвать. Ну так это и в MS Word можно. Значит там тоже текстовый интерфейс?

В ББ интерфейс изначально не ориентирован на тот стиль работы, который был в оригинальном обероне.
На тот стиль, который и был по сути текстовым интерфейсом. Разница в подходах становится очевидна, если хоть немного поработать в Обероне.
« Последнее редактирование: Октябрь 19, 2013, 09:53:43 pm от ilovb »

kkk

  • Гость
Re: [Oberon-07/11, js] Demos
« Ответ #32 : Октябрь 19, 2013, 09:52:06 pm »
Илов, если для некоторых данных определена форма, то их правильнее выводить в виде формы. Твоё разоблачение нетрушности ББ, сделанное на дноберспейсе изменило этот мир. Оукей. Иди покури эволюцию оберона в картинках. АМЭН.

DddIzer

  • Гость
Re: [Oberon-07/11, js] Demos
« Ответ #33 : Октябрь 19, 2013, 09:56:59 pm »
Если словеса туго воспринимаются, вот настоящий текстовый интерфейс: https://www.youtube.com/watch?v=GCcTT-B8bIQ
Разница, как говорится, на лицо.
да но сама возможность, то никуда не делась?
Возможность чего? Ну можно команду с кнопкой вставить и вызвать. Ну так это и в MS Word можно. Значит там тоже текстовый интерфейс?
Смотрите , Борис, вот в первых версиях дос вся работа с компьетером осуществлялась через командную строку (более корректно- интерфейс командной строки). В  win8 командную строку может найти только искушенный пользователь, но означает ли это что win8 не  имеет возможности работы с ней, или функциональность ее (в сравнении с дос ) в чем то урезана?

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: [Oberon-07/11, js] Demos
« Ответ #34 : Октябрь 19, 2013, 09:58:33 pm »
Илов, если для некоторых данных определена форма, то их правильнее выводить в виде формы. Твоё разоблачение нетрушности ББ, сделанное на дноберспейсе изменило этот мир. Оукей. Иди покури эволюцию оберона в картинках. АМЭН.
Да мне вообще насрать. Не в трушности дело, а в подмене понятий. Меня не возбуждает ни интерфейс ББ, ни оригинальный интерфейс. У меня взгляды ближе к подходу boxes&glue из TEX'а Кнута.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11, js] Demos
« Ответ #35 : Октябрь 19, 2013, 10:01:57 pm »
Ну если уж тут речь почему-то свелась к обсуждению ББ и его интерфейса, то следует заметить, что составной документ в том виде в котором он там есть, и возможность через "конфиг" довольно просто настроить интерфейс, тоже в некоторых задачах может быть очень даже полезен.

Если бы я не видел в этом всем потенциальную пользу для некоторых моих задач, я бы на форуме blackboxframework.org просто не стал бы даже регистрироваться.

Если же вернуться к топику, то думаю "текст как интерфейс" в том виде в котором он был в Оберон-ОС, на oberonjs сделать будет не слишком сложно. Вопрос лишь в адаптации его под полторы кнопки мышки (у многих ноуты с тачпадами, там удобно пользоваться только левой кнопкой).
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: [Oberon-07/11, js] Demos
« Ответ #36 : Октябрь 19, 2013, 10:04:09 pm »
Смотрите , Борис, вот в первых версиях дос вся работа с компьетером осуществлялась через командную строку (более корректно- интерфейс командной строки). В  win8 командную строку может найти только искушенный пользователь, но означает ли это что win8 не  имеет возможности работы с ней, или функциональность ее (в сравнении с дос ) в чем то урезана?
Вот! Отличный пример. Текстовый интерфейс в ББ - это командная строка в Win8. Это я и имел в виду.
Командная строка есть, и функциональность ее вроде не меньше, но интерфейс в Win8 принципиально отличается от DOS, т.к. командная строка не занимает уже центрального положения.
Спасибо  :)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11, js] Demos
« Ответ #37 : Октябрь 19, 2013, 10:11:54 pm »
Смотрите , Борис, вот в первых версиях дос вся работа с компьетером осуществлялась через командную строку (более корректно- интерфейс командной строки). В  win8 командную строку может найти только искушенный пользователь, но означает ли это что win8 не  имеет возможности работы с ней, или функциональность ее (в сравнении с дос ) в чем то урезана?
На самом деле, тут речь идет о довольно важной штуке - целостности восприятия, лаконичности и непротиворечивости интерфейса. То что было у Вирта, то было действительно очень неплохо подогнано и было простым и целостным. Интерфейс ББ же тут в чем-то похож на интерфейс Win8 - смешение двух парадигм (в случае Win8 это Merto (Windows modern) интерфейс и Windows desktop), и пользователю нужно переключаться (переключение имеется ввиду в голове - перенастройка) с одной на другую, это приводит к дополнительным усилиям, UX становится менее целостным.

Эта та цена которую ББ заплатил за то, чтобы влиться в виндовозный мейнстрим, чтобы быть более привычным виндовозному пользователю. И, похоже, цена оказалась оправданной (с точки зрения расширения пользовательской базы) - помнится info21 писал, что как раз именно это его покорило в ББ относительно оригинального Оберона.

На самом деле возможно сейчас ББ стоит провернуть это еще раз, если хочется вдохнуть в него новую жизнь - сделать вариант интерфейса для Metro. Благо Metro как раз к типографике и тексту тяготеет.
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: [Oberon-07/11, js] Demos
« Ответ #38 : Октябрь 19, 2013, 10:18:38 pm »
Теоретически в ББ можно работать как в Обероне, да. Но, как сказал выше valexey, оно уже не так органично. И, кроме того, нету некоторых возможностей, которые поощряли работу с текстовыми фреймами, т.е. делали это удобным.
Взять даже треки. В обероне экран сразу разделен на два трека. Пользовательский, в котором отображается документ, и системный, в котором лежат инструменты (наборы команд)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11, js] Demos
« Ответ #39 : Сентябрь 14, 2014, 02:27:26 am »
Еще одина демонстрация Processing'a:

MODULE PageInit;
  IMPORT JS;

  PROCEDURE CreateCanvas*;
  BEGIN
   JS.do("var canvas = document.createElement('canvas');
          canvas.id = 'processingCanvas'
          document.body.insertBefore(canvas,document.body.childNodes[0]);
    ");
  END CreateCanvas;
   
END PageInit.


MODULE Processing;
  IMPORT JS;
   
  TYPE
    ProcessingType* = POINTER TO RECORD END; (* dummy type *)
    CallbackType*   = PROCEDURE;
  VAR
    MouseX*   : REAL;
    MouseY*   : REAL;
    Width*    : INTEGER;
    Height*   : INTEGER;

    DrawProc  : CallbackType;
    SetupProc : CallbackType;
    Instance  : ProcessingType;
    Started   : BOOLEAN;

  (* callbacks *)

  PROCEDURE SetSetupProc*(s : CallbackType);
  BEGIN
    SetupProc := s
  END SetSetupProc;
   
  PROCEDURE SetDrawProc*(d : CallbackType);
  BEGIN
     DrawProc := d
  END SetDrawProc;

  (* global *)
  PROCEDURE SetFrameRate* (fps : INTEGER);
  BEGIN
    JS.do("Instance.frameRate(fps);")
  END SetFrameRate;

  PROCEDURE SetBackground*(argb : INTEGER);
  BEGIN
    JS.do("Instance.background(argb)")
  END SetBackground;

  PROCEDURE SetSize*(w, h : INTEGER);
  BEGIN
    JS.do("Instance.size(w,h);")
  END SetSize;
   
  PROCEDURE Stroke*(argb : INTEGER);
  BEGIN
    JS.do("Instance.stroke(argb)")
  END Stroke;

  (* drawing *)

  PROCEDURE Line*(x0,y0,x1,y1 : REAL);
  BEGIN
    JS.do("Instance.line(x0,y0,x1,y1);");
  END Line;

  (* Color *)
  PROCEDURE Fill*(r,g,b : INTEGER);
  BEGIN
    JS.do("Instance.fill(r, g, b)");
  END Fill;

  (* math *)
  PROCEDURE Radians*(angle : REAL) : REAL;
  VAR
    ret : REAL;
  BEGIN
    JS.do("ret = Instance.radians(angle)");
    RETURN ret
  END Radians;

  PROCEDURE Map*(value,low1,high1,low2,high2 : REAL) : REAL;
  VAR ret : REAL;
  BEGIN
    JS.do("ret = Instance.map(value,low1,high1,low2,high2);");
    RETURN ret
  END Map;

  PROCEDURE Noise2d*(x, y : REAL) : REAL;
  VAR ret : REAL;
  BEGIN
    JS.do("ret = Instance.noise(x,y);");
    RETURN ret
  END Noise2d;

  (* transform *)
  PROCEDURE Translate*(x,y : REAL);
  BEGIN
    JS.do("Instance.translate(x,y);")
  END Translate;

  PROCEDURE PushMatrix*;
  BEGIN
    JS.do("Instance.pushMatrix();")
  END PushMatrix;

  PROCEDURE PopMatrix*;
  BEGIN
    JS.do("Instance.popMatrix();")
  END PopMatrix;

  PROCEDURE Rotate*(angle : REAL);
  BEGIN
    JS.do("Instance.rotate(angle);")
  END Rotate;

  (* Vertex *)
  PROCEDURE BeginShape*();
  BEGIN
    JS.do("Instance.beginShape();")
  END BeginShape;

  PROCEDURE BezierVertex2d*(cx1, cy1, cx2, cy2, x, y : REAL);
  BEGIN
    JS.do("Instance.bezierVertex(cx1, cy1, cx2, cy2, x, y);")
  END BezierVertex2d;

  PROCEDURE CurveVertex2d*(x, y : REAL);
  BEGIN
    JS.do("Instance.curveVertex(x, y);")
  END CurveVertex2d;

  PROCEDURE EndShape*();
  BEGIN
    JS.do("Instance.endShape();")
  END EndShape;

  PROCEDURE EndAndCloseShape*();
  BEGIN
    JS.do("Instance.endShape(Instance.CLOSE);")
  END EndAndCloseShape;

  PROCEDURE Vertex2d*(x,y : REAL);
  BEGIN
    JS.do("Instance.vertex(x, y);")
  END Vertex2d;
   
  (* internal engine *)

  PROCEDURE InnerDraw;
  BEGIN
    IF DrawProc # NIL THEN
      JS.do("MouseX = Instance.mouseX; MouseY = Instance.mouseY;");
      JS.do("Width = Instance.width; Height = Instance.height;");
      DrawProc
    END
  END InnerDraw;

  PROCEDURE InnerSetup;
  BEGIN
    IF SetupProc # NIL THEN
      SetupProc
    END
  END InnerSetup;
 
  (* start routine *)
  PROCEDURE Start*;
  BEGIN
     ASSERT(~Started);
     JS.do("function sketchProc(p){p.draw=InnerDraw; p.setup=InnerSetup; Instance=p;}");
     JS.do("var canvas = document.getElementById('processingCanvas');");
     JS.do("var processingInstance = new JS.Processing(canvas, sketchProc)");
     Started := TRUE
  END Start;
   
END Processing.

MODULE NoiseWave;
  IMPORT PageInit, P := Processing;

  CONST
    width  = 640;
    height = 360;

  VAR
    yoff : REAL;

  PROCEDURE Setup;
  BEGIN
    P.SetSize(width, height);
  END Setup;
 
  PROCEDURE Draw;
  VAR
    xoff : REAL;
    x    : INTEGER;
    y    : REAL;
  BEGIN
    xoff := 0.0;
    P.SetBackground(51H);
    P.Fill(255,255,255);
    P.BeginShape();

    FOR x := 0 TO width BY 10 DO
      y := P.Map(P.Noise2d(xoff, yoff), 0.0, 1.0, 200.0, 300.0);
      P.Vertex2d(FLT(x), y);
      xoff := xoff + 0.05;
    END;
    yoff := yoff + 0.01;
    P.Vertex2d(FLT(width), FLT(height));
    P.Vertex2d(0.0, FLT(height));
    P.EndAndCloseShape();
  END Draw;

BEGIN
  yoff := 0.0;
  PageInit.CreateCanvas;
  P.SetSetupProc(Setup);
  P.SetDrawProc(Draw);
  P.Start
END NoiseWave.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [Oberon-07/11, js] Demos
« Ответ #40 : Сентябрь 14, 2014, 09:36:58 am »
Еще одина демонстрация Processing'a:

А в чём заключается суть этой демки?
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11, js] Demos
« Ответ #41 : Сентябрь 18, 2014, 11:29:46 am »
Прродалжаем наши игры. На этот раз демка не графическая. На этот раз у нас запрос данных с сервера:

Используются два вспомогательных модуля - JsString, для конвертации из/в js-строку в/из ARRAY OF CHAR, и, собственно, XmlHttpRequest - неполный биндинг к соответствующему объекту js, позволяющему делать запросы на сервер.

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.

Чтобы попробовать делаем как обычно - копипастим на страничку онлайн-компилятора, тыкаем Compile & Run.

На всякий случай продублирую код самого примера, без модулей-биндингов:
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.

Тут псевдомодуль JS используется лишь для того, чтобы вывести результат запроса на экран в виде диалогового окошка (вначале статус запроса - есть ли ответ нормальный, затем уже сам текст). Для самого запроса он не нужен.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [Oberon-07/11, js] Demos
« Ответ #42 : Сентябрь 18, 2014, 11:42:51 am »
Прродалжаем наши игры. На этот раз демка не графическая. На этот раз у нас запрос данных с сервера:
Чо-та я не догоняю -- а куда эта демка коннектится? Не вижу нигде адреса сервера... о_О
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11, js] Demos
« Ответ #43 : Сентябрь 18, 2014, 11:48:31 am »
Прродалжаем наши игры. На этот раз демка не графическая. На этот раз у нас запрос данных с сервера:
Чо-та я не догоняю -- а куда эта демка коннектится? Не вижу нигде адреса сервера... о_О
Правила безопасности в современных браузерах таковы, что запросы можно слать только к тому же серверу с которого текущая страничка была загружена.

Цитировать
Для ограничения XmlHttpRequest используется философия "Same Origin Policy". Она очень проста - каждый сайт в своей песочнице. Запрос можно делать только на адреса с тем же протоколом, доменом, портом, что и текущая страница.

Т.е, со страницы на адресе http://site.com нельзя сделать XmlHttpRequest на адрес https://site.com, http://site.com:81 или http://othersite.com

http://xmlhttprequest.ru/#security
Y = λf.(λx.f (x x)) (λx.f (x x))