• TCP Congestion Control или Почему скорость прыгает

      Всем привет!

      Бывало ли у вас такое, что ставите файл на закачку, и скорость медленно, но верно возрастает, затем, в какой-то момент, резко снижается, затем опять возрастает? Закачка файла в один поток не обеспечивает полную скорость канала? Запускаете торрент-клиент, и пинг в игре сильно прыгает? Используете 3G-модем (или другую линию с относительно большой потерей пакетов) и не можете это терпеть?
      Наверняка вы винили во всем ваш роутер, либо обвиняли своего провайдера в кривой настройке шейпера? Это влияет, но виноваты не они.
      Итак, встречайте:

      TCP Congestion Control, или TCP Congestion Avoidance Algorithm.

      Читать дальше →
    • Мир лицензий: разбираемся с MIT license

        image
        В предыдущих статьях я постарался рассказать про лицензии GPL и BSD, их историю, виды и чем они отличаются друг от друга. В этот раз я постараюсь рассмотреть другую, чуть менее популярную лицензию — X11(MIT) license.

        Читать дальше →
      • Изобретаем JPEG

        • Tutorial

        Вы правильно поняли из названия, что это не совсем обычное описание алгоритма JPEG (формат файла я подробно описывал в статье «Декодирование JPEG для чайников»). В первую очередь, выбранный способ подачи материала предполагает, что мы ничего не знаем не только о JPEG, но и о преобразовании Фурье, и кодировании Хаффмана. И вообще, мало что помним из лекций. Просто взяли картинку и стали думать как же ее можно сжать. Поэтому я попытался доступно выразить только суть, но при которой у читателя будет выработано достаточно глубокое и, главное, интуитивное понимание алгоритма. Формулы и математические выкладки — по самому минимуму, только те, которые важны для понимания происходящего.

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

        Если есть желание, то предлагаю пройти те же этапы самостоятельно параллельно со статьей. Проверить, насколько приведенные рассуждения подходят для разных изображений, попытаться внести свои модификации в алгоритм. Это очень интересно. В качестве инструмента могу порекомендовать замечательную связку Python + NumPy + Matplotlib + PIL(Pillow). Почти вся моя работа (в т. ч. графики и анимация), была произведена с помощью них.

        Внимание, трафик! Много иллюстраций, графиков и анимаций (~ 10Мб). По иронии судьбы, в статье про JPEG всего 2 изображения с этим форматом из полусотни.
        Читать дальше →
      • Как мы мигрировали миллионные страны за рабочий день

          Badoo — крупнейшая в мире социальная сеть для знакомств с новыми людьми, насчитывающая 190 миллионов пользователей.
          Все данные хранятся в двух дата-центрах — европейском и американском. Некоторое время назад мы исследовали качество интернет-соединения у наших пользователей из Азии и обнаружили, что для 7 миллионов пользователей наш сайт будет загружаться в 2 раза быстрее, если мы переместим их из европейского дата-центра в американский. Перед нами впервые встала задача крупномасштабной миграции данных пользователей между дата-центрами, с которой мы успешно справились: мы научились перемещать 1,5 миллиона пользователей за один рабочий день! Мы смогли перемещать целые страны! В первой части мы подробно расскажем о поставленной перед нами задаче и о том, какого результата мы достигли.
          Читать дальше →
        • Видеозаписи докладов с High Performance Conference

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



            Прямо сегодня (или в любое удобное для вас время) в программе:
            Сергей Аверин XEK, Badoo (участвовал в создании таких проектов как Хабр, dirty, leprosorium, autokadabra, dribbler, trendclub и др.);
            Юрий Насретдинов, Badoo;
            Андрей Сумин AndrewSumin, Mail.ru Group (ранее Яндекс, HeadHunter);
            Константин Осипов, Mail.Ru Group ( ранее Oracle, Sun, MySQL, Ringrows, Spylog, Interpro);
            Даниил Павлючков, ITmozg.ru.

            Читать дальше →
            • +18
            • 12,4k
            • 3
          • Разукрашиваем вывод mysql-client в консоли

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

            Общий вид: \033[Xm, где X — это значение параметра (цифра). Например, echo -ne "\033[34mHELLO" выведет синим цветом «HELLO». Таблицу цветов и других доступных параметров (подчеркивание, мигание и т.п.) можно получить в документации man console_codes в разделе «ECMA-48 Set Graphics Rendition». Обычно поддержка цвета интегрирована в само приложение, но mysql-client не входит в число таких программ.

            В интернете не раз был встречен вопрос о разукрашивании консоли mysql, но нигде не нашлось рецепта. Только общие слова «может быть состряпать обертку» или «посмотрите в исходном коде». Такой вопрос на StackOverflow жил без ответа более 2 лет! «Жил» было специально употреблено в прошедшем времени, потому что ответ нашелся.

            Поможет нам утилита grc. Она доступна в большинстве дистрибутивов и о ней многие знают. Но как обернуть в нее вывод mysql-client?


            Читать дальше →
          • Миллион одновременных соединений на Node.js



              TL;DR:


              • Node.js v0.8 позволяет обрабатывать 1 млн одновременных HTTP Comet соединений на Intel Core i7 Quad/16 Gb RAM практически без дополнительных настроек.
              • На 1 соединение тратится чуть больше 10 Kb памяти (4.1 Kb Javascript Heap + 2.2 Kb Node.js Native + 3.8 Kb Kernel)..
              • V8 Garbage Collector не рассчитан на управление > ~500Mb памяти. При превышении нужно переходить на альтернативный режим сборки мусора, иначе «отзывчивость» сервера сильно уменьшается.
              • Подобный опыт можно (и нужно!) без особых затрат повторить самому (см. под катом).

              Читать дальше →
            • Нечёткий поиск в тексте и словаре

                Введение


                Алгоритмы нечеткого поиска (также известного как поиск по сходству или fuzzy string search) являются основой систем проверки орфографии и полноценных поисковых систем вроде Google или Yandex. Например, такие алгоритмы используются для функций наподобие «Возможно вы имели в виду …» в тех же поисковых системах.

                В этой обзорной статье я рассмотрю следующие понятия, методы и алгоритмы:
                • Расстояние Левенштейна
                • Расстояние Дамерау-Левенштейна
                • Алгоритм Bitap с модификациями от Wu и Manber
                • Алгоритм расширения выборки
                • Метод N-грамм
                • Хеширование по сигнатуре
                • BK-деревья
                А также проведу сравнительное тестирование качества и производительности алгоритмов.
                Читать дальше →
              • Хороший заказчик тот, который дважды сменил веб-разработчика

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

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