Для web-сервера Apache существует множество инструкций, в том числе и на Хабре, как стилизовать стандартный листинг файлов и директорий. Однако, как сделать также для сервера nginx, в русскоязычном интернете не найти. Порывшись на просторах интернета я нашел один репозитарий, где как раз и решается этот вопрос. Но для кириллических наименований файлов и папок потребовалась небольшая работа "напильником".
Software engineer
Head-of-Line Blocking в QUIC и HTTP/3: Подробности

Как вы могли слышать, после четырех лет разработки протоколы HTTP/3 и QUIC приблизились к официальной стандартизации. Предварительные версии уже доступны для тестирования на серверах и браузерах.
HTTP/3 обещает значительный прирост производительности по сравнению с HTTP/2, в основном благодаря смене транспортного протокола с TCP на QUIC over UDP. В этой статье мы подробно рассмотрим только одно улучшение, а именно — устранение проблемы блокировки начала очереди (Head-of-Line blocking, HOL blocking). Это будет полезно, так как я прочитал много заблуждений о том, насколько это решение полезно и как оно помогает на практике. Решение HOL blocking было основным мотивом не только HTTP/3 и QUIC, но и HTTP/2, и это дает фантастическое представление о причинах эволюции протокола.
Я расскажу о проблеме и ее формах на фоне истории протокола HTTP. Рассмотрим, как эта проблема влияет на системы приоритизации и контроля перегрузки сети. Цель данной статьи — помочь людям сделать правильные выводы об улучшении производительности в HTTP/3, которые (спойлер!) не всегда так хороши, как пишут в маркетинговых материалах.
Введение в VxLAN

Сегодня мы поговорим об очередной интересной технологии — VxLAN — что это за зверь и с чем его едят, да и вообще нужен ли он вам. Мое знакомство с данной технологией началось с изучения гипервизоров — я постоянно натыкался на термин VxLAN, но что это и как работает не знал. В один прекрасный день я решил все-таки прочитать, что это за зверь. Прочитав пару-тройку статей, я усвоил для себя основные аспекты работы технологии и облегченно выдохнул, прочитав, что данная технология — удел гипервизоров и к транспорту имеет косвенное отношение (хотя, как оказалось позже отношение VxLAN к транспорту имеет самое, что ни на есть прямое). После чего про технологию благополучно забыл и вернулся я к ней снова только через год, когда начал погружаться в EVPN — большинство статей и мануалов были именно о симбиозе EVPN и VxLAN. Литературы по данной технологии много, особенно если вы владеете английским. Я же попробую в данной статье рассказать об основах работы данной технологии и показать на практике — как это настраивается и работает. Но начнем с MPLS…
Работающий трансформатор с деревянным сердечником, или простая грозозащита для компьютеров и телевизоров
Если к вам в квартиру заходит кабель, и этот кабель — не оптический, гроза представляет угрозу для вашего оборудования.
Если у вас есть телевизор и он подключен к общей сети — кабельное ТВ, коллективная антенна (вдруг) — к чему угодно, что находится за пределами квартиры, гроза представляет угрозу для телевизора, (причем даже бОльшую, чем для компьютера).
Спецификаторы, квалификаторы и шаблоны
template<class T>
static inline thread_local constexpr const volatile T x = {};
Такое количество ключевых слов введет в ступор любого неподготовленного разработчика. Но на C++ Russia 2019 Piter Михаил Матросов (mmatrosov) разложил по полочкам квалификаторы и спецификаторы при объявлении переменных и функций.
Мы подготовили для вас текстовую версию доклада, чтобы вы могли в любой момент вернуться и изучить шпаргалки Михаила.
Быстрый роутинг и NAT в Linux
Список известных SMR дисков
Жесткие диски, которые записывают данные в перекрывающихся,
Захват пакетов в Linux на скорости десятки миллионов пакетов в секунду без использования сторонних библиотек
Сначала я хотел бы поделиться парой слов о том, как работает pcap — общеизвестный способ захвата пакетов. Он используется в таких популярных утилитах как iftop, tcpdump, arpwatch. Кроме этого, он отличается очень высокой нагрузкой на процессор.
Итак, Вы открыли им интерфейс и ждете пакетов от него используя обычный подход — bind/recv. Ядро в свою очередь получает данные из сетевой карты и сохраняет в пространстве ядра, после этого оно обнаруживает, что пользователь хочет получить его в юзер спейсе и передает через аргумент команды recv, адрес буфера куда эти данные положить. Ядро покорно копирует данные (уже второй раз!). Выходит довольно сложно, но это не все проблемы pcap.
Кроме этого, вспомним, что recv — это системный вызов и вызываем мы его на каждый пакет приходящий на интерфейс, системные вызовы обычно очень быстры, но скорости современных 10GE интерфейсов (до 14.6 миллионов вызовов секунду) приводят к тому, что даже легкий вызов становится очень затратным для системы исключительно по причине частоты вызовов.
Также стоит отметить, что у нас на сервере обычно более 2х логических ядер. И данные могут прилететь на любое их них! А приложение, которое принимает данные силами pcap использует одно ядро. Вот тут у нас включаются блокировки на стороне ядра и кардинально замедляют процесс захвата — теперь мы занимаемся не только копированием памяти/обработкой пакетов, а ждем освобождения блокировок, занятых другими ядрами. Поверьте, на блокировки может зачастую уйти до 90% процессорных ресурсов всего сервера.
Хороший списочек проблем? Итак, мы их все геройски попробуем решить!
LDAP для интернет-проекта. Часть 2
Продолжаю повествование.
Напомню, что в первой части мы установили OpenLDAP на два сервера и настроили между ними репликацию.
2. Настроим резервное копирование, благо это не так сложно.
LDAP для интернет-проекта
Наверное все согласятся с тем, что для начинающего интернет-проекта необходима централизованная система AAA (Authentication, Authorization, Accounting): множество пользователей, куча боевых серверов, чуть поменьше серверов разработки, svn, админки, etc…
Передо мной тоже встала такая необходимость и я хочу рассказать о том что у меня получилось.
Итак, что нам потребуется установить и настроить:
- OpenLDAP, естественно с репликацией
- Бэкап LDAP'а — именно вторым пунктом, можно первым (-;
- phpldapadmin, планирование групп и шаблонов
- авторизация для админок — Apache HTTPD mod_ldap
- авторизация для svn (+sasl)
- авторизация для доступа по ssh — pam_ldap
Отключаем локальную консоль при использовании x11vnc
на просторах интернетов много статей на тему как настроить удаленное подключение к существующей сессии Xorg через x11vnc, но я нигде не нашел, как при этом придавить локальный монитор и ввод, чтобы любой, кто сидит рядом с удаленным компом, не смотрел что вы делаете и не нажимал кнопочки в вашей сессии. Под катом мой способ, как сделать x11vnc более похожим на подключение к винде по RDP.
Как написать расширение для GNOME Shell: режим «Do Not Disturb»
Началось все с переезда на новую версию одного дистрибутива Linux, а там — скандально известный GNOME Shell (GH для краткости), на Javascript. Ну ок, на JS так на JS, работает — и ладно.
Одновременно с этим темп моей работы давно уже требовал найти нормальный почтовик, вместо тормозящей и жрущей тонны мегабайт вкладки outlook.office.com
в браузере. И вот нашел, в наше время есть несколько почти прекрасных кандидатур, одна беда — почтовик стал доставать меня уведомлениями о новых письмах — и звуком, и всплывающими надписями.
Что делать? Решение написать расширение "Не беспокоить" пришло не сразу, очень не хотелось писать велосипед и/или увязнуть в разработке/коде/тоннах ошибок, но решился, и вот хочу поделиться с Хабром своим опытом.1
Как опубликовать консольную утилиту на PyPI за 1 минуту

Разработав консольную утилиту, вы решаетесь опубликовать её на PyPI. Ну правда, что может быть лучше, чем сделать её доступной через pip install? Погуглив, что для этого надо, вы, возможно, наткнётесь на единственный найденный мной пост по теме, который мало того что от 2014 года, так ещё и требует от вас создать кучу папок и файлов для совершенно ненужных (вам) вещей.
Как же решить эту задачу без лишней головной боли в 2019 году? Я уже задавался этим вопросом и поэтому, прочитав тонну документации, создал для вас этот туториал. Вот пошаговая инструкция.
Современная стоматология: одномоментная имплантация зуба и наращивание челюстной кости глазами технического директора
Сегодня я расскажу свою историю, как мне пришлось установить имплантат и как оно было на самом деле. Историю рассказать свою решил потому, что информация, которая размещена в интернете, не соответствует действительности, а порой и противоречит.
Цель данной статьи: рассказать на своем примере, какова в действительности современная стоматология, как происходит вживление искусственного зуба и к чему вы должны быть готовы.
Внимание! Публикация содержит изображения, которые могут вызвать неприятные эмоции у читателей. Если вы впечатлительный человек, не читайте статью за едой.
Также напоминаем, что не стоит принимать без консультации врача упомянутые лекарственные препараты.
Модератор.
Коротко обо мне
Мне скоро 37 лет. До недавнего времени я хвастался тем, что у меня на месте все мои 32 зуба. И ведь действительно, мало у кого к этому возрасту на месте все зубы. (и в принципе, ничего удивительного: я попробовал прикинуть расходы на стоматологов, исходя из сегодняшних тарифов и вышла сумма, свыше $7.000 или свыше ₽450.000).
Прошу учесть, что в статье фотографии процесса и слабонервным советую не заглядывать.
Часть фотографий не самого лучшего качества, так как весь процесс фотографировался на мобильные телефоны, но самое главное: все фотографии и видеоролики — исключительно мои.

Новая библиотека x86 SIMD интринсиков — immintrin debug
Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in imm8.
__m512i _mm512_mask_ternarylogic_epi32 (__m512i src, __mmask8 k, __m512i a, __m512i b, int imm8)
FOR j := 0 to 15
i := j*32
IF k[j]
FOR h := 0 to 31
index[2:0] := (src[i+h] << 2) OR (a[i+h] << 1) OR b[i+h]
dst[i+h] := imm8[index[2:0]]
ENDFOR
ELSE
dst[i+31:i] := src[i+31:i]
FI
ENDFOR
dst[MAX:512] := 0
ОК, допустим, мы разобрались, как она работает. Следующий уровень сложности — отладка кода, интенсивно использующего такие интринсики.
XXH3: новый рекордсмен по скорости хеширования

Бенчмарки сделаны в программе SMHasher на Core 2 Duo 3,0 ГГц
На Хабре неоднократно рассказывали про некриптографические хеш-функции, которые на порядок быстрее криптографических. Они применяются там, где важна скорость и нет смысла применять медленные MD5 или SHA1. Например, для построения хеш-таблиц с хранением пар ключ-значение или для быстрой проверки контрольной суммы при передаче больших файлов.
Одно из самых популярных — семейство хеш-функций xxHash, которое появилось около пяти лет назад. Хотя изначально эти хеши задумывались для проверки контрольной суммы при сжатии LZ4, но их стали применять на самых разных задачах. Оно и понятно: достаточно посмотреть на таблицу вверху со сравнением производительности xxHash и некоторых других хеш-функций. В этом тесте xxHash обходит ближайшего конкурента по производительности в два раза. Новая версия XXH3 поднимает планку ещё выше.
Возможности Python 3, достойные того, чтобы ими пользовались

Все примеры, приведённые в этом материале, написаны с использованием Python 3.7. В описании каждой возможности имеются сведения о минимальной версии Python, необходимой для её применения.
OpenSceneGraph: Управление окнами и режимами отображения

Введение
Мы уже говорили о том, что класс osg::Camera управляет связанным с ним графическим контекстом OpenGL. Графический контекст инкапсулирует информацию о том, как и куда происходит отрисовка объектов и какие атрибуты состояния к ним применяются. Под контекстом понимают графическое окно, вернее его клиентскую область, или пиксельный буфер OpenGL, который хранит данные пикселей без передачи их в кадровый буфер.
OSG использует класс osg::GraphicsContext для представления абстрактного графического контекста, и класс osg::GraphicsWindow, для представления абстрактного графического окна. Последний имеет метод getEventQueue() для управления событиями от элементов GUI. Вообще говоря графический контекст есть платформоспецифичное понятие, поэтому большую часть работы по созданию окна и связыванию его контекста с контекстом OpenGL, OSG берет на себя. При вызове метода createGraphicsContext() класса osg::GraphicsContext() требуемый код (а его не мало, поверьте!) будет сгенерирован препроцессором автоматически, в зависимости от платформы. От нас лишь требуется передать этому методу аргумент типа osg::GraphicsContex::Traits, содержащий описание того, какое окно мы хотим получить.
Information
- Rating
- Does not participate
- Registered
- Activity