LINUX.ORG.RU

Сообщения wandrien

 

Операционная система Атлант

Форум — Talks

Красноярские программисты создали на базе Linux собственную операционную систему «Атлант», не имеющую аналогов: она позволяет удаленно управлять парком из тысяч персональных компьютеров и дистанционно обновлять на них софт без остановки рабочих процессов. Newslab поговорил с главой фирмы-разработчика и выяснил, как им удалось совершить прорыв в мире IT-бизнеса.

В общем, если без пафоса, то они сделали ПО для управления Linux-машинами в домене и продают лицензии на него.

Презентация: https://rutube.ru/video/b662f26954f52be0a7a7da819644c49f/

Интервью с разрабами: https://newslab.ru/article/999309

Официальный сайт: https://applite.ru/atlant

Что думаете?

 

wandrien
()

killall больше не killall

Форум — Desktop

Расскажите мне, чего я не знаю. После апдейта ОС команды killall и pgrep перестали видеть firefox:

vadim@aquila:~$ killall -KILL firefox 
firefox: процесс не найден
Status: 1
vadim@aquila:~$ pgrep firefox 
Status: 1
vadim@aquila:~$ ps -A -o cmd | grep firefox | head -3
/usr/lib/firefox/firefox -ProfileManager --new-instance
/usr/lib/firefox/firefox -contentproc -parentBuildID 20211121002925 -prefsLen 1 -prefMapSize 253532 -appdir /usr/lib/firefox/browser 5002 true socket
/usr/lib/firefox/firefox -contentproc -childID 2 -isForBrowser -prefsLen 197 -prefMapSize 253532 -jsInit 278680 -parentBuildID 20211121002925 -appdir /usr/lib/firefox/browser 5002 true tab
vadim@aquila:~$ 

 , ,

wandrien
()

Как прекрасен юникс-вей в 2020-х...

Форум — Talks

…не зря Майкрософт еще в 80-х хотела с ДОСа мигрировать на Юникс. Но не вышло у пацанов, не фартануло.

Попросили вчера помочь с нетривиальной конфигурацией винды. Назанимался нетрадиционным секасом с в ней вдоволь… или вдоль. Точнее сказать, под любым юникс-лайк вся конфигурация была бы тривиальной, но это ж винда.

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

Некоторые вещи вообще только через реестр. Ну сам реестр это отдельная история. Никакого вам аналога diff, meld, невозможно без дебильных приседаний с экспортом-импортом в текстовый файлик положить конфигурацию в git. Спасибо, хоть экспорт-импорт приделать не забыли. (В этом месте я вернулся сюда из абзаца, в котором писал про кодировки, и еще раз напишу: спасибо! От этих … специалистов можно было бы вполне ожидать, что и этого не будет.)

Система всё время ставит палки в колеса, если нужно часть действий выполнить от имени администратора. Типа, запускаю ФМ с полными правами админа. Создаю в нём файл. Открываю его в Notepad++ — а всё, Notepad++ уже работает не с полными правами админа. Может это, конечно, баг самого NPP, я хз.

Интерфейсы для работы с правами доступа находятся глубоко в категории «рисовал программист» и не обновлялись со времён NT. Там под виндой даже не столько сама система прав доступа сложная, сколько GUI к ней убогий.

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

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

Описания системных сервисов переведены на русский, такое впечатление, что машинным надмозгом. А описания сторонних сервисов часто вообще не заполнены. Документации на это тоже, понятно, часто нет.

Если ты хочешь взять обычный Блокнот и написать в нём cmd-скрипт, то хрен там ночевал - Блокнот сохраняет файлы в кодировке 1251, а запускается скрипт в кодировке 866!!!! КАКОГО ХРЕНА?!

А если ты берешь весь из себя такой знаменитый Notepad++ с поддержкой кодировок и хочешь перекодировать уже написанный файл, то он не умеет конвертировать между этими кодировками!

Если в системе что-то сломалось, то хрен ты откатишь пакет для теста, нет в ней ни пакетов, ни внятной модели использования файловой системы. Всё навалено кучами легаси-хлама. Внутри папки system32 (которая теперь в целях совместимости теперь навечно будет system32, будь там под капотом хоть 128 бит в регистрах) вперемешку валяются драйвера, пользовательские библиотеки, конфиги, куски интерфейса и чёрт знает что. При этом есть еще такой смешной момент, что несмотря на кучи легаси-винегрета, стабильных расположений путей в ней тоже нет. Например, расположение папки с содержимым меню Пуск переезжало с места на место в каждой (!) крупной версии винды.

Когда что-то гуглишь по вопросам системной конфигурации, обычно попадаешь или на ВИО, где отвечающий тупее вопрощающего, или на официальные места поддержки, где ответ чаще всего «такая штука в Windows не поддерживается, но вы можете попробовать самостоятельно станцевать в гамаке на лыжах», или на поисковый спам.

Эта шляпа еще и на HDD стояла, а я уже забыл, что такое 64-битная винда на HDD. Это ад и израиль, сраный лагодром с загрузками по 5 минут, во время которых пытаются просраться несколько десятков системных сервисов и еще куча говнокода в пользовательском сеансе. И пока они не просрутся, Проводник висит, и весь гуй вместе с ним. Да по сравнению с этим что systemd, что до-systemd-шная баше-лапша - просто вершины архитектуры и топ производительности.

Кен Томпсон, Деннис Ритчи, Ричард Столлман, Линус Торвальдс, и вся Red Hat целиком, и все остальные причастные к Линуксу, и еще разработчики всех BSD, и даже почившая Sun Microsystems с Солярой, СПАСИБО вам всем! Что мы имеем технологичную, конфигурируемую, понятную ОС, и даже целое множество разных ОС. И не привязаны к этой жалкой пародии на OpenVMS, мутировавшей на отравленных землях MS-DOS-а, и по какой-то злой шутке судьбы дожившей до 2020-х!

…уф. Выдохнул.

 , ,

wandrien
()

Почему gimp рендерит лютое ШГ?

Форум — Desktop

В качестве примера шрифт Play, 12 pt. На самом деле с любым шрифтом та же шляпа.

Вот картинка: https://ibb.co/BstPQmd

Вот пояснения к картинке, сверху вниз:

  1. XPaint. Да-да, древнее как мамонт иксовое приложение на тулките xaw!
  2. AzPainter.
  3. Pinta. Тормозит при работе с выпадающим списком шрифтов адски. Но рендерит нормально.
  4. Gimp. По мнению gimp-а, вот так выглядит шрифт 12 pt. На самом деле при переключении между px и pt ничего не меняеется. Gimp считает, что один пункт равен одному экранному пикселю.
  5. Снова Gimp в размере 16 px / 16 pt.
  6. Inkscape.
  7. Dia. Никаких настроек DPI не нашел. 12 pt по мнению Dia выглядят так.

У меня, чёрт возьми, есть вопрос. Точнее два.

Почему gimp рендерит шрифты как говно? И как это исправить?

 ,

wandrien
()

Потокобезопасность system(3) в glibc

Форум — Development

При чтении документации glibc обнаружил, что system(3) заявлена как потокобезопасная. Что противоречит интуитивно ожидаемому: функция манипулирует обработчиками сигналов, следовательно должна быть MT-Unsafe. Это побудило подробнее изучить вопрос и сравнить реализации в разных ОС.

Возможно пригодится кому:

 , , , ,

wandrien
()

При работе в VirtualBox мышь упирается в вертикальные стены

Форум — Desktop

Ведешь мышь слева направо, она упирается в случайном месте экрана в невидимую стеку и дальше не идёт.

Резко кидаешь налево до упора и потом вправо - иногда разглючивает, а иногда стена просто возникает в другом месте.

Баг устойчиво воспроизводится на постоянной основе.

Куда копать?

Нагуглить не смог.

 

wandrien
()

Оформление Firefox

Форум — Desktop

Обновился файрфокс и теперь выглядит как кусок чего-то неприглядного: https://ibb.co/3dpzsYX

Очевидная проблема: теперь абсолютно не считывается, какая вкладка активная. Как этим можно пользоваться, не представляю.

Но кроме этого также бардак с меню:

  • Оформление меню не следует дефолтным цветам тулкита. В частности в данный момент - Адвайты.
  • При этом контекстное меню страницы и классическое меню по Alt остались старыми - GTK3-шными, с ними всё нормально.
  • А меню-бутерброд и меню закладок - новые в нестандартном оформлении.

Действительно, в 20-х годах XXI-го века следовать оформлению тулкита не модно. Теперь мы сами с усами, теперь у нас СТИЛЛЛЬ.

Но пока у дизайнеров СТИЛЛЛЬ, простому пользователю надо это как-то фиксить.

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

С меню ситуация хуже. Во всём десятке тем ни нашлось не одной, которая меняет серенький цвет подсветки активного пункта меню на что-то другое. Цвет фона меняют, цвет текста меняют, а цвет заливки выделения - нет.

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

Ну тем хуже для лисы - если так, придётся патчить.

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

Всем этим я займусь, наверное, на выходных.

А пока может у кого-то есть конструктивные предложения? Кто как решал эти затруднения?

 , ,

wandrien
()

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

Форум — Talks

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

 

wandrien
()

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

Форум — Talks

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

 

wandrien
()

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

Форум — General

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

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

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

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

 

wandrien
()

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

Форум — Talks

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

Начну.

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

У меня кусок админки управляет кучкой фоновых процессов. Не напрямую, а через прослойку-супервизора. Прослойку я написал на 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
()

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

Форум — General

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

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

 ,

wandrien
()

PC-MOS/386

Галерея — Скриншоты

Привет! Это черновик заметки, которая должна была быть опубликована в моём блоге. Но так как блог сейчас сломан, я решил опубликовать её здесь. Кто-то недавно жаловался, что на ЛОРе недостаточно ХАБРа? Ну вот вам пост в стиле хабра. Поехали.

PC-MOS/386 — это многопользовательская и многозадачная операционная система, совместимая с MS-DOS 5. Разрабатывалась компанией The Software Link до 1987-го года.

Операционная система использует защищенный режим 386 для изоляции виртуальных машин с приложениями MS-DOS. Поэтому большинство программ, использующих только документированные API MS-DOS, должны работать без проблем.

В 2017-м году исходный код был перелицензирован под GPL3 и выложен на гитхаб. Кроме исходников, репозиторий содержит образы официальных установочных дисков и сканы оригинальной документации в PDF. Также там была исправлена проблема в обработке даты модификации файлов, которая не давала открыть файлы, созданные после 2012-09-01.

Так что теперь можно вполне законно и не нарушив ни одной EULA запустить эту самобытную ОС в виртуалке или даже на реальном железе.

Я немного погонял её в qemu, и пока вопросов у меня больше, чем ответов. Почитать официальный мануал (довольно длинный и в плохом качестве скана) пока времени не было, так всё методом тыка.

Многозадачность

Многозадачность реализована в виде отдельных контейнеров с приложениями. При запуске системы пользователь попадает в первый контейнер, в котором запущена оболочка COMMAND.COM. Далее командой ADDTASK можно добавить другие задачи, в которых по умолчанию также запускается оболочка COMMAND.COM. Для каждой задачи обязательно указывать количество памяти, которое будет выделено под задачу.

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

Можно активировать TSR-программу MONITOR, после чего через Ctrl + Space можно вызывать интерактивное меню для переключения задач и создания новых.

Правда в каждой новой задаче эту команду нужно повторять заново, чтобы в этой задаче работал хоткей Ctrl + Space. Думаю, нужно команду MONITOR прописать в AUTOEXEC.BAT, чтобы она применялась автоматически.

Команды ОС

В этой ОС команды не отвечают на ключ /? и любые другие варианты справочных ключей, которые я пробовал. Вместо этого есть интерактивная справка по команде HELP. По виду и принципу работы напоминает справку из сред разработки QBasic и Turbo C. По команде HELP .КОМАНДА (с точкой перед командой) можно попасть сразу в нужный раздел справки. (А при чём тут точка, вы можете узнать, набрав HELP .DOT.)

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

В командной оболочке работают стрелки влево-вправо, Backspace и Delete. Клавишей Insert можно переключать режим ВСТАВКА/ЗАМЕНА, при этом меняется форма курсора. Режим ввода по умолчанию — ЗАМЕНА, что неудобно. Чтобы ВСТАВКА была по умолчанию, нужно в AUTOEXEC.BAT вписать команду INSERT.

Я также проверил все сочетания Ctrl + буква. Ожидаемо работают Ctrl + H как аналог Backspace и Ctrl + M как аналог Enter. Ctrl + C прерывает ввод текущей команды без выполнения. Остальные сочетания просто выводят на экран символы псевдографики.

Последовательное нажатие Esc + буква в командной оболочке выполняет ту же роль, что и Ctrl + буква, только еще и наводит беспорядок на экране при этом. Сочетания Alt + что угодно или Esc + что угодно, привычные миру Unix, тут , похоже, невозможны. (В других приложениях Esc работает как самостоятельный хоткей. Например в интерактивной справке закрывает текущий раздел справки.)

История команд доступна через стрелку вверх и вниз. Между сеансами история не сохраняется.

ED — простой редактор с двумя режимами: визуальным и командным. В визуальном режиме мало отличается от любого редактора любой ОС: стандартные клавиши навигации, режим вставки и замены, хоткеи на Ctrl + буква.

Переход в командный режим по Esc. Командный режим своей лаконичностью напомнил даже не редактор vi, а редактор в составе Basic из ZX Spectrum.

В справке отсутствует клавиша для перехода обратно из командного в визуальный. Разумное предположение, что это должна быть кнопка V — оправдалось. :)

Команда ACU открывает интерактивное меню с настройками системы и встроенной справкой по каждому пункту через F1. Справка пытается быть информативной, но без мануала я всё равно не разобрался во всех настройках полностью. Выбранные настройки записываются в CONFIG.SYS.

Команды MOS и MOSADM позволяют просматривать и изменять различные параметры системы. Синтаксис команд использует подкоманды аналогично как в современных программах git, docker и т.п. Помню, что MS использовала такой же подход уже в NT-based системах для команд настройки сети, а вот были ли подобные команды с подкомандами в MS-DOS, не припомню.

Проблемы

Почему-то не работают стрелки на основном блоке клавиатуры. Стрелки на блоке NumLock работают, но пользоваться ими неудобно, так как в свою очередь на этом блоке не работает Enter. Возможно, это какая-то проблема совместимости с QEMU. Нужно будет попробовать в другой виртуалке.

Позже заметил, что кроме стрелок, такая же проблема с клавишами Insert и Delete. Они работают с Num-блока и неработают с основной части клавиатуры.

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

Упомянутые ALT + цифра для переключения между задачами не работают. Или я делаю что-то не так, или опять проблема с обработкой ввода, и система не распознаёт ALT.

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

Еще одна проблема — не столько даже проблема системы, сколько особенность эпохи. Ни одно из приложений системы не уводит процессор в сон между прерываниями даже когда ничего делать не нужно. (Уж хотя бы COMMAND.COM мог бы это делать по умолчанию.) Из-за этого одно ядро постоянно нагружено на 100%, и мой ноутбук показывает температуру 82 градуса. И поэтому все эксперименты с PC-MOS сопровождаются отчётливым звуком П-Ш-Ш-Ш-Ш из вентиляционной решетки.

Что дальше

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

Учитывая, что GEM 3.13 теперь тоже опенсорсный, можно попробовать запустить на ней GUI.

Где-то мне попадалась подборка утилит наподобие grep для MS-DOS, которую было бы неплохо добавить.

Еще один интересный вопрос — установка на один раздел с FreeDOS в разные каталоги с возможностью выбора операционной системы при старте. (FreeDOS с большим уровнем совместимости с софтом или PS-MOS с меньшим уровнем совместимости, зато многозадачная.)

 , , ,

wandrien
()

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

Форум — Development

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

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

За основу брал 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
()

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

Форум — Linux-org-ru

 , ,

wandrien
()

The letter Q in Firefox stands for Quality

Форум — Talks

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

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

АААААА!

 

wandrien
()

Safely iterating over WeakKeyDictionary and WeakValueDictionary

Форум — Development

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

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
()

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

Форум — Development

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

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

 ,

wandrien
()

FOX Desktop (Ловите наркомана!)

Галерея — Скриншоты

Есть такой FOX Toolkit, очень давний кроссплатформенный тулкит на C++, который разрабатывается единственным разработчиком-энтузиастом. Тулкит не заброшен, хотя и не разрабатывается в активном темпе.

С самим тулкитом поставляются:

  • Файловый менеджер PathFinder.
  • Текстовый редактор Adie с простой подсветкой синтаксиса.
  • Инженерный калькулятор FOX Calculator.
  • Скриншотилка shutterbug. Вроде что особенного ждать от скриншотилки, но довольно удобная. Можно, например, с экрана анимацию записывать в gif.
  • И утилита ControlCenter, отвечающая за некоторые базовые настройки тулкита.

Есть еще двухпанельный ФМ XFE на этом тулките. Он укомплектован просмотрщиком изображений и еще одним простым редактором.

Раньше был еще проект fxdesktop — попытка сделать на этом тулките DE. Не знаю, насколько глобальные были планы у автора, но удалось сделать только часть базовых функций экранной панели, и проект был заброшен. Всё это умерло где-то к концу 00-х.

Еще есть fxprocessview — диспетчер процессов в полуработающем состоянии, тоже заброшен.

На самом деле я вспомнил о fxdesktop только потому, что у меня на машине остался неудаленный пакет с ним еще со времен до миграции с 32-битного на 64-битный Арч. (Я без переустановки ОС мигрировал; через принудительную переустановку всех системных пакетов.) Ну и тут я решил упороться, и понеслось…

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

Пока что было сделано:

У ControlCenter исправил цветовую схему, чтобы она точно имитировала цвета Windows. Потом на этом не остановился и запилил все варианты:

  • Redmond 95 (цветовая схема Windows 95, 98)
  • Redmond 2000 (цветовая схема Windows ME, 2000, а также классических стилей XP и 7)
  • Redmond XP (эта цветовая схема соответствует той, какую выбирает XP-ха, когда в ней настроена Luna, а приложение умеет только в классику.)
  • Redmond XP Olive, Redmond XP Silver (аналогично для этих вариантов оформления)
  • Redmond 7 (аналогично — если в семерке настроена Аэро, а приложение умеет только в классику, то семерка ставит такой набор цветов — вот его и имитируем)

Следом добавил цветовые схемы для классических стилей gtk2: Raleigh, Crux, Clearlooks, Industrial, ThinIce. То есть в сами эти стили FOX, разумеется, не умеет. Но при выборе соответствующих цветовых схем он, по крайней мере, использует такие же опорные цвета для окон и текста. Для Adwaita тоже добавил.

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

Кстати говоря, бесполезный факт, но внешний вид элементов управления практически с попиксельной точностью воспроизводит классическую Windows. Так вот по скрину окна (без рамок openbox-а) даже не знаю, можно ли отличить от Винды. Например, стиль Redmond в gtk2 сразу палится, что не винда — он совсем не pixel perfect.

Дальше я поржал с русской локализации XFE с опечатками типа «Измененять» и «Сравнитель файлов» и сел её править. Потом уперся в то, что часть бреда исправить не могу, потому что бред также в английском оригинале. (Разработчик из Франции, возможно, в этом дело.) Тут нужно будет писать письма в апстрим, ладно, это потом…

Ну и наконец я взялся за fxdesktop. Сам код компилируется без проблем спустя 10+ лет, пришлось только кривой configure-скрипт переписать. На скриншоте видно рабочий стол (оранжевый фон без ничего) и панель вверху — это всё, что есть в этой программе. Иконки на рабочем столе программа рисовать не умеет, но умеет меню по ПКМ, где планировалось что-то полезное, но почти ничего нет. На панели слева направо видно:

  • Кнопка вызова меню приложений. Не работает. С современной организацией меню приложений не пашет.
  • Кнопка «Свернуть все окна». На сворачивание работает. На разворачивание обратно ­— нет.
  • 4 кнопки-лаунчера. Вот над лаунчером сейчас работаю. Научил его отображать иконку каталога, если лаунчер ведет на каталог. Научил отображать специальные иконку каталогов, если лаунчер ведет на специальный каталог (HOME, XDG_DESKTOP_DIR, XDG_DOCUMENTS_DIR, XDG_DOWNLOAD_DIR и т.п.). Научил лаунчер распознавать и подставлять соответствующие специальные переменные окружения в путях. Научил примитивной логике загрузки иконок по имени. Пока без полной поддержки тем иконок.
  • Переключатель рабочих столов. Работает.
  • Шестеренка — выпадающее меню со списком открытых окон. Работает.
  • Часы. Работают, никаких настроек формата времени не имеют.
  • Сама панель должна быть гибко конфигурируемой (в плане добавления/удаления виджетов), но это недоделано.

Что еще видно на скриншоте. «FOX Desktop Setup» — это утилита ControlCenter. А «FOX Desktop Settings» — это настройки самого fxdesktop. Надо их какое-то более очевидно переименовать, что ли. Для скриншота открыл калькулятор и PathFinder. Текстовый редактор в композицию на мой монитор уже не влез.

PathFinder вот так по хардкору имитирует иконки то ли от 95-й винды, то ли вообще от 3.11-й. XFE пытается выглядеть чуть современнее и в свежем релизе даже обещали поддержку HiDPI.

Это никакое не DE, разумеется. Но некий смысл в этом сборнике недописанных программ всё же есть. Во-первых, их интересно дописывать. :D Во-вторых, на старом компе это должно летать. Кто-то тут у нас коллекционировал старые пни и всё такое?..

P.S. Дорогой движок форума, да какие я метки сюда поставлю? Тега «fox toolkit» у тебя, к сожалению, нет, а добавить его мне число звезд не даёт. Тега «практическая некромантия» тоже не подвезли.

 , , ,

wandrien
()

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

Форум — Talks

Пишут вот:

Компания 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
()

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