Как стать автором
Обновить
-10
0
Евгений Черкин @FuchsiaColor

Системный программист

Отправить сообщение

TimePad.ru — помощник в организации мероприятий

Время на прочтение2 мин
Количество просмотров6.6K


Привет, хабралюди! Сегодня я хочу рассказать вам о сервисе, над которым вместе со своими друзьями работаю достаточно давно, но все не было хорошего повода рассказать о нем здесь. Наш проект называется TimePad, а хороший повод — это наше участие в Аллее инноваций на RIW и планы сделать RIW веселее :)

Но обо все по порядку.

Что такое Таймпэд и кому он нужен?


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

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

Узнать подробности
Всего голосов 48: ↑39 и ↓9+30
Комментарии45

Eventez-ация

Время на прочтение4 мин
Количество просмотров734
Сейчас многие стартапы базируются на очень простых идеях. Чем лаконичнее, тем проще опробовать и убедиться «фан или не фан». Например: предположили, что людям надоела пространная писанина в блогах и они с огромным удовольствием будут обмениваться краткими публичными сообщениями-статусами — создали twitter; или, подумалось, что экстремальные скидки спровоцируют столь же экстремальный спрос на товары и услуги (причем, даже незнакомые и экзотические) — получили Groupon; или, подметили, что люди не боятся афишировать места своего пребывания, добавили элементы «игровой механики» — получили Foursquare…

Следуя принципу простых идей, и советам минимизации фунционала (MVP) и бутстреппинга появился Eventez.

Идея проста: людям интересны события (эвенты), которые происходят вокруг них.

Eventex -- идея проста. Людям интересны события (эвенты), которые происходят вокруг них.
Читать дальше →
Всего голосов 20: ↑12 и ↓8+4
Комментарии29

Python Testing с pytest. Builtin Fixtures, Глава 4

Время на прочтение27 мин
Количество просмотров33K

Вернуться Дальше


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


Читать дальше →
Всего голосов 24: ↑18 и ↓6+12
Комментарии0

В чём разница Smoke, Sanity, Regression, Re-test и как их различать?

Время на прочтение5 мин
Количество просмотров391K


Оригинал. Перевод разбавлен размышлениями и дополнениями автора из своего опыта

О чём это всё


Будучи инженером по тестированию, вы, вероятно, слышали о таких видах тестирования как «дымовое» (smoke), «санитарное тестирование» (sanity), «ре-тест» и регрессионное тестирование. Вполне возможно, многие из этих видов используются вами на ежедневной основе.

В этой статье я хотел бы внести ясность и объяснить разницу между этими видами тестирования и попробовать разобраться, провести границы (хоть и условные) где заканчивается один вид тестирования, и начинается другой.
Читать дальше →
Всего голосов 24: ↑22 и ↓2+20
Комментарии13

Python Testing с pytest. Глава 2, Написание тестовых функций

Время на прочтение34 мин
Количество просмотров102K

Вернуться Дальше


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


Читать дальше →
Всего голосов 26: ↑17 и ↓9+8
Комментарии0

PyTest

Время на прочтение24 мин
Количество просмотров363K

Предисловие


По историческому призванию я SQL-щик. Однако судьба занесла меня на BigData и после этого понесла кривая — я освоил и Java, и Python, и функциональное программирование (изучение Scala стоит в списке). Собственно на одном из кусков проекта встала необходимость тестирования кода на Python. Ребята из QA посоветовали для этих целей PyTest, но даже они затруднились толком ответить чем этот зверь хорош. К сожалению, в русскоязычном сегменте информации по данному вопросу не так уж и много: как это используют в Yandex да и все по-хорошему. При этом описанное в этой статье выглядит достаточно сложно для человека начинающего путешествие по этой стезе. Не говоря уже об официальной документации — она приобрела для меня смысл лишь после того, как я разобрался с самим модулем по другим источникам. Не спорю, там написаны интересные вещи, но, к сожалению, совсем не для старта.

Юнит-тестирование Python


Что это и для чего рассказывать смысла не вижу — Википедия все равно знает больше. По поводу существующих модулей для Python хорошо описано на Хабре.

Вводная по необходимым знаниям


На описываемый момент знания Python у меня были достаточно поверхностны — я писал кое-какие несложные модули и знал стандартные вещи. Но при столкновении с PyTest мне пришлось пополнять багаж знаний декораторами тут и тут и конструкцией yield.

Преимущества и недостатки PyTest


1) Независимость от API (no boilerplate). Как код выглядит в том же unittest:

Код
import unittest

class TestUtilDate(unittest.TestCase):
    def setUp(self):
        #init_something()
        pass
        
    def tearDown(self):
        #teardown_something()
        pass
        
    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')
        
    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        
    def test_failed_upper(self):
        self.assertEqual('foo'.upper(), 'FOo')
        
if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(TestUtilDate)
    unittest.TextTestRunner(verbosity=2).run(suite)


То же самое в PyTest:

Код
import pytest

def setup_module(module):
    #init_something()
    pass

def teardown_module(module):
    #teardown_something()
    pass

def test_upper():
    assert 'foo'.upper() == 'FOO'
    
def test_isupper():
    assert 'FOO'.isupper()
    
def test_failed_upper():
    assert 'foo'.upper() == 'FOo'


2) Подробный отчет. В том числе выгрузка в JUnitXML (для интеграции с Jenkins). Сам вид отчета может изменяться (включая цвета) дополнительными модулями (о них будет позднее отдельно). Ну и вообще цветной отчет в консоли выглядит удобнее — красные FAILED видны сразу.

image

3) Удобный assert (стандартный из Python). Не приходится держать в голове всю кучу различных assert'ов.

4) Динамические фикстуры всех уровней, которые могут вызываться как автоматически, так и для конкретных тестов.

5) Дополнительные возможности фикстур (возвращаемое значение, финализаторы, область видимости, объект request, автоиспользование, вложенные фикстуры)

6) Параметризация тестов, то есть запуск одного и того же теста с разными наборами параметров. Вообще это относится к пункту 5 «Дополнительные возможности фикстур», но возможность настолько хороша, что достойна отдельного пункта.

7) Метки (marks), позволяющие пропустить любой тест, пометить тест, как падающий (и это его ожидаемое поведение, что полезно при разработке) или просто именовать набор тестов, чтобы можно было запускать только его по имени.

8) Плагины. Данный модуль имеет достаточно большой список дополнительных модулей, которые можно установить отдельно.

9) Возможность запуска тестов написанных на unittest и nose, то есть полная обратная совместимость с ними.

Про недостатки, пусть их и не много, могу сказать следующее:

1) Отсутствие дополнительного уровня вложенности: Для модулей, классов, методов, функций в тестах есть соответствующий уровень. Но логика требует наличие дополнительного уровня testcase, когда та же одна функция может иметь несколько testcase'ов (например, проверка возращаемых значений и ошибок). Это частично компенсируется дополнительным модулем (плагином) pytest-describe, но там встает проблема отсутствия соответствующего уровня фикстуры (scope = “describe”). С этим конечно можно жить, но в некоторых ситуациях может нарушать главный принцип PyTest — «все для простоты и удобства».

2) Необходимость отдельной установки модуля, в том числе в продакшене. Все-таки unittest и doctest входят в базовый инструментарий Python и не требуют дополнительных телодвижений.

3) Для использования PyTest требуется немного больше знаний Python, чем для того же unittest (см. «Вводная по необходимым знаниям»).

Подробное описание модуля и его возможностей под катом.
Читать дальше →
Всего голосов 26: ↑23 и ↓3+20
Комментарии11

Python Testing с pytest. Начало работы с pytest, Глава 1

Время на прочтение24 мин
Количество просмотров201K

Вернуться Дальше


Я обнаружил, что Python Testing с pytest является чрезвычайно полезным вводным руководством к среде тестирования pytest. Это уже приносит мне дивиденды в моей компании.

Chris Shaver
VP of Product, Uprising Technology


Читать дальше →
Всего голосов 31: ↑22 и ↓9+13
Комментарии2

Дайджест событий для HR-специалистов в сфере IT на февраль 2019

Время на прочтение5 мин
Количество просмотров2.2K


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

Следите за обновлениями поста, анонсы событий на вторую половину месяца будут добавлены позднее.
Читать дальше →
Всего голосов 21: ↑20 и ↓1+19
Комментарии0

Фишинг с помощью тега title

Время на прочтение1 мин
Количество просмотров10K

Разработчики мобильных браузеров уже давно пытаются стереть различия между сайтами и приложениями (да, я смотрю на тебя, PWA), и у них это вполне неплохо получается. Но всё таки остался ещё один концепт, который делает веб вебом и не даёт реализовать максимально сходный с нативным приложением пользовательский опыт — это URL в адресной строке браузера. Предлагаю узнать, как с этой проблемой справляется, скажем, китайский CM Browser.
CM Browser

Читать дальше →
Всего голосов 35: ↑30 и ↓5+25
Комментарии10

Continuous integration в Яндексе

Время на прочтение10 мин
Количество просмотров36K

Поддержка огромной кодовой базы с одновременным обеспечением высокой производительности большого числа разработчиков — это серьезный вызов. В течение последних 5 лет в Яндексе идет разработка особой системы непрерывной интеграции. В данной статье мы расскажем про масштаб кодовой базы Яндекса, про перенос разработки в единый репозиторий с trunk-based подходом к разработке, про то, какие задачи должна решать система непрерывной интеграции для эффективной работы в таких условиях.



Много лет назад в Яндексе никаких особенных правил в разработке сервисов не было: каждый отдел мог использовать любые языки, любые технологии, любые системы деплоя. И как показала практика, такая свобода не всегда помогала двигаться вперед быстрее. В то время для решения одних и тех же задач часто существовало несколько собственных или open-source разработок. С ростом компании такая экосистема работала всё хуже. При этом мы хотели остаться одним большим Яндексом, а не разделиться на множество независимых компаний, потому что это дает массу преимуществ: много людей делают одни похожие задачи, результаты их труда можно использовать повторно. Начиная от разнообразных структур данных, типа распределённых хеш-таблиц и lock-free очередей, и заканчивая множеством разного специализированного кода, который мы написали за 20 лет.

Читать дальше →
Всего голосов 52: ↑47 и ↓5+42
Комментарии100

Подборка полезных слайдов от Джулии Эванс

Время на прочтение1 мин
Количество просмотров52K
Перевели новую порцию слайдов. Права доступа в Unix, файловые дескрипторы, потоки, магия proc. И на закуску пара советов о том, как общаться, когда ты не согласен. А вдруг пригодятся =)



Читать дальше →
Всего голосов 115: ↑111 и ↓4+107
Комментарии42

Ответственный подход к JavaScript-разработке, часть 2

Время на прочтение14 мин
Количество просмотров17K
В апреле этого года мы опубликовали перевод первого материала из цикла, посвящённого ответственному подходу к JavaScript-разработке. Там автор размышлял о современных веб-технологиях и об их рациональном использовании. Теперь мы предлагаем вам перевод второй статьи из этого цикла. Она посвящена некоторым техническим деталям, касающимся устройства веб-проектов.


Читать дальше →
Всего голосов 34: ↑34 и ↓0+34
Комментарии4

TDDx2, BDD, DDD, FDD, MDD и PDD, или все, что вы хотите узнать о Driven Development

Время на прочтение13 мин
Количество просмотров126K

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



  • TDD — ну, это все знают, сначала пишем тесты, а потом остальной код.
  • BDD — что-то знакомое, вроде как, тоже тесты, но особенные.
  • TDD — снова? Так, стоп, тут речь уже не о тестах совсем. Но почему называется так же?
  • DDD — bound contexts, ubiquitous language, domain...
  • FDD — да сколько можно?
  • MDD — cерьезно, на основе диаграмм?
  • PDD — ...

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


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

Читать дальше →
Всего голосов 49: ↑48 и ↓1+47
Комментарии65

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность