• Как перетасовать песни?

    • Translation
    Мы здесь в Spotify серьёзно относимся к фидбеку от пользователей. Какое-то время назад мы заметили, что пользователи жалуются на то, что при включенном режиме случайного перемешивания плейлиста порядок песен на самом деле не случаен — например, несколько песен одного и того же исполнителя могут быть воспроизведены одна за другой, при том, что в плейлисте множество песен разных исполнителей. Пользователи спрашивали неужели мы не способны сделать такую простую вещь, как случайный порядок воспроизведения треков? Мы отвечали «Он правда-правда случаен! Мы проверяли!»

    Так кто же был прав — мы или пользователи? Как оказалось — и мы, и они. Ну и вообще дело обстояло значительно серьёзнее, чем казалось на первый взгляд.

    Наш точка зрения


    Ещё в самом первом релизе нашего плеера в нём была функция случайного перемешивания плейлиста. Мы использовали для этого алгоритм Фишера-Йетса — и он давал идеально случайное перемешивание. Но что такое «идеально случайное»? Это значит, например, что мы можем получить один из двух нижеуказанных порядков песен с одинаковой вероятностью (разные цвета означают треки разных исполнителей):

    image
    Читать дальше →
  • Архитектура и алгоритмы индексации аудиозаписей ВКонтакте



      Расскажем о том, как устроен поиск похожих треков среди всех аудиозаписей ВКонтакте.

      Зачем всё это надо?


      У нас действительно много музыки. Много — это больше 400 миллионов треков, которые весят примерно 4 ПБ. Если загрузить всю музыку из ВКонтакте на 64 ГБ айфоны, и положить их друг на друга, получится башня выше Эйфелевой. Каждый день в эту стопку нужно добавлять еще 25 айфонов — или 150 тысяч новых аудиозаписей объёмом 1.5 ТБ.

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

      Если научиться достаточно точно находить одинаковые (или очень похожие) аудиозаписи, можно применять это с пользой, например:

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

      Читать дальше →
    • Автомонтирование файловых систем с systemd

      • Tutorial
      Среди множества функций, которые предоставляет systemd, есть одна, которую несправедливо забыли. Это функция автомонтирования. При настройке автомонтирования указанный каталог будет подмонтирован только после первого обращения к нему (точнее, прямо во время).

      NFS over VPN


      Конкретный пример: у меня есть удалённый сервер, на котором есть интересующий меня каталог. Я хочу иметь этот каталог локально на своей машине. Протокол доступа — nfs. Т.к. он не имеет шифрования, то разумным решением выглядит использование vpn-канала до сервера.

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

      Как оно устроено


      Systemd имеет специальный вид automount-юнитов, которые позволяют автоматически монтировать указанный каталог.
      Читать дальше →
    • Хочу отказаться от услуг РосКомНадзора по защите меня от информации (в сети). Как это сделать?

        "Какая форма заявления должна быть? Куда подавать?"


        Я задал (кеш гугла) такой вопрос на Тостере. Его удалили через некоторое время, так как он "вне тематики ресурса". Далее я попросил у модератора разъяснить поподробней и он ответил: "Это вопрос дискуссионный и на него не существует однозначного ответа".


        За время пока вопрос существовал я получил несколько ответов:


        1 Обратиться в Конституционный суд.
        2 Оформить визу и выехать из юрисдикции полномочий РосКомНадзора.


        Задав такой же вопрос интернету, оказалось, что не я один задался этим вопросом. Пользователь zakabum сайта RuTracker.org выложил на форуме образец заявления (зеркало) которое необходимо подать провайдеру. А также выкладывает новые свои заявления в ходе переписки со своим провайдером.

        Читать дальше →
      • Tabris.js — быстро знакомимся и пишем Hello World

        • Tutorial

        Tabris.js — еще один кросс-платформенный (Android, IOS) мобильный фреймворк. От подавляющего большинства подобных инструментов он отличается тем, что это не обертка над стандартным или Chrome-based WebView. Tabris предоставляет собой набор нативных компонентов, доступный из javascript. Ближайшие аналоги из мне известных это: Telerik Native Script, Appcelerator и React Native.
        Читать дальше →
      • Подготовка приложения для iOS 9

          9 сентября выйдет новый релиз iOS и OS X. Времени остается все меньше, и многие разработчики уже оптимизировали свои приложения для работы на новых ОС. Тем, кто этого ещё не сделал, предлагаю коротко рассмотреть, что необходимо для поддержки iOS 9.


          Читать дальше →
        • Программируем Raspberry Pi на голом железе

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

          В чем подвох?


          На первый взгляд задача кажется тривиальной: скачиваем keil, создаем проект… Но все не так просто. Все среды программирования(keil, IAR, Atolic) поддерживают максимум ARM9.У нас же ARM11. Это связано с негласным правилом, что на голом железе пишут до ARM9, а после на Линуксе. Но все-таки есть одна лазейка: arm-none-eabi-gcc поддерживает любой ARM.
          Вторая проблема заключается в том, что под данный процессор(BCM2835) нет никаких конфигурационных файлов, header'ов и т.д. Здесь нам на помощь придет загрузчик Raspberry Pi. И ничего, что он пропритетарный. Он выполняет две функции: инициализирует процессор и его периферию, а также передает управление ядру kernel.img. Мы просто замаскируем свою программу под ядро и загрузчик её запустит.
          Читать дальше →
        • Worker-ы и shared worker-ы

            Во всех популярных языках есть потоки (threads). В браузерном javascript для параллельной обработки используются worker-ы.
            Под катом рассказ о том, как ими пользоваться, какие ограничения есть в воркерах и об особенностях взаимодействия с ними в разных браузерах.

            Читать дальше →
            • +38
            • 36.4k
            • 5
          • Favicons, Touch Icons, Tile Icons и т. д. Что выбрать?

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

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


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



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

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

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

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

              Почти полночь.

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

              И Алексей знал почему.
              Читать дальше →
            • Система водяного охлаждения. Часть 1. Радиатор и помпа

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

                Основная концепция:


                • Отсутствие «узких мест» во всем тракте прохождения жидкости.
                • Максимальное использование воздушного потока.
                • Возможность охлаждения любого процессора в связке с видеокартой мощностью до 200W.
                • Простота сборки и «зарядки» всей конструкции теплоносителем.
                • Охлаждение любым вентилятором размером 120 мм.

                «Узкие места», это когда площадь поперечного сечения тракта прохождения жидкости уменьшается, или увеличивается. И то и другое приводит к затруднению перемещения теплоносителя. В нашем решении, сечение тракта прохождения жидкости в любом месте практически одинаково и составляет около 50 мм² (D8mm).
                image
                Читать дальше →
              • Работа над законопроктом о предварительной фильтрации рунета приостановлена: неясно, как её реализовать и кто будет платить

                  Елена Мизулина через своего представителя передала Ведомостям информацию о приостановке работы над законопроектом о предварительной фильтрации рунета. Основные причины: не определено, кто будет финансировать реализацию законопроекта, и как это сделать технически. Если эксперты отрасли прояснят эти вопросы — работа продолжится.
                  Читать дальше →
                • Загадочная кнопка на Reddit

                    image

                    1 апреля на известном новостном социальном сайте Reddit появился подраздел (сабреддит) /r/thebutton, который содержал простую форму неизвестного предназначения. На ней расположена кнопка, графический таймер и счётчик миллисекунд, отсчитывающий 1 минуту.

                    Никаких указаний относительно того, что необходимо сделать для пользователя нет, но первое, что приходит на ум, это, конечно, нажать на кнопку. Если это сделать, то таймер перезапускается, снова начиная минутный отсчёт. Примечательно, что нажать на кнопку пользователь может только один раз и только с того аккаунта, который был создан на Reddit до 1 апреля 2015 года.
                    Узнать подробности
                  • Делаем свою работу в Xcode чуточку эффективнее

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

                      Интеграции :)

                      Заинтересованных прошу под кат
                      Читать дальше →
                    • Ресайз картинок в браузере. Все очень плохо

                        Если вы когда-нибудь сталкивались с задачей ресайза картинок в браузере, то вы наверное знаете, что это очень просто. В любом современном браузере есть такой элемент, как холст (<canvas>). На него можно нанести изображение нужных размеров. Пять строчек кода и картинка готова:

                        function resize(img, w, h) {
                          var canvas = document.createElement('canvas');
                          canvas.width = w;
                          canvas.height = h;
                          canvas.getContext('2d').drawImage(img, 0, 0, w, h);
                          return canvas;
                        }
                        

                        Из холста картинку можно сохранить в JPEG и, например, отправить на сервер. Можно было на этом закончить статью, но сперва давайте взглянем на результат. Если вы поставите рядом такой холст и обычный элемент <img>, в который загружена та же картинка (исходник, 4 Мб), то вы увидите разницу.

                        img
                        Читать дальше →
                      • Pebble Time – новые умные часы от Pebble с цветным E-Paper дисплеем



                          Сегодня Pebble анонсировала новую модель умных часов Pebble Time и одновременно запустила краудфандинг-кампанию на Kickstarter для сбора денег на первую партию. Поддержавшие компанию смогут получить часы за $159.

                          На сбор необходимых $500,000 у компании ушло меньше 30 минут – это абсолютный рекорд для Kickstarter.

                          Основная особенность новинки — постоянно работающий цветной дисплей. Корпус Pebble Time выполнен из алюминия, а дисплей защищен стеклом Gorilla Glass. Несмотря на 20% более тонкий корпус по сравнению с оригинальным Pebble время автономной работы осталось прежним — 5-7 дней.
                          Читать дальше →
                        • Обзор бесплатных инструментов для пентеста web-ресурсов и не только v2

                            Как-то давно я уже писал об этом, но немного скудно и сумбурно. После я решил расширить список инструментов в обзоре, добавить статье структуры, учесть критику (большое спасибо Lefty за советы) и отправил ее на конкурс на СекЛаб (и опубликовал ссылку, но по всем понятным причинам ее никто не увидел). Конкурс закончен, результаты объявили и я с чистой совестью могу ее (статью) опубликовать на Хабре.

                            Бесплатные инструменты пентестера веб-приложений


                            В данной статье я расскажу о наиболее популярных инструментах для пентестинга (тестов на проникновение) веб-приложений по стратегии «черного ящика».
                            Для этого мы рассмотрим утилиты, которые помогут в данном виде тестирования. Рассмотрим следующие категории продуктов:

                            1. Сетевые сканеры
                            2. Сканеры брешей в веб-скриптах
                            3. Эксплойтинг
                            4. Автомазация инъекций
                            5. Дебаггеры (снифферы, локальные прокси и т.п.)

                            Читать дальше →
                          • Питание 9/12-вольтовых SOHO-маршрутизаторов от USB-источника

                            Самодельный переходник-преобразователь для питания распространенных SOHO-маршрутизаторов, требующих напряжения 9/12 В, от любого 5-вольтового источника достаточной мощности с разъемом USB.



                            Предыстория


                            Несколько лет назад у меня завелась пара USB/WiFi-маршрутизаторов Sapido RB-1842. Один я таскал с собой в поездки, чтобы удобнее было раздавать отельный/квартирный/мобильный интернет, а второй поставил стационарно в сельском доме, где интернет доступен только мобильный. Довольно скоро выяснилось, что обоим нужно автономное питание: возимый с собой иногда приходилось ставить на балкон, чтобы ретранслировать WiFi из отельного холла или соседнего кафе, а в деревне регулярно отключают свет на 10-20-40 минут — ноутбуки и гаджеты работают, базовая станция тоже, а интернета нет.

                            Порадовавшись, что модель пятивольтовая, я отрезал кабели от блоков питания маршрутизаторов, поставив в разрыв разъемы USB «мама/папа» и при нужде запитывал их от обычных повербанков. При этом один из купленных у китайцев безымянных повербанков оказался способен при наличии входного напряжения одновременно заряжать батарею и давать энергию на выходе, а при пропадании — переключаться на батарею. То есть, получился прекрасный пятивольтовый UPS, которого хватало где-то на час-полтора (в том повербанке два аккумулятора 18650) и за которым не требовалось никакого присмотра.
                            Читать дальше →
                          • Ускорение загрузки Windows for fun and profit

                              image Пожалуй, начну с того, что если перегружаться 15 раз в год, то любой «тюнинг» процесса загрузки отнимает больше времени, чем будет выиграно на перезагрузках за все время жизни системы. Однако, спортивный интерес берет свое, тем более, что люди интересуется процессом оптимизации быстродействия. А загрузка оказалась самым очевидным кандидатом в примеры того, как на мой взгляд должен выглядеть этот самый процесс. Сразу скажу, что грузиться будем с 5400 rpm винта, грузиться будем в «рабочую» систему: помимо недобитой вендорской крапвари там стоит еще куча всякого типа вижуал студии, антивируса, скайпа, стима, гуглапдейтера и пр…

                              Про то, почему отключение pagefile-а скорее вредно, чем полезно — как нибудь в другой раз, а пока…
                              Под катом много однообразных картинок и немножко унылого текста