Обзор новых возможностей редактора Neovim
Хорошая новость – Neovim не стоит на месте и развивается. Многие вещи, которые раньше реализовывались громоздкими и тормозными плагинами, становятся встроенными.
( читать дальше... )
Хорошая новость – Neovim не стоит на месте и развивается. Многие вещи, которые раньше реализовывались громоздкими и тормозными плагинами, становятся встроенными.
( читать дальше... )
Привет!
Если вы когда‑нибудь хотели собрать по‑настоящему кастомный Live‑ISO на базе Debian — для личного использования, тестирования или экспериментов — live-build это невероятно мощный (и недооцененный) инструмент. Это официальный механизм сборки Debian для создания Live‑систем, и с небольшим количеством скриптов его можно превратить во что угодно: минимальный спасательный диск, заранее настроенную среду разработки или даже дистрибутив, ориентированный на игры (допустим).
Недавно я углубился в live-build и разработал KoruX — минималистичную Live/устанавливаемую систему на Debian 12 (Bookworm), рассчитанную на разработчиков и мейнтейнеров, с щепоткой классических игр (Diablo 1/2, Heroes 3, Quake 1-2-3) для удовольствия. Это хобби‑проект, но главный вывод — насколько гибким становится live-build, когда понимаешь его структуру.
Почему live-build?
Полный контроль: выбирайте любые пакеты, настраивайте конфиги и добавляйте собственные скрипты.
Два режима: загружайтесь как Live‑система или устанавливайте на диск (я использовал Calamares как графический установщик).
Документация: официальное руководство, а проекты вроде nodiscc/debian-live-config — отличная отправная точка.
Что я узнал (и как вам начать)
Начинайте с малого: соберите базовый каталог config/ (списки пакетов, хуки и т. п.).
Хуки — это магия: используйте config/hooks/ для запуска скриптов на этапе сборки (например, создание пользователей, темы, установщики игр).
Важно уделять внимание защите: я добавил в KoruX минимальные безопасные настройки для Firefox, OpenSSL, PAM, sshd, sudoers, GRUB и sysctl (ASLR). Даже для личных проектов это хорошая практика.
Оформление под себя — это просто и увлекательно: настраивайте GRUB, дисплей‑менеджер и рабочий стол, чтобы система стала вашей. Работает с любым DE/DM.
Зачем делюсь?
Я не пытаюсь продвигать KoruX. Я хочу показать, насколько live-build доступен каждому:
P.S. Если нужен минимальный шаблон, nodiscc/debian-live-config — отличный старт. Также можно поискать на GitHub другие проекты на live-build для примеров. Может быть у вас получится разработать более серьезный дистрибутив, чем у меня.
Возможно, это синдром утёнка, ведь больше 20 лет прошло, но испытываю до сих пор какой-то трепет и пиетет к Bluecurve и дефолтному второгному из Red Hat 9 (пока не начали использовать верхнюю панель), а потом и вовсе поменяли тему.
После цветастой и мультяшной дефолтной темы Windows XP я загружался в Linux и чувствовал себя крутым хакером и профессионалом, во многом из-за этого строгого и серьёзного стиля.
Установил uvesafb, работает, разрешение в tty меняет, но есть несколько проблем:
1) не хочет менять scroll=. даже если вручную задать scroll=ywrap — в dmesg пишет scroll=redraw. с другими фреймбуфферами та же ситуация. видимо, из-за этого прокрутка больших текстов такая тормозная (например вывод dmesg приходится ждать секунд 10).2) после modprobe uvesafb — заместо русских букв в tty — квадратики.РЕШЕНО: 'rc-service consolefont restart' после подгрузки uvesafb.3) если запустить иксы, переключение между ttyями не мгновенное. причём этот эффект остаётся, если убить иксы. до запуска иксов переключает мгновенно.РЕШЕНО: после 'fbset -csync high -hsync high -vsync high' во всех tty — переключает мгновенно.
4) при прокрутке текста стрелочками в tty в тексте в некоторых местах иногда наблюдаются горизонтальные разрывы как при тиринге, но они смещаются вместе с текстом (а иногда не совсем одновременно с текстом). возможно, это тоже связано с scroll=.
Наличие или отсутствие подгруженного fglrx ситуации не меняет.
Может, нехватает USE-флагов или каких-то опций в ядре?
Жили-были два сигейта. Хранили много полезного, трудились на благо людей. Жили долго и счастливо. И умерли в один день. «Упали» замертво ни с того ни с сего.
Сигейты были в зеркале на Synology DS918+. Что случилось не известно. Я решил их отключить от греха. С одного из них снял слепок с помощью dd. Второй, похоже, впал в кому окончательно.
Я не особо погружался (к моему стыду) в нюансы как DSM Synology делает разметку и черт, видимо, меня дернул выбрать btrfs вместо файловой системы.
Первый анализ показал, что там матрешка из смеси raid + lvm + btrfs.
Попытался в лоб замонтировать пересобрав райд локально на основе образа. Но в процессе выяснилось, что там btrfs не такой какой обычно бывает сейчас на линуксах.
Гуглил не один час и нашел, что братские народы на реддите рекомендовали взять аж ubuntu 18.04, дескать, в ней есть правильная версия btrfs.
Synology pools should not be mounted in non-Synology. If you must, use Ubuntu 18.04, or a similarly old version of Debian, that omits certain validity checks when mounting btrfs.
Да едрить его за блочное устройство. Это же ФС, неужели нет обратной совместимости или типа того? (вопрос риторический).
Может кто сталкивался и есть какие-то правильные трюки с btrfs из под synology?
P. S.: Я больше в жизни не буду btrfs брать.
Можно ли в 2025 году работать на ноуте, которому около 18 лет? С некоторыми оговорками – вполне.
Итак, Франкенпад, собранный из T60/T61 – корпус и монитор от T60, мать от T61, перепрошитая и разлоченная, максимально запихиваемый ЦПУ с авито:
Сразу скажу, это не основной мой ноут, но тем не менее я периодически работаю на нем достаточно продолжительно, например несколько недель. Общие впечатления о ноуте:
Вообще, мне очень жалко, что сейчас ничего подобного не выпускают. Кажется был проект T700 выпуска современной материнки для этого корпуса, и он вроде заглох. А очень жаль, я бы с удовольствием купил бы свежую мать в этот корпус, а всякие материнки от Intel Nuke и прочие – непонятно как туда запихивать.
По софту. Вообще я предпочитаю OpenBSD, но не на старых ноутах она медленная и сильно заметны тормоза, в отличии от современного железа. Долго стояла там FreeBSD, но, отчасти какие-то нюансы в ней утомили, что-то поднадоело, и захотелось попробовать линукс.
Хотелось найти какой-то дистр линукса, похожий на OpenBSD: легковесный и безопасный, не полигон для тестирования, желательно с простым инитом, и чтобы не совсем маргинальное и как-то это развивалось. Совсем один в один ничего не нашлось, но обратил внимание на Void Linux. Musl (вроде как быстрее, но это не точно), runit (понравился), xbps (ну пакетный менеджер как пакетный менеджер, для меня они все примерно одинаковые, ставят и удаляют пакеты). Правда на разворачивание (с шифрованием диска) ушло достаточно много времени.
Теперь про скорость работы всего этого дела. Я не играю в игры, не гоняю вайн и все остальное, в основном у меня главный потребитель ресурсов – это браузер (и сбоку терминал). Firefox работает достаточно сносно, открыть 15-20 вкладок – вполне. Конечно, нет никакого аппаратного ускорения, некоторые тяжелые сайты нагружают CPU и открываются долго. Например vk. Youtube тоже будет работать не быстро. Jira будет работать сносно, если нет параллельно чего-то тяжелого. Видеоконференции с видео с веб-камерами (зум и прочее) – будут тормозить сильно, но часто это можно отключить, смотреть/показывать шеринг экрана – можно. Как ни странно – в большинстве случаев этого всего хватает.
На скриншоте еще можно видеть петунии, растущие на балконе, и вишню, с которой, ближе к августу, можно есть вишни.
Neovim или просто Nvim — это современный редактор, возникший как замена Vim.
Vim — это текстовый редактор для терминала, уникальный прежде всего наличием различных режимов работы (нормальный, редактирования, выделения, замены, командный), которые позволяют выполнять абсолютно все действия с клавиатуры без использования мыши, что заметно увеличивает скорость работы с текстом. Так же он является программируемым, что, наверное, и является его самым большим плюсом.
Да, вы можете взять VS Code, поставить кучу плагинов чтобы получить необходимый функционал, но сам редактор, плагины настраиваются через JSON, что не позволяет добавить какую-нибудь пользовательскую функцию для сортировки файлов в проводнике или навесить сочетание на вызов функции… Там такое можно сделать через написание расширений, что намного сложнее и трудозатратнее чем в том же виме + в последнем меньше ограничений со стороны API (в VS Code нельзя радикально переделать интерфейс, заменить проводник на другой и т.п.).
( читать дальше... )
X11 robustness: DRI3 без аппаратного ускорения (комментарий)
Сабж
Судя по всему последний раз проблема поднималась в 2018, потом все как-то забыли - да и решения там были весьма сомнительные предлагались - копмозитинг предлагается вынести в иксы, тем самым прибив модульность
В общем, без композитинга всё работает как надо, present через damage вызывает fbCopyNtoN на экранную поверхность, present отрабатывает, пусть и с тирингом.
С композитингом же всё сильно хуже - present делает такое же копирование, но в поверхность окна, для которой работает composite redirect.
Без изменений в композиторе ничего сделать не выйдет - сейчас в протоколе composite композитор получает пиксмапу окна и ожидает что после damage event в ней будут актуальные данные. Это совершенно несовместимос с подходом dri3/present, который привязвает несколько пиксмап к окну и требует лишнего копирования.
Изначальная идея в present предполагала отправлять Notify в композитор. Вероятно от неё отказались т.к это неэффективно - иксы здесь занимаются перессылкой событий и fence между процессами.
В здесь целом напрашивается получение дескриптора для отправки событий композитору напрямую, но это тоже выглядит как какой-то костыль. Но в принципе, dri3 передаёт файловые дескрипторы текстур - почему он не может так же передавать дескрипторы некоего канала с композитором? Звучит как вполне разумное решение, которое будет полезно и для xwayland т.к можно будет передать контроль wayland-композитору напрямую, минуя процесс Xwayland
VK_KHR_swapchain помимо fence оперирует с семафорами. Может можно вообще timeline semaphore задействовать? Но в любом случае надо как-то передавать индекс буфера. Расширение протокола позволит задействовать все возможности Vulkan при условии поддержки композитором. Так же vulkan’овые объекты доступны и в opengl
В общем интересно, остались ли тут разбирающиеся в устройстве иксов и vulkan люди, может кто-нибудь может подкинуть идеи
Возможная идея, что можно пересылать в композитор: https://github.com/notpeelz/monado/blob/main/src/xrt/ipc/client/ipc_client_compositor.c#L737 (freedesktop gitlab опять лежит) Здесь есть 2 варианта функции - с семафорой (включая timeline) и просто с fence. Причём создаётся семафора довольно просто - в vulkan queue отправляется пустой Submit с семафорой, которая ожидается уже другим процессом. То есть даже какая-то дополнительная поддержка со стороны приложения не нужна - дальше вся синхронизация присходит прямо в gpu.
P.S дополнение, всем фанатам и просто пользователям Вяленного, набежавишим в тред. Современный графический стек, предполагающий на каждый чих использовать opengl на клиенте немного несовместим с современными GPU, которые могут потерять все контексты в любой момент на любой чих в шейдере в любом приоложении. И даже если сделать перезапуск композитора с переподключением - это нифига не поможет от падения всего десктопного софта, который вынужден рисоваться через opengl. Почему-то на windows есть GDI и там нет этой проблемы. В иксах же есть свой аналог GDI и потенциальная возможность свести все эти отказы к единой точке, которую устранить. Достаточно избавиться от glamor в сервере, можно даже попытаться переписать его на vulkan, добавив обработку потери контекста. Я сейчас категорически не могу рассматривать рендеринг всех десктопных приложений на клиентах через opengl т.к это создаёт огромные неудобства при gpu reset. Да, можно сделать софтовый wayland композитор и нечто похожее на мой костыльный патч в modesetting, но нормально решить проблему потери контекстов просто нельзя - в архитектуре это просто не предусмотренно. Так что можно хвалить wayland, он прекрасно справляется с медиазадачами вроде 3д десктопа в виртуальной реальности, но превращается в тыкву, когда GPU не может работать
Уже больше 5 лет как использую разные GPU от AMD и сталкиваюсь с разнообразными проблемами, приводящими к его зависанию. К сожалению, в современном линуксовом десктопе, особенно на AMD зависание GPU зачастую не получается обработать прозрачно для софта. В лучшем случае могут попортиться данные, связанные с активными задачами, в худшем - gpu вообще становится неработоспособен до снятия питания (этим грешили некоторые APU на gfx9)
Если в случае с неработоспособным GPU другого выхода, кроме как отказ от него нет, дискретные GPU обычно могут успешно пройти сброс.
На моём опыте, с rx580 это приводило к превращению всего содержимого VRAM в шум, на котором слегка можно было различить контуры ранее находившихся там текстур.
На rdna2 же обычно содержимое vram остаётся целым, однако не всегда. С некоторой вероятностью обнаруживается периодический мусор после сброса, обычно в этом случае попытка использовать работающие с GPU приложениями приведёт к повторному зависанию. В общем, никаких гарантий нет и по хорошему все GPU клиенты должны пересоздать все контексты с нуля
( читать дальше... )
Доброго времени суток, товарищи. Хотелось бы спросить совета у знающих людей. На работе возник проект (гос.контора) следующего содержания. Пишу я на Qt + C++.
Необходимо разработать полноценную среду разработки, имеющие следующие возможности:
С компилятором(великий и могучий gcc) и интерфейсом пользователя(Qt4) все, на мой взгляд, трииально.
На просторах интернета нашлись несколько эмуляторов этого мипса, но (вроде бы) они поддерживают отладку только на уровне ассемблерных команд.
Видимо, единственный выход - адаптация одного из существующих эмуляторов (написание модулей для эмуляции необходимой периферии), и допиливание его в сторону поддержки отладки си-кода с помощью gdb (написание полноценного сервера отладки).
Хотелось бы услышать ваше мнение по этому вопросу.
Собственно, subj.
Поставил на свободный раздел разрекламированный alt-workstation с Gnome, потыкал Gnome, назначил шорткаты, выпил/закусил /С новым 2025 годом!/, понял, что надо поделиться скриншотом. На скриншоте надо показать что-то новогоднее, поэтому собрал и запустил Xephem. Обычный ‘import -window root file.png’ под Xwayland не сработал, сделал снимок встроенным средством Gnome.
Субъективно, привыкнуть к Gnome можно, если деваться некуда. Также субъективно, отрисовка графики идет плавнее, чем в X-ах, но это может быть результатом анимаций, которые должны скрыть тормоза.
C новым 2025 годом!
28 декабря, после более чем двухлетнего перерыва, состоялся выпуск 2.5.0 библиотеки для создания TUI termbox2, написанной на языке C и распространяемой по лицензии MIT.
( читать дальше... )
Не так давно из ядра выкинули функцию промотки в консоли по SHIFT+PAGEUP/PAGEDOWN, в поисках патча, возвращающего ее. Если кто-нибудь видел, дайте пожалуйста ссылку. В свою очередь, держите, кому надо - fbcodecor для новых ядер (по 5.10 включительно) https://github.com/jirka-grunt/fbcondecor =)
Всем привет! У меня появился вопрос, как настроить горячие клавиши для прыжков по словам? Когда я нажимаю для меня привычные CTRL + левая или правая стрелочка включается какой-то странный режим и печатаются символ «->» или «<-»
Шрифты не xft-ые. Хотя они еще и в бете работали. Если кому интересно, могу потом запостить скрин и с xft-ми шрифтами. Что на скрине рассказывать сейчас не буду. Может найдутся ветераны, которые сами узнают.
Поковырял исходники xpdf, добавил десяток нужных строк кода, в итоге имеем на скриншоте: - кирилица вводится и ищется без проблем; - выделенный текст на русском копируется через xselection.
P.S.:Про шрифты и пр. можно не флеймить, специально включил первую попавшуюся тему к fvwm.
Привет, ЛОР.
Вчера понадобилось прочитать файл mbox от Roundcube на локальной машине. Ну я беззаботно запустил Thunderbird, сейчас, думаю, загружу.
Ищу и не нахожу. Адресные книги можно, календари можно, чужие профили от того же Thunderbird можно, даже зазипованные. А наистандартнейший юниксовый мейлбокс – хренушки.
Минут 20 с этим воевал, потом решил таки загуглить. И даже результат гуглинга правильно трактовал не сразу. Оказывается, чтобы в заслуженном и в целом очень хорошем почтовом клиенте в 2024 году прочитать mailbox-файл, формату которого фиг знает сколько лет, надо УСТАНАВЛИВАТЬ РАСШИРЕНИЕ.
У меня нет слов.
Впрочем, после того, как я это осознал, всё остальное прошло как по маслу. Для тех, кто будет прыгать по тем же граблям – расширение называется ImportExportTools NG (для сильно старых версий Thunderbird то же самое, но без NG), есть в базе addons.thunderbird.net.
Тему создал для тех, кто будет мучиться так же, как я, наивно полагая, что это элементарная встроенная функция.
Эмулятор компилял отсюда.
Образ диска взят отсюда. Его нужно смонтировать и вытащить оттуда образ дискеты, которую скормить эмулятору.
Конфиг:
cat ~/.config/previous/previous.cfg
[Log]
sLogFileName = stderr
sTraceFileName = stderr
nTextLogLevel = 3
nAlertDlgLogLevel = 1
bConfirmQuit = TRUE
bConsoleWindow = FALSE
[ConfigDialog]
bShowConfigDialogAtStartup = TRUE
[Debugger]
nNumberBase = 10
nSymbolLines = -1
nMemdumpLines = -1
nDisasmLines = -1
nBacktraceLines = 0
nExceptionDebugMask = 1073741830
nDisasmOptions = 103
bDisasmUAE = TRUE
[Screen]
nMonitorType = 2
nMonitorNum = 0
bFullScreen = FALSE
bShowStatusbar = TRUE
bShowDriveLed = FALSE
[Keyboard]
bSwapCmdAlt = FALSE
nKeymapType = 1
szMappingFileName =
[ShortcutsWithModifiers]
kOptions = O
kFullScreen = F
kMouseMode = M
kColdReset = C
kCursorEmu = J
kScreenshot = G
kRecord = R
kSound = S
kPause = P
kDebuggerM68K = D
kDebuggerI860 = I
kQuit = Q
kDimension = N
kStatusbar = B
[ShortcutsWithoutModifiers]
kOptions = F12
kFullScreen = F11
kMouseMode =
kColdReset =
kCursorEmu =
kScreenshot =
kRecord =
kSound =
kPause =
kDebuggerM68K =
kDebuggerI860 =
kQuit =
kDimension =
kStatusbar =
[Mouse]
bEnableAutoGrab = TRUE
bEnableMapToKey = FALSE
fLinSpeedNormal = 1
fLinSpeedLocked = 1
fExpSpeedNormal = 1
fExpSpeedLocked = 1
[Sound]
bEnableMicrophone = TRUE
bEnableSound = TRUE
[Memory]
nMemoryBankSize0 = 8
nMemoryBankSize1 = 8
nMemoryBankSize2 = 8
nMemoryBankSize3 = 8
nMemorySpeed = 1
[Boot]
nBootDevice = 0
bEnableDRAMTest = FALSE
bEnablePot = TRUE
bEnableSoundTest = TRUE
bEnableSCSITest = TRUE
bLoopPot = FALSE
bVerbose = TRUE
bExtendedPot = FALSE
bVisible = FALSE
[HardDisk]
szImageName0 = /dev/shm/NS22.img
nDeviceType0 = 1
bDiskInserted0 = TRUE
bWriteProtected0 = FALSE
szImageName1 = /dev/shm/NEXTSTEP2.2.iso
nDeviceType1 = 2
bDiskInserted1 = TRUE
bWriteProtected1 = TRUE
szImageName2 =
nDeviceType2 = 0
bDiskInserted2 = FALSE
bWriteProtected2 = FALSE
szImageName3 =
nDeviceType3 = 0
bDiskInserted3 = FALSE
bWriteProtected3 = FALSE
szImageName4 =
nDeviceType4 = 0
bDiskInserted4 = FALSE
bWriteProtected4 = FALSE
szImageName5 =
nDeviceType5 = 0
bDiskInserted5 = FALSE
bWriteProtected5 = FALSE
szImageName6 =
nDeviceType6 = 0
bDiskInserted6 = FALSE
bWriteProtected6 = FALSE
nWriteProtection = 0
[MagnetoOptical]
szImageName0 = /dev/shm
bDriveConnected0 = FALSE
bDiskInserted0 = FALSE
bWriteProtected0 = FALSE
szImageName1 = /dev/shm
bDriveConnected1 = FALSE
bDiskInserted1 = FALSE
bWriteProtected1 = FALSE
[Floppy]
szImageName0 = /dev/shm/floppy22.dd
bDriveConnected0 = TRUE
bDiskInserted0 = TRUE
bWriteProtected0 = FALSE
szImageName1 = /dev/shm
bDriveConnected1 = FALSE
bDiskInserted1 = FALSE
bWriteProtected1 = FALSE
[Ethernet]
bEthernetConnected = FALSE
bTwistedPair = FALSE
nHostInterface = 0
szInterfaceName =
szNFSroot = /root/
bNetworkTime = FALSE
[ROM]
szRom030FileName = /usr/local/share/previous/Rev_1.0_v41.BIN
szRom040FileName = /usr/local/share/previous/Rev_2.5_v66.BIN
szRomTurboFileName = /usr/local/share/previous/Rev_3.3_v74.BIN
bUseCustomMac = FALSE
nRomCustomMac0 = 0
nRomCustomMac1 = 0
nRomCustomMac2 = 15
nRomCustomMac3 = 0
nRomCustomMac4 = 0
nRomCustomMac5 = 0
[Printer]
bPrinterConnected = FALSE
nPaperSize = 0
szPrintToFileName = /root/
[System]
nMachineType = 2
bColor = TRUE
bTurbo = FALSE
bNBIC = FALSE
bADB = FALSE
nSCSI = TRUE
nRTC = FALSE
nCpuLevel = 4
nCpuFreq = 25
bCompatibleCpu = TRUE
bRealtime = FALSE
nDSPType = 2
bDSPMemoryExpansion = TRUE
n_FPUType = 68040
bCompatibleFPU = TRUE
bMMU = TRUE
[Dimension]
bI860Thread = TRUE
bMainDisplay = FALSE
nMainDisplay = 0
bEnabled0 = FALSE
nMemoryBankSize00 = 4
nMemoryBankSize01 = 4
nMemoryBankSize02 = 4
nMemoryBankSize03 = 4
szRomFileName0 = /usr/local/share/previous/ND_step1_v43.BIN
bEnabled1 = FALSE
nMemoryBankSize10 = 4
nMemoryBankSize11 = 4
nMemoryBankSize12 = 4
nMemoryBankSize13 = 4
szRomFileName1 = /usr/local/share/previous/ND_step1_v43.BIN
bEnabled2 = FALSE
nMemoryBankSize20 = 4
nMemoryBankSize21 = 4
nMemoryBankSize22 = 4
nMemoryBankSize23 = 4
szRomFileName2 = /usr/local/share/previous/ND_step1_v43.BIN
Из интересного: именно в 2.2 ещё был Мотороловский SDK для DSP, потом его отдельно предлагали загрузить.
Дефолтный шелл – csh, пока не знаю умеет ли он в автодополнение и историю ;)
Но так длинную строчку tar -xvf path/tools.tar набил, и что-то там в корень распаковалось )
CDROM монтируется в /
Диск я ему сделал…
dd if=/dev/zero of=NS22.img bs=1k count=400k
…на 400 мб. Пока всё влезло, 200 мб свободно. Часы в Preferences поставил более-менее правдоподобно.
Будем изучать.
В стародавние времена когда деревья были большими, трава зеленее, а мороженное стоило по 10 копеек, на Земле жили динозавры, и эти динозавры программировали в Vim.
( читать дальше... )
Берём ссылку на временный объект, который непонятно сколько времени существует. Потом пытаемся печатать содержимое объекта по ссылке, которая хрен знает куда ведёт.
-Wall -Werror – достаточно по-пацански так жить?
struct Data {
const int &ref_;
explicit Data(const int &_r)
: ref_(_r) {
}
void print() {
std::cout << ref_ << "\n";
}
};
int main() {
Data t(42);
t.print(); // развал жопы на куски
return 0;
}
| ← предыдущие | следующие → |