Ещё была такая утилита как RCVT, которая умела перепаковывать архивы рекурсивно, её ещё можно найти здесь. Причём она не была привязана к какому-то конкретному архиватору, полностью настраивалась через конфигурационный файл.
Когда-то давно, когда ещё C++ Builder 6 был новинкой, мы обнаружили, что странный дефект, который возникал непонятно почему, связан с его конкретным дистрибутивом, который был развёрнут везде, кроме старого ноутбука. Пришлось сделать его сервером сборки, пока мы искали, где добыть нормальный дистрибутив.
про побочные эффекты вспомнилось, что была программа, которая добавляла EURion constellation к печатаемому тексту, чтобы его нельзя было копировать и обрабатывать в графических программах.
И явно описана процедура штрафов для результатов применения масок. Выбирается результат с меньшим штрафом. В качестве метрик как раз используются длинные последовательности и последовательность обнаружения якорей.
Для баша опечатки надо править с помощью Quick Substitution. т. е. если ошибся и набрал got вместо git, то проще набрать ^got^git чем полностью команду перепечатывать.
Разные полиномы дают разные характеристики обнаружения ошибок. Т. е. полином 0xf8c9140a, который обнаруживает 8 ошибок на данных до 992 бит, обнаружит и меньшее количество ошибок, но вот полином 0xad0424f3, обнаруживающий три ошибки на данных до 4294967263 бит, может и не заметить 8 ошибок. Также полином 0xf8c9140a, который обнаруживает 8 ошибок на данных до 992 бит, на большем кодовом слове действительно может не обнаружить ошибок вообще.
Проблема английского как раз в том, что это далеко не легковесный язык. А Эсперанто приспособился к тому, что миру такой общий язык общения не нужен и просто живёт среди энтузиастов.
одни говорят: зачем столько языков (человеческих)? Давайте сделаем один универсальный! Эсперанто! Он лучше любого.
У Эсперанто немного другая задача: это легковесный fallback-язык, который не заменяет родные языки, а позволяет общаться, когда у собеседников нет совпадения по родным языкам.
И это печально, что такой более совершенный метод не используется. C таймаутами возникает проблема по полной утилизации линии, а с преамбулами, как я писал выше, встречал странные алгоритмы восстановления синхронизации.
Обработка ошибок это уже не канальный уровень. А работать с кадрами, для которых уже определена граница и целостность (при адекватной длине и CRC), гораздо удобней.
Сравнивал я с определением границ кадра по преамбуле, с определением границы по таймауту, с использованием длины данных в заголовке. Эти все варианты зачастую порождают сложные эмпирические алгоритмы по восстановлению/синхронизации, теряют корректные кадры, если предыдущие потеряли символ. Контролируемая избыточность это сильный аргумент: простые алгоритмы байт-стаффинга могут привести к удвоению размера всего кадра, а это и лишняя память под буферизацию, искажение временных характеристик -- это не дело, когда в зависимости от содержимого кадры передаются за разное время. В COBS, например, максимальные затраты это 1 байт на 254 байта исходного кадра. Байт-стаффинг очень универсален -- подходит под любые скорости и устройства, не чувствителен к буферизации в устройствах ввода, его можно реализовать и отладить отдельно от верхних уровней протокола.
Ещё была такая утилита как RCVT, которая умела перепаковывать архивы рекурсивно, её ещё можно найти здесь.
Причём она не была привязана к какому-то конкретному архиватору, полностью настраивалась через конфигурационный файл.
Intel же в это время iAPX 432 разрабатывал, 386-й был лишь как затычка, чтобы рынок не потерять. В итоге он выстрелил, а 432 ушёл в закат.
Когда-то давно, когда ещё C++ Builder 6 был новинкой, мы обнаружили, что странный дефект, который возникал непонятно почему, связан с его конкретным дистрибутивом, который был развёрнут везде, кроме старого ноутбука. Пришлось сделать его сервером сборки, пока мы искали, где добыть нормальный дистрибутив.
Плюс старое оборудование, которое просто дропает неизвестные ему протоколы.
Рапира не клон паскаля совсем.
А здесь явно лучше будет вынести сравнение action == GLFW_PRESS в отдельный верхний if, а внутри сделать switch по кодам клавиш.
про побочные эффекты вспомнилось, что была программа, которая добавляла EURion constellation к печатаемому тексту, чтобы его нельзя было копировать и обрабатывать в графических программах.
И явно описана процедура штрафов для результатов применения масок.
Выбирается результат с меньшим штрафом.
В качестве метрик как раз используются длинные последовательности и последовательность обнаружения якорей.
Для баша опечатки надо править с помощью Quick Substitution.
т. е. если ошибся и набрал got вместо git, то проще набрать
^got^git
чем полностью команду перепечатывать.
некоторые вообще считают, что синглтон в программе должен быть один.
У меня жена из-за похожих сбоев перестала быть родственницей своей матери.
Похоже, что данные с со случайной вставкой загружаются в сдвиговый регистр и там раз двадцать прокручиваются.
Разные полиномы дают разные характеристики обнаружения ошибок.
Т. е. полином 0xf8c9140a, который обнаруживает 8 ошибок на данных до 992 бит, обнаружит и меньшее количество ошибок, но вот полином 0xad0424f3, обнаруживающий три ошибки на данных до 4294967263 бит, может и не заметить 8 ошибок.
Также полином 0xf8c9140a, который обнаруживает 8 ошибок на данных до 992 бит, на большем кодовом слове действительно может не обнаружить ошибок вообще.
А что подразумевается под шифрованием полиномом?
Проблема английского как раз в том, что это далеко не легковесный язык. А Эсперанто приспособился к тому, что миру такой общий язык общения не нужен и просто живёт среди энтузиастов.
Можно вот эту статью, например, посмотреть: How the 8086 processor's microcode engine works.
У Эсперанто немного другая задача: это легковесный fallback-язык, который не заменяет родные языки, а позволяет общаться, когда у собеседников нет совпадения по родным языкам.
И это печально, что такой более совершенный метод не используется.
C таймаутами возникает проблема по полной утилизации линии, а с преамбулами, как я писал выше, встречал странные алгоритмы восстановления синхронизации.
Обработка ошибок это уже не канальный уровень. А работать с кадрами, для которых уже определена граница и целостность (при адекватной длине и CRC), гораздо удобней.
Сравнивал я с определением границ кадра по преамбуле, с определением границы по таймауту, с использованием длины данных в заголовке.
Эти все варианты зачастую порождают сложные эмпирические алгоритмы по восстановлению/синхронизации, теряют корректные кадры, если предыдущие потеряли символ.
Контролируемая избыточность это сильный аргумент: простые алгоритмы байт-стаффинга могут привести к удвоению размера всего кадра, а это и лишняя память под буферизацию, искажение временных характеристик -- это не дело, когда в зависимости от содержимого кадры передаются за разное время. В COBS, например, максимальные затраты это 1 байт на 254 байта исходного кадра.
Байт-стаффинг очень универсален -- подходит под любые скорости и устройства, не чувствителен к буферизации в устройствах ввода, его можно реализовать и отладить отдельно от верхних уровней протокола.