Программирование {BookFlow}
16.7K subscribers
1.52K photos
453 videos
145 files
2.05K links
Мы публикуем лекции и книги по программированию, видеоуроки, доклады с IT конференций, новости технологий.

Группа в https://vk.com/bookflow.

По всем вопросам @evgenycarter

РКН https://clck.ru/3KoAbH
Download Telegram
Что_каждый_системный_программист_должен_знать_о_параллелизме.pdf
1.3 MB
Что каждый системный программист должен знать о параллелизме
Мэтт Клайн

Системные программисты хорошо знакомы с такими инструментами, как мьютексы, семафоры и условные переменные.
Но как они работают? Как писать параллельный код, когда этих инструментов нет — например, при работе ниже уровня операционной системы в встраиваемой среде или когда нельзя блокировать выполнение из‑за жёстких временных ограничений? И если компилятор и процессор «сговариваются», превращая ваш код в то, чего вы не писали, выполняя его в порядке, которого вы не ожидали, то как вообще работают многопоточные программы?

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

👉 @Bookflow
👍3
Детальный обзор полей Галуа

"Попросите Якоби или Гаусса публично высказать своё мнение — не о истинности, а о важности этих теорем. Позже, я надеюсь, найдутся люди, которым будет выгодно разобраться во всём этом хаосе."

Этими словами заканчивалось письмо Эвариста Галуа, написанное для своего друга Огюста Шевалье за два дня до его смерти от полученных на дуэли ран на 21 году жизни. Ни Якоби, ни Гаусс в его теоремах не разобрались, зато спустя 15 лет разобрался Жозеф Лиувилль и опубликовал работы Галуа, ставшие впоследствии фундаментом современной алгебры, известные сейчас как теория Галуа. В статье расскажу про одну из частей этой теории - поля Галуа, получившая настолько повсеместное применение в криптографии и избыточном кодировании, что Intel и AMD выпустили набор процессорных расширений для эффективной реализации операций над этими полями.

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

https://habr.com/ru/articles/916740/

👉 @Bookflow
👍42
📌7 распространённых асимптотических сложностей алгоритмов

1. O(1) — Константное время

- Время выполнения не зависит от размера входных данных.
- Пример: доступ к элементу массива по индексу.

2. O(log n) — Логарифмическое время

- Время выполнения растёт медленно при увеличении размера входных данных. Обычно встречается в алгоритмах, которые на каждом шаге делят задачу пополам.
- Пример: бинарный поиск в отсортированном массиве.

3. O(n) — Линейное время

- Время выполнения растёт прямо пропорционально размеру входных данных.
- Пример: поиск элемента в массиве перебором всех элементов.

4. O(n log n) — Линейно-логарифмическое время

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

5. O(n²) — Квадратичное время

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

6. O(2ⁿ) — Экспоненциальное время

- Время выполнения удваивается с каждым новым элементом во входных данных. Такие алгоритмы становятся непрактичными для больших входных размеров.
- Пример: генерация всех подмножеств множества.

7. O(n!) — Факториальное время

- Время выполнения пропорционально факториалу размера входных данных.
- Пример: генерация всех перестановок множества.

♻️ Сделай репост, чтобы помочь другим.

👉 @Bookflow
👍74
📌10 обязательных алгоритмов для работы с графами

1. Поиск в глубину (DFS)
2. Поиск в ширину (BFS)
3. Топологическая сортировка
4. Алгоритм объединения-поиска (Union Find)
5. Обнаружение циклов
6. Поиск связных компонентов
7. Проверка на двудольность графа
8. Заливка области (Flood Fill)
9. Минимальное остовное дерево
10. Кратчайший путь

♻️ Поделись, чтобы помочь другим подготовиться!

👉 @Bookflow
👍4
Давай программировать стек TCP/IP. Part 1: Ethernet & ARP

Написание собственного стека TCP/IP может показаться сложной задачей. Действительно, за более чем тридцать лет существования TCP накопилось множество спецификаций. Однако основная спецификация на удивление компактна — важные части включают разбор заголовков TCP, автомат конечных состояний, контроль перегрузок и вычисление времени ожидания повторной передачи.

Наиболее распространенные протоколы второго и третьего уровней — Ethernet и IP, соответственно, — в сравнении с TCP гораздо проще. В этой серии статей мы реализуем минимальный стек TCP/IP в пространстве пользователя для Linux.

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

TUN/TAP устройства
Чтобы перехватывать сетевой трафик низкого уровня из ядра Linux, мы будем использовать TAP-устройство Linux. Если кратко, TUN/TAP устройства часто применяются приложениями в пространстве пользователя для работы с трафиком на уровне L3 и L2 соответственно. Популярным примером является туннелирование, когда пакет инкапсулируется внутри полезной нагрузки другого пакета.

Преимущество TUN/TAP устройств в том, что их легко настроить в программе в пространстве пользователя, и они уже используются во множестве программ, таких как OpenVPN.

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


/*
* Taken from Kernel Documentation/networking/tuntap.txt
*/
int tun_alloc(char *dev)
{
struct ifreq ifr;
int fd, err;

if( (fd = open("/dev/net/tap", O_RDWR)) < 0 ) {
print_error("Cannot open TUN/TAP dev");
exit(1);
}

CLEAR(ifr);

/* Flags: IFF_TUN - TUN device (no Ethernet headers)
* IFF_TAP - TAP device
*
* IFF_NO_PI - Do not provide packet information
*/
ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
if( *dev ) {
strncpy(ifr.ifr_name, dev, IFNAMSIZ);
}

if( (err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ){
print_error("ERR: Could not ioctl tun: %s\n", strerror(errno));
close(fd);
return err;
}

strcpy(dev, ifr.ifr_name);
return fd;
}



https://www.saminiir.com/lets-code-tcp-ip-stack-1-ethernet-arp/

#cpp

👉 @Bookflow
👍41
This media is not supported in your browser
VIEW IN TELEGRAM
Carfinger

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

- Установите необходимые libarary .Mediapipe .opencv
- Запустите на python 3.10 запустите любую игру в жанре автогонок.
- Запустите редактор python от имени администратора запустите файл game_control.py

https://github.com/ayaankhan28/Carfinger

👉 @Bookflow
👍4👀1
Сессии, куки, JWT, токены, SSO и OAuth 2.0

👉 @Bookflow
👍8
⚙️ Микросервисы начинают тормозить под нагрузкой?

💡 Узнайте, как масштабировать и оптимизировать систему с помощью CQRS и Event Sourcing на .NET Aspire.

На открытом вебинаре «Оптимизация микросервисов с CQRS и Event Sourcing на .NET Aspire» 19 августа в 20:00 МСК разберем:
◽️ Ограничения классических микросервисов при высокой нагрузке.
◽️ Принципы разделения команд и запросов (CQRS) и хранения истории через Event Sourcing.
◽️ Практическую реализацию: сервис заказов с «команда-обработчик» и хранением событий в MongoDB.
◽️ Конфигурацию проекций для чтения данных.

❗️ Вы освоите оркестрацию через .NET Aspire (API Gateway, Order Service, база событий), внедрите логирование и трейсинг через OpenTelemetry, а также протестируете создание заказа, обновление статуса и визуализацию потока событий.

➡️ Посетите открытый урок и получите скидку на большое обучение «C# ASP.NET Core разработчик»: https://vk.cc/cOAUR7

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Media is too big
VIEW IN TELEGRAM
🔥 СВЕЖИЙ АД, ПРЯМО В ТВОЙ МОНИТОР! 💀

Они думали, что ад остался на Марсе…
Они ошибались.
DOOM возвращается — теперь в виде лёгкого, как бензопила в руках Мародёра, и безжалостного, как ракета в лицо кибердемону, порта на Go.
Никаких платформенных цепей. Никакого CGo. Только чистая ярость и кросс-компиляция, рвущая реальность на куски.

🔸 Запускается везде, где бьётся сердце Go
🔸 Минимум балласта — только стандартная библиотека Go
🔸 Полная линейка ада: DOOM, DOOM II, Ultimate DOOM, Final DOOM
🔸 WAD — твой пропуск в бездну: приноси своих демонов
🔸 Память в бронежилете: защита от переполнений буфера (но не от зубов какодемона)
🔸 Оружие массового поражения — кросс-компиляция под любую цель

Подготовься.
Натяни броню.
И перезаряди BFG…

https://github.com/AndreRenaud/gore

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍2
Promises Training

Проект помогает углубить фронтенд-разработчику свои знания о промисах в Javascript.

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

https://github.com/henriqueinonhe/promises-training

👉 @Bookflow
👍4
Пишем игру для NES на C

Всем привет. Я Даг. Добро пожаловать в мой учебник - Как запрограммировать игру NES на C. Вы можете сделать оригинальную игру Nintendo, которая будет играть на настоящей консоли NES (или эмуляторе).

Давайте поговорим о NES.
Выпущена в Японии (Famicom) в 1983 году, в США — в 1985 году.

Процессор — Ricoh 2A03, 1.79 МГц, клон 6502 (без десятичного режима) со звуковой схемой. Чип 6502 был очень популярен в то время и использовался, например, в Apple II и Atari 2600.

https://nesdoug.com/

👉 @Bookflow
👍8
В 2002 году мир математики стал свидетелем исторического момента, когда российский математик Григорий Перельман представил первую из трех новаторских работ, представивших доказательство неуловимой гипотезы Пуанкаре. Эта гипотеза ставила в тупик математиков более столетия, что сделало ее одной из самых сложных нерешенных проблем в этой области.

Работа Перельмана была поистине революционной. Он успешно сориентировался в запутанном лабиринте топологии и в конечном итоге предоставил строгое и элегантное доказательство своей гипотезы. Его достижение потрясло математическое сообщество и сразу же привлекло внимание коллег и экспертов со всего мира.

В знак признания своих исключительных достижений Григорий Перельман был награжден престижной медалью Филдса в 2006 году, что считается высшей наградой в математике. Однако реакция Перельмана на эту похвалу была столь же нетрадиционной, как и его математическое путешествие. Совершив беспрецедентный шаг, он отказался от медали Филдса, избегая всеобщего внимания и традиционных атрибутов успеха. Его затворнический и скромный характер стал очевиден миру.

Но отказ Перельмана принять признание на этом не ограничился. Математический институт Клея также пообещал существенное финансовое вознаграждение в один миллион долларов за доказательство гипотезы Пуанкаре. Поступок, который еще больше сбил с толку многих, Перельман отказался и от этой значительной суммы. Его цитировали: «Меня не интересуют деньги или слава; я не хочу, чтобы меня выставляли напоказ, как животное в зоопарке».

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

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

👉 @Bookflow
18👍5🫡2
💪 Хотите работать в финтехе? Освойте Solidity!

👉 Востребованное обучение для разработчиков с опытом программирования от года, которые хотят получить навыки написания кода и аудита безопасности, чтобы попасть в одну из самых перспективных и высокооплачиваемых сфер IT.

Освойте разработку децентрализованных приложений на профессиональном уровне всего за 5 месяцев на онлайн-курсе «Solidity Developer» от OTUS!

Забудьте о скучном обучении — здесь вас ждут настоящие челленджи и нестандартные практические решения. А еще крутые проекты для портфолио!

👉 Пройдите вступительные тест для оценки подходит ли вам курс: https://vk.cc/cOO92P

🎁 Получите welcome скидку для успешное прохождение теста. Подробности уточняйте у менеджера.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
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

👉 @Bookflow
2👍3
Space Invaders from Scratch. Part 2

В этом посте я установлю необходимые шейдеры OpenGL, чтобы нарисовать инопланетный спрайт!

https://nicktasios.nl/posts/space-invaders-from-scratch-part-2.html

Код к этому посту на Github

#cpp

👉 @Bookflow
👍21
Ваши .NET проекты превратились в спагетти-код — пора перейти к Clean Architecture

Пока одни разработчики продолжают страдать с legacy-кодом, другие применяют Clean Architecture и создают гибкие, тестируемые приложения. Виктор Дзицкий покажет эволюционный путь от классической многослойной архитектуры к современным принципам проектирования.

Вебинар «От N-Layer к Clean Architecture: эволюция проектирования .NET приложений» в рамках курса «C# Developer. Professional»

→ 27 августа, 20:00

Программа:

→ Сравнение подходов: классическая N-Layer vs современная Clean Architecture
→ Принцип инверсии зависимостей (DIP) и Dependency Injection как основа трансформации
→ Практическая демонстрация: как реорганизовать N-Layer проект в Clean Architecture
→ Достижение независимости бизнес-логики от инфраструктуры

Бесплатная регистрация — превратите хаос в порядок: https://vk.cc/cOTrQO

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
This media is not supported in your browser
VIEW IN TELEGRAM
Space Invaders from Scratch. Part 3

В этом посте я сделаю игровой цикл с фиксированным временным шагом, добавлю игрока и инопланетян, а также добавлю анимацию спрайтов.

https://nicktasios.nl/posts/space-invaders-from-scratch-part-3.html

Код к этому посту на Github

#cpp

👉 @Bookflow
👍2👌1