company_banner

Метод прогрессивного Гейзенбага

    В этом посте я расскажу:


    • о текущем статусе конференции Heisenbug 2018 Piter;
    • о том, как правильно писать периодические анонсы на Хабр;
    • о небольшом лайфхаке, как рисовать картинки с прогрессивным JPEG в стиле Тёмы Лебедева.

    Многие хабровчане работают в IT-компаниях, и наши компании имеют блог на Хабре. Этот блог зачастую рассматривается как витрина для продуктов и услуг компании. Когда ты пишешь посты в корпоративный блог, все подсознательно ожидают именно такого поведения. Как охотники развешивают на стенах своих домов трофеи с удивительными животными, на витрине должны появляться новые версии, новые фичи и новые баги.




    Но все мы понимаем, что Хабр, в первую очередь, — это собрание удивительных историй. Корпоративный блог можно превратить как во что-то реально полезное (статья @ptsecurity о выполнении кода в Intel ME у меня в «быстром наборе» браузера), так и устроить там адское грязное болото с «новыми технологиями» (которые ни разу не новые, и даже не совсем технологии) или филиал Instagram с фотками офиса. Ты сам решаешь, что получится в итоге.


    Даже больше скажу: у топовых компаний — куча подписчиков (у блога JUG.ru Group их полторы тысячи), в то время как у типичной публикации на главной — около 50 плюсов. Значит, твои подписчики могут вытащить на главную почти любой пост, просто пролайкав его в рамках погрешности. То есть именно ты, как хабраавтор, отвечаешь за содержание главной страницы — за внешний вид, честь и репутацию Хабра.


    Отсюда автоматически возникает вопрос: как быть с обзорами конференций? Нам в этом плане несколько сложней, чем, например, производителю софта. Производитель софта обычно пишет об уже успешно проделанной и завершённой работе, результатом которой будет пользоваться хаброжитель. Конференция же — это всегда work-in-progress, даже в самые последние дни перед проведением. Если писать о каждом новом нюансе и шаге в развитии, пришлось бы непрерывным потоком выпускать апдейты размером в абзац, и это, скорее, формат Twitter. На Хабре же нам хочется видеть лонгриды.


    Думаю, у многих тут такая же проблема, её стоит обсудить в комментариях и покритиковать решения.


    Наше решение коротко описывается «методом прогрессивного джипега», о котором рассказал Артемий Лебедев в 167 параграфе Ководства.






    Пришлось немного доработать классику до наших реалий:






    Лайфхак: как рисовать такие картинки


    Позволю небольшое практическое отступление. Многие знают о параграфе 167, хотят проиллюстрировать у себя на работе «метод прогрессивного джипега» со своими собственными картинками, но не знают, как это сделать. Статья была бы не полна без раскрытия этого секрета полишинеля, который, тем не менее, весьма сложно гуглится.


    Интуитивно кажется, что нужно взять алгоритм, рисующий картинку, и поправить, остановив его на N-ом шаге (скане). Это сложно и не для всех. На самом деле, всё уже сделано до нас: такая остановка запрограммирована в браузерах, если браузеру нужно скачать меньше данных, чем весит картинка вообще. Остаётся только на сервере выставить верное значение «Content-Length».


    1. Сохраняем картинку в Фотошопе или ещё каком-нибудь редакторе, который умеет управлять форматом кодирования.
      В Фотошопе, при сохранении в JPG, появится вот такое диалоговое окно:

      Если выставить в этом окне Progressive, то мы увидим вариант с последовательным уточнением картинки. Если выставить там Baseline, то картинка начнёт понемногу отрисовываться сверху вниз — в точности, как в примере выше.
    2. Качаем и распаковываем куда-нибудь PHP (ссылка на скачивание). Это для Windows, пользователи macOS и GNU/Linux сами как-нибудь разберутся в brew install php70 и apt-get install php7.0.
    3. Директорию, где лежит php.exe, желательно (но не обязательно) добавить в PATH, чтобы не набирать руками полный путь до php.exe.
    4. Кладём картинку на файловую систему, например: C:\\Temp\\jpeg.jpg.
    5. Воспользуемся скриптом jpeg.php:


      <?php
      // Какую часть изображения мы собираемся возвращать?
      $divide = isset($_GET['divide']) && intval($_GET['divide'])>1 ? intval($_GET['divide']) : 1;
      $img = 'jpeg.jpg';
      
      // Весь секрет в возвращаемом размере.
      // Считаем размер в байтах, которые нужно вернуть по сети:
      $size = round(filesize($img) / $divide);
      
      // Выставляем HTTP-заголовки:
      header("Content-Type: image/jpeg");
      header("Content-Length: $size");
      
      // Высылаем картинку в браузер:
      $fp = fopen($img, 'r');
      echo fread($fp, $size);
      fclose($fp);
      ?>

    6. В консоли (в Windows — cmd, macOS — iTerm и т.п.) перейдём в папку, где лежит jpeg.php и запустим локальный PHP-сервер: php -S localhost:8000;
    7. Зайдём в браузере по указанному адресу: http://localhost:8000/jpeg.php?divide=10;
      Чем больше будет значение параметра divide, тем более размытой выйдет картинка. Идеальная картинка — это divide=1.
    8. PROFIT

    Почему не на Java? Продался, переметнулся, у Java всё плохо? А вот ничего и не плохо, это было тактическое отступление.


    Как это происходит


    Этот абзац — целиком для тех, кому интересно, как это у нас внутри происходит. Если тебе нужно по существу, о новом Heisenbug, — можно промотать до следующего большого заголовка или кликнуть по этой ссылке.


    Обычно обзор следующей конференции выкатывается очень скоро после проведения предыдущей. Как минимум, пост на Хабре нужен, чтобы дать понять, что на сайте не осталось старой информации и сайту стоит доверять.


    Почему это важно: вчера в личку мне написал организатор воркшопа Django Girls SPb, Дмитрий Назаров (@nazarov_tech). Django Girls — это такой бесплатный мастер-класс по веб-разработке для женщин. Мы счастливо общались, и я считал, что следующие Django Girls будут только осенью (в прошлый раз же было осенью). А оказалось, он пройдёт совсем скоро, но на сайте этого ещё нет. Это не говорит ничего плохого о Django Girls — в конце концов, так делают все. Это говорит о том, что наша стратегия параноидально быстрого обновления сайта — хороша.


    К этому времени уже понятна дата и место проведения, но совершенно непонятна программа. Есть несколько звёзд, которые точно приезжают. В случае Heisenbug это, например, Саймон Стюарт — человек-Selenium или Виталий Фридман, благодаря которому Smashing Magazine настолько безбажный и быстрый.


    В этом случае мы пишем не просто анонс, а ещё и объявляем о так называемом Call For Papers (CFP). На конференцию реально попасть не только легенде, но и обычному человеку.


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


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


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


    Сразу после этого этапа начинается работа по прогрессивному джипегу. Во-первых, можно уже говорить о программе: вначале просто о людях, и потом — о конкретных докладах.


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


    Кроме того, в работе мы постоянно встречаемся с задачами разработки и тестирования. Иногда возникают интересные задачи, о которых не грех написать — например, как в той статье про Selenium.


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


    Я заметил, что самый простой способ сформировать каркас мегапоста — написать программу на Java, которая попарсит сайт и выдернет из него всё, что нужно. Как написать код для этого, я рассказывал в отдельном посте и выкладывал готовый пример кода на GitHub. Да, можно было бы сделать всё по-нормальному и попросить выдернуть данные наших программистов. Но я пишу посты по ночам, в моменты, когда появляется вдохновение. А разработчики сайта — нормальные люди, которые по ночам спят. Проще и быстрее сделать всё самостоятельно.


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



    Статус программы Heisenbug


    Как вы уже знаете, 17-18 мая 2018 года будет Heisenbug 2018 Piter. Многие уже начали покупать билеты (я пессимист и понимаю, что это скорей по причине особой январской стоимости билетов, а не из-за нашей супермеждународной славы). Поэтому хочется рассказать новоприбывшим, что изменилось и улучшилось по сравнению с предыдущим отчётом.


    Хорошие новости: десять спикеров уже подтвердили участие в конференции. Половина из них уже определилась с докладами, некоторые только находятся в процессе написания. Множество докладчиков сейчас работает с Программным комитетом, например, Michael Bolton — известный консультант и тренер, написавший Rapid Software Testing и Rapid Software Testing for Managers. Но я напишу только об этих десяти.


    Simon Stewart


    The Selenium Project


    Саймон — создатель WebDriver и глава проекта Selenium. В прошлом он был главой команды, занимающейся инструментами сборки в Facebook, разрабатывал графовую утилиту сборки Buck и яро выступал за использование монорепозиториев. До того, как присоединиться к Facebook, он почти пять лет подряд провёл в Google и три года — в ThoughtWorks. Он видел реально много кода. Кроме того, Саймон серьезно интересуется в точности воспроизводимыми сборками.


    Андрей Сатарин


    В своей карьере Андрей успел поработать в совершенно разных проектах: занимался тестированием распределённых систем в Яндексе, тестировал игру в Mail.ru, систему облачного детектирования в Лаборатории Касперского, систему расчёта валютных цен в Deutsche Bank. Интересуется тестированием бэкенда и распределённых систем.


    Adam Goucher


    The Mobile Experience Company


    Адам автоматизирует всё, что движется. Что не движется — вначале заставляет двигаться, а потом автоматизирует. Это его собственные слова. Это он оживил Selenium IDE (и с тех пор за это расплачивается). В свободное времени участвует в ро́ллер де́рби (контактный командный вид спорта на роликовых коньках) как судья.


    Доклад: The "C0MEDIES" of testing in the cloud age


    Тестирование приложения, живущего в облаке, требует тех же самых приёмов и техник, которые используются и на своём собственном железе. Но не выйдет ограничиться только обычной пользовательской функциональностью: придётся проверить ещё и всё то, что делает «облачный» софт «облачным». На самом деле, можно доказать, что обеспечение хорошей работы «облачности» является чуть ли не более важным, чем пользовательская функциональность, поскольку изменение архитектуры для починки облачных решений совершенно точно приводят к полному перетестированию всего остального. «C0MEDIES» — аббревиатура для списка различных принципов и техник, которые позволяют справиться с этими проблемами и о которых будет рассказано в этом докладе.


    Артём Ерошенко


    Независимый консультант


    Артём более 8 лет занимается автоматизацией тестирования веб-приложений. За это время работал в разных командах и в разных ролях: автоматизатор тестирования, менеджер команды разработки инструментов тестирования, руководитель группы автоматизации тестирования. Артём имеет большой опыт работы с популярными инструментами (Selenium, HtmlElements, Allure, Jenkins). Программирует в основном на Java и Groovy.


    Michael Palotas


    Element34 Solutions GmbH



    Основатель и CEO компании Element34 Solutions. Один из разработчиков Selenium Grid. Бывший директор Quality Engineering в eBay. Более 10 лет Майкл формировал подход к тестированию в компании eBay International, находясь в должности главы Quality Engineering. Он был руководителем, ответственным за трансформацию eBay International из бездны ватерфолла в очень гибкую организацию, использующую новые пути и подходы, особенно в области инженерных практик. До того, как присоединиться к eBay, Майкл занимал ведущие должности в таких компаниях, как Ericsson, Nortel Networks и Intel.


    Доклад: Enterprise Automation with Selenium and why it has very little to do with Selenium


    Поскольку Selenium становится стандартом W3C, всё больше и больше организаций начинают использовать его как основной инструмент автоматизации тестирования. Большинство команд фокусируется на написании тестов и борьбе с проблемами с помощью самого Selenium. Тем не менее, по нашему опыту, Selenium — это наименьшая проблема при создании с нуля решения для тестирования, пригодного для использования в enterprise-проектах. В этом докладе будет рассматриваться множество реальных практических примеров того, как автоматизация тестирования с помощью Selenium в конце концов превращается в разработку проекта по созданию большого программного продукта. Нужно с самого начала понимать, что это именно вот такой программный проект, и вести его соответственно. Доклад покажет основные проблемы, не позволяющие командам строить расширяемые и надежные решения на основе инструментов Selenium. Также мы увидим, как можно успешно применять принципы lean в создании подобного решения на основе Selenium.




    Julian Harty


    Джулиан — независимый консультант в области мобильных технологий. Сейчас он вместе с Программным комитетом работает над содержанием и анонсом своего доклада. Более подробная информация будет в следующих статьях о программе Heisenbug 2018 Piter.


    Никита Макаров


    Одноклассники


    Никита работал в аутсорсинге и продуктовых компаниях. Занимался автоматизацией встраиваемых операционных систем на базе Linux, комплексных VPN-решений для бизнеса, программно-аппаратных комплексов. С января 2012 года является руководителем группы автоматизации тестирования в проекте Одноклассники.


    Виталий Фридман


    Smashing Magazine


    Виталий любит делать хороший, красивый контент — и не сдаётся, когда возникают трудности. Он вырос в Минске, а обучался Computer Science и математике в Германии, где и обнаружил в себе страсть к книгопечатанию, писательству и дизайну. Отработав дизайнером-фрилансером в течение шести лет, он стал сооснователем Smashing Magazine — одного из наиболее больших и влиятельных онлайн-журналов о веб-дизайне и веб-разработке. Виталий написал своими руками, был соавтором и редактором обеих книг Smashing Books (книга раз, книга два). В данный момент Виталий работает главным редактором Smashing Magazine в немецком городе Фрайбург.


    Доклад: Wild West testing: smart responsive interface design patterns


    В этом докладе Виталий поговорит о микроскопически точной проверке часто встречающихся элементов интерфейса. О том, какие искать проблемы в responsive UI и какие они вообще бывают. Доклад будет об идеальных компонентах типа accordion, выборе даты и времени, компонентах сравнения фич продукта, расчёта стоимости страховки, конфигуратора комплектации автомобиля и других подобных вещах. Остерегайтесь: однажды изученное на этом докладе забыть назад не получится :-)




    Всеволод Брекелов


    Grid Dynamics


    Всеволод более 5 лет в тестировании программного обеспечения/автоматизации тестирования. Последний год работает Full Stack Developer/Tech Lead и имеет опыт построения автоматизации тестирования с нуля для mobile, desktop и веб-проектов (в основном для финансовых компаний). Любит участвовать в хакатонах и работать с умными коллегами. Провёл много собеседований (более 200, и уже перестал считать) для инженеров по автоматизации тестирования, разработчиков, аналитиков. Последние несколько лет работает в компании Grid Dynamics. Сейчас проживает в Калифорнии, работая по контракту в Google.


    Станислав Башкирцев


    EPAM Systems


    Станислав занимается разработкой с 2008-го, в основном на Java. Всегда тяготел к тестированию и качеству кода. В какой-то момент начал увлекаться оптимизацией процессов и в 2013 переключился на CI/CD активности. Никогда полностью не был доволен работой AQA и поэтому в 2015 ушёл в тестирование, чтобы доказать, что всё можно делать намного лучше. Доказал и ушёл в бизнес-анализ.


    Доклад: Слоеные тесты


    Мы слышим ото всюду о том, как важно строить пирамиды, чтобы тестирование стало быстрым, простым, надежным. Но почему никто этого не делает? Мы обсудим:


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

    Доклад ориентирован на разработчиков и руководителей проектов.


    Если вас заинтересовали эти (и будущие) доклады — как всегда, билеты на Heisenbug можно купить на официальном сайте конференции, пока не закончился январь — по специальной январской стоимости. Дополнительные вопросы можно задавать в комментариях к этой статье или писать в личные сообщения — мы всегда всё читаем и отвечаем.


    Ждём вас на Heisenbug 2018 Piter!

    JUG Ru Group
    Конференции для программистов и сочувствующих. 18+

    Комментарии 5

      +3
      Не понял, о чём статья, но написано хорошо :)
        +2
        — о том, как вручную выслать кусок картинки (на пхп)
          0
          Сорри, сейчас в Новосибе -30 температура, простыл. Сейчас немного проспался, перечитал, подписываюсь под каждым словом: «Не понял, о чём статья, но написано хорошо» :)
            +2
            Это не упрёк, если что, просто делюсь впечатлением.
            -30 — бррр, холодно даже просто читать об этом. Поправляйтесь! И пишите ещё :)
          +2


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

          Спасибо за укол энивей, всегда полезно =)

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

          Самое читаемое