П
Программирование {BookFlow}
16.07.2026 16:17 · 👁 510
Quake 1/2/3 (1996-1999)
Разработчик: id Software
Издатель: GT Interactive / Activision
Платформа: DOS / Windows / others
Code review: fabiensanglard.net (Quake 1)
Code review: fabiensanglard.net (Quake 3)
Тут писать особо нечего, вы и сами всё знаете. Знатная веха в создании полностью трёхмерных движков, без всяких хаков вроде 2.5D
Упомяну несколько интересных подробностей. Возможно, это первая коммерческая игра, скомпилированная компилятором с открытым исходным кодом (DJGPP for DOS, ранний порт gcc).
В игре был свой скриптовой язык “Quake C” (позже lcc у Quake 3). Он был встроен специально для того, чтобы игроки могли делать модификации. Это, вкупе с системой ресурсов PWAD, породило огромное сообщество моддеров.
В Quake 1 был инновационный механизм кэширования результатов шейдинга. Но после распространения 3D-ускорителей это потеряло смысл. Следующая игра от id, Rage, использовала эту же идею.
Кроме того, Quake был очень надёжным движком. Никаких глюков растра или обсчёта столкновений.
Quake / Исходники: github.com/id-Software/Quake
Quake 2 / Исходники: github.com/id-Software/Quake-2
Quake 3 / Исходники: github.com/id-Software/Quake-III-Arena
♻️ Сделай репост, чтобы помочь другим.
📲 Мы в MAX
👉 @Bookflow
П
Программирование {BookFlow}
16.07.2026 14:02 · 👁 566
🇷🇺 Разбираешься в радиочипах, оптике и связи?
Забери до 1 000 000 рублей за свои инженерные навыки на турнире «Дронкон» 🇷🇺
«Сталинские Соколы» открывают регистрацию на 4-й Всероссийский турнир «Дронкон», который пройдет с 22 по 26 августа.
Турнир пройдет по направлению:
- Инженерное дело: навыки программирования, сборка электронного оборудования, беспроводная связь, оптические системы + стратегия «Битва Дронов»;
Призовой фонд для победителей:
🥇место – 1 000 000 рублей
🥈место – 700 000 рублей
🥉место – 500 000 рублей
Награда за 4-8 места - 100 000 рублей
Пройди заочный онлайн-этап и получи путевку на очный этап турнира в Республику Татарстан!
Перелет, питание, проживание - за счет организаторов.
🇷🇺 Подать заявку и узнать подробности 🇷🇺
П
Программирование {BookFlow}
16.07.2026 05:16 · 👁 554
Шпаргалка по синтаксису CRON
Формат записи:
* * * * * команда
│ │ │ │ │
│ │ │ │ └─ День недели (0–6, где 0 = воскресенье)
│ │ │ └─── Месяц (1–12)
│ │ └───── День месяца (1–31)
│ └─────── Час (0–23)
└───────── Минуты (0–59)
Специальные символы:
* — любое значение (например, каждая минута, каждый день).
, — перечисление (например, 1,15 = 1-е и 15-е число).
- — диапазон (например, 1-5 = с понедельника по пятницу).
/ — шаг (например, */10 = каждые 10 минут).
? — «неважно» (обычно в день месяца или день недели).
Примеры:
0 * * * * → запуск каждый час.
*/30 * * * * → каждые 30 минут.
0 0 * * * → в полночь каждый день.
0 8 * * 1 → каждый понедельник в 8:00.
0 18 15 * * → 15-го числа каждого месяца в 18:00.
Специальные строки:
@reboot → запуск при старте системы.
@hourly → каждый час.
@midnight → каждый день в полночь.
@monthly → каждый месяц в полночь 1-го числа.
♻️ Сделай репост, чтобы помочь другим.
📲 Мы в MAX
👉 @Bookflow
П
Программирование {BookFlow}
14.07.2026 05:09 · 👁 744
Redox - это операционная система, написанная полностью на Rust. Проект вдохновлён принципами Unix, но стремится к более безопасной и современной архитектуре. В Redox используются микроядерный подход, драйверы и сервисы запускаются в пространстве пользователя, что уменьшает поверхность атак и повышает стабильность.
Кроме ядра, экосистема включает файловую систему TFS, собственный дисплейный сервер Orbital и набор утилит. Разработчики делают упор на безопасные абстракции Rust и минимизацию использования небезопасного кода.
https://gitlab.redox-os.org/redox-os/redox
♻️ Сделай репост, чтобы помочь другим.
📲 Мы в MAX
👉 @Bookflow
П
Программирование {BookFlow}
11.07.2026 06:22 · 👁 882
Чтобы разобраться с правами доступа к файлам в Linux, нам нужно понять, что такое Ownership и Permission.
Ownership
Каждому файлу или каталогу присваивается три типа прав собственности:
🔹Owner: Владелец - это пользователь, создавший файл или каталог.
🔹Group (группа): В группе может быть несколько пользователей. Все пользователи в группе имеют одинаковые разрешения на доступ к файлу или каталогу.
🔹Other: Другие - это пользователи, которые не являются владельцами или членами группы.
Permission
Существует только три типа разрешений для файла или каталога:
🔹Read (r): Разрешение на чтение позволяет пользователю читать файл.
🔹Write (w): Разрешение на запись позволяет пользователю изменять содержимое файла.
🔹Execute (x): Разрешение execute позволяет выполнять файл.
♻️ Сделай репост, чтобы помочь другим.
📲 Мы в MAX
👉 @Bookflow
П
Программирование {BookFlow}
10.07.2026 04:14 · 👁 872
Что такое SSO — единый вход?
SSO, или Single Sign-On, — это схема аутентификации, которая позволяет пользователю входить в разные системы с помощью одной учётной записи.
На схеме ниже показано, как работает SSO.
Шаг 1. Пользователь открывает Gmail или другой почтовый сервис. Gmail обнаруживает, что пользователь не авторизован, и перенаправляет его на сервер аутентификации SSO. Сервер также определяет, что пользователь ещё не вошёл в систему, поэтому перенаправляет его на страницу входа SSO, где пользователь вводит свои учётные данные.
Шаги 2–3. Сервер аутентификации SSO проверяет учётные данные, создаёт глобальную пользовательскую сессию и формирует токен.
Шаги 4–7. Gmail отправляет токен на сервер аутентификации SSO для проверки. Сервер регистрирует систему Gmail и возвращает ответ «токен действителен». После этого Gmail предоставляет пользователю доступ к защищённому ресурсу.
Шаг 8. Из Gmail пользователь переходит на другой сайт Google, например YouTube.
Шаги 9–10. YouTube обнаруживает, что пользователь не авторизован, и запрашивает аутентификацию. Сервер SSO определяет, что пользователь уже вошёл в систему, и возвращает токен.
Шаги 11–14. YouTube отправляет токен на сервер аутентификации SSO для проверки. Сервер регистрирует систему YouTube и возвращает ответ «токен действителен». После этого YouTube предоставляет пользователю доступ к защищённому ресурсу.
Процесс завершён: пользователь получает доступ к своему аккаунту без повторного ввода логина и пароля.
Теперь ваша очередь:
Вопрос 1. Реализовывали ли вы SSO в своих проектах? Какая часть оказалась самой сложной?
Вопрос 2. Какой способ входа вам нравится больше всего и почему?
♻️ Сделай репост, чтобы помочь другим.
📲 Мы в MAX
👉 @Bookflow
П
Программирование {BookFlow}
09.07.2026 06:56 · 👁 756
Чем отличаются друг от друга блокировки баз данных?
В управлении базами данных блокировки — это механизмы, которые предотвращают одновременный доступ к данным, обеспечивая их целостность и согласованность.
Основные типы блокировок:
🔴Shared Lock: позволяет нескольким транзакциям одновременно читать ресурс, но не модифицировать его
🔴Exclusive Lock: позволяет транзакции как читать, так и модифицировать ресурс
🔴 Update Lock: используется для предотвращения взаимоблокировки, когда транзакция намеревается обновить ресурс
🔴 Schema Lock: используется для защиты структуры объектов базы данных
🔴 Bulk Update Lock: используется во время массовых вставок
🔴 Key-Range Lock: используется в индексированных данных для предотвращения фантомных чтений
🔴 Row-Level Lock: блокирует конкретную строку в таблице
🔴 Page-Level Lock: блокирует конкретную страницу (фиксированный блок данных) в базе данных
🔴 Table-Level Lock: блокирует всю таблицу
♻️ Сделай репост, чтобы помочь другим.
📲 Мы в MAX
👉 @Bookflow
П
Программирование {BookFlow}
07.07.2026 05:45 · 👁 914
АВК-6: Персональный Аналоговый Компьютер
Итак, перед нами персональный аналоговый компьютер АВК-6.
Аналоговые вычислительные машины в 60-70-е годы были способны в реальном времени решать системы дифференциальных уравнений до 60 порядка и выше, обеспечивая эквивалентное быстродействие в сотни миллионов операций в секунду, в то время пока цифровые ЭВМ только набирали обороты. Советская и зарубежная промышленность активно выпускала большие и малые аналоговые компьютеры и АВК-6 в этой истории — вершина развития настольных аналоговых компьютеров, удостоенная множества наград в СССР и за рубежом.
Я с детства мечтал заполучить АВК-6 и вот наконец могу провести на нем различные эксперименты, попытаться построить аттракторы, а главное — подтвердить миф о том может ли аналоговый компьютер использоваться как синтезатор.
https://habr.com/ru/companies/timeweb/articles/1052834/
♻️ Сделай репост, чтобы помочь другим.
📲 Мы в MAX
👉 @Bookflow
П
Программирование {BookFlow}
06.07.2026 07:53 · 👁 878
Параллелизм против Конкурентности — это не одно и то же
➡️𝐂𝐨𝐧𝐜𝐮𝐫𝐫𝐞𝐧𝐜𝐲 (Конкурентность):
Конкурентность означает, что приложение продвигается сразу по нескольким задачам одновременно.
Хотя одно ядро процессора может выполнять только одну задачу за раз, оно достигает конкурентности за счёт быстрого переключения между задачами.
Пример: Слушать музыку и писать код одновременно. Процессор так быстро переключается между задачами, что создаётся ощущение одновременного выполнения.
Основная цель конкурентности — максимально загрузить CPU, минимизируя время простоя.
➡️𝐏𝐚𝐫𝐚𝐥𝐥𝐞𝐥𝐢𝐬𝐦 (Параллелизм):
Параллелизм означает одновременное выполнение нескольких задач.
Для достижения параллелизма задачи разбиваются на независимые подзадачи и обрабатываются одновременно на нескольких CPU, ядрах или GPU.
Пример: Обучение модели глубокого обучения путём разбиения датасета на батчи и параллельной обработки каждого батча на разных GPU.
Цель параллелизма — увеличение скорости обработки за счёт параллельного выполнения задач.
Они не исключают друг друга:
- Можно иметь конкурентность без параллелизма.
- Можно иметь параллелизм без конкурентности.
- А можно совместить оба подхода для систем с высокой производительностью.
📲 Мы в MAX
👉 @Bookflow
П
Программирование {BookFlow}
30.06.2026 06:31 · 👁 1.1K
🔥 Оптимизация целочисленного деления: Clang vs GCC vs MSVC
Автор блога NukeTheBees решил проверить, как разные компиляторы оптимизируют преобразование 1D-индекса в 3D-координаты сетки. Эта частая задача требует вычисления как частного, так и остатка от деления.
Архитектура x86 позволяет сделать это максимально эффективно - всего двумя инструкциями idiv (она одновременно вычисляет и частное, и остаток, помещая их в разные регистры). Автор протестировал два подхода на C++:
1️⃣ Стандартные операторы / и %
2️⃣ Использование функции std::div
📊 Что показали компиляторы?
🔹 Вариант с операторами (/ и %):
🏆 Clang сгенерировал идеальный код: всего 2 инструкции idiv и никаких лишних обращений к памяти.
🥈 GCC тоже справился за 2 idiv, но зачем-то скинул промежуточные результаты в стек перед возвратом.
❌ MSVC оплошал и выдал избыточную третью инструкцию деления при вычислении y.
🔹 Вариант с std::div (в надежде помочь компилятору):
✅ MSVC резко исправился, заинлайнил вызовы и выдал те самые оптимальные 2 idiv.
❌ Зато Clang и GCC внезапно отказались инлайнить std::div! В итоге они сгенерировали настоящие вызовы функций (call div), что из-за накладных расходов делает этот код медленнее первого варианта.
💡Ни один из подходов на C++ не смог заставить все три компилятора выдать идеальный машинный код. Поэтому для критически важных участков производительности не стоит слепо доверять компилятору - всегда заглядывайте в сгенерированный ассемблер (например, через Compiler Explorer).
🔗 Подробный разбор ассемблерного кода читайте в статье: https://nukethebees.com/int-division-modulo-optimisation-differences-clang-gcc-msvc/
♻️ Сделай репост, чтобы помочь другим.
📲 Мы в MAX
👉 @Bookflow