LINUX.ORG.RU

Форум

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

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

ИИ и победа security through obscurity

 , , ,

Долгие годы открытый код GNU/Linux и *BSD являлся, помимо этического инструмента, чтобы сделать мир лучше, и денежного фактора, снижающего стоимость разработки для корпораций, ещё и фактором, что положительно влиял на безопасность – код смотрели многие, что помогало патчить уязвимости.

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

В то время как код проприетарных ОС ему недоступен, и серьезных утечек не было уже давно, по крайней мере у MS.

В результате получается так, что вполне возможно, что сегодня Microsoft Windows с установленным антивирусом и обновлениями – более защищенная ОС, чем типовый Linux вроде Ubuntu LTS или RHEL со всеми патчами.

Security through obscurity победил, ИИ оказался сильней СПО. Но возможно, что я и ошибаюсь… начинаем срач дискуссию!

Vsevolod-linuxoid
()

Принцип построения отказоустойчивой сети в рамках одной серверной

 , , ,

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

Стойка:

Короче, допустим у нас есть стойка, в стойке 10 серверов, допустим штатная пропускная способность сети одного сервера 1G, тогда нам надо, чтобы у каждого сервера было по 2 eth с пропускной способностью 1G каждый интерфейс, далее у нас в стойке стоит 2 коммутатора, каждый сервер подключен eth1 -> switch-1, eth2 -> switch2, при этом эти 2 коммутатора объединены в один логический и оба линка от каждого сервера объединены в один логический со скоростью 2G (получается, что в штатном режиме каждый провод загружен на 50%.

Коммутаторы в сойке:

Теперь что касается коммутаоров, каждый downlink на нем 1G, всего 10 даунлинков на каждом коммутаторе в стойке. Суммарный трафик на каждом коммутаторе 10G, между коммутаорами линк на 40G +5-10% на служебный трафик и этот интерлинк тоже должен состоять из 2-х физических линков, каждый по 20G, так как в случае аварии, там как раз пойдет трафик в 20G.

Агрегационные коммутаторы:

теперь выше у нас должно быть 2 коммутатора агрегации, если стоек не одна, а штук 5-10, но не больше. в штатном режиме от коммутатора в стойке до агрегационного коммутатора идет нагрузка в 10G на каждый порт, в нештатном может увеличиться до 20G, следовательно, каждый даунлинк на коммутаторе агрегации должен иметь пропускную способность минимум 20G, соответственно, суммарная пропускная способность одного аплинка (куда-то в ядро сети) на коммутаторе агрегации при количестве стоек 5шт. должна составлять 1052G, так как в штатном режиме у коммутатора агрегации аплинк будет пропускать 105G, в случае аварии 105*2G, интерлинк между коммутаторами агрегации тоже должен иметь 2 физических провода суммарной пропускной способностью 100G, в штатном режиме там вообще только служебный трафик, в нештатном 50G на каждый провод, на случай, если один из проводов этого интерлинка тоже оборвется, суть понятна?

Выводы:

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

Помощь зала:

Что-то есть добавить? это все на уровне L2, если с учетом масштабирования, то, я так понимаю, надо уже что-то другое, так как таких агрегационных коммутаторов просто не бывает наверно, чтобы каждый имел по 100 портов (в случае 100 стоек), а аплинк получится 101002G таких наверно просто не существует. Добавьте, если есть что добавить, только конструктивно.

Сорян за полотно.

IvanRia
()

Залипла клавиша клавиатуры (Super) в иксах и консоли

 

После какого-то действия (нажимал кнопки) заметил что залипло Super. В итоге почти ничего нельзя было сделать т.к. она часть хоткеев WM, зато можно было двигать окна итд т.к. это на неё забиндено. Переключится ctrl-alt-f1 (сработало) и в консоли не набираются буквы (если их набирать с зажатым Super они действительно не набираются). Переключился назад в иксы - работа клавиатуры пришла в норму, запустил xev там тоже всё как положено, следов проблемы вроде как нет. Переключаюсь в консоль - буквы всё ещё не набираются (хорошо что alt-Fn назад в иксы работает). Консоль починилась после ухода в pm-suspend и пробуждения назад, и теперь вроде всё хорошо.

Это ноутбук, Super на нём есть только один. Когда иксы уже работали а консоль ещё нет - я мог его нажимать в иксах для использования по назначению.

Debian 11, ядро 5.10. В dmesg и в логах иксов на момент проблемы пусто. Что это было? И как это можно по-лучше было диагностировать? Или может и сейчас что-то проверить можно, вдруг проблема не исчезла а только спряталась?

firkax
()

Собрал дистрибутив Линукс для обучения

 

Собрал минимальный дистрибутив Linux для обучения.

Технические детали:

  • Ядро 6.6.40 LTS
  • BusyBox 1.36.1 + bash
  • Пакетный менеджер, совместимый с Alpine
  • runit init system
  • Сборка из исходников одним скриптом

Репозиторий: https://github.com/semen88pochuev-eng/RezzOS

Критикуйте

Rezzev
()

simd.dev — открытая база данных встроенных функций SIMD и векторных типов данных

 

Упомянутый в ZXC 0.13.0 и 0.13.1 автор алгоритма PivCo-Huffman работает над проектом https://simd.dev (код на GitHub):

WIP — work in progress. Schema, layout, and APIs are still moving. Expect breaking changes.

An open database of SIMD intrinsics and vector data types, with drop-in tooltip tooling for the web, the terminal, and your editor.

Среди прочего, есть расширение для браузеров (Chrome, Chromium, Edge, Firefox) для показа в офлайн информации о SIMD-типах и функциях.

Вот так выглядит в Helium: https://postimg.cc/LnXpvptd.

dataman
()

Использование LLM в собственном проекте

 , , ,

Привет.

Я не программист, а хоббист. Есть свой небольшой уютный проект на питоне, написанный полностью вручную. И для тренировки, и для удовольствия. Хочу попробовать внедрить LLM (агентов или как их там) для выполнения определенных задач с мои кодом. Больше все интересует рефакторинг и написание тестов.

Подскажите, как и какими инструментами выстроить такой процесс? В каком редакторе это все лучше (и желательно проще) внедрить? Какие пока бесплатные LLM использовать, чтобы немного улучшить код? Я вообще не в теме.

Разработка идет на Debian 13, если это важно. Код пишу в основном в vscodium.

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

Verlac
()

Вопрос по ЛОРу

 , , , ,

Вопрос к модераторам/администраторам/знатокам

Пост про новую любительскую проприетарную объектно ориентированную ОС написанную с нуля тут прокатит? Или только про линукс/опенсорс?

Перемещено hobbit из talks

Mishahack
()

Казаки: Снова Война 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 довести до рабочего состояния?

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

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