LINUX.ORG.RU

Форум

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

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

Казаки: Снова Война 1.52 — теперь в браузере и на всех основных платформах

 , ,

Приветствую всё сообщество ЛОР!

Рад сообщить, что спустя год работы мне удалось успешно портировать культовую игру «Казаки: Снова война» в браузер, а также подготовить Electron-сборки для основных платформ.

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

Подробности и полное описание проекта доступны в моём репозитории: https://github.com/MisterCoderman/cossacks-1.52-platform

Новость о проекте годичной давности: Казаки: Снова Война 1.52

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

MR_CODERMAN
()

Samsung galaxy tab e update is possible?

 ,

Завалялся Samsung galaxy tab e вкл. А он сайты не открывает google play account ни как не срабатывает. Как этот galaxy довести до рабочего состояния?

Перемещено dataman из linux-install

saufesma
()

Десктоп перестал корректно выключаться

 ,

Добрый день!

Дано: Gentoo, openrc, ryzen 5950x, radeon 6700xt, ядро 7.1.3, kde plasma.

Симптомы: я жму «завершение работы -> выключение» в кедах, система завершает работу, после того, как экран погас, вентиляторы продолжают крутиться. Стало проявляться после перехода с ядра 7.0 на 7.1.

Куда вообще копать? Гугл советует добавить опции acpi=force amd_pstate=active в загрузчик, что я и сделал. Не помогло.

Кусок логов из /var/log/syslog после /sbin/shutdown -r now, как будто бы, ничего необычного не содержит, перезагрузка из консоли происходит корректно:

Jul 15 16:37:45 redstar shutdown[5621]: shutting down for system reboot
Jul 15 16:37:45 redstar init: Switching to runlevel: 6
Jul 15 16:37:45 redstar init: Trying to re-exec init
Jul 15 16:37:45 redstar supervise-daemon[2671]: stopping /usr/libexec/rc/bin/openrc-user, pid 2672
Jul 15 16:37:45 redstar supervise-daemon[2671]: Will stop PID 2672
Jul 15 16:37:45 redstar supervise-daemon[2671]: Sending signal 15 to PID 2672
Jul 15 16:37:45 redstar start-stop-daemon[5788]: Will stop /usr/sbin/smartd
Jul 15 16:37:45 redstar start-stop-daemon[5788]: Will stop PID 2549
Jul 15 16:37:45 redstar start-stop-daemon[5788]: Sending signal 15 to PID 2549
Jul 15 16:37:45 redstar smartd[2549]: smartd received signal 15: Terminated 
Jul 15 16:37:45 redstar smartd[2549]: smartd is exiting (exit status 0) 
Jul 15 16:37:45 redstar start-stop-daemon[5908]: Will stop /usr/sbin/rasdaemon
Jul 15 16:37:45 redstar start-stop-daemon[5908]: Sending signal 15 to PID 2336
Jul 15 16:37:45 redstar rasdaemon: Huh! something got wrong. Aborting. 
Jul 15 16:37:45 redstar start-stop-daemon[5970]: Will stop /usr/bin/earlyoom
Jul 15 16:37:45 redstar start-stop-daemon[5970]: Will stop PID 2267
Jul 15 16:37:45 redstar start-stop-daemon[5970]: Sending signal 15 to PID 2267
Jul 15 16:37:45 redstar start-stop-daemon[6001]: Will stop /usr/sbin/cupsd
Jul 15 16:37:45 redstar start-stop-daemon[6001]: Will stop PID 2239
Jul 15 16:37:45 redstar start-stop-daemon[6001]: Sending signal 15 to PID 2239
Jul 15 16:37:45 redstar start-stop-daemon[6031]: Will stop PID 2206
Jul 15 16:37:45 redstar start-stop-daemon[6031]: Sending signal 15 to PID 2206
Jul 15 16:37:45 redstar chronyd[2206]: chronyd exiting
Jul 15 16:37:45 redstar start-stop-daemon[6181]: Will stop /usr/bin/sddm
Jul 15 16:37:45 redstar start-stop-daemon[6181]: Will stop PID 2138
Jul 15 16:37:45 redstar start-stop-daemon[6181]: Sending signal 15 to PID 2138
Jul 15 16:37:45 redstar pam_openrc[yura][2635]: stopping session
Jul 15 16:37:45 redstar pam_openrc[yura][2635]: -1 sessions
Jul 15 16:37:45 redstar obexd[6187]: OBEX daemon 5.86
Jul 15 16:37:46 redstar start-stop-daemon[6307]: Will stop /usr/sbin/gpm
Jul 15 16:37:46 redstar start-stop-daemon[6307]: Will stop PID 2099
Jul 15 16:37:46 redstar start-stop-daemon[6307]: Sending signal 15 to PID 2099
Jul 15 16:37:46 redstar start-stop-daemon[6363]: Will stop PID 1961
Jul 15 16:37:46 redstar start-stop-daemon[6363]: Sending signal 15 to PID 1961
Jul 15 16:37:46 redstar NetworkManager[1961]: <info>  [1784122666.1985] caught SIGTERM, shutting down normally.
Jul 15 16:37:46 redstar NetworkManager[1961]: <info>  [1784122666.1989] dhcp4 (eno1): canceled DHCP transaction
Jul 15 16:37:46 redstar NetworkManager[1961]: <info>  [1784122666.1989] dhcp4 (eno1): activation: beginning transaction (timeout in 45 seconds)
Jul 15 16:37:46 redstar NetworkManager[1961]: <info>  [1784122666.1990] dhcp4 (eno1): state changed no lease
Jul 15 16:37:46 redstar NetworkManager[1961]: <info>  [1784122666.1990] manager: NetworkManager state is now CONNECTED_SITE
Jul 15 16:37:46 redstar dbus-daemon[1565]: [system] Activating service name='org.freedesktop.nm_dispatcher' requested by ':1.1' (uid=0 pid=1961 comm="/usr/sbin/NetworkManager --pid-file /run/NetworkMa" label="kernel") (using servicehelper)
Jul 15 16:37:46 redstar NetworkManager[1961]: <info>  [1784122666.1997] device (wlp10s0): state change: disconnected -> unmanaged (reason 'unmanaged-quitting', managed-type: 'full')
Jul 15 16:37:46 redstar dbus-daemon[1565]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Jul 15 16:37:46 redstar NetworkManager[6383]: status: stopping
Jul 15 16:37:46 redstar NetworkManager[1961]: <info>  [1784122666.2373] device (wlp10s0): set-hw-addr: reset MAC address to 38:D5:7A:A4:B7:DD (unmanage)
Jul 15 16:37:46 redstar NetworkManager[1961]: <info>  [1784122666.3611] exiting (success)
Jul 15 16:37:46 redstar kernel: NetworkManager (1961) used greatest stack depth: 10688 bytes left
Jul 15 16:37:46 redstar NetworkManager[6398]: status: stopping
Jul 15 16:37:46 redstar start-stop-daemon[6426]: Will stop PID 1594
Jul 15 16:37:46 redstar start-stop-daemon[6426]: Sending signal 15 to PID 1594
Jul 15 16:37:46 redstar kernel: elogind-daemon (1594) used greatest stack depth: 10320 bytes left
Jul 15 16:37:46 redstar start-stop-daemon[6470]: Will stop /usr/sbin/syslogd
Jul 15 16:37:46 redstar start-stop-daemon[6470]: Will stop PID 1932
Jul 15 16:37:46 redstar syslogd[1932]: exiting on signal 15
Jul 15 16:38:21 redstar syslogd[1917]: syslogd v2.7.2: restart.
Jul 15 16:38:21 redstar syslogd[1917]: Created UNIX socket /dev/log
Jul 15 16:38:09 redstar kernel: Linux version 7.1.3-gentoo (root@redstar) (gcc (Gentoo 15.3.0 p8) 15.3.0, GNU ld (Gentoo 2.46.0 p1) 2.46.0) #4 SMP PREEMPT_DYNAMIC Wed Jul 15 13:51:50 MSK 2026
Jul 15 16:38:09 redstar kernel: Command line: BOOT_IMAGE=gen713 ro acpi=force amd_pstate=active root=/dev/sda1
Jul 15 16:38:09 redstar kernel: KERNEL supported cpus:
Jul 15 16:38:09 redstar kernel:   Intel GenuineIntel
Jul 15 16:38:09 redstar kernel:   AMD AuthenticAMD[\code]

yura_ts
()

Ошибка Xiaomi MiMoCode

 , , , ,

При попытке запуска свежеустановленного Xiaomi MiMo Code на MX Linux XFCE4 выдает: «Недопустимая инструкция» и завершается.
Что это значит?

Mishahack
()

Как положено делать паузу в JavaScript?

 , ,

Есть вот такой скрипт: https://github.com/ianoxley/open-selected-links/blob/master/open-selected-links.user.js Открывает в новых табах ссылки при их выделении с зажатым Ctrl. Судя по всему, предназначался для страницы поиска Гугла.

Большинство сайтов не любят, когда кто-то открывает десятки страниц одновременно. Поэтому между вызовами GM_openInTab в цикле в функции openSelectedLinks (строка 39) нужно сделать паузу несколько секунд.

Погуглил как делать паузу на джаваскрипте и запутался. Что такое async и await? Когда вызов setTimeout остановит скрипт, а когда — нет?

ОТВЕТ: Для паузы 10 с нужно заменить вызов GM_openInTab(selectedLinks[i].href) на setTimeout(_ => GM_openInTab(selectedLinks[i].href), 10000*(selectedLinks.length-i))

Пока получился такой скрипт:

// ==UserScript==
// @name         open-selected-links
// @namespace    http://tampermonkey.net/
// @version      2026-07-15
// @description  Opens selected links in new tabs
// @author       ianoxley
// @match        *
// @grant        GM_openInTab
// ==/UserScript==

(function() {
    'use strict';

    document.addEventListener('keydown', function(e) {
        const ctrlKeyCode = 17;
        const cmdKeyCode = 224;

        if (e.keyCode == ctrlKeyCode || e.keyCode == cmdKeyCode) {
            document.addEventListener('mouseup', openSelectedLinks, true);
        }
    }, true);

    // Remove the mousedown handler so it doesn't open links just by selecting text *without* ctrl / cmd
    document.addEventListener('keyup', function(e) {
        document.removeEventListener('mouseup', openSelectedLinks, true);
        }, true);

    function openSelectedLinks(e) {
        const selection = window.getSelection();
        if (selection) {
            const selectedLinks = selection.getRangeAt(0).cloneContents().querySelectorAll('a');

            const n = selectedLinks.length;
            for (let i = n-1; i >= 0; --i) {
                setTimeout(_ => GM_openInTab(selectedLinks[i].href), 10000 * (n - i));
            } // timers open new tabs once per 10 000 ms
        }
    }
})();

Нормально работает, если выделять текст с конца — снизу вверх справа налево. Если сверху вниз — иногда открывает ссылки в обратном порядке.

question4
()

Сравнение отзывчивости ввода в X11 и Wayland

 , ,

https://www.opennet.ru/opennews/art.shtml?num=65901

Опубликованы результаты тестирования задержек при использовании устройств ввода в играх, запускаемых в окружениях на базе X11 и Wayland. Дополнительно оценено влияние включения адаптивного изменения частоты обновления экрана (VRR, G-Sync) и использования вместо DXVK форка dxvk-low-latency с оптимизациями для снижения задержек. Тестирование подтвердило встречающиеся в среде игроков мнение, что окружения на базе X11 позволяют добиться более высокой отзывчивости ввода, чем при использовании Wayland. Также подтверждено благотворное влияние на отзывчивость включения VRR и применения dxvk-low-latency.

Измерение задержек проведено с использованием самодельного аппаратного устройства на базе микроконтроллера Raspberry Pi RP2040 и фотодиода, которое симулирует USB-мышь и измеряет время между генерируемым кликом и изменением яркости экрана. Тестирование осуществлялось на компьютере с CPU AMD Ryzen 7 5800X3D и GPU NVIDIA GeForce RTX 4070 SUPER. В качестве дистрибутива использовался CachyOS с ядром Linux 7.1.3, проприетарным драйвером NVIDIA 610.43.03 и рабочим столом KDE Plasma 6.7.2.

Измерение производилось в Windows-игре Diabotical на базе графического API DirectX 11, запускаемой через пакет Proton 11.0. Во всех тестах позиция игрока и состояние игры повторялись, в игре также были отключены боты и не выполнялось перемещение игрока. В каждом тесте выполнялось три итерации по 100 симулированных кликов. Каждый автоматизированный клик скрывал HUD-интерфейс с белым фоном, что приводило к большому изменению ярости, фиксируемому самодельным измерителем.

Наименьших задержек удалось добиться в сочетании X11 с VRR и dxvk-low-latency — 4.21 мс. На втором месте оказалась конфигурация Wayland + VRR + dxvk-low-latency — 4.38 мс. Средняя задержка при использовании чистого X11 составила 4.79 мc, а Wayland — 4.93 мс. Разница в 0.14 и 0.22 мс отмечена как слишком незначительная для распознавания игроками. Предполагается, что благодаря инициативам по оптимизации KWin отставание Wayland от X11 в ближайшее время сократится.

VRR и dxvk-low-latency несущественно снижают задержки, но помимо задержек их применение сужает разброс значений, сглаживает пики производительности, выравнивает FPS и делает задержки более предсказуемыми в реальных условиях, в которых нагрузка на GPU и CPU постоянно меняется.

Наихудшие показатели оказались у XWayland — 8.06 мс и связки XWayland c dxvk-low-latency — 5.95 мс. Разница в задержках при использовании XWayland уже более заметная, поэтому в пользовательских окружениях на базе Wayland рекомендуется запускать Proton с включением экспериментальной поддержки Wayland, активируемой через выставление переменной окружения PROTON_ENABLE_WAYLAND=1.

Evgueni
()

Digikam, exif description кракозябры

 ,

Привет.

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

Exif поддерживает только ascii в описании. Xmp же поддерживает юникод. Если просто добавлять как есть, то в exif показываются кракозябры, если смотреть в других просмотрщиках.

Пробовал отключить запись описательных тегов вообще (Metadata -> Advanced -> Write options убрал все, кроме xmp для Captions, Title, Tags), но digikam упорно продолжает их писать, даже если вручную их удалить.

Включена галка Delegate to ExifTool backend all operations. Впрочем, без нее все так же.

Как решить проблему?

MoldAndLimeHoney
()

Синдром NIH 2026г.

 , , ,

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

Вводные: Есть некоторый restful API сервис, который написан серьёзными энтерпрайз разработчиками на Джаве. Spring Boot, КроликЭмКу, стандартный набор батареек, ну и аппаратные устройства, назовём их вычислительные устройства (ВУ). Этот сервис активно работает в проде, проблемы есть но в основном из-за запутанности (корпоративно-исторически обусловленной запутанности) архитектуры и неидеальности оперативной организации труда этих энтерпрайз разрабов. Но в общем и целом - ничего экстраординарного для реального опыта проблем в индустрии. Но зависть к ребятам большая, типа они разрабы, а мы - их клиенты.

Но ребята типа дорогие, а бизнес всегда хочет сэкономить, тем более кризис экономики… Возникает идея («ты ж программист!»), типа, для новых проектов, где не самые пиковые нагрузки, слепим что-то попроще, без очередей сообщений, без кровавого джава-энтерпрайза, просто возьмём где можно опенсорс батарейки, слепим, протестируем - и ОК. На Питоне. Сказано - сделано, и оно даже работает, и клиенты счастливы.

Но вот, в один прекрасный день, поступает предложение. Переписать прокладку между собственно веб-сервисом и ВУ с Питона на C. Мотицация - не хотим использовать опенсорс-обёртку, мало ли кто там её разрабатывает? а вдруг он завтра под поезд попадёт, и мы не сможем эту обёртку поддерживать. А атаки на каналы поставки, официальную репу PyPI, и вот это всё не наше хозяйство? И вообще, Питон медленный, переусложнённый и не готов для промышленного применения. Перепишем эту обёртку на C. На вопрос «а если потом таки будем очередь сообщений добавлять, то в неё писать и из неё читать тоже на сишке?» следует ответ «ну конечно!»

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

Предлагаю C++. Опять воротят нос, мол после стандарта образца xyz года там такого наворотили, что чёрт ногу сломит. Говорю «а кто-то заставляет непременно фичи новых стандартов использовать?» В ответ тишина. Не подходят людям технологические достижения в языках высокого уровня за последние 50 лет. Предпочитают ковбойский сишный наскок, а там - будь, что будет…

Как с такими людьми работать?

seiken
()

Ghost Font — шрифт, который люди читают, а «ИИ» не может

 anti-ai, ghost font, , как это развидеть,

ТГ-канал «Джейпег Малевича» пишет:

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

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

Разработчик протестировал шрифт на GPT Sol 5.6 Ultra и Claude Fable — обе модели не смогли правильно расшифровать сообщение и увидели ложный текст, который специально встроили в видео.

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

dataman
()

RezzOS: помогите, пожалуйста с разработкой

 

Это легковесный дистрибутив на базе пакетов Alpine. Я хочу добавить графический интерфейс (XLibre), но это слишком сложно. Есть желающие помочь?

Репозиторий на GitHub

neko-qt
()

Что здесь можно сократить?

 , ,

У одного известного сайта конфликт с черногорским(?) регистратором доменов. В результате ему пришлось срочно переехать с домена t.me, на домен telegram.me. Часть веб-страниц поломалась, т.к. пытаются качать IFRAME-ы со старого домена.

Гугло-ИИ предложил короткий скрипт, который работал, но высота IFRAME была неверной. После долгой беседы DeepSeek выдал такой скрипт:

// ==UserScript==
// @name         t.me corrector
// @namespace    http://tampermonkey.net/
// @version      2026-07-14
// @description  replace "t.me" with "telegram.me"
// @author       DeepSeek
// @match        https://telegram.me/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Функция замены домена
    function replaceDomain(url) {
        try {
            const urlObj = new URL(url, window.location.href);
            if (urlObj.hostname.includes('t.me')) {
                urlObj.hostname = urlObj.hostname.replace(/t\.me/g, 'telegram.me');
                return urlObj.toString();
            }
        } catch (_) {}
        return url.replace(/t\.me/g, 'telegram.me');
    }

    // Функция подстройки высоты одного iframe
    function autoHeightIframe(iframe) {
        // Сначала убираем прокрутку и задаём начальную высоту
        iframe.style.overflow = 'hidden';
        //iframe.scrolling = 'no'; // для старых браузеров
        iframe.style.height = '100px'; // временная, чтобы сработало

        const adjustHeight = () => {
            try {
                // Доступ к содержимому возможен, т.к. домен совпадает
                const doc = iframe.contentDocument || iframe.contentWindow.document;
                if (!doc) return;

                // Вычисляем высоту содержимого (body + margin)
                const body = doc.body;
                const html = doc.documentElement;
                const height = Math.max(
                    body.scrollHeight,
                    body.offsetHeight,
                    html.clientHeight,
                    html.scrollHeight,
                    html.offsetHeight
                );

                // Устанавливаем новую высоту с небольшим запасом (опционально)
                iframe.style.height = height + 'px';
            } catch (e) {
                // Если доступ запрещён (неожиданно) – игнорируем
            }
        };

        // Подстраиваем после полной загрузки iframe
        iframe.addEventListener('load', () => {
            adjustHeight();
            // Настраиваем отслеживание изменений внутри iframe
            //setupObservers(iframe);
        });

        // Если iframe уже загружен (например, src установлен ранее)
        if (iframe.contentDocument && iframe.contentDocument.readyState === 'complete') {
            adjustHeight();
            //setupObservers(iframe);
        }
    }

    /*
    // Настройка наблюдателей за изменениями внутри iframe
    function setupObservers(iframe) {
        try {
            const doc = iframe.contentDocument;
            if (!doc) return;

            const target = doc.body;
            if (!target) return;

            // 1. ResizeObserver – отслеживает изменение размера элементов
            if (window.ResizeObserver) {
                const resizeObserver = new ResizeObserver(() => {
                    // При изменении размера пересчитываем высоту
                    const height = Math.max(
                        doc.body.scrollHeight,
                        doc.documentElement.scrollHeight,
                        doc.body.offsetHeight,
                        doc.documentElement.offsetHeight
                    );
                    iframe.style.height = height + 'px';
                });
                resizeObserver.observe(target);
                // Также наблюдаем за html, так как изменения могут быть там
                resizeObserver.observe(doc.documentElement);
            }

            // 2. MutationObserver – отслеживает добавление/удаление узлов
            const mutationObserver = new MutationObserver(() => {
                // Пересчёт высоты после изменения DOM
                const height = Math.max(
                    doc.body.scrollHeight,
                    doc.documentElement.scrollHeight,
                    doc.body.offsetHeight,
                    doc.documentElement.offsetHeight
                );
                iframe.style.height = height + 'px';
            });
            mutationObserver.observe(target, {
                childList: true,
                subtree: true,
                attributes: true,
                attributeFilter: ['style', 'class', 'height', 'width']
            });
        } catch (e) {
            // Если доступ запрещён – игнорируем
        }
    }
    */

    // Обработка одного элемента
    function processElement(el) {
        if (el.tagName === 'IFRAME') {
            // Заменяем src у iframe
            const src = el.getAttribute('src');
            if (src && src.includes('t.me')) {
                el.setAttribute('src', replaceDomain(src));
                // После замены src запускаем подстройку высоты
                autoHeightIframe(el);
            }
            return; // Не обрабатываем другие атрибуты у iframe
        }

        // Для остальных элементов заменяем href, src, action
        const attrs = ['href', 'src', 'action'];
        for (const attr of attrs) {
            if (el.hasAttribute(attr)) {
                const value = el.getAttribute(attr);
                if (value.includes('t.me')) {
                    el.setAttribute(attr, replaceDomain(value));
                }
            }
        }
    }

    // Обработка всех существующих элементов
    function processAllElements() {
        document.querySelectorAll('[href], [src], [action]').forEach(processElement);
    }

    // Запуск после загрузки DOM
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', processAllElements);
    } else {
        processAllElements();
    }

    /*// Наблюдаем за динамически добавляемыми элементами
    const observer = new MutationObserver((mutations) => {
        for (const mutation of mutations) {
            for (const node of mutation.addedNodes) {
                if (node.nodeType === Node.ELEMENT_NODE) {
                    processElement(node);
                    node.querySelectorAll('[href], [src], [action]').forEach(processElement);
                }
            }
        }
    });
    observer.observe(document.body, {
        childList: true,
        subtree: true
    });*/
})();

Что в нём можно сократить? Помимо вызова observer.

UPD: В итоге досокращал до:

(function() {
    'use strict';

    const elements = document.querySelectorAll('iframe');
    // console.log(elements)
    elements.forEach((frame, index) => {
        if (frame.src.startsWith('https://t.me/')){
            // console.log(frame.src);
            frame.src = frame.src.replaceAll('://t.me/', '://telegram.me/');
            const adjustHeight = () => {
                const doc = frame.contentDocument || frame.contentWindow.document;
                const height = Math.max(doc.body.scrollHeight, doc.body.offsetHeight, doc.documentElement.clientHeight, doc.documentElement.scrollHeight, doc.documentElement.offsetHeight);
                frame.style.height = height + 'px';
            };
            frame.addEventListener('load', () => {
                adjustHeight();
            });
        };
    });
})();

Ничего важного не потерял?

question4
()

Что происходит с популярностью Go?

 ,

Примерно с лета прошлого года популярность языка программирования Go неуклонно падает. По крайней мере если верить индексам TIOBE и PYPL. В начале прошлого года Go входил в первую десятку самых популярных языков программирования, но сейчас он уже во второй десятке - ближе к её нижней границе. Если TIOBE и PYPL не отражают действительность, то какие другие индексы отражают её лучше? Хотя на https://langpop.com/ Go всё ещё в первой десятке. Что вообще происходит с Go и каковы ваши прогнозы на ближайшие пару лет?

Ну и чтобы два раза не вставать, дополнительный вопрос. Один из конкурентов Go - это JavaScript/TypeScript на платформе node.js. Когда популярность Go росла, значительный процент новых программистов на Go был представлен теми, кто переходил на него с JS/TS. Однако если сейчас посмотреть на объявления о работе (живу не в России), то там какое-то засилие именно JS/TS, причём в основном это молодые компании и стартапы. Можно ли это объяснить банальной экономией на найме, когда одни и те же люди делают и бэкэнд и фронтэнд? Иначе я никак не могу понять тягу к языку, в котором нет нормальной параллельности и вообще куча костылей и легаси.

Update: большой брат подслушал и порекомендовал в ютубе: www.youtube.com/shorts/Vh97uPhmhqI

hummer
()

Проблемы с арчем, х11 и разрешение экрана

 

Всем привет, сегодня установил Арч, на мое железо, видеокарта Nvidia 1060, при входе я не смогу поменять Wayland на x11, а так же у меня поставилось сразу разрешение экрана 4:3-800/600, как исправить помогите

crow123
()

девопс по вызову

 

в питере у меня есть парк серверов, прям железных. а я не в питере. и вся команда девопс не в питере.

проблема которая есть прям щас: техник вставил 5 сетевух в 5 серверов и сеть не поднялась.

как я вижу задачу: днем придти в офис, там проведут и надо в созвоне с нашим девопсом прожать нужные кнопки.

питер, комендантский проспект.

есть тут кто поможет..?

Rastafarra
()

Zabbix 7.0 Не получается сформировать отчет

 

Добрый день. Необходимо формировать и выгружать ежемесячные отчеты о мониторинге безопасности.

  1. На сервере Zabbix установлены браузеры Яндекс и Гугл Хром.

  2. На сервере под ОС Альт Рабочая станция 10.4 поправила файл zabbix_server.conf, а именно откорректировала следующий текст: StartReportWriters=3 WebServiceURL=http://localhost:10053/report

  3. Для файла zabbix_web_service.conf проверила чтобы был указан параметр AllowedIP=127.0.0.1,::1

  4. Зашла на вэб-сервер, там в разделе Администрирование - Общие - Другие, для пункта «URL веб-интерфейса» добавила запись «http://localhost:10053/report». Все изменения сохранила, перезапустила службу zabbix

  5. При попытке сгенерировать тестовый отчет появляется следующая ошибка:

"Ошибка при генерации отчета.

Cannot fetch data.: chrome failed to start:

mkdir: невозможно создать каталог «/dev/null»: Это не каталог

touch: невозможно выполнить touch для ‘/dev/null/.local/share/applications/mimeapps.list’: Это не каталог

chrome_crashpad_handler: –database is required

Try ‘chrome_crashpad_handler –help’ for more information.

[1059552:1059552:0713/165820.664435:ERROR:third_party/crashpad/crashpad/util/linux/socket.cc:120] recvmsg: Соединение разорвано другой стороной (104).

В терминала проверяла следующее:

$ls -ld /dev/null

crw-rw-rw- 1 root root 1, 3 июл 10 11:38 /dev/null

Очищала кэш браузера - ошибка не уходит.

Уже и комп перегрузила, и браузеры переустановила, запускаю генерацию отчета на Хроме и все равно эта ошибка вылизит. Что еще я упустила, как победить эту ошибку?

Natalia_509
()

проблемы с инетом

 , , , ,

Помогите, случайно передал права / обвчному пользователю и сичтема сломалась частично, яерез рекавери мод починил команду судо, она не работала но интернет также не робит, неронка от клацда хаику 4.5 не спрввилась, некоторым другим папкам также вернул управление к рут по типу /var /etc и т.д. система в общем работает, но инета нема, ран

likerila
()

Долгий mount cifs, error 115

 , ,

ОС Редос, в домене MS AD. Посредством pam_mount монтируется корень DFS в файловую систему, всё ОК, всё работает. Но в корне DFS есть одна ссылка, серверы которой недоступны по порту 445. И caja при заходе начинает начитывать эти папки и становится раком. Через 2-3 минуты получаю ошибку: cifs mount failed with rerurn code 115: operation in progress. Понятно, что сетевая проблема, но блин, таймаут 3 минуты!

  1. Есть ли способ уменьшить время таймаута для mount?
  2. Есть ли способ заставить caja не лезть в подкаталоги при открытии каталога?

ЗЫЖ mc - то же поведение. А вот far2l - всё ОК, залипание происходит только при явной попытке зайти в этот проблемный каталог.

Deepdig
()

Какова примерно высота потолка должна быть, чтобы подвесить стандартный маятник Фуко?

 

Подскажите, насколько высоким должен быть потолок?

pacify
()

Скачать все версии одного файла

 

Есть проект на Гитхабе, там файл со справочной таблицей в CSV, старые версии которой могут быть полезны. Может ли git как-то выкачать все коммиты для заданного файла, не качая всё остальное? Нагугленные рецепты требуют клонировать всё.

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

Пока предложили следующее:

git clone --filter=blob:none --no-checkout https://github.com/{owner}/{project}
cd {project}
git sparse-checkout set <path/to/file>
git checkout

Хеши коммитов: git log --pretty=format:"%h" path/to/file > hashes.txt

И файл для каждого: git show $hash:path/to/file > $hash.txt

Но извлечение по одному файлу по хешу через git show получается довольно медленно — ~55 файлов в минуту. Хотелось бы побыстрее.
UPD: Чем старее коммит, тем медленнее. 30 000-е извлекаются со скоростью ~14 файлов в минуту, хотя файлы на порядок меньше объёмом.

UPD2: Создание *.patch файлов: git format-patch --root -o /path/to/patches-directory path/to/file — работает гораздо быстрее и надёжнее. Но для больших объёмов нужно увеличить параметр ядра vm.max_map_count: sysctl -w vm.max_map_count=... от рута. (По умолчанию 65530.)

question4
()

Иконка уведомлений теряется и логика уведомлений

 , , ,

@maxcom

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

И про иконку вместо текста (как раньше) - теряется. Она серая и невзрачная, вообще не сразу взгляд ее замечает. И в целом верхний UI не единообразный: текстовые ссылки яркие и притягивающие взгляд, а иконке справа малозаметные. Лучше либо как было раньше, либо все в иконки перевести и поменять цвет на более яркий.

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

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

rumgot
()

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