• Девять граблей Elasticsearch, на которые я наступил

      Автор иллюстрации — Anton Gudim


      «Подготовленный человек тоже наступает на грабли.
      Но с другой стороны — там, где ручка.»


      Elasticsearch — прекрасный инструмент, но каждый инструмент требует не только настройки и ухода, но и внимания к мелочам. Некоторые — незначительны и лежат на поверхности, а другие спрятаны так глубоко, что на поиск уйдет не один день, не один десяток кружек кофе и не один километр нервов. В этой статье расскажу про девять замечательных граблей в настройке эластика, на которые я наступил.
      Давайте приступим
    • Ещё 5 дерзких тренировочных проектов для разработчика (Layer, Squoosh, Калькулятор, Website Crawler, Music Player )

      • Translation
      image


      Продолжаем серию проектов для тренировки.


      Читать дальше →
    • Лучшие практики и инструменты при разработке iOS приложений

      • Translation
      Разрабатывая мобильные приложения, мне не раз приходилось создавать проекты с нуля. При этом я и моя команда всегда тратили много времени на основную настройку проекта, такие как интеграция сторонних инструментов, настройка структуры проекта, написание базовых классов, интеграция внешних библиотек и т.д.

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

      Каждый инструмент или подход, добавленный в шаблон, заслуживают отдельной статьи, но я хотел бы попытаться суммировать каждый пункт и дать краткое объяснение того, почему я включил их в данную статью.
      Читать дальше →
    • Docker + php-fpm + PhpStorm + Xdebug

      • Tutorial
      Не так давно тимлид нашей команды сказал: ребята я хочу, чтобы у всех была одинаковая среда разработки для наших боевых проектов + мы должны уметь дебажить всё — и web приложения, и api запросы, и консольные скрипты, чтобы экономить свои нервы и время. И поможет нам в этом docker.

      Сказано — сделано. Подробности под катом.
      Читать дальше →
    • Обновление строк на лету в мобильных приложениях: часть 1



        Введение


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

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

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

        О локализации веб-приложений мы уже писали здесь.
        Читать дальше →
        • +52
        • 12.2k
        • 7
      • Трассировка сервисов, OpenTracing и Jaeger

          image

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

          Для минимизации ручного труда мы решили воспользоваться одним из инструментов трассировки. О том, как и для чего можно использовать трассировку и как это делали мы, и пойдет речь в этой статье.
          Читать дальше →
          • +29
          • 25.4k
          • 7
        • Карта ДТП

          image

          Расскажу вам о проекте “Карта ДТП” – интерактивной карте аварий в России. Карта упрощает анализ ДТП и помогает найти реальные причины происшествий. Как пришла идея, где брали данные и зачем открыли исходный код.

          За 2018 год в ДТП на дорогах России погибли 19088 человек


          Читать дальше →
        • Эволюция поиска — как купить пианино в три клика

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


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


            Читать дальше →
          • Time management без жестких расписаний, опыт разработки мобильного приложения

            Планирование времени, контроль, повышение эффективности. Тема заезженная, но осмелюсь предложить ещё одно решение.


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

            У меня так: собрался, настроился, принялся за работу и тут — «то тюлень позвонит, то олень». Под конец дня вообще бывает ощущение что непонятно чем занимался и что в итоге.

            Однажды возникла идея: «вот бы было классно, позвонили тебе и ты как в шахматной партии
            нажал на кнопку и
          • На пути к правильным SQL транзакциям (Часть 1)

            • Tutorial


            Мне часто приходилось сталкиваться с тем, что люди прекрасно понимают, что такое транзакции в базе данных и для чего они нужны, но при этом не всегда умеют ими правильно пользоваться. Безусловно, для достижения 80-го уровня сакрального знания нужно иметь не один год опыта и прочесть множество толстенных книг по SQL. Поэтому в этой статье я даже не буду пытаться описать всё, что может быть связано с транзакциями в MS SQL. Я хочу затронуть один простой, но очень важный вопрос, который разработчики часто упускают из вида – уровни изоляции транзакций.
            Несмотря на то, что тема очень проста, во многих источниках она освящается плохо – информации либо очень мало, либо очень много. Т.е. прочитав 5-6 кратких теоретических определений невозможно их применить на практике. Для уверенного понимания предмета статьи нужно обращаться к специализированной литературе, но там информации на столько много, что далеко не каждый может уделить необходимое время для её усваивания.
            Сегодня я хочу поделиться своим простым рецептом, который помог мне раз и на всегда запомнить особенности уровней изоляции транзакций и по сей день помогает без проблем принимать взвешенные решения о выборе необходимого уровня.
            Читать дальше →
            • +22
            • 102k
            • 6
          • Сопоставление товаров при помощи Elasticsearch для сервиса мониторинга цен конкурентов

            В далеком 2017 году, возникла идея разработать сервис мониторинга цен конкурентов. Его отличительной фишкой от остальных подобных сервисов должна была стать функция ежесуточного автоматического сопоставления товаров. Видимо из — за почти полного отсутствия информации о том, как это делать, сервисы по мониторингу цен предлагали лишь возможность ручного сопоставления силами самих клиентов, либо операторов сервиса с ценой от 0.2 до 1 рубля за факт сопоставления. Реальная же ситуация с, например, 10 сайтами и 20 000 товаров на каждом, неминуемо требует автоматизации процесса, так как ручное сопоставление уже слишком долгое и дорогое.

            Ниже будет описан подход к автоматическому сопоставлению на примере ряда конкурирующих аптек с использованием технологии Elaticsearch.
            Читать дальше →
          • Что такое dinghy или как ускорить docker



            Однажды я заглянул на Хабр, чтобы посмотреть как разработчики используют динги (dinghy) и вообще ускоряют работу докера на маке. На моё удивление по запросу динги я нашёл ровно ноль статей. Было бы нечестно не упомянуть, что тот же запрос вывел 4 комментария. С другой стороны этот факт не изменил картины в целом.

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

            • Производительность докера на osx
            • Запуск нескольких контейнеров, которые работают на порте 80

            Под катом более подробное описание вышеперечисленных проблем, а так же способы их решения.
            Читать дальше →
          • Пошаговое создание бандла для Symfony 4

            Около года назад наша компания взяла курс на разделение огромного монолита на Magento 1 на микросервисы. Как основу выбрали только вышедшую в релиз Symfony 4. За это время я разработал несколько проектов на этом фреймворке, но особо интересной мне показалась разработка бандлов, переиспользуемых компонентов для Symfony. Под катом пошаговое руководство по разработке HealthCheck бандла для получения статуса/здоровья микросервиса под Syfmony 4.1, в котором я постарался затронуть наиболее интересные и сложные (для меня когда-то) моменты.

            Читать дальше →
          • Малюсенький CI вашего Symfony проекта за 2 минуты

              Без воды о том, как за 10 минут сделать:

              1. Проверяем ваш composer.json на серьезные и несерьезные ошибки, вроде неоптимального autoload
              2. Проверяем ваш composer.lock на security уязвимости в пакетах
              3. Проверяем вашу базу данных, что ничего не забыли
              4. Проверяем ваши YAML файлы
              5. Проверяем Coding Style по Symfony
              Читать дальше →
              • +20
              • 9.6k
              • 7
            • Курс молодого бойца PostgreSQL

              • Tutorial


              Хочу поделиться полезными приемами работы с PostgreSQL (другие СУБД имеют схожий функционал, но могут иметь иной синтаксис).

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

              Данный материал будет полезен тем, кто полностью освоил базовые навыки SQL и желает учиться дальше. Советую выполнять и экспериментировать с примерами в pgAdmin'e, я сделал все SQL-запросы выполнимыми без разворачивания каких-либо дампов.

              Поехали!
              Читать дальше →
            • Docker для Symfony 4 — от локалки до production

              Предистория


              Одним прекрасным днём мне понадобилось развернуть среду разработки для своего проекта. Vagrant уже порядком поднадоел и хотелось иметь единую среду разработки для всех участников проекта которая была бы идентичной production серверу. Соответственно наслушавшись информации про хипстерский docker, я решил начать с ним разбираться. Далее я постараюсь максимально подробно описать все шаги начиная от установки докера на локалке вплоть до разворачивания продуктива на KVM.

              Исходный стек технологий:

              — Docker
              — Symfony 4
              — nginx
              — php-fpm
              — postgresql
              — elasticsearch
              — rabbitmq
              — jenkins

              Железо:

              — ноутбук под ОС Ubuntu 16.04
              — продакшн сервер на хостинге KVM

              Почему кроме технологического стека я перечислил ещё и стек железа?

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

              Первый и наверно самый важный аспект при начале работы с докером — это операционная система вашего ноутбука. Проще всего работать с докером именно на linux системах. Если вы работаете на Windows или Mac то у вас 100 % будут некоторые сложности, но эти сложности не будут являться критическими и при желании «нагуглить» как это исправляется не составит никаких проблем.

              Второй вопрос — это хостинг. Зачем нужен Hosting именно с типом виртуализации KVM? Причина в том, что виртуализация VPS разительно отличается от KVM и установить сам docker на VPS у вас попросту не выйдет, так как VPS распределяет ресурсы сервера динамически.

              Подитог: для самого быстрого старта на докере резоннее всего выбирать Ubuntu в качестве локальной операционки и KVM хостинг (либо собственный сервер). Далее рассказ пойдёт опираясь именно на эти две составляющие.
              Читать дальше →
            • Несколько советов по организации Python-приложения на сервере


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


                Я работаю, в основном, с Python/Django стеком, поэтому все примеры будут, в первую очередь, применительно к этому набору. Также ключевые технологии: Ubuntu (17.10), Python3 (3.6).


                Содержание:


                • Логи (logrotate)
                • Демоны (systemd)
                • локальные настройки
                Читать дальше →
              • IP Tool — База данных IP адресов

                Вступление


                Долгое время я пользовался библиотекой SxGeo от zapimir. И до недавнего времени меня всё устраивало. Устраивало до тех пор, пока не было необходимости добавлять в БД свои данные.


                Не найдя в интернете упаковщика данных от SxGeo и не найдя в себе силы требовать нужный мне функционал от разработчика, было принято решение писать свой костыль. Хотя на это решение повлиял и ещё 2 недостатка используемой библиотеки:


                • ограничение по количеству справочников;
                • невозможность узнать интервал адресов, в который входит искомый адрес;
                • отсутствие пакета в packagist.

                Собственно, делюсь с вами своей разработкой.

                Читать дальше →
              • Использование событийной модели в Doctrine 2 + Symfony 3

                  Давайте представим ситуацию: у вас есть заказ в интернет магазине (Entity). Заказ имеет некий статус. При смене статуса заказа необходимо провести кучу сопутствующих действий, например:


                  • сохранить в заказе дату последнего изменения
                  • записать в историю по заказу информацию о смене статуса
                  • отослать письмо / sms клиенту
                  • вызвать метод API службы доставки / платежной системы / партнера и т.д.

                  Возникает вопрос как все это правильно организовать с точки зрения программного кода.
                  Все ниже описанное справедливо для Doctrine 2 и Symfony > 3.1

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

                  • Translation

                  В данной статье я не буду вам рассказывать о больших веб-фреймворках, таких как React, Angular, Vue и т.д… не будет в ней и перечня наиболее популярных текстовых редакторов – Atom, VS Code, Sublime… В данной статье я поделюсь с вами инструментами, которые, по моему мнению, могут сделать рабочий процесс веб-разработчиков более простым и быстрым.

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

                  Ниже представлены различные веб-ресурсы, которые я разбил по группам для большего удобства.
                  Читать дальше →
                  • +16
                  • 35.7k
                  • 6