• Где живут ваши объявления?

      image

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

      Начнем с небольшой истории о том, что проект представляет из себя сегодня, чем занимается команда инженеров, и что мы планируем делать в ближайшем будущем. Еще мы собрали в этом посте множество ссылок на уже опубликованные материалы, доклады и презентации нашей команды, которыми давно хотели поделиться. Хотите знать, где живут ваши объявления? Добро пожаловать под кат!
      Читать дальше →
    • Генетический алгоритм: боремся с преждевременной сходимостью

        В предыдущем очерке (Выбор размера популяции для генетического алгоритма) был определен минимальный размер популяции необходимый для работоспособности генетического алгоритма:
        N = 1 + LOG2(1/(1-P1^(1/L))), где
        P1 — требуемая вероятность того, что случайный набор хромосом будет содержать все необходимые элементы для каждого локуса;
        L — длина хромосомы.

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

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

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

        • Из RSS

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

        Полюбуйтесь на бухту Золотой Рог во Владивостоке. Посмотрите на бескрайние просторы Северной Двины в Архангельске и могучего Амура в Хабаровске. Оцените контраст между прекрасным Вологодским кремлем и промышленными пейзажами Череповца. Обязательно посетите древние монастыри и храмы Великого Новгорода и Пскова, а еще загляните в симпатичные приволжские Чебоксары. Не забудьте заглянуть в знаменитые Спасо-Прилуцкий, Юрьев, Хутынский и Вяжищенский монастыри, а также в храмовый комплекс Заостровья.

        Гуляйте и просвещайтесь!

        С уважением, команда Яндекс.Карт

        .
      • Паять просто (комикс)

          Буквально неделю назад ребята из MightyOhm выпустили 8ми страничный комикс об азах пайки. Он понравился мне тем, что не смотря на свой формат и объём, в мелких деталях объясняет основные принципы этого процесса, которые совсем не очевидны для людей ни разу не державших в руках паяльник (как показывает практика, для многих державших тоже).

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

          Если вы давно хотели научиться паять сами, или планируете научить этому своих детей, то все необходимые ссылки под катом.
          Читать дальше →
        • О стандартах документации

            Документация – такая штука, к которой мало кто питает тёплые чувства: скучно, занудно, однообразно. И, тем не менее, иногда не возникает сомнений в её необходимости: ведь кому-то после вас этим пользоваться или, тем паче, модифицировать. И тогда появляется вопрос: как сделать документацию правильно?

            Существует тьма статей на тему «как писать документацию», но если вы решили взяться за неё в первый раз, то в новой для вас области не сразу понятно, дело ли пишет автор, или отсебятину выдумывает.

            Для того чтобы сформировать своё мнение без перелопачивания статей, можно пойти двумя путями: довериться некому авторитету или посмотреть в стандарты – уж там-то с наибольшей вероятностью проблему обдумали со всех сторон.

            Читать дальше →
          • Визуализация графов. Метод связывания ребер

              Иногда полезно представить граф в графической форме, так чтобы была видна структура. Можно привести десятки примеров, где это может пригодиться: визуализация иерархии классов и пакетов исходного кода какой-нибудь программы, визуализация социального графа (тот же Twitter или Facebook) или графа цитирования (какие публикации на кого ссылаются) и т.д. Но вот незадача: количество ребер в графе зачастую настолько велико, что нарисованный граф просто невозможно разобрать. Взгляните на эту картинку:



              Это граф зависимостей некой программной системы. Он представляет собой дерево разбиения на пакеты (серые шарики — пакеты, белые — классы), на которое поверх наложены ребра зависимости одних классов от других. Чтобы не рисовать стрелки направления, ребра нарисованы в виде градиентных линий, где зеленый — это начало, а красный — конец ребра. Как видите, граф настолько визуально перегружен, что архитектуру программы невозможно проследить.
              Под катом описание метода, решающего эту проблему.
              Читать дальше →
            • Profiling PHP Applications With xdebug

              • Translation
              Добро пожаловать в третью статью о xdebug. Уже сейчас вы должны были попробовать xdebug, если нет, сделайте это сегодня ;-).
              В первой статье рассказывалось о том, как установить и настроить xdebug, описывались некоторые простейшие возможности, такие как улучшение вывода функции var_dump() или вывод трассировки стека вызовов при получении сообщения об ошибке. Во второй части мы рассмотрели такую возможность xdebug как трассировку. Трассировка содержит все вызовы функций и методов в программе, время запуска, опционально размер памяти, передаваемые и возвращаемые параметры. Лог трассировки может помочь вам понять пути выполнения сложной программы. Вместо того чтобы вставлять отладочный код внутрь программы, вы включаете или выключаете трассировку в тем места где нужно, а потом используете утилиты подобные grep или собственно написанные приложения на PHP для анализа лог файла.
              Читать дальше →
            • Интеграционное тестирование web-приложения с Selenium WebDriver

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

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

                О том, как можно Unit-тестировать JavaScript я писал ранее, сейчас же расскажу о процессе интеграционного тестирования, применяемого в команде.
                Читать дальше →