LINUX.ORG.RU

Сообщения InterVi

 

Самый вредный и опасный подход в программировании

Форум — Talks

По мотивам: Поделитесь мнением про оптимизации и подходы, которые вам никогда не пригодились или оказались ложными/вредными

Отказ от ORM приводит к двум возможным сценариям:

  1. Написанию своего ORM. Только он будет кривой, косой, глючный и не безопасный.
  2. Написанию лапши, как в 99.9% PHP бэка времён нулевых (хотя и сейчас ситуация не сильно изменилась).

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

Есть 1% случаев, когда отказ от ORM оправдан, а обвязку пишет гуру. По ссылке как раз такое исключение (имеется в виду ссылка на холивар из оригинальной темы). В таком случае возникает ещё один сценарий:

  1. Бизнес-логика переезжает из кода проекта в код на SQL. Без скиллового гуру такой код быстро становится кривым, косым и не безопасным говнокодом.

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

В большинстве случаев ORM удобен, быстр для разработки и безопасен, а дебажить SQL запросы никогда не понадобится, потому что там простой CRUD.

Крупные проекты содержат говнокод. ORM, фреймворки, библиотеки — они им напичканы. Профаны, видя такое, кидаются писать своё решение. Но они не знают, что за каждым хаком стоит необходимость, продиктованная особенностями и ограничениями, выясняющимися лишь в процессе разработки. В итоге своё «правильное» решение превращается в ещё более худший говнокод. Только вот за инструментами стоит команда, тестировщики, сообщество — которое пишет баг-репорты, кидает PR. А за своим решением стоит 1 разработчик. Поэтому своё решение всегда оказывается хуже готового.

А теперь самый сок:

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

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

P.S. Помнится, на ЛОРе был некто с псевдонимом царь. Был против всех CMS, скриптовых языков, фрейморков и ORM-ов. Несколько лет писал свой движок на сях, а за неимением хоть чего-то рабочего, вёл блог в blogspot. У меня не осталось ссылки. Кто в курсе — написал ли он своё поделие, или же «разработчик ушёл в депрессию»?

P.P.S. Другой, более известный велосипедист, допускает примитивный XSS в самописной CMS. Лучше читать оригинальную новость, она более содержательна. И всё это во имя отказа от СУБД, ведь когда на сервере заканчивается дисковое пространство, файлы могут повредиться (такой аргумент звучал в интервью Бороде)!

P.P.P.S. Меня тоже не обошло стороной, ведь я свои парсеры и прочую херомуть писал. Хорошо, что вовремя остановился.

 ,

InterVi
()

FyneDesk: элегантная DE на go + куча классных приложений

Форум — Talks

Искал не напряжные кроссплатформенные фреймворки (спойлер: всё грустно) и наткнулся на Fyne (на самом деле давно был в закладках, но потыкал только сейчас). Проект пилят с 2018, но он ещё молодой и особой популярности у него (НЕЗАСЛУЖЕННО) нет, судя по количеству приложух.

крч, некоторые приложухи с галереи сайта:

  • Fin: логин-менеджер
  • FyneDesk: DE в стиле старой убунты на Unity
  • Fybro: простой мессенджер для Telegram, Discord, WhatsApp (как Pidgin когда-то, пока плагины под него не сдохли без поддержки)
  • YTB Downloader: простая качалка для YouTube, ничего лишнего
  • Task Manager: список задач, тоже ничего лишнего

Мне очень зашёл стиль, который не GTK и не QT, которые сильно изуродовались в последнее десятилетие. Никаких кнопок в полэкрана и всего такого — нормальный, человеческий GUI.

Накатывается легко — это же гошечка, там всё компилится в пару команд. Опакетить бы такую прекрасную находку…

Wayland поддерживается, уже давно (с 2020 где-то).

Особенно зашёл FyneDesk — я считаю, его легко допиливать под себя, да там и упор сделан именно на эту фичу. И он воплощает именно тот минимализм, которого так не хватает во всяких разожравшихся XFCE, которые сегфолтятся и до сих пор нормально не поддерживают вяленд.

@Qui-Gon глянь, это получше голого wayfire будет, который тоже сегфолтится на каждом клике. Наконец-то человеческая DE, под которую легко писать — никаких тебе си, крестов, легаси, питон-конфигов сборки на миллион строк (ведь сраный си принципиально несовместим с концепцией пакетного менеджера), растов и прочего неподдерживаемого оверхед говна. (предыстория баттхёрта)

 , ,

InterVi
()

ungoogled chromium выкинули из реп

Форум — Talks

Он несколько лет присутствовал в chaotic-aur. И вдруг я вижу его только в AUR, обновлённым на несколько версий. В репах пусто. Такое уже было, хз повторится ли этот опыт. Странно для пакета с 353 голосами, что он не в extra, а только в маргинальных репах. Добавить bin пакет в AUR разработчики не хотят.

Держу в курсе.

Кто собирал хромиум — сколько он собирается? Есть ли смысл пытаться на слабом ноуте?

Зависимости у него интересные:

:: 6 dependency также будет установлен для этой операции.
   extra/gn                 -> 0.2201.feafd101-1
   (make dependency of ungoogled-chromium)
   extra/gperf              -> 3.1-5
   (make dependency of ungoogled-chromium)
   extra/lld                -> 19.1.6-1
   (make dependency of ungoogled-chromium)
   extra/python-installer   -> 0.7.0-10
   (make dependency of python-future)
   extra/rust               -> 1:1.84.0-1
   (make dependency of ungoogled-chromium)
   extra/rust-bindgen       -> 0.71.1-1
   (make dependency of ungoogled-chromium)

 ,

InterVi
()

XFCE, как переключать раскладку под wayland?

Форум — Desktop

Желательно виджет в трей, ну или чтоб просто сочетание клавиш работало. Есть вменяемые рецепты? Смог найти только горы каких-то xml конфигов хрен пойми чего.

 , , ,

InterVi
()

ipv6 не хочет работать, как починить dns?

Форум — General

Проблема та же, что обсуждалась на арчефоруме. Только не пойму, что мне сделать с dnscrypt, чтобы работало — такие кейсы с ним не гуглятся.

[root@hard ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: enp2s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether f8:75:a4:7b:3a:5b brd ff:ff:ff:ff:ff:ff
3: wlp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 28:39:26:a4:b7:01 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.101/24 brd 192.168.0.255 scope global dynamic noprefixroute wlp1s0
       valid_lft 5282sec preferred_lft 5282sec
    inet6 fe80::6b5a:d14c:950f:a23d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@hard ~]# ip -6 route
fe80::/64 dev wlp1s0 proto kernel metric 1024 pref medium
[root@hard ~]# ping -6 2407:a080:7000:10e::a
ping: connect: Сеть недоступна

 , , ,

InterVi
()

minetest переименовали в luanti

Форум — Talks

Уже пару недель как, новость (есть перевод на опеннете). Процесс пока только начался, потихоньку переименовывают свои ресурсы.

И ещё минорный 5.9.1 вышел. На новость нет ни сил, ни времени, поэтому сюда пишу. Чтобы напомнить о классной игре.

Его иногда засирают за баги (а у кого их нет?) и за выбор пути развития. Последнее лично мне нравится: вместо приколоченного гвоздями геймплея можно собрать игру на свой вкус, как конструктор. Что я и делаю периодически. Но в основном в voxelibre играю.

В оригинал отыграл ~10 лет, больше не вывожу. Тормозит как мразь, сжирает все ресурсы, родной лаунчер говно страшное, пиратские — ещё большее говно с вирусами, интерфейс под full hd нормально не масштабируется, а если захотеть поставить моды… продолжать могу долго. В minetest, теперь уже luanti, всё намного лучше. Даже норм звуки в модах подъехали (на мой вкус лучше, чем в оригинале).

Такие дела. Был один ЛОРовский сервачок, давно. Но всплыл. Эх, жаль…

 , ,

InterVi
()

при сборке контейнера ломается база

Форум — Admin

Происходит какая-то магия, условие для которой — пересобрать контейнер с приложением. Причём нужно чтобы в коде были изменения, иначе не прокатывает. В логе вижу вот это:

PostgreSQL Database directory appears to contain a database; Skipping initialization

2024-09-17 18:07:49.175 UTC [1] LOG:  starting PostgreSQL 16.4 (Debian 16.4-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
2024-09-17 18:07:49.175 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2024-09-17 18:07:49.175 UTC [1] LOG:  listening on IPv6 address "::", port 5432
2024-09-17 18:07:49.178 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2024-09-17 18:07:49.183 UTC [28] LOG:  database system was interrupted; last known up at 2024-09-16 22:50:19 UTC
2024-09-17 18:07:49.258 UTC [28] LOG:  database system was not properly shut down; automatic recovery in progress
2024-09-17 18:07:49.261 UTC [28] LOG:  redo starts at 0/1D7BCB8
2024-09-17 18:07:49.261 UTC [28] LOG:  invalid record length at 0/1D7BDA0: expected at least 24, got 0
2024-09-17 18:07:49.261 UTC [28] LOG:  redo done at 0/1D7BD68 system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s
2024-09-17 18:07:49.264 UTC [26] LOG:  checkpoint starting: end-of-recovery immediate wait
2024-09-17 18:07:49.268 UTC [26] LOG:  checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.002 s, sync=0.001 s, total=0.006 s; sync files=2, longest=0.001 s, average=0.001 s; distance=0 kB, estimate=0 kB; lsn=0/1D7BDA0, redo lsn=0/1D7BDA0
2024-09-17 18:07:49.272 UTC [1] LOG:  database system is ready to accept connections

И база становится девственно чиста. Собираю вот так:

sudo docker compose build
sudo docker compose up -d

хост:

Linux hostname 6.8.0-41-generic #41-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug  2 20:41:06 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

Пробовал снести все файлы — не помогло. Как они вообще могут пересекаться? Само приложение ничего странного не делает (вроде бы). Это VPS, поэтому железо протестировать не могу. Обновлял систему, перезагружал — всё работает и не ломается, даже база.

В логах приложения (на django) ничего интересного не вижу, все запросы проходят без ошибок, включая миграции. У моделей только CRUD, там просто нечему насиловать базу.

 , ,

InterVi
()

как распараллелить несколько команд?

Форум — Admin

Я часто пишу на скриптовых языках, в основном python + django. А у них нет нормального мультипотока. Это приводит к тому, что задачи по таймеру приходится выносить в отдельный контейнер.

Мне нужна тулза, которая пускает несколько команд в разных потоках и умеет писать логи, чтобы пускать несколько скриптов в одном контейнере. Есть такая? Идея лёгкая в реализации на нормальных яп, поэтому не хочу писать велосипед. Сам нашёл только очень странные решения вроде GNU parallel.

 ,

InterVi
()

ЛОР как эффект присутствия, у вас он есть?

Форум — Talks

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

Сегодня вот ardour сдох с сегфолтом на этапе парсинга конфигов. Уже когда всё раписал — в цветастой подсветке pacman.log увидел обновление libxml2:

[2024-06-13T11:39:32+0300] [ALPM] upgraded libxml2 (2.12.7-1 -> 2.13.0-1)

И откат помог. Поэтому поместил в теги — кто-нибудь ещё на это нарвётся, сегфолты могут быть и в других программах. 0x0000000000000000 in ?? () — опять сишники не справились с указателями.

А у вас есть этот ЛОР-эффект присутствия?

 , ,

InterVi
()

Ardour постоянно грузит процессор (даже когда ничего не вопроизводится)

Форум — Multimedia

В других DAW (например, LMMS) дорожки обрабатываются только во время воспроизведения или экспорта. В Ardour же это происходит постоянно, что создаёт неудобства, особенно в больших проектах. Можно ли это как-то пофиксить?

Если это важно: 8.6-1, арч. От типа дорожек (аудио или midi) не зависит (есть чисто с аудио, там то же самое).

Оффтоп, но там ещё настройки ZynAddSubFX слетают после закрытия проекта, хотелось бы тоже пофиксить.

 ,

InterVi
()

фриз диалога выбора файла

Форум — Desktop

В некоторых приложениях (например, телеграм) не могу выбрать файл — происходит зависание намертво при открытии даилога или когда уже выбрал. При этом полностью выжирается одно ядро. В KDE и mate просто долго висло с нагрузкой на проц, а в xfce вообще никак. Под другими юзерами такого поведения нет, там всё нормально. Какие конфиги в хомяке надо зачистить?

 ,

InterVi
()

почему KDE такое дерьмо?

Форум — Talks

Каждый мажорный релиз — всегда драма. Я пришёл на 4, всё было прекрасно. А в 5 сломали так, что целый год даже виджеты на рабочий стол нельзя было добавить, потому что они забивали проц на 100%. Ну и ещё много чего сломали, это стал просто мусор на несколько лет. Но всё-таки допилили. Обещали наконец стабильность, ведь теперь всё оптимизировано и нарезано на модули.

И вот опять… в новостях то всё классно. А на деле:

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

Остальное проверять не стал. В ближайшие N лет KDE опять будет неюзабельным куском говна.

НУ КАКОГО ЧЁРТА?!

Даже гном себе такого не позволяет.

 

InterVi
()

email без привязки к номеру

Форум — Talks

Реально ли? Нужен для ерундовой задачи, но добыть его нигде не могу. Покупать номера пока не хочется, а бесплатные не прокатывают. В некоторых местах якобы можно обойтись резервной почтой, но временные адреса оно не жрёт и сразу просит номер.

 ,

InterVi
()

поиски нормально email клиента

Форум — Desktop

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

  1. Минимализм, но не консоль. Никаких электронов и супер-комбайнов (как Thunderbird).
  2. Мульти-аккаунт.
  3. Есть хоть какая-то поддержка. Васянские ноунейм говнокоды компилить не буду.

Ближайшие клиенты:

  • Sylpheed: тупой (учётку нельзя удалить, лол), забагованный (imap не работает, только pop), грузит все письма вместо последних. В общем, слишком сыро.
  • Trojita: почти идеальный вариант (в некоторых папках почему-то отображает только в HTML без переключалки на plain). Но нет мульти-аккаунта (васянофорк даже без мейнтейнера в AUR не удовлетворяет 3 требование).
  • KMail: перегруженный интерфейс, супер-комбайн с прожорливым akonadi. Если был бы хотя бы без последнего — уже сойдёт.

Ну неужели больше ничего нет?

 ,

InterVi
()

паттерны для правильного (и типизированного) JavaScript

Форум — Development

Навеяно горячими стримами Мурыча. Я вот задумался: а ведь действительно, можно обойтись без TypeScript, если придумать удобные паттерны для JavaScript. Не хватает двух вещей:

  • Типизации на входе и на выходе, внутри тел функций и у констант она избыточна.
  • Интерфейсов. Для классов можно использовать наследование, но для объектов уже надо думать над валидаторами.

Без остального сахара можно обойтись.

Первое можно решить с помощью optional, как в Java. Можно написать один обработчик для всех типов (с методами getString, getInt и т. д.), или разные. Привязать к синглтону, чтобы мочь глобально отключать проверки в рантайме (например, по флагу в env). Так мы получаем удобные подсказки в редакторе и работающую проверку типов.

Вот с интерфейсами для Object / Array / Set / Map сложнее. Думаю, нужно поэкспериментировать с optional, чтобы на выходе тоже дёргались типизированные методы.

А чтобы получить типизированные интерфейсы для классов, просто наследуемся от типизированного родителя: где на входе и выходе методов optional, а тело просто делает throw new Error('not implemented').

Теоретически, это всё можно запихнуть в библиотечку. Но не знаю, дойдёт ли у меня до такого, я очень задолбался и могу разве что на своих проектах поэкспериментировать, когда (хз когда) такая возможность представится. Может, кто из ЛОРовцев осилит. Ну и высказывайте свои идеи, чтоб собрать их в кучу.

Хочется изобрести рабочую методологию для написания больших и запутанных проектов, а не использовать костыли вроде TypeScript. Это не кажется невозможным. Или может она уже есть, а я о ней не знаю? Из известного нравится подход Тимура Шемсединова: чистый JS с *.d.ts декларациями. Но это не совсем то.

 ,

InterVi
()

как подружить konqueror с khtml?

Форум — Desktop

установил khtml, выбираю его движком в настройках, но настройка всегда сбивается на WebEngine

 , ,

InterVi
()

nvim проверка грамматики (LO Writer для терминала)

Форум — General

Хочу писать markdown / txt файлы прямо в nvim, но для полноценной работы мне нужна поддержка languagetool. Сделать это можно через ltex-ls, только вот все плагины в архиве. Даже официальный coc-ltex обновлялся 2 года назад (но я этот JS-буллшит всё равно не хочу ставить). Попробовал grammar-guard — никакого эффекта, а попытка его конфигурировать вызывает вот это:

[lspconfig] Cannot access configuration for ltex-ls. Ensure this server is listed in `server_configurations.md` or added as a custom server.

Через mason накатил ltex-lsp, но тоже никакого эффекта. Есть идеи?

 , ,

InterVi
()

как IT и GNI/Linux испортили мне жизнь

Форум — Talks

Изложил, вот, свою историю и принёс вам лулзов про вход в IT.

Ъ: Тревога, выгорание, депрессия, синдром самозванца, перфекционизм, подсевшее зрение, забывчивость, слитая оффлайн жизнь. В общем, полный набор гика.

А у вас так же или я «счастливчик»?

 ,

InterVi
()

проброс порта из хоста в VirtualBox

Форум — Admin

Задача: на хосте запущен веб-сервер, нужно сделать его доступным в виртуалке. Как? Всю голову сломал, ничерта не получается. Хост — арч, виртуалка — win.

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

 , ,

InterVi
()

самый простой CI

Форум — Admin

Есть что-нибудь ещё проще, чем gocd? Мне нужно просто git pull (с паролем или ключом) по интервалу и запуск команды, если есть новые коммиты. Сам пока писать не хочу, вдруг такое уже есть.

 , ,

InterVi
()

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