LINUX.ORG.RU

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

Как сделать профиль A2DP доступным?

 , , , ,

Обновил дебьян с 11 до 12, кеды такие красивые сразу, и тут такое на вентилятор, подключаю bluetooth наушники JBL TUNE500BT а они играют котофонию, хотя до этого на качество звука я не жаловался никогда. Проблема очевидно в профиле воспроизведения, точнее в том что считает A2DP недоступным. Хочется нормально музыку слушать.

Важая вырезка с команды pacmd list-cards:

...
profiles:
                a2dp_sink: Воспроизведение высокого качества (приёмник A2DP) (priority 40, available: no)
                handsfree_head_unit: Гарнитура (HFP) (priority 30, available: yes)
                off: Выключено (priority 0, available: yes)
        active profile: <handsfree_head_unit>
...

В общем все возможные гуи мне об этом и говорят, pipewire кстати тоже не смог подцепить A2DP.

Полный вывод:

$ pacmd list-cards 
2 card(s) available.
    index: 0
        name: <alsa_card.pci-0000_00_1f.3>
        driver: <module-alsa-card.c>
        owner module: 6
        properties:
                alsa.card = "0"
                alsa.card_name = "HDA Intel PCH"
                alsa.long_card_name = "HDA Intel PCH at 0xf1320000 irq 138"
                alsa.driver_name = "snd_hda_intel"
                device.bus_path = "pci-0000:00:1f.3"
                sysfs.path = "/devices/pci0000:00/0000:00:1f.3/sound/card0"
                device.bus = "pci"
                device.vendor.id = "8086"
                device.vendor.name = "Intel Corporation"
                device.product.id = "9d71"
                device.product.name = "Sunrise Point-LP HD Audio"
                device.form_factor = "internal"
                device.string = "0"
                device.description = "Встроенное аудио"
                module-udev-detect.discovered = "1"
                device.icon_name = "audio-card-pci"
        profiles:
                input:analog-stereo: Аналоговый стерео вход (priority 32833, available: unknown)
                output:analog-stereo: Аналоговый стерео выход (priority 39268, available: unknown)
                output:analog-stereo+input:analog-stereo: Аналоговый стерео дуплекс (priority 39333, available: unknown)
                output:hdmi-stereo: Digital Stereo (HDMI) выход (priority 38668, available: unknown)
                output:hdmi-stereo+input:analog-stereo: Digital Stereo (HDMI) выход + Аналоговый стерео вход (priority 38733, available: unknown)
                output:hdmi-stereo-extra1: Digital Stereo (HDMI 2) выход (priority 5700, available: no)
                output:hdmi-stereo-extra1+input:analog-stereo: Digital Stereo (HDMI 2) выход + Аналоговый стерео вход (priority 5765, available: unknown)
                output:hdmi-surround-extra1: Digital Surround 5.1 (HDMI 2) выход (priority 600, available: no)
                output:hdmi-surround-extra1+input:analog-stereo: Digital Surround 5.1 (HDMI 2) выход + Аналоговый стерео вход (priority 665, available: unknown)
                output:hdmi-surround71-extra1: Digital Surround 7.1 (HDMI 2) выход (priority 600, available: no)
                output:hdmi-surround71-extra1+input:analog-stereo: Digital Surround 7.1 (HDMI 2) выход + Аналоговый стерео вход (priority 665, available: unknown)
                output:hdmi-stereo-extra2: Digital Stereo (HDMI 3) выход (priority 5700, available: no)
                output:hdmi-stereo-extra2+input:analog-stereo: Digital Stereo (HDMI 3) выход + Аналоговый стерео вход (priority 5765, available: unknown)
                output:hdmi-surround-extra2: Digital Surround 5.1 (HDMI 3) выход (priority 600, available: no)
                output:hdmi-surround-extra2+input:analog-stereo: Digital Surround 5.1 (HDMI 3) выход + Аналоговый стерео вход (priority 665, available: unknown)
                output:hdmi-surround71-extra2: Digital Surround 7.1 (HDMI 3) выход (priority 600, available: no)
                output:hdmi-surround71-extra2+input:analog-stereo: Digital Surround 7.1 (HDMI 3) выход + Аналоговый стерео вход (priority 665, available: unknown)
                off: Выключено (priority 0, available: unknown)
        active profile: <output:analog-stereo+input:analog-stereo>
        sinks:
                alsa_output.pci-0000_00_1f.3.analog-stereo/#0: Встроенное аудио Аналоговый стерео
        sources:
                alsa_output.pci-0000_00_1f.3.analog-stereo.monitor/#0: Monitor of Встроенное аудио Аналоговый стерео
                alsa_input.pci-0000_00_1f.3.analog-stereo/#1: Встроенное аудио Аналоговый стерео
        ports:
                analog-input-internal-mic: Internal Microphone (priority 8900, latency offset 0 usec, available: unknown)
                        properties:
                                device.icon_name = "audio-input-microphone"
                analog-input-mic: Microphone (priority 8700, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "audio-input-microphone"
                analog-output-speaker: Speakers (priority 10000, latency offset 0 usec, available: unknown)
                        properties:
                                device.icon_name = "audio-speakers"
                analog-output-headphones: Headphones (priority 9900, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "audio-headphones"
                hdmi-output-0: HDMI / DisplayPort (priority 5900, latency offset 0 usec, available: yes)
                        properties:
                                device.icon_name = "video-display"
                                device.product.name = "G27QC A"
                hdmi-output-1: HDMI / DisplayPort 2 (priority 5800, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "video-display"
                hdmi-output-2: HDMI / DisplayPort 3 (priority 5700, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "video-display"
    index: 3
        name: <bluez_card.E8_D0_3C_7A_6B_E0>
        driver: <module-bluez5-device.c>
        owner module: 23
        properties:
                device.description = "JBL TUNE500BT"
                device.string = "E8:D0:3C:7A:6B:E0"
                device.api = "bluez"
                device.class = "sound"
                device.bus = "bluetooth"
                device.form_factor = "headset"
                bluez.path = "/org/bluez/hci0/dev_E8_D0_3C_7A_6B_E0"
                bluez.class = "0x240404"
                bluez.alias = "JBL TUNE500BT"
                bluetooth.battery = "90%"
                device.icon_name = "audio-headset-bluetooth"
                device.intended_roles = "phone"
                bluetooth.codec = "mSBC"
        profiles:
                a2dp_sink: Воспроизведение высокого качества (приёмник A2DP) (priority 40, available: no)
                handsfree_head_unit: Гарнитура (HFP) (priority 30, available: yes)
                off: Выключено (priority 0, available: yes)
        active profile: <handsfree_head_unit>
        sinks:
                bluez_sink.E8_D0_3C_7A_6B_E0.handsfree_head_unit/#5: JBL TUNE500BT
        sources:
                bluez_sink.E8_D0_3C_7A_6B_E0.handsfree_head_unit.monitor/#10: Monitor of JBL TUNE500BT
                bluez_source.E8_D0_3C_7A_6B_E0.handsfree_head_unit/#11: JBL TUNE500BT
        ports:
                headset-output: Гарнитура (priority 0, latency offset 0 usec, available: yes)
                        properties:

                headset-input: Гарнитура (priority 0, latency offset 0 usec, available: yes)
                        properties:



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


Пофиксил конфиги

  1. /etc/bluetooth/main.conf

В [General]

Name = BlueZ
Disable=headset
  1. /etc/pulse/default.pa

Раскомментировать load-module module-alsa-sink и добавить load-module module-switch-on-connect

Потом ребут

Теперь всё работает

Создателям дебиан шлю привет за божественную настройку A2DP

nikitalol
()

Списки игр

 ,

Ищу списки свободных игр под GNU/Linux. Пока нашёл только это: https://www.allegro.cc/ http://osgameclones.com/

misteralter
()

Как настроить /usr/src/Makefile, чтобы собирал нужное, а не всё-всё-всё

 , ,

Доброго Всем и вся!

Многоуважаемые форумчане, не даёт спокойно спать не найдённый ответ на следующий вопрос: как при вводе команды #cd /usr/src && make buildworld система не компилировала все пакеты для которых у меня скачены исходники, а компилировала бы только определённые пакеты или точнее, только те, которые нужны для работы системы?

Например, зачем мне собирать sendmail, если он мне не нужен?

Куда ковырять? В синтаксис главного Makefile или просто удалить каталог пакета с исходниками из /usr/src?

Спасибо!

Ramirezkiv2
()

Ядро не отдаёт приложению содержимое TCP-пакета, пока не придёт следующий

 , , ,

Есть приложение, которое общается с сервером по TCP. Протокол представляет собой просто запрос-ответ, плюс ещё клиент и сервер отправляют друг другу пинги.

Клиент в бесконечном цикле дёргает read() из сокета, который переведёт в неблокирующий режим.

Проблема в том, что через некоторое время случается так, что клиент не вычитывает ответ, пока не придёт очередной пинг от сервера. То есть, read() всё это время возвращает -1, errno=EAGAIN.

В tcpdump видно, что ответ пришёл вовремя (сразу после запроса). А также видно, что в тот момент, когда клиент наконец-то вычитал, пришёл следующий пакет (пинг).

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

В какую сторону копать?

cudeta
()

Rust: преобразования указателя на трейт в конкретный тип

 

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

use std::collections::HashMap;
use std::any::TypeId;
use std::rc::Rc;

trait MyTrait {
    fn new() -> Self where Self: Sized;

    // Тут ещё какие-нибудь методы
}

struct MyStruct {
    items: HashMap<(i32, TypeId), Rc<dyn MyTrait>>
}

impl MyStruct {
    fn get<T: MyTrait + 'static>(&mut self, key: i32) -> Rc<T> {
        if let Some(item) = self.items.get(&(key, TypeId::of::<T>())) {
            item.clone() as Rc<T>
        } else {
            let item = Rc::new(T::new());
            self.items.insert((key, TypeId::of::<T>()), item.clone());
            item
        }
    }
}

Как правильно конвертировать элемент при его извлечении в тип T?

KivApple
()

Вести с полей стандартизации C++: C++20 design is complete (Kona, 2019-02)

 

На Reddit-е появился большой пост с описанием того, что вошло в C++20 в результате очередного заседания комитета. На этой встрече в С++20 включили:

Modules!

Coroutines!

static, thread_local, and lambda capture for structured bindings.

std::polymorphic_allocator<>.

std::midpoint and std::lerp.

std::execution::unseq execution policy.

std::ssize() free function that returns a signed size.

std::span usability enhancements.

Precalculated hash values in lookup.

На следующей встрече в июне 2019-го будут рассматриваться к включению в C++20 следующие предложения (принципиально они уже одобрены, но до сих пор не были включены из-за незавершености формальных спецификаций):

Expansion statements.

The C++20 synchronization library.

std::format.

constexpr std::vector.

Allow constexpr allocation, but disallow allocations that are not deleted at compile time.

constexpr std::type_info::operator==.

New conceptification of iterators.

Monadic operations for std::optional.

std::source_location.

std::flatmap.

std::flatset.

std::ostream_joiner.

Stack trace library.

std::byteswap.

constinit.

Deprecating some uses of volatile.

Implicit creation of objects for low-level object manipulation.

using enum.

Ну и до кучи указывается, что еще было добавлено в C++20 ранее:

Concepts.

Contracts.

Ranges.

operator<=>.

A lot more constexpr features: consteval functions, std::is_constant_evaluated, constexpr union, constexpr try and catch, constexpr dynamic_cast and typeid.

Feature test macros.

std::span.

Synchronized output.

std::atomic_ref.

За подробностями лучше сходить на Reddit, там много поясняющего текста. Так же можно почитать отчет Херба Саттера.

eao197
()

С++23 уже почти здесь

 

по мотивам прошлой темы: Вести с полей стандартизации C++: C++20 design is complete (Kona, 2019-02)

Появился пост на reddit в котором можно увидеть какие ещё предложения войдут в С++23, возможно войдут в С++23, и не войдут: https://old.reddit.com/r/cpp/comments/qug17i/c23_near_the_finish_line/

Также можно увидеть что уже вошло в С++23 https://en.cppreference.com/w/cpp/compiler_support/23

Жалко, что

P1673 (P1385)	A free function linear algebra interface based on the BLAS	[9] NO
P1385 (P1673)	A proposal to add linear algebra support to the C++ standard library   [9] NO

Но тем не менее получилось не мало.

Кстати, если у вас есть негативный опыт с ranges_v3 и Boost.Range, то std::ranges гораздо более оптимизирован к скорости компиляции:

https://www.reddit.com/r/cpp/comments/qug17i/c23_near_the_finish_line/hkw97si/

fsb4000
()

Прозрачный proxy https

 ,

Всем привет, на данный момент имеется pfsense, на нем openvpn для связи с удаленными офисами, прокси squid(ssl-bump). Появилась потребность сделать зону wi-fi общедоступную, которую нужно контролировать(нужно блокировать и знать кто куда лазает, ну и кэшировать для ускорения), но проблема с телефонами и ноутбуками(у них выбивает недействительный сертификат, т.к. они не могу подгрузить его из центра сертификации). Наткнулся на статью на хабре с squid 3.5.8 - попробовал завелось(кое где криво но это не проблема). Так вот вопрос, что делать? 2 шлюза меня не радует, менять существующий на какой-нибудь linuxовый? или может есть решения с pfsense(я что-то ненашел)? Или есть другие идеи?

рассматриваю debian+Netfilter+squid если есть предложения жду с нетерпением

ps pfsense в свое время выбрал как неплохой и простой комбайн

trivus
()

Навеяно свежей дырой в Xorg

 , ,

Привет, ЛОР!

Ты, наверное, уже видел свежую дыру в Xorg, патч для которой выглядит буквально вот так:

-        else
+        else {
             free(to->button->xkb_acts);
+            to->button->xkb_acts = NULL;
+        }

В связи с этим у меня возник вопрос: а почему в стандартной библиотеке C нет макроса SAFE_FREE()?

#define SAFE_FREE(ptr) do{free(ptr);(ptr)=NULL;}while(0)

Напомню, что значение указателя после вызова free() является неопределённым согласно стандарту. Не только значение памяти, на которое он указывает, но и значение самого указателя, и работа с ним представляет собой жуткое undefined behaviour, а значит единственное что можно сделать – занулить его.

Так вот, почему даже таких банальных вещей нет? Я уже не говорю про строковый тип, а то даже Эдичка тут строки не осилил.

Моя гипотеза тут: C – это язык культа страданий во имя страданий.

hateyoufeel
()

Встраиваемый язык

 , ,

Посоветуйте язык для встраивания. Нужно что-то попроще. Выбираю между Quickjs, mujs, scheme-s7, guile, lua, python, tcl. Или что бы ещё получше, хуже. Питон довольно медленный. js v7 не могу собрать просто, поэтому исключил это как неблагоприятный прогноз. Тикль довольно замороченно встраивать. Луа тоже что-то мне не нравится. Какие бы варианты ещё. От языка мне нужно немного, арифметика да работа со строками, не сложная.

nionio35
()

Линковка при сборке, линковка при запуске. Всё сложно.

 , ,

Есть библиотека, которая может собираться в двух исполнениях, статической или динамической. Назову её условно libseveral. libseveral.so установлена в операционной системе. Есть разделяемые библиотеки (.so), установленные в операционной системе, они ссылаются прямо или косвенно на libseveral.so в динамическом исполнении и тянут её в память за собой, назову их - libanother1.so, libanother2.so и libanother3.so. Есть мой проект разделяемой биллиотеки (назову libroot.so), которая: а) линкует libseveral.a в статическом исполнении, б) линкует системные libanother1.so, libanother2.so и libanother3.so. В результате, libseveral.a в бинарник не попадает, а тот оказывается слинкован с libseveral.so через остальные библиотеки. Я приблизительно понимаю почему, но не уверен.

libseveral.a
libseveral.so

libanother1 -> libseveral.so
libanother2 -> libanother3.so
libanother3 -> libseveral.so

libroot.so -> libseveral.a
libroot.so -> libanother1.so
libroot.so -> libanother2.so

Вопрос. Существует ли способ сделать так, что бы к libroot.so было прилинковано всё содержимое libseveral.a, а остальные библиотеки, libanother… которые линкуются в рантайме не загружали за собой libseveral.so, а вызывали вместо этого libseveral.a, слинкованный в libroot.so? Менять библиотеки, лежащие в операционной системе нельзя, так же как и устанавливать в систему ничего, кроме libroot.so - требование. Мне необходимо, что бы всё прилинкованное к libroot.so вызывало исключительно libseveral.a, т.к. libseveral.a это мой форк. Как-то так.

normann
()

Чем Proton лучше wine + DXVK?

 

На третий день индеец Соколиный Глаз заметил, что у тюремной камеры нет одной стены…

Привет, ЛОР.

Внезапно озадачился вопросом: а есть ли у Proton как цельного продукта преимущества перед wine, к которому руками прикручен DXVK? Я смотрю, что в репозитории @Kron4ek, например, есть сборки и wine, и proton. Есть шанс, что у Proton будет меньше проблем с некоторыми играми?

hobbit
()

C++ modules и системы сборки

 , ,

Кто как собирает проекты с использованием C++ modules?

Компиляторы уже давно умеют их, например, в clang даже объявили deprecated опцию -fmodules-ts и поддержка модулей автоматически включается при активации стандарта C++20.

Однако, собирать руками проекты удовольствия мало. Хочется использовать какую-нибудь систему сборки. И вот тут возникает проблема. Самая популярная система сборки в мире C/C++ - CMake - поддерживает модули только для MSVC, что как бы не очень интересно (так как ограничивает одной платформой, к тому же clang/gcc по моим тестам обычно генерируют более оптимальный код, чем MSVC, даже под Windows). Какие есть альтернативы? Можно ли приобщиться к модулям не путём написания вручную Makefile или Bash-скриптов?

KivApple
()

«Hello world!» под Linux x86_64

 ,

Всем привет. Пытаюсь сгенерировать исполнимый файл, выводящий в терминал «Hello World» под Linux x86_64 путем вызова функции printf и с использованием типа релокации R_X86_64_PC32. Но при попытке запуска выкидывает «Symbol `printf’ causes overflow in R_X86_64_PC32 relocation». Аналогичная программа под Linux x86_32 с релокацией R_386_PC32 работает без проблем.

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

Может кто-нибудь скинуть аналогичный исполнимый файл с выводом строки функцией printf и использованием релокации R_X86_64_PC32 для анализа?

D_V_L
()

Samba share (cifs utils) +Libreoffice: Самоудаляется файл документа при работе в связке Debian+Debian

 , , ,

Столкнулись в офисе с каким-то убийственным багом при работе в Libreoffice с файлом на сетевой шаре.

В офисе 5 компьютеров с Debian 11 (libreoffice из backports) и 3 на Windows 10.

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

На компьютерах с Debian шара подключена через cifs utils в fstab следующей командой: //srv-dc-02/uc /mnt/EDU2022 cifs credentials=/etc/win-credentials-1,uid=1000,gid=1000,dir_mode=0777,file_mode=0777,iocharset=utf8,nobrl,_netdev 0 0

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

Периодически (до нескольких раз в неделю сейчас!) при работе с данным файлом он самоудаляется по непонятным причинам.

Выглядит это так..Сотрудник работает с файлом,нажимает сохранить и получает ошибку вида «Ошибка при сохранении документа ХХХ:путь к файлу+название ХХХ не существует».

Если открыть Dolphin, то видно,что файл реально пропал с шары. Закрываем окошко с ошибкой и сохраняем как новый файл.

Глюк убийственный..нас спасает то,что бэкап 2 раза в день делается утром и вечером.

Кто-нибудь сталкивался с таким? Может у меня в fstab что-то не так на Debian компьютерах?

Пробовал ради интереса самую последнюю версию Libreoffice - та же фигня. Что на стандартной для Debian 11 версии,что для новых.

Похоже очень на этот баг https://bugs.documentfoundation.org/show_bug.cgi?id=127057

PPS Апдейт.. только что удалось воспроизвести баг..

Юзер1 открывает на Debian компьютере1 файл. Юзер2 открывает на Debian компьютере2,выбирает «открыть только для чтения»,юзер1 вносит изменения в файл,нажимает сохранить и моментально получает смертельную ошибку «файл не существует», файл пропадает с шары. Если Юзер2 закроет открытый для чтения файл,то при нажатие сохранить Юзером1 файл сохраняется и восстанавливается

Если Юзер2 открывает на компьютере с WIndows 10 все нормально. баг срабатывает только в связке Debian-Debian

Спасибо

Semel
()

Ядро и epoll_wait(): почему его не тянет вернуться из ядра на первое же событие?

 

Щач будет наркоманский вопрос, конечно. Когда epoll_wait вернулся из ядра и принёс пачку событий, почему он НЕ вернулся сразу же, когда случилось самое первое событие с первым сокетом, а позволил себе постоять в ядре и подождать ещё? Точнее так: допустим я ядро и пришёл какой-то пакет, относящийся к сокету процесса N. Как мне понять - бежать сразу будить процесс N на тему одного сокета или подождать - вдруг в следующие микросекунды навалит ещё пакетов про другие сокеты ЭТОГО ЖЕ процесса и я смогу сходить в N 1 раз оптом?

Ясно, что вопрос в ядре так не ставится, а возврат epoll_wait сразу с пачкой сокетов скорее следствие того, что ядро видит события от сетевухи тоже сразу оптом, оптом рассовывает по сокетам и потом уже смотрит какие бы процессы разбудить. И вообще работать над пакетами событий выгоднее, а не контекстсвитчить туда-сюда - это ясно. Но это все равно лишь дебильные догадки, хотелось бы почитать про сабж детальнее. Ядро разгребает накопившиеся события, относящиеся к одному процессу, не чаще фиксированного интервала, типа 1 миллисек? Сетевуха сгружает тыщи пакетов за одно прерывание? Ядро пытается контекстсвитчить не чаще N микросекунд? В общем, что является причиной того, что epoll_wait() в принципе способен вернуться сразу с пачкой евентов и его не колбасит на каждое. В то же время, если сокетов будет 10К и событие произойдёт только на 1, он вернутся достаточно шустро. Хотя наверное не так шустро, как в DPDK мире и прочем подобном?

trisobakov
()

Вакансия Linux Kernel Engineer в Москве или Казани

 , ,

Дружественная компания ищет специалиста по драйверной модели Linux.

https://cyberprotect.ru/career/linux-kernel-engineer

Ему предстоит проектирование, разработка и сопровождение драйверов для Linux как части специального агента Data Loss Prevention и связанных с контролем различных потоков данных: запись на внешние устройства, передача данных по сети, печать на физические и виртуальные принтеры, копирование данных через буфер обмена. Команда там очень сильная и есть драйверисты под разные платформы, команду расширяют активно. Mid/senior человек нужен Нужно: отличное владение языком С/C++; знание архитектуры и принципов работы ядра Linux; практический опыт написания и поддержки драйверов Linux; знание технологий отладки ядра; умение писать понятный код в userspace.

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

PTO
()

Rust и двусвязный список

 , двусвязный список,

Хорошую тему тут затронули

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

http://contain-rs.github.io/linked-list/src/linked_list/lib.rs.html#11-1388

Или не лучшее? Растаманы и растафобы, собирайтесь на великую битву!

А вот, кстати, ещё про списки:

https://rust-unofficial.github.io/too-many-lists/

den73
()

Микросервисы и точки отказа.

 , ,

Сейчас такая мода на микросервисы... Но смищно когда все микросервисы разворачивают на одном сервере, но это ССЗБ. А еще, когда я рос в ИТ, я помню постулат «Всегда снижай точки отказа», а с развитием микросервисов мне кажется что точек отказа просто писец как больше становиться. Притом админ при каждом обновлении фронта и бэка ставиться бешенной собакой. Обновления «экосистемы» становяться каким-то нетривиальным делом. Еще и микрофронтэнд тут сбоку подползает.


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

splinter
()

юнионы в C++

 

Пишу телегу против плюсов. В связи с этим вопрос - насколько широко в плюсах используются нуль-терминированные строки, юнионы, неумные указатели и всё такое плохое, что делает Си опасным языком.

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

Есть две полярные точки зрения на вопрос:

а) С++ перекрывает Си, поэтому там всё сделано по-другому, поэтому безопасность выше б) С++ - наследник Си и в целом наследует его недостатки.

Поскольку я мало пишу на Си и ещё меньше на Си++, у меня нет сложившегося мнения на эту тему. А у ЛОРа наверняка есть мнение, даже несколько.

den73
()