Все о сжатии. Авторский проект.
Форум сервера "Все о сжатии" >>
Сайт о сжатии >> Новинки | О сервере | Статистика
Книга "Методы сжатия" >> Без потерь | Изображений | Видео

>> Cтатьи+исходники | Видео | Arctest | Ссылки | Ru.compress
---------------------------------------------------------

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Dict - революция в мире архиваторов!
СообщениеДобавлено: Пн дек 04, 2006 22:59 
Не в сети
Завсегдатай

Зарегистрирован: Пн янв 17, 2005 16:05
Сообщения: 419
В этой статье описан алгоритм работы моего словарного препроцессора DICT, достигающего значительно лучших результатов, чем LIPT и XML-WRT, и выводящего сжатие текстов на принципиально новый уровень. Для начала приведу результаты тестов (столбцы - метод сжатия, размер архива, время упаковки, время распаковки):

Код:
ghc-src (исходные тексты), 28.183.463 bytes

lzma:16mb:max      4.104 kb   121 secs   1.69 secs
dict+lzma          3.878 kb    55 secs   2.18 secs

ppmd:o16:192mb     3.922 kb    34 secs   34 secs
dict+lzp+ppmd      3.812 kb    36 secs   31 secs

ppmonstr:o16:160m  3.456 kb   350 secs
dict+lzp+ppmonstr  3.300 kb   119 secs

для сравнения:
xml+lzma           4.175 kb    52 secs   4.5 secs
ppmvc              4.012 kb    40 secs   39 secs
xml+ppmvc          3.968 kb    41 secs   36 secs
lzp+ppmd           3.892 kb    36 secs   37 secs
uharc -mx -md32m   3.580 kb    92 secs
xml+paq            3.267 kb   373 secs


А теперь файл, благоприятствующий xml-wrt и ppmvc - хорошо сжимающаяся документация в html формате:

Код:
javadoc (html-документация), 37.199.948 bytes

lzma:16mb:max      2.247 kb   116 secs   1.36 secs
dict+lzma          1.977 kb    35 secs   1.59 secs

ppmd:o16:192mb     1.956 kb    22 secs   25 secs
dict+lzp+ppmd      1.716 kb    24 secs   16 secs

ppmonstr:o16:160m  1.746 kb   145 secs
dict+lzp+ppmonstr  1.570 kb    62 secs

для сравнения:
xml+lzma           1.947 kb    38 secs   6.5 secs
ppmvc              1.786 kb    29 secs   *failed*
xml+ppmvc          1.788 kb    34 secs   26 secs
lzp+ppmd           1.747 kb    19 secs   20 secs
uharc -mx -md32m   1.711 kb    54 secs
xml+paq            1.646 kb   365 secs


(имейте в виду, что результаты XML-WRT немного занижены из-за использования им словарей меньшего размера). Все тесты были проведены на процессоре с частотой 1 ГГц




Существуют две широко известные программы словарного препроцессинга.

Во-первых, LIPT, которая состоит из двух частей - первая набирает статистику на большом кол-ве текстов и в конце концов составляет список слов, отсортированный в порядке убывания их употребляемости. Вторая часть кодирует файлы, используя этот словарь, заменяя слова их 1-3 байтовыми кодами. Поскольку коды назначаются словам в порядке убывания частоты, то часто встречающиеся слова получают более короткие коды. Кроме того, первый байт в 2-3 байтовом коде отражает частоту слова, что также увеличивает степень сжатия. К сожалению, эта схема требует таскать с собой достаточно большой словарь, и эффективна только для слов, которые в этот словарь догадались включить

Вторая схема реализована в xml-wrt, который помимо xml-специфичных трюков, способен несколько улучшить сжатие и обычных текстовых файлов. В этой схеме словарь собирается динамически, а точнее - используется двухпроходный алгоритм. На первом этапе создаётся список слов, встречащихся как минимум N раз (N=6..60), на втором этапе этот список слов выводится в выходной поток, и вслед за ним - файл, где эти слова заменены на их коды, создаваемые, как я понял, по тому же принципу, что и в LIPT


Моя программа реализует третью схему, которая показала большую эффективность, чем первые две. Что особенно интересно - хронологически именно моя схема была первой (97-й год), и только закрытость программы привела к тому, что её потенциал оказался неиспользуемым

Основана эта схема на идеях из другого моего упаковщика, CM - единственной в мире программы статического контекстного моделирования. Т.е. она сначала собирает статистику по всему файлу (блоку), выводит её в выходной поток, и затем кодирует блок в соответствии с известным распределением вероятности символов в различных контекстах. Опубликованная реализация CM имела очень серьёзный недостаток - она пыталась создать полное дерево контекстов заранее заданной глубины, и это дерево содержало массу избыточной информации о контекстах, встречающихся всего 1-2 раза, но в то же время не включало информацию о частых контекстах большей длины. Очевидным решением этой проблемы было создавать контексты динамически, при достижении родительским контекстом некоторого кол-ва посещений. Хотя эта идея так и не была реализована в CM, я воспользовался ею в своём словарном алгоритме

В lipt/xml-wrt словом считается последовательность латинских букв, и это слово продолжается до тех пор, пока не встретится символ другого типа. Это упрощает их алгоритм, но уменьшает степень сжатия. В отличие от этого, в моей программе при разборе текста находится самая длинная последовательность _любых_ символов, уже занесённая в словарь. Если эта последовательность уже встречалась 10 или более раз, в словарь заносится "слово" на один байт длиннее. Рассмотрим, например, как этот алгоритм будет обрабатывать бесконечную последовательность звёздочек. Сначала в словарь будет занесено слово "*", после десяти его повторений, т.е. на 11-м байте - слово "*", после десяти его повторений, т.е. уже на 31-м байте - слово "***" и т.д.

Как видите, схема очень напоминает lzw, однако с куда более жёсткими правилами добавления в словарь новых слов. Хотя я и сказал выше, что допускается последовательность любых символов, но в действительности есть очень важная эвристика - все символы делятся на два класса - от 0 до 32, и от 33 до 255, и слово может включать символы только из одного класса. Таким образом, всё "форматирование" текста в виде последовательностей пробелов, табуляций и новых строк, оказывается сосредоточенно в одних "словах", а реальное содержимое - в других, а схема динамического роста слов позволяет держать в словаре слова не слишком короткие (имеющие очень много появлений), но и не слишком длинные и редкие слова - всё регулируется автоматически

Впрочем, из-за того, что символы разбиты на два класса, всё же некоторые слова встречаются очень часто. К примеру, в отформатированном по первому столбцу текстовом файле часто будет встречаться слово CR+LF, поскольку после него уже идут символы другого класса и это слово не может быть расширено несмотря на свой очень большой счётчик повторений

Для представления словаря используется классическая PATRICIA с инкрементальным хешированием. Т.е. все слова отображаются в огромную хеш-таблицу, и хеш-код слова "abcd" вычисляется по хеш-коду слова "abc" и символу 'd'. Поскольку мы можем себе позволить некоторую небрежность на этом этапе, каждый элемент хеш-таблицы хранит всего лишь двухбайтный ключ для обнаружения [большинства] коллизий, и двухбайтный счётчик слова. В список же слов, который будет необходим на втором этапе, мы только заносим новые слова, но никак его не используем



После того, как мы таким образом создали на первом проходе динамический словарь, происходит его чистка. Несмотря на строгость критериев занесения слов, их кол-во всё же оказывается очень велико (порядка 200-500 тысяч на 30-мегабайтном файле), и опыт показывает, что выводить все эти слова в выходной файл - занятие невыгодное (хотя я не пробовал строить словарь динамически в распаковщике - может, это будет выгодно?)

Поэтому из всех этих слов остаются только имеющие больше 50 повторов. Это порядка 10 тысяч слов, которые кодируются всего 50 килобайтами в выходном потоке. Декодер, таким образом, получает готовый список слов, и поэтому имеет очень высокую скорость работы, близкую к скорости вычисления CRC

Во втором проходе тоже есть свои тонкости. Во-первых, по условиям построения дерева слов, в нём трудно найти слова, имеющие частоту больше 10 ;) Поэтому важным моментом является то, что при поиске "хороших" слов дерево обходится снизу вверх, и частоты слов, которые удаляются из словаря, отдаются их "родителям". Таким образом, если к пример слово "birth" втречается в тексте 200 раз, то при построении словаря в нём окажутся его всевозможные "сыновья", включая "birth,", "birthday" и т.д., а частота самого слова "birth" так и останется на отметке 10. Однако если эти производные слова имеют слишком малую встречаемость, то в процессе усечения дерева их частоты отойдут к "birth" и оно всё же будет включено в словарь

Вторая идея заключается в том, что если в тексте часто встречается скажем слово "http://www.sun.com/download/j2ee.jar", то его частота окажется размазана между его частичными префиксами в силу алгоритма построения словаря. И таким образом, вышеописанный алгоритм может счесть достаточно хорошим, скажем, только слово "http://www.su", что не очень-то здорово. Для исключения этой ситуации частоты слов, имеющих только одного ребёнка (ака детерминированных контекстов), отдаются этому единственному ребёнку. Небольшая спекуляция, но на практике это работает

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

Четвёртая, и весьма очевидная идея, заключается в сортировке словаря в лексикографическом порядке и использовании известного алгоритма дифференциального кодирования упорядоченного словаря для уменьшения его размера. Именно это и позволяет упихнуть десяток тысяч немаленьких слов всего в 50 кб


При создании алгоритма большое внимание было уделено оптимизации по скорости и памяти, поэтому его выгодно применять даже с быстрыми методами сжатия (скажем, rar -m2 или 7zip -mx3), где достигается увеличение сжатия на 10-30%. Но главным, конечно, являются результаты в режимах максимального сжатия lzma, ppmd, ppmonstr, где препроцессор увеличивает сжатие на 2-10%, а для lzma и ppmonstr также ускоряет его в 2-4 раза. Фактически, применение этого препроцессора позволяет вывести любой архиватор на принципиально новый уровень. Результаты, показываемые им, значительно лучше, чем у LIPT и XML-WRT, за исключением XML файлов, где XML-WRT использует множество специфичных для этого формата приёмов и обходит DICT

Интересным моментом является сравнение DICT+PPMD с PPMVC. Фактически, оба алгоритма схожм в том, что они позволяют решить проблему неэффективности PPMD на высокоизбыточных файлах вследствие фиксированной длины используемого контекста. PPMVC улучшает сжатие высокоизбыточных файлов, но работает медленней и ухудшает сжатие на обычных текстах. В то же время последовательность dict+lzp+ppmd на всех моих тестах показывала стабильно высокий результат. Похоже, что эти препроцессоры ухитряются "съесть" всю избыточность, и приводить разнородные файлы к довольно близкому уровню энтропии, что решает одну из известных проблем PPMD - зависимость оптимального порядка модели от уровня энтропии конкретных входных данных! Как результат, даже на высокоизбыточных входных файлах, эта "тройка" сжимает быстрее и лучше чистого PPMVC, и уступает всего 0.1% от размера сжатого файла сочетанию dict+lzp+ppmvc


Алгоритм распространяется на условиях GPL лицензии, и я буду рад продать разработчикам коммерческих архиваторов лицензию на использование препроцессора в их программах. В настоящее время я работаю над включением его в свой собственный архиватор, что позволит ему не просто стать номером 1 в мире, но ещё и значительно оторваться от конкурентов :)



ps: хотя я приаттачил к статье исходники и исполняемый файл препроцессора, наверно немного найдётся людей, желающих его испытывать в таком виде. Простые смертные могут использовать для этого мой архиватор. Командная строка:

arc create a srcfile -t -m5

Также можете попробовать -m5x и -m5p, хотя для последнего метода сжатия потребуется ppmonstr.exe в PATH. Желающие насладиться более изощрёнными техниками камасутры могут почитать описание опций display, logfile, print-config и попробовать, скажем, вот такую команду:

arc a a srcfile -m0=dict:p+lzp:64mb:32:h22+pmm:16:400mb

Сcылки для загрузки:
http://www.haskell.org/bz/dict.zip
http://www.haskell.org/bz/FreeArc-win32.zip

_________________
bulat_z##mail.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 05, 2006 21:28 
Не в сети
Завсегдатай
Аватара пользователя

Зарегистрирован: Чт июл 06, 2006 00:38
Сообщения: 225
Ошибка : Архиватор вернул код завершения -1073741819
Упаковка из-под FAR. Вываливается при всех -mX, где m>3. Данные - Fate 2005 (файлы выдернуты из инсталлера). Памяти (судя по вашим данным) - выше крыши. :)

Какие будут мысли?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 05, 2006 22:42 
Не в сети
Завсегдатай

Зарегистрирован: Вс окт 10, 2004 16:36
Сообщения: 115
Откуда: Минск
Вот так всю малину и портят :|
Мне, на самом деле, хотелось бы ещё для BWT результаты увидеть


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 05, 2006 23:11 
Не в сети
Завсегдатай

Зарегистрирован: Пн янв 17, 2005 16:05
Сообщения: 419
>Мне, на самом деле, хотелось бы ещё для BWT результаты увидеть

попробуй сам. у меня результаты получились неуйстойчивые - где-то выигрыш, где-то проигрыш (использовался grzip). в приницпе, opendak я загрузмл, но в моих тестах grzip идёт как быстрый упаковщиек, который грех портить такими сравнительно меджддленными препроцессорами. если dak может конкурировать по сжатию с ppmd на 64-128 метрах памяти - будет другое дело

>Ошибка : Архиватор вернул код завершения -1073741819

даже не знаю. у меня никогда сбоев не было. попробуй отдельные алгоритмы сжатия (-m4bx/-m4tx/-m4b/-m4t/-mlzma/-mppmd/-mgrzip/-mdict/-mlzp) и скажи на чём сбоит на чём нет. если есть не очень большие файлы на которых проявляется ошибка - присылай их мне. в пределах нескольких мб

_________________
bulat_z##mail.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 06, 2006 02:21 
Не в сети
Завсегдатай

Зарегистрирован: Пн янв 17, 2005 16:05
Сообщения: 419
ICESCREAM писал(а):
Ошибка : Архиватор вернул код завершения -1073741819
Упаковка из-под FAR. Вываливается при всех -mX, где m>3. Данные - Fate 2005 (файлы выдернуты из инсталлера). Памяти (судя по вашим данным) - выше крыши. :)

Какие будут мысли?


исправил ошибку, обновил FreeArc. но предупреждаю - чудес не бывает, и lzma не способен сжать лучше, чем сжимает lzma :)


что касается OpenDark - то он с препроцессором работает в разы быстрее. но до grzip -l всё равно не дотягивает ни по скорости, ни по сжатию

_________________
bulat_z##mail.ru


Последний раз редактировалось Булат Ср дек 06, 2006 12:32, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 06, 2006 12:13 
Не в сети
Завсегдатай

Зарегистрирован: Пн янв 17, 2005 16:05
Сообщения: 419
>Похоже, что эти препроцессоры ухитряются "съесть" всю избыточность, и приводить разнородные файлы к довольно близкому уровню энтропии

собственно говоря, ничто не мешает прверить это предположение:
Код:
        Оригинал   Энтропия     dict+lzp   Энтропия    Сжатый
RusSF   30.730 kb  2,07 bpc     22.004 kb  2,89 bpc    7.942 kb
GhcSrc  28.183 kb  1,08 bpc     12.888 kb  2,37 bpc    3.812 kb
JavaDoc 37.199 kb  0,37 bpc      6.353 kb  2,16 bpc    1.716 kb
Bcc55h  38.953 kb  0,57 bpc     13.165 kb  1,69 bpc    2.784 kb
Perl    21.259 kb  1,15 bpc      9.698 kb  2,52 bpc    3.054 kb


как видите, если в первоначальных файлах разброс энтропии был 6 раз, то после препроцессинга он уменьшился до 2-х раз



>Данные - Fate 2005 (файлы выдернуты из инсталлера

поясню своё предыдущее замечание. dict не способен улучшить сжатие нетекстовых файлов, и поэтому он на них даже не применяется. остаётся чистый lzma - точно такой же, как и в 7-zip

_________________
bulat_z##mail.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 06, 2006 21:58 
Не в сети
Завсегдатай
Аватара пользователя

Зарегистрирован: Чт июл 06, 2006 00:38
Сообщения: 225
Цитата:
поясню своё предыдущее замечание. dict не способен улучшить сжатие нетекстовых файлов, и поэтому он на них даже не применяется. остаётся чистый lzma - точно такой же, как и в 7-zip


Гхм! Разница в 10-60 кб на 10мб - несущественна, при условии 7-кратной скорости, которая наблюдается при сравнениее 7-Zip.Ultra и ARC -m6.

p.S. После 7-Zip-а на средней системк - невозможно работать. В случаи с вашим архиватором - этих проблем нет.

Цитата:
исправил ошибку, обновил FreeArc. но предупреждаю - чудес не бывает, и lzma не способен сжать лучше, чем сжимает lzma

А где обновление? Тотже файл вроде... :(


Последний раз редактировалось ICESCREAM Ср дек 06, 2006 22:19, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 06, 2006 22:12 
Не в сети
Завсегдатай
Аватара пользователя

Зарегистрирован: Чт июл 06, 2006 00:38
Сообщения: 225
Словарь русских слов :)
Источник - http://www.mibeditor.wand.ru/russian.zip
Цитата:
Исходный размер : 34,080,768 байт ;)
Инфа от архиватора : Compressing 1 file, 34.080.768 bytes.

-m3 - 3,445,789
-m4 - 3,166,968
-m4x - 3,166,937
-m4b - 1,996,845
-m4bx - 1,996,539
-m4t - 3,187,468
-m4tx - 1,998,374
-m5 - 2,685,802
-m5x - 2,685,772
-m5b - 1,189,269
-m5bx - 1,175,374
-m5t - 3,250,368
-m5tx - 1,180,457
-m6 - 2,685,804
-m6x - 2,685,772
-m6b - 1,189,271
-m6bx - 1,175,374
-m6t - 3,250,368
-m6tx - 1,180,457
-mlzma - 1,997,542
-mppmd - 2,106,794
-mgrzip - 2,970,455
-mdict - 29,245,299
-mlzp - 34,081,032

7-Zip.Ultra - 1,168,756
Rar.m5 - 2,974,953


Словарь английских слов
Источник - http://www.mibprogs.nm.ru/mibeditor/engdic.zip
Цитата:
Исходный размер : 1,765,170 байт ;)
Инфа от архиватора : Compressing 1 file, 1.765.170 bytes.

-m3 - 471,843
-m4 - 407,434
-m4x - 409,192
-m4b - 407,430
-m4bx - 409,188
-m4t - 538,216
-m4tx - 395,970
-m5 - 407,981
-m5x - 407,582
-m5b - 407,977
-m5bx - 407,578
-m5t - 538,446
-m5tx - 396,231
-m6 - 407,980
-m6x - 407,582
-m6b - 407,978
-m6bx - 407,578
-m6t - 538,446
-m6tx - 396.231
-mlzma - 407,470
-mppmd - 538,548
-mgrzip - 559,391
-mdict - 1,192,507
-mlzp - 1,765,415

7-Zip.Ultra.lzma - 407,305
Rar.m5 - 546,990


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 06, 2006 22:22 
Не в сети
Завсегдатай

Зарегистрирован: Пн янв 17, 2005 16:05
Сообщения: 419
может лучше на "ты"?

текстовые файлы прграмма ест-но жмёт лучше и быстрее. моё замечание относилось именно к ресурсам игрушек

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

_________________
bulat_z##mail.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 06, 2006 22:28 
Не в сети
Завсегдатай

Зарегистрирован: Пн янв 17, 2005 16:05
Сообщения: 419
>А где обновление? Тотже файл вроде... :(

архив за 5-е число. размер exe остался тот же, ну так такм и изменений на 2 копейки

_________________
bulat_z##mail.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 06, 2006 22:44 
Не в сети
Завсегдатай
Аватара пользователя

Зарегистрирован: Чт июл 06, 2006 00:38
Сообщения: 225
:lol:

А я игрушки и имел в виду, когда говорил о 60кб на 10мб ;) b 7-микратной скорости.

Тем более куда меньшее ресурсопотребление (на глаз). Учитывая, что пираты и причисленные к ним игроделы маниакально пересели на 7-zip. Народ просто вынужден иметь для установки игры более мощную систему, чем требуется для самой игры.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт дек 07, 2006 00:18 
Не в сети
Завсегдатай

Зарегистрирован: Пн янв 17, 2005 16:05
Сообщения: 419
у меня такое подозрение, что ты сравниваешь программу на текстовых файлах, и потом делаешь вывод, что и на ресурсах к игрушке она будет в 7 раз быстрее?

_________________
bulat_z##mail.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт дек 07, 2006 00:38 
Не в сети
Завсегдатай
Аватара пользователя

Зарегистрирован: Чт июл 06, 2006 00:38
Сообщения: 225
Выложить результаты сравнения на GEX/Fate 2005? :)

На Gex (что-то около 70 мегабайт) - 7-Zip меньше на 68kb, вот только потратил почти 20 минут против 3 с мелочью, да и работать на компе после него было уже нельзя :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт дек 07, 2006 11:15 
Не в сети
Завсегдатай

Зарегистрирован: Пн янв 17, 2005 16:05
Сообщения: 419
выложи. и перепроверь их сначала. не должно такого быть. 7zip 4.43, надеюсь?

хотя есть пара подозрений - lzp препроцессор, и exe препроцессор, используемый на всех файлах, в отличие от 7z. первое в принципе, могло дать такой результат

попробуй с опцией -mlzma:32mb:max:bt4:128/6t - это то же, что и -m6, но с отключением lzp-препроцессора для бинарных файлов. если результаты получатся как у 7-zip, я по крайней мере пойму в чём дело :)

>да и работать на компе после него было уже нельзя

это из-за того, что в ultra используется примерно 800 мб памяти. попробуй 7z -mx9 -md=32m

ну теперь до меня дошло - 7zip у тебя тормозил из-за своппинга. уменьшишь словарь - и всё будет ок :)


kvark, я разобрался почему результаты столь слабые с bwt. это из-за того, что у меня используются 1- и 2-байтовые коды для слов, и 2-байтовые могут заканчиваться _любым_ символом. ес-но, это разбавляет контексты всякой ерундой, и страдает от этого в первую очередь BWT (во вторую наверное PPM). без 2-байтовых кодов (опция -1 у dict) проигрыша никогда не бывает, но и выигрыш очень слабый, где-то 1-2%. возможно, я над этим поработаю. в идеале конечно, кодер должен работать с 2-байтовыми элементами :D

_________________
bulat_z##mail.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт дек 07, 2006 15:00 
Не в сети
Завсегдатай

Зарегистрирован: Вс окт 10, 2004 16:36
Сообщения: 115
Откуда: Минск
жаль, что так...
будем ждать апдейтов :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron

Поиск по сайту:
Поиск по форуму | Справка | Детальный запрос

Сайт о сжатии >>
  Новинки | О сервере | Статистика

  Книга "Методы сжатия данных" >>
     Универсальные | Изображений | Видео


  Разделы >> Download (статьи+исходники) | Ссылки | Ru.compress | Arctest | Видео | Форум | Старый Форум

  Проекты >> А.Ратушняка | М.Смирнова | В.Юкина | Е.Шелвина | А.Филинского | Д.Шкарина | С.Оснача | Д.Ватолина
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB