LINUX.ORG.RU

Форум

Активные теги:

 , , , , , , , , , , , , , ,

Хочу сочинить стихи про программирование в 1970-х, какие идеи посоветуете?

 стихи ретрокомрьютинг

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

Нужно передать дух эпохи.

Наброски:

Язык управления требует ввода,
Блок-схема ветвится, скрывая финал.
Ложится в приёмник тугая колода,
Открыт мультиплексный широкий канал.

В исходные тексты добавлена правка,
Неверная база нарушила блок.
В колоду ложится картонная вставка,
И заново считан командный поток.

Прогон завершён, отработала схема,
И код завершения выставлен в ноль.
Очищен раздел, отдыхает система,
Режим диалога открыла консоль.
Nxx
()

Уведомление о входе по почте

 , ,

Привет, ЛОР

Сегодня на почту пришло куча сообщений и моем входе на ЛОР. Мне это не нужно. Где это отключить?

Спасибо, ЛОР.

Gonzo
()

Западную банковскую систему может ждать скорый крах

 , , , ,

Сабдж


Американский стартап Hypercubic, занимающийся разработкой специализированных ИИ-агентов для трансляции кода COBOL на современные языки программирования, объявил о проведении посевного раунда финансирования, в ходе которого на развитие привлечено $5,3 млн. Инвестиционную программу возглавила компания CIV. Кроме того, средства предоставили Y Combinator, Afore Capital, Multimodal Ventures, Pioneer Fund, Epsilon Ventures и Unpopular Ventures, а также ряд частных инвесторов.

COBOL (Common Business-Oriented Language), появившийся ещё в 1959 году, до сих пор остаётся основой глобальной финансовой инфраструктуры и приложений на мейнфреймах: по оценкам, более 95% транзакций по картам и операций банкоматов зависят от систем, написанных на этом языке. В мире насчитывается свыше 200 млрд строк COBOL-кода, однако эти программы крайне плохо документированы, а найти квалифицированных специалистов в соответствующей области очень сложно. Первые разработчики на COBOL давно отошли от дел, если вообще живы, да и их преемники приближаются к пенсионному возрасту.

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

Стартап Hypercubic предлагает решение проблемы с помощью ИИ-агентов, обученных на огромных объёмах кода COBOL. Система сначала тщательно анализирует исходники, восстанавливает скрытую бизнес-логику и автоматически генерирует документацию. Затем ИИ переписывает приложение на современных языках, сохраняя функциональность и совместимость с историческими данными. Утверждается, что такой подход сокращает сроки модернизации с нескольких лет до пары месяцев, одновременно повышая надёжность.


собираются пустить козла в огород. Это интересно.

tiinn
()

Какие есть способы, чтобы устройство сообщало «я здесь»?

 , ,

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

Заметил, что vlc, например, умеет «видеть» в локальной сети smb шары. А также есть протокол SAP (опять же vlc его умеет). На бумаге выглядит красиво для случаев если одноплатник с камерой, а по факту как-то очень криво работает.

Как ещё устройства могут сообщать о себе? Интересуют наиболее минималистичные варианты.

Jullyfish
()

Умер создатель «Лепры» Йован Савович

 

Создатель коллективных блогов «Лепрозорий» («Лепра») и dirty.ru, веб-дизайнер Йован Савович скончался в возрасте 43 лет. Об этом сообщили его близкие.

Йован Савович родился в 1982 году в Сараево. Летом 1991-го впервые приехал в Москву. Сайты dirty.ru и «Лепрозорий» — одни из первых коллективных блогов в российском сегменте интернета. Господин Савович создал сообщества в 2001 и 2007 годах. В 2018–2019 годах работал в «Яндексе» на должности продуктового менеджера «Дзена».

Eму было 43 года.

По данным близких, причиной смерти стали проблемы с сердцем. В последние годы Савович жил с прогрессирующим рассеянным склерозом — заболеванием, о котором он рассказывал публично.

Sm0ke85
()

Как с помощью dpkg удалить упрямый пакет?

 

Точнее я его когда-то удалил тупо из каталога, а теперь понадобилось его удалить из базы dpkg. И вот тут выяснилось, что там внутре думалка и неонка^W^W^W питонячий скрипт который пытается в процессе удаления удалить соответствующие скрипты с реального железа. Собственно это и послужило причиной удаления руками в прошлый раз, т.к. места это чудище жрало под 40гигов.

Так вот, суть проблемы: деинсталлятор пакета написан так, что даже dpkg -P –force-all его не берет. Как сделать так чтоб dpkg забыл нафиг про этот пакет вообще? Просто забыл, как будто его и не было.

# dpkg -P --force-all mantle-mp-mec1
(Reading database ... 378855 files and directories currently installed.)
Removing mantle-mp-mec1 (0.254.6-2-g6ac8b983.modified-0) ...
ERROR: 
        Can't find a suitable configuration file in this directory or any
        parent. Are you in the right directory?

        Supported filenames: docker-compose.yml, docker-compose.yaml
        
dpkg: error processing package mantle-mp-mec1 (--purge):
 installed mantle-mp-mec1 package pre-removal script subprocess returned error exit status 1
+ INSTALL_DIR=/opt/mantle
+ PYENV_DIR=/opt/mantle_pyenv
+ ldconfig
++ id -u epc
+ [[ ! -n 996 ]]
++ id -u epc
+ echo USER_ID=996
+ mkdir -p /opt/mantle/influxdb /opt/mantle/grafana
+ chown -R epc /opt/mantle/influxdb /opt/mantle/grafana
+ python3 -m pip install --upgrade docker-compose==1.26.2
Requirement already up-to-date: docker-compose==1.26.2 in /usr/local/lib/python3.8/dist-packages (1.26.2)
Requirement already satisfied, skipping upgrade: PyYAML<6,>=3.10 in /usr/lib/python3/dist-packages (from docker-compose==1.26.2) (5.3.1)
Requirement already satisfied, skipping upgrade: jsonschema<4,>=2.5.1 in /usr/local/lib/python3.8/dist-packages (from docker-compose==1.26.2) (3.2.0)
Requirement already satisfied, skipping upgrade: python-dotenv<1,>=0.13.0 in /usr/local/lib/python3.8/dist-packages (from docker-compose==1.26.2) (0.19.2)
Requirement already satisfied, skipping upgrade: six<2,>=1.3.0 in /usr/lib/python3/dist-packages (from docker-compose==1.26.2) (1.14.0)
Requirement already satisfied, skipping upgrade: dockerpty<1,>=0.4.1 in /usr/local/lib/python3.8/dist-packages (from docker-compose==1.26.2) (0.4.1)
Requirement already satisfied, skipping upgrade: cached-property<2,>=1.2.0 in /usr/local/lib/python3.8/dist-packages (from docker-compose==1.26.2) (1.5.2)
Requirement already satisfied, skipping upgrade: docker[ssh]<5,>=4.2.2 in /usr/local/lib/python3.8/dist-packages (from docker-compose==1.26.2) (4.4.4)
Requirement already satisfied, skipping upgrade: websocket-client<1,>=0.32.0 in /usr/local/lib/python3.8/dist-packages (from docker-compose==1.26.2) (0.59.0)
Requirement already satisfied, skipping upgrade: requests<3,>=2.20.0 in /usr/lib/python3/dist-packages (from docker-compose==1.26.2) (2.22.0)
Requirement already satisfied, skipping upgrade: texttable<2,>=0.9.0 in /usr/local/lib/python3.8/dist-packages (from docker-compose==1.26.2) (1.6.4)
Requirement already satisfied, skipping upgrade: distro<2,>=1.5.0 in /usr/local/lib/python3.8/dist-packages (from docker-compose==1.26.2) (1.6.0)
Requirement already satisfied, skipping upgrade: docopt<1,>=0.6.1 in /usr/local/lib/python3.8/dist-packages (from docker-compose==1.26.2) (0.6.2)
Requirement already satisfied, skipping upgrade: setuptools in /usr/lib/python3/dist-packages (from jsonschema<4,>=2.5.1->docker-compose==1.26.2) (45.2.0)
Requirement already satisfied, skipping upgrade: attrs>=17.4.0 in /usr/local/lib/python3.8/dist-packages (from jsonschema<4,>=2.5.1->docker-compose==1.26.2) (21.4.0)
Requirement already satisfied, skipping upgrade: pyrsistent>=0.14.0 in /usr/local/lib/python3.8/dist-packages (from jsonschema<4,>=2.5.1->docker-compose==1.26.2) (0.18.1)
Requirement already satisfied, skipping upgrade: paramiko>=2.4.2; extra == "ssh" in /usr/lib/python3/dist-packages (from docker[ssh]<5,>=4.2.2->docker-compose==1.26.2) (2.6.0)
+ mkdir -p /media/tcs/jpg
+ mkdir -p /media/tcs/csv
+ mkdir -p /media/vcs
+ mkdir -p /var/log/mantle
+ mkdir -p /var/opt/ics
+ echo 'loading macros and scripts into CNC...'
loading macros and scripts into CNC...
+ cd /opt/mantle/cnc
+ python3 -c 'import macro_manager; print(macro_manager.cnc_load_all_macros())'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'macro_manager'
dpkg: error while cleaning up:
 installed mantle-mp-mec1 package post-installation script subprocess returned error exit status 1
Processing triggers for libc-bin (2.31-0ubuntu9.18) ...
Errors were encountered while processing:
 mantle-mp-mec1

ckotctvo
()

Безопасно ли делать `rm -rf /tmp/*` ?

 ,

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

den73
()

Стемминг без регулярных выражений, как?

 

Стемминг - убрать из слов окончания и суффиксы, например из «винда» превратить в «винд», из «линуксу» в «линукс». Существуют примеры на других языках использующие регулярное выражения, но мне это хочется сделать на по-символьном анализаторе. Начинал делать, преобразуя логику регвыр в по-символьное движение по строке, но там есть несколько действия вперёд-назад, пока не осилил. Claude выдал вариант на строковых функциях, в общем оптимизация = 0.

AZJIO
()

Некорректное отображение места на диске в Steam

 ,

Недавно перешёл на линукс, в качестве дистрибутива вабрал «Lubuntu» на базе «Ubuntu» В Steam при установку иги почемуто исползование диска 0 Мб/с! Кто с таким сталкивался? Есть ли решения?

IlyshaLubunty
()

LOR-у плохо

 

В 21:00 по МСК стал еле шевелиться и выкидывать 500-ую ошибку nginx. Статистику у юзеров не прогружает. Остальной интернет у меня хорошо работает.

@maxcom, посмотри что там было, если это не ты что-то правишь.

peregrine
()

Команда для перехода на раскладку клавиатуры

 

Ubuntu 24 Нужна команда для перехода на раскладку клавиатуры en Если раскладка и так en команда ничего не делает

Igonik
()

Pine64 прекратила выпуск Linux-устройств из-за дефицита чипов памяти

 , , ,

Subj


Компания Pine64, разрабатывающая одноплатные компьютеры с поддержкой Linux и другие продукты, сообщила о приостановке выпуска устройств. Причина — дефицит комплектующих, прежде всего чипов оперативной и флеш-памяти. Цены на эти компоненты продолжают расти, что создаёт производственные трудности и снижает рентабельность бизнеса.

В официальном заявлении Pine64 говорится, что из-за сформировавшейся нехватки изделий DRAM и eMMC выпуск новых устройств на Linux в ближайшее время не планируется. Будет ли производство возобновлено в обозримом будущем, зависит от цен на эти компоненты после середины 2027 года. При этом компания намерена продолжить поставки решений на базе микроконтроллеров.

«В целом, ситуация с Linux-устройствами не самая радужная, но в магазине PineStore по-прежнему доступны устройства на базе MCU — ассортимент таких продуктов в дальнейшем будет расширяться», — сказано в заявлении Pine64. Таким образом, купить оборудование Pine64 под управлением Linux будет невозможно после исчерпания оставшихся запасов. При этом компания продолжит реализацию таких товаров, как умные часы PineTime, блок питания PinePower и пр.

Между тем другие участники рынка на фоне дефицита чипов памяти вынуждены поднимать цены на свои продукты. В частности, значительно увеличилась стоимость популярных одноплатных компьютеров и вычислительных модулей Raspberry Pi: некоторые решения подорожали сразу на $150. Кроме того, NVIDIA подняла цены на модули Jetson — стоимость отдельных устройств подскочила вдвое. Вместе с тем продолжается стремительный рост цен на SSD корпоративного класса.


Стоило это добро столько, что я даже не знаю, потеряли ли мы что-то

tiinn
()

Безопасность связки ключей и хранение паролей в Linux-ах...

 gnome-keyring-daemon, ,

Впервые задумался об этом, но ведь пароли у многого прикладного ПО лежат в seahorse и его аналогах которые под капотом используют gnome-keyring-daemon и его аналоги в других DE. После того как юзер включает браузер/pgadmin или какой-то другой софт, который хранит там пароли, то всё хранилище ключей становится доступным любому процессу, работающему от пользователя через dbus. Таким образом, простейший скрипт, запущенный от юзера спокойно прочитает и расшифрует любые ключи. Например, для хромого можно штатными средствами вытащить мастер ключ (чтоб не городить огорода с dbus и убедиться что это правда, можно воспользоваться готовым софтом из репы, например secret-tool lookup application chrome). Вернётся мастер ключ, которым хром уже шифрует свои ключи… Зная алгоритм и секретный ключ которым хромой расшифровывает свои ключи, можно их легко вытащить. Т.е. любой вредоносный код, имея только права пользователя спокойно уведёт все ключи у всего прикладного софта в тот момент, когда пользователь разблокирует связку ключей для любой программы. Всё это напомнило мне театр безопасности и дыру невероятных масштабов. Есть ли какие-то способы бороться с этим ужасом? Кроме как не хранить вообще никаких паролей в софте на Linux.

peregrine
()

Старый добрый reddit ВСЁ

 , ,

Сегодня реддит перестал пускать меня на old.reddit.com без логина.

Анонс этой деградации был ещё в июле https://arstechnica.com/gadgets/2026/06/reddit-will-require-you-to-log-in-to-use-old-reddit-com/ и выкатывался постепенно.

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

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

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

Причиной существования old.reddit.com было сопротивление юзеров т.н. enshittification, или по-русски, одерьмовлению сервиса - редкий пример случая, когда пользователи достаточно преданы сервису, чтобы требовать сохранения хороших функций, а менеджмент достаточно гибок, чтобы не разрушать комфорт пользователей ради KPI. Теперь для реддита эти времена прошли.

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

PPS линукс тут при том, что технически вопросы на реддите тоже можно было решить.

PPPS если знаете альтернативы усопшему - делитесь. ЛОР не предлагать, здесь слишком узкий диапазон допустимых тем

legolegs
()

Почему скрипт сам запускается?

 , ,

Сделал такой скрипт для TamperMonkey:

// ==UserScript==
// @name         Вниз
// @namespace    http://tampermonkey.net/
// @version      2026-08-20
// @description  Вниз
// @author       You
// @match        https://...
// @grant        GM_registerMenuCommand
// ==/UserScript==

(function() {
    'use strict';

    let makeScroll = null;
    const step = 500;
    const pause = 100; // мс

    function scrollByX() {
        if ((window.innerHeight + window.scrollY) >= document.body.scrollHeight) {
            clearInterval(makeScroll);
            makeScroll = null;
            console.log("Отмена прокрутки -- уже внизу.");
        } else {
            window.scrollBy(0, step);
            console.log("На", step, "вниз");
        }
    };

    function startRolling () {
        console.log("Запускаю прокрутку");
        if (makeScroll) {
            clearInterval(makeScroll);
            makeScroll = null;
            console.log("Отмена прокрутки -- уже шла.");
        } else {
            makeScroll = setInterval( scrollByX, pause);
            console.log("Прокрутка запущена");
        }
    }

    GM_registerMenuCommand("Прокрутить вниз", startRolling );
    window.addEventListener('keydown', function(event) {
        if (event.altKey && event.code === 'KeyZ') {
            startRolling();
            console.log("Alt-Z");
        }
    } );
})();

Он должен медленно прокрутить страницу вниз (шагами по 500 пикселов за 100 мс), чтобы отработала ленивая загрузка изображений.

Как я понимаю, при загрузке страницы makeScroll — null, и прокрутка не должна начаться, пока я не запущу скрипт из меню или не нажму Alt-Z. Тогда почему при перезагрузке страницы она сразу начинает скроллиться?

ОТВЕТ: Лишние () в GM_registerMenuCommand. Исправил.

question4
()

Из USB-C в DisplayPort: внешнего питания то требует, то не требует

 , powerdelivery,

Есть два ноутбука с USB-C, способным работать в режиме DisplayPort: ThinkPad серии E и ThinkBook.

Есть переходник с USB-C на DisplayPort, у которого на боку есть вход USB-C для подачи питания по PowerDelivery: можно одновременно подключить монитор по DisplayPort и подавать питание для зарядки ноутбука. Такой: https://www.ozon.ru/product/adapter-perehodnik-2-v-1-usb-3-1-type-c-displayport-m-f-bystraya-zaryadka-powerdelivery-f-vcom-4k-193418033/?oos_search=false

Когда подключаю монитор к ThinkPad — всё работает как ожидается: сигнал на монитор идёт; можно подключить блок питания и заряжать ноутбук, а можно отключить и работать от батареек.

А когда подключаю к ThinkBook, то сигнал на монитор поступает, только если переходник запитан от блока питания. Как только отцепляю блок питания — всё, монитор говорит «Нет сигнала», ноутбук говорит «Нет второго дисплея».

Что за феномен? это вообще нормально? Может в системных настройках что-то поправить можно? Пробовал в UEFI переключать настройку для зарядки внешних устройств — «на USB постоянно подавать напряжение», как-то так формулируется. Не помогает.

VladimirP
()

мини-C++ - оценка доли процессорного времени когда бесконечный цикл не выполняется

 , , ,

Столкнулся с нюансами PCIe-устройства, которое при ничего не делании на ровном месте генерировало много irq, а htop показывал что average-загрузка малоядерного CPU 0.4% (при том что драйвер на каждое прерывание что-то делал).

По /proc/interrupts от этого устройства было более 10000 прерываний в секунду, все приходились на 1 ядро.

Оказалось что ubuntu-ядро для «оптимизации» не ведёт учёт времени потраченного в аппаратных прерываниях, и таким образом просто закрывает глаза на то куда «утекают» (перестают быть доступны userspace) вычислительные ресурсы [точнее говоря процессорное время]

Прежде чем пытаться устройство лечить - решил понять, а сколько же на самом деле ресурсов отнято с точки зрения потерь времени, когда вместо исполнения программы ядро процессора занято чем-то другим. Причём, максимально примитивным методом - оценив насколько разнится ожидаемое время выполнения цикла от максимально быстрого, и для уменьшения риска влияния внешних факторов - не использовать никакой runtime (аллокаторы, локали, динамическая загрузка, thread-local-storage, всякие протекторы и прочее) используя для времени rdtsc.

Но, для интереса - в качестве языка - хотелось остаться в рамках относительно современного C++, включая его легковесные функции не привязанные к runtime и оставить код достаточно высокоуровневым. Поскольку без runtime - никакой портабельности, только linux x86_64 с относительно новыми процессорами, компиляция только с определёнными параметрами. Переносимость и не требовалась, всё это только для одной системы.

И вот, что получилось:

// g++ -Wextra -Wall -Os -std=c++20 -fcf-protection=none -fno-stack-protector -static -nostartfiles -Wl,--nmagic -Wl,-z,nosectionheader
#include <sys/syscall.h>
#include <sys/uio.h>
#include <unistd.h>
#include <cstdlib>
#include <charconv>
#include <cstdint>
#include <array>
#include <x86intrin.h>

struct PrintIoVec {
	template <typename T>
	explicit PrintIoVec(T number)
		: inner_ref_iovec(format_buf.begin(),
				std::to_chars(format_buf.begin(), format_buf.end(), number).ptr - format_buf.begin()){};

	template <std::size_t N>
	explicit PrintIoVec(const char (&text)[N]) : inner_ref_iovec((void*)text, N){};

	PrintIoVec(const PrintIoVec&) = delete;
	std::array<char, 22> format_buf;
	const iovec inner_ref_iovec;
};

template <typename... Args>
void println(Args&&... args)
{
	iovec endl = {(char*)"\n", 1};
	syscall(SYS_writev, 1, std::array{PrintIoVec(args).inner_ref_iovec..., endl}.data(), sizeof...(args) + 1);
}

// 16-byte stack alignment ABI assumes that stack is aligned at call site, not at callee
extern "C" void __attribute__((naked)) _start() { __asm__("call stack_aligned_start"); }

const int print_period = 0x10000000;
const int estimation_period = 0x400;

extern "C" void stack_aligned_start()
{
	uint64_t prev_print = 0;
	uint64_t min_diff = UINT64_MAX;
	uint64_t prev[estimation_period] = {};
	for (uint64_t i = 0;;) {
		int idx = ++i % estimation_period;
		uint64_t now = __rdtsc();
		if (i % print_period == 0) {
			if (prev_print) {
				uint64_t actual = now - prev_print;
				uint64_t min_expected = print_period * min_diff / estimation_period;
				uint64_t delay = actual - min_expected;
				println("calibration: TSC per ", estimation_period , " iterations=", min_diff,
								"  process was off-cpu for ", delay * 1000 / actual, "‰");
				min_diff = UINT64_MAX;
			}
			prev_print = __rdtsc();
			continue;
		}
		min_diff = std::min(min_diff, now - prev[idx]);
		prev[idx] = now;
	}
	//_Exit(0); //compiles but effectively unreachable
}

Командой g++ -Wextra -Wall -Os -std=c++20 -fcf-protection=none -fno-stack-protector -static -nostartfiles -Wl,--nmagic -Wl,-z,nosectionheader собирается в ~1500 байт статический бинарник, что кажется вполне адекватным размером для программы которая делает что-то осмысленное.

При работе периодически печатает текущую оценку количества TSC/цикл и собственно оценку доли времени которую программа была вытеснена с активной фазы исполнения в промилле. Адекватность этой оценки проверил запустив несколько экземпляров программы привязанных к одному ядру через taskset 1 ./a.out

Для себя сделал вывод - что C++ всё еще может в минимальные программы) Читабельность - «как всегда у C++», тут ничего не изменилось.

P.S. исходную задачу программа решила: когда устройство входило в шквал прерываний, программа привязанная к тому же ядру где были прерывания показала рост off-cpu-time c ~10 до ~250 промилле.

P.P.S. Да, это можно считать мерялкой «на каком языке можно получить относительно высокоуровневую функцию печати в рамках статического 1500 байт бинарника» ))

GPFault
()

Ghostscript ищет волонтёров с матричным принтером

 ,

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

Изначально драйвер (и стандарт/язык) создавался для принтера Epson LQ-850, но другие производители матричных используют его в своих устройствах, благодаря чему он получил широкое распространение.

В противном случае, в будущих версиях Ghostscript драйвер будет удален (в текущем релиз-кандидате его компиляция отключена по умолчанию), и пользователи не смогут использовать его для печати в следующем LTS-релизе Debian/Ubuntu/whatever LTS.

Коммит с отключенными и еще не удаленными драйверами — все кроме LQ850 мне не известны:
https://github.com/ArtifexSoftware/ghostpdl/commit/63c7dc2dbaaf61f8c31bca561105c70e1e10e2d3

Мой тикет в трекере, где автор хочет, чтобы тестировщики использовали именно принтер, а не вносили изменения в код/автотесты:
https://bugs.ghostscript.com/show_bug.cgi?id=709659

ValdikSS
()

Я открыл свой SQL движок

 , , , ,

Звезды ставить сюда: https://github.com/resetius/qumirdb

Как это сейчас модно, у меня есть нативная интеграция с rust

CREATE MODULE orbital LANGUAGE rust AS $$
#[no_mangle]
pub extern "C" fn orbit_is_neo(a: f64, e: f64) -> bool {
    a * (1.0 - e) < 1.3
}
$$;

CREATE FUNCTION orbit_is_neo(a DOUBLE, e DOUBLE) RETURNS BOOL
SET MODULE TO orbital;

SELECT designation FROM sbdb_objects
WHERE orbit_is_neo(a, e) AND e < 0.3;

А еще с Кумир:

CREATE MODULE orbital
LANGUAGE kumir
AS $$
алг вещ orbit_perihelion_au(вещ a, e)
нач
    знач := a * (1.0 - e)
кон

алг вещ orbit_aphelion_au(вещ a, e)
нач
    знач := a * (1.0 + e)
кон

алг вещ orbit_period_days(вещ a)
нач
    | Третий закон Кеплера для гелиоцентрической орбиты, a в а.е.
    знач := 365.2568983 * sqrt(a * a * a)
кон

алг вещ orbit_mean_motion_deg_day(вещ a)
нач
    знач := 360.0 / orbit_period_days(a)
кон

алг лог orbit_is_neo(вещ a, e)
нач
    знач := orbit_perihelion_au(a, e) < 1.3
кон
$$;

SELECT
    a.designation,
    t.timestamp AS timestamp,
    a.m + orbit_mean_motion_deg_day(a.a) * (t.timestamp - a.epoch) AS mean_anomaly,
    orbit_perihelion_au(a.a, a.e) AS perihelion_au,
    orbit_aphelion_au(a.a, a.e) AS aphelion_au
FROM unnumbered_asteroids a
CROSS JOIN timestamps t
WHERE
    orbit_is_neo(a.a, a.e)
    AND a.e < 0.1
    AND t.timestamp >= 61564
    AND t.timestamp < 61565
    limit 10;

Работают сколько угодно сложные запросы

with ws as
  (select d_year AS ws_sold_year, ws_item_sk,
    ws_bill_customer_sk ws_customer_sk,
    sum(ws_quantity) ws_qty,
    sum(ws_wholesale_cost) ws_wc,
    sum(ws_sales_price) ws_sp
   from web_sales
   left join web_returns on wr_order_number=ws_order_number and ws_item_sk=wr_item_sk
   join date_dim on ws_sold_date_sk = d_date_sk
   where wr_order_number is null
   group by d_year, ws_item_sk, ws_bill_customer_sk
   ),
cs as
  (select d_year AS cs_sold_year, cs_item_sk,
    cs_bill_customer_sk cs_customer_sk,
    sum(cs_quantity) cs_qty,
    sum(cs_wholesale_cost) cs_wc,
    sum(cs_sales_price) cs_sp
   from catalog_sales
   left join catalog_returns on cr_order_number=cs_order_number and cs_item_sk=cr_item_sk
   join date_dim on cs_sold_date_sk = d_date_sk
   where cr_order_number is null
   group by d_year, cs_item_sk, cs_bill_customer_sk
   ),
ss as
  (select d_year AS ss_sold_year, ss_item_sk,
    ss_customer_sk,
    sum(ss_quantity) ss_qty,
    sum(ss_wholesale_cost) ss_wc,
    sum(ss_sales_price) ss_sp
   from store_sales
   left join store_returns on sr_ticket_number=ss_ticket_number and ss_item_sk=sr_item_sk
   join date_dim on ss_sold_date_sk = d_date_sk
   where sr_ticket_number is null
   group by d_year, ss_item_sk, ss_customer_sk
   )
 select 
ss_sold_year, ss_item_sk, ss_customer_sk,
round(ss_qty/(coalesce(ws_qty,0)+coalesce(cs_qty,0)),2) ratio,
ss_qty store_qty, ss_wc store_wholesale_cost, ss_sp store_sales_price,
coalesce(ws_qty,0)+coalesce(cs_qty,0) other_chan_qty,
coalesce(ws_wc,0)+coalesce(cs_wc,0) other_chan_wholesale_cost,
coalesce(ws_sp,0)+coalesce(cs_sp,0) other_chan_sales_price
from ss
left join ws on (ws_sold_year=ss_sold_year and ws_item_sk=ss_item_sk and ws_customer_sk=ss_customer_sk)
left join cs on (cs_sold_year=ss_sold_year and cs_item_sk=ss_item_sk and cs_customer_sk=ss_customer_sk)
where (coalesce(ws_qty,0)>0 or coalesce(cs_qty, 0)>0) and ss_sold_year=2000
order by 
  ss_sold_year, ss_item_sk, ss_customer_sk,
  ss_qty desc, ss_wc desc, ss_sp desc,
  other_chan_qty,
  other_chan_wholesale_cost,
  other_chan_sales_price,
  ratio
limit 100;

Есть как нативное исполнение так и в браузере: https://db.qumir.dev

Reset
()

Dolphin не хочет подключаться к сетевой папке windows

 , ,

Захожу через dolphin в раздел «сеть», он обнаруживает несколько windows-машин в локалке.

При попытке подключения к любой из них требует пароль. Хотя на них пароль для подключения не стоит.

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

smb://PC/share

Но он опять требует пароль для подключения. При попытке указать пустой пароль, «guest» и т.д. - всё равно не подключает.

Отчаянные поиски в сети ни к чему не привели.

З.Ы. - smbclient спокойно подключается без пароля, проблема где-то в dolphin-е.

svidrigaylov
()

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