Mad Devs Channel
1.6K subscribers
664 photos
30 videos
1 file
867 links
Канал Mad Devs.🤘Здесь мы рассказываем о жизни компании и инсайтах. Делимся знаниями и лайфхаками IT-индустрии.
Download Telegram
Готовы узнать решение задачи, которой мы делились?

Для начала создайте коллекцию строк для хранения необходимых операций. Данная коллекция может быть реализована через vector строк в C++ или List строк в Java. После добавьте операции в эту коллекцию, а затем создайте коллекцию таких коллекций. В которой будут храниться несколько методов (наборов строковых операций).

Для проверки наследования от DP[i][j] используйте Else-if. После чего проверьте все условия, чтобы убедиться, что существуют более одного способа получить элемент коллекции.

Если есть, то вы можете создать новую коллекцию из предыдущей, удалите последнюю операцию, добавьте новую операцию и запустите функцию с новым списком. Таким образом вы сможете создавать новый список каждый раз, когда обнаружится новый способ преобразования, получая каждый раз новый метод.

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

Вам удалось найти решение? Расскажите в комментариях, что у вас получилось 👇
🔥2🤔1
Асинхронные запросы с AbortController

Управление асинхронными запросами крайне важно для того, чтобы обеспечить эффективность работы систем.

AbortController — это класс в JavaScript, позволяющий отменять один или несколько запросов. Это достигается с помощью сигналов, которые генерируются экземпляром AbortController и передаются в функции, поддерживающие отмену, как Fetch, Promise, setTimout, setInterval и fs.

Достоинства AbortController

🔹Безопасность. Использование AbortController позволяет отказаться от сложных и потенциально ненадежных методов для отмены асинхронных запросов.

🔹Эффективность. AbortController предоставляет возможность отмены запросов в любой момент времени, что предотвращает ненужное выполнение и ожидание.

🔹Гибкость. AbortController может быть использован с различными асинхронными API, предоставляя единый интерфейс для отмены запросов.

Какие проблемы решает AbortController?

🔹Неэффективность. Долгие асинхронные запросы без возможности отмены могут продолжать выполняться, даже когда их результаты больше не нужны.

🔹Сложность управления. Без AbortController, управление отменой операций может стать сложным и запутанным, особенно при использовании внешних библиотек или кастомных решений.

Ключевые функции AbortController

🔹Fetch запросы. AbortController позволяет отменять Fetch запросы. Просто создайте экземпляр AbortController, передайте его сигнал в опции Fetch запроса, и при необходимости вызовите метод abort() для отмены запроса.

🔹Promise. AbortController также может быть использован для отмены операций, возвращаемых в виде промисов. Для этого добавьте AbortController к промису и вызовите метод abort(), чтобы отменить операцию. Внутри промиса проверяйте состояние signal.aborted и, если оно true, завершайте промис.

🔹setTimeout и setInterval. Эти функции могут быть обернуты таким образом, чтобы поддерживать AbortController. При вызове abort(), вы отмените соответствующий таймер.

Какие особенности использования AbortController?

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

🔹Одноразовое использование. AbortController не может быть повторно использован после вызова метода abort(), поскольку сигнал становится "отмененным" и остается в этом состоянии и при повторном использовании экземпляра AbortController могут возникнуть проблемы. Поэтому, если вам нужно повторно использовать отмену, вам нужно создать новый экземпляр AbortController.

А насколько полезным находите AbortController вы? Поделитесь вашим опытом в комментариях!
👍5
Такое явление как asService не теряет свою популярность, и их различные разновидности продолжают активно развиваться, во многом избавляя многие бизнесы от необходимости разработки собственных решений.

Сегодня поговорим об одном из них, а именно ServiceNow.

ServiceNow - это платформа, которая объединяет различные функции и процессы бизнеса, автоматизирует бизнес-процессы, управляет сервисами и ИТ-инфраструктурой, интегрируется с другими системами и обеспечивает гибкость и масштабируемость для компаний.

Ключевые возможности.

🔹Автоматизация бизнес-процессов. С помощью ServiceNow компании могут автоматизировать свои бизнес-процессы, устранить рутинные и повторяющиеся задачи, оптимизировать рабочие процессы и улучшить операционную эффективность.

🔹Управление ИТ-инфраструктурой. ServiceNow предоставляет возможности управления ИТ-инфраструктурой, включая управление инцидентами, управление изменениями, управление конфигурацией и другие. Это помогает ИТ-отделам эффективно контролировать и поддерживать свою инфраструктуру и улучшать качество обслуживания.

🔹Интеграция с другими системами. ServiceNow предлагает набор API и инструменты для интеграции с другими системами, такими как CRM, ERP и др., которые компания уже использует. Это обеспечивает согласованность данных, повышает эффективность работы и устраняет необходимость в ручном вводе информации в разные системы.

🔹Платформа как сервис. ServiceNow базируется на модели "платформа как сервис" (PaaS), что позволяет компаниям быстро разрабатывать и внедрять новые приложения, а также легко масштабировать их при необходимости.

Однако, невозможно не упомянуть ограничения, если использовать готовые ServiceNow решения.

🔹ServiceNow предлагает широкий набор функций и приложений, однако некоторые компании могут столкнуться с ограничениями в настраиваемости и гибкости платформы.

🔹Использование ServiceNow связано с зависимостью от провайдера услуг, поскольку платформа предоставляется как облачное решение или услуга. Это означает, что компании полностью полагаются на надежность, безопасность и доступность услуги от провайдера.

А что вы думаете о еще одном asService? Поделитесь с нами в комментариях!
👍3
RociFi и Mad Devs покоряют новые вершины! ⚡️

Проект RociFi, над которым работала наша команда, был выбран в программу MasterCard Start Path!

Start Path - это программа по привлечению стартапов. Она включает в себя несколько направлений: привлечение капитала, подключение к широкой экосистеме платежей, создание более инклюзивной экономики и многое другое.

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

RociFi - это сетевой скоринг и протокол кредитования с высокой капиталоемкостью для Polygon и zkSync. Подробнее о том, как мы работали над проектом, вы можете узнать на нашем сайте.
7🔥2
CORS

CORS (Cross-Origin Resource Sharing) - важный механизм, который позволяет веб-браузерам запрашивать ресурсы с сервера, находящегося на другом источнике (домене, протоколе или порту), отличном от того, с которого был исходный запрос.

Это совершенно необходимо для поддержания высокого уровня безопасности в веб-приложениях и в то же время обеспечения возможности обмена данными между различными источниками.

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

Однако по умолчанию браузеры блокируют такие кросс-доменные запросы в соответствии с политикой одного источника (Same-Origin Policy), которая предотвращает возможность межсайтовой атаки (Cross-Site Request Forgery, CSRF).

Как работает CORS?

🔹Предварительный запрос. Перед отправкой основного запроса, браузер отправляет предварительный запрос на сервер с использованием метода HTTP OPTIONS. Этот запрос содержит заголовки, такие как Origin (содержащий источник запроса) и Access-Control-Request-Method (содержащий HTTP метод, который будет использоваться в основном запросе), чтобы указать серверу, какой именно запрос он планирует сделать.

🔹Ответ сервера. Сервер затем отвечает на этот предварительный запрос, отправляя свои заголовки CORS в ответ. Это может включать в себя такие заголовки как Access-Control-Allow-Origin (указывает источники, которым разрешено делать кросс-доменные запросы), Access-Control-Allow-Methods (указывает, какие HTTP методы разрешены) и Access-Control-Allow-Headers (указывает, какие HTTP заголовки разрешены).

🔹Основной запрос. Если сервер поддерживает CORS и разрешает исходный запрос, браузер затем отправляет основной запрос к серверу. Если нет, браузер блокирует запрос и выдает ошибку CORS.

Конечно, тема CORS намного более обширная, и если вам интересны более углубленный разбор и примеры настроек CORS для конкретных случаев - дайте знать в комментариях!
👍9🔥2
Наверное, все так или иначе задумывались, смогли бы работать в Google. Давайте проверим, прошли бы вы собеседование? 🤔

Итак, решите классическую задачу с собеседования в комментариях:⬇️

Есть порядок чисел – 10, 9, 60, 90, 70, 66
Какое число следующее?
🤔13
Mad Devs Channel
Наверное, все так или иначе задумывались, смогли бы работать в Google. Давайте проверим, прошли бы вы собеседование? 🤔 Итак, решите классическую задачу с собеседования в комментариях:⬇️ Есть порядок чисел – 10, 9, 60, 90, 70, 66 Какое число следующее?
Разгадка – здесь необходимо не использовать математику.

Если вы произнесете числа на английском языке, вы заметите, что они расположены в порядке возрастания количества букв, необходимых для записи каждого числа.

Например, число 10 - не единственное число, содержащее три буквы. На его месте могли быть числа 1, 2 и 6 (one, two и six). Аналогично, число 9 может быть заменено числами 0, 4 и 5 (zero, four и five). Следовательно, в список включены самые большие числа, которые можно записать словами с определенным количеством букв.

Какое число является правильным ответом? Следующее число после 66 должно содержать девять букв (не считая дефиса) и быть самым большим в своей категории. Если хорошенько поразмышлять, то можно установить, что ответ - 96 (ninety-six). Потому что числа, превышающие 100, не подходят, поскольку для написания "one hundred" требуется десять букв.

Вы можете задать вопрос, почему на месте 70 не стоит "hundred" или "million" или "billion", которые также содержат семь букв для записи? Скорее всего, это связано с тем, что на правильном английском языке не говорят "сто", а "одна сотня", что же касается двух других случаев.

Правильный ответ не совсем очевиден. Google считает ответ 96 приемлемым, но не самым идеальным.

Существует число, которое больше: "one googol" (десять в степени ста). Это число записывается с помощью девяти букв. Однако даже это не самый лучший вариант.

Идеальный ответ: "ten googol", что означает десять в степени ста.
👍4🤔2
Как построить современную архитектуру стартапа

В современном, быстро меняющемся, мире стартапы должны уметь быстро адаптироваться к изменениям. Вот почему так важно иметь надежную архитектуру. Она поможет вашему стартапу быть масштабируемым, надежным и безопасным.

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

Сегодня мы обсудим некоторые из самых популярных архитектурных шаблонов для стартапов.

Монолитная архитектура
Самый простой и распространенный тип. В монолитной архитектуре весь код вашего приложения содержится в одном модуле. Это упрощает разработку и обслуживание, но также может затруднить масштабирование и обслуживание.

Архитектура микросервисов
Более сложный тип архитектуры, но она предлагает ряд преимуществ по сравнению с предыдущей. В архитектуре микросервисов код вашего приложения разделен на небольшие независимые блоки, называемые микросервисами. Каждый микросервис отвечает за определенную задачу, и они могут взаимодействовать друг с другом через четко определенные API.

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

Выбор правильной архитектуры
Лучший способ выбрать правильную архитектуру для вашего стартапа — это учесть ваши конкретные нужды и требования.
📍 Если у вас небольшая команда с простым приложением, то монолитная архитектура может быть хорошим выбором.
📍 Если у вас большая команда со сложным приложением, лучше выбрать архитектуру микросервисов.
📍 Если вы ищете простую и удобную в обслуживании архитектуру, то бессерверная архитектура может быть хорошим вариантом.

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

Ведь в остальные области ИИ проникает медленнее, а в тестировании он уже чувствует себя хорошо.

Какие задачи в тестировании ИИ помогает выполнять уже сейчас?

🔹Регрессионное тестирование, автоматизируя анализ кода на изменения и выявляя потенциальные проблемы.

🔹Генерация тестовых кейсов, на основе требований и спецификаций, сокращая необходимые при ручном создании время и усилия.

🔹Анализ данных, выявляя неочевидные шаблоны, указывающие на потенциальные проблемы.

🔹Тестирование производительности, моделирования сценарии реального мира и тестирования приложения в различных условиях.

🔹Тестирование безопасности, выявляя потенциальные уязвимости безопасности, упущенные при ручном тестировании.

🔹Тестирование пользовательского опыта, анализируя поведение и отзывы, чтобы выявлять проблемы и предлагать улучшения.

🔹Предиктивный анализ, прогнозируя потенциальные проблемы или дефекты до их реального возникновения.

Но ключевое слово здесь помогать. Не забывайте, что есть набор навыков, бесценных при любом уровне автоматизации!

Продуктивная коммуникация
Критическое мышление
Эмоциональный интеллект
Нестандартные знания предметной области
И креативный подход к решению проблем.

Развивайте эти навыки, и точно останетесь востребованным при любых обстоятельствах!
👍7
Тренды веб-разработки в 2023

📌 (Мета) фреймворки

Одностраничные приложения (SPAs) и соответствующие фреймворки (React.js, Vue.js, Svelte.js) пережили свои пики популярности и теперь наблюдается тренд перехода от CSR к SSR. Next.js, основанный на React.js, является популярным мета-фреймворком, но есть и альтернативы, такие как Remix. Другие фреймворки, включая SvelteKit и SolidStart, также заслуживают внимания.

📌Utility-first CSS

Tailwind CSS, утилитарный CSS-фреймворк, вызывает различные оценки среди разработчиков. Одним не нравится его громоздкость в коде пользовательского интерфейса, другие высоко оценивают его удобство для разработчиков. Однако с ростом важности SSR, CSS-in-JS решения, такие как Styled Components и Emotion, сталкиваются с проблемами из-за увеличения размера пакета и накладных расходов во время выполнения. В результате разработчики ищут альтернативы, дружественные к SSR, такие как CSS-фреймворки с предустановленными компонентами пользовательского интерфейса, CSS-модули или новые варианты CSS-in-JS с нулевым временем выполнения/компиляции.

📌E2E безопасность

Для фулл стак приложений обеспечение безопасности типов во всем стеке имеет решающее значение. REST и GraphQL были популярными вариантами взаимодействия клиент-сервер, но восходящая звезда под названием tRPC предлагает альтернативу с безопасностью типов. С помощью таких инструментов, как OpenAPI и GraphQL Code Generator, можно создавать типовые схемы для внешнего интерфейса.

📌Инструменты

Create-react-app (CRA) произвел революцию в разработке React, предоставив готовый стартовый проект без необходимости сложных конфигураций Webpack. Однако Webpack устарел, что привело к появлению Vite. Vite, разработанный Эваном Ю (создателем Vue.js), представляет собой следующее поколение фронтенд-инструментов для одностраничных приложений (SPA). Работающий на esbuild, бандлере на базе Go, Vite обеспечивает значительно более быструю упаковку зависимостей по сравнению с Webpack.
Экосистема Vite расширяется за счет таких дополнений, как Vitest, альтернативное решение для тестирования Jest.

📌Разработка с ИИ

Разработка с использованием ИИ набирает обороты, благодаря появлению таких инструментов, как GitHub Copilot и ChatGPT от OpenAI.
GitHub Copilot, выпущенный в 2022 году, объединяет разработчиков с ИИ в предпочитаемом IDE. Он помогает разработчикам, автоматически дорабатывая код на основе их ввода или комментариев о желаемой функциональности.
ChatGPT, более общая языковая модель, также справляется с задачами программирования. Разработчики начали использовать ChatGPT в качестве замены таких платформ, как StackOverflow. Хотя ChatGPT может давать полезные ответы, он не всегда выдает безупречные результаты. Возможность обучения ChatGPT на собственном сгенерированном контенте вызывает опасения по поводу качества и надежности информации в будущем.

Делитесь в комментариях, что вы используете при веб-разработке?
👍4
Как браузеры рендерят страницы?

Все мы знаем, что HTML задает структуру, а CSS задает стили. Но как браузер реально отрисовывает страницу на экране?

Давайте немного разберёмся в основных элементах и их взаимодействии.

DOM (Document Object Model) представляет структуру веб-страницы в виде иерархического дерева объектов. Когда браузер читает HTML-код, он создает объекты JavaScript, называемые узлами (Nodes), для каждого HTML-элемента, таких, как html, body, div и т. д. Узлы содержат информацию о типе элемента, его атрибутах и дочерних элементах. DOM позволяет программам и скриптам взаимодействовать с элементами страницы, изменять их свойства, добавлять или удалять элементы.

CSSOM (CSS Object Model) представляет собой дерево объектов, которое определяет стили элементов веб-страницы. С помощью CSS-селекторов мы можем ориентироваться на элементы DOM и задавать значения для свойств стилей, таких как color (цвет) или font-size (размер шрифта). CSSOM содержит информацию о стилях, примененных к каждому элементу, и позволяет программам и скриптам изменять стили элементов.

Render-Tree строится путем объединения деревьев DOM и CSSOM и представляет собой низкоуровневое представление того, как элементы будут отображены на экране. Браузер проходит по Render-Tree и выполняет расчет лейаута, определяя размеры, позиции и прочие характеристики каждого видимого элемента, последовательно отрисовывая их на странице. В случае изменений, таких как пользовательские взаимодействия или динамическое обновление содержимого, браузер повторяет необходимые шаги для обновления Render-Tree и перерасчета лейаута.

Конечно, данная тема намного сложнее, если еще больше уходить в детали. Но основные технические принципы теперь вам известны, и вы можете оттолкнуться от них для более глубокого изучения.
👍8
В нынешнюю цифровую эпоху организации здравоохранения обратились к облачным вычислениям для хранения и доступа к электронной медицинской информации из-за ее многочисленных преимуществ.

Недавно на Хабре была опубликована статья нашего СIO Андрея Сапожникова, в которой он с разных сторон рассматривает почему важно соответствовать требованиям HIPAA в облачной инфраструктуре: https://habr.com/ru/articles/731428/

Приятного чтения!
👍5😁1
Mad Stream возвращается 🔥

8 июня рекрутер Mad Devs Маргарита Мысина выступит на онлайн-стриме с темой: «Как попасть в Mad Devs начинающему разработчику».

Пожалуй, самый частый вопрос, который мы получаем в ответ на наши посты в социальных сетях это «Я хочу работать в Mad Devs. Как мне к вам попасть?» и именно на него мы постараемся ответить в этом стриме. Наша ключевая задача - рассказать вам на какие нюансы мы обращаем внимание, чем отдает приоритет и что рекомендуем сделать, чтобы увеличить шансы на успешное трудоустройство к нам (да и не только).

Когда: 8 июня (четверг) в 19:00 (UTC 6+)

Вход на стрим – свободный! Ссылка будет доступна в нашем Telegram-канале за 15 минут до начала ивента.
🔥22👍71
Кто такой фасилитатор и всегда ли он нужен на встречах?
Если вы сталкиваетесь с проблемами на встречах команды, размышляли ли вы о привлечении фасилитатора, который поможет провоить их более эффективно?

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

Когда нужно привлекать фасилитатора?
До начала встречи постарайтесь ответить себе на следующие вопросы:
Есть ли цель и ясное понимание того, что должно быть достигнуто?
Будет ли встреча проходить в формате активной дискуссии?
Должно ли быть принято решение (или решения) в конце встречи?
Будет ли встреча проводиться в группе людей с разными точками зрения и интересами?
Будет ли много людей на этой встрече?
Если вы ответили на все вопросы — «Да», то вам стоит обратиться за помощью к фасилитатору.

Типы встреч, на которых фасилитатор может быть особенно полезен:

📌 Decision-making meetings
Когда возникает необходимость в принятии серьезных решений, фасилитатор берет на себя организацию дискуссии и обеспечивает принятие обоснованных решений, основанных на фактах и целях. Он также стимулирует поиск взаимовыгодного решения и убеждается, что команда полностью привержена выбранному решению.

📌 Team Gathering / Team Building
Фасилитатор способствует укреплению команды, повышению мотивации и улучшению коммуникации. Он помогает создать дружественную атмосферу, используя игры, упражнения и дискуссии, чтобы помочь команде погрузиться в обсуждаемую тему и вдохновить на совместную работу.

📌 Problem Solving
Фасилитатор помогает команде решать серьезные проблемы и конфликты. Он создает безопасную атмосферу, обеспечивает равный доступ к высказываниям и предлагает техники, которые помогут команде осознать суть проблемы, найти возможные решения и выбрать наилучший вариант.

📌 Design & Innovation Workshop
Когда команда собирается для разработки нового продукта, сервиса или процесса, фасилитатор предлагает креативные методики, помогающие определить проблему, генерировать идеи и выбирать лучшие из них. Он также может организовать процесс прототипирования и тестирования, чтобы удостовериться, что идея работает как задумано.

Возможно, у вас есть опыт встреч с участием фасилитатора, или вы тот самый классный фасилитатор, то расскажите в комментариях как это проходит у вас в компании и что вам помогает в работе 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
Хранение данных с Grafana Mimir
Мир сегодня состоит из данных, и эффективные инструменты работы с ними - наше все.
сегодня мы рассмотрим один из таких инструментов под названием Mimir.

Что такое Grafana Mimir?
Это инструмент, основанный на проекте Cortex, предназначенный для долгосрочного хранения метрик.

Как он работает?
Mimir принимает данные от систем-источников через функцию Prometheus remote-write.

Они, представленные в формате временных рядов, затем сохраняются в облачных хранилищах, таких как Amazon S3 или GCS.

Mimir использует блочное хранение, что позволяет эффективно работать с большими объемами данных и обеспечивает быстрый доступ к ним.

Преимущества Mimir
🔹 Распределенная нагрузка и оптимизированное хранение для быстрой обработки данных.
🔹 Использование механизмов сжатия, кэширования и индексации для улучшения производительности.
🔹 Возможность быстро загружать и обрабатывать большие объемы данных из различных источников.
🔹 Сбор и агрегация данных из Prometheus, VictoriaMetrics и Grafana Agent.
Надежное и экономичное хранение данных.

Недостатки Mimir
🔸 Отсутствие поддержки downsampling и удаления отдельных блоков данных.
🔸 Некоторые ограничения функциональности по сравнению с другими инструментами, такими как Thanos.

В целом Mimir является мощным инструментом для долгосрочного хранения и анализа метрик мониторинга. Он может быть полезен для различных сценариев использования, включая сбор и хранение метрик с удаленных систем мониторинга, стандартизацию и агрегацию данных, собранных разными системами мониторинга.

А вы используете Mimir? Поделитесь вашим опытом в комментариях.
👍4🤔1
Mad Devs Channel
Mad Stream возвращается 🔥 8 июня рекрутер Mad Devs Маргарита Мысина выступит на онлайн-стриме с темой: «Как попасть в Mad Devs начинающему разработчику». Пожалуй, самый частый вопрос, который мы получаем в ответ на наши посты в социальных сетях это «Я хочу…
Напоминаем, что уже завтра в 19:00 (UTC 6+) начнется Mad Stream на котором Маргарита Мысина, наш рекрутер, расскажет о том «Как попасть в Mad Devs начинающему разработчику» 🔥

Вход на стрим – свободный! Ссылка будет опубликована в нашем Telegram-канале за 15 минут до начала ивента.
👍13👏2
Комбинаторика и программирование
Комбинаторика — это раздел математики, который изучает комбинаторные структуры, такие как перестановки, сочетания и разбиения. Она занимается изучением способов выбора, упорядочивания и сочетания элементов в конечных множествах.
Другими словами, комбинаторные методы позволяют рассчитать все возможные варианты решения задачи с учетом ограничений и определить оптимальные решения на основе различных критериев. Комбинаторика имеет широкое применение в разработке. Направления, которые не обошлись без этого раздела математики:

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

📌 Анализ данных и машинное обучение
Помогает выделять паттерны, находить закономерности, оптимизировать модели машинного обучения и автоматизировать отбор признаков.

📌 Исследование социальных сетей
Применяется для выделения значимых сообществ и групп людей.

📌 Обработка естественного языка
Используется для анализа пропущенных данных, распределения слов и определения структуры предложений.

📌 Распознавание текста, изображений и речи
Помогает определить оптимальное подмножество признаков для точного распознавания.

📌 Разработка игр
Применяется для создания игровых механик, балансировки игрового процесса и процедурной генерации контента.

Комбинаторика помогает программистам и инженерам создавать эффективные алгоритмы и решать сложные задачи оптимизации.

Что почитать по комбинаторике, чтобы лучше разбираться?
📕 «Комбинаторика», Н. Я. Виленкин
📕 «Введение в комбинаторный анализ», Джон Риордан
📕 «Конкретная математика. Математические основы информатики», Дональд Кнут
👨‍💻3🤨1🤓1
🎬🐍 10 фильмов и сериалов, в которых пишут на Python (или делают вид)

Сегодня Python не только является одним из самых популярных языков программирования, но также является поп-культурным феноменом. В этом посте мы рассмотрим различные фильмы и сериалы, где герои используют Python.

📌 В поле зрения, 2011–2016 – Кинопоиск: 8.0, IMDB: 8.5
Мистер Финч, разработчик программы предсказания преступлений, нанимает бывшего агента ЦРУ Риза для остановки преступлений, объединяя свои ресурсы и технику с навыками Риза.

📌 Остановись и гори, 2014-2017 – Кинопоиск: 7.9, IMDB: 8.4
Временная компьютерного бума. 1980-е. Инновации мечтателя, вундеркинда и инженера борются с корпоративными гигантами.

📌 Загрузка, 2020, – Кинопоиск: 7.5, IMDB: 7.9
В будущем программист Нэйтан после смерти переносится в виртуальный мир и влюбляется в реальную девушку Нору.

📌 Из машины, 2014 – Кинопоиск: 7.1, IMDB: 7.7
Молодой сотрудник по просьбе миллиардера тестирует женщину-робота с искусственным интеллектом в отрезанном от мира доме.

📌 Пиратская бухта: B удалении от клавиатуры, 2013 – Кинопоиск: 7.1, IMDB: 7.4
Документальный фильм о создателях The Pirate Bay и их судебной тяжбе. Режиссер Саймон Клозе за пять лет задокументировал их борьбу с правообладателями.

📌 Газонокосильщик, 1992 – Кинопоиск: 6.6, IMDB: 5.4
Ученый Трэйс повышает умственные способности косильщика Джоуба, но эксперимент превращает его в монстра-психопата с претензиями на мировое господство.

📌 Пароль «Рыба-меч», 2001 – Кинопоиск: 7.2, IMDB: 6.5
Опасный шпион Гэбриэл Шир и хакер Стэнли Джобсон совершают дерзкую кражу, но Стэнли осознает, что он всего лишь пешка в большой игре.

📌 Кто я, 2014 – Кинопоиск: 7.4, IMDB: 7.5
Молодой гений Бенджамин встречает харизматичного Макса и вместе совершают дерзкие кибер-преступления, становясь кумирами для поколения. Но что ждет их в альтернативной реальности? Кто они на самом деле?

📌 Опасная правда, 2001 – Кинопоиск: 6.8, IMDB: 6.1
Молодой программист Майло попадает в опасные игры и тайны мультимедийной корпорации, осознавая свою уязвимость и готовясь сразиться с миллиардером-игроком.

📌 Тихушники, 1992 – Кинопоиск: 6.7, IMDB: 7.1
Шутники, тестирующие системы безопасности, попадают в опасные приключения, когда правительство шантажирует их для выполнения тайных операций. Их программирование становится ключом к воровству информации.

Желаем вам погрузиться в увлекательный мир программирования и кинематографии и отлично провести выходные ❤️
👍7😁2
CSS-селектор :has() на примерах

:has() — это CSS-псевдокласс родительского селектора. Он расширяет возможности CSS-селекторов и позволяет более точно настраивать стили элементов на основе их контекста и взаимосвязей. Мы можем использовать его для регистрации состояний или позиций элемента и стилизовать практически любую комбинацию элементов, будь то уникальные или входящие в определенный диапазон. Вот как его использовать:

♦️ Чтобы выбрать родительский элемент, содержащий определенный дочерний элемент, используйте следующий синтаксис:
:has() { ... }

Пример: чтобы выбрать элемент с классом "everybody", у которого есть потомок с классом "a-good-time", вы можете написать:
.everybody:has(.a-good-time) { ... }

♦️Чтобы выбрать родительский элемент, следующий за определенным элементом, используйте следующий синтаксис:
:has(+ ) { ... }

Пример: чтобы выбрать элемент , у которого есть родственный следующий элемент , вы можете написать:
label:has(+ input) { ... }

♦️:has() также может быть комбинирован с другими селекторами и псевдоклассами для создания более сложных выборок.

Например, можно использовать :not() для исключения элементов:
a:not(:has(> svg)) { ... }

♦️Или использовать :root для выбора элемента, у которого определенное состояние присутствует в DOM:
:root:has(.menu-toggle[aria-pressed="true"]) { ... }

Это лишь несколько примеров того, как использовать CSS-селектор :has(). Вы можете комбинировать его с другими селекторами и псевдоклассами, чтобы создавать более точные и уникальные стили для элементов на вашей веб-странице. Как часто вы используете :has() ? Поделитесь в комментариях 👇
🔥6👍3