Я записал простую обертку [приблизительно 111], что можно использовать как это:
git export ~/the/destination/dir
, Если целевой каталог уже существует, необходимо будет добавить -f
или --force
.
Установка проста; просто отбросьте сценарий где-нибудь в Вашем PATH
и удостоверьтесь, что это - исполняемый файл.
В зависимости от некоторых деталей, которые вы не предоставляете о своем канале с потерями, Я бы порекомендовал сначала использовать код Грея , чтобы гарантировать, что однобитовые ошибки приводят к небольшим различиям (чтобы удовлетворить ваше желание уменьшения потерь при передаче с потерями), а затем, возможно, также закодировать полученный поток с некоторыми " без потерь "(== пытается кодировать без потерь ;-).
Рид-Соломон и его варианты особенно хороши, если ваши шумовые эпизоды имеют тенденцию происходить небольшими всплесками (несколько битовых ошибок, скажем, в одном байте), которые должны хорошо взаимодействовать с кодированием Грея (так как много- битовые ошибки убивают аспект «уменьшения потерь» Грея, предназначенный для постепенного снижения однобитовых ошибок в сети). Это потому, что RS по сути является блочной схемой, и множественные ошибки в одном блоке в основном такие же, как и одна ошибка в нем, с точки зрения RS; -).
RS особенно хорош, если многие из ошибок ] erasures - проще говоря, стирание - это символ, который, скорее всего, был искажен при передаче, НО для которого вы ДЕЙСТВИТЕЛЬНО знаете решающий факт, что он БЫЛ искажен. Физический уровень, в зависимости от того, как он » спроектирован, часто может иметь подсказки об этом факте, и если есть способ информировать более высокие уровни, это может оказать решающую помощь. Позвольте мне объяснить, подчистки немного ...:
Say для упрощенного примера, что 0 посылается как уровень -1 вольт и 1, посылают как уровень +1 вольт (WRT некоторой опорной волны), но есть шум (физический шум часто можно хорошо смоделировать, спросите любого грамотного инженера по коммуникациям ;-); в зависимости от модели шума декодирование может заключаться в том, что что-либо -0,7 В и ниже считается 0 битом, все +0,7 В и выше считается 1 битом, все промежуточное считается стиранием, т. е. сообщается более высокому уровню что рассматриваемый бит, вероятно, был искажен при передаче и поэтому его следует игнорировать. (Иногда я привожу это как один из примеров своего тезиса о том, что иногда абстракции ДОЛЖНЫ «просачиваться»
Вероятно, одним из наиболее известных методов является использование кода Хэмминга . Возможно, это не лучший способ исправления ошибок в больших масштабах, но его невероятно просто понять.
См. Также Протокол скользящего окна (который используется TCP).
Хотя это включает в себя работу с переупорядоченными или полностью потерянными пакетами, что не было часть вашего определения проблемы.
Либо Турбо-коды , либо Коды проверки четности с низкой плотностью для общих данных, поскольку они ближе всего подходят к пределу Шеннона - см. Википедию.
Как говорит Алекс Мартелли, в мире существует множество теорий кодирования, но коды Рида-Соломона определенно являются приятным местом. Если вы действительно хотите что-то построить, Джим Планк написал хороший учебник по кодированию Рида-Соломона . Планк профессионально интересуется программированием и имеет большой практический опыт, подтверждающий это.
Я бы воспользовался некоторыми из этих предложений, за которыми следует несколько отправок одних и тех же данных. Таким образом, вы можете надеяться на появление различных ошибок в разных точках потока, и вы сможете намного проще определить желаемое число.