LINUX.ORG.RU

Сообщения wandrien

 

Снова аппаратное шерето

Пока вы тут фантазируете про tiinn и Альфу, в эту вашу компьютерную безопасность снова постучали и сверху, и снизу.

 

wandrien
()

Браузер — это ОС :)

Я просто оставлю это здесь: http://www.windows93.net/

 

wandrien
()

Разыскивается тема оформления для Jekyll

…которая не будет выглядеть ни как SEO-шный лэндинг, ни как «хакерский блог» без стиля и оформления.

Что-то стиле блога EXL: http://exlmoto.ru

Сверху узкая шапка, сбоку лаконичное меню, по центру ясно видимый текст. Что-то в таком духе.

Что-то полистал списки готовых тем, и там всё печально.

 

wandrien
()

Программистских баек тред

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

Начну.

История первая.

У меня кусок админки управляет кучкой фоновых процессов. Не напрямую, а через прослойку-супервизора. Прослойку я написал на PHP, чтобы задействовать уже готовые функции админки. А чтобы управлять фоновыми процессами, потребовалось на php из подручных средств соорудить аналог pidfile_open (3). Вот такой:

function readPidfile($pidfile) {
    /* XXX: Race conditions are everywhere. But who cares? */

    if (!file_exists($pidfile)) {
        /* No such file - daemon not running */
        return false;
    }

    $f = fopen($pidfile, "r");
    if (!$f) {
        /* Failed to open file - daemon probably not running */
        return false;
    }

    if (flock($f, LOCK_EX | LOCK_NB)) {
        /* Able to acuire lock - daemon not running */
        fclose($f);
        return false;
    }

    /* Return PID */
    $pid = fgets($f);
    return $pid;
}

Вот смотрю и думаю: какое-то нецелевое использование «макропроцессора для HTML-страниц». Ну а почему бы и нет. Работает же.

История вторая.

Сегодня пришлось повоевать с кодировками в icecast. icecast к кодировкам оказался не очень приспособлен. Вот написал им, может замерджат мой патч: https://gitlab.xiph.org/xiph/icecast-server/-/issues/2423

Но что-то сомнительно. Ход очевидный, но почему-то сами они его не делали.

 ,

wandrien
()

При логине на удалённую машину автоматически применять конфиги с локальной машины

Знаю про вот такую программу для этих целей: https://github.com/fsquillace/kyrat

Есть ли более проработанный аналог?

 ,

wandrien
()

Отлаживаю кодогенератор

В свободное время попиливаю компилятор ЯП для разминки мозгов и чтобы не забыть ассемблер окончательно.

По семантике ЯП Си-подобный, по синтаксису больше похож на что-то из линейки Паскаль/Модула/Оберон.

За основу брал Context Хохлова, но перепилил практически все сорцы.

Компилятор многопроходный. Сначала строится синтаксическое дерево. Потом на нём выполняются некоторые простые оптимизации. Потом запускается бэкэнд. (Другой подход применён, например, в tcc, где программа компилируется за один проход — ради скорости компиляции.)

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

word Not(word P)
	switch Node[P].ID of
	case iOR:   Node[P].ID = iAND; Not(Node[P].pLeft); Not(Node[P].pRight);
	case iAND:  Node[P].ID = iOR;  Not(Node[P].pLeft); Not(Node[P].pRight);
	case iXOR:  Node[P].ID = iEQV;
	case iEQV:  Node[P].ID = iXOR;
	case iLT:   Node[P].ID = iGE;
	case iLE:   Node[P].ID = iGT;
	case iEQ:   Node[P].ID = iNE;
	case iNE:   Node[P].ID = iEQ;
	case iGE:   Node[P].ID = iLT;
	case iGT:   Node[P].ID = iLE;
	default:
		word P2 = Peek();
		Node[P2].ID    = iNOT;
		Node[P2].pLeft = P;
		return P2;
	end:switch

	return P;
end

Бэкэнд не строит промежуточного представления, на котором можно было бы гонять умные алгоритмы, соответственно 90% оптимизаций, описанных в «Книге дракона» невозможны. Пока я пытаюсь выжать максимум из компиляции на основе синтаксического дерева.

Ассемблерный листинг строится рекурсивным обходом дерева. При этом оптимизация осуществляется локально, в каждом отдельном узле, исходя только из информации доступной для узла и пары его дочерних элементов (или иногда — заглядывая чуть глубже).

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

Оптимизация умножения на константу при помощи add, shl и lea. Пример умножения на 15 при помощи lea:

        mov     EAX,  dword [EBP-24]
        lea     EAX,  [EAX*2+EAX]
        lea     EAX,  [EAX*4+EAX]
        push    EAX
        call    @10013

Компиляция выражения put_word(v100 * 18 + v1 * 27);:

        mov     EAX,  dword [EBP-24]
        lea     EAX,  [EAX*8+EAX]
        add     EAX,  EAX
        mov     EBX,  dword [EBP-8]
        lea     EBX,  [EBX*2+EBX]
        lea     EBX,  [EBX*8+EBX]
        add     EAX,  EBX
        push    EAX
        call    @10013

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

Компиляция выражения word v500 = v2 * v100 + v3 * v100;:

        mov     EAX,  dword [EBP-12]
        mul     dword [EBP-24]
        push    EAX
        mov     EAX,  dword [EBP-16]
        mul     dword [EBP-24]
        pop     EBX
        add     EAX,  EBX
        mov     dword [EBP-32], EAX

Более оптимальным кодом был бы вариант:

        mov     EAX,  dword [EBP-12]
        mul     dword [EBP-24]
        mov     EBX, EAX
        mov     EAX,  dword [EBP-16]
        mul     dword [EBP-24]
        add     EAX,  EBX
        mov     dword [EBP-32], EAX

Но компилятору в текущей реализации недоступна информация, потребуется ли EBX при вычислении второго слагаемого. Поэтому он сохраняет EAX на стек и затем восстанавливает оттуда значение в EBX уже после того как второе слагаемое вычислено.

Компиляция выражения put_word(v500 - v100 * v5);:

        mov     EAX,  dword [EBP-24]
        mul     dword [EBP-20]
        mov     EBX,  dword [EBP-32]
        xchg    EAX,  EBX
        sub     EAX,  EBX
        push    EAX
        call    @10013

Компилятор требует от выражения результат во вполне определённом регистре. Поэтому столкнувшись с тем, что операнды оказались в обратном порядке, он вынужден вставлять лишний xchg. Ситуацию можно решить, если разрешить выражению в ряде случаев свободно выбирать регистр для результата. Тогда код был бы таким:

        mov     EAX,  dword [EBP-24]
        mul     dword [EBP-20]
        mov     EBX,  dword [EBP-32]
        sub     EBX,  EAX
        push    EBX
        call    @10013

Компиляция выражения put_word((v500 * 2 + v2) + (v200 & v1) + (v200 - 100) * 10 - 100 - v200 - v100);:

        mov     EAX,  dword [EBP-32]
        add     EAX,  EAX
        add     EAX,  dword [EBP-12]
        mov     EBX,  dword [EBP-28]
        and     EBX,  dword [EBP-8]
        add     EAX,  EBX
        mov     EBX,  dword [EBP-28]
        sub     EBX,  100
        lea     EBX,  [EBX*4+EBX]
        add     EBX,  EBX
        add     EAX,  EBX
        sub     EAX,  100
        sub     EAX,  dword [EBP-28]
        sub     EAX,  dword [EBP-24]
        push    EAX
        call    @10013

Пример компиляции ветвлений для блока switch (табличная реализация switch пока отсутствует) :

        mov     EAX,  dword [@@DATA+EAX+7177840]
        sub     EAX, 0xD
        je      @11097
        sub     EAX, 0x3
        je      @11098
        sub     EAX, 0xFFFFFFFE
        je      @11099
        dec     EAX
        je      @11100
        sub     EAX, 0x5
        je      @11101
        dec     EAX
        je      @11102
        dec     EAX
        je      @11103
        dec     EAX
        je      @11104
        dec     EAX
        je      @11105
        dec     EAX
        je      @11106
        jmp     @11107

Пример переиспользования значения константы в регистре вместо загрузки другой константы:

	word v0 = 0;
	word v1 = 1;
	word v2 = 2;
	word v3 = 3;
	word v5 = 5;
	word v100 = 100;
	word v200 = 200;
        xor     EAX,  EAX
        mov     dword [EBP-4], EAX
        inc     EAX
        mov     dword [EBP-8], EAX
        inc     EAX
        mov     dword [EBP-12], EAX
        inc     EAX
        mov     dword [EBP-16], EAX
        mov     EAX,  5
        mov     dword [EBP-20], EAX
        mov     EAX,  100
        mov     dword [EBP-24], EAX
        add     EAX,  EAX
        mov     dword [EBP-28], EAX

Сам компилятор полностью работоспособен, запускается в 32-разрядном режиме под виндой и линуксом и, в принципе, легко может быть портирован на другие ОС. Написан на самом себе (self-hosted) и частично обвешан тестами. Далее в планах научить его генерировать код для какой-нибудь другой системы команд. ARM, MIPS, RISC-V… что-то из этого.

Задавайте ваши вопросы.

 , ,

wandrien
()

ненормальное программирование

 , ,

wandrien
()

The letter Q in Firefox stands for Quality

Просто скормите ему бесконечный html файл с сервера, и он сожрёт сначала всю память, затем весь своп, и потом повиснет, почему-то не убившись об OOM Killer.

/me пристально смотрит на год в календаре

АААААА!

 

wandrien
()

Safely iterating over WeakKeyDictionary and WeakValueDictionary

Интернеты пишут:

It is actually safe to iterate over a WeakKeyDictionary, WeakValueDictionary, or WeakSet in Python 2.7 or Python 3.1+. They put in an iteration guard that prevents weakref callbacks from removing references from the underlying dict or set during iteration all the way back in 2010, but the docs never got updated.

With the guard in, if an entry dies before iteration reaches it, iteration will skip that entry, but it won’t result in a segfault or a RuntimeError or anything. Dead entries will be added to a list of pending removals and handled later.

Мда? Это, мять, тогда что?!

  File "/root/src/Site/SiteHelpers.py", line 84, in processReqs
    for key, req in self.peer_reqs.items():
  File "/usr/lib/python3.8/weakref.py", line 208, in items
    for k, wr in self.data.items():
RuntimeError: dictionary changed size during iteration

Не верьте интернетам.

Вариант с for k,v in list(d.items()) тоже не прокатит. На последней итерации сборщик мусора может хлопнуть list() и следом начать удалять слабые ссылки из словаря.

list() нужно хранить отдельно на протяжении итерирования:

items = list(d.items())
for k,v in items:

 

wandrien
()

Терминологическое

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

Мне надо этот кейс в документации описать, и что-то я не соображу, как этот тип бага называется.

 ,

wandrien
()

Центосей расплодилось

Пишут вот:

Компания Virtuozzo, разрабатывающая серверное ПО для виртуализации на основе открытых проектов, опубликовала выпуск дистрибутива Virtuozzo Linux 8.4, построенного путём пересборки исходных текстов пакетов Red Hat Enterprise Linux 8.4. Дистрибутив полностью бинарно совместим и идентичен по функциональности с RHEL 8.4, и может использоваться для прозрачной замены решений на базе RHEL 8 и CentOS 8. Для загрузки доступны iso-образы, размером 1.6 ГБ и 4.2 ГБ.

Virtuozzo Linux позиционируется как замена CentOS 8, готовая для рабочих внедрений. Ранее дистрибутив применялся в качестве базовой операционной системы для развиваемой компанией Virtuozzo платформы виртуализации и различных коммерческих продуктов. Теперь Virtuozzo Linux поставляется без ограничений, бесплатен и развивается при участии сообщества. Цикл сопровождения соответствует циклу выпуска обновлений для RHEL 8.

Изменения в Virtuozzo Linux 8.4 полностью соответствуют изменениям в RHEL 8.4, включая поддержку работы поверх TCP в VPN IPsec на базе Libreswan, стабилизацию декларативного API nmstate для управления сетевыми настройками, Ansible-модули для автоматизации управления доступом на основе ролей (RBAC) в IdM (Identity Management), AppStream-модули с новыми ветками Python 3.9, SWIG 4.0, Subversion 1.14, Redis 6, PostgreSQL 13, MariaDB 10.5, GCC Toolset 10, LLVM Toolset 11.0.0, Rust Toolset 1.49.0, Go Toolset 1.15.7.

В качестве альтернатив классическому CentOS 8, кроме VzLinux, также позиционируются AlmaLinux (развивается компанией CloudLinux, совместно с сообществом), Rocky Linux (развивается сообществом под руководством основателя CentOS при поддержке специально созданной компании Ctrl IQ) и Oracle Linux. Кроме того, компания Red Hat предоставила возможность бесплатного использования RHEL в организациях, развивающих открытое ПО, и в окружениях индивидуальных разработчиков, насчитывающих до 16 виртуальных или физических систем.

(https://www.opennet.ru/opennews/art.shtml?num=55445)

Я из криокамеры про такую даже не слышал. Про Oracle Linux давно знаю, про AlmaLinux и Rocky Linux тоже знаю.

В чем актуальные различия между этим формально совместимым друг с другом зоопарком? И на что теперь ориентироваться?

 , , , ,

wandrien
()

LibreOffice: выделить текст, имеющий заданное форматирование

  1. Курсор стоит внутри фрагмента текста с некоторым форматированием. Хотелось бы по хоткею иметь возможность выделить весь фрагмент, имеющий это форматирование.

  2. Курсор стоит внутри фрагмента текста с некоторым форматированием. Хотелось бы по хоткею найти все другие вхождения такого же форматирования в документе. (Ну или по одному хотя бы.)

Есть готовые решения для этого?

 

wandrien
()

leave, ну какой нафиг оффтопик?

В поисках любой удалённой работы

@leave, я там топикстартеру дал рабочий совет, как искать работу, которая ему нужна.

Тем не менее, это, значит, оффтопик, а то что там другие модераторы флудят не по делу — это всё нормально.

Какого черта?

 

wandrien
()

Ищется программист для доработки open-source проекта

Приветствую!

Как многие из местных в курсе, у меня есть частичный форк LXDE, который я так и не довел до состояния логической завершенности.

Проект ориентирован на старые компьютеры. Код написан на Си с использованием gtk2. Миграция на другие версии тулкита не рассматривается.

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

  • Вы являетесь энтузиастом СПО, и у вас есть желание поучаствовать в свободном проекте в качестве хобби.
  • По какой-то причине вам интересна разработка GUI-приложений на Си, на устаревшем тулките и под почти уже устаревший X11.

Скилы, которые потребуются для работы:

  • Знание Си.
  • Знакомство со сборочной средой autotools.
  • Умение собирать софт под Linux и FreeBSD.
  • Знакомство с GLIB2, GTK2, X11.
  • Навыки вдумчивого поиска багов и анализа архитектуры.
  • Работа с git.

ИЛИ:

  • Наличие головы и желания научиться всему необходимому.

У меня нет распланированного постоянного бюджета, я могу выделять средства только по мере их наличия. Скорость от вас не требуется, нужен только результат.

По оплате. Скажем, 10 долларов за один простой таск.

Пример такого таска:

  • В менеджере рабочего стола течет память в кэше фоновых изображений. Кэш не нужен вообще, его нужно убрать. Соответствующий участок кода написан неверно, без учетам мультимониторной конфигурации с разными размерами мониторов. Нужно переписать так, чтобы для каждого монитора формировался свой пиксмап с правильно отмасштабированной фоновой картинкой.

Собственно, это наверное и будет первым таском по проекту.

По более сложным фичам — требует обсуждения. Разумеется, я не ожидаю, что вы будете работать бесплатно, например, если задача в том, чтобы отыскать и исправить гонку в многопоточном запутанном коде. Но сколько такая работа может стоить, я сам пока не очень представляю.

ТАКЖЕ

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

У меня самого есть довольно длинный список фич, включающих в том числе модуляризацию и довольно нетривиальную интеграцию различных частей проекта.

 , ,

wandrien
()

Федеративность vs P2P

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

Фундаментом нашего объединения является идея, изложенная в эссе «Protocols, Not Platforms»

И именно поэтому существует целый выводок реализаций как раз движков-платформ. Я и правда не понимаю, какое дело конечному пользователю будет до протокола, если он взаимодействует с конкретной платформой, к которой привязана его учётка. Код исполняется не на его машине и не под его контролем. Данные пользователя подконтрольны не ему, а черт знает кому. То, что там будет СПО, абсолютно параллельно. Суть СПО не святости концепции, а в том, чтобы знать, что за код работает с твоими данными. Не тот случай.

Возможно, ты используешь Mastodon неправильно

А может быть, всё проще, и это Mastodon спроектирован неправильно.

В реальной жизни вот он есть я, и вот они есть кружки по интересам, сообщества друзей и так далее. Но в каком бы круге общения я не находился, идентификация меня как конкретного человека остаётся неизменной.

Mastodon нам предлагает сначала побродить поискать сервер по интересам, а потом уже там регистрироваться. А если сервер вас не устроит, то идти и регистрироваться в другом месте. Спасибо, конечно. Но мне хотелось бы обойтись без раздвоения личности при управлении своими данными и учетными записями.

Что мешало сразу сделать дизайн, в котором пользователь — это универсальный криптографический ключ, не прибитый к платформе? А кружки по интересам… просто кружки по интересам!

Внутренняя политика […] Рассмотрим какой-нибудь инстанс. У него есть внутренняя политика. Она регулирует то, что происходит в стенах этого инстанса, между его пользователями. К ней относятся правила поведения, на каждом инстансе они свои. Регистрируясь на конкретном инстансе, ты соглашаешься с его конкретными правилами.

Проблема не в том, что в «тематической группе» (назовём это так) есть правила поведения. Проблема в том, что эта группа претендует на то, чтобы быть оператором моих данных, а не просто принуждать меня к правилам для участия в группе. Сам я в сети ничего собой не представляю. За меня всё делает сервер. Как самостоятельная единица в сети федерации я не существую. Пользователь как был бесправным в Фейсбуке, так и остался.

И если раньше админ группы в Фейсбуке был ограничен во власти по отношению к участникам группы средствами самого Фейсбука, то теперь «админ группы» обладает полной властью вместо Фейсбука.

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

Внешняя политика […] Тут, конечно, начинаются всякие страсти. Это комплекс всего, что происходит при общении между серверами. К вам, как гражданину своего инстанса, внутренней политикой скорее всего приставлен долг не порочить честь своего сообщества на междусерверной арене. […] Глушение. […] Отклонение медиа. […] Блокировка.

Тут тоже всё, мать вашу, прекрасно. Сеть, спроектированная порождать страсти и бурления, их и порождает. Раздолье для маленьких царьков, которым выдалась возможность поуправлять паствой и поучаствовать в «международных» отношениях. Глушения, блокировки, честь сервера и скрепы. Пойду лучше проголосую за Путина.

Да, и наконец, мне скажут типа: просто подними свой сервер, и своими данными управлять будешь только ты. Во-первых, не только я. Любому серверному приложению необходим хостинг с белым IP. А во-вторых, вот только технически это решение ничем не отличается от старого доброго блога на вордпресс и ленты RSS для экспорта всем желающим. Изобретение нового мира вышло каким-то… неубедительным.


В общем, я такой человек, который во всём найдёт изъяны. С ходу могу вспомнить только три примера, когда дизайн продукта меня полностью устраивал при знакомстве. Первый был, когда я познакомился с Ruby. Второй, когда открыл для себя Docker. И третий, когда увидел обновленный JS с let, const и стрелками.

Но конкретно тут… ребята, я не знаю, может это лично я слишком аутист, но мне казалось, что в начале 3-го десятилетия XXI века технически продвинутым людям в сети уже должно поднадоесть жрать этот кактус в виде доли маленького бесправного винтика в большой сети. И ходить под начальством очередной шишки, не важно, маленькая она или большая.

Самое главное, чего не делает федиверс, он не провозглашает пользователя как объект первого класса в своей семантической модели. Всё так же объекты первого класса — это сервера, сервера, сервера.

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

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

В то же время, приложение на ZeroNet при желании можно продаунгрейдить до федеративного сервера, точно так же как федеративный сервер при желании архитектурно даунгрейдится до «Фейсбука». А вот обратно — не получится. Если в исходном дизайне не выполнено соответствующее разделение абстракций, то без полной переделки дизайна им просто неоткуда будет взятся. «Лишние» степени свободы платформы при желании можно скрыть, а вот несуществующие нарисовать не получится.

ZeroNet сейчас это макет самой себя, в котором ничего еще только не работает. Но блин… дайте мне 5 кодеров на питоне за еду и финансирование, чтобы им полгода было что есть. И вы обалдели бы от результата.

Допилить ZeroNet до убойной технологии не сложнее, чем с нуля реализовать стек Gemini вместе с сервером и браузером на GTK. Реально нужно 5-6 заинтересованных лиц и немного времени.

Сейчас ситуация такова, что на всей Земле не нашлось этих пяти лиц.

В общем, ладно… у меня нет желания размышлять, почему всё так вышло, и почему вместо действительно чумовой технологии, от которой сами «продвинутые пользователи» бы визжали, у пользователей выстреливает очередное… вот это. В конечном счёте, как тащить людей туда, куда они не хотят? Ну не хотят, и не надо.

Пойду куплю пива в связи со сдачей очередного проекта. Пошло оно всё подальше.


Спасибо commagray & CO за предоставленные для цитирования буквы.

 , ,

wandrien
()

И снова самый лучший ЯП

Я снова наступил на эти грабли.

Пример кода:

$array = [1, 2, 3];

foreach ($array as &$value) {}    // by reference
echo implode(',', $array), "\n";

foreach ($array as $value) {}     // by value (i.e., copy)
echo implode(',', $array), "\n";

Результат:

1,2,3
1,2,2

Почему? По качану. Между первой и второй нужен unset($value);.

Замечательный язык вообще. И отсутствие у переменных областей видимости уровня блока — отдельная победа на пути к говнокоду. Зато отлично учишься каждые 5 строк кода выносить в отдельную функцию.

PHP и JS, сладкий твикс страдания. JS, правда, боль-мень вылечили.

Спрашивайте ваши ответы.

 ,

wandrien
()

YouTube собрался убрать дизлайки

Сабж.

https://techcrunch.com/2021/03/30/youtube-tests-hiding-dislike-counts-on-videos/

In response to creator feedback around well-being and targeted dislike campaigns, we’re testing a few new designs that don’t show the public dislike count.

 ,

wandrien
()

LOR в ZeroNet

Напоминаю, что в ZeroNet есть филиал LOR.

Без установки приложения посмотреть форум можно через прокси:

https://zeronet.now.im/1BpFtPez7mSiShtXfb4wPfMT1dZTuRybfZ/

И написать, в принципе, тоже можно оттуда же. Только при создании учётки помните, что:

  • Приватный ключ от неё временный и хранится на самом прокси. Не создавайте постоянную учетку с «красивым» именем.
  • Ваш IP известен прокси, а кто владелец прокси, можно только догадываться.

 

wandrien
()

ZeroNet — p2p платформа хостинга сайтов и соцсеть

ZeroNet — это децентрализованная платформа для создания веб-приложений (сайтов), работающих в браузере и использующих приложение самой ZeroNet в качестве бекэнда. Можно выделить основные особенности платформы:

  • Хранение данных осуществляется в простых текстовых файлах (JSON) с кэшированием в sqlite для быстрого доступа. Кроме JSON, разумеется, возможно также использование любых текстовых или бинарных форматов, но уже без поддержки автоматического построения таблиц sqlite.
  • Все данные подписаны ключами своих авторов, таким образом подделать авторство сайта невозможно. Также невозможно модифицировать чужой сайт.
  • Сайты хранятся по принципу торрента — любыми заинтересованными участниками сети. Отключить сайт, выведя из строя какой-либо сервер, невозможно.
  • Сайт остаётся работоспособен даже если остался на единственном узле или если компьютер посетителя сайта вообще отключен от интернета.
  • Если связи нет, можно продолжать работу с сайтом в обычном режиме: писать посты в блог, комментарии на форум и т.п. При появлении связи данные будут синхронизированы автоматически.
  • Передача данных между пирами осуществляется напрямую через IP-соединения и/или через Tor на усмотрение пользователя.
  • Первичный поиск пиров для сайта выполняется на трекерах собственного типа, либо на произвольных торрент-трекерах по всему миру. После установления связи, узлы обмениваются списками пиров и известных трекеров между собой.

Теперь к сути вопроса.

Апстрим проекта в настоящее время находится в стагнации. Судьба главного разработчика, имевшего право подтверждать пулл-реквесты, туманна. То ли он просто забил на проект. То ли с ним что-то случилось.

Активной разработки не ведётся уже более полугода. Изредка кто-то подтверждает мелкие PR, а значит, у кого-то всё же есть доступ к его учетной записи. На этом основании можно строить разные коспирологические теории, но мы сейчас не об этом.

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

Текущий драфт ченджлога можно посмотреть здесь: https://github.com/zeronet-enhanced/ZeroNet/blob/massive-rework/ZNE-ChangeLog/ChangeLog-0.8.0.md

Всё, что там описано, уже реализовано. Впереди еще многое другое.

Всех заинтересованных лиц призываю присоединиться к работе.

 , ,

wandrien
()

reactions

А давайте обсудим идею добавить на ЛОР reactions, по типу как на github?

Чтобы не провоцировать срачи и хейт, предлагаю запилить только позитивные или нейтральные реакции типа таких: 👍, 😄, ❤️, 😕, но не таких: 👎.

wandrien
()

RSS подписка на новые темы