Как стать автором
Обновить
0
0

Пользователь

Отправить сообщение

Системы защиты Linux

Время на прочтение9 мин
Количество просмотров51K
Одна из причин грандиозного успеха Linux ОС на встроенных, мобильных устройствах и серверах состоит в достаточно высокой степени безопасности ядра, сопутствующих служб и приложений. Но если присмотреться внимательно к архитектуре ядра Linux, то нельзя в нем найти квадратик отвечающий за безопасность, как таковую. Где же прячется подсистема безопасности Linux и из чего она состоит?

Предыстория Linux Security Modules и SELinux


Security Enhanced Linux представляет собой набор правил и механизмов доступа, основанный на моделях мандатного и ролевого доступа, для защиты систем Linux от потенциальных угроз и исправления недостатков Discretionary Access Control (DAC) — традиционной системы безопасности Unix. Проект зародился в недрах Агентства Национальной Безопасности США, непосредственно разработкой занимались, в основном, подрядчики Secure Computing Corporation и MITRE, а также ряд исследовательских лабораторий.


Linux Security Modules
Читать дальше →
Всего голосов 35: ↑34 и ↓1+48
Комментарии8

Фонетические алгоритмы

Время на прочтение9 мин
Количество просмотров45K
Фонетические алгоритмы сопоставляют двум словам со схожим произношением одинаковые коды, что позволяет осуществлять сравнение и индексацию множества таких слов на основе их фонетического сходства.

Часто довольно трудно найти в базе нетипичную фамилию, например:
— Леха, поищи в нашей базе Адольфа Швардсенеггера,
Шворцинегира? Нет такого!
В этом случае использование фонетических алгоритмов (особенно в сочетании с алгоритмами нечеткого сопоставления) может значительно упростить задачу.

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

В этой статье я рассмотрю наиболее известные алгоритмы, такие как Soundex, Daitch-Mokotoff Soundex, NYSIIS, Metaphone, Double Metaphone, русский Metaphone, Caverphone.
Читать дальше →
Всего голосов 154: ↑153 и ↓1+152
Комментарии35

С чего начинается Elasticsearch

Время на прочтение14 мин
Количество просмотров247K

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


Самое первое и главное заблуждение — "нужен поиск, так бери эластик!". Но в действительности, если вам нужен шустрый поиск для небольшого или даже вполне себе крупного проекта, вам стоит разобраться в теме поподробней и вы откажетесь от использования именно этой системы.

Читать дальше →
Всего голосов 39: ↑38 и ↓1+49
Комментарии45

PostgreSQL Antipatterns: навигация по реестру

Время на прочтение4 мин
Количество просмотров9.9K
Сегодня не будет никаких сложных кейсов и мудреных алгоритмов на SQL. Все будет очень просто, на уровне Капитана Очевидность — делаем просмотр реестра событий с сортировкой по времени.

То есть вот лежит в базе табличка events, а у нее поле ts — ровно то самое время, по которому мы хотим эти записи упорядоченно показывать:

CREATE TABLE events(
  id
    serial
      PRIMARY KEY
, ts
    timestamp
, data
    json
);

CREATE INDEX ON events(ts DESC);

Понятно, что записей у нас там будет не десяток, поэтому нам потребуется в каком-то виде постраничная навигация.

#0. «Я у мамы погроммист»


cur.execute("SELECT * FROM events;")
rows = cur.fetchall();
rows.sort(key=lambda row: row.ts, reverse=True);
limit = 26
print(rows[offset:offset+limit]);

Даже почти не шутка — редко, но встречается в дикой природе. Иногда после работы с ORM бывает тяжело перестроиться на «прямую» работу с SQL.

Но давайте перейдем к более распространенным и менее очевидным проблемам.
Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Комментарии17

Ещё один велосипед: храним юникодные строки на 30-60% компактнее, чем UTF-8

Время на прочтение15 мин
Количество просмотров13K


Если вы разработчик и перед вами стоит задача выбора кодировки, то почти всегда правильным решением будет Юникод. Конкретный способ представления зависит от контекста, но чаще всего тут тоже есть универсальный ответ — UTF-8. Он хорош тем, что позволяет использовать все символы Юникода, не тратя слишком много байт в большинстве случаев. Правда, для языков, использующих не только латиницу, «не слишком много» — это как минимум два байта на символ. Можно ли лучше, не возвращаясь к доисторическим кодировкам, ограничивающим нас всего 256 доступными символами?

Ниже предлагаю ознакомиться с моей попыткой дать ответ на этот вопрос и реализацию относительно простого алгоритма, позволяющего хранить строчки на большинстве языков мира, не добавляя той избыточности, которая есть в UTF-8.
Читать дальше →
Всего голосов 69: ↑67 и ↓2+88
Комментарии85

Обзор операторов PostgreSQL для Kubernetes. Часть 1: наш выбор и опыт

Время на прочтение11 мин
Количество просмотров29K


Всё чаще от клиентов поступают такие запросы: «Хотим как Amazon RDS, но дешевле»; «Хотим как RDS, но везде, в любой инфраструктуре». Чтобы реализовать подобное managed-решение на Kubernetes, мы посмотрели на текущее состояние наиболее популярных операторов для PostgreSQL (Stolon, операторы от Crunchy Data и Zalando) и сделали свой выбор.

Эта статья — полученный нами опыт и с теоретической точки зрения (обзор решений), и с практической стороны (что было выбрано и что из этого получилось). Но для начала давайте определимся, какие вообще требования предъявляются к потенциальной замене RDS…
Читать дальше →
Всего голосов 41: ↑40 и ↓1+52
Комментарии27

Google не узнает, что вы делали прошлым летом (ну почти)

Время на прочтение10 мин
Количество просмотров50K

Google (или его родительский  холдинг Alphabet) на данный момент владеет самым популярным одноименным поисковым сервисом, самым популярным видеохостингом YouTube, самым популярным сервисом электронной почты с Gmail, самой популярной мобильной операционной системой Android и целым рядом популярных облачных приложений для работы с документами Google Docs. По крайней мере восемь продуктов корпорации имеют более миллиарда пользователей. Бородатая шутка из середины нулевых о том, что скоро мы все будем ездить на работу в Гугле на Гугле, чтобы заработать немного Гугла, сегодня оказалась близка к реальности как никогда.
Читать дальше →
Всего голосов 65: ↑62 и ↓3+88
Комментарии88

Математика нужна программистам, или задача, которую мне пришлось решать

Время на прочтение5 мин
Количество просмотров33K

Всем привет!

Я работаю над WebRTC - фреймворком для аудио-видео конференций (или звонков? проще говоря - real time communication). В этой статье я хочу описать интересную задачу, вставшую передо мной, и как она была решена. В задаче, по сути, потребовалось минимизировать lcm нескольких вещественных чисел с дополнительными ограничениями. Пришлось применить совсем чуть чуть теории чисел или хотя бы логики.

Читать далее
Всего голосов 66: ↑62 и ↓4+81
Комментарии88

Вред хранимых процедур

Время на прочтение3 мин
Количество просмотров53K

В чат подкаста «Цинковый прод» скинули статью о том, как некие ребята перенесли всю бизнес-логику в хранимые процедуры на языке pl/pgsql. И так как у статьи было много плюсов, то значит, есть люди, а может быть, их даже большинство, которые положительно восприняли такой рефакторинг.

Я не буду растекаться мыслью по древу, а сразу накидаю кучку минусов использования хранимых процедур.
Читать дальше →
Всего голосов 134: ↑99 и ↓35+105
Комментарии535

Как мы в 2020 году изобретали процесс разработки, отладки и доставки в прод изменений базы данных

Время на прочтение10 мин
Количество просмотров15K
На дворе 2020 год и фоновым шумом вы уже привыкли слышать: «Кубернетес — это ответ!», «Микросервисы!», «Сервис меш!», «Сесурити полиси!». Все вокруг бегут в светлое будущее.

Подходы в том, что касается баз данных, в нашей компании более консервативны, чем в прикладных приложениях. Крутится база данных у нас не в кубернетесе, а на железе или в виртуалке. Для изменений базы данных процессинга платежных сервисов у нас есть устоявшийся процесс, который включает в себя множество автоматических проверок, большое ревью и релиз с участием DBA. Количество проверок и привлекаемых людей в этом случае негативно влияет на time-to-market. С другой стороны, он отлажен и позволяет надежно вносить изменения в продакшен, минимизируя вероятность что-то сломать. А если что-то сломалось, то нужные люди уже включены в процесс починки. Этот подход делает работу основного сервиса компании стабильнее.

Большинство новых реляционных баз данных для микросервисов мы заводим на PostgreSQL. Отлаженный процесс для Oracle хоть и надёжный, но несет с собой избыточную сложность для маленьких БД. Тащить тяжёлые процессы из прошлого в светлое будущее никто не хочет. Проработкой процесса для светлого будущего заранее никто не занялся. В итоге получили отсутствие стандарта и разножопицу.



Если хотите узнать, к каким проблемам это привело и как мы их порешали, — добро пожаловать под кат.
Читать дальше →
Всего голосов 36: ↑36 и ↓0+36
Комментарии34

Скулятчер

Время на прочтение6 мин
Количество просмотров33K

Сижу я вчера спокойно, как водится никого особо не трогаю. Тут с двух разных контактов, почти одновременно присылают ссылку на небезызвестный твит про JSON из SQL. Одно из сообщений выглядело так:



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

Читать дальше →
Всего голосов 106: ↑106 и ↓0+106
Комментарии103

Как зарабатывать на фотографиях

Время на прочтение12 мин
Количество просмотров50K


Данная статья является логическим продолжением этой статьи на Хабре о выдаче регистратором Р01 моих персональных данных третьему лицу. Пришлось дожидаться, пока закончатся суды (частично), чтобы описать, кому было интересно запросить мои персональные данные у доменного регистратора Р01 и зачем.


История простая — требование компенсации за нарушение авторских прав на изображения, но со своими забавными нюансами.


Ниже по тексту — как не надо зарабатывать на фотографиях. Пример, как надо — в спойлерах (16+)

Читать дальше →
Всего голосов 103: ↑96 и ↓7+122
Комментарии119

PostgreSQL Antipatterns: «Должен остаться только один!»

Время на прочтение3 мин
Количество просмотров15K
На SQL вы описываете «что» хотите получить, а не «как» это должно исполняться. Поэтому проблема разработки SQL-запросов в стиле «как слышится, так и пишется» занимает свое почетное место, наряду с особенностями вычисления условий в SQL.

Сегодня на предельно простых примерах посмотрим, к чему это может приводить в контексте использования GROUP/DISTINCT и LIMIT вместе с ними.

Вот если вы написали в запросе «сначала соедини эти таблички, а потом выкинь все дубли, должен остаться только один экземпляр по каждому ключу» — именно так и будет работать, даже если соединение вовсе не было нужно.

И иногда везет и это «просто работает», иногда — неприятно сказывается на производительности, а иногда дает абсолютно неожидаемые с точки зрения разработчика эффекты.


Ну, может, не настолько зрелищные, но…

«Сладкая парочка»: JOIN + DISTINCT


SELECT DISTINCT
  X.*
FROM
  X
JOIN
  Y
    ON Y.fk = X.pk
WHERE
  Y.bool_condition;

Как бы понятно, что хотели отобрать такие записи X, для которых в Y есть связанные с выполняющимся условием. Написали запрос через JOIN — получили какие-то значения pk по несколько раз (ровно сколько подходящих записей в Y оказалось). Как убрать? Конечно DISTINCT!
Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Комментарии19

Как реализованы JIT-компиляторы

Время на прочтение17 мин
Количество просмотров14K

В этой статье мы поговорим о подробностях реализации и работе разных JIT-компиляторов, а также о стратегиях оптимизации. Обсуждать будем достаточно подробно, однако многие важные концепции опустим. То есть в этой статье не будет достаточной информации, чтобы прийти к обоснованным заключениям при любых сравнениях реализаций и языков.

Чтобы получить базовое представление о JIT-компиляторах, почитайте эту статью.

Небольшое примечание:

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

Читать дальше →
Всего голосов 26: ↑24 и ↓2+38
Комментарии1

Flipper Zero — как выйти на Кикстартер сидя на карантине на даче

Время на прочтение7 мин
Количество просмотров75K
Flipper Zero крупным планом

Flipper Zero — проект карманного мультитула для хакеров в формфакторе тамагочи, который я разрабатываю с друзьями. Предыдущие посты [1],[2],[3]

Я до сих пор не могу в это поверить. Это самая волнительная статья, которую я когда-либо писал. Мы прошли огромный путь: два раза полностью меняли электронику Флиппера, выживали при блекауте и закрытых границах из-за коронавируса, переносили компанию из Гонконга в США, с трудом прошли все проверки и верификации и НАКОНЕЦ ГОТОВЫ К ЗАПУСКУ ФЛИППЕРА НА КИКСТАРТЕРЕ! Сейчас мне осталось только нажать кнопку «Старт».

Внутри я расскажу: через что нам пришлось пройти, что нужно для выхода на Кикстартер, как мы за две недели зарегистрировали компанию в США и открыли банковский счет, как Stripe отказывался подтверждать нашу компанию и что будет дальше.
Читать дальше →
Всего голосов 220: ↑216 и ↓4+294
Комментарии221

Высокопроизводительная сборка мусора для C++

Время на прочтение10 мин
Количество просмотров14K
Мы уже писали о сборке мусора для JavaScript, о DOM, и о том, как всё это реализовано и оптимизировано в JS-движке V8. Правда, Chromium — это не только JavaScript. Большая часть браузера и движок рендеринга Blink, куда встроен V8, написаны на C++. JavaScript можно использовать для работы с DOM, а на экран изменения выводятся с использованием конвейера рендеринга.

Так как граф C++-объектов, имеющих отношение к DOM, тесно связан с JavaScript-объектами, команда разработчиков Chromium пару лет назад начала использовать для управления памятью, в которой хранятся эти объекты, сборщик мусора, названный Oilpan. Oilpan — это сборщик мусора, написанный на C++ и предназначенный для управления C++-памятью, которая может быть подключена к V8. Управление памятью осуществляется с использованием технологии кросс-компонентной сборки мусора. В рамках этой технологии граф связанных C++/JavaScript-объектов рассматривается как единая куча.



Этот материал является первой публикацией, посвящённой Oilpan. Здесь будет сделан обзор основных принципов, лежащих в основе данного сборщика мусора, а также — C++-API Oilpan. Мы рассмотрим некоторые возможности, поддерживаемые Oilpan, расскажем о том, как устроена работа различных подсистемам сборщика мусора. Тут же мы разберём процесс конкурентного освобождения памяти, занятой объектами.

Самое интересное здесь то, что система Oilpan является частью Blink, но сейчас осуществляется её перевод в V8, где она будет представлена в форме библиотеки для сборки мусора. Цель этого всего заключается в том, чтобы облегчить доступ к C++-механизмам сборки мусора всем тем, кто встраивает в свои платформы движок V8. Кроме того, то, что Oilpan станет библиотекой, позволит пользоваться этой системой абсолютно всем заинтересованным в ней C++-программистам.
Читать дальше →
Всего голосов 23: ↑20 и ↓3+31
Комментарии6

«Двойное дно Telegram» — Конкурс на $5000

Время на прочтение1 мин
Количество просмотров32K


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



Ни один из популярных мессенджеров не имеет защиты от подобной «атаки». Мы предлагаем тебе исправить эту ситуацию на основе открытого кода Telegram. Если твое решение окажется лучшим, то ты получишь 5000$. Твоей задачей будет разработать принцип «двойного дна» в оригинальном клиенте Telegram.

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

Подробнее о конкурсе на нашем Telegram-канале @postuf
Всего голосов 30: ↑23 и ↓7+24
Комментарии175

Spring Boot, Hibernate и Kotlin для новичков шаг за шагом

Время на прочтение7 мин
Количество просмотров36K

Всем привет, меня зовут Олег, я техлид в ДомКлике. В нашей команде ядром стека является Kotlin и Spring Boot. Хочу поделиться с вами своим опытом по взаимодействию и особенностях работы с PostgreSQL и Hibernate в связке со Spring Boot и Kotlin. Также на примере микросервиса, покажу преимущества Kotlin и его отличия от аналогичного приложения на Java. Расскажу о не совсем очевидных сложностях, с которыми могут столкнуться новички при использовании этого стека с Hibernate. Статья будет полезна разработчикам, желающим перейти на Kotlin и знакомых со Spring Boot, Hibernate Java.
Итак, начнем с каркаса проекта и зависимостей.
Всего голосов 44: ↑44 и ↓0+44
Комментарии17

Что такое CDN, и как это вообще работает

Время на прочтение15 мин
Количество просмотров38K

Сайт Texas Internet Consulting. Жив с 1987 года, страница — 7 Килобайт.

Помните время, когда главная больше 90 Килобайт считалась расточительством? С тех пор Интернет стал жирным. И понадобились инструменты, чтобы правильно раздавать трафик сразу с нескольких узлов. Например, во время очередного обновления Fortnite CDN от Akamai сумел переварить трафик мощностью в 106 Терабит в секунду. Давайте пробежимся по основным принципам этой технологии и потенциальным проблемам.

И о том, почему Minecraft в Казани тормозит, если не развернуть сервер в черте города.
Читать дальше →
Всего голосов 50: ↑48 и ↓2+74
Комментарии30

systemd десять лет спустя. Историческая и техническая ретроспектива

Время на прочтение18 мин
Количество просмотров50K
Десять лет назад был анонсирован systemd, который устроил революцию в управлении системой дистрибутивов Linux, тем самым разделив пользователей Linux на несколько лагерей. Качество и природа дебатов не сильно улучшилась со времён пламенных войн 2012-2014 годов, и systemd всё ещё остаётся не до конца понятым и изученным инструментом и с технической, и с общественной стороны, несмотря на пристальное внимание к нему сообщества.

Это пост не совсем о том, как пользоваться systemd. Тут, скорее, будет говориться об истории его возникновения, о его компонентах в целом, и о том, как понять систему, которая начиналось как просто PID 1 и стала тем, что я бы назвал middleware современного дистрибутива Linux.

А может, это просто набор крайне вольных переводов различных материалов с блогов, каналов и статей на Arch wiki. Вам решать.

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

Но прежде чем начать речь о systemd, хочу рассказать об init.
Читать дальше →
Всего голосов 76: ↑74 и ↓2+93
Комментарии438

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность