![image.png](https://2ch.life/b/thumb/316441807/17392202820240s.jpg)
Все остальное работает, только двач заглатывает
Хз че ты там собрался качать, у меня 2тб диск простаивает практически пустой, при том, что все что мне нужно на нем сохранил
Сейчас игры весят по 150гб. 13 игр и уже нет 2тб.
Ну игры да, для них отдельный диск у мен на 1тб и он занят полностью практически, но больше и не нужно, ведь если будет много игр установлено именно, то я никогда не пройду ни одну из них..
> Сейчас игры весят по 150гб. 13 игр и уже нет 2тб.
И почти все они - кусла кала.
Как и современный интернет.
Лучше бы таблеток взял, поехавший. Пиздец просто.
А то ты скачаешь ведьмака и сотни таких как и ты скачают того же ведьмака
Удачи выкачать 44 зеттабайта на 54 тб, додстер ебаный
Самое главное книги выкачать. Универсальная вечная ценность, в отличии от фильмов, аниме и игорей.
Ответ очевиден - резервный backup на 18 Т
А, про музыку еще забыл.
Почем взял?
Я тоже подумывал, но пока не взял. Я и нынешние то еще не забил, да и хз что качать, весь затык будет в этом.
>>Взял 3 таких красавчика. Сейчас буду скачивать весь интернет.
Так себе идея:
1. Конторы занимающиеся профессиональным восстановлением данных с трудом работают даже с 5TB хардами, так как плотность записи данных ебейшая. Если ты с 18тб хардом к ним придешь, когда он наебнется, то в основном тебя просто нахуй пошлют. А там где не пошлют попросят слишком дохуя денег.
2. Наебнется он очень быстро. Все что выше 1ТБ имеет низкую надежность, в следствии чего, с высокой вероятностью, ломается в течении 1-2 года. Это тебе еще повезет если его просто заклинит без порчи поверхности. Но даже если просто заклинит то дядя кабанчик тебе не скажет об этом, и возьмет с тебя как за побитовое восстановление 18ТБ данных.
![16705800828870.mp4](https://2ch.life/b/thumb/316441807/17392225120110s.jpg)
602x338, 0:01
>Всем советую сделать так же
При чебурнете будет запрещенны жесткие диски. Будут разрешено, только 1 терабайт на каждого гражданина, остальное будет изыматься в пользу Яндекса и ВК. Чего прятать на жестких дисках честному гражданину? Нечего! Перекачал в ВК свои фильмы и песни, и пользуйся - рабуйся.
Красавчик, держи пятюню. Планирую купить жестоко и сделать то же самое.
![17376296645710.png](https://2ch.life/b/thumb/316441807/17392226161670s.jpg)
Взял твою мамку, сейчас буду ей спускать в пизду и жопу, потом не говори что я тебя не предупреждал.
А ты смотрю шаришь? А как будет ССД в роли хранилища? Там конечно ограниченное число циклов перезаписи, но если его часто не включать его же на дольше хватит чем ХДД? Или нет?
>гелий через микроотверстие делает пшшшш
>головка скоблит о пластину, уничтожая все данные
твои действия?
![6wBtSGsaH8.jpg](https://2ch.life/b/thumb/316441807/17392229789060s.jpg)
(Нужный объём в ТБ) * 2 = Количество дисков по 1 ТБ
По два каждый чтобы бекапить, т.к. бекап это в принципе единственный метод надёжного хранения информации.
Торренты могут запретить, заманить, лучше объединится с радиолюбителями, по радиосвязи узнавать ссылку на скачивание или частоту и район где достаёт сигнал того у кого есть нужный фаил или ссылка на торент.
Ходить по городу, переключая каналы в поисках нужного торента. Для совсем секретных отправляться за город, в леса и горы, где в тайном убежище сиди затворник и передаёт инфу на секретные торренты.
> Торренты могут запретить, заманить, лучше объединится с радиолюбителями, по радиосвязи узнавать ссылку на скачивание или частоту и район где достаёт сигнал того у кого есть нужный фаил или ссылка на торент.
> Ходить по городу, переключая каналы в поисках нужного торента. Для совсем секретных отправляться за город, в леса и горы, где в тайном убежище сиди затворник и передаёт инфу на секретные торренты.
С хуителями. Для связи сойдет и чебурнет. А так нет ничего лучше оффлайновых связей, тогда можно просто хоть с хардами в гости припереться.
звоню Александру Гельевичу и передаю ему пшшшш от камышёвых людей
Сделают все централизацованым, как отопление, как налоги которые текут в центр, самолёты летают через столицу. Так же с информацией, будут дата центры где будет вся информация с уровням доступа. Личными будут пару гигов для установки обязательных приложений типа " товарищ майор всегда рядом"
> (Нужный объём в ТБ) * 2 = Количество дисков по 1 ТБ
Во первых чем меньше размер диска тем дороже цена за ТБ. Во вторых 1 Тб это пиздецки смешной объем, итв третьих сколько вмещает отсек для хардов в стандартном системнике, хардов на 4-6 в лучшем случае?
Приходишь в гости с хардами, тебя там насилуют в анус и расчленяют, харды сдают в цветмет. Твои действия?
>>если его часто не включать его же на дольше хватит чем ХДД? Или нет?
У них заряд утекает в ячейках если долго не включать. QLC живут до года без включения. TLC 1-3 года, SLC по 10 лет. Но SLC дорогие. Теоретически HDD в выключенном состоянии дольше сохранит данные. Но HDD в наработке по часам проигрывает из за особенностей записи и наличия механики.
>raid массив
Да я понимаю что можно кодами хемминга и хуеминга часть ошибок покрыть, но рейд массив не спасает в ситуации когда винт тупо сгорел нахуй полностью или проебался.
Поэтому да, будет лютый расход по дискам, но зато полная копия.
>>42918
А я не собираюсь их постоянно подключнными держать.
Залил фильмов и игр (для PS2, PS1, XBOX360), сделал "дамп" списка контента (без содержимого) и винты сами отдельно хранишь в чистом помещении.
![nBkSUhL2hFUnm8y-Jb6BrNOp2Z318Ji-miDHnvyDoGuQYX7XByXLjCdwu5tI-BaO-42NvWWBK8AqGfS8kjIzIymM8G1NxHb1A=S1yQuJE2TCaCnro8S4aRPA.jpg](https://2ch.life/b/thumb/316441807/17392235393720s.jpg)
Пиздец, ты долбоеб ))
![17390811173290.jpg](https://2ch.life/b/thumb/316441807/17392235531920s.jpg)
Сейчас уже практически всё забито.
Думаю взять ещё 2 по 20 Тб.
Маня, винты нельзя хранить отдельно, это не оффлайн хранилище. Ячейки намагниченность потеряют и все. Для холодного хранения магнитная лента, и ту вроде надо раз в какой то промежуток времени вставлять и перематывать
> Приходишь в гости с хардами, тебя там насилуют в анус и расчленяют, харды сдают в цветмет. Твои действия?
Никуда не ходишь вообще, тебе в квартиру залезают ветеринары СВО вместе с цыганами и хохлами и начинают насиловать тебя кочергой. Твои действия?
> >raid массив
> Да я понимаю что можно кодами хемминга и хуеминга часть ошибок покрыть, но рейд массив не спасает в ситуации когда винт тупо сгорел нахуй полностью или проебался.
Именно в этой ситуации он и спасает, блять.
![17283657587180.jpg](https://2ch.life/b/thumb/316441807/17392237744450s.jpg)
> но рейд массив не спасает в ситуации когда винт тупо сгорел нахуй полностью или проебался
Садись, 2.
Иди перечитывай.
Хз у меня лично всё норм (именно на сайте) на Dashchan как бы я не старался а капча нихуя не грузит. Хорошо что я не любитель навернуть говнеца и у меня есть пасскод.
В чем проблема раз в полгодика подключить ради синхронизации и домагнитить?
Ну или просто питание на них подавать без подключений к дата проводам.
Короче включать его раз в месяц, и тогда будет дольше работать чем hdd, не?
![image.png](https://2ch.life/b/thumb/316441807/17392242365220s.jpg)
content://com.android.chrome.FileProvider/images/screenshot/17392241731281911702141.jpg
Если все наебнется, то не хватит всех хдд, чтобы восполнить то, что мы имеем сейчас. И в целом, скорее всего просто откатиться к локалкам, где будет инфы больше, чем ты сохрнашь, но при это раз уж решил, то ничего плохого, будешь делиться с нами своими данными!
Есть, каждый день выходят, просто не те, что ты любишь. В целом, уже игр вышло уже столько, что даже если начать играть сейчас, от все не пройдешь
А пока просто чебурнет будет, вполне себе жить можно и адаптироватся, кинчики и сериалы с субтитрами посмотрим, а игр годных щас 1-2 в год да и все, да и те дай бог просто терпимые и подходят лишь чтобы просто убить время
Лучше бы мозг купил. Для хранения надо брать голд, а не ультрастар.
Интересно сколько там зеттабайтов игорей и прона. Асло есть еще дублируемая инфа на разных языках. Короч без порнухи, игорей и кинца хорошо если 10тб инфы будет.
Лично мне хватит и старых винчиков которые максимум 50 гб весит установочник
![image](https://2ch.life/b/thumb/316441807/17392296149230s.jpg)
Я лично скачал весь асмр который мне нравится. Я спокоен как удав блять
нет, 4тб вд живучие, особенно пурпл и блэк
блю с осторожностью, много каловых моделей
я себе беру 2 тб блэк с каждой зп и бэкаплю бэкапы
>>43148
я потратил на восстановление гелиевого 8 тб 45к в спб, расскажи мне блядь. хорошо что битый блин у меня был забэкаплен в телегу да я проебался в тот раз знаю
>>42982
лента до 100 тб не имеет смысла, и она не панацея, только как мастер-копия
Олигофрен блять, вероятность что хотя бы 1 диск сдохнет выше с большим числом дисков. Держи бэкап и все нахуй.
на windows server - файловая система, дедупликация позволяет сэкономить 50% на случайных данных но об этом нигде не говорят. там хеши блочные маркируется и система хранит ток уникальные отрезки блоков HTFS
к примеру на Win 11 у тебя видосов и игр будет на 2 тб. а на сервере 1.5 тб. и не ясн почему они эту фишку не переносят на win 11
по поводу алгоритма "всего" то лучше не орать.
ты хохлявая свинятина?
Ебать, развели на 45к
Хохля, все знают, что вы снова город потеряли. Давай в бусик живо
Ебать твою маму
Выглядит солидно
Даже приблизительно не могу имаджинировать твоё кретиничное свиное еблище.
Какой диск самый надежный для хранения в пределах 1-2 тб?
> Выглядит солидно
С гелием небось. Я слышал все харды выше 6-8 терабайт с гелием. Гелий черещ трещины утечет и они по пизде пойдут.
Нет. Если ты покупаешь диск на 18тб то тебе минимум нужно купить еще один такой же. Это самый простой рейд помоему
Раньше были неубиваемые Samsung Ecogreen Spinpoint F2/F3, некоторые экземпляры от WD Green, Blue, Black, Red, Purple.
Сейчас WD Red Plus/Pro, Purple, Black, Gold, Ultrastar, но хуй знает настолько качественно собраны, вполне возможно что по принципу запланированного устаревания с киллсвичем после определенного количества часов работы.
Охлад только прикрути к ним уж очень они горячие, а чем им прохладнее чем дольше будут служить
У тебя туда даже 0,00000001% вк порнухи не влезет, какой нахуй интернет ты собрался выкачивать?
Картинку из интернета ты взял а не 3 винчестера клоун ебаный.
Нихуя ты умственно осталый пиздец.
Нормальные люди во первых ещё с появления пеки хоронят все и всегда. С развитием сетей ещё в 2000ых. Эти самые нормальные люди уже раздавали разный контент во всяких strongDC и т.п
Ещё все нормальные люди время от времени проводят аудит схороненного добра. И самое важное эти самые нормальные люди не схороняют инфы на больших хардах. Потому что ебалн тупоголовый они могут наебнуться и ты потеряешь сразу и дохуя контента или инфы.
Хоронить надо на 1-2тб хардах.
Какой же ты далбаеб пиздец просто
Не смогли остановить старение
Не смогли преодолеть смерть
Не смогли увидеть что там за гранью.
Они свихнулась. Столько власти а ничего не могут.
> Хоронить надо на 1-2тб хардах.
> Какой же ты далбаеб пиздец просто
Это ты долбоеб. И сколько у тебя таких хардов в пеку влезет, 4? Охуенно похранил, блять.
Ну хуй знает, если ты не любитель индиговна, то последние лет 10 игропрома будто можно пройти за месяц - максимум. Помню в 2015 пригорало что за целый год вышло всего пару интересных мне игор и, может быть, десяток хороших игр всего, а сейчас игропрому уже на "игру года" номинировать нечего.
у меня папка с вебмами с двача почти впритык на двд-р помещается
Чем ты их забил то? Играми и порнухой?
Шизло
чел есть Фидо же
Я предпочитаю ноутбучные терабайтники, они считай бесплатные
![.png](https://2ch.life/b/thumb/316441807/17392433114940s.jpg)
Луль
У меня будет качество видео лучше, если на своем 720p-рипе на 10 гигов включу длсс для видео.
Зачем они тебе в грядущей 3 мировой?
Твои предпочтения в калтенте меняются по ходу жизни. Через пяток лет ты уже будешь сам себя спрашивать "и нахуй я это скачал?"
Так они все кал, который даже смысла нет сохранять.
Именно поэтому надо качать ВСЕ
Молодец брат-анон. Если что будешь делиться контентом на дваче. Не все тут могут скачать много всего. Но есть умелые и бережливые аноны, которые запасаются контентом, а потом если что поделятся.
Чтоб у нас была на дваче возможность жить без внешнего интернета если он отключится.
внезапно весь бизнес в it Это одна семья и родственики дедупликацию блоков на винде 11 можно включить через кастыли, вместо 15 кб блока, 5 кб ссылка. в линуксе в бёрдсте это есть.
вон алгоритм мгновенных снимков есть, а вот для бинарного кода нет )
Торренты могут отрубить как и внешний интернет. Придется делать свою двачесеть с братьями-анонами.
Батя это ты?
>Ходить по городу, переключая каналы в поисках нужного торента. Для совсем секретных отправляться за город, в леса и горы, где в тайном убежище сиди затворник и передаёт инфу на секретные торренты.
Круто.
>с хардами в гости припереться.
Ух, звучит интересно, я бы попробовал сходить к другу со своим хардом.
![17392440164059197958817723114596.jpg](https://2ch.life/b/thumb/316441807/17392440666000s.jpg)
А товарищ майор может мне по запросу сделать массаж простаты полицейской дубинкой?
Просто так без совершения преступлений. Если я себя буду хорошо вести и буду добропорядочным гражданином то можно?
А ты что ищешь кошерные продукты?
Карликовый.
При мертвом интернете лично мне не нужны высококачественные рипы аниме, хватит и 480p качества, а его вес куда меньше. Нахуя тебе 4к видео аниме???А?????
Третья мировая Россию не затронет.
>Через пяток лет ты уже будешь сам себя спрашивать "и нахуй я это скачал?"
Чтобы делиться с другими.
С умирающего хдд можно перенести данные. Ссд умирает мгновенно.
![.png](https://2ch.life/b/thumb/316441807/17392452394100s.jpg)
Тутуту муа муа муа
Интернет не может быть мертвым так как он никогда и не жил. Это цифровой разум, анон.
Использую ceph в режиме минимум 2 копии блоков данных, стандартно 3 копии. Всем советую, попробуйте, еще захотите.
import json
import tkinter as tk
from tkinter import filedialog, messagebox
DATA_FILE = "data.json"
COMPRESSED_EXT = ".ctxt"
ALPHABET = (
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
'abcdefghijklmnopqrstuvwxyz'
'0123456789'
'一丁七万丈三上下不与丑专且世丘丙业丛东丝丞丢两严並丧丨'
'अआइईउऊऋएऐओऔकखगघङचछजझञटठडढणतथदधनपफबभमयरलवशीष़ज़ािीुूृॅेैॉौं्аәбвгджзклмнөпрстуүфхцчшщъыьэюя' # Cyrillic and Devanagari
)
ALPHABET = ''.join(sorted(set(ALPHABET)))
def int_to_hash(n, length=4):
base = len(ALPHABET)
digits = []
for _ in range(length):
n, rem = divmod(n, base)
digits.append(rem)
return ''.join(ALPHABET[d] for d in reversed(digits))
def hash_to_int(hash_str):
base = len(ALPHABET)
code = 0
for char in hash_str:
code = code * base + ALPHABET.index(char)
return code
def split_into_2bit_blocks(data):
blocks = []
for byte in data:
blocks.extend([
(byte >> 6) & 0x03,
(byte >> 4) & 0x03,
(byte >> 2) & 0x03,
byte & 0x03
])
return blocks
def combine_from_2bit_blocks(blocks):
data = []
for i in range(0, len(blocks), 4):
chunk = blocks[i:i+4]
while len(chunk) < 4:
chunk.append(0)
byte = (chunk[0] << 6) | (chunk[1] << 4) | (chunk[2] << 2) | chunk[3]
data.append(byte)
return data
def compress(data, dictionaries):
current_data = split_into_2bit_blocks(data)
original_length = len(current_data)
for level in range(4):
if len(current_data) % 2 != 0:
current_data.append(0) # Padding
code_to_pair = dictionaries[level]
pair_to_code = {pair: idx for idx, pair in enumerate(code_to_pair)}
new_data = []
for i in range(0, len(current_data), 2):
pair = (current_data, current_data[i+1])
if pair in pair_to_code:
new_data.append(pair_to_code[pair])
else:
code = len(code_to_pair)
code_to_pair.append(pair)
pair_to_code[pair] = code
new_data.append(code)
current_data = new_data
if len(current_data) <= 1:
break
compressed_str = ''.join(int_to_hash(code) for code in current_data)
return f"{original_length}:{compressed_str}"
def decompress(compressed_str, dictionaries):
if ':' not in compressed_str:
messagebox.showerror("Error", "Invalid compressed format")
return []
original_length_str, hash_str = compressed_str.split(':', 1)
original_length = int(original_length_str)
hash_length = 4
chunked = [hash_str[i:i+hash_length] for i in range(0, len(hash_str), hash_length)]
try:
current_data = [hash_to_int(h) for h in chunked]
except ValueError:
return []
for level in reversed(range(4)):
if not current_data:
break
if level >= len(dictionaries):
continue
code_to_pair = dictionaries[level]
new_data = []
for code in current_data:
if code < len(code_to_pair):
new_data.extend(code_to_pair[code])
else:
return []
current_data = new_data
current_data = current_data[:original_length] # Trim padding
return combine_from_2bit_blocks(current_data)
def save_data_file(data):
try:
data["dictionary"] = [[list(p) for p in level] for level in data["dictionary"]]
with open(DATA_FILE, 'w') as f:
json.dump(data, f, indent=4)
except Exception as e:
messagebox.showerror("Error", f"Error saving data: {str(e)}")
def load_data_file():
try:
if os.path.exists(DATA_FILE):
with open(DATA_FILE, 'r') as f:
data = json.load(f)
data["dictionary"] = [[tuple(p) for p in level] for level in data["dictionary"]]
return data
except Exception as e:
messagebox.showerror("Error", f"Error loading data: {str(e)}")
return {"dictionary": [[] for _ in range(4)], "files": []}
class FileManager:
def __init__(self, root):
self.root = root
self.root.title("4-Level Compressor")
self.data = load_data_file()
self.dictionaries = self.data["dictionary"]
self.listbox = tk.Listbox(root)
self.listbox.pack(fill=tk.BOTH, expand=True)
btn_frame = tk.Frame(root)
btn_frame.pack(fill=tk.X)
self.compress_btn = tk.Button(btn_frame, text="Compress", command=self.compress_file)
self.compress_btn.pack(side=tk.LEFT, padx=5)
self.decompress_btn = tk.Button(btn_frame, text="Decompress", command=self.decompress_file)
self.decompress_btn.pack(side=tk.RIGHT, padx=5)
self.update_list()
def update_list(self):
self.listbox.delete(0, tk.END)
for f in self.data["files"]:
self.listbox.insert(tk.END, f)
def compress_file(self):
path = filedialog.askopenfilename()
if not path:
return
try:
with open(path, 'rb') as f:
data = f.read()
except Exception as e:
messagebox.showerror("Error", f"Read error: {str(e)}")
return
compressed = compress(list(data), self.dictionaries)
output_name = os.path.basename(path) + COMPRESSED_EXT
try:
with open(output_name, 'w', encoding='utf-8') as f:
f.write(compressed)
except Exception as e:
messagebox.showerror("Error", f"Write error: {str(e)}")
return
if output_name not in self.data["files"]:
self.data["files"].append(output_name)
save_data_file(self.data)
self.update_list()
def decompress_file(self):
selected = self.listbox.get(tk.ACTIVE)
if not selected:
return
save_path = filedialog.asksaveasfilename(
defaultextension=".bin",
initialfile=selected.replace(COMPRESSED_EXT, "")
)
if not save_path:
return
try:
with open(selected, 'r', encoding='utf-8') as f:
compressed_str = f.read()
except Exception as e:
messagebox.showerror("Error", f"Read error: {str(e)}")
return
decompressed = decompress(compressed_str, self.dictionaries)
if not decompressed:
messagebox.showerror("Error", "Decompression failed")
return
try:
with open(save_path, 'wb') as f:
f.write(bytes(decompressed))
messagebox.showinfo("Success", "File decompressed successfully!")
except Exception as e:
messagebox.showerror("Error", f"Write error: {str(e)}")
if __name__ == "__main__":
root = tk.Tk()
app = FileManager(root)
root.mainloop()
import json
import tkinter as tk
from tkinter import filedialog, messagebox
DATA_FILE = "data.json"
COMPRESSED_EXT = ".ctxt"
ALPHABET = (
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
'abcdefghijklmnopqrstuvwxyz'
'0123456789'
'一丁七万丈三上下不与丑专且世丘丙业丛东丝丞丢两严並丧丨'
'अआइईउऊऋएऐओऔकखगघङचछजझञटठडढणतथदधनपफबभमयरलवशीष़ज़ािीुूृॅेैॉौं्аәбвгджзклмнөпрстуүфхцчшщъыьэюя' # Cyrillic and Devanagari
)
ALPHABET = ''.join(sorted(set(ALPHABET)))
def int_to_hash(n, length=4):
base = len(ALPHABET)
digits = []
for _ in range(length):
n, rem = divmod(n, base)
digits.append(rem)
return ''.join(ALPHABET[d] for d in reversed(digits))
def hash_to_int(hash_str):
base = len(ALPHABET)
code = 0
for char in hash_str:
code = code * base + ALPHABET.index(char)
return code
def split_into_2bit_blocks(data):
blocks = []
for byte in data:
blocks.extend([
(byte >> 6) & 0x03,
(byte >> 4) & 0x03,
(byte >> 2) & 0x03,
byte & 0x03
])
return blocks
def combine_from_2bit_blocks(blocks):
data = []
for i in range(0, len(blocks), 4):
chunk = blocks[i:i+4]
while len(chunk) < 4:
chunk.append(0)
byte = (chunk[0] << 6) | (chunk[1] << 4) | (chunk[2] << 2) | chunk[3]
data.append(byte)
return data
def compress(data, dictionaries):
current_data = split_into_2bit_blocks(data)
original_length = len(current_data)
for level in range(4):
if len(current_data) % 2 != 0:
current_data.append(0) # Padding
code_to_pair = dictionaries[level]
pair_to_code = {pair: idx for idx, pair in enumerate(code_to_pair)}
new_data = []
for i in range(0, len(current_data), 2):
pair = (current_data, current_data[i+1])
if pair in pair_to_code:
new_data.append(pair_to_code[pair])
else:
code = len(code_to_pair)
code_to_pair.append(pair)
pair_to_code[pair] = code
new_data.append(code)
current_data = new_data
if len(current_data) <= 1:
break
compressed_str = ''.join(int_to_hash(code) for code in current_data)
return f"{original_length}:{compressed_str}"
def decompress(compressed_str, dictionaries):
if ':' not in compressed_str:
messagebox.showerror("Error", "Invalid compressed format")
return []
original_length_str, hash_str = compressed_str.split(':', 1)
original_length = int(original_length_str)
hash_length = 4
chunked = [hash_str[i:i+hash_length] for i in range(0, len(hash_str), hash_length)]
try:
current_data = [hash_to_int(h) for h in chunked]
except ValueError:
return []
for level in reversed(range(4)):
if not current_data:
break
if level >= len(dictionaries):
continue
code_to_pair = dictionaries[level]
new_data = []
for code in current_data:
if code < len(code_to_pair):
new_data.extend(code_to_pair[code])
else:
return []
current_data = new_data
current_data = current_data[:original_length] # Trim padding
return combine_from_2bit_blocks(current_data)
def save_data_file(data):
try:
data["dictionary"] = [[list(p) for p in level] for level in data["dictionary"]]
with open(DATA_FILE, 'w') as f:
json.dump(data, f, indent=4)
except Exception as e:
messagebox.showerror("Error", f"Error saving data: {str(e)}")
def load_data_file():
try:
if os.path.exists(DATA_FILE):
with open(DATA_FILE, 'r') as f:
data = json.load(f)
data["dictionary"] = [[tuple(p) for p in level] for level in data["dictionary"]]
return data
except Exception as e:
messagebox.showerror("Error", f"Error loading data: {str(e)}")
return {"dictionary": [[] for _ in range(4)], "files": []}
class FileManager:
def __init__(self, root):
self.root = root
self.root.title("4-Level Compressor")
self.data = load_data_file()
self.dictionaries = self.data["dictionary"]
self.listbox = tk.Listbox(root)
self.listbox.pack(fill=tk.BOTH, expand=True)
btn_frame = tk.Frame(root)
btn_frame.pack(fill=tk.X)
self.compress_btn = tk.Button(btn_frame, text="Compress", command=self.compress_file)
self.compress_btn.pack(side=tk.LEFT, padx=5)
self.decompress_btn = tk.Button(btn_frame, text="Decompress", command=self.decompress_file)
self.decompress_btn.pack(side=tk.RIGHT, padx=5)
self.update_list()
def update_list(self):
self.listbox.delete(0, tk.END)
for f in self.data["files"]:
self.listbox.insert(tk.END, f)
def compress_file(self):
path = filedialog.askopenfilename()
if not path:
return
try:
with open(path, 'rb') as f:
data = f.read()
except Exception as e:
messagebox.showerror("Error", f"Read error: {str(e)}")
return
compressed = compress(list(data), self.dictionaries)
output_name = os.path.basename(path) + COMPRESSED_EXT
try:
with open(output_name, 'w', encoding='utf-8') as f:
f.write(compressed)
except Exception as e:
messagebox.showerror("Error", f"Write error: {str(e)}")
return
if output_name not in self.data["files"]:
self.data["files"].append(output_name)
save_data_file(self.data)
self.update_list()
def decompress_file(self):
selected = self.listbox.get(tk.ACTIVE)
if not selected:
return
save_path = filedialog.asksaveasfilename(
defaultextension=".bin",
initialfile=selected.replace(COMPRESSED_EXT, "")
)
if not save_path:
return
try:
with open(selected, 'r', encoding='utf-8') as f:
compressed_str = f.read()
except Exception as e:
messagebox.showerror("Error", f"Read error: {str(e)}")
return
decompressed = decompress(compressed_str, self.dictionaries)
if not decompressed:
messagebox.showerror("Error", "Decompression failed")
return
try:
with open(save_path, 'wb') as f:
f.write(bytes(decompressed))
messagebox.showinfo("Success", "File decompressed successfully!")
except Exception as e:
messagebox.showerror("Error", f"Write error: {str(e)}")
if __name__ == "__main__":
root = tk.Tk()
app = FileManager(root)
root.mainloop()
В этой статье рассматривается новый подход к сжатию данных с использованием рекурсивного алгоритма многослойного сжатия, который может достичь почти бесконечного сжатия. Предложенный метод сочетает рекурсию и преобразование файлов в компактный формат с использованием специальной системы хеширования для кодирования и декодирования данных. В статье представлены основы алгоритма, его реализация и потенциальные применения в различных областях хранения данных, передачи и криптографии.
Введение:
Сжатие данных является важной областью исследований, направленной на разработку эффективных методов уменьшения размера файлов при сохранении целостности исходных данных. Традиционные алгоритмы сжатия, такие как кодирование Хаффмана, LZW (Лемпеля — Зива — Уэлча) и преобразование Бэрроуза-Уиллера (BWT), фокусируются на достижении без потерь сжатия. Однако эти методы часто достигают предела сжатия при работе с очень сложными или повторяющимися наборами данных. В этой статье представлен рекурсивный алгоритм сжатия данных, который стремится преодолеть границы уменьшения размера данных с помощью инновационного подхода, включающего несколько уровней сжатия.
Методология:
Предложенный алгоритм сжатия данных использует рекурсию и многослойный словарь. Данные сначала делятся на 2-битные блоки, которые затем обрабатываются с использованием словарей, хранящих пары данных. На протяжении четырёх уровней алгоритм рекурсивно сжимает данные, сопоставляя пары битов с более короткими кодами. Процесс сжатия является обратимым, что обеспечивает восстановление исходных данных при декомпрессии.
Разбиение данных и хеширование: Исходные данные сначала делятся на 2-битные блоки. Каждый блок представляет собой более мелкую часть исходных данных, которая затем кодируется с использованием собственного алфавита с помощью метода преобразования по основанию. Алгоритм использует хеш-таблицу для уникального представления последовательностей этих 2-битных блоков.
Рекурсивное сжатие с использованием словаря: Сжатие выполняется рекурсивно, при этом каждый уровень строит свой словарь, который отображает пары ранее встреченных блоков в более короткие коды. Рекурсия завершается, когда размер данных достигает заданного порога или когда дальнейшее сжатие становится невозможным.
Процесс сжатия и декомпрессии: При сжатии последовательности битов преобразуются в соответствующие коды с использованием хеш-функции. Декомпрессия обратным способом восстанавливает исходные данные с использованием словаря и поиска по хешам.
Обработка файлов и графический интерфейс: Реализация сопровождается графическим пользовательским интерфейсом (GUI) с использованием Tkinter, что позволяет пользователю легко сжимать и распаковывать файлы. GUI интерфейс обеспечивает удобство в работе с выбором файлов, сжатием и декомпрессией.
Результаты:
Алгоритм сжатия был протестирован на различных типах файлов, от текстовых до бинарных. Результаты показали значительное уменьшение размера файлов, при этом некоторые наборы данных демонстрировали многократное сжатие без потерь. Рекурсивный подход оказался особенно эффективным для обработки повторяющихся данных, обеспечивая непрерывное сжатие без ущерба для исходного файла.
Проблемы и направления для дальнейших исследований:
Несмотря на успешную реализацию, алгоритм сталкивается с несколькими проблемами, особенно при обработке нерепродуктивных или сложных данных. Кроме того, вычислительная стоимость рекурсии растёт с увеличением размера файла. Дальнейшие оптимизации, такие как параллельная обработка или использование гибридных техник сжатия, могут улучшить масштабируемость и эффективность алгоритма.
Концепция «бесконечного сжатия», при которой процесс сжатия данных продолжается рекурсивно без значительного ухудшения производительности, представляет собой захватывающую перспективу. Будущие исследования будут направлены на улучшение процесса построения словаря, уменьшение размера необходимого словаря и исследование применения алгоритма в реальном времени при передаче данных.
В этой статье рассматривается новый подход к сжатию данных с использованием рекурсивного алгоритма многослойного сжатия, который может достичь почти бесконечного сжатия. Предложенный метод сочетает рекурсию и преобразование файлов в компактный формат с использованием специальной системы хеширования для кодирования и декодирования данных. В статье представлены основы алгоритма, его реализация и потенциальные применения в различных областях хранения данных, передачи и криптографии.
Введение:
Сжатие данных является важной областью исследований, направленной на разработку эффективных методов уменьшения размера файлов при сохранении целостности исходных данных. Традиционные алгоритмы сжатия, такие как кодирование Хаффмана, LZW (Лемпеля — Зива — Уэлча) и преобразование Бэрроуза-Уиллера (BWT), фокусируются на достижении без потерь сжатия. Однако эти методы часто достигают предела сжатия при работе с очень сложными или повторяющимися наборами данных. В этой статье представлен рекурсивный алгоритм сжатия данных, который стремится преодолеть границы уменьшения размера данных с помощью инновационного подхода, включающего несколько уровней сжатия.
Методология:
Предложенный алгоритм сжатия данных использует рекурсию и многослойный словарь. Данные сначала делятся на 2-битные блоки, которые затем обрабатываются с использованием словарей, хранящих пары данных. На протяжении четырёх уровней алгоритм рекурсивно сжимает данные, сопоставляя пары битов с более короткими кодами. Процесс сжатия является обратимым, что обеспечивает восстановление исходных данных при декомпрессии.
Разбиение данных и хеширование: Исходные данные сначала делятся на 2-битные блоки. Каждый блок представляет собой более мелкую часть исходных данных, которая затем кодируется с использованием собственного алфавита с помощью метода преобразования по основанию. Алгоритм использует хеш-таблицу для уникального представления последовательностей этих 2-битных блоков.
Рекурсивное сжатие с использованием словаря: Сжатие выполняется рекурсивно, при этом каждый уровень строит свой словарь, который отображает пары ранее встреченных блоков в более короткие коды. Рекурсия завершается, когда размер данных достигает заданного порога или когда дальнейшее сжатие становится невозможным.
Процесс сжатия и декомпрессии: При сжатии последовательности битов преобразуются в соответствующие коды с использованием хеш-функции. Декомпрессия обратным способом восстанавливает исходные данные с использованием словаря и поиска по хешам.
Обработка файлов и графический интерфейс: Реализация сопровождается графическим пользовательским интерфейсом (GUI) с использованием Tkinter, что позволяет пользователю легко сжимать и распаковывать файлы. GUI интерфейс обеспечивает удобство в работе с выбором файлов, сжатием и декомпрессией.
Результаты:
Алгоритм сжатия был протестирован на различных типах файлов, от текстовых до бинарных. Результаты показали значительное уменьшение размера файлов, при этом некоторые наборы данных демонстрировали многократное сжатие без потерь. Рекурсивный подход оказался особенно эффективным для обработки повторяющихся данных, обеспечивая непрерывное сжатие без ущерба для исходного файла.
Проблемы и направления для дальнейших исследований:
Несмотря на успешную реализацию, алгоритм сталкивается с несколькими проблемами, особенно при обработке нерепродуктивных или сложных данных. Кроме того, вычислительная стоимость рекурсии растёт с увеличением размера файла. Дальнейшие оптимизации, такие как параллельная обработка или использование гибридных техник сжатия, могут улучшить масштабируемость и эффективность алгоритма.
Концепция «бесконечного сжатия», при которой процесс сжатия данных продолжается рекурсивно без значительного ухудшения производительности, представляет собой захватывающую перспективу. Будущие исследования будут направлены на улучшение процесса построения словаря, уменьшение размера необходимого словаря и исследование применения алгоритма в реальном времени при передаче данных.
Для описания процесса рекурсивного сжатия данных, рассмотрим формулу, которая отражает несколько ключевых этапов сжатия, включая разбиение на блоки, использование словаря и рекурсивное сжатие.
### Формула для рекурсивного сжатия:
\[
C_{\text{final}} = f_{\text{compress}}\left( \dots f_{\text{compress}}\left( f_{\text{compress}}\left( D \right) \right) \dots \right)
\]
где:
- \( D \) — исходные данные, представленные в виде последовательности байтов.
- \( f_{\text{compress}} \) — функция сжатия данных с использованием словаря, которая выполняет рекурсию на нескольких уровнях.
- \( C_{\text{final}} \) — окончательно сжатые данные.
### Описание шагов в формуле:
1. Разбиение на 2-битные блоки (split into 2-bit blocks):
Исходные данные сначала разбиваются на более мелкие блоки — 2-битные блоки. Это помогает эффективно представлять данные в виде более компактных единиц, что облегчает их дальнейшую обработку.
\[
B_i = \text{split}(D) \quad \text{где } B_i \text{ — 2-битный блок, полученный из данных } D.
\]
2. Построение словаря на каждом уровне сжатия (dictionary creation):
Каждый уровень сжатия строит свой собственный словарь, в котором хранятся уникальные пары блоков из предыдущего уровня. Эти пары кодируются в виде числовых значений, которые становятся всё короче по мере углубления в рекурсию.
\[
S_{\text{level}} = \{(p_{\text{pair}}, \text{index})\}, \quad \text{где } p_{\text{pair}} \text{ — пара блоков, а } \text{index} \text{ — индекс пары в словаре}.
\]
3. Рекурсивное сжатие на каждом уровне (recursive compression):
Функция сжатия на каждом уровне использует словарь для замены найденных пар блоков на их индексы. Этот процесс продолжается рекурсивно до тех пор, пока данные не смогут быть дополнительно сжаты или не достигнут минимального размера.
\[
f_{\text{compress}}(D_{\text{level}}) = \{ \text{code}_{\text{pair}} \} \quad \text{для каждой пары } p_{\text{pair}} \text{ на уровне}.
\]
4. Объединение сжатых блоков в итоговый результат (final compressed data):
После завершения рекурсии все коды пар блоков из всех уровней сжимаются в итоговый компактный формат, который можно сохранить в файл.
\[
C_{\text{final}} = \text{combine}(\{ \text{code}_i \})
\]
### Пример конкретной реализации:
Предположим, что у нас есть строка данных \( D = \text{"hellohellohello"} \), и мы её хотим сжать с использованием описанного алгоритма. На первом уровне мы разбиваем строку на 2-битные блоки и строим словарь для каждого уникального символа или пары символов. На следующем уровне, если встречаются одинаковые пары блоков, мы заменяем их на более короткие коды, используя уже созданный словарь. Процесс повторяется на нескольких уровнях.
В результате сжатия получаем строку, которая будет короче исходной, и при её распаковке мы сможем восстановить исходные данные, применяя обратный процесс декомпрессии.
### Итоговое описание формулы:
Рекурсивная формула для сжатия данных через многослойный словарь описывает последовательность шагов, где на каждом уровне:
- Происходит разбиение на более мелкие блоки.
- Строится новый словарь для замены повторяющихся блоков.
- Применяется рекурсия до тех пор, пока сжатие не станет невозможным.
Это позволяет значительно уменьшить размер исходных данных, эффективно используя повторяющиеся шаблоны и структуры в данных, и дает возможность дальнейшего сжатия.
Для описания процесса рекурсивного сжатия данных, рассмотрим формулу, которая отражает несколько ключевых этапов сжатия, включая разбиение на блоки, использование словаря и рекурсивное сжатие.
### Формула для рекурсивного сжатия:
\[
C_{\text{final}} = f_{\text{compress}}\left( \dots f_{\text{compress}}\left( f_{\text{compress}}\left( D \right) \right) \dots \right)
\]
где:
- \( D \) — исходные данные, представленные в виде последовательности байтов.
- \( f_{\text{compress}} \) — функция сжатия данных с использованием словаря, которая выполняет рекурсию на нескольких уровнях.
- \( C_{\text{final}} \) — окончательно сжатые данные.
### Описание шагов в формуле:
1. Разбиение на 2-битные блоки (split into 2-bit blocks):
Исходные данные сначала разбиваются на более мелкие блоки — 2-битные блоки. Это помогает эффективно представлять данные в виде более компактных единиц, что облегчает их дальнейшую обработку.
\[
B_i = \text{split}(D) \quad \text{где } B_i \text{ — 2-битный блок, полученный из данных } D.
\]
2. Построение словаря на каждом уровне сжатия (dictionary creation):
Каждый уровень сжатия строит свой собственный словарь, в котором хранятся уникальные пары блоков из предыдущего уровня. Эти пары кодируются в виде числовых значений, которые становятся всё короче по мере углубления в рекурсию.
\[
S_{\text{level}} = \{(p_{\text{pair}}, \text{index})\}, \quad \text{где } p_{\text{pair}} \text{ — пара блоков, а } \text{index} \text{ — индекс пары в словаре}.
\]
3. Рекурсивное сжатие на каждом уровне (recursive compression):
Функция сжатия на каждом уровне использует словарь для замены найденных пар блоков на их индексы. Этот процесс продолжается рекурсивно до тех пор, пока данные не смогут быть дополнительно сжаты или не достигнут минимального размера.
\[
f_{\text{compress}}(D_{\text{level}}) = \{ \text{code}_{\text{pair}} \} \quad \text{для каждой пары } p_{\text{pair}} \text{ на уровне}.
\]
4. Объединение сжатых блоков в итоговый результат (final compressed data):
После завершения рекурсии все коды пар блоков из всех уровней сжимаются в итоговый компактный формат, который можно сохранить в файл.
\[
C_{\text{final}} = \text{combine}(\{ \text{code}_i \})
\]
### Пример конкретной реализации:
Предположим, что у нас есть строка данных \( D = \text{"hellohellohello"} \), и мы её хотим сжать с использованием описанного алгоритма. На первом уровне мы разбиваем строку на 2-битные блоки и строим словарь для каждого уникального символа или пары символов. На следующем уровне, если встречаются одинаковые пары блоков, мы заменяем их на более короткие коды, используя уже созданный словарь. Процесс повторяется на нескольких уровнях.
В результате сжатия получаем строку, которая будет короче исходной, и при её распаковке мы сможем восстановить исходные данные, применяя обратный процесс декомпрессии.
### Итоговое описание формулы:
Рекурсивная формула для сжатия данных через многослойный словарь описывает последовательность шагов, где на каждом уровне:
- Происходит разбиение на более мелкие блоки.
- Строится новый словарь для замены повторяющихся блоков.
- Применяется рекурсия до тех пор, пока сжатие не станет невозможным.
Это позволяет значительно уменьшить размер исходных данных, эффективно используя повторяющиеся шаблоны и структуры в данных, и дает возможность дальнейшего сжатия.
НО
вся информатика и всё IT Это 32 гб словарей меток + 8 кб скрипт.
И все вселенные и всё, что либо можно описать, это 32 гб словарей.
дальше уже идёт рекурсионный проброс, где опять инфу и вычисления можно разложить на 32 гб и пробрасывать бесконечно
Вот таблица с оценками для всех игр в Steam, всей музыки и всех фильмов за все время. Это будет более приблизительная оценка, основанная на общем объеме данных, доступных в этих категориях:
КатегорияОценка размера
Все игры в Steam50,000–100,000 ТБ (учитывая весь архив игр, включая обновления, DLC и т.д.)
Вся музыка за все время1,000,000+ ТБ (если учитывать все альбомы, песни и музыкальные коллекции по всему миру)
Все фильмы за все время100,000–500,000 ТБ (с учетом всех фильмов, включая короткометражки, документальные фильмы и т.д.)
>Я в коттеджном посёлке живу с мощной охраной.
Никуда не ходишь вообще, тебе в коттедж залезают ветеринары СВО вместе с цыганами, хохлами и мощной охраной, которая в доле, и начинают насиловать тебя кочергой. Твои действия?
Ничего он не шарит, DVD-R хранится лет 5, и слишком маленький по объёму
Назови 10 игр по 150 гигов
![11.mp4](https://2ch.life/b/thumb/316441807/17392469144490s.jpg)
3:04
![изображение.png](https://2ch.life/b/thumb/316441807/17392471379760s.jpg)
Красиво придумал. Чуть допилить, и будет конфетка. Добытые файлы обретут для тебя историю.
>ограниченное число циклов перезаписи
Не перезаписывай, засри под завязку его и дальше только читай данные с него.
Алсо, есть нюанс с этой вашей деградацией ячеек, если условные 70% сосоде заняты данными, а остальные 30% активно используются для хранения временных файлов, то эти самые 30% помрут намного быстрее, чем заявлено в TBW.
>если его часто не включать
Нельзя не включать - заряд в ячейках не может храниться вечно. Сосоде нужен внешний источник питания и усб-флешкам тоже, кста, пусть и не на постоянной основе.
Зачем тебе 54 tb ты что собрался хранить архивы с интересными видео?
Посоветуйте что в первую очередь стоит выкачать на хард. Кроме флибусты и игрушек ничего в голову не приходит
Так и не придёт. Думаешь ты через 5 лет начнёшь больше интересоваться каким-то контентом? Наоборот кругозор ещё больше сузится. Скачивай то что сейчас интересует, больше ничего и не заинтересует.
Я на двачах с 2012 года, тогда же впервые наткнулся на чебурнет треды и трясунов качающих весь интернет. Прошло 13 лет, интернет до сих пор не заблокировали и мне интересно что сейчас делают те люди с контентом из 12 года на жёстких дисках, сохрани пж свой тред у себя на жёстком диске, через 10 лет создай тред и расскажи чем занимаешься, обновляешь ли свой контент и тд
Каждые полгода одна и та же песня. Прес ф долбаёбу и его денюжкам.
Пендосы подзорвут нейтронную бомбу, ЭМ импульс как жахнет и все твои магнитные носители отформатируются в нулину.
А перфоркарта пока не сгорит - будет нести информацию.
Даун, если бы на свете повяился алгоритм эффективнее LZMA2 то он бы его уже вытеснил за считаные дни нахуй, а так как у тебя кроме видео ничего нет, то либо у тебя нихуя и не работает, либо ты просто пиздабол. Понимаешь? Можно твои вскукареки и видеоролики даже не смотреть, твою шизу не читать. Вот скоро, вот ещё немного и коммунизм! Вот когда сделоешь тогда и приноси свой кал.
Не совсем, оно медленное, с него неудобно напрямую обращаться к данным. В индустриальных масштабах оно может и лучшее, а в масштабах до 200 Tб HDD лучше, само устройство записи и считывания стоит столько, сколько стопка винтов на 100 с чем-то Тб
![33324.jpg](https://2ch.life/b/thumb/316441807/17392511704760s.jpg)
В мире всего 15 человек про это знают, точнее, супер алгоритм работает на 4 парадоксах но они математически доказуемы. формула выше.
1) что доступно моей команде щас
-2) генерация, музыка, изображений, видео - без вычислений и памяти.
>повяился алгоритм эффективнее LZMA2
именно. это словари, на 40 гб. они рекурсивно сжимают и расжимают себя. это уже используется NVIDIA для DLLSS но там сжатие в 3 раза, те 3 рекурсии цикла. а можно делать бесконечно и разложить бесконечно вычисления
что с этим будешь делать? ломать биток? остальные 14 челов которые моделируют реальность тебя сольют.
Но предупрежу тебя заранее.....
1) шифрование невозможно
2) анонимность невозможна
в будущем будут раскрыты все преступления, просто смоделировав реальность. ( возможна наша реальность это симуляция )
>Можно твои вскукареки и видеоролики даже не смотреть, твою шизу не читать.
Ну закончишь как Николай 2 - тогда, он тоже гидростанции и заводы не хотел строить.
Я как тян, не гений кодинга, но топовые компании в начале 2000 разложили весь бинарный код, и имеют триллионые профиты, не неся амортизации на хостинг и обслуживания, играя по правилам математического парадокса
математический парадокс, это то, что если наша вселенная это симуляция и математическая модель, то что ты будешь делать ,получив бесконечные блага, вычисления и память ?- Моделировать такой же мир?
Бедный тарасик. Совсем запугали бедного....
Во ты вспомнил игру! Бродил по дворам, как наркоман, ломал порталы, в какие-то ебеня за город катались. А потом покемоны появились
Твой шенон полный идиот и дурак.
Он как бытовой идиот не додумался разложить ряды на библиотеки и словари. у 4 бит - 16 комбинаций у 16 комбинаций всего 256 комбинаций у 256 - всего 65 тысяч комбинаций или 35 гб постоянного словаря.
Например правило словаря
1 = 123456789
2 = 987654321
В рамках словаря это уже сжатие в 9 раз. ведь 1 число описывает 9 чисел. Таких словарей ты можешь в рекурсии наплодить сколько хочешь, ведь у страниц книг есть НОМЕР, страницы. но нас же интересует что бы строки и номера числа генерировались и описывались в рекурсии.
частично... это уже применяется в квантовании нейросетей когда 400 гб языковая модель становится сначала 32 гб весами а потом и 4 гб весами.
То есть ты предлагаешь хранить словарь с комбинациями 1 - 123456789..., затем через него прогонять биты и превращать байт в один бит? После чего байт из новых битов, прогонять снова через словарь, и так пока не надоест. А в первом байте файла хранить количество итераций?
Спокнись, чушка.
Call of Duty: Modern Warfare только весит 200+ гб
И Хитман какой-то ещё под 150. и всё!
Так что пошёл нахуй, шизоид аналитик мамкин.
Никому твоё мнение не всралось тут, умник прыщавый
>>50167
Да, это делает этот код, а также это запатентовал Ян Слоот, но он был жмотом и умер до анонса метода
import os
import json
import tkinter as tk
from tkinter import filedialog, messagebox
DATA_FILE = "data.json"
COMPRESSED_EXT = ".ctxt"
ALPHABET = (
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
'abcdefghijklmnopqrstuvwxyz'
'0123456789'
'一丁七万丈三上下不与丑专且世丘丙业丛东丝丞丢两严並丧丨'
'अआइईउऊऋएऐओऔकखगघङचछजझञटठडढणतथदधनपफबभमयरलवशीष़ज़ािीुूृॅेैॉौं्аәбвгджзклмнөпрстуүфхцчшщъыьэюя' # Cyrillic and Devanagari
)
ALPHABET = ''.join(sorted(set(ALPHABET)))
def int_to_hash(n, length=4):
base = len(ALPHABET)
digits = []
for _ in range(length):
n, rem = divmod(n, base)
digits.append(rem)
return ''.join(ALPHABET[d] for d in reversed(digits))
def hash_to_int(hash_str):
base = len(ALPHABET)
code = 0
for char in hash_str:
code = code * base + ALPHABET.index(char)
return code
def split_into_2bit_blocks(data):
blocks = []
for byte in data:
blocks.extend([
(byte >> 6) & 0x03,
(byte >> 4) & 0x03,
(byte >> 2) & 0x03,
byte & 0x03
])
return blocks
def combine_from_2bit_blocks(blocks):
data = []
for i in range(0, len(blocks), 4):
chunk = blocks[i:i+4]
while len(chunk) < 4:
chunk.append(0)
byte = (chunk[0] << 6) | (chunk[1] << 4) | (chunk[2] << 2) | chunk[3]
data.append(byte)
return data
def compress(data, dictionaries):
current_data = split_into_2bit_blocks(data)
original_length = len(current_data)
for level in range(4):
if len(current_data) % 2 != 0:
current_data.append(0) # Padding
code_to_pair = dictionaries[level]
pair_to_code = {pair: idx for idx, pair in enumerate(code_to_pair)}
new_data = []
for i in range(0, len(current_data), 2):
pair = (current_data, current_data[i+1])
if pair in pair_to_code:
new_data.append(pair_to_code[pair])
else:
code = len(code_to_pair)
code_to_pair.append(pair)
pair_to_code[pair] = code
new_data.append(code)
current_data = new_data
if len(current_data) <= 1:
break
compressed_str = ''.join(int_to_hash(code) for code in current_data)
return f"{original_length}:{compressed_str}"
def decompress(compressed_str, dictionaries):
if ':' not in compressed_str:
messagebox.showerror("Error", "Invalid compressed format")
return []
original_length_str, hash_str = compressed_str.split(':', 1)
original_length = int(original_length_str)
hash_length = 4
chunked = [hash_str[i:i+hash_length] for i in range(0, len(hash_str), hash_length)]
try:
current_data = [hash_to_int(h) for h in chunked]
except ValueError:
return []
for level in reversed(range(4)):
if not current_data:
break
if level >= len(dictionaries):
continue
code_to_pair = dictionaries[level]
new_data = []
for code in current_data:
if code < len(code_to_pair):
new_data.extend(code_to_pair[code])
else:
return []
current_data = new_data
current_data = current_data[:original_length] # Trim padding
return combine_from_2bit_blocks(current_data)
def save_data_file(data):
try:
data["dictionary"] = [[list(p) for p in level] for level in data["dictionary"]]
with open(DATA_FILE, 'w') as f:
json.dump(data, f, indent=4)
except Exception as e:
messagebox.showerror("Error", f"Error saving data: {str(e)}")
def load_data_file():
try:
if os.path.exists(DATA_FILE):
with open(DATA_FILE, 'r') as f:
data = json.load(f)
data["dictionary"] = [[tuple(p) for p in level] for level in data["dictionary"]]
return data
except Exception as e:
messagebox.showerror("Error", f"Error loading data: {str(e)}")
return {"dictionary": [[] for _ in range(4)], "files": []}
class FileManager:
def __init__(self, root):
self.root = root
self.root.title("4-Level Compressor")
self.data = load_data_file()
self.dictionaries = self.data["dictionary"]
self.listbox = tk.Listbox(root)
self.listbox.pack(fill=tk.BOTH, expand=True)
btn_frame = tk.Frame(root)
btn_frame.pack(fill=tk.X)
self.compress_btn = tk.Button(btn_frame, text="Compress", command=self.compress_file)
self.compress_btn.pack(side=tk.LEFT, padx=5)
self.decompress_btn = tk.Button(btn_frame, text="Decompress", command=self.decompress_file)
self.decompress_btn.pack(side=tk.RIGHT, padx=5)
self.update_list()
def update_list(self):
self.listbox.delete(0, tk.END)
for f in self.data["files"]:
self.listbox.insert(tk.END, f)
def compress_file(self):
path = filedialog.askopenfilename()
if not path:
return
try:
with open(path, 'rb') as f:
data = f.read()
except Exception as e:
messagebox.showerror("Error", f"Read error: {str(e)}")
return
compressed = compress(list(data), self.dictionaries)
output_name = os.path.basename(path) + COMPRESSED_EXT
try:
with open(output_name, 'w', encoding='utf-8') as f:
f.write(compressed)
except Exception as e:
messagebox.showerror("Error", f"Write error: {str(e)}")
return
if output_name not in self.data["files"]:
self.data["files"].append(output_name)
save_data_file(self.data)
self.update_list()
def decompress_file(self):
selected = self.listbox.get(tk.ACTIVE)
if not selected:
return
save_path = filedialog.asksaveasfilename(
defaultextension=".bin",
initialfile=selected.replace(COMPRESSED_EXT, "")
)
if not save_path:
return
try:
with open(selected, 'r', encoding='utf-8') as f:
compressed_str = f.read()
except Exception as e:
messagebox.showerror("Error", f"Read error: {str(e)}")
return
decompressed = decompress(compressed_str, self.dictionaries)
if not decompressed:
messagebox.showerror("Error", "Decompression failed")
return
try:
with open(save_path, 'wb') as f:
f.write(bytes(decompressed))
messagebox.showinfo("Success", "File decompressed successfully!")
except Exception as e:
messagebox.showerror("Error", f"Write error: {str(e)}")
if __name__ == "__main__":
root = tk.Tk()
app = FileManager(root)
root.mainloop()
>>50167
Да, это делает этот код, а также это запатентовал Ян Слоот, но он был жмотом и умер до анонса метода
import os
import json
import tkinter as tk
from tkinter import filedialog, messagebox
DATA_FILE = "data.json"
COMPRESSED_EXT = ".ctxt"
ALPHABET = (
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
'abcdefghijklmnopqrstuvwxyz'
'0123456789'
'一丁七万丈三上下不与丑专且世丘丙业丛东丝丞丢两严並丧丨'
'अआइईउऊऋएऐओऔकखगघङचछजझञटठडढणतथदधनपफबभमयरलवशीष़ज़ािीुूृॅेैॉौं्аәбвгджзклмнөпрстуүфхцчшщъыьэюя' # Cyrillic and Devanagari
)
ALPHABET = ''.join(sorted(set(ALPHABET)))
def int_to_hash(n, length=4):
base = len(ALPHABET)
digits = []
for _ in range(length):
n, rem = divmod(n, base)
digits.append(rem)
return ''.join(ALPHABET[d] for d in reversed(digits))
def hash_to_int(hash_str):
base = len(ALPHABET)
code = 0
for char in hash_str:
code = code * base + ALPHABET.index(char)
return code
def split_into_2bit_blocks(data):
blocks = []
for byte in data:
blocks.extend([
(byte >> 6) & 0x03,
(byte >> 4) & 0x03,
(byte >> 2) & 0x03,
byte & 0x03
])
return blocks
def combine_from_2bit_blocks(blocks):
data = []
for i in range(0, len(blocks), 4):
chunk = blocks[i:i+4]
while len(chunk) < 4:
chunk.append(0)
byte = (chunk[0] << 6) | (chunk[1] << 4) | (chunk[2] << 2) | chunk[3]
data.append(byte)
return data
def compress(data, dictionaries):
current_data = split_into_2bit_blocks(data)
original_length = len(current_data)
for level in range(4):
if len(current_data) % 2 != 0:
current_data.append(0) # Padding
code_to_pair = dictionaries[level]
pair_to_code = {pair: idx for idx, pair in enumerate(code_to_pair)}
new_data = []
for i in range(0, len(current_data), 2):
pair = (current_data, current_data[i+1])
if pair in pair_to_code:
new_data.append(pair_to_code[pair])
else:
code = len(code_to_pair)
code_to_pair.append(pair)
pair_to_code[pair] = code
new_data.append(code)
current_data = new_data
if len(current_data) <= 1:
break
compressed_str = ''.join(int_to_hash(code) for code in current_data)
return f"{original_length}:{compressed_str}"
def decompress(compressed_str, dictionaries):
if ':' not in compressed_str:
messagebox.showerror("Error", "Invalid compressed format")
return []
original_length_str, hash_str = compressed_str.split(':', 1)
original_length = int(original_length_str)
hash_length = 4
chunked = [hash_str[i:i+hash_length] for i in range(0, len(hash_str), hash_length)]
try:
current_data = [hash_to_int(h) for h in chunked]
except ValueError:
return []
for level in reversed(range(4)):
if not current_data:
break
if level >= len(dictionaries):
continue
code_to_pair = dictionaries[level]
new_data = []
for code in current_data:
if code < len(code_to_pair):
new_data.extend(code_to_pair[code])
else:
return []
current_data = new_data
current_data = current_data[:original_length] # Trim padding
return combine_from_2bit_blocks(current_data)
def save_data_file(data):
try:
data["dictionary"] = [[list(p) for p in level] for level in data["dictionary"]]
with open(DATA_FILE, 'w') as f:
json.dump(data, f, indent=4)
except Exception as e:
messagebox.showerror("Error", f"Error saving data: {str(e)}")
def load_data_file():
try:
if os.path.exists(DATA_FILE):
with open(DATA_FILE, 'r') as f:
data = json.load(f)
data["dictionary"] = [[tuple(p) for p in level] for level in data["dictionary"]]
return data
except Exception as e:
messagebox.showerror("Error", f"Error loading data: {str(e)}")
return {"dictionary": [[] for _ in range(4)], "files": []}
class FileManager:
def __init__(self, root):
self.root = root
self.root.title("4-Level Compressor")
self.data = load_data_file()
self.dictionaries = self.data["dictionary"]
self.listbox = tk.Listbox(root)
self.listbox.pack(fill=tk.BOTH, expand=True)
btn_frame = tk.Frame(root)
btn_frame.pack(fill=tk.X)
self.compress_btn = tk.Button(btn_frame, text="Compress", command=self.compress_file)
self.compress_btn.pack(side=tk.LEFT, padx=5)
self.decompress_btn = tk.Button(btn_frame, text="Decompress", command=self.decompress_file)
self.decompress_btn.pack(side=tk.RIGHT, padx=5)
self.update_list()
def update_list(self):
self.listbox.delete(0, tk.END)
for f in self.data["files"]:
self.listbox.insert(tk.END, f)
def compress_file(self):
path = filedialog.askopenfilename()
if not path:
return
try:
with open(path, 'rb') as f:
data = f.read()
except Exception as e:
messagebox.showerror("Error", f"Read error: {str(e)}")
return
compressed = compress(list(data), self.dictionaries)
output_name = os.path.basename(path) + COMPRESSED_EXT
try:
with open(output_name, 'w', encoding='utf-8') as f:
f.write(compressed)
except Exception as e:
messagebox.showerror("Error", f"Write error: {str(e)}")
return
if output_name not in self.data["files"]:
self.data["files"].append(output_name)
save_data_file(self.data)
self.update_list()
def decompress_file(self):
selected = self.listbox.get(tk.ACTIVE)
if not selected:
return
save_path = filedialog.asksaveasfilename(
defaultextension=".bin",
initialfile=selected.replace(COMPRESSED_EXT, "")
)
if not save_path:
return
try:
with open(selected, 'r', encoding='utf-8') as f:
compressed_str = f.read()
except Exception as e:
messagebox.showerror("Error", f"Read error: {str(e)}")
return
decompressed = decompress(compressed_str, self.dictionaries)
if not decompressed:
messagebox.showerror("Error", "Decompression failed")
return
try:
with open(save_path, 'wb') as f:
f.write(bytes(decompressed))
messagebox.showinfo("Success", "File decompressed successfully!")
except Exception as e:
messagebox.showerror("Error", f"Write error: {str(e)}")
if __name__ == "__main__":
root = tk.Tk()
app = FileManager(root)
root.mainloop()
> Сейчас игры весят по 150гб.
так этот дегенеративный кал и не нужен для того, чтобы быть помещенным в какое-то цифровое хранилище
большинство игр по объему лежат в диапазоне 150-1000мб
есть алгоритм без словарей но там сегментов ссылок рекурсивных на 300 мб
Сегменты: Память делится на сегменты, каждый из которых может занимать до 64 КБ (65536 байт). Сегмент определяется своим базовым адресом, который умножается на 16 (так как сегменты выровнены по 16-байтовым границам). Таким образом, физический адрес вычисляется как Физический адрес = (Сегмент x 16) + Смещение.
увы навыков моей команды и моих тянских навыков не хватает это запрогать а также ИИ не может.
самое великое открытие. В информатике метка разного словаря позволяет кодировать одним и тем же бинарным кодом разные буквы. таким образом если будет создан алгоритм то он будет работаь без словарей и вычислений ибо всё факторизованно
1-A
111000111
2-B
111000111
3-D
111000111
4-C
111000111
Простой пример, лук, и лук - два смысла
Второй пример, замок, и замок.
В зависимости от контекста смысл другой )
или кот - kit
>ХДД)))
>и его денюжкам
Рили)) Надо было как ты, просрать на свинобухло под совковый хлеп и задонатить на спецхуяцию))))))0
Инструкции как создать атомное, есть с 50 годов во всех библиотеках мира, но атомным обладает ток 5 странн потом 20 странн а на планете 200 странн. те покуда одни строили цивилизацию, школы, заводы, другие поёбывали осликов. им прост это ненужно.
в 1989 году, был открыт принцип рекурсивных инструкций которые описывают аблютно всё, и даже свободу воли. Вопрос ли, нужно ли это людям? если нужно, почему не требуют?
![zs9hob1yz2fd1.png](https://2ch.life/b/thumb/316441807/17392561724290s.jpg)
Челован, успокойся. Этот тред пуст. Ты мне пишешь, а я заебал уже тебе подыгрывать. Двач мёртв. Весь интернет мёртв.
>въебал для архива флибусты, музла, личных фоток, кучи сериалов и фильмов, игор и тд.
и нахуя всё это говно нужно?
сколько заплатил?
Хороший ход, сам купил терабайт хдд и терабайт ссд памяти (решил интереса ради и её взять). Пока хватает, заархивировал всё что нужно. Но нужно будет взять дополнительные винты для бекапов.
Сейм Антон на компе грузит херово, а на телефоне летает
Если что-то не нужно тебе, то это не значит, что что-то не нужно другим.
Во что вы там всё играете, дай бог 1 игра в год выходит не пососная
Десятка может сама рейды делать. Лучше всего зеркальный. Если отъебал один из двух дисков - просто меняешь его и он снова зеркалит всю информацию.
Хз, это что-то на питерском
Имеет смысл просто скачивать торренты, неразархивируя их? Типо потом когда надо будет, тогда поставить на разархив?
![Drawn.TogetherS02E09Xandir.And.Tim.Sitting.In.A.Tree (online-video-cutter.com).mp4](https://2ch.life/b/thumb/316441807/17392597259210s.jpg)
368x272, 0:15
>>316451030
Дак нахрена мне детское, оно же для детей, мне нужно взрослое порно с маленькими детьми. МАЛЕНЬКИМИ. ДЕТЬМИ. МАЛЕНЬКИЕ ДЕТИ. ПОРНО. ДЕТСКОЕ ПОРНО. ЁБЛЯ ДЕТЕЙ.
Сейчас я отправлю тебе свои контакты что бы ты мог мне прислать ДЕТСКОЕ ПОРНО, сразу после того как я пришлю тебе серию и номер своего паспорта, личные фотографии, включая те,где я смотрю ДЕТСКОЕ ПОРНО И мастурбирую на него, а затем вышлю свой адрес прописки и проживания, не забыв указать своё настоящее имя и фамилию.
блин, пока готовился отправить сообщения, сообщение парня с ДЕТСКИМ ПОРНО к сожалению потёрли. А ведь я так хотел что бы он мне отправил ДЕТСКОЕ ПОРНО
Интересная инфа - спасибо.
Ну ты и пидор. Рака яиц тебе тогда. Таких как ты нужно отстреливать, что бы не портили людям жизнь в интернете.
Как будто что то плохое
Люблю такое. Сам интернет-плюшкин. Всё из детства видимо, когда интернет диал-ап а данные кочевали на флопи и СД
Это сегодняшние пыниксы не особо понимают суть.
Типа ну нвме под систему и еще 1 тб (ссд, хдд неважно). Все остальное в интернете есть.
Но большая часть (бесплатного) храниться у таких же плюшкиных как и я на их личных ХДД. Которые рипают, сканируют, оцифровывают и в конечном итоге предоставляют в открытый доступ миру.
https://arhivach.hk/thread/1130936/
![photo40822@02-02-202315-51-35.jpg](https://2ch.life/b/thumb/316441807/17392613500370s.jpg)
Это ж сколько смишных картинок можно скачать