Как стать автором
Обновить

Комментарии 71

Остроумный выбор тегов — «алкоголизм» и «папа не пей»
Мама, это яд! (С)
Еще целочисленное DWT есть.
Если вы имете в виду BWT, то это преобразование пред сжатием, а не сжатие само по себе. Используется в упомянутом на диаграмме bzip2.
Нет конечно, именно DWT.
BWT, стопка книг и т.п. это понятное дело из другой категории.
Хотя да, если в целых числах, то ветви отбрасывать нельзя, и получаем просто предобработку.
Сейчас RAR – стандарт для распространения файлов через интернет.

Я надеюсь дожить до момента, когда все файлы будут выкладываться в нормальном zip, а ущербное представление о rar как о стандарте исчезнет.

Поясню: zip открывается на любом тостере в любой, даже самой экзотической системе (практически всегда средства для создания-открытия zip еще и встроены в ОС), а rar — нет.
Попробуй рассказать сказочку о всеобщности zip линуксоидам, для которых стандартом являются tar+gzip и bzip2.

К тому же у zip слишком маленькая степень сжатия, чтобы сегодня всерьез рассматривать это устаревший много лет назад формат в качестве конкурента современным алгоритмам.
Линуксоиды пусть распространяют свои исходники в своих tar и bzip2 (хотя лучше бы пользоваться гитом, наверное), это совершенно не касается абсолютного большинства файлов в интернете.

Вам не пофиг на степень сжатия? Мне — абсолютно. От того, что я скачаю 3 мегабайта, а не 3.5, мне не станет лучше, потому что этот ваш rar (ну или мегакрутой и суперсовременный какой-нибудь там thrbz666) непонятно чем открывать. Тем более что в распакованном-то виде содержимое архива занимает одинаковый объем.
К твоему сведению, gzip и bzip2 упаковывают не только исходники.

Небольшой ликбез по интернет-технологиям: интернет-трафик сжимается именно gzip'ом. Так что распаковщик этого формата встроен в любой современный браузер (в том числе, и в пресловутый IE). И если Windows не поддерживает gzip на уровне системы, то это проблема исключительно Windows.

Тебе может быть и пофиг, а вот тем, у кого побайтная тарификация интернета, или лимит месячного объема трафика, степень сжатия крайне важна. И мне жаль, что ты не в состоянии понять таких простых вещей.
Я прекрасно знаю о применении gzip для трафика.
В первом своем комментарии я ясно сказал о файлах. Чем там трафик упаковывают, меня как раз не волнует совершенно, вот как раз для этого пусть что угодно используют, пока оно работает у всех.
Я не пользуюсь ни IE, ни Windows и не знаю, есть ли там поддержка gzip на уровне системы.
У меня помегабайтная тарификация трафика, когда я не дома (больше половины месяца, получается) и мне абсолютно пофигу, что я скачаю чуть больше.

Я не переходил на «ты» в общении с вами и не понимаю, незнанием чего вы пытаетесь меня упрекнуть.
Незнанием матчасти и неуместным радикальным выпендрёжем, наверное. :)
«Я надеюсь дожить до момента, когда все файлы будут выкладываться в нормальном zip»
«Вам не пофиг на степень сжатия? Мне — абсолютно. От того, что я скачаю 3 мегабайта, а не 3.5, мне не станет лучше»

Зачем тогда вам вообще архивы? Для передачи большого количества файлов одним махом давно существуют всякие Дропбоксы, Меги, БтСинки, Торренты. Это намного удобнее и позволяет не скачивать все данные целиком, если вам нужны лишь пару файлов из набора.
Передать пачку закрытых исходников, не пропуская их в открытом виде через все интернеты, например. Их надо зашифровать, и так, чтобы от структура файлов тоже не была видна. Ну, правда, этот вариант можно отконтрить: «Настройте VPN и бросайте в открытом виде».
PGP
mega.co.nz
Я надеюсь дожить до момента, когда все файлы будут выкладываться в нормальном zip

Вам не пофиг на степень сжатия? Мне — абсолютно. От того, что я скачаю 3 мегабайта, а не 3.5, мне не станет лучше....


зачем их вообще тогда зиповать, если пофиг на размер?
объединить несколько файлов в один — удобно хранить/пересылать и т.д
а изначально задача какая? что это? сорцы? документы?
я почему-то не вижу никаких проблем ни в хранении, ни в пересылке большого кол-ва файлов
Изначальный посыл aulandsdalen в том, что zip практически на любой системе можно распаковать без дополнительных телодвижений. С другими форматами архивов чаще всего такой трюк не пройдёт. Для распаковки rar в GNU/Linux придётся ставить unrar-nonfree или его аналог, для распаковки xz/bzip2 в Windows — 7z или его аналог. Поэтому если вы хотите передать человеку пачку файлов и не знаете, какая у него система (или людей будет несколько), проще всего использовать zip.

А вот пересылка и даже копирование на флешку большого количества файлов в сравнении с пересылкой архива тех же файлов (даже несжатым) занимает гораздо больше времени. Попробуйте и убедитесь.
По той же причине Google Drive и Яндекс.Диск пакуют файлы в zip перед скачкой — меньше нагрузка на сервера, беспроблемная распаковка на месте.
А вот пересылка и даже копирование на флешку большого количества файлов в сравнении с пересылкой архива тех же файлов (даже несжатым) занимает гораздо больше времени. Попробуйте и убедитесь.


Разрешить кэширование для флэшек религия не позволяет?

Ага. Теперь вместо того, чтобы ждать N минут, пока скопируются все файлы, вам придётся ждать N минут, пока флэшка безопасно извлекается.

Кэш не позволит ни взять файлы с флэшки быстрее, ни записать файлы на неё быстрее: эти скорости ограничены пропускной способностью контроллера или скоростью чипов флэшки и кэш не способен исправить ничего из этого. Он нужен только в двух случаях: когда вы не собираетесь вынимать флэшку и хотите полюбоваться на быстрый прогресс‐бар или когда вы хотите прочитать файлы с флэшки два раза. В обоих случаях: и имеете достаточно оперативной памяти, чтобы хранить там файлы, с которым работаете.

Zip нужен для того, чтобы превратить случайные чтение/запись многих мелких файлов в последовательные одного большого архива: последовательные чтение/запись до сих пор быстрее случайных во всех хранилищах.

Кроме того, в FAT есть минимальный размер файла (равный размеру одного кластера). Каждый записываемый файл будет дополнен так, чтобы иметь размер, кратный минимальному. Пишет ли система что‐либо в «лишнее» место или нет — неважно: если она пишет — плохо — увеличивается объём данных, которые надо записать; если нет — плохо — теперь никакой планировщик не превратит случайную запись в последовательную. И вам в любом случае придётся изменять каталоги и таблицу FAT (причём последнее два раза) и для каждого файла — т.е. на один файл приходится не менее четырёх мест, которые надо изменить: таблица FAT (основная и резервная копия), каталог, в котором файл хранится, и само содержимое файла в области данных.
Теперь вместо того, чтобы ждать N минут, пока скопируются все файлы, вам придётся ждать N минут, пока флэшка безопасно извлекается.


Нет, не придётся. Ускорение здесь за счёт заметы множества операций записи в случайном порядке (каждый файл порождает как минимум 2 записи: по одной в каждую копию FAT'а), значительно меньшим, упорядоченным набором операций.
Например:
Пишем 100 файлов нулевой длинны, имеющих имя в формате 8.3. Допустим, размер кластера на флэшке 4 Кб.
В этой ситуации возможна запись не килобайта на диск, а 4 Кб * 2 копии FAT * 100 файлов = 800 Кб, притом в случайном порядке.
Если будет задействован кэш записи, то вполне возможна ситуация, когда за одну операцию записи будет записано 8 Кб, хотя наиболее.

При записи зип-архива на флэшку происходит примерно тоже самое: 2 записи в 2 копии FAT + запись тела файла.

всё остальное от лукавого
Во‐первых, куда вы дели обновления каталогов? В FAT не сохраняется информация о расположении файлов, она есть в каталогах. Во‐вторых, куда делась запись лишних (размер кластера − (размер файла mod размер кластера)) для каждого файла? Даже в случае, если вы с помощью кэширования дадите планировщику разобраться с оптимальным способом записи, от этих двух пунктов вас ничего не избавит.

В случае с архивом вы пишете 2 записи в FAT, одну в каталог, большой непрерывный кусок архива (с небольшим хвостиком из‐за кластеров) и всё. Возможно большой кусок будет разбит на несколько из‐за фрагментации, но при записи файлов это будет гораздо более вероятно (т.к. из‐за кластеров размер увеличивается, да и драйвер наверняка попытается втиснуть каждый файл в наиболее мелкую из имеющихся дырок).
> Изначальный посыл aulandsdalen в том, что zip практически на любой системе можно распаковать без дополнительных телодвижений
… неправильный. Потому, что в половине случаев, на большинтсве систем, кирилические имена файлов превратятся в тыкву.
Тогда можно tar'ом обойтись. Скорость «сжатия» и «распаковки» ого-го! :-)
У tar свои недостатки у него нет каталога содержимого и контроля целостности содержимого.
Первое означает то, что чтобы посмотреть содержимое (структуру каталогов, список файлов, размеры, даты изменения) нужно прочитать все заголовки в tar. К примеру, содержимое zip-архива можно посмотреть не скачивая файл целиком.
Второе значит, что содержимое tar'а можно менять почти как угодно, никто ничего не заметит, так как есть контрольные суммы только заголовков.

Можно было бы сказать, что стоит продвигать бесплатный 7zip. Но там контейнер тоже немного туповат, нет возможности сохранять unix права доступа файлов.
gzip никуда деваться не собирается, а вот bzip2 медленно, но верно, уступает xz. Когда мне нужно что‐то запаковать я обычно выбираю tar+xz, tar+gz, zip, 7z (последний для пользователей Windows, если нужно сжатие лучше, чем с zip или для текстовых файлов, которые я не собираюсь распространять (с -m0=ppmd)).

Интересно, почему все забили на 7z+PPMD? Я как‐то раз пробовал сжать лог сборки OpenOffice им, получился в 1,3 раза более компактный файл (7z -m0=ppmd -mx=9 в сравнении с xz -9), при этом создавался он в 4 раза быстрее.
Честно говоря уже очень давно не сталкивался с rar-файлами. Видимо я уже дожил до этого момента, надеюсь и вы скоро :)
Честно говоря, был несколько удивлен, что rar называют стандартом. Это действительно так? Мне довольно редко с ним приходится встречаться.
А по поводу zip я с вами кардинально не согласен. У него низкая степень сжатия, он не поддерживает Unicode (давайте, распакуйте файл с японским именем на Windows с русской локалью), не сохраняет метаданные файла (даже права). Так что я исключительно за то, чтобы он поскорее умер.
Самым адекватный вариант на данный момент — 7zip. Это и архиватор, и компрессор, поэтому у него нет таких недостатков, как у связки tar+что-то в виде отсутствия индекса.

Есть, кстати, архиваторы с наркоманской степенью компрессии, вроде KGB Archiver.
Скажем так, многие неразумные люди на территории ex-USSR любят паковать все пиратским винраром в этот самый rar.

Про степень сжатия выше уже отписали, zip скорее нужен для того, чтобы запаковать туда много файликов и скачать одним махом.

С Юникодом печалька, согласен.
На самом деле ZIP поддерживает и Unicode (см. версию 6.3.0) и права.

Только вот Windows всегда использовал кодировку имён файлов, не соответствующую стандарту (и совместимости для так и продолжает использовать): в заголовке указывалась кодировка CP437 (стандарт ZIP предусматривает только две кодировки: CP437 или UTF-8), а на деле использовалась системная локаль. Именно поэтому ZIP, сжатый на японской Windows, распаковывается непонятно как на русской/английской — исходную кодировку узнать просто неоткуда.

Благодаря поддержке UTF-8 возможно создать архив, который будет правильно распаковываться в iOS, Linux и сторонними приложениями в Windows (WinRAR, 7-zip), но не штатными средствами Windows. Архиваторы для iOS и Linux по умолчанию используют UTF-8. В Windows хуже, но, к примеру, для 7-zip есть плохо документированный ключ -mcu (см. 4.58 beta).

Решение проблемы японских кодировок: существует программа ZipIt, являющаяся демкой библиотеки DotNetZip (DotNetZip-WinFormsTool.exe в архиве с исходниками), которая позволяет при распаковке выбрать абсолютно любую кодировку, независимо от заголовка.
Просто вольный переводчик тактично опустил часть оригинальной фразы, которую не посчитал важной:

RAR has become a standard format for sharing files over the Internet, specifically in the distribution of pirated media.

Дословно — «RAR стал стандартным форматом для распространения файлов в Интернете, особенно для распростанения пиртаских носителей».

Как видите, в оригинале во-первых не говорится про то, что это стандарт (стандартный формат и стандарт не одно и то же), а во-вторых уточняется, для чего конкретно применяется rar в интернете.
Он ещё Рошала и простым русским (а не российским) гением назвал.
Не вижу разницы.
Русский — национальность, россиянин — гражданство. В России не только русские живут.
Национализм это. Я придерживаюсь мнения, высказанного, ещё по-моему Александром III-м. Кто в России живёт, тот и русский. «Россиян» придумал Ельцин.
Это просто любовь к точности.
Как говорил осетин Тимур Каргинов из шоу Stand Up, когда его где-то за границей назвали русским (потому, что он живёт в России):
— Поехали со мной в Москву, скажешь там, что я русский :)
«Алгоритм четырёх русских» перемножения матриц назван в честь Арлазарова, Диница, Кронрода и Фараджаева :)
Подправлю перевод в связи с конструктивной критикой.
Минус? Не надо было подправлять?
Я надеюсь дожить до момента, когда все файлы будут выкладываться в нормальном 7z, а ущербное представление о zip как о стандарте исчезнет.

Поясню: поддержка 7z есть из коробки во всех нормальных операционных системах, а при открытии этого вашего zip постоянно проблемы с кодировками. Ну и степень сжатия печалит, да.
Поддержка 7z есть из коробки во всех нормальных операционных системах
Открыл «Макбук» — нет 7z, залогинился на Linux — нет 7z, залогинился на freeBSD — нет 7z. В какой вменяемой системе он из коробки идёт?
Макбук я к нормальным системам не причисляю. Дистрибутивы свободных ОС, в которых весь прикладной софт нужно ставить самому руками тоже, ясно, не в счёт.

В убунточке и убунтоклонах, 7z поддерживается из коробки. Про всякие федоры и SUSE не трогал, так что, возможно, погорячился.
По каким критериям вы определяете нормальность? Просто вдруг стало интересно, почему вы мак не считаете нормальным.
Позвольте уточнить: для вас нормальная система — убунту, ее клоны… и все?
Если вы из предыдущего комментария сделали вывод, что «установка всего прикладного софта руками» в моих глазах делает систему «ненормальной», то это неверно, сам на арче сижу.

Я СПО фанатик, для меня важно осознавать, что в системе я могу переделать под себя что угодно.
Дополню — на Windows его тоже нет из коробки :)

Его вообще нигде из коробки нет :) Архиватор правда классный, особенно когда есть машинка с большим количеством памяти для архивации — очень плотно пожать большие объёмы можно.
А я надеюсь дожить до момента, когда все файлы будут выкладываться в нормальном mp3/jpg/avi/..., а ущербное представление о ogg/aac/mkv/mp4/… как о стандарте исчезнет. Поясню: mp3/jpg/avi/… открывается на любом тостере...
А где же тогда развитие, прогресс?
я извращенец, я бывает пользуюсь rar на линуксе, ибо ГОСТ :)
Я бы на месте линукса на вас обиделся.
Исключительно по причине бесплатности zip.
Но если взять популырный 7z, то он уже никак не открывается сам, пока не поставишь 7zip
RAR — действительно опередивший время архиватор. И речь идет о функционале.
В отличие от старого zip,winrar первый научился жать файлы больше 2 гб, и создавать архивы больше 4гб.
Winrar умеет использовать коды восстановления, что крайне полезно
Отличная, богатая и функциональная командная строка, которой большинство архиваторов может позавидовать и сейчас.
При этом rar условно бесплатен для жителей СНГ — именно по этой причине он оказался так популярен у нас, и не смог адекватно пробиться зарубеж, поэтому встроенным в ОС оказался бесплатный zip
Раз есть упоминание о кодах Шеннона-Фано и Хаффмана, то хотелось бы увидеть и несколько слов об арифметическом кодировании, как предельном варианте энтропийного сжатия.
Хм… последний раз когда я игрался с PAQ, на тесте Хаттера он работал порядка 13 часов(не уверен, может и больше) и учитывая, что он параллелится фигово, то думаю, что рост производительности железа последних лет на скорости его работы не особо как сказался.
Текущий чемпион, cmix v4 (июль 2014, см Large Text Compression Benchmark от Matt Mahoney) сжимает первый гигабайт дампа википедии примерно за 80 часов на Intel Core i7-3770.
Стандартом для распространения файлов через интернет, очевидно, является Zip.
Иногда для исполняемых файлов приходится паковать в 7z, чтобы можно было отправить по почте или через vk где есть проверка.
FreeArc — вроде как не имеет собственного алгоритма сжатия, работает с LZMA, LPAQ и еще какимито алгоритмами.
Ну почему же. Есть Tornado, например, для быстрых режимов. А также препроцессоры, вроде (S)REP, повышающие сжимаемость данных.
alsafr.livejournal.com/5429.html

Кроме того, и как программа / формат FreeArc весьма хорош. Если уж выбирать «стандарт», пусть бы это был FreeArc, чем тот же 7-zip.
Особенно эффективен LZMA в связке с предпорцессорами rep, 4x4, xtor.
Например в тесте forum.ru-board.com/topic.cgi?forum=5&topic=8076&start=800#5 Freearc с экспериментальными режимами -m8x сжимает сильнее и быстрее чем что-либо другое существующее (на скоростях до 5mb/sec). Но эти режимы к сожалению требуют внести изменения .ini (подробности forum.ru-board.com/topic.cgi?forum=5&topic=8076&start=800#12 ), разработчик Булат почему-то никак не сделает их профилями по умолчанию, и не добавит packarc из коробки для архивации jpeg (-30%) и mp3 (-10%).
С каких пор RAR стал стандартом распространения файлов в Интернете? На него хотя бы RCF есть?
Видимо Интернеты разные. Я rar встречаю только когда книги в fb2 ищу.
Затретировали Катца, спился…
Видимо, сказывается то, что у большей части активных пользователей интернета в свое время стояли всяческие ZverCD и т.п., где «пиратский» WinRAR всегда шел в комплекте с диском и ставился архиватором по умолчанию, а обучение «методом обезьянки» давно считается крайне эффективным для начинающего в чем-то пользователя. Он видит, что есть такой архиватор, а он по умолчанию пишет в .rar, вот и пользуется. А потом, когда все активно вылезли в сеть, среди таких же любителей халявы формат и стал крайне популярным. К слову, тот же WinRAR, скачанный с официального сайта, слезно просит денежку, но работать не отказывается, и на что они надеются с такой политикой получения прибыли, кроме как на корпоративный отдел, где на каждый ПК обязаны проплатить лицензию, если он там есть… Это как игры, в свое время кроме как в .mdf (DaemonTools которым писал) и не найти-то ничего не было, ибо программку активно расхваливали везде, и StarForce умела неплохо обходить. И бедным линуксоидам приходилось плясать с бубном, чтобы попробовать тот же StarCraft. А сейчас почти все идет в обычном .iso (ну и StarForce, надеюсь, канул в лету). Да, можно многое говорить о пиратстве как таковом, но я лучше сначала скачаю пиратку, посмотрю, понравится ли мне, и вот при положительном исходе схожу и куплю.
А я покупаю, но не играю.
Спешу растроить, но ещё до вашего „поколения” зверьсидишников rar второй и третий массово использовался в фидонетах и на bbs, где, какбе это сказать по-мягче — гигабитов не было.

Но ваши фантазии с претензией на истинность с какими-то домыслами про лицензии и прочее — смотрятся по меньшей мере неуместно на хабре.
Есть ещё много хороших архиваторов, не упомянутых в статье, например Freearc, NanoZip, Durilca, CCM(x) которые используют не упомянутые здесь методы. Также упомянуты только алгоритмы общего назначения, нет алгоритмов препроцессинга данных перед сжатием. Надеюсь, эта серия статей расскажет много нового по сравнению с Википедией.
>Ещё был архиватор HA от Harri Hirvola, который использовал сжатие HSC
там PPM, были же его исходники
в википедии тоже ссылка есть на него
q1: А как определяется размер символов?
q2: Эти алгоритмы блочные. Т.е. изначальный поток данных бьётся на блоки одинакового размера?

Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории