• Яндекс.Диск запретил использование open source утилиты rclone. UPD — снова работает

      Предыстория


      Привет, Хабр!


      К написанию этого поста привела довольно странная ошибка, которую вчера вечером на ноутбуке с Linux (да, я из тех странных людей, кто использует GNU/Linux на ноутбуке) я получил вместо содержимого своего Яндекс.Диска:


      $ ls -l /mnt/yadisk
      ls: reading directory '.': Input/output error
      total 0
      Читать дальше →
    • Создание CI/CD-цепочки и автоматизация работы с Docker

      • Translation
      Я написала мои первые сайты в конце 90-х. Тогда приводить их в рабочее состояние было очень просто. Был Apache-сервер на каком-нибудь общем хостинге, на этот сервер можно было войти по FTP, написав в браузерной строке нечто вроде ftp://ftp.example.com. Потом надо было ввести имя и пароль и выгрузить файлы на сервер. Другие были времена, всё тогда было проще, чем сейчас.



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

      Для моего персонального проекта у меня была особая конфигурация. И я знала, что мне нужна возможность разворачивать сайт в продакшне, выполняя всего одно действие: запись кода в ветку master на GitHub. Я, кроме того, знала, что мне, для обеспечения работы моего маленького веб-приложения, не хочется заниматься управлением огромным кластером Kubernetes, или пользоваться технологией Docker Swarm, или поддерживать парк серверов с подами, агентами и всякими другими сложностями. Для того чтобы достичь цели по максимальному упрощению работы, мне понадобилось познакомиться с CI/CD.

      Если у вас имеется маленький проект (в нашем случае речь идёт о Node.js-проекте) и вам хотелось бы узнать о том, как автоматизировать развёртывание этого проекта, сделав при этом так, чтобы то, что хранится в репозитории, в точности соответствовало бы тому, что работает в продакшне, то, полагаю, вас может заинтересовать эта статья.
      Читать дальше →
      • +31
      • 22.7k
      • 4
    • [в закладки] PDF-версия статей про Bash-скрипты

        Привет Хабр! Летом мы переводили цикл статей про Bash-скрипты — судя по отклику, статьи оказались для вас полезными. И, по многочисленным просьбам, мы решили сделать PDF-версию перевода.



        Подробности под катом.
        Читать дальше →
      • Почему надо создавать модули для nginx

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



          Вообще все в nginx — это модули, которые когда-то кем-то были написаны. Поэтому писать модули под nginx не только можно, но и нужно. Когда это необходимо делать и зачем, расскажет Василий Сошников (dedokOne) на примере нескольких кейсов.

          Поговорим о причинах, которые побуждают писать модули на C, об архитектуре и ядре nginx, анатомии HTTP-модулей, о C-модулях, NJS, Lua и nginx.conf. Это важно знать не только тем, кто разрабатывает под nginx, но также тем, кто использует nginx-конфиги, Lua или другой язык внутри nginx.

          Примечание: статья написана на основе доклада Василия Сошникова. Доклад постоянно модернизируется и обновляется. Информация в материале довольно техническая и, чтобы извлечь максимум пользы, читателям необходимо иметь опыт работы с кодом nginx на среднем уровне и выше.
          Читать дальше →
          • +42
          • 11.6k
          • 9
        • TCP против UDP или будущее сетевых протоколов

            Перед каждым сервисом, генерирующим хотя бы 1 Мбит/сек трафика в интернете возникает вопрос: «Как? по TCP или по UDP?» В прикладных областях, в том числе и платформах доставки уже сложились предпочтения и традиции принятия подобных решений.

            По идее, если бы, к примеру, однажды один ленивый разработчик не попробовал развернуть свой ML на Python (потому что только его и знал), мир скорее всего никогда не проникся бы такой любовью к презренному «супер-джава-кодерами» языку. А сегодня слабости этого языка в прошлом контексте применения безоговорочно обеспечивают ему первенство в развертывании и запуске многочисленных майнерских А/Б.

            Сравнивать можно многое: ARM с Intel, iOS и Android, а Mortal Kombat с Injustice. И нарваться на космический холивар, поэтому вернемся к теме доставки огромных объемов разноформатного контента.

            Десять лет назад все были абсолютно уверены, UDP — это что-то про негарантированную доставку. Если нужен надежный протокол — это TCP. И вопреки традициям в этой статье мы будем сравнивать такие, кажущиеся несравнимыми вещи, как TCP и UDP.


            Осторожно, под катом 99 иллюстраций и схем и все важные.
            Читать дальше →
          • Ускоряем неускоряемое или знакомимся с SIMD

              Есть класс задач, которые нельзя ускорить за счёт оптимизации алгоритмов, а ускорить надо. В этой практически тупиковой ситуации к нам на помощь приходят разработчики процессоров, которые сделали команды, позволяющие выполнять операции на большим количеством данных за одну операцию. В случае x86 процессоров это инструкции сделанные в расширениях MMX, SSE, SSE2, SSE3, SSE4, SSE4.1, SSE4.2, AVX, AVX2, AVX512.

              В качестве «подопытного кролика» я взял следующую задачу:
              Есть неупорядоченный массив arr с числами типа uint16_t. Необходимо найти количество вхождений числа v в массив arr.
              Классическое решение, работающее за линейное время выглядит так:

              int64_t cnt = 0;
              for (int i = 0; i < ARR_SIZE; ++i)
                  if (arr[i] == v)
                      ++cnt;
              

              В таком виде бенчмарк показывает следующие результаты:

              ------------------------------------------------------------
              Benchmark                     Time           CPU Iterations
              ------------------------------------------------------------
              BM_Count                   2084 ns       2084 ns     333079
              

              Под катом я покажу как его ускорить в 5+ раз.
              Читать дальше →
            • io_submit: альтернатива epoll, о которой вы никогда не слышали

              • Translation


              Недавно внимание автора привлекла статья на LWN о новом интерфейсе ядра для опроса (polling). В ней обсуждается новый механизм опроса в Linux AIO API (интерфейс для асинхронной работы с файлами), который добавили в ядро версии 4.18. Идея довольно интересная: автор патча предлагает использовать Linux AIO API для работы с сетью.

              Но постойте! Ведь Linux AIO был создан для работы с асинхронным вводом-выводом с диска / на диск! Файлы на диске — это не то же самое, что сетевые соединения. Возможно ли вообще использовать Linux AIO API для работы с сетью?

              Оказывается, да, возможно! В этой статье объясняется, как использовать сильные стороны Linux AIO API для создания более быстрых и лучших сетевых серверов.

              Но давайте начнём с разъяснения, что представляет собой Linux AIO.
              Читать дальше →
            • Сборка проектов с GitLab CI: один .gitlab-ci.yml для сотни приложений

              • Tutorial


              В статье решается задача управления описанием сборки для большого количества однотипных приложений. Чтобы в проекте заработал GitLab CI, нужно в репозиторий добавить файл .gitlab-ci.yml. Но что, если в сотне репозиториев это файл с одинаковым содержимым? Даже если разложить его по репозиториям один раз, то как его потом изменять? А что, если одного .gitlab-ci.yml мало для сборки — нужны Dockerfile или Dappfile, разные скрипты и структура YAML-файлов для Helm? Как обновлять их?

              С чего начать решение задачи по сборке сотни однотипных приложений? Конечно же, посмотреть, можно ли GitLab CI указать использовать .gitlab-ci.yml из другого репозитория или компоновать .gitlab-ci.yml из файлов в других репозиториях…
              Читать дальше →
              • +33
              • 51.5k
              • 7
            • Домашний медиацентр (HTTP, NFS, FTP, Torrent, MiniDLNA и Firebird server) на основе Raspberry Pi

              Больше всего я не люблю шум. Даже минимальный шум от внешнего винчестера долго не дает мне заснуть.

              Поэтому я решил оборудовать свой домашний медиацентр только бесшумными (в крайнем случае, малошумными) составляющими.
              В наличии был ПК (в кабинете), внешний винчестер WD MyBook 1TB, подключенный к ТВ, звуковой проектор Yamaha YSP-900, куда по toslink выводился звук (это добро в комнате для просмотра фильмов, то есть в спальной).

              Телевизор Samsung B550, 2009 года, хотя и показывает фильмы с USB (после шаманства с настройками), но далеко не все, также не умеет битстримить DTS на проектор. Для просмотра фильмов был выбран дешевый WDTV Live Streaming 2012 года, славящийся своей всеядностью. Однако, винчестер продолжал шуметь и мешать как просмотру, так и сну.

              Поэтому, винчестер был перенесен в кабинет, и подключен к новокупленному Raspberry Pi, после чего был переформатирован в ext4.

              Сам Raspberry Pi питается от USB порта компьютера (такая схема работает в том числе и при глубоком сне).

              Далее туториал по настройке Raspberry Pi

              Читать дальше →
            • 15 советов по работе с Github

              • Translation
              • Tutorial

              Я 10 лет разрабатываю ПО, участвовал в нескольких open source-проектах и в многочисленных не-open source-проектах, работал в больших и малых командах, и везде мы использовали Github в качестве репозитория версионирования.

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

                Классы, которые люди самостоятельно пишут, а потом копируют из одного проекта в другой, хотя они уже есть в стандартных библиотеках, в простонародье называются велосипедами. Первый вопрос, который возникает при встрече с таким «велосипедом» — зачем люди переписывают что-то заново? Вариантов может быть несколько.

                • Некоторые делают это для самообучения: берут класс стандартной библиотеки, пишут его сами с нуля, сравнивают то, что получилось, с тем, что есть в стандартной библиотеке — в процессе узнают для себя что-то новое.
                • Некоторые проекты имеют особое требования к коду. В embedded-разработке принято работать без RTTI и без exception, поэтому части стандартной библиотеки, которые используют RTTI и exception, необходимо переписать без них.
                • Редко, но бывает, когда велосипед пишут, потому что могут написать лучше, чем в стандартной библиотеке. Как правило, такие нововведения рано или поздно попадают в стандартную библиотеку.
                • Другим только кажется, что они могут написать лучше, и таких людей больше. Но в процессе они обучаются, выясняют для себя что-то новое и что-то интересное открывают.
                • Могут быть другие причины.

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

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

                А также затронем «вредные» советы, обсудим новейшие практики программирования (C++ 11 и позднее), подумаем, что делать с «идеальным» велосипедом.

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

                • Translation
                Этот список появился как личная памятка по темам, которые я обсуждал с коллегами и друзьями и в которых хотел разобраться поглубже…

                Я не большой любитель задавать технические вопросы на собеседованиях: по мне так лучше посидеть с кандидатом (или кандидаткой) за клавиатурой над каким-то реальным кодом, реальной проблемой — и целый день заниматься парным программированием, желательно поочерёдно с остальными членами команды. Но я считаю, что некоторые технические вопросы могут быть хорошей отправной точкой для начала увлекательного и приятного разговора и позволят глубже узнать друг друга.

                В этом репозитории собран ряд вопросов, связанных с серверной частью, которые можно использовать при проверке потенциальных кандидатов. Ни в коем случае не рекомендуется задавать все вопросы одному кандидату: это займет несколько часов и вообще не имеет смысла, потому что они охватывают слишком широкий спектр тем. Никто не может знать всего. Выберите наиболее актуальный раздел и самые интересные вопросы, чтобы развернуть беседу.
                Читать дальше →
              • Закон Гей-Люссака, коллоидные растворы и сопромат для идеальных профитролей

                • Tutorial

                Дополнение: В конце поста есть обновленные рекомендации.

                Внесем легкую нотку научного безумия в традиционную кулинарию. Сегодня мы поговорим о некоторых следствиях из уравнения Менделеева-Клайперона и коллапсе газовых пузырей при изменении температуры. А еще затронем особенности молекулярных цепей крахмала и те коллоидные растворы, которые он образует. Просто ковыряться в уравнениях скучно, поэтому совместим приятное с полезным. Создадим идеальный профитроль. Сегодня у нас два основных объекта для изучения — заварное тесто и заварной крем со взбитыми сливками. Естественно, все это безобразие мы будем творить исключительно во славу науки. Ну и заодно разберемся в тех процессах, которые не описываются в кулинарных книгах.

                В конце концов, зря я что ли потратил 28 яиц и пару недель на эксперименты?
                Читать дальше →
              • Непрерывная интеграция и развертывание Docker в GitLab CI

                В этом руководстве рассмотрим вариант настройки непрерывной интеграции и развертывания Flask приложения на Docker Swarm через GitLab CI.

                Сначала мы рассмотрим настройку рабочей среды, включая создание серверов для нодов Docker Swarm. Затем создадим простое приложение Flask с Redis и подготовим GitLab CI для непрерывной доставки.
                Читать дальше →
                • +21
                • 44.7k
                • 7
              • Введение в GitLab CI

                • Translation
                • Tutorial

                Публикую перевод моей статьи из блога ГитЛаба про то как начать использовать CI. Остальные переводы гитлабовских постов можно найти в блоге компании Softmart.




                Представим на секунду, что вы не знаете ничего о концепции непрерывной интеграции (Continuous Integration — CI) и для чего она нужна. Или вы всё это забыли. В любом случае, начнем с основ.


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


                Hello wolrd


                Читать дальше →
              • Статические анализаторы кода на примере ClickHouse

                  Чуть больше месяца назад была опубликована статья, содержащая анализ исходного кода ClickHouse с помощью PVS-Studio. Статья оказалась достаточно успешной: так, ссылку на неё мне отправили по меньшей мере десять раз в день её публикации. Общий тон статьи позитивный, а посещаемость сайта clickhouse.yandex в день её выхода заметно выросла.


                  Я очень уважаю, когда какая-либо компания или человек делает свою работу исчерпывающим образом. Так, у PVS-Studio исчерпывающий подход к продвижению: одних только статей на Хабре 337 штук. Они проводят доклады почти на всех российских конференциях по C++. В любом случае стоит отметить: люди стараются и своим трудом приносят пользу другим людям.


                  Та статья пробудила в нас интерес к статическим анализаторам, и мы решили проверить работу нескольких общедоступных аналогов PVS-Studio на кодовой базе ClickHouse. В сегодняшней статье мы поделимся с вами результатами этого исследования.


                  Читать дальше →
                  • +90
                  • 15.8k
                  • 8
                • Как правильно оформить Open Source проект

                  • Tutorial

                  В свободное и не свободное время[1] я развиваю несколько своих проектов на github, а также, по мере сил, участвую в жизни интересных для меня, как программиста, проектах.


                  Недавно один из коллег попросил консультацию: как выложить разработанную им библиотеку на github. Библиотека никак не связана с бизнес-логикой приложения компании, по сути это адаптер к некоему API, реализующему определённый стандарт. Помогая ему, я понял что вещи, интуитивно понятные и давно очевидные для меня, в этой области, совершенно неизвестны человеку делающему это впервые и далёкому от Open Source.


                  Я провел небольшое исследование и обнаружил что большинство публикаций по этой теме на habrahabr освещают тему участия (contributing), либо просто мотивируют каким-нибудь образом примкнуть к Open Source, но не дают исчерпывающей инструкции как правильно оформить свой проект. В целом в рунете, если верить Яндекс, тема освещена со стороны мотивации, этикета контрибуции и основ пользования github. Но не с точки зрения конкретных шагов, которые следует предпринять.


                  Так что из себя представляет стильный, модный, молодёжный Open Source проект в 201* году?

                  Читать дальше →
                • Асинхронность 3: Субъекторная модель

                    Двое из ларца

                    Предисловие


                    Эта статья является продолжением цикла статей про асинхронность:

                    1. Асинхронность: назад в будущее.
                    2. Асинхронность 2: телепортация сквозь порталы.

                    Спустя 3 года я решил расширить и обобщить имеющийся спектр асинхронного взаимодействия с использованием сопрограмм. Помимо этих статей также рекомендуется ознакомиться с универсальным адаптером:

                    1. Универсальный адаптер

                    Введение


                    Рассмотрим электрон. Что он из себя представляет? Отрицательно заряженная элементарная частица, лептон, обладающий некоторой массой. Это означает, что он может участвовать по меньшей мере в электромагнитных и гравитационных взаимодействиях.
                    Читать дальше →
                  • Cобираем звуковую станцию на базе Linux и MPD



                      В основе референсного аудиопроигрывателя Bryston BDP–2 стоимостью, на минуточку, 156 тысяч рублей лежит стандартная материнка с процессором Intel Atom и звуковой картой ESI Juli@ PCI. В качестве ОС для этого плеера разработчики выбрали Debian Linux. При наличии времени и желания можно собрать аналогичный цифровой источник из имеющегося железа, а с установкой нужного ПО и тонкой настройкой параметров системы тебе поможет эта статья.
                      Подробности
                    • Теория звука. Что нужно знать о звуке, чтобы с ним работать. Опыт Яндекс.Музыки

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

                        Для работы над Яндекс.Музыкой нам всегда важно помнить о разных тонкостях, которые таит в себе звук. Что такое громкость, как она меняется и от чего зависит? Как работают звуковые фильтры? Какие бывают шумы? Как меняется звук? Как люди его воспринимают.



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

                        Поводом для этого поста можете считать то, что мы добавили в приложения Яндекс.Музыки возможность слушать треки в высоком качестве (320kbps). А можете не считать. Итак.
                        Читать дальше →