• Как мы тестируем рекламные технологии Яндекса, и как этому научиться

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

      image

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

      Начнем, конечно же, с рассказа о том, что мы тестируем. В Яндексе есть два рекламных направления: контекстная и медийная реклама.
      Читать дальше →
    • Псевдо ООП в C



        Язык Си не является объектно-ориентированным языком. И значит все что будет описано ниже это костыли и велосипеды.
        ООП включает в себя три столпа: инкапсуляция, наследование, полиморфизм. Ниже я покажу как этих вещей можно добиться в С.
        Читать дальше →
      • Расследование одного взлома или как быстро и просто потратить миллиард

          UPDATE: Всем привет! Сегодня с удивлением узнал от коллег об этой записи. Выяснилось, что мой аккаунт взломали — представители Хабрахабра это подтвердили и восстановили мне доступ и сейчас разбираются, как так получилось. Но я оставляю эту запись как есть, для истории.
          В комментариях уже отметились представители Яндекса: говорят, что уязвимость закрыта, ведётся аудит безопасности софта.

          И, пользуясь случаем, хочу напомнить, что у нас в Badoo уже несколько лет идет программа "Проверь Badoo на прочность" и мы платим за найденные уязвимости.


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

          Описываемый далее случай интересен именно с точки зрения взлома бизнеса, хотя статья больше посвящена взлому в смысле IT.

          Начну с нетехнической части.
          Читать дальше →
        • Комментарий к заметке «Частотный анализ украинского языка»

          Как комментарий к заметке «Частотный анализ украинского языка» [1] излагаются простые наблюдения по частотности пар букв. Предлагается применить разработанную технику к анализу текстов. Основная гипотеза: множество геометрически связанных кластеров символов несут информацию об авторстве и другие важные интегральные данные.

          В частности, мне кажется, что ожидать от разных сообществ носителей языка (форумы и т.д.) одного и того же спектра диграмм кажется не обоснованным.
          Читать дальше →
        • Понимание компьютером текста: действительно ли всё так плохо?

          Совсем недавно на Хабре появился пост, в котором автор уверенно заявляет о том, что компьютер никогда не сможет понимать текст так, как его понимает человек. В доказательство он приводит ряд непосильных для машины задач, делая упор на отсутствие эффективных алгоритмов и невозможность моделирования полноценной системы, в которой были бы учтены все возможные варианты построения текста. Однако действительно ли всё так плохо? Правда ли, что для решения подобных задач нужны невероятные вычислительные мощности? И в каком вообще состоянии находится область обработки текстов на естественных языках?
          Читать дальше →
        • Поддержите российскую команду Imagine Cup

            Некоторое время назад мы публиковали серию статей о проекте oricrafter:
            К сожалению, нам не удалось (не хватило времени \ сил ) описать полностью математическую и программную часть проекта.

            Помогите нам получить приз зрительских симпатий. Пожалуйста, проголосуйте за наш проект: imaginecup.com.

            Подробнее о самом проекте можно узнать на oricrafter.com.
            Пока только на английском.
            В скорейшем времени появится русская версия — следите за изменениями.
            Еще можно полистать блог команды: rusoricrafter.wordpress.com.

            oricrafter oriteam
          • Танго — Операционная система из будущего


              Всем привет. Давно размышлял на тему, а что, если предположить, что все современные операционные системы могли бы быть гораздо лучше. Как бы это было? Как бы они выглядели, и были устроены внутри?
              Примерно, в том же духе размышляет огромное количество людей по поводу будущего устройства нашей планеты. Например, что будет через 10 лет, будем ли мы использовать летающие машины, беспроводную энергетику и откажемся ли мы от бумажных денег. Я решил, что можно таким же образом поразмышлять, об устройстве операционных систем, помечтать о лучшей жизни. Результатом, размышлений стала книга — «Tango — Операционная система из будущего». Буду рад если Вы прочитаете, очень интересно узнать Ваше мнение.

              Сайт
              http://os-tango.com
              Прямые ссылки на файлы (лежат на CDN)
              http://c0006086.cdn2.cloudfiles.rackspacecloud.com/Tango-Os.pdf
              http://c0006086.cdn2.cloudfiles.rackspacecloud.com/Tango-Os.zip
            • Забросить мышь и клавиатуру! Почти стартап из Украины: CrossView


                Сегодня возникло желание поделиться успехом моих земляков из Донецка. Ребята сделали невозможное, ну или почти невозможное. Они взяли то, что лежало на поверхности, приправили духом стартапа и соусом соперничества, что в итоге позволило команде CORE INVADER занять первое место во всеукраинском конкурсе Imagine Cup 2010.
                Читать дальше →
              • XSLT: Идеологические вопросы / проблемы

                  Я знаю иностранный-язык-XSL на уровне «могу читать со словарём». И, скорее всего, больше мне и не надо.
                  Но вот, принципы построения систем XML+XSL я бы поизучал. Мне это нужно для реализации одной идеи + для саморазвития.

                  Наверное, не зная предметной области, у меня не получится сформулировать «правильные и понятные вопросы», но я всё таки попытаюсь. Итак:
                  Читать дальше →
                • Рекомендации для начала карьерного роста

                    По мотивам недавно прошедшей конференции в ЯрГУ 25 марта, на которую пришло уж очень немного народу, решил я написать небольшой мотивирующий пост для студентов и начинающих программистов/IT специалистов. Мою презентацию с доклада можно посмотреть на skydrive. Здесь же я постараюсь вкратце, на сколько это возможно, осветить этот доклад.

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

                    Ну и до нас не раз еще поднимали эту тему. Рекомендую читать и заряжаться всеми этими топиками.
                    Читать дальше →
                  • Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в степень

                      Пусть мы хотим вычислить десятимиллионное число Фибоначчи программой на Python. Функция, использующая тривиальный алгоритм, на моём компьютере будет производить вычисления более 25 минут. Но если применить к функции специальный оптимизирующий декоратор, функция вычислит ответ всего за 18 секунд (в 85 раз быстрее):


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

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


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

                        Творческое мышление


                        Представим задачу стоящую перед творческим мышлением в виде абстрактной двухмерной плоскости, на которой где-то находятся несколько точек приемлемых решений. Перед человеком стоит проблема найти одну из таких точек-решений, но сложность состоит в невозможности перебрать все возможные варианты, поэтому в большинстве случаем на помощь приходит озарение. Классическая схема решения творческой задачи состоит из стадий
                        1) Подготовка — формулирование задачи
                        2) Инкубация — временное отвлечение от задачи
                        3) Озарение — появление интуитивного решения.
                        Читать дальше →
                      • Оригами и расширенная реальность

                          Современные технологии проникли уже почти во все сферы нашей жизни. Люди используют их для облегчения какой-либо своей деятельности, ускорения процессов взаимодействия, как необходимость, данность или приятное дополнение. Естественно, развиваются и сами технологии, среди которых — технологии взаимодействия с пользователем, которые позволяют работать с приложениями не только посредством привычных уже манипуляторов (мышки, клавиатуры и т. д.), а с привлечением веб-камеры, микрофона и др. Технология расширенной реальности используется для того, чтобы дополнять данные, полученные от пользователя (изображение с камеры), данными, полученными в ходе внутренних вычислений. Казалось бы, при чем здесь оригами?
                          Читать дальше →
                        • Международный финал Imagine Cup скоро пройдет в Санкт-Петербурге

                            Этим летом в Санкт-Петербурге пройдут сразу два значимых мероприятия для IT-студентов: финал чемпионата мира по программированию ACM и международный финал студенческого конкурса Imagine Cup. На международный финал соберется около 90 студенческих команд со всей планеты, и в течение нескольких дней будут бороться за звание призеров сразу в нескольких номинациях: инновации, социальные проекты и игры, а также во множестве дополнительных номинаций.



                            В этой статье мы расскажем, что будет происходить на финале, и как вы сможете попасть на это мероприятие (регистрация) и лично пообщаться со всеми комадами, судьями и другими замечательными людьми, приехавшими на финал. К слову — среди членов жюри будет Алексей Пажитнов, создатель игры Тетрис!
                            Читать дальше →
                          • Как Яндекс распознаёт музыку с микрофона

                              Поиск по каталогу музыки — это задача, которую можно решать разными путями, как с точки зрения пользователя, так и технологически. Яндекс уже довольно давно научился искать и по названиям композиций, и по текстам песен. На сказанные голосом запросы про музыку мы тоже умеем отвечать в Яндекс.Поиске под iOS и Android, сегодня же речь пойдёт о поиске по аудиосигналу, а если конкретно — по записанному с микрофона фрагменту музыкального произведения. Именно такая функция встроена в мобильное приложение Яндекс.Музыки:

                              image

                              В мире есть всего несколько специализированных компаний, которые профессионально занимаются распознаванием музыкальных треков. Насколько нам известно, из поисковых компаний Яндекс стал первым, кто стал помогать российскому пользователю в решении этой задачи. Несмотря на то, что нам предстоит ещё немало сделать, качество распознавания уже сопоставимо с лидерами в этой области. К тому же поиск музыки по аудиофрагменту не самая тривиальная и освещённая в Рунете тема; надеемся, что многим будет любопытно узнать подробности.
                              Читать дальше →
                            • Монады с точки зрения теории категорий

                              • Translation

                              Введение

                              Кажется, монады в программировании стали загадкой века. И для этого есть две причины:
                              • недостаточное знание теории категорий;
                              • многие авторы стараюстся не упоминать категории вообще.
                              Это как говорить об электричестве не используя мат. анализ. Достаточно для замены предохранителя, не хватит, чтобы спроектировать усилитель.

                              Мы начнём с простого введения в категории и функторы, затем дадим определение монады, приведём простые примеры монад в категориях и в конце приведём монадическую терминологию используемую в языках программирования.

                              Я уверен, что монады с точки зрения категорий почти элементарны.

                              Содержание

                              1. Категория
                              2. Функтор
                              3. Естественное преобразование
                              4. Монада
                              5. Монады исключения и состояния
                              6. Монады в программировании
                              7. Ссылки
                              Читать дальше →
                            • Для тех, кто хочет странного: монады в Python

                              Доброго времени суток!

                              Недавно, начав изучать Haskell, несколько раз пытался подступиться к монадам, но всё никик не мог, что назывется, нить ухватить (м.б. дело в нехватке базовых знаний). Помогла замечательная книга Learn you a Haskell for great Good.
                              Начитался, проникся, решил донести до коллег/друзей. Разрабатываем на Python, казалось бы, незачем сильно вникать во «всю эту функциональщину», по крайней мере дальше filter/map/reduce. Но расширение кругозора, штука, бесспорно, полезная, поэтому я решил реализовать пару монад на Python, да так чтобы это не вылилось в полный unpythonic. Конечно же, не я первый и не я последний, было и есть несколько реализаций монад на основе Python, но все те реализации, что встречались мне, либо полностью unpythonic, либо сложны для понимания далёкому от самой концепции человеку. Пришлось изобретать свой велосипед, который, впрочем, позволяет ухватить суть…
                              Читать дальше →
                            • Ограничение количества запросов — Raterlimiter

                                Если вы опасаетесь, что ваш веб-сервис могут заDOSить нерадивые пользователи, или у вас просто слабенький сервер, то вы уже задумывались над ограничением количества запросов от каждого пользователя. По-хорошему — это только один из необходимых эшелонов обороны. Конечно, от серьёзной атаки такое ограничение не убережёт, но с точки зрения цена/качество вполне подходящее

                                Недавно я начал активно заниматься Эрлангом. Ну и, как обычно, для закрепления материала реализовал несложный веб-сервис на Mochiweb. Mochiweb — вполне достойный фреймворк для создания веб-приложений, но возможности лимитировать количество запросов от одного клиента я не нашёл. Вот и сделал это самостоятельно.

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

                                Задача

                                Итак, имеем Erlang/OTP, Mochiweb, rebar. Хочется считать количество запросов от конкретного пользователя и отдавать ему 413 код ошибки, если запросы идут слишком часто. Клиент идентифицируется своим IP адресом. Тем самым, который отдает mochiweb_request:get(peer).

                                Задача не такая сложная, но, возможно, готовое решение сэкономит кому-то время.
                                Читать дальше →