Контракты для С++
Тимур Думлер
Контрактное программирование — эффективный подход к написанию более безопасных и корректных программ. Он был успешно реализован в таких языках программирования, как Eiffel и Ada. В стандарте С++ контрактное программирование имеет долгую и сложную историю.
С тех пор как попытка добавить контракты в стандарт C++20 потерпела неудачу, SG21 — рабочая группа для стандартизации контрактов в комитете C++ — активно разрабатывает новую версию этой фичи. Сегодня эта версия контрактов уже практически полнофункциональна и с большой вероятностью будет включена в следующий стандарт C++26.
В этом докладе мы рассмотрели текущий дизайн контрактов для C++26. Обсудили разновидности контрактов (preconditions, postconditions, assertions), возможные режимы проверки, обработку нарушений и многое другое. Рассмотрели, чем текущий дизайн превосходит существующие реализации на макросах и как помогает повысить безопасность и корректность кодовой базы.
источнки
#cpp #programming
👉 @cpp_lib
Коллекция библиотек и фреймворков для C++
Список удивительных фреймворков, библиотек, ресурсов и блестящих вещей на C++ (или C). Вдохновленный удивительными... вещами.
https://github.com/fffaraz/awesome-cpp
#cpp #programming
👉 @cpp_lib
🚀 Митап по C++ — в центре внимания ключевые аспекты разработки!
✔️ Применение паттернов ООП в современных C++ проектах — Костя Крюков, YADRO
Поговорим о сочетании производительности и гибкости в реальных проектах C++.
✔️ Void me — Сергей Кушниренко, Forgotten Empires (Microsoft Game Studios)
Разберём проблемы типа void в тестах и альтернативные решения.
✔️ Обзор build-системы LightForge — Сергей Струков, YADRO
Сравним LightForge с Make, CMake и Bazel, обсудим её преимущества.
✔️ Сериализация сложных структур данных с помощью jsoncpp — Константин Селезнёв, РЕЛЭКС
Создание удобной надстройки для работы с JSON в сложных проектах.
✔️ Статический анализ: что? как? зачем? — Евгений Феклин, PVS-Studio
Как писать безопасный и качественный код с помощью статического анализа.
Модератор: Алексей Кузнецов, VK
Эксперт: Илья Казаков, YADRO
➖➖➖
🗓 28 ноября, начало в 19:00 мск, Четверг
🌐 ОНЛАЙН
✅ Регистрация на мероприятие
Constexpr Game of Life
С чего все началось
В C++ уже больше 10 лет существует constexpr, который позволяет программисту ушло возложить часть вычислений на компилятор. В свое время это взорвало мне мозг, ведь компилятор может посчитать какие-то достаточно сложные вещи еще до запуска программы!
В какой-то момент я подумал: если компилятор сможет сам посчитать все за тебя, то зачем тогда тебе вообще рантайм? Что ты там будешь делать — ответ выводить что ли? Глупости какие-то. Это неспортивно.
На этом моменте и зародился мой челлендж:
"Без рук" или "даже не думай запускать exe-файл"
Программирование на C в Linux на примере создания своей командной оболочки
Язык программирования C — основополагающий, как я считаю. И его знать, нет, не обходимо, но довольно желательно. Большинство языков отсылают к C, и зная C (или C++) другой язык будет даваться намного легче.
Я решил недавно улучшить свой навык владения C, путем написания проектов. Самая первая мысль, которая пришла мне на ум — это командный интерпретатор, командная оболочка, shell проще говоря. А также я расскажу о системе сборки make, и о том, как правильно писать и документировать C-код.
В этом туториале я буду использовать компилятор CLANG, а не GCC, и расскажу его преимущества
Итак, для создания своего шелла на C для Linux вам понадобится простой советский копеечный...
https://habr.com/ru/companies/timeweb/articles/839890
#cpp #programming
👉 @cpp_lib
Space Invaders from Scratch. Part 5
В последнем посте этой серии я обработаю подсчет очков и добавлю процедуры для отрисовки текста и других элементов пользовательского интерфейса.
https://nicktasios.nl/posts/space-invaders-from-scratch-part-5.html
Код к этому посту на Github
#cpp #programming
👉 @cpp_lib
Space Invaders from Scratch. Part 3
В этом посте я сделаю игровой цикл с фиксированным временным шагом, добавлю игрока и инопланетян, а также добавлю анимацию спрайтов.
https://nicktasios.nl/posts/space-invaders-from-scratch-part-3.html
Код к этому посту на Github
#cpp #programming
👉 @cpp_lib
Space Invaders from Scratch. Part 2
В этом посте я установлю необходимые шейдеры OpenGL, чтобы нарисовать инопланетный спрайт!
https://nicktasios.nl/posts/space-invaders-from-scratch-part-2.html
Код к этому посту на Github
#cpp #programming
👉 @cpp_lib
Space Invaders from Scratch. Part 1
В этой серии постов я собираюсь создать клон классической аркадной игры Space Invaders на C++, используя всего несколько зависимостей. В этом посте я настрою окно с контекстом OpenGL 3.3, используя GLFW и GLEW как единственные зависимости для этого простого клона.
https://nicktasios.nl/posts/space-invaders-from-scratch-part-1.html
Код к этому посту на Github
#cpp #programming
👉 @cpp_lib
🚀 Приглашаем на бесплатный вебинар по C++! 🚀
Дата: 19 ноября 2024 года
Время: 20:00
Тема: Как протестировать C++ код и оценить степень собственной лени
На вебинаре поговорим о том, зачем разработчикам писать юнит-тесты, и какую пользу они несут. Посмотрим популярные фреймворки тестирования, такие как GTest и Boost, разберем несколько практических примеров. Затем попробуем оценить, достаточно ли тестов мы написали для своего кода.
На занятии:
1. Научимся подключать фреймворки тестирования к своему проекту при помощи CMake.
2. Напишем готовые к запуску тесты.
3. Поговорим о том, как измерить покрытие тестами кода, какие инструменты для этого существуют.
В результате:
1. Придем к тому, что вместе с кодом стоит сразу писать и юнит-тесты к нему.
2. В будущем с легкостью интегрируем любой фреймворк тестирования в свой проект.
3. Научимся не только писать тесты, но и мерить их покрытие.
👉🏻О курсе "Специализация C++ Developer" на Otus:
Длительность курса: 10 месяцев.
Формат: Онлайн.
Программа курса:
· Введение в язык C++: основы синтаксиса, структура программ, базовые конструкции.
· Классы и структуры: ООП, наследование, полиморфизм, шаблоны.
· Основы unit-тестирования: подключение фреймворков, написание тестов, измерение покрытия.
· Стандартная библиотека и полезные алгоритмы: контейнеры, ввод-вывод, алгоритмы.
📌Скидка 15%: действует до 17 ноября!
Не упустите шанс стать профессионалом в C++! Присоединяйтесь к вебинару и узнайте больше о курсе.
🔗 Регистрация на вебинар
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Ищем Арнольда Шварценеггера среди мужчин, женщин и детей с помощью нейросети на С++
Меня зовут Кирилл Колодяжный, я ведущий инженер-программист в YADRO. Помимо основных рабочих задач, включающих исследование проблем производительности СХД, я увлекаюсь машинным обучением. Участвовал в коммерческих проектах, связанных с техническим зрением, 3D-сканерами и обработкой фотографий. В задачах часто использовал С++, хотя машинное обучение традиционно ассоциируется с Python. Этот язык программирования буквально захватил сферу, его используют повсюду — от обучающих курсов до серьезных ML-проектов.
Однако Python — не единственный язык, на котором можно решать задачи машинного обучения. Так, альтернативой может стать С++. Если последний вам ближе, вам будет интересен и полезен этот текст.
Под катом разберемся:
• как организовать работу с данными и загрузку обучающего датасета,
• как описать структуру нейронной сети,
• как использовать уже готовые алгоритмы машинного обучения из доступных библиотек и фреймворков,
• как организовать конвейер обучения сети,
• как использовать предобученные глубокие сети для решения задач.
https://habr.com/ru/companies/yadro/articles/800533/
#cpp #programming
👉 @cpp_lib
Получите оффер Software Engineer всего за 3 дня! 🚀
Вендор и производитель IT-инфраструктуры YADRO приглашает Software Engineer на SPRINT OFFER.
Команда KVADRA OS ждёт кандидатов сразу на два направления: Linux-based (от уровня junior) и Android (уровня middle и senior).
В YADRO под брендом KVADRA ребята создают персональные устройства, а также разрабатывают собственную операционную систему kvadraOS, которая поддерживает облачное хранилище и включает множество компонентов собственной разработки — от системного ядра до приложений и сервисов.
🔵 Присоединившись к YADRO, вы станете частью большого инженерного сообщества и получите возможность влиять на продукт, работая в уникальной команде специалистов.
Читайте подробности на сайте, оставляйте заявку до 24 ноября и присоединяйтесь к команде KVADRA OS → по ссылке.
Тяжелый H[header]
Всегда хотел написать о чем-нибудь легком и воздушном, как пишет например @antoshkkaпро userver или о том, как легко и непринужденно обернуть какую-нибудь хрень алгоритм в десяток шаблонов, полить это все std::optional и попивая кофе ждать, когда компилятор соизволит это всё пережевать. Но судьба (а не тимлид, нет, как вы могли такое подумать) постоянно подкидывает задачки, где суровые объятия отладчика не отпускают мечтательную душу программера до поздней ночи, да вечная борьба с компилятором рушит все попытки обернуть результат хрени алгоритма в другой десяток шаблонов. На этот раз судьба ясным июньским утром подкинула забавную задачу - время полной сборки бандла подбиралось к двум часам, да собирать бандлы нынче удовольствие не из быстрых, но посмотрев статистику стало понятно, что ~55% процентов времени тратится на сборку ресурсов: текстур, моделей, локализацию, и тд. Там есть что чинить, но это царство билд-инженеров.
Еще 30% или сорок минут тратится на тесты, теперь все что мы насобирали и переконвертили надо проверить, загрузить, пострелять, побегать, монстров поубивать, BT-шки погонять, с этим пусть QA разбираются. А вот оставшиеся 15% или около 15 минут мы занимались настоящей работой, собирали сердце проекта - бинарь. Да норм, у нас всегда так, даже на пустом проекте UE - сказали наши мобильщики и ушли пить кофе на терассу . Но мы же не мобильщики, мы серьезные AAA ребята, у нас свой движок и кастомный пайплайн на билдферме. И потом 15 минут это очень много, даже если у тебя 27к файлов в проекте, айда смотреть куда время потратили.
https://habr.com/ru/articles/856916/
#cpp #programming
👉 @cpp_lib
Подборка Telegram каналов для программистов
/channel/piterspb Канал о Санкт-Петербурге 🌇❤️💙
Системное администрирование 📌
/channel/sysadmin_girl Девочка Сисадмин 👩
/channel/srv_admin_linux Админские угодья
/channel/linux_srv Типичный Сисадмин
/channel/devops_star DevOps Star (Звезда Девопса)
/channel/i_linux Системный администратор
/channel/linuxchmod Linux
/channel/sys_adminos Системный Администратор
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus
Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах
GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
/channel/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
/channel/game_devv Все о разработке игр
Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов
БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Английский 📌
/channel/UchuEnglish Английский с нуля
Математика 📌
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
/channel/Excel_lifehack
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
Сборка мусора: как это делается в системном программировании
Давайте поговорим об одной из наиболее критичных по производительности программ, которой вы пользуетесь ежедневно: о вашей операционной системе. Поскольку при каждом разгоне железа вы получаете дополнительную вычислительную мощность, операционная система никогда за этим не поспевает. Поэтому постоянно доводится читать о том, как разработчики ядра и драйверов выжимают последнее из своего кода.
Кроме того, операционные системы должны быть рассчитаны на массовую конкурентность. Дело не только в том, что наша операционная система отвечает за планирование всех процессов и потоков пользовательского пространства, но и в том, что в ядре хватает собственных потоков, а также обработчиков прерываний, нужных для взаимодействия с железом. Требуется минимизировать время, которое тратится на ожидание, так как, опять же, при любой задержке вы воруете время ваших пользователей.
Rus https://habr.com/ru/companies/timeweb/articles/766772/
Eng https://bitbashing.io/gc-for-systems-programmers.html
#cpp #programming
👉 @cpp_lib
❓Хотите создавать идеальные C++ API, которые не ломаются на первой же нагрузке?
👉 Тогда не пропустите этот бесплатный вебинар! 3 декабря в 20:00 мск — открытый урок, который кардинально изменит ваш подход к проектированию API на C++!
**Что вас ждет?**
- Понимание плохого и хорошего API: как отличить чудовищное API от шедевра?
- Умение правильно именовать сущности и разбивать их на атомарные элементы. Прокачаем навыки, чтобы не было «кучи кода» и «головной боли».
- Идеи data-oriented подхода для создания API в высоконагруженных приложениях.
**Кому это будет полезно?**
- Разработчикам, кто только знакомится с C++ или переходит с других языков.
- C++-программистам, которые хотят прокачать свои навыки разработки API.
Вы научитесь проектировать удобный, стабильный и эффективный API для C++, который будет работать как часы.
⭐️ Спикер Андрей Рыжиков — разработчик в НИИ обработки аэрокосмических изображений.
Успейте записаться на открытый урок и получите скидку на большое обучение «C++ Developer».
Для участия зарегистрируйтесь: https://vk.cc/cFotR6Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Алгоритмы на С/С++
Задача о Ханойской башне
Быстрая сортировка (quick sort)
Бинарный поиск в отсортированном массиве
Сортировка методом выбора
Сортировка методом пузырька
Минимизация просмотров в методе сортировки пузырьком
Модифицированный метод пузырька
Сортировка методом вставок
Шейкер - сортировка
источник
#cpp #programming
👉 @cpp_lib
Практика языка C.
Константин Владимиров.
На этом занятии мы завершим первый семестр знакомства с основами языка C и разберём многомодульные программы и структуры данных.
00:00 Хеш-таблицы.
15:10 Алгоритм Рабина-Карпа.
22:30 Range-based queries и снова о деревьях.
29:42 Многомодульные программы.
36:30 Структуры данных.
42:40 Литература и задачи.
44:45 Демонстрация многомодульных программ.
источник
#cpp #programming
👉 @cpp_lib
Погрузитесь в мир передовых технологий и узнайте, как использовать мощь C++ для создания молниеносных веб-приложений с помощью WebAssembly! Регистрируйтесь на бесплатный урок от профессионалов: https://clck.ru/3EifSF/?erid=2Vtzqwgnakf
На вебинаре:
- Откройте для себя WebAssembly: Узнайте, как эта революционная технология позволяет запускать C++ код в браузере с почти нативной производительностью.
Мы рассмотрим, как компилировать C++ код в WebAssembly с использованием Emscripten и создадим работающий веб-сервер.
Изучим техники оптимизации WebAssembly модулей для достижения максимальной эффективности.
Узнайте методы интеграции C++ кода с JavaScript для создания гибридных веб-приложений.
Поймите особенности работы с памятью и управление ресурсами в WebAssembly.
⚡️Полезно:
- Всем разработчикам: Расширьте свои возможности в веб-разработке и создавайте высокопроизводительные приложения.
- Разработчикам сложных проектов: Работайте над вычислительно-сложными веб-проектами с новыми инструментами.
- Специалистам по кроссплатформенной разработке: Интересуйтесь новыми технологиями и их применением.
😉 По итогам вебинара вы:
1. Создадите свой первый WebAssembly модуль на C++: Получите практический опыт создания и запуска модулей.
2. Получите навыки отладки и оптимизации: Научитесь отлаживать и оптимизировать ваши WASM-приложения.
3. Разработаете гибридные веб-приложения: Научитесь комбинировать C++ и JavaScript для создания мощных приложений.
4. Освоите инструменты WebAssembly: Узнайте, как использовать основные инструменты экосистемы WebAssembly.
🔼 Зарегистрируйтесь сейчас и прокачайте навыки создания высокопроизводительных веб-приложений с C++ и WebAssembly!Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Конференция по системному ПО, железу, Linux и open source — OS DevConf от SberDevices
5 декабря | 11:00 | онлайн и офлайн в Москве
Приглашаем всех, кто в low-level — разработчиков системного и встраиваемого ПО, специалистов по разработке ядра и драйверов, специалистов по SoC, сетевых инженеров.
В программе — 17 выступлений. Среди них — про боли и практики системной разработки:
— APEX для решения несовместимости ABI
— Принципы и реализации обновлений embedded-устройств
— Практика использования ftrace
— Боли и страдания парсинга ELF-файлов, или Ещё раз о безопасном программировании
Также в программе — доклады про прототипы SoC, драйверы на Rust, параллельное программирование без ОС и работу с ядром Linux.
Полная программа и регистрация — на сайте конференции.
Реклама. ПАО Сбербанк. ИНН 7707083893
Space Invaders from Scratch. Part 4
В этом посте я добавлю обработку ввода игрока с клавиатуры и стрельбу снарядами.
https://nicktasios.nl/posts/space-invaders-from-scratch-part-4.html
Код к этому посту на Github
#cpp #programming
👉 @cpp_lib
🔥 Как сократить баги и ускорить релизы с помощью безопасной разработки
Ты создаешь крутые приложения, но баги и уязвимости продолжают отнимать драгоценное время, особенно когда горят дедлайны? 😬
Представь, что ты можешь защитить свой код на каждом этапе разработки и при этом сэкономить нервы и время! Мы разработали новый курс «Безопасность приложений для разработчиков», чтобы показать, что безопасность — это не про сложности, а про качество и экономию времени.
🎯 Почему стоит записаться?
· Ты научишься строить защиту ещё на этапе планирования, минимизируя уязвимости.
· Безопасность не замедлит процесс — мы покажем, как сохранять темп и укладываться в дедлайны.
· Меньше проблем на проде — ты будешь предотвращать уязвимости на ранних стадиях, избегая лишних правок.
👨💻 Авторы курса — эксперты Positive Technologies, одной из лидирующих компаний на рынке кибербезопасности. Ты будешь учиться у профессионалов, которые ежедневно работают над безопасностью приложений.
⏰ Старт курса 25 ноября, длительность — 3 недели, формат — онлайн. Учись в любое время и из любой точки.
Не трать время на исправления багов — записывайся на курс и учись предотвращать их заранее!
👉 [Забронировать место на курсе]
👍Как применить принципы ООП в языке С для создания сложных программ?
Узнайте на бесплатном уроке онлайн-курса «Программист С» — «Язык Cи и ООП: пошаговая разработка видеоплеера»: регистрация
Разберем практический пример разработки видеоплеера с использованием объектно-ориентированного подхода:
- узнаете особенности реализации ООП в языке С
- рассмотрим проектирование архитектуры видеоплеера: от интерфейсов к реализации
- проведем практику: пошаговая разработка основных компонентов плеера.
Также будет обработка ошибок и управление памятью в объектно-ориентированном стиле; live-coding: демонстрация работы с форматами видео и аудио в С.
В результате получите:
- готовый прототип видеоплеера на С с использованием ООП подходов и практические навыки применения паттернов проектирования в Си.
🔥После вебинара вы сможете продолжить обучение на курсе по спеццене, в том числе, в рассрочку.Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Компьютерное зрение на C++: пишем приложение для поиска объектов под Android
Меня зовут Кирилл Колодяжный, я пишу код на С++ для систем хранения данных в YADRO. Помимо основной работы, интересуюсь машинным обучением и его возможностями, в том числе на «плюсах». Недавно мне стало интересно разобраться, как развернуть модель компьютерного зрения на мобильном устройстве с операционной системой Android.
Я изучил доступные инструменты, чтобы понять, какие части приложения можно реализовать на С++, и написать само приложение для телефона. Ни в одном из материалов на подобную тему не описывают реализацию такого приложения от начала до конца, поэтому я собрал свой опыт в серию статей.
Расскажу, как реализовать обнаружение объектов в реальном времени с помощью камеры на мобильной платформе Android с использованием библиотек PyTorch и NCNN и моделей компьютерного зрения YOLOv5 и YOLOv4. Шаблон моего приложения пригодится тем, кто хочет проверить прототип функциональности для компьютерного зрения на С++, использующий OpenCV на Android, но не хочет глубоко погружаться в программирование под Android.
В первой части цикла мы:
• создадим проект в IDE Android Studio,
• реализуем сессию непрерывного захвата изображений камеры,
• преобразуем изображения в матрицу OpenCV, чтобы сделать дальнейшую работу удобной.
https://habr.com/ru/companies/yadro/articles/850786/
#cpp #programming
👉 @cpp_lib
Компьютерное зрение на С++: подключаем ML-библиотеки и обрабатываем результаты поиска объектов
Меня зовут Кирилл Колодяжный, я разрабатываю системы хранения данных в YADRO и изучаю нестандартные подходы к машинному обучению: создаю ML-проекты на С++.
Это вторая часть цикла о разработке приложения для обнаружения предметов на С++. В прошлом материале мы выяснили, как создать проект в IDE Android Studio, реализовать сессию непрерывного захвата и преобразовать изображение в матрицу OpenCV. Ссылку вы найдете в конце статьи.
В этой статье продолжим реализацию проекта и обсудим следующие шаги:
• Как подключить к проекту библиотеки машинного обучения PyTorch и NCNN.
• Как получить модели YOLOv5 и YOLOv4 для использования на мобильном устройстве.
• Как реализовать инференс моделей для обнаружения объектов.
• Как обработать результаты работы моделей YOLO, реализовав алгоритмы Non-Maximum-Suppression и Intersection-Over-Union.
В конце сравним производительность PyTorch и NCNN и решим, какой фреймворк подойдет для задачи лучше.
https://habr.com/ru/companies/yadro/articles/856110/
#cpp #programming
👉 @cpp_lib
Пишем игру для NES на C
Всем привет. Я Даг. Добро пожаловать в мой учебник - Как запрограммировать игру NES на C. Вы можете сделать оригинальную игру Nintendo, которая будет играть на настоящей консоли NES (или эмуляторе).
Давайте поговорим о NES.
Выпущена в Японии (Famicom) в 1983 году, в США — в 1985 году.
Процессор — Ricoh 2A03, 1.79 МГц, клон 6502 (без десятичного режима) со звуковой схемой. Чип 6502 был очень популярен в то время и использовался, например, в Apple II и Atari 2600.
https://nesdoug.com/
#cpp #programming
👉 @cpp_lib
Void me
void в плюсах довольно забавная штука. Мы можем привести к void почти любой тип, завести указатель с типомvoid*, который может адресовать что угодно. Еще можем сделать функцию с возвращаемым типом void , которая ничего не возвращает. Объявление функции типа void f(void) будет просто функцией без аргументов. Но вот иметь объекты типа void или написать что-то вроде void& не можем. Это немного странно, но не настолько, чтобы вызывать у вас бессонные ночи, пока вы не начинаете ловить странные баги, когда void вообще не void.
Проблема возникла где не ждали, а именно на проекте немного обновили бенчмарк фреймворк, казалось что такого может случиться на выполнении тестов?
"Ничего хорошего не случится" - сказал техлид и в пятницу вечером залил, в обход этих самых тестов, новый фреймворк. А сам укатил на какую-то конференцию.
https://habr.com/ru/articles/852316/
#cpp #programming
👉 @cpp_lib
486-го хватит всем
В конце технического интервью, если кандидат ответил на вопросы и справился с задачами, у нас есть время для свободных вопросов, которые можно задать команде или кому-то из интервьюеров. Эту практику я переносил из компании в компанию, и она всегда помогала разрядить обстановку или вывести человека на разговор, если он был напряжен во время общения. Вопросы могут быть любые, кроме личных или тех, что под NDA.
Обычно кандидаты задают технические вопросы по стеку, пайплайнам, иногда пытаются задать каверзные вопросы, особенно по плюсам, чтобы проверить нас. Иногда и мы не можем ответить на все из них. Вопросы в стиле Google — например, «почему таблетки круглые?» — тоже встречаются, но недавно на одном из интервью прозвучал вопрос, на который вроде все и знали ответ, но никто сразу не смог его дать. Вопрос звучал так: «Какие общие технологии и решения появились в процессорах с времён 486, которыми мы часто пользуемся?»
https://habr.com/ru/articles/856572/
#cpp #programming
👉 @cpp_lib
Давай программировать стек TCP/IP. Part 4: TCP Data Flow & Socket API
Part 1: Ethernet & ARP
Part 2: IPv4 & ICMPv4
Part 3: TCP Basics & Handshake
Ранее мы познакомились с заголовком TCP и тем, как устанавливается соединение между двумя сторонами.
В этом посте мы рассмотрим обмен данными TCP и то, как он управляется.
Кроме того, мы предоставим интерфейс из сетевого стека, который приложения могут использовать для сетевого взаимодействия. Этот Socket API будет использован в нашем примере для отправки простого HTTP-запроса на веб-сайт.
В качестве примера давайте рассмотрим системные вызовы, которые выполняет простая команда curl(1)
.
$ strace -esocket,connect,sendto,recvfrom,close curl -s example.com > /dev/null
...
socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("93.184.216.34")}, 16) = -1 EINPROGRESS (Operation now in progress)
sendto(3, "GET / HTTP/1.1\r\nHost: example.co"..., 75, MSG_NOSIGNAL, NULL, 0) = 75
recvfrom(3, "HTTP/1.1 200 OK\r\nCache-Control: "..., 16384, 0, NULL, NULL) = 1448
close(3) = 0
+++ exited with 0 +++
Давай программировать стек TCP/IP. Part 3: TCP Basics & Handshake
Part 1: Ethernet & ARP
Part 2: IPv4 & ICMPv4
Теперь, когда наш стек TCP/IP в пользовательском пространстве имеет минимальные реализации для Ethernet и IPv4, пришло время рассмотреть работу протокола управления передачей (Transmission Control Protocol, TCP).
Работающий на четвертом сетевом уровне OSI1, транспортном, TCP отвечает за восстановление ошибочных соединений и ошибок в доставке пакетов. По сути, TCP - это рабочая лошадка Интернета, обеспечивающая надежную связь практически во всех современных компьютерных сетях.
TCP не совсем новый протокол - первая спецификация вышла в 1974 году2. С тех пор многое изменилось, и TCP обзавелся множеством расширений и исправлений3.
В этой статье мы рассмотрим основные теоретические основы TCP и попытаемся дать мотивацию для его разработки. Кроме того, мы рассмотрим заголовок TCP и обсудим установление соединения (TCP handshaking). В качестве последнего шага мы продемонстрируем первую функциональность TCP в нашем сетевом стеке.
https://www.saminiir.com/lets-code-tcp-ip-stack-3-tcp-handshake/
#cpp #programming
👉 @cpp_lib