• Эллиптический спирограф

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

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

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

        Преподаватель из Стэнфордского университета Кит Шварц (Keith Schwarz) уже несколько лет пополняет свой архив интересного кода — образцы самых лучших алгоритмов и структур данных, когда-либо изобретённых человечеством (Шварц весьма амбициозно оценивает свою коллекцию).

        Примеры на сайте преимущественно закодированы в C++, поскольку STL предоставляет прекрасную базу для выражения алгоритмов, работающих с различными типами данных. Структуры данных реализованы на Java.

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

        David Drysdale, Beginner's guide to linkers (http://www.lurklurk.org/linkers/linkers.html).

        Цель данной статьи — помочь C и C++ программистам понять сущность того, чем занимается компоновщик. За последние несколько лет я объяснил это большому количеству коллег и наконец решил, что настало время перенести этот материал на бумагу, чтоб он стал более доступным (и чтоб мне не пришлось объяснять его снова). [Обновление в марте 2009: добавлена дополнительная информация об особенностях компоновки в Windows, а также более подробно расписано правило одного определения (one-definition rule).

        Типичным примером того, почему ко мне обращались за помощью, служит следующая ошибка компоновки:
        g++ -o test1 test1a.o test1b.o
        test1a.o(.text+0x18): In function `main':
        : undefined reference to `findmax(int, int)'
        collect2: ld returned 1 exit status
        

        Если Ваша реакция — 'наверняка забыл extern «C»', то Вы скорее всего знаете всё, что приведено в этой статье.
        Читать дальше →
      • ЭБ 112.3. Подготовка к сдаче II группы электробезопасности

        • Tutorial

        Всем доброго времени суток. В процессе трудового пути доблестные инженеры обязаны сдавать экзамены по электробезопасности, получая, подтверждая или повышая свою группу. Даже если доблестные инженеры все время сидят на стуле. Даже если стул при этом заземлен.
        Когда эта задача встала передо мной, я погуглил пару часов и вспотел, прежде чем нашел все необходимое. Проблема в том, что полезная информация затеряна среди рекламы, недешевых курсов и кучи спама. Прочтение данного поста поможет в запоминании правильных ответов билетов и сорвет покровы с того, зачем нужна электробезопасность.
        Под катом я собрал все, что необходимо для сдачи II группы по ЭБ — элементы законодательства, методику подготовки, билеты с ответами и теорию. Большие массивы информации собраны в спойлеры. Вскрывайте то, что нужно. Никакой рекламы, и, конечно же, уточки!


        ЭБ 112.3
      • Действительно ли у каждого ядра есть «свой собственный» кэш первого и второго уровней?

          У современных процессоров архитектуры Core i7 существует очевидный, документированный, но отчего-то не очень известный даже среди многих специалистов сценарий priority inversion. Его я опишу в этом посте. В нем есть код на С, три диаграммы, и некоторые подробности работы кэшей в процессорах архитектуры Core i7. Никаких покровов не срывается, вся информация давно общедоступна.

          Priority inversion – ситуация, когда низкоприоритетный процесс может блокировать или замедлять высокоприоритетный. Обычно имеется в виду очередность доступа к исполнению на ядре для высокоприоритетного кода относительно низкоприоритетного. С этим должно неплохо справляться ядро ОС. Однако помимо вычислительных ядер, которые несложно распределять посредством affinity и MSI-X, в процессоре есть ресурсы, общие для всех задач – контроллер памяти, QPI, общий кэш третьего уровня, PCIe устройства. В вопросы PCIe я углубляться не буду, т.к. не являюсь экспертом в данной теме. Priority inversion на почве доступа к памяти и QPI я давно не наблюдал – пропускной способности современного многоканального контроллера как правило хватает и высокоприоритетным, и низкоприоритетным задачам. Остановлюсь на кэшах.
          Читать дальше →
        • О правильном использовании памяти в NUMA-системах под управлением ОС Linux

          • Tutorial
          Недавно в нашем блоге появилась статья о NUMA-системах, и я хотел бы продолжить тему, поделившись своим опытом работы в Linux. Сегодня я расскажу о том, что бывает, если неправильно использовать память в NUMA и как диагностировать такую проблему с помощью счётчиков производительности.
          Читать дальше →
          • +22
          • 10,6k
          • 5
        • Настройка Kerberos-аутентификации с использованием смарт-карт

          • Tutorial
          В продолжение давней темы про использование двухфакторной аутентификации в ОС GNU/Linux позвольте рассказать про схему работы и настройку аутентификации с помощью Kerberos. В этой статье мы рассмотрим процесс настройки MIT Kerberos для аутентификации пользователей по сертификатам и ключевым парам, находящимся на USB-токене. Также материалы, изложенные в статье, можно использовать для настройки аутентификации в домене Windows.
          Читать дальше →
          • +13
          • 26,5k
          • 2
        • Развёртывание репозиториев Linux

          Без синхронизаций и т.д., в варианте «есть хостинг» или «файловая помойка» и надо быстро выкатить хранилище пакетов для дистрибутива Linux (так чтобы можно было подключиться к этому репозиторию и поставить оттуда всё необходимое). Иногда обновляться в ручном режиме — копированием по тому же адресу с перезаписью. Раз в полгода или год. Задача типовая и я её опишу в полуавтоматическом режиме.
          Читать дальше →
        • Перенаправление функций в разделяемых ELF-библиотеках

            Все мы пользуемся динамически-компонуемыми билиотеками. Их возможности поистине великолепны. Во-первых, такая библиотека загружается в физическое адресное пространство только один раз для всех процессов. Во-вторых, можно расширять функционал своей программы, подгружая дополнительную библиотеку, которая и будет этот функционал обеспечивать. И все это без перезапуска самой программы. А еще решается проблема обновлений. Для динамически компонуемой библиотеки можно определить стандартный интерфейс и влиять на функционал и качество своей основной программы, просто меняя версию библиотеки. Такие методы повторного использования кода даже получили название «архитектура plug-in’ов». Но топик не об этом.

            Кстати, нетерпеливые могут все скачать и попробовать прямо сейчас.

            Осторожно, много текста!
          • Бэкдор в active directory своими руками

              Итак, мы все знаем про подлых пользователей c UID=0 в unix, которых может быть больше одного.

              Посмотрим, как такое же (а на самом деле, даже более страшное) организовывается в инфраструктуре Windows. Разумеется, мы говорить будем не про локальные виндовые учётные записи, а про Active Directory, т.е. говорить будем об администраторе домена. Или, даже, хуже, об enterprise administrator.

              Итак, истина номер один: у объектов в active directory есть атрибуты и права доступа.
              Истина номер два: эти атрибуты можно менять.

              Как легко понять, мы МОЖЕМ сделать учётную запись с фантастическими правами, к которой не будет доступа НИ У КОГО. Однако, он сможет логиниться, блокировать, разблокировать, менять свои атрибуты и атрибуты чужих людей.

              В самом страшном случае, это будет пользователь с волшебным SID-*500, которого не позволяет удалить уже сама винда. (Для этого нужно переименовать, а на его место положить другого пользователя с ником Administrator и с полными правами).
              Читать дальше →