Перейти к содержимому

eu_tomat

Модераторы
  • Публикации

    2 666
  • Зарегистрирован

  • Посещение

  • Победитель дней

    331

Сообщения, опубликованные пользователем eu_tomat


  1. 5 часов назад, ProgramCrafter сказал:

    И лучше бы (возможно) подменять computer.pullSignal, чтобы эвент просто не доходил до системы

    А может, лучше по старинке через computer.addUser?

    Или этот механизм всё-таки ломается при каких-то условиях?

    В 29.01.2022 в 17:08, Asior сказал:

    Если это робот, то оно при движении слетает.

    Есть какие-то идеи на этот счёт?


  2. В 29.01.2022 в 13:40, Taoshi сказал:

    Теперь после запуска этого файла никто кроме вас не сможет вводить команды в терминал.

    Ой, да сможет...

    Скрытый текст

    Может, новичка это остановит. Но достаточное количество переводов строк в буфере обмена поможет и препятствия вроде io.read() прочистить, и любую последовательность команд передать на выполнение. Доступ к интерпретатору команд Lua тоже не особо усложнится.

     


  3. В 29.01.2022 в 17:08, Asior сказал:

    Если это робот, то оно при движении слетает.

    Вроде бы раньше список пользователей слетал только при переустановке робота, а движение самого робота не приводило к сбросу списка. Когда это изменилось? Или оно всегда так работало?


  4. 2 минуты назад, rootmaster сказал:

    интерестно что такой этот ваш capacity

    Этот наш capacity, судя по выводимым значениям, сообщает размер текстового буфера, выраженный в символах. Произведение высоты и ширины. Но это моё интуитивное предположение.


  5. 2 часа назад, ItsMakar сказал:

    я отправляю на сервер 1 сообщение через modem.broadcast но события создается 2 в итоге код срабатывает 2 раза и плохо

    Такое может быть, например, в случаях:

    • Компьютер имеет две или более сетевых плат с открытым портом, на который поступило сообщение.
    • В сети с этим компьютером имеется другой компьютер с сетевой платой с тем же самым открытым портом.

  6. 15 минут назад, ItsMakar сказал:

    я не могу запустить лаунчер че с сервером или он не существует больше?

    Сервера нет. Осталась лишь сборка для одиночной игры.

     

    upd: и одиночная игра тоже почему-то не работает.


  7. 2 минуты назад, Bumer_32 сказал:

    Если можно то вопрос как?

    Ну допустим, твоя программа принимает входящие запросы на какой-нибудь сетевой порт.

    А робот через интернет-плату делает запросы на этот самый порт и получает ответы. Допустим.


  8. 1 час назад, rootmaster сказал:

    будет ли клавиатура в роботе работать без монитора(я могу проверить сам но шас дебажу(занят я кароч))

    Тут такое дело... крокодил... Солнце в небе проглотил.

    Дела неотложные у всех. Пирогами там... блинами... и сушёными грибами.


  9. 12 минуты назад, Bumer_32 сказал:

    Допустим, я написал реальную прогу на python или c# и запустил её, могу ли я с робота/пк opencomputers получить какие то данные?

    А запустил-то где? Что делает прога? И кто и откуда должен получить данные?


  10. 5 минут назад, Disc2 сказал:

    Погрешность чего именно

    Погрешность вычисления computer.uptime(), а затем разницы между ними.

    Вот демонстрация этого эффекта:

    Скрытый текст
    
    > for tick=1e9,1e9+10 do print( (tick+1)/20 - tick/20)end
    0.049999997019768
    0.050000004470348
    0.049999997019768
    0.050000004470348
    0.049999997019768
    0.049999997019768
    0.050000004470348
    0.049999997019768
    0.050000004470348
    0.049999997019768
    0.049999997019768
    

     

     

    17 минут назад, Disc2 сказал:

    т.е. например такты идут 1\2\3\4\5\6.. во втором такте исполняем os.sleep(0.05) а замер времени выдал 0.050001 - в каком такте мы очутились? в 4 или 5?

    Замер сообщает нам, что за время выполнения os.sleep(0.05) прошёл 1 игровой такт. И если пред этим был такт с номером 2, то сейчас мы находится в такте 3.

     

    21 минуту назад, Disc2 сказал:

    ..А на мониторе (в игре) вывод происходит в тот же самый момент когда код исполнился, или тоже с задержкой на такт?.. 

    Изображение на мониторе обновляется один раз в такт, но на каком именно участке такта, сложно сказать. Поэтому изображение может обновиться как и через наносекунду после вывода, так и почти через целый такт.

     


  11. 6 минут назад, Disc2 сказал:

    У меня результат замера времени исполнения sleep(0.04) выдается то 0.049999 то 0.050001

    Т.е. это два  тика,или один? Мы же округляем вверх?

    Это погрешность вычислений. Округляем до ближайшего 0.05, то есть до целого такта.


  12. 14 минуты назад, Disc2 сказал:

    Каков список точностей из которого мне нужно выбрать одну?

    А это, пожалуй, самый важный вопрос в теме времени. Хорошо было бы взять, да и получить такой список. У меня его нет. Есть какие-то смутные критерии для классификации разных видов точности, но это вообще не список. Попробуем составить его вместе, если получится.

     

    Базовый уровень: время исполнения вызова.

    22 минуты назад, Disc2 сказал:

    в последней версии ОС для МС 1.12.2 robot.place() вообще занимает 8-9 тиков, на 1.7.10 или более ранних версиях ОС роботы чтоли были быстрее?

    При стандартном конфиге мода вызов robot.place() всегда требовал 8 тактов времени, а при наличии лагов и больше.

    Это то, что мы можем легко протестировать без особого напряжения мозга.

    26 минут назад, Disc2 сказал:

    Почему 2 такта на демонтаж? Как именно измеренно?

    Почему 4 на установку? Как измеренно?

    4 такта на установку? Нет, я ошибся. Требуется 8 тактов (0.4 сек). Измерено тем же способом, который в примере по ссылке.

     

    Скоростной уровень: время гарантированного исполнения запрошенного действия.

    Робот или транспозер сразу же выполняет запрошенное действие, и, выдержав паузу, возвращает управление в программу. Это значит, что уже в следующем такте результат этого действия можно будет однозначно отследить. Я думаю, что ранее я сильно завысил тайминги. На каждое действие можно смело выделять по одному такту времени: установка реактора, установка камер, заполнение реактора. На этом уровне я ещё могу говорить о какой-то понятной точности, выражая её в игровых тактах. И это время можно косвенно измерить.

     

    Бешеный уровень: время фактического исполнения запрошенного действия.

    На предыдущем уровне требовалось выждать один такт, чтобы однозначно отследить результат выполненного действия. Но это, строго говоря, не обязательно. Поставим себе простую задачу: пересобрать реактор с одной дополнительной камерой за один такт времени. Это возможно при условии, если роботы строго в обозначенном порядке выполнят действия:

    • Первый робот снимает блок реактора. Дополнительная камера снимается автоматически. Робот уходит в ожидание на 2 такта.
    • Второй робот устанавливает блок реактора и уходит в ожидание на 8 тактов. Успех этого робота полностью зависит от успеха первого.
    • Третий робот устанавливает дополнительную камеру и также уходит в ожидание 8 тактов. Аналогично, его успех полностью зависит от действий предыдущих двух исполнителей.

    Возникают вопросы: Какой из роботов будет выполнять действие первым? Как управлять порядком исполнения команд внутри одного игрового такта? Не ответив на эти вопросы, мы не сможем быть уверены в успешности выполнения всей цепочки действий.

     

    Пока я не знаю, как это гарантировать. Но я, например, могу ранжировать роботов по скорости их реакции, чтобы каждого назначить на соответствующий участок последовательности. Скорее всего, в такой конфигурации они смогут успешно работать до следующей перезагрузки чанка, потом потребуется переназначить их роли. Это максимум, которого мне удавалось достичь. Но он пока неустойчив даже в лабораторных условиях. Синхронизация таких цепочек не гарантирована при загрузке сохранённого мира.

     

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

     

    1 час назад, Disc2 сказал:

    Кстати,а не можем ли мы в 1 такт выполнить сразу несколько действий в определенной последовательности?

    За один такт и в определённой последовательности? Получается, что, при некоторых условиях можем. Бешеный транспозер уже выполняет сотню действий за такт, но для его работы не требуется соблюдать последовательность.

     

    Какие у тебя есть идеи для точного управления последовательностью действий?


  13. 20 минут назад, Disc2 сказал:

    Но нам же надо сначала как-то замерить в точности, как каждый элемент установки себя ведет и какие там тайминги латентности и т.д. чтобы потом было из чего считать затраты времени и строить алгоритм?

    А в какой именно точности ты хочешь измерить тайминги?


  14. 2 минуты назад, Disc2 сказал:

    как мы знаем что 5 роботов поставили реакторные блоки одновременно в такой-то такт, транспозер переместил предметы в следующий такт, и реактор получил рэдстоун сигнал и запустился ровно череp n тактов?

    В том примере по ссылке мы ничего не знаем о факте установки блока роботом. Мы знаем только о времени, в течение которого вызов обрабатывался.

     

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

×
×
  • Создать...