От нуля к единице: как сервис Instawork исследует данные
Переход от 0 к 1 означает переход от ничего к чему-то или почему я покинула Google и перешла работать в Instawork.
Продвинутый CLI: команды, которые должен знать каждый разработчик
1. wget
В операционных системах, подобных Unix, команда wget загружает файлы, обслуживаемые по HTTP, HTTPS или FTP через сеть. По умолчанию она включена во все...
События на стороне сервера: к чему должен быть готов разработчик
События на стороне сервера - все еще не до конца изученное явление, которое может серьезно озадачить как новичка, так и профи. Тем не менее они могут принести и пользу. Рассказываем, как с помощью этих событий решить проблему генерации субтитров.
Преобразование кода в UML-диаграммы: раскрытие возможностей PlantUML
Среди множества инструментов для работы с диаграммами PlantUML - один из самых экономичных и практичных. Поговорим о его преимуществах и ограничениях, а также разберем пошаговое руководство по работе PlantUML в тандеме с IntelliJ IDEA.
Обработка сигналов в операционных системах семейства Unix на Golang
Сигналы в операционных системах семейства Unix — это программные прерывания, которые отправляются программе для указания на возникновение какого-то важного события. Это могут быть разные...
Как добавить в проект тестирование скриншотов с Cypress
Разработчиков, как правило, заботит качество кода. Есть различные виды тестов, которые помогают избежать ситуаций, когда код ломается после добавления в проект новой функции. Но...
Парное программирование: недостатки, которые предпочитают умалчивать
Приверженцы парного программирования часто говорят о его положительном влиянии на обмен знаниями и разрушении "бункеров знаний" в команде. В особенности они выделяют тот факт,...
4 причины, почему агенты ИИ не заменят программистов
Сегодня только ленивый не пишет про "агентов искусственного интеллекта". Предлагаем разобраться, кто такие агенты ИИ, какие проблемы с ними возникают на практике и, наконец, кому выгодно поднимать вокруг них рекламную шумиху.
SCDB: простая Open Source БД типа «ключ — значение»
Рассмотрим особенности нового решения для хранения данных. Приведем пример кода, обозначим перспективы.
5 вредных привычек неэффективных программистов
Плохие программисты вовсе не глупы. Просто у них есть вредные привычки.
Некоторые программисты лучше других. Существует своего рода статистика: небольшая группа программистов — на уровне «великолепно», чуть...
4 ключевых аспекта проектирования распределенных систем
Что конкретно подразумевают надежность, доступность, масштабируемость и обслуживаемость? В чем заключается важность этих характеристик распределенных систем?
Парадоксы нейминга: Windows придумали не в Microsoft, а Android — в Apple
Узнайте, как появились самые известные названия в мире компьютерных технологий. Будьте готовы к потрясающим открытиям. В мире нейминга не существует правил и ограничений.
Топ-7 онлайн-редакторов кода и IDE
Какие онлайн-редакторы кода и полноценные IDE позволяют повысить производительность? Обзор лучших инструментов, похожих на VSCode, поможет вам сделать правильный выбор.
Почему не стоит разрабатывать инструменты ИИ на основе чатов
Пришло время развивать инструменты ИИ, выходя за рамки интерфейсов, основанных на промптах. Предлагаем рассмотреть новейшие более надежные ментальные модели, ориентированные на совместную работу.
Пять распространенных ошибок производительности баз данных при разработке API
Разработка API сопряжена с большим количеством подводных камней. С примерами кода расскажем, как их избежать.
Лучшие приёмы HR от Google
Советы и уроки из книги Ласло Бока “Работа рулит!”
Google хорошо известна тем, что берёт к себе на работу только лучших из лучших. Отбор в компанию...
Дилемма побочного проекта: почему разработчики упускают возможность монетизации
Реализация побочных проектов, которые не приносят прибыли, может убить интерес к подработке. Выясним, как инди-разработчику монетизировать свои идеи. Поговорим о важности таких этапов разработки, как исследование, планирование, прототипирование, маркетинг и выбор ниши.
Пора делать шаг по карьерной лестнице разработчика?
Список общих рекомендаций по смене работы и устройству на должность своей мечты. Почему техническая зубрежка не является ключом к успеху, и какая стратегия здесь окажется более эффективной?
Как комментировать файлы JSON
JSON не поддерживает комментарии, что часто вызывает затруднения. Однако есть способы обойти это ограничение. В этой статье рассмотрены различные методы добавления комментариев в JSON.
Руководство по Docker. Часть 2: Docker Compose для JavaScript, Python и Redis
Рассмотрим написание docker-compose.yml и запуск веб-приложения в связанных контейнерах Docker Compose на примере Node.js и Redis.
Лучшие JavaScript библиотеки за 2019 год для построения диаграмм
Вступление
По мере того, как увеличиваются объёмы и сбор данных, необходимость визуализации этих данных становится всё более актуальной. Разработчики ищут способы объединять миллионы записей баз...
Подсказки по именованию логических переменных
Существует определенное соглашение — снабжать имена логических переменных и функций префиксами “is” или “has”. Ну, знаете, что-то вроде isLoggedIn, hasAccess или наподобие этого.
Но на...
Путь программиста-самоучки: преимущества и подводные камни
На пути у программиста-самоучки немало серьезных вызовов. Вам придется найти свое место в выбранной сфере, столкнуться с множеством вопросов без ответов и полностью отдаться...
Как перенести сайт с WordPress на GitHub Pages
Хотите перевести свой WordPress-блог в архив на GitHub Pages или продолжать использовать WordPress для ведения блога, а GitHub - для хостинга страниц? В обоих случаях поможет это руководство.
Механизм повторных попыток в Spring Boot: @Retryable и @Recover
Реализуем обработку временных сбоев в Spring Boot, рассмотрим аннотации для соответственных поведений. Проверим механизм в действии, отправив HTTP-запрос.
Почему вам нужно учить больше языков программирования
О моих свободных отношениях с языками программирования
Я занимаюсь программированием уже около 4 лет. Я начал с C#, занимаясь разработкой игр, а затем перешел на...
Полезные рабочие плагины TMUX
Расширим ваш арсенал TMUX. Научимся устанавливать и использовать любой плагин, разберем каждый из них. Расскажем, как создавать собственные TMUX-плагины.
7 шагов до уровня Моцарта кода
Мы читаем большое количество статей, с рекомендациями по повышению продуктивности. Правда, ирония в том, что на них уходит столько времени, сколько можно было посвятить...
Создаём конвейер автоматизированных сборок для проекта на Arduino. Часть 1/2
Важная часть профессионального программирования — это конвейеры автоматизации сборок. Вы, конечно, можете считать несерьезным свое увлечение проектами на Arduino. Но давайте представим, что вы создаёте библиотеку...
Как взломать веб-версию WhatsApp за 3 дня — отчет белого хакера
Whatsapp не раз привлекал внимание хакеров из-за своих уязвимостей. С этой точки зрения мессенджер представляет немалый интерес для исследователей проблем безопасности. Если вы относитесь к их числу, ознакомьтесь с отчетом белого хакера о 3-дневной работе по взлому веб-версии WhatsApp.
Как правильно учиться Java-программированию: история одного тьютора
Моя история
Все началось больше десяти лет назад. Решив стать программистом, я начал изучать несколько языков, чтобы в конечном итоге найти «свой» язык.
В Java я...
4 модели поведения для поддержания психического здоровья на работе
Эффективная деятельность требует хорошего психического здоровья. А кто о нем позаботится, как не мы сами? Рассмотрим 4 модели поведения, обеспечивающие внутренний покой, уверенность в себе и возможности для саморазвития.
Почему вы должны обратить внимание на Docker?
Когда я гуглил информацию о фреймворках глубокого обучения (deep learning), я заметил, что почти каждый из этих фреймворков поддерживался Docker. В итоге у меня...
Признаки настоящего сеньора
Сеньор. Кто он? Можно называть разработчика сеньором, исходя из опыта работы, но спектр навыков программистов настолько широк, что это не всегда отражает истинный профессионализм.
Наличие...
Pascal: ностальгическое путешествие сквозь годы и код
В чем сила языка Pascal, возникшего более полувека назад? Как он повлиял на наш мир? Почему его наследниками считаются Python, Rust, Go и многие другие современные языки? Откроем заново для себя Pascal.
Декларативный код против императивного
Хотите верьте, хотите нет, но как разработчик вы наверняка уже пользуетесь более чем одной парадигмой программирования. Поскольку нет ничего забавнее, чем развлечь друзей теорией...
21 идея для автоматизации в 2021 году
1. Способ поиска информации в Google
Большую часть времени мы ищем ответы на наши запросы в Google, и его поисковые навыки настолько умны, что в 80%...
Неужели комментировать код — это плохо?
Что такое комментарий?
Комментарий — это строка в исходном коде, которую могут прочесть разработчики, но которая игнорируется компиляторами и интерпретаторами.
Какой в нем смысл?
Как правило, «прочесть» код достаточно трудно....
Плюсы и минусы парного программирования
Многие программисты скептически относятся к парному программированию: технике разработки программного обеспечения, при которой за одним рабочим местом работают два программиста.
Я часто слышу:
«Звучит как пустая...
А вы сможете ответить на этот знаменитый вопрос из собеседования?
Разберем задачу про 100-местный самолет со всеми случаями и вариантами. Объясним, как получить правильный ответ и почему он именно такой.
5 признаков того, что вы тратите свой потенциал разработчика впустую
Устроившись на работу, вы легко можете застрять в ловушке простого обмена своего времени на зарплату. Вы едете на работу, заходите в офис, завариваете кофе,...
Привычки, которые стоит выработать программисту
Все мы имеем как хорошие, так и плохие привычки в программировании. Однако, как только вы начинаете вырабатывать правильные привычки, ваша эффективность существенно возрастает. Причем...
OTP-аутентификация c Devise
Сделаем простую реализацию OTP-аутентификации с Devise-функционалом Confirmable без сторонних библиотек или обширных конфигураций. Напишем функции для обработки форм валидации OTP и повторной его отправки.
Механизм самовнимания в моделях интерпретации языка
Этот метод моделирования отношений между словами, ориентированный на естественный язык и основанный на конструкции "запрос-ключ-значение", отличается элегантностью и простотой. Изучите его и возьмите на вооружение.
9 испытаний, или будни современного инженера данных
Появление современных технологий неминуемо влечет за собой развитие сферы данных, в связи с чем начинающим инженерам приходится решать задачи нового уровня сложности. Какие же...
Что такое разработка через тестирование и как эффективно ее использовать
Возможно, вы слышали о такой технике программирования, как TDD - разработка через тестирование. Разбираемся, как правильно использовать этот метод, чтобы повысить свой профессиональный уровень.
Почему стоит использовать Argo CD вместо (или вместе) с Helm в среде Kubernetes
Узнайте о преимуществах использования Argo CD в среде Kubernetes и возможности его интеграции с Helm и другими инструментами. Изучите этапы настройки Argo CD в среде Kubernetes для создания приложения и пример мониторинга с его помощью YAML-файлов в Git.
Зачем писать компилятор Rust на C — личный опыт
Программист Джон Нанли пишет компилятор Rust на чистом C. По его словам, там нет никакого C++. Ничего, кроме чистого C. Но зачем? Сегодня вспоминаем, что такое бутстрепинг, и знакомимся с простейшим компилятором сырых байтов в ассемблер. Более того, автор считает, что для бутстрепинга Rust никакие затраты не будут слишком велики.
Я могу назвать себя «экспертом по ИИ», а вы?
Страшилки об искусственном интеллекте заполонили интернет. Но кому следует их бояться? Тем, кто создает модели ИИ, новые алгоритмы, сайты и приложения на основе ИИ, или тем, кто только использует все это? Пока еще искусственный интеллект не захватил наш мир, определитесь, кто вы - созидатель или потребитель.
Как запустить и использовать файловые системы с помощью Amazon FSx
Компаниям, которые хотят запускать приложения Windows в облаке, нужно сетевое хранилище файлов, полностью совместимое с их приложениями и средами Windows. Рассмотрим систему Amazon FSx, которая во многом облегчает перенос рабочих нагрузок Windows в облако.
Зачем разбивать код на столбцы
На мой взгляд, главная составляющая любого программирования – это читабельность кода, будь то написанный вами или кем-то другим. Читабельность складывается из множества факторов, начиная...
Как исследовать и визуализировать данные МО для обнаружения объектов на изображениях
Предлагаем руководство по созданию интерактивной визуализации для обнаружения объектов с помощью Renumics Spotlight 1.6.0. Ознакомление с подобными передовыми технологиями позволит принимать более обоснованные решения при выборе дополнительных обучающих данных.
Искусственный интеллект и наше будущее
Искусственный интеллект впечатляет не только колоссальными возможностями, но и пугающими угрозами. Что мы можем сделать, чтобы приручить умные машины? Поразмышляем над этим.
Что такое программирование?
“Программирование — это о решении проблем” — проф. Дэвид Малан
Краткий обзор
Каждый день мы сталкиваемся с проблемами, которые должны быть решены. Этими проблемами могут быть как...
Принципы SOLID - ключи к чистому коду
Хотите писать чистый, удобочитаемый код и экономить при этом время? Тогда уделите несколько минут изучению принципов SOLID, выведенных легендарным Робертом К. Мартином в бестселлере "Чистая архитектура".
5 лучших бесплатных текстовых редакторов для Windows
В представлении большинства людей современный писатель — это человек, печатающий на компьютере Apple MacBook. Они недалеки от истины, вот только не всегда учитывается один...
Полное руководство по CASE WHEN в SQL
Изучите сценарии использования CASE WHEN в различных SQL-средах (SQL Server, Oracle, Snowflake, PostgreSQL). Постижение магии CASE WHEN, а также ограничений и альтернатив этого оператора, значительно усовершенствует ваши навыки работы с SQL.
Проблема эйджизма в IT-сфере
Причины возникновения эйджизма в IT-сфере и способы его преодоления
Когда вы заканчиваете школу или университет и начинаете искать работу, вы можете начать волноваться, что отсутствие...
YAML против JSON: какой формат эффективнее для работы с LLM?
Сравним два формата, применяемых в работе с языковыми моделями: JSON и YAML. Выясним, почему YAML эффективнее с точки зрения временных и ресурсных затрат, чем JSON.
Введение в библиотеку Flutter Bloc
Обратим наш пристальный взор на библиотеку Flutter Bloc и разберемся в ее тонкостях, чтобы эффективно задействовать ее потенциал в будущих проектах.
6 лучших фреймворков и инструментов генеративного ИИ
Ознакомьтесь с фреймворками и инструментами, лидирующими в сфере генеративного ИИ: HuggingFace, LangChain, LlamaIndex, Llama2, Haystack и SingleStore Notebooks. Эти технологии предлагают множество вариантов интеграции ИИ в проекты - будь то обработка естественного языка, аналитика данных или создание сложных приложений на основе ИИ.
Фитнес-функции и их роль в эволюции архитектуры
Познакомимся с фитнес-функциями и посмотрим, как они проверяют ПО на соответствие стандартам архитектуры.
Как писать понятный код
Вы пишите код для разработчиков или только для себя?
Обзоры кода во имя добра
Я люблю обзоры кода ― разбирать чужой код и отдавать на обзор свой....
В чем магия ожидаемых результатов?
Раскроем силу такого понятия как ожидаемые результаты и превратим их в инструмент для профессионального роста и качественной работы сотрудников.
Обнаружение и извлечение текста из изображения с помощью Python
Представляем удобные техники OCR и OpenCV для обнаружения и извлечения текста в цифровом изображении
Как я столкнулся с плохим разработчиком в команде и какие выводы из этого сделал
Мы видим их издалека, а менеджерам это удаётся не всегда.
Допустим, вы находитесь в команде разработчиков, и один из сотрудников плохо выполняет свою работу, а вы...
Продвинутые темы SQL для дата-инженеров
Рассмотрим важные техники SQL, иллюстрируя их примерами применения набора данных: объединение таблиц, подзапросы и оконные функции, фильтрацию и агрегирование. Освоив их, вы будете лучше справляться с анализом и визуализацией данных и сможете повысить качество принимаемых в организациях решений.
Как галлюцинируют нейросети
Как заставить нейросеть галлюцинировать? Какие развлекательные и практические задачи при помощи этого можно решить? Знакомимся с разработанным Google алгоритмом - DeepDream.
Обзор 8 ключевых команд Npm и Yarn
Хочешь быть продуктивным - учи команды команды npm и yarn CLI. А мы предоставим актуальную информацию о самых востребованных из них.
Как написать впечатляющий Readme-файл для проекта
Хотите, чтобы ваши репозитории GitHub выглядели профессионально? Создавайте в них детализированные и хорошо организованные файлы Readme для всех проектов.
Как выбрать язык программирования для проекта машинного обучения
Это руководство поможет вам сравнить языки программирования, используемые в машинном обучении: Python, R, Java, C++, JavaScript и Julia. Оцените их возможности и ограничения, чтобы выбрать наиболее подходящий для вашего проекта.
Обзор плагинов Obsidian
Рассмотрим несколько новых плагинов Obsidian для автоматического создания индексов папок, страницы обзора проектов, ссылок из строк, размещения галереи и геймифицирования хранилища.
Расширяем возможности собственного мозга на базе ИИ, Python и ChatGPT
Многие жалуются на провалы в памяти или с трудом пытаются вспомнить важную информацию, когда она необходима. Уследить за всем в нашем мире непросто, запоминание...
BabyAGI — автономный ИИ-агент для оптимизации задач
Изучите 10 примеров задач, выполняемых автономным ИИ-агентом BabyAGI. Способность логически рассуждать, принимать сложные решения и контролировать параметры делает BabyAGI бесценным помощником в автоматизации управления задачами.
Советы по оформлению дизайнерского портфолио
Вернувшись домой с мероприятия, посвященному менторству, в духе “быстрых свиданий”, я был в равной степени как истощен, так и полон энергии. Истощен, потому что...
Правильная мотивация - залог успешных сторонних проектов
По моему опыту, в работе над сторонним проектом основная сложность заключается не в поиске новой идеи, а в ее окончательном воплощении в готовый продукт.
В...
Регрессор дерева решений
Предлагаем наглядное руководство по смарт-обрезке ветвей дерева решений с учетом сложности/стоимости вычислений. Описанный подход потенциально позволяет создавать более оптимальные деревья, хотя зависит от набора данных, поставленной задачи и доступных вычислительных ресурсов.
Два метода безопасного программирования
Мы рассмотрим два очень простых и практичных безопасных метода, которые вы можете начать применять уже сегодня. Если вы профессиональный разработчик, вы наверняка уже их...
5 вечерних практик, которые помогают избежать выгорания
Вы программист или специалист по работе с данными, которого преследует профессиональное выгорание? Прислушайтесь к этим 5 советам - возможно, они помогут вам прийти в норму.
Лучшие бесплатные источники наборов данных для анализа
Сбор высококачественных данных представляет собой важную часть любого анализа данных или проекта по машинному обучению. В целях экономии вашего драгоценного времени команда WebDataRocks подготовила...
SQL: комплексный анализ оттока клиентов
Каковы решающие факторы при отказе от услуг связи и смене интернет-провайдера? Проанализируем данные по оттоку клиентов телекоммуникационной компании, сформулируем выводы и рекомендации.
7 малоизвестных команд и приемов Git
Контроль версий ПО - важная часть любого проекта, и решать эту задачу позволяет Git. Повысить эффективность работы с онлайн-репозитариями этого инструмента помогут эти стандартные, но довольно редко используемые команды Git.
6 способов оптимизировать рабочий процесс в Pandas
Несмотря на популярность, у Pandas есть немало скрытых возможностей. Предлагаем ознакомиться с 6 из них - они помогут повысить эффективность анализа данных.
Что мы ожидаем от разработчиков на каждом уровне
Работа в офисе, а особенно дистанционно требует постоянной коммуникации между всеми сотрудниками, поэтому каждому сотруднику следует иметь представление о том, какие задачи, помимо, конечно же, программирования ему предстоит выполнять.
Code Review - Полное руководство
После проведения сотни code rewiew, лично возглавив R&D (Research & Development) команду и спровоцировав несколько непреднамеренных ошибок, я решил поделиться своими выводами о том,...
Remote First: программисты не должны работать в офисе
Open-space, излишний контроль, метро и пробки убивают вдохновение. Приводим аргументы в пользу того, что разработчиком лучше работать удаленно.
Как стать Git-мастером: 7 советов по повышению производительности
Автозаполнение команд Git в терминале
Большинство команд терминала для Git начинаются с ключевого слова git, за которым следует пробел и второе ключевое слово. Из-за наличия...
Легко и быстро: автоматизация развертывания AWS EC2 с GitHub Actions и Docker Hub
Пошагово настроим экземпляр AWS EC2, создадим и добавим в DockerHub образ Docker и настроим рабочий поток Github Actions. В итоге научимся автоматизировать и оптимизировать рабочий процесс развертывания, уменьшая риск человеческой ошибки.
5 актуальных расширений Xcode для оптимизации разработки
Пополним арсенал разработчика полезными расширения для повышения продуктивности: SwiftPlantUML, SwiftFormat, Import, SwiftMockGeneratorForXcode, XVim2.
За что разработчики ненавидят парное программирование?
Обзор ответов на семь самых популярных замечаний о недостатках парного программирования, как со стороны junior-разработчика, так и со стороны senior-разработчика.
Парное программирование мешает углубленной работе
Достаточно...
ULTRA: базовые модели для формирования рассуждений на графах знаний
Рассмотрим основные принципы машинного обучения на графах знаний и основные проблемы базовых моделей. Подробно изучим мультиреляционные графы. Узнаем особенности и возможности уникальной модели ULTRA.
7 способов применения Stack Overflow, о которых вы могли не знать
Stack Overflow - популярная система вопросов и ответов для программистов. Но это не просто база полезной информации. Сегодня поговорим о дополнительных возможностях сервиса Stack Overflow.
Руководство по Docker. Часть 3: Amazon Web Services, Travis CI и Elastic Beanstalk
Руководство по Docker. Часть 1: образ, контейнер, сопоставление портов и основные команды.
Руководство по Docker. Часть 2: Docker Compose для JavaScript, Python и Redis
С помощью первых...
Автоматический мониторинг скорости API с помощью динамического тестирования
Готовый вариант тестирования производительности API. Настраиваем и запускаем! Экономит время на прописывание и обслуживание тяжелых тестов.
Поток управления декларативным циклом в Angular 17
Следующая версия популярного фреймворка Angular (v17) обещает предоставить разработчикам удобные функции. Одним из улучшений станет новый встроенный синтаксис шаблонов потока управления.
Репозитории GitHub, которые помогут подготовиться к техническому собеседованию
Предлагаем вашему вниманию коллекцию учебных ресурсов, которые помогут легко пройти собеседование по программированию.
Пять продвинутых Git-команд, благодаря которым вы будете выглядеть как профи
Расскажем о пяти передовых концепций Git: git bisect, git cherry-pick, git rebase, git add -p, git commit –amend - все они могут сэкономить много времени, которое вы тратите на чтение StackOverflow, когда возникают сложности с управлением версиями.
Стоит ли разработчику изучать VIM в 2020 году?
Введение
Небольшая предыстория для понимания контекста. В конце 2018 года я всерьез занялся программированием, решив развивать карьеру. До этого я создавал (довольно плохие) сценарии для...
Утечка мозгов в 3 часа дня: почему разработчики не могут продуктивно думать после обеда?
Почему в 15:00 мы наименее продуктивны? Может, это тайное время сна нашего мозга? В таком случае следует выяснить, в какие периоды суток мы наиболее энергичны и сосредоточены, а когда наступает спад мозговой деятельности.
8 главных качеств технического менеджера
Один мой близкий друг, получив повышение и возглавив команду инженеров ПО, обратился ко мне за советом. И я призадумался, а что, собственно, порекомендовать? Книги?...
5 лучших библиотек машинного обучения
За последние несколько лет рост машинного обучения достиг стремительных темпов. Это связано с выпуском библиотек машинного обучения (МО)/глубокого обучения (ГО), которые абстрагируются от сложности...
Биоинформатика? С R это легко!
Введение
Эта статья предназначена для тех, кто находится в поиске “точки входа” в область биоинформатики и имеет опыта работы с R (в идеале с использованием...
Создание многократно используемых компонентов React оптимальным способом
Предлагаем практическое руководство по компонентно-ориентированной разработке. Следуя ему, вы получите многоразовые компоненты React.js, которые можно отдельно импортировать, обновлять и использовать для создания любого проекта.
JWT-аутентификация в Spring Boot Webflux
Spring Security всегда снижал мой интерес к собственным проектам. Как только возникала необходимость выяснить как аутентифицировать пользователей, я сразу начинал испытывать негодование или скуку...
Создаем Telegram-бота с помощью Node.js за 3 минуты
Одна из интересных особенностей Telegram заключается в возможности создать собственного бота. Он помогает автоматизировать и упрощать повседневные задачи. Узнаем, как сделать простого бота с помощью Node.js.








































































































