Coder Social home page Coder Social logo

rts's People

Contributors

lapkoshka avatar svetlanavargo avatar

Watchers

 avatar  avatar  avatar  avatar

rts's Issues

При регистрации метки проверять историю

При регистрации сходить в races и посмотреть есть ли записи, если есть, то добавить в попап чекбокс - восстановить историю гонок, если галочка снята и произошел сабмит - историю затереть (предупредить вы уверены?)

Передел регистрации участников

Для того чтобы наполнять таблицу участников из редактирования мероприятия или в принципе при регистрации участника связывать его с текущим мероприятием, нужно переделать существующую схему и метод добавления участника в БД

  • добавить таблицу на бекенде для хранения связей id мероприятия -> id участника

  • написать методы в БД по удалению и созданию таких связей

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

  • если всплывает окно реги при обнаружении метки, то в ней стоит галочка по-умолчанию (привязать к текущему мероприятию) и участник связывается с текущим мероприятием

  • список участников должен управляться следующим образом, есть список в который можно добавить уже из зарегистрированных либо удалить с помощью управляющих кнопок. Нужно теперь связать управление на вьюхе с методами в БД

  • таблица Участники на вьюхе теперь показывает только тех участников которые связаны с текущим мероприятием

Опционально:
добавить где-нибудь возможность просмотра и управления ВСЕХ зарегистрированных участников

[ФИЧА] Удаление пользователя из контеста

Добавить возможность удалить пользователя из списка участников контеста.

image

Сейчас реализовать затруднительно, т.к в списке нет данных о том какая именно метка из всех меток пользователя привязана к конкретному контесту. А на руках из данных только contest_id и user.id

Задача: научиться находить по user_id и contest_id ту запись в tag_contest которую нужно удалить. Либо рефакторнуть схему БД чтобы упросить задачу.

Не забыть: Запретить удаление из мероприятия если оно закончено

Окончательный выпил antd

Выпилить antd в связи с переездом на blueprint

  • попап регистрации участника
  • таблицы отображения результатов
  • интерфейсы (.*)Row

Финальные доделки

  • причесать версточку, блок с результатами подбить по ширине
  • уменьшить размер окна по-умолчанию
  • упаковать в установщик

Добавить возможность подключаться к ридеру напрямую без роутера

Сейчас приложение главного ридера ищет его в сети среди прочих устройств, возвращает ip, затем подключается по нему.

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

Настройки

На смартбаннере добавить поля для значений констант

  • Время отведенное на заполнение трейса
  • Уровень RSSI ниже которого следует отбрасывать метки
  • Минимальное время круга, в случае если время гонки меньше этого времени, то отбрасывать финишный трейс (если ситуация повторяется n раз, значит зависли на финише - грохать с ошибкой)

Сохранять в настройки при изменении, подгружать чтобы не вводить постоянно руками

Live-reload by CTRL+R

Адаптировать index.ts под перезагрузку окна. Неудобно каждый раз закрывать приложение
и пересобирать. Удобно обновляя клиентский код жать CTRL+R и получать тот же результат
что при перезагрузке приложения

Включить в этот процесс Webpack

Доделки по отображению результатов

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

Все происходит в PR: #70

-------------------------------------------------
Второй экран с результатами
-----------------
Столбец "отставание" на табло
В общих результатах гонки где участники отсортированы от лучшего результата к худшему можно добавить еще один столбец который будет показывать отставание от предыдущей позиции или от лидера (поискать как это обычно делают)

RSSI график в новой вьюхе

Сперва замержить: https://github.com/lapkoshka/rts/pull/27/files

Выводить метки и их RSSI на график так как это было на старой вьюхе (или попизже)

Посмотреть как это было на старой
.env

OLD_VIEW=true
  1. В консоли electron-приложения fakePortableTag('1233') - регаешь пользака
  2. Вызываешь дважды fakeMainTag('1233') - для того чтобы он появился на вкладке Итого
  3. Во вкладке Итого кликаешь на него - появляется график (накликать можно несколько человек)

image

fakePortableTag('666');
fakeMainTag('666', 80);
// подожди пока гонка начнется и тогда закончи ее
fakeMainTag('666', 80);

// симуляция меток
const sleep = timeout => new Promise(resolve => setTimeout(resolve, timeout));
const rnd = (min, max) => Math.round(Math.random() * (max - min) + min);
(async () => {
    for (let i = 0; i < 1000; i++) {
        await sleep(rnd(50, 150));
        const rssi = rnd(50, 80);
        fakeMainTag('666', rssi);
    }
})()

Справочно:
#10 - еще тасочка с проблемами графика на старой вьюхе

Рефакторинг - общая компонента results

  • Логика и стили похожи
  • методы render почти идентичны, меняется только количество столбцов
  • сортировку вытащить наверх, должна работать для всех
  • допилить стили для Total
  • 3 метода updateRaceHistory(), updateTotalInfo(), updateUsers() - неудобны, сделать 1
  • кнопка rssi для открытия графика в таблице users, по клику на пользователя добавлять его имя в фильтр - переключать вкладку на history

Исправление проблем с RSSI графиком

Сейчас на каждый тег происходит полная перерисовка графика методом Plotly.newPlot.

Необходимо найти способ оптимизировать перерисовку, в документации к API Plotly есть методы react и тд для подобных случаев.

Починить график

Не работает + из за разделения интерфейсов надо теперь отдельно как-то брать данные о пользаках, закомментил в настройках этот функционал

Передел хранения результатов гонок

В связи с тем что вся база изменилась, необходимо актуализировать методы в БД связанные с хранением данных гонок

  • логика которая ловит метку, достает пользователя из БД, начинает крутить с ним гоночную логику необходимо актуализировать, т.к. хранение пользователей было переписано
  • переписать методы сохранения гоночных событий в БД, каждый круг теперь записывается в свою таблицу, гонки создаются в своих таблицах, производится связывание. По итогу завершения заезда проставляются нужные флаги в гонку что она завершена(да?).
  • вывод результатов на вьюху осуществляется так же как и с участниками - показываем только те гонки которые присущи текущему мероприятию, круги на основной вьюхе не показываем. Формат вывода результатов здесь. Рефакторим функции обновления вьюхи объединяя в интерфейс viewUpdater
  • на вьюхе поддерживается возможность удаления гонок, при это нужно соблюсти некоторые ньюансы

Опционально:
Организовать возможность просмотра кругов при клике на гонку

[БАГА] Закрыть возможность использовать 2 метки в одном соревновании

Воспроизвести:

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

Увидеть в БД в таблицах users, tags, tag_contest что у пользователя 2 метки и они обе в одном мероприятии

Задача: определять такую ситуацию и не позволять ей происходить

Некорректная работа широковещательного поиска

При попытке подключиться к устройству из под Windows 10 запущенной на виртуальной машине Mac → Parallels получаем ошибку Reader is not found, несмотря на то что устройство доступно, пингуется, веб-морда устройства доступна из браузера.

На первый взгляд причина кроется в том что виртуальная машина находится в своей локальной подсети по маске и шлюзу отличающейся от той в которой находится мастер-хост (хз как еще назвать). Т.е запрос не распространяется за пределы этой подсети.

Возможные решения:

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

Ошибка при попытке отключить ридер в статусе wait

Как воспроизвести:
Подключиться к ридеру нажатием соответствующей клавиши в смартбаннере. Когда статус станет wait и желтым → получить ошибку.

Как починить:
Либо не давать кликать до подключения, либо уничтожать промис с подключением.

Время гонки "ВСЕГО"

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

N | Имя | Количество кругов | Общее время | Лучший круг | Удаление

Возможность подключаться к приёмнику по указанному IP

Текущая логика подключения к главному приёмнику такова: в приложении приёмника осуществляется запрос на предмет нахождения устройства в сети, если устройство находится, то происходит возврат найденного IP и по нему осуществляется подключение.

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

Стартовать новый круг, а не заканчивать гонку

Сейчас это работает так
участник проезжает стартовую черту, его определяет, начинается отсчет, далее он проезжает еще раз и отсчет заканчивается, фиксируется время круга.

Для того чтобы пошло время следующего круга, надо проехать лишний круг и вернуться на стартовую линию.

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

Купить метки

Поискать метки EPC (вроде бы) которые было бы удобно клеить на байк, закладываясь на то что у нас будет RFID ковёр (клеить на низ рамы, одноразовые)

Возможность закрывать текущую гонку

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

Доделки

В первую очередь:
- addPageListener(type, (_, data)) - пофиксить на удобный формат
- Ipc.send<TYPE> - допилить где нет
- при закрытии приложения экстренно выкидывает ошибку SQL BLABLA API
- папку controllers сделать плоской, race-scenario вытащить в отдельный каталог
- изменение структуры каталогов на server согласно readme файликам
- вытаскиваем создание экземпляров ридеров на уровень контроллеров
- избавление race-scenario от связи с БД
- try catch вокруг dbMorda внутри контроллеров и представления не должно быть, методы базы должны быть изолированы в объект представляющий данный, а ошибки обработаны внутри
- разделение интерфейсов согласно принципу (по всему приложению + тесты) и hydrate данных из базы (все интерфейсы и типы данных взятых из хранилища собираются там же)
- вынос всей логики приложения из сервиса базы
- смена структуры бд методов (лучше наверное перевести в class)
- кажется что viewUpdater должен иметь приватные методы которые дергают обновление конкретных участков клиента и публичные, которые вызываются и называеются характерно для мест вызова (под вопросом), просто очень неудобно следить за вызовами, приходится делать несколько вызовов и читать чтобы не потерять ПРОПУСК
- интерфейс для viewUpdater
- поле id для таблицы tags ПРОПУСК

Во вторую очередь:
- кэширование запросов в БД там где это нужно
- юнит тест на метод getTotalTime() ПРОПУСК
- Кнопка отменить в попап с контестами, а то выход только на Esc
- В попапе редактирования пользователя, если выбрать привязку к существующему пользователю, то следует блокировать поля имя-фамилия для ввода (потому что update не будет)
- добавить на критичных кнопках с модификацией данных попап "Вы уверены?" ПРОПУСК

  • добавить название текущего мероприятия в заголовок таблицы с результатами на обоих экранах ЗАДАЧА ПЕРЕТЕКАЕТ В ДОДЕЛ РЕЗУЛЬТАТОВ

ХЗ:

  • eslint parser options ошибка - см .js файле, а так же не работает в папке server/controllers, может можно сделать tsconfig.base, на него завязать eslint, а остальные отнаследовать
  • Форма просмотра и редактирования связей user + tags
  • написать доку по тому как работают связи пользователи - метки - контесты и как это работает и считается во время гонки

Доделки по логике показа результатов

TotalInfo
Реализовать показ общих результатов по текущему мероприятию

Привести таблицу "текущая гонка" к общему виду
сейчас она свёрстана на blueprint нативной таблицей и отличается по дизайну от остальных таблиц, задача на переделку таблиц

Грохнуть кнопку удаления в "текущей гонке" на втором экране
Компонент показывающий результаты гонок в главном и второстепенном окне одинаковый, однако из первого окна можно управлять данными (удалять их), а из второго нет. Нужно это исправить.

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

Столбец "отставание" на табло
В общих результатах гонки где участники отсортированы от лучшего результата к худшему можно добавить еще один столбец который будет показывать отставание от предыдущей позиции или от лидера (поискать как это обычно делают)

Сокращать имя участника до И. Иванов
Нет необходимости писать имя целиком

Помечать удаленные события маркером

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

Определение расстояния до метки

Для лучшего понимания и улучшения процессов отладки следует провести замеры соотношения rssi-сигнала и удаления метки от антенны, для того чтобы определить на каком расстоянии от антенны находится метка.

Какие могут быть сложности:

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

Показ истории заездов

Нужна форма на которой будет в хронологическом порядке логгироваться гонки и время.

  • Нужно поле сортировки по участнику
  • Нужна кнопка удалить результат

Фикс зависаний на стартовой линии

Есть моменты когда rssi-trace timeout недостаточно точно настроен и если гонщик едет довольно медленно, его может поймать и начать следующий круг либо сразу же завершить текущий.

Нужно определять такие моменты по коротким временным интервалам и предотвращать их.

Логика завершения мероприятия

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

Опционально:
Красиво форматированный список с топ-участниками

Оптимизация запросов в БД

У каждого пользователя в БД должен быть уникальный автоинкрементальный ID, который выступает целочисленными уникальным идентификатором. Поиск и агрегацию данных следует осуществлять по нему, т.к. поиск по длинному текстовому uid - дорогая операция.

Поддержка нескольких меток для пользователя

Уникальной единицей должен быть id пользователя, а не uid метки, а к пользователю может быть привязано уже несколько меток в свою очередь.

  • Добавить в попап регистрации "привязать к существующему пользователю"
  • Создать таблицу связей меток с пользоваетлями
  • Убедится что это не ломает логику гонок и всего что связано с пользователями

Реализация режима "by-icepick"

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

Попап редактирования мероприятия

  • переименовать по коду events в contest (и на бэкенде)
  • Попап должен позволять редактировать поля мероприятия - название, описание, количество кругов, список участников (сначала просто верстается)
  • Написать методы в БД по обновлению полей (без списка участников)
  • Далее приступить к задаче с новой регистрацией пользоваталей

опционально:

  • при создании нового мероприятия, можно автоматически открывать настройки события

Core applications build

  • Добавить описание процесса сборки .NET core приложений
  • Найти решения консольной сборки .NET приложений, для того чтобы не нужно было
    открывать Visual Studio

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.