LINUX.ORG.RU

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

Flux — C++20 библиотека алгоритмов с другой моделью итераций

Форум — Development

Это header-only (~405 KB) C++20 библиотека в духе C++20 Ranges, Python IterTools, итераторов Rust и других, и предоставляет набор функций, в целом эквивалентный C++20 Ranges, но использует немного другую модель итерации, основанную на курсорах, а не итераторах.
Курсоры Flux - это обобщение индексов массивов, в то время как итераторы STL - обобщение указателей массивов.
Возможности:

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

Документация: https://tristanbrindle.com/flux/index.html
Код: https://github.com/tcbrindle/flux
Лицензия: Boost 1.0.
Пример:

constexpr auto result = flux::ints()                        // 0,1,2,3,...
                         .filter(flux::pred::even)          // 0,2,4,6,...
                         .map([](int i) { return i * 2; })  // 0,4,8,12,...
                         .take(3)                           // 0,4,8
                         .sum();                            // 12

static_assert(result == 12);

Он же в Compiler Explorer: https://flux.godbolt.org/z/KKcEbYnTx.


Проект от автора библиотеки NanoRange – C++20 Ranges для C++17.

 , ,

dataman
()

Исключения должны работать медленно?

Форум — Development

Допустим у меня в контексте 100500 объектов. Внезапно возникает исключение и мы должны покинуть контекст. Начинают работать 100500 деструкторов. Некоторые работают очень медленно, например закрывают соединения с клиентов. Таким образом получается, что с момента возникновения исключения до начала его обработки в другом контексте могут проходить секунды. А мне это не надо. Как запретить выполнение деструкторов для определенных классов?

 

Lzzz
()

Распространение либ для C++

Форум — Development

Возможно, что задам очень глупый вопрос. А в 2020 году есть шансы распространять закрытые либы для C++ в объектных файлах + необходимые хедеры для одной узкопрофессиональной ниши? Там C++ так-то используют во всю. Кто-то сейчас распространяет так либы?

Привязка к версии компилятора и к оси, в принципе, будет норм. Это не массовый продукт. Больше для R&D разных компаний и академии с уклоном в науку и производство. Может быть, вообще, нафиг никому не нужно будет)

 

dave
()

Times New Roman LATEX

Форум — General

Как поставить шрифт Times New Roman (а не Computer Modern Roman) для кириллицы в Latex? Использую дистрибутив Miktex 2.9, но при использовании всяких команд единственное изменение - пропадают жирные буквы. Подключал пакеты tempora/times, ничего не изменилось. PsCyr уже на двух компах ставлю, но выдают ошибку: не найден pscyr.sty

 

PasaOpasen
()

Самое быстрое преобразование float в строку

Форум — Development

Нравится мне делать подобные штучки :)

Результаты бенчмарка (со всяческими другими быстрыми вариантами):

 erthink       ... [min   21.900ns, rms   56.925ns, max   72.200ns]
 floaxie       ... [min   25.200ns, rms   66.722ns, max   88.900ns]
 emyg          ... [min   32.600ns, rms   76.577ns, max   92.600ns]
 milo          ... [min   32.200ns, rms   76.754ns, max   92.400ns]
 grisu2        ... [min   67.600ns, rms   89.862ns, max  110.100ns]
 doubleconv    ... [min   58.400ns, rms   94.065ns, max  116.500ns]
 fmt           ... [min   82.900ns, rms  134.049ns, max  159.000ns]
 fpconv        ... [min   87.400ns, rms  136.806ns, max  159.000ns]
 sprintf       ... [min  634.600ns, rms  717.793ns, max  783.600ns]
 ostrstream    ... [min 1019.400ns, rms 1104.349ns, max 1168.800ns]
 ostringstream ... [min 1107.200ns, rms 1200.868ns, max 1275.700ns]
 null          ... [min    1.200ns, rms    1.277ns, max    1.300ns]

$ gcc -v
gcc version 7.3.0 (Ubuntu 7.3.0-27ubuntu1~18.04)

Делюсь, думаю кому-нибудь пригодится. Лицензия zLib, исходники и бенчмарк с примером использования на github. Функция header-only и совсем не делает ничего лишнего:

  • генерирует минимум символов (намеренно без десятичной точки);
  • не пишет \0 в конце;
  • не проверяет inf и nan (ибо во многих случаях нужна кастомная обработка, например как в json);
  • но всё корректно.

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

 , , ,

Deleted
()

OrangePi PC, Armbian, Mali 400: no drivers in kernel

Форум — Linux-hardware

Доброго времени суток!
Запускаю Armbian на OrangePi PC (пробовал и Ubuntu- и Debian-based).
uname -a:

Linux orangepipc 4.14.65-sunxi #68 SMP Tue Aug 21 19:57:06 CEST 2018 armv7l GNU/Linux
ls /lib/modules/4.14.65-sunxi/kernel/drivers/gpu/mali: Нет такого файла или каталога.

Ставлю по этой инструкции. Весь userspace уже поставил, a kernel drivers нема.
Кто виноват, и что делать?

 , ,

Strannik-j
()

MindForger 1.48

Новости — Open Source
Группа Open Source

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

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

>>> Подробности (сайт с описанием и скриншотами)

 , ,

env
()

get_if для variant как метод класса

Форум — Development

Собственно использую https://github.com/mpark/variant в C++14, single header версию.

Очень неудобно, что фактически все методы - глобальные:

mpark::get_if<State1>(&m_state)
// vs
m_state.get_if<State1>()

Вопрос в том, как добавить в эту либу get_if (и holds_alternative) как методы класса? Только для типов. Взятие по индексу не нужно.

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

template <
        typename Arg,
        typename Decayed = lib::decay_t<Arg>,
        lib::enable_if_t<!std::is_same<Decayed, variant>::value, int> = 0,
        lib::enable_if_t<!detail::is_in_place_index<Decayed>::value, int> = 0,
        lib::enable_if_t<!detail::is_in_place_type<Decayed>::value, int> = 0,
        std::size_t I = detail::best_match<Arg, Ts...>::value,
        typename T = lib::type_pack_element_t<I, Ts...>,
        lib::enable_if_t<std::is_constructible<T, Arg>::value, int> = 0>
    inline constexpr variant(Arg &&arg) noexcept(
        std::is_nothrow_constructible<T, Arg>::value)
        : impl_(in_place_index_t<I>{}, lib::forward<Arg>(arg)) {}

Или проще тупо враппер сделать? Но там тоже тонну шаблонов придётся писать - не осилю.

 

RazrFalcon
()

Асинхронный прием и асинхронная обработка, неблокирующий и блокирующий *

Форум — Development

В ВУЗе нам поверхностно освещали вопрос асинхронной обработки данных (это были 1990-е годы с MS-DOS). Упоминались в этом контексте в основном - неблокирующие сокеты. На практике я сталкивался с блокировками ресурсов (C+pthread+mutex), про асинхронность мало знаю.

У меня четыре основных вопроса.

Первый. Асинхронность «в чистом виде» где-нибудь бывает? Я имею ввиду «асинхронный прием сообщений». Ведь принимает их какой-то конкретный узел. Под асинхронностью здесь понимается принципиальная возможность мультиплексирования глобального ресурса (процессора, канала связи) при попадании в очередь нескольких запросов на один «такт» обработки? То есть, асинхронность и «возможность распараллеливания» дальнейшей обработки - это здесь синонимы? [распараллеливание парсинга, перекладывании из очереди в очередь, вычислений]

Второй вопрос. Что бывает «неблокирующего» - кроме приёма сообщений? И, аналогично, «асинхронного». Можете привести примеры из повседневной жизни (см. четвертый вопрос)?

Третий вопрос. «Синхронная обработка» - это синоним «FIFO»?

Четвертое. Приведите, пожалуйста, практический пример для каждого варианта.
1. Блокирующий приём, синхронная обработка.
2. Блокирующий приём, асинхронная обработка.
3. Неблокирующий приём, синхронная обработка.
4. Неблокирующий приём, асинхронная обработка (например, в какой-нибудь конторе - выписали квиток что «ваше заявление принято», по мере возможности обработали запрос, и когда обработка завершилась - отправили уведомление).

 ,

pacify
()

Видео докладов с C++Russia 2018

Форум — Development

На YouTube стали доступны видео докладов обоих дней C++Russia 2018 (видео первого дня опубликовали в конце июня, на днях добавили еще и видео второго дня).

Вот список в хронологическом порядке публикации видео:

Jon Kalb, C++ Today: The Beast is Back
Алексей Салмин , Memory Management Tips & Tricks
Andrei Alexandrescu, Expect the expected
Евгений Лукьянец, Сборка в Docker с использованием Conan
Viktor Kirilov, Interactive C++ Compilation (REPL): The Lean Way
Mikhail Matrosov, Versatile C++ applied
Илья Шишков, Как научить языку C++: опыт создания курсов на Coursera
Дмитрий Соколов, Кодогенерация как рефлексия для бедных
Herb Sutter, New in C++20: The spaceship operator
Arno Schödl, From Iterators To Ranges
Александр Гранин, Функциональный подход к Software Transactional Memory
Денис Панин, Практическое метапрограммирование: пишем гетерогенную хэш-таблицу
Иван Пономарёв, Crash репорты Android NDK
Фёдор Короткий, Память – идеальная абстракция
Дмитрий Банщиков, Разделяемые библиотеки без внешних зависимостей
Borislav Stanimirov, DynaMix: A New Take on Polymorphism
Vadim Vinnik, Collection Processing. Single essence, multiple manifestations
Victor Ciura, Enough string_view to hang ourselves
Анастасия Казакова, Отладка кода на C++, без запуска и компиляции
Jonathan Boccara, 105 STL Algorithms in Less Than an Hour
Daveed Vandevoorde, Reflective Metaprogramming in C++
Павел Булатов, Переход на WebAssembly: стоит ли игра свеч?
Simon Brand, Modern C++ Parallelism from CPU to GPU
Евгений Зуев, Semantic API for C++ programms
Dietmar Kühl, Concept Based Testing
Дмитрий Кожевников, Подводные камни CMake и где они обитают
Rainer Grimm, Best Practices for Concurrency in Modern C++
Евгений Охотников, Акторы на C++: стоило ли оно того?
Алексей Малов, Опыт применения современного C++ в разработке desktop-приложений
Ivan Čukić, 2020: A void_t odyssey
Андрей Карпов, Эффективный C++ (Маерс тут ни при чём :)
Сергей Шамбир, Когда хорош процедурный C++
Иван Пузыревский, Асинхронность в программировании
Сергей Васильев, Статический анализ: ищем ошибки... и уязвимости?

 

eao197
()

Защищаемся от Meltdown и Spectre

Форум — General

Привет

Предлагаю собирать инфу о Meltdown и Spectre.

Пока у меня получилось найти пару тестов своей системы, но мало информации о том, как защититься. И никакой конкретной информации о том как увидеть влияние на performance - все ограничиваются цифрами, но не тем как провести реальные тесты.

О чем говорим:

Spectre     - Variant 1 - 2017-5753 - Bounds Check Bypass
Spectre     - Variant 2 - 2017-5715 - Branch Target Injection
Meltdown    - Variant 3 - 2017-5754 - Rogue Data Cache Load
BranchScope -           -           - Attack on Directional Branch Predictor
(еще восемь - см. ниже)
LazyFP                  - 2018-3665 - Exploiting lazy FPU state switching
Wiki
8 новых уязвимостей

SpectrePrime, MeltdownPrime:
То, же что и Spectre, Meltdown, но использующие альтернативный способ восстановления данных из кеша, который увеличивает точность восстановления.
Считается что программные методы защиты от Spectre и Meltdown также защищают и от SpectrePrime и MeltdownPrime. А вот аппаратная защита должна отельно учитывать учитывать SpectrePrime и MeltdownPrime.
Источник: Opennet

BranchScope:
Напоминает второй вариант атаки Spectre но отличается способом создания условий для влияния на состояние блока предсказания переходов.
Метод был протестирован на процессорах Intel Sandy Bridge, Haswell и Skylake, и продемонстрировал уровень ошибок менее 1%.
Утверждается, что предложенный для Spectre V2 метод защиты (Retpoline) не эффективен против BranchScope, но для блокирования атаки предложен иной метод защиты, который может быть реализован как программно, так и на аппаратном уровне. По мнению компании Intel предложенная в обновлении микрокода техника защиты от первого варианта Spectre (на основе инструкции LFENCE) будет эффективна и для защиты от атаки BranchScope. Для защиты важных данных также могут применяться типовые криптографические методы защиты от утечки по сторонним каналам.
Больше деталей - на OpenNet.

LazyFP:
Через проведение атаки по сторонним каналам атакующий может определить значения регистров FPU, MMX, SSE, AVX и AVX-512, используемых другим процессом. Например, в данных регистрах могут содержаться параметры для криптографических вычислений и имеющий доступ к локальной системе злоумышленник может попытаться использовать их для определения ключа шифрования. При использовании систем виртуализации проблема может применяться для определения состояния регистров другой гостевой системы или другого процесса в текущей гостевой системе.
Больше деталей - на OpenNet, Intel, blog.cyberus-technology.de.

Уязвимые архитектуры:
- Meltdown - только Intel, притом практически все начиная с выпуска 1995 года (источник).
- Spectre - все процессоры с фичей speculative execution, то есть почти все современные процессоры, в т. ч. Intel, AMD, ARM, IBM Power, IBM System Z (источник).
- Еще 8 - подтверждено на Intel на AMD и ARM не тестировалось (источник).
- LazyFP - только процессоры линейки Intel Core. Не проявляется на чипах Intel Atom/Knights и CPU AMD.

Тесты на наличие уязвимостей:
- https://github.com/IAIK/meltdown/ - реальный эксплоит.
- https://github.com/speed47/spectre-meltdown-checker - это скорее проверяет наличие фиксо/mitigations в системе.
- https://github.com/tesla707/Spectreprime-attack - SpectrePrime реальный эксплоит - https://blog.cyberus-technology.de/posts/2018-06-06-intel-lazyfp-vulnerabilit... - здесь только куски эксплоита в разделе «The Attack», рабочие версии пока не опубликованы. Если знаете лучше или более полные - говорите.

Защита:
Meltdown
Для защиты активируется Kernel page-table isolation (KPTI, старое название - KEISER)
1. Обновление ядра до версий 4.14.12, 4.9.75, and 4.4.110 или выше (Gentoo Wiki)
2. Активировать Kernel/User page tables isolation в ядре - опция ядра CONFIG_PAGE_TABLE_ISOLATION (askubuntu.com) - доступно только для 64-битного ядра.
- Отключать, если не в ядре - с помощью параметра ядра nopti (источник) или echo 0 > /sys/kernel/debug/x86/pti_enabled (источник - Redhat). Нужно владельцам процессоров не-Intel (например, AMD), так как KPTI дает проседание по performance'у, а для AMD это не актуально, так как уязвимость затрагивает только Intel.
Патчинг компиляторов и гипервизоры не требуется.
Как я понял, это полностью устраняет проблему Meltdown.
Фичи процессоров process-context identifiers (PCID) и invalidate process-context identifiers (INVPCID) позволяет снизить проседание перформанса из-за включения KPTI (источник, источник, источник). Доступна только на процессорах Intel: PCID - некоторые Westmere family, Sandy Bridge, INVPCID - Haswell и выше (источник). Также требуется ядро 4.14.12 или выше (источник). Проверить наличие фич в процессоре можно в /proc/cpuinfo (источник)

Spectre
1. Подгрузка микрокода процессора - Intel Microcode update 01/08/2018
- Мануал для Gentoo
- Если я правильно понял, то критерий успеха подгрузки микрокода процессора с фиксом можно узнать так: grep -q "cpu_insecure\|cpu_meltdown\|kaiser" /proc/cpuinfo (askubuntu.com)
Но как я понял, микрокод есть не для всех процессоров, в частности нет для Core 2 Duo . Подозреваю что здесь полный перечень Интеловских процессоров, для которых есть обновление.
2. Поддержка на уровне ядра начиная с какой верии - непонятно):
- Indirect Branch Restricted Speculation (IBRS) (Как выставлять). Притом у него 2 режима, подробней здесь. как проверять/выставлять - Redhat. Но - создана новая атака
- Indirect Branch Prediction Barrier (IBPB) (SGX - Software Guard Extensions) - тоже описан здесь и здесь, как проверять/выставлять - Redhat. Но новая атака SgxPectre показывает что данный механизм не эффективен.
- STIBP - иногда упоминают (раз, два), но детальной информации вообще не нашел.
3. Патчинг компиляторов
- Для GCC:
- - Добавление опции -mindirect-branch, -mindirect-branch-loop, -mfunction-return, -mindirect-branch-register с которыми нужно перекомпилить... всё? Где скачать - непонятно. Насколько полно решают проблему - непонятно.
- - retpoline - добавление опции -mindirect-branch=thunk-extern. С ней нужно перекомпилить ядро с наложенным патчем (где скачать?). Пока есть для gcc 8 (mailing list) и gcc 7.3 (OpenNet, Phoronix); в планах портировать фикс gcc 6/5/4. Похоже, что для процессоров архитектуры Skylake и более поздних проблему решает не полностью (источник).
- LLVM - TBD
4. Патчинг гипервизоров - https://github.com/hannob/meltdownspectre-patches , раздел Virtualization Не ясно закрывает ли это проблему полностью.
- VirtualBox 5.2.6 и 5.1.32 (источник).
5. Патчинг браузеров (потому как уязвимость можно эксплуатировать даже через JavaScript):
- Chrome 63 - нужно включить опцию chrome://flags#enable-site-per-process ; в Chrome 64 включено по дефолту.
- Firefox 57.0.4 (источник)

LazyFP
- В ядре Linux защита была реализована ещё в феврале 2016 года, путём применения по умолчанию режима Eager FP (eagerfpu=on) и удаления возможности активации Lazy FP. Уязвимость затрагивает ядра Linux до версии 4.6 или системы с процессорами без поддержки инструкции XSAVE (до Sandy Bridge), в которых по умолчанию применялся режим Lazy FP. В старых ядрах Linux для защиты можно использовать опцию «eagerfpu=on», которая присутствует начиная с ядра 3.7.
Влияние на performance:
- Хороший отчет Redhat о том, какое проседание performance'а на каких операциях
- Бенчмарки Phoronix: разные режимы IBRS/IBPB, Spectre, Meltdown
. Как сказано выше, наличие PCID и INVPCID в процессорах делает проседание по performance'у меньше.
Методология (как проверить у себя) - TBD
- Конкретный софт: bind

В каких процессорах Intel какая защита релизована
Habr: Больше кофе, меньше кофеина: Intel 9th Gen (часть 1), искать глава «Исправления безопасности оборудования и программного обеспечения»

Открытые вопросы:
1. Ваш набор тестов на наличие уязвимостей Meltdown и Spectre
2. Ваш рецепт по фиксу
3. Как включать/выключать IBPB и STIBP?
4. Ссылки на патчи для компиляторов
5. Приведите тест (не результаты, а методику), который бы показал влияние на performance
6. Если покупать железо, как знать что оно не подвержено Meltdown и Spectre?

Пожалуйста, дополняйте информацию, особенно там, где написано TBD, где видите неточности или пробелы. Давайте вместе расставим точки над i и победим этот недуг.

 , ,

Kroz
()

С++ конференция CoreHard, можно посмотреть видео

Форум — Development

Итак, в Минске состоялась C++ CoreHard Autumn 2017 Conference. Можно было смотреть стрим. Но для тех, кто его пропустил, доступно видео. Конференция шла в два потока, поэтому два записанных стрима. Приятного просмотра:

 ,

HardCpp
()

Хэллоуин-линуксовка

Форум — Talks

Здравствуйте, господа.

kachsheev HerrWeigel yahoo Zhbert jollheef ryu panter_dsd realloc catap cvs-255 manntes-live veneperkele vspider Stage1 Stage10 KVaS solovey GeneralSan trex6 ollowtf

Предлагаю 31-го октября собраться и как следует отпраздновать буржуйский Хэллоуин!

P.S. анонимусы, включая hateyoufeel - только по паспорту.

 , ,

lochness
()

Как подключиться к удаленному компьютеру через ssh?

Форум — General

Debian. Для подключения в домашней сети все понятно.

# ssh user@ip
Как подключиться на компьютерах разположенных в разных сетях? Компьютеры подключены к сетям не напрямую - спрятаны за маршрутизаторами. Гуглил - кроме слова тунель ничего толком. Как будет выглядеть правильная команда для соединения удаленных компьютеров?

 ,

amd_amd
()

Почему LibreOffice до сих пор выглядит как сами-знаете-что?

Форум — Desktop

Интерфейс не соответствует глобальной теме оформления, подсказки написаны светлым шрифтом на светлом фоне, чекбоксы не вписываются в отведенные им места (в меню, например), новая лента выглядит на редкость ужасно, параметры просто что-то с чем-то. Даже с окошком «about» налажали - «фон»-рисунок занимает лишь часть формы.

Почему тот же WPS-Office выполнен удобно, аккуратно, красиво? Ленту хорошо реализовали. Пользоваться даже приятно. Но код закрыт, к сожалению. И, кажется, выпуск версий под Linux больше не будет.

Недавно вышел очередной релиз LibreOffice. Этому пакету уже седьмой год. Но подвижек в плане GUI нет совсем. Разработчики это как-то аргументировали? Им мировоззрение не позволяет использовать Qt?

LibreOffice: Тык, тык, тык, тык, тык

И для сравнения: тык, тык

[РЕШЕНО] «export SAL_USE_VCLPLUGIN=gtk» (или «SAL_USE_VCLPLUGIN=gtk libreoffice»). И еще есть такие варианты значения этой переменной окружения: SAL_USE_VCLPLUGIN=gtk3 и SAL_USE_VCLPLUGIN=gen. Спасибо пользователю EXL за это.

 

duhe
()

Третий том учебника А. В. Столярова

Новости — Документация
Группа Документация

На сайте А. В. Столярова выложен в открытый доступ учебник «Системы и сети», продолживший серию «Программирование: введение в профессию». Серия в целом ориентирована на ОС семейства Unix (в том числе использующие ядро Linux) в качестве единой среды для обучения.

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

>>> Подробности

 , ,

Croco
()

Для тех, кто думает перейти на Gentoo

Форум — General

Привет

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

TL; DR: Для тех, кто думает перейти на Gentoo (комментарий)

В каких случаях имеет смысл выбирать Gentoo:
1. Вы любите настраивать систему под себя. В Gentoo есть больше возможностей по кастомизации системы в сравнении с многими другими дистрибутивами: USE флаги, параметры компиляции, поддержка пользовательских патчей в пакетном менеджере, хуки пакетного менеджера (вставка своих шагов на этапе установки пакетов), игры с версиями приложений и/или зависимостей, игры с альтернативными имплементациями (openrc/systemd/..., rsyslog/syslog-ng/metalog, slang/ncruses, dhcpcd/dhclient/...).
2. Вы хотите обучиться основам Линукс. Установка Gentoo невозможна без практического понимания базовых принципов Линукс: интерфейс командной строки, chroot, работа с диском (MBR, GPT, возможно LVM, возможно шифрование, типы файловых систем, параметры монтирования и т. п.), настройка сети (WiFi/Ethernet, DHCP, ifconfig/ip, выбор между wicd/NetworkManager/sysinit и т. п.), ядро (конфигурация/компиляция/установка, firmware, внешние модули aka @modules-rebuild, возможно параметры при запуске и т. п.), графический сервер (Xorg/wayland, драйвера) и др. Большинство дистрибутивов скрывают это за инсталлятором, но в Gentoo вам придется столкнуться с этим непосредственно.
3. Требуется система максимально оптимизированная под определённую платформу или нефункциональные требования: минимальный размер (embedded), минимальный отклик (банковские системы, игровые сервера), максимальное быстродействие в конкретных областях (обработка видео потоков) и т. п. Стоит заметить, что Gentoo имеет смысл выбирать только в том случае, когда нет дистрибутива уже заточенного под эти требования, или он чем-то не устраивает.

В остальных случаях Gentoo скорее всего не лучший выбор, разве что Just for Fun.

Сильные стороны Gentoo:
#1 Gentoo очень гибкая и всенастраиваема
Пример того что в Gentoo делается просто:
- Использовать openrc вместо systemd или наоборот; pulseaudio или без него
- Наложить кастомный патч; пример когда это нужно
- Подключить или отключить такие вещи как vaapi, vdpau, opencv и т. п.
- Иметь несколько веток софта; уточню, что это работает только для определённых пакетов; например можно одновременно установить python 2.7, 3.4, 3.5 или qt4 и qt5, но нельзя одновременно установить qt 5.7 и 5.8

#2 Очень удобный и функциональный пакетный менеджер
Примеры удобных фич:
- Прервать установку (вплоть до перегрузки компьютера), а потом ее продолжить. Можно продолжить с последнего пакета (emerge --resume), продолжить но пропустить последний пакет, например, если его установка прервалась с ошибкой (emerge --resume --skipfirst, некоторые нюансы); для больших пакетов можно продолжить саму компиляцию (ebuild <полный путь и имя файла>.ebuild merge).
- Когда при установке обновляется конфиг приложения, определяется редактировался ли предыдущий конфиг пользователем. Если да, конфиг не перезаписывается, а кладётся радом, и выводится сообщение пользователю с предложением обновить конфиг.
- Обновить всю систему, но исключить некоторые пакеты (удобно для исключения больших пакетов из ежедневного обновления)
- Почистить зависимости - удалить те пакеты, которые больше никому не нужны.
- Поскольку ebuild - текстовый файл, то можно пропарсить на предмет требований к количеству ресурсов для установки:

$ for F in $(find /usr/portage -name "*.ebuild") ; do REQ=$(grep "CHECKREQS" "$F") ; if [[ -n "$REQ" ]]; then echo -e "\n$F\n$REQ" ; fi; done
- Вынести компиляцию на другой компьютер (поддержка distcc на уровне пакетного менеджера). Важно когда Gentoo устанавливается на слабый компьютер.


#3 Хорошая документация, по крайней мере на английском. Более того, поскольку Gentoo-специфичные утилиты являются лишь надстройкой на generic механизмами, документация от других дистрибутивов (например от Arch) в большинстве случаев тоже подходит.
Опрос 2014: У какого дистрибутива лучшая документация

#4 Достаточно свежий софт, много сторонних репозиториев.
Список сторонних репозиториев
Gentoo - rolling release, а значит как только новая версия конкретного софта появилась в репозитории, её можно установить. Но здесь не имеется ввиду, что как только новая версия зарелизилась, она моментально становится доступна в основном дереве; лаг есть, но он как правило не большой, хотя зависит от пакета. В тестинг ветке новые версии появляются раньше. Кроме того мейнтейнеры Gentoo могут маскировать некоторые версии, если в них обнаруживаются серьезные баги. Однако всегда можно размаскировать нужную версию. Кроме того для некоторых пакетов есть -live версии, когда исходники скачиваются напрямую из github или аналога.
Пример когда «у меня не самый свежий софт в Gentoo»

#5 Полный порядок в системе, ничего лишнего - эстетическое удовольствие, плюс возможно можно немного улучшить перформанс

#6 В процессе установки и эксплуатации получаешь полное понимание как работает система, а значит возникающие проблемы решаются быстро. На самом деле без должного знания Линукса (или желания его узнать в процессе) Gentoo нормально не установить.

Недостатки
#1 Сложная и долгая первичная установка. Если устанавливать в первый раз, нужно готовиться потратить несколько дней. Для опытных - несколько часов + компиляция.
Время установки (компиляции) Gentoo, еще немного цифр по большим пакетам

#2 Пакетный менеджер хоть и удобный, но очень медленный

#3 Если не обновлять систему долго (полгода и более), то сложность обновления сопоставима с установкой новой системы. Есть мнение, что emerge-webrsync --revert=yyyymmdd должен помочь (лично я не проверял).

Особенности
#1 Высокий порог входа; дистрибутив не для новичков. Если человек не комфортно чувствует себя в командной строке, никогда не компилировал ядро, не разбивал диски на разделы, не привык изучать докуменацию, вчитываться в сообщения и анализировать логи, то Gentoo покажется сложной в обслуживании, а возникающие проблемы будут списываться на дистрибутив.

#2 Обновляться нужно часто.

#3 Основные фичи - в командной строке. Для тех, кто не привык работать в командной строке, это будет минусом. А для тех, кто комфортно чувствует себя в командной строке, это будет плюсом, так как работа в командной строке более эффективна, а типовые сценарии можно обернуть в скрипты и еще больше сократить время на обслуживание системы.

#4 Есть две ветки: stable и testing. В stable меньше шансов встретить проблему, но в testing более свежий софт. Ветки можно комбинировать.

Мифы
Миф #1 Gentoo даст прирост производительности за счет того, что весь софт компилируется под конкретное железо.
Краткий ответ: Без дополнительных телодвижений - в пределах пары процентов, так что вряд ли вы это заметите.

Детальный ответ.
Не следует ожидать что просто скомпилировав систему из исходников вы получите сколько-нибудь заметное улучшение перформанса.
Для большинства приложений компиляции под конкретное железо даст прирост производительности в районе 1-2%.
Ложка дегтя: в некоторых случаях даже может быть замедление. Например Firefox, можно ускорить с помощью PGO. В Gentoo по умолчанию это отключено, так как PGO увеличивает время компиляции почти в два раза. В бинарных дистрибутивах соотв. софт может быть скомпилирован с PGO.
Так как добиться улучшения производительности? Узкий круг приложений может быть значительно ускорен при компиляции под конкретную платформу - на 30%-50% и больше. В основном это приложения которые активно занимаются вычислениями. Но для этого требуется соотв. настройки. Например, активация SIMD инструкций, даст прирост производительности в мультимедиа приложениях. Некоторые процессоры имеют аппаратную поддержку шифрования AES. В бинарных дистрибутивах подобные фичи будут отключены, так как не все процессоры это поддерживают, а бинарные дистрибутивы в первую очередь заботятся о совместимости.
Небольшое улучшения перформанса возможно если убрать из системы всё лишнее (мнение 1, мнение 2).
Еще интересный случай

Миф #2 Обновления занимают много времени
Краткий ответ: 5-10 минут на фоне, не мешая основной работе.

Детальный ответ.
Обновления не занимают много времени, но опять же, при правильном подходе.
Во-первых, как было сказано выше, обновляться нужно часто. Для testing ветки это каждый день, или по крайней мере не реже чем в раз 2-3 недели. Для стабильной ветки - раз в неделю достаточно (на стабильной ветке намного реже выпускаются обновления)
Во-вторых, есть пакеты которые правда очень долго компилятся: libreoffice, firefox, chromium... Их всего 10-15. Я их исключаю из ежедневного обновления, а обновляю раз в несколько месяцев.
Еще нужно сказать, что на этом вопросе часто заостряют неоправданно много внимания. Обычно обновления происходят на фоне, и не сильно влияют на работу; так какая разница как долго они выполняются?
В итоге, у меня обновления занимают примерно 5-10 мин ежедневно (у меня тестинг-ветка).
К тому же всё происходит на фоне, в любой момент можно поставить на паузу (Ctrl+Z, fg), продолжить после прерывания (умышленного или случайного).
Мой скрипт ежедневного обновления

Миф #3 Gentoo требует много времени на обслуживание
Краткий ответ: это зависит от вас.

Детальный ответ.
Обслуживание Gentoo занимает меньше времени по сравнению с другими дистрибутивами, но только при грамотном обращении, конечно. Достигается это за счет следующего:
- хороший пакетный менеджер: маскировки, глобальные и индивидуальные установки для пакетов (USE флаги, опции компиляции, каталоги), хуки, приоритеты (чтобы компиляция происходила на фоне и можно было работать), много опций для установки и анализа, подсказки после установки.
- всё происходит в CLI, а значит типовые операции можно обернуть в скрипты/алиасы.
- уже существуют много утилит для облегчения обслуживания: eselect, equery, eix, eclean, euse, genlop и др.
Грамотное обращение означает, что вы правильно и регулярно обновляете систему, исполняете предписания emerge, которые он выдает после установки, держите в порядке конфигурационные файлы, а если таки возникает проблема, которую решить вы не можете, то вы обращаетесь в форумы, а не просто жалуетесь на жизнь.
Что до проблем с обновлениями - см. следующий пункт «Миф #4 Установка, обновление постоянно падают; частые блокировки»

Миф #4 Установка, обновление постоянно падают; частые блокировки
Краткий ответ: Не чаще чем в других дистрибутивах

Детальный ответ.
Если говорить про «часто» и «постоянно», то проблемы с обновлением/установкой могут быть если:
- система давно не обновлялась
- система неправильно обслуживается (см. выше про Грамотное обращение)

В редких случаях пакет просто не компилируется. На самом деле это проблема не Gentoo, а тех, кто писал этот софт. И в подавляющим большинстве случаев это не является проблемой, и вот почему. Если это обновление, то можно продолжить процесс запустив emerge с параметрами --resume --skipfirst - он обойдет проблемный пакет, пересчитает зависимости чтобы система осталась консистентной, и продолжит обновление (а можно изначально передать параметр --keep-going, тогда это будет происходить автоматически, прерываний вообще не будет). Если пакет критичен, можно установить предыдущую версию, которая компилировалась (а проблемную замаскировать чтобы пакетный менеджер ее не видел).

Что может заблокировать обновление полностью:
- просьба пакетного менеджера поменять флаги пакета. При этом emerge предлагает сделать это автоматически, но лично я предпочитаю делать вручную. Для ручного способа, решается добавлением строчки в package.use
- просьба пакетного менеджера задать лицензию. Это валидно только для не-свободных лицензий, например EULA, Skype, Adobe Flash и т. п. Если мы говорим имено про обновление, то такое бывает только когда лицензия обновляется, что бывает очень редко (как много у вас пакетов под не-свободной лицензией, и как часто они меняют лицензию?). Решается добавлением одного слова в make.conf
- просьба пакетного менеджера размаскировать пакет. По моему опыту нужно не размаскировывать, а наоборот замаскировывать пакеты, которые тянут замаскированные зависимости. Это, да, требует минут 5-10 на разобраться. Но, если только у вас нет смешения веток и live пакетов, такой вариант случается раз в пятилетку.
- сложные блокировки. Большинство блокировок пакетный менеджер разрешает сам; по моим наблюдениям, качество данного механизма значительно улучшилось пару лет назад. Из своего опыты скажу, что (учитывая частые обновления) блокировок, которые бы совсем останавливали обновление я уже не видел года 1.5. Но если они есть, то это действительно сложный кейс.

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

Миф #5 В Gentoo нет бинарных пакетов
Краткий ответ: Есть там, где это действительно нужно.

Детальный ответ
29 декабря 2023 года было официально объявлено о релизе бинарного варианта Gentoo: Gentoo становится бинарным / https://www.gentoo.org/news/2023/12/29/Gentoo-binary.html Также есть Calculate Linux - полностью бинарный форк Gentoo.
С самого начала в «классическом» Gentoo в основном репозитории всегда были несколько бинарных пакетов: libreoffice-bin, firefox-bin, некоторые другие. Связано это с тем, что из исходников они очень долго компилируются, и иногда проще поставить бинарник.
Бинарный пакет можно сделать самому командой quickpkg --include-config y <установленный пакет> - удобно для бекапов.
Но стоит обратить внимание на то, что при использовании бинарных пакетов пропадают те главные особенности, ради которых имеет смысл выбирать Gentoo. Если вам нужен уже скомпилированный софт, возможно вам имеет смысл присмотреться к другим дистрибутивам.

FAQ

#1 Установка на слабый компьютер
Смотря что есть слабый компьютер.
Из собственного опыта: Intel Core2 Duo 6600 @ 2.40GHz, 2Gb RAM + 4Gb swap хватало для комфортной работы в Gentoo.
Зачастую ebuld'ы содержат информацию о том, сколько нужно памяти для компиляции пакета. TOP 5:
16G - chromium
8G - ledger, isabelle
7G - ceph
6G - firefox x64 (для x32 нужно 3G), pypy x64 (для x32 нужно 3G)
5G - electron
Если компьютер и вправду слабый, то лучше выбрать не Gentoo (точнее не-source-based дистрибутив). Альтернатива - можно вынести компиляцию на другой «не-слабый» компьютер с помощью distcc.


Опрос 2021: Какую операционную систему и/или дистрибутив GNU/Linux вы используете на ПК?
Опрос 2018: Какой ОС вы пользуетесь на основном ПК?
Опрос 2017: Какую ОС вы используете на основном ПК?
Опрос 2014: Какой дистрибутив вы используете на десктопе?
W3Tech стастика дистрибутивов на серверах
Отличия дистрибутивов, время работы ноутбука
Чем удобны USE флаги
Сколько памяти нужно для РАБОТЫ Gentoo (сколько нужно для компиляции было указано выше)
Сколько места на диске нужно для Gentoo
Правильное полное обновление Gentoo, Мой скрипт ежедневного обновления, Еще вариант
Gentoo для девелоперов
Практика инсталляции Gentoo: в двух словах простым языком
Небольшой скрипт - сборка livecd

 

Kroz
()

SObjectizer v.5.5.19

Форум — Development

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

Во-первых, добавлена возможность запускать SObjectizer в однопоточном режиме. Т.е. теперь можно написать приложение на акторах так, что все акторы и вся вспомогательная кухня самого SObjectizer-а будут работать на одной единственной рабочей нити. Это может пригодиться при написании простых приложений, в которых наличие акторов может быть выгодно (для упрощения логики), а вот создание нескольких рабочих потоков — это уже оверкилл. Например, если маленькая программка должна собирать какую-то информацию и время от времени публиковать ее через MQTT. Или, скажем, при написании своей хитрой версии traceroute. Вот маленькая демонстрация того, к чему все это может прийти в пределе: тривиальный http-сервер для асинхронной обработки запросов на базе SObjectizer и restinio.

Во-вторых, добавлена возможность отсылки мутабельных сообщений. Поскольку ноги у SO-5 растут из модели Publish/Subscribe, в которой взаимодействие идет в режиме 1:N, все сообщения в SO-5 изначально были иммутабельными. В большинстве случаев это упрощало жизнь, но мешало в тех ситуациях, когда нужно было, например, построить обработку данных в режиме конвейера: один агент модифицировал данные и передавал их следующему в конвейере, при этом взаимодействие в конвейере всегда идет в режиме 1:1. В итоге в версии 5.5.19 добавлена поддержка мутабельных сообщений с обеспечением гарантии того, что мутабельное сообщение будет доставлено не более чем одному получателю. Подробнее все это показано в новой презентации из серии «Dive into SObjectizer-5.5». Кстати говоря, данная фича появилась после общения в кулуарах на C++ Russua 2017.

Все изменения в 5.5.19 описаны здесь.

Загрузить новую версию можно либо в виде архива с SourceForge, либо из svn-репозитория проекта, либо из зеркала на GitHub.

Между релизами 5.5.18 и 5.5.19 прошло довольно много времени, хотя на то были объективные причины. Надеемся, что работа над следующей версией, 5.5.20, пойдет быстрее и мы сможем выкатить ее в конце лета 2017-го.

Для будущей версии 5.5.20 у нас есть несколько своих идей, но в этом плане мы полностью открыты и готовы выслушать любые замечания и предложения. Так что, если кто-нибудь расскажет, что он хотел бы видеть в SObjectizer или, напротив, чего бы не хотел, то мы постараемся учесть это в своей работе. Опыт реализации таких фич, как отказ от дополнительного пространства имен so_5::rt, приоритеты агентов, иерархические конечные автоматы и мутабельные сообщения показывает, что это более чем возможно.

ЗЫ. Старую тему с анонсами SO-5 решил не поднимать, т.к. было это уже слишком давно. Для, кто не в курсе, что такое SObjectizer — это один из немногих живых и развивающихся OpenSource кросс-платформенных фреймворков для C++, которые дают разработчику возможность использовать Actor Model (в случае с SO-5 сюда добавляются еще и Pub/Sub, и CSP).

 , , , ,

eao197
()

Ищем программиста С++ Санкт-Петербург

Форум — Job

Для разработки продукта vGate (защита информационных систем, развернутых на базе виртуализации) мы ищем разработчиков на C++

Обязанности:

  • Разработка приложения под Windows/Linux;
  • Участие в разработке архитектуры и интерфейсов системы;
  • Разработка программного обеспечения;
  • Участие в разработке сопутствующей технической документации;
  • Планирование и распределение работ, контроль сроков и качества работ

Работа в очень стабильной компании Код Безопасности http://www.securitycode.ru в прекрасном комфортабельном офисе за хорошие деньги=)

За подробностями можете в любое время писать на m.ryzhova@securitycode.ru

 , ,

mi-vosem
()

Как приготовить Linux на ультрабуке (командировки и путешествия)

Форум — Linux-install

Приветствую местных обитателей!

Зарегистрировался специально для создания этой темы, а так я давно почитываю здесь новости и комменты к ним :)

Покупаю жене ультрабук проц intel i3 6100U, оперативка 4Гб, ssd 128ГБ.

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

Надо ли под /home отдельный раздел для этого?

Этот проц умеет аппаратно AES, какой вид шифрования выбрать, чтобы и не тормозило и ворам не вскрыть (ФСБ и АНБ пусть вскрывают если интересно :) ).

Добавлено: на SSD ставить EXT4? Забыл сказать, что ставить буду Ubuntu 16.04

 ,

Podarok
()