Решена проблема того что не надо слать команду для получения статистики и соответсвенно ждать её получения. И бот при этом не спамит сообщениями.
Если бот будет без команды слать её постоянно новыми сообщениями то будут сыпаться уведомления о новых сообщениях от бота. Чат будет забит кучей сообщений от бота и их скорей всего ещё и листать прийдётся до последнего.
Итернет можно дополнить mesh сетью для расширения его доступности туда куда сигналы вышек и wifi не дотягиваются. Так же добавить p2p cdn(межпланетная файловая система например) для доставки контента в отрезанные от прямого доступа в интернет либо с нестабильной связью и маленькой скоростью участки.
Потом p2p взаимодействие может включать в себя и клиент сервер. Клиент может начать загрузку видео с сервера и в процессе искать дополнительные источники для увеличения скорости загрузки. Когда скорость загрузки от альтернативных источников будет достаточной можно отключиться либо снизить нагрузку на сервер.
А если все провайдеры начнут ограничивать доступ к определённым сервисам? Куда идти? Тем более провайдеры не существуют автономно. Угадайте какой российский монополист предоставляет каналы мелким провайдерам.
Antox например очень плохо работает. Зависает и глючит на видео и аудио звонках. Сообщения часто не доставляет хотя на обоих устройствах включен. Приходится шаманить чтобы оба клиента увидели друг друга в сети и обменялись сообщениями.
Очень странно что не смотря на то что картинка очевидно меняется хром и firefox не подсвечивают перерисованную область. Но график fps в хроме при этом активно двигается показывая постоянную перерисовку.
Анимация в SVG работает даже если вставить его в тег IMG. Но тогда начинает перерисовываться полностью всё изображение. И этот секундомер не хило нагружает процессор.
Я поэкспериментировал и сделал свой SVG секундомер в котором анимация включается каждую секунду на 0.001 секунды.
Думаю fps при этом маленький не потому что нагрузка большая а потому что рисовать нечего. Каждую секунду рисуется новый пик и график останавливается до следующего шага(если не включена подсветка прорисованной области).
Если включить подсветку прорисованной области то можно увидеть что картинка обновляется раз в секунду.
В статье используется код из оригинального golang/protobuf с мелкими но важными изменениями. Оба варианта(мой и оригинальный) используют минимально возможное для алгоритма количество байт для записи числа.
В оригинальном varint проблема не только для нуля. Любое число можно записать используя большее количество байт чем для него необходимо.
Это можно сделать намерянно. Тогда при перегоне из протобуфера в протобуфер потеряется хвост и хеш данных изменится. Может вскроются другие уязвимости которые возникнут из за этой разницы.
Этот квадрат не делает ничего кроме того что жрёт процессорное время.
Если открыть этот квадрат и включить режим отображения прорисовки то можно увидеть он перерисовывается много раз в секунду несмотря на то что в картинке ничего не меняется.
Как включить этот режим
В Firefox есть кнопка "Подсветить прорисованную область" в панели инструментов консоли. Её надо добавить в "Настройки инструментов" -> "Дополнительные кнопки инструментов" -> "Подсветить прорисованную область".
В хроме аналог флажок "Enable paint flashing" на вкладке Rendering в консоли.
Только осторожно с этим. Зрелище не для эпилептиков. В хроме это нежнее реализовано.
calcMode="discrete" — выполнить без переходов.
В этом режиме отключается переход и анимация в определённый момент выполняется мгновенно меняя одно значение на другое.
dur="1000000000000000000000000000000h" — это время анимации.
Дофига часов которое анимация будет работать. Точнее просто жрать процессор ничего не меняя в картинке. В режиме discrete через половину этого времени должна быть мгновенно изменено значение.
type="rotate" — это анимация должна повернуть фигуру
by="0" — на 0 градусов.
То есть опять ничего не изменится даже в тот момент когда должно поменяться значение.
Для лучшего понимания как работает режим discrete:
Другой квадрат который грузит процессор
Тут я уже задал значения при которых квадрат меняет поворот. Но он также постоянно перерисовывается даже когда не движется.
Даже если взять ваш 0.1% и примерить к 100ГБ данных то получаем 100МБ экономии по простому. И это при условии что постояно используются огромные числа которые нельзя записать меньшим количеством байт.
Так я вроде не сильно усложнил исходя из изменений кода. Может просто коряво объяснил?
Покажите в каком месте я считаю криво а то я вас плохо понимаю.
В 8 байтах мы экономим 1 из 9 байт (11%) на диапазоне значений от 72057594037927936 до 72624976668147839 ( 0.7% но 567 382 630 219 904 зничений) по сравнению с оригинальным varint. И это без учета экономии на других диапазонах.
В первых 2х байтах мы экономим 1 байт из 3 (33%) на диапазоне значений от 16384 до 16511 (те же 0.7% но всего 128 значений) по сравнению с оригинальным varint.
Я и не думаю что надо менять оригинальный varint на compact varint по умолчанию. Если его таки захотят принять то отельными дополнительными функциями. Тогда для compact varint будут новые обозначения в протобуфере (например: uint64c, int64c). По сути запись такая же как и у varint только значение получаем чуть чуть по другому. Старшие биты теперь указывают не только размер контейнера но и его начальное значение.
И экономия в процентах маленькая а в числах огромная. 1 из 9 это больше 10 процентов.
В Firefox есть кнопка "Подсветить прорисованную область" в панели иструментов консоли. Её надо добавить в "Настройки инструментов" -> "Дополнительные кнопки инструментов" -> "Подсветить прорисованную область".
В хроме аналог флажок "Enable paint flashing" на вкладке Rendering в консоли.
Только осторожно с этим. Зрелище не для эпилептиков. В хроме это нежнее реализовано.
Это да. Но когда они встроены через тег img а в этом случае картинка перересовывается полностью постоянно. Даже шаговая анимация в одну минуту (<animateTransform calcMode="discrete" dur="1min" type="rotate" fill="freeze" by="6" />) перерисовывается несколько раз в секунду хотя в этом нет необходимости.