Mad Devs Channel
1.79K subscribers
546 photos
28 videos
1 file
794 links
Канал Mad Devs.🤘Здесь мы рассказываем о жизни компании и инсайтах. Делимся знаниями и лайфхаками IT-индустрии.
Download Telegram
Как правильно писать bug-report: готовый шаблон от Mad Devs

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

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

Поэтому мы подготовили небольшой шаблон по-настоящему эффективного баг-репорта. Следуя ему, вы сможете дать полное представление о проблеме, отследить ее, проконтролировать срочность выполнения и зафиксировать ответственных.
Найди 10 отличий: модуль. Пакет. Библиотека. Фреймворк

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

Так понятия описывают в учебниках и статьях:

📌Модуль (Module) — в Python представляет собой логически обособленный сниппет кода в отдельном файле с расширением .py. Модули помогают улучшить структуру кода, позволяя сосредотачиваться на отдельных частях задачи, избегать дублирования кода и минимизировать вероятность конфликта имен.

📌Пакет (Package) — каталоги модулей с иерархической структурой пространства имен. Он служит для группировки и упорядочивания модулей, предоставляя организацию, аналогичную распределению файлов на жестком диске в папках и подпапках.

📌 Библиотека (Library) — объект, который находится на более высоком уровне, содержащий связанные модули и/или пакеты.

📌 Фреймворк (Framework) — в контексте разработки программ представляет собой набор модулей и пакетов, предназначенных для ускорения процесса программирования. Фреймворки более сложны и обладают архитектурой приложения. Известные представители класса – Django, Flask и Bottle.

Как объясним это мы? Очень просто:

Модуль — инструменты в ящике с инструментами. Они используются для выполнения определенных задач.
Пакет — коробка с инструментами. То есть это контейнеры, в которых хранятся модули.
Библиотека — набор инструментов. Это наборы модулей, которые предоставляют определенные функции или возможности.
Фреймворк — инструкция по сборке мебели. Это набор правил и ограничений, которые определяют, как должна быть построена программа.

Сохраните себе эту небольшую подсказку, но помните – полное понимание приходит только на практике. Попробуйте использовать модули, пакеты, библиотеки и фреймворки в своих собственных проектах.
Управляй зависимостями! Полезный туториал по Cargo в Rust

Знаем, что тех, кто знаком с Rust, становится все больше. Именно с вами хотим поделиться возможностями Cargo - который, как туристический гид, нежно и профессионально отвечает за то, чтобы вы не заблудились в зависимостях и не пропустили ничего интересного.

Что нужно знать

Cargo - это система сборки и управления пакетами, которая помогает разработчикам Rust создавать, собирать, тестировать и публиковать свои проекты:

📍 Автоматически управляет зависимостями, интегрируя сторонние библиотеки.
📍 Обеспечивает компиляцию и сборку проекта, учитывая все зависимости.
📍 Позволяет запускать тесты для поддержания высокого качества кода.
📍 Помогает генерировать автоматическую документацию для вашего кода.
📍 Позволяет публиковать и устанавливать пакеты из официального репозитория Rust, Crates.io.

Вот основные команды:

📍 cargo new создает новый проект, инициализируя его структуру и зависимости.
📍 cargo build автоматически управляет зависимостями и обеспечивает правильную сборку.
📍cargo run компилирует и запускает код, а cargo test упрощает тестирование.
📍 cargo doc создает просматриваемую документацию на основе комментариев в коде.
📍 Для библиотек и пакетов используйте cargo publish для упрощения публикации на Crates.io*.

Простой пример:

Чтобы создать новый проект Rust, используйте команду cargo new my-project. Эта команда создаст новый каталог my-project с файлами проекта, включая файл Cargo.toml.
Далее, чтобы скомпилировать проект Rust, используйте команду cargo build. Эта команда скомпилирует проект и создаст исполняемый файл.
Затем запускаем код Rust, используя команду cargo run. Команда скомпилирует и запустит код.
Чтобы протестировать код Rust, используйте команду cargo test. Эта команда запустит все тесты в проекте.
Ну для того, чтобы сгенерировать документацию для кода Rust, используйте команду cargo doc. Эта команда создаст документацию в формате HTML.
Полезные сервисы для подготовки к техническим собеседованиям 🖥

Предстоит собеседование? Наши поздравления! Напомним, что хоть в индустрии только и разговоров, что о софт-скиллах и эмоциональном интеллекте, технические хард скиллы – по-прежнему база, из-за которой вас и возьмут на работу.

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

IT Resume
Один из редких ресурсов на русском языке, где вы можете оценить свои технические навыки. Здесь вы найдете задачи по алгоритмам и структурам данных, синтаксису языков программирования, а также реальные задачи с собеседований.

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

CodeSignal
Платформа предлагает широкий выбор заданий, поддержку 70 языков, продвинутую среду разработки, соревнования, обратную связь и сотрудничество с IT-компаниями.

InterviewBit
Универсальная платформа с широким выбором задач, детальными решениями, имеется онлайн-среда разработки и практика на реальных задачах от известных IT-компаний.

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

Interviewing.io
Популярная платформа для подготовки, на которой представлены реальные собеседования в стиле FAANG. Вы можете выбрать анонимный формат и получить объективную обратную связь по hard skills и soft skills.

Расскажите в комментариях, какие ресурсы используете вы 👇
Операция "Вставить": учимся работать с SQL INSERT! 🤖💬

Что общего у оператора INSERT и канцелярской кнопки? С помощью канцелярской кнопки мы можем закрепить бумагу, а с помощью оператора INSERT - закрепить данные в таблице. Давайте разберем его синтаксис и на примерах рассмотрим, как он применяется на практике.

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

Синтаксис:

INSERT INTO название_таблицы (список_столбцов)
VALUES (значения_столбцов);

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

Теперь посмотрим примеры использования SQL оператора INSERT. Представим, у нас есть таблица “Клиенты” с полями: 'Имя', 'Фамилия' и 'Email'. Чтобы добавить нового клиента, воспользуемся запросом:

INSERT INTO Клиенты (Имя, Фамилия, Email)
VALUES ('Иван', 'Иванов', 'ivan@example.com');

Мы также можем добавить несколько записей за раз:

INSERT INTO Заказы (Номер, Дата)
VALUES (101, '2023-01-15'),
(102, '2023-01-16'),
(103, '2023-01-17');

А с помощью оператора INSERT и SELECT переносим данные из временной таблицы:

INSERT INTO Заказы (Номер, Дата)
SELECT Номер, Дата
FROM Временные_Заказы
WHERE Дата > '2023-01-01';

Также можно использовать подстановочные знаки:

DECLARE @Имя NVARCHAR(50) = 'Иван';
DECLARE @Фамилия NVARCHAR(50) = 'Иванов';

INSERT INTO Клиенты (Имя, Фамилия)
VALUES (@Имя, @Фамилия);

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

Используете SQL INSERT в работе? Почему да? Почему нет? Хотим ваших мнений в комментариях!
Защищай данные полностью: 7 лучших программ для шифрования

POV: вы занимаетесь разработкой ПО и проект содержит конфиденциальную информацию, такую как алгоритмы и спецификации продукта. Ваш компьютер заражается вирусом, который крадет ваши файлы и отправляет их конкурентам. Что будет после (спойлер: ничего хорошего)?

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

Поэтому шифрование данных — это не хотелка, не бонус, а необходимая мера для обеспечения безопасности. Слава Одину, это уже давно не нужно делать вручную.
Mad Devs сообрали для вас популярные программы для шифрования:

VeraCrypt
Бесплатное и открытое ПО для создания и управления зашифрованными томами данных, включая как тома, так и отдельные диски. Использует AES в режиме XTS, выбранный NIST как наиболее надежный стандарт шифрования. Кроме того, поддерживаются альтернативные алгоритмы — Twofish и Serpent.

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

ZuluCrypt
Предоставляет функциональность шифрования для дисков и устройств под управлением Linux, BSD и других UNIX-систем. Поддерживаемые стандарты включают LUKS, а также возможность использования контейнеров TrueCrypt и VeraCrypt.

Dexios
Эффективный и безопасный инструмент шифрования через командную строку, разработанный на языке программирования Rust. Поддерживает шифрование файлов перед их загрузкой в облачное хранилище. Основной алгоритм шифрования — AEAD (XChaCha20-Poly1305 + AES-256-GCM).

BitLocker
Инструмент шифрования дисков в Windows, обеспечивающий защиту данных от несанкционированного доступа. Программа использует алгоритм AES (Advanced Encryption Standard) в режимах, таких как AES-CBC (Cipher Block Chaining) и AES-XTS (XEX-based Tweaked CodeBook Mode with CipherText Stealing).

SiriKali
Универсальное решение в Linux для управления зашифрованными контейнерами и томами, поддерживающее LUKS, CryFS, EncFS и TrueCrypt/VeraCrypt. Программа использует алгоритмы AES, Twofish, Serpent и другие для защиты данных.

AxCrypt
Платное решение, применяющее симметричное шифрование с использованием алгоритма AES. Обеспечивает высокий уровень защиты данных благодаря блочному шифрованию с размером блока 128 бит и ключами 128, 192 или 256 бит. Также поддерживает шифрование данных в облаке.

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

Мы в Mad Devs заметили, что на курсах программирования типизации в Python уделяют не так много внимания. В основном новички знакомятся с базовыми концепциями вроде рекурсии или ООП, и тема остается в тени - кстати, незаслуженно, ведь она особенно важна, например, для коммерческой разработки.

Что такое типизация? Это механизм, который определяет тип данных для хранения в переменной.

Python использует динамическую типизацию, где тип переменной определяется во время присвоения значения.

С одной стороны, это удобно:

🔺 Не нужно заранее объявлять типы.
🔺 Код выглядит более лаконично.

С другой - может привести к ошибкам:

▪️Ошибки типов не определяются на этапе компиляции.
▪️ Код становится менее читаемым и понятным.

С подобными ошибками можно справиться двумя методами:

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

📝Пример:
def add(a: int, b: int) -> int:
return a + b
print(add(2, 5))
# Выводит 7

Эти аннотации просто дают знать программисту, какие типы должны иметь аргументы функции и результат какого типа она возвращает.

2. Утиная типизация для фокуса на методах, а не на типах. Утиная типизация говорит: "Если объект имеет нужный метод, то его тип не важен".

📝Пример:
def send_data(sender, data):
sender.send(data)

А как в этом примере дать понять mypy, что sender должен принимать класс с реализованным в себе методом send? Ответ прост — протоколы.

Что такое протоколы? Протоколы – это инструмент, который позволяет описать набор методов, чтобы реализовывать объект.

Сразу к примеру кода выше. Дополняем его:
from typing import (
Any,
Mapping,
Protocol,
)

class SenderProtocol(Protocol):
def send(data: Mapping[str, Any]) -> None:

Итого получаем:

def send_data(sender: SenderProtocol, data):
sender.send(data)

В данном примере:

Функция send_data принимает два аргумента:
sender: объект, который должен соответствовать протоколу SenderProtocol.
data: данные, которые будут отправлены методом send.

Благодаря протоколу:
📌Мы знаем, что объект sender имеет метод send.
📌Мы знаем, какой тип данных метод send принимает в качестве аргумента.
📌Мы знаем, какой тип данных метод send возвращает.

И задача решена!

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

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

Например, Frontend комьюнити еженедельно готовят дайджест важных событий и делятся находками из своей области. Собственно, почему не поделиться этим и с вами? Ловите подборку того, что было бы интересно почитать на этой неделе:

🔹Управляем микрофронтендами
Fusionize - это orchestration платформа, помогающая настраивать, собирать и развертывать фронтенд-кусочки в единое веб-приложение.

🔹Интернет-драма с Apple и PWA
Apple хотели прекратить поддержку PWA приложений на домашнем экране, так как считают, что все приложения на домашнем экране должны проходить через AppStore, но потом передумали после жалоб. Пока не паникуем, но одним глазком наблюдаем!

🔹localStorage в современной разработке
Рассматриваем pros/cons localStorage и сравниваем с другими инструментами.

🔹Насколько JS растолстел в 2024
Негодуем о размерах JS в современных приложениях на английском и на русском.

Вам интересна такая рубрика? Оставьте реакцию - 🔥
Олег Пузанов принял участие в подкасте “Цифровой горизонт”

"Цифровой Горизонт" - проект ОФ ГИИП, который создан для обсуждения влияния информационных технологий на современный Кыргызстан и в целом на весь мир.

Выпуск посвящен теме “Перспективы AI в Кыргызстане”, где спикеры и обсудили последние тренды и вопросы регулирования в этой сфере.

А что вы думаете о перспективах AI в Кыргызстане и мире? ⬇️
Мы поучаствовали в ежегодном HTB Cyber Appocalypse CTF 2024 от HackTheBox.

HTB Cyber Appocalypse CTF - это всемирные соревнования, где команды в игровом формате решают задачи на взлом, чтобы найти спрятанные флаги. За каждый флаг начисляются очки, которые определяют место в рейтинге.

В этом году в соревнованиях участвовали 5693 команд и более 11000 участников. Наши сотрудники из Mad Devs были в составе команды Хакерстан и еще нескольких волонтеров. Им удалось занять 108 место в рейтинге. Это отличный старт и мы рады такому крутому опыту. В планах попробовать себя в этом в следующий раз!🔥
Mad Devs Meetups: Design Day 2.0 ⚡️

Мы возвращаемся! В прошлый раз всем настолько понравилось, что мы не могли не организовать Design Day еще раз. Приглашаем всех дизайнеров вновь принять участие в митапе, чтобы прокачать свои скиллы, обсудить горячие тренды и познакомиться с единомышленниками!

Что вас ждет:

📌 9 топовых лекций
📌 5 приглашенных спикеров
— «Выход за рамки»
📌 Нетворкинг

Save the date, как говорится:

📅 6 апреля 10:00

📍ololoPlanet, Юнусалиева 80, Бишкек

Участие абсолютно бесплатное!

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

Мы видели ваши реакции 🔥, поэтому продолжаем рубрику всего самого интересного за неделю от наших сотрудников. Сегодня с вами на связи команда маркетинга!

🔹Что нового можем увидеть в JavaScript 2024

Cамые интересные и ожидаемые функций JavaScript, которые возможно появятся в 2024:
- Temporal API
- Pipe оператор
- Record и Tuple
- декораторы

Эти новинки еще пока на стадии предложения для добавления в спецификацию и велика вероятность, что именно они и попадут. Ждем дальнейших новостей!

🔹INP(Interaction to First Paint) теперь официально Core Web Vital

Напомним, что INP - это замена для показателя FID(First Input Delay). В связи с этим можно кинуть себе в закладки вот эту статью. Это полный гайд по INP, отвечающий на многие вопросы. Например, как улучшить этот показатель или почему INP был внедрен как замена для FID и многие другие.

🔹Safari 17.4

Смотрим, что стало поддерживаться в свежей версии Safari.
Из интересного:
- Promise.withResolvers()
- Object.groupBy()
- Element.checkVisibility()
Эти функции на данный момент стали поддерживаться всеми 3 основными браузерами.

🔹Observer

Советуем изучить этот сервис круглосуточного мониторинга сайта для углубленного анализа производительности. Такой прям Google Page Speed на максималках.

🔹Как вдохновить себя, если это навязанные обязательства

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


До следующей недели! 🤟
Design Day 2.0: спикеры&темы 🤖

Митап состоится уже совсем скоро! А, значит, самое время рассказать вам о спикерах и темах, которые вас ждут во время ивента:

🎙 Влада Щербинина: “Нейронки: баланс инновации и реальности в дизайне”
🎙 Кристина Зюзина: “Почему мы любим милашек? Эмоциональный интеллект и soft-skills”
🎙 Клара Алымкулова: “Как подружиться со своими тараканами”
🎙 Екатерина Попова: “Дизайн — первый шаг в мир бизнеса”
🎙 Оман А. Абышев: “Отказываюсь выбирать или как построить карьеру своей мечты”
🎙 Вадим Андросов: “Как стать лидером в распределенной дизайн команде”
🎙 Дмитрий Толкачев: “UX/UI в крупных компаниях: выход за пределы стандартов”
🎙 Бек Тургунбаев: “Выйти за рамки: как “стресс” делает тебя лучше”

А также 🎙Алекс Кривов выступит в качестве модератора, но он также расскажет для вас много всего интересного.

Ждем вас:

📅 6 апреля 10:00
📍ololoPlanet, Юнусалиева 80, Бишкек

Участие абсолютно бесплатное!

Зарегистрироваться вы можете по ссылке.