• Сбалансированная разработка в очень больших командах. Доклад Яндекса

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

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



      — Хочется поговорить про то, как жить в больших командах. Большая команда — это когда людей даже больше, чем в этом зале.
      Читать дальше →
    • Как Badoo добился возможности отдавать 200k фото в секунду



        Современный веб практически немыслим без медиаконтента: смартфоны есть практически у каждой нашей бабушки, все сидят в соцсетях, и простои в обслуживании дорого обходятся компаниям. Вашему вниманию расшифровка рассказа компании Badoo о том, как она организовала отдачу фотографий с помощью аппаратного решения, с какими проблемами производительности столкнулась в процессе, чем они были вызваны, ну и как эти проблемы были решены с помощью софтового решения на основе Nginx, обеспечив при этом отказоустойчивость на всех уровнях (видео). Благодарим авторов рассказа Олега Sannis Ефимова и Александра Дымова, которые поделились своим опытом на конференции Uptime day 4.

        — Начнем с небольшого введения о том, как мы храним и кэшируем фотографии. У нас есть слой, на котором мы их храним, и слой, где мы фотографии кэшируем. При этом, если мы хотим добиваться большого хитрейта и снижать нагрузку на стораджи, нам важно, чтобы каждая фотография отдельного пользователя лежала на одном кэширующем сервере. Иначе нам пришлось бы ставить во столько раз больше дисков, во сколько у нас больше серверов. Хитрейт у нас в районе 99%, то есть мы в 100 раз снижаем нагрузку на наши storage, и для того, чтобы это сделать, еще 10 лет назад, когда все это строилось, у нас было 50 серверов. Соответственно, для того, чтобы эти фотографии отдавать, нам нужно было по сути 50 внешних доменов, которые эти серверы обслуживают.

        Естественно, сразу встал вопрос: а если у нас один сервер упадет, будет недоступен, какую часть трафика мы теряем? Мы посмотрели, что есть на рынке, и решили купить железку, чтобы она решила все наши проблемы. Выбор пал на решение компании F5-network (которая, кстати, не так давно купила NGINX, Inc): BIG-IP Local Traffic Manager.

        Читать дальше →
      • Правила эффективного общения в групповых чатах

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

          Будучи админом и участником многих чатов, я составил эти правила и решил поделиться ими тут для того, чтобы повысить КПД общения и снизить уровень стресса участников.

          Читать правила
        • Как не потерять все полимеры, став руководителем в новой компании

            Новая команда для тимлида — стресс не меньший, чем новый тимлид для команды. «С чего начать, на кого положиться, кому помочь в первую очередь? Как всех запомнить, какие здесь традиции, регламенты, что если я не уложусь в испытательный срок и не заработаю доверие?» Этими вопросами задается любой тимлид на новом месте. Когда Алексей Петров (pifagor_mc) перешел в FunCorp, то также искал ответы. Нашел их и на TeamLead Conf рассказал, как максимально комфортно войти в новую компанию на позицию руководителя в первый или n-й раз. При этом комфортно будет не только вам, но и сотрудникам компании.


            Алексей Петров — QA Head в FunCorp. В 19 лет увлекся тематикой IT благодаря интересу к компьютерным играм. Работает в сфере с 2005 года, а руководит — с 2010. Прошел путь от младшего тестировщика до директора по качеству.
            Читать дальше →
          • Selenium, Selenoid, Selenide, Selendroid… Что все это значит?

              Привет, Хабр!

              В мире автоматизации новичку ориентироваться довольно сложно. Приходится узнавать множество понятий, разбираться в особенностях существующих инструментов. Например, вот: Selenium, Selenide, Selenoid, Selendriod — что это, чем отличается? Да и можно ли их сравнивать?

              Написал статью, чтобы помочь в этом разобраться. Кому интересно, добро пожаловать под кат!


              Читать дальше →
            • Figma — простое решение для дизайнера, сложное решение для верстальщика


                Если вы работаете в области web-разработки, то рано или поздно, вам суждено будет познакомиться с Figma. Смиритесь с этим фактом и начинайте изучать. Я же попробую описать данный продукт, с точки зрения повседневного пользователя.
                Читать дальше →
              • Тяжёлое бремя времени. Доклад Яндекса о типичных ошибках в работе со временем

                  В коде самых разных проектов нередко приходится оперировать временем — например, чтобы завязать логику работы приложения на текущее время у пользователя. Старший разработчик интерфейсов Виктор Хомяков victor-homyakov описал типичные ошибки, которые встречались ему в проектах на языках Java, C# и JavaScript от разных авторов. Перед ними вставали одни и те же задачи: получить текущую дату и время, измерить интервалы или выполнить код асинхронно.



                  — До Яндекса я работал в других продуктовых компаниях. Это не как фрилансер — написал, сдал и забыл. Приходится очень долго работать с одной кодовой базой. И я, собственно, смотрел, читал, писал много кода на разных языках и увидел много чего интересного. В итоге у меня родилась тема этого рассказа.

                  Читать дальше →
                • Алан Кей рекомендует почитать старые и забытые, но важные книги по программированию

                    image

                    Алан Кей — это магистр Йода для ИТишников. Он стоял у истоков создания первого персонального компьютера (Xerox Alto), языка SmallTalk и концепции «объектно-ориентированного программирования». Он уже много высказывался о своем взгляде на образование в сфере Computer Science и советовал книги тем, кто хочет углубить свои познания:


                    Недавно на Quora опять подняли эту тему и обсуждение вышло на первое место на Hacker News. Предлагаю вашему вниманию «новый» список суперстарых и фундаментальных книг по программированию и мышлению программиста от Алана Кея.

                    Lisp 1.5 Programmers Manual

                    by John McCarthy, 1962

                    image

                    Книга — абсолютный чемпион и пожизненный лидер рейтинга всех списков книг от Алана Кея. Этой версии языка уже нет, но книга — великолепна.

                    ещё восемь раритетов:
                    Читать дальше →
                  • Новые лицензии для открытого ПО, кто ими занимается

                      В середине июля появился проект PolyForm. Его авторы разрабатывают новые типы лицензий для открытого ПО. Рассказываем, зачем они нужны и кто из компаний ими уже воспользовался.

                      Читать дальше →
                    • Продуктовая разработка на Go: история одного проекта



                        Всем привет! Меня зовут Максим Рындин, я тимлид двух команд в Gett – Billing и Infrastructure. Хочу рассказать про продуктовую веб-разработку, которую мы в Gett ведем преимущественно на языке Go. Я расскажу, как в 2015-2017 годах мы переходили на этот язык, почему вообще его выбрали, с какими проблемами столкнулись во время перехода и какие решения нашли. А о текущей ситуации расскажу уже в следующей статье.

                        Для тех, кто не знает: Gett — это международный сервис заказа такси, который был основан в Израиле в 2011 году. Сейчас Gett представлен в 4 странах: Израиль, Великобритания, Россия и США. Основные продукты нашей компании — это мобильные приложения для клиентов и водителей, веб-портал для корпоративных клиентов, где можно заказать машину, и еще куча внутренних админок, через которые наши сотрудники настраивают тарифные планы, подключают новых водителей, мониторят случаи мошенничества и многое другое. В конце 2016 года в Москве открылся глобальный офис R&D, который работает в интересах всей компании.
                        Читать дальше →
                      • Правила подготовки макетов в Figma



                          Боль с одним проектом привела нас к решению написать правила работы


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

                          Результатом хождения по граблям между отделами дизайна и разработки стала идея сформулировать правила, высечь их в камне, поместить в pdf файл и раздать всем участникам процесса с директивой «следуй».
                          Читать дальше →
                          • +14
                          • 8.4k
                          • 7
                        • Как оценить производительность Linux-сервера: открытые инструменты для бенчмаркинга

                            Мы в 1cloud.ru подготовили подборку инструментов и скриптов для оценки производительности процессоров, СХД и памяти на Linux-машинах: Iometer, DD, vpsbench, HammerDB и 7-Zip.

                            Другие наши подборки с бенчмарками:


                            Читать дальше →
                            • +10
                            • 5.4k
                            • 7
                          • Аудит и тестирование писем: на что стоит обращать внимание при верстке

                              Привет, Хабр!

                              Код не терпит халатного отношения, будь то сложные алгоритмы обработки данных или верстка email-рассылок.

                              Получив письмо от одного из крупных ритейлеров, наш руководитель отдела верстки заметил, что некоторые элементы располагаются неровно. Профессиональное чутье не позволило просто пойти мимо, и, поскольку магазин не входит в число наших клиентов, он решил проверить его по нашему процессу контроля качества верстки. О результатах и о том, как увидеть проблемы в отображении на стадии разработки рассылки, рассказывает руководитель отдела верстки Retail Rocket Илья Кастерин ikasterin.


                              Читать дальше →
                            • Дети, математика и R

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


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


                                Сразу отмечу, что тема будет интересна далеко не всем. Кому это неактуально — проходите мимо. У кого будут доп. идеи, было бы интересно тоже ознакомиться. Далее будет ряд задачек, которые были позаимствованы с курсов «Меташколы», математика 3-ий класс. Естественно, что сначала задача решается логическими рассуждениями, потом обсуждается способ решения с применением компьютера.


                                Важные дополнения по результатам обсуждений ниже:


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

                                Является продолжением предыдущих публикаций.

                                Читать дальше →
                              • Камень, ножницы, бумага, собеседования, Спок

                                • Translation


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

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

                                В итоге я имею доступ к большому массиву данных о том, как один и тот же пользователь показывает себя на разных собеседованиях. И они оказываются настолько непредсказуемыми, что поневоле задумаешься о том, насколько вообще показательны результаты единственной встречи.
                                Читать дальше →
                              • Мутационное тестирование в PHP: качественное измерение для code coverage

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

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

                                  На Badoo PHP Meetup в марте я рассказывал, как организовать мутационное тестирование для PHP-кода и с какими проблемами можно столкнуться. Видео доступно по ссылке, а за текстовой версией добро пожаловать под кат.


                                  Читать дальше →
                                • Популярные вопросы разработчика о тестировании

                                  Эта статья — не теоретическое руководство по написанию тестов и не how-to по использованию инструментария в определенном стеке, а ряд популярных вопросов, иногда даже у многих не сформировавшихся, на которые я постараюсь дать ответы. Источником этих вопросов служат коллеги, люди с обоих сторон в собеседованиях и знакомые, а ответы будут субъективными, краткими и не исчерпывающими, основанными на чужих материалах и своём опыте. Целевая аудитория статьи – разработчики, которые с определенным успехом пишут или хотя бы пытались писать тесты, но испытывают определенные сложности в их написании.


                                  Я старался не привязываться к конкретному языку, чтобы увеличить охват читающих, однако оговорюсь сразу, что работаю в экосистеме PHP с использованием PHPUnit, и поэтому некоторые мои выводы могут быть неподходящими для других экосистем. При подборе вопросов и написанию я ориентировался на множество докладов и статей и пользовался ими как референсом.


                                  Поводом для написания послужила недавняя статья «PHPUnit. Мокаем Doctrine Entity Manager» от trawl, некоторые проблемы из которой я тоже разберу.


                                  Список вопросов:


                                  • Писать или не писать тесты?
                                  • А если на тесты не выделяют время?
                                  • Виды тестирования, как выбрать?
                                  • Почему мне сложно и долго писать тесты?
                                  • Как тестировать приватные методы?
                                  • Как писать интеграционные тесты? Как тестировать базу?
                                  • Как правильно: интеграционные или функциональные?
                                  • Как быть с внешними зависимостями?
                                  • Как упростить навигацию между тестами и предметом тестирования?
                                  • Должен ли я использовать TDD?
                                  • Что еще можно использовать для улучшения кода?
                                  Читать дальше →
                                  • +12
                                  • 7.7k
                                  • 7
                                • Криптографические атаки: объяснение для смятённых умов

                                  • Translation
                                  При слове «криптография» некоторые вспоминают свой пароль WiFi, зелёный замочек рядом с адресом любимого сайта и то, как трудно залезть в чужую почту. Другие вспоминают череду уязвимостей последних лет с говорящими аббревиатурами (DROWN, FREAK, POODLE...), стильными логотипами и предупреждением срочно обновить браузер.

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

                                  За последние годы коллекция криптографических атак превратилась в зоопарк кричащих логотипов, набитых формулами научных статей и породила общее мрачное ощущение, что всё сломано. Но на самом деле многие из атак основаны на нескольких общих принципах, а бесконечные страницы формул часто сводятся к простым для понимания идеям.
                                  Читать дальше →
                                • Web-геосервисы. Обзор современных решений



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

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

                                    Также рассчитываю на участие комментаторов — если заметите в обзоре неточность в описании, отсутствие вашего хорошего сервиса или вам просто есть что добавить к уже написанному — пишите в комментариях, я буду собирать всё в основной текст, чтобы на будущее всегда иметь под рукой хороший список инструментов на все случаи жизни.
                                    Читать дальше →
                                  • Строим систему распознавания лиц на основе Golang и OpenCV

                                    • Translation

                                    OpenCV — библиотека, разработанная для проектов по компьютерному зрению. Ей уже около 20 лет. Я использовал ее еще в колледже и до сих пор применяю для своих проектов на C++ и Python, поскольку она имеет неплохую поддержку этих языков.

                                    Но когда я начал изучать и использовать Go, мне стало интересно, можно ли применить OpenCV для работы с этим языком. В то время уже существовали примеры и туториалы по интеграции, но мне показалось, что они слишком сложные. Чуть позже мне в руки попался враппер, созданный командой The Hybrid Group. В этой статье я покажу, как начать с GoCV, разработав простую систему распознавания лиц с каскадами Хаара (Haar Cascades).
                                    Читать дальше →
                                    • +17
                                    • 6.3k
                                    • 3