Previous Entry Share Next Entry
2016-01

event-driven programming with continuous time

аналитические функции такие хорошие.. только вот операции над графами нельзя представить в виде аналитических функций... или можно?
ну, то есть, классический пример это разворачивание окна, его можно плавно интерполировать координатами и размером. а вот, к примеру, включение или отключение сетевухи низзя...

в 4D диаграммах события получаются вертикальными штрихами, но в то же время встает вопрос упорядочивания событий, т.к. время наступления события (рассчитанное или измеренное) всегда имеет конечную точность, и скорее всего даже для точечных событий имеет смысл рассматривать какую-то функцию распределения, вроде гауссианы, которая отражает вероятность наступления события в каждый данный момент времени..

как-то так.. мда. голова болит, мысли путаются. кому-то еще в голову такое приходило?

* это вопрос не только про решение конфликтов и\или упорядочивание, это про программирование вообще, потому что он мешает строить машины потоков данных, оно же functional reactive systems

** надо это в двух случаях: для сокращения времени реакции системы до "меньше полной латенси" и для сглаживания изменений

классический пример: в шутере игрок нажимает на курок, ему на клиенте начинают проигрывать выстрел, пакет летит в сервер. сервер считает результат, клиент тем временем рисует летящие кровь\осколки (ни к чему не обязывающие), и потом рисуется резльутат попадания (запускается анимация смерти или не запускается)

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

более радикальный пример: есть у нас на сервере и на клиенте агент, отвечающий на сообщения. программист на сервере написал новую версию обработчика и нажал "коммит". при этом хочется что-то красивое делать на клиенте, в тот момент когда одна версия обработчика заменяется другой. не AST же интерполировать, в самом деле? (вот это как раз операции над графами, да).

еще пример: есть HTML страница, в нее догружаются картинки, или окно ресайзится, и надо повторно лейаутить это дело

* еще на почитать: Genuinely Functional GUIs by Conal Elliott


  • 1
the_aaa13 July 3rd, 2010
в физике похожую проблемму неаналитичности графов решают с помощью теории струн :)

wizzard0 July 3rd, 2010
Расскажи! :)

slobin July 3rd, 2010
Не знаю, что имел в виду товарищ, но предполагаю, что "штаны". Простейший пример дискретности -- ветвление: была одна линия, дошли до точки, и стало две. В теории струн эта конструкция превращается в штаны: одна труба разветвляется на две, и точного места, где произошло ветвление, указать нельзя -- все изгибы плавные. Даже "самую нижнюю" точку соединения штанин указать нельзя, потому что направление "вниз" зависит от системы отсчёта. (На самом деле "вниз" -- это "в прошлое", но получается всё то же самое).

Отмазка: с теорией струн я знаком только по книжке Грина, пусть знающие больше поправят.

... Встречаются Ёроол-Гуй, Олгой-Хорхой и Шай-Хулуд ...


wizzard0 July 3rd, 2010
Но ведь сечение штанов в седловой точке будет содержать излом!

slobin July 6th, 2010
В смысле "восьмёрку"? Да, но фишка в том, что нет "the" седловой точки: в зависимости от того, какое направление мы сочтём направлением "вниз", место соединения двух половинок "восьмёрки" будет разным. Что и позволяет избежать расходимостей.

... Административное нарушение и порицание ...


slobin July 3rd, 2010
Кстати, в секонд лайфе это регулярная история: если клиент не успевает поговорить с сервером, движение персонажа он просто интерполирует линейно (и я прохожу сквозь стены, зарываюсь в холмы и так далее). А потом сервер говорит "вот здесь он упёрся в стенку", и всё быстренько отыгрывается обратно.

... Живущий, пока не исчезнут машины ...


slobin July 3rd, 2010
s/интерполирует/экстраполирует/

... Простите мне неверный слог и пару странных слов ...


justy_tylor July 3rd, 2010
С предикшеном в сетевой игре не так. Выбирается более приоритетная структура мира (в простейшем случае сервак), а интерполяцию между структурами никто не делает - в половине случаев нет смысла, в другой половине уже не спасает - ой, он умер, ой, не умер.

Для вебдева - нацепить transition effect и вперёд. Вообще, задача дизайна GUI на 100%. Динамическая перезагрузка (части) кода - такая же фича программы как и всё остальное.

wizzard0 July 3rd, 2010
>> а интерполяцию между структурами никто не делает

Делают. Кучу пейперов на эту тему читал. Но делают руками. А не хочется.

>> Вообще, задача дизайна GUI на 100%

В общем да. Хочется ее обобщить настолько, чтобы гуи (для банальных CRUD-style приложений, вроде например Trac'а) можно было генерировать с учетом данной фичи.

justy_tylor July 3rd, 2010
Где-то _реально_ делают? =)) Когда мы такое рассматривали, то следуя опыту индустрии использовали if(жопа1)...;if(жопа2)...; Потому как задача трансляции жопы (вплоть до разъехавшегося представления о "живости" игрока) в игровое представление "шоб не очень заметили" тоже дизайнерская, не алгоритмическая, и не реализуемая в общем случае.

А поддержка в базовом GUI - научить любое окошечко показывать красивый transition (с изменением размера if need) это не вопрос. Но вот что делать, если там поля _семантически_ переиначены, а в старых пользовательский ввод был?? Кастом код разряда "поддержка версий". Который короче на хорошем DSL, но энивей требующий написания.



smalgin July 5th, 2010
стока читать... пойду повешусь :)

  • 1
?

Log in

No account? Create an account