Giter Site home page Giter Site logo

Comments (12)

bogachev-pa avatar bogachev-pa commented on September 15, 2024

@k-alexandrovsky
Кирилл, можешь объяснить, почему ты именно так записываешь структуру модели для результатов?

Например, код модели:

$Results
    Test_1 : watch_par Парикмахер_1.состояние_парикмахера
$End

В JSON структуре в ...Model.java получаем:

...
.put
(
"results", new JSONArray()
    .put
        (
            new JSONObject()
                .put("name", "model_test_7.Test_1")
                .put("type", "watch_par")
                .put("value_type", "model_test_7.Парикмахеры.состояние_парикмахера_enum")
        )

...

Здесь value_type это model_test_7.Парикмахеры.состояние_парикмахера_enum.

А в параметрах типа Парикмахеры в структуре:

...
.put
(
    "parameters", new JSONArray()
        .put
        (
            new JSONObject()
                .put("name", "состояние_парикмахера")
                .put("type", "enum")
                .put
                (
                    "enums", new JSONArray()
                        .put("Свободен")
                        .put("Занят")
                )
                .put("enum_origin", "model_test_7.Парикмахеры.состояние_парикмахера")
                .put("offset", 0)
        )
...

Здесь type это просто enum и еще есть дополнительная информация в виде enum_origin.

Мне непонятно, как мне добраться до информации о енуме из JSON-структуры результата (например, чтобы вывести его строкой в трассировке). Если бы мы в результате записывали enum_origin, то всё было бы очевидно. А здесь мы пишем какую-то странную строчку, из которой, конечно, можно получить нужный enum_origin, отбросив _enum, но это выглядит ужасно костыльно.

from raox.

bogachev-pa avatar bogachev-pa commented on September 15, 2024

Пока что накостылил, как описал выше.

from raox.

bogachev-pa avatar bogachev-pa commented on September 15, 2024

Кстати, смержился с тобой, и модели вообще сыпятся на сериализации результатов типа enum.

Ты генеришь в Имя_результата.java вот такие куски кода:

private model_test_7.Парикмахеры.состояние_парикмахера_enum minValue = model_test_7.Парикмахеры.состояние_парикмахера_enum.MAX_VALUE;
    private model_test_7.Парикмахеры.состояние_парикмахера_enum maxValue = model_test_7.Парикмахеры.состояние_парикмахера_enum.MIN_VALUE;
...
    if(value < minValue)
        minValue = value;

    if(value > maxValue)
        maxValue = value;
...
    storelessStats.next(Simulator.getTime(), value);

И это все сыпит ошибками, потому что для енумов (а у тебя тип там вообще model_test_7.Парикмахеры.состояние_парикмахера_enum) такие методы и поля не определены.

Edit: и вообще у меня после мержа сыпятся exception'ы на сериализации. Много разных и странных. Ты пробовал на стандартной модели с временными ресурсами включить всю трассировку и прогнать?

Если подробнее, то dpt и образцы не ломаются, в результатах ломаются watch_par с такими ошибками:

ru.bmstu.rk9.rdo.lib.json.JSONException: JSONObject["value_type"] not found.
    at ru.bmstu.rk9.rdo.lib.json.JSONObject.get(JSONObject.java:478)
    at ru.bmstu.rk9.rdo.lib.json.JSONObject.getString(JSONObject.java:659)
    at ru.bmstu.rk9.rdo.lib.Statistics$WeightedStoreless.initFromDatabase(Statistics.java:156)
    at model_test_7.Длина_очереди.calculate(Длина_очереди.java:117)
    at ru.bmstu.rk9.rdo.ui.runtime.ExecutionHandler$2.run(ExecutionHandler.java:281)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

Ресурсы ломаются где-то на сериализации:

java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at ru.bmstu.rk9.rdo.ui.runtime.ExecutionHandler$2.run(ExecutionHandler.java:260)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)
    at java.util.ArrayList.get(ArrayList.java:429)
    at ru.bmstu.rk9.rdo.lib.Database.addResourceEntry(Database.java:315)
    at model_test_7.Образец_прихода_клиента.run(Образец_прихода_клиента.java:82)
    at ru.bmstu.rk9.rdo.lib.Simulator.run(Simulator.java:177)
    at rdo_model.Embedded.runSimulation(Embedded.java:45)
    ... 6 more

Завести тебе отдельно ишью на последний edit?

from raox.

k-alexandrovsky avatar k-alexandrovsky commented on September 15, 2024

Так, вот java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 это конечно жуткий косяк, я даже не понял, когда я это успел сломать. Это я сейчас починю. А что касается энумов, то в структуре результатов я просто забываю отрезать _enum. И переделаю на ту же схему, что и у параметров ресурсов ()

from raox.

k-alexandrovsky avatar k-alexandrovsky commented on September 15, 2024

Так, вот java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 это, конечно, жуткий косяк, я даже не понял, когда я это успел сломать. Это я сейчас починю. А что касается энумов, то в структуре результатов я просто забываю отрезать _enum. И вообще я тогда переделаю на ту же схему, что и у параметров ресурсов (с явным копированием энумов и указанием enum_origin, это и правда удобно, как тем, кому интересно, откуда взялся энум, так и тем, кто просто хочет его литерал). А вот что касается падений в watch_par и всяких minValue, тут мы обратимся к справке:
http://www.rdostudio.com/help/help/rdo_lang_rus/html/rdo_obj/rdo_obj_pmd.htm
Странно, что у watch_par не написано ничего, конечно, но вот у watch_value

watch_value <имя_типа> [NoCheck | <логическое_выражение>] <арифметическое_выражение>

арифметическое_выражение
Арифметическое выражение должно быть целого или вещественного типа.

И вот в РДО:
image

Так что статистика для энумов уже будет новой фичей, и когда нибудь мы ее конечно же допилим. Там, в принципе, вполне очевидно, что должно быть - проценты нахождения параметра в каждом энуме, минимальная/максимальная длительность каждого состояния, и всякое такое. Можно будет строить красивые pie chart'ы. Но это потом, надо писать еще один модуль в Statistics.

from raox.

bogachev-pa avatar bogachev-pa commented on September 15, 2024

вот что касается падений в watch_par и всяких minValue , тут мы обратимся к справке:

Странно, тогда вообще что ли результатов типа enum не должно быть в трассировке?

С другой стороны, что нам мешает наблюдать за параметром типа енум? Кажется вполне валидным желанием. Для них просто часть статистики не будет иметь смысла, ну и что.
Мне кажется, надо просто сделать несколько другой формат статистики для енумов и просто впилить возможность за ними наблюдать.

from raox.

k-alexandrovsky avatar k-alexandrovsky commented on September 15, 2024

Блин, не успел сделать апдейт прошлому сообщению, в общем, см. выше :)

from raox.

bogachev-pa avatar bogachev-pa commented on September 15, 2024

Угу, читаешь мысли. Вроде это не кажется сложным, можно будет и на праздниках сделать.
Я тогда свой коммит не буду ревертить.

from raox.

k-alexandrovsky avatar k-alexandrovsky commented on September 15, 2024

Я тогда свой коммит не буду ревертить.

Так, а если я изменю структуру результатов, костыль придется немного поправить.
Что нибудь в духе

if (valueTypeRaw == "enum")

Проще сделать amend тогда, мне кажется. Хотя костыль на энум неизбежен, просто можно будет сразу забрать имена энума.

from raox.

bogachev-pa avatar bogachev-pa commented on September 15, 2024

Ну можешь либо вмержить мои 4 коммита сейчас, либо я заново сделаю мерж и потом залью фикс отдельным коммитом. Если что там всего в одном файле конфликты и те несложные, я только импорты менял и убирал лишние "Tracer.".

Иначе у нас будут несобирающиеся коммиты, это как-то неприятно.

from raox.

k-alexandrovsky avatar k-alexandrovsky commented on September 15, 2024

Так, я исправил падения. И даже накостылил красоту с enum_origin. Можно проверить ее в структуре результата для get_value. Сериализовываться это добро не будет, зато корректность можно глянуть в сгенерированном коде.

from raox.

aurusov avatar aurusov commented on September 15, 2024

Закрываем

from raox.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.