LINUX.ORG.RU

Избранные сообщения Imker

Как установить deepinscreenshot в linux Debian 12, Ubuntu 24, Linux Mint 22.1, LMDE 6

Статьи — Desktop

Жил-был лучший скриншотер для Linux - deepinscreenshot до 2019 года. Потом произошло его слияние с проектом от тех же ребят - deepin-screen-recorder, который забросили (скорей жив, чем мёртв - вышел апдейт на предыдущей неделе).

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

Ниже инструкция (может кому пригодится) - как можно скомпилировать deepinscreenshot в Debian 12 из исходников, взятых из предыдущего Debian 11. Понимая принцип, примерно также можно сделать и для Ubuntu 24, Linux Mint 22.1, LMDE 6:

0. mkdir ~/deepinscreenshot
1. cd ~/deepinscreenshot
2. wget http://deb.debian.org/debian/pool/main/d/dtkwm/dtkwm_2.0.12-3.dsc
3. wget http://deb.debian.org/debian/pool/main/d/dtkwm/dtkwm_2.0.12.orig.tar.gz
4. wget http://deb.debian.org/debian/pool/main/d/dtkwm/dtkwm_2.0.12-3.debian.tar.xz
5. sudo apt-get install pkg-kde-tools libmtdev-dev libstartup-notification0-dev libxcb-util0-dev qtbase5-private-dev qtmultimedia5-dev qttools5-dev-tools
6. dpkg-source -x dtkwm_2.0.12-3.dsc
7. cd dtkwm-2.0.12
8.  sudo debuild -us -uc -b
9. cd ..
10. sudo dpkg -i libdtkwm5_2.0.12-3_amd64.deb
11. sudo dpkg -i libdtkwm-dev_2.0.12-3_amd64.deb
12. wget http://deb.debian.org/debian/pool/main/d/deepin-screenshot/deepin-screenshot_5.0.0-1.1.dsc
13. wget http://deb.debian.org/debian/pool/main/d/deepin-screenshot/deepin-screenshot_5.0.0.orig.tar.gz
14. wget http://deb.debian.org/debian/pool/main/d/deepin-screenshot/deepin-screenshot_5.0.0-1.1.debian.tar.xz
15. dpkg-source -x deepin-screenshot_5.0.0-1.1.dsc
16. cd deepin-screenshot-5.0.0
17. sudo debuild -us -uc -b
18. sudo dpkg -i ../deepin-screenshot_5.0.0-1.1_amd64.deb
Перемещено Zhbert из desktop

 , ,

Windows
()

СтимДек готов

Форум — Games

По результатам предыдущего треда Игровые Мини ПК для SteamOS существуют в природе? докладываю

Купил СтимДек. В аккаунт зашел, в мобильном режиме вполне и даже очень играбелен (в руках он оказался значительно больше, чем представлял с картинок), но речь не о том. В мыслях было желание получить опыт, как от Иксбокса на телеке, только с аккаунтом Стим, в т.ч. с набором игр, которые уже были в библиотеке.

  1. Игры + джойстик. По этому пункту всё ясно сразу с приставкой на руках без дополнительной обвязки, в т.ч., собственно, без подключения к телеку. На самом деле идея завести старую библиотеку десктопных игр в режиме джойстика на телеке имеет изъян. Далеко не все игры предназначены для игры джойстиком в принципе. Т.е. старый опыт с клавиатурой и мышкой перенести на диван с джойстиком просто не получится - например, какие-нибудь стратегии или шутеры (в которые раньше привык играть мышкой). С другой стороны, есть некоторое количество игр, от которых логично ожидать нормального опыта и с клавиатурой и с джойстиком - 2д-платформеры. У меня в библиотеке Стима таких было как раз некоторое количество. Вот здесь может ожидать некоторое разочарование, т.к. далеко не все из них завелись нормально с джойстиком, начиная от меню или дальше в процессе могут вылезать разные неудобства или глюки. С другой стороны, Валва делает правильную вещь по этой линии - она тестирует игры на своем джойстике и ставит зеленую галку рядом с теми, которые поддерживают джойстик как родное управление. Вот с такими играми опыт реально как на приставке - начиная с главного меню и дальше игровой процесс. При этом некоторые старые платформеры из моей коллекции получили эту галочку - это сразу саксэс и приятно. У некоторых галочки нет, но теоретически с ними можно повозиться - перемапить кнопки, подкрутить настройки и т.п. Пока лень этим заниматься, но если очень захочется, то можно и сделать. С ними по условию исходной задачи, скорее, фейл. Но здесь нет повода обвинять Валву или ставить это хоть в какой-то минус СтимДеку. На том же Иксбоксе представлены далеко не все игры, которые есть в этом мире. Можно представить, что на СтимДеке доступны только те игры, у которых стоит зеленая галка «полностью поддерживает контроллер», в таком случае «дефолтный» опыт СтимДека будет такой же, как с Иксбоксом. А то, что на нем можно запускать игры, которые не работаю с контроллером, это его дополнительные возможности, а никак не минус.

1.1.) Игры винда/не винда. В каталоге дохрена игр (даже за исключением тех, которые не показывают в РФ). Не уверен, прячет ли он что-то неподдерживаемое от меня. Установил демку «It takes two», в процессе обратил внимание, что она там что-то об установке из директ-икса, возможно, протона, и еще чего-то такого во всплывающих сообщениях сообщает. Потом просто запустилось. Если так Протон работает для любой случайной игры из библиотеки, которая сама не декларирует поддержку СтимОС, то Протон готов.

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

Дальше движемся от мобильной консоли в сторону дивана и телевизора, приближаясь к «как Иксбокс, только со Стимом».

  1. SteamLink. Первая задача - отправить изображение на телек. Пока без подключения дополнительной аппаратной обвязки - это вариант SteamLink. Как оказалось, очень неплохо сделанная софтина. Сначала поставил на смартфон - подключились/заработали. При подключении к телевизору рекомендуют ставить приложение в режиме смарт-тв из магазина для конкретного телека. У меня смарт-тв на телеке сто лет назад заблокирован, но есть Андроид-приставка, на которую я поставил apk, скачанный по прямой ссылке https://media.steampowered.com/steamlink/android/latest/steamlink-android.apk . И это просто заработало - приставка и СтимДек без лишнего гемора с настройками в общей локальной сети нашли друг друга (там две кнопки в интерфейсе, автопоиск работает ок), изображение со СтимДека появилось на телеке. Визуально уже очень ок - джойстик в руках на диване, изображение на телеке, джойстик рулит процессом. Когда они законтачились, правда, приложение предупредило, что связь не слишком быстрая, разрешение на телеке тоже не максимальное. Но я бы это, может, и принял, но во время игр время от времени на долю секунды, но заметно, подтормаживало. Это раздражает и в таком виде все-таки не особо играбельно. Дело в сети или, может, тв-приставка слабомощная (хотя, по идее, с нее смотрю фильмы, так что видео должна тянуть), хз, не стал разбираться.

Возможно, этому режиму еще будет применение - к примеру, подключиться поиграть с ноута, но для телека нужно что-то лучше.

  1. Т.к. есть рабочий, хотя и запасной вариант с выводом изображение на телек, можно подключить дополнительные джойстики. Есть живой Иксбокс, к нему три джойстика - один совсем древний, два поновее. По этой линии опасался больше всего, т.к. ожидал с ними гемора, ковыряния в настройках каждой отдельный игры и так далее. Короче, джойстики подключились (почти) идеально. Сначала я пошел по линии с привязкой в беспроводном режиме - на джойстике зажимается кнопочка поиска беспроводных соединений, на СтимДеке в настройках блютуса этот джойстик появляется как доступное устройство, тапается в списке, привязывается к приставке, в настройке контроллеров (рядом с блютусом) появляется его профиль с дополнительными настройками, которые я вообще не трогал (только поменял имя профиля). После того, как дожойстик привязан, он рулит рабочим столом на СтимДеке параллельно с контроллером, встроенным в приставку, как будто это один контроллер. В однопользовательских играх можно рулить любым подключенным джойстиком без никаких настроек. Игры, которые поддерживают одновременный кооператив, второй джойстик как в порядке вещей распознают. Проверял на It takes two (в магазине бесплатная демо-версия - качается - играется, платная для РФ не продается), и Portal 2 (там есть кооператив).

По джойстикам. Два из 3-х иксбоксовских джойстиков (один древний и один поновее) подключились по описанной схеме, подключал два одновременно (плюс еще 3-й, встроенный в СтимДек) - всё ок. Еще один иксбоксовский джойстик сначала, вроде, тоже подключился-завелся (с него начинал эксперименты), но потом ему как-то снесло крышу. В списке блютус устройств в режиме поиска мигает (появляется-исчезает) пару раз в секунду, подключиться в таком режиме к нему не реально. Обновил на джойстике прошивку (через Иксбокс), не пролечилось. Может, можно еще СтимДек там почистить/перезагрузить, я хз, пока норм и так.

После привязки к СтимДеку джойстик остается с ним, как перед этим был с ИксБоксом. Включение джойстика включает СтимДек (будит из спящего режима), с джойстика можно вырубить приставку. Это очень круто, т.к. это делает историю СтимДек+джойстик ровно такой, как Иксбокс+Джойстик - это опыт полноценной приставки.

Да, после привязки к СтимДеку джойстик отвязывается от ИксБокса. Но его можно привязать обратно к иксбоксу по стандартной процедуре (тоже через поиск беспроводных устройств, только уже подключать в меню Иксбокса). И, короче, лайфхак - можно привязать джойстик одним движением - если соединить его проводом USB с Иксбоксом (провод должен поддерживать передачу данных). Джойстик привязывается к приставке мгновенно, выдернули провод - он остаётся привязан, продолжает работать в беспроводном режиме.

Как оказалось, на СтимДеке этот способ тоже сработал - соединил проводом джойстик и СтимДек (type-c - type-c) - он обратно привязался к СтимДеку со всеми вытекающими, провод сразу можно выдернуть. Возможно, в таком варианте можно было сразу привязять его при первом подключении и не возиться с блютусом, но так уже не пробовал, проверять и сбрасывать старые настройки не стал.

Кстати, «глючный» джойстик в режиме провода работает на СтимДеке как надо, но после выдергивания отваливается. Два других джойстика себя так не ведут.

  1. Подключение к телеку - второй подход. Вместо SteamLink нужен провод. Вариант «Type-c -> HDMI». СтимДек держит 4К (3840 x 2160 @ 60Hz) на внешнем подключении HDMI. Из тех проводов, которые я видел, все столько и выдают. Я купил провод подороже с 8К, хз, может еще потом пригодится. По отзывам на некоторые провода народ жалуется, что бывает глючат и рвут соединение - нужно выбирать внимательно. От телека до дивана длины «Type-c -> HDMI» всё равно не хватает, поэтому купил еще удлинитель папа-мама HDMI. Воткнул провод в СтимДек и в телек, всё просто заработало. На телеке появилось изображение с максимальным (4K) разрешением, игры летают, SteamLink тут рядом не валялся. В настройках монитора в СтимДеке дохрена опций, всё работает, какая-то сказка. Не понимаю, почему за 20 лет РедХат, Суся или хотя бы Убунта не могли сделать так же. Габен всех уделал, он мой герой теперь новый.

В целом, в этом варианте можно уже даже не тянуть провод к дивану, а оставить СтимДек рядом с телеком и рулить процессом с внешних джойстиков (у меня их рабочих уже есть две штуки). Можно сказать, что приставка со СтимОСом на замену Иксбоксу готова. Но осталась еще одна проблема - выход type-c из СтимДека один, если подключать через него телек, не будет возможности заряжать саму приставку. Нормально играть в таком режиме (тем более, в компании) не получится. Нужен док, который дает заряжать СтимДек и отправлять изображение на телек по HDMI одновременно.

  1. Док для СтимДека. СтимДекДок выглядит норм, но платить за него его цену не хочется. Альтернативы с приемлемой ценой ищутся на Озоне. Мне попался JSAUX, было еще несколько вариантов, отличаются только немного внешне и расположением портов. По функциям, как я понял, там все одинаково. Док позволяет подключить питание (гнездо type-c), HDMI (полноценное, в таком варианте провод «type-c -> HDMI» не нужен), три порта USB-A, гнездо ethernet. В другом варианте видел 2 порта USB-A и третий к ним type-c (может быть полезно, т.к. еще один type-с будет всегда занят питанием).

Короче, с доком поставил СтимДек под телек, прокинул провод HDMI, привязал джойстики от Иксбокса и получил полноценную замену для Иксбокса с библиотекой Стим, в которую можно играть на телеке с дивана. Всё. Это кайф, без оговорок. Габен смог. Иксбокс не нужен (плейстейшен, значит, тоже). И это только треть возможностей. Еще одна треть - это переносной режим. Еще треть - дальше.

  1. Оставшаяся треть - это режим настольного компьютера, про который все говорят, но который в переносном мобильном режиме особо никак себя не проявляет. У дока есть 3 выхода USB, в них можно воткнуть клавиатуру и мышку, а к HDMI подключить настольный монитор вместо телека (технически, можно обойтись и экраном стимдека, но лучше с монитором, конечно). Получится полноценный ПК с библиотекой Стим. Можно, конечно, все это сделать без дока с проводом «type-c -> HDMI» и блютусом, но я лучше люблю, если есть вариант подключить клавиатуру и мышь через провод или свисток.

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

Возможно, есть потенциал еще и обычные приложения из базовой операционки позапускать, но это не пробовал (ограничился установкой Хрома, который сам СтимДек предлагает, с джойстика рулить им не особо удобно).

  1. То же, что в предыдущем пункте, только через SteamLink. Например, на ноуте, от которого монитор и клавиатуру не оторвать. Если передача изображения окажется норм (а не как у меня с андроид-приставкой), можно поиграть в игры, которые не поддерживают джойстик.

  2. Возвращаясь к исходной идее из предыдущего поста - собрать свою приставку под телек на СтимОС. С учетом опыта со СтимДеком вариант теперь кажется вполне рабочим. Грубо говоря, если взять то же железо (или лучше), что на СтимДеке, только убрать встроенный джойстик и экран, добавить порты HDMI и USB с дока, получится еще более компактная коробка с теми же возможностями, которую можно использовать под телеком в качестве замены Иксбоксу или (одновременно) с монитором, клавой и мышкой на столе в качестве обычного компа с компактным системником. Софт готов. Нужно только с поддержкой железа не налажать. Кроме видюхи нужно убедиться, что нормально работает модуль блютус, через который будут цепляться джойстики.

 , , , ,

bender
()

Настройка Neovim/Nvim

Статьи — Разработка

Введение

Neovim или просто Nvim — это современный редактор, возникший как замена Vim.

Vim — это текстовый редактор для терминала, уникальный прежде всего наличием различных режимов работы (нормальный, редактирования, выделения, замены, командный), которые позволяют выполнять абсолютно все действия с клавиатуры без использования мыши, что заметно увеличивает скорость работы с текстом. Так же он является программируемым, что, наверное, и является его самым большим плюсом.

Да, вы можете взять VS Code, поставить кучу плагинов чтобы получить необходимый функционал, но сам редактор, плагины настраиваются через JSON, что не позволяет добавить какую-нибудь пользовательскую функцию для сортировки файлов в проводнике или навесить сочетание на вызов функции… Там такое можно сделать через написание расширений, что намного сложнее и трудозатратнее чем в том же виме + в последнем меньше ограничений со стороны APIVS Code нельзя радикально переделать интерфейс, заменить проводник на другой и т.п.).

( читать дальше... )

 , , ,

rtxtxtrx
()

Смартфон AQphone M11 на базе Ред ОС М доступен в продаже

Новости — PDA
Смартфон AQphone M11 на базе Ред ОС М доступен в продаже
Группа PDA

Мобильная операционная система РЕД ОС М основана на Android Open Source project (AOSP), но имеет возможность запускать настольные приложения из репозитория РедОС.

В мобильной части Google Mobile Services заменены на отечественные аналоги. В качестве магазина мобильных приложений используется RuStore. Ряд компонентов доработаны под отечественные сервисы, в том числе WebView, NTP, DNS. Вся инфраструктура для поддержки ОС развернута на территории РФ.

В Настольном режиме можно устанавливать приложения из пакетов rpm, в репозитории РЕД ОС доступны более 50 тысяч приложений. К сожалению, телефон не поддерживает подключение монитора по USB, поэтому выводить изображение предполагается через WiFi (Miracast). Подключение клавиатуры и мыши при этом возможно по USB или Bluetooth.

( читать дальше... )

Смартфон доступен в официальном магазине отечественного производителя HighScreen по цене 18 990 ₽ на момент публикации.

>>> Фирменный магазин HighScreen

 , highscreen, , ред ос м

Aceler
()

Вернул к жизни драйвер NVIDIA 340.108 под Ubuntu 24.04 + ядро 6.11

Форум — Linux-hardware

Всем привет! Я хочу поделиться результатом большой и трудной работы, которая, уверен, будет полезна многим, кто всё ещё использует старые, но надёжные видеокарты NVIDIA с драйвером 340.108.

🔥 Предыстория Я — обычный пользователь. У меня старенький ноутбук с NVIDIA GeForce G 210M, и я очень хотел использовать свежую Ubuntu 24.04 (Noble) с новым ядром 6.11, но столкнулся с ожидаемой проблемой:

Официальный драйвер nvidia-340xx больше не собирается и не работает на новых ядрах.

Я не сдался. Сначала было много ошибок: зависимостей, падений DKMS, отсутствие яркости, отсутствие nvidia-settings, конфликты с Wayland и т.д. Я собрал всё воедино, разобрал весь пакет до винтика, добавил нужные зависимости, и в итоге:

✅ Что получилось

Я создал полноценный PPA в нём:

🧩 Полный драйвер NVIDIA 340.108, собранный с поддержкой ядра 6.11 (и 6.8 тоже)

🛠 DKMS-модуль, который автоматически пересобирается под новое ядро

⚙️ nvidia-support, nvidia-installer-cleanup, gcc-13, dkms — всё включено

💡 Фикс яркости через acpi_backlight=vendor — автоматом добавляется в GRUB

🖥 nvidia-settings тоже автоматически устанавливается

📦 Meta-пакет nvidia340 — ставит всё одной командой!

Установка (максимально просто)

sudo add-apt-repository ppa:kda2210/nvidia340

sudo apt update

sudo apt install nvidia340

💡 После установки просто перезагрузите систему.

⚠️ Важно Wayland не поддерживается (используйте X11 — по умолчанию в Kubuntu всё ок)

Если по какой-то причине GRUB не обновился — вручную добавьте acpi_backlight=vendor в /etc/default/grub и сделайте sudo update-grub

🤝 Что это даст вам Не нужно вручную качать .run-инсталлер от NVIDIA

Не нужно патчить uvm, dkms и gcc — всё уже собрано

Можно жить спокойно: обновил ядро — DKMS сам пересоберёт модуль

🙏 Особая благодарность Андреасу Бекманну, чье имя появилось в журнале изменений от апреля 2025 года. Это последнее обновление nvidia-graphics-drivers-legacy-340xx_340.108 стало искрой, которая помогла мне поверить, что это все еще возможно.

 , , ,

kda2210
()

Nerdlog: быстрый TUI-просмотрщик логов с удалённых хостов с таймлайном

Новости — Open Source
Nerdlog: быстрый TUI-просмотрщик логов с удалённых хостов с таймлайном
Группа Open Source

Терминальное приложение Nerdlog позволяет удобно просматривать логи с одного или сразу нескольких серверов Linux и FreeBSD. Поддерживает как обычные текстовые лог-файлы (например, /var/log/messages или /var/log/syslog), так и вывод journalctl.

Визуально отображает активность в виде интерактивной псевдографической таймлайн-гистограммы, аналогично таким инструментам, как Graylog, Kibana или Splunk.

( читать дальше... )

>>> GitHub проекта

 , , ,

dimonomid
()

Запуск sberbankPDF2Excel.py в Linux: благодарность micronekodesu и ещё раз о Питоне

Форум — Desktop

Привет, ЛОР.

С некоторых пор Сбербанк-онлайн выпилил «физикам» возможность сохранения выписок в структурированных форматах, оставил только PDF. Разработчик, публикующийся на Гитхабе под именем Ev2geny, создал программу на Питоне, конвертирующую этот PDF в форматы xlsx и csv. К сожалению, внятную сборку он сделал только для Windows, а инструкция по запуску под линуксом у меня не заработала.

К счастью, @micronekodesu откликнулся на мою проблему и написал мини-инструкцию по запуску sberbankPDF2Excel.py в виртуальном окружении. Я её протестировал – работает, в CSV сохраняет.

Однако на вопрос по ссылке (заданный в контексте дискуссии о лучшем способе распространения программ на Питоне)

просто из-за того что я питоняша у меня не возникает проблем?

Мой ответ – «видимо, да». Я бы без инструкции долго блуждал в трёх соснах. И мне кажется, что сишную программу, запакованную в AppImage, запустить реально проще, чем вот это вот. Не только для «простого пользователя», но и для продвинутого.

Ещё раз спасибо @micronekodesu! Ну и автору программы, конечно, хотя я не уверен, что он читает ЛОР.

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

P.P.S Под firefox Сбербанк-онлайн создаёт битые PDF. Под chromium всё прекрасно работает. Это замечание, конечно, уже не по тематике нашего форума, хотя… как мы радовались когда-то, что монополии IE пришёл конец… Эхъ…

 , ,

hobbit
()

Многие любят ругать cmd.exe, но…

Форум — General

У него есть киллер-фича, которая лежит буквально на самой поверхности!

https://pic4a.ru/110/T42.png

Которые из линуксовых эмуляторов терминала такое умеют: выводить выполняющуюся сейчас команду в заголовок? Мы встречали от силы, как такое костылями прикрутить ко внутренней переключалке окон tmux. Может, так умеет ZSH? https://github.com/trystan2k/zsh-tab-title — повод перейти наконец на него с Bash, хехе.

Вообще, интеграция у эмуляторов терминала с шеллами отвратительная. Даже курсор нельзя поставить кликом в произвольное положение, что для портянок-однострочников было бы крайне удобно. Кто первыми реализуют такое — озолотятся.

И заодно — есть под онтопик максимально совместимый аналог dfhl.exe? (А то гонять для этого машину с оффтопиком как-то некузяво, хоть и нагружать основную тоже.) Чтобы автоматически находил дубликаты и сливал их в хардлинки к одному файлу. Желательно даже, чтобы умел сравнивать не все файлы со всеми подряд, что долго и Нам не нужно — а просто zip-ать попарно дерево директорий с деревом директорий, они в целом одинаковые. Проще самим написать, по ходу.

 , , , ,

mertvoprog
()

Новая статья: «Эволюция Lua, продолжение»

Форум — Development

Вышла вторая статья посвящённая эволюции развития языка Lua.

Анонс

Первая часть - 2007

Вторая часть - 2025

Я ещё не читал, кому интересно, почитайте :)

---- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
(function(v) local f f = function(v) print(v) return f end return f(v)  end)
----------------------------------------------------------------------------
                                "Lua"
                                "Это"
                               "Весело!"
                              "Полезно!"
                             "Интересно!"
----------------------------------------------------------------------------
                  string.format("%s","hello world!")
---- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

Всем бобра. Досвиданья.

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

 , , ,

LINUX-ORG-RU
()

как выбрать базу знаний

Форум — General

Изучаю различные программы (Excel, 1с, и др) смотрю короткие ролики на ютубе как что сделать, читаю статьи, и конечно на следующий день забываю как я сделала что то программе. Надо бы записывать полученные знания, но куда? Бумажные носители не подходят, заметки типа ноушен так же. Нужна четкая структура и входящие/ исходящие ссылки, попробовала обсидиан, но он скорее для творчества, для размышления. А мне нужно кратко записать инструкцию как сделать, куда нажать чтобы получить определенный результат, желательно чтобы с использованием скриншотов, гиф-ок. Подскажите пожалуйста, какая программа для записи таких лайфхаков

 , ,

mashix
()

Какие в Линуксе есть средства поиска/ремапа бэдов на винтах?

Форум — Admin

Надеюсь здесь найдётся пруфлинк с описанием этой операции.
Можно конечно качнуть флэшку с виндой и Викторией. Но неужели это не исполнимо в Линукс? Или местные адепты начну топырить пальцы: «Если на винте попался бэд - ф памойку такой винт»?

P.S. Резюмирую, после пальцетопырчатого срача от «крутых» пацанов, благодаря комментариям порядочных гуру - решил проблему просто:

Для начала собрал список «битых» файлов:

find ./ -type f -exec cat '{}' \; |pv|dd of=/dev/null

Список файлов получил на консоль и скопировал в лог, выделив и скопипастив.
Предлагаю попробовать другой вариант:
find ./ -type f -exec cat '{}' \; >/dev/null 2>Errors.log

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

Далее сделал список плохих секторов командой:
badblocks -o badblocks.log /dev/sdX

В этом файле - плохие блоки были сериями. Для каждой серии сначала проверил:
badblocks -o 01set.log /dev/sdX <LastBlock> <FirstBlock>

Получал список блоков этого диапазона.
Далее затирал эти блоки нулями:
badblocks -f -w /dev/sdX <LastBlock> <FirstBlock>

Снова проверял:
badblocks -o 01set.log /dev/sdX <LastBlock> <FirstBlock>
Получал пустой список - т.е. блоки исправились.

Теперь запустил:
smartctl -t long и по его результатам допишу.

НИКАКОГО РЕМАПА! Просто перезаписал данные в нечитаемые сектора!
Ну и опять прогоню рекурсивное чтение файлов, данные конечно неправильные, но ошибок быть не должно.
И на этом диске zfs, посмотрю что скажет: zpool scrub

P.P.S. Результаты -t long:
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed: read failure       40%     39752         3352487288

Проверяем:
badblocks -o 07-sdd-badblocks.log /dev/sdd 3352488289 3352487288

Но! Факир был пьян! SMART и BADBLOCKS видимо оперируют разными размерами сектора!
# badblocks -o 07-sdd-badblocks.log /dev/sdd 3352488289 3352487288
badblocks: Недопустимый аргумент during seek
badblocks: Недопустимый аргумент during seek
badblocks: Недопустимый аргумент during seek
badblocks: Недопустимый аргумент during seek
badblocks: Недопустимый аргумент during seek
badblocks: Недопустимый аргумент during seek
badblocks: Недопустимый аргумент during seek
badblocks: Недопустимый аргумент during seek
badblocks: Недопустимый аргумент during seek
badblocks: Недопустимый аргумент during seek
badblocks: Недопустимый аргумент during seek
badblocks: Недопустимый аргумент during seek
badblocks: Недопустимый аргумент during seek
badblocks: Недопустимый аргумент during seek
badblocks: Недопустимый аргумент during seek
badblocks: Недопустимый аргумент during seek

Придётся повторить badblocks и посмотреть его видение!

 , ,

n0mad
()

Быстрый HTTPS для сайта с помощью angie (форк nginx)

Статьи — Администрирование

Ниже описан достаточно лёгкий способ получить обратный прокси с SSL-сертификатом.

Веб-сервер Angie позволяет получать SSL-сертификаты от LetsEncrypt без использования сторонних средств (таких как CertBot).

Установка Angie тривиальна. Документация (на русском языке!) написана понятно и лаконично.

В дополнение к официальной документации, привожу минимально необходимые дополнения к стандартному конфигу, позволяющие автоматически получить и установить SSL для домена example.org, который размещён на веб-сервере с IP-адресом 192.168.2.2.

# cat /etc/angie/http.d/LetsEncrypt.conf

# This part must be included only once into http section (for all sites)
resolver 8.8.8.8;
acme_client letsencrypt https://acme-v02.api.letsencrypt.org/directory;
# cat /etc/angie/http.d/example.org.conf

server {
    listen 80;
    server_name example.org;

    # Redirect all HTTP to HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.org;

    # Obtain and use certificate from LetsEncrypt
    acme letsencrypt;
    ssl_certificate $acme_cert_letsencrypt;
    ssl_certificate_key $acme_cert_key_letsencrypt;

    location / {
        proxy_pass http://192.168.2.2;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

После создания данных конфигов, следует проверить конфигурацию на отсутствие ошибок:

sudo angie -t

и перезапустить веб-сервер

sudo angie -s reload

Желаю успехов!

 agnie, , , ,

Harliff
()

Как закалялся шакал: а где можно download more ram?

Статьи — Администрирование

Вступление

Данная статья написана с целью концентрации знаний о сжатии данных оперативной памяти.

Я использую gentoo, поэтому имена пакетов будут приводиться в формате этого дистрибутива.

Подразумевается, что читающий имеет желание и возможность (одно из):

  • произвести конфигурацию и/или сборку ядра;
  • в случае отсутствия искомой функциональности в «ванильном» - найти и использовать ядро, в котором уже всё есть.

( читать дальше... )

 , , ,

Bfgeshka
()

DNS-Over-QUIC для блокировки рекламы и не только

Статьи — Администрирование
DNS-Over-QUIC для блокировки рекламы и не только

Протокол QUIC, в отличие от UDP поддерживает шифрование и работает быстрее чем TCP, который часто используется для шифрованных DNS-запросов. Данная инструкция актуальная, так как Google все-таки начал удаление поддержки блокировщиков рекламы из своего браузера. Кроме того, она пригодится тем, кто хочет скрыть свое пребывание в Интернете от тотальной слежки.

( читать дальше... )

 , , ,

rtxtxtrx
()

Программы для работы со звуком

Форум — Multimedia

Базовая система коммутации звуковых потоков:

  • Jack Audio Connection Kit - необходимый элемент системы для соединения разных звуковых устройств, музыкальных инструментов, микрофонов, программ для обработки звука.
  • QjackCtl - графический интерфейс для JACK на Qt4
  • Patchage - удобный графический инструмент для коммутации звуковых потоков и устройств, в частности MIDI.
  • KXStudio: Cadence - набор приложений для коммутации аудиопотоков и устройств, управления Jack-сервером, замера уровня сигнала...
  • KXStudio: Carla - хост аудиоплагинов, поддерживает LADSPA (включая LRDF), DSSI, LV2, VST2/3 и AU форматы плагинов,также поддерживаются файлы GIG, SF2 и SFZ. Работает с Jack и ALSA.

Программы для звукозаписи и обработки звука:

  • Audacity - достаточно простой, но удобный инструмент для записи и обработки звука.
  • Ardour - профессиональный инструмент для многоканальной, многодорожечной записи звука, поддерживает несколько разных источников.
  • Qtractor - многодорожечный аудио/MIDI секвенсор.

Гитарные процессоры:

  • Rakarrack - набор гитарных эффектов реального времени, комбиков, кабинетов, усилителей, множество предустановленных вариантов и возможность «накрутить» собственные
  • Guitarix - ещё один набор гитарных эффектов реального времени, комбиков, кабинетов, усилителей, множество предустановленных вариантов и возможность «накрутить» собственные.

Синтезаторы:

  • Amsynth - набор синтезаторов с множеством настроек и предустановок. Ввод нот осуществляется с MIDI-клавиатуры, которую удобно подключить при помощи Patchage
  • LMMS - мультимедийная студия с синтезаторами, секвенсорами, кольцами и эффектами.
  • ZynAddSubFX - набор синтезаторов: реального времени, полифонический, мультитембральный, микротональный. Также набор эффектов для обработки звука. Работает с Jack, поддерживает MIDI, в том числе и подключение MIDI-контроллеров.
  • Yoshimi - форк ZynAddSubFX с усовершенствованиями в направлении работы с Jack и MIDI.

Инструменты для создания трекерной музыки:

  • MilkyTracker - инструмент для создания трекерной музыки.
  • Schism Tracker - инструмент для создания трекерной музыки, основанный на модифицированной версии Modplug - OpenMPT

Драм-машины:

  • Hydrogen - удобная графическая драм-машина.
  • DrumGizmo - драм-машина в виде самостоятельно приложения, также и в виде плагина.

Наборы эффектов для обработки звука:

  • Linux Audio Developer's Simple Plugin API (LADSPA) - классический набор эффектов и алгоритмов для обработки звука, также язык для разработи музыкальных программ.
  • LV2 - следующее поколение LADSPA
  • Calf studio gear - набор эффектов и алгоримов для обработки звука.

Нотные редакторы:

  • TuxGuitar - графический нотный MIDI-редактор, есть возможность вбивать ноты на «гитарном грифе» и «пианино».
  • LilyPond - крайне минималистичный, но очень мощный текстовый «нотный компилятор», часть проекта GNU.
  • Frescobaldi - продвинутый графический интерфейс для LilyPond, удобен возможность работы с мышью
  • Denemo - ещё один продвинутый графический интерфейс для LilyPond
  • Rosegarden - графический нотный редактор и MIDI-секвенсор.
  • FluidSynth - MIDI-синтезатор реального времени без графического интерфейса, работающий по спецификациям SoundFont 2.
  • Qsynth - графический интерфейс для FluidSynth.
  • MidiEditor - простой MIDI-редактор.
  • Musescore - нотный MIDI-редактор с графическим интерфейсом.
  • MusE - MIDI-секвенсор.

Статья на LOR Wiki

 , , , ,

toney
()

Забьют, ведь.

Форум — Desktop

Программа очень простая, ии нет. Делал давно, в рамках ознакомления. С оболочкой больше не играю.

###
### file vars.inc
###

EC='\e[36m' # enable color
DC='\e[0m'  # disable color
maxdb=4 # максимально допустимое количество дуплей (в игре на 4-х не может быть меньше 2)
maxeq=5 # максимально допустимое количество одинаковых (в игре на 4-х не может быть меньше 3)
dbfish=true   # закрывший рыбу дуплем не считается.
dbzerox=true  # один дупль пусто считается за 10
bazar=false # игра с базаром
vii=7 # раздается по семь камней
hundred=50 # игра ведется до 101 или до 51
xiii=13 # минимальная несгораемая сумма (забор)
domino=(00 01 02 03 04 05 06 11 12 13 14 15 16 22 23 24 25 26 33 34 35 36 44 45 46 55 56 66)
score=(0 0)
fence=(0 0)
eggs=0
gamer=('user' 'noob' 'fool' 'pro ') # имена игроков
mover='' # чей ход
super='' # ставщик (кто зашел первым)
state='' # состояние игры (NULL - игра, true - игрок закончил, false - рыба)
snake=() # массив камней на столе
played=() # поставленые камни игроков

###
### file msgs.inc
###

msg_mix="Мешаю..."
msg_ihave="У меня"
msg_yhave="У вас"
msg_bemix="Камни будут перемешаны."
msg_qbmix="Перемешать камни? (y/n)"
msg_maxdb=('0 дуплей' '1 дупль' '2 дупля' '3 дупля.' '4 дупля.' '5 дуплей.' '6 дуплей.' '7 дуплей.')
msg_maxeq=('голых.' 'азов.' 'двоек.' 'троек.' 'четверок.' 'пятерок.' 'шестерок.' 'голых.' 'аза.' 'двойки.' 'тройки.' 'четверки.' 'пятерки.' 'шестерки.')
msg_any_key="Нажмите любую клавишу для продолжения..."
msg_try_again="Попробуйте еще раз"
msg_skip="Проехал."
msg_finish="Закончил."
msg_fish="Рыба."
msg_dbfish="Рыба с отходом."
msg_onfence="на заборе."
msg_score="счёт"
msg_fenсe="забор"
msg_eggs="яйца"
msg_total_score="Общий счет:"

###
### file func.inc
###

f_mixer(){
  
  echo "${msg_mix}"
  echo '----------'

  domino=(00 01 02 03 04 05 06 11 12 13 14 15 16 22 23 24 25 26 33 34 35 36 44 45 46 55 56 66)

  for ((k=0; k<80; ++k)); do
    for i in ${!domino[@]}; do
      r=$((RANDOM % 28))
      t=${domino[$i]}
      domino[$i]=${domino[$r]}
      domino[$r]=${t}
    done
  done

  for ((i=0; i<${#gamer[@]}; ++i)); do # проверка на 5 дуплей
    r=0
    for ((k=i*vii; k<i*vii+vii; ++k)); do
      [[ "${domino[$k]:0:1}" == "${domino[$k]:1:1}" ]] && ((r++))
    done
    [[ ${r} -gt ${maxdb} ]] && break
  done

  if [[ "${i}" -lt "${#gamer[@]}" ]]; then
    echo "${gamer[$i]}: ${domino[@]:${i}*7:7}"
    if [[ "${i}" -ne 0 ]]; then
      echo "${msg_ihave} ${msg_maxdb[$r]} ${msg_bemix}"
      read -rsn1 -p "${msg_any_key}"
      echo -e '\n----------'
      f_mixer
      return
    else
      echo -n "${msg_yhave} ${msg_maxdb[$r]} ${msg_qbmix}"
      while true; do
        read -r -p ":"
        case ${REPLY} in
          [Yy])
            echo '----------'
            f_mixer
            return
            ;;
          [Nn])
            echo '----------'
            break
            ;;
          *) echo -n "${msg_try_again}" ;;
        esac
      done
    fi
  fi

  for ((i=0; i<${#gamer[@]}; ++i)); do # проверка на 6 одинаковых
    for (( t=0; t<7; ++t )); do # азы, двойки, тройки итд
      r=0
      for (( k=i*vii; k<i*vii+vii; ++k)); do
        [[ "${domino[k]:0:1}" == "${t}" ]] && ((++r))
        if [[ "${domino[k]:0:1}" != "${domino[k]:1:1}" ]]; then
          [[ "${domino[k]:1:1}" == "${t}" ]] && ((++r))
        fi
      done
      [[ "${r}" -gt "${maxeq}" ]] && break 2
    done
  done

  if [[ "${i}" -lt "${#gamer[@]}" ]]; then
    [[ "${r}" -lt 5 ]] && (( t+=7 )) # локализация
    echo "${gamer[i]}: ${domino[@]:i*7:7}"
    [[ "${i}" -ne 0 ]] && echo -n "${msg_ihave} " || echo -n "${msg_yhave} "
    echo "${r} ${msg_maxeq[t]} ${msg_bemix}"
    read -rsn1 -p "${msg_any_key}"
    echo -e '\n----------'
    f_mixer
    return
  fi
}

f_0ut(){
  echo -e "${gamer[$mover]}: ${snake[@]}"
}

f_round(){

  local i
  i=${domino[@]:$mover*7:7}
  if [[ -z "${i}" ]]; then
    echo "${gamer[$mover]}: ${msg_finish}"
    state="true"
    return
  fi

  if [[ "${snake[-1]:1:1}" == "${snake[0]:0:1}" ]]; then
    for i in ${domino[@]}; do
      [[ "${snake[-1]:1:1}" == "${i:0:1}" ]] && return
      [[ "${snake[-1]:1:1}" == "${i:1:1}" ]] && return
    done

    state="false"

    if ${dbfish}; then
      if [[ "${snake[-1]:0:1}" == "${snake[-1]:1:1}" ]] || [[ "${snake[0]:0:1}" == "${snake[0]:1:1}" ]]; then
        for (( i=1; i < ${#gamer[@]}; ++i )); do
          if [[ "${played[mover-i]:(-1):1}" ==  "${snake[-1]:1:1}" ]]; then
            (( mover -= i ))
            [[ "${mover}" -lt 0 ]] && (( mover += ${#gamer[@]} )) # избавляемся от минуса
            break
          fi
        done
        echo "${msg_dbfish}"
        return
      fi
    fi

    echo "${msg_fish}"
    return
  fi
}

f_choice(){

  for ((i = 7*mover; i < 7*mover+7; i++)); do
    if [[ ${snake[-1]:1:1} == ${domino[$i]:0:1} ]]; then
      snake+=( "${EC}${domino[$i]}${DC}" )
      played[mover]+=" ${snake[0]:0:1}${domino[$i]}"
      f_0ut
      snake[-1]="${domino[$i]}"
      domino[$i]=''
      break
    elif [[ ${snake[0]:0:1} == ${domino[$i]:0:1} ]]; then
      domino[$i]="${domino[$i]:1:1}${domino[$i]:0:1}"
      snake=( "${EC}${domino[$i]}${DC}" "${snake[@]}" )
      played[mover]+=" ${snake[-1]:1:1}${domino[$i]}"
      f_0ut
      snake[0]="${domino[$i]}"
      domino[$i]=''
      break
    elif [[ ${snake[-1]:1:1} == ${domino[$i]:1:1} ]]; then
      domino[$i]="${domino[$i]:1:1}${domino[$i]:0:1}"
      snake+=( "${EC}${domino[$i]}${DC}" )
      played[mover]+=" ${snake[0]:0:1}${domino[$i]}"
      f_0ut
      snake[-1]="${domino[$i]}"
      domino[$i]=''
      break
    elif [[ ${snake[0]:0:1} == ${domino[$i]:1:1} ]]; then
      snake=( "${EC}${domino[$i]}${DC}" "${snake[@]}" )
      played[mover]+=" ${snake[-1]:1:1}${domino[$i]}"
      f_0ut
      snake[0]="${domino[$i]}"
      domino[$i]=''
      break
    fi
  done
  if [[ ${i} -eq ${mover}*7+7 ]]; then
    echo "${gamer[$mover]}: ${msg_skip}"
    played[mover]+=" ${snake[0]:0:1}${snake[-1]:1:1}-"
  fi
}

###
### file domino.bash
###

#!/bin/bash
 
. vars.inc
. msgs.inc
. func.inc

echo -en "\ec" # очистка терминала
clear

gamer[0]=${USER}

while true; do

  played=()
  snake=()
  state=''

  f_mixer

  (( score[0] + score[1] )) || mover=''

  case ${mover} in #################################################### первый ход
    '')
      for i in ${!domino[@]}; do
        if [[ ${domino[$i]} == 11 ]]; then
          mover=$(( i / 7 ))
          break
        fi
      done
      ;;
    0)
      echo -n ${domino[@]:${mover}*7:7}
      while true; do
        read -r -p ":"
          case $REPLY in
            [0-6][0-6])
              for ((i=0; i<7; i++)); do
                if [[ "${REPLY}" == "${domino[$i]}" ]] || [[ "${REPLY:1:1}${REPLY:0:1}" == "${domino[$i]}" ]]; then
                  domino[$i]="${REPLY}"
                  break 2
                fi
              done
              ;&
            *) echo -n "${msg_try_again}" ;;
          esac
      done
      echo '----------'
      ;;
    [1-3]) i=$((RANDOM % 7 + 7 * mover)) ;;
  esac

  snake+=( "${EC}${domino[$i]}${DC}" )
  played[mover]+=" ${domino[$i]}"
  f_0ut
  snake[-1]="${domino[i]}"
  domino[$i]=''
  super="${mover}"

  while true; do #################################################### игра

    (( ++mover ))
    for (( ; mover < ${#gamer[@]}; ++mover )); do
      f_choice
      f_round
      [[ "${state}" ]] && break 2
    done

    mover=0
    echo '----------'
    echo -n ${domino[@]:mover*vii:vii}

    while true; do
      read -r -p ':'
      case $REPLY in
        [0-6][0-6])
          for ((i=0; i<vii; i++)); do
            if [[ "${REPLY}" == "${domino[$i]}" ]] || [[ "${REPLY:1:1}${REPLY:0:1}" == "${domino[$i]}" ]]; then
              if [[ ${snake[-1]:1:1} == ${REPLY:0:1} ]]; then
                domino[$i]="${REPLY}"
                snake+=( "${EC}${domino[$i]}${DC}" )
                played[mover]+=" ${snake[0]:0:1}${domino[$i]}"
                echo '----------'
                f_0ut
                snake[-1]="${domino[$i]}"
                domino[$i]=''
                break 2
              elif [[ ${snake[0]:0:1} == ${REPLY:0:1} ]]; then
                domino[$i]="${REPLY:1:1}${REPLY:0:1}"
                snake=( "${EC}${domino[$i]}${DC}" "${snake[@]}" )
                played[mover]+=" ${snake[-1]:1:1}${domino[$i]}"
                echo '----------'
                f_0ut
                snake[0]="${domino[$i]}"
                domino[$i]=''
                break 2
              elif [[ ${snake[-1]:1:1} == ${REPLY:1:1} ]]; then
                domino[$i]="${REPLY:1:1}${REPLY:0:1}"
                snake+=( "${EC}${domino[$i]}${DC}" )
                played[mover]+=" ${snake[0]:0:1}${domino[$i]}"
                echo '----------'
                f_0ut
                snake[-1]="${domino[$i]}"
                domino[$i]=''
                break 2
              elif [[ ${snake[0]:0:1} == ${REPLY:1:1} ]]; then
                domino[$i]="${REPLY}"
                snake=( "${EC}${domino[$i]}${DC}" "${snake[@]}" )
                played[mover]+=" ${snake[-1]:1:1}${domino[$i]}"
                echo '----------'
                f_0ut
                snake[0]="${domino[$i]}"
                domino[$i]=''
                break 2
              fi
            fi
          done
          ;;&
        '')
          for ((i=0; i<vii; ++i)); do
            [[ "${snake[-1]:1:1}" == "${domino[$i]:0:1}" ]] && break
            [[ "${snake[0]:0:1}" == "${domino[$i]:0:1}" ]] && break
            [[ "${snake[-1]:1:1}" == "${domino[$i]:1:1}" ]] && break
            [[ "${snake[0]:0:1}" == "${domino[$i]:1:1}" ]] && break
          done
          if [[ "${i}" -eq "${vii}" ]]; then
            echo '----------'
            echo "${gamer[$mover]}: ${msg_skip}"
            played[mover]+=" ${snake[0]:0:1}${snake[-1]:1:1}-"
            break
          fi
          ;&
        *) echo -n "${msg_try_again}" ;;
      esac        
    done

    f_round
    [[ "${state}" ]] && break

  done #################################################### считаем

  played=(0 0 0 0) # сначала считаем всех

  for ((i=0; i<4; i++)); do
    for ((k=0; k<7; k++)); do
      played[$i]=$(( ${domino[7*i+k]:0:1} + ${domino[7*i+k]:1:1} + played[i] ))
    done
  done

  if ${dbzerox}; then
    for ((i=0; i<4; i++)); do
     [[ ${played[i]} -eq 0 ]] && played[$i]=10
    done
  fi

  if ${state}; then # если игрок закончил обнуляем очки
    played[mover-0]=0
    played[mover-2]=0
  else
    echo "${gamer[mover]}:" ${domino[@]:7*(mover-0):7} # если рыба, выводим камни
  fi

  echo "${gamer[mover-2]}:" ${domino[@]:7*(mover-2):7} # выводим всех остальных
  echo "${gamer[mover-1]}:" ${domino[@]:7*(mover-1):7}
  echo "${gamer[mover-3]}:" ${domino[@]:7*(mover-3):7}
  
  if (( (played[0] + played[2]) == (played[1] + played[3]) )); then
    (( eggs+=(played[0] + played[2])*2 ))
    continue
  fi

  (( i = (played[0] + played[2]) > (played[1] + played[3]) ? 0 : 1 )) # индекс пары, набравшей большее кол-во очков

  echo -n "${gamer[i]} + ${gamer[i+2]} = " # вывод проигравшей пары
  
  [[ ${score[i]} -ne 0 ]] && echo -n "${score[i]} + " # выводим, если есть, счет

  [[ ${fence[i]} -ne 0 ]] && echo -n "${fence[i]} + " # вывод забора, если есть

  echo -n "${played[i]} + ${played[i+2]} " # набранные очки

  if [[ ${score[i]} -eq 0 ]] && (( (played[i] + played[i+2]) < xiii )); then # если нет записи и набрали меньше xiii

    (( fence[i] += played[i] + played[i+2] )) # считаем результат на забор

    echo "= ${fence[i]} ${msg_onfence}" # окончательный вывод забора

  else # если есть запись или если нет записи и набрали больше 13, то пишем в счет

    [[ "${eggs}" -ne 0 ]] && echo -n "+ ${eggs}(${msg_eggs}) " # выводим, если есть, яйца

    (( score[i] += played[i] + played[i+2] + fence[i]  + eggs )) # считаем результат

    echo "= ${score[i]}" # выводим окончательный результат

    fence[!i]=0 # и забор противника сгорает
    eggs=0
  
  fi

  echo "${msg_total_score} ${score[0]} : ${score[1]}"

  if [[ ${score[$i]} -gt ${hundred} ]]; then
    [[ ${i} -eq 0 ]] && echo "Вы козёл :-)" || echo "Вам просто повезло."
    break
  fi

  echo '----------'

done

exit 0

 ,

sudoapter
()

Docker сожрал диск

Форум — Admin

Собственно, сабж

root@maumyrtille:~# du -shc /var/lib/docker/*
116K	/var/lib/docker/buildkit
5.4G	/var/lib/docker/containers
4.0K	/var/lib/docker/engine-id
27M	/var/lib/docker/image
236K	/var/lib/docker/network
6.9G	/var/lib/docker/overlay2
469M	/var/lib/docker/plugins
4.0K	/var/lib/docker/runtimes
4.0K	/var/lib/docker/swarm
8.0K	/var/lib/docker/tmp
554M	/var/lib/docker/volumes
14G	total
root@maumyrtille:~# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          22        21        2.842GB   236.8MB (8%)
Containers      25        24        1.212MB   0B (0%)
Local Volumes   19        16        564.3MB   0B (0%)
Build Cache     0         0         0B        0B
root@maumyrtille:~# docker system prune
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - unused build cache

Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B

Чем занято более 10 ГБ?

 ,

KivApple
()

Переезжаем на Fish

Статьи — Администрирование
Переезжаем на Fish

Fish — это современный командный интерпретатор, недавно переписанный на Rust, который не требует особой настройки, поддерживая из коробки автодополнение и подсветку синтаксиса. Является лучшим Unix SHELL по версии Slant.

( читать дальше... )

 , ,

rtxtxtrx
()

Какие есть альтернативы pip, чтобы каждый venv не весил гигабайты?

Форум — General

Я устал от этого:

$ du -hs _venv*
7.3G	_venv.llm
7.4G	_venv.owui
7.2G	_venv.sd

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

В идеале чтобы оно было в репозиториях Debian 12. Ну или хотя бы умело самообновляться.


Решето
Решено

 ,

mord0d
()

Настраиваем для браузера несколько выходов на внешние прокси и удобно переключаемся между ними

Статьи — Desktop

Почему не VPN

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

Суть решения

Дело в том, что мне нравятся Google Chrome и Microsoft Edge, но вот беда, нормально работать с прокси они не умеют. Поэтому, проведя некоторые изыскания, я смог создать рабочий конфиг на основе privoxy и плагина для упомянутых браузеров Proxy SwitchyOmega.

privoxy обеспечивает socks5-соединение, а Proxy SwitchyOmega даёт возможность менять параметры подключения в любой момент, в том числе – автоматически по выбранному шаблону, при этом может работать с несколькими внешними прокси.

( читать дальше... )

 , , , ,

unclestephen
()