• Как безопасно программировать в bash

    • Перевод

    Почему bash?


    В bash есть массивы и безопасный режим. При правильном использовании bash почти соответствует практикам безопасного кодирования.

    В fish сложнее допустить ошибку, но там нет безопасного режима. Поэтому хорошей идеей станет прототипирование в fish, а затем трансляция с fish на bash, если вы умеете правильно это делать.

    Предисловие


    Данное руководство сопровождает ShellHarden, но автор также рекомендует ShellCheck, чтобы правила ShellHarden не расходились с ShellCheck.

    Bash — не тот язык, где самый правильный способ решить проблему одновременно является самым простым. Если принимать экзамен по безопасному программированию в bash, то первое правило BashPitfalls звучало бы так: всегда используй кавычки.

    Главное, что нужно знать о программировании в bash


    Маниакально ставить кавычки! Незакавыченная переменная должна расцениваться как взведённая бомба: она взрывается при контакте с пробелом. Да, «взрывается» в смысле разделения строки на массив. В частности, расширения переменных вроде $var и подстановки команд вроде $(cmd) подвергаются расщеплению слов, когда внутренняя строка расширяется в массив из-за расщепления в специальной переменной $IFS с пробелом по умолчанию. Это обычно незаметно, потому что чаще всего результатом становится массив из 1 элемента, неотличимый от ожидаемой строки.
    Читать дальше →
  • Восстановление и модернизация колонок Вега 50АС-106

      В детстве у одного из моих друзей дома стояли колонки Вега 50АС-106, тогда они запали в душу своим дизайном, еще бы, ведь тогда, в начале 90-х для меня, мальчишки эти колонки со своими пластиковыми накладками были чем то космическим, верхом совершенства. Ну а о качестве музыки мы тогда не особенно задумывались. Хотелось иметь у себя такие. Время прошло, а в памяти те колонки остались, как и осталось желание их получить. Появились и возможности по их приобретению.


      Фото не мое, взято тут

      Небольшое отступление. Данный пост не претендует на истину в последней инстанции, так же он не претендует на какие то аудиофильские изыски, а так же на то, что полученный результат бьет все рекорды. Прошу не спорить на тему «зачем ты с ними возился, лучше бы купил новые нормальные», мне хотелось именно ТЕ колонки, как память из детства. Для прослушивания музыки у меня есть наушники Hifiman HE-400i и самодельный ламповый усилитель к ним, данный комплект уже претендует на некоторое качество, хотя с аудиофилами спорить не собираюсь.

      Всех, кого заинтересовал, прошу под кат.
      Читать дальше →
    • SO_TIMESTAMPING в картинках. Прием пакета


      Бывает, что приложению требуется узнать точное время приема или отправки сетевого пакета. Например, для синхронизации часов (см. PTP, NTP) или тестирования задержек в сети (см. RFC2544).


      Наивным решением будет запоминать в приложении время сразу после получения пакета от ядра (или перед отправкой ядру):


        recv(sock, buffer, length, flags);
        clock_gettime(CLOCK_REALTIME, timespec);

      Ясно, что полученное таким образом время может заметно отличаться от момента, когда пакет был получен сетевым устройством. Для получения более точного времени нужна поддержка от операционной системы, драйвера и/или сетевого устройства.


      Начиная с версии 2.6.30 Линукс поддерживает опцию сокета SO_TIMESTAMPING. Она позволяет пользовательскому сокету получать временные метки для отправляемых и принимаемых пакетов. Временные метки могут быть сняты самим ядром, драйвером или сетевым устройством (см. список поддерживающих устройств и драйверов). О том, что это вообще такое и как этим пользоваться, стоит почитать в Documentation/networking/timestamping.txt


      В этой статье я расскажу о том, как пакеты доставляются от сетевого устройства пользователю, когда при этом снимаются временные метки, как они доставляются пользователю и насколько они точны. Приведенные примеры кода ядра взяты из версии 4.1.

      Читать дальше →
      • +21
      • 5,5k
      • 9
    • История взлома всех игр в Telegram

        Сейчас компьютерные игры везде. Присутствуют они и в Telegram. Расскажу о том, как были взломаны практически все игры этого мессенджера, обойдя самых первоклассных игроков, находящихся в топах скорбордов. Хочу поделится результатами исследований. О различных методиках взлома, читинга и путях обхода логики игр под катом.


        Читать дальше →
      • Эксплойт BlueBorne на Android, iOS, Linux и Windows: более 8 миллиардов устройств критически уязвимы



        Вектор атаки BlueBorne может потенциально повлиять на все устройства с Bluetooth, количество которых сегодня оценивается более чем в 8,2 миллиарда. Bluetooth является ведущим и наиболее распространенным протоколом для ближней связи и используется всеми устройствами — от обычных компьютеров и мобильных до IoT-устройств, таких как телевизоры, часы, автомобили и медицинские приборы.

        Итак, в чём проблема? Bluetooth сложный. Эта чрезмерная сложность является прямым следствием огромной работы, которая была проведена при создании спецификации Bluetooth. Чтобы проиллюстрировать это отметим, что, в то время как спецификация WiFi (802.11) умещается на 450 страницах, объём спецификации Bluetooth достигает 2822 страниц. Результатом непрозрачности является большое количество уязвимостей, о части из которых мы расскажем в этой статье.

        Спецификация Bluetooth имеет не менее 4 разных уровней фрагментации, как показано на диаграмме, взятой из спецификации:



        Обзор BlueBorne

        Читать дальше →
      • Задачу о N ферзях признали NP-полной задачей


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

          Задача о N ферзях состоит в том, чтобы разместить N ферзей на доске размером N×N таким образом, чтобы ни один ферзь не находился под боем другого, при этом на доске заранее установлены несколько ферзей. То есть в итоге никакие два ферзя не должны находиться на одной линии или диагонали. Впервые задачку сформулировали в 1848 году, а в 1850 году придумали вариант головоломки, когда некоторое количество ферзей заранее поставлено на доску, а игрок должен расставить остальных, если это возможно.

          Исследователи из Сент-Эндрюсского университета (Шотландия) опубликовали научную статью, в которой доказывают, что задача о N ферзях является не только #P-полной задачей, но также NP-полной задачей. Более того, Математический институт Клэя (США) готов заплатить миллион долларов любому, кто сможет оптимизировать решение этой задачи как задачи на доказательство P=NP.
          Читать дальше →
        • Обзор Psion Organiser II XP с внутренностями и Тетрисом



            Карманный компьютер Psion Organizer II XP был выпущен одноименной британской компанией Psion в 1986 году. Он стал успешным представителем линейки Psion Organizer, в которой первенцем был Organizer I, сошедший с конвейера в 1984 году. Последним представителем серии стал Organizer II LZ появившийся в продаже в 1989.

            Psion Organizer часто титулуется первым в мире PDA (то, что у нас называлось КПК) и хотя это утверждение на мой взгляд спорно, Органайзеры действительно имели уникальные особенности для карманных компьютеров тех лет.
            Внимание, дальше много фотографий и присутствует гикпорн
          • TempleOS: библейская операционная система, которую пишет шизофреник

              Дистрибутив операционки крошечный — всего 17 мегабайтов. Его можно быстро скачать и опробовать.

              Целевая платформа — x86-64. Маловероятно, что кто-то будет экспериментировать с подобным в качестве реально установленной операционки, поэтому нам понадобится любая виртуальная машина, к примеру, VirtualBox или QEMU. Сам создатель пользуется коммерческой VMware Workstation. Задайте для виртуальной машины как минимум полгигабайта памяти.



              Со скачанного образа можно просто загрузиться и работать в режиме LiveCD или установить систему на диск. Установка TempleOS не сложнее, чем установка любой современной операционной системы. Нужно лишь несколько раз нажать на клавишу y и дождаться копирования файлов.
              Читать дальше →
            • Успех на автопилоте. 9 привычек, которые изменили мою жизнь



                Привычки меняют людей. Они могут возродить и убить, подбросить и опустить на самое дно. Все повседневные действия, которые мы совершаем на автомате — привычки. Они управляют нами: влияют на настроение, развитие и здоровье. Внесение полезной привычки, как инвестиция в прибыльный проект, день за днем приносит дивиденды практически без вашего участия. Вам остается только исключить вредные привычки, отобрать полезные и смотреть как меняется мир вокруг вас.
                Читать дальше →