• Бенчмарки для веб-сайтов: 4 бесплатных инструмента

      Расскажем об утилитах, которые помогут оценить производительность сайта и повысить его безопасность. В списке есть как новые инструменты — например, Fast or Slow от авторов плагина Wordfence для WordPress, так и проверенные временем системы вроде Mozilla Observatory.

      Больше бенчмарков, в том числе для серверов Linux.

      Читать дальше →
    • Дизайн-токены способны на большее: создаем единый источник информации о компонентах UI

      • Перевод

      Термином «дизайн-система» в IT давно никого не удивишь. Компании систематизируют дизайн продуктов, придумывая свои или используя чужие инструменты для управления стилями, паттернами и компонентами. 


      Badoo не является исключением: с помощью нашей дизайн-системы Cosmos мы поддерживаем общие принципы дизайна для четырёх приложений, работающих на четырёх платформах. 


      image


      Одна из первых и основных вещей, с которой начинается работа по созданию дизайн-системы, — это токены (или переменные), которые определяют значения разных сущностей системы. 


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


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


      Я хочу поделиться адаптированным переводом статьи моего коллеги Кристиано Растелли (Cristiano Rastelli), который несколько лет развивает дизайн-систему Cosmos. На примере своего опыта он показывает, как работать с токенами более эффективно: добавлять метаданные и использовать их для описания свойств компонентов. 


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

      Читать дальше →
    • PM2: подходим к вопросу процесс-менеджмента с умом

      Буквально пару часов назад у меня завязался спор на тему того, что Node.JS слишком медленная для крупных проектов и ей стоит предпочесть Golang, Rust, PHP, etc. Основным аргументом противоположной стороны в этом споре был факт однопоточности JavaScript. Якобы при разработке приложения производительность просто упрётся в эту однопоточность и ничего сделать уже нельзя — только переписать на каком-то другом языке. Однако дела с этим в NodeJS обстоят немного лучше, чем кажется на первый взгляд. Перед тем, как мы углубимся в эту тему хочу заявить, что уважаю право каждого разработчика использовать тот язык программирования, который пришёлся ему по душе и который он считает предпочтительным в той или иной задаче.

      Сделав поиск по ключевому слову «PM2» на Хабре я не нашёл ни одной статьи, посвящённой этому process-менеджеру. Лишь одиночные упоминания в статьях других пользователей. Я загорелся (сильно сказано) идеей наверстать упущенное и пролить свет на этот тёмный уголок разработки backend на Node.JS (о котором многие знают, да, я в курсе). Всех заинтересовавшихся прошу под кат.

      Читать дальше →
    • Простой зомби-шутер на Unity

      • Tutorial
      Всем привет! Скоро стартуют занятия в первой группе курса «Разработчик игр на Unity». В преддверии начала курса прошел открытый урок по созданию зомби-шутера на Unity. Вебинар провёл Николай Запольнов, Senior Game Developer из Rovio Entertainment Corporation. Он также написал подробную статью, которую мы и предлагаем вашему вниманию.



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



      Дисклеймер №1: данная статья рассчитана на новичков. Если вы собаку съели в Unity, то она может показаться вам скучной.

      Дисклеймер №2: для прочтения этой статьи вам потребуется хотя-бы базовое знание программирования. Как минимум, слова «класс» и «метод» не должны вас пугать.

      Осторожно, под катом трафик!
      Читать дальше →
    • 15 лучших и крупнейших библиотек иконок

      • Перевод


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

      Сразу уточняем: это не 15 самых лучших библиотек, а 15 из лучших. Разумеется, есть и другие, не менее замечательные, о которых я не упомянул или не знаю.
      И, нет, это не рейтинг — список маркированный, а не нумерованный.
      Читать дальше →
    • Основы Elasticsearch

        Elasticsearch — поисковый движок с json rest api, использующий Lucene и написанный на Java. Описание всех преимуществ этого движка доступно на официальном сайте. Далее по тексту будем называть Elasticsearch как ES.


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


        В этой статье я расскажу про основы ES на примере индексации постов блога. Покажу как фильтровать, сортировать и искать документы.

        Читать дальше →
      • NoVerify: линтер для PHP от Команды ВКонтакте теперь в открытом доступе



          Расскажу, как нам удалось написать линтер, который получился достаточно быстрым, чтобы проверять изменения во время каждого git push и делать это за 5−10 секунд при кодовой базе в 5 миллионов строк на PHP. Мы назвали его NoVerify.

          NoVerify поддерживает базовые вещи вроде перехода к определению и поиску использований и умеет работать в режиме Language Server. В первую очередь наш инструмент ориентирован на поиск потенциальных ошибок, но умеет проверять и стилистику. Сегодня его исходные коды появились в open-source на GitHub. Ищите ссылку в конце статьи.
          Читать дальше →
        • Гайд для фрилансеров: самые частые вопросы по работе ИП

            В ноябре мы задумали собрать большой пост о том, как жить, если ты индивидуальный предприниматель (ИП). Мы попросили пользователей Хабра набросать нам вопросы из серии «хотели знать, но боялись спросить». Получился отличный список.

            Ответить на вопросы мы предложили нашим друзям из Тинькофф Бизнеса — они сами регистрируют ИП и знают все юридические тонкости. Главный бонус: в течение недели в комментариях будет дежурить mat-ulyana, которая ответит на любые дополнительные вопросы.

            image
            Читать дальше →
          • Тысяча и один UI-баг, или Как помочь разработчику избегать типовых ошибок в UI

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



              За четыре года работы в Badoo из более чем тысячи багов, которые я встретила, примерно 20% были связаны с UI и UX. Треть из них незначительны в масштабах продукта, но тем не менее требуют ресурсов на обработку, ведь они напрямую влияют на лояльность пользователя. Такие баги реально отловить только вручную. Плюс ко всему они часто встречаются только на определённых устройствах в определённых условиях.

              Можно ли предотвратить эти баги ещё на этапе проектирования новой функциональности и избежать переработки интерфейсов после тестирования? Мой ответ — да! 

              В этой статье на примерах из своего опыта я расскажу, как сделать процесс тестирования менее рутинным и перестать заводить одни и те же баги, покажу наиболее распространённые ошибки в разработке интерфейсов мобильных приложений на платформе Android и поясню, откуда они чаще всего берутся. Статья написана по мотивам моего доклада на конференции Heisenbug, видео можно посмотреть здесь.
              Читать дальше →
              • +35
              • 13k
              • 2
            • Анализ нагрузки на процессор, создаваемой отдельными JavaScript-компонентами

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


              Читать дальше →
              • +29
              • 9,4k
              • 5
            • О чем молчит EXPLAIN, и как его разговорить

              Классический вопрос, с которым разработчик приходит к своему DBA или владелец бизнеса — к консультанту по PostgreSQL, почти всегда звучит одинаково: «Почему запросы выполняются на базе так долго?»

              Традиционный набор причин:

              • неэффективный алгоритм
                когда вы решили сделать JOIN нескольких CTE по паре десятков тысяч записей
              • неактуальная статистика
                если фактическое распределение данных в таблице уже сильно отличается от собранной ANALYZE'ом в последний раз
              • «затык» по ресурсам
                и уже не хватает выделенных вычислительных мощностей CPU, постоянно прокачиваются гигабайты памяти или диск не успевает за всеми «хотелками» БД
              • блокировки от конкурирующих процессов

              И если блокировки достаточно сложны в поимке и анализе, то для всего остального нам достаточно плана запроса, который можно получить с помощью оператора EXPLAIN (лучше, конечно, сразу EXPLAIN (ANALYZE, BUFFERS) ...) или модуля auto_explain.

              Но, как сказано в той же документации,
              «Понимание плана — это искусство, и чтобы овладеть им, нужен определённый опыт, …»
              Но можно обойтись и без него, если воспользоваться подходящим инструментом!
              Читать дальше →
            • Быстрый фильтр каталога для интернет-магазинов на основе битмапов Redis



                Не секрет, что каждый интернет-магазин должен помогать пользователям найти то, что им нужно. Особенно, если товаров у вас много (> 10). На помощь приходит каталогизация товаров, но разбить товары по категориям — полдела. Товары внутри категории нужно уметь фильтровать по их свойствам. Особенно, если товары у вас разношёрстные, например, одежда, электроника, ювелирные изделия и т.д. И тут любой разработчик, пишущий свой e-commerce продукт, сталкивается с неприятными реалиями жизни: у товаров могут быть совершенно разные свойства, у некоторых товаров они могут отсутствовать, некоторые товары по одному свойству могут попадать под разные значения (цвет платья то ли синий, то ли голубой, соответственно, неплохо бы его показать и по синему и по голубому цвету). Проще говоря, у вас EAV. Бывает ещё, что EAV вам диагностирует заказчик ближе к концу разработки, а то и просит добавить фильтр по динамическим свойствам уже после релиза.
                Читать дальше →
              • Пишем расширения для PHP 7 на C++

                Мне приходилось писать расширения для того, чтобы воспользоваться функциями C++ библиотек в коде PHP. Ещё, одно тяжёлое расширение портировал с 5й версии на 7ю.

                Если загуглить документацию на тему написания расширений для PHP, то, в основном, это будут тексты до 2014 года, актуальные для версии 5. Сам сайт php.net предоставляет обрывчатые и устаревшие сведения, а то, что удаётся найти в их wiki, опять про 5ю версию. Максимум, что удалось найти на офф сайте, это скудный ман по миграции уже написанных расширений.

                В итоге, единственным более или менее понятным маном по написанию расширений для меня оказался исходный код PHP, которым я и руководствовался при написании и миграции расширений.
                Читать дальше →
                • +40
                • 17,4k
                • 7
              • Настройка поиска Sphinx для интернет-магазина

                Информации по Sphinx не так много, как хотелось бы. Лишняя статья не помешает.
                Первые шаги в освоении Sphinx мне помогли сделать статьи Создание ознакомительного поискового движка на Sphinx + php и Пример Sphinx поиска на реальном проекте — магазин автозапчастей Tecdoc Советую начать с них.


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


                • Словоформы. Выдача по «винты» и «винтов» должна быть одинаковой.
                • Поиск по фрагменту слова.
                • Поиск нецелых чисел. Разделитель точка и запятая.
                • Буква Ё
                • Типичные ошибки. Например «Аммортизатор».
                • Синонимы. Регулятор и ESC.
                • Язык. mAh и мАч, В и V, AAA латиницей и кириллицей.
                • Слово из букв и цифр. 10х15х4, 6000mAh
                Читать дальше →
                • +16
                • 13,3k
                • 8
              • Наглядное пособие по устройству микросхемы

                • Перевод


                Автора всегда восхищала работа микросхем. Как пластина, некоторые участки которой преднамеренно загрязнены, управляет электронами? И тут внезапно кто-то придумывает наглядное пособие, которое делает принцип действия микросхемы максимально понятным. Именно это произошло на ярмарке самодельщиков в области залива Сан-Франциско.
                Читать дальше →
              • Favicons, Touch Icons, Tile Icons и т. д. Что выбрать?

                • Перевод
                От переводчика.
                Это перевод статьи Филипа Бернарда с сайта css-tricks.com. Часть статьи, содержащую описание работы с созданным им сервисом, я позволил себе опустить. Если вы найдете ошибки, просьба сообщить о них в личном сообщении.

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


                Фавикон был представлен в 1999 году, в Internet Explorer 5 (источник) и стандартизирован W3C несколько месяцев спустя. Это была маленькая иконка, представляющая сайт.



                С тех пор большинство настольных браузеров следуют тенденции и используют фавикон тем или иным способом. Это очень просто, не так ли? Создать маленькую картинку и добавить в любой интернет-проект, чтобы сделать его «завершённым». Ничего сложного.
                Или нет?
              • Как создавать документы Microsoft Office при помощи PHP

                • Перевод
                Есть два основных способа построить Excel, Word, и PowerPoint используя PHP. Первый — используя библиотеку COM (только под Windows сервером) и другой — используя более стандартизированные форматы, такие как CSV и HTML.
                Читать дальше →
              • Потенциальные атаки на HTTPS и как от них защититься

                  Половина сайтов использует HTTPS, и их число стабильно увеличивается. Протокол сокращает риск перехвата трафика, но не исключает попытки атак как таковые. О некоторых их них — POODLE, BEAST, DROWN и других — и способах защиты, мы расскажем в нашем материале.

                  Читать дальше →
                  • +18
                  • 12,8k
                  • 3
                • Машинное обучение для всех, кто изучал математику в восьмом классе

                  Привет, Хабр! Представляю вашему вниманию перевод статьи "Machine Learning for Anyone Who Took Math in Eighth Grade" автора Kyle Gallatin.


                  Машинное обучение


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


                  Между этими крайностями существует менее публикуемая область, где, я думаю, литература должна немного активизироваться. Новости о «прорывах», по типу этого глупого робота София, поднимают хайп вокруг искусственного интеллекта и может показаться, что это чем-то похоже на человеческое сознание, в то время как в действительности София не умнее, чем SmarterChild у AOL Instant Messenger.


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

                  Читать дальше →
                • Я прочитал 80 резюме, у меня есть вопросы

                  У нас не очень простое собеседование. Нужно пройти 3 шага:

                  1. Прислать резюме, программист его посмотрит, лайкнет если всё хорошо. Рекрутер позвонит, задаст несколько вопросов.
                  2. Встретиться или созвониться с нами. Узнаем, какой вы специалист.
                  3. Прийти на тестовый день. Познакомиться с командой и поработать вместе. Пообщаться с техническим директором, обсудить зарплату и получить оффер.


                  Я три месяца был тем программистом, который оценивает резюме. Мне есть о чём с вами поговорить.
                  Читать дальше →