LINUX.ORG.RU

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

Форум — Development

60 антипаттернов для С++ программиста

 , , , ,

Постоянно писать «как делать правильный код» надоедает. Поэтому для разнообразия и развлечения написал мини-книгу «60 антипаттернов для С++ программиста». Этакие вредные советы в духе «Книга для непослушных детей и их родителей».

На самом деле там, не только вредные советы, но и разбор почему они собственно вредны. Будет полезно почитать новичкам в программировании. Думаю, каждый знает кого-то, кому будет полезно почитать этот материал :). Впрочем, опытные программисты тоже смогут найти интересное для себя и узнать/освежить знания про некоторых тонкие моменты C++.

Там много букв. Приглашаю запастись кофе/энергетиком и приступать. Буду рад обсуждениям и дополнениям, основанном на вашем опыте.

Ещё я этот текст переработал для бумажного издания. Оно в подготовке для печати. Смысл там в целом тот же, но пришлось многое переделать или расписать подробнее. Ведь нельзя в бумажной книге дать 100500 ссылок на сторонние ресурсы «читать здесь про xxx подробнее». Надеюсь, успеем напечатать к осенним конференциям и будем раздавать на стенде, например по кодовым словам. Приходите на стенд и говорите, что с linux.org.ru и что там на тему бумажной книги :)

Парочка вредных советов для примера:

  • Пишите ваши .h-файлы так, чтобы они зависели от других заголовков, и при этом не включайте их в свой заголовочный файл. Пусть тот, кто инклудит, догадается, какие заголовки нужно заранее заинклудить перед использованием вашего файла. Развлеките коллег квестами!
  • Пишите код так, как будто его будет читать председатель жюри IOCCC и он знает, где вы живёте (чтоб приехать и вручить вам приз).

P.S. PDF (yandex.ru), если кому-то так удобнее.

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

Встроенный бинарник на Linux

 , ,

Встроенный бинарник на Linux

Это текстовая версия статьи, оригинал с картинками вот тут (teletype.in).

Продолжаю раскрывать интересную тему запуска программ нестандартными способами. В этот раз расскажу про запуск ELF-бинарника из скрипта и без записи в файловую систему.

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

alex0x08
()
Форум — Development

constexpr в C++ на самом деле не const

 , ,

Привет, ЛОР!

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

int main () {
  constexpr int a = f ();
  constexpr int b = f ();

  static_assert (a != b, "fail");
}

Как это сделать? Об этом написано тут: https://b.atch.se/posts/non-constant-constant-expressions/

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

P.S. первый пример из ссылки GCC сейчас обрабатывает корректно и вываливает ошибку из static_assert. Но второй ещё работает в GCC 13. Для Ъ код ниже.

namespace detail {
  struct A {
    constexpr A () { }
    friend constexpr int adl_flag (A);
  };

  template<class Tag>
  struct writer {
    friend constexpr int adl_flag (Tag) {
      return 0;
    }
  };
}

template<class Tag, int = adl_flag (Tag {})>
constexpr bool is_flag_usable (int) {
  return true;
}

template<class Tag>
constexpr bool is_flag_usable (...) {
  return false;
}

template<bool B, class Tag = detail::A>
struct dependent_writer : detail::writer<Tag> { };

template<
  class Tag = detail::A,
  bool    B = is_flag_usable<Tag> (0),
  int       = sizeof (dependent_writer<B>)
>
constexpr int f () {
  return B;
}

int main () {
  constexpr int a = f ();
  constexpr int b = f ();

  static_assert (a != b, "fail");
}
hateyoufeel
()
Новости — Open Source

FINAL CUT 0.9.0 - библиотека для создания консольных приложений

 , , , ,

Группа Open Source

22 мая, после более полутора лет разработки, состоялся выпуск 0.9.0 C++ библиотеки FINAL CUT, предназначенной для создания приложений с текстовым интерфейсом, не зависящей от библиотек ncurses, termbox или подобных, и распространяемой по лицензии LGPL-3.0.

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

>>> Подробности (github.com)

dataman
()
Новости — Open Source

uni-algo 0.8.0 - библиотека алгоритмов Unicode для C++

 , , ,

Группа Open Source

uni-algo - быстрая C++ (диалект C++17) header-only библиотека алгоритмов Unicode 15.0, лицензированная как MIT/Public Domain.


Изменения:

  • добавлена поддержка scripts и script extensions (UAX #24);
  • в реализацию сегментации текста добавлена поддержка курсора;
  • оптимизировано конвертирование строк ASCII в UTF;
  • в класс una::error добавлен una::error::code;
  • версии в una::version преобразованы в классы;
  • файл uni_algo/version.h больше не используется несколькими файлами;
  • переименование UNI_ALGO_DISABLE_SHRINK_TO_FIT в UNI_ALGO_NO_SHRINK_TO_FIT;
  • переименование UNI_ALGO_DISABLE_BREAK_GRAPHEME в UNI_ALGO_DISABLE_SEGMENT_GRAPHEME;
  • переименование UNI_ALGO_DISABLE_BREAK_WORD в UNI_ALGO_DISABLE_SEGMENT_WORD;
  • переименование функций поиска в find;
  • переименование класса una::search в una::found.

>>> Подробности (github.com)

dataman
()
Новости — Open Source

RapidFuzz 3.0.0 и rapidfuzz-cpp 1.11.2 - библиотеки для нечёткого сравнения строк

 , , , ,

Группа Open Source

rapidfuzz-cpp - быстрая, SIMD-оптимизированная библиотека на языке C++, реализующая несколько алгоритмов нечёткого сравнения строк и вычисления метрик:

RapidFuzz - основанная на rapidfuzz-cpp библиотека для языка Python.

Лицензия: MIT.

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

>>> Подробности (github.com)

dataman
()
Форум — Development

Файлы через NAT - libjingle или libnice или ...?

 , ,

Приветствую, нуждаюсь в совете.

Надо файл перекинуть через пару NATов, свой лисапед на С/C++ я уже попробовал с какой то чужой либой, возвращающей мне параметры ната от чужого STUN сервера - вроде все не сложно, обмениваемся получаемыми параметрами от стуна через какой то сигнальный сервер (в моем случае MQTT), создаем маршрут в НАТе посылкой UDP пакета и погнали качать.

НО во всей этой канители напрягает пара моментов, под которые нужно продолжать пилить лисапед

  1. обеспечение корректности полученных данных
  2. шифрование трафика

Последнее важно, но не так как первое.

Посоветуйте НЕБОЛЬШУЮ широко используемую либу под эти цели???

wolverin
()
Новости — Open Source

Sevimon — программа видеоконтроля напряжения мышц лица

 , , ,

Группа Open Source

Программа sevimon предназначена для помощи в контроле напряжения мышц лица через видеокамеру.

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

Sevimon работает следующим образом:

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

Полученные значения сохраняются в журнале в текстовом формате для последующего анализа программой sevistat.

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

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

Подготовлены инструкции для запуска в Linux/UNIX и Windows, а также образ docker для Linux.

Программа написана на Python и распространяется на условиях AGPLv3. Для поиска лиц на изображениях используются наработки проекта Centerface. Для определения эмоций используется проект HSEmotion.

>>> Подробности (github.com)

ioctl
()
Форум — Development

Возможно ли сделать .so обертку над .dll через winelib без исходников

 , , ,

Есть dll библиотека написанная на си, исходников нет. Есть следующие файлы от библиотеки: .dll, .h, .lib. Возможно ли сделать обертку над .dll через winelib?

Уже пробовал что-то подобное сделать, создав новый dll проект, который является оберткой над библиотекой, после чего пытался собрать это всё через winelib, но неудачно.

freaks338
()
Форум — Development

Генератор документов на C++

 , , ,

Доброе время суток

Кто подскажет годную, Open source, библиотеку для генерации документов наподобие FastRepor.

Заранее спасибо

enep
()
Галерея — Скриншоты

Скрутите свою спираль: Spiral Galaxy Renderer

 , , , ,

Spiral Galaxy Renderer — приложение, симулирующее вращающиеся спиральные галактики согласно теории волн плотности Линя и Шу.

Исходники

Онлайн-демо

Подробности

dataman
()
Форум — Development

Средства для получения графа вызовов функций Си(++) статически, имея qt creator

 , , ,

Доброго времени суток. Есть нужда узнать какие функции из каких вызываются в коде на си/си++. Не в рантайме, а в принципе, кто кого вызывает по коду. Из сред разработки моём распоряжении qt creator, и хочется получить граф (дерево) вызовов посредством статического просмотра кода. Знает ли кто, как это можно сделать посредством creator-а, или может существуют отдельные инструменты, которые проанализировав код, смогут выдать мне такую информацию?

normann
()
Форум — Development

c++ библиотека для простого логгирования в stdout

 , ,

Добрый день! Я в качестве хобби поковыриваю c++ и понадобилась мне очень небольшая библиотека для логгирования - только в stdout, вывод в файлы не нужен. Что хочется видеть в логе - имя файла, имя функции, текущее время (epoch вполне достаточно), идеально какое то имя треда. Из того что пробовал - boost.log монструозен как зависимостями так и функционалом, это лютый оверхед для меня. Писать свои макросы не думаю что надо, не я же первый кому нужна подобная библиотека.

matroskin
()
Форум — Development

C++

 

Маленькая справка я изучаю С++ нашел две ветки книг какая из них ведёт к лучшему варианту изучение

ПЕРВАЯ

1.Принципы программирование 2.Бьерн Страуструп. Язык программирования C++ 3.Герб Саттер. Решение сложных задач на С++ 4.Герб Саттер. Новые сложные задачи на С++ 5.Г. Саттер, А. Александреску. Стандарты программирования на С++ 6.Мартин Фаулер. Рефакторинг. Улучшение существующего кода 7.Э. Гамма, Р. Хелм, Р. Джонсон и др. Приемы объектно-ориентированного проектирования. Паттерны проектирования 8.Эндрю Таненбаум. Современные операционные системы

ВТОРАЯ

Прата, прата и еще раз прата. До прочтения праты дальше не двигаться принципиально, ибо нечего :)

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

После этого нужно попытаться почувствовать stl, будущим джедаям для этого рекомендуется бук «Структуры Данных и СБШ (aka stl)» by Уильям Дж. Коллинз. Нескмотря на const гей-код и очепятки для новичков это лучший бук. Обязательно нужно сделать все «программные проекты», потому что уверен, ты не сделаешь их в п.2. Все задачи и алгоритмы классические, – бук очень полезный.

Если ты действительно преодолеешь п 1-3. но ты достигнешь минимального уровня адекватности (МУА).

Т.е. будешь готов нормально понимать следующие буки -

Дедушка Мейерс долго жог, жжот он и сейчас, выпуская различные си(и далее) квелы по цпп - вариации на тему «const int советов штобы было как можно лучшее и удовлетворительнее». Тебе нужно два издания - 55(последнее) и 35. Причем второе, имхо, следует начать двигать раньше.

Паралельно с п.4 можно начать двигать буки Саттера 87(это русский int operator+(int,int)) и 40.

Параллельно с п.5 можно читаль Саттера+Александреску(вариаци на п. 4-5) и книгу «Скользкие места С++» by Стефан К. Дьюхэст. Причем первую я привел совсем без души, это скорее гайд по советам в буржуинской литературе, а вот вторая приятная, да и полегче п. 4-5.

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

Если ты действительно испытаешь это, то ты получишь шанс на достижение уровня большего минимального уровня адекватности (ШНДУ>МУА).

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

Вместо уголвно прославишихся GoF, на которых сцылаютцо всякие, волк рекомендует тебе для начала кингу Тротта и ШаллоуеЯ «ШП - новый подход к ООА и ООП». Хороший, простой и понятный бук читается на одном дыхании за 3 дня.

Потом нужно двигать ГоФ конечно. Если ты написал хотя бы 10 программ средней сложности, но ты будешь чувствовть, что ты понимаешь паттерны. Это, конечно же не так, но об этом сегодня я не буду писать.

Потому нужно двигать STL - там дедушка, Остерн и стИпанов жгут.

Потихоньку с п 7-12 нужно двигать буст, причем постоянно. Но двигать его надо не для того, чтобы писать в резюме или рассказывать блондинкам, что ты выучил 0.333f оператора из каких-то либ, а когда он тебе будет нужен. Поверь, он будет тебе нужен.

Нужно вкуривать форумы - тут жгут rdsn и gamedev.ru там можно найти почти любой ответ на любой вопрос.

Нужно вкуривать все посты таких лиц как aruslan и _Winnie - читай их жж, читай ссылки с них, читай френдов, вкуривай, понимай и осознавай.

Страуступа читать не надо - он справочник =) Справочники не читают, ими пользуются (с)

Если после п.15 ты думаешь, что твой уровень > ШНДУ>МУА то читай п.1 -15.

karpasol
()
Новости — Документация

Как работать с Makefile-проектами в среде CLion

 , , , ,

Группа Документация

За последние несколько лет мне пришлось столкнуться с множеством вопросов, которые были сформулированы примерно так: «мой проект не открывается в среде CLion». В свою очередь, это приводило к необходимости из раза в раз объяснять разным людям примерно одно и то же. Статья имеет целью сохранить тот опыт, который был накоплен в процессе анализа десятков разных проектов.

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

Bass
()
Форум — Development

Как вы используете std::error_code?

 

Как вы обычно это используете?

Передаете по ссылке?

void foo(..., std::error_code &e)

Или возвращаете значение?

std::error_code foo(...)
// Или так, потому что первый вариант не всегда удобен
std::variant<stuff, std::error_code> foo(...)

Meyer
()
Форум — Development

Поделистесь ссылкой на цветовые схемы редактора среды QtCreator.

 , ,

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

normann
()
Форум — Development

Хозяйке на заметку: кибибайты в плюсах ми-ми-ми

 ,

Пишем так:

constexpr std::size_t operator""_KiB(unsigned long long int x) {return 1024ULL * x;}

А потом можем писать так:

size = 42_KiB

От нижнего подчёркивания избавиться, кажется, не получится. Ми-ми-ми? Да прямо-таки ололо!

Всем пони по морковке!

Usruser
()
Форум — Development

Документация к языкам программирования

 , , , ,

Всевозможные учебники и книги - это хорошо, но обычно их предлагают купить и часто не совсем дёшево, даже если они описывают базовый уровень. Бесплатным решением, очевидно, является официальная документация. Когда я открыл документацию к python, я был приятно удивлён, что она написана практически как учебник. Для Java вроде бы тоже всё относительно неплохо в этом плане, хотя хотелось бы отдельный оффлайновый pdf.

Мне захотелось скачать себе документацию в подобном виде для C и C++. Зашёл на их официальные сайты, там описание стандарта предлагают получить на сайте ISO за немалые суммы денег. Да и само описание стандарта далеко не для обучения. Хорошо, подумал я, попробую тогда посмотреть документацию к одной из реализаций языка - GCC-CPP, и вижу, что описанное там тоже вовсе не подходит для обучения. Даже описания типов и примеров объявления нет (может плохо искал, но в заголовках не заметил).

Нет, это не тред «подскажите книгу по Сям», таких для начинающих я и сам могу гору насоветовать.

Вопрос следующий: существует ли нормальная доступная бесплатная документация по которой можно изучать C, C++? Официальная документация по другим языкам была бы тоже интересна.


Update

C, C++
Online-ресурсы и учебные пособия для начинающих:

Как дополнение: Рабочая версия стандарта C++14 от 19 ноября 2014 г. (с официального сайта стандарта)


Fortran


Python
В дополнение к официальной документациипереводу руководства Python 3.1):


Object Pascal. Lazarus

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

grem
()
Форум — Desktop

Трудности перехода. Hex редактор

 , ,

Посоветуйте более-менее мощный hex-редактор для замены 010 Editor’a (Знаю, есть нативный, но цена как-то высоковата).

Нужно чтобы он

а) был графическим, qt|kde|gtk3

б) поиск/замена текста работала во всех открытых вкладках одновременно

в) имел встроенный скриптовый язык для обработки бинарных данных

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

Все что я нашел - либо слишком примитивные, или консольные.

Может быть, существует какое-то расширение для vscodium которое так умеет?

hargard
()