LINUX.ORG.RU
ФорумTalks

Выпущены sac 1.0.0 и stack 1.0.0

 , , , ,


0

2

Выпущены архиватор sac 1.0.0 (первая версия) и компрессор stack 1.0.0 (первая версия). Sac является инновационным архиватором, так как крайне переносим и работает даже под Slackware 1.01 из 1993 года, ресурсов же потребляет минимум. Stack является таким же инновационным компрессором с такими же преимуществами, как и у архиватора sac, но при этом еще и обеспечивает крайне высокую степень сжатия, сжимает практически мгновенно и потребляет минимум ресурсов для сжатия. Sac имеет интеграцию со stack. Еще одним важным преимуществом sac и stack является полное отсутствие уязвимостей без какого-либо Rust’а, собираются они без Интернета спокойно, что не было бы достижимо, будь они написаны на Rust’е, а написаны они, естественно, на Си. Обязательно стоит отметить, что главным преимуществом sac и stack является их 100% российское происхождение. Tar+gzip в прошлом — будущее за sac+stack!

Директория с сорцами в различных форматах и Linux-бинарниками для 32-битного x86 (статические, работают и под системами amd64)

Перемещено dataman из opensource



Последнее исправление: dataman (всего исправлений: 1)

компрессор stack 1.0.0 (первая версия)

Неудачное название. Уже есть haskell-stack их команды будут конфликтовать.

Rodegast ★★★★★
()

А чего на файлообменнике вместо репозитория?

Я вообще подумал: «ну скачаю этот архив, посмотрю потом код», а воркаплоад решил мне содержимое выдавать поштучными загрузками, шиза.

Bfgeshka ★★★★★
()
Ответ на: комментарий от Bfgeshka

А чего на файлообменнике вместо репозитория?

И куда предлагаешь заливать без премодерации? Git-хостинги не предлагать, у меня с git’ом плохой опыт.

realrcldev
() автор топика
Ответ на: комментарий от realrcldev

Оч странно, конечно. Гит мб мудрёный, но если дальше pull-commit-push не лезть, то выучивается за полчаса-час.

Если git совсем религия не позволяет, то можешь попробовать какой-нибудь mercurial или svn.

Bfgeshka ★★★★★
()

главным преимуществом sac и stack является их 100% российское происхождение

Ну если это аж главное преимущество, то можете сразу на помойку выносить.

hippi90 ★★★★★
()

полное отсутствие уязвимостей

Кем/чем доказано? :)

Tar+gzip в прошлом

Тогда зачем они в тегах? Лучше добавить тег «от автора».
Но в таком толстом виде новость не нужна.

dataman ★★★★★
()

Объективное сравнение есть или заявление основанное на ниочём?

ComradeDOS
()

$ cat stack-1.0.0/main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define print_help() printf("Welcome to stack 1.0.0!\nStack is a compressor like gzip.\nUSAGE: %s command\nUse %s compress < file > file.stk to create compressed file with name file.stk from file with name file.\nUse %s decompress < file.stk > file to decompress file with name file.stk and write decompressed data to file with name file.\nRecommended file extension is .stk.\nPLEASE JOIN RCL: https://discord.gg/qg2ymrZuWH\n", argv[0], argv[0], argv[0])

void skip_bytes_in_fd(int fd, unsigned int count_of_bytes_to_skip);
unsigned int get_count_of_repeated_bytes(char *headers, unsigned int size_of_headers, unsigned int position);

int main(int argc, char **argv) {
    unsigned int i;
    unsigned int count_of_repeated_bytes;
    char tmp_buffer[1];
    char *new_data = NULL;
    unsigned int size_of_new_data;
    char *headers = NULL;
    unsigned int size_of_headers;
    unsigned int position;

    if (argc < 2) {
        fprintf(stderr, "%s: fatal tesling error: no command\nType %s help to see help.\n", argv[0], argv[0]);
        return 0;
    }

    if (strcmp(argv[1], "compress") == 0) {
        if (read(0, tmp_buffer, 1) > 0) {
            new_data = malloc(1);
            new_data[0] = tmp_buffer[0];
            size_of_new_data = 1;
            while (read(0, tmp_buffer, 1) > 0) {
                if (tmp_buffer[0] == new_data[size_of_new_data - 1]) {
                    count_of_repeated_bytes = 2;
                    while (1) {
                        if (read(0, tmp_buffer, 1) > 0) {
                            if (tmp_buffer[0] == new_data[size_of_new_data - 1]) {
                                ++count_of_repeated_bytes;
                            } else {
                                printf("%d:%d\n", size_of_new_data, count_of_repeated_bytes);
                                new_data = realloc(new_data, size_of_new_data + 1);
                                new_data[size_of_new_data++] = tmp_buffer[0];
                                break;
                            }
                        } else {
                            printf("%d:%d\n", size_of_new_data, count_of_repeated_bytes);
                            break;
                        }
                    }
                } else {
                    new_data = realloc(new_data, size_of_new_data + 1);
                    new_data[size_of_new_data++] = tmp_buffer[0];
                }
            }
            printf("%c", '\n');
            for (i = 0; i < size_of_new_data; ++i) {
                printf("%c", new_data[i]);
            }
            free(new_data);
        } else {
            printf("%c", '\n');
        }
    } else if (strcmp(argv[1], "decompress") == 0) {
        if (read(0, tmp_buffer, 1) > 0) {
            if (tmp_buffer[0] == '\n') {
                while (read(0, tmp_buffer, 1) > 0) {
                    printf("%c", tmp_buffer[0]);
                }
                return 0;
            }
            headers = malloc(1);
            headers[0] = tmp_buffer[0];
            size_of_headers = 1;
            while (read(0, tmp_buffer, 1) > 0) {
                if (tmp_buffer[0] == '\n' && headers[size_of_headers - 1] == '\n') {
                    break;
                } else {
                    headers = realloc(headers, size_of_headers + 1);
                    headers[size_of_headers++] = tmp_buffer[0];
                }
            }
            position = 1;
            while (read(0, tmp_buffer, 1) > 0) {
                count_of_repeated_bytes = get_count_of_repeated_bytes(headers, size_of_headers, position);
                if (count_of_repeated_bytes == 1) {
                    printf("%c", tmp_buffer[0]);
                } else {
                    for (i = 0; i < count_of_repeated_bytes; ++i) {
                        printf("%c", tmp_buffer[0]);
                    }
                }
                ++position;
            }
            free(headers);
        }
    } else if (strcmp(argv[1], "help") == 0) {
        print_help();
    } else {
        fprintf(stderr, "%s: fatal tesling error: unknown command %s\nType %s help to see help.\n", argv[0], argv[1], argv[0]);
    }

    return 0;
}

void skip_bytes_in_fd(int fd, unsigned int count_of_bytes_to_skip) {
    unsigned int i;
    char tmp_buffer[1];

    if (lseek(fd, count_of_bytes_to_skip, SEEK_CUR) == -1) {
        for (i = 0; i < count_of_bytes_to_skip; ++i) {
            read(fd, tmp_buffer, 1);
        }
    }
}

unsigned int get_count_of_repeated_bytes(char *headers, unsigned int size_of_headers, unsigned int position) {
    unsigned int i = 0;
    unsigned int j;
    char *position_from_headers_str = NULL;
    char *count_of_repeated_bytes_str = NULL;
    unsigned int count_of_repeated_bytes;

    while (1) {
        position_from_headers_str = malloc(1);
        position_from_headers_str[0] = headers[i++];
        for (j = 1; headers[i] != ':'; (++j, ++i)) {
            position_from_headers_str = realloc(position_from_headers_str, j + 1);
            position_from_headers_str[j] = headers[i];
        }
        position_from_headers_str = realloc(position_from_headers_str, j + 1);
        position_from_headers_str[j] = '\0';
        if (atoi(position_from_headers_str) == position) {
            free(position_from_headers_str);
            count_of_repeated_bytes_str = malloc(1);
            count_of_repeated_bytes_str[0] = headers[i + 1];
            i += 2;
            for (j = 1; headers[i] != '\n'; (++j, ++i)) {
                count_of_repeated_bytes_str = realloc(count_of_repeated_bytes_str, j + 1);
                count_of_repeated_bytes_str[j] = headers[i];
            }
            count_of_repeated_bytes_str = realloc(count_of_repeated_bytes_str, j + 1);
            count_of_repeated_bytes_str[j] = '\0';
            count_of_repeated_bytes = atoi(count_of_repeated_bytes_str);
            free(count_of_repeated_bytes_str);
            return count_of_repeated_bytes;
        }
        free(position_from_headers_str);
        for (;headers[i] != '\n'; ++i) {}
        if ((++i) == size_of_headers) {
            return 1;
        }
    }
}
dataman ★★★★★
()

является инновационным архиватором

В чём заключается инновационность?

frunobulax ★★★★
()

Еще одним важным преимуществом sac и stack является полное отсутствие уязвимостей

Смелое заявление.

собираются они без Интернета спокойно, что не было бы достижимо, будь они написаны на Rust’е

Вам не стыдно лить такое 4.2 будь то даже и толксы?

apt_install_lrzsz ★★★★
()

Еще одним важным преимуществом sac и stack является полное отсутствие уязвимостей

«А если найду?» (c) гопник из фольклора

hobbit ★★★★★
()
Ответ на: комментарий от realrcldev

Ну есть svn-хостинги, например, sourceforge. :) Всё лучше, чем файлообменник.

hobbit ★★★★★
()

Архиватор Бабушкина наконец-то разработан?

mskrasnov
()
Ответ на: комментарий от Bfgeshka

Гит мб мудрёный, но если дальше pull-commit-push не лезть, то выучивается за полчаса-час.

Что там в pull-commit-push полчаса учить, а тем более час?

CrX ★★★★★
()
Ответ на: комментарий от CrX

Что там в pull-commit-push полчаса учить, а тем более час?

Да вроде как будто и ничего, но в нём СТОЛЬКО всего разного что с нуля запутаться легко.

Если что пишу как запутывающийся как раз. Общий принцип знаю, всякое там нажмякать адд-пуш-пулл умею, но дальше чет какой-то буксир.

С теми же ветками я так понимаю есть разные парадигмы работать. Вот если есть где в одном месте толково почитать на примерах как делают на живых проектах с пояснением почему так и в чем смысл самих действий - буду благодарен :)

frunobulax ★★★★
()
Ответ на: комментарий от frunobulax

Да. Но утверждение было «если дальше pull-commit-push не лезть, то выучивается за полчаса-час». Если не лезть, то там не на что полчаса тратить. Ну а если лезть, то да, дольше выйдет.

CrX ★★★★★
()
Ответ на: комментарий от CrX

Все уже знают гит и забыли, как он странно устроен.

Bfgeshka ★★★★★
()

Где reviewed whitepaper с описанием и доказательством алгоритма?

А так продолжай наблюдения! Гит он не освоил, а в компрессию мастер. Ага.

PS: аж чуть-чуть интересно стало. Заглянул под капот, а там вжих! аж считалка последовательно повторяющихся байтов, если я правильно эту кашу их malloc/realloc разобрал! Иногда даже free встречается. Wow!

PPS: надеюсь, что автору 12 лет. Тогда можно даже чуть-чуть похвалить. Но лучше пусть конечно сначала книжки по теме читать начнёт.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 2)
Ответ на: комментарий от dataman

Я надеюсь ОП лет 12, и он горд, что придумал свой алгоритм компрессии)

goingUp ★★★★★
()
Ответ на: комментарий от realrcldev

И куда предлагаешь заливать без премодерации?

На форум encode.su, там такое любят.
Заодно и инновационность по байтикам разберут.

dataman ★★★★★
()
Ответ на: комментарий от dataman

Я понял, здесь всё дело в магических константах :)

yars068 ★★★★★
()
Ответ на: комментарий от yars068

Можно же сделать постельный комплект.

dataman ★★★★★
()
Ответ на: комментарий от Bfgeshka

Да простой он как тапок. Для базовых вещей.

Zhbert ★★★★★
()

А могут ли у нас в конечном итоге заблокировать rust приложения на государственном уровне?

masa ★★★
()

у кого-то спешат часы.

отличная новость для 1-го апреля, но пока рановато

MKuznetsov ★★★★★
()
Ответ на: комментарий от realrcldev

Но так ли нужен очередной архиватор?

Чем твой stack лучше zstd, lzma или прости господи bzip2 или deflate? Есть ли бенчмарки? Умеет ли твой sac корректно сохранять атрибуты и права на файлах?

a1ba ★★★
()

Sac является инновационным архиватором, так как крайне переносим и работает даже под Slackware 1.01 из 1993 года

Где пруф?

ресурсов же потребляет минимум

Где пруф-2 ?

сжимает практически мгновенно

А как у него с расжатием?

Еще одним важным преимуществом sac и stack является полное отсутствие уязвимостей

Которые никто не искал.

главным преимуществом sac и stack является их 100% российское происхождение.

Блин... ну и зачем я до этого момента дочитал? :(((

anc ★★★★★
()
Ответ на: комментарий от dataman

Ну зачем... зачем вы это здесь показали? Лютый фэйспал же... Прям напомнило мою студенческую поделку.

anc ★★★★★
()
Ответ на: комментарий от a1ba

Чем твой stack лучше zstd, lzma или прости господи bzip2 или deflate?

Скоростью и степенью сжатия.

Умеет ли твой sac корректно сохранять атрибуты и права на файлах?

Да.

realrcldev
() автор топика
Ответ на: комментарий от dataman

Есть не только компрессор stack, но и архиватор sac.

realrcldev
() автор топика
Ответ на: комментарий от beastie

Я git освоил, но из-за него один свой проект чуть не потерял, спас бекап в архиве, с тех пор git и не использую.

Иногда даже free встречается.

Утечек нет. Я все valgrind’ом прогоняю.

realrcldev
() автор топика
Ответ на: комментарий от irton

Но rustc с года где-то 23-го без Интернета не собирается никак, там лютый вендорлок сделали.

realrcldev
() автор топика
Ответ на: комментарий от firkax

Арендуй мне впску тогда, я на такое смысла не вижу деньги свои тратить, ибо файлообменник и так справляется прекрасно.

realrcldev
() автор топика
Ответ на: комментарий от anc

Где пруф?

Тестировал, можешь и сам протестировать.

Где пруф-2 ?

Я лично смотрел потребление ОЗУ и нагрузку на процессор, можешь сам посмотреть.

А как у него с расжатием?

Еще лучше.

Которые никто не искал.

Я написал 101% safe memory код благодаря valgrind.

realrcldev
() автор топика
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)