Pull to refresh
15
0
Send message

Замедляем разработку. Вредные советы по тестированию в проектах

Reading time9 min
Views3.6K

Привет, меня зовут Кристина Климовских, я — Python Developer в команде DataMining. Главная задача моей команды — поддерживать бесперебойный флоу добычи данных для обогащения и актуализации справочника 2ГИС.

Ежедневно наши парсеры собирают разношёрстные данные из более 700 источников — это поставщики адресов магазинов, отзывов к заведениям, расписания общественного транспорта, ссылок на запись в салоны красоты и всё остальное, что можно впоследствии найти в 2ГИС. Поддерживать этот «зоопарк» парсеров нам помогают тесты — в каждом из проектов добычи мы стараемся покрывать новый функционал тестами и использовать их при раскатке в CI.

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

Читать далее
Total votes 12: ↑12 and ↓0+12
Comments2

Введение в аннотации типов Python

Reading time6 min
Views273K

Введение



Автор иллюстрации — Magdalena Tomczyk


Вторая часть


Python — язык с динамической типизацией и позволяет нам довольно вольно оперировать переменными разных типов. Однако при написании кода мы так или иначе предполагаем переменные каких типов будут использоваться (это может быть вызвано ограничением алгоритма или бизнес логики). И для корректной работы программы нам важно как можно раньше найти ошибки, связанные с передачей данных неверного типа.


Сохраняя идею динамической утиной типизации в современных версиях Python (3.6+) поддерживает аннотации типов переменных, полей класса, аргументов и возвращаемых значений функций:



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


Меня зовут Тихонов Андрей и я занимаюсь backend-разработкой в Lamoda.


В этой статье я хочу объяснить основы использования аннотаций типов и рассмотреть типичные примеры, реализуемые аннотациями из пакета typing.

Читать дальше →
Total votes 33: ↑32 and ↓1+31
Comments50

Нечёткое сравнение строк: пойми меня, если сможешь

Reading time8 min
Views60K
image
Привет!

На естественном языке сказать об одном и том же факте можно бесконечным числом способов. Можно переставлять слова местами, заменять их на синонимы, склонять по падежам (если говорим о языке с падежами) и тд.

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

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

Итак, кратко задачу можно озвучить так: «С определенной периодичностью из различных источников приходят актуальные новости. Необходимо фильтровать их таким образом, чтобы на выходе не было двух новостей об одном и том же факте.»
Предупреждение: в статье присутствуют заголовки реальных новостей. Я отношусь к ним исключительно как к рабочему материалу, не представляю какую-либо точку зрения на политическую или экономическую ситуацию в какой бы то ни было стране.
Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments8

Моё разочарование в софте

Reading time11 min
Views388K

Суть разработки программного обеспечения
— Нужно проделать 500 отверстий в стене, так что я сконструировал автоматическую дрель. В ней используются элегантные точные шестерни для непрерывной регулировки скорости и крутящего момента по мере необходимости.
— Отлично, у неё идеальный вес. Загрузим 500 таких дрелей в пушку, которые мы сделали, и выстрелим в стену.


Я занимаюсь программированием уже 15 лет. Но в последнее время при разработке не принято думать об эффективности, простоте и совершенстве: вплоть до того, что мне становится грустно за свою карьеру и за IT-отрасль в целом.

Для примера, современные автомобили работают, скажем, на 98% от того, что физически позволяет нынешняя конструкция двигателя. Современная архитектура использует точно рассчитанное количество материала, чтобы выполнять свою функцию и оставаться в безопасности в данных условиях. Все самолёты сошлись к оптимальному размеру/форме/нагрузке и в основном выглядят одинаково.

Только в программном обеспечении считается нормальным, если программа работает на уровне 1% или даже 0,01% от возможной производительности. Ни у кого вроде нет возражений.
Total votes 505: ↑474 and ↓31+443
Comments2474

Зачем забивать гвозди микроскопом, если есть Alpine Linux?

Reading time8 min
Views93K

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


Так я и познакомился с Alpine Linux.


Неожиданное окно


Этот дистрибутив может вам понравиться по следующим причинам:


  • Если вы любите минимализм и инструменты, ориентированные на выполнение поставленной задачи без лишних свистелок и украшений;
  • Если вы заметили, что имеющиеся «мэйнстримные» дистрибутивы немного (?) раздуты и избыточны;
  • Если вы захотели решить имеющуюся задачу простым способом.

Под «мэйнстримом» я подразумеваю тройку CentOS — Debian — Ubuntu (конечно же, ими мир не заканчивается), да простят меня все верующие в эти замечательные дистрибутивы. При их использовании, периодически, на границе восприятия, возникает колкая мысль – «а может быть можно проще?».

Читать дальше →
Total votes 84: ↑83 and ↓1+82
Comments111

Контра, Батлтодс и Мортал Комбат в одной коробке. История о том, как я сделал игровой автомат и поставил его в офисе

Reading time6 min
Views32K


Многие дети российских 90-х с теплотой вспоминают часы, проведённые за приставками, — как с друзьями играли в «танчики», Батлтодс, Рокэнролл рэйсинг и кучу других игр. Уверен, что есть среди вас и такие, кто и до сих пор играет и коллекционирует классические приставки и игры для них. Что-то в них есть такое, что связывает с беззаботным детством.

Я и сам этим отчасти болею. Но когда я немного погрузился в мир ретрогейминга, оказалось, что в моем детстве было много такого, что так или иначе обошло меня стороной. Сейчас я говорю об аркадных автоматах — явлении, которое в 80-90-е было фактически двигателем прогресса. Многие знакомые нам игры сначала писались именно под аркадные автоматы, а уже потом портировались на домашние консоли в урезанном виде.

Среди интересующихся ретрогеймингом есть мнение, что играть надо на оригинальном железе, а эмуляция — это не тру. Это означает, что если вы решили вспомнить былые деньки и погонять с друзьями в «Чипа и Дэйла», то будьте добры достать себе приставку (желательно оригинальную NES или Famicom) и пару картриджей к ней. В современном мире это не проблема — можно купить всё это на интернет-аукционах. Вопрос только в том, с какой суммой вы готовы расстаться.

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

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

Выход — собрать аркадный автомат самому
Читать дальше →
Total votes 73: ↑73 and ↓0+73
Comments36

Как настроить расширяемую систему для регрессионного тестирования на телефонах: опыт мобильной Почты Mail.Ru

Reading time10 min
Views19K


Привет, Хабр! Сегодня я хочу рассказать, как мы построили с нуля гибкую и расширяемую систему для выполнения автотестов на Android-смартфонах. Сейчас у нас используется около 60 устройств для регрессионного тестирования мобильного приложения Почты Mail.Ru. В среднем они тестируют около 20 сборок приложения ежедневно. Для каждой сборки выполняется около 600 UI-тестов и более 3500 unit-тестов.

Автотесты доступны круглосуточно — они экономят очень много времени тестировщиков и позволяют нам выпускать качественное приложение. Без них мы бы тестировали каждую сборку 36 часов (с учетом ожидания) или примерно 13 часов без ожидания. Вместе со сборкой, актуализацией переводов, при рабочей загрузке агентов с автотестами тестирование в среднем занимает 1.5 часа, что ежедневно позволяет нам экономить недели работы тестировщиков.

Мы рассмотрим, как всё делать с самого начала тем, кто занимается написанием автотестов, а не инфраструктурой: начиная от покупки телефона, его перепрошивки и заканчивая созданием docker-контейнеров, внутри которых будет доступен телефон для автотестов.
Читать дальше →
Total votes 53: ↑52 and ↓1+51
Comments26

Эффективное использование Github

Reading time13 min
Views123K

Github — важная часть жизни современного разработчика: он стал стандартом для размещения opensource-проектов. В «2ГИС» мы используем гитхаб для разработки проектов web-отдела и хостинга проектов с открытым кодом.

Хотя большинство из нас пользуются сервисом практически каждый день, не все знают, что у него есть много фишек, помогающих облегчить работу или рутинные операции. Например, получение публичного ключа из URL; отслеживание того, с каких сайтов пользователи приходят в репозиторий; правильный шаринг ссылок на файлы, которые живут в репозиториях гитхаба; горячие клавиши и тому подобное. Цель этой статьи — рассказать о неочевидных вещах и вообще о том, что сделает вашу работу с гитхабом продуктивнее и веселее (я не буду рассматривать здесь работу с API гитхаба, так как эта тема заслуживает отдельной статьи).


Содержание



Читать дальше →
Total votes 149: ↑148 and ↓1+147
Comments38

Пособие по Ansible

Reading time29 min
Views672K

управление конфигурацией оркестра


Это практическое пособие познакомит вас c Ansible. Вам понадобится виртуальная или реальная машина, которая будет выступать в роли узла для Ansible. Окружение для Vagrant идет в комплекте с этим пособием.


Ansible — это программное решение для удаленного управления конфигурациями. Оно позволяет настраивать удаленные машины. Главное его отличие от других подобных систем в том, что Ansible использует существующую инфраструктуру SSH, в то время как другие (chef, puppet, и пр.) требуют установки специального PKI-окружения.


Пособие покрывает такие темы:


  1. Установка Ansible и Vagrant
  2. Файл инвенторизации
  3. Модули shell, copy, сбор фактов, переменные
  4. Запуск на группу хостов
  5. Плейбуки
  6. Пример: поднимаем кластер, устанавливаем и настраиваем Apache и балансировщик нагрузок HAproxy
  7. Обработка ошибок, откат
  8. Шаблоны конфигурации
  9. Роли

Ansible использует так называемый push mode: конфигурация «проталкивается» (push) с главной машины. Другие CM-системы обычно поступают наоборот – узлы «тянут» (pull) конфигурацию с главной машины.


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

Читать дальше →
Total votes 35: ↑32 and ↓3+29
Comments15

Сбор и анализ логов демонов в Badoo

Reading time12 min
Views47K

Введение


В Badoo несколько десятков «самописных» демонов. Большинство из них написаны на Си, остался один на С++ и пять или шесть на Go. Они работают примерно на сотне серверов в четырех дата-центрах.

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



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

Мы построили такую систему и спешим поделиться подробностями. Наверняка у кого-то из вас будет стоять похожая задача, и прочтение данной статьи убережет от ошибок, которые мы успели совершить.
Читать дальше →
Total votes 51: ↑50 and ↓1+49
Comments53

Каверзные вопросы по C#

Reading time7 min
Views91K

Хочу представить вашему вниманию комические купле каверзные вопросы по C#.
Не удержался и решил запостить немного классики.
Некоторые вопросы в подборке кому-то могут показаться слишком простыми, но небольшой подвох в них, как правило, есть. Иногда можно и простым вопросом подловить. Будут полезны тем, кто изучает язык.
Всех, кому интересно, прошу под кат!
Пойти под кат!
Total votes 34: ↑27 and ↓7+20
Comments86

Переделка RC-машинки в смарт-машинку при помощи ардуино

Reading time2 min
Views34K
Во многих проектах на ардуино предлагается сделать то же самое, что продается в магазинах, но с гораздо большими трудовыми и материальными затратами. Сегодняшний проект не такой, смарт-машинки продаются в магазинах, но стоят в среднем раз в 5 дороже, чем RC-машинки. Поэтому я решил поделиться, как можно переделать практически любую RC-машинку в модную нынче машинку с приставкой «смарт» при помощи ардуино. Вот демо видео того, что получилось в итоге:

Читать дальше →
Total votes 21: ↑15 and ↓6+9
Comments15

Детектируем, разбираем, изучаем, паяем и глушим полицейские радары и лидары

Reading time17 min
Views193K
Давным давно, в 1902 году, сидят в кустах трое полицейских (с интервалами в 1 милю), у каждого секундомер и телефон. Проносится мимо первого автомобиль, он тут же засекает время и звонит второму, второй делает математические вычисления и звонит третьему, а тот уже останавливает машину. (пруф)


«Антирадар» в разборе. (Радар-детектор — пассивный приемник сигналов полицейских радаров, предупреждающий водителя о необходимости соблюдать установленный скоростной режим.)

Сегодня речь пойдет о приборах для радиоэлектронной борьбы на наших дорогах.
Пока антирадары и радар-детекторы у нас не запрещены, то РЭБ у нас не ведется, но в некоторых странах война идет по полной. Мы же можем только подготовиться.
Радиоэлектронная борьба (РЭБ) — разновидность вооружённой борьбы, в ходе которой осуществляется воздействие радиоизлучениями (радиопомехами) на радиоэлектронные средства систем управления, связи и разведки противника в целях изменения качества циркулирующей в них военной информации, защита своих систем от аналогичных воздействий, а также изменение условий (свойств среды) распространения радиоволн. Wikipedia
Как противостоять тому, кто пытается снять о вас информацию без вашего ведома и как защитить свои «персональные данные» от несанкционированного съема.

Радары, детекторы радаров, детекторы детекторов радаров. О том, какие бывают, как сделать/распилить самому и то и другое.
(Спасибо интернет-магазину fonarimarket.ru за предоставленное оборудование)
Читать дальше →
Total votes 61: ↑53 and ↓8+45
Comments80

Полезные дополнения к ReSharper

Reading time3 min
Views18K


Всем привет!

Как я заметил, немало людей использует ReSharper, однако полностью игнорируют его расширения (плагины). В этой статье я опишу те из них, которые показались мне полезными.
Названия расширений кликабельны и ведут на их детальное описание.
Читать про плагины
Total votes 24: ↑18 and ↓6+12
Comments12

Образы и контейнеры Docker в картинках

Reading time6 min
Views186K
docker container

Перевод поста Visualizing Docker Containers and Images, от новичка к новичкам, автор на простых примерах объясняет базовые сущности и процессы в использовании docker.

Если вы не знаете, что такое Docker или не понимаете, как он соотносится с виртуальными машинами или с инструментами configuration management, то этот пост может показаться немного сложным.

Пост предназначен для тех, кто пытается освоить docker cli, понять, чем отличается контейнер и образ. В частности, будет объяснена разница между просто контейнером и запущенным контейнером.
Читать дальше →
Total votes 31: ↑31 and ↓0+31
Comments6

Рекомендации по написанию кода на C# от Aviva Solutions

Reading time40 min
Views79K
Представляю вашему вниманию перевод документа "Coding Guidelines for C# 3.0, 4.0 and 5.0".

Целью создания этого списка правил является попытка установить стандарты написания кода на C#, которые были бы удобными и практичными одновременно. Само собой, мы практикуем то, что создали. Эти правила являются одним из тех стандартов, которые лежат в основе нашей ежедневной работы в AvivaSolutions. Не все эти правила имеют четкое обоснование. Некоторые из них просто приняты у нас в качестве стандартов.

Статический анализатор кода VisualStudio (который также известен как FxComp) и StyleCop могут автоматически применять многие из правил кодирования и оформления путем анализа скомпилированных сборок. Вы можете сконфигурировать их таким образом, чтобы анализ производился во время компиляции или был неотъемлемой частью непрерывной или ежедневной сборки. Этот документ просто добавляет дополнительные правила и рекомендации, но его вспомогательный сайт www.csharpcodingguidelines.com предоставляет список правил анализа кода, необходимых в зависимости от того, с какой базой кода вы работаете.
Читать дальше →
Total votes 21: ↑17 and ↓4+13
Comments36

Winium: теперь для Windows Phone

Reading time11 min
Views8.7K

Для автоматизации тестирования под Windows Phone и Windows нет удобных и открытых инструментов, которые можно легко адаптировать под свои нужды. Те, что есть, закрыты, ограничены и предлагают свой подход, отличающийся от общепринятых стандартов вроде Selenium WebDriver.

Мой коллега skyline-gleb недавно писал на Хабре, как мы разработали свой selenium-like инструмент автоматизации функционального тестирования desktop-приложений под Windows. Параллельно мы разрабатывали аналогичный инструмент, только под мобильные платформы от Microsoft.

О том, почему взялись его писать, какую пользу получили от использования единой платформы для автоматизации тестирования под все мобильные платформы и как внедрить это на вашем проекте, читайте в этой статье.
Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments9

Пишем простейший плагин для ReSharper

Reading time12 min
Views9K
Цель: написать, протестировать и развернуть простейший плагин для R#, содержащий пользовательские Quick-Fix и Context Action.

План статьи:
  1. Настройка среды разработки
  2. Пример №1: простейшее расширение-заглушка
  3. Установка плагина
  4. Отладка, полезные советы
  5. Пример №2: модификация кода с помощью R# API
  6. Функциональное тестирование плагинов средствами R# API

В ролях:
Visual Studio 2015
ReSharper Ultimate 10

Заинтересовавшихся приглашаю под кат.
Читать дальше →
Total votes 20: ↑19 and ↓1+18
Comments8

Подборка бесплатных инструментов для разработчиков

Reading time28 min
Views186K
Сегодня мы представляем вашему вниманию адаптированную подборку инструментов (в том числе облачных) для разработчиков, которые позволяют создавать по-настоящему качественные проекты. Здесь представлены исключительно SaaS, PaaS и IaaS сервисы, предоставляющие бесплатные пакеты для разработчиков инфраструктурного ПО.

Читать дальше →
Total votes 96: ↑89 and ↓7+82
Comments38

Сетевые технологии в высшем образовании. Печальный опыт поиска молодых специалистов

Reading time4 min
Views88K
Думаю ни для кого не секрет, что последние несколько лет востребованность IT специалистов на рынке труда неумолимо увеличивается. Многие учебные заведения пытаются адаптироваться к этим требованиям и стараются вводить новые специальности либо увеличить кол-во мест для поступающих на уже существующие факультеты.

Несмотря на все эти старания, дефицит квалифицированных IT специалистов только увеличивается.

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

image

Началось все, когда компании понадобилось резко увеличить штат системных инженеров из-за больших объемов грядущих работ. Времени было с запасом, поэтому приняли решение нанимать молодых перспективных специалистов — выпускников факультета телекоммуникаций и тому подобных. Я сейчас не буду называть конкретные имена университетов, институтов или колледжей, но в нашем городе их предостаточно. Естественно мы понимали, что квалификация выпускников не позволит сразу использовать их в проектах и планировали организовывать внутрикорпоративное обучение, уже по конкретным областям (cisco, checkpoint, s-terra). Таким образом мы бы получили “заточенных” под наши нужды специалистов при весьма незначительных затратах.

Есть конечно очень много мнений и споров о том, каких лучше специалистов нанимать, опытных, не опытных, до 30 или старше, статья не об этом. Я бы хотел поговорить об уровне подготовки наших выпускников. Если кто-то заинтересовался этой историей, добро пожаловать под кат…
Читать дальше →
Total votes 55: ↑47 and ↓8+39
Comments486

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Works in
Date of birth
Registered
Activity