Алгоритмы машинного обучения простым языком. Часть 3
Предыдущие части: Часть 1, Часть 2
Логистическая регрессия
Итак, мы уже познакомились с линейной регрессией. Она определяла влияние переменных на другую переменную при условии, что: 1)...
10 популярных проектов GitHub, написанных на Python
Уже долгое время разработчики во всем мире выбирают Python для большинства своих проектов. Python — второй по популярности язык на GitHub, крупнейшем веб-сервисе для...
Инкременты и декременты
В данной статье активно используется термин «операнд».
Так что такое операнд?
Операнд — это величина, над которой операторы могут выполнять определенные действия.
О! А что такое оператор?
Оператор — это специальный символ, выполняющий...
Создание интерфейсов, удобных для алгоритмов
Дизайнер должен досконально знать материалы, с которыми работает. В прошлом это было понимание особых свойств древесины, металлов, печатных станков и, наконец, пикселей. Современным дизайнерам...
LeetCode - удаление дублей из отсортированного массива
Постановка задачи
Дано: отсортированный массив nums. Требуется удалить имеющиеся дубли, чтобы каждый элемент встречался только один раз и возвращал новую длину.
Дополнительное место для другого массива...
Наивный байесовский алгоритм
Введение
Самые простые решения обычно оказываются самыми действенными, и в этом смысле показателен пример наивного байесовского алгоритма. Несмотря на большие успехи машинного обучения в последние...
Пошаговое построение логистической регрессии в Python
Логистическая регрессия — это алгоритм классификации машинного обучения, используемый для прогнозирования вероятности категориальной зависимой переменной. В логистической регрессии зависимая переменная является бинарной переменной, содержащей данные, закодированные...
7 советов по улучшению анализа данных в Python
#1: Pandas Profiling
Преимущества этого инструмента очевидны. Анимация ниже создана с помощью вызова метода df.profile_report():
С помощью этого инструмента можно с легкостью устанавливать и импортировать пакет...
Vaex: Python библиотека для работы с DataFrame вне памяти и быстрой визуализации
Данных становится всё больше
Некоторые массивы данных слишком велики, чтобы поместиться в основной памяти обычного компьютера, не говоря уже о ноутбуке. Тем не менее, все хотят...
Топ — 9 фреймворков в мире искусственного интеллекта
Сначала были роботы, затем ассистенты Google Now и Siri, а сегодня новый ИИ — Google Duplex. Похоже, искусственный интеллект добился определенных успехов в том чтобы стать...
5 секретов наилучшего использования кортежей в Python
Python, являясь языком программирования общего назначения, предоставляет набор встроенных типов данных, включая int, str, tuple, list, dict и set. Четыре последних считаются контейнерами, так...
5 доказательств силы итерируемых объектов в Python
Что такое итерируемые объекты?
Итерируемые (перебираемые) объекты — это коллекция важных структур данных в Python. Например, к ним относятся такие встроенные типы, как строки, списки и словари....
Что нужно знать, чтобы начать заниматься квантовыми вычислениями
Несмотря на относительно старую технологию, только в последнее время квантовые вычисления привлекли к себе много внимания как индустрии, так и СМИ. Квантовые вычисления впервые...
Обработка естественного языка для анализа отзывов онлайн-покупателей
Цель использования обработки естественного языка в описываемом проекте — анализ обзоров на товары, оставленных онлайн-покупателями.
Я начал работу над этим проектом для достижения трех бизнес-целей:
Найти основные компоненты...
Большой недостаток социальных сетей и его устранение
Чуть более двух десятилетий назад, на заре своего развития Интернет столкнулся с серьезной проблемой: очень сложно было найти «правильную», необходимую информацию. Другими словами, поисковые...
Будет ли ИИ главенствовать в 2021 году? Большой вопрос
Технологии, связанные с искусственным интеллектом, развиваются в стремительном темпе. Узнаем, что ожидает ИИ в будущем.
В 2020 году ИИ претерпел быстрые преобразования, неожиданные разработки и...
Как вычислить миллионное число Фибоначчи на Python
Как-то раз я захотел найти оптимальное решение для вычисления чисел Фибоначчи и решил попробовать вычислить стотысячное число в последовательности, а потом подумал: если бы...
Будущее практического применения чат-ботов
В последние несколько лет мы стали свидетелями гонки между компаниями за создание самой большой, самой мощной и самой интересной модели под названием NLP (Обработка...
Распознавание лиц с помощью CoreML и ARKit
Создаём приложение с одним окном
Для начала нам понадобится создать iOS проект «single view app» (прим: автор работает в Xcode).
Теперь у нас есть проект. Мы обойдёмся...
Создание приложения-чата с LangChain, большими языковыми моделями и Streamlit для взаимодействия со сложной базой...
Создадим приложение-чат для взаимодействия со сложной базой данных при помощи агентов и инструментов LangChain. Затем реализуем и развернем функционал памяти, создадим удобный интерфейс, в котором сложные запросы упрощаются в диалоговом режиме.
Анализ аудиоданных с помощью глубокого обучения и Python (часть 2)
Предыдущая часть: Часть 1
Сверточные нейронные сети (CNN) схожи с обычными нейронными сетями: они состоят из нейронов с обучаемыми весами и сдвигами. Каждый нейрон получает...
Как конвертировать PDF-файлы в PNG с помощью Python
Пакет pdf2image поможет нам превратить файл PDF в PNG. Чтобы упростить процесс преобразования, мы немного улучшим этот проект. Давайте сделаем это без лишних слов!
Требования
Первое,...
Лассо- и ридж-регрессии: интуитивное сравнение
Регуляризация размерности данных - важнейший навык в машинном обучении, позволяющий повысить эффективность модели. Чтобы овладеть им, необходимо понять различие между лассо- и ридж-регрессиями. Попробуем разобраться с этими методами статистического обучения.
Обзор шаблонов SnapML и их возможностей в Lens Studio
В июне 2020 года Snapchat выпустил Lens Studio 3.0. — крупное обновление своего ПО для создания эффектов дополненной реальности (далее AR). Среди всего изобилия новшеств релиза...
Моделирование логистического роста
Часть 1, Часть 2
В прошлой статье мы рассмотрели пример моделирования первой вспышки коронавируса с помощью экспоненциального роста. Следующая ступень анализа — логистический рост. Воспользуйтесь Python notebook...
Как добиться от моделей глубокого обучения большей генерализации?
Вы можете использовать IRM практически в любой базовой модельной структуре. Однако эта система наиболее эффективна, когда ее применяют к моделям черного ящика, оперирующим большим...
Топ-10 ошибок анализа данных
Аналитик данных — лучший в статистике среди программистов и лучший программист среди статистиков. В этом топе обсудим, как программисту стать лучше в статистике.
Примеры, код...
ML-инженер или специалист по обработке данных? (Закат науки о данных?)
Привет, меня зовут Джейсон
Я специалист по обработке данных (чуть позже в статье это понятие будет определено конкретнее) в Кремниевой долине, и мне очень нравится расширять...
Декораторы в Python за три минуты
Декораторы представляют собой удобный для восприятия человеком способ расширения возможностей функции, метода или класса извне. Использование декораторов особенно полезно при декорировании (т. е. расширении)...
Парадокс надежности ИИ
Представьте, что вы босс и у вас в штате два работника (человека):
Кирилл Небрежный — это сплошное разочарование. Лишь в 70% случаев он справляется с...
Автоматический анализ текста с использованием Streamlit
Streamlit — эффективный и оперативный инструмент для анализа текста. С ним можно провести реферирование текста, частеречную разметку и распознавание именованных объектов.
Введение в анализ текста
Текстовая аналитика...
5 инструментов для специалистов по обработке данных
Рассказываем о пяти инструментах, которые позволят сэкономить время вам и вашей команде при работе над проектом. Они помогут не только с очисткой и анализом данных, но и с построением, обучением и тестированием моделей машинного обучения.
Машинное обучение с Amazon Aurora
Любая современная компания, достигнув определенного момента в своем развитии, сталкивается с непростой задачей: сделать свою продукцию более кастомизируемой для клиентов. Стремление к персонализации товаров...
6 функций Pandas для быстрого эксплораторного анализа данных
Познакомьтесь с 6 функциями, лежащими в основе любого эксплораторного анализа данных. Они позволят сделать первый шаг в исследовании данных в Pandas.
Bamboolib — изучайте и используйте Pandas без написания кода
Установка Bamboolib
Установка достаточно проста:
pip install bamboolib
Чтобы Bamboolib работал с Jupyter и Jupyterlab, нужно установить дополнительные расширения. С помощью следующей команды устанавливаются расширения для Jupyter...
Мой опыт добавления нереляционной MongoDB в кластер Kubernetes
Установим MongoDB в Kind-кластер Kubernetes и интегрируем в приложение Spring Boot. Поработаем с сущностями и документами нереляционной БД, протестируем, запустимся, сделаем профили, загрузим образ и развернемся.
Лучший способ эффективно управлять неструктурированными данными
Узнайте о передовых методах работы с неструктурированными данными с помощью хранилищ объектов и озер данных. Это позволит более эффективно хранить, собирать и использовать данные.
Система инженерии данных «от и до» с Kafka, Spark, Airflow, Postgres и Docker. Часть 1
Создадим простой, но функциональный конвейер, подробно рассмотрим каждый его компонент: от настройки Kafka для потоковой передачи данных и оркестрации задач с Airflow до обработки данных со Spark и их сохранения в PostgreSQL. Сделаем акцент на практическом применении инструментов с Docker.
Разбор 7 ошибок Python
Как только задачи, стоящие перед специалистами по данным, переходят из родной научной области в сферу разработки ПО, решать их становится все труднее. И хотя...
Метод SHAP для категориальных признаков
Поговорить о том, как складывать SHAP-значения категориальных признаков, преобразованных путем прямой кодировки, с помощью кода Python.
Визуализация параметров градиентного спуска в Torch
Загляните за интерфейс, чтобы увидеть, как параметры SGD влияют на обучение модели. Графические представления помогут оценить роль таких параметров, как импульс (обычный и Нестерова), сокращение весов, демпфирование.
Как создать платформу обработки и анализа данных за неделю
Хотите создать полнофункциональную платформу данных с ежедневно обновляемыми аналитическими таблицами/дэшбордами? Простое пошаговое руководство (со ссылкой на код в репозитории GitHub) позволит реализовать такой проект всего за неделю.
Как алгоритм «случайный лес» вычисляет продавцов-мошенников на онлайн-рынке
Как показала практика, интернет полон мошенников, охотящихся за наивными пользователями. Посмотрим, как специальная модель МО обнаруживает злоумышленников на C2C-рынке.
5 простых способов визуализации данных на Python. С кодом
Визуализация данных — это большая часть работы специалистов в области data science. На ранних стадиях развития проекта часто необходимо выполнять разведочный анализ данных (РАД, Exploratory data...
Обратные вызовы Keras за 2 минуты
Что такое обратный вызов Keras?
Из документации Keras:
Обратный вызов — множество функций, применяемых на данной стадии тренировки. Вы можете использовать их, чтобы посмотреть на внутреннее состояние...
Почему в базе данных происходит взаимоблокировка?
Круг вопросов для обсуждения
Попробуем объяснить, что такое взаимная блокировка и почему она возникает в базе данных.
Напишем SQL-инструкции и искусственно вызовем взаимоблокировку, а также обсудим...
Структуры данных: динамическое программирование
Подход динамического программирования схож с подходом «разделяй и властвуй»: тоже разбивает задачи на как можно более мелкие подзадачи. Отличие в том, что здесь подзадачи решаются не независимо.
От продвинутой к эффективной аналитике
За последнюю декаду в компаниях произошел фундаментальный сдвиг в философии принятия решений. Лидеры ушли из среды, где был важен личный опыт и интуиция, в...
Лучший алгоритм решения задач по программированию на Python
По-прежнему актуальны споры о фактической пользе таких веб-сайтов по Python-программированию, как Codewars или Leetcode, и их роли в развитии профессиональных навыков разработчиков. Но несмотря...
Классы данных в Python и их ключевые особенности
Значимым компонентом любого проекта в программировании являются данные, с которыми неизбежно взаимодействуют все программы. Например, при разработке веб-сайта вы должны представить тексты и изображения...
Как составить Data Science портфолио? Часть 4
Предыдущие части: Часть 1, Часть 2, Часть 3
Medium и/или другие платформы для блоггинга.
Блог — это способ показать, что вы что-то умеете. Когда вы пишите о проекте...
Что такое большие данные: комплексный обзор
Большие данные появились в конце 2000-х годов и стали настоящим технологическим прорывом. Предлагаем поразмышлять над тем, в чем суть этого феномена, как он позволяет оптимизировать бизнес-процессы и как им можно управлять.
Алгоритмы поиска, которые должен знать каждый специалист по обработке и анализу данных
В последние годы алгоритмы для решения задач автоматического планирования и диспетчеризации стали вновь популярными в области машинного обучения. Понимание принципов их работы поможет увеличить...
Руководство по SQL: Как лучше писать запросы
Язык структурированных запросов – SQL, является незаменимым навыком в области науки о данных и, вообще говоря, приобрести этот навык довольно просто. Однако большинство забывают, что...
Машинное обучение. С чего начать? Часть 2
Предыдущая часть: Часть 1
Очистка данных
В любом проекте приходится заниматься «чисткой данных». К следующему этапу можно переходить только после приведения в порядок ваших данных.
Чаще всего...
Как отточить ваши “инстинкты данных”
Ввиду недавних успехов в области машинного обучения и исследований в области искусственного интеллекта, немного удивительно, что наука о данных стала сферой главного интереса.
Нет сомнений...
MLOps: как внедрить систему рекомендаций товаров на ecommerce-сайт
Умные инструменты - алгоритм Word2Vec и МО-сервис Layer - помогут быстро и дешево создать и внедрить модель рекомендаций и категоризации товаров на сайте электронной коммерции. В итоге пользователи платформы получат персонализированный опыт, а ее владелец сможет повысить конверсии и увеличить продажи.
Реализация архитектуры с сохранением состояния в Streamlit
Streamlit
Streamlit прошел долгий путь становления с момента своего создания в октябре 2019 года. Он не только предоставил разработчикам ПО новые возможности, но и обеспечил...
Погружение в базы данных
Базы данных представляют собой упорядоченные наборы данных, хранящиеся в компьютерной системе и доступные в электронном виде. Существует множество типов баз данных, например:
облачные;реляционные;объектно-ориентированные;NoSQL.
Выбор той или...
Рекуррентная нейронная сеть с головы до ног
Нейрон — строительный элемент человеческого мозга. Он анализирует сложные сигналы за микросекунды и отправляет ответы нервной системе, которая решает сложные задачи. У всех нейронов одна и...
Внутренняя платформа МО Bigeye: цели и методы создания
Машинное обучение на платформе Bigeyeизбавляет инженеров и специалистов по обработке данных от необходимости вручную настраивать критерии оповещений. Оно существенно экономит время, ведь получение показателей...
Менеджеры контекста в Python - выходим за пределы «with open() file»
Введение
В Python при работе с файлами наиболее распространённой функция open(), создающая объект типа файл, который в зависимости от ситуации позволяет читать или записывать данные....
Простое руководство по визуализации данных в машинном обучении
Создание информационных визуализаций - важнейший процесс, помогающий определить эффективность модели МО. Библиотека Yellowbrick, обладающая богатым функционалом, значительно упростит этот процесс.
Как проверить наличие файла или каталога в R, Python и Bash?
Проверка наличия файла или каталога в R
Для этого примера мы создали файл myfile.txt и каталог my_test_folder.
Как проверить наличие файла?
Наличие файла легко проверить с помощью команды file.exists()...
Основные концепции и структуры Python, которые должен знать каждый серьёзный программист
Генераторы
Создание итератора в Python требует большой работы. Класс (в ООП) должен быть построен с применением методов __iter__() и __next__(), внутренние состояния должны быть сохранены...
Оценка производительности нейронной сети Keras с помощью визуализаций Yellowbrick
Если вы когда-то использовали Keras для создания модели машинного обучения, то скорее всего перед этим вы строили примерно такие графики:
Здесь представлена матрица потери при...
Структуры данных: основы алгоритмов
Как написать алгоритм? Это, скорее, зависит от задачи и ресурсов. Четко определенных стандартов их написания не существует. Рассмотрим же характеристики алгоритмов и их сложности.
Что такое тензор?
Концепция тензора была создана в 1900 году двумя итальянскими математиками — Туллио Леви-Чивита и Грегорио Риччи-Курбастро, и, как это обычно бывает, основывалась на работе других математиков....
Математические операции над массивами и матрицами
В процессе обработки и организации данных в определенные моменты возникает необходимость в выполнении математических операций над массивами и матрицами.
Заглянем в notebook
Чтобы ознакомиться с рассматриваемыми далее...
10 идиоматических приемов для эффективного программирования на Python
Программирование само по себе очень увлекательное занятие, а программирование на Python увлекательнее вдвойне, поскольку в данном языке существует много разных способов реализации одних и...
Использование Snowflake для прогнозирования эскалации в колл-центре
Упредить эскалацию звонков в колл-центре — непростая задача. Справиться с ней поможет модель TOP_INSIGHTS. Она автоматизирует всю аналитическую работу службы поддержки, позволяя повысить удовлетворенность клиентов и улучшить их опыт взаимодействия с компанией.
Как дата-аналитику стать дата-сайентистом в 2023 году
Какие навыки и ресурсы нужны дата-аналитику, чтобы получить должность дата-сайентиста? Как сократить и облегчить этот карьерный переход? Воспользуйтесь практическими советами старшего дата-сайентиста, который ранее работал дата-аналитиком.
Как предварительно обработать данные и текстовые сообщения из социальных сетей
Одна из самых непростых задач при использовании данных из социальных сетей и текстовых сообщений для NLP (Natural Language Processing — обработки естественного языка) заключается...
#04TheNotSoToughML | “Давай, минимизируй ошибки” — Но достаточно ли этого?
Пришло время развеять миф о том, что машинное обучение - это сложно. Интуитивное МО позволяет пользоваться легкодоступными инструментами, не требующими специальных знаний.
5 уникальных подходов Google к инженерии данных
Когда я пришел в Google в качестве поставщика в 2019 году, у меня уже был опыт работы в области здравоохранении и технологическом секторе. Тем...
Почему логарифмы так важны в машинном обучении
Если бы вы жили на 10-м этаже, вы бы поднимались по лестнице или пользовались лифтом? Цель в обоих случаях одна: вы хотите вернуться домой...
8 показателей эффективности классификации
Оценка эффективности классификатора - непростая задача. Чтобы справиться с ней, понадобится несколько показателей. Предлагаем доступное описание 8 главных метрик.
Как создавать анимированные графы в Python
Matplotlib и Seaborn — вполне приличные Python-библиотеки для создания превосходных графиков. Но такие графики получаются статичными, и крайне трудно подобрать для них красивое представление данных или...
Моделирование данных в мире современного стека данных 2.0
Сравнивать моделирование данных со стеком данных - все равно что уподоблять автомобили интеллектуальным навигационным системам. Предлагаем на практических примерах убедиться в том, что технологии современного стека данных позволяют аналитикам успешно вести исследования без моделирования.
4 принципа успешной поисковой системы и не только
Поиск повсюду и сталкиваемся мы с ним ежедневно. Эта функция реализована на каждом сайте и является частью любого IT-продукта. Вызов меню поиска простой комбинацией...
Введение в теорию информации
Индонезийские пещеры острова Борнео дают представление о самой примитивной зарегистрированной форме коммуникации. Около 40000 лет назад, ещё до развития письменного языка, физические иллюстрации на...
Безградиентный подход к оптимизации нейронной сети
Градиентный спуск — это одна из важнейших идей в области машинного обучения, в котором алгоритм с учетом функции затрат итеративно выполняет шаги с наибольшим...
Что такое распределение Пуассона?
Прежде чем вводить параметр λ и подставлять его в формулу, давайте задумаемся: почему Пуассону вообще пришлось изобретать такое распределение?
1. Почему Пуассон изобрел свое распределение?
Чтобы...
Плотность вероятности - это не сама вероятность
Наибольшее значение вероятности — единица. Это общеизвестный факт! Однако для некоторых плотностей вероятности (например, плотности вероятности экспоненциального распределения на графике ниже), когда λ= 1.5 и ?...
Python в 2021: расписание релизов и основные функции
На данный момент мы используем Python 3.8, а последняя стабильная версия 3.8.4 была выпущена совсем недавно. Python 3.9 уже находится на стадии бета-тестирования, а...
3 простых шага для оптимизации гиперпараметров в любом Python-скрипте
Итак, вы написали Python-скрипт, который обучает и оценивает модель машинного обучения. И теперь вам хочется оптимизировать гиперпараметры и повысить производительность модели.
Я помогу!
В данной статье...
Блокчейн и искусственный интеллект - мощный тандем
Альянс искусственного интеллекта и блокчейна способен произвести настоящую революцию в промышленности. При этом обе передовые технологии могут эффективно расширять возможности друг друга.
Отслеживание фокусированного времени с помощью Python
Ценность внимания
Внимание, похоже, становится ценным активом в современном мире. Любое приложение и любой посещаемый вами веб-сайт заточен на то, чтобы заполучить частичку вашего внимания,...
5 неочевидных истин науки о данных
Хотите открыть для себя красоту машинного кода, скрывающуюся за нулями и единицами? Для начала узнайте 5 неочевидных истин науки о данных. Они помогут вам ступить на путь постижения этой увлекательной дисциплины со свежим взглядом.
Поиск с возвратом в решении типичных задач на собеседовании
Поиск с возвратом — это эффективный метод для решения алгоритмических задач, обычно задаваемых на собеседовании. Данный вид поиска ищет решения в глубину и, достигнув...
Как построить идеальное хранилище данных
Может показаться, что в последние годы многое изменилось в сфере сбора и хранения данных. Такие вещи, как NoSQL, «Big Data», различные графические и потоковые...
Структуры данных: массивы
Предыдущая часть: "Структуры данных: основные понятия"
Массив — это контейнер, содержащий фиксированное количество элементов одного типа. В большинстве структур данных массивы используются для реализации алгоритмов.
Вот термины, необходимые...
Руководство по структурам данных и алгоритмам: введение и настройка среды
Различные типы структур данных так или иначе используются почти в каждом корпоративном приложении. Пройдя это руководство, вы получите четкое представление о структурах данных, необходимое для понимания сложности приложений корпоративного уровня.
Топ-5 браузерных расширений для специалистов по анализу данных
Работа современного исследователя данных неразрывно связана с браузером. Представляем 5 браузерных расширений, упрощающих этот процесс: Diigo, CatalyzeX, Octotree, Open in Colab и BibItNow.
Как установить Anaconda на Mac
Просто и понятно о том, как установить Anaconda на Mac и исправить страшную ошибку «conda command not found»
Необходимость Anaconda
Начав работать в области науки о данных,...
Как собрать данные для DS-проекта с помощью Python: 3 шага
Начните свой проект по науке о данных с создания Python-скрипта, используя библиотеку Selenium для извлечения данных. Предлагаем узнать, как это выполнить в 3 шага.
Суть 4 хитроумных концепций Python для новичков
Совсем не просто изучать новый язык программирования, особенно в отсутствии какого-либо опыта в данной сфере. Однако по сравнению с другими языками вам, вероятно, будет...
Быстрая сборка и развертывание дашборда со Streamlit
Со Streamlit разработка дашборда для решения машинного обучения становится невероятно простой.
Streamlit — это фреймворк с открытым кодом, специально разработанный для инженеров машинного обучения, работающих с Python....
Настройте свой Jupyter Notebook правильно
В своей известной презентации “Я не люблю блокноты” (видео и слайды) Джоэль Грус критикует Jupyter Notebook — вероятно, самую популярную среду разработки для машинного обучения. Для...
Топ-5 ошибок при объявлении функций в Python
Функции являются критическим компонентом в любом программном проекте. Написанные должным образом, они представляют собой практичный способ написания читаемого и поддерживаемого кода. Однако, если функции...
Как читать CSV-файлы на Java с помощью Open CSV
Вкратце рассмотрим возможности по обработке CSV-файлов на языке Java, ведь этот формат файлов часто встречается в повседневной работе.
Основные принципы кэширования веб-приложений
Веб-приложения прошли большой путь с самого начала. Традиционный процесс создания веб-приложений проходит через несколько этапов проектирования, разработки и тестирования перед тем, как они будут...
4 новых продукта GitHub, которые изменят код
Совсем недавно GitHub провел свое первое виртуальное мероприятие — GitHub Satellite. Тысячи людей подключились к прямой трансляции, которая весь день радовала публику интересными докладами, сгенерированной музыкой...
25 наборов аудиоданных для исследований
Наборы музыкальных данных
Free Music Archive
FMA предназначен для анализа музыки и состоит из полноразмерного HQ-аудио, предварительно вычисленных характеристик, а также метаданных трека и пользовательского уровня....
История создания одного бессерверного приложения рассылки с открытым ПО
Когда не удается найти готовое решение - следует его создать. К такому выводу пришел автор статьи, и самостоятельно разработал бессерверное приложение для информационной рассылки со всеми необходимыми функциональностями. Расскажем, все как было!