Мне тут оказалось нужно как-то объяснить железячникам как кодировать и декодировать сообщения нашего формата. Прикинув сколько у нас Qt-контейнеров начал разбираться что же происходит после исполнения команды вида:
QDataStream() << QDateTime() << QString() << QVector
Для этого пришлось залезть в исходники Qt 4.8.6, где мой глаз зацепился за этот ужас:
В итоге решили сбрасывать данные в более декодируемом формате, в частности QDateTime писать как time_t + msec, а не номер дня по юлианскому календарю + milliseconds since midnight + то ли часовой пояс, то ли какой-то там оффсет в зависимости от протокола.
Сериализаторы решил сделать красиво, совсем красиво не получилось — все хранимые переменные в объектах приватные, но тем не менее.
Но код уже был увиден, так что доверие к QDateTime рассыпалось, и он работать перестал. Написанный тест на 10 000 000 итераций по рандомным datetime нашели слабое место — 27 марта 2011 года. День, когда QDateTime сломался.
Впрочем, нативную сериализацию/десериализацию я проверил, она работает стабильно. На Qt5 не проверял — лень переносить код.
Вообще, казалось бы i386 выпущен больше 40 лет тому назад, можно же уже было договориться и написать весь софт без откровенных багов. Из недавнего:
- ThunderBird третий год подряд может открыть несколько окон вместо одного. Чудом нагуглил решение
- BlueTooth наушники на арче работают между обновлениями ядра, а после обновления — как повезет. Мне не во всем так интересно ковыряться
- После пятисекундной загрузки до графики ноут не может подключиться к wifi — какой-то из сервисов отстает и все ломает. Хотя на этой неделе поведение поменялось — теперь он сам отключается и через 30 секунд вторым заходом все чинится
- В Qt нет нормального способа дебагать приложение от рута
- QVector в отличие от std::vector хранит размер в int, что не позволяет записывать в него больше ~1.3GB данных (int знаковый, а расширение массива наступает раньше)
- Винда, которую я по техническим причинам немного цепляю, вообще в своем репертуаре: обновления когда угодно с выбиванием из полноэкранного режима virtualbox. Недавно антивирус кончился — так мне открылось сообщение на весь экран, которое нельзя было закрыть «Хотите заплатить или удалить (с откатом на Windows Defender)?»
- Еще под виндой на новом стационарнике иногда отваливается моя клавиатура. Переподключение не помогает, спасает только перезагрузка
- Firefox сожрал больше 8GB на двух вкладках — декодированный видеопоток хранил не иначе (презентация в виде видео, в сжатом виде мегов 50). Все бы ничего, но с открытой виртуалкой как раз был выбран мой текущий лимит в 16GB. Браузер я убить успел (после асера у меня быстрая реакция на проблемы с оперативкой), но все равно пришлось перезагружаться
- После обновления сломался vlc. Mplayer дико бесил закрытием по Esc, SMplayer — своим убогим интерфейсов. Терпел mplayer 3 дня, ждал когда обновление все починит. В итоге пришлось идти в нашу вики, чтобы узнать, что vlc ломается от кеша какого-то плагина