LINUX.ORG.RU

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

В какие бесплатные игры со свободными исходниками вы играете?

Форум — Games

Я в Xonotic, иногда tremulous, когда-то играл в Planeshift (тупая MMORPG игра, где нужно бегать по полупустому миру и нажимать 100 раз одни и те же кнопки в одинаковой последовательности, очень советую), nethack, warmux.

Недавно узнал про развивающийся свободный движок alephone (засилье жидомасонов!) с помощью которого можно играть в трилогию marathon от bungie, которая уже целиком стала доступна для скачивания

http://halo.bungie.net/news/content.aspx?cid=31991

Это, конечно, не систем шок, но тоже весьма интересный шутер, полный взбесившихся ИИ (которые, кстати, не всегда стремятся уничтожить всех людей на планете/корабле, как шодан) и прочих вкусностей. В общем, вполне современные, продуманные и интересные игры. Не то что щас, всякие YOBA поделия от valve

 

amphibrakhij
()

Грустная история std::optional<T&>

Форум — Talks

TLDR;

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

Фулл кулл стори:

Поскольку конструкция синтаксически валидная, но семантически не однозначная, решили забить на решение вопроса.

Вся драма в красках описана тут. «В красках» в прямом смысле слова - текст сопровождён картинками. Поскольку стори описана от сторонника одной из реализаций и члена коммитета С++, уровень драмы находится на надлежащем уровне.

Всем приятного чтения.

 , ,

LamerOk
()

DE на WinAPI

Форум — Development

Насколько реально сделать окружение для X на основе WinAPI для запуска под Wine, чтобы оно давало и курсор, и оконный менеджер и т.п.? Будет ли такое ПО запускаться под Windows?

 , ,

gedisdone
()

Очередь сообщений с ожиданием нового сообщения в ядре по типу select()

Форум — Development

Пишу приложение, в котором обмен сообщениями между несколькими потоками я собираюсь организовать при помощи очередей сообщений. При чем каждый поток должен ожидать сообщения от нескольких потоков одновременно. То есть, алгоритм ожидания событий должен быть полностью идентичен алгоритму ожидания событий в select(). Сами очереди событий буду писать сам, объектами SysV пользоваться не буду, так как мне не нужно взаимодействие между процессами. Проблема в том, что все алгоритмы, реализации которых мне удалось найти предлагают различные варианты с периодическим опросом и ожиданием, типа sleep(). Но в них присутствует задержка на обработку событий и бессмысленное периодическое просыпание потоков для проверки. Есть ли вариант реализации без этих дефектов? Прошу помощи с информацией.

 ,

leonopulos
()

Ещё один Форт

Форум — Development

Здравствуйте, коллеги!

Любите ли вы язык Форт так же, как полюбил его я? До недавнего времени его не любил. Уважал - да, но любви не было. Как к какому-то забытому старичку из прошлого к нему относился. Лабораторные когда-то в древности на Форте делал. Сделал и забыл. Но так произошло, что в недавнем времени пришлось нудно и долго писать на ассемблере. Иногда такое бывает, тогда и вспомнился язык Форт. И чем больше вспоминаю узнаю Forth, тем он мне кажется интересней и интересней. И кажется незаслуженно забытым.

В общем, ежели вдруг кто захочет освежить память или ознакомиться с языком Форт, то загляните сюда - https://github.com/L4OS/yaforth

Если понравилось - дайте как-нибудь знать. Найдёте ошибку - вдвойне дайте знать.

Если кто желает покритиковать код, стиль, алгогитмы, поучить программировать/жить - то почему бы и не в этой теме, но в пределах правил.

Спасибо за внимание, ведь именно его так не хватает.

 

alman
()

Накидайте книг для продвинутого Си под онтопик

Форум — Development

Сто лет назад прочитал K&R и всегда хватало, а если я хочу углУбить?

// друг спрашивает :)

UPD: собрал из темы списочек, особо не редактируя (экстримов и модернов поболее одного, но пусть будет) – думаю, заглянувшим в будущем будет полезно:

  • modern c by jens gustedt
  • Thomas Mailund - Pointers in C Programming (2021)
  • Gustedt - Modern C (2020)
  • Kalin - Modern C Up and Running (2022)
  • King - C Programming. A Modern Approach, 2nd ed. (2008)
  • Хэзфилд «Искусство программировани на C»
  • «Язык C в XXI веке»
  • Экстремальный Си
  • extreme c programming
  • «UNIX. Профессиональное программирование» Уильям Ричард Стивенс, Стивен А. Раго
  • C Interfaces and Implementations: Techniques for Creating Reusable Software
  • Peter van der Linden, Expert C Programming: Deep C Secrets https://progforperf.github.io/Expert_C_Programming.pdf
  • Чан Теренс «Системное программирование на С++ для Unix»

 ,

pihter
()

Разработка сетевой библиотеки на C++20: интеграция асинхронности и алгоритма Raft (часть 2)

Статьи — Разработка
Разработка сетевой библиотеки на C++20: интеграция асинхронности и алгоритма Raft (часть 2)

Эта статья является продолжением предыдущей публикации, в которой описывается разработка сетевой библиотеки на C++20. В данном продолжении акцент сделан на более детальном описании разработки алгоритма Raft и его интеграции с сетевой библиотекой.

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

 , , ,

Reset
()

Разработка сетевой библиотеки на C++20: интеграция асинхронности и алгоритма Raft (часть 1)

Статьи — Разработка
Разработка сетевой библиотеки на C++20: интеграция асинхронности и алгоритма Raft (часть 1)

Введение

С годами работы в области распределённых систем, я понял, что мой опыт не будет полным без реализации алгоритма Raft. Это осознание побудило меня к действию: я решил создать свою реализацию, используя асинхронные возможности C++20.

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

 , , , ,

Reset
()

Обработка сканированных документов

Форум — Multimedia

Занимаюсь сейчас следующим делом.

Есть несколько сотен изображений со сканами чертежей. Их нужно обработать таким образом:

  1. На большинстве сканов лист лежит под небольшим углом. Нужно довернуть изображение на этот угол, чтобы выровнять картинку.
  2. Некоторые листы сканировались в несколько приёмов. Например, лист формата A3x4 сканирован в 5 приёмов с перекрытиями. Нужно из таких фрагментов собрать одно цельное изображение.
  3. Результаты нужно собрать в PDF.

Гуглю автоматически средства, которыми можно решить задачи 1 и 2.

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

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

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

 , ,

wandrien
()

SObjectizer-5.8.0 и so5extra-1.6.0

Форум — Development

Вышли очередные версии библиотек SObjectizer и so5extra.

Полный список изменений можно найти в Wiki:

https://github.com/Stiffstream/sobjectizer/wiki/v.5.8.0

https://github.com/Stiffstream/so5extra/wiki/v.1.6.0

Менее полный, но с большим погружением в отдельные моменты, обзор изменений сделан в свежей статье на Хабре.

Если же говорить в двух словах, то начата новая ветка 5.8, в которой пришлось пойти на слом совместимости с предыдущей веткой 5.7. Так что при переходе на SO-5.8 потребуется модифицировать исходники. Не получилось придумать способ внедрить новую функциональность не поломав совместимость :(

Для тех, кто не знает меня и не слышал про этот проект, вкратце:

SObjectizer – это один из «акторных фреймворков» для C++ (еще есть QP/C++, CAF: C++ Actor Framework и rotor). Краткий обзор SObjectizer-а можно найти в этой презентации или в этой статье. Кроме модели акторов SObjectizer поддерживает еще и такие модели как Publish-Subscribe и Communicating Sequential Processes. А so5extra – это набор дополнительных полезных прибамбасов для SObjectizer-а, которые не хотелось добавлять в сам SObjectizer.

В двух словах, SObjectizer, – это инструмент для упрощения разработки некоторых типов многопоточных приложений на C++.

Новая версия уже доступна через vcpkg, добавление в conan пока задерживается, но надеюсь, что скоро она появится и там.


Готов к тому, что в меня будут бросаться гнилыми помидорами за рекламу образцового нинужно, но как можно было обойтись без поста на LOR-е, по старой доброй традиции? ;)

 , , , ,

eao197
()

Вопросы по баги BIOS int13h и GRUB2

Форум — General

Написал такие вопросы в рассылку GRUB2, если кто из олдов помнит баги BIOS’ов и как всё это должно работать корректно — расскажите, пожалуйста. По моему мнению получается, что баги во всех трёх компонентах: BIOS, GRUB, gdisk/установщик debian.

Hello list,

I noticed that GRUB 2.06 menu and Linux kernel and initrd load times are greatly influenced by the "last sector" data in the first partition entry (byte 0x06 in MBR partition entry, offset 0x1c4 from the beginning of the disk for the first partition) on my WYSE C10LE x86 thin client (32-bit VIA Eden Esther with Phoenix bios, from 2008).

Fresh Debian 12 installation takes about 5 seconds to show GRUB menu (GRUB loading... for 5 seconds), the kernel (4.5 MB) is loaded in 27 seconds, and initrd takes ages to load.

However, if I use gdisk software to perform MBR→GPT→MBR partition table type conversion, without touching any partitions per se, GRUB speeds up by an order of magnitude: the menu is shown instantly and the kernel is loaded under 3 seconds, initrd takes about 8 seconds.

Several hours of debugging resulted in the following observations:

1. My BIOS returns some strange C/H/S values in int13h, influenced by "last sector" data in the first partition entry of MBR. With stock Debian MBR it's 301/255/2, with MBR→GPT→MBR it's 480/255/63.

Debian's MBR contain 4/4/1 CHS start, 255/254/194 CHS end.
Converted MBR contain 1/0/1 CHS start, 255/254/255 CHS end.

Is this a BIOS bug, or some kind of quirk? I don't see this behavior on SeaBIOS in qemu. Does Debian installer fill MBR correctly? Does gdisk fill it correctly?

2. Slow loading times are due to low sector value with stock MBR. GRUB is forced to read only 2 sectors at a time.

3. GRUB obeys CHS layout even if LBA via IBM/MS INT13 Extensions is used. My BIOS supports INT13 extensions and the reads are performed using it, but GRUB still reads by 2 sectors.

grub-core/disk/i386/pc/biosdisk.c, function grub_biosdisk_open contains the following logic for HDD:

if (grub_biosdisk_get_diskinfo_standard() != 0) /* if it fails */ {
  if (data->flags & GRUB_BIOSDISK_FLAG_LBA) {
    data->sectors = 63;
    data->heads = 255;
    ...
  }
}

That means it rewrites the value for LBA only if CHS function fails. Shouldn't LBA mode ignore CHS values and read as many as possible? Is this a GRUB bug? I've changed the function to always rewrite data for LBA to 64 (not 63) sectors, to fill the whole segment in a single read, and it seem to work fine. With 63 sectors GRUB reads 63 sectors, then 1 sector, then 63 sectors, then 1 sector again, which decreases the performance, but not by much.


P.S. nativedisk doesn't have any performance problems.
Thanks.

 , ,

ValdikSS
()

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

Форум — Linux-hardware

Обновил дебьян с 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
()

Списки игр

Форум — Games

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

 ,

misteralter
()

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

Форум — General

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

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

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

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

Спасибо!

 , ,

Ramirezkiv2
()

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

Форум — General

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

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

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

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

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

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

 , , ,

cudeta
()

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

Форум — Development

Хочу хранить мапу с экземплярами реализующими трейт. При этом на месте одного ключа я уверен, что будет всегда лежать экземпляр одной и той же реализации (в данном примере в качестве ключа выступает помимо прочего 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)

Форум — Development

На 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 уже почти здесь

Форум — Development

по мотивам прошлой темы: Вести с полей стандартизации 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

Форум — Admin

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

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

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

 ,

trivus
()

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

Форум — Development

Привет, ЛОР!

Ты, наверное, уже видел свежую дыру в 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
()