TGViewer
Channel Public Channel
Программирование {BookFlow}

Программирование {BookFlow}

@bookflow

Мы публикуем лекции и книги по программированию, видеоуроки, доклады с IT конференций, новости технологий.

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

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

РКН https://clck.ru/3KoAbH
Subscribers
15.6K
Photos
1.7K
Videos
514
Links
2.2K

Showing posts older than #4101 · Back to latest

Older Posts 20 shown
Post #4100 2.21K
Большая O-нотация 101: Секрет написания эффективных алгоритмов

📲 Мы в MAX

👉 @Bookflow
  • 👍 4
  • 🔥 2
Post #4099 2.15K
📌3 частых ситуации с Git и как их разрулить


🔁 1. Случайно закоммитил не то и хочу откатиться

Ситуация: сделал коммит, понял, что рано.

Решение:

git reset --soft HEAD~1

✅ Убирает последний коммит, но оставляет изменения в staged — можно поправить и снова закоммитить.



💥 2. Запушил коммит с багом, нужно отменить на сервере

Ситуация: баг ушёл в main, надо быстро отменить.

Решение:

git revert <hash>

✅ Создаёт новый коммит, который отменяет изменения указанного. Без force-push, удобно в команде.



🕵️ 3. Нужно достать файл из старого коммита, но не откатывать всё

Ситуация: удалили/изменили важный файл, а он был раньше.

Решение:

git checkout <commit_hash> -- путь/к/файлу

✅ Извлекает конкретный файл без изменения текущей ветки. Можно сохранить, сравнить, закоммитить.


📌 Все три команды — незаменимые штуки в повседневной работе. Можно сохранить себе как Git-аптечку.

📲 Мы в MAX

👉 @Bookflow
  • 👍 9
  • 🔥 3
Post #4098 2.11K
9 лучших практик разработки микросервисов

При разработке микросервисов рекомендуется придерживаться следующих практик:

1. Используйте отдельное хранилище данных для каждого микросервиса
2. Поддерживайте одинаковый уровень зрелости кода
3. Выполняйте отдельную сборку для каждого микросервиса
4. Назначайте каждому микросервису одну ответственность
5. Разворачивайте микросервисы в контейнерах
6. Проектируйте сервисы без сохранения состояния (stateless)
7. Используйте предметно-ориентированное проектирование (DDD)
8. Проектируйте микрофронтенды
9. Организуйте оркестрацию микросервисов

📲 Мы в MAX

👉 @Bookflow
  • 👍 3
Post #4097 2.27K
Visualgo — это интерактивный учебный ресурс, посвящённый визуализации алгоритмов и структур данных.

📚 Структуры данных:
- Масивы
- Связные списки
- Стеки и очереди
- Деки
- Хеш-таблицы
- Деревья (BST, AVL, красно-черные и др.)
- Кучи
- Графы (в виде списков и матриц смежности)

⚙️ Алгоритмы:
- Сортировки (bubble, merge, quick и др.)
- Поиск (линейный, бинарный)
- Графовые алгоритмы:
- Поиск в ширину (BFS)
- Поиск в глубину (DFS)
- Алгоритмы кратчайшего пути (Dijkstra, Bellman-Ford)
- Алгоритмы остовных деревьев (Prim, Kruskal)

https://visualgo.net/en

📲 Мы в MAX

👉 @Bookflow
  • 🔥 5
  • 👍 2
Post #4096 2.1K
Алиасы (псевдонимы)- это лучший способ сэкономить время и не печатать длинные команды по сто раз в день.

Вы можете добавить их в свой глобальный конфиг Git одной командой:
git config --global alias.имя_алиаса "команда"

Вот подборка самых полезных алиасов, разделенных по назначению:

1. Сокращения для базы

Самые часто используемые команды до одной-двух букв.

• st - быстрый статус:
git config --global alias.st "status -s" (флаг -s делает вывод компактным).
• co - переключение веток:
git config --global alias.co "checkout".
• cm - коммит с сообщением:
git config --global alias.cm "commit -m".
• br - список веток:
git config --global alias.br "branch".

2. Визуализация логов (Красивый граф)

Стандартный git log часто выглядит перегруженным. Этот алиас рисует понятное дерево проекта:

• lg:
git config --global alias.lg "log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all"

3. Работа с изменениями

• unstage - если случайно добавили файл в индекс (git add), этот алиас его «вытащит»:
git config --global alias.unstage "reset HEAD --"
• last - посмотреть детали последнего коммита:
git config --global alias.last "log -1 HEAD --stat"
• amend - если забыли что-то добавить в последний коммит или опечатались в сообщении (без открытия редактора):
git config --global alias.amend "commit --amend --no-edit"

4. Для DevOps и автоматизации

• pur - подтянуть изменения и «перебазировать» свои сверху (чистая история без лишних merge-коммитов):
git config --global alias.pur "pull --rebase"
• ec - быстро открыть конфиг гит для редактирования:
git config --global alias.ec "config --global -e"


Как посмотреть все свои алиасы?

Просто введите:
git config --get-regexp alias


💡Если вы работаете в Linux/macOS, также полезно добавить алиас в ваш шелл (.bashrc или .zshrc), чтобы не писать даже слово git. Например: alias g='git'. Тогда статус можно будет проверить просто командой g st.

📲 Мы в MAX

👉 @Bookflow
  • 👍 5
Post #4095 2.02K
⚡️ Совет по работе с базами данных 💡

Уникальные индексы с исключением определенных строк

Создание уникальных индексов в некоторых случаях невозможно из-за дублирования значений - например, в строках, помеченных как «мягко удаленные» (soft-deleted). Исключив такие строки из индекса, можно корректно настроить ограничение уникальности. В MySQL частичные уникальные индексы (unique partial indexes) требуют эмуляции.


В современных базах данных часто используется паттерн Soft Delete, когда данные не удаляются физически, а помечаются флагом is_deleted = true.

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

Нюанс для MySQL:
В отличие от PostgreSQL или SQL Server, MySQL не поддерживает синтаксис WHERE внутри команды CREATE INDEX. Чтобы добиться такого же поведения, разработчики обычно используют:

• Виртуальные колонки (Generated Columns): создается колонка, которая принимает значение только если запись активна, и на нее вешается уникальный индекс.
• Составные индексы: включение флага удаления или временной метки в сам индекс.

📲 Мы в MAX

👉 @Bookflow
  • 👍 6
  • ❤ 2
Post #4094 1.94K
🐳 Как на самом деле работает Docker? Взгляд изнутри

Мы привыкли писать в терминале docker run и магия происходит сама собой. Но что стоит за этими командами? Давайте разберем архитектуру Docker на одной наглядной схеме.

Все держится на трех китах:

1️⃣ Docker Client - это ваш терминал. Вы отдаете приказы (build, pull, run), а клиент передает их главному исполнителю.

2️⃣ Docker Host - «мозги» и «мускулы» системы. Здесь живет Daemon, который слушает команды клиента и управляет объектами:

🔴Images (Образы): Чертежи или слепки ваших приложений (MySQL, Nginx, Ubuntu).
🔴Containers (Контейнеры): Запущенные версии этих образов (живые процессы).

3️⃣ Docker Registry - склад (например, Docker Hub). Здесь хранятся образы, доступные всему миру или вашей команде.

🎨 Что значат стрелки на схеме?

🔹 Build (Синяя): Клиент командует собрать образ из Dockerfile. Демон создает его на хосте.
🔸 Push (Оранжевая): Готовый образ отправляется с хоста в реестр (в облако).
💖 Pull (Розовая): Нужно скачать образ? Демон тянет его из реестра к себе на хост.
💚 Run (Зеленая): Самая частая команда. Демон берет локальный образ и разворачивает из него рабочий контейнер.

📌 Сохраняй шпаргалку в «Избранное», чтобы не путаться в потоках данных!

#docker #devops #шпаргалка #обучение

📲 Мы в MAX

👉 @Bookflow
  • 👍 5
  • ❤ 1
Post #4093 2.12K
С++ фреймворк для описания пайплайнов распределенных вычислений

Огромное количество С++ кода в Яндексе можно описать словами «распределенные вычисления». Доклад посвящен активно разрабатываемому сейчас С++ фреймворку, вдохновленному библиотеками std::ranges и Apache Beam. Этот фреймворк позволяет достаточно компактно и просто описывать такие процессы и запускать их в MapReduce-режиме для обработки таблиц данных или в real-time режиме для обработки бесконечных потоков (очередей) данных.

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

источник

📲 Мы в MAX

👉 @Bookflow
  • 👍 5
Post #4092 2.59K
🖥 Пишем свою операционную систему с нуля. Серьезно.

Многим кажется, что создание ОС это черная магия, доступная только избранным инженерам из Microsoft или создателям Linux. Но на самом деле, разобраться в том, как "железо" оживает после нажатия кнопки питания, может каждый разработчик.

На GitHub лежит легендарный репозиторий os-tutorial, который буквально за руку проведет вас от пустого файла до работающего ядра.

Это не теоретический учебник на 1000 страниц. Это набор последовательных шагов (от 01 до конца), где каждый новый урок наслаивается на предыдущий. Вы начинаете с того, что учите компьютер выводить "Hello World" без всякой ОС, и заканчиваете написанием простейшей файловой системы.

Что вы изучите на практике:

🔴Boot sector: Как работает загрузочный сектор и почему в нем всего 512 байт.
🔴Assembly: Основы ассемблера x86 (без боли, только необходимое).
🔴Режимы процессора: Переход из 16-битного Real Mode в 32-битный Protected Mode.
🔴C Kernel: Как запустить C-код на "голом" железе.
🔴Драйверы: Написание простых драйверов для экрана и клавиатуры.

💡 Главная фишка: Автор объясняет почему мы делаем то или иное действие, а не просто дает код для копирования. Это идеальный способ понять, как работает компьютер "под капотом".

Для старта не нужны глубокие знания, только Linux (или WSL), QEMU и желание разобраться.

🔗 Ссылка на репозиторий: https://github.com/cfenollosa/os-tutorial

#github #os #lowlevel #assembly #cpp #tutorial

📲 Мы в MAX

👉 @Bookflow
  • 🔥 10
  • 👍 3
  • ❤ 2
  • 🤣 1
Post #4091 2.17K
Стив Джобс полная биография и история успеха

Это видео представляет собой подробный биографический обзор, посвященный жизни и профессиональным достижениям Стива Джобса.

В видео освещаются ключевые этапы его пути: от рождения в Сан-Франциско и воспитания в приемной семье до создания таких технологических гигантов, как Apple и Pixar. Особое внимание уделяется истории разработки революционных продуктов, включая Macintosh, iPod и iPhone, которые изменили индустрию персональной электроники.

Так же мы расскажем про личную жизнь предпринимателя, его кратковременный уход из Apple в NeXT и триумфальное возвращение в компанию. Завершается обзор описанием его наследия, многочисленных наград и мирового признания после смерти в 2011 году. Это комплексное описание позволяет понять вклад Джобса в современную культуру и мировую экономику.

📺 Смотреть на youtube

📲 Мы в MAX

👉 @Bookflow
  • 🔥 4
  • 🤣 2
Post #4090 2.15K
Сборка C++ проектов. Оптимизации компилятора. Inline, constexpr, alignment. Game Engine серии

0:00:00 - Введение
0:02:26 - Дизассемблер
0:09:31 - Общие оптимизации
0:20:46 - Inline
0:35:24 - Constexpr
0:45:28 - Compile-time raytracer
0:52:40 - Internal vs. external linkage
0:55:18 - Выравнивание структур
1:06:46 - Pragma optimize

источник

📲 Мы в MAX

👉 @Bookflow
  • 👍 5
Post #4089 2.44K
Как выполняются SQL-запросы 👨‍💻

Порядок выполнения SQL-запроса определяет последовательность выполнения различных частей запроса SQL. Этот порядок важен, потому что он определяет, как данные фильтруются, группируются и упорядочиваются.

Вот упрощённое объяснение порядка выполнения SQL:

🔴FROM / JOIN - оператор FROM указывает таблицы, из которых будут извлечены данные. JOIN может использоваться для объединения данных из нескольких таблиц.
🔴WHERE - оператор WHERE используется для фильтрации данных по заданным условиям.
🔴GROUP BY - оператор GROUP BY группирует данные по одной или нескольким колонкам.
🔴HAVING - оператор HAVING фильтрует уже сгруппированные данные по условиям.
🔴SELECT - оператор SELECT определяет столбцы, которые будут возвращены в результат.
🔴DISTINCT - ключевое слово DISTINCT используется для возврата только уникальных строк.
🔴ORDER BY - оператор ORDER BY сортирует результаты по возрастанию или убыванию.
🔴LIMIT - оператор LIMIT ограничивает количество возвращаемых строк.

📲 Мы в MAX

👉 @Bookflow
  • 👍 9
  • 🔥 4
  • ❤ 1
Post #4088 2.29K
🔌 API против SDK: В чем реальная разница?

Мы часто слышим эти аббревиатуры вместе, но это не одно и то же. Давайте разберем шпаргалку с картинки.

1️⃣ API (Application Programming Interface)
На картинке сверху.
Это «мессенджер». Набор правил, по которым одна программа может попросить что-то у другой.

🔴Задача: Обеспечить общение (To Communicate).
🔴Как это работает: Вы отправляете запрос (Request) на конкретный адрес (Endpoint) с определенными параметрами. Сервер отвечает (Response) данными (обычно JSON) или кодом ошибки.
🔴Пример: Ваше приложение доставки еды «стучится» в Google Maps API, чтобы просто показать точку на карте. Оно не строит карту само, оно просит её у Google.

2️⃣ SDK (Software Development Kit)
На картинке снизу.
Это «ящик с инструментами». Полноценный комплект для создания приложений под конкретную платформу (Android, iOS, Windows).

🔴Задача: Дать инструменты для стройки (Tool Box to Build Apps).
🔴Что внутри: SDK - это «старший брат». Он гораздо больше и обычно включает в себя API, а также библиотеки кода, документацию, дебаггеры и примеры.
🔴Пример: Чтобы написать приложение под Android на Kotlin, вам нужен Android SDK. Вы берете этот чемоданчик, достаете оттуда готовые кнопки, окна и инструменты для вызова API.

💡 Главное отличие в одной фразе:
API - это интерфейс для взаимодействия с сервисом (как меню в ресторане), а SDK - это набор инструментов для создания чего-то нового (как полностью оборудованная кухня).

#dev #api #sdk #learning #coding #architecture

📲 Мы в MAX

👉 @Bookflow
  • 👍 9
  • 🔥 5
  • ❤ 1
Post #4087 2.29K
Анатомия Kubernetes - как это работает изнутри? ☸️

Часто мы используем kubectl, не задумываясь, что происходит «под капотом». На этой схеме отлично разложено устройство кластера Kubernetes. Давайте разберем три главных уровня архитектуры.

1. Control Plane (Панель управления) - «Мозг» кластера 🧠

Это центр принятия решений. Именно здесь определяется, что и где должно работать.

🔴API Server (в центре): Единая точка входа. Все компоненты общаются только через него (и вы через CLI тоже). Примечание: на схеме иконка подписана как Kube-Scheduler, но функционально и визуально (надпись API) это именно API Server.
🔴etcd: «Память» кластера. Надежное хранилище типа «ключ-значение», где лежит вся конфигурация и текущее состояние системы.
🔴Kube-Scheduler: Логист. Решает, на какую именно ноду (узле) запустить новый Pod, исходя из свободных ресурсов.
🔴Controller Manager: Смотритель. Следит, чтобы текущее состояние кластера совпадало с желаемым (например, если упал под - он его перезапустит).
🔴Cloud-Controller Manager: Связной с облаком. Управляет ресурсами, специфичными для облачного провайдера (AWS, Azure, GCP).


2. Worker Nodes (Рабочие узлы) - «Мускулы» кластера 💪

Здесь крутятся ваши приложения.

🔴Pod (Под): Минимальная единица в K8s. Внутри пода живет один или несколько контейнеров.
🔴Container Runtime (Docker): Движок, который фактически запускает контейнеры.
🔴Kubelet: Главный агент на узле. Получает задачи от Control Plane и гарантирует, что контейнеры в поде запущены и работают.
🔴Kube-Proxy: Сетевой регулировщик. Отвечает за сетевые правила и проброс трафика к подам.


3. Kubernetes Extensions - Инструменты 🛠

То, с чем взаимодействуем мы или системы мониторинга:

🔴CLI: Консольная утилита (kubectl).
🔴Web Admin UI: Дашборд для визуального управления.
🔴DNS: Для обнаружения сервисов внутри кластера.
🔴Monitoring: Сбор метрик ресурсов.

💡Control Plane командует, Worker Nodes исполняют, а Extensions помогают нам этим управлять.

Сохраняй шпаргалку, чтобы не путаться в компонентах! 👇

#devops #kubernetes #k8s #architecture #docker


📲 Мы в MAX

👉 @Bookflow
  • 👍 6
Post #4085 2.31K
Прошиваем программу не только в начало FLASH памяти STM32

Знаете ли вы куда попадает ваша программа после того, как вы нажали кнопку RUN или DEBUG в IDE? Если да, то как изменить этот адрес или даже выйти за пределы постоянной памяти и прожигаться сразу в оперативную память.

Я работаю в CubeIDE и весь мой интерфейс будет именно из этой среды разработки.

Начнем с ответа на первый вопрос, если использовать стандартные настройки IDE и взять стандартный ST-LINK (не важно оригинал или свисток), то при прожигании микроконтроллера будет очищено нужное количество секторов во FLASH памяти и на их место будет записана программа, причем в самое начало FLASH памяти по адресу 0x08000000.

Тут немного остановимся. Для большинства проектов этого достаточно, программа находится во FLASH памяти, при перезагрузке микроконтроллера ни куда не исчезает и исправно запускается. Проблемы начинаются, когда приходит задача, встроить загрузчик, который будет самостоятельно принимать прошивку по одному из интерфейсов, будь то UART/USART, I2C или CAN и сохранять ее в требуемом месте FLASH памяти, а после перезагрузки должен самостоятельно подготовить и передать управление требуемой программе.

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

📲 Мы в MAX

👉 @Bookflow
  • 👍 4
Post #4084 2.44K
Плывущий экран. Вирус на C++. Melting Screen

Программа предоставлена в образовательных целях! Автор не несёт ответственности за её использование!
В этом видео вы узнаете как написать вирус на с++ который заставляет экран сыпаться и плыть.

источник

📲 Мы в MAX

👉 @Bookflow
  • 👍 2
Post #4083 2.4K
Как выполнять периодические обновления данных в PostgreSQL?

Для выполнения периодических обновлений данных в PostgreSQL можно использовать несколько подходов, в зависимости от требований к частоте обновлений и архитектуры системы. Вот основные методы:


1. CRON и SQL скрипты
- CRON (или аналогичный планировщик задач) — это системный планировщик задач, который может запускать SQL-скрипты в определенное время или с определенной периодичностью.
- Вы создаете SQL-скрипт, который выполняет необходимые обновления данных, и настраиваете CRON для его запуска.
- Пример команды в CRON:

* * * * * psql -U user -d database -c "CALL your_update_function();"

Этот пример выполняет задачу каждую минуту.

2. pg_cron
- pg_cron — это расширение для PostgreSQL, которое позволяет планировать задания непосредственно из базы данных, используя SQL-синтаксис для задания расписания.
- Пример:

SELECT cron.schedule('0 * * * *', $$CALL your_update_function();$$);

Это задание выполняет функцию каждый час.

3. pgAgent
- pgAgent — это более сложный планировщик задач, который интегрируется с PostgreSQL. Он позволяет создавать и управлять заданиями через интерфейс PgAdmin или SQL-команды.
- Пример задания:

CREATE JOB update_job
STEP 1
WHEN '0 * * * *'
EXECUTE PROCEDURE your_update_function();


4. Встроенные средства PostgreSQL
- Если задача достаточно простая, и вы хотите обойтись без внешних инструментов, можно использовать механизм LISTEN/NOTIFY или bgworker (бэкграундные воркеры).
- LISTEN/NOTIFY: используется для уведомления процессов о событиях в базе данных. Рабочие процессы могут запускаться при получении уведомления.
- bgworker: позволяет создавать фоновый процесс, который будет периодически выполнять необходимые задачи.

5. Сервисные задачи на стороне приложения
- Если ваше приложение подключается к базе данных PostgreSQL, оно может содержать задачи, которые будут запускать обновления данных через определенные промежутки времени.
- Это подход особенно удобен, если вы хотите, чтобы приложение контролировало выполнение обновлений, а также легко интегрировало бизнес-логику.

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

7. Materialized Views
- Если вам нужно обновлять агрегированные или сложные запросы, можно использовать материализованные представления с автоматическим обновлением.
- Вы можете создать материализованное представление и настроить его автоматическое обновление через CRON или pg_cron:

REFRESH MATERIALIZED VIEW CONCURRENTLY your_view;


Заключение
Выбор метода зависит от конкретных требований и доступных инструментов. Если вам нужно периодически выполнять задачи непосредственно в базе данных и с минимальными усилиями, pg_cron и pgAgent — отличные варианты. Если хотите контролировать задачи с уровня операционной системы, то CRON или системные задачи на стороне приложения будут лучшим решением.

📲 Мы в MAX

👉 @Bookflow
  • ❤ 2
  • 👍 2
Post #4082 2.38K
FTXUI

Простая кроссплатформенная библиотека C++ для пользовательских интерфейсов на базе терминала!

• Функциональный стиль
• Простой и элегантный синтаксис
• Создаваемые консольные UI поддерживают навигацию с помощью клавиатуры и мыши
• Поддержка UTF8
• Поддержка анимации
• Поддержка рисования
• Нет зависимостей
• Кроссплатформенность: Linux/MacOS, WebAssembly, Windows

https://github.com/ArthurSonzogni/FTXUI

📲 Мы в MAX

👉 @Bookflow
  • 👍 4
  • 🔥 1
Post #4081 2.48K
💡7 обязательных стратегий для масштабирования вашей базы данных.

1 - Индексация:
Проверьте шаблоны запросов вашего приложения и создайте подходящие индексы.

2 - Материализованные представления:
Предварительно вычислите результаты сложных запросов и сохраните их для быстрого доступа.

3 - Денормализация:
Уменьшите количество сложных соединений (join), чтобы улучшить производительность запросов.

4 - Вертикальное масштабирование:
Увеличьте мощность вашего сервера базы данных, добавив больше ЦП, оперативной памяти или хранилища.

5 - Кэширование:
Сохраните часто запрашиваемые данные в более быстром слое хранения, чтобы снизить нагрузку на базу данных.

6 - Репликация:
Создайте реплики вашей основной базы данных на разных серверах для масштабирования чтений.

7 - Шардинг:
Разделите таблицы базы данных на более мелкие части и распределите их по серверам. Используется для масштабирования как записей, так и чтений.

📲 Мы в MAX

👉 @Bookflow
  • 👍 4
  • 🔥 2
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →