О накопившихся багах

Мне тут оказалось нужно как-то объяснить железячникам как кодировать и декодировать сообщения нашего формата. Прикинув сколько у нас Qt-контейнеров начал разбираться что же происходит после исполнения команды вида:
QDataStream() << QDateTime() << QString() << QVector()

Для этого пришлось залезть в исходники Qt 4.8.6, где мой глаз зацепился за этот ужас:

Всего лишь несколько безобидных формул преобразования дат

В итоге решили сбрасывать данные в более декодируемом формате, в частности QDateTime писать как time_t + msec, а не номер дня по юлианскому календарю + milliseconds since midnight + то ли часовой пояс, то ли какой-то там оффсет в зависимости от протокола.

Сериализаторы решил сделать красиво, совсем красиво не получилось — все хранимые переменные в объектах приватные, но тем не менее.

Относительно красивый класс для сериализации

Но код уже был увиден, так что доверие к QDateTime рассыпалось, и он работать перестал. Написанный тест на 10 000 000 итераций по рандомным datetime нашели слабое место — 27 марта 2011 года. День, когда QDateTime сломался.

QDateTime::fromTime_t(QDateTime::toTime_t())

Впрочем, нативную сериализацию/десериализацию я проверил, она работает стабильно. На Qt5 не проверял — лень переносить код.

Вообще, казалось бы i386 выпущен больше 40 лет тому назад, можно же уже было договориться и написать весь софт без откровенных багов. Из недавнего:

  1. ThunderBird третий год подряд может открыть несколько окон вместо одного. Чудом нагуглил решение
  2. BlueTooth наушники на арче работают между обновлениями ядра, а после обновления — как повезет. Мне не во всем так интересно ковыряться
  3. После пятисекундной загрузки до графики ноут не может подключиться к wifi — какой-то из сервисов отстает и все ломает. Хотя на этой неделе поведение поменялось — теперь он сам отключается и через 30 секунд вторым заходом все чинится
  4. В Qt нет нормального способа дебагать приложение от рута
  5. QVector в отличие от std::vector хранит размер в int, что не позволяет записывать в него больше ~1.3GB данных (int знаковый, а расширение массива наступает раньше)
  6. Винда, которую я по техническим причинам немного цепляю, вообще в своем репертуаре: обновления когда угодно с выбиванием из полноэкранного режима virtualbox. Недавно антивирус кончился — так мне открылось сообщение на весь экран, которое нельзя было закрыть «Хотите заплатить или удалить (с откатом на Windows Defender)?»
  7. Еще под виндой на новом стационарнике иногда отваливается моя клавиатура. Переподключение не помогает, спасает только перезагрузка
  8. Firefox сожрал больше 8GB на двух вкладках — декодированный видеопоток хранил не иначе (презентация в виде видео, в сжатом виде мегов 50). Все бы ничего, но с открытой виртуалкой как раз был выбран мой текущий лимит в 16GB. Браузер я убить успел (после асера у меня быстрая реакция на проблемы с оперативкой), но все равно пришлось перезагружаться
  9. После обновления сломался vlc. Mplayer дико бесил закрытием по Esc, SMplayer — своим убогим интерфейсов. Терпел mplayer 3 дня, ждал когда обновление все починит. В итоге пришлось идти в нашу вики, чтобы узнать, что vlc ломается от кеша какого-то плагина

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *