Библиотека программиста | программирование, кодинг, разработка
🎮🚀 Saturated Outer Space: как инди-разработчики перезапускают игру и бросают вызов жанровым стереотипам Разработчики S.O.S. рассказывают, как создавать и продвигать инди-игру с нулевым бюджетом и что делать, если не хватает ресурсов продолжать дальше. 👉…
🎮 Внимание, инди-разработчики и создатели небольших игровых проектов! 🔊
У вас есть уникальный опыт, которым вы хотите поделиться? Мы предлагаем вам отличную возможность!
Напишите статью о вашем проекте и процессе разработки:
• Архитектурные решения и паттерны проектирования
• Оптимизация производительности и решение технических проблем
• Использование новых технологий или фреймворков
• Опыт работы с игровыми движками (Unity, Unreal Engine, Godot и др.)
• Реализация сложных игровых механик
• Алгоритмы ИИ и поведение неигровых персонажей
• Сетевой код и решение проблем многопользовательского режима
• Кроссплатформенная разработка и особенности портирования
• Инструменты и методологии для повышения эффективности разработки
• Опыт внедрения процедурной генерации контента
• Решение проблем с управлением памятью и оптимизацией ресурсов
• Интеграция с внешними сервисами и API
• и т. д.
Мы опубликуем её совершенно бесплатно на нашем сайте и в социальных сетях!
Это ваш шанс:
• Поделиться своим опытом с сообществом
• Получить дополнительное освещение вашего проекта
• Внести вклад в развитие индустрии инди-игр
Не упустите эту возможность рассказать свою историю!
📩 Отправьте вашу идею на hello@proglib.io с темой «Статья от инди-разработчика».
У вас есть уникальный опыт, которым вы хотите поделиться? Мы предлагаем вам отличную возможность!
Напишите статью о вашем проекте и процессе разработки:
• Архитектурные решения и паттерны проектирования
• Оптимизация производительности и решение технических проблем
• Использование новых технологий или фреймворков
• Опыт работы с игровыми движками (Unity, Unreal Engine, Godot и др.)
• Реализация сложных игровых механик
• Алгоритмы ИИ и поведение неигровых персонажей
• Сетевой код и решение проблем многопользовательского режима
• Кроссплатформенная разработка и особенности портирования
• Инструменты и методологии для повышения эффективности разработки
• Опыт внедрения процедурной генерации контента
• Решение проблем с управлением памятью и оптимизацией ресурсов
• Интеграция с внешними сервисами и API
• и т. д.
Мы опубликуем её совершенно бесплатно на нашем сайте и в социальных сетях!
Это ваш шанс:
• Поделиться своим опытом с сообществом
• Получить дополнительное освещение вашего проекта
• Внести вклад в развитие индустрии инди-игр
Не упустите эту возможность рассказать свою историю!
📩 Отправьте вашу идею на hello@proglib.io с темой «Статья от инди-разработчика».
🤯⚡ Кто угодно может получать доступ к данным из удалённых форков, удалённых репозиториев и даже приватных репозиториев GitHub. Эти данные доступны всегда. И это не баг, а фича.
Это настолько огромный вектор атак для всех организаций, использующих GitHub, что родился новый термин: Cross Fork Object Reference (CFOR). CFOR возникает, когда форк одного репозитория может получить доступ к требующим защиты данным из другого форка (в том числе и к данным из приватных и удалённых форков).
Аналогично Insecure Direct Object Reference, при CFOR пользователи передают хэши коммитов, чтобы напрямую получать доступ к данным коммитов, которые иначе были бы для них невидимыми.
👉 Подробнее
Это настолько огромный вектор атак для всех организаций, использующих GitHub, что родился новый термин: Cross Fork Object Reference (CFOR). CFOR возникает, когда форк одного репозитория может получить доступ к требующим защиты данным из другого форка (в том числе и к данным из приватных и удалённых форков).
Аналогично Insecure Direct Object Reference, при CFOR пользователи передают хэши коммитов, чтобы напрямую получать доступ к данным коммитов, которые иначе были бы для них невидимыми.
👉 Подробнее
This media is not supported in your browser
VIEW IN TELEGRAM
🛠 PGlite — WASM-сборка Postgres от ElectricSQL. Она упакована в клиентскую библиотеку TypeScript, которая позволяет запускать Postgres в браузере, Node.js и Bun, без необходимости установки каких-либо других зависимостей.
И да, она занимает всего 3 МБ в gzip-архиве и поддерживает множество расширений Postgres, включая pgvector.
Любите автоматизацию и искусственный интеллект? Создайте и опубликуйте базу данных Postgres с помощью ИИ, созданного на основе PGlite компанией Supabase.
👉 Сайт & GitHub
И да, она занимает всего 3 МБ в gzip-архиве и поддерживает множество расширений Postgres, включая pgvector.
Любите автоматизацию и искусственный интеллект? Создайте и опубликуйте базу данных Postgres с помощью ИИ, созданного на основе PGlite компанией Supabase.
👉 Сайт & GitHub
🤖 Напоминаем, что у нас есть еженедельная email-рассылка, посвященная последним новостям и тенденциям в мире искусственного интеллекта.
В ней:
● Новости о прорывных исследованиях в области машинного обучения и нейросетей
● Материалы о применении ИИ в разных сферах
● Статьи об этических аспектах развития технологий
● Подборки лучших онлайн-курсов и лекций по машинному обучению
● Обзоры инструментов и библиотек для разработки нейронных сетей
● Ссылки на репозитории с открытым исходным кодом ИИ-проектов
● Фильмы, сериалы и книги
👉Подписаться👈
В ней:
● Новости о прорывных исследованиях в области машинного обучения и нейросетей
● Материалы о применении ИИ в разных сферах
● Статьи об этических аспектах развития технологий
● Подборки лучших онлайн-курсов и лекций по машинному обучению
● Обзоры инструментов и библиотек для разработки нейронных сетей
● Ссылки на репозитории с открытым исходным кодом ИИ-проектов
● Фильмы, сериалы и книги
👉Подписаться👈
Системы для потоковой обработки данных обеспечивают непрерывный прием, обработку и анализ информации по мере ее поступления. Их главная цель — предоставление аналитических выводов и принятие решений практически в режиме реального времени.
Такие системы используются, к примеру, для мгновенной персонализации рекламы, анализа поведения пользователей и обнаружения мошеннических действий. Требования к системам очень высоки:
• Низкая задержка — максимально быстрая обработка данных с минимальным временем ожидания.
• Высокая пропускная способность — для обработки больших объемов данных.
• Отказоустойчивость — система должна продолжать работу даже при возникновении сбоев.
Для реализации эффективной системы нужно решить множество серьезных проблем, которые возникают на каждом этапе обработки данных:
Прием данных
• Необходимо работать с разными источниками данных, форматами и структурами.
• Надо поддерживать высокую пропускную способность даже при резких всплесках объема данных.
Обработка
• Каждую запись нужно обработать только один раз.
• Надо реализовать работу со сложными сценариями (вычисления с сохранением состояния; обработку событий, поступивших не по порядку; обработку данных, прибывших с задержкой).
• Все это должно выполняться масштабируемо и отказоустойчиво!
Аналитика в реальном времени
Надо обеспечить:
• Быстрые ответы на запросы к свежим данным.
• Непрерывный прием и обработку данных из потоковых источников.
• Сохранение полноты и согласованности данных.
Пока что не существует одного инструмента, способного выполнять все эти действия. Поэтому архитектуры потоковой обработки в реальном времени обычно состоят из нескольких специализированных инструментов от Apache, работающих вместе:
• Kafka отвечает за надежный прием и передачу данных.
• Flink обеспечивает мощную обработку потоков данных.
• Pinot предоставляет возможности для быстрой аналитики.
На основе этих инструментов можно создать комплексное, гибкое и масштабируемое решение, способное справиться со всеми проблемами, связанными с обработкой данных в реальном времени. Подробнее — в этой публикации.
Please open Telegram to view this post
VIEW IN TELEGRAM
🐘🧠 Оптимизация использования памяти в PostgreSQL: секреты профессионалов
Сложные (и многочисленные) операции в базе данных требуют солидного объема оперативной памяти — например, для создания набора результатов PostgreSQL обычно приходится:
🔹 Выполнить поиск по индексу.
🔹 Извлечь связанные строки из одной или нескольких таблиц.
🔹 Объединить, отфильтровать, агрегировать и отсортировать кортежи в пригодный для использования результат.
Каждый из этих шагов требует памяти, и PostgreSQL может обрабатывать тысячи таких запросов одновременно. Так что рано или поздно перед разработчиками любого серьезного проекта встает необходимость решения нескольких сложных вопросов:
🔹 Как грамотно оптимизировать использование доступной памяти?
🔹 В каком соотношении распределить ОЗУ между несколькими типами памяти, которые необходимы PostgreSQL для эффективной работы?
🔹 Как предотвратить защитное завершение операционной системой процесса PostgreSQL, который использует слишком много памяти?
Для ответов на все эти вопросы нужно определить, сколько именно памяти использует PostgreSQL для основных процессов — а это сама по себе нетривиальная задача. Советы по настройке памяти так многочисленны и разнообразны, что в них сложно сориентироваться.
Поэтому в этой статье мы сведем всю мудрость экспертов к конкретным шагам, которые помогут максимально эффективно распорядиться доступной памятью.
🔗 Читать статью
🔗 Зеркало
Сложные (и многочисленные) операции в базе данных требуют солидного объема оперативной памяти — например, для создания набора результатов PostgreSQL обычно приходится:
🔹 Выполнить поиск по индексу.
🔹 Извлечь связанные строки из одной или нескольких таблиц.
🔹 Объединить, отфильтровать, агрегировать и отсортировать кортежи в пригодный для использования результат.
Каждый из этих шагов требует памяти, и PostgreSQL может обрабатывать тысячи таких запросов одновременно. Так что рано или поздно перед разработчиками любого серьезного проекта встает необходимость решения нескольких сложных вопросов:
🔹 Как грамотно оптимизировать использование доступной памяти?
🔹 В каком соотношении распределить ОЗУ между несколькими типами памяти, которые необходимы PostgreSQL для эффективной работы?
🔹 Как предотвратить защитное завершение операционной системой процесса PostgreSQL, который использует слишком много памяти?
Для ответов на все эти вопросы нужно определить, сколько именно памяти использует PostgreSQL для основных процессов — а это сама по себе нетривиальная задача. Советы по настройке памяти так многочисленны и разнообразны, что в них сложно сориентироваться.
Поэтому в этой статье мы сведем всю мудрость экспертов к конкретным шагам, которые помогут максимально эффективно распорядиться доступной памятью.
🔗 Читать статью
🔗 Зеркало
📶 Паттерны коммуникации в распределенных системах
Распределенные системы состоят из многих отдельных частей/узлов, работающих вместе, но физически расположенных в разных местах. Эти части системы должны общаться друг с другом через сеть, чтобы система могла функционировать как единое целое.
Хотя коммуникация критически важна, правильно ее организовать бывает непросто: разработчики иногда пытаются использовать один и тот же подход ко всем задачам коммуникации, что может быть неэффективно. Важно понимать, что существуют разные способы организации коммуникации, и выбор правильного метода зависит от конкретной задачи. Рассмотрим основные паттерны коммуникации, которые можно использовать для решения разных задач.
☑️ Запрос-ответ с HTTP
Этот синхронный паттерн коммуникации предполагает, что один сервис отправляет запрос другому сервису и ожидает ответа или ошибки, блокируя свою работу до получения результата. REST, наиболее популярный архитектурный стиль для этой модели коммуникации, использует методы протокола HTTP — GET, POST, PUT и DELETE.
Однако использование этого паттерна может привести к проблемам, если сервисы образуют цепочку взаимодействий: в таком случае сбой одного из сервисов может привести к отказу всей операции, а также к расточительному использованию ресурсов и каскадным сбоям.
☑️ Общие данные
Этот паттерн часто остается незамеченным, поскольку разработчики не всегда воспринимают его как модель коммуникации. В рамках этого подхода один компонент записывает данные в определенное место, а другой компонент считывает и обрабатывает эти данные. Например, один сервис может загрузить файл в облачное объектное хранилище (например, в корзину Amazon S3), а другой сервис затем извлекает этот файл для дальнейших действий.
Главное преимущество этого паттерна — простота реализации и возможность обеспечения взаимодействия между устаревшими и современными системами без проблем совместимости. Однако он не подходит для сценариев, требующих низкой задержки.
☑️ Асинхронный запрос-ответ
В отличие от синхронного подхода, запрос-ответ может быть реализован асинхронно и без блокировки. В этом случае получающий сервис должен явно знать место назначения для отправки ответа. Для реализации этого паттерна идеально подходят очереди сообщений, которые позволяют буферизовать несколько запросов.
Основная сложность здесь — корреляция между запросом и ответом: экземпляр сервиса, отправивший запрос, может отличаться от экземпляра, получающего ответ, поэтому требуется способ отслеживания запросов.
☑️ Коммуникация на основе событий
В этом подходе сервисы не общаются напрямую друг с другом, а генерируют события, которые могут быть использованы другими сервисами. Это требует наличия места для отправки данных о событиях и механизма, позволяющего получающим сервисам обнаруживать эти события. Брокеры сообщений, такие как RabbitMQ, могут обрабатывать оба этих аспекта. Издатели используют API для отправки событий в брокер, который управляет подписками и уведомляет подписчиков при поступлении события.
Этот паттерн идеально подходит для создания слабосвязанных взаимодействий между сервисами. Однако брокер сообщений должен обеспечивать надежную доставку событий, их упорядочивание и согласованность. Кроме того, добавляется дополнительный компонент в систему.
👨💻 Подробнее читайте в статье.
📨 Материал взят из нашей еженедельной email-рассылки, посвященной бэкенду. Подпишитесь, чтобы быть в числе первых, кто получит дайджест.
Распределенные системы состоят из многих отдельных частей/узлов, работающих вместе, но физически расположенных в разных местах. Эти части системы должны общаться друг с другом через сеть, чтобы система могла функционировать как единое целое.
Хотя коммуникация критически важна, правильно ее организовать бывает непросто: разработчики иногда пытаются использовать один и тот же подход ко всем задачам коммуникации, что может быть неэффективно. Важно понимать, что существуют разные способы организации коммуникации, и выбор правильного метода зависит от конкретной задачи. Рассмотрим основные паттерны коммуникации, которые можно использовать для решения разных задач.
☑️ Запрос-ответ с HTTP
Этот синхронный паттерн коммуникации предполагает, что один сервис отправляет запрос другому сервису и ожидает ответа или ошибки, блокируя свою работу до получения результата. REST, наиболее популярный архитектурный стиль для этой модели коммуникации, использует методы протокола HTTP — GET, POST, PUT и DELETE.
Однако использование этого паттерна может привести к проблемам, если сервисы образуют цепочку взаимодействий: в таком случае сбой одного из сервисов может привести к отказу всей операции, а также к расточительному использованию ресурсов и каскадным сбоям.
☑️ Общие данные
Этот паттерн часто остается незамеченным, поскольку разработчики не всегда воспринимают его как модель коммуникации. В рамках этого подхода один компонент записывает данные в определенное место, а другой компонент считывает и обрабатывает эти данные. Например, один сервис может загрузить файл в облачное объектное хранилище (например, в корзину Amazon S3), а другой сервис затем извлекает этот файл для дальнейших действий.
Главное преимущество этого паттерна — простота реализации и возможность обеспечения взаимодействия между устаревшими и современными системами без проблем совместимости. Однако он не подходит для сценариев, требующих низкой задержки.
☑️ Асинхронный запрос-ответ
В отличие от синхронного подхода, запрос-ответ может быть реализован асинхронно и без блокировки. В этом случае получающий сервис должен явно знать место назначения для отправки ответа. Для реализации этого паттерна идеально подходят очереди сообщений, которые позволяют буферизовать несколько запросов.
Основная сложность здесь — корреляция между запросом и ответом: экземпляр сервиса, отправивший запрос, может отличаться от экземпляра, получающего ответ, поэтому требуется способ отслеживания запросов.
☑️ Коммуникация на основе событий
В этом подходе сервисы не общаются напрямую друг с другом, а генерируют события, которые могут быть использованы другими сервисами. Это требует наличия места для отправки данных о событиях и механизма, позволяющего получающим сервисам обнаруживать эти события. Брокеры сообщений, такие как RabbitMQ, могут обрабатывать оба этих аспекта. Издатели используют API для отправки событий в брокер, который управляет подписками и уведомляет подписчиков при поступлении события.
Этот паттерн идеально подходит для создания слабосвязанных взаимодействий между сервисами. Однако брокер сообщений должен обеспечивать надежную доставку событий, их упорядочивание и согласованность. Кроме того, добавляется дополнительный компонент в систему.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Привет, друзья! 👋
Мы готовим статью на тему: «5 признаков зависимости от программирования». Нам очень важно ваше мнение! Поделитесь своим опытом и советами, и самые интересные из них мы включим в статью.
⌛ Как вы понимаете, что программирование начинает занимать слишком много места в вашей жизни? Какие признаки вы замечаете?
🏄 Какие методы и стратегии вы используете, чтобы сохранить баланс между работой и личной жизнью?
😔 Был ли у вас опыт, когда программирование негативно влияло на ваши отношения с близкими или здоровье? Как вы справились с этим?
Ваши ответы помогут многим! Спасибо за участие!
Мы готовим статью на тему: «5 признаков зависимости от программирования». Нам очень важно ваше мнение! Поделитесь своим опытом и советами, и самые интересные из них мы включим в статью.
⌛ Как вы понимаете, что программирование начинает занимать слишком много места в вашей жизни? Какие признаки вы замечаете?
🏄 Какие методы и стратегии вы используете, чтобы сохранить баланс между работой и личной жизнью?
😔 Был ли у вас опыт, когда программирование негативно влияло на ваши отношения с близкими или здоровье? Как вы справились с этим?
Ваши ответы помогут многим! Спасибо за участие!
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
ad.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
🚀 Топ-5 стратегий кэширования
➡️ Реальное использование:
🔹 Cache Aside + Write Through: обеспечивает согласованную синхронизацию кэша/БД, позволяя при этом осуществлять контроль заполнения кэша во время чтения. Немедленные записи в базу данных могут нагружать БД.
🔹 Read Through + Write Back: абстрагирует БД и хорошо справляется с потоком трафика записи, задерживая синхронизацию. Однако это сопряжено с риском большей потери данных, если кэш выйдет из строя до синхронизации буферизованных записей с базой данных.
👉 Источник
#инфографика
➡️ Реальное использование:
🔹 Cache Aside + Write Through: обеспечивает согласованную синхронизацию кэша/БД, позволяя при этом осуществлять контроль заполнения кэша во время чтения. Немедленные записи в базу данных могут нагружать БД.
🔹 Read Through + Write Back: абстрагирует БД и хорошо справляется с потоком трафика записи, задерживая синхронизацию. Однако это сопряжено с риском большей потери данных, если кэш выйдет из строя до синхронизации буферизованных записей с базой данных.
👉 Источник
#инфографика
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
ad.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты